Browse Source

update

tags/v0
zhaohe 10 months ago
parent
commit
92a8cadf32
  1. BIN
      app.db
  2. 36
      src/main/java/a8k/dbservice/A8kProjIdCardDBService.java
  3. 24
      src/main/java/a8k/dbservice/type/A8kProjIdCardDBIterm.java
  4. 55
      src/main/java/a8k/service/app/AppConsumablesMgrService.java
  5. 12
      src/main/java/a8k/service/app/AppProjInfoMgrService.java
  6. 2
      src/main/java/a8k/service/app/UtilsProjectColorAllocer.java
  7. 7
      src/main/java/a8k/service/app/app_consumables_mgr_service/ConsumableState.java
  8. 4
      src/main/java/a8k/service/app/app_consumables_mgr_service/ConsumablesScanResult.java
  9. 6
      src/main/java/a8k/service/app/app_consumables_mgr_service/LarBSGroup.java
  10. 6
      src/main/java/a8k/service/app/app_consumables_mgr_service/LittBSGroup.java
  11. 6
      src/main/java/a8k/service/app/app_consumables_mgr_service/ReactionPlateGroup.java
  12. 13
      src/main/java/a8k/type/projecttype/a8kidcard/A8kIdCardInfo.java
  13. 6
      src/main/java/a8k/utils/A8kIdCardDataParser.java
  14. 8
      src/main/java/a8k/utils/ZSqliteJdbcHelper.java

BIN
app.db

36
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<A8kProjIdCardDBIterm> getAllIdCards() {
public List<A8kIdCardInfo> getAllIdCards() {
return jdbcTemplate.query("select * from " + tableName + ";", this::rowMapper);
}
public A8kProjIdCardDBIterm getIdCard(String lotName) {
List<A8kProjIdCardDBIterm> list = jdbcTemplate.query("select * from " + tableName + " where lotName = ?;", this::rowMapper, lotName);
public A8kIdCardInfo getIdCard(String lotId) {
List<A8kIdCardInfo> list = jdbcTemplate.query("select * from " + tableName + " where lotId = ?;", this::rowMapper, lotId);
if (!list.isEmpty()) {
return list.get(0);
}

24
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;
//
//}

55
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<Map<String,Object>> scanningConsumables() throws AppException, InterruptedException {
public AppRet<Map<String, Object>> scanningConsumables() throws AppException, InterruptedException {
if (!stateMgrService.isDeviceInited()) {
return AppRet.fail(A8kEcode.DeviceNotInited.index);
}
@ -222,10 +220,45 @@ public class AppConsumablesMgrService {
scanResult.add(result);
}
Map<String,Object> 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<String, Object> ret = new java.util.HashMap<>();
ret.put("scanResult", scanResult);
ret.put("scanRawResult", scanRawResult);
ret.put("consumableState", cState);
return AppRet.success(ret);
}

12
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<List<A8kProjIdCardDBIterm>> getProjectInfoList() {
public AppRet<List<A8kIdCardInfo>> 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;
}

2
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:

7
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();

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

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

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

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

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

6
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);

8
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()));

Loading…
Cancel
Save