Index: ssts-web/src/test/java/test/forgon/disinfectsystem/basedatamanager/supplyroomconfig/service/SupplyRoomConfigManagerTests.java =================================================================== diff -u -r26085 -r40732 --- ssts-web/src/test/java/test/forgon/disinfectsystem/basedatamanager/supplyroomconfig/service/SupplyRoomConfigManagerTests.java (.../SupplyRoomConfigManagerTests.java) (revision 26085) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/basedatamanager/supplyroomconfig/service/SupplyRoomConfigManagerTests.java (.../SupplyRoomConfigManagerTests.java) (revision 40732) @@ -1,7 +1,22 @@ package test.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertFalse; +import java.util.Arrays; +import java.util.Set; +import java.util.stream.Collectors; + +import net.sf.json.JSONArray; + +import org.junit.Before; import org.junit.Test; +import com.forgon.Constants; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.AutobasketInsertionConfig; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; + import test.forgon.disinfectsystem.AbstractCSSDTest; /*** @@ -11,12 +26,81 @@ * Date:2015-2-14下午5:38:25 */ public class SupplyRoomConfigManagerTests extends AbstractCSSDTest { + private TousseDefinition tdTest开胸包; // Test开胸包 + private TousseDefinition tdTest缝合包; // Test缝合包 + private TousseDefinition tdTest开口包; // Test开口包 private void prepareData() { initCSSDData(); } - + @Before + public void setUp() { + // 初始化测试数据 + tdTest开胸包 = tousseDefinitionManager.getTousseDefinitionByName("Test开胸包"); + tdTest缝合包 = tousseDefinitionManager.getTousseDefinitionByName("Test缝合包"); + tdTest开口包 = tousseDefinitionManager.getTousseDefinitionByName("Test开口包"); + } @Test public void testGetTodayTimeQuantum(){ } + /** + * 设置3个包 不自动审核 + */ + @Test + public void testBatchUpdateAutobasketInsertionConfig1(){ + // 准备测试数据 + String tdIds = joinIds(tdTest开胸包, tdTest缝合包, tdTest开口包); + + // 执行操作 + supplyRoomConfigManager.batchUpdateAutobasketInsertionConfig(tdIds); + + // 验证结果 + Set configIds = getConfigIdsFromDB(); + assertEquals("配置ID数量不正确", 3, configIds.size()); + assertTrue("应包含开胸包ID", configIds.contains(tdTest开胸包.getAncestorID())); + assertTrue("应包含缝合包ID", configIds.contains(tdTest缝合包.getAncestorID())); + assertTrue("应包含开口包ID", configIds.contains(tdTest开口包.getAncestorID())); + JSONArray configs = supplyRoomConfigManager.getAutobasketInsertionConfig(); + assertEquals("配置不自动入筐的包数量应为3", 3, configs.size()); + } + + /** + * 设置2个包 不自动审核 然后删除1个 新增一个 + */ + @Test + public void testBatchUpdateAutobasketInsertionConfig2(){ + // 第一次设置2个包 + String initialIds = joinIds(tdTest开胸包, tdTest缝合包); + supplyRoomConfigManager.batchUpdateAutobasketInsertionConfig(initialIds); + + // 更新配置:移除缝合包,添加开口包 + String updatedIds = joinIds(tdTest开胸包, tdTest开口包); + supplyRoomConfigManager.batchUpdateAutobasketInsertionConfig(updatedIds); + + // 验证结果 + Set configIds = getConfigIdsFromDB(); + assertNotNull("配置ID集合不应为null", configIds); + assertEquals("配置ID数量不正确", 2, configIds.size()); + assertFalse("不应包含缝合包ID", configIds.contains(tdTest缝合包.getAncestorID())); + assertTrue("应包含开胸包ID", configIds.contains(tdTest开胸包.getAncestorID())); + assertTrue("应包含开口包ID", configIds.contains(tdTest开口包.getAncestorID())); + } + /** + * 辅助方法:拼接包定义的祖先id字符串 + * @param tds + * @return + */ + private String joinIds(TousseDefinition... tds) { + return Arrays.stream(tds) + .map(TousseDefinition::getAncestorID) + .map(String::valueOf) + .collect(Collectors.joining(Constants.IDS_SEPARATOR)); + } + /** + * 辅助方法:从数据库获取配置ID集合 + */ + private Set getConfigIdsFromDB() { + return objectDao.getLongSet( + "SELECT tousseDefinitionAncestorID FROM " + AutobasketInsertionConfig.class.getSimpleName()); + } } Index: ssts-web/src/test/java/test/forgon/disinfectsystem/packing/service/PackingManagerTests.java =================================================================== diff -u -r40709 -r40732 --- ssts-web/src/test/java/test/forgon/disinfectsystem/packing/service/PackingManagerTests.java (.../PackingManagerTests.java) (revision 40709) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/packing/service/PackingManagerTests.java (.../PackingManagerTests.java) (revision 40732) @@ -3,6 +3,7 @@ import java.text.ParseException; import java.util.*; +import java.util.stream.Collectors; import javax.servlet.http.HttpSession; @@ -23,6 +24,7 @@ import test.forgon.constant.Constants; import test.forgon.disinfectsystem.AbstractCSSDTest; +import test.forgon.disinfectsystem.constants.TousseDefinitionConstant; import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.directory.model.CssdHandleTousses; @@ -2263,13 +2265,13 @@ public void autobasketInsertion3(){ //准备数据 - Container sContainer01 = containerManager.getContainer("灭菌筐01"); - Container sContainer02 = containerManager.getContainer("灭菌筐02"); - Container rContainer116 = containerManager.getContainer("清洗筐116"); - Container rContainer117 = containerManager.getContainer("清洗筐117"); - String cleaningContainerIds = rContainer116.getId()+""; + Container sContainer01 = containerManager.getContainer(Constants.Container.CONTAINERNAME_灭菌筐01); + Container sContainer02 = containerManager.getContainer(Constants.Container.CONTAINERNAME_灭菌筐02); + Container rContainer116 = containerManager.getContainer(Constants.Container.CONTAINERNAME_清洗筐116); + Container rContainer117 = containerManager.getContainer(Constants.Container.CONTAINERNAME_清洗筐117); + String cleaningContainerIds = rContainer116.getId() + StringUtils.EMPTY; containerManager.saveOrUpdate(sContainer01, cleaningContainerIds); - String cleaningContainerIds2 = rContainer117.getId()+""; + String cleaningContainerIds2 = rContainer117.getId() + StringUtils.EMPTY; containerManager.saveOrUpdate(sContainer02, cleaningContainerIds2); ClassifyBasket cb116 = new ClassifyBasket(); cb116.setContainerBarcode(rContainer116.getBarcode()); @@ -2279,10 +2281,10 @@ ClassifyBasket cb117 = new ClassifyBasket(); cb117.setContainerBarcode(rContainer117.getBarcode()); objectDao.save(cb117); - TousseDefinition td_Test聚合包 = tousseDefinitionManager.getTousseDefinitionByName("Test聚合包"); - TousseDefinition td_Test开胸包 = tousseDefinitionManager.getTousseDefinitionByName("Test开胸包"); - TousseDefinition td_Test缝合包 = tousseDefinitionManager.getTousseDefinitionByName("Test缝合包"); - TousseDefinition td_Test开口包 = tousseDefinitionManager.getTousseDefinitionByName("Test开口包"); + TousseDefinition td_Test聚合包 = tousseDefinitionManager.getTousseDefinitionByName(Constants.TousseDefinitionName.Test聚合包); + TousseDefinition td_Test开胸包 = tousseDefinitionManager.getTousseDefinitionByName(Constants.TousseDefinitionName.Test开胸包); + TousseDefinition td_Test缝合包 = tousseDefinitionManager.getTousseDefinitionByName(Constants.TousseDefinitionName.Test缝合包); + TousseDefinition td_Test开口包 = tousseDefinitionManager.getTousseDefinitionByName(Constants.TousseDefinitionName.Test开口包); String orgUnitCoding = AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig(); TousseInstance ti0 = new TousseInstance(); @@ -2337,4 +2339,74 @@ assertTrue("指向不同的灭菌篮筐时 不入筐", MapUtils.isEmpty(comboToStContainer)); assertTrue("指向不同的灭菌篮筐时 不入筐 且有提示消息", CollectionUtils.isNotEmpty(notIntoBasketMessage)); } + @Test + public void testFilterAutobasketInsertionConfig() { + // 1. 准备容器数据 + Container sterilizedContainer = containerManager.getContainer(Constants.Container.CONTAINERNAME_灭菌筐01); + Container rContainer116 = containerManager.getContainer(Constants.Container.CONTAINERNAME_清洗筐116); + Container rContainer117 = containerManager.getContainer(Constants.Container.CONTAINERNAME_清洗筐117); + String cleaningContainerIds = rContainer116.getId() + com.forgon.Constants.IDS_SEPARATOR + rContainer117.getId(); + containerManager.saveOrUpdate(sterilizedContainer, cleaningContainerIds); + // 2. 准备筐 + ClassifyBasket basket116 = createClassifyBasket(rContainer116); + ClassifyBasket basket117 = createClassifyBasket(rContainer117); + // 3. 准备包定义 + TousseDefinition tdTest开胸包 = tousseDefinitionManager.getTousseDefinitionByName(Constants.TousseDefinitionName.Test开胸包); + TousseDefinition tdTest缝合包 = tousseDefinitionManager.getTousseDefinitionByName(Constants.TousseDefinitionName.Test缝合包); + TousseDefinition tdTest开口包 = tousseDefinitionManager.getTousseDefinitionByName(Constants.TousseDefinitionName.Test开口包); + + // 4. 创建包实例 + String orgUnitCoding = AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig(); + TousseInstance instance1 = createTousseInstance(tdTest开胸包, basket116, orgUnitCoding); + TousseInstance instance2 = createTousseInstance(tdTest缝合包, basket116, orgUnitCoding); + TousseInstance instance3 = createTousseInstance(tdTest开口包, basket117, orgUnitCoding); + + // 5. 设置不自动审核的包配置 + setExcludedPackages(tdTest开胸包, tdTest缝合包); + + // 6. 执行过滤并验证结果 + List instancesToFilter = Arrays.asList(instance1, instance2, instance3); + List filteredInstances = packingManager.filterAutobasketInsertionConfig(instancesToFilter); + + assertNotNull("过滤结果不应为null", filteredInstances); + assertEquals("应只保留1个包实例", 1, filteredInstances.size()); + + TousseInstance remaining = filteredInstances.get(0); + assertEquals("保留的包类型不正确", + tdTest开口包.getAncestorID(), + remaining.getTousseDefinition().getAncestorID()); + } + + private ClassifyBasket createClassifyBasket(Container container) { + ClassifyBasket basket = new ClassifyBasket(); + basket.setContainerBarcode(container.getBarcode()); + objectDao.save(basket); + return basket; + } + + private TousseInstance createTousseInstance(TousseDefinition definition, + ClassifyBasket basket, + String orgUnitCoding) { + TousseInstance instance = new TousseInstance(); + instance.setTousseFixedBarcode(false); + instance.setTousseDefinition(definition); + instance.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + instance.setTousseName(definition.getName()); + instance.setClassifyBasket_id(basket.getId()); + instance.setStatus(TousseInstance.STATUS_REVIEWED); + instance.setOrgUnitCoding(orgUnitCoding); + objectDao.saveOrUpdate(instance); + return instance; + } + /** + * 设置不自动审核入筐的包 + * @param tousseDefinitions + */ + private void setExcludedPackages(TousseDefinition... tousseDefinitions) { + String excludedIds = Arrays.stream(tousseDefinitions) + .map(TousseDefinition::getAncestorID) + .map(String::valueOf) + .collect(Collectors.joining(com.forgon.Constants.IDS_SEPARATOR)); + supplyRoomConfigManager.batchUpdateAutobasketInsertionConfig(excludedIds); + } } Index: ssts-web/src/test/java/test/forgon/disinfectsystem/packing/service/PackingManagerForGetWaitPackingTaskJsonTests.java =================================================================== diff -u -r40694 -r40732 --- ssts-web/src/test/java/test/forgon/disinfectsystem/packing/service/PackingManagerForGetWaitPackingTaskJsonTests.java (.../PackingManagerForGetWaitPackingTaskJsonTests.java) (revision 40694) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/packing/service/PackingManagerForGetWaitPackingTaskJsonTests.java (.../PackingManagerForGetWaitPackingTaskJsonTests.java) (revision 40732) @@ -2,17 +2,24 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertFalse; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; + +import net.sf.json.JSONArray; import net.sf.json.JSONObject; import test.forgon.constant.Constants; + import org.junit.Test; + import com.forgon.disinfectsystem.entity.basedatamanager.container.Container; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.becleanitem.ClassifyBasket; +import com.forgon.disinfectsystem.packing.service.PackingManagerImpl; import com.forgon.disinfectsystem.packing.vo.WaitPackingTaskItemVo; import com.forgon.disinfectsystem.packing.vo.WaitPackingTaskVo; import com.forgon.disinfectsystem.packing.vo.WaitPackingTaskVoGroupClassifyBasket; @@ -93,4 +100,42 @@ assertNotNull("有装配任务", waitPackingTaskItemVos1); assertEquals("文件夹中有1个装配任务", 1, waitPackingTaskItemVos1.size()); } + /** + * 两个装配任务 一个有结算科室 一个没有 + * 能只查询没有结算科室的装配任务 + */ + @Test + public void getWaitPackingTaskJsonTest3(){ + initCSSDData(); + TousseDefinition td = NewPackingTaskCommon.saveTousseDefinition(objectDao, "包1", TousseDefinition.PACKAGE_TYPE_INSIDE); + NewPackingTaskCommon.newCssdHandleTousses(objectDao, td, Constants.TASKGROUP_CHANGGUZU); + Container container清洗筐116 = containerManager.getContainer("清洗筐116"); + Container container清洗筐117 = containerManager.getContainer("清洗筐117"); + int taskType = 1; + ClassifyBasket classifyBasket清洗筐116 = NewPackingTaskCommon.newClassifyBasket(objectDao, container清洗筐116); + NewPackingTaskCommon.newPackingTask(objectDao, td, classifyBasket清洗筐116, null, taskType, container清洗筐116, Constants.ORG_UNIT_CODE_NEIKE); + + ClassifyBasket classifyBasket清洗筐117 = NewPackingTaskCommon.newClassifyBasket(objectDao, container清洗筐117); + NewPackingTaskCommon.newPackingTask(objectDao, td, classifyBasket清洗筐117, null, taskType, container清洗筐117, null); + String tousseOrDepart = null; + List waitPackingTaskVoGroupClassifyBaskets = new ArrayList(); + packingManager.getWaitPackingTaskTaskVoList(null, Constants.TASKGROUP_CHANGGUZU, basketBarcodes, returnObj, tousseOrDepart, pageIndex, pageSize, waitPackingTaskVoGroupClassifyBaskets, true, PackingManagerImpl.NULLSETTLEACCOUNTSDEPARTCODINGSTR); + JSONArray departments = packingManager.loadWaitPackingTaskDepart(Constants.TASKGROUP_CHANGGUZU); + // 验证结果不为空 + assertNotNull("待打包任务科室列表不应为null", departments); + assertFalse("待打包任务科室列表不应为空", departments.isEmpty()); + // 检查是否包含"无结算科室汇总" + boolean containsSettlementDept = false; + for (int i = 0; i < departments.size(); i++) { + JSONObject dept = departments.getJSONObject(i); + if (PackingManagerImpl.NULLSETTLEACCOUNTSDEPARTCODINGSTR.equals(dept.optString("name"))) { + containsSettlementDept = true; + break; + } + } + + // 验证结果 + assertTrue("待打包任务科室列表应包含结算科室[无结算科室汇总]: " + PackingManagerImpl.NULLSETTLEACCOUNTSDEPARTCODINGSTR, + containsSettlementDept); + } }