Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java =================================================================== diff -u -r16252 -r16363 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java (.../RecyclingRecordManagerImpl.java) (revision 16252) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java (.../RecyclingRecordManagerImpl.java) (revision 16363) @@ -24,6 +24,7 @@ import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; +import com.forgon.Constants; import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.directory.vo.LoginUserData; import com.forgon.disinfectsystem.basedata.becleanitem.service.BeCleanItemManager; @@ -64,6 +65,7 @@ import com.forgon.disinfectsystem.tousse.materialdefinition.service.MaterialDefinitionManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager; import com.forgon.disinfectsystem.tousseitem.service.TousseItemManager; +import com.forgon.disinfectsystem.washanddisinfectmanager.washanddisinfectrecord.service.WashAndDisinfectRecordManager; import com.forgon.log.model.Log; import com.forgon.log.service.LogManager; import com.forgon.serialnumber.model.SerialNum; @@ -118,6 +120,13 @@ private WareHouseManager wareHouseManager; + private WashAndDisinfectRecordManager washAndDisinfectRecordManager; + + public void setWashAndDisinfectRecordManager( + WashAndDisinfectRecordManager washAndDisinfectRecordManager) { + this.washAndDisinfectRecordManager = washAndDisinfectRecordManager; + } + public void setWareHouseManager(WareHouseManager wareHouseManager) { this.wareHouseManager = wareHouseManager; } @@ -538,8 +547,8 @@ private void setClassifyBaskets(JSONArray tousseJson, Map tdMap, RecyclingRecord record, - Map containerMap, - boolean isSecondRecycleForForeignTousse) { + Map containerMap,boolean isSecondRecycleForForeignTousse, + Map toReSetWorkloadMap) { List baskets = record.getClassifyBaskets(); if(baskets == null){ @@ -554,13 +563,15 @@ String basketId = json.optString("basketId"); ClassifyBasket basket = null; - if (StringUtils.isNotBlank(basketId) && !"0".equals(basketId)) { + if (DatabaseUtil.isPoIdValid(basketId)) { basket = getClassifyBasketById(basketMap,basketId); //修改回收记录时已清洗的篮筐不能再追加物品 if(basket != null){ List washRecords = basket.getWashAndDisinfectRecords(); - if(washRecords != null && washRecords.size() > 0 && json.optInt("amount") != 0){ - throw new RuntimeException(basket.getContainerName()+",已入清洗机,不能修改!"); + if(CollectionUtils.isNotEmpty(washRecords) && json.optInt("amount") != 0){ + for (WashAndDisinfectRecord washRecord : washRecords) { + toReSetWorkloadMap.put(washRecord.getId(), washRecord); + } } } }else{ @@ -656,9 +667,10 @@ } } basket.setClassfiedItems(items); - beCleanItemManager.saveOrUpdate(basket); // 设置回收时间 basket.setRecyclingTime(record.getRecyclingTime()); + beCleanItemManager.saveOrUpdate(basket); + //篮筐验重复 String newBasketBarcode = basket.getContainerBarcode(); ClassifyBasket cb = CollectionUtils.find(baskets, new Predicate(){ @@ -677,8 +689,7 @@ //修改篮筐状态 for (String basketBarcode : basketBarcodeMap.keySet()) { ClassifyBasket basket = basketBarcodeMap.get(basketBarcode); - List washRecord = basket.getWashAndDisinfectRecords(); - if (washRecord == null || washRecord.size() == 0) { + if (CollectionUtils.isEmpty(basket.getWashAndDisinfectRecords())) { containerManager.updateContainerStatus(basketBarcode, Container.CONTAINER_STATUS_WASHLOADING); } @@ -811,8 +822,11 @@ //更新申请单 updateInvoicePlan(record, tousseItemJson, deleteTousseItems, idToTDMap, errors, damages, basketItemJson, urgentTousseItems,isForeignTousseApplication); + + //修改已清洗或清洗中的篮筐,清洗工作量需要重新计算 + Map toReSetWorkloadMap = new HashMap(); //设置篮筐及篮筐内物品 - setClassifyBaskets(basketItemJson,idToTDMap,record,containerMap,isSecondRecycleForForeignTousse); + setClassifyBaskets(basketItemJson,idToTDMap,record,containerMap,isSecondRecycleForForeignTousse,toReSetWorkloadMap); //设置回收物品 setRecylingItems(record, tousseItemJson,idToTDMap,urgentTousseItems); //设置回收误差、器械报损 @@ -825,8 +839,40 @@ //updateDepartmentStock(tousseItemJson,record.getDepartCode(),idToTDMap); //设置回收记录状态 setRecyclingRecordStatus(record,confirmation); + //已清洗完成或或清洗中篮筐修改后重新计算清洗工作量 + resetWashRecordWorkLoad(toReSetWorkloadMap); } + /** + * 已清洗完成或或清洗中篮筐修改后重新计算清洗工作量 + * @param toReSetWorkloadMap + */ + private void resetWashRecordWorkLoad(Map toReSetWorkloadMap){ + if(toReSetWorkloadMap.size() > 0){ + SupplyRoomConfig config = supplyRoomConfigManager.getSystemParamsObj(); + boolean secondWashCountWorkload = true; + if (config != null) { + secondWashCountWorkload = config.getSecondWashCountWorkload(); + } + for (Long key : toReSetWorkloadMap.keySet()) { + WashAndDisinfectRecord washRecord = toReSetWorkloadMap.get(key); + if (washRecord != null) { + JSONObject workloadJson = washAndDisinfectRecordManager + .countTotalWorkload(washRecord.getId(), + washRecord.getClassifyBaskets(), + secondWashCountWorkload); + washRecord.setWashMaterialAmount(workloadJson.optInt("washMaterialAmount")); + washRecord.setGeneralMaterialAmount(workloadJson.optInt("generalMaterialAmount")); + washRecord.setOperateMaterialAmount(workloadJson.optInt("operateMaterialAmount")); + washRecord.setForeignMaterialAmount(workloadJson.optInt("foreignMaterialAmount")); + washRecord.setDisinfectMaterialAmount(workloadJson.optInt("disinfectMaterialAmount")); + washRecord.setSecondWashForeignAmount(workloadJson.optInt("secondWashForeignMaterialAmount")); + washAndDisinfectRecordManager.saveOrUpdate(washRecord); + } + } + } + } + private void addLogInfo(JSONObject tousseJson, Long recordId) { if (tousseJson.size() > 0) { appLogManager.saveLog(AcegiHelper.getLoginUser(), @@ -977,6 +1023,16 @@ return container; } + /** + * 说明:清洗完成后篮筐追加的包生成的装配任务清洗记录信息冗余字段并没有赋值 + * @param recyclingRecord + * @param itemJsonList + * @param idToTDMap + * @param confirmation + * @param urgentTousseItems + * @param isForeignTousseApplication + * @param containerBarcodeMap + */ private void setPackingTask(RecyclingRecord recyclingRecord, List itemJsonList, Map idToTDMap, boolean confirmation, @@ -1443,6 +1499,27 @@ } application.setApplicationItems(applicationItemList); application.setRecyclingTime(record.getRecyclingTime()); + + //验证是否已发货 + if(SupplyRoomConfig.INVOICE_ORIGIN_RECYCLING.equals(invoiceOrigin)){ + if(CollectionUtils.isNotEmpty(applicationItemList)){ + for (TousseItem item : applicationItemList) { + if (item.terminated() || + item.isDisposableGoods() || + item.getRecyclingAmount() == null || + Constants.STR_NO.equals(item.getIsRecycling())) { + continue; + } + if (item.getRecyclingAmount() < item.getSendOutAmount()) { + throw new RuntimeException(String.format( + "%s已发货%s个,回收数量不能小于%s个!", + item.getTousseName(), + item.getSendOutAmount(), + item.getSendOutAmount())); + } + } + } + } //设置申请单状态 if(!isForeignTousseApplication){ invoicePlanManager.computeAndSetStatus(application);