Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/washTransition/service/IdCardMaterialErrorDamageManagerImpl.java =================================================================== diff -u -r36497 -r39812 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/washTransition/service/IdCardMaterialErrorDamageManagerImpl.java (.../IdCardMaterialErrorDamageManagerImpl.java) (revision 36497) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/washTransition/service/IdCardMaterialErrorDamageManagerImpl.java (.../IdCardMaterialErrorDamageManagerImpl.java) (revision 39812) @@ -1,8 +1,10 @@ package com.forgon.disinfectsystem.washTransition.service; +import java.sql.ResultSet; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -31,6 +33,7 @@ import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.BasePoManagerImpl; import com.forgon.tools.string.StringTools; +import com.forgon.tools.util.SqlUtils; public class IdCardMaterialErrorDamageManagerImpl extends BasePoManagerImpl implements IdCardMaterialErrorDamageManager{ @@ -86,13 +89,13 @@ * @return */ private RecyclingItem find(Collection items, - Long tousseDefinitionId) { + Long tousseDefinitionId, Map tousseDefinitionIdAncestorIdMap) { if(CollectionUtils.isNotEmpty(items)){ return CollectionUtils.find(items, new Predicate(){ @Override public boolean evaluate(RecyclingItem object) { if(object != null){ - return MathTools.valueEquals(tousseDefinitionId, object.getTousseDefinitionId()); + return MathTools.valueEquals(tousseDefinitionId, tousseDefinitionIdAncestorIdMap.get(object.getTousseDefinitionId())); } return false; }}); @@ -115,6 +118,8 @@ if(idCardBarcodes.size() == 0){ return; } + + Map tousseDefinitionIdAncestorIdMap = getRecyclingItemTousseDefinitionIdAncestorIdMap(recyclingItemsOfErrorDamage); List idCardInstances = idCardInstanceManager.getCollection("barcode", idCardBarcodes); Map> tousseDefIdIdCardInstanceMap = idCardInstanceManager.groupByTousseDefinitionId(idCardInstances); if(MyCollectionUtils.isNotEmpty(tousseDefIdIdCardInstanceMap)){ @@ -123,7 +128,7 @@ Set recyclingItemId = recyclingRecord.getItems().stream().map(p->p.getId()).collect(Collectors.toSet()); List idCardMaterialErrorDamages = getCollection("recyclingItemId",recyclingItemId); for(Map.Entry> entry:tousseDefIdIdCardInstanceMap.entrySet()){ - RecyclingItem recyclingItem = find(recyclingItemsOfErrorDamage, entry.getKey()); + RecyclingItem recyclingItem = find(recyclingItemsOfErrorDamage, entry.getKey(), tousseDefinitionIdAncestorIdMap); TousseDefinition td = tousseDefinitionManager.getTousseDefinition(tds, entry.getKey()); if(recyclingItem != null){ //有丢失报损,先看那个包实例关联的丢失报损信息 @@ -197,7 +202,49 @@ } } } + /** + * 查询回收项对应的祖先包定义id + * @param recyclingItemsOfErrorDamage + * @return + */ + private Map getRecyclingItemTousseDefinitionIdAncestorIdMap(List recyclingItemsOfErrorDamage) { + Map tousseDefinitionIdAncestorIdMap = new HashMap(); + if(CollectionUtils.isEmpty(recyclingItemsOfErrorDamage)){ + return tousseDefinitionIdAncestorIdMap; + } + Set allTousseDefinitionIds = new HashSet(); + for (RecyclingItem recyclingItem : recyclingItemsOfErrorDamage) { + allTousseDefinitionIds.add(recyclingItem.getTousseDefinitionId()); + } + if(CollectionUtils.isEmpty(allTousseDefinitionIds)){ + return tousseDefinitionIdAncestorIdMap; + } + StringBuffer sqlBuffer = new StringBuffer(); + sqlBuffer.append("select po.id, po.ancestorID from "); + sqlBuffer.append(TousseDefinition.class.getSimpleName()); + sqlBuffer.append(" po where "); + sqlBuffer.append(SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.id", allTousseDefinitionIds)); + ResultSet rs = null; + + try { + rs = objectDao.executeSql(sqlBuffer.toString()); + while(rs.next()){ + Long id = rs.getLong("id"); + Long ancestorID = rs.getLong("ancestorID"); + tousseDefinitionIdAncestorIdMap.put(id, ancestorID); + } + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException(e.getMessage()); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + + return tousseDefinitionIdAncestorIdMap; + } + + /** * 获取丢失报损相反的类型。即丢失返回报损,报损返回丢失 * @param type * @return