|
|
@ -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) { |
|
|
|