Browse Source

Merge remote-tracking branch 'origin/master'

tags/v0
sige 1 year ago
parent
commit
54525a45f6
  1. 67
      src/main/java/a8k/appbase/appret/AppRet.java
  2. 8
      src/main/java/a8k/appbase/appret/AppRetType.java
  3. 23
      src/main/java/a8k/appbase/ecode/AppRetEcodeInfo.java
  4. 2
      src/main/java/a8k/controler/A8kExceptionProcesser.java
  5. 2
      src/main/java/a8k/controler/engineer/EngineerPageControler.java
  6. 44
      src/main/java/a8k/db/AppUser.java
  7. 51
      src/main/java/a8k/db/MdbUser.java
  8. 2
      src/main/java/a8k/service/ctrl_service/DeviceInitializationCtrlService.java
  9. 2
      src/main/java/a8k/service/hardware/CommonHardwareOpeartion.java
  10. 2
      src/main/java/a8k/service/hardware/HbotControlService.java
  11. 2
      src/main/java/a8k/service/hardware/MotorTubeRackMoveCtrlService.java
  12. 2
      src/main/java/a8k/service/hardware/ReactionPlatesTransmitCtrlService.java
  13. 2
      src/main/java/a8k/service/hardware/SamplesPreProcessModuleCtrlService.java
  14. 2
      src/main/java/a8k/service/hardware/TestScript.java
  15. 6
      src/main/java/a8k/service/hardware/canbus/protocol/A8kEcode.java
  16. 8
      src/main/java/a8k/service/state_service/A8kStateMgrService.java
  17. 107
      src/main/java/a8k/service/usermgr/AppUserMgrService.java
  18. 9
      src/main/resources/db/migration/V100_3__create_table_AppUserTable.sql
  19. BIN
      zhaohe_app.db

67
src/main/java/a8k/appbase/ecode/AppRet.java → src/main/java/a8k/appbase/appret/AppRet.java

@ -1,5 +1,6 @@
package a8k.appbase.ecode;
package a8k.appbase.appret;
import a8k.appbase.ecode.AppRetEcodeInfo;
import a8k.service.hardware.canbus.protocol.CmdId;
import a8k.service.hardware.canbus.protocol.MId;
import a8k.service.hardware.canbus.protocol.A8kEcode;
@ -7,20 +8,27 @@ import a8k.appbase.HardwareException;
public class AppRet<T> {
boolean success = false;
AppRetEcodeInfo ecode;
AppRetType appRetType = AppRetType.NORMAL;
//错误信息
AppRetEcodeInfo ecode = null;
String traceInfo = null;
//携带的对象
String dataType;
T data;
//显示给用户的内容
String message = null;
long timestamp;//接口请求时间
String traceInfo;
String message;
public AppRet() {
this.timestamp = System.currentTimeMillis();
}
public boolean isSuccess() {
return success;
return !AppRetType.FAILURE.equals(appRetType);
}
public long getTimestamp() {
@ -47,11 +55,25 @@ public class AppRet<T> {
return dataType;
}
public static <T> AppRet<T> message(String message) {
AppRet<T> r = new AppRet<>();
r.appRetType = AppRetType.MESSAGE;
r.message = message;
return r;
}
public static <T> AppRet<T> reconfirm(String message) {
AppRet<T> r = new AppRet<>();
r.appRetType = AppRetType.RECONFIRM;
r.message = message;
return r;
}
public static <T> AppRet<T> success(T data) {
AppRet<T> r = new AppRet<>();
r.success = true;
r.ecode = null;
r.data = data;
r.appRetType = AppRetType.NORMAL;
r.dataType = null == data ? null : data.getClass().getSimpleName();
return r;
}
@ -59,48 +81,44 @@ public class AppRet<T> {
public static <T> AppRet<T> success() {
AppRet<T> r = new AppRet<>();
r.success = true;
r.ecode = null;
r.data = null;
r.appRetType = AppRetType.NORMAL;
return r;
}
public static <T> AppRet<T> fail(A8kEcode errorCode, MId mid, CmdId cmd) {
AppRet<T> r = new AppRet<>();
r.success = false;
r.appRetType = AppRetType.FAILURE;
r.ecode = new AppRetEcodeInfo(errorCode, mid, cmd);
r.data = null;
r.message = r.ecode.toDisPlayString();
return r;
}
public static <T> AppRet<T> fail(A8kEcode errorCode, MId mid) {
AppRet<T> r = new AppRet<>();
r.success = false;
r.appRetType = AppRetType.FAILURE;
r.ecode = new AppRetEcodeInfo(errorCode, mid, null);
r.data = null;
r.message = r.ecode.toDisPlayString();
return r;
}
public static <T> AppRet<T> fail(A8kEcode errorCode) {
AppRet<T> r = new AppRet<>();
r.success = false;
r.appRetType = AppRetType.FAILURE;
r.ecode = new AppRetEcodeInfo(errorCode, null, null);
r.data = null;
r.message = r.ecode.toDisPlayString();
return r;
}
public static <T> AppRet<T> fail(AppRet<Object> ret) {
AppRet<T> r = new AppRet<>();
r.success = false;
r.appRetType = AppRetType.FAILURE;
r.ecode = new AppRetEcodeInfo(ret.getEcode().errorCode, ret.getEcode().mid, ret.getEcode().cmd);
r.data = null;
r.message = r.ecode.toDisPlayString();
return r;
}
@ -111,17 +129,14 @@ public class AppRet<T> {
}
String trace = traceSb.toString();
AppRet<T> r = new AppRet<>();
r.appRetType = AppRetType.FAILURE;
if (e instanceof HardwareException hexcep) {
r.success = false;
r.ecode = new AppRetEcodeInfo(hexcep.getErrorCode(), hexcep.getModuleId(), hexcep.getCmdId());
r.data = null;
r.traceInfo = r.ecode.toDisPlayString()+hexcep.getExtMessage();
r.message = r.ecode.toDisPlayString()+hexcep.getExtMessage();
r.traceInfo = r.ecode.toDisPlayString() + hexcep.getExtMessage();
r.message = r.ecode.toDisPlayString() + hexcep.getExtMessage();
} else {
r.success = false;
r.ecode = new AppRetEcodeInfo(A8kEcode.CodeException, null, null);
r.data = null;
r.traceInfo = trace;
r.message = e.getMessage();
}

8
src/main/java/a8k/appbase/appret/AppRetType.java

@ -0,0 +1,8 @@
package a8k.appbase.appret;
public enum AppRetType {
NORMAL,
FAILURE,
RECONFIRM,
MESSAGE,
}

23
src/main/java/a8k/appbase/ecode/AppRetEcodeInfo.java

@ -5,11 +5,11 @@ import a8k.service.hardware.canbus.protocol.CmdId;
import a8k.service.hardware.canbus.protocol.MId;
public class AppRetEcodeInfo {
A8kEcode errorCode;
MId mid;
CmdId cmd;
public A8kEcode errorCode;
public MId mid;
public CmdId cmd;
AppRetEcodeInfo(A8kEcode errorCode, MId mid, CmdId cmd) {
public AppRetEcodeInfo(A8kEcode errorCode, MId mid, CmdId cmd) {
this.errorCode = errorCode;
this.mid = mid;
this.cmd = cmd;
@ -76,15 +76,14 @@ public class AppRetEcodeInfo {
}
public String toDisPlayString() {
if (errorCode != null && mid != null && cmd != null) {
// return String.format("ECode:%s, MID:%s, CMD:%s", errorCode, mid, cmd);
return String.format("[%s]执行[%s]出现[]错误", mid, cmd, errorCode);
} else if (errorCode != null && mid != null) {
return String.format("捕获到模块[%s]的[%s]错误", mid, errorCode);
} else if (errorCode != null) {
return String.format("捕获到[%s]错误", errorCode);
if (mid == null && cmd == null) {
return String.format("%s", errorCode.chname);
} else if (mid == null) {
return String.format("捕获到执行[%s]出现[%s]错误", cmd.chName, errorCode.chname);
} else if (cmd == null) {
return String.format("捕获到模块[%s]的[%s]错误", mid.chname, errorCode.chname);
} else {
return String.format("[%s]执行[%s]出现[]错误", mid, cmd, errorCode);
return String.format("捕获到模块[%s]执行[%s]出现[%s]错误", mid.chname, cmd.chName, errorCode.chname);
}
}
}

2
src/main/java/a8k/controler/A8kExceptionProcesser.java

@ -1,6 +1,6 @@
package a8k.controler;
import a8k.appbase.ecode.AppRet;
import a8k.appbase.appret.AppRet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;

2
src/main/java/a8k/controler/engineer/EngineerPageControler.java

@ -1,5 +1,5 @@
package a8k.controler.engineer;
import a8k.appbase.ecode.AppRet;
import a8k.appbase.appret.AppRet;
import a8k.controler.engineer.utils.*;
import a8k.db.HardwareServiceSetting;
import a8k.utils.*;

44
src/main/java/a8k/db/AppUser.java

@ -0,0 +1,44 @@
package a8k.db;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.iflytop.uf.UfActiveRecord;
import com.iflytop.uf.UfActiveRecordField;
public class AppUser extends UfActiveRecord {
@UfActiveRecordField
public String account;
@JsonIgnore
@UfActiveRecordField
public String password = "";
@UfActiveRecordField
public Integer isAdmin = 0;
@UfActiveRecordField
public Integer isBuiltInUser = 0;
// get table name
public static String getTableName() {
return "AppUser" + "Table";
}
// check if password matches
public Boolean matchPassword(String password) {
return this.password.equals(password);
}
public Boolean isAdmin() {
if (isAdmin == null) {
return false;
}
return isAdmin != 0;
}
public Boolean isBuiltInUser() {
if (isBuiltInUser == null) {
return false;
}
return isBuiltInUser != 0;
}
}

51
src/main/java/a8k/db/MdbUser.java

@ -1,51 +0,0 @@
package a8k.db;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.iflytop.uf.UfActiveRecord;
import com.iflytop.uf.UfActiveRecordField;
import org.springframework.util.DigestUtils;
public class MdbUser extends UfActiveRecord {
@UfActiveRecordField
public String account;
@JsonIgnore
@UfActiveRecordField
public String password;
@JsonIgnore
@UfActiveRecordField
public String salt;
@UfActiveRecordField
public Integer isAdmin;
@UfActiveRecordField
public Integer createdAt;
@UfActiveRecordField
public String createdBy;
@JsonIgnore
@UfActiveRecordField
public String accessToken;
@JsonIgnore
@UfActiveRecordField
public Integer accessTokenExpiredAt;
// get table name
public static String getTableName() {
return "app_users";
}
// check if password matches
public Boolean matchPassword(String password) {
String hash = this.hashPassword(password);
return this.password.equals(hash);
}
// hash password
public String hashPassword(String password) {
String salt = this.salt;
return DigestUtils.md5DigestAsHex((salt + password + salt).getBytes());
}
}

2
src/main/java/a8k/service/ctrl_service/DeviceInitializationCtrlService.java

@ -4,7 +4,7 @@ import a8k.service.hardware.canbus.protocol.A8kEcode;
import a8k.service.hardware.canbus.protocol.IOId;
import a8k.service.hardware.canbus.protocol.MId;
import a8k.appbase.HardwareException;
import a8k.appbase.ecode.AppRet;
import a8k.appbase.appret.AppRet;
import a8k.service.hardware.canbus.A8kCanBusService;
import a8k.service.hardware.CommonHardwareOpeartion;
import a8k.service.hardware.SamplesPreProcessModuleCtrlService;

2
src/main/java/a8k/service/hardware/CommonHardwareOpeartion.java

@ -2,7 +2,7 @@ package a8k.service.hardware;
import a8k.service.hardware.canbus.protocol.MId;
import a8k.appbase.HardwareException;
import a8k.appbase.ecode.AppRet;
import a8k.appbase.appret.AppRet;
import a8k.service.hardware.canbus.A8kCanBusService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Controller;

2
src/main/java/a8k/service/hardware/HbotControlService.java

@ -3,7 +3,7 @@ package a8k.service.hardware;
import a8k.appbase.ConsumableGroup;
import a8k.appbase.HardwareException;
import a8k.appbase.cfg.*;
import a8k.appbase.ecode.AppRet;
import a8k.appbase.appret.AppRet;
import a8k.controler.engineer.utils.*;
import a8k.service.hardware.canbus.A8kCanBusService;
import a8k.service.hardware.canbus.protocol.A8kEcode;

2
src/main/java/a8k/service/hardware/MotorTubeRackMoveCtrlService.java

@ -4,7 +4,7 @@ import a8k.appbase.TargetPosMeasureDirection;
import a8k.controler.engineer.utils.*;
import a8k.service.hardware.canbus.protocol.*;
import a8k.appbase.HardwareException;
import a8k.appbase.ecode.AppRet;
import a8k.appbase.appret.AppRet;
import a8k.service.hardware.canbus.A8kCanBusService;
import jakarta.annotation.Resource;
import org.slf4j.Logger;

2
src/main/java/a8k/service/hardware/ReactionPlatesTransmitCtrlService.java

@ -6,7 +6,7 @@ import a8k.controler.engineer.utils.*;
import a8k.service.hardware.canbus.protocol.A8kEcode;
import a8k.service.hardware.canbus.protocol.IOId;
import a8k.service.hardware.canbus.protocol.MId;
import a8k.appbase.ecode.AppRet;
import a8k.appbase.appret.AppRet;
import a8k.service.hardware.canbus.A8kCanBusService;
import a8k.service.hardware.canbus.protocol.RegIndex;
import a8k.algo.opt_algo.A8kOptAlgo;

2
src/main/java/a8k/service/hardware/SamplesPreProcessModuleCtrlService.java

@ -5,7 +5,7 @@ import a8k.service.hardware.canbus.protocol.A8kEcode;
import a8k.service.hardware.canbus.protocol.MId;
import a8k.appbase.A8kTubeType;
import a8k.appbase.HardwareException;
import a8k.appbase.ecode.AppRet;
import a8k.appbase.appret.AppRet;
import a8k.service.hardware.canbus.A8kCanBusService;
import jakarta.annotation.Resource;
import org.slf4j.Logger;

2
src/main/java/a8k/service/hardware/TestScript.java

@ -3,7 +3,7 @@ package a8k.service.hardware;
import a8k.appbase.ConsumableGroup;
import a8k.appbase.HardwareException;
import a8k.appbase.cfg.*;
import a8k.appbase.ecode.AppRet;
import a8k.appbase.appret.AppRet;
import a8k.service.hardware.canbus.A8kCanBusService;
import a8k.service.hardware.canbus.protocol.A8kEcode;
import a8k.service.hardware.canbus.protocol.MId;

6
src/main/java/a8k/service/hardware/canbus/protocol/A8kEcode.java

@ -8,7 +8,6 @@ public enum A8kEcode {
TubeNotHasHat(1, "全血试管未盖帽"), //
SampleLiquidLevelWasNotDetected(2, "取样时未探测到液面"),//
LargeBufferNotEnough(3, "大瓶缓冲液不足"), //
PasswdError(4, "密码错误"), //
UserDoesNotExist(5, "用户不存在"), //
GripperMPosError(6, "抓手舵机位置异常"), //
GripperZMPosError(8, "抓手升降电机位置异常"), //
@ -33,6 +32,11 @@ public enum A8kEcode {
TakeTipFail(27, "取Tip失败"),//
PutTipFail(28, "放Tip失败"),//
PasswdError(100, "密码错误"), //
UsrNotExitError(101, "用户不存在"), //
UsrExistError(102, "用户已存在"), //
UsrNotAllowBeDeleted(103, "用户不允许被删除"), //
//
// FOR HARDWARE
//

8
src/main/java/a8k/service/state_service/A8kStateMgrService.java

@ -31,10 +31,10 @@ public class A8kStateMgrService {
@PostConstruct
public void init() {
var list = UfActiveRecord.find(A8kStateDB.class);
if (list.isEmpty()) {
updateA8kState(new A8kState());
}
// var list = UfActiveRecord.find(A8kStateDB.class);
// if (list.isEmpty()) {
// updateA8kState(new A8kState());
// }
}
//

107
src/main/java/a8k/service/usermgr/AppUserMgrService.java

@ -0,0 +1,107 @@
package a8k.service.usermgr;
import a8k.appbase.appret.AppRet;
import a8k.db.AppUser;
import a8k.service.hardware.canbus.protocol.A8kEcode;
import com.iflytop.uf.UfActiveRecord;
import jakarta.annotation.PostConstruct;
import org.slf4j.Logger;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
@Component
public class AppUserMgrService {
static Logger logger = org.slf4j.LoggerFactory.getLogger(AppUserMgrService.class);
AppUser loginUsr;
@PostConstruct
public void init() {
logger.info("UserMgrService init");
AppUser admin = getUser("管理员");
if (admin == null) {
admin = new AppUser();
admin.account = "管理员";
admin.password = "0000";
admin.isAdmin = 1;
admin.isBuiltInUser = 1;
admin.save();
}
}
List<AppUser> getUserList() {
return UfActiveRecord.find(AppUser.class);
}
AppUser getUser(String account) {
return UfActiveRecord.findOne(AppUser.class, Map.of("account", account));
}
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// EXT FUNC
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
public AppRet<AppUser> login(String account, String password) {
var user = getUser(account);
if (user == null) {
return AppRet.fail(A8kEcode.UsrNotExitError);
}
if (!user.matchPassword(password)) {
return AppRet.fail(A8kEcode.PasswdError);
}
loginUsr = user;
return AppRet.success(user);
}
public AppRet<AppUser> getLoginUsr() {
return AppRet.success(loginUsr);
}
public AppRet<List<AppUser>> loginList() {
return AppRet.success(getUserList());
}
public AppRet<AppUser> addUser(String account, String password, int isAdmin) {
if (getUser(account) != null) {
return AppRet.fail(A8kEcode.UsrExistError);
}
var user = new AppUser();
user.account = account;
user.password = password;
user.isAdmin = isAdmin;
user.save();
return AppRet.success(user);
}
public AppRet<AppUser> delUser(String account) {
var user = getUser(account);
if (user == null) {
return AppRet.fail(A8kEcode.UsrNotExitError);
}
if (user.isBuiltInUser == 1) {
return AppRet.fail(A8kEcode.UsrNotAllowBeDeleted);
}
user.delete();
return AppRet.success(user);
}
public AppRet<AppUser> modifyUser(String account, String password, int isAdmin) {
var user = getUser(account);
if (user == null) {
return AppRet.fail(A8kEcode.UsrNotExitError);
}
user.password = password;
user.isAdmin = isAdmin;
user.save();
return AppRet.success(user);
}
public AppRet<AppUser> getLoginUsrInfo() {
return AppRet.success(loginUsr);
}
}

9
src/main/resources/db/migration/V100_3__create_table_AppUserTable.sql

@ -0,0 +1,9 @@
CREATE TABLE "AppUserTable"
(
"id" text NOT NULL,
"account" text,
"password" text,
"isAdmin" integer,
"isBuiltInUser" integer,
PRIMARY KEY ("id")
);

BIN
zhaohe_app.db

Loading…
Cancel
Save