21 changed files with 454 additions and 96 deletions
-
8README.md
-
31src/main/java/a8k/appbean/AppErrorCode.java
-
37src/main/java/a8k/appbean/Appecode.java
-
26src/main/java/a8k/controller/TmpTestController.java
-
9src/main/java/a8k/service/A8kStateMgrService.java
-
18src/main/java/a8k/service/appdb/dao/AppUsrDao.java
-
13src/main/java/a8k/service/appdb/entity/AppSettingIterm.java
-
37src/main/java/a8k/service/appdb/entity/AppUsr.java
-
5src/main/java/a8k/service/ctrl_service/ConsumableLoadingService.java
-
31src/main/java/a8k/service/ctrl_service/DeviceInitializationCtrlService.java
-
8src/main/java/a8k/service/ctrl_service/DeviceShutdowCtrlService.java
-
9src/main/java/a8k/service/data_service/AppSettingService.java
-
76src/main/java/a8k/service/data_service/UsrMgrService.java
-
2src/main/java/a8k/service/db/dao/SamplesPreProcessModuleCtrlParamsService.java
-
6src/main/java/a8k/service/hardware/HbotControlService.java
-
1src/main/java/a8k/service/hardware/ReactionPlatesTransmitCtrlService.java
-
11src/main/java/a8k/service/hardware/SamplesPreProcessModuleCtrlService.java
-
5src/main/java/a8k/service/state_service/A8kState.java
-
19src/main/java/a8k/service/state_service/A8kStateDB.java
-
140src/main/java/a8k/service/state_service/A8kStateMgrService.java
@ -1,31 +0,0 @@ |
|||||
package a8k.appbean; |
|
||||
|
|
||||
public enum AppErrorCode { |
|
||||
Success("Success", "成功", 0), //成功 |
|
||||
TubeNotHasHat("TubeNotHasHat", "全血试管未盖帽", 1), //试管没有帽子 |
|
||||
SampleLiquidLevelWasNotDetected("SampleLiquidLevelWasNotDetected", "取样时未探测到液面", 2),//未探测到液面 |
|
||||
LargeBufferNotEnough("LargeBufferNotEnough", "大瓶缓冲液不足", 3); //未探测到液面 |
|
||||
|
|
||||
|
|
||||
final private String name; |
|
||||
final private String chName; |
|
||||
final private int errorIndex; |
|
||||
|
|
||||
public int mid; |
|
||||
|
|
||||
private AppErrorCode(String name, String chname, int errorIndex) { |
|
||||
this.name = name; |
|
||||
this.chName = chname; |
|
||||
this.errorIndex = errorIndex; |
|
||||
} |
|
||||
|
|
||||
|
|
||||
public String toString() { |
|
||||
return name; |
|
||||
} |
|
||||
|
|
||||
public int getErrorIndex() { |
|
||||
return errorIndex; |
|
||||
} |
|
||||
|
|
||||
} |
|
@ -0,0 +1,37 @@ |
|||||
|
package a8k.appbean; |
||||
|
|
||||
|
public enum Appecode { |
||||
|
Success("Success", "成功", 0), // |
||||
|
TubeNotHasHat("TubeNotHasHat", "全血试管未盖帽", 1), // |
||||
|
SampleLiquidLevelWasNotDetected("SampleLiquidLevelWasNotDetected", "取样时未探测到液面", 2),// |
||||
|
LargeBufferNotEnough("LargeBufferNotEnough", "大瓶缓冲液不足", 3), // |
||||
|
PasswdError("PasswdError", "密码错误", 4), // |
||||
|
UserDoesNotExist("UserDoesNotExist", "用户不存在", 5), // |
||||
|
; |
||||
|
|
||||
|
final private String name; |
||||
|
final private String chName; |
||||
|
final private int errorIndex; |
||||
|
|
||||
|
public int mid; |
||||
|
|
||||
|
private Appecode(String name, String chname, int errorIndex) { |
||||
|
this.name = name; |
||||
|
this.chName = chname; |
||||
|
this.errorIndex = errorIndex; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public String toString() { |
||||
|
return name; |
||||
|
} |
||||
|
|
||||
|
public String getChName() { |
||||
|
return chName; |
||||
|
} |
||||
|
|
||||
|
public int getErrorCode() { |
||||
|
return errorIndex; |
||||
|
} |
||||
|
|
||||
|
} |
@ -1,9 +0,0 @@ |
|||||
package a8k.service; |
|
||||
|
|
||||
import org.springframework.stereotype.Component; |
|
||||
|
|
||||
@Component |
|
||||
public class A8kStateMgrService { |
|
||||
|
|
||||
|
|
||||
} |
|
@ -0,0 +1,18 @@ |
|||||
|
package a8k.service.appdb.dao; |
||||
|
|
||||
|
import a8k.service.appdb.entity.AppUsr; |
||||
|
import org.springframework.stereotype.Component; |
||||
|
|
||||
|
import java.util.ArrayList; |
||||
|
import java.util.List; |
||||
|
|
||||
|
@Component |
||||
|
public class AppUsrDao { |
||||
|
List<AppUsr> getAllUsr() { |
||||
|
return null; |
||||
|
} |
||||
|
|
||||
|
AppUsr getAppUsr() { |
||||
|
return null; |
||||
|
} |
||||
|
} |
@ -1,4 +1,17 @@ |
|||||
package a8k.service.appdb.entity; |
package a8k.service.appdb.entity; |
||||
|
import com.iflytop.uf.UfActiveRecordField; |
||||
|
|
||||
public class AppSettingIterm { |
public class AppSettingIterm { |
||||
|
@UfActiveRecordField |
||||
|
public String key; |
||||
|
@UfActiveRecordField |
||||
|
public String serviceName; //常量"AppSetting" |
||||
|
@UfActiveRecordField |
||||
|
public String valType; |
||||
|
@UfActiveRecordField |
||||
|
public String val; |
||||
|
|
||||
|
public static String getTableName() { |
||||
|
return "HardwareServiceSetting" + "Table"; |
||||
|
} |
||||
} |
} |
@ -0,0 +1,37 @@ |
|||||
|
package a8k.service.appdb.entity; |
||||
|
|
||||
|
import com.iflytop.uf.UfActiveRecordField; |
||||
|
|
||||
|
public class AppUsr { |
||||
|
|
||||
|
/* |
||||
|
* |
||||
|
* 内置用户有两个 |
||||
|
* admin |
||||
|
* |
||||
|
* |
||||
|
* isMgr: |
||||
|
* 可以删除其他用户 |
||||
|
* 允许打开设备调试页面,用户通过电脑访问设备调试网页,需要登录,且此时只有isMgr用户可以登录。 |
||||
|
* |
||||
|
*/ |
||||
|
|
||||
|
@UfActiveRecordField |
||||
|
public String name; |
||||
|
|
||||
|
@UfActiveRecordField |
||||
|
public String passwd; |
||||
|
|
||||
|
@UfActiveRecordField |
||||
|
public Boolean builtInSser; //如果为true,该用户不允许被删除,不允许被修改名字 |
||||
|
|
||||
|
@UfActiveRecordField |
||||
|
public Boolean isMgr; //如果为true, 该用户为管理员权限 |
||||
|
|
||||
|
@UfActiveRecordField |
||||
|
public Boolean isDisplay; //是否显示在前端 |
||||
|
|
||||
|
public static String getTableName() { |
||||
|
return "AppUsr" + "Table"; |
||||
|
} |
||||
|
} |
@ -0,0 +1,31 @@ |
|||||
|
package a8k.service.ctrl_service; |
||||
|
|
||||
|
import a8k.appbean.Appecode; |
||||
|
import org.slf4j.Logger; |
||||
|
import org.slf4j.LoggerFactory; |
||||
|
import org.springframework.stereotype.Component; |
||||
|
|
||||
|
@Component |
||||
|
public class DeviceInitializationCtrlService { |
||||
|
public static final Logger logger = LoggerFactory.getLogger(DeviceInitializationCtrlService.class); |
||||
|
|
||||
|
/* |
||||
|
* |
||||
|
* 初始化设备: |
||||
|
* 1. 检查试管转移通道是否畅通 |
||||
|
* 2. 检查摇匀模组的各个组件是否在指定位置 |
||||
|
* 1.抓手升降 |
||||
|
* 2.试管夹紧 |
||||
|
* 3.抓手平移 |
||||
|
* 4.抓手 |
||||
|
* |
||||
|
*/ |
||||
|
|
||||
|
|
||||
|
public Appecode initializeDevice() { |
||||
|
logger.info("Initializing device ..."); |
||||
|
return Appecode.Success; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
@ -0,0 +1,8 @@ |
|||||
|
package a8k.service.ctrl_service; |
||||
|
|
||||
|
import org.springframework.stereotype.Component; |
||||
|
|
||||
|
@Component |
||||
|
public class DeviceShutdowCtrlService { |
||||
|
|
||||
|
} |
@ -0,0 +1,9 @@ |
|||||
|
package a8k.service.data_service; |
||||
|
|
||||
|
import org.springframework.stereotype.Component; |
||||
|
|
||||
|
@Component |
||||
|
public class AppSettingService { |
||||
|
|
||||
|
|
||||
|
} |
@ -0,0 +1,76 @@ |
|||||
|
package a8k.service.data_service; |
||||
|
|
||||
|
import a8k.appbean.Appecode; |
||||
|
import a8k.service.appdb.dao.AppUsrDao; |
||||
|
import a8k.service.appdb.entity.AppUsr; |
||||
|
import a8k.service.state_service.A8kStateMgrService; |
||||
|
import jakarta.annotation.Resource; |
||||
|
import org.springframework.stereotype.Component; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
@Component |
||||
|
public class UsrMgrService { |
||||
|
|
||||
|
|
||||
|
static final int LOGIN_TYPE_APP = 1; //正常页面,用户登录 |
||||
|
static final int LOGIN_TYPE_DEBUG_PAGE = 2; //调试页面,用户登录 |
||||
|
|
||||
|
@Resource |
||||
|
AppUsrDao appUsrDao; |
||||
|
|
||||
|
@Resource |
||||
|
A8kStateMgrService state; |
||||
|
|
||||
|
/* |
||||
|
* 数据库更删改查 |
||||
|
*/ |
||||
|
|
||||
|
//TODO |
||||
|
public List<AppUsr> getUsr() { |
||||
|
return null; |
||||
|
} |
||||
|
|
||||
|
//TODO |
||||
|
public Appecode addUsr(AppUsr usr) { |
||||
|
return Appecode.Success; |
||||
|
} |
||||
|
|
||||
|
//TODO |
||||
|
public Appecode updateUsr(String uname, String passwd) { |
||||
|
return Appecode.Success; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* |
||||
|
* @param loginType 登录类型 LOGIN_TYPE_APP,LOGIN_TYPE_DEBUG_PAGE |
||||
|
* @param uname 用户名称 |
||||
|
* @param passwd 密码 |
||||
|
* @return Success or PasswdError or UserDoesNotExist |
||||
|
* |
||||
|
* |
||||
|
*/ |
||||
|
public Appecode verifyAndLoginAppUsr(Integer loginType, String uname, String passwd) { |
||||
|
/* |
||||
|
*TODO |
||||
|
* 实现描述: |
||||
|
* 1. 校验成功,则调用A8kStateMgrService.loginAppUsr 或者 A8kStateMgrService.loginDebugPageUsr |
||||
|
*/ |
||||
|
return Appecode.UserDoesNotExist; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* @param loginType 登录类型 LOGIN_TYPE_APP,LOGIN_TYPE_DEBUG_PAGE |
||||
|
*/ |
||||
|
public void unloginAppUsr(Integer loginType) { |
||||
|
if (loginType == LOGIN_TYPE_APP) { |
||||
|
state.unloginAppUsr(); |
||||
|
} else if (loginType == LOGIN_TYPE_DEBUG_PAGE) { |
||||
|
state.unloginAppUsr(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
@ -0,0 +1,5 @@ |
|||||
|
package a8k.service.state_service; |
||||
|
|
||||
|
public class A8kState { |
||||
|
public Boolean devicePoweredOffNormally = false; //设备是否正常关机 |
||||
|
} |
@ -0,0 +1,19 @@ |
|||||
|
package a8k.service.state_service; |
||||
|
|
||||
|
import com.fasterxml.jackson.core.JsonProcessingException; |
||||
|
import com.fasterxml.jackson.databind.ObjectMapper; |
||||
|
import com.iflytop.uf.UfActiveRecord; |
||||
|
import com.iflytop.uf.UfActiveRecordField; |
||||
|
|
||||
|
public class A8kStateDB extends UfActiveRecord { |
||||
|
|
||||
|
@UfActiveRecordField |
||||
|
public String stateJson; //A8k状态Json |
||||
|
|
||||
|
public static String getTableName() { |
||||
|
return "A8kStateDB" + "Table"; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
@ -0,0 +1,140 @@ |
|||||
|
package a8k.service.state_service; |
||||
|
|
||||
|
import a8k.service.appdb.entity.AppUsr; |
||||
|
import com.fasterxml.jackson.core.JsonProcessingException; |
||||
|
import com.fasterxml.jackson.databind.ObjectMapper; |
||||
|
import com.iflytop.uf.UfActiveRecord; |
||||
|
import com.iflytop.uf.util.UfJsonHelper; |
||||
|
import jakarta.annotation.PostConstruct; |
||||
|
import org.jetbrains.annotations.NotNull; |
||||
|
import org.slf4j.Logger; |
||||
|
import org.slf4j.LoggerFactory; |
||||
|
import org.springframework.boot.json.JacksonJsonParser; |
||||
|
import org.springframework.stereotype.Component; |
||||
|
|
||||
|
@Component |
||||
|
public class A8kStateMgrService { |
||||
|
/* |
||||
|
* 该服务约定: |
||||
|
* 1. 前端只能读取该服务中的状态,不能设置,设置只能通过其他服务进行设置 |
||||
|
* |
||||
|
* |
||||
|
*/ |
||||
|
|
||||
|
public static final Logger logger = LoggerFactory.getLogger(A8kStateMgrService.class); |
||||
|
|
||||
|
|
||||
|
AppUsr appusr; //用户是否登录 |
||||
|
AppUsr debugPageUsr; //调试页面用户是否登录 |
||||
|
|
||||
|
Boolean deviceInited = false; //设备是否初始化过 |
||||
|
Boolean devicePoweredOffNormally = false; //设备是否正常关机 |
||||
|
|
||||
|
@PostConstruct |
||||
|
public void init() { |
||||
|
var one = UfActiveRecord.find(A8kStateDB.class).get(0); |
||||
|
if (one == null) { |
||||
|
updateA8kState(new A8kState()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// |
||||
|
// 用户状态 |
||||
|
// |
||||
|
public void loginAppUsr(@NotNull AppUsr appusr) { |
||||
|
this.appusr = appusr; |
||||
|
} |
||||
|
|
||||
|
public void unloginAppUsr() { |
||||
|
this.appusr = null; |
||||
|
} |
||||
|
|
||||
|
public boolean isAppUsrLogin() { |
||||
|
return appusr != null; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public void loginDebugPageUsr(@NotNull AppUsr debugPageUsr) { |
||||
|
this.debugPageUsr = debugPageUsr; |
||||
|
} |
||||
|
|
||||
|
public void unloginDebugPageUsr() { |
||||
|
this.debugPageUsr = null; |
||||
|
} |
||||
|
|
||||
|
public boolean isDebugPageUsrLogin() { |
||||
|
return debugPageUsr != null; |
||||
|
} |
||||
|
|
||||
|
// |
||||
|
// 设备初始化状态 |
||||
|
// |
||||
|
|
||||
|
/** |
||||
|
* 机器是否初始化过 |
||||
|
* @return 机器是否初始化过 |
||||
|
*/ |
||||
|
public boolean isDeviceInited() { |
||||
|
return deviceInited; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* @return 返回上一次设备是否正常关机 |
||||
|
*/ |
||||
|
public boolean isTheDevicePoweredOffNormally() { |
||||
|
return devicePoweredOffNormally; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 设备初始化完成,开机后设备初始化完成时候,调用该方法 |
||||
|
*/ |
||||
|
public void setDeviceInited() { |
||||
|
this.deviceInited = true; |
||||
|
this.devicePoweredOffNormally = false; |
||||
|
|
||||
|
A8kState state = getA8kState(); |
||||
|
state.devicePoweredOffNormally = false; |
||||
|
updateA8kState(state); |
||||
|
} |
||||
|
|
||||
|
public void setDevicePoweredOffNormally() { |
||||
|
this.devicePoweredOffNormally = true; |
||||
|
|
||||
|
A8kState state = getA8kState(); |
||||
|
state.devicePoweredOffNormally = true; |
||||
|
updateA8kState(state); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
A8kState getA8kState() { |
||||
|
var one = UfActiveRecord.find(A8kStateDB.class).get(0); |
||||
|
assert one != null; |
||||
|
|
||||
|
ObjectMapper mapper = new ObjectMapper(); |
||||
|
try { |
||||
|
return mapper.readValue(one.stateJson, A8kState.class); |
||||
|
} catch (JsonProcessingException e) { |
||||
|
assert false; |
||||
|
return null; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void updateA8kState(A8kState state) { |
||||
|
var one = UfActiveRecord.find(A8kStateDB.class).get(0); |
||||
|
|
||||
|
if (one == null) { |
||||
|
one = new A8kStateDB(); |
||||
|
} |
||||
|
|
||||
|
ObjectMapper mapper = new ObjectMapper(); |
||||
|
|
||||
|
try { |
||||
|
one.stateJson = mapper.writeValueAsString(state); |
||||
|
one.save(); |
||||
|
} catch (JsonProcessingException e) { |
||||
|
throw new RuntimeException(e); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue