浏览代码

feat: 实现发生器曝光使能/禁止控制接口并集成到检查流程

- 在 deviceActions.ts 中新增 setExpEnable 和 setExpDisable 接口函数
- 在 bodyPositionSelection.ts 中集成 setExpEnable,切换体位成功后自动使能曝光
- 在 businessFlowMiddlewareLogic.ts 中集成 setExpDisable,离开检查前自动禁止曝光
- 两个接口使用相同的设备指令格式,reqName 分别为 SetExpEnable 和 SetExpDisable
- 包含完整的错误处理和日志记录机制

改动文件:
- src/API/exam/deviceActions.ts
- src/domain/exam/bodyPositionSelection.ts
- src/states/businessFlowMiddlewareLogic.ts
sw 3 天之前
父节点
当前提交
028dff7ae8
共有 3 个文件被更改,包括 55 次插入1 次删除
  1. 44 1
      src/API/exam/deviceActions.ts
  2. 4 0
      src/domain/exam/bodyPositionSelection.ts
  3. 7 0
      src/states/businessFlowMiddlewareLogic.ts

+ 44 - 1
src/API/exam/deviceActions.ts

@@ -32,4 +32,47 @@ const resetAllDevices = async () => {
     throw error;
   }
 };
-export { resetAllDevices };
+
+const setExpEnable = async () => {
+  const enableGenerator: DeviceActionMessage = {
+    deviceUri: generatorUri,
+    reqName: 'SetExpEnable',
+    reqParam: '',
+    reqTransaction: '',
+    reqClientID: '',
+  };
+
+  try {
+    console.log(`[deviceActions][setExpEnable][使能发生器曝光] ${JSON.stringify(enableGenerator)}`);
+    const response = await axiosInstance.post('/auth/device/action', enableGenerator);
+    if (response.data.code !== '0x000000') {
+      throw new Error('返回码不是0x000000');
+    }
+  } catch (error) {
+    console.error(`[使能发生器曝光出错]`, error);
+    throw error;
+  }
+};
+
+const setExpDisable = async () => {
+  const disableGenerator: DeviceActionMessage = {
+    deviceUri: generatorUri,
+    reqName: 'SetExpDisable',
+    reqParam: '',
+    reqTransaction: '',
+    reqClientID: '',
+  };
+
+  try {
+    console.log(`[deviceActions][setExpDisable][禁止发生器曝光] ${JSON.stringify(disableGenerator)}`);
+    const response = await axiosInstance.post('/auth/device/action', disableGenerator);
+    if (response.data.code !== '0x000000') {
+      throw new Error('返回码不是0x000000');
+    }
+  } catch (error) {
+    console.error(`[禁止发生器曝光出错]`, error);
+    throw error;
+  }
+};
+
+export { resetAllDevices, setExpEnable, setExpDisable };

+ 4 - 0
src/domain/exam/bodyPositionSelection.ts

@@ -11,6 +11,7 @@ import {
 } from '@/states/exam/bodyPositionListSlice';
 import { setBodyPositionDetail } from '@/states/exam/bodyPositionDetailSlice';
 import { changeBodyPosition } from '@/API/exam/changeBodyPosition';
+import { setExpEnable } from '@/API/exam/deviceActions';
 import { setBusinessFlow } from '@/states/BusinessFlowSlice';
 import emitter from '@/utils/eventEmitter';
 
@@ -49,6 +50,9 @@ export const selectBodyPositionWithFullLogic = async (
     if (currentKey === 'exam') {
       await changeBodyPosition(bodyPosition.sop_instance_uid);
 
+      // 切换体位成功后,使能发生器曝光
+      await setExpEnable();
+
       const successMsg = `Body position changed successfully: ${bodyPosition.view_name}`;
       console.log(`[bodyPositionSelection] ${successMsg}`);
 

+ 7 - 0
src/states/businessFlowMiddlewareLogic.ts

@@ -4,6 +4,7 @@ import { BusinessFlowState, setBusinessFlow } from './BusinessFlowSlice';
 import { setFeedbackOpen } from './exam/largeScreenSlice';
 import { setFeatureNotAvailableOpen } from './featureNotAvailableSlice';
 import { suspendOrCompleteStudy } from '@/API/patient/workActions';
+import { setExpDisable } from '@/API/exam/deviceActions';
 import { RootState } from './store';
 import { getQuota } from '@/API/security/quotaActions';
 import { showQuotaAlert } from './security/quotaModalSlice';
@@ -194,6 +195,12 @@ const businessFlowMiddlewareLogic: Middleware =
           console.log(
             `[businessFlowMiddleware] Exiting exam flow, last key was: ${state.lastKey}`
           );
+          // 离开检查前,禁止发生器曝光
+            try {
+            await setExpDisable();
+            } catch (error) {
+            console.error('[businessFlowMiddleware] setExpDisable Failed to disable exposure:', error);
+            }
           unprepare();
         }
       } else {