Browse Source

update

tags/v0
zhaohe 8 months ago
parent
commit
72c4f719c0
  1. 40
      src/main/java/a8k/checker/ProjInfoChecker.java
  2. 6
      src/main/java/a8k/service/app/appdata/ProjInfoMgrService.java
  3. 64
      src/main/java/a8k/service/dao/A8kProjOptConfigDao.java
  4. 4
      src/main/java/a8k/service/dao/OptRawDataDao.java
  5. 74
      src/main/java/a8k/service/dao/ProjOptInfoDao.java
  6. 1
      src/main/java/a8k/service/dao/type/ProjOptInfo.java
  7. 8
      src/main/java/a8k/service/test/MainflowCtrlTestService.java
  8. 8
      src/main/java/a8k/service/test/TestStateMgrService.java
  9. 14
      src/main/java/a8k/utils/ZCSVUtils.java
  10. 2
      src/main/resources/a8k/db/zapp_a8k_project_info.csv
  11. 38
      src/main/resources/a8k/db/zapp_a8k_project_opt_config.csv

40
src/main/java/a8k/checker/ProjInfoChecker.java

@ -0,0 +1,40 @@
package a8k.checker;
import a8k.service.dao.ProjOptInfoDao;
import a8k.service.dao.ProjectBaseInfoDao;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Component
public class ProjInfoChecker {
private static final Logger log = LoggerFactory.getLogger(ProjInfoChecker.class);
@Resource
ProjOptInfoDao projOptInfoDao;
@Resource
ProjectBaseInfoDao projectBaseInfoDao;
@PostConstruct
void init() {
//遍历ProjBaseInfoDao中的所有项目获取光学项目数量然后查找OptRawScanData中的数据如果OptRawScanData中的数据数量不等于光学项目数量则输出错误信息
boolean triggerError = false;
var projBaseInfoList = projectBaseInfoDao.getAll();
for (var projBaseInfo : projBaseInfoList) {
var projOptInfoList = projOptInfoDao.findByProjIndex(projBaseInfo.projId);
if (projOptInfoList.size() != projBaseInfo.subProjNum) {
log.error("项目{}({}) 光学配置和子项目数量不匹配", projBaseInfo.projName, projBaseInfo.projId);
triggerError = true;
}
}
if (triggerError) {
System.exit(-1);
}
}
}

6
src/main/java/a8k/service/app/appdata/ProjInfoMgrService.java

@ -3,7 +3,7 @@ package a8k.service.app.appdata;
import a8k.hardware.type.a8kcanprotocol.A8kEcode;
import a8k.service.dao.A8kProjExtInfoCardDao;
import a8k.service.dao.ProjectBaseInfoDao;
import a8k.service.dao.A8kProjOptConfigDao;
import a8k.service.dao.ProjOptInfoDao;
import a8k.service.dao.type.ProjExtInfoCard;
import a8k.type.exception.AppException;
import a8k.utils.ProjBuildinInfo;
@ -24,7 +24,7 @@ public class ProjInfoMgrService {
@Resource
ProjectBaseInfoDao projectBaseInfoDao;
@Resource
A8kProjOptConfigDao a8KProjOptConfigDao;
ProjOptInfoDao projOptInfoDao;
// public ProjInfo getProjInfo(String lotid) {
// ProjInfo projCfg = new ProjInfo();
@ -51,7 +51,7 @@ public class ProjInfoMgrService {
public ProjBuildinInfo getProjBuildInInfo(Integer projId) throws AppException {
ProjBuildinInfo projBuildinInfo = new ProjBuildinInfo();
projBuildinInfo.projBaseInfo = projectBaseInfoDao.findByProjId(projId);
projBuildinInfo.projOptInfos = a8KProjOptConfigDao.findByProjIndex(projId);
projBuildinInfo.projOptInfos = projOptInfoDao.findByProjIndex(projId);
ZAppChecker.notNull(projBuildinInfo.projBaseInfo, A8kEcode.APPE_A8K_PROJ_UNSUPPORTED, "PROJ:%d IS NOT SUPPORTED", projId);
ZAppChecker.notEmpty(projBuildinInfo.projOptInfos, A8kEcode.APPE_A8K_PROJ_INFO_IS_ERROR, "PROJ:%d OPT CONFIG IS NOT EXIST", projId);

64
src/main/java/a8k/service/dao/A8kProjOptConfigDao.java

@ -1,64 +0,0 @@
package a8k.service.dao;
import a8k.service.app.appdata.UtilsProjectColorAllocer;
import a8k.service.dao.type.ProjOptInfo;
import a8k.utils.ZSqliteJdbcHelper;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource;
import lombok.SneakyThrows;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import java.sql.ResultSet;
import java.util.List;
@Component
public class A8kProjOptConfigDao {
private static final Logger logger = LoggerFactory.getLogger(A8kProjOptConfigDao.class);
private static final String tableName = "zapp_a8k_project_opt_config";
private static final Class<?> tClass = ProjOptInfo.class;
@Resource
JdbcTemplate jdbcTemplate;
@Resource
UtilsProjectColorAllocer colorAllocer;
@PostConstruct
void init() {
if (!ZSqliteJdbcHelper.isTableExist(jdbcTemplate, tableName)) {
ZSqliteJdbcHelper.createTable(jdbcTemplate, tableName, tClass);
}
}
@SneakyThrows private ProjOptInfo rowMapper(ResultSet rs, int rowNum) {
return (ProjOptInfo) ZSqliteJdbcHelper.rowMapper(rs, tClass);
}
public List<ProjOptInfo> findByProjIndex(Integer projId) {
List<ProjOptInfo> list = jdbcTemplate.query("select * from " + tableName + " where projId = ?;", this::rowMapper, projId);
if (list.isEmpty()) {
return null;
}
return list;
}
public void add(ProjOptInfo val) {
ZSqliteJdbcHelper.addObj(jdbcTemplate, tableName, tClass, val);
}
public void add(List<ProjOptInfo> vals) {
for (ProjOptInfo val : vals) {
add(val);
}
}
public void removeAll() {
ZSqliteJdbcHelper.deleteTable(jdbcTemplate, tableName);
ZSqliteJdbcHelper.createTable(jdbcTemplate, tableName, tClass);
}
}

4
src/main/java/a8k/service/dao/OptRawDataDao.java

@ -1,6 +1,7 @@
package a8k.service.dao;
import a8k.service.dao.type.OptRawScanData;
import a8k.utils.ZCSVUtils;
import a8k.utils.ZSqlite;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource;
@ -18,7 +19,8 @@ public class OptRawDataDao extends ZSqlite<OptRawScanData> {
@PostConstruct
void init() {
init(jdbcTemplate, "zapp_a8k_opt_raw_data_record", OptRawScanData.class);
init(jdbcTemplate, "zapp_a8k_opt_raw_data_record", OptRawScanData.class,true);
}
public OptRawScanData findByProjId(Integer projId) {

74
src/main/java/a8k/service/dao/ProjOptInfoDao.java

@ -0,0 +1,74 @@
package a8k.service.dao;
import a8k.service.app.appdata.UtilsProjectColorAllocer;
import a8k.service.dao.type.ProjOptInfo;
import a8k.utils.ZCSVUtils;
import a8k.utils.ZJsonHelper;
import a8k.utils.ZSqlite;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
@Slf4j
public class ProjOptInfoDao extends ZSqlite<ProjOptInfo> {
@Resource
JdbcTemplate jdbcTemplate;
@Resource
UtilsProjectColorAllocer utilsProjectColorAllocer;
@PostConstruct
void init() {
init(jdbcTemplate, "zapp_a8k_project_opt_config", ProjOptInfo.class, true);
var list = ZCSVUtils.readCSVFromResource("a8k/db/zapp_a8k_project_opt_config.csv", ProjOptInfo.class);
for (var val : list) {
val.id = val.projId * 10 + val.subProjIndex;
log.info("{}", ZJsonHelper.objectToJson(val));
add(val);
checkVal(val);
}
}
public List<ProjOptInfo> findByProjIndex(Integer projId) {
return queryList("select * from " + tableName + " where projId = ?;", projId);
}
public void add(List<ProjOptInfo> vals) {
for (ProjOptInfo val : vals) {
add(val);
}
}
public void removeAll() {
super.deleteAll();
}
private void checkVal(ProjOptInfo val) {
for (var field : val.getClass().getDeclaredFields()) {
if (field.getName().equals("id")) {
continue;
}
try {
field.setAccessible(true);
if (field.get(val) == null) {
log.error("field {} is null,{}", field.getName(), ZJsonHelper.objectToJson(val));
System.exit(1);
}
} catch (IllegalAccessException e) {
log.error("", e);
System.exit(1);
}
}
}
}

1
src/main/java/a8k/service/dao/type/ProjOptInfo.java

@ -19,4 +19,5 @@ public class ProjOptInfo implements Serializable {
public Integer optScanPeakNum; //子项目 实际扫描到的峰的数量
public Integer peakNameRefNum; //子项目 峰的数量
}

8
src/main/java/a8k/service/test/MainflowCtrlTestService.java

@ -22,7 +22,7 @@ import a8k.service.app.devicectrl.driver.type.StepMotorMId;
import a8k.service.app.devicectrl.exdriver.MotorEnableExDriver;
import a8k.service.dao.A8kProjExtInfoCardDao;
import a8k.service.dao.ProjectBaseInfoDao;
import a8k.service.dao.A8kProjOptConfigDao;
import a8k.service.dao.ProjOptInfoDao;
import a8k.service.test.state.TestModeState;
import a8k.service.test.state.VirtualDevice;
import a8k.type.*;
@ -81,7 +81,7 @@ public class MainflowCtrlTestService {
@Resource
ProjectBaseInfoDao projectBaseInfoDao;
@Resource
A8kProjOptConfigDao a8KProjOptConfigDao;
ProjOptInfoDao projOptInfoDao;
//
// Ctrl
@ -101,13 +101,13 @@ public class MainflowCtrlTestService {
void resetProjDB() {
a8KProjExtInfoCardDao.deleteAll();
projectBaseInfoDao.deleteAll();
a8KProjOptConfigDao.removeAll();
projOptInfoDao.removeAll();
}
void addProjInfo(Class<?> projClass) {
a8KProjExtInfoCardDao.addIdCard(FakeProjInfoFactory.buildIDCardInfo(projClass));
projectBaseInfoDao.add(FakeProjInfoFactory.buildProjectInfo(projClass));
a8KProjOptConfigDao.add(FakeProjInfoFactory.buildA8kProjOptConfigList(projClass));
projOptInfoDao.add(FakeProjInfoFactory.buildA8kProjOptConfigList(projClass));
}
void LoadingConsumablesDirectly(ConsumableGroup group, FakeProjInfo fake) {

8
src/main/java/a8k/service/test/TestStateMgrService.java

@ -3,7 +3,7 @@ package a8k.service.test;
import a8k.service.dao.A8kProjExtInfoCardDao;
import a8k.service.dao.ProjectBaseInfoDao;
import a8k.service.dao.A8kProjOptConfigDao;
import a8k.service.dao.ProjOptInfoDao;
import a8k.a8kproj.fakeproj.FakeProjInfoFactory;
import a8k.service.test.state.TestModeState;
import a8k.service.test.state.VirtualDevice;
@ -26,14 +26,14 @@ public class TestStateMgrService {
@Resource
A8kProjExtInfoCardDao a8KProjExtInfoCardDao;
@Resource
A8kProjOptConfigDao a8KProjOptConfigDao;
ProjOptInfoDao projOptInfoDao;
@Resource
ProjectBaseInfoDao projectBaseInfoDao;
public void addProjInfo(Class<?> projClass) {
projectBaseInfoDao.add(FakeProjInfoFactory.buildProjectInfo(projClass));
a8KProjOptConfigDao.add(FakeProjInfoFactory.buildA8kProjOptConfigList(projClass));
projOptInfoDao.add(FakeProjInfoFactory.buildA8kProjOptConfigList(projClass));
}
public void addIdCardInfo(Class<?> projClass) {
@ -43,7 +43,7 @@ public class TestStateMgrService {
public void resetProjDB() {
projectBaseInfoDao.deleteAll();
a8KProjOptConfigDao.removeAll();
projOptInfoDao.removeAll();
}
public void resetProjIDCardDB() {

14
src/main/java/a8k/utils/ZCSVUtils.java

@ -2,6 +2,7 @@ package a8k.utils;
import a8k.service.dao.ProjectBaseInfoDao;
import a8k.service.dao.type.ProjOptInfo;
import a8k.service.dao.type.ProjectBaseInfo;
import cn.hutool.core.io.resource.ResourceUtil;
import cn.hutool.core.text.csv.CsvReader;
@ -70,23 +71,20 @@ public class ZCSVUtils {
public static void main(String[] args) {
// write demo
List<ProjectBaseInfo> objects = new ArrayList<>();
List<ProjOptInfo> objects = new ArrayList<>();
for (int i = 0; i < 10; i++) {
ProjectBaseInfo projectBaseInfo = new ProjectBaseInfo();
ProjOptInfo projectBaseInfo = new ProjOptInfo();
projectBaseInfo.projId = i;
projectBaseInfo.projName = "projName" + i;
projectBaseInfo.projShortName = "projShortName" + i;
projectBaseInfo.subProjNum = i;
projectBaseInfo.reactionTemperature = i;
projectBaseInfo.color = "color" + i;
objects.add(projectBaseInfo);
}
writeCSV("tmp/zapp_a8k_project_info.csv", ProjectBaseInfo.class, objects);
writeCSV("tmp/tmp.csv", ProjOptInfo.class, objects);
// read demo
List<ProjectBaseInfo> projectBaseInfos = readCSV("tmp/zapp_a8k_project_info.csv", ProjectBaseInfo.class);
List<ProjOptInfo> projectBaseInfos = readCSV("tmp/tmp.csv", ProjOptInfo.class);
for (var projectBaseInfo : projectBaseInfos) {
log.info("{}", ZJsonHelper.objectToJson(projectBaseInfo));
}

2
src/main/resources/a8k/db/zapp_a8k_project_info.csv

@ -17,7 +17,7 @@ projId,projName,projShortName,subProjNum,reactionTemperature,color,reactionFlowT
17,HbAlC,HB,1,25,#9932CC,SampleAndBSAndProbeSubstance,5,5,3,100,12,75,
18,PCT plus,PP,1,25,#4B0082,SampleAndBSAndProbeSubstance,35,35,3,150,12,75,
20,Tn-I/CK-MB/Myoglobin,CT,3,25,#9370DB,SampleAndBSAndProbeSubstance,75,75,3,150,12,75,
22,PCT/hsCRP,PR,1,25,#6A5ACD,SampleAndBSAndProbeSubstance,35,35,3,150,12,75,
22,PCT/hsCRP,PR,2,25,#6A5ACD,SampleAndBSAndProbeSubstance,35,35,3,150,12,75,
24,SAA,SA,1,25,#E6E6FA,SampleAndBS,10,10,3,0,3,75,
25,AMH,AM,1,25,#F8F8FF,SampleAndBSAndProbeSubstance,50,50,3,150,12,75,
26,SAA/CRP,SC,2,25,#0000FF,SampleAndBS,10,10,3,0,3,75,

38
src/main/resources/a8k/db/zapp_a8k_project_opt_config.csv

@ -0,0 +1,38 @@
id,projId,projName,subProjIndex,subProjName,subProjShortName,optType,optScanRange,optScanPeakNum,peakNameRefNum
0,1,hsCRP,0,hsCRP,CA,FOPT,150,3,3
0,2,PCT,0,PCT,PC,TOPT,150,2,2
0,3,TSH,0,TSH,TS,FOPT,150,2,2
0,4,PRL,0,PRL,PL,FOPT,150,2,2
0,5,T3,0,T3,T3,FOPT,150,2,2
0,6,T4,0,T4,T4,FOPT,150,2,2
0,7,Total β hCG,0,Total β hCG,HC,FOPT,150,3,3
0,8,LH,0,LH,LH,FOPT,150,2,2
0,9,FSH,0,FSH,FS,FOPT,150,2,2
0,10,Progesterone,0,Progesterone,PG,FOPT,150,2,2
0,12,Tn-I plus,0,Tn-I plus,TG,TOPT,150,3,3
0,13,NT-proBNP,0,NT-proBNP,NB,TOPT,150,3,3
0,14,CK-MB,0,CK-MB ,CK,FOPT,150,2,2
0,15,Myoglobin,0,Myoglobin,MY,FOPT,150,2,2
0,16,D-Dimer,0,D-Dimer,DD,FOPT,150,2,2
0,17,HbAlC,0,HbAlC,HB,FOPT,150,2,2
0,18,PCT plus,0,PCT plus,PP,FOPT,150,3,3
0,20,Tn-I/CK-MB/Myoglobin,0,CK-MB,CK-MB,FOPT,200,3,4
0,20,Tn-I/CK-MB/Myoglobin,1,Myoglobin,Myoglobin,FOPT,200,3,4
0,20,Tn-I/CK-MB/Myoglobin,2,Tn-I,Tn-I,TOPT,200,4,4
0,22,PCT/hsCRP,0,PCT,PCT,TOPT,200,3,4
0,22,PCT/hsCRP,1,hsCRP,hsCRP,FOPT,200,3,4
0,24,SAA,0,SAA,SA,FOPT,150,3,3
0,25,AMH,0,AMH,AM,TOPT,150,3,3
0,26,SAA/CRP,0,SAA,SAA,FOPT,250,5,5
0,26,SAA/CRP,1,CRP,CRP,FOPT,250,5,5
0,27,Vitamin D,0,Vitamin D,VD,FOPT,150,2,2
0,33,ST2,0,ST2,ST,FOPT,150,2,2
0,36,MxA,0,MxA,MX,TOPT,150,2,2
0,48,IL-6,0,IL-6,IL,TOPT,150,3,3
0,49,Gastrin 17,0,Gastrin 17,GA,TOPT,150,2,2
0,50,Pepsinogen I/II,0,Pepsinogen I,PG-I,TOPT,150,3,3
0,50,Pepsinogen I/II,1,Pepsinogen II,PG-II,TOPT,150,3,3
0,52,NT-proBNP/ST2,0,ST2,ST2,FOPT,200,2,4
0,52,NT-proBNP/ST2,1,NT-proBNP,NT-proBNP,TOPT,200,3,4
0,54,Troponin T,0,Troponin T,TT,TOPT,150,3,3
0,55,BNP,0,BNP,BP,TOPT,150,3,3
Loading…
Cancel
Save