Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/vo/RecyclingSumInfoVo.java =================================================================== diff -u -r37854 -r37855 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/vo/RecyclingSumInfoVo.java (.../RecyclingSumInfoVo.java) (revision 37854) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/vo/RecyclingSumInfoVo.java (.../RecyclingSumInfoVo.java) (revision 37855) @@ -1,7 +1,7 @@ package com.forgon.disinfectsystem.recyclingrecord.vo; import java.util.List; -import java.util.Map; +import java.util.Set; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; @@ -16,22 +16,26 @@ * 包定义 目的是减少重复查询 */ private List tousseDefinitions; - - private Map haveErrorOrDamageInfo; + /** + * 本次修改前,有丢失报损的回收项id + * 主要用于原有丢失报损,又打开删除丢失报损信息时,需要调整装配任务的状态 + */ + private Set recyclingItemIdOfhaveErrorOrDamage; + public List getTousseDefinitions() { return tousseDefinitions; } public void setTousseDefinitions(List tousseDefinitions) { this.tousseDefinitions = tousseDefinitions; } - - public Map getHaveErrorOrDamageInfo() { - return haveErrorOrDamageInfo; + public Set getRecyclingItemIdOfhaveErrorOrDamage() { + return recyclingItemIdOfhaveErrorOrDamage; } - public void setHaveErrorOrDamageInfo(Map haveErrorOrDamageInfo) { - this.haveErrorOrDamageInfo = haveErrorOrDamageInfo; + public void setRecyclingItemIdOfhaveErrorOrDamage( + Set recyclingItemIdOfhaveErrorOrDamage) { + this.recyclingItemIdOfhaveErrorOrDamage = recyclingItemIdOfhaveErrorOrDamage; } } Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java =================================================================== diff -u -r37854 -r37855 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java (.../RecyclingRecordManagerImpl.java) (revision 37854) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java (.../RecyclingRecordManagerImpl.java) (revision 37855) @@ -1880,17 +1880,15 @@ * @param recyclingSumInfoVo */ private void setHaveErrorOrDamageInfo(RecyclingRecord record, RecyclingSumInfoVo recyclingSumInfoVo){ - Map haveErrorOrDamageInfo = new HashMap(); + Set recyclingItemIdOfhaveErrorOrDamage = new HashSet(); if(record != null && DatabaseUtil.isPoIdValid(record.getId()) && CollectionUtils.isNotEmpty(record.getItems())){ for (RecyclingItem item : record.getItems()) { - boolean haveErrorOrDamage = false; if(CollectionUtils.isNotEmpty(item.getErrorDamageDetails())){ - haveErrorOrDamage = true; + recyclingItemIdOfhaveErrorOrDamage.add(item.getId()); } - haveErrorOrDamageInfo.put(item.getId(), haveErrorOrDamage); } } - recyclingSumInfoVo.setHaveErrorOrDamageInfo(haveErrorOrDamageInfo); + recyclingSumInfoVo.setRecyclingItemIdOfhaveErrorOrDamage(recyclingItemIdOfhaveErrorOrDamage); } @Override @@ -2711,6 +2709,7 @@ //丢失项 JSONArray errorDamageDetailArr = params.optJSONArray("errorDamageDetail"); RecyclingSumInfoVo recyclingSumInfoVo = new RecyclingSumInfoVo(); + setHaveErrorOrDamageInfo(record, recyclingSumInfoVo); List errorDamageDetail = JSONUtil.fromJson(errorDamageDetailArr,MaterialErrorDamageDetailVo.class); //是否确认 boolean confirmation = params.optBoolean("confirmation"); @@ -4157,7 +4156,7 @@ updatePackingTaskRemark(recyclingRecord); //setIdCardBarcodeForPackingTask(idCardTaskMap); //报损、丢失关联装配任务 - setRecyclingErrorAndDamagePackingTaskId(packingTasks, thisTimeTds, recyclingRecord,tousseDefinitions,confirmation,recyclingSumInfoVo); + setRecyclingErrorAndDamagePackingTaskId(thisTimeTds, recyclingRecord,tousseDefinitions,confirmation,recyclingSumInfoVo,recyclingContext); if(isChangeApplyDepart){ String sql = String .format("update %s set department = '%s',departCoding = '%s' where sourceId = %s and taskType = %s", @@ -4545,17 +4544,18 @@ return null; } - private void setRecyclingErrorAndDamagePackingTaskId(List packingTasks, Set thisTimeTds, RecyclingRecord record,List tousseDefinitions,boolean confirmation, RecyclingSumInfoVo recyclingSumInfoVo) { + private void setRecyclingErrorAndDamagePackingTaskId(Set thisTimeTds, RecyclingRecord record,List tousseDefinitions,boolean confirmation, RecyclingSumInfoVo recyclingSumInfoVo + ,RecyclingContext recyclingContext) { + Map isTousseMaterialsLostOrDamageMap = new HashMap(); + Set haveErrorOrDamageInfo = recyclingSumInfoVo.getRecyclingItemIdOfhaveErrorOrDamage(); for (RecyclingItem item : record.getItems()) { Long historyPackingTaskId = item.getHistoryPackingTaskId(); TousseDefinition td = getTousseDefinition(tousseDefinitions,item.getTousseDefinitionId()); if(td.needPacking()){ - boolean haveErrorOrDamage = false; List details = item.getErrorDamageDetails(); //标识牌丢失要重新计算 List idCardLostList = new ArrayList(); if(CollectionUtils.isNotEmpty(details)){ - haveErrorOrDamage = true; for (MaterialErrorDamageDetail detail : details) { if (!detail.getIsUnionPackingTask()) { if(detail.isIDCard()){ @@ -4571,7 +4571,10 @@ detail.setStatus(null); } } - setPackingTaskStatus(detail.getPackingTaskId(),confirmation,item); + if(DatabaseUtil.isPoIdValid(detail.getPackingTaskId())){ + isTousseMaterialsLostOrDamageMap.put(detail.getPackingTaskId(), item.isTousseMaterialsLostOrDamage()); + } + //丢失报损关联的器械包实例改为已回收 TousseInstance ti = tousseInstanceManager.getTousseInstanceByBarcode(detail.getTousseBarcode()); if(ti != null && !TousseInstance.STATUS_RECYCLED.equals(ti.getStatus()) && !TousseInstance.STATUS_WASHING.equals(ti.getStatus()) && !TousseInstance.STATUS_WASHED.equals(ti.getStatus())){ @@ -4581,24 +4584,19 @@ } } } - } - setLostIDCardPackingTaskId(record, item, idCardLostList,confirmation); - //添加了丢失或报损记录后,最终又改为0了 - if(!haveErrorOrDamage && recyclingSumInfoVo.getHaveErrorOrDamageInfo() != null - && recyclingSumInfoVo.getHaveErrorOrDamageInfo().containsKey(item.getId()) - && recyclingSumInfoVo.getHaveErrorOrDamageInfo().get(item.getId()) != null - && recyclingSumInfoVo.getHaveErrorOrDamageInfo().get(item.getId())){ - for (PackingTask packingTask : packingTasks) { - if(!MathTools.equals(item.getTousseDefinitionId(), packingTask.getTousseDefinition().getId())){ - continue; - } - if(PackingTask.STATUS_AWAIT_VERIFYING.equals(packingTask.getStatus())){ - packingTask.setStatus(PackingTask.STATUS_AWAIT_PACKING); - } + }else if(haveErrorOrDamageInfo.contains(item.getId())){ + if (historyPackingTaskId == null) { + historyPackingTaskId = getUnionPackingTaskId( + record, confirmation, item, null); } + if(DatabaseUtil.isPoIdValid(historyPackingTaskId)){ + isTousseMaterialsLostOrDamageMap.put(historyPackingTaskId, false); + } } + setLostIDCardPackingTaskId(record, item, idCardLostList,confirmation,isTousseMaterialsLostOrDamageMap); } } + batchUpdatePackingTaskStatus(confirmation, isTousseMaterialsLostOrDamageMap); } /** @@ -4608,7 +4606,8 @@ * @param idCardLostList */ private void setLostIDCardPackingTaskId(RecyclingRecord records, - RecyclingItem item, List idCardLostList,boolean confirmation) { + RecyclingItem item, List idCardLostList,boolean confirmation + , Map isTousseMaterialsLostOrDamageMap) { if(CollectionUtils.isNotEmpty(idCardLostList)){ List taskList = packingManager.getPackingTask(records.getId(),item.getTousseDefinitionId(),PackingTask.TASK_RECYCLINGRECORD); if (CollectionUtils.isNotEmpty(taskList)) { @@ -4640,6 +4639,7 @@ MaterialErrorDamageDetail detail = idCardLostList.get(i); detail.setPackingTaskId(taskIdList.get(i)); setPackingTaskStatus(taskIdList.get(i),confirmation,item); + isTousseMaterialsLostOrDamageMap.put(detail.getPackingTaskId(), item.isTousseMaterialsLostOrDamage()); } } } @@ -4669,7 +4669,50 @@ } } } + /** + * 修改装配任务的状态 + * @param confirmation 是否确认 + * @param isTousseMaterialsLostOrDamageMap 装配任务是否有丢失 + */ + private void batchUpdatePackingTaskStatus(boolean confirmation, Map isTousseMaterialsLostOrDamageMap){ + if(MapUtils.isNotEmpty(isTousseMaterialsLostOrDamageMap)){ + List ptIds = new ArrayList(); + ptIds.addAll(isTousseMaterialsLostOrDamageMap.keySet()); + String sql = "update " + PackingTask.class.getSimpleName()+" set status=? where id=?"; + boolean tousseMaterialsLostMustConfirm = CssdUtils.getSystemSetConfigByNameBool("tousseMaterialsLostMustConfirm",true); + jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() { + + @Override + public void setValues(PreparedStatement ps, int i) throws SQLException { + Long ptId = ptIds.get(i); + if(!confirmation){ + boolean isTousseMaterialsLostOrDamage = isTousseMaterialsLostOrDamageMap.get(ptId); + if(isTousseMaterialsLostOrDamage){ + if(tousseMaterialsLostMustConfirm){ + ps.setString(1, PackingTask.STATUS_AWAIT_VERIFYING); + }else{ + // 配置为不需要确认 + ps.setString(1, PackingTask.STATUS_AWAIT_PACKING); + } + }else { + ps.setString(1, PackingTask.STATUS_AWAIT_PACKING); + } + }else{ + ps.setString(1, PackingTask.STATUS_AWAIT_PACKING); + } + ps.setLong(2, ptId); + + } + + @Override + public int getBatchSize() { + return ptIds.size(); + } + }); + } + + } private Long getUnionPackingTaskId(RecyclingRecord records, boolean confirmation, RecyclingItem item, MaterialErrorDamageDetail detail) { List taskList = packingManager