Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/model/SterilisationNotice.java =================================================================== diff -u -r41533 -r41558 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/model/SterilisationNotice.java (.../SterilisationNotice.java) (revision 41533) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/model/SterilisationNotice.java (.../SterilisationNotice.java) (revision 41558) @@ -1,5 +1,6 @@ package com.forgon.disinfectsystem.sterilizationmanager.sterilizationrecord.model; +import com.forgon.disinfectsystem.entity.basedatamanager.sterilisation.Sterilisation; import com.forgon.disinfectsystem.entity.basedatamanager.sterilizer.SterilizationFrequecyRemind; import com.forgon.response.OperatorResponse; @@ -77,9 +78,12 @@ * @param remind 提醒规则 */ public void triggerNotice(SterilizationFrequecyRemind remind) { + Sterilisation sterilisation = remind.getSterilisation(); setSuccess(false); setRemindMode(remind.getRemindMode()); - setSterilisation(remind.getSterilisation().getSterilisation()); + if(sterilisation != null){ + setSterilisation(sterilisation.getSterilisation()); + } setFrequency(remind.getFrequency()); } Index: ssts-sterile/src/test/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilisationNoticeCheckerImplBuildMessageTest.java =================================================================== diff -u --- ssts-sterile/src/test/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilisationNoticeCheckerImplBuildMessageTest.java (revision 0) +++ ssts-sterile/src/test/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilisationNoticeCheckerImplBuildMessageTest.java (revision 41558) @@ -0,0 +1,159 @@ +package com.forgon.disinfectsystem.sterilizationmanager.sterilizationrecord.service; + +import com.forgon.disinfectsystem.entity.basedatamanager.sterilisation.Sterilisation; +import com.forgon.disinfectsystem.entity.basedatamanager.sterilizer.SterilizationFrequecyRemind; +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 static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.when; + +/** + * 单元测试:buildMessage 方法 + */ +public class SterilisationNoticeCheckerImplBuildMessageTest { + + @InjectMocks + private SterilisationNoticeCheckerImpl sterilisationNoticeChecker; + + @Mock + private SterilizationFrequecyRemind remind; + + @Mock + private Sterilisation sterilisation; + + private AutoCloseable closeable; + + @Before + public void setUp() { + closeable = MockitoAnnotations.openMocks(this); + } + + @After + public void tearDown() throws Exception { + closeable.close(); + } + + /** + * TC1: 强制提醒 + 存在灭菌程序 + 自定义提醒信息 + */ + @Test + public void testBuildMessage_Mandatory_WithSterilisation_And_Message() { + String sterilizerName = "高压灭菌炉A"; + String sterilisationName = "环氧乙烷灭菌"; + String customMsg = "请特别注意温度控制"; + + when(remind.mandatoryMode()).thenReturn(true); + when(remind.getSterilisation()).thenReturn(sterilisation); + when(sterilisation.getSterilisation()).thenReturn(sterilisationName); + when(remind.getFrequency()).thenReturn(2); + when(remind.getRemindMessage()).thenReturn(customMsg); + + String result = sterilisationNoticeChecker.buildMessage(sterilizerName, remind); + + String expected = sterilizerName + "第2炉的灭菌程序必须是" + sterilisationName + ";" + customMsg; + assertEquals(expected, result); + } + + /** + * TC2: 强制提醒 + 无灭菌程序 + 自定义提醒信息 + * 这种是不应该有的配置 + */ + @Test + public void testBuildMessage_Mandatory_NoSterilisation_But_Message() { + String sterilizerName = "低温等离子灭菌炉B"; + String customMsg = "请检查电源连接状态"; + + when(remind.mandatoryMode()).thenReturn(true); + when(remind.getSterilisation()).thenReturn(null); // 没有灭菌程序 + when(remind.getFrequency()).thenReturn(1); + when(remind.getRemindMessage()).thenReturn(customMsg); + + String result = sterilisationNoticeChecker.buildMessage(sterilizerName, remind); + + String expected = sterilizerName + "第1炉的灭菌程序必须是;" + customMsg; + assertEquals(expected, result); + } + + /** + * 强制提醒 + 有灭菌程序 + 无自定义提醒信息 + */ + @Test + public void testBuildMessage_Mandatory_Sterilisation_NoMessage() { + String sterilizerName = "低温等离子灭菌炉B"; + String sterilisationName = "低温灭菌"; + + when(remind.mandatoryMode()).thenReturn(true); + when(remind.getSterilisation()).thenReturn(sterilisation); + when(sterilisation.getSterilisation()).thenReturn(sterilisationName); + when(remind.getFrequency()).thenReturn(1); + + String result = sterilisationNoticeChecker.buildMessage(sterilizerName, remind); + + String expected = sterilizerName + "第1炉的灭菌程序必须是" + sterilisationName; + assertEquals(expected, result); + } + + /** + * TC3: 非强制提醒 + 无灭菌程序 + 自定义提醒信息 + */ + @Test + public void testBuildMessage_NonMandatory_NoSterilisation_But_Message() { + String sterilizerName = "蒸汽灭菌炉C"; + String customMsg = "请勿放置金属物品"; + + when(remind.mandatoryMode()).thenReturn(false); + when(remind.getSterilisation()).thenReturn(null); // 无灭菌程序 + when(remind.getRemindMessage()).thenReturn(customMsg); + + String result = sterilisationNoticeChecker.buildMessage(sterilizerName, remind); + + assertEquals("蒸汽灭菌炉C请勿放置金属物品,不修改灭菌程序继续操作吗?", result); + } + + /** + * TC4: 非强制提醒 + 有灭菌程序 + 无自定义提醒信息 + */ + @Test + public void testBuildMessage_NonMandatory_WithSterilisation_NoMessage() { + String sterilizerName = "干热灭菌炉D"; + String sterilisationName = "干热灭菌法"; + + when(remind.mandatoryMode()).thenReturn(false); + when(remind.getSterilisation()).thenReturn(sterilisation); + when(sterilisation.getSterilisation()).thenReturn(sterilisationName); + when(remind.getFrequency()).thenReturn(3); + when(remind.getRemindMessage()).thenReturn(""); // 空白消息 + + String result = sterilisationNoticeChecker.buildMessage(sterilizerName, remind); + + String expected = sterilizerName + "第3炉的灭菌程序应该是" + sterilisationName + ",不修改灭菌程序继续操作吗?"; + assertEquals(expected, result); + } + + /** + * TC5: 非强制提醒 + 有灭菌程序 + 有自定义提醒信息 + */ + @Test + public void testBuildMessage_NonMandatory_WithSterilisation_And_Message() { + String sterilizerName = "甲醛熏蒸灭菌炉E"; + String sterilisationName = "甲醛熏蒸"; + String customMsg = "注意通风时间不少于30分钟"; + + when(remind.mandatoryMode()).thenReturn(false); + when(remind.getSterilisation()).thenReturn(sterilisation); + when(sterilisation.getSterilisation()).thenReturn(sterilisationName); + when(remind.getFrequency()).thenReturn(1); + when(remind.getRemindMessage()).thenReturn(customMsg); + + String result = sterilisationNoticeChecker.buildMessage(sterilizerName, remind); + + String expected = sterilizerName + "第1炉的灭菌程序应该是" + sterilisationName + + ";" + customMsg + ",不修改灭菌程序继续操作吗?"; + assertEquals(expected, result); + } +} Index: ssts-basedata/src/test/java/com/forgon/disinfectsystem/entity/basedatamanager/sterilizer/SterilizationFrequencyRemindTest.java =================================================================== diff -u -r41361 -r41558 --- ssts-basedata/src/test/java/com/forgon/disinfectsystem/entity/basedatamanager/sterilizer/SterilizationFrequencyRemindTest.java (.../SterilizationFrequencyRemindTest.java) (revision 41361) +++ ssts-basedata/src/test/java/com/forgon/disinfectsystem/entity/basedatamanager/sterilizer/SterilizationFrequencyRemindTest.java (.../SterilizationFrequencyRemindTest.java) (revision 41558) @@ -1,6 +1,7 @@ package com.forgon.disinfectsystem.entity.basedatamanager.sterilizer; import com.forgon.disinfectsystem.basedatamanager.holiday.model.HolidayType; +import com.forgon.disinfectsystem.entity.basedatamanager.sterilisation.Sterilisation; import org.junit.Test; import java.util.Calendar; @@ -62,4 +63,74 @@ assertFalse(remind.dateTypeShortHoliday()); assertFalse(remind.dateTypeLongHoliday()); } + + @Test + public void testUseful_ALL_EMPTY_False() { + SterilizationFrequecyRemind remind = new SterilizationFrequecyRemind(); + assertFalse(remind.useful()); + } + + @Test + public void testUseful_ONLY_FREQUENCY__False() { + SterilizationFrequecyRemind remind = new SterilizationFrequecyRemind(); + remind.setFrequency(1); + assertFalse(remind.useful()); + } + + @Test + public void testUseful_ONLY_STERILIZATION_False() { + SterilizationFrequecyRemind remind = new SterilizationFrequecyRemind(); + Sterilisation s = new Sterilisation(); + remind.setSterilisation(s); + assertFalse(remind.useful()); + } + + @Test + public void testUseful_ONLY_REMIND_MESSAGE_False() { + SterilizationFrequecyRemind remind = new SterilizationFrequecyRemind(); + remind.setRemindMessage("必须做生物监测"); + assertFalse(remind.useful()); + } + + @Test + public void testUseful_OnlySterilisationAndRemindMsg_False() { + SterilizationFrequecyRemind remind = new SterilizationFrequecyRemind(); + remind.setSterilisation(new Sterilisation()); + remind.setRemindMessage("必须做生物监测"); + assertFalse(remind.useful()); + } + + @Test + public void testUseful_OnlyFrequencyAndRemindMsg_True() { + SterilizationFrequecyRemind remind = new SterilizationFrequecyRemind(); + remind.setFrequency(1); + remind.setRemindMessage("必须做生物监测"); + assertTrue(remind.useful()); + } + + @Test + public void testUseful_OnlySterilisationAndFrequency_True() { + SterilizationFrequecyRemind remind = new SterilizationFrequecyRemind(); + remind.setSterilisation(new Sterilisation()); + remind.setFrequency(1); + assertTrue(remind.useful()); + } + + @Test + public void testUseful_All_True() { + SterilizationFrequecyRemind remind = new SterilizationFrequecyRemind(); + remind.setSterilisation(new Sterilisation()); + remind.setFrequency(1); + remind.setRemindMessage("必须做生物监测"); + assertTrue(remind.useful()); + } + + @Test + public void testUseful_FrequencyNegative_False() { + SterilizationFrequecyRemind remind = new SterilizationFrequecyRemind(); + remind.setSterilisation(new Sterilisation()); + remind.setFrequency(-1); + remind.setRemindMessage("必须做生物监测"); + assertFalse(remind.useful()); + } } Index: ssts-web/src/main/webapp/disinfectsystem/basedatamanager/sterilizer/sterilizerForm.js =================================================================== diff -u -r41444 -r41558 --- ssts-web/src/main/webapp/disinfectsystem/basedatamanager/sterilizer/sterilizerForm.js (.../sterilizerForm.js) (revision 41444) +++ ssts-web/src/main/webapp/disinfectsystem/basedatamanager/sterilizer/sterilizerForm.js (.../sterilizerForm.js) (revision 41558) @@ -53,17 +53,25 @@ var msg = ''; for (var i = 0; i < store.getCount(); i++) { var data = store.getAt(i).data; - if (data.frequency == '' || data.sterilisation_id == '') { - msg = '【按炉次提醒的灭菌程序】炉次号和灭菌程序都不能为空'; + if (data.frequency == '') { + msg = '【按炉次提醒的灭菌程序】炉次号不能为空'; break; - } else { - arr[i] = { - dateType: data.dateType, - frequency: data.frequency, - sterilisation_id: data.sterilisation_id, - remindMode: data.remindMode - } } + if (!data.sterilisation_id && !data.remindMessage) { + msg = '【按炉次提醒的灭菌程序】灭菌程序为空时,提醒信息不能为空'; + break; + } + if (!data.sterilisation_id && data.remindMode == '强制提醒') { + msg = '【按炉次提醒的灭菌程序】强制提醒时,必须选择灭菌程序'; + break; + } + arr[i] = { + dateType: data.dateType, + frequency: data.frequency, + sterilisation_id: data.sterilisation_id, + remindMessage: data.remindMessage, + remindMode: data.remindMode + } } if(!msg && arr.length > 0){ var un_arr = [] @@ -226,6 +234,7 @@ { name: 'frequency' }, { name: 'sterilisation' }, { name: 'sterilisation_id' }, + { name: 'remindMessage'}, { name: 'remindMode' } ] }); @@ -407,7 +416,7 @@ }, { id: 'sterilisation', header: "灭菌程序", - width: 160, + width: 120, dataIndex: 'sterilisation', editor: new top.Ext.form.ComboBox({ xtype: 'combo', @@ -470,6 +479,15 @@ anchor: '97%' }) }, { + header: '提醒信息', + width: 240, + dataIndex: 'remindMessage', + editor: new top.Ext.form.TextField({ + name: 'remindMessage_name', + id: 'remindMessage_name', + anchor: '97%', + }) + }, { id: 'deleteItem', header: '删除', renderer: function (v, p, record) { @@ -502,10 +520,12 @@ handler: function () { var n = top.Ext.getCmp('configGrid1').getStore().getCount();// 获得总行数 var p = new sterilisationConfig({ + dateType: '', frequency: '', sterilisation: '', sterilisation_id: '', - remindMode: '非强制提醒' + remindMode: '非强制提醒', + remindMessage: '' }); // if (n >= 3) { // showResult('最多允许添加三个炉次提醒的灭菌程序!'); @@ -866,7 +886,7 @@ layout: 'column', labelAlign: 'right', items: [{ - columnWidth: 0.6, + columnWidth: 0.55, layout: 'column', items: [{ columnWidth: 0.5, @@ -1236,7 +1256,7 @@ }] }, { layout: 'form', - labelWidth: 100, + labelWidth: 200, columnWidth: 0.5, height: 38, items: [{ @@ -1250,7 +1270,7 @@ }] }, { layout: 'form', - labelWidth: 100, + labelWidth: 220, columnWidth: 0.5, height: 38, items: [{ @@ -1278,7 +1298,7 @@ }] }, { layout: 'form', - labelWidth: 100, + labelWidth: 220, columnWidth: 0.5, height: 38, items: [{ @@ -1525,7 +1545,7 @@ }] }] }, { - columnWidth: 0.4, + columnWidth: 0.44, layout: 'form', labelWidth: 70, items: [sterilisationEditGridPanel, sterilisationReminderEditGridPanel, monitoringPackageEditGridPanel] @@ -1971,8 +1991,8 @@ sterilizerWin = new top.Ext.Window({ id: 'sterilizerWin', layout: 'fit', - title: '灭菌炉信息', - width: 1080, + title: '灭菌炉信息1', + width: 1280, border: false, modal: true, plain: true, @@ -2117,7 +2137,8 @@ frequency: (data.frequency == 0) ? '' : data.frequency, sterilisation: data.sterilisation ? data.sterilisation.sterilisation : '', sterilisation_id: data.sterilisation ? data.sterilisation.id : '', - remindMode: data.remindMode + remindMode: data.remindMode, + remindMessage: data.remindMessage }); configStore1.add(p); } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/sterilizer/SterilizationFrequecyRemind.java =================================================================== diff -u -r41361 -r41558 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/sterilizer/SterilizationFrequecyRemind.java (.../SterilizationFrequecyRemind.java) (revision 41361) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/sterilizer/SterilizationFrequecyRemind.java (.../SterilizationFrequecyRemind.java) (revision 41558) @@ -2,6 +2,7 @@ import com.forgon.disinfectsystem.basedatamanager.holiday.model.HolidayType; import com.forgon.disinfectsystem.entity.basedatamanager.sterilisation.Sterilisation; +import org.apache.commons.lang.StringUtils; import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; import org.hibernate.annotations.DynamicInsert; @@ -51,6 +52,11 @@ * 灭菌程序 */ private Sterilisation sterilisation; + + /** + * 提醒信息 ZSYKEQ-61 + */ + private String remindMessage; /** * 提醒方式 @@ -105,6 +111,14 @@ this.sterilisation = sterilisation; } + public String getRemindMessage() { + return remindMessage; + } + + public void setRemindMessage(String remindMessage) { + this.remindMessage = remindMessage; + } + public String getRemindMode() { return remindMode; } @@ -161,5 +175,23 @@ int diff = holidayTypeStart - holidayDateStart; return holidayType.ordinal() - diff == dateTypeInt(); } + + /** + * 判断配置是否有效。如果返回true,在灭菌前进行验证的时候,会直接过滤掉这个配置 + * @return true-有效,false-无效 + */ + public boolean useful() { + Integer frequency = getFrequency(); + Sterilisation s = getSterilisation(); + String msg = getRemindMessage(); + + boolean ret = frequency != null && frequency >=1; + if(!ret){ + // 炉次不能为空的或者小于1 + return ret; + } + ret = s == null && StringUtils.isBlank(msg); + return !ret; + } } Index: ssts-sterile/src/test/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilisationNoticeCheckerImplIsHavedoneNeedNoticeSterilisationTest.java =================================================================== diff -u -r41533 -r41558 --- ssts-sterile/src/test/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilisationNoticeCheckerImplIsHavedoneNeedNoticeSterilisationTest.java (.../SterilisationNoticeCheckerImplIsHavedoneNeedNoticeSterilisationTest.java) (revision 41533) +++ ssts-sterile/src/test/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilisationNoticeCheckerImplIsHavedoneNeedNoticeSterilisationTest.java (.../SterilisationNoticeCheckerImplIsHavedoneNeedNoticeSterilisationTest.java) (revision 41558) @@ -97,12 +97,12 @@ public void testMatchedButSameSterilizationType() { // Arrange Sterilizer sterilizer = mock(Sterilizer.class); - SterilizationFrequecyRemind remind = mock(SterilizationFrequecyRemind.class); - Sterilisation sterilisation = mock(Sterilisation.class); + SterilizationFrequecyRemind remind = new SterilizationFrequecyRemind(); + Sterilisation sterilisation = new Sterilisation(); - when(remind.getFrequency()).thenReturn(1); - when(remind.getSterilisation()).thenReturn(sterilisation); - when(sterilisation.getSterilisation()).thenReturn("sameType"); + remind.setFrequency(1); + remind.setSterilisation(sterilisation); + sterilisation.setSterilisation("sameType"); List reminds = new ArrayList<>(); reminds.add(remind); @@ -125,12 +125,12 @@ public void testMatchedDifferentTypeMandatory() { // Arrange Sterilizer sterilizer = mock(Sterilizer.class); - Sterilisation sterilisation = mock(Sterilisation.class); + Sterilisation sterilisation = new Sterilisation(); SterilizationFrequecyRemind remind = new SterilizationFrequecyRemind(); remind.setFrequency(1); remind.setSterilisation(sterilisation); remind.setRemindMode(REMINDMODE_MANDATORY); - when(sterilisation.getSterilisation()).thenReturn("correctType"); + sterilisation.setSterilisation("correctType"); List reminds = new ArrayList<>(); reminds.add(remind); @@ -153,13 +153,13 @@ public void testMatchedDifferentTypeNonMandatory() { // Arrange Sterilizer sterilizer = mock(Sterilizer.class); - SterilizationFrequecyRemind remind = mock(SterilizationFrequecyRemind.class); - Sterilisation sterilisation = mock(Sterilisation.class); + SterilizationFrequecyRemind remind = new SterilizationFrequecyRemind(); + Sterilisation sterilisation = new Sterilisation(); - when(remind.getFrequency()).thenReturn(1); - when(remind.getSterilisation()).thenReturn(sterilisation); - when(sterilisation.getSterilisation()).thenReturn("correctType"); - when(remind.getRemindMode()).thenReturn(SterilizationFrequecyRemind.REMINDMODE_NONMANDATORY); + remind.setFrequency(1); + remind.setSterilisation(sterilisation); + sterilisation.setSterilisation("correctType"); + remind.setRemindMode(SterilizationFrequecyRemind.REMINDMODE_NONMANDATORY); List reminds = new ArrayList<>(); reminds.add(remind); @@ -233,13 +233,13 @@ @Test public void testWithReminderFrequencyNull() { Sterilizer sterilizer = mock(Sterilizer.class); - SterilizationFrequecyRemind remind = mock(SterilizationFrequecyRemind.class); - Sterilisation sterilisation = mock(Sterilisation.class); + SterilizationFrequecyRemind remind = new SterilizationFrequecyRemind(); + Sterilisation sterilisation = new Sterilisation(); - when(remind.getSterilisation()).thenReturn(sterilisation); - when(sterilisation.getSterilisation()).thenReturn("CorrectType"); - when(remind.getRemindMode()).thenReturn(SterilizationFrequecyRemind.REMINDMODE_NONMANDATORY); - when(remind.getFrequency()).thenReturn(null); + remind.setSterilisation(sterilisation); + sterilisation.setSterilisation("CorrectType"); + remind.setRemindMode(SterilizationFrequecyRemind.REMINDMODE_NONMANDATORY); + remind.setFrequency(null); List reminds = new ArrayList<>(); reminds.add(remind); when(sterilizer.getSterilizationFrequecyReminds()).thenReturn(reminds); @@ -256,13 +256,13 @@ @Test public void testWithReminderFrequencyNegative() { Sterilizer sterilizer = mock(Sterilizer.class); - SterilizationFrequecyRemind remind = mock(SterilizationFrequecyRemind.class); - Sterilisation sterilisation = mock(Sterilisation.class); + SterilizationFrequecyRemind remind = new SterilizationFrequecyRemind(); + Sterilisation sterilisation = new Sterilisation(); - when(remind.getSterilisation()).thenReturn(sterilisation); - when(sterilisation.getSterilisation()).thenReturn("CorrectType"); - when(remind.getRemindMode()).thenReturn(SterilizationFrequecyRemind.REMINDMODE_NONMANDATORY); - when(remind.getFrequency()).thenReturn(-3); + remind.setSterilisation(sterilisation); + sterilisation.setSterilisation("CorrectType"); + remind.setRemindMode(SterilizationFrequecyRemind.REMINDMODE_NONMANDATORY); + remind.setFrequency(-3); List reminds = new ArrayList<>(); reminds.add(remind); when(sterilizer.getSterilizationFrequecyReminds()).thenReturn(reminds); @@ -282,11 +282,11 @@ @Test public void testWithReminderSterilisationEmpty() { Sterilizer sterilizer = mock(Sterilizer.class); - SterilizationFrequecyRemind remind = mock(SterilizationFrequecyRemind.class); + SterilizationFrequecyRemind remind = new SterilizationFrequecyRemind(); - doReturn(null).when(remind).getSterilisation(); - when(remind.getRemindMode()).thenReturn(SterilizationFrequecyRemind.REMINDMODE_NONMANDATORY); - when(remind.getFrequency()).thenReturn(-3); + remind.setSterilisation(null); + remind.setRemindMode(SterilizationFrequecyRemind.REMINDMODE_NONMANDATORY); + remind.setFrequency(-3); List reminds = new ArrayList<>(); reminds.add(remind); when(sterilizer.getSterilizationFrequecyReminds()).thenReturn(reminds); @@ -339,6 +339,68 @@ } } + @Test + public void testWeekMandatoryRemindMatch_TriggerOnlyOne() { + Sterilizer sterilizer = new Sterilizer(); + List reminds = new ArrayList<>(); + reminds.add(buildReminder(SterilizationFrequecyRemind.REMINDMODE_MANDATORY, DATE_TYPE_EVERYDAY, 1, "DB")); + reminds.add(buildReminder(SterilizationFrequecyRemind.REMINDMODE_MANDATORY, DATE_TYPE_WEEK_START+3, 1, "P1")); + + sterilizer.setSterilizationFrequecyReminds(reminds); + when(objectDao.getByProperty(eq("Sterilizer"), eq("name"), anyString())).thenReturn(sterilizer); + when(holidayConfigManager.holidayTypeOfToday()).thenReturn(HolidayType.LongBefore); + try(MockedStatic forgonDateUtils = mockStatic(ForgonDateUtils.class)){ + forgonDateUtils.when(ForgonDateUtils::getDayWeekOfToday).thenReturn(Calendar.WEDNESDAY); + SterilisationNotice notice = sterilisationNoticeChecker.isHavedoneNeedNoticeSterilisation("Sterilizer", "wrongType", "1"); + assertFalse(notice.getSuccess()); + validateFalse(trans2JSONObject(notice), REMINDMODE_MANDATORY, "P1", 1, "必须"); + + // 设置为P1 + notice = sterilisationNoticeChecker.isHavedoneNeedNoticeSterilisation("Sterilizer", "P1", "1"); + assertTrue(notice.getSuccess()); + } + } + + @Test + public void testEveryDayMandatoryRemindMatch_TriggerOnlyOne() { + Sterilizer sterilizer = new Sterilizer(); + List reminds = new ArrayList<>(); + reminds.add(buildReminder(SterilizationFrequecyRemind.REMINDMODE_MANDATORY, DATE_TYPE_EVERYDAY, 1, "DB")); + + sterilizer.setSterilizationFrequecyReminds(reminds); + when(objectDao.getByProperty(eq("Sterilizer"), eq("name"), anyString())).thenReturn(sterilizer); + + try(MockedStatic forgonDateUtils = mockStatic(ForgonDateUtils.class)){ + SterilisationNotice notice = sterilisationNoticeChecker.isHavedoneNeedNoticeSterilisation("Sterilizer", "wrongType", "1"); + assertFalse(notice.getSuccess()); + validateFalse(trans2JSONObject(notice), REMINDMODE_MANDATORY, "DB", 1, "必须"); + + // 设置为DB + notice = sterilisationNoticeChecker.isHavedoneNeedNoticeSterilisation("Sterilizer", "DB", "1"); + assertTrue(notice.getSuccess()); + } + } + + /** + * 非强制提醒,灭菌程序为空;必须有提醒消息 + */ + @Test + public void testSterilisationNullNonMandatory() { + Sterilizer sterilizer = new Sterilizer(); + SterilizationFrequecyRemind remind = new SterilizationFrequecyRemind(); + remind.setRemindMode(SterilizationFrequecyRemind.REMINDMODE_NONMANDATORY); + remind.setSterilisation(null); + remind.setRemindMessage("这是自定义提醒"); + remind.setFrequency(3); + List reminds = new ArrayList<>(); + reminds.add(remind); + sterilizer.setSterilizationFrequecyReminds(reminds); + when(objectDao.getByProperty(eq("Sterilizer"), eq("name"), anyString())).thenReturn(sterilizer); + SterilisationNotice notice = sterilisationNoticeChecker.isHavedoneNeedNoticeSterilisation("Sterilizer", "wrongType", "3"); + assertFalse(notice.getSuccess()); + validateFalse(trans2JSONObject(notice), REMINDMODE_NONMANDATORY, "", 3, "这是自定义提醒"); + } + private SterilizationFrequecyRemind buildReminder(String remindMode, int dateType, int frequency, String sterilisation) { Sterilisation ss = new Sterilisation(); ss.setSterilisation(sterilisation); @@ -353,7 +415,7 @@ private static void validateFalse(JSONObject result, String remindMode, String sterilisation, int frequency, String msgKey) { assertFalse(result.getBoolean("success")); assertEquals(remindMode, result.getString("remindMode")); - assertEquals(sterilisation, result.getString("sterilisation")); + assertEquals(sterilisation, result.optString("sterilisation")); assertEquals(frequency, result.getInt("frequency")); assertTrue(result.containsKey("confirmMessage")); assertTrue(result.getString("confirmMessage").contains(msgKey)); Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/sterilizer/param/SterilizationFrequencyRemindParam.java =================================================================== diff -u -r41361 -r41558 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/sterilizer/param/SterilizationFrequencyRemindParam.java (.../SterilizationFrequencyRemindParam.java) (revision 41361) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/sterilizer/param/SterilizationFrequencyRemindParam.java (.../SterilizationFrequencyRemindParam.java) (revision 41558) @@ -33,6 +33,10 @@ */ @JsonProperty("sterilisation_id") private Long sterilisationId; + /** + * 提醒信息 ZSYKEQ-61 + */ + private String remindMessage; public Integer getDateType() { return dateType; @@ -66,18 +70,27 @@ this.sterilisationId = sterilisationId; } + public String getRemindMessage() { + return remindMessage; + } + + public void setRemindMessage(String remindMessage) { + this.remindMessage = remindMessage; + } + @Override public boolean equals(Object object) { if (this == object) return true; if (!(object instanceof SterilizationFrequencyRemindParam)) return false; SterilizationFrequencyRemindParam that = (SterilizationFrequencyRemindParam) object; return Objects.equals(dateType, that.dateType) && Objects.equals(frequency, that.frequency) - && Objects.equals(remindMode, that.remindMode) && Objects.equals(sterilisationId, that.sterilisationId); + && Objects.equals(remindMode, that.remindMode) && Objects.equals(sterilisationId, that.sterilisationId) + && Objects.equals(remindMessage, that.remindMessage); } @Override public int hashCode() { - return Objects.hash(dateType, frequency, remindMode, sterilisationId); + return Objects.hash(dateType, frequency, remindMode, sterilisationId, remindMessage); } @Override @@ -87,6 +100,7 @@ ", frequency=" + frequency + ", remindMode='" + remindMode + '\'' + ", sterilisationId=" + sterilisationId + + ", remindMessage='" + remindMessage + '\'' + '}'; } } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/sterilizer/service/SterilizerManagerImpl.java =================================================================== diff -u -r41468 -r41558 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/sterilizer/service/SterilizerManagerImpl.java (.../SterilizerManagerImpl.java) (revision 41468) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/sterilizer/service/SterilizerManagerImpl.java (.../SterilizerManagerImpl.java) (revision 41558) @@ -239,7 +239,7 @@ @Override public void saveSterilizer(Sterilizer sterilizer, String cleanMethodIDs, String consumablesStr, String detectionItemsStr, - List extraInfo, String sterilizationFrequecyReminds) { + List extraInfo, String sterilizationFrequencyReminds) { if (sterilizer != null) { @@ -350,9 +350,9 @@ } // 按炉次提醒的灭菌程序 - if(StringUtils.isNotBlank(sterilizationFrequecyReminds)){ + if(StringUtils.isNotBlank(sterilizationFrequencyReminds)){ List originalList = sterilizer.getSterilizationFrequecyReminds(); - List sterilizationFrequecyRemindList = parseSterilizationFrequencyReminds(sterilizationFrequecyReminds); + List sterilizationFrequecyRemindList = parseSterilizationFrequencyReminds(sterilizationFrequencyReminds); sterilizer.setSterilizationFrequecyReminds(sterilizationFrequecyRemindList); objectDao.deleteAll(originalList); } Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilisationNoticeCheckerImpl.java =================================================================== diff -u -r41533 -r41558 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilisationNoticeCheckerImpl.java (.../SterilisationNoticeCheckerImpl.java) (revision 41533) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilisationNoticeCheckerImpl.java (.../SterilisationNoticeCheckerImpl.java) (revision 41558) @@ -2,6 +2,7 @@ import com.forgon.disinfectsystem.basedatamanager.holiday.model.HolidayType; import com.forgon.disinfectsystem.basedatamanager.holiday.service.HolidayConfigManager; +import com.forgon.disinfectsystem.entity.basedatamanager.sterilisation.Sterilisation; import com.forgon.disinfectsystem.entity.basedatamanager.sterilizer.SterilizationFrequecyRemind; import com.forgon.disinfectsystem.entity.basedatamanager.sterilizer.Sterilizer; import com.forgon.disinfectsystem.sterilizationmanager.sterilizationrecord.model.SterilisationNotice; @@ -31,8 +32,7 @@ List sterilizationFrequecyReminds = sterilizer.getSterilizationFrequecyReminds(); if(CollectionUtils.isNotEmpty(sterilizationFrequecyReminds)){ - List list = sterilizationFrequecyReminds.stream().filter(remind->remind.getSterilisation() != null - && remind.getFrequency() != null && remind.getFrequency() >=1).collect(Collectors.toList()); + List list = sterilizationFrequecyReminds.stream().filter(SterilizationFrequecyRemind::useful).collect(Collectors.toList()); if(CollectionUtils.isEmpty(list)){ return notice; } @@ -110,7 +110,7 @@ * @param sterilizerName 灭菌炉名称 * @param sterilizationType 灭菌程序 * @param frequency 当前炉次 - * @param sterilizationFrequecyReminds 相同优先级和提醒模式的规则列表 + * @param sterilizationFrequencyReminds 相同优先级和提醒模式的规则列表 * @param notice 提醒结果 * @param maddatory 是否强制提醒。如果是强制提醒,那有一个规则匹配,后续就不能再检查了,不然可能进入死循环,两个灭菌程序互相触发。 * 比如一个规则要P1灭菌程序,另一个要P2灭菌程序,满足P1满足不了P2,满足P2满足不了P1。 @@ -119,15 +119,15 @@ */ private boolean checkInSamePriorityAndMode( HolidayType todayHolidayType, String sterilizerName, String sterilizationType, String frequency, - List sterilizationFrequecyReminds, SterilisationNotice notice, boolean maddatory) { + List sterilizationFrequencyReminds, SterilisationNotice notice, boolean maddatory) { int weekDay = ForgonDateUtils.getDayWeekOfToday(); boolean ret = false; - for (SterilizationFrequecyRemind remind : sterilizationFrequecyReminds) { - // 配置中的炉次或者灭菌程序为空时,不验证 - if(remind.getFrequency() == null || remind.getFrequency() < 1 - || remind.getSterilisation() == null){ - continue; - } + for (SterilizationFrequecyRemind remind : sterilizationFrequencyReminds) { + // 配置中的炉次或者灭菌程序为空时,不验证。外层已经过滤掉了无效配置了 +// if(remind.getFrequency() == null || remind.getFrequency() < 1 +// || remind.getSterilisation() == null){ +// continue; +// } // 如果日期类型是假期,则判断当天假期是否一致 if(remind.dateTypeLongHoliday() || remind.dateTypeShortHoliday()){ @@ -143,12 +143,15 @@ } // 都是假期匹配或者星期匹配或者是每天的,只要炉次匹配就行了 if(StringUtils.equals(frequency, remind.getFrequency().toString())){ - if(!StringUtils.equals(sterilizationType, remind.getSterilisation().getSterilisation())){ + Sterilisation sterilisation = remind.getSterilisation(); + if(sterilisation == null){ + // 灭菌程序为空,则表示所有灭菌程序都提醒。这时候配置上必须是非强制的,且提醒信息不能为空(目前是前端保存的时候验证) notice.triggerNotice(remind); - if(StringUtils.equals(remind.getRemindMode(), SterilizationFrequecyRemind.REMINDMODE_MANDATORY)){ - notice.setConfirmMessage(sterilizerName + "第" + frequency + "炉的灭菌程序必须是" + remind.getSterilisation().getSterilisation() + "!"); - }else{ - notice.setConfirmMessage(sterilizerName + "第" + frequency + "炉的灭菌程序应该是" + remind.getSterilisation().getSterilisation() + ",不修改灭菌程序继续操作吗?"); + notice.setConfirmMessage(buildMessage(sterilizerName, remind)); + }else{ + if(!StringUtils.equals(sterilizationType, sterilisation.getSterilisation())){ + notice.triggerNotice(remind); + notice.setConfirmMessage(buildMessage(sterilizerName, remind)); } } ret = true; @@ -159,4 +162,31 @@ } return ret; } + + String buildMessage(String sterilizerName,SterilizationFrequecyRemind remind) { + Sterilisation s = remind.getSterilisation(); + String sterilization = s == null ? "" : s.getSterilisation(); + String remindMessage = remind.getRemindMessage(); + Integer frequency = remind.getFrequency(); + String msg = sterilizerName; + if(remind.mandatoryMode()){ + // 强制提醒必须有灭菌程序 + msg = msg + "第" + frequency + "炉的灭菌程序必须是" +sterilization; + if(StringUtils.isNotBlank(remindMessage)){ + msg += ";" + remindMessage; + } + }else{ + if(StringUtils.isBlank(sterilization)){ + // 没有灭菌程序,那必然有提醒信息 + msg = msg + remindMessage; + }else{ + msg = msg + "第" + frequency + "炉的灭菌程序应该是" + sterilization; + if(StringUtils.isNotBlank(remindMessage)){ + msg += ";" + remindMessage; + } + } + msg += ",不修改灭菌程序继续操作吗?"; + } + return msg; + } }