diff --git a/src/main/java/a8k/service/appcfgs/A8kDeviceCfg.java b/src/main/java/a8k/service/appcfgs/A8kDeviceCfg.java new file mode 100644 index 0000000..e1f377d --- /dev/null +++ b/src/main/java/a8k/service/appcfgs/A8kDeviceCfg.java @@ -0,0 +1,12 @@ +package a8k.service.appcfgs; + +import a8k.service.base.samplecfg.SampleTubeHolderCfg; + +import java.util.ArrayList; +import java.util.List; + +public class A8kDeviceCfg { + //配置 + public List cfgs = new ArrayList<>(); + +} diff --git a/src/main/java/a8k/service/appcfgs/A8kDeviceCfgMgrService.java b/src/main/java/a8k/service/appcfgs/A8kDeviceCfgMgrService.java new file mode 100644 index 0000000..5bdb7ed --- /dev/null +++ b/src/main/java/a8k/service/appcfgs/A8kDeviceCfgMgrService.java @@ -0,0 +1,107 @@ +package a8k.service.appcfgs; + +import a8k.appbase.appret.AppRet; +import a8k.controler.engineer.utils.EngineerPageTab; +import a8k.controler.engineer.utils.EnginnerPageAction; +import a8k.service.base.BloodType; +import a8k.service.base.samplecfg.SampleTubeCfg; +import a8k.service.base.samplecfg.SampleTubeHolderCfg; +import a8k.service.hardware.canbus.protocol.A8kEcode; +import org.springframework.stereotype.Component; + +@Component +@EngineerPageTab(name = "A8kDeviceCfgMgrService") +public class A8kDeviceCfgMgrService { + A8kDeviceCfg deviceCfg = new A8kDeviceCfg(); + + + private SampleTubeHolderCfg dbFindCfg(String tubeHolderCfgUUID) { + for (SampleTubeHolderCfg cfg : deviceCfg.cfgs) { + if (cfg.uuid.equals(tubeHolderCfgUUID)) { + return cfg; + } + } + return null; + } + + private void dbRemoveCfg(String tubeHolderCfgUUID) { + deviceCfg.cfgs.removeIf(cfg -> cfg.uuid.equals(tubeHolderCfgUUID)); + } + + private SampleTubeCfg dbFindTubeCfg(String tubeHolderCfgUUID, Integer tubeIndex) { + SampleTubeHolderCfg cfg = dbFindCfg(tubeHolderCfgUUID); + if (cfg == null) { + return null; + } + return cfg.tubeCfgs.get(tubeIndex); + } + + + @EnginnerPageAction(name = "获取设备配置",group = "基础",groupOrder = 1) + public A8kDeviceCfg getA8kDeviceCfg() { + return deviceCfg; + } + + @EnginnerPageAction(name = "添加<试管架>配置",group = "试管架",groupOrder = 2) + public AppRet addCfg() { + SampleTubeHolderCfg cfg = new SampleTubeHolderCfg(); + deviceCfg.cfgs.add(cfg); + return AppRet.success(cfg); + } + + @EnginnerPageAction(name = "删除<试管架>配置",group = "试管架") + public AppRet removeCfg(String tubeHolderCfgUUID) { + dbRemoveCfg(tubeHolderCfgUUID); + return AppRet.success(); + } + + + @EnginnerPageAction(name = "激活<试管架>配置",group = "试管架") + public AppRet activeCfg(String tubeHolderCfgUUID, Boolean active) { + SampleTubeHolderCfg cfg = dbFindCfg(tubeHolderCfgUUID); + if (cfg == null) { + return AppRet.fail(A8kEcode.TubeHolderCfgNotExist); + } + cfg.active = active; + return AppRet.success(); + } + + + @EnginnerPageAction(name = "修改<试管>用户信息配置",group = "试管",groupOrder = 3) + public AppRet updateTubeUsrCfg(String uuid, Integer tubeIndex, String udpid, String barcodeid) { + SampleTubeHolderCfg cfg = dbFindCfg(uuid); + assert cfg != null; + cfg.tubeCfgs.get(tubeIndex).barcodeid = barcodeid; + cfg.tubeCfgs.get(tubeIndex).udpid = udpid; + return AppRet.success(cfg.tubeCfgs.get(tubeIndex)); + } + + + @EnginnerPageAction(name = "清除<试管>项目信息",group = "试管") + public AppRet clearTubeProjectCfg(String uuid, Integer tubeIndex) { + SampleTubeHolderCfg cfg = dbFindCfg(uuid); + assert cfg != null; + cfg.tubeCfgs.get(tubeIndex).projectCodes.clear(); + cfg.tubeCfgs.get(tubeIndex).bloodType = BloodType.WHOLE_BLOOD; + return AppRet.success(cfg.tubeCfgs.get(tubeIndex)); + } + + @EnginnerPageAction(name = "添加<试管>项目信息",group = "试管") + public AppRet addTubeProjectCode(String uuid, Integer tubeIndex, String pjc) { + SampleTubeHolderCfg cfg = dbFindCfg(uuid); + assert cfg != null; + SampleTubeCfg tubeCfg = new SampleTubeCfg(); + tubeCfg.projectCodes.add(pjc); + cfg.tubeCfgs.add(tubeCfg); + return AppRet.success(tubeCfg); + } + + @EnginnerPageAction(name = "设置<试管>血型",group = "试管") + public AppRet setTubeBloodType(String uuid, Integer tubeIndex, BloodType bloodType) { + SampleTubeCfg tubeCfg = dbFindTubeCfg(uuid, tubeIndex); + assert tubeCfg != null; + tubeCfg.bloodType = bloodType; + return AppRet.success(); + } + +} diff --git a/src/main/java/a8k/service/base/A8kDeviceState.java b/src/main/java/a8k/service/base/A8kDeviceState.java index df71334..ca0a13a 100644 --- a/src/main/java/a8k/service/base/A8kDeviceState.java +++ b/src/main/java/a8k/service/base/A8kDeviceState.java @@ -26,8 +26,6 @@ public class A8kDeviceState { public TubeHolder processingTubeHolder = null; //温度 public Integer temperature; - //配置 - public List cfgs = new ArrayList<>(); Boolean deviceInited = false; //设备是否初始化过 Boolean devicePoweredOffNormally = false; //设备是否正常关机 diff --git a/src/main/java/a8k/service/base/sample/SampleInfo.java b/src/main/java/a8k/service/base/sample/SampleInfo.java index c6105f8..000aa1b 100644 --- a/src/main/java/a8k/service/base/sample/SampleInfo.java +++ b/src/main/java/a8k/service/base/sample/SampleInfo.java @@ -5,14 +5,5 @@ import a8k.appbase.A8kTubeType; import java.util.List; public class SampleInfo { - A8kTubeType tubeType; //管子类型 - - String sampleUUID; //样本UUID 系统自动生成 - String projectId; //项目id,用于查找项目相关信息 - String sampleUDPID; //用户输入的样本ID,不做逻辑,只做展示 - String sampleBarcodeID; //用于请求用户信息的条码ID - - List projectIds; //项目id,用于查找项目相关信息 - } diff --git a/src/main/java/a8k/service/base/samplecfg/SampleTubeCfg.java b/src/main/java/a8k/service/base/samplecfg/SampleTubeCfg.java index dfb4445..3b25d63 100644 --- a/src/main/java/a8k/service/base/samplecfg/SampleTubeCfg.java +++ b/src/main/java/a8k/service/base/samplecfg/SampleTubeCfg.java @@ -1,8 +1,17 @@ package a8k.service.base.samplecfg; +import a8k.service.base.BloodType; import a8k.service.base.sample.SampleInfo; import java.util.List; +import java.util.UUID; -public class SampleTubeCfg extends SampleInfo { +public class SampleTubeCfg { + public String tubeHolderUUID; + public int tubeIndex; + + public String udpid; //用户输入的样本ID,不做逻辑,只做展示 + public String barcodeid; //用于请求用户信息的条码ID + public List projectCodes; //项目编码,用于查找项目相关信息 + public BloodType bloodType = BloodType.WHOLE_BLOOD; //血型 } diff --git a/src/main/java/a8k/service/base/samplecfg/SampleTubeHolderCfg.java b/src/main/java/a8k/service/base/samplecfg/SampleTubeHolderCfg.java index 358749f..ceb0bad 100644 --- a/src/main/java/a8k/service/base/samplecfg/SampleTubeHolderCfg.java +++ b/src/main/java/a8k/service/base/samplecfg/SampleTubeHolderCfg.java @@ -2,8 +2,23 @@ package a8k.service.base.samplecfg; import a8k.appbase.A8kTubeType; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + public class SampleTubeHolderCfg { - Boolean active;//是否激活 - A8kTubeType tubeHolderType = A8kTubeType.BloodTube; //试管架类型 - SampleTubeCfg[] sampleTubeCfgs = new SampleTubeCfg[10]; //试管配置 + public String uuid = UUID.randomUUID().toString(); //唯一标识 + public Boolean active = false;//是否激活 + public A8kTubeType tubeHolderType = A8kTubeType.BloodTube; //试管架类型 + public ArrayList tubeCfgs = new ArrayList<>(); //试管配置 + public Integer index = 0;//试管架索引 + + public SampleTubeHolderCfg() { + for (int i = 0; i < 10; i++) { + var tubeCfg = new SampleTubeCfg(); + tubeCfg.tubeHolderUUID = uuid; + tubeCfg.tubeIndex = i; + tubeCfgs.add(tubeCfg); + } + } } diff --git a/src/main/java/a8k/service/hardware/HbotControlService.java b/src/main/java/a8k/service/hardware/HbotControlService.java index e9954c6..619fb5a 100644 --- a/src/main/java/a8k/service/hardware/HbotControlService.java +++ b/src/main/java/a8k/service/hardware/HbotControlService.java @@ -71,9 +71,9 @@ public class HbotControlService implements HardwareCtrlModule { new Pos2d(3947, -15), 92.3, 92.15, - 585, - 585, - 588 + 578, + 580, + 585 )); } diff --git a/src/main/java/a8k/service/hardware/canbus/protocol/A8kEcode.java b/src/main/java/a8k/service/hardware/canbus/protocol/A8kEcode.java index 39382d4..abc2924 100644 --- a/src/main/java/a8k/service/hardware/canbus/protocol/A8kEcode.java +++ b/src/main/java/a8k/service/hardware/canbus/protocol/A8kEcode.java @@ -37,6 +37,9 @@ public enum A8kEcode { UsrExistError(102, "用户已存在"), // UsrNotAllowBeDeleted(103, "用户不允许被删除"), // + TubeHolderCfgNotExist(200, "试管架配置不存在"), // + TubeCfgNotExist(201, "试管配置不存在"), // + // // FOR HARDWARE // diff --git a/src/main/java/a8k/service/state_service/A8kStateMgrService.java b/src/main/java/a8k/service/state_service/A8kStateMgrService.java index f29a063..dde8d2a 100644 --- a/src/main/java/a8k/service/state_service/A8kStateMgrService.java +++ b/src/main/java/a8k/service/state_service/A8kStateMgrService.java @@ -1,16 +1,11 @@ package a8k.service.state_service; import a8k.controler.engineer.utils.EngineerPageTab; +import a8k.controler.engineer.utils.EnginnerPageAction; import a8k.service.base.A8kDeviceState; -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 @@ -21,118 +16,18 @@ public class A8kStateMgrService { * 1. 前端只能读取该服务中的状态,不能设置,设置只能通过其他服务进行设置 */ - public static final Logger logger = LoggerFactory.getLogger(A8kStateMgrService.class); - public A8kDeviceState deviceState = new A8kDeviceState(); + public static final Logger logger = LoggerFactory.getLogger(A8kStateMgrService.class); + public A8kDeviceState deviceState = new A8kDeviceState(); - // AppUsr appusr; //用户是否登录 - // AppUsr debugPageUsr; //调试页面用户是否登录 + @PostConstruct + public void init() { + } + + @EnginnerPageAction(name = "获取设备状态") + public A8kDeviceState getDeviceState() { + return deviceState; + } - // @PostConstruct - // public void init() { - // var list = UfActiveRecord.find(A8kStateDB.class); - // if (list.isEmpty()) { - // 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 list = UfActiveRecord.find(A8kStateDB.class); -// -// A8kStateDB one; -// if (list.isEmpty()) { -// one = new A8kStateDB(); -// } else { -// one = list.get(0); -// } -// -// ObjectMapper mapper = new ObjectMapper(); -// -// try { -// one.stateJson = mapper.writeValueAsString(state); -// one.save(); -// } catch (JsonProcessingException e) { -// throw new RuntimeException(e); -// } -// } -//} +} diff --git a/zhaohe_app.db b/zhaohe_app.db index a33a126..9720b12 100644 Binary files a/zhaohe_app.db and b/zhaohe_app.db differ