Index: ssts-web/src/test/resources/test/forgon/disinfectsystem/invoicemanager/service/AllTests.xml =================================================================== diff -u -r16886 -r17062 --- ssts-web/src/test/resources/test/forgon/disinfectsystem/invoicemanager/service/AllTests.xml (.../AllTests.xml) (revision 16886) +++ ssts-web/src/test/resources/test/forgon/disinfectsystem/invoicemanager/service/AllTests.xml (.../AllTests.xml) (revision 17062) @@ -3,6 +3,7 @@ + Index: forgon-tools/src/main/java/com/forgon/tools/util/ForgonDateUtils.java =================================================================== diff -u -r16972 -r17062 --- forgon-tools/src/main/java/com/forgon/tools/util/ForgonDateUtils.java (.../ForgonDateUtils.java) (revision 16972) +++ forgon-tools/src/main/java/com/forgon/tools/util/ForgonDateUtils.java (.../ForgonDateUtils.java) (revision 17062) @@ -31,6 +31,12 @@ public final static SimpleDateFormat SIMPLEDATEFORMAT_YYYYMMDD = new SimpleDateFormat( "yyyy-MM-dd"); + /** + * 根据给定的时间格式,把String型转成Date类型,若转换成不成功则返回null.. + * @param date 时间字符串 + * @param fmt 时间格式的字符串 + * @return + */ public static Date safelyParseDate(String date,String fmt) { try { return safelyParseDate(date,new SimpleDateFormat(fmt)); @@ -40,6 +46,12 @@ return null; } + /** + * 根据给定的时间格式,把String型转成Date类型,若转换成不成功则返回null.. + * @param dateStr 时间字符串 + * @param sdf 具有指定时间格式的SimpleDateFormat对象 + * @return + */ public static Date safelyParseDate(String dateStr,SimpleDateFormat sdf) { Date date = null; if(StringUtils.isBlank(dateStr)){ Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java =================================================================== diff -u -r17021 -r17062 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 17021) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 17062) @@ -1414,7 +1414,12 @@ SterilizationRecord sterilizationRecord) { updateSterilizationRecordStatisticsInfo(sterilizationRecord,null); } - // 计算并更新灭菌记录的器械统计信息 + + /** + * 计算并更新灭菌记录的器械统计信息.. + * @param sterilizationRecord 灭菌记录 + * @param tis 器械包实例集合 + */ private void updateSterilizationRecordStatisticsInfo( SterilizationRecord sterilizationRecord,Collection tis) { @@ -2043,6 +2048,11 @@ return list; } + /** + * 新加的灭菌记录是否可以使用此灭菌炉(即:此灭菌炉不处于“灭菌中”、“灭菌中断”这两种状态).. + * @param sterilizerName 灭菌炉名称 + * @return + */ @SuppressWarnings("unchecked") @Override public boolean isAllSterilizationEnd(String sterilizerName) { Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r17060 -r17062 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 17060) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 17062) @@ -7773,16 +7773,18 @@ } /** - * 根据器械包条码集合,获取 "包含植入物的器械包的信息",信息具体如下:
+ * 根据器械包条码集合,获取 “包含植入物的器械包”的部分信息 + * + * @param tousseBarcodes 器械包条码集合,用分号分隔 + * @return 返回值格式如下,取每个器械包对象的6个属性:
+ * [{
* barcode:器械包条码
* biologicalMonitoringEndDate:生物监测的结束时间
* endDate:灭菌的结束时间
* biologyResult:生物监测的结果
* biologicalMonitoringTime:对应灭菌炉配置的生物监测持续时间
- * lagTime:对应灭菌炉配置的灭菌与生物监测间隔时间 - * - * @param tousseBarcodes 器械包条码集合,用分号分隔 - * @return + * lagTime:对应灭菌炉配置的灭菌与生物监测间隔时间
+ * },{},{}......] */ private List> getTousseIntoForBarcodes(String tousseBarcodes) { @@ -7854,14 +7856,20 @@ } /** - * 批量获取器械包的生物监测的信息,信息具体如下:
- * noBiologicalMonitoring:没做生物监测
- * biologicalMonitoringNoResult:生物监测的结果为无
- * biologicalMonitoringFail:生物监测的结果是不合格
- * urgentDelivery:紧急发货 + * 根据器械包条码集合,获取 “包含植入物的器械包”生物监测的情况
* * @param tousseBarcodes 器械包条码集合的字符串,用分号分隔 - * @return + * @return 返回值格式如下,每个器械包对象的4个属性:
+ * {
+ * {
+ * barcode:{
+ * noBiologicalMonitoring:没做生物监测(如果值条码则说明成立)
+ * biologicalMonitoringNoResult:生物监测的结果为无(如果值条码则说明成立)
+ * biologicalMonitoringFail:生物监测的结果是不合格(如果值条码则说明成立)
+ * urgentDelivery:紧急发货(如果值条码则说明成立)
+ * }
+ * },{},{}......} + * */ @Override public JSONObject getBiologicalMonitoringInfo(String tousseBarcodes) { @@ -7900,8 +7908,8 @@ noBiologicalMonitoring = barcode; if (StringUtils.isNotBlank(lagTimeString) && StringUtils.isNotBlank(biologicalMonitoringTimeString)) { //在对应的灭菌炉"灭菌与生物监测间隔时间"和"生物监测持续时间"两个参数都要有配才会去判断是否紧急发货,否则默认常规 try { - Integer lagTime = new Integer(lagTimeString)*60*1000; - Integer biologicalMonitoringTime = new Integer(biologicalMonitoringTimeString)*60*1000; + long lagTime = new Integer(lagTimeString).longValue()*60l*1000l; + long biologicalMonitoringTime = new Integer(biologicalMonitoringTimeString).longValue()*60l*1000l; long endDateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(endDate).getTime(); long biologicalMonitoringEndDateTime = endDateTime + lagTime + biologicalMonitoringTime; Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r17061 -r17062 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 17061) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 17062) @@ -2148,7 +2148,7 @@ * @param taskGroup 任务组 * @param reviewer 审核人 * @param reviewerCode 审核人编码 - * @param sterileDate 来菌日期 + * @param sterileDate 灭菌日期 */ public JSONObject reviewTousseInstance(String idsStr, String basketBarcode, String taskGroup, String reviewer, String reviewerCode, Date sterileDate) { Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManager.java =================================================================== diff -u -r17005 -r17062 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManager.java (.../SterilizationRecordManager.java) (revision 17005) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManager.java (.../SterilizationRecordManager.java) (revision 17062) @@ -103,6 +103,11 @@ public List getSterilizationRecordByTousseInstanceId( String tousseInstanceId); + /** + * 新加的灭菌记录是否可以使用此灭菌炉(即:此灭菌炉不处于“灭菌中”、“灭菌中断”这两种状态) + * @param sterilizerName 灭菌炉名称 + * @return + */ public boolean isAllSterilizationEnd(String sterilizerName); public ReviewedBasket getReviewedBasketBySql(String sql); Index: ssts-web/src/test/java/test/forgon/disinfectsystem/invoicemanager/service/BiologicalMonitoringSituationTest.java =================================================================== diff -u --- ssts-web/src/test/java/test/forgon/disinfectsystem/invoicemanager/service/BiologicalMonitoringSituationTest.java (revision 0) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/invoicemanager/service/BiologicalMonitoringSituationTest.java (revision 17062) @@ -0,0 +1,533 @@ +package test.forgon.disinfectsystem.invoicemanager.service; + + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Date; + +import net.sf.json.JSONObject; +import static org.testng.Assert.assertEquals; + +import org.apache.commons.lang3.StringUtils; +import org.hibernate.Session; +import org.springframework.beans.factory.annotation.Autowired; +import org.testng.AssertJUnit; +import org.testng.annotations.Test; + +import com.forgon.disinfectsystem.basedatamanager.sterilizer.service.SterilizerManager; +import com.forgon.disinfectsystem.entity.basedatamanager.container.Container; +import com.forgon.disinfectsystem.entity.basedatamanager.sterilizer.Sterilizer; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; +import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord; +import com.forgon.disinfectsystem.packing.service.PackingManager; +import com.forgon.disinfectsystem.sterilizationmanager.sterilizationrecord.service.SterilizationRecordManager; +import com.forgon.serialnumber.model.SerialNum; +import com.forgon.tools.util.ForgonDateUtils; + +import test.forgon.constant.Constants; +import test.forgon.disinfectsystem.AbstractCSSDTest; + +/** + * 此类测试发货时,对一些包含植入物的器械包的生物监测情况的提醒功能 + * @author Chenjiaru + * + */ +public class BiologicalMonitoringSituationTest extends AbstractCSSDTest { + + @Autowired + private PackingManager packingManager; + @Autowired + private SterilizationRecordManager sterilizationRecordManager; + @Autowired + private SterilizerManager sterilizerManager; + + +// @Rollback(value=false) + /** + * 发货时扫描单个器械包条码时,分以下场景 + 1、此器械包不包含植入物:则返回一个空的JSONObject + 2、此器械包包含植入物: + 1、生物监测结果为“不合格” + 1、发货时间大于生物监测结束时间(即:常规发货) + 2、发货时间小于生物监测结束时间(即:紧急发货) + 2、生物监测结果为“合格” + 1、发货时间大于生物监测结束时间(即:常规发货) + 2、发货时间小于生物监测结束时间(即:紧急发货) + 3、生物监测结果为“无” + 1、填了生物监测结束时间 + 1、发货时间大于生物监测结束时间(即:常规发货) + 2、发货时间小于生物监测结束时间(即:紧急发货) + 2、没填生物监测结束时间 + 1、对应的灭菌炉没配置生物监测的持续时间 + 2、对应的灭菌炉配置了生物监测的持续时间 + 1、发货时间大于“灭菌结束时间+间隔时间+生物监测持续时间”(即:常规发货) + 2、发货时间小于“灭菌结束时间+间隔时间+生物监测持续时间”(即:紧急发货) + */ + @Test + public void testSingleBarcode() { + initCSSDData(); + Session session = objectDao.getHibernateSession(); + + + + //装配管理 + TousseDefinition td_开胸包 = tousseDefinitionManager.getTousseDefinitionByName("Test开胸包"); + TousseInstance ti_开胸包1 = new TousseInstance(); + ti_开胸包1.setTousseDefinition(td_开胸包); + ti_开胸包1.setOperationTime(new Date()); + ti_开胸包1.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + ti_开胸包1.setStatus(TousseInstance.STATUS_PACKED); + tousseInstanceManager.saveOrUpdate(ti_开胸包1); + + + //审核管理 + packingManager.reviewTousseInstance(ti_开胸包1.getId().toString(), "", "aa", "bb", "cc", new Date()); + + + //灭菌管理 + Sterilizer s_1号高温蒸汽灭菌炉 = sterilizerManager.getSterilizerByName("1号高温蒸汽灭菌炉"); //灭菌炉 + SterilizationRecord sr1 = new SterilizationRecord(); //灭菌记录 + sr1.setStartDate(new Date()); + sr1.setOrgUnitCoding(Constants.ORG_UNIT_CODE_CSSD); + sr1.setSterilizationUser("test1"); + sr1.setSterilizerName(s_1号高温蒸汽灭菌炉.getName()); + sr1.setFrequency(2); + sr1.setStatus(""); + Collection tousseInstanceBarcodes = Collections.singleton(ti_开胸包1.getBarcode()); + sterilizationRecordManager.saveOrUpdateSterilizationRecord(sr1, tousseInstanceBarcodes, new ArrayList(), null); + + //完成灭菌 + Collection srIds = Collections.singleton(sr1.getId()); + sterilizationRecordManager.completeSterilization(srIds, Constants.ORG_UNIT_CODE_CSSD, "aa", "aa", false); + + + + + + + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~上面基础数据创建完成,下面开始测试~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// + String ti_开胸包1_barcode = ti_开胸包1.getBarcode(); + JSONObject obj = new JSONObject(); + + + + + /** + * Test开胸包(没有包含植入物),则返回值:{} + */ + JSONObject result1 = invoiceManager.getBiologicalMonitoringInfo(ti_开胸包1_barcode); + assertEquals(result1.toString(), "{}"); + + + + td_开胸包.setIncludeImplant(new Integer(0)); + + + /** + * Test开胸包(包含植入物) && 生物监测结果为“不合格” && (发货时间大于生物监测结束时间 || 发货时间小于生物监测结束时间) + * 返回值:{"条码":{"noBiologicalMonitoring":"","biologicalMonitoringNoResult":"","biologicalMonitoringFail":"条码","urgentDelivery":"条码"}} + */ + sr1.setBiologyResult(SterilizationRecord.MONITOR_RESULT_UNQUALIFIED); + sr1.setBiologicalMonitoringEndDate(ForgonDateUtils.safelyParseDate("2017-01-01 00:00:00")); + session.flush(); + JSONObject result2 = invoiceManager.getBiologicalMonitoringInfo(ti_开胸包1_barcode); + sr1.setBiologicalMonitoringEndDate(ForgonDateUtils.safelyParseDate("3017-01-01 00:00:00")); + session.flush(); + JSONObject result3 = invoiceManager.getBiologicalMonitoringInfo(ti_开胸包1_barcode); + assertEquals(result3.toString(), result2.toString()); //jsonObj2和jsonObj3返回结果必须一样 + obj = result2.optJSONObject(ti_开胸包1_barcode); + assertEquals(obj.optString("noBiologicalMonitoring"), ""); + assertEquals(obj.optString("biologicalMonitoringNoResult"), ""); + assertEquals(obj.optString("biologicalMonitoringFail"), ti_开胸包1_barcode); + assertEquals(obj.optString("urgentDelivery"), ti_开胸包1_barcode); + + + /** + * Test开胸包(包含植入物) && 生物监测结果为“合格” && 发货时间大于生物监测结束时间(即:常规发货 ) + * 返回值:{"条码":{"noBiologicalMonitoring":"","biologicalMonitoringNoResult":"","biologicalMonitoringFail":"","urgentDelivery":""}} + */ + sr1.setBiologyResult(SterilizationRecord.MONITOR_RESULT_QUALIFIED); + sr1.setBiologicalMonitoringEndDate(ForgonDateUtils.safelyParseDate("2017-01-01 00:00:00")); + session.flush(); + JSONObject result4 = invoiceManager.getBiologicalMonitoringInfo(ti_开胸包1_barcode); + obj= result4.optJSONObject(ti_开胸包1_barcode); + assertEquals(obj.optString("noBiologicalMonitoring"), ""); + assertEquals(obj.optString("biologicalMonitoringNoResult"), ""); + assertEquals(obj.optString("biologicalMonitoringFail"), ""); + assertEquals(obj.optString("urgentDelivery"), ""); + /** + * Test开胸包(包含植入物) && 生物监测结果为“合格” && 发货时间小于生物监测结束时间(即:紧急发货 ) + * 返回值:{"条码":{"noBiologicalMonitoring":"","biologicalMonitoringNoResult":"","biologicalMonitoringFail":"","urgentDelivery":"条码"}} + */ + sr1.setBiologyResult(SterilizationRecord.MONITOR_RESULT_QUALIFIED); + sr1.setBiologicalMonitoringEndDate(ForgonDateUtils.safelyParseDate("3017-01-01 00:00:00")); + session.flush(); + JSONObject result5 = invoiceManager.getBiologicalMonitoringInfo(ti_开胸包1_barcode); + obj= result5.optJSONObject(ti_开胸包1_barcode); + assertEquals(obj.optString("noBiologicalMonitoring"), ""); + assertEquals(obj.optString("biologicalMonitoringNoResult"), ""); + assertEquals(obj.optString("biologicalMonitoringFail"), ""); + assertEquals(obj.optString("urgentDelivery"), ti_开胸包1_barcode); + + + + /** + * Test开胸包(包含植入物) && 生物监测结果为“无” && 填了生物监测结束时间 && 发货时间大于生物监测结束时间(即:常规发货 ) + * 返回值:{"条码":{"noBiologicalMonitoring":"","biologicalMonitoringNoResult":"条码","biologicalMonitoringFail":"","urgentDelivery":""}} + */ + sr1.setBiologyResult(SterilizationRecord.MONITOR_RESULT_NO); + sr1.setBiologicalMonitoringEndDate(ForgonDateUtils.safelyParseDate("2017-01-01 00:00:00")); + session.flush(); + JSONObject result6 = invoiceManager.getBiologicalMonitoringInfo(ti_开胸包1_barcode); + obj= result6.optJSONObject(ti_开胸包1_barcode); + assertEquals(obj.optString("noBiologicalMonitoring"), ""); + assertEquals(obj.optString("biologicalMonitoringNoResult"), ti_开胸包1_barcode); + assertEquals(obj.optString("biologicalMonitoringFail"), ""); + assertEquals(obj.optString("urgentDelivery"), ""); + /** + * Test开胸包(包含植入物) && 生物监测结果为“无” && 填了生物监测结束时间 && 发货时间小于生物监测结束时间(即:紧急发货 ) + * 返回值:{"条码":{"noBiologicalMonitoring":"","biologicalMonitoringNoResult":"条码","biologicalMonitoringFail":"","urgentDelivery":"条码"}} + */ + sr1.setBiologyResult(SterilizationRecord.MONITOR_RESULT_NO); + sr1.setBiologicalMonitoringEndDate(ForgonDateUtils.safelyParseDate("3017-01-01 00:00:00")); + session.flush(); + JSONObject result7 = invoiceManager.getBiologicalMonitoringInfo(ti_开胸包1_barcode); + obj= result7.optJSONObject(ti_开胸包1_barcode); + assertEquals(obj.optString("noBiologicalMonitoring"), ""); + assertEquals(obj.optString("biologicalMonitoringNoResult"), ti_开胸包1_barcode); + assertEquals(obj.optString("biologicalMonitoringFail"), ""); + assertEquals(obj.optString("urgentDelivery"), ti_开胸包1_barcode); + + + + /** + * Test开胸包(包含植入物) && 生物监测结果为“无” && 没填生物监测结束时间 && 对应的灭菌炉也没配置生物监测的持续时间(生物监测间隔时间随之,他们两者是关联的,要么一起有,要么都没有) + * 返回值:{"条码":{"noBiologicalMonitoring":"条码","biologicalMonitoringNoResult":"条码","biologicalMonitoringFail":"","urgentDelivery":""}} + */ + sr1.setBiologyResult(SterilizationRecord.MONITOR_RESULT_NO); + sr1.setBiologicalMonitoringEndDate(null); + s_1号高温蒸汽灭菌炉.setBiologicalMonitoringTime(null); + s_1号高温蒸汽灭菌炉.setLagTime(null); + session.flush(); + JSONObject result8 = invoiceManager.getBiologicalMonitoringInfo(ti_开胸包1_barcode); + obj= result8.optJSONObject(ti_开胸包1_barcode); + assertEquals(obj.optString("noBiologicalMonitoring"), ti_开胸包1_barcode); + assertEquals(obj.optString("biologicalMonitoringNoResult"), ti_开胸包1_barcode); + assertEquals(obj.optString("biologicalMonitoringFail"), ""); + assertEquals(obj.optString("urgentDelivery"), ""); + + + /** + * Test开胸包(包含植入物) && 生物监测结果为“无” && 没填生物监测结束时间 && 对应的灭菌炉配置生物监测的持续时间(生物监测间隔时间随之,他们两者是关联的,要么一起有,要么都没有) && 发货时间大于“灭菌结束时间+间隔时间+生物监测持续时间”(即:常规发货) + * 返回值:{"条码":{"noBiologicalMonitoring":"条码","biologicalMonitoringNoResult":"条码","biologicalMonitoringFail":"","urgentDelivery":""}} + */ + sr1.setBiologyResult(SterilizationRecord.MONITOR_RESULT_NO); + sr1.setEndDate(ForgonDateUtils.safelyParseDate("2017-01-01 00:00:00")); + sr1.setBiologicalMonitoringEndDate(null); + s_1号高温蒸汽灭菌炉.setBiologicalMonitoringTime(30); + s_1号高温蒸汽灭菌炉.setLagTime(30); + session.flush(); + JSONObject result9 = invoiceManager.getBiologicalMonitoringInfo(ti_开胸包1_barcode); + obj= result9.optJSONObject(ti_开胸包1_barcode); + assertEquals(obj.optString("noBiologicalMonitoring"), ti_开胸包1_barcode); + assertEquals(obj.optString("biologicalMonitoringNoResult"), ti_开胸包1_barcode); + assertEquals(obj.optString("biologicalMonitoringFail"), ""); + assertEquals(obj.optString("urgentDelivery"), ""); + /** + * Test开胸包(包含植入物) && 生物监测结果为“无” && 没填生物监测结束时间 && 对应的灭菌炉配置生物监测的持续时间(生物监测间隔时间随之,他们两者是关联的,要么一起有,要么都没有) && 发货时间小于“灭菌结束时间+间隔时间+生物监测持续时间”(即:紧急发货) + * 返回值:{"条码":{"noBiologicalMonitoring":"条码","biologicalMonitoringNoResult":"条码","biologicalMonitoringFail":"","urgentDelivery":"条码"}} + */ + sr1.setBiologyResult(SterilizationRecord.MONITOR_RESULT_NO); + sr1.setEndDate(ForgonDateUtils.safelyParseDate("2017-01-01 00:00:00")); + sr1.setBiologicalMonitoringEndDate(null); + s_1号高温蒸汽灭菌炉.setBiologicalMonitoringTime(1440*365*1000); + s_1号高温蒸汽灭菌炉.setLagTime(30); + session.flush(); + JSONObject result10 = invoiceManager.getBiologicalMonitoringInfo(ti_开胸包1_barcode); + obj= result10.optJSONObject(ti_开胸包1_barcode); + assertEquals(obj.optString("noBiologicalMonitoring"), ti_开胸包1_barcode); + assertEquals(obj.optString("biologicalMonitoringNoResult"), ti_开胸包1_barcode); + assertEquals(obj.optString("biologicalMonitoringFail"), ""); + assertEquals(obj.optString("urgentDelivery"), ti_开胸包1_barcode); + + } + + + /** + * 发货时扫描固定条码或者扫描灭菌篮筐时,里面的每个器械包的场景同上(注:灭菌时扫描入灭菌篮筐和固定条码时,里面的器械包的生物监测情况是一至的,因为他们是同一炉做灭菌,所以不会出现交叉) + */ + @Test + public void testMultipleBarcode() { + initCSSDData(); + Session session = objectDao.getHibernateSession(); + + + + TousseDefinition td_开胸包 = tousseDefinitionManager.getTousseDefinitionByName("Test开胸包"); + TousseDefinition td_开颅包 = tousseDefinitionManager.getTousseDefinitionByName("Test开颅包"); + TousseDefinition td_开口包 = tousseDefinitionManager.getTousseDefinitionByName("Test开口包"); + + //装配管理 + TousseInstance ti_开胸包1 = new TousseInstance(); + ti_开胸包1.setTousseDefinition(td_开胸包); + ti_开胸包1.setOperationTime(new Date()); + ti_开胸包1.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + ti_开胸包1.setStatus(TousseInstance.STATUS_PACKED); + tousseInstanceManager.saveOrUpdate(ti_开胸包1); + + TousseInstance ti_开颅包1 = new TousseInstance(); + ti_开颅包1.setTousseDefinition(td_开颅包); + ti_开颅包1.setOperationTime(new Date()); + ti_开颅包1.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + ti_开颅包1.setStatus(TousseInstance.STATUS_PACKED); + tousseInstanceManager.saveOrUpdate(ti_开颅包1); + + TousseInstance ti_开口包1 = new TousseInstance(); + ti_开口包1.setTousseDefinition(td_开口包); + ti_开口包1.setOperationTime(new Date()); + ti_开口包1.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + ti_开口包1.setStatus(TousseInstance.STATUS_PACKED); + tousseInstanceManager.saveOrUpdate(ti_开口包1); + + //审核管理 + Container container = containerManager.getContainerByBarcode("018000001"); //篮筐01 + packingManager.reviewTousseInstance(ti_开胸包1.getId() + ";" + ti_开颅包1.getId() + ";" + ti_开口包1.getId(), + container.getBarcode(), "aa", "bb", "cc", new Date()); + + + //灭菌管理 + Sterilizer s_1号高温蒸汽灭菌炉 = sterilizerManager.getSterilizerByName("1号高温蒸汽灭菌炉"); //灭菌炉 + SterilizationRecord sr1 = new SterilizationRecord(); //灭菌记录 + sr1.setStartDate(new Date()); + sr1.setOrgUnitCoding(Constants.ORG_UNIT_CODE_CSSD); + sr1.setSterilizationUser("test1"); + sr1.setSterilizerName(s_1号高温蒸汽灭菌炉.getName()); + sr1.setFrequency(2); + sr1.setStatus(""); + Collection containerBarcodes = Collections.singleton(container.getBarcode()); + sterilizationRecordManager.saveOrUpdateSterilizationRecord(sr1, new ArrayList(), containerBarcodes, null); + + //完成灭菌 + Collection srIds = Collections.singleton(sr1.getId()); + sterilizationRecordManager.completeSterilization(srIds, Constants.ORG_UNIT_CODE_CSSD, "aa", "aa", false); + + + + + + + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~上面基础数据创建完成,下面开始测试~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// + String ti_开胸包1_barcode = ti_开胸包1.getBarcode(); //Test开胸包的条码 + String ti_开颅包1_barcode = ti_开颅包1.getBarcode(); //Test开颅包的条码 + String ti_开口包1_barcode = ti_开口包1.getBarcode(); //Test开口包的条码 + + JSONObject obj1 = new JSONObject(); + JSONObject obj2 = new JSONObject(); + + + /** + * Test开胸包、Test开颅和Test包开口包(都没有包含植入物),则返回值:{} + */ + JSONObject result1 = invoiceManager.getBiologicalMonitoringInfo(ti_开胸包1_barcode + ";" + ti_开颅包1_barcode + ";" + ti_开口包1_barcode); + assertEquals(result1.toString(), "{}"); + + + + + td_开胸包.setIncludeImplant(new Integer(0)); + td_开颅包.setIncludeImplant(new Integer(0)); + td_开口包.setIncludeImplant(new Integer(1)); + + + /** + * Test开胸包和Test开颅(包含植入物)Test包开口包(没有包含植入物) && 生物监测结果为“不合格” && (发货时间大于生物监测结束时间 || 发货时间小于生物监测结束时间) + */ + sr1.setBiologyResult(SterilizationRecord.MONITOR_RESULT_UNQUALIFIED); + sr1.setBiologicalMonitoringEndDate(ForgonDateUtils.safelyParseDate("2017-01-01 00:00:00")); + session.flush(); + JSONObject result2 = invoiceManager.getBiologicalMonitoringInfo(ti_开胸包1_barcode + ";" + ti_开颅包1_barcode + ";" + ti_开口包1_barcode); + sr1.setBiologicalMonitoringEndDate(ForgonDateUtils.safelyParseDate("3017-01-01 00:00:00")); + session.flush(); + JSONObject result3 = invoiceManager.getBiologicalMonitoringInfo(ti_开胸包1_barcode + ";" + ti_开颅包1_barcode + ";" + ti_开口包1_barcode); + assertEquals(result3.toString(), result2.toString()); //jsonObj2和jsonObj3返回结果必须一样 + + obj1 = result2.optJSONObject(ti_开胸包1_barcode); + assertEquals(obj1.optString("noBiologicalMonitoring"), ""); + assertEquals(obj1.optString("biologicalMonitoringNoResult"), ""); + assertEquals(obj1.optString("biologicalMonitoringFail"), ti_开胸包1_barcode); + assertEquals(obj1.optString("urgentDelivery"), ti_开胸包1_barcode); + + obj2 = result2.optJSONObject(ti_开颅包1_barcode); + assertEquals(obj2.optString("noBiologicalMonitoring"), ""); + assertEquals(obj2.optString("biologicalMonitoringNoResult"), ""); + assertEquals(obj2.optString("biologicalMonitoringFail"), ti_开颅包1_barcode); + assertEquals(obj2.optString("urgentDelivery"), ti_开颅包1_barcode); + + AssertJUnit.assertTrue(StringUtils.isBlank(result2.optString(ti_开口包1_barcode))); + + /** + * Test开胸包和Test开颅(包含植入物)Test包开口包(没有包含植入物) && 生物监测结果为“合格” && 发货时间大于生物监测结束时间(即:常规发货 ) + */ + sr1.setBiologyResult(SterilizationRecord.MONITOR_RESULT_QUALIFIED); + sr1.setBiologicalMonitoringEndDate(ForgonDateUtils.safelyParseDate("2017-01-01 00:00:00")); + session.flush(); + JSONObject result4 = invoiceManager.getBiologicalMonitoringInfo(ti_开胸包1_barcode + ";" + ti_开颅包1_barcode + ";" + ti_开口包1_barcode); + obj1 = result4.optJSONObject(ti_开胸包1_barcode); + assertEquals(obj1.optString("noBiologicalMonitoring"), ""); + assertEquals(obj1.optString("biologicalMonitoringNoResult"), ""); + assertEquals(obj1.optString("biologicalMonitoringFail"), ""); + assertEquals(obj1.optString("urgentDelivery"), ""); + + obj2 = result4.optJSONObject(ti_开颅包1_barcode); + assertEquals(obj2.optString("noBiologicalMonitoring"), ""); + assertEquals(obj2.optString("biologicalMonitoringNoResult"), ""); + assertEquals(obj2.optString("biologicalMonitoringFail"), ""); + assertEquals(obj2.optString("urgentDelivery"), ""); + + AssertJUnit.assertTrue(StringUtils.isBlank(result4.optString(ti_开口包1_barcode))); + /** + * Test开胸包和Test开颅(包含植入物)Test包开口包(没有包含植入物)&& 生物监测结果为“合格” && 发货时间小于生物监测结束时间(即:紧急发货 ) + */ + sr1.setBiologyResult(SterilizationRecord.MONITOR_RESULT_QUALIFIED); + sr1.setBiologicalMonitoringEndDate(ForgonDateUtils.safelyParseDate("3017-01-01 00:00:00")); + session.flush(); + JSONObject result5 = invoiceManager.getBiologicalMonitoringInfo(ti_开胸包1_barcode + ";" + ti_开颅包1_barcode + ";" + ti_开口包1_barcode); + obj1 = result5.optJSONObject(ti_开胸包1_barcode); + assertEquals(obj1.optString("noBiologicalMonitoring"), ""); + assertEquals(obj1.optString("biologicalMonitoringNoResult"), ""); + assertEquals(obj1.optString("biologicalMonitoringFail"), ""); + assertEquals(obj1.optString("urgentDelivery"), ti_开胸包1_barcode); + + obj2 = result5.optJSONObject(ti_开颅包1_barcode); + assertEquals(obj2.optString("noBiologicalMonitoring"), ""); + assertEquals(obj2.optString("biologicalMonitoringNoResult"), ""); + assertEquals(obj2.optString("biologicalMonitoringFail"), ""); + assertEquals(obj2.optString("urgentDelivery"), ti_开颅包1_barcode); + + AssertJUnit.assertTrue(StringUtils.isBlank(result5.optString(ti_开口包1_barcode))); + + + + + /** + * Test开胸包和Test开颅(包含植入物)Test包开口包(没有包含植入物) && 生物监测结果为“无” && 填了生物监测结束时间 && 发货时间大于生物监测结束时间(即:常规发货 ) + */ + sr1.setBiologyResult(SterilizationRecord.MONITOR_RESULT_NO); + sr1.setBiologicalMonitoringEndDate(ForgonDateUtils.safelyParseDate("2017-01-01 00:00:00")); + session.flush(); + JSONObject result6 = invoiceManager.getBiologicalMonitoringInfo(ti_开胸包1_barcode + ";" + ti_开颅包1_barcode + ";" + ti_开口包1_barcode); + obj1 = result6.optJSONObject(ti_开胸包1_barcode); + assertEquals(obj1.optString("noBiologicalMonitoring"), ""); + assertEquals(obj1.optString("biologicalMonitoringNoResult"), ti_开胸包1_barcode); + assertEquals(obj1.optString("biologicalMonitoringFail"), ""); + assertEquals(obj1.optString("urgentDelivery"), ""); + + obj2 = result6.optJSONObject(ti_开颅包1_barcode); + assertEquals(obj2.optString("noBiologicalMonitoring"), ""); + assertEquals(obj2.optString("biologicalMonitoringNoResult"), ti_开颅包1_barcode); + assertEquals(obj2.optString("biologicalMonitoringFail"), ""); + assertEquals(obj2.optString("urgentDelivery"), ""); + + AssertJUnit.assertTrue(StringUtils.isBlank(result6.optString(ti_开口包1_barcode))); + /** + * Test开胸包和Test开颅(包含植入物)Test包开口包(没有包含植入物) && 生物监测结果为“无” && 填了生物监测结束时间 && 发货时间小于生物监测结束时间(即:紧急发货 ) + */ + sr1.setBiologyResult(SterilizationRecord.MONITOR_RESULT_NO); + sr1.setBiologicalMonitoringEndDate(ForgonDateUtils.safelyParseDate("3017-01-01 00:00:00")); + session.flush(); + JSONObject result7 = invoiceManager.getBiologicalMonitoringInfo(ti_开胸包1_barcode + ";" + ti_开颅包1_barcode + ";" + ti_开口包1_barcode); + obj1 = result7.optJSONObject(ti_开胸包1_barcode); + assertEquals(obj1.optString("noBiologicalMonitoring"), ""); + assertEquals(obj1.optString("biologicalMonitoringNoResult"), ti_开胸包1_barcode); + assertEquals(obj1.optString("biologicalMonitoringFail"), ""); + assertEquals(obj1.optString("urgentDelivery"), ti_开胸包1_barcode); + + obj2 = result7.optJSONObject(ti_开颅包1_barcode); + assertEquals(obj2.optString("noBiologicalMonitoring"), ""); + assertEquals(obj2.optString("biologicalMonitoringNoResult"), ti_开颅包1_barcode); + assertEquals(obj2.optString("biologicalMonitoringFail"), ""); + assertEquals(obj2.optString("urgentDelivery"), ti_开颅包1_barcode); + + AssertJUnit.assertTrue(StringUtils.isBlank(result7.optString(ti_开口包1_barcode))); + + + + /** + * Test开胸包和Test开颅(包含植入物)Test包开口包(没有包含植入物) && 没填生物监测结束时间 && 对应的灭菌炉也没配置生物监测的持续时间(生物监测间隔时间随之,他们两者是关联的,要么一起有,要么都没有) + */ + sr1.setBiologyResult(SterilizationRecord.MONITOR_RESULT_NO); + sr1.setBiologicalMonitoringEndDate(null); + s_1号高温蒸汽灭菌炉.setBiologicalMonitoringTime(null); + s_1号高温蒸汽灭菌炉.setLagTime(null); + session.flush(); + JSONObject result8 = invoiceManager.getBiologicalMonitoringInfo(ti_开胸包1_barcode + ";" + ti_开颅包1_barcode + ";" + ti_开口包1_barcode); + obj1 = result8.optJSONObject(ti_开胸包1_barcode); + assertEquals(obj1.optString("noBiologicalMonitoring"), ti_开胸包1_barcode); + assertEquals(obj1.optString("biologicalMonitoringNoResult"), ti_开胸包1_barcode); + assertEquals(obj1.optString("biologicalMonitoringFail"), ""); + assertEquals(obj1.optString("urgentDelivery"), ""); + + obj2 = result8.optJSONObject(ti_开颅包1_barcode); + assertEquals(obj2.optString("noBiologicalMonitoring"), ti_开颅包1_barcode); + assertEquals(obj2.optString("biologicalMonitoringNoResult"), ti_开颅包1_barcode); + assertEquals(obj2.optString("biologicalMonitoringFail"), ""); + assertEquals(obj2.optString("urgentDelivery"), ""); + + AssertJUnit.assertTrue(StringUtils.isBlank(result8.optString(ti_开口包1_barcode))); + + + /** + * Test开胸包和Test开颅(包含植入物)Test包开口包(没有包含植入物) && 生物监测结果为“无” && 没填生物监测结束时间 && 对应的灭菌炉配置生物监测的持续时间(生物监测间隔时间随之,他们两者是关联的,要么一起有,要么都没有) && 发货时间大于“灭菌结束时间+间隔时间+生物监测持续时间”(即:常规发货) + */ + sr1.setBiologyResult(SterilizationRecord.MONITOR_RESULT_NO); + sr1.setEndDate(ForgonDateUtils.safelyParseDate("2017-01-01 00:00:00")); + sr1.setBiologicalMonitoringEndDate(null); + s_1号高温蒸汽灭菌炉.setBiologicalMonitoringTime(30); + s_1号高温蒸汽灭菌炉.setLagTime(30); + session.flush(); + JSONObject result9 = invoiceManager.getBiologicalMonitoringInfo(ti_开胸包1_barcode + ";" + ti_开颅包1_barcode + ";" + ti_开口包1_barcode); + obj1 = result9.optJSONObject(ti_开胸包1_barcode); + assertEquals(obj1.optString("noBiologicalMonitoring"), ti_开胸包1_barcode); + assertEquals(obj1.optString("biologicalMonitoringNoResult"), ti_开胸包1_barcode); + assertEquals(obj1.optString("biologicalMonitoringFail"), ""); + assertEquals(obj1.optString("urgentDelivery"), ""); + + obj2 = result9.optJSONObject(ti_开颅包1_barcode); + assertEquals(obj2.optString("noBiologicalMonitoring"), ti_开颅包1_barcode); + assertEquals(obj2.optString("biologicalMonitoringNoResult"), ti_开颅包1_barcode); + assertEquals(obj2.optString("biologicalMonitoringFail"), ""); + assertEquals(obj2.optString("urgentDelivery"), ""); + + AssertJUnit.assertTrue(StringUtils.isBlank(result9.optString(ti_开口包1_barcode))); + /** + * Test开胸包和Test开颅(包含植入物)Test包开口包(没有包含植入物) && 生物监测结果为“无” && 没填生物监测结束时间 && 对应的灭菌炉配置生物监测的持续时间(生物监测间隔时间随之,他们两者是关联的,要么一起有,要么都没有) && 发货时间小于“灭菌结束时间+间隔时间+生物监测持续时间”(即:紧急发货) + * 返回值:{"条码":{"noBiologicalMonitoring":"条码","biologicalMonitoringNoResult":"条码","biologicalMonitoringFail":"","urgentDelivery":"条码"}} + */ + sr1.setBiologyResult(SterilizationRecord.MONITOR_RESULT_NO); + sr1.setEndDate(ForgonDateUtils.safelyParseDate("2017-01-01 00:00:00")); + sr1.setBiologicalMonitoringEndDate(null); + s_1号高温蒸汽灭菌炉.setBiologicalMonitoringTime(1440*365*1000); + s_1号高温蒸汽灭菌炉.setLagTime(30); + session.flush(); + JSONObject result10 = invoiceManager.getBiologicalMonitoringInfo(ti_开胸包1_barcode + ";" + ti_开颅包1_barcode + ";" + ti_开口包1_barcode); + obj1 = result10.optJSONObject(ti_开胸包1_barcode); + assertEquals(obj1.optString("noBiologicalMonitoring"), ti_开胸包1_barcode); + assertEquals(obj1.optString("biologicalMonitoringNoResult"), ti_开胸包1_barcode); + assertEquals(obj1.optString("biologicalMonitoringFail"), ""); + assertEquals(obj1.optString("urgentDelivery"), ti_开胸包1_barcode); + + obj2 = result10.optJSONObject(ti_开颅包1_barcode); + assertEquals(obj2.optString("noBiologicalMonitoring"), ti_开颅包1_barcode); + assertEquals(obj2.optString("biologicalMonitoringNoResult"), ti_开颅包1_barcode); + assertEquals(obj2.optString("biologicalMonitoringFail"), ""); + assertEquals(obj2.optString("urgentDelivery"), ti_开颅包1_barcode); + + AssertJUnit.assertTrue(StringUtils.isBlank(result10.optString(ti_开口包1_barcode))); + + } + +} Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java =================================================================== diff -u -r16891 -r17062 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java (.../PackingManager.java) (revision 16891) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java (.../PackingManager.java) (revision 17062) @@ -128,7 +128,7 @@ * @param taskGroup 任务组 * @param reviewer 审核人 * @param reviewerCode 审核人编码 - * @param sterileDate 来菌日期 + * @param sterileDate 灭菌日期 */ public JSONObject reviewTousseInstance(String idsStr,String basketBarcode, String taskGroup,String reviewer,String reviewerCode,Date sterileDate); Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManager.java =================================================================== diff -u -r16416 -r17062 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManager.java (.../InvoiceManager.java) (revision 16416) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManager.java (.../InvoiceManager.java) (revision 17062) @@ -170,15 +170,20 @@ public JSONObject batchPrintInvoice(String ids,String type); /** - * 批量获取器械包的生物监测的情况,情况具体如下:
- * noBiologicalMonitoring:没做生物监测
- * biologicalMonitoringNoResult:生物监测的结果为无
- * biologicalMonitoringFail:生物监测的结果是不合格
- * urgentDelivery:紧急发货 + * 根据器械包条码集合,获取 “包含植入物的器械包”生物监测的情况
* * @param tousseBarcodes 器械包条码集合的字符串,用分号分隔 - * @return - * @author Chenjiaru + * @return 返回值格式如下,每个器械包对象的4个属性:
+ * {
+ * {
+ * barcode:{
+ * noBiologicalMonitoring:没做生物监测(如果值条码则说明成立)
+ * biologicalMonitoringNoResult:生物监测的结果为无(如果值条码则说明成立)
+ * biologicalMonitoringFail:生物监测的结果是不合格(如果值条码则说明成立)
+ * urgentDelivery:紧急发货(如果值条码则说明成立)
+ * }
+ * },{},{}......} + * */ public JSONObject getBiologicalMonitoringInfo(String tousseBarcodes); /**