Index: ssts-web/src/test/java/test/forgon/disinfectsystem/packing/AllTests.java =================================================================== diff -u -r40694 -r41239 --- ssts-web/src/test/java/test/forgon/disinfectsystem/packing/AllTests.java (.../AllTests.java) (revision 40694) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/packing/AllTests.java (.../AllTests.java) (revision 41239) @@ -30,7 +30,8 @@ ComboToussePackingTests.class, PackingManagerForGetWaitPackingTaskJsonTests.class, PackingManagerForLoadWaitPackingTaskDepartAndPage.class, - PackingReviewControllerTests.class + PackingReviewControllerTests.class, + CheckSterilizationFailureTests.class }) public class AllTests { Index: ssts-web/src/test/java/test/forgon/disinfectsystem/packing/CheckSterilizationFailureTests.java =================================================================== diff -u --- ssts-web/src/test/java/test/forgon/disinfectsystem/packing/CheckSterilizationFailureTests.java (revision 0) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/packing/CheckSterilizationFailureTests.java (revision 41239) @@ -0,0 +1,676 @@ +package test.forgon.disinfectsystem.packing; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.util.Arrays; +import java.util.Collections; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.mockito.Spy; + +import com.forgon.Constants; +import com.forgon.disinfectsystem.entity.basedatamanager.deviceinterface.DeviceInterface; +import com.forgon.disinfectsystem.entity.basedatamanager.sterilizer.Sterilizer; +import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord; +import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.GtCommonStageDetails; +import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.GtCommonSterilizerRecord; +import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.XinhuaCleanH101513; +import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.XinhuaCleanH101513Details; +import com.forgon.disinfectsystem.sterilizationmanager.sterilizationrecord.service.SterilizationRecordManagerImpl; +import com.forgon.tools.hibernate.ObjectDao; +/** + * 验证灭菌记录是否存在温度或压强不在合格范围内 + * + */ +public class CheckSterilizationFailureTests{ + + @InjectMocks + @Spy + private SterilizationRecordManagerImpl sterilizationRecordManager; + + @Mock + private ObjectDao objectDao; + + private Long sterilizationRecordId = 123L; + + private AutoCloseable closeable; + @Before + public void setUp() { + closeable = MockitoAnnotations.openMocks(this); + } + + @After + public void tearDown() throws Exception { + closeable.close(); + } + // 测试用例1: enableSterilizationCompletionDeterminationViaEquipmentInterface为false时直接返回true + @Test + public void testCheckSterilizationFailure_WhenEnableFalse_ThenReturnTrue() { + + boolean result = sterilizationRecordManager.checkSterilizationFailure(sterilizationRecordId, false); + + + assertTrue(result); + } + + // 测试用例2: sterilizationRecord为null时返回true + @Test + public void testCheckSterilizationFailure_WhenSterilizationRecordNull_ThenReturnTrue() { + + doReturn(null).when(sterilizationRecordManager).get(sterilizationRecordId); + + boolean result = sterilizationRecordManager.checkSterilizationFailure(sterilizationRecordId, true); + + + assertTrue(result); + } + + // 测试用例4: sterilizer为null或配置不完整时返回true + @Test + public void testCheckSterilizationFailure_WhenSterilizerConfigIncomplete_ThenReturnTrue() { + + SterilizationRecord record = mock(SterilizationRecord.class); + Sterilizer sterilizer = mock(Sterilizer.class); + + doReturn(record).when(sterilizationRecordManager).get(sterilizationRecordId); + when(record.getSterilizationParaType()).thenReturn(SterilizationRecord.STERILIZATIONPARATYPE_TYPE_GETINGE_COMMON); + when(record.getSterilizer()).thenReturn(sterilizer); + when(sterilizer.getAutoJudgmentResult()).thenReturn("NO"); // 不是YES + + + boolean result = sterilizationRecordManager.checkSterilizationFailure(sterilizationRecordId, true); + + + assertTrue(result); + } + + // 测试用例5: deviceInterface为null时返回true + @Test + public void testCheckSterilizationFailure_WhenDeviceInterfaceNull_ThenReturnTrue() { + + SterilizationRecord record = mock(SterilizationRecord.class); + Sterilizer sterilizer = mock(Sterilizer.class); + + doReturn(record).when(sterilizationRecordManager).get(sterilizationRecordId); + when(record.getSterilizationParaType()).thenReturn(SterilizationRecord.STERILIZATIONPARATYPE_TYPE_GETINGE_COMMON); + when(record.getSterilizer()).thenReturn(sterilizer); + when(sterilizer.getAutoJudgmentResult()).thenReturn(Constants.STR_YES); + when(sterilizer.getPressureEndRange()).thenReturn(100.0); + when(sterilizer.getPressureStartRange()).thenReturn(50.0); + when(sterilizer.getTempEndRange()).thenReturn(200.0); + when(sterilizer.getTempStartRange()).thenReturn(100.0); + when(sterilizer.getDeviceInterface()).thenReturn(null); + + + boolean result = sterilizationRecordManager.checkSterilizationFailure(sterilizationRecordId, true); + + + assertTrue(result); + } + + // 测试用例6: GtCommonSterilizerRecord为null时返回true + @Test + public void testCheckSterilizationFailure_WhenGtCommonRecordNull_ThenReturnTrue() { + + SterilizationRecord record = createBasicSterilizationRecord(); + when(objectDao.getByProperty(GtCommonSterilizerRecord.class.getSimpleName(), + "sterilizationRecord.id", + record.getId())).thenReturn(null); + + + boolean result = sterilizationRecordManager.checkSterilizationFailure(sterilizationRecordId, true); + + + assertTrue(result); + } + + // 测试用例7: details为空时返回false + @Test + public void testCheckSterilizationFailure_WhenDetailsEmpty_ThenReturnFalse() { + + SterilizationRecord record = createBasicSterilizationRecord(); + GtCommonSterilizerRecord gtRecord = mock(GtCommonSterilizerRecord.class); + + when(objectDao.getByProperty(GtCommonSterilizerRecord.class.getSimpleName(), + "sterilizationRecord.id", + record.getId())).thenReturn(gtRecord); + when(gtRecord.getGtCommonStageDetailsList()).thenReturn(Collections.emptyList()); + + + boolean result = sterilizationRecordManager.checkSterilizationFailure(sterilizationRecordId, true); + + + assertFalse(result); + } + + // 测试用例8: 有灭菌阶段但p1Mbar为null时返回false + @Test + public void testCheckSterilizationFailure_WhenP1MbarNull_ThenReturnFalse() { + + SterilizationRecord record = createBasicSterilizationRecord(); + GtCommonSterilizerRecord gtRecord = mock(GtCommonSterilizerRecord.class); + GtCommonStageDetails detail = createStageDetail("灭菌", null, 150.0); + + when(objectDao.getByProperty(GtCommonSterilizerRecord.class.getSimpleName(), + "sterilizationRecord.id", + record.getId())).thenReturn(gtRecord); + when(gtRecord.getGtCommonStageDetailsList()).thenReturn(Arrays.asList(detail)); + + + boolean result = sterilizationRecordManager.checkSterilizationFailure(sterilizationRecordId, true); + + + assertFalse(result); + } + + // 测试用例9: 有灭菌阶段但t1Temp为null时返回false + @Test + public void testCheckSterilizationFailure_WhenT1TempNull_ThenReturnFalse() { + + SterilizationRecord record = createBasicSterilizationRecord(); + GtCommonSterilizerRecord gtRecord = mock(GtCommonSterilizerRecord.class); + GtCommonStageDetails detail = createStageDetail("灭菌", 75.0, null); + + when(objectDao.getByProperty(GtCommonSterilizerRecord.class.getSimpleName(), + "sterilizationRecord.id", + record.getId())).thenReturn(gtRecord); + when(gtRecord.getGtCommonStageDetailsList()).thenReturn(Arrays.asList(detail)); + + + boolean result = sterilizationRecordManager.checkSterilizationFailure(sterilizationRecordId, true); + + + assertFalse(result); + } + + // 测试用例10: 压力超过最大值时返回false + @Test + public void testCheckSterilizationFailure_WhenPressureExceedMax_ThenReturnFalse() { + + SterilizationRecord record = createBasicSterilizationRecord(); + + GtCommonSterilizerRecord gtRecord = mock(GtCommonSterilizerRecord.class); + // 压力范围50-100,但实际压力110超过最大值 + GtCommonStageDetails detail = createStageDetail("灭菌", 110.0, 150.0); + + when(objectDao.getByProperty(GtCommonSterilizerRecord.class.getSimpleName(), + "sterilizationRecord.id", + record.getId())).thenReturn(gtRecord); + when(gtRecord.getGtCommonStageDetailsList()).thenReturn(Arrays.asList(detail)); + + boolean result = sterilizationRecordManager.checkSterilizationFailure(sterilizationRecordId, true); + + + assertFalse(result); + } + + // 测试用例11: 压力低于最小值时返回false + @Test + public void testCheckSterilizationFailure_WhenPressureBelowMin_ThenReturnFalse() { + + SterilizationRecord record = createBasicSterilizationRecord(); + GtCommonSterilizerRecord gtRecord = mock(GtCommonSterilizerRecord.class); + // 压力范围50-100,但实际压力40低于最小值 + GtCommonStageDetails detail = createStageDetail("灭菌", 40.0, 150.0); + + when(objectDao.getByProperty(GtCommonSterilizerRecord.class.getSimpleName(), + "sterilizationRecord.id", + record.getId())).thenReturn(gtRecord); + when(gtRecord.getGtCommonStageDetailsList()).thenReturn(Arrays.asList(detail)); + + + boolean result = sterilizationRecordManager.checkSterilizationFailure(sterilizationRecordId, true); + + + assertFalse(result); + } + + // 测试用例12: 温度超过最大值时返回false + @Test + public void testCheckSterilizationFailure_WhenTemperatureExceedMax_ThenReturnFalse() { + + SterilizationRecord record = createBasicSterilizationRecord(); + GtCommonSterilizerRecord gtRecord = mock(GtCommonSterilizerRecord.class); + // 温度范围100-200,但实际温度210超过最大值 + GtCommonStageDetails detail = createStageDetail("灭菌", 75.0, 210.0); + + when(objectDao.getByProperty(GtCommonSterilizerRecord.class.getSimpleName(), + "sterilizationRecord.id", + record.getId())).thenReturn(gtRecord); + when(gtRecord.getGtCommonStageDetailsList()).thenReturn(Arrays.asList(detail)); + + + boolean result = sterilizationRecordManager.checkSterilizationFailure(sterilizationRecordId, true); + + + assertFalse(result); + } + + // 测试用例13: 温度低于最小值时返回false + @Test + public void testCheckSterilizationFailure_WhenTemperatureBelowMin_ThenReturnFalse() { + + SterilizationRecord record = createBasicSterilizationRecord(); + GtCommonSterilizerRecord gtRecord = mock(GtCommonSterilizerRecord.class); + // 温度范围100-200,但实际温度90低于最小值 + GtCommonStageDetails detail = createStageDetail("灭菌", 75.0, 90.0); + + when(objectDao.getByProperty(GtCommonSterilizerRecord.class.getSimpleName(), + "sterilizationRecord.id", + record.getId())).thenReturn(gtRecord); + when(gtRecord.getGtCommonStageDetailsList()).thenReturn(Arrays.asList(detail)); + + + boolean result = sterilizationRecordManager.checkSterilizationFailure(sterilizationRecordId, true); + + + assertFalse(result); + } + + // 测试用例14: 没有灭菌阶段时返回false + @Test + public void testCheckSterilizationFailure_WhenNoSterilizingStage_ThenReturnFalse() { + + SterilizationRecord record = createBasicSterilizationRecord(); + GtCommonSterilizerRecord gtRecord = mock(GtCommonSterilizerRecord.class); + // 阶段不是灭菌阶段 + GtCommonStageDetails detail = createStageDetail("其他阶段", 75.0, 150.0); + + when(objectDao.getByProperty(GtCommonSterilizerRecord.class.getSimpleName(), + "sterilizationRecord.id", + record.getId())).thenReturn(gtRecord); + when(gtRecord.getGtCommonStageDetailsList()).thenReturn(Arrays.asList(detail)); + + + boolean result = sterilizationRecordManager.checkSterilizationFailure(sterilizationRecordId, true); + + + assertFalse(result); + } + + // 测试用例15: 所有条件满足时返回true + @Test + public void testCheckSterilizationFailure_WhenAllConditionsMet_ThenReturnTrue() { + + SterilizationRecord record = createBasicSterilizationRecord(); + GtCommonSterilizerRecord gtRecord = mock(GtCommonSterilizerRecord.class); + // 压力和温度都在正常范围内 + GtCommonStageDetails detail = createStageDetail("灭菌", 75.0, 150.0); + + when(objectDao.getByProperty(GtCommonSterilizerRecord.class.getSimpleName(), + "sterilizationRecord.id", + record.getId())).thenReturn(gtRecord); + when(gtRecord.getGtCommonStageDetailsList()).thenReturn(Arrays.asList(detail)); + + + boolean result = sterilizationRecordManager.checkSterilizationFailure(sterilizationRecordId, true); + + + assertTrue(result); + } + + // 测试用例16: 使用英文阶段名STERILIZING + @Test + public void testCheckSterilizationFailure_WhenEnglishStageName_ThenWorkCorrectly() { + + SterilizationRecord record = createBasicSterilizationRecord(); + GtCommonSterilizerRecord gtRecord = mock(GtCommonSterilizerRecord.class); + // 使用英文阶段名 + GtCommonStageDetails detail = createStageDetail("STERILIZING", 75.0, 150.0); + + when(objectDao.getByProperty(GtCommonSterilizerRecord.class.getSimpleName(), + "sterilizationRecord.id", + record.getId())).thenReturn(gtRecord); + when(gtRecord.getGtCommonStageDetailsList()).thenReturn(Arrays.asList(detail)); + + + boolean result = sterilizationRecordManager.checkSterilizationFailure(sterilizationRecordId, true); + + + assertTrue(result); + } + + // 辅助方法:创建基本的SterilizationRecord + private SterilizationRecord createBasicSterilizationRecord() { + SterilizationRecord record = mock(SterilizationRecord.class); + Sterilizer sterilizer = mock(Sterilizer.class); + DeviceInterface deviceInterface = mock(DeviceInterface.class); + + + doReturn(record).when(sterilizationRecordManager).get(sterilizationRecordId); + when(record.getId()).thenReturn(sterilizationRecordId); + when(record.getSterilizationParaType()).thenReturn(SterilizationRecord.STERILIZATIONPARATYPE_TYPE_GETINGE_COMMON); + when(record.getSterilizer()).thenReturn(sterilizer); + + when(sterilizer.getAutoJudgmentResult()).thenReturn(Constants.STR_YES); + when(sterilizer.getPressureEndRange()).thenReturn(100.0); + when(sterilizer.getPressureStartRange()).thenReturn(50.0); + when(sterilizer.getTempEndRange()).thenReturn(200.0); + when(sterilizer.getTempStartRange()).thenReturn(100.0); + when(sterilizer.getDeviceInterface()).thenReturn(deviceInterface); + + return record; + } + + // 辅助方法:创建阶段详情 + private GtCommonStageDetails createStageDetail(String stageNo, Double p1Mbar, Double t1Temp) { + GtCommonStageDetails detail = mock(GtCommonStageDetails.class); + when(detail.getStageNo()).thenReturn(stageNo); + when(detail.getP1Mbar()).thenReturn(p1Mbar); + when(detail.getT1Temp()).thenReturn(t1Temp); + return detail; + } + + @Test + public void testCheckXinhuaCleanH10151_WhenRecordNull_ThenReturnTrue() { + + Sterilizer sterilizer = mock(Sterilizer.class); + SterilizationRecord sterilizationRecord = mock(SterilizationRecord.class); + + when(sterilizationRecord.getId()).thenReturn(sterilizationRecordId); + when(objectDao.getByProperty( + XinhuaCleanH101513.class.getSimpleName(), + "sterilizationRecordId", + sterilizationRecordId) + ).thenReturn(null); + + + boolean result = sterilizationRecordManager.checkXinhuaCleanH10151(sterilizer, sterilizationRecord); + + + assertTrue(result); + } + + @Test + public void testCheckXinhuaCleanH10151_WhenDetailsEmpty_ThenReturnFalse() { + + Sterilizer sterilizer = mock(Sterilizer.class); + SterilizationRecord sterilizationRecord = mock(SterilizationRecord.class); + XinhuaCleanH101513 record = mock(XinhuaCleanH101513.class); + + when(sterilizationRecord.getId()).thenReturn(sterilizationRecordId); + when(objectDao.getByProperty( + XinhuaCleanH101513.class.getSimpleName(), + "sterilizationRecordId", + sterilizationRecordId) + ).thenReturn(record); + when(record.getXinhuaCleanH101513DetailsList()).thenReturn(Collections.emptyList()); + + + boolean result = sterilizationRecordManager.checkXinhuaCleanH10151(sterilizer, sterilizationRecord); + + + assertFalse(result); + } + + @Test + public void testCheckXinhuaCleanH10151_WhenNoSterilizingStage_ThenReturnFalse() { + + Sterilizer sterilizer = createBasicSterilizer(); + SterilizationRecord sterilizationRecord = mock(SterilizationRecord.class); + XinhuaCleanH101513 record = mock(XinhuaCleanH101513.class); + XinhuaCleanH101513Details detail = createDetail("其他阶段", 75.0, 150.0); + + when(sterilizationRecord.getId()).thenReturn(sterilizationRecordId); + when(objectDao.getByProperty( + XinhuaCleanH101513.class.getSimpleName(), + "sterilizationRecordId", + sterilizationRecordId) + ).thenReturn(record); + when(record.getXinhuaCleanH101513DetailsList()).thenReturn(Arrays.asList(detail)); + + + boolean result = sterilizationRecordManager.checkXinhuaCleanH10151(sterilizer, sterilizationRecord); + + + assertFalse(result); + } + + @Test + public void testCheckXinhuaCleanH10151_WhenPressureExceedMax_ThenReturnFalse() { + + Sterilizer sterilizer = createBasicSterilizer(); // 压力范围50-100 + SterilizationRecord sterilizationRecord = mock(SterilizationRecord.class); + XinhuaCleanH101513 record = mock(XinhuaCleanH101513.class); + XinhuaCleanH101513Details detail = createDetail("灭菌", 110.0, 150.0); // 压力110超过最大值100 + + when(sterilizationRecord.getId()).thenReturn(sterilizationRecordId); + when(objectDao.getByProperty( + XinhuaCleanH101513.class.getSimpleName(), + "sterilizationRecordId", + sterilizationRecordId + )).thenReturn(record); + when(record.getXinhuaCleanH101513DetailsList()).thenReturn(Arrays.asList(detail)); + + + boolean result = sterilizationRecordManager.checkXinhuaCleanH10151(sterilizer, sterilizationRecord); + + + assertFalse(result); + } + + @Test + public void testCheckXinhuaCleanH10151_WhenPressureBelowMin_ThenReturnFalse() { + + Sterilizer sterilizer = createBasicSterilizer(); // 压力范围50-100 + SterilizationRecord sterilizationRecord = mock(SterilizationRecord.class); + XinhuaCleanH101513 record = mock(XinhuaCleanH101513.class); + XinhuaCleanH101513Details detail = createDetail("灭菌", 40.0, 150.0); // 压力40低于最小值50 + + when(sterilizationRecord.getId()).thenReturn(sterilizationRecordId); + when(objectDao.getByProperty( + XinhuaCleanH101513.class.getSimpleName(), + "sterilizationRecordId", + sterilizationRecordId + )).thenReturn(record); + when(record.getXinhuaCleanH101513DetailsList()).thenReturn(Arrays.asList(detail)); + + + boolean result = sterilizationRecordManager.checkXinhuaCleanH10151(sterilizer, sterilizationRecord); + + + assertFalse(result); + } + + @Test + public void testCheckXinhuaCleanH10151_WhenTemperatureExceedMax_ThenReturnFalse() { + + Sterilizer sterilizer = createBasicSterilizer(); // 温度范围100-200 + SterilizationRecord sterilizationRecord = mock(SterilizationRecord.class); + XinhuaCleanH101513 record = mock(XinhuaCleanH101513.class); + XinhuaCleanH101513Details detail = createDetail("灭菌", 75.0, 210.0); // 温度210超过最大值200 + + when(sterilizationRecord.getId()).thenReturn(sterilizationRecordId); + when(objectDao.getByProperty( + XinhuaCleanH101513.class.getSimpleName(), + "sterilizationRecordId", + sterilizationRecordId + )).thenReturn(record); + when(record.getXinhuaCleanH101513DetailsList()).thenReturn(Arrays.asList(detail)); + + + boolean result = sterilizationRecordManager.checkXinhuaCleanH10151(sterilizer, sterilizationRecord); + + + assertFalse(result); + } + + @Test + public void testCheckXinhuaCleanH10151_WhenTemperatureBelowMin_ThenReturnFalse() { + + Sterilizer sterilizer = createBasicSterilizer(); // 温度范围100-200 + SterilizationRecord sterilizationRecord = mock(SterilizationRecord.class); + XinhuaCleanH101513 record = mock(XinhuaCleanH101513.class); + XinhuaCleanH101513Details detail = createDetail("灭菌", 75.0, 90.0); // 温度90低于最小值100 + + when(sterilizationRecord.getId()).thenReturn(sterilizationRecordId); + when(objectDao.getByProperty( + XinhuaCleanH101513.class.getSimpleName(), + "sterilizationRecordId", + sterilizationRecordId + )).thenReturn(record); + when(record.getXinhuaCleanH101513DetailsList()).thenReturn(Arrays.asList(detail)); + + + boolean result = sterilizationRecordManager.checkXinhuaCleanH10151(sterilizer, sterilizationRecord); + + + assertFalse(result); + } + + @Test + public void testCheckXinhuaCleanH10151_WhenAllConditionsMet_ThenReturnTrue() { + + Sterilizer sterilizer = createBasicSterilizer(); // 压力50-100,温度100-200 + SterilizationRecord sterilizationRecord = mock(SterilizationRecord.class); + XinhuaCleanH101513 record = mock(XinhuaCleanH101513.class); + XinhuaCleanH101513Details detail = createDetail("灭菌", 75.0, 150.0); // 都在正常范围内 + + when(sterilizationRecord.getId()).thenReturn(sterilizationRecordId); + when(objectDao.getByProperty( + XinhuaCleanH101513.class.getSimpleName(), + "sterilizationRecordId", + sterilizationRecordId + )).thenReturn(record); + when(record.getXinhuaCleanH101513DetailsList()).thenReturn(Arrays.asList(detail)); + + + boolean result = sterilizationRecordManager.checkXinhuaCleanH10151(sterilizer, sterilizationRecord); + + + assertTrue(result); + } + + @Test + public void testCheckXinhuaCleanH10151_WhenMultipleDetailsWithOneSterilizing_ThenReturnTrue() { + + Sterilizer sterilizer = createBasicSterilizer(); + SterilizationRecord sterilizationRecord = mock(SterilizationRecord.class); + XinhuaCleanH101513 record = mock(XinhuaCleanH101513.class); + + XinhuaCleanH101513Details detail1 = createDetail("预热", 60.0, 80.0); + XinhuaCleanH101513Details detail2 = createDetail("灭菌", 75.0, 150.0); // 灭菌阶段,参数正常 + XinhuaCleanH101513Details detail3 = createDetail("冷却", 65.0, 70.0); + + when(sterilizationRecord.getId()).thenReturn(sterilizationRecordId); + when(objectDao.getByProperty( + XinhuaCleanH101513.class.getSimpleName(), + "sterilizationRecordId", + sterilizationRecordId + )).thenReturn(record); + when(record.getXinhuaCleanH101513DetailsList()).thenReturn(Arrays.asList(detail1, detail2, detail3)); + + + boolean result = sterilizationRecordManager.checkXinhuaCleanH10151(sterilizer, sterilizationRecord); + + + assertTrue(result); + } + + @Test + public void testCheckXinhuaCleanH10151_WhenMultipleSterilizingStagesAllValid_ThenReturnTrue() { + + Sterilizer sterilizer = createBasicSterilizer(); + SterilizationRecord sterilizationRecord = mock(SterilizationRecord.class); + XinhuaCleanH101513 record = mock(XinhuaCleanH101513.class); + + XinhuaCleanH101513Details detail1 = createDetail("灭菌", 70.0, 140.0); + XinhuaCleanH101513Details detail2 = createDetail("灭菌", 75.0, 150.0); + XinhuaCleanH101513Details detail3 = createDetail("灭菌", 80.0, 160.0); // 所有灭菌阶段参数都正常 + + when(sterilizationRecord.getId()).thenReturn(sterilizationRecordId); + when(objectDao.getByProperty( + XinhuaCleanH101513.class.getSimpleName(), + "sterilizationRecordId", + sterilizationRecordId + )).thenReturn(record); + when(record.getXinhuaCleanH101513DetailsList()).thenReturn(Arrays.asList(detail1, detail2, detail3)); + + + boolean result = sterilizationRecordManager.checkXinhuaCleanH10151(sterilizer, sterilizationRecord); + + + assertTrue(result); + } + + @Test + public void testCheckXinhuaCleanH10151_WhenMultipleSterilizingStagesOneInvalid_ThenReturnFalse() { + + Sterilizer sterilizer = createBasicSterilizer(); // 压力50-100 + SterilizationRecord sterilizationRecord = mock(SterilizationRecord.class); + XinhuaCleanH101513 record = mock(XinhuaCleanH101513.class); + + XinhuaCleanH101513Details detail1 = createDetail("灭菌", 70.0, 140.0); // 正常 + XinhuaCleanH101513Details detail2 = createDetail("灭菌", 45.0, 150.0); // 压力45低于最小值50 -> 应该返回false + XinhuaCleanH101513Details detail3 = createDetail("灭菌", 80.0, 160.0); // 正常 + + when(sterilizationRecord.getId()).thenReturn(sterilizationRecordId); + when(objectDao.getByProperty( + XinhuaCleanH101513.class.getSimpleName(), + "sterilizationRecordId", + sterilizationRecordId + )).thenReturn(record); + when(record.getXinhuaCleanH101513DetailsList()).thenReturn(Arrays.asList(detail1, detail2, detail3)); + + + boolean result = sterilizationRecordManager.checkXinhuaCleanH10151(sterilizer, sterilizationRecord); + + + assertFalse(result); + } + + @Test + public void testCheckXinhuaCleanH10151_WhenBoundaryValues_ThenWorkCorrectly() { + + Sterilizer sterilizer = createBasicSterilizer(); // 压力50-100,温度100-200 + SterilizationRecord sterilizationRecord = mock(SterilizationRecord.class); + XinhuaCleanH101513 record = mock(XinhuaCleanH101513.class); + + // 边界值测试 + XinhuaCleanH101513Details detail1 = createDetail("灭菌", 50.0, 100.0); // 最小值边界 + XinhuaCleanH101513Details detail2 = createDetail("灭菌", 100.0, 200.0); // 最大值边界 + XinhuaCleanH101513Details detail3 = createDetail("灭菌", 75.0, 150.0); // 中间值 + + when(sterilizationRecord.getId()).thenReturn(sterilizationRecordId); + when(objectDao.getByProperty( + XinhuaCleanH101513.class.getSimpleName(), + "sterilizationRecordId", + sterilizationRecordId) + ).thenReturn(record); + when(record.getXinhuaCleanH101513DetailsList()).thenReturn(Arrays.asList(detail1, detail2, detail3)); + + + boolean result = sterilizationRecordManager.checkXinhuaCleanH10151(sterilizer, sterilizationRecord); + + + assertTrue(result); + } + + // 辅助方法:创建基本的Sterilizer + private Sterilizer createBasicSterilizer() { + Sterilizer sterilizer = mock(Sterilizer.class); + when(sterilizer.getPressureEndRange()).thenReturn(100.0); + when(sterilizer.getPressureStartRange()).thenReturn(50.0); + when(sterilizer.getTempEndRange()).thenReturn(200.0); + when(sterilizer.getTempStartRange()).thenReturn(100.0); + return sterilizer; + } + + // 辅助方法:创建XinhuaCleanH101513Details + private XinhuaCleanH101513Details createDetail(String stage, Double innerPressure, Double innerTemperature) { + XinhuaCleanH101513Details detail = mock(XinhuaCleanH101513Details.class); + when(detail.getStage()).thenReturn(stage); + when(detail.getInnerPressure()).thenReturn(innerPressure); + when(detail.getInnerTemperature()).thenReturn(innerTemperature); + return detail; + } +} \ No newline at end of file Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/sterilizer/Sterilizer.java =================================================================== diff -u -r40426 -r41239 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/sterilizer/Sterilizer.java (.../Sterilizer.java) (revision 40426) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/sterilizer/Sterilizer.java (.../Sterilizer.java) (revision 41239) @@ -13,6 +13,8 @@ import javax.persistence.Entity; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; + +import javax.persistence.Column; import javax.persistence.FetchType; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; @@ -328,6 +330,27 @@ */ private Integer inspectionCycle; + /** + * 智能判断灭菌结果 + */ + private String autoJudgmentResult = Constants.STR_NO; + + /** + * 温度合格范围(℃) 最低 + */ + private Double tempStartRange; + /** + * 温度合格范围(℃) 最高 + */ + private Double tempEndRange; + /** + * 压力合格范围(Kpa) 最低 + */ + private Double pressureStartRange; + /** + * 压力合格范围(Kpa) 最高 + */ + private Double pressureEndRange; static { ColumnNameAndPoPropertyNameMap.put("名称", "name"); ColumnNameAndPoPropertyNameMap.put("购买日期", "purchaseDateStr"); @@ -808,4 +831,44 @@ this.inspectionCycle = inspectionCycle; } + @Column(columnDefinition=" varchar(20) default '" + Constants.STR_NO + "' not null ") + public String getAutoJudgmentResult() { + return autoJudgmentResult; + } + public void setAutoJudgmentResult(String autoJudgmentResult) { + this.autoJudgmentResult = autoJudgmentResult; + } + + public Double getTempStartRange() { + return tempStartRange; + } + + public void setTempStartRange(Double tempStartRange) { + this.tempStartRange = tempStartRange; + } + + public Double getTempEndRange() { + return tempEndRange; + } + + public void setTempEndRange(Double tempEndRange) { + this.tempEndRange = tempEndRange; + } + + public Double getPressureStartRange() { + return pressureStartRange; + } + + public void setPressureStartRange(Double pressureStartRange) { + this.pressureStartRange = pressureStartRange; + } + + public Double getPressureEndRange() { + return pressureEndRange; + } + + public void setPressureEndRange(Double pressureEndRange) { + this.pressureEndRange = pressureEndRange; + } + } Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManager.java =================================================================== diff -u -r41008 -r41239 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManager.java (.../SterilizationRecordManager.java) (revision 41008) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManager.java (.../SterilizationRecordManager.java) (revision 41239) @@ -800,4 +800,25 @@ * @return */ public JSONObject getSterilizationRecord(SterilizationRecord sterilizationRecord, Long sterilizerRecordId, SterilizerRecordManager sterilizerRecordManager); + /** + * 验证灭菌记录是否存在温度或压强不在合格范围内 + * @param sterilizationRecordId 灭菌记录id + * @param enableSterilizationCompletionDeterminationViaEquipmentInterface 配置项 + * @return + */ + public boolean checkSterilizationFailure(Long sterilizationRecordId, Boolean enableSterilizationCompletionDeterminationViaEquipmentInterface); + /** + * 验证GtCommonSterilizerRecord类型的灭菌记录是否存在温度或压强不在合格范围内 + * @param sterilizer 灭菌炉 + * @param sterilizationRecord 灭菌记录 + * @return + */ + public boolean checkGtCommonSterilizerRecord(Sterilizer sterilizer, SterilizationRecord sterilizationRecord); + /** + * 验证XinhuaCleanH10151类型的灭菌记录是否存在温度或压强不在合格范围内 + * @param sterilizer 灭菌炉 + * @param sterilizationRecord 灭菌记录 + * @return + */ + public boolean checkXinhuaCleanH10151(Sterilizer sterilizer, SterilizationRecord sterilizationRecord); } Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java =================================================================== diff -u -r41236 -r41239 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 41236) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 41239) @@ -127,6 +127,8 @@ import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.Ps100gxpSterilizerRecord; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.CommonStageDetails; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.XG2CXinhuaSterilizerRecord; +import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.XinhuaCleanH101513; +import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.XinhuaCleanH101513Details; import com.forgon.disinfectsystem.entity.systemwarning.SystemWarningVo; import com.forgon.disinfectsystem.entity.urgent.UrgentLevel; import com.forgon.disinfectsystem.entity.washanddisinfectmanager.washanddisinfectrecord.WashAndDisinfectRecord; @@ -10509,4 +10511,133 @@ } return obj; } + @Override + public boolean checkXinhuaCleanH10151(Sterilizer sterilizer, SterilizationRecord sterilizationRecord){ + XinhuaCleanH101513 record = (XinhuaCleanH101513)objectDao.getByProperty(XinhuaCleanH101513.class.getSimpleName(), "sterilizationRecordId", sterilizationRecord.getId()); + if(record == null){ + return true; + } + List details = record.getXinhuaCleanH101513DetailsList(); + if(CollectionUtils.isEmpty(details)){ + return false; + } + Double pressureEndRange = sterilizer.getPressureEndRange(); + Double pressureStartRange = sterilizer.getPressureStartRange(); + Double tempStartRange = sterilizer.getTempStartRange(); + Double tempEndRange = sterilizer.getTempEndRange(); + boolean haveSterilizing = false;//是否有灭菌阶段 + for (XinhuaCleanH101513Details detail : details) { + if("灭菌".equals(detail.getStage())){ + if(!haveSterilizing){ + haveSterilizing = true; + } + Double p1Mbar = detail.getInnerPressure(); + Double t1Temp = detail.getInnerTemperature(); + if(p1Mbar == null || t1Temp == null){ + return false; + } + //压力不能大于最大值 + if (pressureEndRange.compareTo(p1Mbar) < 0) { + //pressureEndRange < p1Mbar + return false; + } + //压力不能小于最小值 + if (p1Mbar.compareTo(pressureStartRange) < 0) { + //p1Mbar < pressureStartRange + return false; + } + //温度不能大于最大值 + if (tempEndRange.compareTo(t1Temp) < 0) { + //tempEndRange < t1Temp + return false; + } + //温度不能小于最小值 + if (t1Temp.compareTo(tempStartRange) < 0) { + //tempEndRange < t1Temp + return false; + } + } + } + if(!haveSterilizing){ + return false; + }else{//有灭菌阶段 且还能走到这里 说明合格 + return true; + } + } + @Override + public boolean checkSterilizationFailure(Long sterilizationRecordId, Boolean enableSterilizationCompletionDeterminationViaEquipmentInterface) { + enableSterilizationCompletionDeterminationViaEquipmentInterface = true; + if(!enableSterilizationCompletionDeterminationViaEquipmentInterface){ + return true; + } + SterilizationRecord sterilizationRecord = get(sterilizationRecordId); + if(sterilizationRecord == null){ + return true; + } + Sterilizer sterilizer = sterilizationRecord.getSterilizer(); + if(!Constants.STR_YES.equals(sterilizer.getAutoJudgmentResult()) + || sterilizer.getPressureEndRange() == null || sterilizer.getPressureStartRange() == null + || sterilizer.getTempEndRange() == null || sterilizer.getTempStartRange() == null){ + return true; + } + if(SterilizationRecord.STERILIZATIONPARATYPE_TYPE_GETINGE_COMMON.equals(sterilizationRecord.getSterilizationParaType())){ + return checkGtCommonSterilizerRecord(sterilizer, sterilizationRecord); + }else if(SterilizationRecord.STERILIZATIONPARATYPE_XINHUA_PDF.equals(sterilizationRecord.getSterilizationParaType())){ + return checkXinhuaCleanH10151(sterilizer, sterilizationRecord); + } + return true; + } + @Override + public boolean checkGtCommonSterilizerRecord(Sterilizer sterilizer, SterilizationRecord sterilizationRecord) { + GtCommonSterilizerRecord record = (GtCommonSterilizerRecord)objectDao.getByProperty(GtCommonSterilizerRecord.class.getSimpleName(), "sterilizationRecord.id", sterilizationRecord.getId()); + if(record == null){ + return true; + } + List details = record.getGtCommonStageDetailsList(); + if(CollectionUtils.isEmpty(details)){ + return false; + } + Double pressureEndRange = sterilizer.getPressureEndRange(); + Double pressureStartRange = sterilizer.getPressureStartRange(); + Double tempStartRange = sterilizer.getTempStartRange(); + Double tempEndRange = sterilizer.getTempEndRange(); + boolean haveSterilizing = false;//是否有灭菌阶段 + for (GtCommonStageDetails detail : details) { + if("灭菌".equals(detail.getStageNo()) || "STERILIZING".equals(detail.getStageNo())){ + if(!haveSterilizing){ + haveSterilizing = true; + } + Double p1Mbar = detail.getP1Mbar(); + Double t1Temp = detail.getT1Temp(); + if(p1Mbar == null || t1Temp == null){ + return false; + } + //压力不能大于最大值 + if (pressureEndRange.compareTo(p1Mbar) < 0) { + //pressureEndRange < p1Mbar + return false; + } + //压力不能小于最小值 + if (p1Mbar.compareTo(pressureStartRange) < 0) { + //p1Mbar < pressureStartRange + return false; + } + //温度不能大于最大值 + if (tempEndRange.compareTo(t1Temp) < 0) { + //tempEndRange < t1Temp + return false; + } + //温度不能小于最小值 + if (t1Temp.compareTo(tempStartRange) < 0) { + //tempEndRange < t1Temp + return false; + } + } + } + if(!haveSterilizing){ + return false; + }else{//有灭菌阶段 且还能走到这里 说明合格 + return true; + } + } } Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/action/SterilizationRecordAction.java =================================================================== diff -u -r40302 -r41239 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/action/SterilizationRecordAction.java (.../SterilizationRecordAction.java) (revision 40302) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/action/SterilizationRecordAction.java (.../SterilizationRecordAction.java) (revision 41239) @@ -2626,4 +2626,23 @@ StrutsResponseUtils.output(false, e.getMessage()); } } + /** + * 验证灭菌记录是否存在温度或压强不在合格范围内 + */ + public void checkSterilizationFailure(){ + try { + String sterilizationRecordId = StrutsParamUtils.getPraramValue("sterilizationRecordId", ""); + if(StringUtils.isBlank(sterilizationRecordId)){ + throw new SystemException("参数sterilizationRecordId不能为空"); + } + boolean enableSterilizationCompletionDeterminationViaEquipmentInterface = CssdUtils.getSystemSetConfigByNameBool("enableSterilizationCompletionDeterminationViaEquipmentInterface", false); + boolean result = sterilizationRecordManager.checkSterilizationFailure(Long.parseLong(sterilizationRecordId), enableSterilizationCompletionDeterminationViaEquipmentInterface); + if(!result){ + throw new SystemException("本次记录存在温度或压强不在合格范围内,请登记质量监测记录。"); + } + StrutsResponseUtils.output(true); + } catch (Exception e) { + StrutsResponseUtils.output(false, e.getMessage()); + } + } }