Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/vo/TousseIntoBasketService.java =================================================================== diff -u -r36411 -r40746 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/vo/TousseIntoBasketService.java (.../TousseIntoBasketService.java) (revision 36411) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/vo/TousseIntoBasketService.java (.../TousseIntoBasketService.java) (revision 40746) @@ -1,13 +1,7 @@ package com.forgon.disinfectsystem.recyclingrecord.vo; -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.*; import java.util.Map.Entry; -import java.util.Set; import net.sf.json.JSONArray; import net.sf.json.JSONObject; @@ -516,4 +510,38 @@ } return true; } + + /** + * 获取篮筐中入了哪些包 + * @param basketbarcode 篮筐条码 + * @param queryCleanedEntirely 是否只查询整包清洗的包 + * @return 包ID集合,如果没有匹配项返回空集合 + */ + public Set getTdIdsByBasketbarcode(String basketbarcode, boolean queryCleanedEntirely) { + if (MapUtils.isEmpty(infoMap)) { + return Collections.emptySet(); + } + + Set tdIds = new HashSet<>(); + + for (BasketTousseItem basketTousseItem : infoMap.values()) { + Map basketItems = basketTousseItem.getBaskets(); + + if (MapUtils.isEmpty(basketItems)) { + continue; + } + + // 检查整包清洗条件 + if (queryCleanedEntirely && basketItems.size() > 1) { + continue; + } + + // 直接检查是否包含目标条码 + if (basketItems.containsKey(basketbarcode)) { + tdIds.add(basketTousseItem.getTousseDefinitionId()); + } + } + + return tdIds; + } } Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManager.java =================================================================== diff -u -r40684 -r40746 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManager.java (.../RecyclingRecordManager.java) (revision 40684) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManager.java (.../RecyclingRecordManager.java) (revision 40746) @@ -345,9 +345,9 @@ * 除空清洗类型外,是有相同的清洗类型的包才能入筐 * 用与比较的类型来源 祖先包定义的清洗程序的清洗类型 和 祖先包定义的的可选清洗程序的清洗类型 * @param td 本次入筐的包定义 - * @param tousseIntoBasketInfo 已入筐的信息 + * @param tousseDefinitionIds 已入筐的包 * @return */ - public JSONObject checkCleanType(TousseDefinition td, String tousseIntoBasketInfo); + public JSONObject checkCleanType(TousseDefinition td, Set tousseDefinitionIds); } Index: ssts-web/src/test/java/test/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerForCheckCleanTypeTest.java =================================================================== diff -u -r40684 -r40746 --- ssts-web/src/test/java/test/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerForCheckCleanTypeTest.java (.../RecyclingRecordManagerForCheckCleanTypeTest.java) (revision 40684) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerForCheckCleanTypeTest.java (.../RecyclingRecordManagerForCheckCleanTypeTest.java) (revision 40746) @@ -1,7 +1,5 @@ package test.forgon.disinfectsystem.recyclingrecord.service; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; import net.sf.json.JSONArray; import net.sf.json.JSONObject; @@ -14,6 +12,12 @@ import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.serialnumber.model.SerialNum; import com.forgon.tools.json.JSONUtil; + +import java.util.HashSet; +import java.util.Set; + +import static org.junit.Assert.*; + /** * 入筐时校验清洗类型是否一致 * DGSETYY-79 @@ -60,11 +64,10 @@ TousseDefinition td = saveTousseDefinition(cleanMethod1.getCleanMethod()); - JSONArray tousseIntoBasketInfoJsonArr = new JSONArray(); //第一次入筐 是能入的 - JSONObject result = recyclingRecordManager.checkCleanType(td , tousseIntoBasketInfoJsonArr.toString()); + JSONObject result = recyclingRecordManager.checkCleanType(td , null); assertNotNull(result); - assertEquals(true, result.optBoolean(JSONUtil.JSON_KEY_SUCCESS)); + assertTrue(result.optBoolean(JSONUtil.JSON_KEY_SUCCESS)); assertEquals("篮筐内无其它物品,允许入筐", result.optString(JSONUtil.JSON_KEY_MESSAGE)); } @@ -78,11 +81,9 @@ CleanMethod cleanMethod2 = saveCleanMethod("P2","清洗类型c2"); TousseDefinition td1 = saveTousseDefinition(cleanMethod1.getCleanMethod()); TousseDefinition td2 = saveTousseDefinition(cleanMethod2.getCleanMethod()); - JSONArray tousseIntoBasketInfoJsonArr = new JSONArray(); - JSONObject tousseIntoBasketInfoJson = new JSONObject(); - tousseIntoBasketInfoJson.put("tousseDefinitionId", td1.getId()); - tousseIntoBasketInfoJsonArr.add(tousseIntoBasketInfoJson); - JSONObject result = recyclingRecordManager.checkCleanType(td2 , tousseIntoBasketInfoJsonArr.toString()); + Set tousseDefinitionIds = new HashSet<>(); + tousseDefinitionIds.add(td1.getId()); + JSONObject result = recyclingRecordManager.checkCleanType(td2 , tousseDefinitionIds); assertNotNull(result); assertEquals(td2.getName() + "的清洗类型不同于篮筐内的其他物品,不能添加到篮筐!", result.optString(JSONUtil.JSON_KEY_MESSAGE)); } @@ -96,13 +97,11 @@ CleanMethod cleanMethod2 = saveCleanMethod("P2","清洗类型c1"); TousseDefinition td1 = saveTousseDefinition(cleanMethod1.getCleanMethod()); TousseDefinition td2 = saveTousseDefinition(cleanMethod2.getCleanMethod()); - JSONArray tousseIntoBasketInfoJsonArr = new JSONArray(); - JSONObject tousseIntoBasketInfoJson = new JSONObject(); - tousseIntoBasketInfoJson.put("tousseDefinitionId", td1.getId()); - tousseIntoBasketInfoJsonArr.add(tousseIntoBasketInfoJson); - JSONObject result = recyclingRecordManager.checkCleanType(td2 , tousseIntoBasketInfoJsonArr.toString()); + Set tousseDefinitionIds = new HashSet<>(); + tousseDefinitionIds.add(td1.getId()); + JSONObject result = recyclingRecordManager.checkCleanType(td2 , tousseDefinitionIds); assertNotNull(result); - assertEquals(true, result.optBoolean(JSONUtil.JSON_KEY_SUCCESS)); + assertTrue(result.optBoolean(JSONUtil.JSON_KEY_SUCCESS)); assertEquals(td2.getName() + "与篮筐内物品存在相同的清洗类型,允许入筐", result.optString(JSONUtil.JSON_KEY_MESSAGE)); } @@ -120,15 +119,12 @@ TousseDefinition td2 = saveTousseDefinition(null); saveTousseDefOptionCleanMethod(cleanMethod1 , td1); saveTousseDefOptionCleanMethod(cleanMethod2 , td1); - - JSONArray tousseIntoBasketInfoJsonArr = new JSONArray(); - JSONObject tousseIntoBasketInfoJson = new JSONObject(); - tousseIntoBasketInfoJson.put("tousseDefinitionId", td1.getId()); - tousseIntoBasketInfoJsonArr.add(tousseIntoBasketInfoJson); - - JSONObject result = recyclingRecordManager.checkCleanType(td2 , tousseIntoBasketInfoJsonArr.toString()); + + Set tousseDefinitionIds = new HashSet<>(); + tousseDefinitionIds.add(td1.getId()); + JSONObject result = recyclingRecordManager.checkCleanType(td2 , tousseDefinitionIds); assertNotNull(result); - assertEquals(true, result.optBoolean(JSONUtil.JSON_KEY_SUCCESS)); + assertTrue(result.optBoolean(JSONUtil.JSON_KEY_SUCCESS)); assertEquals(td2.getName() + "无清洗类型,允许入筐", result.optString(JSONUtil.JSON_KEY_MESSAGE)); } /** @@ -147,14 +143,11 @@ saveTousseDefOptionCleanMethod(cleanMethod1 , td1); saveTousseDefOptionCleanMethod(cleanMethod2 , td1); - JSONArray tousseIntoBasketInfoJsonArr = new JSONArray(); - JSONObject tousseIntoBasketInfoJson = new JSONObject(); - tousseIntoBasketInfoJson.put("tousseDefinitionId", td1.getId()); - tousseIntoBasketInfoJsonArr.add(tousseIntoBasketInfoJson); - - JSONObject result = recyclingRecordManager.checkCleanType(td2 , tousseIntoBasketInfoJsonArr.toString()); + Set tousseDefinitionIds = new HashSet<>(); + tousseDefinitionIds.add(td1.getId()); + JSONObject result = recyclingRecordManager.checkCleanType(td2 , tousseDefinitionIds); assertNotNull(result); - assertEquals(false, result.optBoolean(JSONUtil.JSON_KEY_SUCCESS)); + assertFalse(result.optBoolean(JSONUtil.JSON_KEY_SUCCESS)); assertEquals(td2.getName() + "的清洗类型不同于篮筐内的其他物品,不能添加到篮筐!", result.optString(JSONUtil.JSON_KEY_MESSAGE)); } /** @@ -173,13 +166,11 @@ saveTousseDefOptionCleanMethod(cleanMethod1 , td1); saveTousseDefOptionCleanMethod(cleanMethod2 , td1); - JSONArray tousseIntoBasketInfoJsonArr = new JSONArray(); - JSONObject tousseIntoBasketInfoJson = new JSONObject(); - tousseIntoBasketInfoJson.put("tousseDefinitionId", td1.getId()); - tousseIntoBasketInfoJsonArr.add(tousseIntoBasketInfoJson); - JSONObject result = recyclingRecordManager.checkCleanType(td2 , tousseIntoBasketInfoJsonArr.toString()); + Set tousseDefinitionIds = new HashSet<>(); + tousseDefinitionIds.add(td1.getId()); + JSONObject result = recyclingRecordManager.checkCleanType(td2 , tousseDefinitionIds); assertNotNull(result); - assertEquals(true, result.optBoolean(JSONUtil.JSON_KEY_SUCCESS)); + assertTrue(result.optBoolean(JSONUtil.JSON_KEY_SUCCESS)); assertEquals(td2.getName() + "与篮筐内物品存在相同的清洗类型,允许入筐", result.optString(JSONUtil.JSON_KEY_MESSAGE)); } /** @@ -202,15 +193,13 @@ saveTousseDefOptionCleanMethod(cleanMethod2 , td1); saveTousseDefOptionCleanMethod(cleanMethod3 , td2); saveTousseDefOptionCleanMethod(cleanMethod4 , td2); + + Set tousseDefinitionIds = new HashSet<>(); + tousseDefinitionIds.add(td1.getId()); - JSONArray tousseIntoBasketInfoJsonArr = new JSONArray(); - JSONObject tousseIntoBasketInfoJson = new JSONObject(); - tousseIntoBasketInfoJson.put("tousseDefinitionId", td1.getId()); - tousseIntoBasketInfoJsonArr.add(tousseIntoBasketInfoJson); - - JSONObject result = recyclingRecordManager.checkCleanType(td2 , tousseIntoBasketInfoJsonArr.toString()); + JSONObject result = recyclingRecordManager.checkCleanType(td2 , tousseDefinitionIds); assertNotNull(result); - assertEquals(false, result.optBoolean(JSONUtil.JSON_KEY_SUCCESS)); + assertFalse(result.optBoolean(JSONUtil.JSON_KEY_SUCCESS)); assertEquals(td2.getName() + "的清洗类型不同于篮筐内的其他物品,不能添加到篮筐!", result.optString(JSONUtil.JSON_KEY_MESSAGE)); } /** @@ -231,13 +220,11 @@ saveTousseDefOptionCleanMethod(cleanMethod2 , td1); saveTousseDefOptionCleanMethod(cleanMethod3 , td2); saveTousseDefOptionCleanMethod(cleanMethod4 , td2); - JSONArray tousseIntoBasketInfoJsonArr = new JSONArray(); - JSONObject tousseIntoBasketInfoJson = new JSONObject(); - tousseIntoBasketInfoJson.put("tousseDefinitionId", td1.getId()); - tousseIntoBasketInfoJsonArr.add(tousseIntoBasketInfoJson); - JSONObject result = recyclingRecordManager.checkCleanType(td2 , tousseIntoBasketInfoJsonArr.toString()); + Set tousseDefinitionIds = new HashSet<>(); + tousseDefinitionIds.add(td1.getId()); + JSONObject result = recyclingRecordManager.checkCleanType(td2 , tousseDefinitionIds); assertNotNull(result); - assertEquals(true, result.optBoolean(JSONUtil.JSON_KEY_SUCCESS)); + assertTrue(result.optBoolean(JSONUtil.JSON_KEY_SUCCESS)); assertEquals(td2.getName() + "与篮筐内物品存在相同的清洗类型,允许入筐", result.optString(JSONUtil.JSON_KEY_MESSAGE)); } /** @@ -258,14 +245,11 @@ saveTousseDefOptionCleanMethod(cleanMethod2 , td1); saveTousseDefOptionCleanMethod(cleanMethod3 , td2); saveTousseDefOptionCleanMethod(cleanMethod4 , td2); - JSONArray tousseIntoBasketInfoJsonArr = new JSONArray(); - JSONObject tousseIntoBasketInfoJson = new JSONObject(); - tousseIntoBasketInfoJson.put("tousseDefinitionId", td1.getId()); - tousseIntoBasketInfoJsonArr.add(tousseIntoBasketInfoJson); - - JSONObject result = recyclingRecordManager.checkCleanType(td2 , tousseIntoBasketInfoJsonArr.toString()); + Set tousseDefinitionIds = new HashSet<>(); + tousseDefinitionIds.add(td1.getId()); + JSONObject result = recyclingRecordManager.checkCleanType(td2 , tousseDefinitionIds); assertNotNull(result); - assertEquals(true, result.optBoolean(JSONUtil.JSON_KEY_SUCCESS)); + assertTrue(result.optBoolean(JSONUtil.JSON_KEY_SUCCESS)); assertEquals(td2.getName() + "与篮筐内物品存在相同的清洗类型,允许入筐", result.optString(JSONUtil.JSON_KEY_MESSAGE)); } /** @@ -278,12 +262,10 @@ CleanMethod cleanMethod2 = saveCleanMethod("P2","清洗类型c2"); TousseDefinition td1 = saveTousseDefinition(cleanMethod1.getCleanMethod()); TousseDefinition td2 = saveTousseDefinition(cleanMethod2.getCleanMethod()); - JSONArray tousseIntoBasketInfoJsonArr = new JSONArray(); - JSONObject tousseIntoBasketInfoJson = new JSONObject(); - tousseIntoBasketInfoJson.put("tousseDefinitionId", td1.getId()); - tousseIntoBasketInfoJsonArr.add(tousseIntoBasketInfoJson); - JSONObject result = recyclingRecordManager.checkCleanType(td2 , tousseIntoBasketInfoJsonArr.toString()); - assertEquals(true, result.optBoolean(JSONUtil.JSON_KEY_SUCCESS)); + Set tousseDefinitionIds = new HashSet<>(); + tousseDefinitionIds.add(td1.getId()); + JSONObject result = recyclingRecordManager.checkCleanType(td2 , tousseDefinitionIds); + assertTrue(result.optBoolean(JSONUtil.JSON_KEY_SUCCESS)); assertEquals("篮筐内物品无清洗类型,允许入筐", result.optString(JSONUtil.JSON_KEY_MESSAGE)); } } Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java =================================================================== diff -u -r40684 -r40746 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java (.../RecyclingRecordManagerImpl.java) (revision 40684) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java (.../RecyclingRecordManagerImpl.java) (revision 40746) @@ -7680,10 +7680,6 @@ return JSONUtil.buildJsonObject(false,"对应的申请单已经不存在,请打开新的申请单进行回收!"); } } - JSONObject checkResult = checkCleanType(td, tousseIntoBasketInfo); - if(checkResult != null && !checkResult.optBoolean(JSONUtil.JSON_KEY_SUCCESS)){ - return checkResult; - } if(ip != null){ if(ip.ended()){ return JSONUtil.buildJsonObject(false, "申请单已被终止!"); @@ -7784,7 +7780,18 @@ //必须是getBean的方式。因为每次都要是新创建的bean。不使用new的方式,是因为内部还引用了其他的bean TousseIntoBasketService tousseIntoBasketService = (TousseIntoBasketService) SpringBeanManger.getBean("tousseIntoBasketService"); tousseIntoBasketService.initJsonArray(tousseIntoBasketInfo); - tousseIntoBasketService.initDataBaseBasketTousse(baskets.stream().map(p->p.getBarcode()).collect(Collectors.toSet())); + 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(); @@ -8013,26 +8020,14 @@ return obj; } @Override - public JSONObject checkCleanType(TousseDefinition td, String tousseIntoBasketInfo){ + public JSONObject checkCleanType(TousseDefinition td, Set tousseDefinitionIds){ boolean enableTypesOfWashingFunction = CssdUtils.getSystemSetConfigByNameBool("enableTypesOfWashingFunction",false); if(!enableTypesOfWashingFunction){ return null; } - if(StringUtils.isBlank(tousseIntoBasketInfo)){ + if(CollectionUtils.isEmpty(tousseDefinitionIds)){ return JSONUtil.buildJsonObject(true, "篮筐内无其它物品,允许入筐"); } - JSONArray tousseIntoBasketInfoArr = JSONArray.fromObject(tousseIntoBasketInfo); - if(CollectionUtils.isEmpty(tousseIntoBasketInfoArr)){ - return JSONUtil.buildJsonObject(true, "篮筐内无其它物品,允许入筐"); - } - Set tousseDefinitionIds = new HashSet<>(); - for (int i = 0; i < tousseIntoBasketInfoArr.size(); i++) { - long tousseDefinitionId = tousseIntoBasketInfoArr.optJSONObject(i).optLong("tousseDefinitionId"); - if(!DatabaseUtil.isPoIdValid(tousseDefinitionId)){ - continue; - } - tousseDefinitionIds.add(tousseDefinitionId); - } if(CollectionUtils.isEmpty(tousseDefinitionIds)){ return JSONUtil.buildJsonObject(true, "篮筐内无其它物品,允许入筐"); }