diff --git a/src/main/java/a8k/app/a8ktype/state/IncubationSubTank.java b/src/main/java/a8k/app/a8ktype/state/IncubationSubTank.java index 405dacf..f025ae7 100644 --- a/src/main/java/a8k/app/a8ktype/state/IncubationSubTank.java +++ b/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 { } - } diff --git a/src/main/java/a8k/app/hardware/basedriver/A8kCanBusService.java b/src/main/java/a8k/app/hardware/basedriver/A8kCanBusService.java index b7f050c..3e14cea 100644 --- a/src/main/java/a8k/app/hardware/basedriver/A8kCanBusService.java +++ b/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 plateCodeScanerReadRawResult(MId id) throws AppException { - int i = 0; - List 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) { diff --git a/src/main/java/a8k/app/hardware/driver/CodeScanerDriver.java b/src/main/java/a8k/app/hardware/driver/CodeScanerDriver.java index c5c6b78..2da585d 100644 --- a/src/main/java/a8k/app/hardware/driver/CodeScanerDriver.java +++ b/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); + } + } diff --git a/src/main/java/a8k/app/hardware/driver/OptModuleDriver.java b/src/main/java/a8k/app/hardware/driver/OptModuleDriver.java index 43da829..5533336 100644 --- a/src/main/java/a8k/app/hardware/driver/OptModuleDriver.java +++ b/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)); diff --git a/src/main/java/a8k/app/service/background/BackgroudProcessCtrlService.java b/src/main/java/a8k/app/service/background/BackgroudProcessCtrlService.java index e785cd0..8b0868d 100644 --- a/src/main/java/a8k/app/service/background/BackgroudProcessCtrlService.java +++ b/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(); + } } diff --git a/src/main/java/a8k/app/service/background/SensorDataUpdateService.java b/src/main/java/a8k/app/service/background/SensorDataUpdateService.java index 49c7850..a384552 100644 --- a/src/main/java/a8k/app/service/background/SensorDataUpdateService.java +++ b/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; diff --git a/src/main/java/a8k/app/service/background/TemperatureCtrlService.java b/src/main/java/a8k/app/service/background/TemperatureCtrlService.java index c93b1d9..9723d40 100644 --- a/src/main/java/a8k/app/service/background/TemperatureCtrlService.java +++ b/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; } diff --git a/src/main/java/a8k/app/service/lowerctrl/LiquidOperationCtrlService.java b/src/main/java/a8k/app/service/lowerctrl/LiquidOperationCtrlService.java index 4eaa617..8c08d40 100644 --- a/src/main/java/a8k/app/service/lowerctrl/LiquidOperationCtrlService.java +++ b/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); } diff --git a/src/main/java/a8k/app/service/lowerctrl/TubeFeedingCtrlService.java b/src/main/java/a8k/app/service/lowerctrl/TubeFeedingCtrlService.java index 3a42ae8..f9842ce 100644 --- a/src/main/java/a8k/app/service/lowerctrl/TubeFeedingCtrlService.java +++ b/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 ""; diff --git a/src/main/java/a8k/app/service/lowerctrl/TubePreProcesModuleCtrlService.java b/src/main/java/a8k/app/service/lowerctrl/TubePreProcesModuleCtrlService.java index 84e92da..9fa3590 100644 --- a/src/main/java/a8k/app/service/lowerctrl/TubePreProcesModuleCtrlService.java +++ b/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); +// } +// } // // 单步 diff --git a/src/main/java/a8k/app/service/mainctrl/AppConsumablesScanService.java b/src/main/java/a8k/app/service/mainctrl/AppConsumablesScanService.java index 79523ec..46d9301 100644 --- a/src/main/java/a8k/app/service/mainctrl/AppConsumablesScanService.java +++ b/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; diff --git a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/PLATE_OPT_SCAN.java b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/PLATE_OPT_SCAN.java index 8d8cab9..962df30 100644 --- a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/PLATE_OPT_SCAN.java +++ b/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); } diff --git a/src/main/java/a8k/app/service/statemgr/IncubationPlateStateMgrService.java b/src/main/java/a8k/app/service/statemgr/IncubationPlateStateMgrService.java index 9bfec64..2b84e0d 100644 --- a/src/main/java/a8k/app/service/statemgr/IncubationPlateStateMgrService.java +++ b/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; + } + } + } + } diff --git a/src/main/java/a8k/extui/page/debug/P00MainflowCtrlServiceDebugPage.java b/src/main/java/a8k/extui/page/debug/P00MainflowCtrlServiceDebugPage.java index 32caf47..489b9ec 100644 --- a/src/main/java/a8k/extui/page/debug/P00MainflowCtrlServiceDebugPage.java +++ b/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 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); diff --git a/src/main/java/a8k/extui/page/debug/P01ProjInfoDebugPage.java b/src/main/java/a8k/extui/page/debug/P01ProjInfoDebugPage.java index 2d4d9af..a0e220c 100644 --- a/src/main/java/a8k/extui/page/debug/P01ProjInfoDebugPage.java +++ b/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 getBreifAll() { - return projIdCardInfoMgrService.getBreifAll(); + public Map getBreifAll() { + var all = projIdCardInfoMgrService.getBreifAll(); + //按照projId排序 + all.sort(Comparator.comparingInt(a -> a.projId)); + Map 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); } } diff --git a/src/main/java/a8k/extui/page/debug/P02ConsumablesMgrDebugPage.java b/src/main/java/a8k/extui/page/debug/P02ConsumablesMgrDebugPage.java index d58dcc9..19a3a47 100644 --- a/src/main/java/a8k/extui/page/debug/P02ConsumablesMgrDebugPage.java +++ b/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); diff --git a/src/main/java/a8k/extui/page/debug/P02TubeSettingDebugPage.java b/src/main/java/a8k/extui/page/debug/P02TubeSettingDebugPage.java index 0a5baba..9e84d95 100644 --- a/src/main/java/a8k/extui/page/debug/P02TubeSettingDebugPage.java +++ b/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; } - // // 上下文选择 //