Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/toussedefinition/service/TousseInstanceUtils.java =================================================================== diff -u -r13940 -r14019 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/toussedefinition/service/TousseInstanceUtils.java (.../TousseInstanceUtils.java) (revision 13940) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/toussedefinition/service/TousseInstanceUtils.java (.../TousseInstanceUtils.java) (revision 14019) @@ -234,7 +234,7 @@ goodsStock.setName(tousseInstance.getTousseName()); goodsStock.setOrgUnitCode(wareHouse.getOrgUnitCode()); goodsStock.setOrgUnitName(wareHouse.getOrgUnitName()); - goodsStock.setTousseDefinitionId(tousseInstance.getTousseDefinition().getId()); + goodsStock.setTousseDefinitionId(tousseInstance.getTousseDefinition().getAncestorID()); goodsStock.setWareHouseId(wareHouse.getId()); goodsStock.setWareHouseName(wareHouse.getName()); return goodsStock; Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/goodsstock/GoodsStock.java =================================================================== diff -u -r13099 -r14019 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/goodsstock/GoodsStock.java (.../GoodsStock.java) (revision 13099) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/goodsstock/GoodsStock.java (.../GoodsStock.java) (revision 14019) @@ -54,7 +54,7 @@ private String goodsType; /** - * 器械包定义id + * 器械包定义的祖先id @see TousseDefinition.ancestorID */ private Long tousseDefinitionId; Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsstock/service/GoodsStockManagerImpl.java =================================================================== diff -u -r13471 -r14019 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsstock/service/GoodsStockManagerImpl.java (.../GoodsStockManagerImpl.java) (revision 13471) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsstock/service/GoodsStockManagerImpl.java (.../GoodsStockManagerImpl.java) (revision 14019) @@ -46,7 +46,7 @@ if(goodsStockTemp.getAmount() == null || goodsStockTemp.getAmount() == 0){ throw new RuntimeException("入/退库单"+goodsStockTemp.getName()+"的数量不能为空或0"); } - if(goodsStockTemp.getTousseDefinitionId() != null && goodsStockTemp.getTousseDefinitionId() != 0){ + if(DatabaseUtil.isPoIdValid(goodsStockTemp.getTousseDefinitionId())){ TousseDefinition td = (TousseDefinition)objectDao.getBySql(TousseDefinition.class.getSimpleName(), "where id=" + goodsStockTemp.getTousseDefinitionId()); //如果包定义为消毒物品、外来器械包、自定义器械包、外部代理灭菌、外来器械拆分小包等,则按器械包名称查询库存并进行扣减 @@ -56,13 +56,15 @@ || 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"); + objectDao.countBySql("select sum(amount) from " + GoodsStock.class.getSimpleName() + " where wareHouseId = " + goodsStockTemp.getWareHouseId() + + " and tousseDefinitionId = " + goodsStockTemp.getTousseDefinitionId() + " 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"; + sql = " where 1=1 and wareHouseId = " + goodsStockTemp.getWareHouseId() + " and tousseDefinitionId = " + + goodsStockTemp.getTousseDefinitionId() + " and amount > 0"; List list = objectDao.findBySql(GoodsStock.class.getSimpleName(), sql); int needOutAmount = goodsStockTemp.getAmount(); for(GoodsStock stock : list){ @@ -139,7 +141,7 @@ throw new RuntimeException("入/退库单"+goodsStockTemp.getName()+"的数量不能为空或0"); } //如果为器械包 - if(goodsStockTemp.getTousseDefinitionId() != null && goodsStockTemp.getTousseDefinitionId() != 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); @@ -159,7 +161,7 @@ goodsStock.setAmount(goodsStock.getAmount() + goodsStockTemp.getAmount()); objectDao.saveOrUpdate(goodsStock); } - }else if(goodsStockTemp.getMaterialDefinitionId() != null && goodsStockTemp.getMaterialDefinitionId() != 0){ + }else if(DatabaseUtil.isPoIdValid(goodsStockTemp.getMaterialDefinitionId())){ goodsStock = goodsStockTemp; //如果为材料 objectDao.saveOrUpdate(goodsStock);