Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/vo/TousseIntoBasketService.java =================================================================== diff -u -r40746 -r40770 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/vo/TousseIntoBasketService.java (.../TousseIntoBasketService.java) (revision 40746) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/vo/TousseIntoBasketService.java (.../TousseIntoBasketService.java) (revision 40770) @@ -515,9 +515,10 @@ * 获取篮筐中入了哪些包 * @param basketbarcode 篮筐条码 * @param queryCleanedEntirely 是否只查询整包清洗的包 + * @param filterForeignTousse 是否外来器械不参与比较 * @return 包ID集合,如果没有匹配项返回空集合 */ - public Set getTdIdsByBasketbarcode(String basketbarcode, boolean queryCleanedEntirely) { + public Set getTdIdsByBasketbarcode(String basketbarcode, boolean queryCleanedEntirely, boolean filterForeignTousse) { if (MapUtils.isEmpty(infoMap)) { return Collections.emptySet(); } @@ -530,7 +531,12 @@ if (MapUtils.isEmpty(basketItems)) { continue; } - + if(filterForeignTousse && + (TousseDefinition.PACKAGE_TYPE_FOREIGN.equals(basketTousseItem.getTousseType()) + || TousseDefinition.PACKAGE_TYPE_SPLIT.equals(basketTousseItem.getTousseType())) + ){ + continue; + } // 检查整包清洗条件 if (queryCleanedEntirely && basketItems.size() > 1) { continue; Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java =================================================================== diff -u -r40750 -r40770 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java (.../RecyclingRecordManagerImpl.java) (revision 40750) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java (.../RecyclingRecordManagerImpl.java) (revision 40770) @@ -15,6 +15,7 @@ import java.util.stream.IntStream; import com.forgon.disinfectsystem.entity.adverseeventrecord.AdverseEventWarnOrgUnit; +import com.forgon.exception.CleaningBasketDoesNotMatchException; import com.forgon.tools.*; import net.sf.json.JSONArray; import net.sf.json.JSONException; @@ -7782,16 +7783,6 @@ tousseIntoBasketService.initJsonArray(tousseIntoBasketInfo); Collection barcodes = baskets.stream().map(p->p.getBarcode()).collect(Collectors.toSet()); tousseIntoBasketService.initDataBaseBasketTousse(barcodes); - //入到多个篮筐是不验证清洗类型的 - if (td.cleanedEntirely() && CollectionUtils.isNotEmpty(barcodes) && barcodes.size() == 1) { - String barcode = barcodes.iterator().next(); - Set tdIds = tousseIntoBasketService.getTdIdsByBasketbarcode(barcode, true); - - JSONObject checkResult = checkCleanType(td, tdIds); - if (checkResult != null && !checkResult.optBoolean(JSONUtil.JSON_KEY_SUCCESS)) { - return checkResult; - } - } //拆包清洗 if(!td.cleanedEntirely()){ List msList = td.getMaterialInstances(); @@ -7950,40 +7941,72 @@ data.put("materials", materials); //整包清洗 }else{ + CustomIntoBasket basketItem = null; getBasketUsedVolume(barcodeToPercentageMap, baskets, classifyBasketMap); - try{ - tousseIntoBasketService.canAddThisBasketItem(baskets.get(0).getBarcode(),td,isSecondRecycleForForeignTousse); -// if(multiForeignTousseIntoSameBasket){}else{ -// canAddThisBasketItem(baskets.get(0),td); -// } - }catch(Exception e){ - return JSONUtil.buildJsonObject(false, e.getMessage()); - } - Integer loadedAmount = 0; + int loadedAmount = 0; Integer maxAmount = td.getIntoBasketMaxAmount(); - if(maxAmount != null && maxAmount > 0){ - CustomIntoBasket basketItem0 = baskets.get(0); - String basketBarcode = basketItem0.getBarcode(); - if(StringUtils.isNotBlank(basketBarcode)){ - Double usedPercentage = barcodeToPercentageMap.get(basketBarcode); - if(usedPercentage != null && usedPercentage < 1){ - Double toussePercentage = MathTools.divide(1,maxAmount,4); - Double basketUnUsedVolume = MathTools.sub(1,usedPercentage).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue(); - Integer canLoadAmount = Double.valueOf(MathTools.divide(basketUnUsedVolume,toussePercentage,4)).intValue(); - if(canLoadAmount > amount){ - loadedAmount = amount; + boolean enableTypesOfWashingFunction = CssdUtils.getSystemSetConfigByNameBool("enableTypesOfWashingFunction",false); + int count = enableTypesOfWashingFunction?baskets.size():1;//如果开启了 就轮询 否则就一次 + JSONObject cleaningBasketDoesNotMatchExceptionObj = null; + for (int i = 0; i < count; i++) { + try{ + basketItem = baskets.get(i); + try{ + tousseIntoBasketService.canAddThisBasketItem(basketItem.getBarcode(),td,isSecondRecycleForForeignTousse); + }catch(Exception e){ + if(i == count - 1){ + cleaningBasketDoesNotMatchExceptionObj = JSONUtil.buildJsonObject(false, e.getMessage()); + throw new CleaningBasketDoesNotMatchException(StringUtils.EMPTY); }else{ - loadedAmount = canLoadAmount; + continue; } } + Set tdIds = tousseIntoBasketService.getTdIdsByBasketbarcode(basketItem.getBarcode(), true, true); + + JSONObject checkResult = checkCleanType(td, tdIds); + if (checkResult != null && !checkResult.optBoolean(JSONUtil.JSON_KEY_SUCCESS)) { + if(i == count - 1){ + cleaningBasketDoesNotMatchExceptionObj = checkResult; + throw new CleaningBasketDoesNotMatchException(StringUtils.EMPTY); + }else{ + continue; + } + } + loadedAmount = 0; + if(maxAmount != null && maxAmount > 0){ + String basketBarcode = basketItem.getBarcode(); + if(StringUtils.isNotBlank(basketBarcode)){ + Double usedPercentage = barcodeToPercentageMap.get(basketBarcode); + if(usedPercentage != null && usedPercentage < 1){ + Double toussePercentage = MathTools.divide(1,maxAmount,4); + Double basketUnUsedVolume = MathTools.sub(1,usedPercentage).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue(); + Integer canLoadAmount = Double.valueOf(MathTools.divide(basketUnUsedVolume,toussePercentage,4)).intValue(); + if(canLoadAmount > amount){ + loadedAmount = amount; + }else{ + loadedAmount = canLoadAmount; + } + } + } + }else{ + loadedAmount = amount; + } + if(loadedAmount == 0){ + if(i == count - 1){ + cleaningBasketDoesNotMatchExceptionObj = JSONUtil.buildJsonObject(false, "【"+ td.getName() +"】的清洗装载数量上限为"+ maxAmount +",本次入筐数量为"+ amount +",【"+ basketItem.getName() +"】容量不够,请用其它篮筐装载。"); + throw new CleaningBasketDoesNotMatchException(StringUtils.EMPTY); + }else{ + continue; + } + } + break;//如果这个篮筐成功了 要退出循环 避免遍历下一个篮筐 + } catch (CleaningBasketDoesNotMatchException e) { + if(i == count - 1){//入筐异常就继续尝试下一个篮筐 直到最后一个 如果最后一个也异常就返回提示消息 + return cleaningBasketDoesNotMatchExceptionObj; + } } - }else{ - loadedAmount = amount; } - if(loadedAmount == 0){ - return JSONUtil.buildJsonObject(false, "【"+ td.getName() +"】的清洗装载数量上限为"+ maxAmount +",本次入筐数量为"+ amount +",【"+ baskets.get(0).getName() +"】容量不够,请用其它篮筐装载。"); - } - data.put("basketBarcode", baskets.get(0).getBarcode()); + data.put("basketBarcode", basketItem == null?StringUtils.EMPTY:basketItem.getBarcode()); data.put("tousseName", td.getName()); data.put("tousseDefinitionID", td.getId()); data.put("amount", loadedAmount);