Browse Source

fix some bug

tags/v0
zhaohe 7 months ago
parent
commit
daf6aeadea
  1. 3
      src/main/java/a8k/app/a8ktype/state/IncubationSubTank.java
  2. 113
      src/main/java/a8k/app/hardware/basedriver/A8kCanBusService.java
  3. 52
      src/main/java/a8k/app/hardware/driver/CodeScanerDriver.java
  4. 1
      src/main/java/a8k/app/hardware/driver/OptModuleDriver.java
  5. 6
      src/main/java/a8k/app/service/background/BackgroudProcessCtrlService.java
  6. 4
      src/main/java/a8k/app/service/background/SensorDataUpdateService.java
  7. 12
      src/main/java/a8k/app/service/background/TemperatureCtrlService.java
  8. 3
      src/main/java/a8k/app/service/lowerctrl/LiquidOperationCtrlService.java
  9. 5
      src/main/java/a8k/app/service/lowerctrl/TubeFeedingCtrlService.java
  10. 14
      src/main/java/a8k/app/service/lowerctrl/TubePreProcesModuleCtrlService.java
  11. 3
      src/main/java/a8k/app/service/mainctrl/AppConsumablesScanService.java
  12. 2
      src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/PLATE_OPT_SCAN.java
  13. 15
      src/main/java/a8k/app/service/statemgr/IncubationPlateStateMgrService.java
  14. 26
      src/main/java/a8k/extui/page/debug/P00MainflowCtrlServiceDebugPage.java
  15. 30
      src/main/java/a8k/extui/page/debug/P01ProjInfoDebugPage.java
  16. 30
      src/main/java/a8k/extui/page/debug/P02ConsumablesMgrDebugPage.java
  17. 8
      src/main/java/a8k/extui/page/debug/P02TubeSettingDebugPage.java

3
src/main/java/a8k/app/a8ktype/state/IncubationSubTank.java

@ -44,6 +44,8 @@ public class IncubationSubTank implements Serializable {
public Long startIncubatedTime = 0L; //开始孵育时间
@Schema(description = "目标孵育时间(s)")
public Integer incubatedTimeSec = 0; //目标孵育时间
@Schema(description = "剩余孵育时间(s)")
public Integer remainTimeSec = 0; //剩余孵育时间
@Setter
@ -67,5 +69,4 @@ public class IncubationSubTank implements Serializable {
}
}

113
src/main/java/a8k/app/hardware/basedriver/A8kCanBusService.java

@ -142,15 +142,6 @@ public class A8kCanBusService {
return new A8kPacket(buffer.array());
}
private void setTxPacketContext(A8kPacket packet) {
txPacketContext = packet;
}
synchronized private A8kPacket getTxPacketContext() {
return txPacketContext;
}
public byte[] a8kIdcardReaderReadRaw() throws AppException {
int i = 0;
byte[] result = new byte[0];
@ -165,98 +156,13 @@ public class A8kCanBusService {
}
public void plateCodeScanerPushCardAndScan(MId id, Integer finalStopPos) throws AppException {
callcmd(id.toInt(), CmdId.plate_code_scaner_push_card_and_scan.toInt(), finalStopPos);
}
public void plateCodeScanerPushCardAndScanBlock(MId id, Integer finalStopPos, Integer actionOvertime) throws AppException {
plateCodeScanerPushCardAndScan(id, finalStopPos);
waitForMod(id, actionOvertime);
}
public void plateCodeScanerStopScan(MId id) throws AppException {
callcmd(id.toInt(), CmdId.plate_code_scaner_stop_scan.toInt());
}
public List<Integer> plateCodeScanerReadRawResult(MId id) throws AppException {
int i = 0;
List<Integer> result = new ArrayList<>();
while (true) {
var rxPacket = callcmd(id.toInt(), CmdId.plate_code_scaner_read_result.toInt(), i++);
if (rxPacket.getCmdContent().length == 0) {
break;
}
var rawdata = ByteArray.readU16bitArray(rxPacket.getCmdContent());
result.addAll(Arrays.asList(rawdata));
}
return result;
}
public PlateInfo plateCodeScannerReadCode(MId mid) throws AppException {
var receipt = callcmd(mid.toInt(), CmdId.plate_code_scaner_read_code.toInt());
PlateInfo plateInfo = new PlateInfo();
plateInfo.rawcode = Integer.toBinaryString(receipt.getContentI32(0));
plateInfo.legal = receipt.getContentI32(1) != 0;
plateInfo.lot = receipt.getContentI32(2);
plateInfo.item = receipt.getContentI32(3);
return plateInfo;
}
public void plateCodeScanerOpenLaser(MId id) throws AppException {
callcmd(id.toInt(), CmdId.plate_code_scaner_open_laser.toInt());
}
public void plateCodeScanerCloseLaser(MId id) throws AppException {
callcmd(id.toInt(), CmdId.plate_code_scaner_close_laser.toInt());
}
public Integer plateCodeScanerAdcReadRaw(MId id) throws AppException {
var packet = callcmd(id.toInt(), CmdId.plate_code_scaner_adc_readraw.toInt());
return packet.getContentI32(0);
}
// public void fanControlerSetSpeed(MId id, int speed) throws AppException {
// callcmd(id.toInt(), CmdId.fan_controler_set_speed.toInt(), speed);
// }
//
public void fanControlerSetSpeed(MId id, int speed) throws AppException {
callcmd(id.toInt(), CmdId.fan_controler_set_speed.toInt(), speed);
}
public void codeScanerStartScan(MId id) throws AppException {
callcmd(id.toInt(), CmdId.code_scaner_start_scan.toInt());
}
public void codeScanerStopScan(MId id) throws AppException {
callcmd(id.toInt(), CmdId.code_scaner_stop_scan.toInt());
}
public String codeScanerReadScanerResult(MId id) throws AppException {
A8kPacket ack = callcmd(id.toInt(), CmdId.code_scaner_read_scaner_result.toInt());
var contentBytes = ack.getCmdContent();
return new String(contentBytes);
}
public Boolean codeScanerResultIsReady(MId id) throws AppException {
var packet = callcmd(id.toInt(), CmdId.code_scaner_result_is_ready.toInt());
return packet.getContentI32(0) != 0;
}
public String codeScanerWaittingForResult(MId mid, Integer acitionOvertime) throws AppException {
long startedAt = System.currentTimeMillis();
do {
if (codeScanerResultIsReady(mid))
break;
long now = System.currentTimeMillis();
if (now - startedAt > acitionOvertime) {
codeScanerStopScan(mid);
return null;
}
OS.hsleep(100);
} while (true);
codeScanerStopScan(mid);
return codeScanerReadScanerResult(mid);
}
//
// module opeation
//
@ -274,9 +180,6 @@ public class A8kCanBusService {
}
public void moduleSetReg(MId id, RegIndex regindex, Integer reg) throws AppException {
callcmd(id.toInt(), CmdId.module_set_reg.toInt(), regindex.index, reg);
}
@ -291,14 +194,6 @@ public class A8kCanBusService {
return A8kEcode.fromInt(packet.getContentI32(0));
}
public void moduleClearError(MId id) throws AppException {
callcmd(id.toInt(), CmdId.module_clear_error.toInt());
}
public void moduleActiveCfg(MId id) throws AppException {
callcmd(id.toInt(), CmdId.module_active_cfg.toInt());
}
public Boolean priGetIOState(IOId ioid) throws AppException {
if (ioid.mtype == ModuleType.kboard) {

52
src/main/java/a8k/app/hardware/driver/CodeScanerDriver.java

@ -1,6 +1,9 @@
package a8k.app.hardware.driver;
import a8k.OS;
import a8k.app.hardware.basedriver.A8kCanBusService;
import a8k.app.hardware.type.a8kcanprotocol.A8kPacket;
import a8k.app.hardware.type.a8kcanprotocol.CmdId;
import a8k.app.hardware.type.a8kcanprotocol.MId;
import a8k.app.a8ktype.exception.AppException;
import jakarta.annotation.Resource;
@ -14,9 +17,9 @@ public class CodeScanerDriver {
public String pipetteModCodeScannerScanCode() throws AppException {
try {
canBus.codeScanerStartScan(MId.PipetteModCodeScanner);
String result = canBus.codeScanerWaittingForResult(MId.PipetteModCodeScanner, 300);
canBus.codeScanerStopScan(MId.PipetteModCodeScanner);
codeScanerStartScan(MId.PipetteModCodeScanner);
String result = codeScanerWaittingForResult(MId.PipetteModCodeScanner, 300);
codeScanerStopScan(MId.PipetteModCodeScanner);
return result;
} catch (AppException e) {
return "";
@ -25,12 +28,49 @@ public class CodeScanerDriver {
public String feedingModScannerModCodeScannerScanCode(Integer waittime) {
try {
canBus.codeScanerStartScan(MId.FeedingModScannerMod);
String result = canBus.codeScanerWaittingForResult(MId.FeedingModScannerMod, waittime);
canBus.codeScanerStopScan(MId.FeedingModScannerMod);
codeScanerStartScan(MId.FeedingModScannerMod);
String result = codeScanerWaittingForResult(MId.FeedingModScannerMod, waittime);
codeScanerStopScan(MId.FeedingModScannerMod);
return result;
} catch (AppException e) {
return "";
}
}
public void codeScanerStartScan(MId id) throws AppException {
canBus.callcmd(id.toInt(), CmdId.code_scaner_start_scan.toInt());
}
public void codeScanerStopScan(MId id) throws AppException {
canBus.callcmd(id.toInt(), CmdId.code_scaner_stop_scan.toInt());
}
public String codeScanerReadScanerResult(MId id) throws AppException {
A8kPacket ack = canBus.callcmd(id.toInt(), CmdId.code_scaner_read_scaner_result.toInt());
var contentBytes = ack.getCmdContent();
return new String(contentBytes);
}
public Boolean codeScanerResultIsReady(MId id) throws AppException {
var packet = canBus.callcmd(id.toInt(), CmdId.code_scaner_result_is_ready.toInt());
return packet.getContentI32(0) != 0;
}
public String codeScanerWaittingForResult(MId mid, Integer acitionOvertime) throws AppException {
long startedAt = System.currentTimeMillis();
do {
if (codeScanerResultIsReady(mid))
break;
long now = System.currentTimeMillis();
if (now - startedAt > acitionOvertime) {
codeScanerStopScan(mid);
return null;
}
OS.hsleep(100);
} while (true);
codeScanerStopScan(mid);
return codeScanerReadScanerResult(mid);
}
}

1
src/main/java/a8k/app/hardware/driver/OptModuleDriver.java

@ -45,6 +45,7 @@ public class OptModuleDriver {
if (statu == null || statu == ModuleStatus.BUSY) {
log.info("Waitting for Opt Finish");
} else if (statu == ModuleStatus.IDLE) {
log.info("Opt Finish");
break;
} else if (statu == ModuleStatus.ERROR) {
throw AppException.of(new AEHardwareError(canBus.moduleGetError(MId.OptMod), MId.OptMod, CmdId.a8k_opt_v2_t_start_scan));

6
src/main/java/a8k/app/service/background/BackgroudProcessCtrlService.java

@ -7,7 +7,7 @@ import org.springframework.stereotype.Component;
@Component
public class BackgroudProcessCtrlService {
@Resource
TemperatureCtrlService temperatureCtrlService;
TemperatureCtrlService temperatureCtrlService;
@Resource
SensorDataUpdateService sensorDataUpdateService;
@ -20,4 +20,8 @@ public class BackgroudProcessCtrlService {
temperatureCtrlService.stopTemperatureControl();
sensorDataUpdateService.stopUpdate();
}
synchronized public boolean getProcessState() {
return temperatureCtrlService.isTemperatureControlRunning() && sensorDataUpdateService.isUpdateRunning();
}
}

4
src/main/java/a8k/app/service/background/SensorDataUpdateService.java

@ -70,6 +70,10 @@ public class SensorDataUpdateService {
return new ArrayList<>(plateBoxTemperatureCurve);
}
public Boolean isUpdateRunning() {
return updateThread != null;
}
public void startUpdate() {
if (updateThread != null) {
return;

12
src/main/java/a8k/app/service/background/TemperatureCtrlService.java

@ -47,7 +47,7 @@ public class TemperatureCtrlService {
* 控制温度当APP配置发生变化时自动调整温度
* @throws AppException 温度控制异常
*/
public void startTemperatureControl() throws AppException {
synchronized public void startTemperatureControl() throws AppException {
stopTemperatureControl();
controlMode = TemperaControlMode.kAutoChangeFromAppSetting;
targetTemperature = 0;
@ -59,15 +59,19 @@ public class TemperatureCtrlService {
* @param tem 设定温度
* @throws AppException 温度控制异常
*/
public void startFixTemperatureControl(Integer tem) throws AppException {
synchronized public void startFixTemperatureControl(Integer tem) throws AppException {
stopTemperatureControl();
controlMode = TemperaControlMode.kFixTemperature;
targetTemperature = tem;
startTemperatureControlInternal();
}
synchronized public boolean isTemperatureControlRunning() {
return temperatureCtrlThread != null;
}
public void startTemperatureControlInternal() throws AppException {
synchronized public void startTemperatureControlInternal() throws AppException {
if (virtualDevice.isEnable()) {
return;
}
@ -109,7 +113,7 @@ public class TemperatureCtrlService {
});
}
public void stopTemperatureControl() throws AppException {
synchronized public void stopTemperatureControl() throws AppException {
if (virtualDevice.isEnable()) {
return;
}

3
src/main/java/a8k/app/service/lowerctrl/LiquidOperationCtrlService.java

@ -180,6 +180,9 @@ public class LiquidOperationCtrlService {
}
public void pirceLittleBuffer(PreReactionPos pos) throws AppException {
if (!pipetteCtrlDriver.isHasTip()) {
hbotMoveExCtrlService.takeTip(consumablesMgrService.takeNextTipPos());
}
hbotMoveExCtrlService.moveToLittleBufferPiercePos(pos.group, pos.index);
pipetteCtrlDriver.zMotorMoveToBlock(0);
}

5
src/main/java/a8k/app/service/lowerctrl/TubeFeedingCtrlService.java

@ -44,7 +44,6 @@ public class TubeFeedingCtrlService {
@Resource
StepMotorCtrlDriver stepMotorCtrlDriver;
/**
* 移动试管架到入口位置
*/
@ -148,8 +147,8 @@ public class TubeFeedingCtrlService {
moveTubeRackToScanPos();
tubeFeedingExCtrlService.scanClampModClamp();
canBus.codeScanerStartScan(MId.FeedingModScannerMod);
result = canBus.codeScanerWaittingForResult(MId.FeedingModScannerMod, 1000);
codeScaner.codeScanerStartScan(MId.FeedingModScannerMod);
result = codeScaner.codeScanerWaittingForResult(MId.FeedingModScannerMod, 1000);
tubeFeedingExCtrlService.scanClampModRelease();
if (result == null || result.isEmpty()) {
return "";

14
src/main/java/a8k/app/service/lowerctrl/TubePreProcesModuleCtrlService.java

@ -31,13 +31,13 @@ public class TubePreProcesModuleCtrlService {
/**
* 气溶胶风扇控制
*/
public void setAeroslFanPower(Boolean enable) throws Exception {
if (enable) {
canBus.fanControlerSetSpeed(MId.WbTubeFanMod, 99);
} else {
canBus.fanControlerSetSpeed(MId.WbTubeFanMod, 0);
}
}
// public void setAeroslFanPower(Boolean enable) throws Exception {
// if (enable) {
// canBus.fanControlerSetSpeed(MId.WbTubeFanMod, 99);
// } else {
// canBus.fanControlerSetSpeed(MId.WbTubeFanMod, 0);
// }
// }
//
// 单步

3
src/main/java/a8k/app/service/mainctrl/AppConsumablesScanService.java

@ -144,10 +144,11 @@ public class AppConsumablesScanService {
return;
}
var cState = consumablesMgrService.getState();
ProjExtInfoCard projExtInfoCard = projInfoMgrService.getProjExtInfoCard(result.lotId);
Assert.isTrue(ch.equals(result.chNum), "ch.equals(result.chNum)");
Assert.isTrue(projExtInfoCard != null, "projExtInfoCard != null");
Assert.isTrue(result.projId != null, "result.projId!=null");
Assert.isTrue(result.projId != 0, "result.projId!=0");
ProjBuildinInfo projCfg = null;

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

@ -94,7 +94,7 @@ public class PLATE_OPT_SCAN extends A8kStepAction {
A8kOptType optType = cxt.getProjBuildinInfo().getOptType(i);
OptScanResult optScanResult = cxt.getfOptScanResult(optType);
if (optScanResult == null) {
optScanResult = optScanModuleCtrlService.optScan(cxt.getProjBuildinInfo().projBaseInfo, cxt.getProjBuildinInfo().projOptInfos.get(subProjNum), i);
optScanResult = optScanModuleCtrlService.optScan(cxt.getProjBuildinInfo().projBaseInfo, cxt.getProjBuildinInfo().projOptInfos.get(i), i);
cxt.setOptScanResult(optType, optScanResult);
}

15
src/main/java/a8k/app/service/statemgr/IncubationPlateStateMgrService.java

@ -10,6 +10,7 @@ import a8k.app.a8ktype.error.AppError;
import a8k.app.utils.ZTimeUtils;
import cn.hutool.core.util.ObjectUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Date;
@ -169,4 +170,18 @@ public class IncubationPlateStateMgrService {
}
@Scheduled(fixedDelay = 500)
synchronized public void updateRemainTime() {
for (IncubationSubTank subtank : incubationPlate.subtanks) {
if (subtank.state.equals(IncubationSubTankState.INCUBATING)) {
subtank.remainTimeSec = (int) ((subtank.incubatedTimeSec * 1000 - (new Date().getTime() - subtank.startIncubatedTime)) / 1000);
if (subtank.remainTimeSec < 0) {
subtank.remainTimeSec = 0;
}
} else {
subtank.remainTimeSec = 0;
}
}
}
}

26
src/main/java/a8k/extui/page/debug/P00MainflowCtrlServiceDebugPage.java

@ -21,6 +21,7 @@ import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Component
@Slf4j
@ -47,20 +48,20 @@ public class P00MainflowCtrlServiceDebugPage {
SensorDataUpdateService sensorDataUpdateService;
@ExtApiStatu(name = "", group = "设备控制", order = 1)
@ExtApiStatu(name = "", group = "设备主流程工作状态", order = 1)
public DeviceWorkState readDeviceState() {
return deviceWorkStateMgrService.getDeviceWorkState();
}
@ExtApiStatu(name = "", group = "目标温度", order = 2)
public Integer getTargetTemperature() {
return temperatureCtrlService.getTargetTemperature();
}
@ExtApiStatu(name = "", group = "传感器状态", order = 3)
public SensorState sensorState() {
return gStateMgrService.getSensorState();
@ExtApiStatu(name = "", group = "其他状态", order = 4)
public Map<String, Object> getBackgroudProcessState() {
return Map.of(
"后台线程工作状态", backgroudProcessCtrlService.getProcessState(),
"目标温度", temperatureCtrlService.getTargetTemperature(),
"孵育盘实时温度", gStateMgrService.getSensorState().getIncubateBoxTemperature(),
"板夹仓实时温度", gStateMgrService.getSensorState().getPboxTemperature(),
"废量仓光栅状态", gStateMgrService.getSensorState().getWasteBinFullFlag()
);
}
public void startTemperatureControl() throws AppException {
@ -94,6 +95,10 @@ public class P00MainflowCtrlServiceDebugPage {
appDeviceCtrlService.pauseWork();
}
public void continueWork() throws AppException {
appDeviceCtrlService.continueWork();
}
public ExtApiCurve getIncubateBoxTemperatureCurve() {
var datas = sensorDataUpdateService.getIncubateBoxTemperatureCurve();
Integer targetTemp = temperatureCtrlService.getTargetTemperature();
@ -128,6 +133,7 @@ public class P00MainflowCtrlServiceDebugPage {
page.addFunction("开始", this::start);
page.addFunction("停止", this::stop);
page.addFunction("暂停", this::pause);
page.addFunction("继续", this::continueWork);
page.newGroup("状态");
page.addFunction("查看孵育盘温度曲线", this::getIncubateBoxTemperatureCurve);
page.addFunction("查看板夹仓温度曲线", this::getPlateBoxTemperatureCurve);

30
src/main/java/a8k/extui/page/debug/P01ProjInfoDebugPage.java

@ -7,6 +7,7 @@ import a8k.app.factory.ProjExtInfoCardFactory;
import a8k.app.service.data.ProjIdCardInfoMgrService;
import a8k.app.service.data.ProjInfoMgrService;
import a8k.app.utils.ProjBuildinInfo;
import a8k.app.utils.ZDateUtils;
import a8k.extui.mgr.ExtApiPageMgr;
import a8k.extui.type.ExtApiStatu;
import jakarta.annotation.PostConstruct;
@ -14,7 +15,10 @@ import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Component
@Slf4j
@ -69,15 +73,23 @@ public class P01ProjInfoDebugPage {
return projIdCardInfoMgrService.getByLotId(lotId);
}
public List<A8kProjInfoCardBreif> getBreifAll() {
return projIdCardInfoMgrService.getBreifAll();
public Map<String, String> getBreifAll() {
var all = projIdCardInfoMgrService.getBreifAll();
//按照projId排序
all.sort(Comparator.comparingInt(a -> a.projId));
Map<String, String> map = new HashMap<>();
for (A8kProjInfoCardBreif a : all) {
map.put(String.format("%-20s", a.projName), String.format("%2d %s %s", a.projId, a.lotId, ZDateUtils.toDateString(a.expiryDate)));
}
return map;
}
//
// 删除
//
public String deleteAll() {
public String deleteAll() {
projIdCardInfoMgrService.deleteAll();
return "删除成功";
}
@ -89,18 +101,16 @@ public class P01ProjInfoDebugPage {
@PostConstruct
public void init() {
var page = extApiPageMgr.newPage(this);
page.newGroup("新建");
page.newGroup("新建ID卡信息");
page.addFunction("保存挂载的项目信息", this::saveMountedProjInfoCard);
page.addFunction("添加所有项目的假项目信息", this::addAllProjFakeProjInfoCard);
page.addFunction("添加指定项目的假项目信息", this::addProjFakeProjInfoCard);
page.newGroup("查询");
page.addFunction("通过ProjID查询", this::getByProjId);
page.addFunction("通过LotID查询", this::getByLotId);
page.addFunction("查询所有", this::getBreifAll);
page.newGroup("查询ID卡信息");
page.addFunction("获取列表", this::getBreifAll);
page.addFunction("通过ProjID查询详细信息", this::getByProjId);
page.addFunction("通过LotID查询详细信息", this::getByLotId);
page.newGroup("删除");
page.addFunction("删除所有", this::deleteAll);
extApiPageMgr.addPage(page);
}
}

30
src/main/java/a8k/extui/page/debug/P02ConsumablesMgrDebugPage.java

@ -2,7 +2,6 @@ package a8k.extui.page.debug;
import a8k.app.a8ktype.device.ConsumableGroup;
import a8k.app.a8ktype.device.TipGroup;
import a8k.app.a8ktype.device.TipPos;
import a8k.app.a8ktype.device.consumables.LarBottleGroup;
import a8k.app.a8ktype.device.consumables.LittBottleGroup;
import a8k.app.a8ktype.device.consumables.ReactionPlateGroup;
@ -14,12 +13,12 @@ import a8k.app.a8ktype.type.ConsumablesScanReport;
import a8k.app.a8ktype.type.ConsumablesScanResultPacket;
import a8k.app.dao.db.type.ProjExtInfoCard;
import a8k.app.hardware.type.a8kcanprotocol.A8kEcode;
import a8k.app.service.data.ProjIdCardInfoMgrService;
import a8k.app.service.data.ProjInfoMgrService;
import a8k.app.service.mainctrl.AppConsumablesScanService;
import a8k.app.service.statemgr.ConsumablesMgrService;
import a8k.app.utils.ProjBuildinInfo;
import a8k.extui.mgr.ExtApiPageMgr;
import a8k.extui.page.data.ProjInfoMgrPage;
import a8k.extui.type.ExtApiStatu;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource;
@ -33,6 +32,9 @@ public class P02ConsumablesMgrDebugPage {
@Resource
AppConsumablesScanService appConsumablesScanService;
@Resource
ProjIdCardInfoMgrService projIdCardInfoMgrService;
@ExtApiStatu(name = "", group = "耗材-反应板状态1", minWidth = "16%", order = 1)
public ReactionPlateGroup getReactionPlateGroupState0() {
@ -169,23 +171,32 @@ public class P02ConsumablesMgrDebugPage {
consumablesMgrService.setCounsumableNum(group, num);
}
public void loadFakeConsumables(ConsumableGroup group, Integer projId) throws AppException {
ProjBuildinInfo projBuildinInfo = projInfoMgrService.getProjBuildInInfo(projId);
String fakeLotId = String.format("%s000000", projBuildinInfo.projBaseInfo.projShortName);
ProjExtInfoCard projExtInfoCard = projInfoMgrService.getProjExtInfoCard(fakeLotId);
public void loadConsumablesManual(ConsumableGroup group, String lotid) throws AppException {
ProjExtInfoCard projExtInfoCard = projInfoMgrService.getProjExtInfoCard(lotid);
if (projExtInfoCard == null) {
throw AppException.of(A8kEcode.CODEERROR, "项目卡信息不存在");
}
ConsumablesScanReport consumablesScanReport = new ConsumablesScanReport();
consumablesScanReport.chNum = group.off;
consumablesScanReport.projId = projExtInfoCard.projId;
consumablesScanReport.projName = projExtInfoCard.projName;
consumablesScanReport.projShortName = projExtInfoCard.projShortName;
consumablesScanReport.lotId = fakeLotId;
consumablesScanReport.lotId = lotid;
consumablesScanReport.state = ConsumablesScanReportErrorType.PASS;
appConsumablesScanService.loadingConsumablesDirectly(consumablesScanReport);
}
public void loadMountProjIDCardConsumablesManual(ConsumableGroup group) throws AppException {
ProjExtInfoCard projExtInfoCard = projIdCardInfoMgrService.getMountedProjInfoCard();
if (projExtInfoCard == null) {
throw AppException.of(A8kEcode.CODEERROR, "没有挂载的项目卡信息");
}
loadConsumablesManual(group, projExtInfoCard.lotId);
}
@PostConstruct
public void init() {
var page = extApiPageMgr.newPage(this);
@ -195,7 +206,8 @@ public class P02ConsumablesMgrDebugPage {
page.addFunction("设置Tip数量", this::setTipNum);
page.addFunction("设置耗材数量", this::setConsumableNum);
page.newGroup("辅助调试");
page.addFunction("加载假耗材", this::loadFakeConsumables);
page.addFunction("手动加载耗材", this::loadConsumablesManual);
page.addFunction("手动加载挂载项目卡耗材", this::loadMountProjIDCardConsumablesManual);
extApiPageMgr.addPage(page);

8
src/main/java/a8k/extui/page/debug/P02TubeSettingDebugPage.java

@ -42,11 +42,15 @@ public class P02TubeSettingDebugPage {
if (editChooseUuid == null) {
return null;
}
return tubeSettingMgrService.getTubeSetting(editChooseUuid, editTubeChooseIndex);
var val = tubeSettingMgrService.getTubeSetting(editChooseUuid, editTubeChooseIndex);
if (val == null) {
editChooseUuid = null;
return null;
}
return val;
}
//
// 上下文选择
//

Loading…
Cancel
Save