Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java =================================================================== diff -u -r14333 -r14452 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 14333) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 14452) @@ -1665,8 +1665,14 @@ public void setToDefaultWareHouse(Collection tousseInstances, String orgUnitCoding) { if(tousseInstances != null && !tousseInstances.isEmpty()){ + WareHouse wareHouse = wareHouseManager.getDefaultWareHouseByUnitCode(orgUnitCoding); + if(wareHouse == null){ + wareHouse = new WareHouse(); + wareHouse.setId(null); + wareHouse.setName(""); + } for(TousseInstance ti : tousseInstances){ - setToDefaultWareHouse(ti,orgUnitCoding); + setToWarehouse(ti,wareHouse); } } } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsstock/service/GoodsStockManagerImpl.java =================================================================== diff -u -r14027 -r14452 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsstock/service/GoodsStockManagerImpl.java (.../GoodsStockManagerImpl.java) (revision 14027) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsstock/service/GoodsStockManagerImpl.java (.../GoodsStockManagerImpl.java) (revision 14452) @@ -3,14 +3,26 @@ import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; +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.Set; +import java.util.stream.Collectors; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.Predicate; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinitionMaterial; import com.forgon.disinfectsystem.entity.goodsstock.GoodsStock; +import com.forgon.tools.MathTools; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.string.StringTools; +import com.forgon.tools.util.SqlUtils; /** * 器械包、材料库存manager实现类 @@ -26,6 +38,71 @@ } /** + * 获取包定义的id跟包定义的实例之间的对应Map + * @param goodsStockList + * @return + */ + @SuppressWarnings("unchecked") + private Map getIDTousseDefinitionMap(List goodsStockList){ + Map map = new HashMap(); + if(CollectionUtils.isNotEmpty(goodsStockList)){ + List ids = goodsStockList.stream().map(gs->gs.getTousseDefinitionId()).collect(Collectors.toList()); + SqlUtils.getNonStringFieldInCollectionsPredicate("id", ids); + List tds = + (List)objectDao.findByIds(TousseDefinition.class.getSimpleName(), ids); + if(CollectionUtils.isNotEmpty(tds)){ + for(TousseDefinition td : tds){ + map.put(td.getId(), td); + } + } + } + return map; + } + /** + * 获取仓库下的物品名称的库存集合。此方法可能会多返回一些记录,但这是些记录并不是你想要的。 + *

如要获取仓库1下的张三和仓库2下的李四,应该只会有两条记录返回。但是此方法的实现,可能还会返回仓库1下的李四和仓库2下的张三 + * @param wareHouseIds + * @param goodsNames + * @param amountBigZero 是否只获取数量大于0的记录。对于发货,应该只要查数量大于0的库存记录,但是入库可能需要查库存等于0的记录 + * @return + */ + @SuppressWarnings("unchecked") + private List getGoodsStock(Collection wareHouseIds,Collection goodsNames,boolean amountBigZero){ + String namePredicate = SqlUtils.getStringFieldInCollectionsPredicate("name", goodsNames); + String idPredicate = SqlUtils.getNonStringFieldInCollectionsPredicate("wareHouseId", wareHouseIds); + String amountPredicate = " 1=1 "; + if(amountBigZero){ + amountPredicate = " amount > 0 "; + } + String sql = " where 1=1 and " + idPredicate + " and " + namePredicate + " and " + amountPredicate; + List list = objectDao.getBySql_ForUpdate2(GoodsStock.class.getSimpleName(), sql); + return list; + } + /** + * 根据仓库下的包定义的id或者是材料定义的id获取库存信息。此方法可能会多返回一些记录,但这是些记录并不是你想要的。 + *

如要获取仓库1下的张三和仓库2下的李四,应该只会有两条记录返回。但是此方法的实现,可能还会返回仓库1下的李四和仓库2下的张三 + * @param wareHouseIds + * @param goodsDefId 器械包定义或者是材料定义的id + * @param toussedefIdOrMaterialDefId true为包定义id,false为材料定义id + * @return + */ + @SuppressWarnings("unchecked") + private List getGoodsStock(Collection wareHouseIds,Collection goodsDefId,boolean toussedefIdOrMaterialDefId,boolean amountBigZero){ + String wareHouseIdPredicate = SqlUtils.getNonStringFieldInCollectionsPredicate("wareHouseId", wareHouseIds); + String goodsDefIdPredicate = ""; + String amountPredicate = " 1=1 "; + if(amountBigZero){ + amountPredicate = " amount > 0 "; + } + if(toussedefIdOrMaterialDefId){ + goodsDefIdPredicate = SqlUtils.getNonStringFieldInCollectionsPredicate("tousseDefinitionId", goodsDefId); + }else{ + goodsDefIdPredicate = SqlUtils.getNonStringFieldInCollectionsPredicate("materialDefinitionId", goodsDefId); + } + String sql = " where 1=1 and " + wareHouseIdPredicate + " and " + goodsDefIdPredicate + " and " + amountPredicate; + return objectDao.findBySql_ForUpdate(GoodsStock.class.getSimpleName(), sql); + } + /** * 新增或修改器械包或材料库存数据(同一个仓库的同一个器械包id只存在一条数据,如果是材料则每次入库会产生一条记录),同步方法防止并发出错 * 修改入库或出库单时,数量应传修改后减修改前的差值。如果修改前后数量不变,则数量应该传0 * @param goodsStockList @@ -40,135 +117,173 @@ } //1.如果为出库,校验库存是否够扣减 if(MODE_OUTSTOCK.equals(mode)){ - String sql = null; - GoodsStock goodsStock = null; - for(GoodsStock goodsStockTemp : goodsStockList){ - if(goodsStockTemp.getAmount() == null || goodsStockTemp.getAmount() == 0){ - throw new RuntimeException("入/退库单"+goodsStockTemp.getName()+"的数量不能为空或0"); + doOutStock(goodsStockList); + } else if(MODE_INSTOCK.equals(mode)){ + doInStock(goodsStockList); + } + return goodsStockList; + } + + private void doInStock(List goodsStockList) { + String sql = null; + GoodsStock goodsStock = null; + for(GoodsStock goodsStockTemp : goodsStockList){ + if(goodsStockTemp.getAmount() == null || goodsStockTemp.getAmount() == 0){ + throw new RuntimeException("入/退库单"+goodsStockTemp.getName()+"的数量不能为空或0"); + } + //如果为器械包 + if(DatabaseUtil.isPoIdValid(goodsStockTemp.getTousseDefinitionId())){ + sql = " where 1=1 and wareHouseId = " + goodsStockTemp.getWareHouseId() + " and tousseDefinitionId = " + goodsStockTemp.getTousseDefinitionId(); + //判断库存数量是否大于退/出库数量 + goodsStock = (GoodsStock)objectDao.getBySql(GoodsStock.class.getSimpleName(), sql); + if(goodsStock == null){ + goodsStock = new GoodsStock(); + goodsStock.setWareHouseId(goodsStockTemp.getWareHouseId()); + goodsStock.setWareHouseName(goodsStockTemp.getWareHouseName()); + goodsStock.setMaterialDefinitionId(goodsStockTemp.getMaterialDefinitionId()); + goodsStock.setTousseDefinitionId(goodsStockTemp.getTousseDefinitionId()); + goodsStock.setName(goodsStockTemp.getName()); + goodsStock.setGoodsType(goodsStockTemp.getGoodsType()); + goodsStock.setOrgUnitCode(goodsStockTemp.getOrgUnitCode()); + goodsStock.setOrgUnitName(goodsStockTemp.getOrgUnitName()); + goodsStock.setAmount(goodsStockTemp.getAmount()); + objectDao.saveOrUpdate(goodsStock); + } else { + goodsStock.setAmount(goodsStock.getAmount() + goodsStockTemp.getAmount()); + objectDao.saveOrUpdate(goodsStock); } - if(DatabaseUtil.isPoIdValid(goodsStockTemp.getTousseDefinitionId())){ - TousseDefinition td = - (TousseDefinition)objectDao.getBySql(TousseDefinition.class.getSimpleName(), "where id=" + goodsStockTemp.getTousseDefinitionId()); - //如果包定义为消毒物品、外来器械包、自定义器械包、外部代理灭菌、外来器械拆分小包等,则按器械包名称查询库存并进行扣减 - if(td != null){ - if(TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(td.getTousseType()) - || TousseDefinition.PACKAGE_TYPE_FOREIGN.equals(td.getTousseType()) - || TousseDefinition.PACKAGE_TYPE_CUSTOM.equals(td.getTousseType()) - || TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY.equals(td.getTousseType()) - || TousseDefinition.PACKAGE_TYPE_SPLIT.equals(td.getTousseType())){ - //先查询库存是否足够 - int amount = - objectDao.countBySql("select count(0) from " + GoodsStock.class.getSimpleName() + " where name = '" + goodsStockTemp.getName() + "' and amount > 0"); - if(amount < goodsStockTemp.getAmount()){ - throw new RuntimeException(goodsStockTemp.getName() + "的库存数量小于出库或退库数量,不能出库或退库"); - } else { - sql = " where 1=1 and wareHouseId = " + goodsStockTemp.getWareHouseId() + " and name = '" + goodsStockTemp.getName() + "' and amount > 0"; - List list = objectDao.findBySql(GoodsStock.class.getSimpleName(), sql); - int needOutAmount = goodsStockTemp.getAmount(); - for(GoodsStock stock : list){ - //如果能够扣完,则跳出 - if(stock.getAmount() >= needOutAmount){ - stock.setAmount(stock.getAmount() - needOutAmount); - objectDao.saveOrUpdate(stock); - break; - } - //否则当前库存扣完,直至扣至需要扣完的为止 - needOutAmount -= stock.getAmount(); - stock.setAmount(0); + }else if(DatabaseUtil.isPoIdValid(goodsStockTemp.getMaterialDefinitionId())){ + goodsStock = goodsStockTemp; + //如果为材料 + objectDao.saveOrUpdate(goodsStock); + } else { + throw new RuntimeException("入/退库单器械包id与材料id不能同时为空"); + } + } + } + + /** + * 出库扣减库存 + * @param goodsStockList + */ + private void doOutStock(List goodsStockList) { + if(CollectionUtils.isEmpty(goodsStockList)){ + return; + } + Map idTousseDefinitionMap = getIDTousseDefinitionMap(goodsStockList); + + Set wareHouseIds = new HashSet(); + Set goodsNames = new HashSet(); + Set tousseDefIds = new HashSet(); + Set materialDefIds = new HashSet(); + for(GoodsStock gs : goodsStockList){ + wareHouseIds.add(gs.getWareHouseId()); + goodsNames.add(gs.getName()); + if(DatabaseUtil.isPoIdValid(gs.getTousseDefinitionId())){ + tousseDefIds.add(gs.getTousseDefinitionId()); + } + if(DatabaseUtil.isPoIdValid(gs.getMaterialDefinitionId())){ + materialDefIds.add(gs.getMaterialDefinitionId()); + } + } + List goodsStockListInDb = getGoodsStock(wareHouseIds, goodsNames,true); + List toussedefGoodsStockListInDb = getGoodsStock(wareHouseIds, tousseDefIds, true,true); + List materialDefGoodsStockListInDb = getGoodsStock(wareHouseIds,materialDefIds,false,true); + for(GoodsStock goodsStockTemp : goodsStockList){ + if(goodsStockTemp.getAmount() == null || goodsStockTemp.getAmount() == 0){ + throw new RuntimeException("入/退库单"+goodsStockTemp.getName()+"的数量不能为空或0"); + } + + if(DatabaseUtil.isPoIdValid(goodsStockTemp.getTousseDefinitionId())){ + TousseDefinition td = idTousseDefinitionMap.get(goodsStockTemp.getTousseDefinitionId()); + //如果包定义为消毒物品、外来器械包、自定义器械包、外部代理灭菌、外来器械拆分小包等,则按器械包名称查询库存并进行扣减 + if(td != null){ + if(TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(td.getTousseType()) + || TousseDefinition.PACKAGE_TYPE_FOREIGN.equals(td.getTousseType()) + || TousseDefinition.PACKAGE_TYPE_CUSTOM.equals(td.getTousseType()) + || TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY.equals(td.getTousseType()) + || TousseDefinition.PACKAGE_TYPE_SPLIT.equals(td.getTousseType())){ + //先查询库存是否足够 + List list = goodsStockListInDb.stream().filter( + gs->gs.getWareHouseId().equals(goodsStockTemp.getWareHouseId()) + && StringTools.equals(gs.getName(), goodsStockTemp.getName()) + && gs.getAmount() > 0).collect(Collectors.toList()); + int amount = 0; + if(CollectionUtils.isNotEmpty(list)){ + for(GoodsStock gs : list){ + amount = MathTools.add(amount, gs.getAmount()).intValue(); + } + } + if(amount < goodsStockTemp.getAmount()){ + throw new RuntimeException(goodsStockTemp.getName() + "的库存数量小于出库或退库数量,不能出库或退库"); + } else { + int needOutAmount = goodsStockTemp.getAmount(); + for(GoodsStock stock : list){ + //如果能够扣完,则跳出 + if(stock.getAmount() >= needOutAmount){ + stock.setAmount(stock.getAmount() - needOutAmount); objectDao.saveOrUpdate(stock); + break; } + //否则当前库存扣完,直至扣至需要扣完的为止 + needOutAmount -= stock.getAmount(); + stock.setAmount(0); + objectDao.saveOrUpdate(stock); } - }else{ - //如果为器械包、敷料包时则按包定义id查询并扣减库存 - sql = " where 1=1 and wareHouseId = " + goodsStockTemp.getWareHouseId() + " and tousseDefinitionId = " + goodsStockTemp.getTousseDefinitionId(); - //判断库存数量是否大于退/出库数量 - goodsStock = (GoodsStock)objectDao.getBySql(GoodsStock.class.getSimpleName(), sql); - if(goodsStock == null){ - throw new RuntimeException("未找到"+goodsStockTemp.getName()+"的库存数据,不能出库或退库"); - } else if(goodsStock.getAmount() < goodsStockTemp.getAmount()){ - throw new RuntimeException(goodsStockTemp.getName() + "的库存数量小于出库或退库数量,不能出库或退库"); - } else { - goodsStock.setAmount(goodsStock.getAmount() - goodsStockTemp.getAmount()); - objectDao.saveOrUpdate(goodsStock); - } } }else{ - throw new RuntimeException("未找到"+goodsStockTemp.getName()+"的器械包定义"); - } - }else if(goodsStockTemp.getMaterialDefinitionId() != null && goodsStockTemp.getMaterialDefinitionId() != 0){ - //先判断该材料所有库存总和是否大于需扣减的数量 - ResultSet rs = - objectDao.executeSql("select sum(amount) amount from GoodsStock where 1=1 and wareHouseId = " + goodsStockTemp.getWareHouseId() + " and materialDefinitionId=" + goodsStockTemp.getMaterialDefinitionId() + " and amount > 0"); - int totalAmount = 0; - try { - if(rs.next()){ - BigDecimal bd = rs.getBigDecimal("amount"); - if(bd != null){ - totalAmount = bd.intValue(); - } - } - } catch (SQLException e) { - throw new RuntimeException("材料库存查询出错"); - } - DatabaseUtil.closeResultSetAndStatement(rs); - int needReturnAmount = goodsStockTemp.getAmount(); - if(totalAmount < needReturnAmount){ - throw new RuntimeException(goodsStockTemp.getName() + ",材料总库存数量少于需要扣减的数量,不能扣减,请修改数量"); - } - while(true){ - sql = " where 1=1 and wareHouseId = " + goodsStockTemp.getWareHouseId() + " and materialDefinitionId = " + goodsStockTemp.getMaterialDefinitionId() + " and amount > 0"; - goodsStock = (GoodsStock)objectDao.getBySql(GoodsStock.class.getSimpleName(), sql); - if(goodsStock.getAmount() >= needReturnAmount){ - goodsStock.setAmount(goodsStock.getAmount() - needReturnAmount); + //如果为器械包、敷料包时则按包定义id查询并扣减库存 + GoodsStock goodsStock = CollectionUtils.find(toussedefGoodsStockListInDb,new Predicate(){ + + @Override + public boolean evaluate(GoodsStock goodsStock) { + return goodsStockTemp.getWareHouseId().equals(goodsStock.getWareHouseId()) + && goodsStockTemp.getTousseDefinitionId().equals(goodsStock.getTousseDefinitionId()); + }}); + //判断库存数量是否大于退/出库数量 + if(goodsStock == null){ + throw new RuntimeException("未找到"+goodsStockTemp.getName()+"的库存数据,不能出库或退库"); + } else if(goodsStock.getAmount() < goodsStockTemp.getAmount()){ + throw new RuntimeException(goodsStockTemp.getName() + "的库存数量小于出库或退库数量,不能出库或退库"); + } else { + goodsStock.setAmount(goodsStock.getAmount() - goodsStockTemp.getAmount()); objectDao.saveOrUpdate(goodsStock); - break; } - needReturnAmount -= goodsStock.getAmount(); - goodsStock.setAmount(0); - objectDao.saveOrUpdate(goodsStock); } - } else { - throw new RuntimeException("入/退库单器械包id与材料id不能同时为空"); + }else{ + throw new RuntimeException("未找到"+goodsStockTemp.getName()+"的器械包定义"); } - } - } else if(MODE_INSTOCK.equals(mode)){ - String sql = null; - GoodsStock goodsStock = null; - for(GoodsStock goodsStockTemp : goodsStockList){ - if(goodsStockTemp.getAmount() == null || goodsStockTemp.getAmount() == 0){ - throw new RuntimeException("入/退库单"+goodsStockTemp.getName()+"的数量不能为空或0"); + }else if(goodsStockTemp.getMaterialDefinitionId() != null && goodsStockTemp.getMaterialDefinitionId() != 0){ + //先判断该材料所有库存总和是否大于需扣减的数量 + List list = materialDefGoodsStockListInDb.stream().filter( + gs->gs.getWareHouseId().equals(goodsStockTemp.getWareHouseId()) + && gs.getMaterialDefinitionId().equals(goodsStockTemp.getMaterialDefinitionId()) + && gs.getAmount() > 0).collect(Collectors.toList()); + int totalAmount = 0; + if(CollectionUtils.isNotEmpty(list)){ + for(GoodsStock gs : list){ + totalAmount = MathTools.add(totalAmount, gs.getAmount()).intValue(); + } } - //如果为器械包 - if(DatabaseUtil.isPoIdValid(goodsStockTemp.getTousseDefinitionId())){ - sql = " where 1=1 and wareHouseId = " + goodsStockTemp.getWareHouseId() + " and tousseDefinitionId = " + goodsStockTemp.getTousseDefinitionId(); - //判断库存数量是否大于退/出库数量 - goodsStock = (GoodsStock)objectDao.getBySql(GoodsStock.class.getSimpleName(), sql); - if(goodsStock == null){ - goodsStock = new GoodsStock(); - goodsStock.setWareHouseId(goodsStockTemp.getWareHouseId()); - goodsStock.setWareHouseName(goodsStockTemp.getWareHouseName()); - goodsStock.setMaterialDefinitionId(goodsStockTemp.getMaterialDefinitionId()); - goodsStock.setTousseDefinitionId(goodsStockTemp.getTousseDefinitionId()); - goodsStock.setName(goodsStockTemp.getName()); - goodsStock.setGoodsType(goodsStockTemp.getGoodsType()); - goodsStock.setOrgUnitCode(goodsStockTemp.getOrgUnitCode()); - goodsStock.setOrgUnitName(goodsStockTemp.getOrgUnitName()); - goodsStock.setAmount(goodsStockTemp.getAmount()); + + int needReturnAmount = goodsStockTemp.getAmount(); + if(totalAmount < needReturnAmount){ + throw new RuntimeException(goodsStockTemp.getName() + ",材料总库存数量少于需要扣减的数量,不能扣减,请修改数量"); + } + for(GoodsStock goodsStock : list){ + if(goodsStock.getAmount() >= needReturnAmount){ + goodsStock.setAmount(goodsStock.getAmount() - needReturnAmount); objectDao.saveOrUpdate(goodsStock); - } else { - goodsStock.setAmount(goodsStock.getAmount() + goodsStockTemp.getAmount()); - objectDao.saveOrUpdate(goodsStock); + break; } - }else if(DatabaseUtil.isPoIdValid(goodsStockTemp.getMaterialDefinitionId())){ - goodsStock = goodsStockTemp; - //如果为材料 + needReturnAmount -= goodsStock.getAmount(); + goodsStock.setAmount(0); objectDao.saveOrUpdate(goodsStock); - } else { - throw new RuntimeException("入/退库单器械包id与材料id不能同时为空"); } + } else { + throw new RuntimeException("入/退库单器械包id与材料id不能同时为空"); } } - return goodsStockList; } /** Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r14421 -r14452 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 14421) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 14452) @@ -17,6 +17,7 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.stream.Collectors; import java.util.Set; import net.sf.json.JSONArray; @@ -2068,9 +2069,13 @@ List allSourceStocks = new LinkedList(); //收货仓库加库存列表 List allTargetStocks = new LinkedList(); + //获取发货单中所有临床科室对应的默认仓库 + Map targetWareHouseMap = wareHouseManager.getDefaultWareHouse( + updateStockInfo.keySet().stream().map( + invoice->invoice.getInvoicePlan().getDepartCoding()).collect(Collectors.toList())); + for (Map.Entry> entry : updateStockInfo.entrySet()) { - WareHouse targetWareHouse = wareHouseManager.getDefaultWareHouseByUnitCode( - entry.getKey().getInvoicePlan().getDepartCoding()); + WareHouse targetWareHouse = targetWareHouseMap.get(entry.getKey().getInvoicePlan().getDepartCoding()); List sourcestocks = TousseInstanceUtils.newGoodsStockList(entry.getValue(), wareHouse); List targetstocks = TousseInstanceUtils.newGoodsStockList(entry.getValue(), targetWareHouse); Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/WareHouseManagerImpl.java =================================================================== diff -u -r14098 -r14452 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/WareHouseManagerImpl.java (.../WareHouseManagerImpl.java) (revision 14098) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/WareHouseManagerImpl.java (.../WareHouseManagerImpl.java) (revision 14452) @@ -101,6 +101,23 @@ return getDefaultWareHouseListByOrgUnit(orgUnit); } + @Override + public Map getDefaultWareHouse(Collection orgUnitCodes){ + Map retMap = new HashMap(); + List wareHouses = getWareHouseListByOrgUnit(orgUnitCodes); + if(CollectionUtils.isNotEmpty(wareHouses)){ + for(WareHouse wareHouse : wareHouses){ + if(wareHouse != null){ + WareHouse findWh = retMap.get(wareHouse.getOrgUnitCode()); + if(findWh != null && findWh.getSequence().intValue() < wareHouse.getSequence().intValue()){ + retMap.put(wareHouse.getOrgUnitCode(), wareHouse); + } + } + } + } + return retMap; + } + public List getWareHouseListByUnitCode(String orgUnitCode){ OrgUnit orgUnit = new OrgUnit(); orgUnit.setOrgUnitCoding(orgUnitCode); Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/WareHouseManager.java =================================================================== diff -u -r13387 -r14452 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/WareHouseManager.java (.../WareHouseManager.java) (revision 13387) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/WareHouseManager.java (.../WareHouseManager.java) (revision 14452) @@ -39,6 +39,12 @@ * @return */ public WareHouse getDefaultWareHouseByUnitCode(String orgUnitCode); + /** + * 获取多个科室的默认仓库,将结果放到Map中.Map的key为科室编码,value为默认仓库 + * @param orgUnitCodes + * @return + */ + public Map getDefaultWareHouse(Collection orgUnitCodes); public List getWareHouseListByUnitCode(String orgUnitCode); /** * 查询科室下的仓库,按sequence排序,返回集合的第1条就是默认仓库