Browse Source

Merge remote-tracking branch 'origin/master'

tags/v0
sige 1 year ago
parent
commit
c4c673315c
  1. 8
      README.md
  2. 18
      src/main/java/a8k/appbean/AppErrorCode.java
  3. 42
      src/main/java/a8k/controller/TmpTestController.java
  4. 9
      src/main/java/a8k/service/A8kStateMgrService.java
  5. 18
      src/main/java/a8k/service/appdb/dao/AppUsrDao.java
  6. 13
      src/main/java/a8k/service/appdb/entity/AppSettingIterm.java
  7. 37
      src/main/java/a8k/service/appdb/entity/AppUsr.java
  8. 5
      src/main/java/a8k/service/ctrl_service/ConsumableLoadingService.java
  9. 31
      src/main/java/a8k/service/ctrl_service/DeviceInitializationCtrlService.java
  10. 8
      src/main/java/a8k/service/ctrl_service/DeviceShutdowCtrlService.java
  11. 9
      src/main/java/a8k/service/data_service/AppSettingService.java
  12. 76
      src/main/java/a8k/service/data_service/UsrMgrService.java
  13. 2
      src/main/java/a8k/service/db/dao/SamplesPreProcessModuleCtrlParamsService.java
  14. 1
      src/main/java/a8k/service/hardware/ReactionPlatesTransmitCtrlService.java
  15. 5
      src/main/java/a8k/service/state_service/A8kState.java
  16. 19
      src/main/java/a8k/service/state_service/A8kStateDB.java
  17. 140
      src/main/java/a8k/service/state_service/A8kStateMgrService.java
  18. 15
      src/main/resources/application-zhaohe_pc.yml
  19. BIN
      zhaohe_app.db

8
README.md

@ -1,4 +1,12 @@
```
TODO:
1. 数据库文件是否被破坏检查
2. 数据库文件如果被破坏,自动恢复默认配置
```
```
==========================模块参数-维护===========================
参数类型,模块参数:

18
src/main/java/a8k/appbean/AppErrorCode.java

@ -1,11 +1,13 @@
package a8k.appbean;
public enum AppErrorCode {
Success("Success", "成功", 0), //成功
TubeNotHasHat("TubeNotHasHat", "全血试管未盖帽", 1), //试管没有帽子
SampleLiquidLevelWasNotDetected("SampleLiquidLevelWasNotDetected", "取样时未探测到液面", 2),//未探测到液面
LargeBufferNotEnough("LargeBufferNotEnough", "大瓶缓冲液不足", 3); //未探测到液面
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;
@ -24,7 +26,11 @@ public enum AppErrorCode {
return name;
}
public int getErrorIndex() {
public String getChName() {
return chName;
}
public int getErrorCode() {
return errorIndex;
}

42
src/main/java/a8k/controller/TmpTestController.java

@ -1,9 +1,12 @@
package a8k.controller;
import a8k.a8k_can_protocol.CmdId;
import a8k.a8k_can_protocol.ModuleId;
import a8k.appbean.AppErrorCode;
import a8k.appbean.HardwareException;
import a8k.base_hardware.A8kCanBusService;
import a8k.service.A8kDebugTaskExecutorService;
import a8k.service.ctrl_service.DeviceInitializationCtrlService;
import a8k.service.hardware.MotorTubeRackMoveCtrlService;
import com.iflytop.uf.util.UfClassHelper;
import jakarta.annotation.Resource;
@ -12,30 +15,35 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
import java.util.Map;
@Controller
public class TmpTestController {
@Resource
private A8kCanBusService a8kCanBusService;
private A8kCanBusService a8kCanBusService;
@Resource
private MotorTubeRackMoveCtrlService motorTubeRackMoveCtrlService;
@Resource
private A8kDebugTaskExecutorService a8kDebugTaskExecutorService;
private A8kDebugTaskExecutorService a8kDebugTaskExecutorService;
@Resource
private DeviceInitializationCtrlService deviceInitializationCtrlService;
@PostMapping("/api/tmp-test/execute-service-method")
@ResponseBody
public String executeServiceMethod( @RequestBody Map<String,Object> params ) throws NoSuchMethodException {
Object service = this.motorTubeRackMoveCtrlService;
String methodName = (String)params.get("method");
List<Object> methodArgs = (List<Object>)params.get("params");
Object result = UfClassHelper.invokeMethod(service, methodName, methodArgs);
public String executeServiceMethod(@RequestBody Map<String, Object> params) throws NoSuchMethodException {
Object service = this.motorTubeRackMoveCtrlService;
String methodName = (String) params.get("method");
List<Object> methodArgs = (List<Object>) params.get("params");
Object result = UfClassHelper.invokeMethod(service, methodName, methodArgs);
return "OK";
}
@PostMapping("/api/tmp-test/update-service-params")
@ResponseBody
public String updateServiceParams( @RequestBody Map<String,Object> params ) {
public String updateServiceParams(@RequestBody Map<String, Object> params) {
return "OK";
}
@ -48,17 +56,13 @@ public class TmpTestController {
@GetMapping("/tmp-test/a8k-can-bus-service-call")
@ResponseBody
public String a8kCanBusServiceCall() throws HardwareException, InterruptedException {
this.a8kCanBusService.callcmd(
ModuleId.ServoTubeRackTubeRotateModule,
CmdId.kmini_servo_enable,
new Integer[]{1}
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeRackFeedModule,
CmdId.kstep_motor_easy_move_by,
new Integer[]{5000},
20000
);
this.a8kCanBusService.callcmd(ModuleId.ServoTubeRackTubeRotateModule, CmdId.kmini_servo_enable, new Integer[]{1});
this.a8kCanBusService.callblockcmd(ModuleId.MotorTubeRackFeedModule, CmdId.kstep_motor_easy_move_by, new Integer[]{5000}, 20000);
return "OK";
}
@PostMapping("/api/zhaohe_test/initialize_device")
public AppErrorCode initialize_device() {
return deviceInitializationCtrlService.initializeDevice();
}
}

9
src/main/java/a8k/service/A8kStateMgrService.java

@ -1,9 +0,0 @@
package a8k.service;
import org.springframework.stereotype.Component;
@Component
public class A8kStateMgrService {
}

18
src/main/java/a8k/service/appdb/dao/AppUsrDao.java

@ -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;
}
}

13
src/main/java/a8k/service/appdb/entity/AppSettingIterm.java

@ -1,4 +1,17 @@
package a8k.service.appdb.entity;
import com.iflytop.uf.UfActiveRecordField;
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";
}
}

37
src/main/java/a8k/service/appdb/entity/AppUsr.java

@ -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";
}
}

5
src/main/java/a8k/service/ConsumableLoadingService.java → src/main/java/a8k/service/ctrl_service/ConsumableLoadingService.java

@ -1,6 +1,5 @@
package a8k.service;
package a8k.service.ctrl_service;
import com.iflytop.a800.device.Pipette;
import jakarta.annotation.PostConstruct;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -15,11 +14,9 @@ public class ConsumableLoadingService implements Runnable {
}
@PostConstruct
public void init(){
//启动线程实例
LOG.error("Hello................................................................................................");
}
}

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

@ -0,0 +1,31 @@
package a8k.service.ctrl_service;
import a8k.appbean.AppErrorCode;
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 AppErrorCode initializeDevice() {
logger.info("Initializing device ...");
return AppErrorCode.Success;
}
}

8
src/main/java/a8k/service/ctrl_service/DeviceShutdowCtrlService.java

@ -0,0 +1,8 @@
package a8k.service.ctrl_service;
import org.springframework.stereotype.Component;
@Component
public class DeviceShutdowCtrlService {
}

9
src/main/java/a8k/service/data_service/AppSettingService.java

@ -0,0 +1,9 @@
package a8k.service.data_service;
import org.springframework.stereotype.Component;
@Component
public class AppSettingService {
}

76
src/main/java/a8k/service/data_service/UsrMgrService.java

@ -0,0 +1,76 @@
package a8k.service.data_service;
import a8k.appbean.AppErrorCode;
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 AppErrorCode addUsr(AppUsr usr) {
return AppErrorCode.Success;
}
//TODO
public AppErrorCode updateUsr(String uname, String passwd) {
return AppErrorCode.Success;
}
/**
*
* @param loginType 登录类型 LOGIN_TYPE_APPLOGIN_TYPE_DEBUG_PAGE
* @param uname 用户名称
* @param passwd 密码
* @return Success or PasswdError or UserDoesNotExist
*
*
*/
public AppErrorCode verifyAndLoginAppUsr(Integer loginType, String uname, String passwd) {
/*
*TODO
* 实现描述:
* 1. 校验成功,则调用A8kStateMgrService.loginAppUsr 或者 A8kStateMgrService.loginDebugPageUsr
*/
return AppErrorCode.UserDoesNotExist;
}
/**
* @param loginType 登录类型 LOGIN_TYPE_APPLOGIN_TYPE_DEBUG_PAGE
*/
public void unloginAppUsr(Integer loginType) {
if (loginType == LOGIN_TYPE_APP) {
state.unloginAppUsr();
} else if (loginType == LOGIN_TYPE_DEBUG_PAGE) {
state.unloginAppUsr();
}
}
}

2
src/main/java/a8k/service/db/dao/SamplesPreProcessModuleCtrlParamsService.java

@ -55,8 +55,6 @@ public class SamplesPreProcessModuleCtrlParamsService {
return 0;
}
/*
* 平移电机相关参数
*/

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

@ -1,6 +1,5 @@
package a8k.service.hardware;
import a8k.appbean.AppErrorCode;
import org.springframework.stereotype.Component;

5
src/main/java/a8k/service/state_service/A8kState.java

@ -0,0 +1,5 @@
package a8k.service.state_service;
public class A8kState {
public Boolean devicePoweredOffNormally = false; //设备是否正常关机
}

19
src/main/java/a8k/service/state_service/A8kStateDB.java

@ -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";
}
}

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

@ -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);
}
}
}

15
src/main/resources/application-zhaohe_pc.yml

@ -0,0 +1,15 @@
server :
port : 80
spring:
datasource:
url: jdbc:sqlite:D:/java_workspace/a8000/zhaohe_app.db
driver-class-name: org.sqlite.JDBC
device:
connections:
- name : zcancmder
key : zcancmder
enable : true
type : ZcancmderWebsocket
uri: ws://192.168.8.10:19005

BIN
zhaohe_app.db

Loading…
Cancel
Save