Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/invoice/service/SubmitInvoiceContext.java =================================================================== diff -u -r20253 -r20280 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/invoice/service/SubmitInvoiceContext.java (.../SubmitInvoiceContext.java) (revision 20253) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/invoice/service/SubmitInvoiceContext.java (.../SubmitInvoiceContext.java) (revision 20280) @@ -76,7 +76,10 @@ */ private WareHouse sourceWarehouse; - private Map targetWareHouseMap = new HashMap<>(); + /** + * 发货的目标仓库的所属科室编码和发货的目标仓库的Map + */ + private Map targetWareHouseMap = new HashMap<>(); /** * 发货员 @@ -183,12 +186,20 @@ * 一次性物品的上下文 */ private DisposableGoodsServiceContext disposableGoodsServiceContext = new DisposableGoodsServiceContext(); + + /** + * 自动扣减一次性物品的上下文 + */ private DisposableGoodsServiceContext autoDeductionDisposableGoodsServiceContext = new DisposableGoodsServiceContext(); private Set autoDeductionDisposableGoodsInvoiceItems = new HashSet(); private List autoDeductionDisposableGoodsItems = new LinkedList(); - private List allGoodsStocksInDB = new LinkedList<>();//数据库中的库存对象 /** + * 数据库中的库存对象 + */ + private List allGoodsStocksInDB = new LinkedList<>(); + + /** * 外来器械允许部分发货 */ private boolean allowPartlyInvoiceForeignTousse = false; @@ -251,6 +262,10 @@ return false; } + /** + * 是否为“自定义发货”. + * @return + */ public boolean isInvoiceForCustom() { if (StringUtils.equals(invoiceType, Invoice.TYPE_CUSTOM)) { return true; Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsstock/service/GoodsStockManagerImpl.java =================================================================== diff -u -r19629 -r20280 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsstock/service/GoodsStockManagerImpl.java (.../GoodsStockManagerImpl.java) (revision 19629) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsstock/service/GoodsStockManagerImpl.java (.../GoodsStockManagerImpl.java) (revision 20280) @@ -480,10 +480,10 @@ return goodsStockFind; } /** - * 在集合中查找器械包的库存。只要仓库id跟包定义id一样,并且类型是器械包,就返回 - * @param goodsStocks - * @param wareHouseId - * @param toussedefinitionId + * 在集合中查找器械包的库存。只要仓库id跟包定义id一样,并且类型是器械包,就返回. + * @param goodsStocks 物品仓库集合 + * @param wareHouseId 仓库id + * @param toussedefinitionId 器械包定义id * @return */ private GoodsStock findTousseGoodsStock(Collection goodsStocks,Long wareHouseId,Long toussedefinitionId){ @@ -642,6 +642,14 @@ goodsStock.setAmount(MathTools.add(goodsStock.getAmount(), 1).intValue()); } + + /** + * 产生器械包物品仓库. + * @param sourceWareHouse 发货的源仓库 + * @param targetWareHouse 发货的目标仓库集合 + * @param toousseDefinitions 器械包定义id + * @return + */ private List generateTousseGoodsStocks(WareHouse sourceWareHouse, Collection targetWareHouse,Collection toousseDefinitions){ List goodsStocks = new ArrayList<>(); @@ -802,7 +810,7 @@ } if(tousseGoodsStocksInDB != null){ tousseGoodsStocksInDB.addAll(toussedefGoodsStockListInDb);//先插入已有的库存 - List gsToInsert = new ArrayList<>(); + List gsToInsert = new ArrayList<>(); //新创建的记录集合 //针对器械包,如果有没有查到的数据,则插入新数据,新入的数据,数量为0 for(GoodsStock gs : goodsStockList){ if(gs.tousseType()){ @@ -833,8 +841,8 @@ } } } - } + List newIds = new ArrayList(); //在执行插入之前,锁住包定义,对此包定义的库存做插入操作 Set tousseDefinitionIds = gsToInsert.stream().map(p->p.getTousseDefinitionId()).collect(Collectors.toSet()); @@ -856,16 +864,7 @@ tousseGoodsStocksInDB.add(gsDB); } } - //新开一个事务,执行插入操作,操作完成,事务结束,立马提交到数据库 -// runWithTransNewManager.runWith_TRANS_NEW(new RunWithTransNewTask() { -// @Override -// public void runTask() { -// for(GoodsStock gs : gsToInsert){ -// save(gs); -// newIds.add(gs.getId()); -// } -// } -// }); + /** * 获取新插入的对象,并锁定,加入到器械包的返回集合中 */ Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/WareHouseManagerImpl.java =================================================================== diff -u -r19526 -r20280 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/WareHouseManagerImpl.java (.../WareHouseManagerImpl.java) (revision 19526) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/WareHouseManagerImpl.java (.../WareHouseManagerImpl.java) (revision 20280) @@ -87,11 +87,6 @@ return objectDao.findAllObjects(WareHouse.class.getSimpleName()); } - /** - * 查询科室下的默认仓库,按sequence排序,返回集合的第1条就是默认仓库 - * @param orgUnit 默认按科室id,如果id为空,则按code查询 - * @return - */ @Override public WareHouse getDefaultWareHouseListByOrgUnit(OrgUnit orgUnit){ WareHouse wareHouse = null; Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/WareHouseManager.java =================================================================== diff -u -r19526 -r20280 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/WareHouseManager.java (.../WareHouseManager.java) (revision 19526) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/WareHouseManager.java (.../WareHouseManager.java) (revision 20280) @@ -25,7 +25,7 @@ public List getAll(); /** - * 查询科室下的默认仓库,按sequence排序,返回集合的第1条就是默认仓库 + * 查询科室下的默认仓库,按sequence排序,返回集合的第1条就是默认仓库. * @param orgUnit 默认按科室id,如果id为空,则按code查询 * @return */ @@ -37,8 +37,8 @@ */ public WareHouse getDefaultWareHouseByUnitCode(String orgUnitCode); /** - * 获取多个科室的默认仓库,将结果放到Map中.Map的key为科室编码,value为默认仓库 - * @param orgUnitCodes + * 获取多个科室的默认仓库,将结果放到Map中.Map的key为科室编码,value为默认仓库(如果某个科室有多个仓库,则取sequence较小的) + * @param orgUnitCodes 科室编码集合 * @return */ public Map getDefaultWareHouse(Collection orgUnitCodes); Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseDefinition.java =================================================================== diff -u -r20027 -r20280 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseDefinition.java (.../TousseDefinition.java) (revision 20027) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseDefinition.java (.../TousseDefinition.java) (revision 20280) @@ -324,6 +324,10 @@ * 是否多层盒装 */ private String moreBoxPacked; + + /** + * 有一次性物品材料 + */ private Boolean haveDisposableMaterial = false; /** * 打印份数,默认为1 @@ -944,23 +948,23 @@ this.isDisableIDCard = isDisableIDCard; } /** - * 判断是否是普通器械包 + * 判断器械包类型是否为“器械包” * @return */ @Transient public boolean isInsideTousse(){ return StringUtils.equals(tousseType, PACKAGE_TYPE_INSIDE); } /** - * 判断是否是消毒物品 + * 判断器械包类型是否为“消毒物品” * @return */ @Transient public boolean isDisinfection() { return StringUtils.equals(tousseType, PACKAGE_TYPE_DISINFECTION); } /** - * 判断是否是敷料包 + * 判断器械包类型是否为“敷料包” * @return */ @Transient @@ -988,7 +992,7 @@ return StringTools.equals(tousseType, PACKAGE_TYPE_FOREIGN) || StringTools.equals(tousseType, PACKAGE_TYPE_SPLIT); } /** - * 判断是否是外部代理灭菌包 + * 判断器械包类型是否为“外部代理灭菌” * @return */ @Transient Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/toussedefinition/service/TousseInstanceUtils.java =================================================================== diff -u -r17305 -r20280 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/toussedefinition/service/TousseInstanceUtils.java (.../TousseInstanceUtils.java) (revision 17305) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/toussedefinition/service/TousseInstanceUtils.java (.../TousseInstanceUtils.java) (revision 20280) @@ -322,6 +322,12 @@ // return goodsStocks; // } + /** + * 获取自动扣减的一次性物品id. + * @param objectDao {@link ObjectDao} + * @param tousseInstances 器械包实例集合 + * @return + */ public static Set getDisposableGoodsIds(ObjectDao objectDao, Collection tousseInstances) { Set disposableGoodsIds = new HashSet(); Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsstock/service/GoodsStockManager.java =================================================================== diff -u -r19621 -r20280 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsstock/service/GoodsStockManager.java (.../GoodsStockManager.java) (revision 19621) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsstock/service/GoodsStockManager.java (.../GoodsStockManager.java) (revision 20280) @@ -75,10 +75,10 @@ Collection goodsDefId,boolean toussedefIdOrMaterialDefId); /** * 获取对应仓库下对应物品的库存。如果其中一个物品没有库存记录,则新开一个事务,插入新记录,并将数量设置为0,再返回。 - * 返回的记录是带锁的 - * @param wareHouseIds - * @param goodsDefId - * @param toussedefIdOrMaterialDefId + * 返回的记录是带锁的. + * @param goodsStocks 物品库存集合 + * @param tousseGoodsStocksInDB 数据库中的器械包库存 + * @param materialGoodsStocksInDB 数据库中的材料库存 * @return */ public void getGoodsStockSynchronized(Collection goodsStocks, @@ -113,7 +113,7 @@ */ public int calculateTotalAmount(Collection goodsStocks); /** - * 向集合中添加指定仓库的器械包库存。只能适用于器械包。如果根据仓库和包实例关联包定义的祖先在集合中可以找到库存对象,则将数量添加到原来的对象中;否则创建对象 + * 向集合中添加指定仓库的器械包库存。只能适用于器械包。如果根据仓库和包实例关联包定义的祖先在集合中可以找到库存对象,则将数量添加到原来的对象中;否则创建对象. * @param goodsStocks * @param wareHouseId * @param tousseDefinitionId @@ -159,10 +159,10 @@ public void addToList(List goodsStockList, List waitWasteTousseInstanceList); /** - * 锁定仓库下器械包的库存记录 - * @param sourceWareHouse - * @param targetWareHouse - * @param toousseDefinitions + * 获取器械包仓库并且加锁. + * @param sourceWareHouse 发货的源仓库 + * @param targetWareHouse 发货的目标仓库 + * @param toousseDefinitions 器械包定id集合 * @return */ public List lockGoodsStocks(WareHouse sourceWareHouse, Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/toussedefinition/service/TousseDefinitionUtils.java =================================================================== diff -u -r18547 -r20280 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/toussedefinition/service/TousseDefinitionUtils.java (.../TousseDefinitionUtils.java) (revision 18547) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/toussedefinition/service/TousseDefinitionUtils.java (.../TousseDefinitionUtils.java) (revision 20280) @@ -141,6 +141,11 @@ } } + /** + * 检验是否符合自动扣减的条件(目前只有“器械包”、“敷料包”、“外部代理灭菌”这三种包类型符合条件). + * @param td + * @return + */ public static boolean isAutoDeductionDisposableGoods(TousseDefinition td) { if(td.isInsideTousse() || td.isDressing() || td.isForeignProxyTousse()){ return true;