Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/instrumentinstance/service/InstrumentInstanceManagerImpl.java =================================================================== diff -u -r34679 -r34682 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/instrumentinstance/service/InstrumentInstanceManagerImpl.java (.../InstrumentInstanceManagerImpl.java) (revision 34679) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/instrumentinstance/service/InstrumentInstanceManagerImpl.java (.../InstrumentInstanceManagerImpl.java) (revision 34682) @@ -566,16 +566,16 @@ Map idCardInstanceIdTousseInstanceMap,boolean alreadyAtOrAfterPackingSection){ if(CollectionUtils.isNotEmpty(idCardInstanceList)){ @SuppressWarnings("unchecked") - List idCardDefinitionList = objectDao.findByProperty_ForUpdate(IDCardDefinition.class.getSimpleName(), "id" , - idCardInstanceList.stream().distinct().map(IDCardInstance::getIdCardDefinitionID)); + List idCardDefinitionList = objectDao.findByIds_ForUpdate(IDCardDefinition.class.getSimpleName(), + idCardInstanceList.stream().map(IDCardInstance::getIdCardDefinitionID).distinct().collect(Collectors.toList())); idCardDefinitionList.stream().forEach(item -> { idToIDCardDefinitionMap.put(item.getId(), item); }); //标识牌定义所在的器械包定义id集合 List tdIdList = idCardDefinitionList.stream().map(IDCardDefinition::getTousseDefinitionID).distinct().collect(Collectors.toList()); //包定义集合 @SuppressWarnings("unchecked") - List tdList = objectDao.findByProperty_ForUpdate(TousseDefinition.class.getSimpleName(), "id" ,tdIdList); + List tdList = objectDao.findByIds_ForUpdate(TousseDefinition.class.getSimpleName(), tdIdList); tdList.stream().forEach(td -> { Long tdId = td.getId(); @@ -592,7 +592,7 @@ List idCardInstanceIdList = idCardInstanceList.stream().map(IDCardInstance::getId).collect(Collectors.toList()); //查询标识牌实例所绑定的器械实例的数据集合 List instrumentInstanceList = - getCollectionForUpdate(String.format("where %s", + getCollectionForUpdate(String.format("%s", SqlUtils.getNonStringFieldInLargeCollectionsPredicate("idCardInstanceId", idCardInstanceIdList)), new HashMap()); idCardInstanceIdToInstrumentInstanceListMap.putAll(Optional.of(instrumentInstanceList).orElse( new ArrayList()).stream().collect(Collectors.groupingBy(InstrumentInstance::getIdCardInstanceId))); @@ -662,7 +662,7 @@ @SuppressWarnings("unchecked") List awaitBindIdCardInstanceList = objectDao.findByCondition_ForUpdate(IDCardInstance.class.getSimpleName(), - String.format("where bindInstrumentInstanceFlag=0 and idCardDefinitionID in (select from %s t1 join %s t2 on ti.tousseDefinitionID=t2.id where t2.isDisable='%s' and t2.isDisableIDCard='%s')", + String.format("where bindInstrumentInstanceFlag=0 and idCardDefinitionID in (select t1.id from %s t1 where t1.tousseDefinitionID in (select t2.id from %s t2 where t2.isDisable='%s' and t2.isDisableIDCard='%s'))", IDCardDefinition.class.getSimpleName(),TousseDefinition.class.getSimpleName(),Constants.STR_NO,Constants.STR_NO), "", 0, 0); if(CollectionUtils.isEmpty(awaitBindIdCardInstanceList)){ @@ -769,7 +769,7 @@ allMatchEveryMaterialAndCount = false; break; } - List totalInstrumentInstanceList = mdIdToInstrumentInstanceListMap.get(mdIdToInstrumentInstanceListMap.get(mdId)); + List totalInstrumentInstanceList = mdIdToInstrumentInstanceListMap.get(mdId); int instrumentInstanceSize = CollectionUtils.size(totalInstrumentInstanceList); if(instrumentInstanceSize < count){ allMatchEveryMaterialAndCount = false; @@ -778,7 +778,8 @@ //从可用于绑定标识牌的器械实例集合中取出对应数量的器械实例出来 List fetchInstrumentInstanceList = totalInstrumentInstanceList.subList(0, count); alreadyMatchInstrumentInstanceList.addAll(fetchInstrumentInstanceList); - totalInstrumentInstanceList.remove(fetchInstrumentInstanceList); + totalInstrumentInstanceList.removeAll(fetchInstrumentInstanceList); + mdIdToInstrumentInstanceListMap.put(mdId,totalInstrumentInstanceList); } if(!allMatchEveryMaterialAndCount){ break; @@ -804,16 +805,15 @@ alreadyMatchInstrumentInstanceList.stream().forEach(instance -> { instrumentInstanceIdToIdcardInstanceIdMap.put(instance.getId(), idCardInstance.getId()); }); - Map> map = new HashMap>(); Map materialDefinitionToCountMap = new HashMap(); TousseDefinition td = idToTousseDefinitionMap.get(idToIDCardDefinitionMap.get(idCardInstance.getIdCardDefinitionID()).getTousseDefinitionID()); List miList = td.getMaterialInstances(); - if(CollectionUtils.isEmpty(miList)){ + if(CollectionUtils.isNotEmpty(miList)){ for(MaterialInstance mi : miList){ materialDefinitionToCountMap.put(mi.getMaterialDefinition(), mi.getCount()); } } - map.put(idCardInstance, materialDefinitionToCountMap); + idCardInstanceToMdToCountMapMap.put(idCardInstance, materialDefinitionToCountMap); }); String insertMaterialReceiveRecordSql = String.format("insert into %s(%s operator,time,remark,depart,departCoding,totalPrice,warehouseId,warehouseName,idCardInstanceId) values(%s ?,?,?,?,?,?,?,?,?) ", ReceiveRecord.class.getSimpleName(),idColumnName,idColumnValue); @@ -909,20 +909,18 @@ }); //4.更新标识牌的绑定状态 - - String updateIdcardInstanceBindFlagSql = String.format("update %s set bindInstrumentInstanceFlag=? where id=?", IDCardInstance.class.getSimpleName()); + String updateIdcardInstanceBindFlagSql = String.format("update %s set bindInstrumentInstanceFlag=%d where id=?", IDCardInstance.class.getSimpleName(),IDCardInstance.STATUS_BINDED); jdbcTemplate.batchUpdate(updateIdcardInstanceBindFlagSql, new BatchPreparedStatementSetter() { @Override public void setValues(PreparedStatement ps, int i) throws SQLException { - Entry entry = CollectionUtils.get(instrumentInstanceIdToIdcardInstanceIdMap, i); - ps.setLong(1, entry.getValue()); - ps.setLong(2, entry.getKey()); + Entry entry = CollectionUtils.get(idCardInstanceIdToReceiveRecordIdMap, i); + ps.setLong(1, entry.getKey()); } @Override public int getBatchSize() { - return CollectionUtils.size(instrumentInstanceIdToIdcardInstanceIdMap); + return CollectionUtils.size(idCardInstanceIdToReceiveRecordIdMap); } }); @@ -937,7 +935,7 @@ map.put("instrumentInstanceId", entry.getKey()); updateInstrumentInstanceBindMapList.add(map); }); - String updateInstrumentInstanceBindSql = String.format("update %s set idCardInstanceId=? and receiveRecordId=? where id=?", InstrumentInstance.class.getSimpleName()); + String updateInstrumentInstanceBindSql = String.format("update %s set idCardInstanceId=?, receiveRecordId=? where id=?", InstrumentInstance.class.getSimpleName()); jdbcTemplate.batchUpdate(updateInstrumentInstanceBindSql, new BatchPreparedStatementSetter() { @Override