diff --git a/app.db b/app.db index 314467e..24c4624 100644 Binary files a/app.db and b/app.db differ diff --git a/src/main/java/a8k/controler/extapi/pagecontrol/ExtApiTabConfig.java b/src/main/java/a8k/controler/extapi/pagecontrol/ExtApiTabConfig.java index 4e351eb..1f0ee38 100644 --- a/src/main/java/a8k/controler/extapi/pagecontrol/ExtApiTabConfig.java +++ b/src/main/java/a8k/controler/extapi/pagecontrol/ExtApiTabConfig.java @@ -14,6 +14,7 @@ public enum ExtApiTabConfig { AppProjInfoMgrService("应用数据.项目信息管理", true), //OK AppSampleMgrService("应用数据.样本管理", true), //OK + ActionReactorService("基础组件.单步调试", true),//OK AppFrontEndEventRouter("基础组件.前端事件路由", true), UtilsProjectColorAllocer("基础组件.项目颜色分配", true), diff --git a/src/main/java/a8k/dbservice/type/SampleRecord.java b/src/main/java/a8k/dbservice/type/SampleRecord.java index cb02605..efbf972 100644 --- a/src/main/java/a8k/dbservice/type/SampleRecord.java +++ b/src/main/java/a8k/dbservice/type/SampleRecord.java @@ -12,8 +12,7 @@ import java.util.List; public class SampleRecord { public int id = 0; public String sampleid; // generated by system , year%100+month+day+时分 241230_1203_01 - public Date data; - public Boolean isHighTube = false; + public Date date; public BloodType bloodType = BloodType.WHOLE_BLOOD; //血液类型 public String sampleBarcode = ""; //用于请求用户信息的条码ID public String userid = ""; //用户输入的样本ID,不做逻辑,只做展示 diff --git a/src/main/java/a8k/service/appdata/AppSampleMgrService.java b/src/main/java/a8k/service/appdata/AppSampleMgrService.java index a6fb221..2e76bdb 100644 --- a/src/main/java/a8k/service/appdata/AppSampleMgrService.java +++ b/src/main/java/a8k/service/appdata/AppSampleMgrService.java @@ -1,15 +1,84 @@ package a8k.service.appdata; import a8k.controler.extapi.pagecontrol.ExtApiTabConfig; +import a8k.controler.extapi.utils.ExtApiFn; import a8k.controler.extapi.utils.ExtApiTab; import a8k.dbservice.SampleRecordDBService; +import a8k.dbservice.type.SampleRecord; +import a8k.service.appstate.type.TubeState; +import a8k.type.type.BloodType; +import jakarta.annotation.PostConstruct; import jakarta.annotation.Resource; import org.springframework.stereotype.Component; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + @Component @ExtApiTab(cfg = ExtApiTabConfig.AppSettingsMgr) public class AppSampleMgrService { @Resource SampleRecordDBService sampleRecordDBService; + + // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + @PostConstruct + public void init() { + } + + String generateSampleId(Date date, Integer tubePos) { + String sampleid = ""; + SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd_HHmmss"); + sampleid = String.format("%s_%s", sdf.format(date), tubePos); + return sampleid; + } + + @ExtApiFn(name = "addSampleRecordExtApi") + public SampleRecord addSampleRecordExtApi(Integer tuebPos, BloodType bloodType, String sampleBarcode, String userid, String projIndex) { + return addSampleRecord(new Date(), tuebPos, bloodType, sampleBarcode, userid, projIndex); + } + + @ExtApiFn(name = "getAllSampleRecordsExtApi") + public List getAllSampleRecords() { + return sampleRecordDBService.getAll(); + } + + public SampleRecord addSampleRecord(Date intertime, Integer tuebPos, BloodType bloodType, String sampleBarcode, String userid, String projIndex) { + SampleRecord record = new SampleRecord(); + record.bloodType = bloodType; + record.sampleBarcode = sampleBarcode; + record.userid = userid; + record.date = intertime; + record.sampleid = generateSampleId(intertime, tuebPos); + for (String s : projIndex.split(",")) { + record.projIndex.add(Integer.parseInt(s)); + } + sampleRecordDBService.add(record); + return record; + } + + public void addSampleRecord(TubeState[] state) { + Date intertime = new Date(); + for (int i = 0; i < state.length; i++) { + if (state[i] == null) { + continue; + } + if (!state[i].isTubeExist) { + continue; + } + SampleRecord record = new SampleRecord(); + record.bloodType = state[i].bloodType; + record.sampleBarcode = state[i].sampleBarcode; + record.userid = state[i].userid; + record.date = intertime; + record.sampleid = generateSampleId(intertime, i); + record.projIndex = state[i].projIndex; + state[i].sampleid = record.sampleid; + sampleRecordDBService.add(record); + } + } + + } diff --git a/src/main/java/a8k/service/appdevicectrl/action/DO_ENTER_TUBEHOLDER_AND_SCAN.java b/src/main/java/a8k/service/appdevicectrl/action/DO_ENTER_TUBEHOLDER_AND_SCAN.java index 745444c..5d1f95f 100644 --- a/src/main/java/a8k/service/appdevicectrl/action/DO_ENTER_TUBEHOLDER_AND_SCAN.java +++ b/src/main/java/a8k/service/appdevicectrl/action/DO_ENTER_TUBEHOLDER_AND_SCAN.java @@ -5,11 +5,13 @@ import a8k.baseservice.appeventbus.appevent.AppWarningNotifyEvent; import a8k.hardware.A8kCanBusService; import a8k.hardware.type.a8kcanprotocol.A8kEcode; import a8k.hardware.type.a8kcanprotocol.IOId; +import a8k.service.appdata.AppSampleMgrService; import a8k.service.appdevicectrl.AppTubeSettingMgrService; import a8k.service.appstate.AppA8kGStateService; import a8k.service.appstate.MainFlowCtrlState; import a8k.service.appstate.resource.A8kPublicResourceType; import a8k.service.appstate.type.TubeHolderState; +import a8k.service.appstate.type.TubeState; import a8k.service.appstate.type.state.A8kWorkState; import a8k.service.appstate.type.state.TubeHolderProcessState; import a8k.service.devicedriver.ctrl.SampleScanTransportCtrl; @@ -23,6 +25,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; +import java.util.Date; import java.util.List; @Component @@ -56,6 +59,8 @@ public class DO_ENTER_TUBEHOLDER_AND_SCAN extends A8kStepAction { A8kCanBusService canBus; @Resource AppTubeSettingMgrService appTubeSettingMgrService; + @Resource + AppSampleMgrService appSampleMgrService; //样本管理服务 MainFlowCtrlState mfcs; @@ -191,19 +196,21 @@ public class DO_ENTER_TUBEHOLDER_AND_SCAN extends A8kStepAction { @Override public void doaction() throws AppException { - //扫描试管架信息 logger.info("开始扫描试管架"); var scanResult = scanTubeHodler(); if (scanResult == null) { return; } - //解析扫描结果 + logger.info("解析扫描结果"); TubeHolderState state = parseScanResult(scanResult); if (state == null) { return; } - //更新试管架状态 + + logger.info("将样本信息写入数据库"); + appSampleMgrService.addSampleRecord(state.tubeStates); + logger.info("更新试管架状态"); gstate.setTubeHolderState(state); } diff --git a/src/main/java/a8k/service/appstate/type/TubeState.java b/src/main/java/a8k/service/appstate/type/TubeState.java index e5a52dd..0baebe5 100644 --- a/src/main/java/a8k/service/appstate/type/TubeState.java +++ b/src/main/java/a8k/service/appstate/type/TubeState.java @@ -7,6 +7,8 @@ import java.util.ArrayList; import java.util.List; public class TubeState { + public String sampleid; //样本ID-系统生成-唯一标识一个样本 + public Boolean isHighTube = false; public Boolean isTubeExist = false; diff --git a/src/main/java/a8k/utils/ZSqliteJdbcHelper.java b/src/main/java/a8k/utils/ZSqliteJdbcHelper.java index 6818bd4..b60f5bc 100644 --- a/src/main/java/a8k/utils/ZSqliteJdbcHelper.java +++ b/src/main/java/a8k/utils/ZSqliteJdbcHelper.java @@ -6,6 +6,8 @@ import org.springframework.jdbc.core.JdbcTemplate; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; import java.sql.ResultSet; import java.sql.SQLException; import java.text.SimpleDateFormat; @@ -50,13 +52,13 @@ public class ZSqliteJdbcHelper { static public Object rowMapper(ResultSet rs, Class tClass) throws SQLException, InstantiationException, IllegalAccessException { Object obj = tClass.newInstance(); for (java.lang.reflect.Field field : tClass.getDeclaredFields()) { - if (field.getType().equals(Integer.class) ) { + if (field.getType().equals(Integer.class)) { field.set(obj, rs.getInt(field.getName())); } else if (field.getType().equals(int.class)) { field.set(obj, rs.getInt(field.getName())); } else if (field.getType().equals(Float.class)) { field.set(obj, rs.getFloat(field.getName())); - } else if (field.getType().equals(Double.class) ) { + } else if (field.getType().equals(Double.class)) { field.set(obj, rs.getDouble(field.getName())); } else if (field.getType().equals(Boolean.class)) { field.set(obj, rs.getBoolean(field.getName())); @@ -105,7 +107,7 @@ public class ZSqliteJdbcHelper { } else if (field.getType().equals(Date.class)) { Date date = (Date) field.get(obj); // 按照 yyyy-MM-dd HH:mm:ss 存储 -// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + // SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); args.add(date.getTime()); } else if (field.getType().isEnum()) { args.add(field.get(obj).toString()); @@ -123,8 +125,8 @@ public class ZSqliteJdbcHelper { } public static void addObj(JdbcTemplate jdbcTemplate, String tableName, Class tClass, Object obj) { - StringBuilder sql = new StringBuilder("insert into " + tableName + "("); - StringBuilder values = new StringBuilder(" values("); + StringBuilder sql = new StringBuilder("insert into " + tableName + "("); + StringBuilder values = new StringBuilder(" values("); for (java.lang.reflect.Field field : tClass.getDeclaredFields()) { if (field.getName().equals("id")) @@ -140,8 +142,8 @@ public class ZSqliteJdbcHelper { } public static void updateObj(JdbcTemplate jdbcTemplate, String tableName, Class tClass, Object obj) { - StringBuilder sql = new StringBuilder("update " + tableName + " set "); - int id = 0; + StringBuilder sql = new StringBuilder("update " + tableName + " set "); + int id = 0; for (java.lang.reflect.Field field : tClass.getDeclaredFields()) { if (field.getName().equals("id")) {