diff --git a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC40ApplyIncubatorPos.java b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC40ApplyIncubatorPos.java index c722f68..c98b05b 100644 --- a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC40ApplyIncubatorPos.java +++ b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC40ApplyIncubatorPos.java @@ -57,7 +57,12 @@ public class AC40ApplyIncubatorPos extends A8kActionTask { ProjectTaskContext cxt = projectContextMgrService.findCxt(tube.getSampleId(), toDoProj); //申请孵育盘位置 - cxt.setIncubatorPos(incubationPlateStateMgrService.takeOneIncubationIDLEPos()); + cxt.setIncubatorPos(incubationPlateStateMgrService.takeOneIncubationIDLEPos( + (IncubatorPos pos)->{ + incubationPlateStateMgrService.syncProjInfo(pos, cxt.getProjBuildinInfo(),cxt.getProjExtInfoCard()); + incubationPlateStateMgrService.syncSampleInfo(pos, cxt.getSampleInfo()); + } + )); //使用耗材 consumablesMgrService.removeReserveConsumable(cxt.getConsumable()); diff --git a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC41ProcessSample.java b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC41ProcessSample.java index 121ce97..296d299 100644 --- a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC41ProcessSample.java +++ b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC41ProcessSample.java @@ -296,8 +296,6 @@ public class AC41ProcessSample extends A8kActionTask { UIMessage.info(log, "开始孵育"); cxt.setStartIncubatedTime(System.currentTimeMillis()); cxt.setIncubatedTimeSec(cxt.getProjBuildinInfo().reactionPlateIncubationTimeMin * 60); - incubationPlateStateMgrService.syncSampleInfo(cxt.getIncubatorPos(), Objects.requireNonNull(ProjInfoUtils.buildProjBrefInfo(cxt)), cxt.getSampleInfo()); - incubationPlateStateMgrService.syncProjInfo(cxt.getIncubatorPos(), cxt.getProjBuildinInfo(), cxt.getProjExtInfoCard()); incubationPlateStateMgrService.startIncubating(cxt.getIncubatorPos(), cxt.getStartIncubatedTime(), cxt.getIncubatedTimeSec()); } diff --git a/src/main/java/a8k/app/service/statemgr/IncubationPlateStateMgrService.java b/src/main/java/a8k/app/service/statemgr/IncubationPlateStateMgrService.java index 4eacf7e..ed1b956 100644 --- a/src/main/java/a8k/app/service/statemgr/IncubationPlateStateMgrService.java +++ b/src/main/java/a8k/app/service/statemgr/IncubationPlateStateMgrService.java @@ -12,6 +12,7 @@ import a8k.app.a8ktype.type.ProjBriefInfo; import a8k.app.a8ktype.error.AppError; import a8k.app.dao.db.type.ProjExtInfoCard; import a8k.app.utils.ProjBuildinInfo; +import a8k.app.utils.ProjInfoUtils; import a8k.app.utils.ZTimeUtils; import cn.hutool.core.util.ObjectUtil; import jakarta.annotation.Resource; @@ -26,6 +27,11 @@ import java.util.List; @Slf4j public class IncubationPlateStateMgrService { + @FunctionalInterface + public interface SyncState { + void syncState(IncubatorPos pos); + } + @Resource GStateMgrService gStateMgrService; @@ -105,13 +111,14 @@ public class IncubationPlateStateMgrService { return null; } - synchronized public IncubatorPos takeOneIncubationIDLEPos() { + synchronized public IncubatorPos takeOneIncubationIDLEPos(SyncState syncState) { var subtanks = incubationPlate.subtanks; for (IncubationSubTank subtank : subtanks) { if (subtank.state.equals(IncubationSubTankState.EMPTY)) { subtank.state = IncubationSubTankState.RESERVED; log.info("孵育盘[{}] 状态->预定", subtank.getPos()); + syncState.syncState(subtank.getPos()); return subtank.getPos(); } } @@ -154,15 +161,13 @@ public class IncubationPlateStateMgrService { } } - synchronized public void syncSampleInfo(IncubatorPos pos, ProjBriefInfo projBriefInfo, SampleInfo sampleInfo) { + synchronized public void syncSampleInfo(IncubatorPos pos, SampleInfo sampleInfo) { var subtanks = incubationPlate.subtanks; subtanks[pos.off].sampleId = sampleInfo.sampleId; - subtanks[pos.off].projId = projBriefInfo.projId; subtanks[pos.off].bloodType = sampleInfo.bloodType; subtanks[pos.off].sampleBarcode = sampleInfo.sampleBarcode; subtanks[pos.off].userid = sampleInfo.userid; subtanks[pos.off].isEmergency = sampleInfo.isEmergency; - subtanks[pos.off].projInfo = projBriefInfo; } synchronized public void syncProjInfo(IncubatorPos pos, ProjBuildinInfo projBuildinInfo, ProjExtInfoCard projExtInfoCard) { @@ -170,6 +175,9 @@ public class IncubationPlateStateMgrService { subtanks[pos.off].projBuildinInfo = projBuildinInfo; subtanks[pos.off].projExtInfoCard = projExtInfoCard; subtanks[pos.off].lotId = projExtInfoCard.lotId; + subtanks[pos.off].projId = projBuildinInfo.projId; + subtanks[pos.off].projInfo = ProjInfoUtils.buildProjBrefInfo(projBuildinInfo); + } synchronized public void startIncubating(IncubatorPos pos, Long startIncubatedTime, Integer incubatedTimeSec) {