diff --git a/app.db b/app.db index 48e3a06..ce02d85 100644 Binary files a/app.db and b/app.db differ diff --git a/src/main/java/a8k/dbservice/A8kProjIdCardDBService.java b/src/main/java/a8k/dbservice/A8kProjIdCardDBService.java index 1860c1a..90b3b6b 100644 --- a/src/main/java/a8k/dbservice/A8kProjIdCardDBService.java +++ b/src/main/java/a8k/dbservice/A8kProjIdCardDBService.java @@ -1,6 +1,5 @@ package a8k.dbservice; -import a8k.dbservice.type.A8kProjIdCardDBIterm; import a8k.service.app.UtilsProjectColorAllocer; import a8k.type.projecttype.a8kidcard.A8kIdCardInfo; import a8k.utils.ZSqliteJdbcHelper; @@ -13,14 +12,13 @@ import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; import java.sql.ResultSet; -import java.util.Date; import java.util.List; @Component public class A8kProjIdCardDBService { private static final Logger logger = LoggerFactory.getLogger(A8kProjIdCardDBService.class); private static final String tableName = "zapp_a8k_idcards"; - private static Class tClass = A8kProjIdCardDBIterm.class; + private static Class tClass = A8kIdCardInfo.class; @Resource @@ -36,29 +34,17 @@ public class A8kProjIdCardDBService { } } - @SneakyThrows private A8kProjIdCardDBIterm rowMapper(ResultSet rs, int rowNum) { - return (A8kProjIdCardDBIterm) ZSqliteJdbcHelper.rowMapper(rs, tClass); - } - - public A8kProjIdCardDBIterm buildDBIterm(int id, A8kIdCardInfo idcardinfo) { - A8kProjIdCardDBIterm obj = new A8kProjIdCardDBIterm(); - obj.color = colorAllocer.genRandomColor(idcardinfo.projName, idcardinfo.lotName); - obj.projectName = idcardinfo.projName; - obj.lotName = idcardinfo.lotName; - obj.updateChipVersion = idcardinfo.updateChipVersion; - obj.idcardinfo = idcardinfo; - obj.insertTime = new Date(); - obj.id = id; - return obj; + @SneakyThrows private A8kIdCardInfo rowMapper(ResultSet rs, int rowNum) { + return (A8kIdCardInfo) ZSqliteJdbcHelper.rowMapper(rs, tClass); } public void updateIdCard(int id, A8kIdCardInfo idcardinfo) { - ZSqliteJdbcHelper.updateObj(jdbcTemplate, tableName, tClass, buildDBIterm(id, idcardinfo)); + ZSqliteJdbcHelper.updateObj(jdbcTemplate, tableName, tClass, idcardinfo); } public void addIdCard(A8kIdCardInfo idcardinfo) { //查找是否有相同的lotName,如果则更新 - A8kProjIdCardDBIterm old = getIdCard(idcardinfo.lotName); + A8kIdCardInfo old = getIdCard(idcardinfo.lotId); if (old != null) { if (old.updateChipVersion >= idcardinfo.updateChipVersion) { logger.warn("updateChipVersion is not newer, ignore"); @@ -67,18 +53,16 @@ public class A8kProjIdCardDBService { updateIdCard(old.id, idcardinfo); return; } - - - ZSqliteJdbcHelper.addObj(jdbcTemplate, tableName, tClass, buildDBIterm(0, idcardinfo)); + idcardinfo.color = colorAllocer.genRandomColor(idcardinfo.projIndex,idcardinfo.lotId); + ZSqliteJdbcHelper.addObj(jdbcTemplate, tableName, tClass, idcardinfo); } - public List getAllIdCards() { + public List getAllIdCards() { return jdbcTemplate.query("select * from " + tableName + ";", this::rowMapper); } - - public A8kProjIdCardDBIterm getIdCard(String lotName) { - List list = jdbcTemplate.query("select * from " + tableName + " where lotName = ?;", this::rowMapper, lotName); + public A8kIdCardInfo getIdCard(String lotId) { + List list = jdbcTemplate.query("select * from " + tableName + " where lotId = ?;", this::rowMapper, lotId); if (!list.isEmpty()) { return list.get(0); } diff --git a/src/main/java/a8k/dbservice/type/A8kProjIdCardDBIterm.java b/src/main/java/a8k/dbservice/type/A8kProjIdCardDBIterm.java index 35eb581..ff0ee53 100644 --- a/src/main/java/a8k/dbservice/type/A8kProjIdCardDBIterm.java +++ b/src/main/java/a8k/dbservice/type/A8kProjIdCardDBIterm.java @@ -5,15 +5,15 @@ import com.fasterxml.jackson.annotation.JsonFormat; import java.util.Date; -public class A8kProjIdCardDBIterm { - public int id; - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - public Date insertTime; - public String color; - public String projectName; - public String lotName; //唯一标识 - public Integer updateChipVersion; - - public A8kIdCardInfo idcardinfo; - -} +//public class A8kProjIdCardDBIterm { +// public int id; +// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") +// public Date insertTime; +// public String color; +// public String projectName; +// public String lotName; //唯一标识 +// public Integer updateChipVersion; +// +// public A8kIdCardInfo idcardinfo; +// +//} diff --git a/src/main/java/a8k/service/app/AppConsumablesMgrService.java b/src/main/java/a8k/service/app/AppConsumablesMgrService.java index 8930197..3b75785 100644 --- a/src/main/java/a8k/service/app/AppConsumablesMgrService.java +++ b/src/main/java/a8k/service/app/AppConsumablesMgrService.java @@ -19,9 +19,6 @@ import a8k.type.projecttype.A8kReactionFlowType; import a8k.type.projecttype.a8kidcard.A8kIdCardInfo; import a8k.utils.ReactionPlate2DCode; import a8k.utils.ReactionPlate2DCodeParser; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; import jakarta.annotation.Resource; import org.slf4j.Logger; import org.springframework.stereotype.Component; @@ -34,7 +31,8 @@ import java.util.Map; @ExtApiTab(cfg = ExtApiTabConfig.AppConsumablesMgrService) @Component public class AppConsumablesMgrService { - static Logger logger = org.slf4j.LoggerFactory.getLogger(AppConsumablesMgrService.class); + static Logger logger = org.slf4j.LoggerFactory.getLogger(AppConsumablesMgrService.class); + static final Integer EachConsumableNum = 20; static class ORDER { static final int scanningConsumables = 1; @@ -197,15 +195,15 @@ public class AppConsumablesMgrService { throw new RuntimeException("未知的反应流程类型"); } - ret.lotId = rp2dcode.lotId; - ret.projIndex = rp2dcode.projIndex; - ret.expireDate = rp2dcode.expDate; + ret.lotId = rp2dcode.lotId; + ret.projIndex = rp2dcode.projIndex; return ret; } + //扫描耗材 @ExtApiFn(name = "扫描耗材", order = ORDER.scanningConsumables) - public AppRet> scanningConsumables() throws AppException, InterruptedException { + public AppRet> scanningConsumables() throws AppException, InterruptedException { if (!stateMgrService.isDeviceInited()) { return AppRet.fail(A8kEcode.DeviceNotInited.index); } @@ -222,10 +220,45 @@ public class AppConsumablesMgrService { scanResult.add(result); } - Map ret = new java.util.HashMap<>(); - ret.put("scanResult", scanResult); - ret.put("scanRawResult",scanRawResult); + var cState = new ConsumableState(); + for (int i = 0; i < 6; i++) { + if (scanResult.get(i).state == ScanResultState.PASS) { + + A8kIdCardInfo a8kIdCardInfo = appProjMgr.getA8kIdCardInfoByLotId(scanResult.get(i).lotId); + A8kReactionFlowType reactionType = appProjMgr.getA8kReactionFlowTypeByProjIndex(scanResult.get(i).projIndex); + assert a8kIdCardInfo != null; + assert reactionType != null; + + cState.reactionPlateGroup[i].projIndex = scanResult.get(i).projIndex; + cState.reactionPlateGroup[i].lotId = scanResult.get(i).lotId; + cState.reactionPlateGroup[i].color = a8kIdCardInfo.color; + + if (reactionType.equals(A8kReactionFlowType.ReactionWithLittBS)) { + cState.littBSGroup[i].projIndex = scanResult.get(i).projIndex; + cState.littBSGroup[i].lotId = scanResult.get(i).lotId; + cState.littBSGroup[i].color = a8kIdCardInfo.color; + cState.littBSGroup[i].num = EachConsumableNum; + + } else if (reactionType.equals(A8kReactionFlowType.ReactionWithLarBsAndDetection)) { + cState.littBSGroup[i].projIndex = scanResult.get(i).projIndex; + cState.littBSGroup[i].lotId = scanResult.get(i).lotId; + cState.littBSGroup[i].color = a8kIdCardInfo.color; + cState.littBSGroup[i].num = EachConsumableNum; + + cState.larBSGroup[i].projIndex = scanResult.get(i).projIndex; + cState.larBSGroup[i].lotId = scanResult.get(i).lotId; + cState.larBSGroup[i].color = a8kIdCardInfo.color; + cState.larBSGroup[i].num = EachConsumableNum; + } else { + throw new RuntimeException("未知的反应流程类型"); + } + } + } + Map ret = new java.util.HashMap<>(); + ret.put("scanResult", scanResult); + ret.put("scanRawResult", scanRawResult); + ret.put("consumableState", cState); return AppRet.success(ret); } diff --git a/src/main/java/a8k/service/app/AppProjInfoMgrService.java b/src/main/java/a8k/service/app/AppProjInfoMgrService.java index 6ffa2a0..fd3d0eb 100644 --- a/src/main/java/a8k/service/app/AppProjInfoMgrService.java +++ b/src/main/java/a8k/service/app/AppProjInfoMgrService.java @@ -8,7 +8,6 @@ import a8k.baseservice.appeventbus.AppEventListener; import a8k.dbservice.A8kPresetProjInfoDBService; import a8k.dbservice.A8kProjIdCardDBService; import a8k.dbservice.type.A8kPresetProjInfo; -import a8k.dbservice.type.A8kProjIdCardDBIterm; import a8k.hardware.type.regindex.RegIndex; import a8k.type.exception.AppException; import a8k.type.appret.AppRet; @@ -98,7 +97,7 @@ public class AppProjInfoMgrService implements AppEventListener { // //TODO: //检查解析结果,如果解析结果存在异常,则抛出错误事件给前端 - if (mountedIdCardInfo.lotName.isEmpty()) { + if (mountedIdCardInfo.lotId.isEmpty()) { eventBus.pushEvent(new A8kErrorPromptEvent(A8kEcode.A8kIdCardLotIdIsEmpty.index)); return; } @@ -127,7 +126,7 @@ public class AppProjInfoMgrService implements AppEventListener { } @ExtApiFn(name = "获取ID卡信息列表", order = ORDER.getProjectInfoList) - public AppRet> getProjectInfoList() { + public AppRet> getProjectInfoList() { return AppRet.success(a8kProjIdCardDBService.getAllIdCards()); } //TODO: 删除 @@ -139,11 +138,7 @@ public class AppProjInfoMgrService implements AppEventListener { } public A8kIdCardInfo getA8kIdCardInfoByLotId(String lotid) { - A8kProjIdCardDBIterm item = a8kProjIdCardDBService.getIdCard(lotid); - if (item == null) { - return null; - } - return item.idcardinfo; + return a8kProjIdCardDBService.getIdCard(lotid); } public A8kReactionFlowType getA8kReactionFlowTypeByProjIndex(Integer projId) { @@ -151,7 +146,6 @@ public class AppProjInfoMgrService implements AppEventListener { if (info == null) { return null; } - if (info.reactionFlowType == null) { return null; } diff --git a/src/main/java/a8k/service/app/UtilsProjectColorAllocer.java b/src/main/java/a8k/service/app/UtilsProjectColorAllocer.java index b0d42fa..ce58dbd 100644 --- a/src/main/java/a8k/service/app/UtilsProjectColorAllocer.java +++ b/src/main/java/a8k/service/app/UtilsProjectColorAllocer.java @@ -13,7 +13,7 @@ import java.util.Random; public class UtilsProjectColorAllocer { @ExtApiFn(name = "genRandomColor") - public String genRandomColor(String projId, String lotid) { + public String genRandomColor(Integer projIndex, String lotId) { /* * * TODO: diff --git a/src/main/java/a8k/service/app/app_consumables_mgr_service/ConsumableState.java b/src/main/java/a8k/service/app/app_consumables_mgr_service/ConsumableState.java index 70eb284..36cb4a1 100644 --- a/src/main/java/a8k/service/app/app_consumables_mgr_service/ConsumableState.java +++ b/src/main/java/a8k/service/app/app_consumables_mgr_service/ConsumableState.java @@ -4,8 +4,8 @@ import java.util.Date; public class ConsumableState { - public Date scanDate = new Date(); - public TipGroup[] tipGroup = new TipGroup[3]; + public Date scanDate = new Date(); + public TipGroup[] tipGroup = new TipGroup[3]; public ReactionPlateGroup[] reactionPlateGroup = new ReactionPlateGroup[6]; public LittBSGroup[] littBSGroup = new LittBSGroup[6]; @@ -13,7 +13,8 @@ public class ConsumableState { public ConsumableState() { for (int i = 0; i < tipGroup.length; i++) { - tipGroup[i] = new TipGroup(); + tipGroup[i] = new TipGroup(); + tipGroup[i].tipNum = 96; } for (int i = 0; i < reactionPlateGroup.length; i++) { reactionPlateGroup[i] = new ReactionPlateGroup(); diff --git a/src/main/java/a8k/service/app/app_consumables_mgr_service/ConsumablesScanResult.java b/src/main/java/a8k/service/app/app_consumables_mgr_service/ConsumablesScanResult.java index bf5be8e..059ec2c 100644 --- a/src/main/java/a8k/service/app/app_consumables_mgr_service/ConsumablesScanResult.java +++ b/src/main/java/a8k/service/app/app_consumables_mgr_service/ConsumablesScanResult.java @@ -1,5 +1,7 @@ package a8k.service.app.app_consumables_mgr_service; +import a8k.type.projecttype.A8kReactionFlowType; + import java.util.Date; public class ConsumablesScanResult { @@ -7,6 +9,4 @@ public class ConsumablesScanResult { public ScanResultState state; public Integer projIndex; public String lotId; - public Date expireDate; - } diff --git a/src/main/java/a8k/service/app/app_consumables_mgr_service/LarBSGroup.java b/src/main/java/a8k/service/app/app_consumables_mgr_service/LarBSGroup.java index 0a9779f..93097de 100644 --- a/src/main/java/a8k/service/app/app_consumables_mgr_service/LarBSGroup.java +++ b/src/main/java/a8k/service/app/app_consumables_mgr_service/LarBSGroup.java @@ -1,9 +1,9 @@ package a8k.service.app.app_consumables_mgr_service; public class LarBSGroup { - public String projId = ""; //项目ID - public String lotVal = ""; //批次号 - public String color = ""; //颜色 + public Integer projIndex; //项目ID + public String lotId = ""; //批次号 + public String color = ""; //颜色 public Integer num = 0; } diff --git a/src/main/java/a8k/service/app/app_consumables_mgr_service/LittBSGroup.java b/src/main/java/a8k/service/app/app_consumables_mgr_service/LittBSGroup.java index 72bc822..4024b1c 100644 --- a/src/main/java/a8k/service/app/app_consumables_mgr_service/LittBSGroup.java +++ b/src/main/java/a8k/service/app/app_consumables_mgr_service/LittBSGroup.java @@ -1,9 +1,9 @@ package a8k.service.app.app_consumables_mgr_service; public class LittBSGroup { - public String projId = ""; //项目ID - public String lotVal = ""; //批次号 - public String color = ""; //颜色 + public Integer projIndex; //项目ID + public String lotId = ""; //批次号 + public String color = ""; //颜色 public Integer num = 0; } diff --git a/src/main/java/a8k/service/app/app_consumables_mgr_service/ReactionPlateGroup.java b/src/main/java/a8k/service/app/app_consumables_mgr_service/ReactionPlateGroup.java index 6c29658..83297ec 100644 --- a/src/main/java/a8k/service/app/app_consumables_mgr_service/ReactionPlateGroup.java +++ b/src/main/java/a8k/service/app/app_consumables_mgr_service/ReactionPlateGroup.java @@ -1,9 +1,9 @@ package a8k.service.app.app_consumables_mgr_service; public class ReactionPlateGroup { - public String projId = ""; //项目ID - public String lotVal = ""; //批次号 - public String color = ""; //颜色 + public Integer projIndex; //项目ID + public String lotId = ""; //批次号 + public String color = ""; //颜色 public Integer num = 0; } diff --git a/src/main/java/a8k/type/projecttype/a8kidcard/A8kIdCardInfo.java b/src/main/java/a8k/type/projecttype/a8kidcard/A8kIdCardInfo.java index c1bb0d4..514e761 100644 --- a/src/main/java/a8k/type/projecttype/a8kidcard/A8kIdCardInfo.java +++ b/src/main/java/a8k/type/projecttype/a8kidcard/A8kIdCardInfo.java @@ -6,12 +6,19 @@ import com.fasterxml.jackson.databind.ObjectMapper; import java.util.Date; public class A8kIdCardInfo { + + + public int id; + public String color;// + + + // content in idcard public String projName; // 项目名称 0x0001,15 - public String lotName; // 批次名称 0x0010,12 + public String lotId; // 批次名称 0x0010,12 @JsonFormat(pattern = "yyyy-MM-dd") public Date expiryDate; // 有效日期 0x001C - public Integer projID; // 项目名称代码 0x001F + public Integer projIndex; // 项目名称代码 0x001F public Integer palteCode; // 板条条码代码 0x0020 public Integer updateChipVersion; // 更新芯片版本号 0x0021 @@ -50,8 +57,6 @@ public class A8kIdCardInfo { } catch (Exception e) { return "A8kIdCardInfo.toString() error"; } - - } diff --git a/src/main/java/a8k/utils/A8kIdCardDataParser.java b/src/main/java/a8k/utils/A8kIdCardDataParser.java index 99d139f..d9d367e 100644 --- a/src/main/java/a8k/utils/A8kIdCardDataParser.java +++ b/src/main/java/a8k/utils/A8kIdCardDataParser.java @@ -20,10 +20,10 @@ public class A8kIdCardDataParser { public A8kIdCardInfo parse() { A8kIdCardInfo idCardInfo = new A8kIdCardInfo(); - idCardInfo.projName = parseAsString("idcard.projectName ", 0x0001, 15); - idCardInfo.lotName = parseAsString("idcard.lotName ", 0x0010, 12); + idCardInfo.projName = parseAsString("idcard.projectName ", 0x0001, 15); + idCardInfo.lotId = parseAsString("idcard.lotName ", 0x0010, 12); idCardInfo.expiryDate = parseAsDate("idcard.expiryDate ", 0x001C); - idCardInfo.projID = parseAsByte("idcard.projectCode ", 0x001F); + idCardInfo.projIndex = parseAsByte("idcard.projectCode ", 0x001F); idCardInfo.palteCode = parseAsByte("idcard.palteCode ", 0x0020); idCardInfo.updateChipVersion = parseAsByte("idcard.updateChipVersion ", 0x0021); diff --git a/src/main/java/a8k/utils/ZSqliteJdbcHelper.java b/src/main/java/a8k/utils/ZSqliteJdbcHelper.java index 694ed9e..6818bd4 100644 --- a/src/main/java/a8k/utils/ZSqliteJdbcHelper.java +++ b/src/main/java/a8k/utils/ZSqliteJdbcHelper.java @@ -50,9 +50,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) || field.getType().equals(int.class)) { + if (field.getType().equals(Integer.class) ) { field.set(obj, rs.getInt(field.getName())); - } else if (field.getType().equals(Double.class) || field.getType().equals(Float.class)) { + } 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) ) { field.set(obj, rs.getDouble(field.getName())); } else if (field.getType().equals(Boolean.class)) { field.set(obj, rs.getBoolean(field.getName()));