Explorar el Código

feat(exam): execute prepareForAcquisition on entering examination and display generator status in device area

sw hace 4 semanas
padre
commit
20c8ad8da2

+ 1 - 1
src/API/exam/detectorAPI.ts

@@ -23,7 +23,7 @@ const prepareForAcquisition = async (
   reqTransaction: string,
   reqClientID: string
 ): Promise<OpenDeviceResponse> => {
-  const response = await axiosInstance.post('/api/v1/auth/device/action', {
+  const response = await axiosInstance.post('/auth/device/action', {
     deviceUri: 'DIOS/DEVICE/Detector',
     reqName,
     reqParam,

+ 5 - 1
src/domain/exam/prepare.ts

@@ -1,6 +1,9 @@
 import { startListening, stopListening } from '../../domain/mqttService';
 import { openGenerator } from '../../API/exam/generatorAPI';
-import { openDetector } from '../../API/exam/detectorAPI';
+import {
+  openDetector,
+  prepareForAcquisition,
+} from '../../API/exam/detectorAPI';
 import {
   startListening as startListeningForDeviceOfGenerator,
   stopListening as stopListeningForDeviceOfGenerator,
@@ -19,6 +22,7 @@ const prepare = async () => {
     // Open the detector device
     await openDetector();
     console.log('[prepare] Detector device opened.');
+    prepareForAcquisition('PrepareAcquisition', '', '', '');
     console.log('[prepare] Preparation for inspection completed.');
   } catch (error) {
     console.error('[prepare] Failed to prepare for inspection:', error);

+ 2 - 0
src/domain/mqttServiceForDevice.ts

@@ -56,6 +56,8 @@ const handleMqttMessage = (message: MqttMessage) => {
     emitter.emit('GENERATOR_RAD_READY');
   } else if (message.CONTEXT === '3') {
     emitter.emit('ACQUISITION_STARTED');
+  } else if (message.CONTEXT === '4') {
+    emitter.emit('GENERATOR_STATUS_STANDBY'); //发生器ready
   }
 };
 const handleMqttMessageFromDetector = (message: MqttMessage) => {

+ 8 - 2
src/pages/exam/DeviceArea.tsx

@@ -6,12 +6,18 @@ import {
 } from '@ant-design/icons';
 import { useSelector } from 'react-redux';
 import { RootState } from '@/states/store';
-import { GeneratorStatus } from '@/states/exam/deviceAreaSlice';
+import {
+  GENERATOR_STATUS,
+  GeneratorStatus,
+} from '@/states/exam/deviceAreaSlice';
 
 const DeviceArea = ({ className }: { className?: string }) => {
   const generatorStatus = useSelector(
     (state: RootState) => state.deviceArea.generatorStatus
   );
+  const generatorStatus_2 = useSelector(
+    (state: RootState) => state.deviceArea.generatorStatus_2
+  );
   const exposureStatus = useSelector(
     (state: RootState) => state.deviceArea.exposureStatus
   );
@@ -29,7 +35,7 @@ const DeviceArea = ({ className }: { className?: string }) => {
         icon={
           <ToolOutlined
             className={
-              generatorStatus === GeneratorStatus.GENERATOR_RAD_OFF
+              generatorStatus_2 === GENERATOR_STATUS.GENERATOR_STATUS_STANDBY
                 ? 'text-green-500'
                 : generatorStatus === GeneratorStatus.GENERATOR_RAD_PREPARE
                   ? 'text-yellow-500'

+ 38 - 4
src/states/exam/deviceAreaSlice.ts

@@ -16,15 +16,30 @@ enum GeneratorStatus {
   GENERATOR_FLU_CINE_READY, // 电影模式准备
   GENERATOR_SYNC_MAX, // 状态最大值(枚举边界)
 }
+// 发生器状态
+enum GENERATOR_STATUS {
+  GENERATOR_STATUS_SHUTDOWN,
+  GENERATOR_STATUS_INIT,
+  GENERATOR_STATUS_SLEEP,
+  GENERATOR_STATUS_CHARGING, //充电
+  GENERATOR_STATUS_STANDBY,
+  GENERATOR_STATUS_EXP,
+  GENERATOR_STATUS_ERROR,
+  GENERATOR_STATUS_CALIBRATION,
+  GENERATOR_STATUS_SERVICE,
+  GENERATOR_STATUS_MAX,
+}
 
 interface DeviceAreaState {
-  generatorStatus: GeneratorStatus;
+  generatorStatus: GeneratorStatus; //同步状态
+  generatorStatus_2: GENERATOR_STATUS; //发生器状态
   exposureStatus: 'ready' | 'not_ready';
   tabletStatus: 'exposing' | 'ready' | 'error' | 'not_ready';
 }
 
 const initialState: DeviceAreaState = {
   generatorStatus: GeneratorStatus.GENERATOR_RAD_OFF, // Default to idle state
+  generatorStatus_2: GENERATOR_STATUS.GENERATOR_STATUS_INIT,
   exposureStatus: 'not_ready',
   tabletStatus: 'not_ready',
 };
@@ -48,6 +63,9 @@ const deviceAreaSlice = createSlice({
     ) => {
       state.tabletStatus = action.payload;
     },
+    setGeneratorStatus_2: (state, action: PayloadAction<GENERATOR_STATUS>) => {
+      state.generatorStatus_2 = action.payload;
+    },
   },
 });
 
@@ -75,6 +93,18 @@ emitter.on('GENERATOR_RAD_READY', () => {
   store.dispatch(setGeneratorStatus(GeneratorStatus.GENERATOR_RAD_READY));
 });
 
+emitter.on('GENERATOR_STATUS_STANDBY', () => {
+  store.dispatch(
+    setGeneratorStatus_2(GENERATOR_STATUS.GENERATOR_STATUS_STANDBY)
+  );
+});
+
+emitter.on('GENERATOR_STATUS_STANDBY', () => {
+  store.dispatch(
+    setGeneratorStatus_2(GENERATOR_STATUS.GENERATOR_STATUS_STANDBY)
+  );
+});
+
 emitter.on('AllReady_TRUE', () => {
   store.dispatch(setExposureStatus('ready'));
 });
@@ -83,7 +113,11 @@ emitter.on('AllReady_FALSE', () => {
   store.dispatch(setExposureStatus('not_ready'));
 });
 
-export const { setGeneratorStatus, setExposureStatus, setTabletStatus } =
-  deviceAreaSlice.actions;
-export { GeneratorStatus };
+export const {
+  setGeneratorStatus,
+  setExposureStatus,
+  setTabletStatus,
+  setGeneratorStatus_2,
+} = deviceAreaSlice.actions;
+export { GeneratorStatus, GENERATOR_STATUS };
 export default deviceAreaSlice.reducer;