Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java =================================================================== diff -u -r17553 -r17555 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java (.../RecyclingRecordManagerImpl.java) (revision 17553) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java (.../RecyclingRecordManagerImpl.java) (revision 17555) @@ -62,7 +62,6 @@ import com.forgon.disinfectsystem.tousse.materialinstance.service.MaterialInstanceManager; 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.vo.TousseItemVo; import com.forgon.disinfectsystem.washanddisinfectmanager.washanddisinfectrecord.service.WashAndDisinfectRecordManager; import com.forgon.log.model.Log; @@ -75,6 +74,7 @@ import com.forgon.tools.hibernate.ObjectDao; import com.forgon.tools.string.StringTools; import com.forgon.tools.util.SqlUtils; +import com.google.zxing.Result; /** * @author wangyi @@ -87,8 +87,6 @@ private ObjectDao objectDao; - private TousseItemManager tousseItemManager; - private PackingManager packingManager; private BeCleanItemManager beCleanItemManager; @@ -163,10 +161,6 @@ this.objectDao = objectDao; } - public void setTousseItemManager(TousseItemManager tousseItemManager) { - this.tousseItemManager = tousseItemManager; - } - public void setPackingManager(PackingManager packingManager) { this.packingManager = packingManager; } @@ -292,6 +286,7 @@ LoginUserData loginUser = AcegiHelper.getLoginUser(); Map tousseItemMap = getRecyclingTousseItemMap(record); Map tousseBarcodeMap = new HashMap(); + Map toSplitIdCardMap = new HashMap(); for (int i = 0; i < errorJsonArray.size(); i++) { JSONObject obj = errorJsonArray.optJSONObject(i); String detailId = obj.optString("detailId"); @@ -346,7 +341,7 @@ detail.setHandleDepartCode(record.getOrgUnitCoding()); detail.setHandleDepartName(loginUser.getOrgUnitNameCodingFromSupplyRoomConfig()); MaterialDefinition md = materialDefinitionManager.getMaterialDefinitionById("" + materialDefinitionId); - if(!"器械包标识牌".equals(materialName) && md == null){ + if(!Constants.ERROR_MATERIALNAME.equals(materialName) && md == null){ throw new RuntimeException(materialName+",未找到材料定义"); } detail.setMaterialName(materialName); @@ -369,6 +364,10 @@ tousseBarcodeMap.put(tousseBarcode, tousseBarcode); } + if(detail.isIDCard() && detail.getAmount() > 1){ + toSplitIdCardMap.put(recyclingItem, detail); + } + Long currerntDetailId = detail.getId(); boolean isExist = CollectionUtils.exists(recyclingItem.getErrorDamageDetails(), new Predicate() { @Override @@ -394,6 +393,25 @@ } } } + //一个包丢失多个标识牌要拆成单条 + if(toSplitIdCardMap.size() > 0){ + for (RecyclingItem recyclingItem : toSplitIdCardMap.keySet()) { + MaterialErrorDamageDetail detail = toSplitIdCardMap.get(recyclingItem); + for(int i = 0 ; i < detail.getAmount() ; i++ ){ + try { + MaterialErrorDamageDetail cloneDetail = detail.clone(); + cloneDetail.setPackingTaskId(null); + cloneDetail.setId(null); + cloneDetail.setAmount(1); + objectDao.saveOrUpdate(cloneDetail); + recyclingItem.getErrorDamageDetails().add(cloneDetail); + } catch (CloneNotSupportedException e) { + throw new RuntimeException("未知错误!"); + } + } + materialErrorDamageDetailManager.delete(detail); + } + } splitErrorDamageDetail(record, confirmation); } } @@ -450,7 +468,7 @@ currentAmount -= detailAmount; } } catch (CloneNotSupportedException e) { - throw new RuntimeException("保存失败,请联系管理员!"); + throw new RuntimeException("未知错误!"); } } } @@ -1280,20 +1298,27 @@ if(TousseDefinition.STR_YES.equals(td.getIsPacking())){ boolean haveErrorOrDamage = false; List details = item.getErrorDamageDetails(); - if(details.size() > 0){ + //标识牌丢失要重新计算 + List idCardLostList = new ArrayList(); + if(CollectionUtils.isNotEmpty(details)){ haveErrorOrDamage = true; for (MaterialErrorDamageDetail detail : details) { if (!detail.getIsUnionPackingTask()) { + if(detail.isIDCard()){ + idCardLostList.add(detail); + continue; + } if (historyPackingTaskId == null) { historyPackingTaskId = getUnionPackingTaskId( records, confirmation, item, historyPackingTaskId,detail); } detail.setPackingTaskId(historyPackingTaskId); } - setPackingTaskStatus(historyPackingTaskId,confirmation,item); + setPackingTaskStatus(detail.getPackingTaskId(),confirmation,item); } } + setLostIDCardPackingTaskId(records, item, idCardLostList,confirmation); //添加了丢失或报损记录后,最终又改为0了 if(!haveErrorOrDamage){ List taskList = packingManager @@ -1311,6 +1336,48 @@ } } } + + /** + * 标识牌丢失关联相应的装配任务,标识牌搞到丢失这里,很麻烦 + * @param records + * @param item + * @param idCardLostList + */ + private void setLostIDCardPackingTaskId(RecyclingRecord records, + RecyclingItem item, List idCardLostList,boolean confirmation) { + if(CollectionUtils.isNotEmpty(idCardLostList)){ + List taskList = packingManager.getPackingTask(records.getId(),item.getTousseDefinitionId(),PackingTask.TASK_RECYCLINGRECORD); + if (CollectionUtils.isNotEmpty(taskList)) { + List taskIdList = new ArrayList(); + String sql = String.format("select min(p.id),min(p.amount),count(i.packingTaskID) from %s p left join %s i on p.id = i.packingTaskID group by p.id", + PackingTask.class.getSimpleName(),IDCardInfoForPackingTask.class.getSimpleName()); + ResultSet rs = objectDao.executeSql(sql); + try { + while(rs.next()){ + int taskAmount = rs.getInt(2); + int idCardAmount = rs.getInt(3); + if(taskAmount > idCardAmount){ + for (int i = 0 ; i < (taskAmount - idCardAmount) ; i++) { + taskIdList.add(rs.getLong(1)); + } + } + } + } catch (SQLException e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + if(idCardLostList.size() != taskIdList.size()){ + throw new RuntimeException("未知错误!"); + } + for (int i = 0 ; i < idCardLostList.size() ; i++) { + MaterialErrorDamageDetail detail = idCardLostList.get(i); + detail.setPackingTaskId(taskIdList.get(i)); + setPackingTaskStatus(taskIdList.get(i),confirmation,item); + } + } + } + } private void setPackingTaskStatus(Long packingTaskId,boolean confirmation,RecyclingItem item){ if(packingTaskId != null){ @@ -1339,22 +1406,6 @@ PackingTask.TASK_RECYCLINGRECORD); if (CollectionUtils.isNotEmpty(taskList)) { PackingTask packingTask = taskList.get(0); - /*if(detail.isIDCard()){ - //丢失的标识牌关联上相应的装配任务(回收多个标识牌,放入不同的篮筐,装配任务多条) - for (PackingTask task : taskList) { - List idCardTasks = packingManager.findIDCardForPackingTask(task.getId()); - if(CollectionUtils.isEmpty(idCardTasks)){ - packingTask = task; - break; - } - } - - }else{ - packingTask = taskList.get(0); - } - if(packingTask == null){ - throw new RuntimeException("异常数据,请联系管理员!"); - }*/ historyPackingTaskId = packingTask.getId(); } else { throw new RuntimeException(item.getTousseName()