Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r16187 -r16194 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 16187) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 16194) @@ -815,10 +815,81 @@ } //丢失、报损生产数据量不大,占时可以不考虑性能问题 for (String taskId : taskIdToMaterialsMap.keySet()) { - materialSupplement(taskId, type, taskIdToMaterialsMap.get(taskId).toString(), washBasketBarcode,false); + if(DatabaseUtil.isPoIdValid(taskId)){ + materialSupplement(taskId, type, taskIdToMaterialsMap.get(taskId).toString(), washBasketBarcode,false); + }else{ + //清洗、装配添加的报损项,没有装配任务关联 + if(PackingTask.TYPE_DAMAGE.equals(type)){ + unPackingTaskMaterialSupplement(washBasketBarcode,taskIdToMaterialsMap, taskId); + } + } } } + + private void unPackingTaskMaterialSupplement(String washBasketBarcode, + Map taskIdToMaterialsMap, String taskId) { + JSONArray itemArray = taskIdToMaterialsMap.get(taskId); + if(itemArray != null){ + + LoginUserData loginUser = AcegiHelper.getLoginUser(); + List stockList = new ArrayList(); + WareHouse defaultWarehouse = getDefaultWarehouse(loginUser); + //关联清洗篮筐 + ClassifyBasket classifyBasket = beCleanItemManager.getClassifyBasket(washBasketBarcode); + for (int i = 0; i < itemArray.size(); i++) { + JSONObject obj = itemArray.optJSONObject(i); + long id = obj.optLong("id"); + String mName = obj.optString("materialName"); + Integer additionalAmount = obj.optInt("amount"); + String materialType = obj.optString("materialType"); + String departType = obj.optString("departType"); + + RecyclingDamageItem damage = (RecyclingDamageItem)objectDao.getByProperty(RecyclingDamageItem.class.getSimpleName(), "id", id); + if(damage == null){ + throw new RuntimeException("id="+id+"的报损器械已不存在!"); + } + + damage.setAdditionalAmount(damage.getAdditionalAmount() + + additionalAmount); + damage.setAdditionalPerson(loginUser.getUserFullName()); + damage.setAdditionalTime(new Date()); + damage.setWarehouseId(defaultWarehouse.getId()); + damage.setWarehouseName(defaultWarehouse.getName()); + damage.setDamageErrorDepartType(departType); + damage.setDamageErrorMaterialType(materialType); + damage.setStatus(RecyclingDamageItem.STATUS_ALL_ADDITIONAL); + + beCleanItemManager.addMaterialToBasketInstance( + classifyBasket,damage.getMaterialDefinitionId(), + mName, additionalAmount); + damage.setClassifyBasket(classifyBasket); + + newGoodsStock(mName, additionalAmount, stockList, defaultWarehouse); + } + if (!stockList.isEmpty()) { + try { + //修改材料库存 + goodsStockManager.saveOrUpdateGoodsStock(stockList, + GoodsStockManager.MODE_OUTSTOCK); + } catch (Exception e) { + throw new RuntimeException(e.getMessage()); + } + } + } + } + + private WareHouse getDefaultWarehouse(LoginUserData loginUser) { + String orgUnitCode = loginUser.getOrgUnitCodingFromSupplyRoomConfig(); + OrgUnit orgUnit = new OrgUnit(); + orgUnit.setOrgUnitCoding(orgUnitCode); + List wareHouseList = wareHouseManager.getWareHouseListByOrgUnit(orgUnit); + if(wareHouseList == null || wareHouseList.size() == 0){ + throw new RuntimeException("该科室未定义仓库,无法补充!"); + } + WareHouse defaultWarehouse = wareHouseList.get(0); + return defaultWarehouse; + } @Override @@ -833,15 +904,7 @@ LoginUserData loginUser = AcegiHelper.getLoginUser(); List stockList = new ArrayList(); - String orgUnitCode = loginUser.getOrgUnitCodingFromSupplyRoomConfig(); - OrgUnit orgUnit = new OrgUnit(); - orgUnit.setOrgUnitCoding(orgUnitCode); - List wareHouseList = wareHouseManager.getWareHouseListByOrgUnit(orgUnit); - if(wareHouseList == null || wareHouseList.size() == 0){ - throw new RuntimeException("该科室未定义仓库,无法补充!"); - } - - WareHouse defaultWarehouse = wareHouseList.get(0); + WareHouse defaultWarehouse = getDefaultWarehouse(loginUser); if (StringUtils.isNotBlank(suppleJson)) { //关联清洗篮筐 @@ -880,6 +943,8 @@ additionalAmount); error.setClassifyBasket(classifyBasket); + + newGoodsStock(mName, additionalAmount, stockList, defaultWarehouse); } } } @@ -913,6 +978,8 @@ classifyBasket,damage.getMaterialDefinitionId(), mName, additionalAmount); damage.setClassifyBasket(classifyBasket); + + newGoodsStock(mName, additionalAmount, stockList, defaultWarehouse); } } } @@ -936,9 +1003,6 @@ if (error.isIDCard()) { continue; } - String originalName = error.getMaterialName(); - Integer additionalAmount = error.getAdditionalAmount(); - newGoodsStock(originalName, additionalAmount, stockList, defaultWarehouse); } } }else{ @@ -949,9 +1013,6 @@ throw new RuntimeException(String.format("%s还未补充完!", damage.getMaterialName())); } - String originalName = damage.getMaterialName(); - Integer additionalAmount = damage.getAdditionalAmount(); - newGoodsStock(originalName, additionalAmount, stockList, defaultWarehouse); } } } @@ -970,11 +1031,6 @@ this.saveOrUpdate(packingTask); } - private WashAndDisinfectRecordMaterial getWashMaterialByIdForUpdate_internal(long id) { - return (WashAndDisinfectRecordMaterial) objectDao.getByProperty_ForUpdate( - WashAndDisinfectRecordMaterial.class.getSimpleName(), "id", id); - } - private void newGoodsStock(String originalMaterialName, Integer addAmount, List stockList, WareHouse wareHouse) { /**