Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java =================================================================== diff -u -r37374 -r37452 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 37374) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 37452) @@ -9516,6 +9516,9 @@ String remark = ""; boolean recalculateDeliverStatus = false; //是否需要重新计算发货状态 List list = new ArrayList(); + Map notRecycleTousseDefinitionIdChangeAmountMap = new HashMap(); + Map notRecycleTousseDefinitionMap = new HashMap(); + Map notRecycleTousseItemMap = new HashMap(); for (TousseItemVo tousseItemVo : newTousseItemVoList) { Long tousseItemId = tousseItemVo.getId(); if (DatabaseUtil.isPoIdValid(tousseItemId)) { @@ -9599,13 +9602,32 @@ } recalculateDeliverStatus = true; remark += String.format("物品(%s)申请数量从%s改成%s;", tousseItem.getTousseName(), originalAmount, amount); + + Long tousseDefinitionId = tousseItem.getTousseDefinitionId(); + if (DatabaseUtil.isPoIdValid(tousseDefinitionId)) { + TousseDefinition td = tousseDefinitionManager.get(tousseDefinitionId); + //不回收的器械包需要联动修改装配任务 + if (TousseDefinition.PACKAGE_TYPE_DRESSING.equals(td.getTousseType()) + || (TousseDefinition.STR_YES.equals(td.getIsPacking()) + && TousseDefinition.STR_NO.equals(td.getIsRecycling()))) { + Integer changeAmount = amount - originalAmount; + notRecycleTousseDefinitionIdChangeAmountMap.put(tousseDefinitionId, changeAmount); + notRecycleTousseDefinitionMap.put(tousseDefinitionId, td); + notRecycleTousseItemMap.put(tousseDefinitionId, tousseItem); + } + } } } list.add(tousseItem); } } } + //是否回收为"否"的器械包(或敷料包)进行数量干预后,修改装配任务的待装配数量ZSRY-65 + if(MapUtils.isNotEmpty(notRecycleTousseDefinitionIdChangeAmountMap)){ + updatePackingTaskAfterInterveneApplyAmount(recyclingApplication, notRecycleTousseDefinitionIdChangeAmountMap, notRecycleTousseDefinitionMap, notRecycleTousseItemMap); + } + //重新计算发货状态 if (recalculateDeliverStatus) { invoicePlanManager.computeAndSetInvoiceStatus(recyclingApplication); @@ -9633,7 +9655,142 @@ return JSONUtil.buildJsonObject(true, "干预成功!"); } -//////////////hrp同步//////////////////////////// + + /** + * 干预申请数量时,修改装配任务的待装配数量ZSRY-65 + * @param notRecycletousseDefinitionMap + * @param notRecycleTousseItemMap + * @param recyclingApplication + * @param notRecycletousseDefinitionChangeAmountMap + */ + private void updatePackingTaskAfterInterveneApplyAmount(RecyclingApplication application, Map notRecycletousseDefinitionIdChangeAmountMap, Map notRecycletousseDefinitionMap, Map notRecycleTousseItemMap) { + if(application == null || MapUtils.isEmpty(notRecycletousseDefinitionIdChangeAmountMap)){ + return; + } + Set tdids = new HashSet(); + tdids.addAll(notRecycletousseDefinitionIdChangeAmountMap.keySet()); + //查询待装配任务 + Map packingTaskMap = packingManager.getPackingTaskMap(application.getId(), PackingTask.TASK_APPLICATION, tdids); + //查询已经装配的数量 + Map packedAmountMap = loadPackedAmountMap(application.getId(), tdids); + List deletePackingTaskList = new ArrayList(); + List newPackingTaskList = new ArrayList(); + for (Entry entry : notRecycletousseDefinitionIdChangeAmountMap.entrySet()) { + Long tousseDefinitionId = entry.getKey(); + Integer amount = entry.getValue(); + TousseDefinition td = notRecycletousseDefinitionMap.get(tousseDefinitionId); + TousseItem ti = notRecycleTousseItemMap.get(tousseDefinitionId); + if(amount == null || amount == 0 || td == null || ti == null){ + continue; + } + PackingTask packingTask = packingTaskMap.get(tousseDefinitionId); + if(amount < 0){ + //减少申请数量时,需要扣减待装配数量,已经装配数量不需要处理 + if(packingTask == null){ + continue; + } + if(packingTask.getUnPackAmount() + amount <= 0){ + deletePackingTaskList.add(packingTask); + }else{ + packingTask.setUnPackAmount(packingTask.getUnPackAmount() + amount); + packingTask.setAmount(packingTask.getAmount() + amount); + } + }else{ + //已经装配数量 + Integer packedAmount = packedAmountMap.get(tousseDefinitionId); + //申请数量减去已经装配数量 + Integer needAddAmount = MathTools.sub(ti.getAmount(), packedAmount).intValue(); + if(needAddAmount <= 0){ + //申请数量,小于或者等于已装配数量时,不需要修改装配任务 + continue; + } + + if(needAddAmount < amount){ + //待装配数量+已装配数量<=申请数量 + amount = needAddAmount; + } + + if (packingTask == null) { + PackingTask task = new PackingTask(); + /*Integer urgentAmount = ti.getUrgentAmount(); + if(urgentAmount != null && urgentAmount > 0){ + task.setUrgentAmount(urgentAmount); + task.setUrgentLevel(ti.getUrgentLevel()); + task.setUrgentLevelObj(ti.getUrgentLevelObj()); + }*/ + task.setAmount(amount); + task.setUnPackAmount(amount); + task.setTousseDefinition(td); + task.setStartTime(new Date()); + task.setStatus(PackingTask.STATUS_AWAIT_PACKING); + task.setOrgUnitCoding(application.getHandleDepartCoding()); + task.setSourceId(application.getId()); + task.setTaskType(PackingTask.TASK_APPLICATION); + task.setBasketBarcode(null); + task.setRecyclingBasketName(null); + task.setDepartment(application.getDepart()); + task.setDepartCoding(application.getDepartCoding()); + task.setSettleAccountsDepartCoding(application.getSettleAccountsDepartCoding()); + task.setRemarkOfApplyGoods(ti.getRemarkOfApplyGoods()); + newPackingTaskList.add(task); + }else{ + packingTask.setUnPackAmount(packingTask.getUnPackAmount() + amount); + packingTask.setAmount(packingTask.getAmount() + amount); + } + } + } + + //删除装配任务 + if(CollectionUtils.isNotEmpty(deletePackingTaskList)){ + for (PackingTask pt : deletePackingTaskList) { + packingManager.delete(pt, "干预申请单申请数量"); + } + } + //保存装配任务 + if(CollectionUtils.isNotEmpty(newPackingTaskList)){ + for (PackingTask pt : newPackingTaskList) { + packingManager.save(pt); + } + } + + } + + /** + * 查询申请单上物品已经装配的数量 + * @param applicationId + * @param tdids + * @return + */ + private Map loadPackedAmountMap(Long applicationId, Set tdids) { + Map packedTousseAmountMap = new HashMap(); + if(!DatabaseUtil.isPoIdValid(applicationId)){ + return packedTousseAmountMap; + } + String sql = String.format("select po.id, po.tousseDefinition_id from %s po " + + "where po.invoicePlanID = %s and %s ", + TousseInstance.class.getSimpleName(), + applicationId, + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("tousseDefinition_id", tdids)); + ResultSet rs = null; + try { + rs = objectDao.executeSql(sql); + while(rs.next()){ + Long tousseDefinition_id = rs.getLong("tousseDefinition_id"); + Integer amount = packedTousseAmountMap.get(tousseDefinition_id); + if(amount == null){ + amount = 0; + } + packedTousseAmountMap.put(tousseDefinition_id, amount + 1); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + return packedTousseAmountMap; + } + + //////////////hrp同步//////////////////////////// @Override public JSONObject syncHrpDisposableGoodsInvoicePlan(List hrpInvoicePlans) { JSONObject resultObject = new JSONObject();