Browse Source
Adds virtual state debug settings
Adds virtual state debug settings
Introduces a new UI page for configuring virtual device states, specifically focusing on the emergency tube state. This addition enables developers and testers to easily simulate various device scenarios and error conditions for more comprehensive testing and debugging. Also, refactors device virtual state services to virtualstate package.master
17 changed files with 459 additions and 360 deletions
-
11src/main/java/a8k/app/controler/api/v1/app/ws/AppEventWebsocketEndpoint.java
-
9src/main/java/a8k/app/controler/api/v1/app/ws/AppStateWebsocketEndpoint.java
-
9src/main/java/a8k/app/controler/api/v1/app/ws/AppWebSocketEndpointMgr.java
-
15src/main/java/a8k/app/service/statemgr/AppFlagStateMgr.java
-
3src/main/java/a8k/app/service/statemgr/ConsumablesMgrService.java
-
5src/main/java/a8k/app/service/statemgr/DeviceWorkStateMgrService.java
-
2src/main/java/a8k/app/service/statemgr/GStateMgrService.java
-
6src/main/java/a8k/app/service/statemgr/IncubationPlateStateMgr.java
-
5src/main/java/a8k/app/service/statemgr/OptScanModuleStateMgr.java
-
6src/main/java/a8k/app/service/statemgr/PreReactionStateMgr.java
-
2src/main/java/a8k/app/service/statemgr/TubeStateMgr.java
-
100src/main/java/a8k/app/service/virtualstate/DeviceVirtualStateMgrService.java
-
106src/main/java/a8k/app/service/virtualstate/TubeVirtualStateGenerator.java
-
31src/main/java/a8k/app/type/DeviceWarningFlagStateGroup.java
-
8src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java
-
35src/main/java/a8k/extui/page/extapp/debug_assistant/DeviceVirtualStateMgrSettingPage.java
@ -0,0 +1,106 @@ |
|||
package a8k.app.service.virtualstate; |
|||
|
|||
import a8k.app.factory.FakeA8kConsumableContainerFactory; |
|||
import a8k.app.factory.FakeAppErrorFactory; |
|||
import a8k.app.factory.ZAppPromptFactory; |
|||
import a8k.app.type.a8k.BloodType; |
|||
import a8k.app.type.a8k.proj.ProjBriefInfo; |
|||
import a8k.app.type.a8k.state.EmergencyTubePos; |
|||
import a8k.app.type.a8k.state.Tube; |
|||
import a8k.app.type.a8k.state.TubeHolder; |
|||
import a8k.app.type.a8k.state.enumtype.TubeHolderState; |
|||
import a8k.app.type.a8k.state.enumtype.TubeState; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Component |
|||
@Slf4j |
|||
public class TubeVirtualStateGenerator { |
|||
|
|||
TubeState emptyTubeState = TubeState.EMPTY; |
|||
Integer stateVersion = Integer.MAX_VALUE / 2; |
|||
|
|||
void addProjInfoToTube(Tube tube, Integer projId) { |
|||
ProjBriefInfo projBriefInfo = FakeA8kConsumableContainerFactory.buildFakeProjBriefInfo(projId); |
|||
tube.getProjInfo().add(projBriefInfo); |
|||
tube.getProjIds().add(projBriefInfo.projId); |
|||
} |
|||
|
|||
Tube createFakeTube(Integer pos) { |
|||
Tube tube = new Tube(pos); |
|||
tube.setSampleId("250109_001E0" + pos); |
|||
tube.setBloodType(BloodType.WHOLE_BLOOD); |
|||
tube.setSampleBarcode("112334455667"); |
|||
tube.setUserid(String.format("250109_%dE", pos)); |
|||
|
|||
switch (pos) { |
|||
case 1 -> tube.setState(TubeState.EMPTY); |
|||
case 2 -> { |
|||
tube.setState(TubeState.ERROR); |
|||
tube.setError(FakeAppErrorFactory.buildAEConsumeNotEnoughError()); |
|||
tube.setErrorInfo(ZAppPromptFactory.buildAppPrompt(tube.getError())); |
|||
|
|||
addProjInfoToTube(tube, 1); |
|||
addProjInfoToTube(tube, 2); |
|||
|
|||
} |
|||
case 3, 4, 5, 6 -> { |
|||
tube.setState(TubeState.PROCESS_COMPLETE); |
|||
addProjInfoToTube(tube, 1); |
|||
addProjInfoToTube(tube, 2); |
|||
addProjInfoToTube(tube, 3); |
|||
} |
|||
case 7 -> { |
|||
tube.setState(TubeState.PROCESSING); |
|||
addProjInfoToTube(tube, 1); |
|||
addProjInfoToTube(tube, 2); |
|||
addProjInfoToTube(tube, 3); |
|||
} |
|||
case 8, 9, 10 -> { |
|||
tube.setState(TubeState.TO_BE_PROCESSED); |
|||
addProjInfoToTube(tube, 1); |
|||
addProjInfoToTube(tube, 2); |
|||
} |
|||
} |
|||
tube.setIsHighTube(pos % 2 == 0); //假设偶数位置为高位管 |
|||
|
|||
return tube; |
|||
} |
|||
|
|||
public TubeHolder getVirtualTubeHolderState() { |
|||
TubeHolder tubeHolder = new TubeHolder(); |
|||
tubeHolder.setTubes(new Tube[]{ |
|||
createFakeTube(1), |
|||
createFakeTube(2), |
|||
createFakeTube(3), |
|||
createFakeTube(4), |
|||
createFakeTube(5), |
|||
createFakeTube(6), |
|||
createFakeTube(7), |
|||
createFakeTube(8), |
|||
createFakeTube(9), |
|||
createFakeTube(10) |
|||
}); |
|||
tubeHolder.setState(TubeHolderState.PROCESSING); |
|||
return tubeHolder; |
|||
} |
|||
|
|||
public EmergencyTubePos getVirtualEmergencyTube() { |
|||
var tubePosState = new EmergencyTubePos(); |
|||
tubePosState.tube = createFakeTube(0); |
|||
tubePosState.tube.setPos(0); |
|||
tubePosState.tube.setIsEmergency(true); |
|||
tubePosState.tube.setState(emptyTubeState); |
|||
return tubePosState; |
|||
} |
|||
|
|||
public Integer getVirtualTubeStateVersion() { |
|||
//虚拟状态生成模式 |
|||
return stateVersion; |
|||
} |
|||
|
|||
public void setEmptyTubeState(TubeState emptyTubeState) { |
|||
this.emptyTubeState = emptyTubeState; |
|||
stateVersion++; |
|||
} |
|||
} |
@ -0,0 +1,35 @@ |
|||
package a8k.extui.page.extapp.debug_assistant; |
|||
|
|||
import a8k.app.service.background.AppEventBusService; |
|||
import a8k.app.service.data.ProjInfoMgrService; |
|||
import a8k.app.service.statemgr.AppFlagStateMgr; |
|||
import a8k.app.service.virtualstate.DeviceVirtualStateMgrService; |
|||
import a8k.app.type.a8k.state.enumtype.TubeState; |
|||
import a8k.extui.mgr.ExtApiPageMgr; |
|||
import a8k.extui.type.ExtUIPageCfg; |
|||
import jakarta.annotation.PostConstruct; |
|||
import jakarta.annotation.Resource; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Component |
|||
@RequiredArgsConstructor |
|||
@Slf4j |
|||
public class DeviceVirtualStateMgrSettingPage { |
|||
|
|||
private final ExtApiPageMgr extApiPageMgr; |
|||
private final DeviceVirtualStateMgrService deviceVirtualStateMgrService; |
|||
|
|||
public void setEmergencyTubeState(TubeState tubeState) { |
|||
deviceVirtualStateMgrService.setEmptyTubeState(tubeState); |
|||
} |
|||
|
|||
|
|||
@PostConstruct |
|||
void init() { |
|||
ExtUIPageCfg page = new ExtUIPageCfg(this); |
|||
page.addFunction("设置应急管状态", this::setEmergencyTubeState); |
|||
extApiPageMgr.addPage(page); |
|||
} |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue