Browse Source

recode

tags/v0
zhaohe 7 months ago
parent
commit
03b09d3081
  1. 32
      src/main/java/a8k/app/a8kproj/fakeproj/FakeProjInfo.java
  2. 28
      src/main/java/a8k/app/a8kproj/fakeprojcontext/FakeProjInfoContextFactory.java
  3. 18
      src/main/java/a8k/app/a8kproj/optalgo/A8kOptAlgoV2.java
  4. 6
      src/main/java/a8k/app/a8kproj/optanalyzer/A8kOptXGetter.java
  5. 6
      src/main/java/a8k/app/a8kproj/optanalyzer/context/OptAnalyzeContext.java
  6. 15
      src/main/java/a8k/app/dao/db/ProjOptInfoDao.java
  7. 3
      src/main/java/a8k/app/dao/db/type/OptCfg.java
  8. 2
      src/main/java/a8k/app/factory/FakeReactionResultFactory.java
  9. 2
      src/main/java/a8k/app/service/data/ProjIdCardInfoMgrService.java
  10. 32
      src/main/java/a8k/app/service/data/ProjInfoMgrService.java
  11. 6
      src/main/java/a8k/app/service/lowerctrl/OptScanModuleCtrlService.java
  12. 2
      src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/PLATE_OPT_SCAN.java
  13. 20
      src/main/java/a8k/app/utils/ProjBuildinInfo.java
  14. 3
      src/main/java/a8k/app/utils/ProjInfo.java
  15. 12
      src/main/java/a8k/app/utils/ZCSVUtils.java
  16. 13
      src/main/java/a8k/extui/page/opt_calibration/A8kOptVerification.java
  17. 3
      src/main/java/a8k/extui/page/opt_calibration/OptFormulaTestPage.java
  18. 5
      src/main/java/a8k/extui/page/opt_calibration/OptFormulaTestPageV2.java

32
src/main/java/a8k/app/a8kproj/fakeproj/FakeProjInfo.java

@ -1,7 +1,7 @@
package a8k.app.a8kproj.fakeproj; package a8k.app.a8kproj.fakeproj;
import a8k.app.dao.db.type.ProjExtInfoCard; import a8k.app.dao.db.type.ProjExtInfoCard;
import a8k.app.dao.db.type.ProjOptInfo;
import a8k.app.dao.db.type.OptCfg;
import a8k.app.dao.db.type.ProjectBaseInfo; import a8k.app.dao.db.type.ProjectBaseInfo;
import a8k.app.dao.db.type.a8kidcard.zenum.A8kOptType; import a8k.app.dao.db.type.a8kidcard.zenum.A8kOptType;
import a8k.app.dao.db.type.a8kidcard.zenum.A8kReactionFlowType; import a8k.app.dao.db.type.a8kidcard.zenum.A8kReactionFlowType;
@ -73,25 +73,25 @@ public class FakeProjInfo {
return projInfo; return projInfo;
} }
public List<ProjOptInfo> buildProjOptInfoList() {
List<ProjOptInfo> projOptInfoList = new ArrayList<>();
public List<OptCfg> buildProjOptInfoList() {
List<OptCfg> optCfgList = new ArrayList<>();
for (int subIndex = 0; subIndex < subProjNum; subIndex++) { for (int subIndex = 0; subIndex < subProjNum; subIndex++) {
ProjOptInfo projOptInfo = new ProjOptInfo();
projOptInfo.id = 0;
projOptInfo.projId = projId;
projOptInfo.projName = projName;
projOptInfo.subProjIndex = subIndex;
OptCfg optCfg = new OptCfg();
optCfg.id = 0;
optCfg.projId = projId;
optCfg.projName = projName;
optCfg.subProjIndex = subIndex;
/*光学配置*/ /*光学配置*/
projOptInfo.subProjName = String.format("%s_%d", projName, subIndex);
projOptInfo.subProjShortName = String.format("%s_%d", projShortName, subIndex);
projOptInfo.optType = A8kOptType.FOPT;
projOptInfo.optScanRange = 200;
projOptInfo.optScanPeakNum = 3;
projOptInfo.peakNameRefNum = 3;
projOptInfoList.add(projOptInfo);
optCfg.subProjName = String.format("%s_%d", projName, subIndex);
optCfg.subProjShortName = String.format("%s_%d", projShortName, subIndex);
optCfg.optType = A8kOptType.FOPT;
optCfg.optScanRange = 200;
optCfg.optScanPeakNum = 3;
optCfg.peakNameRefNum = 3;
optCfgList.add(optCfg);
} }
return projOptInfoList;
return optCfgList;
} }

28
src/main/java/a8k/app/a8kproj/fakeprojcontext/FakeProjInfoContextFactory.java

@ -3,7 +3,7 @@ package a8k.app.a8kproj.fakeprojcontext;
import a8k.app.a8ktype.opttype.A8kOptX; import a8k.app.a8ktype.opttype.A8kOptX;
import a8k.app.service.data.UtilsProjectColorAllocer; import a8k.app.service.data.UtilsProjectColorAllocer;
import a8k.app.dao.db.type.ProjExtInfoCard; import a8k.app.dao.db.type.ProjExtInfoCard;
import a8k.app.dao.db.type.ProjOptInfo;
import a8k.app.dao.db.type.OptCfg;
import a8k.app.dao.db.type.ProjectBaseInfo; import a8k.app.dao.db.type.ProjectBaseInfo;
import a8k.app.dao.db.type.a8kidcard.A8kNormalFn; import a8k.app.dao.db.type.a8kidcard.A8kNormalFn;
import a8k.app.dao.db.type.a8kidcard.A8kOptFnFormula; import a8k.app.dao.db.type.a8kidcard.A8kOptFnFormula;
@ -191,24 +191,24 @@ public class FakeProjInfoContextFactory {
// //
// ProjOptInfo // ProjOptInfo
// //
List<ProjOptInfo> projOptInfoList = new ArrayList<>();
List<OptCfg> optCfgList = new ArrayList<>();
for (int i = 0; i < cfg.subProjNum; i++) { for (int i = 0; i < cfg.subProjNum; i++) {
ProjOptInfo projOptInfo = new ProjOptInfo();
projOptInfo.projId = cfg.projId;
projOptInfo.projName = cfg.projName;
projOptInfo.subProjIndex = i;
projOptInfo.subProjName = String.format("SUBPROJ_%d", i);
projOptInfo.subProjShortName = String.format("SP%d", i);
projOptInfo.optType = cfg.optType;
projOptInfo.optScanRange = 250;
projOptInfo.optScanPeakNum = cfg.optScanPeakNum;
projOptInfo.peakNameRefNum = cfg.optPeakNameAssginRefPeakNum;
projOptInfoList.add(projOptInfo);
OptCfg optCfg = new OptCfg();
optCfg.projId = cfg.projId;
optCfg.projName = cfg.projName;
optCfg.subProjIndex = i;
optCfg.subProjName = String.format("SUBPROJ_%d", i);
optCfg.subProjShortName = String.format("SP%d", i);
optCfg.optType = cfg.optType;
optCfg.optScanRange = 250;
optCfg.optScanPeakNum = cfg.optScanPeakNum;
optCfg.peakNameRefNum = cfg.optPeakNameAssginRefPeakNum;
optCfgList.add(optCfg);
} }
ProjInfo projInfoContext = new ProjInfo(); ProjInfo projInfoContext = new ProjInfo();
projInfoContext.projExtInfoCard = projExtInfoCard; projInfoContext.projExtInfoCard = projExtInfoCard;
projInfoContext.projBuildinInfo = new ProjBuildinInfo(projInfo,projOptInfoList);
projInfoContext.projBuildinInfo = new ProjBuildinInfo(projInfo, optCfgList);
return projInfoContext; return projInfoContext;
} }

18
src/main/java/a8k/app/a8kproj/optalgo/A8kOptAlgoV2.java

@ -2,12 +2,8 @@ package a8k.app.a8kproj.optalgo;
import a8k.app.a8kproj.optalgo.type.*; import a8k.app.a8kproj.optalgo.type.*;
import a8k.app.a8kproj.optalgo.utils.*; import a8k.app.a8kproj.optalgo.utils.*;
import a8k.app.a8kproj.optanalyzer.PeakDivisionComputer;
import a8k.app.a8kproj.optanalyzer.PeakNameAssigner; import a8k.app.a8kproj.optanalyzer.PeakNameAssigner;
import a8k.app.a8ktype.opttype.PeakDivision;
import a8k.app.a8ktype.opttype.PeakName;
import a8k.app.dao.db.type.ProjOptInfo;
import a8k.app.dao.db.type.ProjectBaseInfo;
import a8k.app.dao.db.type.OptCfg;
import a8k.app.utils.ProjBuildinInfo; import a8k.app.utils.ProjBuildinInfo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -35,17 +31,17 @@ public class A8kOptAlgoV2 {
Integer[] rawData; Integer[] rawData;
ProjBuildinInfo projInfo; ProjBuildinInfo projInfo;
ProjOptInfo projOptInfo;
OptCfg optCfg;
public OptAlgoAnalysResult processOptData(ProjBuildinInfo projInfo, ProjOptInfo projOptInfo, Integer[] data) {
public OptAlgoAnalysResult processOptData(ProjBuildinInfo projInfo, OptCfg optCfg, Integer[] data) {
double[] doubleData = new double[data.length]; double[] doubleData = new double[data.length];
for (int i = 0; i < data.length; i++) { for (int i = 0; i < data.length; i++) {
doubleData[i] = data[i]; doubleData[i] = data[i];
} }
this.projInfo = projInfo;
this.projOptInfo = projOptInfo;
this.rawData = data;
this.projInfo = projInfo;
this.optCfg = optCfg;
this.rawData = data;
return processOptData(doubleData); return processOptData(doubleData);
} }
@ -70,7 +66,7 @@ public class A8kOptAlgoV2 {
findpeak(avg, 140, 180, peaks.P160); findpeak(avg, 140, 180, peaks.P160);
findpeak(avg, 180, 220, peaks.P200); findpeak(avg, 180, 220, peaks.P200);
PeakNameAssigner.assignPeakName(projInfo.projId, projOptInfo.peakNameRefNum, peaks);
PeakNameAssigner.assignPeakName(projInfo.projId, optCfg.peakNameRefNum, peaks);
return OptAlgoAnalysResult.build(rawData, afSubSampling, peaks); return OptAlgoAnalysResult.build(rawData, afSubSampling, peaks);

6
src/main/java/a8k/app/a8kproj/optanalyzer/A8kOptXGetter.java

@ -4,7 +4,7 @@ import a8k.app.a8kproj.optalgo.type.OptAlgoAnalysResult;
import a8k.app.a8kproj.optanalyzer.exception.A8kOptProcessException; import a8k.app.a8kproj.optanalyzer.exception.A8kOptProcessException;
import a8k.app.a8ktype.opttype.A8kOptX; import a8k.app.a8ktype.opttype.A8kOptX;
import a8k.app.a8ktype.opttype.PeakDivision; import a8k.app.a8ktype.opttype.PeakDivision;
import a8k.app.dao.db.type.ProjOptInfo;
import a8k.app.dao.db.type.OptCfg;
import a8k.app.a8ktype.opttype.ReactionResultStatus; import a8k.app.a8ktype.opttype.ReactionResultStatus;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -13,7 +13,7 @@ public class A8kOptXGetter {
private static final Logger log = LoggerFactory.getLogger(A8kOptXGetter.class); private static final Logger log = LoggerFactory.getLogger(A8kOptXGetter.class);
static class Context { static class Context {
ProjOptInfo optcfg;
OptCfg optcfg;
OptAlgoAnalysResult optAlgoAnalysResult; OptAlgoAnalysResult optAlgoAnalysResult;
} }
@ -41,7 +41,7 @@ public class A8kOptXGetter {
return result; return result;
} }
static public Double getX(A8kOptX xType, ProjOptInfo optcfg, OptAlgoAnalysResult optAlgoAnalysResult) throws A8kOptProcessException {
static public Double getX(A8kOptX xType, OptCfg optcfg, OptAlgoAnalysResult optAlgoAnalysResult) throws A8kOptProcessException {
Context cxt = new Context(); Context cxt = new Context();
cxt.optcfg = optcfg; cxt.optcfg = optcfg;

6
src/main/java/a8k/app/a8kproj/optanalyzer/context/OptAnalyzeContext.java

@ -1,7 +1,7 @@
package a8k.app.a8kproj.optanalyzer.context; package a8k.app.a8kproj.optanalyzer.context;
import a8k.app.a8ktype.state.SampleInfo; import a8k.app.a8ktype.state.SampleInfo;
import a8k.app.dao.db.type.ProjOptInfo;
import a8k.app.dao.db.type.OptCfg;
import a8k.app.utils.ProjInfo; import a8k.app.utils.ProjInfo;
public class OptAnalyzeContext { public class OptAnalyzeContext {
@ -16,8 +16,8 @@ public class OptAnalyzeContext {
this.subProjIndex = subProjIndex; this.subProjIndex = subProjIndex;
} }
public ProjOptInfo getProjOptInfo() {
return projInfoCxt.projBuildinInfo.projOptInfos.get(subProjIndex);
public OptCfg getProjOptInfo() {
return projInfoCxt.projBuildinInfo.optcfg.get(subProjIndex);
} }
public String getProjName() { public String getProjName() {

15
src/main/java/a8k/app/dao/db/ProjOptInfoDao.java

@ -1,8 +1,7 @@
package a8k.app.dao.db; package a8k.app.dao.db;
import a8k.app.dao.db.type.ProjOptInfo;
import a8k.app.dao.db.type.OptCfg;
import a8k.app.utils.ZJsonHelper;
import a8k.app.utils.ZSqlite; import a8k.app.utils.ZSqlite;
import jakarta.annotation.PostConstruct; import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
@ -14,28 +13,28 @@ import java.util.List;
@Component @Component
@Slf4j @Slf4j
public class ProjOptInfoDao extends ZSqlite<ProjOptInfo> {
public class ProjOptInfoDao extends ZSqlite<OptCfg> {
@Resource @Resource
JdbcTemplate jdbcTemplate; JdbcTemplate jdbcTemplate;
@PostConstruct @PostConstruct
void init() { void init() {
init(jdbcTemplate, "zapp_a8k_project_opt_config", ProjOptInfo.class, true);
init(jdbcTemplate, "zapp_a8k_project_opt_config", OptCfg.class, true);
} }
public List<ProjOptInfo> findByProjIndex(Integer projId) {
public List<OptCfg> findByProjIndex(Integer projId) {
return queryList("select * from " + tableName + " where projId = ?;", projId); return queryList("select * from " + tableName + " where projId = ?;", projId);
} }
public void add(List<ProjOptInfo> vals) {
for (ProjOptInfo val : vals) {
public void add(List<OptCfg> vals) {
for (OptCfg val : vals) {
add(val); add(val);
} }
} }
public void add(ProjOptInfo val) {
public void add(OptCfg val) {
// checkVal(val); // checkVal(val);
super.add(val); super.add(val);
} }

3
src/main/java/a8k/app/dao/db/type/ProjOptInfo.java → src/main/java/a8k/app/dao/db/type/OptCfg.java

@ -4,7 +4,7 @@ import a8k.app.dao.db.type.a8kidcard.zenum.A8kOptType;
import java.io.Serializable; import java.io.Serializable;
public class ProjOptInfo implements Serializable {
public class OptCfg implements Serializable {
public int id = 0; public int id = 0;
public Integer projId; //项目INDEX public Integer projId; //项目INDEX
public String projName; //项目名称 public String projName; //项目名称
@ -20,4 +20,5 @@ public class ProjOptInfo implements Serializable {
public Integer optScanPeakNum; //子项目 实际扫描到的峰的数量 public Integer optScanPeakNum; //子项目 实际扫描到的峰的数量
public Integer peakNameRefNum; //子项目 峰的数量 public Integer peakNameRefNum; //子项目 峰的数量
} }

2
src/main/java/a8k/app/factory/FakeReactionResultFactory.java

@ -11,7 +11,7 @@ public class FakeReactionResultFactory {
public static List<ReactionResult> build(ProjInfo projcfg) { public static List<ReactionResult> build(ProjInfo projcfg) {
List<ReactionResult> resultList = new ArrayList<>(); List<ReactionResult> resultList = new ArrayList<>();
for (int i = 0; i < projcfg.projBuildinInfo.projOptInfos.size(); i++) {
for (int i = 0; i < projcfg.projBuildinInfo.optcfg.size(); i++) {
ReactionResult result = new ReactionResult("HSCRP xxxxx", "HC", 11.11, 22.22, 33.33, A8kResultUnit.ngPml, A8kResultUnit.ngPdl, A8kResultUnit.iuPml); ReactionResult result = new ReactionResult("HSCRP xxxxx", "HC", 11.11, 22.22, 33.33, A8kResultUnit.ngPml, A8kResultUnit.ngPdl, A8kResultUnit.iuPml);
resultList.add(result); resultList.add(result);
} }

2
src/main/java/a8k/app/service/data/ProjIdCardInfoMgrService.java

@ -120,7 +120,7 @@ public class ProjIdCardInfoMgrService {
return ecodeList; return ecodeList;
} }
if (projBuildinInfo.projOptInfos.size() != projExtInfoCard.subProjNum) {
if (projBuildinInfo.optcfg.size() != projExtInfoCard.subProjNum) {
ecodeList.add(A8kEcode.PROJ_CARD_ERROR_WRONG_OPT_NUM); // 项目卡配置的光学数量与项目配置不匹配 ecodeList.add(A8kEcode.PROJ_CARD_ERROR_WRONG_OPT_NUM); // 项目卡配置的光学数量与项目配置不匹配
return ecodeList; return ecodeList;
} }

32
src/main/java/a8k/app/service/data/ProjInfoMgrService.java

@ -6,23 +6,23 @@ import a8k.app.dao.db.ProjectBaseInfoDao;
import a8k.app.hardware.type.a8kcanprotocol.A8kEcode; import a8k.app.hardware.type.a8kcanprotocol.A8kEcode;
import a8k.app.dao.db.type.ProjExtInfoCard; import a8k.app.dao.db.type.ProjExtInfoCard;
import a8k.app.dao.db.type.ProjOptInfo;
import a8k.app.dao.db.type.ProjectBaseInfo; import a8k.app.dao.db.type.ProjectBaseInfo;
import a8k.app.dao.db.type.a8kidcard.zenum.A8kOptType;
import a8k.app.a8ktype.exception.AppException; import a8k.app.a8ktype.exception.AppException;
import a8k.app.utils.ProjBuildinInfo; import a8k.app.utils.ProjBuildinInfo;
import a8k.app.utils.ZAppChecker; import a8k.app.utils.ZAppChecker;
import a8k.app.utils.ZJsonHelper;
import jakarta.annotation.PostConstruct; import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.slf4j.Logger;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@Component @Component
@Slf4j
public class ProjInfoMgrService { public class ProjInfoMgrService {
static Logger logger = org.slf4j.LoggerFactory.getLogger(ProjInfoMgrService.class);
@Resource @Resource
A8kProjExtInfoCardDao a8KProjExtInfoCardDao; A8kProjExtInfoCardDao a8KProjExtInfoCardDao;
@ -70,12 +70,26 @@ public class ProjInfoMgrService {
try { try {
var allbuildInfo = getAllProjBuildInInfo(); var allbuildInfo = getAllProjBuildInInfo();
for (var buildInfo : allbuildInfo) { for (var buildInfo : allbuildInfo) {
logger.info("buildInfo:{}", buildInfo);
}
log.info("buildInfo:{}", ZJsonHelper.objectToJson(buildInfo));
Assert.notNull(buildInfo, "buildInfo is null");
//检查项目信息是否正确
Assert.isTrue(buildInfo.subProjNum == buildInfo.optcfg.size(), "subProjNum is not match");
//对象所有字段不为空
for (var field : buildInfo.getClass().getDeclaredFields()) {
field.setAccessible(true);
Assert.notNull(field.get(buildInfo), field.getName() + " is null");
}
//Opt所有字段不为空
for (var optInfo : buildInfo.optcfg) {
for (var field : optInfo.getClass().getDeclaredFields()) {
field.setAccessible(true);
Assert.notNull(field.get(optInfo), field.getName() + " is null");
}
}
} catch (AppException e) {
throw new RuntimeException(e);
}
} catch (AppException | IllegalAccessException e) {
log.info("init error", e);
} }
} }
} }

6
src/main/java/a8k/app/service/lowerctrl/OptScanModuleCtrlService.java

@ -12,8 +12,6 @@ import a8k.app.hardware.driver.type.StepMotorMId;
import a8k.app.service.param.OptModuleExtParamsMgr; import a8k.app.service.param.OptModuleExtParamsMgr;
import a8k.app.service.param.OptModuleParamsMgr; import a8k.app.service.param.OptModuleParamsMgr;
import a8k.app.dao.db.type.OptRawScanData; import a8k.app.dao.db.type.OptRawScanData;
import a8k.app.dao.db.type.ProjOptInfo;
import a8k.app.dao.db.type.ProjectBaseInfo;
import a8k.app.dao.db.type.a8kidcard.zenum.A8kOptType; import a8k.app.dao.db.type.a8kidcard.zenum.A8kOptType;
import a8k.app.a8ktype.device.IncubatorPos; import a8k.app.a8ktype.device.IncubatorPos;
import a8k.app.a8ktype.opttype.OptScanDirection; import a8k.app.a8ktype.opttype.OptScanDirection;
@ -155,8 +153,8 @@ public class OptScanModuleCtrlService {
OptScanResult result = new OptScanResult(); OptScanResult result = new OptScanResult();
OptRawScanData rawData = doOptScan(projBuildinInfo.projOptInfos.get(subProjIndex).optType);
OptAlgoAnalysResult analysResult = a8kOptAlgoV2.processOptData(projBuildinInfo, projBuildinInfo.projOptInfos.get(subProjIndex), rawData.rawData);
OptRawScanData rawData = doOptScan(projBuildinInfo.optcfg.get(subProjIndex).optType);
OptAlgoAnalysResult analysResult = a8kOptAlgoV2.processOptData(projBuildinInfo, projBuildinInfo.optcfg.get(subProjIndex), rawData.rawData);
result.rawData = rawData; result.rawData = rawData;
result.analysResult = analysResult; result.analysResult = analysResult;

2
src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/PLATE_OPT_SCAN.java

@ -88,7 +88,7 @@ public class PLATE_OPT_SCAN extends A8kStepAction {
} }
Integer subProjNum = cxt.getProjBuildinInfo().subProjNum; Integer subProjNum = cxt.getProjBuildinInfo().subProjNum;
Assert.isTrue(subProjNum == cxt.getProjBuildinInfo().projOptInfos.size(), "subProjNum != projOptInfoList.size");
Assert.isTrue(subProjNum == cxt.getProjBuildinInfo().optcfg.size(), "subProjNum != projOptInfoList.size");
for (int i = 0; i < subProjNum; i++) { for (int i = 0; i < subProjNum; i++) {
A8kOptType optType = cxt.getProjBuildinInfo().getOptType(i); A8kOptType optType = cxt.getProjBuildinInfo().getOptType(i);

20
src/main/java/a8k/app/utils/ProjBuildinInfo.java

@ -1,6 +1,6 @@
package a8k.app.utils; package a8k.app.utils;
import a8k.app.dao.db.type.ProjOptInfo;
import a8k.app.dao.db.type.OptCfg;
import a8k.app.dao.db.type.ProjectBaseInfo; import a8k.app.dao.db.type.ProjectBaseInfo;
import a8k.app.dao.db.type.a8kidcard.zenum.A8kOptType; import a8k.app.dao.db.type.a8kidcard.zenum.A8kOptType;
import a8k.app.dao.db.type.a8kidcard.zenum.A8kReactionFlowType; import a8k.app.dao.db.type.a8kidcard.zenum.A8kReactionFlowType;
@ -40,18 +40,18 @@ public class ProjBuildinInfo implements Serializable {
public Integer reactionPlateIncubationTimeMin; //反应板孵育时间Min public Integer reactionPlateIncubationTimeMin; //反应板孵育时间Min
public Integer reactionPlateDropletVolUl; //反应板滴样量ul public Integer reactionPlateDropletVolUl; //反应板滴样量ul
public List<ProjOptInfo> projOptInfos;
public List<OptCfg> optcfg;
public A8kOptType getOptType(Integer subProjIndex) { public A8kOptType getOptType(Integer subProjIndex) {
for (ProjOptInfo projOptInfo : projOptInfos) {
if (projOptInfo.subProjIndex.equals(subProjIndex)) {
return projOptInfo.optType;
for (OptCfg optCfg : optcfg) {
if (optCfg.subProjIndex.equals(subProjIndex)) {
return optCfg.optType;
} }
} }
return null; return null;
} }
public ProjBuildinInfo(ProjectBaseInfo baseInfo, List<ProjOptInfo> optInfos) {
public ProjBuildinInfo(ProjectBaseInfo baseInfo, List<OptCfg> optInfos) {
//遍历所有ProjectBaseInfo字段赋值给ProjBuildinInfo //遍历所有ProjectBaseInfo字段赋值给ProjBuildinInfo
for (var field : baseInfo.getClass().getDeclaredFields()) { for (var field : baseInfo.getClass().getDeclaredFields()) {
if (field.getName().equals("id")) { if (field.getName().equals("id")) {
@ -66,18 +66,18 @@ public class ProjBuildinInfo implements Serializable {
System.exit(1); System.exit(1);
} }
} }
projOptInfos = optInfos;
optcfg = optInfos;
} }
public String getOptMark() { public String getOptMark() {
boolean optT = false; boolean optT = false;
boolean optF = false; boolean optF = false;
for (ProjOptInfo projOptInfo : projOptInfos) {
if (projOptInfo.optType.equals(A8kOptType.TOPT)) {
for (OptCfg optCfg : optcfg) {
if (optCfg.optType.equals(A8kOptType.TOPT)) {
optT = true; optT = true;
} }
if (projOptInfo.optType.equals(A8kOptType.FOPT)) {
if (optCfg.optType.equals(A8kOptType.FOPT)) {
optF = true; optF = true;
} }
} }

3
src/main/java/a8k/app/utils/ProjInfo.java

@ -1,11 +1,8 @@
package a8k.app.utils; package a8k.app.utils;
import a8k.app.dao.db.type.ProjExtInfoCard; import a8k.app.dao.db.type.ProjExtInfoCard;
import a8k.app.dao.db.type.ProjOptInfo;
import a8k.app.dao.db.type.ProjectBaseInfo;
import java.io.Serializable; import java.io.Serializable;
import java.util.List;
public class ProjInfo implements Serializable { public class ProjInfo implements Serializable {
public ProjBuildinInfo projBuildinInfo; public ProjBuildinInfo projBuildinInfo;

12
src/main/java/a8k/app/utils/ZCSVUtils.java

@ -1,16 +1,14 @@
package a8k.app.utils; package a8k.app.utils;
import a8k.app.dao.db.type.ProjOptInfo;
import a8k.app.dao.db.type.OptCfg;
import cn.hutool.core.io.resource.ResourceUtil; import cn.hutool.core.io.resource.ResourceUtil;
import cn.hutool.core.text.csv.CsvReader; import cn.hutool.core.text.csv.CsvReader;
import cn.hutool.core.text.csv.CsvRowHandler;
import cn.hutool.core.text.csv.CsvUtil; import cn.hutool.core.text.csv.CsvUtil;
import cn.hutool.core.text.csv.CsvWriter; import cn.hutool.core.text.csv.CsvWriter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.io.File; import java.io.File;
import java.io.StringReader;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -80,20 +78,20 @@ public class ZCSVUtils {
public static void main(String[] args) { public static void main(String[] args) {
// write demo // write demo
List<ProjOptInfo> objects = new ArrayList<>();
List<OptCfg> objects = new ArrayList<>();
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {
ProjOptInfo projectBaseInfo = new ProjOptInfo();
OptCfg projectBaseInfo = new OptCfg();
projectBaseInfo.projId = i; projectBaseInfo.projId = i;
projectBaseInfo.projName = "projName" + i; projectBaseInfo.projName = "projName" + i;
objects.add(projectBaseInfo); objects.add(projectBaseInfo);
} }
writeCSV("tmp/tmp.csv", ProjOptInfo.class, objects);
writeCSV("tmp/tmp.csv", OptCfg.class, objects);
// read demo // read demo
List<ProjOptInfo> projectBaseInfos = readCSV("tmp/tmp.csv", ProjOptInfo.class);
List<OptCfg> projectBaseInfos = readCSV("tmp/tmp.csv", OptCfg.class);
for (var projectBaseInfo : projectBaseInfos) { for (var projectBaseInfo : projectBaseInfos) {
log.info("{}", ZJsonHelper.objectToJson(projectBaseInfo)); log.info("{}", ZJsonHelper.objectToJson(projectBaseInfo));
} }

13
src/main/java/a8k/extui/page/opt_calibration/A8kOptVerification.java

@ -18,9 +18,6 @@ import a8k.app.service.data.FileMgrService;
import a8k.app.service.data.ProjInfoMgrService; import a8k.app.service.data.ProjInfoMgrService;
import a8k.app.service.lowerctrl.OptScanModuleCtrlService; import a8k.app.service.lowerctrl.OptScanModuleCtrlService;
import a8k.app.service.lowerctrl.PlateBoxCtrlService; import a8k.app.service.lowerctrl.PlateBoxCtrlService;
import a8k.app.hardware.driver.StepMotorCtrlDriver;
import a8k.app.hardware.extdriver.MotorEnableExDriver;
import a8k.app.service.param.OptModuleExtParamsMgr;
import a8k.extui.type.ret.A8kScanCurve; import a8k.extui.type.ret.A8kScanCurve;
import a8k.app.dao.db.type.a8kidcard.zenum.A8kOptType; import a8k.app.dao.db.type.a8kidcard.zenum.A8kOptType;
import a8k.app.a8ktype.device.ConsumableGroup; import a8k.app.a8ktype.device.ConsumableGroup;
@ -172,7 +169,7 @@ public class A8kOptVerification {
report.optScanCurve = createScanCurve1200Point(optScanResult.rawData.rawData); report.optScanCurve = createScanCurve1200Point(optScanResult.rawData.rawData);
report.optReportFilePath = fileMgrService.storageOptReport(info.projName, info.projId, report.optReportFilePath = fileMgrService.storageOptReport(info.projName, info.projId,
subProjIndex, optScanResult); subProjIndex, optScanResult);
report.optType = info.projOptInfos.get(subProjIndex).optType;
report.optType = info.optcfg.get(subProjIndex).optType;
report.optScanResult = optScanResult; report.optScanResult = optScanResult;
optScanReports.add(report); optScanReports.add(report);
} }
@ -191,8 +188,8 @@ public class A8kOptVerification {
if (projInfo == null) { if (projInfo == null) {
throw AppException.ofSimplePrompt("请先选择项目"); throw AppException.ofSimplePrompt("请先选择项目");
} }
for (int i = 0; i < projInfo.projOptInfos.size(); i++) {
OptScanResult scanResult = getOptScanResult(projInfo.projOptInfos.get(i).optType);
for (int i = 0; i < projInfo.optcfg.size(); i++) {
OptScanResult scanResult = getOptScanResult(projInfo.optcfg.get(i).optType);
if (scanResult == null) { if (scanResult == null) {
scanResult = optScanModuleCtrlService.optScan(projInfo, i); scanResult = optScanModuleCtrlService.optScan(projInfo, i);
} }
@ -225,8 +222,8 @@ public class A8kOptVerification {
} }
List<ReactionResult> results = new ArrayList<>(); List<ReactionResult> results = new ArrayList<>();
for (int i = 0; i < this.projInfo.projOptInfos.size(); i++) {
OptScanResult optScanResult = getOptScanResult(this.projInfo.projOptInfos.get(i).optType);
for (int i = 0; i < this.projInfo.optcfg.size(); i++) {
OptScanResult optScanResult = getOptScanResult(this.projInfo.optcfg.get(i).optType);
Assert.notNull(optScanResult, "光学扫描结果为空"); Assert.notNull(optScanResult, "光学扫描结果为空");
results.add(A8kReactionResultComputer.optComputeResult(sampleInfo, projInfo, i, optScanResult.analysResult)); results.add(A8kReactionResultComputer.optComputeResult(sampleInfo, projInfo, i, optScanResult.analysResult));
} }

3
src/main/java/a8k/extui/page/opt_calibration/OptFormulaTestPage.java

@ -2,7 +2,6 @@ package a8k.extui.page.opt_calibration;
import a8k.app.a8kproj.A8kReactionResultComputer; import a8k.app.a8kproj.A8kReactionResultComputer;
import a8k.app.a8kproj.optalgo.type.A8kOptPeak;
import a8k.app.a8kproj.optalgo.type.OptAlgoAnalysResult; import a8k.app.a8kproj.optalgo.type.OptAlgoAnalysResult;
import a8k.app.a8ktype.device.BloodType; import a8k.app.a8ktype.device.BloodType;
import a8k.app.a8ktype.exception.AppException; import a8k.app.a8ktype.exception.AppException;
@ -81,7 +80,7 @@ public class OptFormulaTestPage {
ProjInfo projInfoContext = getProjInfo(); ProjInfo projInfoContext = getProjInfo();
if (projInfoContext.projBuildinInfo.projOptInfos.size() <= optIndex) {
if (projInfoContext.projBuildinInfo.optcfg.size() <= optIndex) {
throw AppException.of(A8kEcode.CODEERROR, "当前项目没有第%s个子项目", optIndex); throw AppException.of(A8kEcode.CODEERROR, "当前项目没有第%s个子项目", optIndex);
} }
return A8kReactionResultComputer.optComputeResult(sampleInfo, projInfoContext, optIndex, optAlgoAnalysResult); return A8kReactionResultComputer.optComputeResult(sampleInfo, projInfoContext, optIndex, optAlgoAnalysResult);

5
src/main/java/a8k/extui/page/opt_calibration/OptFormulaTestPageV2.java

@ -23,7 +23,6 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
@Component @Component
@ -129,7 +128,7 @@ public class OptFormulaTestPageV2 {
ProjInfo projInfoContext = getProjInfo(); ProjInfo projInfoContext = getProjInfo();
A8kOptPeaks peaks = new A8kOptPeaks(); A8kOptPeaks peaks = new A8kOptPeaks();
PeakNameAssigner.assignPeakName(projInfoContext.projBuildinInfo.projId, projInfoContext.projBuildinInfo.projOptInfos.get(optIndex).peakNameRefNum, peaks);
PeakNameAssigner.assignPeakName(projInfoContext.projBuildinInfo.projId, projInfoContext.projBuildinInfo.optcfg.get(optIndex).peakNameRefNum, peaks);
peaks.trySetPeakArea(PeakName.T4, T4Area); peaks.trySetPeakArea(PeakName.T4, T4Area);
peaks.trySetPeakArea(PeakName.R, RArea); peaks.trySetPeakArea(PeakName.R, RArea);
@ -139,7 +138,7 @@ public class OptFormulaTestPageV2 {
optAlgoAnalysResult = OptAlgoAnalysResult.build(new Integer[0], new double[0], peaks); optAlgoAnalysResult = OptAlgoAnalysResult.build(new Integer[0], new double[0], peaks);
if (projInfoContext.projBuildinInfo.projOptInfos.size() <= optIndex) {
if (projInfoContext.projBuildinInfo.optcfg.size() <= optIndex) {
throw AppException.of(A8kEcode.CODEERROR, "当前项目没有第%s个子项目", optIndex); throw AppException.of(A8kEcode.CODEERROR, "当前项目没有第%s个子项目", optIndex);
} }
return A8kReactionResultComputer.optComputeResult(sampleInfo, projInfoContext, optIndex, optAlgoAnalysResult); return A8kReactionResultComputer.optComputeResult(sampleInfo, projInfoContext, optIndex, optAlgoAnalysResult);

Loading…
Cancel
Save