Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/InvoicePlan.java =================================================================== diff -u -r14844 -r14988 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/InvoicePlan.java (.../InvoicePlan.java) (revision 14844) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/InvoicePlan.java (.../InvoicePlan.java) (revision 14988) @@ -28,7 +28,6 @@ import com.forgon.disinfectsystem.common.Constants; import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingRecord; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; -import com.forgon.disinfectsystem.vo.TousseItemVo; import com.forgon.tools.hibernate.ObjectDao; /** Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/container/service/ContainerManagerImpl.java =================================================================== diff -u -r14586 -r14988 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/container/service/ContainerManagerImpl.java (.../ContainerManagerImpl.java) (revision 14586) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/container/service/ContainerManagerImpl.java (.../ContainerManagerImpl.java) (revision 14988) @@ -77,7 +77,10 @@ * @return */ public Container getContainerByBarcode(String barcode){ - return (Container) objectDao.getByProperty(Container.class.getSimpleName(), "barcode", barcode); + if(StringUtils.isNotBlank(barcode)){ + return (Container) objectDao.getByProperty(Container.class.getSimpleName(), "barcode", barcode); + } + return null; } /** Index: ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/service/WashAndDisinfectRecordManagerImpl.java =================================================================== diff -u -r14910 -r14988 --- ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/service/WashAndDisinfectRecordManagerImpl.java (.../WashAndDisinfectRecordManagerImpl.java) (revision 14910) +++ ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/service/WashAndDisinfectRecordManagerImpl.java (.../WashAndDisinfectRecordManagerImpl.java) (revision 14988) @@ -153,158 +153,177 @@ WashAndDisinfectRecord washRecord, Map classifyBasketInfoMap, List materials) { - if (washRecord == null) { + if (washRecord == null) return; - } - Set classifyBasketIds = classifyBasketInfoMap.keySet(); - classifyBasketIds = SetUtils.emptyIfNull(classifyBasketIds); - materials = ListUtils.emptyIfNull(materials); + + Map toDeleteBasketMap = getOldClassifyBasketMap(washRecord); + Rinser rinser = rinserManager.getRinserByName(washRecord.getDisinfectIdentification()); - boolean isNewRecord = (washRecord.getId() == null || washRecord.getId() <= 0); + boolean isNewRecord = !DatabaseUtil.isPoIdValid(washRecord.getId()); if (isNewRecord) { - washRecord.setId(null); - washRecord.setSerialNumber(serialNumManager - .getSerialNumberStr(SerialNum.TYPE_CLEAN)); - washRecord.setRecordCreateDate(new Date()); - - if(rinser != null){ - boolean isWashConfirm = rinser.sterilizerIsWashConfirm(); - if(!isWashConfirm){ - washRecord.setWashStatus(WashAndDisinfectRecord.STATUS_WASHED); - }else{ - washRecord.setWashStatus(WashAndDisinfectRecord.STATUS_WASHING); - washRecord.setEndDate(null); - washRecord.setEndDateStr(""); - } - washRecord.setRinserId(rinser.getId()); + setNewRecordProperty(washRecord, rinser); + } + + setClassifyBasketInfo(washRecord, classifyBasketInfoMap,rinser, isNewRecord,toDeleteBasketMap); + // 更新装配任务的清洗时间等信息 + updatePackingTaskWashInfo(washRecord); + //设置清洗记录工作量 + setWashRecordWorkLoadInfo(washRecord); + //清洗材料 + materials = ListUtils.emptyIfNull(materials); + for (WashAndDisinfectRecordMaterial material : materials) { + if(!DatabaseUtil.isPoIdValid(material.getId())){ + material.setId(null); } + objectDao.saveOrUpdate(material); } - washRecord.setClassifyBaskets(null); + + washRecord.setWashAndDisinfectMaterials(materials); objectDao.saveOrUpdate(washRecord); - objectDao.flush(); - List classifyBaskets = new ArrayList( - classifyBasketIds.size()); - - for (Long id : classifyBasketIds) { - if (id != null) { - ClassifyBasket paramsClassifyBasket = classifyBasketInfoMap - .get(id); - String personInCharge = ""; - String personInChargeCode = ""; - if (paramsClassifyBasket != null) { - personInCharge = paramsClassifyBasket.getPersonInCharge(); - personInChargeCode = paramsClassifyBasket - .getPersonInChargeCode(); - } - ClassifyBasket classifyBasket = beCleanItemManager.getClassifyBasketById(id.toString()); - if(classifyBasket != null){ - Container container = (Container) barcodeManager.getBarcodeByBarcode(classifyBasket.getContainerBarcode()); - if((container != null && Container.CONTAINER_STATUS_WASHLOADING.equals(container.getStatus())) || isNewRecord){ - if(rinser != null){ - boolean isWashConfirm = rinser.sterilizerIsWashConfirm(); - if(!isWashConfirm){ - container.setStatus(Container.CONTAINER_STATUS_WASHED); - }else{ - if(WashAndDisinfectRecord.STATUS_WASHED.equals(washRecord.getWashStatus())){ - container.setStatus(Container.CONTAINER_STATUS_WASHED); - }else{ - container.setStatus(Container.CONTAINER_STATUS_WASHING); - } - } - } - - /*//是否需要进一步改成装配完成(拆包清洗的器械,扫描其中一个篮筐就可以装配,剩下的未清洗的篮筐在清洗结束后,需要改状态为装配完成) - Map basketMap = new HashMap(); - basketMap.put(basket.getBarcode(), classifyBasket); - beCleanItemManager.updateBasketStatus(basketMap);*/ - } - - classifyBasket.setPersonInCharge(personInCharge); - classifyBasket.setPersonInChargeCode(personInChargeCode); - classifyBaskets.add(classifyBasket); - } - - - // 更新装配任务清洗时间 -// Set items = b.getClassfiedItems(); -// if (items != null) { -// for (ClassifiedItem ci : items) { -// Long sourceId = ci.getRecyclingRecordId(); -// Long tousseDefinitionID = ci.getTousseDefinitionID(); -// if(!DatabaseUtil.isPoIdValid(tousseDefinitionID)){ -// tousseDefinitionID = ci.getTousseDefinition().getId(); -// } -// String name = ci.getName(); -// String tmpSql = null; -// if (ClassifiedItem.TYPE_MATERIAL.equals(ci -// .getItemType())) { -// name = ci.getTousseNameForMaterial(); -// tmpSql = "select p.id from packingTask p,Toussedefinition d " -// + "where p.tousseDefinition_id = d.id and p.sourceId = " -// + sourceId -// + " and p.basketBarcode like '%" -// + b.getContainerBarcode() -// + "%' and d.name = '" -// + name -// + "' and p.taskType = '" -// + PackingTask.TASK_RECYCLINGRECORD + "'"; -// }else{ -// tmpSql = "select p.id from packingTask p,Toussedefinition d " -// + "where p.tousseDefinition_id = d.id and p.sourceId = " -// + sourceId -// + " and p.basketBarcode like '%" -// + b.getContainerBarcode() -// + "%' and d.id = " -// + tousseDefinitionID -// + " and p.taskType = '" -// + PackingTask.TASK_RECYCLINGRECORD + "'"; -// } -// -// -// String sql = "update packingTask set washTime = '" -// + washRecord.getStartDateStr() -// + "',classifyBasket_id = " + id + " ,washRecord_id = " -// + washRecord.getId() + " where id in (" + tmpSql + ")"; -// objectDao.excuteSQL(sql); -// } -// } + rollbackRemoveBasketStatus(toDeleteBasketMap); + // 删除旧数据,未关联的材料记录 + deleteWashAndDisinfeceRecordMaterialWithoutConnection(); + } - } - } - // 更新装配任务的清洗时间等信息 - updatePackingTaskWashInfo(classifyBaskets,washRecord); + private void setWashRecordWorkLoadInfo(WashAndDisinfectRecord washRecord) { SupplyRoomConfig config = supplyRoomConfigManager.getSystemParamsObj(); // 统计清洗工作量 + List classifyBaskets = washRecord.getClassifyBaskets(); WorkloadInfo workloadInfo = countTotalWorkload(washRecord.getId(), classifyBaskets, config.getSecondWashCountWorkload()); washRecord.setWashMaterialAmount(workloadInfo.washMaterialAmount); washRecord.setGeneralMaterialAmount(workloadInfo.generalMaterialAmount); washRecord.setOperateMaterialAmount(workloadInfo.operateMaterialAmount); washRecord.setForeignMaterialAmount(workloadInfo.foreignMaterialAmount); washRecord.setDisinfectMaterialAmount(workloadInfo.disinfectMaterialAmount); + } - washRecord.setClassifyBaskets(classifyBaskets); - for (WashAndDisinfectRecordMaterial material : materials) { - Long id = material.getId(); - if (id != null && id <= 0) { - material.setId(null); + private void setNewRecordProperty(WashAndDisinfectRecord washRecord, + Rinser rinser) { + washRecord.setId(null); + washRecord.setSerialNumber(serialNumManager + .getSerialNumberStr(SerialNum.TYPE_CLEAN)); + washRecord.setRecordCreateDate(new Date()); + + if(rinser != null){ + boolean isWashConfirm = rinser.sterilizerIsWashConfirm(); + if(!isWashConfirm){ + washRecord.setWashStatus(WashAndDisinfectRecord.STATUS_WASHED); + }else{ + washRecord.setWashStatus(WashAndDisinfectRecord.STATUS_WASHING); + washRecord.setEndDate(null); + washRecord.setEndDateStr(""); } - objectDao.saveOrUpdate(material); + washRecord.setRinserId(rinser.getId()); } - objectDao.flush(); - washRecord.setWashAndDisinfectMaterials(materials); - objectDao.saveOrUpdate(washRecord); + } - // 删除旧数据,未关联的材料记录 - deleteWashAndDisinfeceRecordMaterialWithoutConnection(); + private void setClassifyBasketInfo(WashAndDisinfectRecord washRecord, + Map classifyBasketInfoMap,Rinser rinser, boolean isNewRecord,Map toDeleteBasketMap) { + + Set classifyBasketIds = classifyBasketInfoMap.keySet(); + classifyBasketIds = SetUtils.emptyIfNull(classifyBasketIds); + + if(!isNewRecord){ + //清理旧篮筐关联关系 + cleanOldBasketRelation(washRecord); + } + + List classifyBaskets = new ArrayList(); + + for (Long id : classifyBasketIds) { + + toDeleteBasketMap.remove(id); + + ClassifyBasket paramsClassifyBasket = classifyBasketInfoMap.get(id); + String personInCharge = ""; + String personInChargeCode = ""; + if (paramsClassifyBasket != null) { + personInCharge = paramsClassifyBasket.getPersonInCharge(); + personInChargeCode = paramsClassifyBasket + .getPersonInChargeCode(); + } + ClassifyBasket classifyBasket = beCleanItemManager.getClassifyBasketById(id.toString()); + if(classifyBasket != null){ + Container container = (Container) barcodeManager.getBarcodeByBarcode(classifyBasket.getContainerBarcode()); + if((container != null && Container.CONTAINER_STATUS_WASHLOADING.equals(container.getStatus())) || isNewRecord){ + if(rinser != null){ + boolean isWashConfirm = rinser.sterilizerIsWashConfirm(); + if(!isWashConfirm){ + container.setStatus(Container.CONTAINER_STATUS_WASHED); + }else{ + if(WashAndDisinfectRecord.STATUS_WASHED.equals(washRecord.getWashStatus())){ + container.setStatus(Container.CONTAINER_STATUS_WASHED); + }else{ + container.setStatus(Container.CONTAINER_STATUS_WASHING); + } + } + } + } + classifyBasket.setPersonInCharge(personInCharge); + classifyBasket.setPersonInChargeCode(personInChargeCode); + classifyBaskets.add(classifyBasket); + } + } + //移除删除的篮筐 + if(toDeleteBasketMap.size() > 0){ + for (Long id : toDeleteBasketMap.keySet()) { + ClassifyBasket removeBasket = toDeleteBasketMap.get(id); + removeBasket.getWashAndDisinfectRecords().remove(washRecord); + classifyBaskets.remove(removeBasket); + } + } + washRecord.setClassifyBaskets(classifyBaskets); } - // 更新装配任务的清洗信息 - private void updatePackingTaskWashInfo( - List classifyBaskets, + private void cleanOldBasketRelation(WashAndDisinfectRecord washRecord) { + List oldBaskets = washRecord.getClassifyBaskets(); + if(oldBaskets != null){ + for (ClassifyBasket classifyBasket : oldBaskets) { + classifyBasket.getWashAndDisinfectRecords().remove(washRecord); + } + washRecord.getClassifyBaskets().removeAll(oldBaskets); + } + } + + /** + * 删除的篮筐状态回滚 + * @param removeClassifyBasketMap + */ + private void rollbackRemoveBasketStatus(Map removeClassifyBasketMap) { + if(removeClassifyBasketMap.size() > 0){ + for (Long classifyBasketId : removeClassifyBasketMap.keySet()) { + ClassifyBasket classifyBasket = removeClassifyBasketMap.get(classifyBasketId); + List washRecords = classifyBasket.getWashAndDisinfectRecords(); + //篮筐未关联清洗记录 + if(washRecords == null || washRecords.size() == 0){ + Container container = containerManager.getContainerByBarcode(classifyBasket.getContainerBarcode()); + if(container != null && !Container.CONTAINER_STATUS_WASHLOADING.equals(container.getStatus())){ + container.setStatus(Container.CONTAINER_STATUS_WASHLOADING); + objectDao.saveOrUpdate(container); + } + } + } + } + } + + private Map getOldClassifyBasketMap( WashAndDisinfectRecord washRecord) { + Map oldBasketMap = new HashMap(); + List oldWashBaskets = washRecord.getClassifyBaskets(); + if(oldWashBaskets != null){ + for (ClassifyBasket classifyBasket : oldWashBaskets) { + oldBasketMap.put(classifyBasket.getId(), classifyBasket); + } + } + return oldBasketMap; + } + + // 更新装配任务的清洗信息 + private void updatePackingTaskWashInfo(WashAndDisinfectRecord washRecord) { + List classifyBaskets = washRecord.getClassifyBaskets(); if (classifyBaskets == null || classifyBaskets.size() == 0) { return; }