Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousseitem/service/TousseItemManager.java =================================================================== diff -u -r19096 -r20844 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousseitem/service/TousseItemManager.java (.../TousseItemManager.java) (revision 19096) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousseitem/service/TousseItemManager.java (.../TousseItemManager.java) (revision 20844) @@ -37,5 +37,18 @@ * @return */ public List tousseItem2TousseItemVo(Collection tousseItems); + /** + * 根据一次性物品类型过滤一次性物品申请项。如果一次性物品类型为空,则返回所有一次性物品的申请项 + * @param tousseItems 要过滤的申请项。不一定都是一次性物品,可能包含器械包,但是返回值里面只包含一次性物品 + * @param disposableType 一次性物品类型,对应一次性物品定义的type + * @return 返回指定一次性物品类型的一次性物品,或者集合中所有一次性物品。可能为null + */ + public List filterByDisposableType(Collection tousseItems,String disposableType); + /** + * 过滤一次性物品申请项 + * @param tousseItems 要过滤的申请项。 + * @return 集合中所有一次性物品。可能为null + */ + public List filterDisposableGoods(Collection tousseItems); } Index: ssts-print/src/main/java/com/forgon/disinfectsystem/printRecyclingApplicationConfig/service/PrintConfigManagerImpl.java =================================================================== diff -u -r20064 -r20844 --- ssts-print/src/main/java/com/forgon/disinfectsystem/printRecyclingApplicationConfig/service/PrintConfigManagerImpl.java (.../PrintConfigManagerImpl.java) (revision 20064) +++ ssts-print/src/main/java/com/forgon/disinfectsystem/printRecyclingApplicationConfig/service/PrintConfigManagerImpl.java (.../PrintConfigManagerImpl.java) (revision 20844) @@ -6,18 +6,29 @@ import net.sf.json.JSONArray; import net.sf.json.JSONObject; +import org.apache.commons.collections4.CollectionUtils; + import com.forgon.disinfectsystem.basedatamanager.tousseGroup.service.TousseGroupManager; import com.forgon.disinfectsystem.entity.basedatamanager.tousseGroup.TousseGroup; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.printRecyclingApplicationConfig.PrintConfig; +import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; +import com.forgon.systemsetting.model.HttpOption; +import com.forgon.systemsetting.service.HttpOptionManager; import com.forgon.tools.hibernate.BasePoManagerImpl; public class PrintConfigManagerImpl extends BasePoManagerImpl implements PrintConfigManager { private TousseGroupManager tousseGroupManager; + private HttpOptionManager httpOptionManager; public void setTousseGroupManager(TousseGroupManager tousseGroupManager) { this.tousseGroupManager = tousseGroupManager; } + public void setHttpOptionManager(HttpOptionManager httpOptionManager) { + this.httpOptionManager = httpOptionManager; + } + private JSONObject buildTousseType(String type,Long tousseGroupID,String tousseGroupName){ JSONObject obj = new JSONObject(); obj.put("type", type); @@ -37,15 +48,21 @@ } JSONArray jsonArray = new JSONArray(); // 器械包 - jsonArray.add(buildTousseType("器械包",0L,"所有")); + jsonArray.add(buildTousseType(TousseDefinition.PACKAGE_TYPE_INSIDE,0L,"所有")); // 分组的器械包 for (TousseGroup tousseGroup : tousseGroupList) { - jsonArray.add(buildTousseType("器械包",tousseGroup.getId(),tousseGroup.getTousseGroupName())); + jsonArray.add(buildTousseType(TousseDefinition.PACKAGE_TYPE_INSIDE,tousseGroup.getId(),tousseGroup.getTousseGroupName())); } // 消毒物品 - jsonArray.add(buildTousseType("消毒物品",0L,"")); + jsonArray.add(buildTousseType(TousseDefinition.PACKAGE_TYPE_DISINFECTION,0L,"")); // 一次性物品 - jsonArray.add(buildTousseType("一次性物品",0L,"")); + jsonArray.add(buildTousseType(TousseItem.TYPE_DIPOSABLE_GOODS,0L,"")); + List disposableGoodsTypes = httpOptionManager.getHttpOptionListById(HttpOption.SYSTEMSETTING_DIPOSABLEGOODS_TYPE); + if(CollectionUtils.isNotEmpty(disposableGoodsTypes)){ + for(HttpOption option : disposableGoodsTypes){ + jsonArray.add(buildTousseType(TousseItem.TYPE_DIPOSABLE_GOODS,option.getId(),option.getOptionText())); + } + } int totalAmount = jsonArray.size(); JSONObject obj = new JSONObject(); obj.put("items", jsonArray); Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java =================================================================== diff -u -r20770 -r20844 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 20770) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 20844) @@ -86,7 +86,6 @@ import com.forgon.disinfectsystem.exception.RecyclingRecordException; import com.forgon.disinfectsystem.inventorymanagement.model.HrpInvoicePlan; import com.forgon.disinfectsystem.inventorymanagement.model.HrpTousseItem; -import com.forgon.disinfectsystem.inventorymanagement.model.Inventory; import com.forgon.disinfectsystem.inventorymanagement.service.InventoryManager; import com.forgon.disinfectsystem.packing.service.PackingManager; import com.forgon.disinfectsystem.print.vo.PrintPageVo; @@ -1755,20 +1754,9 @@ } // 一次性物品 else if (TousseItem.TYPE_DIPOSABLE_GOODS.equals(type)){ - - Collection col = CollectionUtils.select( - allTousseItems, new Predicate() { - @Override - public boolean evaluate(TousseItem vo) { - if (TousseItem.TYPE_DIPOSABLE_GOODS.equals(vo.getTousseType())){ - return true; - } - else{ - return false; - } - } - }); - + //一次性物品需要支持按一次性物品类型分组。tousseGroupName为一次性物品类型的名称,与一次性物品定义的type一致。 + //如果tousseGroupName为空,则表示所有一次性物品都包含 + List col = tousseItemManager.filterByDisposableType(allTousseItems, tousseGroupName); map.put(groupType, collection2MultiValueMap(col)); } } @@ -1792,15 +1780,15 @@ private MultiValueMap collection2MultiValueMap( Collection col) { MultiValueMap myMap = new MultiValueMap(); - - for (TousseItem item : col){ - - Long applicationId = 0L; - InvoicePlan invoicePlan = item.getInvoicePlan(); - if (invoicePlan != null){ - applicationId = invoicePlan.getId(); + if(CollectionUtils.isNotEmpty(col)){ + for (TousseItem item : col){ + Long applicationId = 0L; + InvoicePlan invoicePlan = item.getInvoicePlan(); + if (invoicePlan != null){ + applicationId = invoicePlan.getId(); + } + myMap.put(applicationId, item); } - myMap.put(applicationId, item); } return myMap; } Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousseitem/service/TousseItemManagerImpl.java =================================================================== diff -u -r19096 -r20844 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousseitem/service/TousseItemManagerImpl.java (.../TousseItemManagerImpl.java) (revision 19096) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousseitem/service/TousseItemManagerImpl.java (.../TousseItemManagerImpl.java) (revision 20844) @@ -4,12 +4,16 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.Predicate; import org.apache.commons.lang.StringUtils; import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; +import com.forgon.disinfectsystem.diposablegoods.service.DiposableGoodsManager; +import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; @@ -28,6 +32,12 @@ private TousseDefinitionManager tousseDefinitionManager; + private DiposableGoodsManager diposableGoodsManager; + + public void setDiposableGoodsManager(DiposableGoodsManager diposableGoodsManager) { + this.diposableGoodsManager = diposableGoodsManager; + } + public void setSupplyRoomConfigManager( SupplyRoomConfigManager supplyRoomConfigManager) { this.supplyRoomConfigManager = supplyRoomConfigManager; @@ -162,4 +172,42 @@ } return null; } + + @Override + public List filterByDisposableType( + Collection tousseItems, String disposableType) { + if(CollectionUtils.isNotEmpty(tousseItems)){ + List disposableGoodsTousseItem = filterDisposableGoods(tousseItems); + if(StringUtils.isBlank(disposableType)){ + return disposableGoodsTousseItem; + }else{ + if(CollectionUtils.isNotEmpty(disposableGoodsTousseItem)){ + Set disposableGoodsIds = disposableGoodsTousseItem.stream().filter( + tousseItem->tousseItem != null).map( + tousseItem->tousseItem.getDisposableGoodsId()).collect(Collectors.toSet()); + List dps = diposableGoodsManager.getCollection(disposableGoodsIds); + if(CollectionUtils.isNotEmpty(dps)){ + Set acceptDpIds = dps.stream().filter( + dp->StringUtils.equals(dp.getType(),disposableType)).map( + dp->dp.getId()).collect(Collectors.toSet()); + if(CollectionUtils.isNotEmpty(acceptDpIds)){ + return disposableGoodsTousseItem.stream().filter( + ti->acceptDpIds.contains(ti.getDisposableGoodsId())).collect(Collectors.toList()); + } + } + } + } + } + return null; + } + + @Override + public List filterDisposableGoods( + Collection tousseItems) { + if(CollectionUtils.isNotEmpty(tousseItems)){ + return tousseItems.stream().filter( + tousseItem->tousseItem != null && tousseItem.isDisposableGoods()).collect(Collectors.toList()); + } + return null; + } } Index: ssts-web/src/test/java/test/forgon/disinfectsystem/application/service/RecyclingApplicationManagerTests.java =================================================================== diff -u -r20458 -r20844 --- ssts-web/src/test/java/test/forgon/disinfectsystem/application/service/RecyclingApplicationManagerTests.java (.../RecyclingApplicationManagerTests.java) (revision 20458) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/application/service/RecyclingApplicationManagerTests.java (.../RecyclingApplicationManagerTests.java) (revision 20844) @@ -16,12 +16,12 @@ import org.apache.commons.collections4.map.MultiValueMap; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.annotation.Rollback; import org.testng.annotations.Test; import test.forgon.constant.Constants; import test.forgon.disinfectsystem.AbstractCSSDTest; +import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; @@ -67,7 +67,7 @@ JSONObject obj = printConfigManager.getTousseItemGroupingTypes(); assertNotNull(obj); - assertEquals(5, obj.optInt("total")); + assertEquals(7, obj.optInt("total")); JSONArray groupTypesArray = obj.getJSONArray("items"); @@ -94,10 +94,16 @@ allTousseItems.add(new TousseItem("止血带[100条/扎]" , "消毒物品", 20)); TousseItem disposable1 = new TousseItem("注射器[5ML]" , "一次性物品", 100); + DisposableGoods dp = diposableGoodsManager.get(Constants.DisposableGoodsName.INJECTOR,Constants.DisposableGoodsSpecification.FIVEML); + disposable1.setDisposableGoodsId(dp.getId()); TousseItem disposable2 = new TousseItem("注射器[10ML]" , "一次性物品", 200); + dp = diposableGoodsManager.get(Constants.DisposableGoodsName.INJECTOR,Constants.DisposableGoodsSpecification.TENML); + disposable2.setDisposableGoodsId(dp.getId()); TousseItem disposable3 = new TousseItem("纱块[6*8]" , "一次性物品", 50); + dp = diposableGoodsManager.get(Constants.DisposableGoodsName.GAUZE,Constants.DisposableGoodsSpecification.SIXEIGHT); + disposable3.setDisposableGoodsId(dp.getId()); allTousseItems.add(disposable1); allTousseItems.add(disposable2); @@ -112,8 +118,8 @@ assertNotNull(keyset); - assertEquals(5, keyset.size()); - assertEquals(5, map.size()); + assertEquals(7, keyset.size()); + assertEquals(7, map.size()); JSONObject obj1 = new JSONObject(); obj1.put("type", "器械包"); @@ -193,6 +199,39 @@ assertTrue(items5.contains(disposable3)); assertFalse(items5.contains(tousse1)); + + //一次性物品(注册器类型) + JSONObject obj6 = groupTypesArray.getJSONObject(5); + + MultiValueMap col6 = map.get(obj6); + assertNotNull(col6); + assertEquals(1, col6.size()); + + Long key6 = col6.keySet().iterator().next(); + + Collection items6 = col6.getCollection(key6); + assertNotNull(items6); + + assertEquals(2, items6.size()); + + assertTrue(items6.contains(disposable1)); + assertTrue(items6.contains(disposable2)); + + assertFalse(items6.contains(tousse1)); + + JSONObject obj7 = groupTypesArray.getJSONObject(6); + + MultiValueMap col7 = map.get(obj7); + assertNotNull(col7); + assertEquals(1, col7.size()); + + Long key7 = col7.keySet().iterator().next(); + + Collection items7 = col7.getCollection(key7); + assertNotNull(items7); + + assertEquals(1, items7.size()); + assertTrue(items7.contains(disposable3)); }