Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManager.java =================================================================== diff -u -r19583 -r19831 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManager.java (.../UseRecordManager.java) (revision 19583) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManager.java (.../UseRecordManager.java) (revision 19831) @@ -11,14 +11,15 @@ import com.forgon.disinfectsystem.entity.useRecord.UseDiposableGoodsItem; import com.forgon.disinfectsystem.entity.useRecord.UseRecord; import com.forgon.disinfectsystem.vo.UseMaterialGoodsItem; +import com.forgon.tools.hibernate.BasePoManager; /** * * @author qjw * * 2012-3-23 下午05:00:28 */ -public interface UseRecordManager { +public interface UseRecordManager extends BasePoManager { public void saveOrUpdate(UseRecord useRecord); Index: ssts-web/src/test/java/test/forgon/disinfectsystem/useRecord/UseRecordManagerTests.java =================================================================== diff -u -r19486 -r19831 --- ssts-web/src/test/java/test/forgon/disinfectsystem/useRecord/UseRecordManagerTests.java (.../UseRecordManagerTests.java) (revision 19486) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/useRecord/UseRecordManagerTests.java (.../UseRecordManagerTests.java) (revision 19831) @@ -4,6 +4,7 @@ import java.util.Date; import java.util.List; +import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -19,13 +20,19 @@ import test.forgon.disinfectsystem.dataProvider.tousseDefinition.TousseDefinitionDataProvider; import com.forgon.directory.acegi.tools.AcegiHelper; +import com.forgon.directory.model.BarcodeDevice; import com.forgon.disinfectsystem.common.CssdUtils; +import com.forgon.disinfectsystem.entity.assestmanagement.DiposableGoodsInstance; +import com.forgon.disinfectsystem.entity.basedatamanager.foreigntoussedefinition.ForeignTousseDefinition; +import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; +import com.forgon.disinfectsystem.entity.foreigntousseapplication.ForeignTousseApplication; import com.forgon.disinfectsystem.entity.invoicemanager.Invoice; import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; import com.forgon.disinfectsystem.entity.recyclingapplication.RecyclingApplication; +import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; import com.forgon.disinfectsystem.entity.useRecord.UseRecord; import com.forgon.disinfectsystem.entity.useRecord.UseRecordToRecycleApplication; import com.forgon.disinfectsystem.useRecord.service.UseRecordManager; @@ -2370,5 +2377,196 @@ } AssertJUnit.assertEquals(useRecordStatus, useRecord.getStatus()); } + + @Test + public void testForeignTousseAndInsideTousseMergeConvert() throws Exception { + initCSSDData(); + //发货给手术室,同时由手术室录使用记录 + String testOrgunitName = Constants.ORG_UNIT_NAME_OR; + String testOrgunitCoding = Constants.ORG_UNIT_CODE_OR; + + SupplyRoomConfig supplyRoomConfig = supplyRoomConfigManager.getSystemParamsObj(); + + //聚合包内普通器械包 + TousseDefinition td_开胸包 = tousseDefinitionManager.getTousseDefinitionByName("Test开胸包"); + Date packingTime = new Date(); + //1.初始化普通器械包实例 + /**************普通包发货*******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); + + List tousseInstanceList = new ArrayList(); + tousseInstanceList.add(tousseInstance_开胸包1); + tousseInstanceList.add(tousseInstance_开胸包2); + + //2.初始化病人信息 + String patientName = "张三"; + String patientSex = "男"; + String patientAge = "22"; + String patientIdCard = "321654987"; + String hospitalNumber = "123456"; + String doctor = "李四"; + String operation = "爛尾炎"; + String operationTime = "2017-05-01"; + + //3.初始化外来器械申请单及包实例 + ForeignTousseApplication foreignTousseApplication = new ForeignTousseApplication(); + foreignTousseApplication.setPatient(patientName); + foreignTousseApplication.setPatientSex(patientSex); + foreignTousseApplication.setPatientAge(patientAge); + foreignTousseApplication.setDoctor(doctor); + foreignTousseApplication.setSurgery(operation); + foreignTousseApplication.setOperationTime(packingTime); + foreignTousseApplication.setApplicant(AcegiHelper.getLoginUser().getUserName()); + foreignTousseApplication.setType(InvoicePlan.TYPE_FOREIGNTOUSSEAPPLIACTION); + foreignTousseApplication.setDepart(invoice.getDepart()); + foreignTousseApplication.setDepartCoding(invoice.getDepartCoding()); + foreignTousseApplication.setSettleAccountsDepart(invoice.getDepart()); + foreignTousseApplication.setSettleAccountsDepartCoding(invoice.getDepartCoding()); + foreignTousseApplication.setHandleDepart(supplyRoomConfig.getDptNameOfForeignTousse()); + foreignTousseApplication.setHandleDepartCoding(supplyRoomConfig.getDptCodeOfForeignTousse()); + foreignTousseApplication.setRecyclingStatus(InvoicePlan.RECYCLINGSTATUS_AWAITRECEIVED); + foreignTousseApplication.setPackageStatus(ForeignTousseDefinition.PACKAGE_STATUS_RECEIVING); + foreignTousseApplication.setDeliverStatus(InvoicePlan.DELIVERSTATUS_DELIVERED); + foreignTousseApplication.setReturnStatus(InvoicePlan.RETURN_STATUS_UNRETURNED); + objectDao.save(foreignTousseApplication); + + TousseDefinition foreignTousseDefinition = tousseDefinitionManager.getTousseDefinitionByNameForDisplay("Test骨钩"); + + TousseDefinition newForeignTousseDefinition = new TousseDefinition(); + + BeanUtils.copyProperties(newForeignTousseDefinition, foreignTousseDefinition); + newForeignTousseDefinition.setId(null); + newForeignTousseDefinition.setInvoicePlanID(foreignTousseApplication.getId()); + newForeignTousseDefinition.setAncestorID(foreignTousseDefinition.getId()); + newForeignTousseDefinition.setParentID(foreignTousseApplication.getId()); + newForeignTousseDefinition.setMaterialInstances(null); + newForeignTousseDefinition.setDiposableGoodsItems(null); + + List materialInstanceList = foreignTousseDefinition.getMaterialInstances(); + if(CollectionUtils.isNotEmpty(materialInstanceList)){ + List newMaterialInstanceList = new ArrayList(); + for (MaterialInstance materialInstance : materialInstanceList) { + MaterialInstance newMaterialInstance = new MaterialInstance(); + BeanUtils.copyProperties(newMaterialInstance, materialInstance); + newMaterialInstance.setId(null); + newMaterialInstanceList.add(newMaterialInstance); + } + newForeignTousseDefinition.setMaterialInstances(newMaterialInstanceList); + } + + List diposableGoodsInstanceList = foreignTousseDefinition.getDiposableGoodsItems(); + if(CollectionUtils.isNotEmpty(diposableGoodsInstanceList)){ + List newDiposableGoodsInstanceList = new ArrayList(); + for (DiposableGoodsInstance diposableGoodsInstance : diposableGoodsInstanceList) { + DiposableGoodsInstance newDiposableGoodsInstance = new DiposableGoodsInstance(); + BeanUtils.copyProperties(newDiposableGoodsInstance, diposableGoodsInstance); + newDiposableGoodsInstance.setId(null); + newDiposableGoodsInstanceList.add(newDiposableGoodsInstance); + } + newForeignTousseDefinition.setDiposableGoodsItems(newDiposableGoodsInstanceList); + } + + objectDao.save(newForeignTousseDefinition); + + TousseItem tousseItem = new TousseItem(); + tousseItem.setTousseDefinitionId(newForeignTousseDefinition.getId()); + tousseItem.setTousseName(newForeignTousseDefinition.getName()); + tousseItem.setDiposable(com.forgon.Constants.STR_YES); + tousseItem.setTousseType(newForeignTousseDefinition.getTousseType()); + tousseItem.setIsRecycling(com.forgon.Constants.STR_YES); + tousseItem.setIsInvoice(com.forgon.Constants.STR_YES); + tousseItem.setInvoicePlan(foreignTousseApplication); + tousseItem.setIsCleanedEntirely(supplyRoomConfig.getForeignTousseCleanedEntirely()); + tousseItem.setAmount(1); + tousseItem.setPrice(supplyRoomConfig.getForeignToussePrice()); + tousseItem.setRowPrice(supplyRoomConfig.getForeignToussePrice()); + tousseItem.setRecyclingAmount(1); + tousseItem.setSendOutAmount(1); + tousseItem.setDiposable(com.forgon.Constants.STR_NO); + objectDao.save(tousseItem); + + TousseInstance foreignTousseInstance = new TousseInstance(); + foreignTousseInstance.setTousseDefinition(newForeignTousseDefinition); + foreignTousseInstance.setTousseName(newForeignTousseDefinition.getName()); + foreignTousseInstance.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + foreignTousseInstance.setOperationTime(packingTime); + foreignTousseInstance.setStatus(TousseInstance.STATUS_SHIPPED); + foreignTousseInstance.setInvoice_id(invoice.getId()); + foreignTousseInstance.setInvoiceSender(invoice.getSender()); + foreignTousseInstance.setInvoiceSendTime(invoice.getSendTime()); + foreignTousseInstance.setLocation(invoice.getDepartCoding()); + foreignTousseInstance.setLocationForDisplay(invoice.getDepart()); + foreignTousseInstance.setForeignTousseApp_id(foreignTousseApplication.getId()); + objectDao.save(foreignTousseInstance); + tousseInstanceList.add(foreignTousseInstance); + + + //4.初始化使用记录 + UseRecord ur = new UseRecord(); + ur.setPatientName(patientName); + ur.setPatientSex(patientSex); + ur.setPatientAge(patientAge); + ur.setDoctorName(doctor); + ur.setOperationTime(packingTime); + ur.setHospitalNum(hospitalNumber); + ur.setDepart(invoice.getDepart()); + ur.setDepartCoding(invoice.getDepartCoding()); + ur.setOperation(operation); + ur.setPatientIDCard(patientIdCard); + ur.setTousseInstanceList(tousseInstanceList); + + //5.调用转换申请单 + try { + useRecordManager.saveAndReviewAndConvertUseRecordForm_TRANS_REQUIRED(ur, AcegiHelper.getLoginUser().getUserName(), + invoice.getDepart(), invoice.getDepartCoding(), packingTime, CssdUtils.getSystemSetConfigByName("applicationFormType")); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + throw e; + } + + //6.断言生成的申请单及申请项的数量及其它属性、原外来器械申请单及包实例的状态等 + RecyclingApplication ra = recyclingApplicationManager.getRecyclingApplication(ur.getId()); + AssertJUnit.assertEquals(ra.getRecyclingStatus(), InvoicePlan.RECYCLINGSTATUS_AWAITRECYCLE); + AssertJUnit.assertTrue(ra.getTousseBarcodes().contains(tousseInstance_开胸包1.getBarcode())); + AssertJUnit.assertTrue(ra.getTousseBarcodes().contains(tousseInstance_开胸包2.getBarcode())); + AssertJUnit.assertTrue(ra.getTousseBarcodes().contains(foreignTousseInstance.getBarcode())); + List tousseItemList = ra.getApplicationItems(); + AssertJUnit.assertEquals(tousseItemList.size(), 2); + AssertJUnit.assertEquals(foreignTousseApplication.getRecyclingStatus() , InvoicePlan.RECYCLINGSTATUS_RECYCLED); + AssertJUnit.assertEquals(foreignTousseApplication.getPackageStatus() , ForeignTousseApplication.APPLICATION_STATUS_RETRUN); + } } Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java =================================================================== diff -u -r19705 -r19831 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java (.../UseRecordManagerImpl.java) (revision 19705) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java (.../UseRecordManagerImpl.java) (revision 19831) @@ -1,5 +1,6 @@ package com.forgon.disinfectsystem.useRecord.service; +import java.lang.reflect.InvocationTargetException; import java.sql.ResultSet; import java.sql.SQLException; import java.text.SimpleDateFormat; @@ -19,6 +20,7 @@ import net.sf.json.JsonConfig; import net.sf.json.util.PropertyFilter; +import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; import org.apache.commons.collections4.Predicate; @@ -43,10 +45,12 @@ import com.forgon.disinfectsystem.datasynchronization.model.PatientInfoVO; import com.forgon.disinfectsystem.datasynchronization.service.DataSynchronizationManager; import com.forgon.disinfectsystem.diposablegoods.service.DiposableGoodsManager; +import com.forgon.disinfectsystem.entity.assestmanagement.DiposableGoodsInstance; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsBatch; import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveDisposablegoods; import com.forgon.disinfectsystem.entity.basedatamanager.materialdefinition.MaterialDefinition; +import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; @@ -64,9 +68,11 @@ import com.forgon.disinfectsystem.entity.useRecord.UseDiposableGoodsItem; import com.forgon.disinfectsystem.entity.useRecord.UseRecord; import com.forgon.disinfectsystem.entity.useRecord.UseRecordToRecycleApplication; +import com.forgon.disinfectsystem.foreigntousseapplication.service.ForeignTousseApplicationManager; import com.forgon.disinfectsystem.idcardinstance.service.IDCardInstanceManager; import com.forgon.disinfectsystem.recyclingapplication.service.RecyclingApplicationManager; import com.forgon.disinfectsystem.stockmanage.departmentstock.service.DepartmentStockManager; +import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseInstanceManager; import com.forgon.disinfectsystem.tousseitem.service.TousseItemManager; import com.forgon.disinfectsystem.toussetransition.service.TousseTransitionPlanItemManager; @@ -75,9 +81,11 @@ import com.forgon.disinfectsystem.vo.UseMaterialGoodsItem; import com.forgon.log.model.Log; import com.forgon.log.service.LogManager; +import com.forgon.serialnumber.model.SerialNum; +import com.forgon.serialnumber.service.SerialNumManager; import com.forgon.tools.MathTools; import com.forgon.tools.db.DatabaseUtil; -import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.hibernate.BasePoManagerImpl; import com.forgon.tools.json.DateJsonValueProcessor; import com.forgon.tools.json.JSONUtil; import com.forgon.tools.string.StringTools; @@ -88,12 +96,10 @@ * * 2012-3-23 下午05:55:53 */ -public class UseRecordManagerImpl implements UseRecordManager { +public class UseRecordManagerImpl extends BasePoManagerImpl implements UseRecordManager { private Logger logger = Logger.getLogger(this.getClass()); - private ObjectDao objectDao; - private TousseInstanceManager tousseInstanceManager; private TousseItemManager tousseItemManager; @@ -126,6 +132,12 @@ private GoodsDepartShareConfigManager goodsDepartShareConfigManager; + private ForeignTousseApplicationManager foreignTousseApplicationManager; + + private TousseDefinitionManager tousseDefinitionManager; + + private SerialNumManager serialNumManager; + public void setDiposableGoodsManager(DiposableGoodsManager diposableGoodsManager) { this.diposableGoodsManager = diposableGoodsManager; } @@ -176,10 +188,6 @@ this.recyclingApplicationManager = recyclingApplicationManager; } - public void setObjectDao(ObjectDao objectDao) { - this.objectDao = objectDao; - } - public void setPathJdbcTemplate(JdbcTemplate pathJdbcTemplate) { this.pathJdbcTemplate = pathJdbcTemplate; } @@ -202,6 +210,20 @@ this.tousseTransitionPlanManager = tousseTransitionPlanManager; } + public void setForeignTousseApplicationManager( + ForeignTousseApplicationManager foreignTousseApplicationManager) { + this.foreignTousseApplicationManager = foreignTousseApplicationManager; + } + + public void setTousseDefinitionManager( + TousseDefinitionManager tousseDefinitionManager) { + this.tousseDefinitionManager = tousseDefinitionManager; + } + + public void setSerialNumManager(SerialNumManager serialNumManager) { + this.serialNumManager = serialNumManager; + } + @Override public void deleteUseRecordById(String useRecordId) { List tousseInstances = tousseInstanceManager @@ -1132,27 +1154,61 @@ /** * 获取使用记录参数 + * 一、器械包满足最终转换的条件: + * 1.不是聚合包 + * 2.还未转换过 + * 3.不是消毒物品、外部代理灭菌包(消毒物品、外部代理灭菌包如果包定义是否转换为是时,则会记住这些物品的条码,可用于在回收时扫描条码待回收单,转换后的申请单备注的器械包数量也可能会包含这些物品) + * 4.包定义的是否转换为是或者是否真正使用为否(默认是否真正使用都为是) + * 5.后续改进的补充 + * + * 二、外来器械包及外来器械拆分小包的情况更加特殊,又分两种情况 + * 1.如果没有配置其转换后要与普通器械包合并时,只用将外来器械包的原申请单的回收单状态由已接收变成待回收 + * 2.如果有配置其转换后要与普通器械包合并时,则需要与普通器械包合并生成到一个申请单上,每个外来器械包实例新生成一个单独的tousseItem进行回收,且是否发货为否,同时这些外来器械包的原申请单/回收单需要变成确认归还及已回收 * @param ids 使用记录id,多个值用;分隔 * @return */ private Map checkedUseRecords(Collection ids) { + //器械包(除外来器械包、外来器械拆分小包、自定义器械包外其它类型的TousseDefinition,即tousseType为器械包、消毒物品、敷料包、外部代理灭菌等)map(key为包定义id,value为数量) Map applyTousseMap = new HashMap(); - //自定义器械包map,非消毒物品map,变量命名错误 + //加急的器械包(除外来器械包、外来器械拆分小包、自定义器械包外其它类型的TousseDefinition,即tousseType为器械包、消毒物品、敷料包、外部代理灭菌等)map(key为包定义id,value为加急数量) + Map applyUrgentTousseMap = new HashMap(); + + //外来器械包、外来器械拆分小包map(key为包定义id,value为数量) + Map applyForeignTousseMap = new HashMap(); + //加急的外来器械包、外来器械拆分小包map(key为包定义id,value为加急数量) + Map applyUrgentForeignTousseMap = new HashMap(); + + //自定义器械包map(key为包定义id,value为数量) Map applyCustomTousseMap = new HashMap(); - Map applyDiposableGoodsMap = new HashMap(); - //自定义器械包的加急数量,key为包定义的id + //自定义器械包的加急数量,key为包定义的id,value为数量 Map applyUrgentCustomTousseMap = new HashMap(); - //器械包名称对应的加急数量 - Map applyUrgentTousseMap = new HashMap(); + //一次性物品map(key为一次性物品定义名称,value为数量) + Map applyDiposableGoodsMap = new HashMap(); List useRecordList = new ArrayList(); - //器械包实例(如有标识牌时同时记录绑定的标识牌)条码,包定义为需要转申请单的才记录, + //器械包实例(如有标识牌时同时记录绑定的标识牌)条码,包定义为需要转申请单的才记录(key为包实例条码(如果有标识牌则还会新增一条key为标识牌条码的键值对元素),value为包定义id) Map tousseBarcodeToDefinitionIdMap = new HashMap(); - // key-使用记录id,value-该使用记录中包含的器械包实例条码 int i = 1; // 是否启用真正使用功能 boolean enableActualUsed = CssdUtils.getSystemSetConfigByNameBool("enableActualUsed"); + //使用记录转换申请单时外来器械包是否与普通器械包合并到一个申请单 + boolean foreignTousseAndInsideTousseMergeToTheSameComboApplicationAfterUseRecordConvert = + CssdUtils.getSystemSetConfigByNameBool("foreignTousseAndInsideTousseMergeToTheSameComboApplicationAfterUseRecordConvert"); Map temp = new HashMap<>(); for (Long id : ids) { + UseRecord useRecord = getForUpdate(id); + useRecordList.add(useRecord); + //使用记录的一次性物品 + if(useRecord.getDiposableGoodsItems() != null){ + for (UseDiposableGoodsItem di : useRecord.getDiposableGoodsItems()) { + Integer useAmount = applyDiposableGoodsMap.get(di.getName()); + if(useAmount == null){ + useAmount = 0; + } + applyDiposableGoodsMap.put(di.getName(), useAmount + di.getAmount()); + } + } + + //使用记录所有的包实例 List tousseInstanceList = tousseInstanceManager .findTousseInstanceListByUseRecordId(id); for (TousseInstance tousseInstance : tousseInstanceList) { @@ -1177,8 +1233,10 @@ continue; } + //查询该包实例是否为发货到借物单的物品,如果是,则返回对应的借物单的id Long borrowId = recyclingApplicationManager.getBorrowIdByTousseInstanceId(tousseInstance.getId()); if (borrowId != null){ + //根据借物单id及包实例查询对应的借物物品归还情况,如果还未归还完则可以转换 canTransferToAppFlag = this.isCanTransferToAppFlag(temp, tousseInstance, borrowId); } if (canTransferToAppFlag){ @@ -1204,13 +1262,47 @@ //外来器械包、与外来器械拆分小包的处理(只改原申请单的状态与条码) if (tousseDefinition.isForeignTousse() || tousseDefinition.isSplit()) { + //如果该包已废弃,则跳过 + if(tousseInstance.isDiscarded()){ + continue; + } + ForeignTousseApplication foreignTousseApplication = null; //使用记录转换成申请单的时候把外来器械的申请单“回收状态”改为“待回收” if(tousseInstance.getForeignTousseApp_id() != null){ - ForeignTousseApplication foreignTousseApplication = (ForeignTousseApplication) objectDao + foreignTousseApplication = (ForeignTousseApplication) objectDao .getByProperty(ForeignTousseApplication.class .getSimpleName(), "id", tousseInstance .getForeignTousseApp_id()); + } + + //如果外来器械转换申请单要与其它的包合并时,后续会重新生成的新的申请单,且原申请单需要将状态调整 + if(foreignTousseAndInsideTousseMergeToTheSameComboApplicationAfterUseRecordConvert){ + if(tousseDefinition.isForeignTousse()){ + applyForeignTousseMap.put(tousseDefinition.getId(), 1); + if(StringUtils.equals(tousseInstance.getIsUrgentForUseRecord(),Constants.STR_YES)){ + applyUrgentForeignTousseMap.put(tousseDefinition.getId(), 1); + } + }else if(tousseDefinition.isSplit()){ + applyForeignTousseMap.put(tousseDefinition.getParentID(), 1); + if(StringUtils.equals(tousseInstance.getIsUrgentForUseRecord(),Constants.STR_YES) && applyUrgentForeignTousseMap.get(tousseDefinition.getParentID()) == null){ + applyUrgentForeignTousseMap.put(tousseDefinition.getParentID(), 1); + } + } + if(foreignTousseApplication != null){ + if(InvoicePlan.RECYCLINGSTATUS_AWAITRECEIVED.equals(foreignTousseApplication.getRecyclingStatus())){ + foreignTousseApplication.setRecyclingStatus(InvoicePlan.RECYCLINGSTATUS_RECYCLED); + foreignTousseApplication.setOrderByFiled(InvoicePlan.RECYCLING_RECYCLED); + } + objectDao.saveOrUpdate(foreignTousseApplication); + + //再对该申请单进行确认归还处理(先判断外来器械申请单是否已经归还) + if(!StringUtils.equals(ForeignTousseApplication.APPLICATION_STATUS_RETRUN, foreignTousseApplication.getPackageStatus())){ + foreignTousseApplicationManager.foreignTousseReturn(foreignTousseApplication); + } + } + }else{ + if(foreignTousseApplication != null){ String foreignTousseBarcode = foreignTousseApplication.getTousseBarcodes(); if(StringUtils.isBlank(foreignTousseBarcode)){ foreignTousseBarcode = ";"; @@ -1223,9 +1315,8 @@ } objectDao.saveOrUpdate(foreignTousseApplication); } + continue; } - // 如果器械包是外来器械包或消毒物品或灭菌物品,则不转换申请单 - continue; } else if (tousseDefinition.isCustomTousse()) { applyCustomTousseMap.put(tousseDefinition.getId(), MathTools.add(applyCustomTousseMap.get(tousseDefinition.getId()), i).intValue()); @@ -1242,29 +1333,22 @@ } } } - UseRecord useRecord = getUseRecordById(id); - useRecordList.add(useRecord); - if(useRecord.getDiposableGoodsItems() != null){ - for (UseDiposableGoodsItem di : useRecord.getDiposableGoodsItems()) { - Integer useAmount = applyDiposableGoodsMap.get(di.getName()); - if(useAmount == null){ - useAmount = 0; - } - applyDiposableGoodsMap.put(di.getName(), useAmount + di.getAmount()); - } - } } - logger.info("最终要转换成申请单的物品是:[" + applyTousseMap + "]"); - logger.info("最终要转换成申请单的条码:[" + tousseBarcodeToDefinitionIdMap + "]"); + logger.info("最终要转换成申请单的器械包是:[" + applyTousseMap + "],对应的加急是:[" + applyUrgentTousseMap + "]"); + logger.info("最终要转换成申请单的外来器械包是:[" + applyForeignTousseMap + "],对应的加急是:[" + applyUrgentForeignTousseMap + "]"); + logger.info("最终要转换成申请单的自定义器械包是:[" + applyCustomTousseMap + "],对应的加急是:[" + applyUrgentCustomTousseMap + "]"); + logger.info("最终要转换成申请单的所有要转换物品的条码(有标识牌还包含标识牌条码):[" + tousseBarcodeToDefinitionIdMap + "]"); Map map = new HashMap(); - map.put("applyTousseMap", applyTousseMap);//一级供应室普通器械包(含敷料包,不含消毒物品、外来器械等)map + map.put("applyTousseMap", applyTousseMap);//普通器械包(含敷料包,不含消毒物品、外来器械等)map + map.put("applyUrgentTousseMap", applyUrgentTousseMap); + map.put("applyForeignTousseMap", applyForeignTousseMap);//外来器械包 + map.put("applyUrgentForeignTousseMap", applyUrgentForeignTousseMap); map.put("applyCustomTousseMap", applyCustomTousseMap);//自定义器械包map + map.put("applyUrgentCustomTousseMap", applyUrgentCustomTousseMap); map.put("applyDiposableGoodsMap", applyDiposableGoodsMap);//一次性物品 map.put("useRecordList", useRecordList); map.put("recordid_tousseInstanceCodes", tousseBarcodeToDefinitionIdMap);//器械包条码 - map.put("applyUrgentTousseMap", applyUrgentTousseMap); - map.put("applyUrgentCustomTousseMap", applyUrgentCustomTousseMap); return map; } @@ -1347,6 +1431,7 @@ Map useRecordsMap, String applicant, String depart, String departCoding, String operationRoom,String patientName,Date applicationCreateDate,double dpf,String applicationFormType) { String hospitalNumber = null; + //通常只有一条使用记录 List useRecordList = (List) useRecordsMap .get("useRecordList"); //要转换的使用记录对象及id @@ -1369,21 +1454,21 @@ String remark = getRemarkByUseRecordAndProjectConfig(useRecord , Collections.singletonList(TousseDefinition.PACKAGE_TYPE_INSIDE) , tousseAmountOnlyCountNeedConvertGoods , tousseAmountOnlyCountNeedRecyclingGoods); - //器械包map,不区分处理科室为一级或二级供应室 + //器械包map(key为名称,value为数量) Map applyTousseMap = (Map) useRecordsMap .get("applyTousseMap"); - //自定义器械包map + //自定义器械包map(key为包定义id,value为数量) Map applyCustomTousseMap = (Map) useRecordsMap .get("applyCustomTousseMap"); - //器械包条码集合 + //器械包条码集合(key为条码,value为包定义id) Map tousseBarcodeMap = (Map) useRecordsMap .get("recordid_tousseInstanceCodes"); - //一次性物品 + //一次性物品(key为名称,value为数量) Map applyDiposableGoodsMap = (Map)useRecordsMap.get("applyDiposableGoodsMap"); //器械包的加急数量,key为tousseName Map applyUrgentTousseMap = (Map) useRecordsMap .get("applyUrgentTousseMap"); - //自定义器械包的加急数量,key为包定义的id + //加急的自定义器械包(key为名称,value为数量) Map applyUrgentCustomTousseMap = (Map) useRecordsMap .get("applyUrgentCustomTousseMap"); @@ -1423,10 +1508,20 @@ } } + //使用记录里所有的包条码 + String tousseBarcodesOfUseRecord = ""; + for (String toussBarcode : tousseBarcodeMap.keySet()) { + tousseBarcodesOfUseRecord += toussBarcode + ";"; + } + + //器械包实例录使用记录后转换申请单后将会生成的单类型(用于外来器械录使用记录转换后的申请单类型,仅用于东莞中医院外来器械与普通器械包录单后合并的需求) + String invoicePlanTypeAfterTousseConvert = InvoicePlan.TYPE_COMBO_FORM; + //当前登录用户 LoginUserData loginUserData = AcegiHelper.getLoginUser(); //申请单类型(2表示分开的申请单,1为通用申请单) 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())){ @@ -1476,9 +1571,7 @@ if(StringUtils.isBlank(tousseBarcodes)){ tousseBarcodes = ";"; } - for (TousseInstance tousseInstance : useRecord.getTousseInstanceList(objectDao)) { - tousseBarcodes += tousseInstance.getBarcode() + ";"; - } + tousseBarcodes += tousseBarcodesOfUseRecord; recyclingApplication.setTousseBarcodes(tousseBarcodes); recyclingApplication.setUseRecord(useRecord); @@ -1637,9 +1730,7 @@ if(StringUtils.isBlank(tousseBarcodes)){ tousseBarcodes = ";"; } - for (TousseInstance tousseInstance : useRecord.getTousseInstanceList(objectDao)) { - tousseBarcodes += tousseInstance.getBarcode() + ";"; - } + tousseBarcodes += tousseBarcodesOfUseRecord; recyclingApplication.setTousseBarcodes(tousseBarcodes); recyclingApplication.setUseRecord(useRecord); @@ -1798,9 +1889,7 @@ if(StringUtils.isBlank(tousseBarcodes)){ tousseBarcodes = ";"; } - for (TousseInstance tousseInstance : useRecord.getTousseInstanceList(objectDao)) { - tousseBarcodes += tousseInstance.getBarcode() + ";"; - } + tousseBarcodes += tousseBarcodesOfUseRecord; recyclingApplication.setTousseBarcodes(tousseBarcodes); recyclingApplication.setUseRecord(useRecord); //申请人、提交时间及最后修改时间都取最后一条使用记录的信息 @@ -1886,6 +1975,246 @@ } } + //使用记录转换申请单时外来器械包是否与普通器械包合并到一个申请单 + boolean foreignTousseAndInsideTousseMergeToTheSameComboApplicationAfterUseRecordConvert = + CssdUtils.getSystemSetConfigByNameBool("foreignTousseAndInsideTousseMergeToTheSameComboApplicationAfterUseRecordConvert"); + if(foreignTousseAndInsideTousseMergeToTheSameComboApplicationAfterUseRecordConvert){ + //外来器械包及加急的器械包(同属一个外来器械) + Map applyForeignTousseMap = (Map)useRecordsMap.get("applyForeignTousseMap"); + Map applyUrgentForeignTousseMap = (Map)useRecordsMap.get("applyUrgentForeignTousseMap"); + if(applyForeignTousseMap != null && applyForeignTousseMap.size() > 0){ + SupplyRoomConfig supplyRoomConfig = supplyRoomConfigManager.getSystemParamsObj(); + //根据单类型及处理科室是否找到已经转换生成的申请单 + boolean foundInvoicePlanByHandleDepartCodingAndType = false; + //外来器械包的处理科室code + String orgUnitCodeOfForeignTousse = supplyRoomConfig.getDptCodeOfForeignTousse(); + //根据单类型及处理科室查询之前生成的与器械包有关的申请单(通常就只会有一个或没有) + for(RecyclingApplication ra : recyclingApplicationListAfterConvert){ + if(StringUtils.equals(orgUnitCodeOfForeignTousse, ra.getHandleDepartCoding()) + && StringUtils.equals(invoicePlanTypeAfterTousseConvert, ra.getType())){ + foundInvoicePlanByHandleDepartCodingAndType = true; + for(Long foreignTousseDefinitionId : applyForeignTousseMap.keySet()){ + //1.先创建新的外来器械包定义关联申请单 + TousseDefinition foreignTousseDefinition = tousseDefinitionManager.get(foreignTousseDefinitionId); + TousseDefinition newForeignTousseDefinition = new TousseDefinition(); + try { + BeanUtils.copyProperties(newForeignTousseDefinition, foreignTousseDefinition); + newForeignTousseDefinition.setId(null); + newForeignTousseDefinition.setMaterialInstances(null); + newForeignTousseDefinition.setDiposableGoodsItems(null); + newForeignTousseDefinition.setInvoicePlanID(ra.getId()); + + List materialInstanceList = foreignTousseDefinition.getMaterialInstances(); + if(CollectionUtils.isNotEmpty(materialInstanceList)){ + List newMaterialInstanceList = new ArrayList(); + for (MaterialInstance materialInstance : materialInstanceList) { + MaterialInstance newMaterialInstance = new MaterialInstance(); + BeanUtils.copyProperties(newMaterialInstance, materialInstance); + newMaterialInstance.setId(null); + newMaterialInstanceList.add(newMaterialInstance); + } + newForeignTousseDefinition.setMaterialInstances(newMaterialInstanceList); + } + + List diposableGoodsInstanceList = foreignTousseDefinition.getDiposableGoodsItems(); + if(CollectionUtils.isNotEmpty(diposableGoodsInstanceList)){ + List newDiposableGoodsInstanceList = new ArrayList(); + for (DiposableGoodsInstance diposableGoodsInstance : diposableGoodsInstanceList) { + DiposableGoodsInstance newDiposableGoodsInstance = new DiposableGoodsInstance(); + BeanUtils.copyProperties(newDiposableGoodsInstance, diposableGoodsInstance); + newDiposableGoodsInstance.setId(null); + newDiposableGoodsInstanceList.add(newDiposableGoodsInstance); + } + newForeignTousseDefinition.setDiposableGoodsItems(newDiposableGoodsInstanceList); + } + + tousseDefinitionManager.save(newForeignTousseDefinition); + + //2.创建该外来器械的申请项 + TousseItem oldTousseItem = tousseItemManager.getFirst("tousseDefinitionId=" + foreignTousseDefinitionId); + TousseItem newTousseItem = new TousseItem(); + if(oldTousseItem != null){ + BeanUtils.copyProperties(newTousseItem, oldTousseItem); + newTousseItem.setId(null); + newTousseItem.setInvoicePlan(ra); + newTousseItem.setInvoicePlanID(ra.getId()); + newTousseItem.setIsInvoice(Constants.STR_NO); + newTousseItem.setIsPrinted(false); + newTousseItem.setTousseDefinitionId(newForeignTousseDefinition.getId()); + newTousseItem.setRecyclingAmount(null); + newTousseItem.setSendOutAmount(null); + + //如果是加急的则设置加急 + if(applyUrgentForeignTousseMap.get(foreignTousseDefinitionId) != null){ + newTousseItem.setUrgent(Constants.STR_YES); + newTousseItem.setUrgentAmount(1); + } + }else{ + newTousseItem.setInvoicePlan(ra); + newTousseItem.setInvoicePlanID(ra.getId()); + newTousseItem.setIsInvoice(Constants.STR_NO); + newTousseItem.setIsPrinted(false); + newTousseItem.setTousseDefinitionId(newForeignTousseDefinition.getId()); + + newTousseItem.setAmount(1); + newTousseItem.setDiposable(Constants.STR_NO); + newTousseItem.setDisinfectGoodsMaterials(tousseDefinitionManager + .getMaterialsOfDisinfectionGoods(foreignTousseDefinition, true).toString()); + newTousseItem.setIsCleanedEntirely(supplyRoomConfig.getForeignTousseCleanedEntirely()); + newTousseItem.setPrice(foreignTousseDefinition.getPrice()); + newTousseItem.setRowPrice(foreignTousseDefinition.getPrice()); + newTousseItem.setSupplierName(foreignTousseDefinition.getSupplierName()); + newTousseItem.setTousseName(foreignTousseDefinition.getName()); + newTousseItem.setTousseType(foreignTousseDefinition.getTousseType()); + //如果是加急的则设置加急 + if(applyUrgentForeignTousseMap.get(foreignTousseDefinitionId) != null){ + newTousseItem.setUrgent(Constants.STR_YES); + newTousseItem.setUrgentAmount(1); + } + } + + ra.setTousseBarcodes(tousseBarcodesOfUseRecord); + ra.getApplicationItems().add(newTousseItem); + recyclingApplicationManager.save(ra); + } catch (IllegalAccessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (InvocationTargetException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + break; + } + } + + //如果没有找到,则需要重新创建申请单 + if(foundInvoicePlanByHandleDepartCodingAndType == false){ + //1.创建申请单 + RecyclingApplication recyclingApplication = new RecyclingApplication(); + recyclingApplication.setType(invoicePlanTypeAfterTousseConvert); + recyclingApplication.setApplicant(applicant); + recyclingApplication.setApplicationTime(new Date()); + recyclingApplication.setCommittedStatus(true); + recyclingApplication.setDeliverStatus(null); + recyclingApplication.setDepart(depart); + recyclingApplication.setDepartCoding(departCoding); + recyclingApplication.setHandleDepart(supplyRoomConfig.getDptNameOfForeignTousse()); + recyclingApplication.setHandleDepartCoding(supplyRoomConfig.getDptCodeOfForeignTousse()); + recyclingApplication.setHospitalNumber(hospitalNumber); + recyclingApplication.setOperationRoom(operationRoom); + recyclingApplication.setOrderByFiled(InvoicePlan.ORDERBYFIELD_ONE); + recyclingApplication.setPatientName(patientName); + recyclingApplication.setRecyclingStatus(InvoicePlan.RECYCLINGSTATUS_AWAITRECYCLE); + recyclingApplication.setRemark(remark); + recyclingApplication.setSequence(supplyRoomConfigManager + .getOrgUnitSequence(recyclingApplication.getDepartCoding())); + recyclingApplication.setSerialNumber(serialNumManager + .getSerialNumberStr(SerialNum.TYPE_RECYCLINGAPPLICATION)); + recyclingApplication.setSettleAccountsDepart(depart); + recyclingApplication.setSettleAccountsDepartCoding(departCoding); + recyclingApplication.setSubmitTime(recyclingApplication.getApplicationTime()); + recyclingApplication.setTousseBarcodes(tousseBarcodesOfUseRecord); + recyclingApplication.setTreatmentNum(useRecord.getTreatmentNum()); + recyclingApplication.setUseRecord(useRecord); + recyclingApplication.setPrinted(InvoicePlan.PRINT_STATUS_UNPRINT); + recyclingApplicationManager.saveOrUpdate(recyclingApplication); + + for(Long foreignTousseDefinitionId : applyForeignTousseMap.keySet()){ + //1.先创建新的外来器械包定义关联申请单 + TousseDefinition foreignTousseDefinition = tousseDefinitionManager.get(foreignTousseDefinitionId); + TousseDefinition newForeignTousseDefinition = new TousseDefinition(); + try { + BeanUtils.copyProperties(newForeignTousseDefinition, foreignTousseDefinition); + newForeignTousseDefinition.setId(null); + newForeignTousseDefinition.setMaterialInstances(null); + newForeignTousseDefinition.setDiposableGoodsItems(null); + newForeignTousseDefinition.setInvoicePlanID(recyclingApplication.getId()); + + List materialInstanceList = foreignTousseDefinition.getMaterialInstances(); + if(CollectionUtils.isNotEmpty(materialInstanceList)){ + List newMaterialInstanceList = new ArrayList(); + for (MaterialInstance materialInstance : materialInstanceList) { + MaterialInstance newMaterialInstance = new MaterialInstance(); + BeanUtils.copyProperties(newMaterialInstance, materialInstance); + newMaterialInstance.setId(null); + newMaterialInstanceList.add(newMaterialInstance); + } + newForeignTousseDefinition.setMaterialInstances(newMaterialInstanceList); + } + + List diposableGoodsInstanceList = foreignTousseDefinition.getDiposableGoodsItems(); + if(CollectionUtils.isNotEmpty(diposableGoodsInstanceList)){ + List newDiposableGoodsInstanceList = new ArrayList(); + for (DiposableGoodsInstance diposableGoodsInstance : diposableGoodsInstanceList) { + DiposableGoodsInstance newDiposableGoodsInstance = new DiposableGoodsInstance(); + BeanUtils.copyProperties(newDiposableGoodsInstance, diposableGoodsInstance); + newDiposableGoodsInstance.setId(null); + newDiposableGoodsInstanceList.add(newDiposableGoodsInstance); + } + newForeignTousseDefinition.setDiposableGoodsItems(newDiposableGoodsInstanceList); + } + + tousseDefinitionManager.save(newForeignTousseDefinition); + + //2.创建该外来器械的申请项 + TousseItem oldTousseItem = tousseItemManager.getFirst("tousseDefinitionId=" + foreignTousseDefinitionId); + TousseItem newTousseItem = new TousseItem(); + if(oldTousseItem != null){ + BeanUtils.copyProperties(newTousseItem, oldTousseItem); + newTousseItem.setId(null); + newTousseItem.setInvoicePlan(recyclingApplication); + newTousseItem.setInvoicePlanID(recyclingApplication.getId()); + newTousseItem.setIsInvoice(Constants.STR_NO); + newTousseItem.setIsPrinted(false); + newTousseItem.setTousseDefinitionId(newForeignTousseDefinition.getId()); + newTousseItem.setRecyclingAmount(null); + newTousseItem.setSendOutAmount(null); + + //如果是加急的则设置加急 + if(applyUrgentForeignTousseMap.get(foreignTousseDefinitionId) != null){ + newTousseItem.setUrgent(Constants.STR_YES); + newTousseItem.setUrgentAmount(1); + } + }else{ + newTousseItem.setInvoicePlan(recyclingApplication); + newTousseItem.setInvoicePlanID(recyclingApplication.getId()); + newTousseItem.setIsInvoice(Constants.STR_NO); + newTousseItem.setIsPrinted(false); + newTousseItem.setTousseDefinitionId(newForeignTousseDefinition.getId()); + + newTousseItem.setAmount(1); + newTousseItem.setDiposable(Constants.STR_NO); + newTousseItem.setDisinfectGoodsMaterials(tousseDefinitionManager + .getMaterialsOfDisinfectionGoods(foreignTousseDefinition, true).toString()); + newTousseItem.setIsCleanedEntirely(supplyRoomConfig.getForeignTousseCleanedEntirely()); + newTousseItem.setPrice(foreignTousseDefinition.getPrice()); + newTousseItem.setRowPrice(foreignTousseDefinition.getPrice()); + newTousseItem.setSupplierName(foreignTousseDefinition.getSupplierName()); + newTousseItem.setTousseName(foreignTousseDefinition.getName()); + newTousseItem.setTousseType(foreignTousseDefinition.getTousseType()); + //如果是加急的则设置加急 + if(applyUrgentForeignTousseMap.get(foreignTousseDefinitionId) != null){ + newTousseItem.setUrgent(Constants.STR_YES); + newTousseItem.setUrgentAmount(1); + } + } + + recyclingApplication.setTousseBarcodes(tousseBarcodesOfUseRecord); + recyclingApplication.getApplicationItems().add(newTousseItem); + recyclingApplicationManager.save(recyclingApplication); + } catch (IllegalAccessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (InvocationTargetException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + } + } + //二级供应室是否需要回收(处理所属手术室的包) if (isSecondSupplyRoomNeedRecycle) { /*// 二级供应室申请单 Index: ssts-web/src/main/webapp/disinfectsystem/config/dgszyy/config.js =================================================================== diff -u -r19671 -r19831 --- ssts-web/src/main/webapp/disinfectsystem/config/dgszyy/config.js (.../config.js) (revision 19671) +++ ssts-web/src/main/webapp/disinfectsystem/config/dgszyy/config.js (.../config.js) (revision 19831) @@ -143,5 +143,7 @@ // 清洗篮筐有顺序 haveWashOrder : true, // 是否显示灭菌物品质量监测统计报表 - showSterilizerQualityReport : true + showSterilizerQualityReport : true, + //使用记录转换申请单时外来器械包是否与普通器械包合并到一个申请单 + foreignTousseAndInsideTousseMergeToTheSameComboApplicationAfterUseRecordConvert : true } \ No newline at end of file