Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManager.java =================================================================== diff -u -r19831 -r20256 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManager.java (.../UseRecordManager.java) (revision 19831) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManager.java (.../UseRecordManager.java) (revision 20256) @@ -82,8 +82,17 @@ public void saveUseRecord_TRANS_REQUIRED(UseRecord modified); /** + * 多个已审核的使用记录合并转换申请单(一般由供应室用户进行此操作) + * 转换前需校验所有的使用记录是否都已审核、且录入科室都相同 + * @param ids 使用记录的id集合 + * @param applicant 转换申请人 + * @return JSONObject + */ + public JSONObject multiAuditedUseRecordsMergeConvertRecyclingApplication(Collection ids,String applicant); + + /** * 根据使用记录id创建申请单 - * @param ids 只允许传送一个使用记录的id元素 + * @param ids 使用记录的id集合 * @param applicant 转换申请人 * @param depart 科室编码 * @param departCoding 科室名称 @@ -94,7 +103,7 @@ /** * 根据使用记录id创建申请单 - * @param ids 只允许传送一个使用记录的id元素 + * @param ids 使用记录的id集合 * @param applicant 转换申请人 * @param depart 科室编码 * @param departCoding 科室名称 @@ -107,12 +116,12 @@ Date applicationCreateDate,String applicationFormType); /** * 根据使用记录id创建申请单。移动护理PDA调用,由于没有登录,需要传参 - * @param ids - * @param applicant - * @param depart - * @param departCoding - * @param applicationCreateDate - * @param applicationFormType + * @param ids 使用记录的id集合 + * @param applicant 转换申请人 + * @param depart 科室名称 + * @param departCoding 科室编码 + * @param applicationCreateDate 转换申请单日期 + * @param applicationFormType 申请表单的类型(分单或合单) * @param reviewer 审核人 * @param reviewerCode 审核人条码 * @return @@ -244,4 +253,11 @@ * @return JSONObject */ public JSONObject loadBarcode(String barcode, String scanedBarcodes,String currentOrgUnitCode); + + /** + * 根据器械包条码加载使用记录 + * @param barcode + * @return JSONObject + */ + public JSONObject loadUseRecordBarcode(String barcode); } Index: ssts-web/src/main/webapp/disinfectsystem/useRecord/useRecordView.jsp =================================================================== diff -u -r18538 -r20256 --- ssts-web/src/main/webapp/disinfectsystem/useRecord/useRecordView.jsp (.../useRecordView.jsp) (revision 18538) +++ ssts-web/src/main/webapp/disinfectsystem/useRecord/useRecordView.jsp (.../useRecordView.jsp) (revision 20256) @@ -64,6 +64,7 @@ + @@ -94,6 +95,13 @@ SSTS_RecycApplication_Create = false; + +//合并转换权限(用于控制扫条码的复选框及合并转换按钮) +var SSTS_UseRecord_MergeConvert = true; + +SSTS_UseRecord_MergeConvert = false; + + //定义源页面,用于同步病人接口 var sourcePage_useRecord = 1; Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/UseRecordAction.java =================================================================== diff -u -r18834 -r20256 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/UseRecordAction.java (.../UseRecordAction.java) (revision 18834) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/UseRecordAction.java (.../UseRecordAction.java) (revision 20256) @@ -3,6 +3,9 @@ import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.LinkedList; @@ -537,4 +540,52 @@ // iniInfo(); // } + + /** + * 根据器械包条码加载使用记录 + */ + public void loadUseRecordByTousseInstanceBarcode() { + JSONObject obj = null; + try { + String barcode = StrutsParamUtils.getPraramValue("barcode", null); + obj = useRecordManager.loadUseRecordBarcode(barcode); + }finally{ + StrutsResponseUtils.output(obj); + } + } + + /** + * 多个使用记录合并转换申请单(此操作一般由供应室用户) + */ + public void multiUseRecordsMergeConvertRecyclingApplication() { + JSONObject obj = new JSONObject(); + obj.put(JSONUtil.JSON_KEY_SUCCESS, false); + try { + String useRecordIds = StrutsParamUtils.getPraramValue("useRecordIds", null); + try { + if(StringUtils.isBlank(useRecordIds)){ + obj.put(JSONUtil.JSON_KEY_MESSAGE, "useRecordIds参数为空"); + return; + } + Collection ids = new ArrayList(); + String[] useRecordIdArray = useRecordIds.split(";"); + for(String useRecordIdString : useRecordIdArray){ + if(!StringUtils.isNumeric(useRecordIdString)){ + obj.put(JSONUtil.JSON_KEY_MESSAGE, "使用记录的id不为数字类型"); + return; + } + ids.add(Long.parseLong(useRecordIdString)); + } + obj = useRecordManager.multiAuditedUseRecordsMergeConvertRecyclingApplication(ids, AcegiHelper.getLoginUser().getUserFullName()); + } catch (RuntimeException e) { + e.printStackTrace(); + obj.put(JSONUtil.JSON_KEY_MESSAGE, e.getMessage()); + } catch (Exception e) { + e.printStackTrace(); + obj.put(JSONUtil.JSON_KEY_MESSAGE, "后台出错,请稍后再试"); + } + }finally{ + StrutsResponseUtils.output(obj); + } + } } Index: ssts-web/src/test/java/test/forgon/disinfectsystem/useRecord/UseRecordManagerTests.java =================================================================== diff -u -r19835 -r20256 --- ssts-web/src/test/java/test/forgon/disinfectsystem/useRecord/UseRecordManagerTests.java (.../UseRecordManagerTests.java) (revision 19835) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/useRecord/UseRecordManagerTests.java (.../UseRecordManagerTests.java) (revision 20256) @@ -1,5 +1,6 @@ package test.forgon.disinfectsystem.useRecord; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.List; @@ -2378,6 +2379,10 @@ AssertJUnit.assertEquals(useRecordStatus, useRecord.getStatus()); } + /** + * 测试外来器械与普通器械包录使用记录后的合并 + * @throws Exception + */ @Test public void testForeignTousseAndInsideTousseMergeConvert() throws Exception { initCSSDData(); @@ -2583,5 +2588,346 @@ AssertJUnit.assertEquals(foreignTousseApplication.getRecyclingStatus() , InvoicePlan.RECYCLINGSTATUS_AWAITRECYCLE); } } + + /** + * 测试多个使用记录合并转换申请单 + */ + @Test + public void testMultiAuditedUseRecordsMergeConvertRecyclingApplication(){ + long startTimeMillis = System.currentTimeMillis(); + //初始化数据 + initCSSDData(); + System.out.println("初始化耗时:" + (System.currentTimeMillis()-startTimeMillis)); + + //发货给手术室,同时由手术室录使用记录 + String testOrgunitName = Constants.ORG_UNIT_NAME_OR; + String testOrgunitCoding = Constants.ORG_UNIT_CODE_OR; + + //聚合包内普通器械包 + /*TousseDefinition td_开胸包 = tousseDefinitionManager.getTousseDefinitionByName("Test开胸包"); + TousseDefinition td_开颅包 = tousseDefinitionManager.getTousseDefinitionByName("Test开颅包");*/ + + //与聚合包没有任何关系的普通器械包(Test开口包需要转换申请单、Test穿刺包不需要转换申请单) + TousseDefinition td_开口包 = tousseDefinitionManager.getTousseDefinitionByName("Test开口包"); + TousseDefinition td_穿刺包 = tousseDefinitionManager.getTousseDefinitionByName("Test穿刺包"); + + + //设置装配时间 + Date packingTime = new Date(); + + /**************普通包发货*******start**************/ + Invoice invoice = new Invoice(); + invoice.setApplicant("test1"); + invoice.setApplicationTime(new Date()); + invoice.setAssistantSender("test2"); + invoice.setDepartCoding(testOrgunitCoding); + invoice.setDepart(testOrgunitName); + objectDao.saveOrUpdate(invoice); + + /*TousseInstance tousseInstance_开胸包1 = new TousseInstance(); + tousseInstance_开胸包1.setTousseDefinition(td_开胸包); + tousseInstance_开胸包1.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + tousseInstance_开胸包1.setOperationTime(packingTime); + tousseInstance_开胸包1.setTousseName(tousseInstance_开胸包1.getTousseDefinitionName()); + tousseInstance_开胸包1.setStatus(TousseInstance.STATUS_SHIPPED); + tousseInstance_开胸包1.setInvoice_id(invoice.getId()); + tousseInstance_开胸包1.setInvoiceSender(invoice.getSender()); + tousseInstance_开胸包1.setInvoiceSendTime(invoice.getSendTime()); + tousseInstance_开胸包1.setLocation(invoice.getDepartCoding()); + tousseInstance_开胸包1.setLocationForDisplay(invoice.getDepart()); + tousseInstanceManager.saveOrUpdate(tousseInstance_开胸包1); + + TousseInstance tousseInstance_开胸包2 = new TousseInstance(); + tousseInstance_开胸包2.setTousseDefinition(td_开胸包); + tousseInstance_开胸包2.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + tousseInstance_开胸包2.setOperationTime(packingTime); + tousseInstance_开胸包2.setTousseName(tousseInstance_开胸包2.getTousseDefinitionName()); + tousseInstance_开胸包2.setStatus(TousseInstance.STATUS_SHIPPED); + tousseInstance_开胸包2.setInvoice_id(invoice.getId()); + tousseInstance_开胸包2.setInvoiceSender(invoice.getSender()); + tousseInstance_开胸包2.setInvoiceSendTime(invoice.getSendTime()); + tousseInstance_开胸包2.setLocation(invoice.getDepartCoding()); + tousseInstance_开胸包2.setLocationForDisplay(invoice.getDepart()); + tousseInstanceManager.saveOrUpdate(tousseInstance_开胸包2); + + TousseInstance tousseInstance_开颅包1 = new TousseInstance(); + tousseInstance_开颅包1.setTousseDefinition(td_开颅包); + tousseInstance_开颅包1.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + tousseInstance_开颅包1.setOperationTime(packingTime); + tousseInstance_开颅包1.setTousseName(tousseInstance_开颅包1.getTousseDefinitionName()); + tousseInstance_开颅包1.setStatus(TousseInstance.STATUS_SHIPPED); + tousseInstance_开颅包1.setInvoice_id(invoice.getId()); + tousseInstance_开颅包1.setInvoiceSender(invoice.getSender()); + tousseInstance_开颅包1.setInvoiceSendTime(invoice.getSendTime()); + tousseInstance_开颅包1.setLocation(invoice.getDepartCoding()); + tousseInstance_开颅包1.setLocationForDisplay(invoice.getDepart()); + tousseInstanceManager.saveOrUpdate(tousseInstance_开颅包1); + + TousseInstance tousseInstance_开颅包2 = new TousseInstance(); + tousseInstance_开颅包2.setTousseDefinition(td_开颅包); + tousseInstance_开颅包2.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + tousseInstance_开颅包2.setOperationTime(packingTime); + tousseInstance_开颅包2.setTousseName(tousseInstance_开颅包2.getTousseDefinitionName()); + tousseInstance_开颅包2.setStatus(TousseInstance.STATUS_SHIPPED); + tousseInstance_开颅包2.setInvoice_id(invoice.getId()); + tousseInstance_开颅包2.setInvoiceSender(invoice.getSender()); + tousseInstance_开颅包2.setInvoiceSendTime(invoice.getSendTime()); + tousseInstance_开颅包2.setLocation(invoice.getDepartCoding()); + tousseInstance_开颅包2.setLocationForDisplay(invoice.getDepart()); + tousseInstanceManager.saveOrUpdate(tousseInstance_开颅包2); + + TousseInstance tousseInstance_开胸包3 = new TousseInstance(); + tousseInstance_开胸包3.setTousseDefinition(td_开胸包); + tousseInstance_开胸包3.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + tousseInstance_开胸包3.setOperationTime(packingTime); + tousseInstance_开胸包3.setTousseName(tousseInstance_开胸包3.getTousseDefinitionName()); + tousseInstance_开胸包3.setStatus(TousseInstance.STATUS_SHIPPED); + tousseInstance_开胸包3.setInvoice_id(invoice.getId()); + tousseInstance_开胸包3.setInvoiceSender(invoice.getSender()); + tousseInstance_开胸包3.setInvoiceSendTime(invoice.getSendTime()); + tousseInstance_开胸包3.setLocation(invoice.getDepartCoding()); + tousseInstance_开胸包3.setLocationForDisplay(invoice.getDepart()); + tousseInstanceManager.saveOrUpdate(tousseInstance_开胸包3); + + TousseInstance tousseInstance_开颅包3 = new TousseInstance(); + tousseInstance_开颅包3.setTousseDefinition(td_开颅包); + tousseInstance_开颅包3.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + tousseInstance_开颅包3.setOperationTime(packingTime); + tousseInstance_开颅包3.setTousseName(tousseInstance_开颅包3.getTousseDefinitionName()); + tousseInstance_开颅包3.setStatus(TousseInstance.STATUS_SHIPPED); + tousseInstance_开颅包3.setInvoice_id(invoice.getId()); + tousseInstance_开颅包3.setInvoiceSender(invoice.getSender()); + tousseInstance_开颅包3.setInvoiceSendTime(invoice.getSendTime()); + tousseInstance_开颅包3.setLocation(invoice.getDepartCoding()); + tousseInstance_开颅包3.setLocationForDisplay(invoice.getDepart()); + tousseInstanceManager.saveOrUpdate(tousseInstance_开颅包3); + + TousseInstance tousseInstance_开颅包4 = new TousseInstance(); + tousseInstance_开颅包4.setTousseDefinition(td_开颅包); + tousseInstance_开颅包4.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + tousseInstance_开颅包4.setOperationTime(packingTime); + tousseInstance_开颅包4.setTousseName(tousseInstance_开颅包4.getTousseDefinitionName()); + tousseInstance_开颅包4.setStatus(TousseInstance.STATUS_SHIPPED); + tousseInstance_开颅包4.setInvoice_id(invoice.getId()); + tousseInstance_开颅包4.setInvoiceSender(invoice.getSender()); + tousseInstance_开颅包4.setInvoiceSendTime(invoice.getSendTime()); + tousseInstance_开颅包4.setLocation(invoice.getDepartCoding()); + tousseInstance_开颅包4.setLocationForDisplay(invoice.getDepart()); + tousseInstanceManager.saveOrUpdate(tousseInstance_开颅包4);*/ + + //不为聚合包且不属于任何聚合包的普通器械包实例 + TousseInstance tousseInstance_开口包1 = new TousseInstance(); + tousseInstance_开口包1.setTousseDefinition(td_开口包); + tousseInstance_开口包1.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + tousseInstance_开口包1.setOperationTime(packingTime); + tousseInstance_开口包1.setTousseName(tousseInstance_开口包1.getTousseDefinitionName()); + tousseInstance_开口包1.setStatus(TousseInstance.STATUS_SHIPPED); + tousseInstance_开口包1.setInvoice_id(invoice.getId()); + tousseInstance_开口包1.setInvoiceSender(invoice.getSender()); + tousseInstance_开口包1.setInvoiceSendTime(invoice.getSendTime()); + tousseInstance_开口包1.setLocation(invoice.getDepartCoding()); + tousseInstance_开口包1.setLocationForDisplay(invoice.getDepart()); + tousseInstanceManager.saveOrUpdate(tousseInstance_开口包1); + + TousseInstance tousseInstance_开口包2 = new TousseInstance(); + tousseInstance_开口包2.setTousseDefinition(td_开口包); + tousseInstance_开口包2.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + tousseInstance_开口包2.setOperationTime(packingTime); + tousseInstance_开口包2.setTousseName(tousseInstance_开口包2.getTousseDefinitionName()); + tousseInstance_开口包2.setStatus(TousseInstance.STATUS_SHIPPED); + tousseInstance_开口包2.setInvoice_id(invoice.getId()); + tousseInstance_开口包2.setInvoiceSender(invoice.getSender()); + tousseInstance_开口包2.setInvoiceSendTime(invoice.getSendTime()); + tousseInstance_开口包2.setLocation(invoice.getDepartCoding()); + tousseInstance_开口包2.setLocationForDisplay(invoice.getDepart()); + tousseInstanceManager.saveOrUpdate(tousseInstance_开口包2); + + TousseInstance tousseInstance_开口包3 = new TousseInstance(); + tousseInstance_开口包3.setTousseDefinition(td_开口包); + tousseInstance_开口包3.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + tousseInstance_开口包3.setOperationTime(packingTime); + tousseInstance_开口包3.setTousseName(tousseInstance_开口包3.getTousseDefinitionName()); + tousseInstance_开口包3.setStatus(TousseInstance.STATUS_SHIPPED); + tousseInstance_开口包3.setInvoice_id(invoice.getId()); + tousseInstance_开口包3.setInvoiceSender(invoice.getSender()); + tousseInstance_开口包3.setInvoiceSendTime(invoice.getSendTime()); + tousseInstance_开口包3.setLocation(invoice.getDepartCoding()); + tousseInstance_开口包3.setLocationForDisplay(invoice.getDepart()); + tousseInstanceManager.saveOrUpdate(tousseInstance_开口包3); + + TousseInstance tousseInstance_穿刺包1 = new TousseInstance(); + tousseInstance_穿刺包1.setTousseDefinition(td_穿刺包); + tousseInstance_穿刺包1.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + tousseInstance_穿刺包1.setOperationTime(packingTime); + tousseInstance_穿刺包1.setTousseName(tousseInstance_穿刺包1.getTousseDefinitionName()); + tousseInstance_穿刺包1.setStatus(TousseInstance.STATUS_SHIPPED); + tousseInstance_穿刺包1.setInvoice_id(invoice.getId()); + tousseInstance_穿刺包1.setInvoiceSender(invoice.getSender()); + tousseInstance_穿刺包1.setInvoiceSendTime(invoice.getSendTime()); + tousseInstance_穿刺包1.setLocation(invoice.getDepartCoding()); + tousseInstance_穿刺包1.setLocationForDisplay(invoice.getDepart()); + tousseInstanceManager.saveOrUpdate(tousseInstance_穿刺包1); + + TousseInstance tousseInstance_穿刺包2 = new TousseInstance(); + tousseInstance_穿刺包2.setTousseDefinition(td_穿刺包); + tousseInstance_穿刺包2.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + tousseInstance_穿刺包2.setOperationTime(packingTime); + tousseInstance_穿刺包2.setTousseName(tousseInstance_穿刺包2.getTousseDefinitionName()); + tousseInstance_穿刺包2.setStatus(TousseInstance.STATUS_SHIPPED); + tousseInstance_穿刺包2.setInvoice_id(invoice.getId()); + tousseInstance_穿刺包2.setInvoiceSender(invoice.getSender()); + tousseInstance_穿刺包2.setInvoiceSendTime(invoice.getSendTime()); + tousseInstance_穿刺包2.setLocation(invoice.getDepartCoding()); + tousseInstance_穿刺包2.setLocationForDisplay(invoice.getDepart()); + tousseInstanceManager.saveOrUpdate(tousseInstance_穿刺包2); + + TousseInstance tousseInstance_穿刺包3 = new TousseInstance(); + tousseInstance_穿刺包3.setTousseDefinition(td_穿刺包); + tousseInstance_穿刺包3.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + tousseInstance_穿刺包3.setOperationTime(packingTime); + tousseInstance_穿刺包3.setTousseName(tousseInstance_穿刺包3.getTousseDefinitionName()); + tousseInstance_穿刺包3.setStatus(TousseInstance.STATUS_SHIPPED); + tousseInstance_穿刺包3.setInvoice_id(invoice.getId()); + tousseInstance_穿刺包3.setInvoiceSender(invoice.getSender()); + tousseInstance_穿刺包3.setInvoiceSendTime(invoice.getSendTime()); + tousseInstance_穿刺包3.setLocation(invoice.getDepartCoding()); + tousseInstance_穿刺包3.setLocationForDisplay(invoice.getDepart()); + tousseInstanceManager.saveOrUpdate(tousseInstance_穿刺包3); + + + //共有包实例11个:td_穿刺包和td_开口包各两个、td_开颅包4个、td_开胸包3个 + /**************普通包发货*******end**************/ + + UseRecord useRecord1 = new UseRecord(); + useRecord1.setApplicationTime(new Date()); + useRecord1.setHospitalNum("aa"); + useRecord1.setDepart(invoice.getDepart()); + useRecord1.setDepartCoding(invoice.getDepartCoding()); + useRecord1.setDoctorName("aaa"); + useRecord1.setEnteringDate(new Date()); + useRecord1.setPatientName("aaaa"); + useRecord1.setPatientAge("aaaaa"); + useRecord1.setPatientIDCard("aaaaaa"); + useRecord1.setOperationRoom("testOperationRoom"); + useRecord1.setStatus(UseRecord.STATUS_UNAUDITED); + useRecord1.setWashHandNurse("张三"); + useRecord1.setCircuitNurse("李四"); + useRecord1.setOperator(AcegiHelper.getLoginUserFullName()); + + List tousseInstanceListForUseRecord1 = new ArrayList(); + tousseInstance_开口包1.setIsUrgentForUseRecord(com.forgon.Constants.STR_YES); + tousseInstanceListForUseRecord1.add(tousseInstance_开口包1); + tousseInstanceListForUseRecord1.add(tousseInstance_穿刺包1); + useRecord1.setTousseInstanceList(tousseInstanceListForUseRecord1); + //新增使用记录一(扫描第一个聚合包条码、tousseInstance_开口包1、tousseInstance_穿刺包1),断言第一个聚合包、开口包1和穿刺包1包的状态及有没有被录入到使用记录一、使用记录的状态是否为未审核 + useRecordManager.saveUseRecord_TRANS_REQUIRED(useRecord1); + + AssertJUnit.assertEquals(TousseInstance.STATUS_USED, tousseInstance_开口包1.getStatus()); + AssertJUnit.assertEquals(TousseInstance.STATUS_USED, tousseInstance_穿刺包1.getStatus()); + AssertJUnit.assertEquals(UseRecord.STATUS_UNAUDITED, useRecord1.getStatus()); + + //因为开口包会转申请单,而穿刺包不会转,所以实际会被转的包实例数量为1 + AssertJUnit.assertEquals(1, useRecord1.getTousseInstanceWillBeConvertedTousseItemList(objectDao).size()); + //总共的包实例数据为2 + AssertJUnit.assertEquals(2, useRecord1.getTousseInstanceList(objectDao).size()); + + //审核使用记录一 + useRecordManager.auditUseRecords_TRANS_REQUIRED(Collections.singletonList(useRecord1.getId())); + AssertJUnit.assertEquals(UseRecord.STATUS_AUDITED, useRecord1.getStatus()); + + //返回为未审核 + useRecordManager.becomeNotAudited(Collections.singletonList(useRecord1.getId())); + AssertJUnit.assertEquals(UseRecord.STATUS_UNAUDITED, useRecord1.getStatus()); + + //再次审核使用记录一 + useRecordManager.auditUseRecords_TRANS_REQUIRED(Collections.singletonList(useRecord1.getId())); + AssertJUnit.assertEquals(UseRecord.STATUS_AUDITED, useRecord1.getStatus()); + + UseRecord useRecord2 = new UseRecord(); + useRecord2.setApplicationTime(new Date()); + useRecord2.setHospitalNum("aa1"); + useRecord2.setDepart(invoice.getDepart()); + useRecord2.setDepartCoding(invoice.getDepartCoding()); + useRecord2.setDoctorName("aaa1"); + useRecord2.setEnteringDate(new Date()); + useRecord2.setPatientName("aaaa1"); + useRecord2.setPatientAge("aaaaa1"); + useRecord2.setPatientIDCard("aaaaaa1"); + useRecord2.setOperationRoom("testOperationRoom"); + useRecord2.setStatus(UseRecord.STATUS_UNAUDITED); + useRecord2.setOperator(AcegiHelper.getLoginUserFullName()); + useRecord2.setWashHandNurse("张三1"); + useRecord2.setCircuitNurse("李四1"); + + List tousseInstanceListForUseRecord2 = new ArrayList(); + tousseInstance_开口包2.setIsUrgentForUseRecord(com.forgon.Constants.STR_YES); + tousseInstanceListForUseRecord2.add(tousseInstance_开口包2); + tousseInstanceListForUseRecord2.add(tousseInstance_穿刺包2); + useRecord2.setTousseInstanceList(tousseInstanceListForUseRecord2); + + useRecordManager.saveUseRecord_TRANS_REQUIRED(useRecord2); + + AssertJUnit.assertEquals(TousseInstance.STATUS_USED, tousseInstance_开口包2.getStatus()); + AssertJUnit.assertEquals(TousseInstance.STATUS_USED, tousseInstance_穿刺包2.getStatus()); + + //因为开口包会转申请单,而穿刺包不会转,所以实际会被转的包实例数量为1 + AssertJUnit.assertEquals(1, useRecord2.getTousseInstanceWillBeConvertedTousseItemList(objectDao).size()); + //总共的包实例数据为2 + AssertJUnit.assertEquals(2, useRecord2.getTousseInstanceList(objectDao).size()); + + //审核使用记录2 + useRecordManager.auditUseRecords_TRANS_REQUIRED(Collections.singletonList(useRecord2.getId())); + AssertJUnit.assertEquals(UseRecord.STATUS_AUDITED, useRecord2.getStatus()); + + UseRecord useRecord3 = new UseRecord(); + useRecord3.setApplicationTime(new Date()); + useRecord3.setHospitalNum("cc"); + useRecord3.setDepart(invoice.getDepart()); + useRecord3.setDepartCoding(invoice.getDepartCoding()); + useRecord3.setDoctorName("ccc"); + useRecord3.setEnteringDate(new Date()); + useRecord3.setPatientName("cccc"); + useRecord3.setPatientAge("ccccc"); + useRecord3.setPatientIDCard("cccccc"); + useRecord3.setOperationRoom("testOperationRoom"); + useRecord3.setStatus(UseRecord.STATUS_UNAUDITED); + useRecord3.setOperator(AcegiHelper.getLoginUserFullName()); + useRecord3.setWashHandNurse("王五"); + useRecord3.setCircuitNurse("赵六"); + + List tousseInstanceListForUseRecord3 = new ArrayList(); + tousseInstanceListForUseRecord3.add(tousseInstance_开口包3); + tousseInstanceListForUseRecord3.add(tousseInstance_穿刺包3); + useRecord3.setTousseInstanceList(tousseInstanceListForUseRecord3); + + useRecordManager.saveUseRecord_TRANS_REQUIRED(useRecord3); + + //审核使用记录3 + useRecordManager.auditUseRecords_TRANS_REQUIRED(Collections.singletonList(useRecord3.getId())); + AssertJUnit.assertEquals(UseRecord.STATUS_AUDITED, useRecord3.getStatus()); + //合并转换申请单 + try { + useRecordManager.multiAuditedUseRecordsMergeConvertRecyclingApplication(Arrays.asList(useRecord1.getId(),useRecord2.getId(),useRecord3.getId()), AcegiHelper.getLoginUserFullName()); + AssertJUnit.assertEquals(UseRecord.STATUS_APPLIED, useRecord1.getStatus()); + AssertJUnit.assertEquals(UseRecord.STATUS_APPLIED, useRecord2.getStatus()); + AssertJUnit.assertEquals(UseRecord.STATUS_APPLIED, useRecord3.getStatus()); + + //断言使用记录转申请单的中间表数量为1 + List list2 = objectDao.findAllObjects(UseRecordToRecycleApplication.class.getSimpleName()); + AssertJUnit.assertNotNull(list2); + AssertJUnit.assertEquals(3, list2.size()); + } catch (Exception e) { + e.printStackTrace(); + Assert.assertEquals(1, 2, "后台报错,测试用例不通过"); + } + + List recyclingApplicationList = objectDao.findAllObjects(RecyclingApplication.class.getSimpleName()); + AssertJUnit.assertNotNull(recyclingApplicationList); + AssertJUnit.assertEquals(1, recyclingApplicationList.size()); + + List useRecordToRecycleApplicationList = objectDao.findAllObjects(UseRecordToRecycleApplication.class.getSimpleName()); + AssertJUnit.assertNotNull(useRecordToRecycleApplicationList); + AssertJUnit.assertEquals(3, useRecordToRecycleApplicationList.size()); + } } Index: ssts-web/src/main/webapp/disinfectsystem/useRecord/useRecordMergeConvert.js =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/useRecord/useRecordMergeConvert.js (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/useRecord/useRecordMergeConvert.js (revision 20256) @@ -0,0 +1,330 @@ +var entityName = "使用记录"; +var grid; + +var windowWidth = 1000; +var windowHeight = 550; + +var mask = null; +function getMask(){ + if(!mask){ + mask = new Ext.LoadMask(Ext.getBody(), { + msg : '正在处理,请稍候...' + }); + } + return mask; +} + +// 生成申请单按钮被点击,选中的单的状态必须是已审核才能转换 +function convertButtonClicked(grid) { + + var records = grid.getSelectionModel().getSelections(); + + if (records.length == 0) { + showResult("请选择要生成申请单的" + entityName + "!"); + return false; + } + var ids = null; + var departMap = new Map(); + for ( var i = 0, len = records.length; i < len; i++) { + if (records[i].data['status'] != '已审核') { + showResult('病人名称为“' + records[i].data['patientName'] + + '”的使用记录不能生成申请单,请确认使用记录已审核且未转化成申请单'); + return false; + } + if (ids == null) { + ids = records[i].data['id']; + } else { + ids = ids + ';' + records[i].data['id']; + } + departMap.put(records[i].data['depart'], records[i].data['depart']); + } + + if (departMap.size() > 1){ + Ext.MessageBox.alert("请确认", "所选择的使用记录的录入科室不一致,不能转换!"); + return false; + } + var operatorStr = grid.getSelectionModel() + .getSelections()[0].data.operator; + var departStr = grid.getSelectionModel() + .getSelections()[0].data.depart; + var departCodingStr = grid.getSelectionModel() + .getSelections()[0].data.departCoding; + + var confirmMessage = "是否确定要将选中的" + entityName + "信息生成申请单?"; + if(sstsConfig.auditAndConvertUseRecordConfirmMessage){ + confirmMessage = "手术是否已完成,不需要追加器械包?"; + } + Ext.MessageBox.confirm("请确认",confirmMessage, + function(button, text) { + if ("yes" == button) { + convertUseRecordToApplication(null, ids, operatorStr, departStr, departCodingStr, null); + } + }); +} + +function convertUseRecordToApplication(button, ids, operatorStr, departStr, departCodingStr, win) { + + if (button != null){ + button.disable(); // 防止重复点击 + } + +// var mask = new Ext.LoadMask(Ext.getBody(), +// {msg:'正在生成申请单,请稍候...'} +// ); + getMask(); + mask.msg = '正在生成申请单,请稍候...'; + mask.show(); + + Ext.Ajax.request({ + url : WWWROOT + + '/disinfectSystem/useRecordAction!createRecyclingApplicationByUseRecords.do', + params : { + ids : ids, + operator : operatorStr, + depart : departStr, + departCoding : departCodingStr, + applicationFormType : sstsConfig.applicationFormType + }, + success : function(response, options) { + mask.hide(); + var result = Ext.decode(response.responseText); + if(result.msg.length!=0){ + showResult(result.msg); + Ext.getCmp("formSubmitResult").setValue(formSubmitResultFail); + }else{ + showResult("申请成功!"); + Ext.getCmp("formSubmitResult").setValue(formSubmitResultSucc); + // 关闭使用记录的窗口,打开单张使用记录进行审核 + if (win != null){ + win.close(); + } + grid.dwrReload(); + } + }, + failure : function(response, options) { + mask.hide(); + Ext.getCmp("formSubmitResult").setValue(formSubmitResultFail); + if (button != null){ + button.enable(); + } + } + }); + +} + + var useRecordSm = new Ext.grid.CheckboxSelectionModel({ + singleSelect : false + }); + + var useRecordCm = new Ext.grid.ColumnModel([ + {header : "病人",width : 70,dataIndex : 'patientName'}, + {header : "状态",width : 50,dataIndex : 'status'}, + {header : "住院号",width : 90,dataIndex : 'hospitalNum'}, + {header : "诊疗号",width : 90,dataIndex : 'treatmentNum'}, + {header : "手术间",hidden:true,width : 90,dataIndex : 'operationRoom'}, + {header : "年龄",width : 40,dataIndex : 'patientAge'}, + {header : "身份证号码",hidden:true,width : 120,dataIndex : 'patientIDCard'}, + {header : "医生",width : 70,dataIndex : 'doctorName'}, + {header : "手术名称",width : 150,dataIndex : 'operation'}, + {header : "录入人",hidden:true,width : 60,dataIndex : 'operator'}, + {header : "录入科室",width : 80,dataIndex : 'depart'}, + {header : "录入时间",width : 120,dataIndex : 'enteringDate',renderer : myDateFormatByMinute}, + {header : "备注",width : 120,dataIndex : 'remark',id : 'autoWidth'}, + {header : "操作",width : 120,renderer : function(v , p, rec , rowIndex){ + return ""; + }} + ]); + + var useRecordStore = new Ext.data.Store({ + reader : new Ext.data.JsonReader({ + fields : [ + {name : 'id'}, + {name : 'treatmentNum'}, + {name : 'hospitalNum'}, + {name : 'patientName'}, + {name : 'operationRoom'}, + {name : 'patientAge'}, + {name : 'patientIDCard'}, + {name : 'doctorName'}, + {name : 'operation'}, + {name : 'depart'}, + {name : 'operator'}, + {name : 'enteringDate'}, + {name : 'status'}, + {name : 'remark'}, + {name : 'departCoding'} + ] + }) + }); + +/** + * 删除表格中的某一行 + * @returns + */ +function removeCurrentItem(){ + var rows = Ext.getCmp('useRecordGridPanel').getSelectionModel().getSelections(); + if (rows) { + for ( var i = 0; i < rows.length; i++) { + useRecordStore.remove(rows[i]); + } + } +} + +/** + * 打开合并转换申请单窗体 + */ +function openUseRecordMergeConvertWin() { + + var useRecordGridPanel = new Ext.grid.GridPanel({ + id : 'useRecordGridPanel', + //title : '', + store : useRecordStore, + cm : useRecordCm, + selModel : useRecordSm, + enableHdMenu : false, + width :423, + height :425, + loadMask : true, + tbar:[ + {text:'扫描条码:',xtype:'label',hidden : SSTS_UseRecord_MergeConvert}, + {id:'scanBarcodeLoadUseRecord',xtype:'textfield',hidden : SSTS_UseRecord_MergeConvert , listeners : { + render : function(c) { + c.getEl().on('keypress', function(e) { + if (e.getKey() == 13) { + getMask(); + mask.show(); + Ext.Ajax.request({ + url : WWWROOT + '/disinfectSystem/useRecordAction!loadUseRecordByTousseInstanceBarcode.do', + params : { + barcode : Ext.getCmp('scanBarcodeLoadUseRecord').getValue() + }, + success : function(response, options) { + mask.hide(); + var result = response.responseText; + if (result) { + var goodsInfo = Ext.util.JSON.decode(result); + if(goodsInfo.success){ + var useRecordData = goodsInfo.data; + //判断该使用记录是否已经存在 + var useRecordAmount = useRecordStore.getCount(); + if(useRecordAmount > 0){ + //判断新加载的使用记录的录入科室是否与已存在的第一条使用记录的录入科室是否一致 + if(useRecordData.departCoding != useRecordStore.getAt(0).get("departCoding")){ + alert("该使用记录的录入科室与已扫描至列表的使用记录的录入科室不一致!"); + Ext.getCmp('scanBarcodeLoadUseRecord').setValue(''); + return false; + } + for(var i = 0;i < useRecordAmount;i++){ + if(useRecordStore.getAt(i).get("id") == useRecordData.id){ + alert("该使用记录已经在列表中,请勿重复扫描!"); + Ext.getCmp('scanBarcodeLoadUseRecord').setValue(''); + return false; + } + } + } + useRecordStore.insert(0 , new Ext.data.Record({ + id : useRecordData.id, + treatmentNum : useRecordData.treatmentNum, + hospitalNum : useRecordData.hospitalNum, + patientName : useRecordData.patientName, + operationRoom : useRecordData.operationRoom, + patientAge : useRecordData.patientAge, + patientIDCard : useRecordData.patientIDCard, + doctorName : useRecordData.doctorName, + operation : useRecordData.operation, + depart : useRecordData.depart, + departCoding : useRecordData.departCoding, + operator : useRecordData.operator, + enteringDate : useRecordData.enteringDate, + status : useRecordData.status, + remark : useRecordData.remark + })); + }else{ + showResult(goodsInfo.message); + Ext.getCmp('scanBarcodeLoadUseRecord').setValue(''); + } + } else { + showResult('找不到该条码的使用记录!'); + } + Ext.getCmp('scanBarcodeLoadUseRecord').setValue(''); + }, + failure : function(response, options) { + mask.hide(); + showResult('加载出错!请稍候再试。'); + Ext.getCmp('scanBarcodeLoadUseRecord').setValue(''); + } + }); + } + }); + } + }} + ], + autoExpand : 'autoWidth', + frame : false, + bodyStyle : 'border:1px solid #afd7af', + viewConfig: { + forceFit:true, + getRowClass : function(record,rowIndex,rowParams,store){ + /*if(record.data.errorAmount < 0){ + return 'my_row_red'; + }else if(record.data.errorAmount > 0){ + return 'my_row_yellow'; + }else{ + return 'my_row_green'; + }*/ + } + } + }); + + var useRecordWin = new Ext.Window( { + id : 'useRecordApplicationWin', + layout : 'fit', + title : '使用记录合并转换申请单', + width : windowWidth, + height : windowHeight, + border : false, + modal : true, + plain : true, + items : [useRecordGridPanel], + buttonAlign : 'center', + buttons : [ + {text:'提交',handler:function(){ + var useRecordAmount = useRecordStore.getCount(); + if(useRecordAmount == 0){ + alert('未找到要转换的使用记录,请先扫描器械包条码'); + return; + } + var useRecordIdArray = []; + for(var i = 0;i < useRecordAmount;i++){ + useRecordIdArray.push(useRecordStore.getAt(i).get("id")); + } + + getMask(); + mask.show(); + Ext.Ajax.request({ + url : WWWROOT + '/disinfectSystem/useRecordAction!multiUseRecordsMergeConvertRecyclingApplication.do', + params : { + useRecordIds : useRecordIdArray.join(";") + }, + success : function(response, options) { + mask.hide(); + showResult('操作成功。'); + useRecordWin.close(); + grid.dwrReload(); + }, + failure : function(response, options) { + mask.hide(); + showResult('后台出错!请稍候再试。'); + } + }); + }}, + {text:'取消',handler:function(){ + useRecordStore.removeAll(); + useRecordWin.close(); + }} + ] + }); + + useRecordWin.show(); + Ext.getCmp('scanBarcodeLoadUseRecord').focus(false , 100); +} \ No newline at end of file Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java =================================================================== diff -u -r20019 -r20256 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java (.../UseRecordManagerImpl.java) (revision 20019) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java (.../UseRecordManagerImpl.java) (revision 20256) @@ -84,6 +84,7 @@ import com.forgon.serialnumber.model.SerialNum; import com.forgon.serialnumber.service.SerialNumManager; import com.forgon.tools.MathTools; +import com.forgon.tools.date.DateTools; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.BasePoManagerImpl; import com.forgon.tools.json.DateJsonValueProcessor; @@ -1420,7 +1421,7 @@ * @param applicant 申请人 * @param depart 科室名称 * @param departCoding 科室编码 - * @param operationRoom + * @param operationRoom 手术间 * @param patientName * @param applicationCreateDate */ @@ -1430,17 +1431,32 @@ boolean isSecondSupplyRoomNeedRecycle,Boolean isDgConvertApplication,Boolean isTousseDgMergeConvert, Map useRecordsMap, String applicant, String depart, String departCoding, String operationRoom,String patientName,Date applicationCreateDate,double dpf,String applicationFormType) { - String hospitalNumber = null; - //通常只有一条使用记录 + String hospitalNumbers = ""; + String treatmentNums = ""; + String patientNames = ""; + //通常只有一条使用记录(也支持多条) List useRecordList = (List) useRecordsMap .get("useRecordList"); //要转换的使用记录对象及id - UseRecord useRecord = null; - Long useRecordId = null; - if(CollectionUtils.isNotEmpty(useRecordList) && useRecordList.size() == 1){ - useRecord = useRecordList.get(0); - hospitalNumber = useRecord.getHospitalNum(); - useRecordId = useRecord.getId(); + UseRecord firstUseRecord = null; + Long firstUseRecordId = null; + if(CollectionUtils.isNotEmpty(useRecordList)){ + firstUseRecord = useRecordList.get(0); + firstUseRecordId = firstUseRecord.getId(); + for (UseRecord tempUseRecord : useRecordList) { + if(StringUtils.isNotBlank(hospitalNumbers)){ + hospitalNumbers += ","; + } + hospitalNumbers += tempUseRecord.getHospitalNum(); + if(StringUtils.isNotBlank(treatmentNums)){ + treatmentNums += ","; + } + treatmentNums += tempUseRecord.getTreatmentNum(); + if(StringUtils.isNotBlank(patientNames)){ + patientNames += ","; + } + patientNames += tempUseRecord.getPatientName(); + } } //使用记录转换后的申请单对象集合(用于器械包录使用记录的丢失/报损数据表的tousseItem字段进行更新赋值) @@ -1451,7 +1467,7 @@ //是否仅统计需要回收的物品数量 boolean tousseAmountOnlyCountNeedRecyclingGoods = CssdUtils.getSystemSetConfigByNameBool("useRecordToRecycAppTousseAmountOfRemarkOnlyCountNeedRecyclingGoods"); //针对当前使用记录生成申请单的备注 - String remark = getRemarkByUseRecordAndProjectConfig(useRecord , + String remark = getRemarkByUseRecordAndProjectConfig(useRecordList , Collections.singletonList(TousseDefinition.PACKAGE_TYPE_INSIDE) , tousseAmountOnlyCountNeedConvertGoods , tousseAmountOnlyCountNeedRecyclingGoods); //器械包map(key为名称,value为数量) @@ -1486,10 +1502,11 @@ //1.查询科室供应室配置该科室的使用记录转换申请是否需要发货 boolean needInvoiceForUseRecordOfDepart = true; - List departOfUseRecordConvertRecyclingApplicationNeedNotInvoice = supplyRoomConfigManager.getSupplyRoomList(SupplyRoomConfig.SUPPLYROOM_TYPE_USERECORD_TO_APPLICATION_NOT_INVOICE); + List departOfUseRecordConvertRecyclingApplicationNeedNotInvoice + = supplyRoomConfigManager.getSupplyRoomList(SupplyRoomConfig.SUPPLYROOM_TYPE_USERECORD_TO_APPLICATION_NOT_INVOICE); if(CollectionUtils.isNotEmpty(departOfUseRecordConvertRecyclingApplicationNeedNotInvoice)){ for (SupplyRoomConfig supplyRoomConfig : departOfUseRecordConvertRecyclingApplicationNeedNotInvoice) { - if(StringUtils.equals(supplyRoomConfig.getOrgUnitCoding(), useRecord.getDepartCoding())){ + if(StringUtils.equals(supplyRoomConfig.getOrgUnitCoding(), departCoding)){ needInvoiceForUseRecordOfDepart = false; break; } @@ -1498,7 +1515,13 @@ //2.查询该使用记录使用的物品(器械包、消毒物品、敷料包)是否有需要发货 boolean includeNeedInvoiceItemsForUseRecord = false; - List tousseInstanceWillBeConvertedTousseItemList = useRecord.getTousseInstanceWillBeConvertedTousseItemList(objectDao); + List tousseInstanceWillBeConvertedTousseItemList = new ArrayList(); + for (UseRecord tempUserRecord : useRecordList) { + List tempList = tempUserRecord.getTousseInstanceWillBeConvertedTousseItemList(objectDao); + if(CollectionUtils.isNotEmpty(tempList)){ + tousseInstanceWillBeConvertedTousseItemList.addAll(tempList); + } + } if(CollectionUtils.isNotEmpty(tousseInstanceWillBeConvertedTousseItemList)){ for (TousseInstance tousseInstance : tousseInstanceWillBeConvertedTousseItemList) { if(StringUtils.equals(tousseInstance.getTousseDefinition().getIsInvoice(), Constants.STR_YES)){ @@ -1523,7 +1546,10 @@ if(InvoicePlan.APPLICATION_FORM_TYPE_SPLIT.equals(applicationFormType)){ invoicePlanTypeAfterTousseConvert = InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM; if(applyTousseMap.size() > 0){ - if(UseRecord.CONVERT_RECYCLINGMANAGER_MERGE_REGULAR_OPERATIONROOM.equals(useRecordConvertRecyclingApplicationMergeRegular) && StringUtils.isNotBlank(useRecord.getOperationRoom())){ + //只有当使用记录的数量为1且使用记录的手术间不为空时才按手术间进行合并 + if(UseRecord.CONVERT_RECYCLINGMANAGER_MERGE_REGULAR_OPERATIONROOM.equals(useRecordConvertRecyclingApplicationMergeRegular) + && useRecordList.size() == 1 + && StringUtils.isNotBlank(operationRoom)){ //如果条件1为不需要发货或条件2中没有要发货的物品,则只查询发货状态为null的物品;否则查询待发货的单 String deliverStatusCondition = needInvoiceForUseRecordOfDepart && includeNeedInvoiceItemsForUseRecord @@ -1532,35 +1558,39 @@ //查询该科室的手术间与当前使用记录的手术单相同的申请单(且未终止、待回收、未发货),也是使用记录转换的申请单 RecyclingApplication recyclingApplication = (RecyclingApplication)objectDao.getBySql_ForUpdate(RecyclingApplication.class.getSimpleName(), - "where 1=1 and useRecord is not null and departCoding='"+ useRecord.getDepartCoding() + "'" - + "and operationRoom='"+ useRecord.getOperationRoom() +"' " + "where 1=1 and useRecord is not null and departCoding='"+ departCoding + "'" + + "and operationRoom='"+ operationRoom +"' " + "and type in ('"+ InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM +"') " + "and (endStatus is null) " + deliverStatusCondition + "and (recyclingStatus='" + InvoicePlan.RECYCLINGSTATUS_AWAITRECYCLE + "')"); if(recyclingApplication == null){ //创建器械包申请单 List recyclingApplicationList = recyclingApplicationManager.createRecyclingApplicationByTousse( - applyTousseMap,new HashMap(), applicant, depart, departCoding, hospitalNumber, remark, + applyTousseMap,new HashMap(), applicant, depart, departCoding, hospitalNumbers, remark, tousseBarcodeMap,applicationCreateDate,operationRoom,dpf,InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM, - applyUrgentTousseMap,useRecordId); + applyUrgentTousseMap,firstUseRecordId); if(CollectionUtils.isNotEmpty(recyclingApplicationList)){ for (RecyclingApplication newRecyclingApplication : recyclingApplicationList) { //2.插入使用记录转换申请单关联中间表 - UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); - useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); - useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); - useRecordConvertRecyclingApplication.setInvoicePlanId(newRecyclingApplication.getId()); - useRecordConvertRecyclingApplication.setUseRecordId(useRecordId); - objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); - - List tousseTransitionPlanItemList = - getTousseTransitionPlanItemListByRecyclingApplication(newRecyclingApplication , false); - //如果预回收项不为空时,保存预回收记录 - if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ - //生成预回收记录 - tousseTransitionPlanManager.save(useRecord, newRecyclingApplication, tousseTransitionPlanItemList , false); + for (UseRecord tempUseRecord : useRecordList) { + UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); + useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); + useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); + useRecordConvertRecyclingApplication.setInvoicePlanId(newRecyclingApplication.getId()); + useRecordConvertRecyclingApplication.setUseRecordId(tempUseRecord.getId()); + objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); } + //只有当使用记录数量为1时,才启用器械交接 + if(useRecordList.size() == 1){ + List tousseTransitionPlanItemList = + getTousseTransitionPlanItemListByRecyclingApplication(newRecyclingApplication , false); + //如果预回收项不为空时,保存预回收记录 + if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ + //生成预回收记录 + tousseTransitionPlanManager.save(firstUseRecord, newRecyclingApplication, tousseTransitionPlanItemList , false); + } + } } //将转换后申请单对象保存至集合中 recyclingApplicationListAfterConvert.addAll(recyclingApplicationList); @@ -1574,51 +1604,56 @@ tousseBarcodes += tousseBarcodesOfUseRecord; recyclingApplication.setTousseBarcodes(tousseBarcodes); - recyclingApplication.setUseRecord(useRecord); + recyclingApplication.setUseRecord(firstUseRecord); //申请人、提交时间及最后修改时间都取最后一条使用记录的信息 recyclingApplication.setApplicant(applicant); recyclingApplication.setApplicationTime(applicationCreateDate); recyclingApplication.setSubmitTime(applicationCreateDate); //住院号叠加 if(StringUtils.isNotBlank(recyclingApplication.getHospitalNumber())){ - if(StringUtils.isNotBlank(useRecord.getHospitalNum())){ - recyclingApplication.setHospitalNumber(recyclingApplication.getHospitalNumber() + "," + useRecord.getHospitalNum()); + if(StringUtils.isNotBlank(hospitalNumbers)){ + recyclingApplication.setHospitalNumber(recyclingApplication.getHospitalNumber() + "," + hospitalNumbers); }else{ recyclingApplication.setHospitalNumber(recyclingApplication.getHospitalNumber()); } }else{ - if(StringUtils.isNotBlank(useRecord.getHospitalNum())){ - recyclingApplication.setHospitalNumber(useRecord.getHospitalNum()); + if(StringUtils.isNotBlank(hospitalNumbers)){ + recyclingApplication.setHospitalNumber(hospitalNumbers); }else{ //原住院号与新使用记录的住院号都为空白时,不用设置 } } - //追加申请项(相同物品的,则数量进行叠加) - List tousseTransitionPlanItemList = - recyclingApplication.appendTousseItemFromUseRecord(objectDao , true); - //2.插入使用记录转换申请单关联中间表 - UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); - useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); - useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); - useRecordConvertRecyclingApplication.setInvoicePlanId(recyclingApplication.getId()); - useRecordConvertRecyclingApplication.setUseRecordId(useRecordId); - objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); + for (UseRecord tempUseRecord : useRecordList) { + UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); + useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); + useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); + useRecordConvertRecyclingApplication.setInvoicePlanId(recyclingApplication.getId()); + useRecordConvertRecyclingApplication.setUseRecordId(tempUseRecord.getId()); + objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); + } //备注重新设置(病人巡回洗手护士需要将来自多条使用记录的数据拼接,手术数量与器械包数量进行重新设值) recyclingApplication.setRemark(getRemarkByRecyclingApplicationAndProjectConfig(recyclingApplication)); objectDao.saveOrUpdate(recyclingApplication); - if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ - List list = new ArrayList(); - for (TousseTransitionPlanItem item : tousseTransitionPlanItemList) { - //构造与生成预回收相关的数据 - list.add(tousseTransitionPlanItemManager.build(item.getTousseItemId(), item.getAmount(), item.getUrgentAmount())); + //只有当使用记录数量为1时,才启用器械交接 + if(useRecordList.size() == 1){ + //追加申请项(相同物品的,则数量进行叠加) + List tousseTransitionPlanItemList = + recyclingApplication.appendTousseItemFromUseRecord(objectDao , true); + + if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ + List list = new ArrayList(); + for (TousseTransitionPlanItem item : tousseTransitionPlanItemList) { + //构造与生成预回收相关的数据 + list.add(tousseTransitionPlanItemManager.build(item.getTousseItemId(), item.getAmount(), item.getUrgentAmount())); + } + //如果预回收项不为空时,保存预回收记录 + if(CollectionUtils.isNotEmpty(list)){ + tousseTransitionPlanManager.save(firstUseRecord, recyclingApplication, list, true); + } } - //如果预回收项不为空时,保存预回收记录 - if(CollectionUtils.isNotEmpty(list)){ - tousseTransitionPlanManager.save(useRecord, recyclingApplication, list, true); - } } //将转换后申请单对象保存至集合中 @@ -1629,26 +1664,31 @@ }else{ //创建器械包申请单 List recyclingApplicationList = recyclingApplicationManager.createRecyclingApplicationByTousse( - applyTousseMap,new HashMap(), applicant, depart, departCoding, hospitalNumber, remark, + applyTousseMap,new HashMap(), applicant, depart, departCoding, hospitalNumbers, remark, tousseBarcodeMap,applicationCreateDate,operationRoom,dpf,InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM, - applyUrgentTousseMap,useRecordId); + applyUrgentTousseMap,firstUseRecordId); if(CollectionUtils.isNotEmpty(recyclingApplicationList)){ for (RecyclingApplication newRecyclingApplication : recyclingApplicationList) { //2.插入使用记录转换申请单关联中间表 - UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); - useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); - useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); - useRecordConvertRecyclingApplication.setInvoicePlanId(newRecyclingApplication.getId()); - useRecordConvertRecyclingApplication.setUseRecordId(useRecordId); - objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); + for (UseRecord tempUseRecord : useRecordList) { + UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); + useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); + useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); + useRecordConvertRecyclingApplication.setInvoicePlanId(newRecyclingApplication.getId()); + useRecordConvertRecyclingApplication.setUseRecordId(tempUseRecord.getId()); + objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); + } - List tousseTransitionPlanItemList = - getTousseTransitionPlanItemListByRecyclingApplication(newRecyclingApplication , false); - //如果预回收项不为空时,保存预回收记录 - if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ - //生成预回收记录 - tousseTransitionPlanManager.save(useRecord, newRecyclingApplication, tousseTransitionPlanItemList , false); + //只有当使用记录数量为1时,才启用器械交接 + if(useRecordList.size() == 1){ + List tousseTransitionPlanItemList = + getTousseTransitionPlanItemListByRecyclingApplication(newRecyclingApplication , false); + //如果预回收项不为空时,保存预回收记录 + if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ + //生成预回收记录 + tousseTransitionPlanManager.save(firstUseRecord, newRecyclingApplication, tousseTransitionPlanItemList , false); + } } } @@ -1662,26 +1702,31 @@ if(isDgConvertApplication && applyDiposableGoodsMap.size() > 0){ //创建一次性物品申请单 List recyclingApplicationList = recyclingApplicationManager.createRecyclingApplicationByTousse( - new HashMap(),applyDiposableGoodsMap, applicant, depart, departCoding, hospitalNumber, remark, + new HashMap(),applyDiposableGoodsMap, applicant, depart, departCoding, hospitalNumbers, remark, tousseBarcodeMap,applicationCreateDate,operationRoom,dpf,InvoicePlan.TYPE_DIPOSABLE_GOODS_APPLICATION_FORM, - applyUrgentTousseMap,useRecordId); + applyUrgentTousseMap,firstUseRecordId); if(CollectionUtils.isNotEmpty(recyclingApplicationList)){ for (RecyclingApplication newRecyclingApplication : recyclingApplicationList) { //2.插入使用记录转换申请单关联中间表 - UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); - useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); - useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); - useRecordConvertRecyclingApplication.setInvoicePlanId(newRecyclingApplication.getId()); - useRecordConvertRecyclingApplication.setUseRecordId(useRecordId); - objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); + for (UseRecord tempUseRecord : useRecordList) { + UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); + useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); + useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); + useRecordConvertRecyclingApplication.setInvoicePlanId(newRecyclingApplication.getId()); + useRecordConvertRecyclingApplication.setUseRecordId(tempUseRecord.getId()); + objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); + } } } } //如果不分单(即通用申请单),且一次性物品是否转换申请单为是,并且器械包一次性物品转换成申请单是否合并成一张单为否时 }else if(isDgConvertApplication && !isTousseDgMergeConvert){ if(applyTousseMap.size() > 0){ - if(UseRecord.CONVERT_RECYCLINGMANAGER_MERGE_REGULAR_OPERATIONROOM.equals(useRecordConvertRecyclingApplicationMergeRegular)){ + //只有当使用记录的数量为1且使用记录的手术间不为空时才按手术间进行合并 + if(UseRecord.CONVERT_RECYCLINGMANAGER_MERGE_REGULAR_OPERATIONROOM.equals(useRecordConvertRecyclingApplicationMergeRegular) + && useRecordList.size() == 1 + && StringUtils.isNotBlank(operationRoom)){ //查询该科室的手术间与当前使用记录的手术单相同的申请单 //如果条件1为不需要发货或条件2中没有要发货的物品,则只查询发货状态为null的物品;否则查询待发货的单 String deliverStatusCondition = needInvoiceForUseRecordOfDepart && includeNeedInvoiceItemsForUseRecord @@ -1690,34 +1735,39 @@ //查询该科室的手术间与当前使用记录的手术单相同的申请单(且未终止、待回收、未发货),也是使用记录转换的申请单 RecyclingApplication recyclingApplication = (RecyclingApplication)objectDao.getBySql_ForUpdate(RecyclingApplication.class.getSimpleName(), - "where 1=1 and useRecord is not null and departCoding='"+ useRecord.getDepartCoding() + "'" - + "and operationRoom='"+ useRecord.getOperationRoom() +"' " + "where 1=1 and useRecord is not null and departCoding='"+ departCoding + "'" + + "and operationRoom='"+ operationRoom +"' " + "and type in ('"+ InvoicePlan.TYPE_COMBO_FORM +"') " + "and (endStatus is null) " + deliverStatusCondition + "and (recyclingStatus='" + InvoicePlan.RECYCLINGSTATUS_AWAITRECYCLE + "')"); if(recyclingApplication == null){ //创建器械包申请单 List recyclingApplicationList = recyclingApplicationManager.createRecyclingApplicationByTousse( - applyTousseMap,new HashMap(), applicant, depart, departCoding, hospitalNumber, remark, + applyTousseMap,new HashMap(), applicant, depart, departCoding, hospitalNumbers, remark, tousseBarcodeMap,applicationCreateDate,operationRoom,dpf,InvoicePlan.TYPE_COMBO_FORM, - applyUrgentTousseMap,useRecordId); + applyUrgentTousseMap,firstUseRecordId); if(CollectionUtils.isNotEmpty(recyclingApplicationList)){ for (RecyclingApplication newRecyclingApplication : recyclingApplicationList) { //2.插入使用记录转换申请单关联中间表 - UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); - useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); - useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); - useRecordConvertRecyclingApplication.setInvoicePlanId(newRecyclingApplication.getId()); - useRecordConvertRecyclingApplication.setUseRecordId(useRecordId); - objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); + for (UseRecord tempUseRecord : useRecordList) { + UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); + useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); + useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); + useRecordConvertRecyclingApplication.setInvoicePlanId(newRecyclingApplication.getId()); + useRecordConvertRecyclingApplication.setUseRecordId(tempUseRecord.getId()); + objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); + } - List tousseTransitionPlanItemList = - getTousseTransitionPlanItemListByRecyclingApplication(newRecyclingApplication , false); - //如果预回收项不为空时,保存预回收记录 - if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ - //生成预回收记录 - tousseTransitionPlanManager.save(useRecord, newRecyclingApplication, tousseTransitionPlanItemList , false); + //只有当使用记录数量为1时,才启用器械交接 + if(useRecordList.size() == 1){ + List tousseTransitionPlanItemList = + getTousseTransitionPlanItemListByRecyclingApplication(newRecyclingApplication , false); + //如果预回收项不为空时,保存预回收记录 + if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ + //生成预回收记录 + tousseTransitionPlanManager.save(firstUseRecord, newRecyclingApplication, tousseTransitionPlanItemList , false); + } } } @@ -1732,52 +1782,57 @@ } tousseBarcodes += tousseBarcodesOfUseRecord; recyclingApplication.setTousseBarcodes(tousseBarcodes); - recyclingApplication.setUseRecord(useRecord); + recyclingApplication.setUseRecord(firstUseRecord); //申请人、提交时间及最后修改时间都取最后一条使用记录的信息 recyclingApplication.setApplicant(applicant); recyclingApplication.setApplicationTime(applicationCreateDate); recyclingApplication.setSubmitTime(applicationCreateDate); //住院号叠加 if(StringUtils.isNotBlank(recyclingApplication.getHospitalNumber())){ - if(StringUtils.isNotBlank(useRecord.getHospitalNum())){ - recyclingApplication.setHospitalNumber(recyclingApplication.getHospitalNumber() + "," + useRecord.getHospitalNum()); + if(StringUtils.isNotBlank(hospitalNumbers)){ + recyclingApplication.setHospitalNumber(recyclingApplication.getHospitalNumber() + "," + hospitalNumbers); }else{ recyclingApplication.setHospitalNumber(recyclingApplication.getHospitalNumber()); } }else{ - if(StringUtils.isNotBlank(useRecord.getHospitalNum())){ - recyclingApplication.setHospitalNumber(useRecord.getHospitalNum()); + if(StringUtils.isNotBlank(hospitalNumbers)){ + recyclingApplication.setHospitalNumber(hospitalNumbers); }else{ //原住院号与新使用记录的住院号都为空白时,不用设置 } } - //追加申请项(相同物品的,则数量进行叠加) - List tousseTransitionPlanItemList = - recyclingApplication.appendTousseItemFromUseRecord(objectDao , true); - //2.插入使用记录转换申请单关联中间表 - UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); - useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); - useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); - useRecordConvertRecyclingApplication.setInvoicePlanId(recyclingApplication.getId()); - useRecordConvertRecyclingApplication.setUseRecordId(useRecordId); - objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); + for (UseRecord tempUseRecord : useRecordList) { + UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); + useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); + useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); + useRecordConvertRecyclingApplication.setInvoicePlanId(recyclingApplication.getId()); + useRecordConvertRecyclingApplication.setUseRecordId(tempUseRecord.getId()); + objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); + } //备注重新设置(病人巡回洗手护士需要将来自多条使用记录的数据拼接,手术数量与器械包数量进行重新设值) recyclingApplication.setRemark(getRemarkByRecyclingApplicationAndProjectConfig(recyclingApplication)); objectDao.saveOrUpdate(recyclingApplication); - if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ - List list = new ArrayList(); - for (TousseTransitionPlanItem item : tousseTransitionPlanItemList) { - //构造与生成预回收相关的数据 - list.add(tousseTransitionPlanItemManager.build(item.getTousseItemId(), item.getAmount(), item.getUrgentAmount())); + //只有当使用记录数量为1时,才启用器械交接 + if(useRecordList.size() == 1){ + //追加申请项(相同物品的,则数量进行叠加) + List tousseTransitionPlanItemList = + recyclingApplication.appendTousseItemFromUseRecord(objectDao , true); + + if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ + List list = new ArrayList(); + for (TousseTransitionPlanItem item : tousseTransitionPlanItemList) { + //构造与生成预回收相关的数据 + list.add(tousseTransitionPlanItemManager.build(item.getTousseItemId(), item.getAmount(), item.getUrgentAmount())); + } + //如果预回收项不为空时,保存预回收记录 + if(CollectionUtils.isNotEmpty(list)){ + tousseTransitionPlanManager.save(firstUseRecord, recyclingApplication, list, true); + } } - //如果预回收项不为空时,保存预回收记录 - if(CollectionUtils.isNotEmpty(list)){ - tousseTransitionPlanManager.save(useRecord, recyclingApplication, list, true); - } } //将转换后申请单对象保存至集合中 @@ -1787,26 +1842,31 @@ //待完善 }else{ List recyclingApplicationList = recyclingApplicationManager.createRecyclingApplicationByTousse( - applyTousseMap,new HashMap(), applicant, depart, departCoding, hospitalNumber, remark, + applyTousseMap,new HashMap(), applicant, depart, departCoding, hospitalNumbers, remark, tousseBarcodeMap,applicationCreateDate,operationRoom,dpf,InvoicePlan.TYPE_COMBO_FORM, - applyUrgentTousseMap,useRecordId); + applyUrgentTousseMap,firstUseRecordId); if(CollectionUtils.isNotEmpty(recyclingApplicationList)){ for (RecyclingApplication newRecyclingApplication : recyclingApplicationList) { //2.插入使用记录转换申请单关联中间表 - UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); - useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); - useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); - useRecordConvertRecyclingApplication.setInvoicePlanId(newRecyclingApplication.getId()); - useRecordConvertRecyclingApplication.setUseRecordId(useRecordId); - objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); + for (UseRecord tempUseRecord : useRecordList) { + UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); + useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); + useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); + useRecordConvertRecyclingApplication.setInvoicePlanId(newRecyclingApplication.getId()); + useRecordConvertRecyclingApplication.setUseRecordId(tempUseRecord.getId()); + objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); + } - List tousseTransitionPlanItemList = - getTousseTransitionPlanItemListByRecyclingApplication(newRecyclingApplication , false); - //如果预回收项不为空时,保存预回收记录 - if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ - //生成预回收记录 - tousseTransitionPlanManager.save(useRecord, newRecyclingApplication, tousseTransitionPlanItemList , false); + //只有当使用记录数量为1时,才启用器械交接 + if(useRecordList.size() == 1){ + List tousseTransitionPlanItemList = + getTousseTransitionPlanItemListByRecyclingApplication(newRecyclingApplication , false); + //如果预回收项不为空时,保存预回收记录 + if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ + //生成预回收记录 + tousseTransitionPlanManager.save(firstUseRecord, newRecyclingApplication, tousseTransitionPlanItemList , false); + } } } @@ -1819,19 +1879,21 @@ //单独一次性物品的单合并暂先不考虑,都重新创建新的单 if(applyDiposableGoodsMap.size() > 0){ List recyclingApplicationList = recyclingApplicationManager.createRecyclingApplicationByTousse( - new HashMap(),applyDiposableGoodsMap, applicant, depart, departCoding, hospitalNumber, remark, + new HashMap(),applyDiposableGoodsMap, applicant, depart, departCoding, hospitalNumbers, remark, tousseBarcodeMap,applicationCreateDate,operationRoom,dpf,InvoicePlan.TYPE_COMBO_FORM, - applyUrgentTousseMap,useRecordId); + applyUrgentTousseMap,firstUseRecordId); if(CollectionUtils.isNotEmpty(recyclingApplicationList)){ for (RecyclingApplication newRecyclingApplication : recyclingApplicationList) { //2.插入使用记录转换申请单关联中间表 - UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); - useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); - useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); - useRecordConvertRecyclingApplication.setInvoicePlanId(newRecyclingApplication.getId()); - useRecordConvertRecyclingApplication.setUseRecordId(useRecordId); - objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); + for (UseRecord tempUseRecord : useRecordList) { + UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); + useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); + useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); + useRecordConvertRecyclingApplication.setInvoicePlanId(newRecyclingApplication.getId()); + useRecordConvertRecyclingApplication.setUseRecordId(tempUseRecord.getId()); + objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); + } } } } @@ -1840,7 +1902,10 @@ if(!isDgConvertApplication){ applyDiposableGoodsMap = new HashMap(); } - if(UseRecord.CONVERT_RECYCLINGMANAGER_MERGE_REGULAR_OPERATIONROOM.equals(useRecordConvertRecyclingApplicationMergeRegular)){ + //只有当使用记录的数量为1且使用记录的手术间不为空时才按手术间进行合并 + if(UseRecord.CONVERT_RECYCLINGMANAGER_MERGE_REGULAR_OPERATIONROOM.equals(useRecordConvertRecyclingApplicationMergeRegular) + && useRecordList.size() == 1 + && StringUtils.isNotBlank(operationRoom)){ //查询该科室的手术间与当前使用记录的手术单相同的申请单(且还未回收) //如果条件1为不需要发货或条件2中没有要发货的物品,则只查询发货状态为null的物品;否则查询待发货的单 String deliverStatusCondition = needInvoiceForUseRecordOfDepart && includeNeedInvoiceItemsForUseRecord @@ -1849,34 +1914,39 @@ //查询该科室的手术间与当前使用记录的手术单相同的申请单(且未终止、待回收、未发货),也是使用记录转换的申请单 RecyclingApplication recyclingApplication = (RecyclingApplication)objectDao.getBySql_ForUpdate(RecyclingApplication.class.getSimpleName(), - "where 1=1 and useRecord is not null and departCoding='"+ useRecord.getDepartCoding() + "'" - + "and operationRoom='"+ useRecord.getOperationRoom() +"' " + "where 1=1 and useRecord is not null and departCoding='"+ departCoding + "'" + + "and operationRoom='"+ operationRoom +"' " + "and type in ('"+ InvoicePlan.TYPE_COMBO_FORM +"') " + "and (endStatus is null) " + deliverStatusCondition + "and (recyclingStatus='" + InvoicePlan.RECYCLINGSTATUS_AWAITRECYCLE + "')"); if(recyclingApplication == null){ //创建器械包申请单 List recyclingApplicationList = recyclingApplicationManager.createRecyclingApplicationByTousse( - applyTousseMap,new HashMap(), applicant, depart, departCoding, hospitalNumber, remark, + applyTousseMap,new HashMap(), applicant, depart, departCoding, hospitalNumbers, remark, tousseBarcodeMap,applicationCreateDate,operationRoom,dpf,InvoicePlan.TYPE_COMBO_FORM, - applyUrgentTousseMap,useRecordId); + applyUrgentTousseMap,firstUseRecordId); if(CollectionUtils.isNotEmpty(recyclingApplicationList)){ for (RecyclingApplication newRecyclingApplication : recyclingApplicationList) { //2.插入使用记录转换申请单关联中间表 - UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); - useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); - useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); - useRecordConvertRecyclingApplication.setInvoicePlanId(newRecyclingApplication.getId()); - useRecordConvertRecyclingApplication.setUseRecordId(useRecordId); - objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); + for (UseRecord tempUseRecord : useRecordList) { + UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); + useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); + useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); + useRecordConvertRecyclingApplication.setInvoicePlanId(newRecyclingApplication.getId()); + useRecordConvertRecyclingApplication.setUseRecordId(tempUseRecord.getId()); + objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); + } - List tousseTransitionPlanItemList = - getTousseTransitionPlanItemListByRecyclingApplication(newRecyclingApplication , false); - //如果预回收项不为空时,保存预回收记录 - if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ - //生成预回收记录 - tousseTransitionPlanManager.save(useRecord, newRecyclingApplication, tousseTransitionPlanItemList , false); + //只有当使用记录数量为1时,才启用器械交接 + if(useRecordList.size() == 1){ + List tousseTransitionPlanItemList = + getTousseTransitionPlanItemListByRecyclingApplication(newRecyclingApplication , false); + //如果预回收项不为空时,保存预回收记录 + if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ + //生成预回收记录 + tousseTransitionPlanManager.save(firstUseRecord, newRecyclingApplication, tousseTransitionPlanItemList , false); + } } } @@ -1891,51 +1961,56 @@ } tousseBarcodes += tousseBarcodesOfUseRecord; recyclingApplication.setTousseBarcodes(tousseBarcodes); - recyclingApplication.setUseRecord(useRecord); + recyclingApplication.setUseRecord(firstUseRecord); //申请人、提交时间及最后修改时间都取最后一条使用记录的信息 recyclingApplication.setApplicant(applicant); recyclingApplication.setApplicationTime(applicationCreateDate); recyclingApplication.setSubmitTime(applicationCreateDate); //住院号叠加 if(StringUtils.isNotBlank(recyclingApplication.getHospitalNumber())){ - if(StringUtils.isNotBlank(useRecord.getHospitalNum())){ - recyclingApplication.setHospitalNumber(recyclingApplication.getHospitalNumber() + "," + useRecord.getHospitalNum()); + if(StringUtils.isNotBlank(hospitalNumbers)){ + recyclingApplication.setHospitalNumber(recyclingApplication.getHospitalNumber() + "," + hospitalNumbers); }else{ recyclingApplication.setHospitalNumber(recyclingApplication.getHospitalNumber()); } }else{ - if(StringUtils.isNotBlank(useRecord.getHospitalNum())){ - recyclingApplication.setHospitalNumber(useRecord.getHospitalNum()); + if(StringUtils.isNotBlank(hospitalNumbers)){ + recyclingApplication.setHospitalNumber(hospitalNumbers); }else{ //原住院号与新使用记录的住院号都为空白时,不用设置 } } - //追加申请项(相同物品的,则数量进行叠加) - List tousseTransitionPlanItemList = - recyclingApplication.appendTousseItemFromUseRecord(objectDao , true); - //2.插入使用记录转换申请单关联中间表 - UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); - useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); - useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); - useRecordConvertRecyclingApplication.setInvoicePlanId(recyclingApplication.getId()); - useRecordConvertRecyclingApplication.setUseRecordId(useRecordId); - objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); + for (UseRecord tempUseRecord : useRecordList) { + UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); + useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); + useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); + useRecordConvertRecyclingApplication.setInvoicePlanId(recyclingApplication.getId()); + useRecordConvertRecyclingApplication.setUseRecordId(tempUseRecord.getId()); + objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); + } //备注重新设置(病人巡回洗手护士需要将来自多条使用记录的数据拼接,手术数量与器械包数量进行重新设值) recyclingApplication.setRemark(getRemarkByRecyclingApplicationAndProjectConfig(recyclingApplication)); objectDao.saveOrUpdate(recyclingApplication); - if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ - List list = new ArrayList(); - for (TousseTransitionPlanItem item : tousseTransitionPlanItemList) { - //构造与生成预回收相关的数据 - list.add(tousseTransitionPlanItemManager.build(item.getTousseItemId(), item.getAmount(), item.getUrgentAmount())); + //只有当使用记录数量为1时,才启用器械交接 + if(useRecordList.size() == 1){ + //追加申请项(相同物品的,则数量进行叠加) + List tousseTransitionPlanItemList = + recyclingApplication.appendTousseItemFromUseRecord(objectDao , true); + + if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ + List list = new ArrayList(); + for (TousseTransitionPlanItem item : tousseTransitionPlanItemList) { + //构造与生成预回收相关的数据 + list.add(tousseTransitionPlanItemManager.build(item.getTousseItemId(), item.getAmount(), item.getUrgentAmount())); + } + //如果预回收项不为空时,保存预回收记录 + if(CollectionUtils.isNotEmpty(list)){ + tousseTransitionPlanManager.save(firstUseRecord, recyclingApplication, list, true); + } } - //如果预回收项不为空时,保存预回收记录 - if(CollectionUtils.isNotEmpty(list)){ - tousseTransitionPlanManager.save(useRecord, recyclingApplication, list, true); - } } //将转换后申请单对象保存至集合中 @@ -1946,26 +2021,31 @@ }else{ //一次性物品和器械包合并转换 List recyclingApplicationList = recyclingApplicationManager.createRecyclingApplicationByTousse( - applyTousseMap,applyDiposableGoodsMap, applicant, depart, departCoding, hospitalNumber, remark, + applyTousseMap,applyDiposableGoodsMap, applicant, depart, departCoding, hospitalNumbers, remark, tousseBarcodeMap,applicationCreateDate,operationRoom,dpf,InvoicePlan.TYPE_COMBO_FORM, - applyUrgentTousseMap,useRecordId); + applyUrgentTousseMap,firstUseRecordId); if(CollectionUtils.isNotEmpty(recyclingApplicationList)){ for (RecyclingApplication newRecyclingApplication : recyclingApplicationList) { //2.插入使用记录转换申请单关联中间表 - UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); - useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); - useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); - useRecordConvertRecyclingApplication.setInvoicePlanId(newRecyclingApplication.getId()); - useRecordConvertRecyclingApplication.setUseRecordId(useRecordId); - objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); + for (UseRecord tempUseRecord : useRecordList) { + UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); + useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); + useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); + useRecordConvertRecyclingApplication.setInvoicePlanId(newRecyclingApplication.getId()); + useRecordConvertRecyclingApplication.setUseRecordId(tempUseRecord.getId()); + objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); + } - List tousseTransitionPlanItemList = - getTousseTransitionPlanItemListByRecyclingApplication(newRecyclingApplication , false); - //如果预回收项不为空时,保存预回收记录 - if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ - //生成预回收记录 - tousseTransitionPlanManager.save(useRecord, newRecyclingApplication, tousseTransitionPlanItemList , false); + //只有当使用记录数量为1时,才启用器械交接 + if(useRecordList.size() == 1){ + List tousseTransitionPlanItemList = + getTousseTransitionPlanItemListByRecyclingApplication(newRecyclingApplication , false); + //如果预回收项不为空时,保存预回收记录 + if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ + //生成预回收记录 + tousseTransitionPlanManager.save(firstUseRecord, newRecyclingApplication, tousseTransitionPlanItemList , false); + } } } @@ -2116,10 +2196,10 @@ recyclingApplication.setDepartCoding(departCoding); recyclingApplication.setHandleDepart(supplyRoomConfig.getDptNameOfForeignTousse()); recyclingApplication.setHandleDepartCoding(supplyRoomConfig.getDptCodeOfForeignTousse()); - recyclingApplication.setHospitalNumber(hospitalNumber); + recyclingApplication.setHospitalNumber(hospitalNumbers); recyclingApplication.setOperationRoom(operationRoom); recyclingApplication.setOrderByFiled(InvoicePlan.ORDERBYFIELD_ONE); - recyclingApplication.setPatientName(patientName); + recyclingApplication.setPatientName(patientNames); recyclingApplication.setRecyclingStatus(InvoicePlan.RECYCLINGSTATUS_AWAITRECYCLE); recyclingApplication.setRemark(remark); recyclingApplication.setSequence(supplyRoomConfigManager @@ -2130,8 +2210,8 @@ recyclingApplication.setSettleAccountsDepartCoding(departCoding); recyclingApplication.setSubmitTime(recyclingApplication.getApplicationTime()); recyclingApplication.setTousseBarcodes(tousseBarcodesOfUseRecord); - recyclingApplication.setTreatmentNum(useRecord.getTreatmentNum()); - recyclingApplication.setUseRecord(useRecord); + recyclingApplication.setTreatmentNum(treatmentNums); + recyclingApplication.setUseRecord(firstUseRecord); recyclingApplication.setPrinted(InvoicePlan.PRINT_STATUS_UNPRINT); recyclingApplicationManager.saveOrUpdate(recyclingApplication); @@ -2288,32 +2368,34 @@ depart, departCoding, remark,operationRoom,patientName,applicationCreateDate);*/ } - remark = getRemarkByUseRecordAndProjectConfig(useRecord , + remark = getRemarkByUseRecordAndProjectConfig(useRecordList , Collections.singletonList(TousseDefinition.PACKAGE_TYPE_CUSTOM) , tousseAmountOnlyCountNeedConvertGoods , tousseAmountOnlyCountNeedRecyclingGoods); //自定义器械包生成申请单 List list = recyclingApplicationManager.createRecyclingApplicationByCustomTousse( applyCustomTousseMap, applicant, depart, departCoding, - remark,applicationCreateDate,applyUrgentCustomTousseMap,useRecordId); + remark,applicationCreateDate,applyUrgentCustomTousseMap,firstUseRecordId); if(CollectionUtils.isNotEmpty(list)){ - for (RecyclingApplication recyclingApplication : list) { - - List tousseTransitionPlanItemList = - getTousseTransitionPlanItemListByRecyclingApplication(recyclingApplication , false) ; - //如果预回收项不为空时,保存预回收记录 - if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ - //生成预回收记录 - tousseTransitionPlanManager.save(useRecord, recyclingApplication,tousseTransitionPlanItemList , false); + //只有当使用记录数量为1时,才启用器械交接 + if(useRecordList.size() == 1){ + for (RecyclingApplication recyclingApplication : list) { + + List tousseTransitionPlanItemList = + getTousseTransitionPlanItemListByRecyclingApplication(recyclingApplication , false) ; + //如果预回收项不为空时,保存预回收记录 + if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ + //生成预回收记录 + tousseTransitionPlanManager.save(firstUseRecord, recyclingApplication,tousseTransitionPlanItemList , false); + } } } - //将转换后申请单对象保存至集合中 recyclingApplicationListAfterConvert.addAll(list); } //使用记录转换申请单后对器械包实例更新tousseItemId字段值 - updateTousseItemIdForTousseInstanceOfUseRecordAfterConvert(useRecord , recyclingApplicationListAfterConvert); + updateTousseItemIdForTousseInstanceOfUseRecordAfterConvert(useRecordList , recyclingApplicationListAfterConvert); } /** @@ -2322,9 +2404,18 @@ * @param useRecord * @param recyclingApplicationList */ - private void updateTousseItemIdForTousseInstanceOfUseRecordAfterConvert(UseRecord useRecord , List recyclingApplicationList){ + private void updateTousseItemIdForTousseInstanceOfUseRecordAfterConvert(List useRecordList , List recyclingApplicationList){ //查询所有将会被转换至申请单的器械包实例 - List tousseList = useRecord.getTousseInstanceWillBeConvertedTousseItemList(objectDao); + List tousseList = null; + if(CollectionUtils.isNotEmpty(useRecordList)){ + tousseList = new ArrayList(); + for (UseRecord useRecord : useRecordList) { + List convertedTousseList = useRecord.getTousseInstanceWillBeConvertedTousseItemList(objectDao); + if(CollectionUtils.isNotEmpty(convertedTousseList)){ + tousseList.addAll(convertedTousseList); + } + } + } if(CollectionUtils.isNotEmpty(tousseList) && CollectionUtils.isNotEmpty(recyclingApplicationList)){ for (TousseInstance tousseInstance : tousseList) { TousseDefinition td = tousseInstance.getTousseDefinition(); @@ -2372,60 +2463,103 @@ * 2.中山眼科:巡回护士:[护士名字];病人:[病人名字] * 3.其它项目:洗手护士:[护士名字];巡回护士:[护士名字];病人:[病人名字] * 通常一条使用记录也只有一个巡回护士、一个洗手护士、一个病人名称 - * @param useRecord + * @param useRecordList * @param includeTousseTypeList 包含的器械包类型(统计备注中的器械包数量用) * @param onlyCountNeedConvertGoods 是否仅统计需要转换的物品数量(用于备注中的统计器械包数量用) * @param onlyCountNeedRecyclingGoods 是否仅统计需要回收的物品数量(用于备注中的统计器械包数量用) * @return */ - private String getRemarkByUseRecordAndProjectConfig(UseRecord useRecord , List includeTousseTypeList , + private String getRemarkByUseRecordAndProjectConfig(List useRecordList , List includeTousseTypeList , boolean onlyCountNeedConvertGoods , boolean onlyCountNeedRecyclingGoods){ String useRecordConvertRecyclingApplicationRemark = CssdUtils.getSystemSetConfigByName("useRecordConvertRecyclingApplicationRemark"); + String circuitNurseRemark = null; + String patientNameRemark = null; + String hospitalNumber = null; + String originalUseRecordRemark = null; + + int tousseAmount = 0; if(StringUtils.isNotBlank(useRecordConvertRecyclingApplicationRemark)){ //目前的变量有以下:@circuitNurseLabelName @circuitNurse @patientName @useRecordRemark @hospitalNumber @operationAmount @tousseAmount - if(StringUtils.isNotBlank(getCircuitNurseLabelName())){ - useRecordConvertRecyclingApplicationRemark = useRecordConvertRecyclingApplicationRemark.replace("@circuitNurseLabelName", getCircuitNurseLabelName()); - }else{ - useRecordConvertRecyclingApplicationRemark = useRecordConvertRecyclingApplicationRemark.replace("@circuitNurseLabelName", ""); + useRecordConvertRecyclingApplicationRemark = useRecordConvertRecyclingApplicationRemark.replace("@circuitNurseLabelName", getCircuitNurseLabelName()); + for (UseRecord useRecord : useRecordList) { + if(StringUtils.isNotBlank(useRecord.getCircuitNurse())){ + if(circuitNurseRemark == null){ + circuitNurseRemark = useRecord.getCircuitNurse(); + }else{ + circuitNurseRemark += useRecord.getCircuitNurse() + " "; + } + } + if(StringUtils.isNotBlank(useRecord.getPatientName())){ + if(patientNameRemark == null){ + patientNameRemark = useRecord.getPatientName(); + }else{ + patientNameRemark += useRecord.getPatientName() + " "; + } + } + if(StringUtils.isNotBlank(useRecord.getRemark())){ + if(originalUseRecordRemark == null){ + originalUseRecordRemark = useRecord.getRemark(); + }else{ + originalUseRecordRemark += useRecord.getRemark() + " "; + } + } + if(StringUtils.isNotBlank(useRecord.getHospitalNum())){ + if(hospitalNumber == null){ + hospitalNumber = useRecord.getHospitalNum(); + }else{ + hospitalNumber += useRecord.getHospitalNum() + " "; + } + } + tousseAmount += useRecord.countTousseAmount(objectDao, includeTousseTypeList, onlyCountNeedConvertGoods, onlyCountNeedRecyclingGoods); } - if(StringUtils.isNotBlank(useRecord.getCircuitNurse())){ - useRecordConvertRecyclingApplicationRemark = useRecordConvertRecyclingApplicationRemark.replace("@circuitNurse", useRecord.getCircuitNurse()); - }else{ - useRecordConvertRecyclingApplicationRemark = useRecordConvertRecyclingApplicationRemark.replace("@circuitNurse", ""); - } - if(StringUtils.isNotBlank(useRecord.getPatientName())){ - useRecordConvertRecyclingApplicationRemark = useRecordConvertRecyclingApplicationRemark.replace("@patientName", useRecord.getPatientName()); - }else{ - useRecordConvertRecyclingApplicationRemark = useRecordConvertRecyclingApplicationRemark.replace("@patientName", ""); - } - if(StringUtils.isNotBlank(useRecord.getRemark())){ - useRecordConvertRecyclingApplicationRemark = useRecordConvertRecyclingApplicationRemark.replace("@useRecordRemark", useRecord.getRemark()); - }else{ - useRecordConvertRecyclingApplicationRemark = useRecordConvertRecyclingApplicationRemark.replace("@useRecordRemark", ""); - } - if(StringUtils.isNotBlank(useRecord.getHospitalNum())){ - useRecordConvertRecyclingApplicationRemark = useRecordConvertRecyclingApplicationRemark.replace("@hospitalNumber", useRecord.getHospitalNum()); - }else{ - useRecordConvertRecyclingApplicationRemark = useRecordConvertRecyclingApplicationRemark.replace("@hospitalNumber", ""); - } + useRecordConvertRecyclingApplicationRemark = useRecordConvertRecyclingApplicationRemark.replace("@circuitNurse", circuitNurseRemark == null ? "" : circuitNurseRemark); + useRecordConvertRecyclingApplicationRemark = useRecordConvertRecyclingApplicationRemark.replace("@patientName", patientNameRemark == null ? "" : patientNameRemark); + useRecordConvertRecyclingApplicationRemark = useRecordConvertRecyclingApplicationRemark.replace("@useRecordRemark", originalUseRecordRemark == null ? "" : originalUseRecordRemark); + useRecordConvertRecyclingApplicationRemark = useRecordConvertRecyclingApplicationRemark.replace("@hospitalNumber", hospitalNumber == null ? "" : hospitalNumber); + //手术台数(一条使用记录默认就是一台手术) - useRecordConvertRecyclingApplicationRemark = useRecordConvertRecyclingApplicationRemark.replace("@operationAmount", "1"); + useRecordConvertRecyclingApplicationRemark = useRecordConvertRecyclingApplicationRemark.replace("@operationAmount", String.valueOf(useRecordList.size())); //器械件数(仅计算能被转换到申请单的器械包总件数) - useRecordConvertRecyclingApplicationRemark = useRecordConvertRecyclingApplicationRemark.replace("@tousseAmount", - String.valueOf(useRecord.countTousseAmount(objectDao, includeTousseTypeList, onlyCountNeedConvertGoods, onlyCountNeedRecyclingGoods))); + useRecordConvertRecyclingApplicationRemark = useRecordConvertRecyclingApplicationRemark.replace("@tousseAmount", String.valueOf(tousseAmount)); }else{ useRecordConvertRecyclingApplicationRemark = ""; - if(StringUtils.isNotBlank(useRecord.getWashHandNurse())){ - useRecordConvertRecyclingApplicationRemark += "洗手护士:" + useRecord.getWashHandNurse() + ";"; + String washHandNurseRemark = null; + String tousseAmountRemark = "器械包数量:"; + for (UseRecord useRecord : useRecordList) { + if(StringUtils.isNotBlank(useRecord.getWashHandNurse())){ + if(washHandNurseRemark == null){ + washHandNurseRemark = "洗手护士:"; + } + washHandNurseRemark += useRecord.getWashHandNurse() + " "; + } + if(StringUtils.isNotBlank(useRecord.getCircuitNurse())){ + if(circuitNurseRemark == null){ + circuitNurseRemark = getCircuitNurseLabelName() + ":"; + } + circuitNurseRemark += useRecord.getCircuitNurse() + " "; + } + if(StringUtils.isNotBlank(useRecord.getPatientName())){ + if(patientNameRemark == null){ + patientNameRemark = "病人:"; + } + patientNameRemark += useRecord.getPatientName() + " "; + } + tousseAmount += useRecord.countTousseAmount(objectDao, includeTousseTypeList, onlyCountNeedConvertGoods, onlyCountNeedRecyclingGoods); } - if(StringUtils.isNotBlank(useRecord.getCircuitNurse())){ - useRecordConvertRecyclingApplicationRemark += getCircuitNurseLabelName() + ":" + useRecord.getCircuitNurse() + ";"; + if(washHandNurseRemark != null){ + washHandNurseRemark = washHandNurseRemark + ";"; } - if(StringUtils.isNotBlank(useRecord.getPatientName())){ - useRecordConvertRecyclingApplicationRemark += "病人:" + useRecord.getPatientName() + ";"; + if(circuitNurseRemark != null){ + circuitNurseRemark = circuitNurseRemark + ";"; } - useRecordConvertRecyclingApplicationRemark += "器械包数量:" + - String.valueOf(useRecord.countTousseAmount(objectDao, includeTousseTypeList, onlyCountNeedConvertGoods, onlyCountNeedRecyclingGoods)); + if(patientNameRemark != null){ + patientNameRemark = patientNameRemark + ";"; + } + useRecordConvertRecyclingApplicationRemark += + (washHandNurseRemark == null ? "" : washHandNurseRemark) + + (circuitNurseRemark == null ? "" : circuitNurseRemark) + + (patientNameRemark == null ? "" : patientNameRemark) + + tousseAmountRemark + tousseAmount; } return useRecordConvertRecyclingApplicationRemark; } @@ -2535,15 +2669,48 @@ } return resultList; } + + public JSONObject multiAuditedUseRecordsMergeConvertRecyclingApplication(Collection ids,String applicant){ + JSONObject result = new JSONObject(); + result.put(JSONUtil.JSON_KEY_SUCCESS, false); + List useRecordList = getCollectionForUpdate("id", ids); + if(useRecordList.size() != ids.size()){ + result.put(JSONUtil.JSON_KEY_MESSAGE, "根据ids查找到的使用记录数量小于id的个数"); + return result; + } + String depart = null; + String departCoding = null; + for(UseRecord useRecord : useRecordList){ + if(!useRecord.isAudited()){ + result.put(JSONUtil.JSON_KEY_MESSAGE, "使用记录状态不为已审核"); + return result; + } + if(depart == null){ + if(StringUtils.isNotBlank(useRecord.getDepart())){ + depart = useRecord.getDepart(); + } + }else{ + if(!StringUtils.equals(depart, useRecord.getDepart())){ + result.put(JSONUtil.JSON_KEY_MESSAGE, "存在使用记录的录入科室名称不一致"); + return result; + } + } + if(departCoding == null){ + if(StringUtils.isNotBlank(useRecord.getDepartCoding())){ + departCoding = useRecord.getDepartCoding(); + } + }else{ + if(!StringUtils.equals(departCoding, useRecord.getDepartCoding())){ + result.put(JSONUtil.JSON_KEY_MESSAGE, "存在使用记录的录入科室编码不一致"); + return result; + } + } + } + createRecyclingApplicationByUseRecords(ids, applicant, depart, departCoding, new Date()); + result.put(JSONUtil.JSON_KEY_SUCCESS, true); + return result; + } - /** - * 使用记录合成申请单 - * 针对中六的调整:已改为一条使用记录生成一条申请,不再合并,且页面上允许选择不同科室的使用记录进行转换申请单 @author ShuYongFu @since 2016-01-13 - */ - @SuppressWarnings("unchecked") - /** - * 此方法传入参ids数,暂时只能支持传入一个id,不能传入多个id,否则会有bug - */ public String createRecyclingApplicationByUseRecords(Collection ids, String applicant, String depart, String departCoding,Date applicationCreateDate) { @@ -2600,9 +2767,12 @@ } useRecord.setApplicationTime(applicationCreateDate); - useRecord.setReviewer(reviewer); - useRecord.setReviewerCode(reviewerCode); - useRecord.setReviewTime(applicationCreateDate); + //如果使用记录还未审核,则设置审核时间、审核人信息等 + if(!useRecord.isAudited()){ + useRecord.setReviewer(reviewer); + useRecord.setReviewerCode(reviewerCode); + useRecord.setReviewTime(applicationCreateDate); + } applicant = useRecord.getOperator(); depart = useRecord.getDepart(); @@ -2689,18 +2859,21 @@ Collection allTousseInstanceList = CollectionUtils.emptyCollection(); Collection patientNames = new ArrayList(); Collection circuitNurses = new ArrayList(); - UseRecord useRecord = null; String[] ids = StringUtils.split(userRecordIds, ';'); - for (String id : ids) { - useRecord = getUseRecordById(id); + List useRecordList = getByHqlForUpdate(" id in ("+ StringUtils.join(ids,",") +")"); + UseRecord lastUseRecord = null; + for (UseRecord useRecord : useRecordList) { useRecord.setOperator(applicant); useRecord.setStatus(UseRecord.STATUS_APPLIED); saveOrUpdate(useRecord); circuitNurses.add("巡回护士:" + useRecord.getCircuitNurse()); patientNames.add("病人:" + useRecord.getPatientName()); List tousseInstanceList = tousseInstanceManager - .findTousseInstanceListByUseRecordId(Long.valueOf(id)); + .findTousseInstanceListByUseRecordId(useRecord.getId()); allTousseInstanceList = CollectionUtils.union(allTousseInstanceList, tousseInstanceList); + lastUseRecord = useRecord; + depart = useRecord.getDepart(); + departCoding = useRecord.getDepartCoding(); } String remark = StringUtils.join(circuitNurses, ';') + " " + StringUtils.join(patientNames, ';'); @@ -2712,7 +2885,7 @@ // 若由一条使用记录转换申请单,则设置使用记录与回收申请的关联关系 if(ids.length == 1){ for (RecyclingApplication recyclingApplication : applicationList) { - recyclingApplication.setUseRecord(useRecord); + recyclingApplication.setUseRecord(lastUseRecord); recyclingApplication.setApplicant(applicant);//申请人 recyclingApplication.setRemark(remark); objectDao.saveOrUpdate(recyclingApplication); @@ -4285,4 +4458,79 @@ sql += " order by validUntil "; return (TousseInstance)objectDao.getBySql(TousseInstance.class.getSimpleName(), sql); } + + @Override + public JSONObject loadUseRecordBarcode(String barcode) { + JSONObject obj = new JSONObject(); + obj.put(JSONUtil.JSON_KEY_SUCCESS, false); + try { + if (StringUtils.isNotBlank(barcode)) { + BarcodeDevice bd = barcodeManager.getBarcodeByBarcode(barcode); + if (bd != null) { + if (bd instanceof TousseInstance) { + TousseInstance ti = (TousseInstance) bd; + if(!DatabaseUtil.isPoIdValid(ti.getUseRecord_id())){ + obj.put(JSONUtil.JSON_KEY_MESSAGE, "条码" + barcode + "未登记使用记录!"); + return obj; + } + + UseRecord useReocrd = get(ti.getUseRecord_id()); + if(useReocrd == null){ + obj.put(JSONUtil.JSON_KEY_MESSAGE, "未找到条码" + barcode + "的使用记录!"); + return obj; + } + + if(useReocrd.isApplied()){ + obj.put(JSONUtil.JSON_KEY_MESSAGE, "条码" + barcode + "的使用记录已经转换申请单!"); + return obj; + } + + if(useReocrd.isUnaudited()){ + obj.put(JSONUtil.JSON_KEY_MESSAGE, "条码" + barcode + "的使用记录未审核,请先审核!"); + return obj; + } + + if(!useReocrd.isAudited()){ + obj.put(JSONUtil.JSON_KEY_MESSAGE, "条码" + barcode + "的使用记录状态为"+ useReocrd.getStatus() +",状态异常!"); + return obj; + } + + JSONObject dataJson = new JSONObject(); + dataJson.put("id" , useReocrd.getId()); + dataJson.put("patientName" , useReocrd.getPatientName()); + dataJson.put("status" , useReocrd.getStatus()); + dataJson.put("hospitalNum" , useReocrd.getHospitalNum()); + dataJson.put("treatmentNum" , useReocrd.getTreatmentNum()); + dataJson.put("operationRoom" , useReocrd.getOperationRoom()); + dataJson.put("patientAge" , useReocrd.getPatientAge()); + dataJson.put("patientIDCard" , useReocrd.getPatientIDCard()); + dataJson.put("doctorName" , useReocrd.getDoctorName()); + dataJson.put("operation" , useReocrd.getOperation()); + dataJson.put("operator" , useReocrd.getOperator()); + dataJson.put("depart" , useReocrd.getDepart()); + dataJson.put("departCoding" , useReocrd.getDepartCoding()); + dataJson.put("enteringDate" , DateTools.getFormatDateStr(useReocrd.getEnteringDate(), DateTools.COMMON_DATE_HMS)); + dataJson.put("remark" , useReocrd.getRemark()); + obj.put("data", dataJson); + } else { + obj.put(JSONUtil.JSON_KEY_MESSAGE, "条码" + barcode + "为不是器械包条码!"); + return obj; + } + }else{ + obj.put(JSONUtil.JSON_KEY_MESSAGE, "条码" + barcode + "为无效条码!"); + return obj; + } + }else{ + obj.put(JSONUtil.JSON_KEY_MESSAGE, "条码不能为空!"); + return obj; + } + }catch(Exception e){ + e.printStackTrace(); + obj.put(JSONUtil.JSON_KEY_MESSAGE, e.getMessage()); + return obj; + } + obj.put(JSONUtil.JSON_KEY_SUCCESS, true); + return obj; + } + } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/recyclingapplication/RecyclingApplication.java =================================================================== diff -u -r19988 -r20256 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/recyclingapplication/RecyclingApplication.java (.../RecyclingApplication.java) (revision 19988) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/recyclingapplication/RecyclingApplication.java (.../RecyclingApplication.java) (revision 20256) @@ -243,7 +243,12 @@ } public void setPatientName(String patientName) { - this.patientName = patientName; + //如果长度超过200时,只截取前200字符 + if(patientName != null && patientName.length() > 200){ + this.patientName = patientName.substring(0 , 200) + "..."; + }else{ + this.patientName = patientName; + } } @ManyToOne(cascade=CascadeType.REFRESH,fetch=FetchType.LAZY) @@ -275,7 +280,12 @@ } public void setTreatmentNum(String treatmentNum) { - this.treatmentNum = treatmentNum; + //如果长度超过200时,只截取前200字符 + if(treatmentNum != null && treatmentNum.length() > 200){ + this.treatmentNum = treatmentNum.substring(0 , 200) + "..."; + }else{ + this.treatmentNum = treatmentNum; + } } /** Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/InvoicePlan.java =================================================================== diff -u -r20058 -r20256 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/InvoicePlan.java (.../InvoicePlan.java) (revision 20058) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/InvoicePlan.java (.../InvoicePlan.java) (revision 20256) @@ -800,7 +800,12 @@ } public void setHospitalNumber(String hospitalNumber) { - this.hospitalNumber = hospitalNumber; + //如果长度超过200时,只截取前200字符 + if(hospitalNumber != null && hospitalNumber.length() > 200){ + this.hospitalNumber = hospitalNumber.substring(0 , 200) + "..."; + }else{ + this.hospitalNumber = hospitalNumber; + } } /** * 判断是否外来器械包申请单