Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java =================================================================== diff -u -r37627 -r37651 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java (.../UseRecordManagerImpl.java) (revision 37627) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java (.../UseRecordManagerImpl.java) (revision 37651) @@ -4625,8 +4625,8 @@ //只有当使用记录数量为1时,才启用器械交接 if(useRecordList.size() == 1){ //追加申请项(相同物品的,则数量进行叠加) - List tousseTransitionPlanItemList = - recyclingApplication.appendTousseItemFromUseRecord(objectDao , true , true, false, tousseInstanceWillBeConvertedTousseItemList); + List tousseTransitionPlanItemList = + recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemList); if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ List list = new ArrayList(); @@ -4644,7 +4644,7 @@ recyclingApplication.setUseRecord(tempUseRecord); } //追加申请项(相同物品的,则数量进行叠加) - recyclingApplication.appendTousseItemFromUseRecord(objectDao , true , true, false, tousseInstanceWillBeConvertedTousseItemList); + recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemList); } recyclingApplicationManager.saveOrUpdateRecyclingApplication(recyclingApplication, true); //将转换后申请单对象保存至集合中 @@ -4782,8 +4782,8 @@ //只有当使用记录数量为1时,才启用器械交接 if(useRecordList.size() == 1){ //追加申请项(相同物品的,则数量进行叠加) - List tousseTransitionPlanItemList = - recyclingApplication.appendTousseItemFromUseRecord(objectDao , true , true, false, tousseInstanceWillBeConvertedTousseItemList); + List tousseTransitionPlanItemList = + recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemList); if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ List list = new ArrayList(); @@ -4801,7 +4801,7 @@ recyclingApplication.setUseRecord(tempUseRecord); } //追加申请项(相同物品的,则数量进行叠加) - recyclingApplication.appendTousseItemFromUseRecord(objectDao , true , true, false, tousseInstanceWillBeConvertedTousseItemList); + recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemList); } recyclingApplicationManager.saveOrUpdateRecyclingApplication(recyclingApplication, true); //将转换后申请单对象保存至集合中 @@ -5045,8 +5045,8 @@ //只有当使用记录数量为1时,才启用器械交接 if(useRecordList.size() == 1){ //追加申请项(相同物品的,则数量进行叠加) - List tousseTransitionPlanItemList = - recyclingApplication.appendTousseItemFromUseRecord(objectDao , true , true, false, tousseInstanceWillBeConvertedTousseItemList); + List tousseTransitionPlanItemList = + recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemList); if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ List list = new ArrayList(); @@ -5064,7 +5064,7 @@ recyclingApplication.setUseRecord(tempUseRecord); } //追加申请项(相同物品的,则数量进行叠加) - recyclingApplication.appendTousseItemFromUseRecord(objectDao , true , true, false, tousseInstanceWillBeConvertedTousseItemList); + recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemList); } recyclingApplicationManager.saveOrUpdateRecyclingApplication(recyclingApplication, true); //将转换后申请单对象保存至集合中 @@ -5200,8 +5200,8 @@ //只有当使用记录数量为1时,才启用器械交接 if(useRecordList.size() == 1){ //追加申请项(相同物品的,则数量进行叠加) - List tousseTransitionPlanItemList = - recyclingApplication.appendTousseItemFromUseRecord(objectDao , true , true, false, tousseInstanceWillBeConvertedTousseItemList); + List tousseTransitionPlanItemList = + recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemList); if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ List list = new ArrayList(); @@ -5219,7 +5219,7 @@ recyclingApplication.setUseRecord(tempUseRecord); } //追加申请项(相同物品的,则数量进行叠加) - recyclingApplication.appendTousseItemFromUseRecord(objectDao , true , true, false, tousseInstanceWillBeConvertedTousseItemList); + recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemList); } recyclingApplicationManager.saveOrUpdateRecyclingApplication(recyclingApplication, true); //将转换后申请单对象保存至集合中 @@ -5464,8 +5464,8 @@ //只有当使用记录数量为1时,才启用器械交接 if(useRecordList.size() == 1){ //追加申请项(相同物品的,则数量进行叠加) - List tousseTransitionPlanItemList = - recyclingApplication.appendTousseItemFromUseRecord(objectDao , true , true, false, tousseInstanceWillBeConvertedTousseItemList); + List tousseTransitionPlanItemList = + recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemList); if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ List list = new ArrayList(); @@ -5483,7 +5483,7 @@ recyclingApplication.setUseRecord(tempUseRecord); } //追加申请项(相同物品的,则数量进行叠加) - recyclingApplication.appendTousseItemFromUseRecord(objectDao , true , true, false, tousseInstanceWillBeConvertedTousseItemList); + recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemList); } recyclingApplicationManager.saveOrUpdateRecyclingApplication(recyclingApplication, true); @@ -5617,8 +5617,8 @@ //只有当使用记录数量为1时,才启用器械交接 if(useRecordList.size() == 1){ //追加申请项(相同物品的,则数量进行叠加) - List tousseTransitionPlanItemList = - recyclingApplication.appendTousseItemFromUseRecord(objectDao , true , true, false, tousseInstanceWillBeConvertedTousseItemList); + List tousseTransitionPlanItemList = + recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemList); if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ List list = new ArrayList(); @@ -5636,7 +5636,7 @@ recyclingApplication.setUseRecord(tempUseRecord); } //追加申请项(相同物品的,则数量进行叠加) - recyclingApplication.appendTousseItemFromUseRecord(objectDao , true , true, false, tousseInstanceWillBeConvertedTousseItemList); + recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemList); } recyclingApplicationManager.saveOrUpdateRecyclingApplication(recyclingApplication, true); //将转换后申请单对象保存至集合中 @@ -6953,7 +6953,7 @@ } } if(CollectionUtils.isNotEmpty(tousseInstanceWillBeConvertedTousseItemList)){ - recyclingApplication.appendTousseItemFromUseRecord(objectDao , true , true, false, tousseInstanceWillBeConvertedTousseItemList); + recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemList); } objectDao.saveOrUpdate(recyclingApplication); @@ -7082,7 +7082,7 @@ } } if(CollectionUtils.isNotEmpty(tousseInstanceWillBeConvertedTousseItemList)){ - recyclingApplication.appendTousseItemFromUseRecord(objectDao , true , true, true, tousseInstanceWillBeConvertedTousseItemList); + recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemList); } objectDao.saveOrUpdate(recyclingApplication); Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java =================================================================== diff -u -r37455 -r37651 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 37455) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 37651) @@ -102,6 +102,7 @@ import com.forgon.disinfectsystem.entity.returngoodsrecord.ReturnGoodsRecord; import com.forgon.disinfectsystem.entity.sterilizationmanager.foreignproxydisinfection.ForeignProxyDisinfection; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; +import com.forgon.disinfectsystem.entity.toussetransition.TousseTransitionPlanItem; import com.forgon.disinfectsystem.entity.urgent.UrgentAdditionalInfo; import com.forgon.disinfectsystem.entity.urgent.UrgentLevel; import com.forgon.disinfectsystem.entity.useRecord.UseRecord; @@ -146,7 +147,6 @@ import com.forgon.tools.SqlBuilder; import com.forgon.tools.date.DateTools; import com.forgon.tools.db.DatabaseUtil; -import com.forgon.tools.db.InitDbConnection; import com.forgon.tools.hibernate.BasePoManagerImpl; import com.forgon.tools.json.JSONUtil; import com.forgon.tools.string.StringTools; @@ -209,8 +209,6 @@ private ProjectManager projectManager; - private InitDbConnection dbConnection; - private ProjectDao projectDaoMybatis; private OperationManager operationManager; @@ -230,10 +228,6 @@ this.projectDaoMybatis = projectDaoMybatis; } - public void setDbConnection(InitDbConnection dbConnection) { - this.dbConnection = dbConnection; - } - public void setUrgentLevelManager(UrgentLevelManager urgentLevelManager) { this.urgentLevelManager = urgentLevelManager; } @@ -10995,4 +10989,421 @@ return printConfigInvoicePlanMap; } + + /** + * 追加申请项,并持久化 + * @param objectDao + * @param otherUseRecord 是否为第一个使用记录外的另一个使用记录(即转换申请单合并的第二条或第二条以上的使用记录) + * @param needAddUrgentAmountFromTousseInstance 是否把包实例加急数量累加到申请项(对于新创建的申请单,不需要。合并转换到已有申请单则需要) + * @param updateAmount 是否直接修改tousseItem的数量,值为true时,直接修改amount;值为false时,只修改editAmount + * @param tousseInstanceWillBeConvertedTousseItemList 实际转换的器械包实例 + * 如果不是,则原申请项的数量保持不变,否则原申请项的基础上进行数据叠加 + */ + public List appendTousseItemFromUseRecord(RecyclingApplication recyclingApplication, boolean otherUseRecord , boolean needAddUrgentAmountFromTousseInstance, boolean updateAmount, + List tousseInstanceWillBeConvertedTousseItemList){ + + UseRecord useRecord = recyclingApplication.getUseRecord(); + if(useRecord != null){ + List tousseItemList = recyclingApplication.getApplicationItems(); + if(tousseItemList == null){ + tousseItemList = new ArrayList(); + } + if(CollectionUtils.isNotEmpty(tousseItemList)){ + for (TousseItem tousseItem : tousseItemList) { + if(tousseItem.getEditAmount() == null){ + tousseItem.setEditAmount(tousseItem.getAmount()); + } + } + } + if(CollectionUtils.isEmpty(tousseInstanceWillBeConvertedTousseItemList)){ + tousseInstanceWillBeConvertedTousseItemList = useRecord.getTousseInstanceWillBeConvertedTousseItemList(objectDao); + } + if(CollectionUtils.isNotEmpty(tousseInstanceWillBeConvertedTousseItemList)){ + Map willBeConvertedTousseDefinitionAmountMap = new HashMap(); + List tousseTransitionPlanItemList = new ArrayList(); + //循环要转换申请单的包实例 + for(TousseInstance tousseInstance : tousseInstanceWillBeConvertedTousseItemList){ + TousseDefinition tdOfTousseInstance = tousseInstance.getTousseDefinition(); + if(tdOfTousseInstance == null){ + throw new RuntimeException("未找到" + tousseInstance.getTousseName() + "的包定义数据!"); + } + + //如果申请单的单类型是自定义器械包申请单、但包实例的包定义类型不是自定义器械包时,continue + if(StringUtils.equals(InvoicePlan.TYPE_CUSTOM_TOUSSE_APPLIACTION_FORM, recyclingApplication.getType())){ + if(!tdOfTousseInstance.isCustomTousse()){ + continue; + } + }else{ + //或者申请单的单类型不是自定义器械包申请单、但包实例的包定义类型又是自定义器械包时,continue + if(tdOfTousseInstance.isCustomTousse()){ + continue; + } + } + + //判断包实例被转换后的申请单的处理科室与该申请单的处理科室不一致时,则continue本轮循环,进入下一轮循环 + if(!StringUtils.equals(getTousseInstanceConvertApplicationHandleDepartCode(useRecord.getDepartCoding() , tousseInstance) , recyclingApplication.getHandleDepartCoding())){ + continue; + } + //包实例录使用记录时所选的加急级别 + UrgentLevel urgentLevelOfTousseInstance = tousseInstance.getUrgentLevelForUseRecord(); + //包实例所属的包定义id + Long tdId = tdOfTousseInstance.getId(); + TousseItem currentTousseItem = null; + if(CollectionUtils.isNotEmpty(tousseItemList)){ + boolean existsTousseItem = false; + //循环之前的每个申请项 + for (TousseItem tousseItem : tousseItemList) { + Long tousseItemTousseDefinitionId = tousseItem.getTousseDefinitionId(); + TousseDefinition tousseItemCutomerTd = (TousseDefinition)objectDao.getBySql(TousseDefinition.class.getSimpleName(), " where id=" + tousseItemTousseDefinitionId); + //如果是录入到使用记录的包实例及申请项的类型自定义器械包,且名称相同,又不是合并申请单时 + if(tousseItemCutomerTd.isCustomTousse() && tdOfTousseInstance.isCustomTousse() + && StringUtils.equals(tousseItemCutomerTd.getName(), tdOfTousseInstance.getName()) && !otherUseRecord){ + currentTousseItem = tousseItem; + existsTousseItem = true; + break; + } + //自定义器械包只能用祖先id进行比较(申请项的包定义id为根据申请单创建的包定义id,而包实例的) + if(tousseItemCutomerTd.getAncestorID() != null && (tdId.longValue() == tousseItemCutomerTd.getAncestorID().longValue())){ + //是否为第二个或第二个以后的使用记录转换合并到本申请单 + if(otherUseRecord && updateAmount){ + tousseItem.setAmount(tousseItem.getAmount() + 1); + } + if(!updateAmount){ + if(tousseItem.getEditAmount() == null){ + tousseItem.setEditAmount(tousseItem.getAmount() + 1); + }else{ + tousseItem.setEditAmount(tousseItem.getEditAmount() + 1); + } + } + /*if(Constants.STR_YES.equals(tousseInstance.getIsUrgentForUseRecord())){ + tousseItem.setUrgentAmount(tousseItem.getUrgentAmount() + 1); + }*/ + //申请项的加急级别对象 + UrgentLevel urgentLevelOfTousseItem = tousseItem.getUrgentLevelObj(); + if(urgentLevelOfTousseInstance != null){ + if(urgentLevelOfTousseItem != null){ + Integer gradeOfTousseInstance = urgentLevelOfTousseInstance.getGrade(); + Integer gradeOfTousseItem = urgentLevelOfTousseItem.getGrade(); + if(gradeOfTousseInstance != null){ + if(gradeOfTousseItem != null){ + if(gradeOfTousseInstance.intValue() > gradeOfTousseItem.intValue()){ + tousseItem.setUrgentLevelObj(urgentLevelOfTousseInstance); + } + }else{ + tousseItem.setUrgentLevelObj(urgentLevelOfTousseInstance); + } + } + }else{ + tousseItem.setUrgentLevelObj(urgentLevelOfTousseInstance); + } + tousseItem.setUrgentLevel(tousseItem.getUrgentLevelObj() == null ? null : tousseItem.getUrgentLevelObj().getName()); + if(needAddUrgentAmountFromTousseInstance){ + tousseItem.setUrgentAmount(MathTools.add(tousseItem.getUrgentAmount(), 1).intValue()); + tousseItem.setRowPrice(MathTools.add(tousseItem.getRowPrice() , tousseInstance.getTousseDefinition().getPrice()).doubleValue()); + } + } + tousseItem.setPrice(tousseInstance.getTousseDefinition().getPrice()); + objectDao.saveOrUpdate(tousseItem); + currentTousseItem = tousseItem; + existsTousseItem = true; + break; + } + } + + if(existsTousseItem == false){ + currentTousseItem = new TousseItem(); + currentTousseItem.setDiposable(TousseItem.DIPOSABLE_NO); + currentTousseItem.setInvoicePlan(recyclingApplication); + currentTousseItem.setInvoicePlanID(recyclingApplication.getId()); + currentTousseItem.setTousseName(tousseInstance.getTousseName()); + if(updateAmount){ + currentTousseItem.setAmount(1); + } + currentTousseItem.setEditAmount(1); + if(urgentLevelOfTousseInstance != null){ + if(needAddUrgentAmountFromTousseInstance){ + currentTousseItem.setUrgentAmount(currentTousseItem.getUrgentAmount() + 1); + currentTousseItem.setRowPrice(MathTools.mul(tdOfTousseInstance.getPrice() , 1).doubleValue()); + } + } + currentTousseItem.setUrgentLevelObj(urgentLevelOfTousseInstance); + currentTousseItem.setUrgentLevel(currentTousseItem.getUrgentLevelObj() == null ? null : currentTousseItem.getUrgentLevelObj().getName()); + currentTousseItem.setUnit(tdOfTousseInstance.getUnit()); + currentTousseItem.setIsTraceable(tdOfTousseInstance.getIsTraceable()); + currentTousseItem.setPrice(tdOfTousseInstance.getPrice()); + currentTousseItem.setTousseType(tdOfTousseInstance.getTousseType()); + currentTousseItem.setTousseDefinitionId(tdOfTousseInstance.getId()); + currentTousseItem.setMaterialAmount(tdOfTousseInstance.getMaterialAmount()); + currentTousseItem.setAncestorID(tdOfTousseInstance.getAncestorID()); + //设置发货数量依据(取包定义的发货数量依据) + currentTousseItem.setInvoiceAmountMode(tdOfTousseInstance.getInvoiceAmountMode()); + currentTousseItem.setIsInvoice(tdOfTousseInstance.getIsInvoice()); + currentTousseItem.setIsCleanedEntirely(tdOfTousseInstance.getIsCleanedEntirely()); + currentTousseItem.setExpressRecycling(tdOfTousseInstance.getExpressRecycling()); + currentTousseItem.setIsRecycling(tdOfTousseInstance.getIsRecycling()); + currentTousseItem.setIsApplyEntireTousse(tdOfTousseInstance.getIsApplyEntireTousse()); + if(tdOfTousseInstance.isIDCardDisabled() || StringUtils.isBlank(tdOfTousseInstance.getIsDisableIDCard())){ + currentTousseItem.setIsThereIdentificationCard(com.forgon.Constants.STR_NO); + }else{ + currentTousseItem.setIsThereIdentificationCard(com.forgon.Constants.STR_YES); + } + objectDao.saveOrUpdate(currentTousseItem); + tousseItemList.add(currentTousseItem); + } + }else{ + currentTousseItem = new TousseItem(); + currentTousseItem.setDiposable(TousseItem.DIPOSABLE_NO); + currentTousseItem.setInvoicePlan(recyclingApplication); + currentTousseItem.setInvoicePlanID(recyclingApplication.getId()); + currentTousseItem.setTousseName(tousseInstance.getTousseName()); + if(updateAmount){ + currentTousseItem.setAmount(1); + } + currentTousseItem.setEditAmount(1); + if(tousseInstance.getUrgentLevelForUseRecord() != null){ + currentTousseItem.setUrgentAmount(currentTousseItem.getUrgentAmount() + 1); + } + currentTousseItem.setUnit(tdOfTousseInstance.getUnit()); + currentTousseItem.setIsTraceable(tdOfTousseInstance.getIsTraceable()); + currentTousseItem.setPrice(tdOfTousseInstance.getPrice()); + currentTousseItem.setRowPrice(MathTools.mul(tdOfTousseInstance.getPrice() , 1).doubleValue()); + currentTousseItem.setTousseType(tdOfTousseInstance.getTousseType()); + currentTousseItem.setTousseDefinitionId(tdOfTousseInstance.getId()); + currentTousseItem.setMaterialAmount(tdOfTousseInstance.getMaterialAmount()); + currentTousseItem.setAncestorID(tdOfTousseInstance.getAncestorID()); + //设置发货数量依据(取包定义的发货数量依据) + currentTousseItem.setInvoiceAmountMode(tdOfTousseInstance.getInvoiceAmountMode()); + currentTousseItem.setIsInvoice(tdOfTousseInstance.getIsInvoice()); + currentTousseItem.setIsCleanedEntirely(tdOfTousseInstance.getIsCleanedEntirely()); + currentTousseItem.setExpressRecycling(tdOfTousseInstance.getExpressRecycling()); + currentTousseItem.setIsRecycling(tdOfTousseInstance.getIsRecycling()); + currentTousseItem.setIsApplyEntireTousse(tdOfTousseInstance.getIsApplyEntireTousse()); + if(tdOfTousseInstance.isIDCardDisabled() || StringUtils.isBlank(tdOfTousseInstance.getIsDisableIDCard())){ + currentTousseItem.setIsThereIdentificationCard(com.forgon.Constants.STR_NO); + }else{ + currentTousseItem.setIsThereIdentificationCard(com.forgon.Constants.STR_YES); + } + currentTousseItem.setUrgentLevelObj(urgentLevelOfTousseInstance); + currentTousseItem.setUrgentLevel(currentTousseItem.getUrgentLevelObj() == null ? null : currentTousseItem.getUrgentLevelObj().getName()); + objectDao.saveOrUpdate(currentTousseItem); + tousseItemList.add(currentTousseItem); + } + + //转换申请单的包定义及转换数量map + Integer willBeConvertedAmount = willBeConvertedTousseDefinitionAmountMap.get(tdOfTousseInstance); + if(willBeConvertedAmount == null){ + willBeConvertedAmount = 1; + }else{ + willBeConvertedAmount++; + } + willBeConvertedTousseDefinitionAmountMap.put(tdOfTousseInstance, willBeConvertedAmount); + + //如果包定义为要回收且器械包类型为器械包时又或者包类型为自定义器械包时,构造预回收计划单明细 + if(tdOfTousseInstance.isCustomTousse() || (tdOfTousseInstance.isInsideTousse() && com.forgon.Constants.STR_YES.equals(tdOfTousseInstance.getIsConvertApplyGoods()))){ + TousseTransitionPlanItem tousseTransitionPlanItem = null; + if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ + boolean foundTousseTransitionPlanItemInList = false; + for (TousseTransitionPlanItem item : tousseTransitionPlanItemList) { + if(item.getTousseItemId() != null && currentTousseItem.getId() != null + && item.getTousseItemId().longValue() == currentTousseItem.getId().longValue()){ + tousseTransitionPlanItem = item; + tousseTransitionPlanItem.setAmount(tousseTransitionPlanItem.getAmount() + 1); + if(tousseInstance.getUrgentLevelForUseRecord() != null){ + tousseTransitionPlanItem.setUrgentAmount(tousseTransitionPlanItem.getUrgentAmount() + 1); + } + foundTousseTransitionPlanItemInList = true; + break; + } + } + if(foundTousseTransitionPlanItemInList == false){ + tousseTransitionPlanItem = new TousseTransitionPlanItem(); + tousseTransitionPlanItem.setTousseItemId(currentTousseItem.getId()); + tousseTransitionPlanItem.setAmount(1); + if(tousseInstance.getUrgentLevelForUseRecord() != null){ + tousseTransitionPlanItem.setUrgentAmount(1); + } + tousseTransitionPlanItemList.add(tousseTransitionPlanItem); + } + }else{ + tousseTransitionPlanItem = new TousseTransitionPlanItem(); + tousseTransitionPlanItem.setTousseItemId(currentTousseItem.getId()); + tousseTransitionPlanItem.setAmount(1); + if(tousseInstance.getUrgentLevelForUseRecord() != null){ + tousseTransitionPlanItem.setUrgentAmount(1); + } + tousseTransitionPlanItemList.add(tousseTransitionPlanItem); + } + } + } + + //追加物品绑定的申请项 + newAppendTousseItemListFromBinding(tousseTransitionPlanItemList, willBeConvertedTousseDefinitionAmountMap, tousseItemList, recyclingApplication); + + recyclingApplication.setApplicationItems(tousseItemList); + recyclingApplication.setUrgentInfo(); + return tousseTransitionPlanItemList; + } + } + return null; + } + + /** + * 追加物品绑定的申请项 + * @param tousseTransitionPlanItemList + * @param willBeConvertedTousseDefinitionAmountMap + * @param recyclingApplication + */ + private void newAppendTousseItemListFromBinding(List tousseTransitionPlanItemList, + Map willBeConvertedTousseDefinitionAmountMap, + List tousseItemList, + RecyclingApplication recyclingApplication) { + + if(MapUtils.isEmpty(willBeConvertedTousseDefinitionAmountMap) || recyclingApplication == null + || tousseItemList == null){ + return; + } + + List newAppendTousseItemListFromBinding = new ArrayList(); + for (TousseDefinition tousseDefinition : willBeConvertedTousseDefinitionAmountMap.keySet()) { + Integer amount = willBeConvertedTousseDefinitionAmountMap.get(tousseDefinition); + //获取该器械包所绑定的器械包 + BindGoodVo bindGoodVo = new BindGoodVo(); + bindGoodVo.setBindCount(amount); + bindGoodVo.setGoodId(tousseDefinition.getId()); + bindGoodVo.setGoodName(tousseDefinition.getName()); + bindGoodVo.setGoodType(tousseDefinition.getTousseType()); + JSONArray bindGoodVoJsonArray = tousseDefinitionManager.getBindGoods(bindGoodVo, recyclingApplication.getSettleAccountsDepartCoding(), recyclingApplication.getHandleDepartCoding(), false); + if(bindGoodVoJsonArray != null && bindGoodVoJsonArray.size() > 0){ + for (int i = 0; i < bindGoodVoJsonArray.size(); i++) { + JSONObject jsonObject = bindGoodVoJsonArray.optJSONObject(i); + newAppendTousseItemListFromBinding.add(new TousseItem(jsonObject.optString("name") + , 0 + , jsonObject.optInt("count") + , jsonObject.optDouble("price") + , TousseItem.DIPOSABLE_NO + , jsonObject.optString("isApplyEntireTousse") + , jsonObject.optString("isCleanedEntirely") + , jsonObject.optString("isRecycling") + , jsonObject.optString("isTraceable") + , jsonObject.optLong("id") + , null + , null + , jsonObject.optString("unit") + , jsonObject.optString("tousseType") + , jsonObject.optString("isInvoice") + ) + ); + } + } + } + + if(CollectionUtils.isEmpty(newAppendTousseItemListFromBinding)){ + return; + } + + //嵌套循环源申请项与绑定得出的申请项 + if(CollectionUtils.isNotEmpty(tousseItemList)){ + for (TousseItem newAppendTousseItemFromBinding : newAppendTousseItemListFromBinding) { + //判断所绑定的物品在源申请项中是否已经存在 + boolean newTousseItemExistsInSourceTousseItems = false; + for (TousseItem applicationItem : tousseItemList) { + if(newAppendTousseItemFromBinding.getTousseDefinitionId() != null + && applicationItem.getTousseDefinitionId() != null + && newAppendTousseItemFromBinding.getTousseDefinitionId().longValue() == applicationItem.getTousseDefinitionId().longValue()){ + newTousseItemExistsInSourceTousseItems = true; + newAppendTousseItemFromBinding.setInvoicePlan(recyclingApplication); + applicationItem.setEditAmount(applicationItem.getEditAmount() + newAppendTousseItemFromBinding.getEditAmount()); + } + + } + if(newTousseItemExistsInSourceTousseItems == false){ + newAppendTousseItemFromBinding.setInvoicePlan(recyclingApplication); + tousseItemList.add(newAppendTousseItemFromBinding); + } + } + }else{ + tousseItemList = newAppendTousseItemListFromBinding; + } + + //构建器械交接单明细(预回收计划明细) + buildTransitionPlanItemListByTousseItem(tousseTransitionPlanItemList, newAppendTousseItemListFromBinding); + } + + /** + * 构建器械交接单明细(预回收计划明细) + * @param applicationItems + * @return + */ + private List buildTransitionPlanItemListByTousseItem(List tousseTransitionPlanItemList, List applicationItems) { + if(CollectionUtils.isEmpty(applicationItems)){ + return tousseTransitionPlanItemList; + } + if(tousseTransitionPlanItemList == null){ + tousseTransitionPlanItemList = new ArrayList(); + } + for (TousseItem currentTousseItem : applicationItems) { + TousseDefinition tdOfTousseInstance = tousseDefinitionManager.get(currentTousseItem.getTousseDefinitionId()); + //如果包定义为要回收且器械包类型为器械包时又或者包类型为自定义器械包时,构造预回收计划单明细 + if(tdOfTousseInstance.isCustomTousse() || (tdOfTousseInstance.isInsideTousse() && com.forgon.Constants.STR_YES.equals(tdOfTousseInstance.getIsConvertApplyGoods()))){ + TousseTransitionPlanItem tousseTransitionPlanItem = null; + if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ + boolean foundTousseTransitionPlanItemInList = false; + for (TousseTransitionPlanItem item : tousseTransitionPlanItemList) { + if(item.getTousseItemId() != null && currentTousseItem.getId() != null + && item.getTousseItemId().longValue() == currentTousseItem.getId().longValue()){ + tousseTransitionPlanItem = item; + tousseTransitionPlanItem.setAmount(tousseTransitionPlanItem.getAmount() + currentTousseItem.getAmount()); + if(currentTousseItem.getUrgentAmount() != null && currentTousseItem.getUrgentAmount() > 0){ + tousseTransitionPlanItem.setUrgentAmount(tousseTransitionPlanItem.getUrgentAmount() + currentTousseItem.getUrgentAmount()); + } + foundTousseTransitionPlanItemInList = true; + break; + } + } + if(foundTousseTransitionPlanItemInList == false){ + tousseTransitionPlanItem = new TousseTransitionPlanItem(); + tousseTransitionPlanItem.setTousseItemId(currentTousseItem.getId()); + tousseTransitionPlanItem.setAmount(currentTousseItem.getAmount()); + if(currentTousseItem.getUrgentAmount() != null && currentTousseItem.getUrgentAmount() > 0){ + tousseTransitionPlanItem.setUrgentAmount(currentTousseItem.getUrgentAmount()); + } + tousseTransitionPlanItemList.add(tousseTransitionPlanItem); + } + }else{ + tousseTransitionPlanItem = new TousseTransitionPlanItem(); + tousseTransitionPlanItem.setTousseItemId(currentTousseItem.getId()); + tousseTransitionPlanItem.setAmount(currentTousseItem.getAmount()); + if(currentTousseItem.getUrgentAmount() != null && currentTousseItem.getUrgentAmount() > 0){ + tousseTransitionPlanItem.setUrgentAmount(currentTousseItem.getUrgentAmount()); + } + tousseTransitionPlanItemList.add(tousseTransitionPlanItem); + } + } + } + return tousseTransitionPlanItemList; + } + + /** + * 根据器械包实例与使用记录录入科室查询该物品转换生成申请单的处理科室 + * @return + */ + private String getTousseInstanceConvertApplicationHandleDepartCode(String useRecordDepartCode , TousseInstance tousseInstance){ + //处理科室 + String handleDepartCode = tousseInstance.getTousseDefinition().getHandlerDepartCode(); + String condition = " where po.tousseDefinitionId="+ tousseInstance.getTousseDefinition().getId() + +" and po.orgUnitCode in (select cssdOrgUnitCode from "+ CssdServiceDepts.class.getSimpleName() + +" csd where csd.cssdOrgUnitCode = po.orgUnitCode " + +" and csd.clinicOrgUnitCode='"+ useRecordDepartCode + +"' and csd.tousseType='"+ CssdServiceDepts.TOUSSETYPE_TOUSSE +"')"; + @SuppressWarnings("unchecked") + List cssdHandleToussesList = objectDao.findBySql(CssdHandleTousses.class.getSimpleName(), condition); + if(CollectionUtils.isNotEmpty(cssdHandleToussesList) && cssdHandleToussesList.size() == 1){ + CssdHandleTousses cssdHandleTousses = cssdHandleToussesList.get(0); + if(StringUtils.isNotBlank(cssdHandleTousses.getOrgUnitCode())){ + handleDepartCode = cssdHandleTousses.getOrgUnitCode(); + } + } + return handleDepartCode; + } + } Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManager.java =================================================================== diff -u -r36541 -r37651 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManager.java (.../RecyclingApplicationManager.java) (revision 36541) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManager.java (.../RecyclingApplicationManager.java) (revision 37651) @@ -22,6 +22,7 @@ import com.forgon.disinfectsystem.entity.recyclingapplication.RecyclingApplication; import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingRecord; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; +import com.forgon.disinfectsystem.entity.toussetransition.TousseTransitionPlanItem; import com.forgon.disinfectsystem.entity.urgent.UrgentLevel; import com.forgon.disinfectsystem.entity.useRecord.UseRecord; import com.forgon.disinfectsystem.exception.RecyclingRecordException; @@ -674,4 +675,16 @@ */ public Map> getPrintConfigInvoicePlanMap(String startDate, String endDate, String printConfigIDs); + /** + * 追加申请项,并持久化 + * @param objectDao + * @param otherUseRecord 是否为第一个使用记录外的另一个使用记录(即转换申请单合并的第二条或第二条以上的使用记录) + * @param needAddUrgentAmountFromTousseInstance 是否把包实例加急数量累加到申请项(对于新创建的申请单,不需要。合并转换到已有申请单则需要) + * @param updateAmount 是否直接修改tousseItem的数量,值为true时,直接修改amount;值为false时,只修改editAmount + * @param tousseInstanceWillBeConvertedTousseItemList 实际转换的器械包实例 + * 如果不是,则原申请项的数量保持不变,否则原申请项的基础上进行数据叠加 + */ + public List appendTousseItemFromUseRecord(RecyclingApplication recyclingApplication, boolean otherUseRecord , boolean needAddUrgentAmountFromTousseInstance, boolean updateAmount, + List tousseInstanceWillBeConvertedTousseItemList); + }