Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r16231 -r16245 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 16231) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 16245) @@ -1,6 +1,5 @@ package com.forgon.disinfectsystem.packing.service; -import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.math.BigDecimal; import java.sql.ResultSet; @@ -23,7 +22,6 @@ import java.util.function.Consumer; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import net.sf.json.JSONArray; @@ -95,7 +93,6 @@ import com.forgon.disinfectsystem.entity.sterilizationmanager.foreignproxydisinfection.ForeignProxyDisinfection; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; import com.forgon.disinfectsystem.entity.washanddisinfectmanager.washanddisinfectrecord.WashAndDisinfectRecord; -import com.forgon.disinfectsystem.entity.washanddisinfectmanager.washanddisinfectrecord.WashAndDisinfectRecordMaterial; import com.forgon.disinfectsystem.expirationdateinfo.service.ExpirationDateInfoManager; import com.forgon.disinfectsystem.idcarddefinition.service.IDCardDefinitionManager; import com.forgon.disinfectsystem.idcardinstance.service.IDCardInstanceManager; @@ -121,7 +118,6 @@ import com.forgon.timeout.service.TimeoutManager; import com.forgon.tools.MathTools; import com.forgon.tools.Path; -import com.forgon.tools.StrutsParamUtils; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.db.InitDbConnection; import com.forgon.tools.hibernate.ObjectDao; @@ -803,8 +799,7 @@ @Override - public void materialSupplement(String type, String suppleStr, - String washBasketBarcode) throws Exception { + public void materialSupplement(String type, String suppleStr,String washBasketBarcode) throws Exception { Map taskIdToMaterialsMap = new HashMap(); if (StringUtils.isNotBlank(suppleStr)) { JSONArray itemArray = JSONArray.fromObject(suppleStr); @@ -822,22 +817,28 @@ //丢失、报损生产数据量不大,占时可以不考虑性能问题 for (String taskId : taskIdToMaterialsMap.keySet()) { if(DatabaseUtil.isPoIdValid(taskId)){ - materialSupplement(taskId, type, taskIdToMaterialsMap.get(taskId).toString(), washBasketBarcode,false); + materialSupplement(taskId, type, taskIdToMaterialsMap.get(taskId), washBasketBarcode,true); }else{ //清洗、装配添加的报损项,没有装配任务关联 if(PackingTask.TYPE_DAMAGE.equals(type)){ - unPackingTaskMaterialSupplement(washBasketBarcode,taskIdToMaterialsMap, taskId); + for (String key : taskIdToMaterialsMap.keySet()) { + unPackingTaskMaterialSupplement(washBasketBarcode,taskIdToMaterialsMap.get(key), taskId, type); + } } } } - } + /** + * 没有装配任务的丢失报损项补充器械 + * @param washBasketBarcode + * @param taskIdToMaterialsMap + * @param taskId + * @param type + */ private void unPackingTaskMaterialSupplement(String washBasketBarcode, - Map taskIdToMaterialsMap, String taskId) { - JSONArray itemArray = taskIdToMaterialsMap.get(taskId); + JSONArray itemArray, String taskId,String type) { if(itemArray != null){ - LoginUserData loginUser = AcegiHelper.getLoginUser(); List stockList = new ArrayList(); WareHouse defaultWarehouse = getDefaultWarehouse(loginUser); @@ -851,33 +852,48 @@ 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+"的报损器械已不存在!"); + if(PackingTask.TYPE_DAMAGE.equals(type)){ + RecyclingDamageItem damage = (RecyclingDamageItem)objectDao.getByProperty(RecyclingDamageItem.class.getSimpleName(), "id", id); + if(damage == null){ + throw new RuntimeException("id="+id+"的报损器械已不存在!"); + } + checkMaterialAmount(mName, damage.getAmount(),damage.getAdditionalAmount(), additionalAmount); + 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); + }else{ + RecyclingError error = (RecyclingError)objectDao.getByProperty(RecyclingError.class.getSimpleName(), "id", id); + if(error == null){ + throw new RuntimeException("id="+id+"的报损器械已不存在!"); + } + if (error.isIDCard()) { + continue; + } + checkMaterialAmount(mName, error.getAmount(), error.getAdditionalAmount(), additionalAmount); + error.setAdditionalAmount(error.getAdditionalAmount() + + additionalAmount); + error.setAdditionalTime(new Date()); + error.setWarehouseId(defaultWarehouse.getId()); + error.setWarehouseName(defaultWarehouse.getName()); + error.setDamageErrorDepartType(departType); + error.setDamageErrorMaterialType(materialType); + + beCleanItemManager.addMaterialToBasketInstance( + classifyBasket,error.getMaterialDefinitionId(), + mName, additionalAmount); + error.setClassifyBasket(classifyBasket); } - - if(damage.getAmount() <= damage.getAdditionalAmount()){ - throw new RuntimeException(mName + "已补充,不能重复补充!"); - } - if(damage.getAmount().intValue() != additionalAmount){ - throw new RuntimeException(mName + ",数据已被修改,请刷新后再补充!"); - } - - 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()) { @@ -892,38 +908,28 @@ } } - 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 - public void materialSupplement(String packingTaskId,String type, String suppleJson, String washBasketBarcode,boolean needAllSupplement) + public void materialSupplement(String packingTaskId,String type, JSONArray itemArray, String washBasketBarcode,boolean isBatchSupplement) throws Exception { // 锁定并获取装配任务 PackingTask packingTask = getPackingTaskByIdForUpdate_internal(packingTaskId); if (packingTask == null) { - throw new RuntimeException(String.format("装配任务(id=%s)已不存在!", - packingTaskId)); + //非批量补充 + if(!isBatchSupplement){ + throw new RuntimeException(String.format("装配任务(id=%s)已不存在!",packingTaskId)); + } + //装配后修改丢失报损数量再来补充 + unPackingTaskMaterialSupplement(washBasketBarcode, itemArray, packingTaskId, type); + return; } LoginUserData loginUser = AcegiHelper.getLoginUser(); List stockList = new ArrayList(); WareHouse defaultWarehouse = getDefaultWarehouse(loginUser); - if (StringUtils.isNotBlank(suppleJson)) { - - //关联清洗篮筐 - ClassifyBasket classifyBasket = beCleanItemManager.getClassifyBasket(washBasketBarcode); - - JSONArray itemArray = JSONArray.fromObject(suppleJson); + //关联清洗篮筐 + ClassifyBasket classifyBasket = beCleanItemManager.getClassifyBasket(washBasketBarcode); + + if(itemArray != null){ //丢失 if(PackingTask.TYPE_LOST.equals(type)){ List errors = packingTask.findRecyclingErrors(objectDao); @@ -939,12 +945,7 @@ String materialType = obj.optString("materialType"); String departType = obj.optString("departType"); if (error.getMaterialName().equals(mName)) { - if(error.getAmount() <= error.getAdditionalAmount()){ - throw new RuntimeException(mName + "已补充,不能重复补充!"); - } - if(error.getAmount().intValue() != additionalAmount){ - throw new RuntimeException(mName + ",数据已被修改,请刷新后再补充!"); - } + checkMaterialAmount(mName, error.getAmount(), error.getAdditionalAmount(), additionalAmount); error.setAdditionalAmount(error.getAdditionalAmount() + additionalAmount); error.setWarehouseId(defaultWarehouse.getId()); @@ -977,12 +978,7 @@ String materialType = obj.optString("materialType"); String departType = obj.optString("departType"); if (damage.getMaterialName().equals(mName)) { - if(damage.getAmount() <= damage.getAdditionalAmount()){ - throw new RuntimeException(mName + "已补充,不能重复补充!"); - } - if(damage.getAmount().intValue() != additionalAmount){ - throw new RuntimeException(mName + ",数据已被修改,请刷新后再补充!"); - } + checkMaterialAmount(mName, damage.getAmount(),damage.getAdditionalAmount(), additionalAmount); damage.setAdditionalAmount(damage.getAdditionalAmount() + additionalAmount); damage.setAdditionalPerson(loginUser.getUserFullName()); @@ -1009,7 +1005,7 @@ } } //是否此装配任务必须全部补充(页面上的补充丢失器械、补充报损器械对应的装配任务可以不全部补充) - if(needAllSupplement){ + if(!isBatchSupplement){ // 检查材料是否都补充完 if(PackingTask.TYPE_LOST.equals(type)){ List errors = packingTask.findRecyclingErrors(objectDao); @@ -1049,7 +1045,35 @@ packingTask.setSupplementTime(new Date()); this.saveOrUpdate(packingTask); } + + /** + * + * @param mName + * @param amount 缺失报损数量 + * @param hisAdditionalAmount 历史补充数量 + * @param currentAdditionalAmount 当前要补充数量 + */ + private void checkMaterialAmount(String mName, int amount,int hisAdditionalAmount,int currentAdditionalAmount) { + if(amount <= hisAdditionalAmount){ + throw new RuntimeException(mName + "已补充,不能重复补充!"); + } + if(currentAdditionalAmount != (amount - hisAdditionalAmount)){ + throw new RuntimeException(mName + ",数据已被修改,请刷新后再补充!"); + } + } + 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; + } + private void newGoodsStock(String originalMaterialName, Integer addAmount, List stockList, WareHouse wareHouse) { /** Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/dwr/table/RecyclingRecordTableManager.java =================================================================== diff -u -r14632 -r16245 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/dwr/table/RecyclingRecordTableManager.java (.../RecyclingRecordTableManager.java) (revision 14632) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/dwr/table/RecyclingRecordTableManager.java (.../RecyclingRecordTableManager.java) (revision 16245) @@ -7,7 +7,6 @@ import java.util.Map; import java.util.Set; -import net.sf.json.JSONArray; import net.sf.json.JSONObject; import net.sf.json.JsonConfig; import net.sf.json.util.CycleDetectionStrategy; @@ -28,7 +27,6 @@ import com.forgon.disinfectsystem.entity.becleanitem.ClassifiedItem; import com.forgon.disinfectsystem.entity.becleanitem.ClassifyBasket; import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; -import com.forgon.disinfectsystem.entity.recyclingapplication.RecyclingApplication; import com.forgon.disinfectsystem.entity.recyclingerror.RecyclingError; import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingRecord; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java =================================================================== diff -u -r16196 -r16245 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java (.../PackingManager.java) (revision 16196) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java (.../PackingManager.java) (revision 16245) @@ -65,14 +65,15 @@ public String loadTousseByPackingRecord(String packingRecordId); /** - * 按装配任务补充器械 + * * @param packingTaskId * @param type * @param suppleStr * @param washBasketBarcode + * @param isBatchSupplement 是否批量补充 (否的话就是按单个装配任务来补充) * @throws Exception */ - public void materialSupplement(String packingTaskId,String type, String suppleStr, String washBasketBarcode, boolean needAllSupplement) + public void materialSupplement(String packingTaskId,String type, JSONArray suppleStr, String washBasketBarcode, boolean isBatchSupplement) throws Exception; /** Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/PackingAction.java =================================================================== diff -u -r16230 -r16245 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/PackingAction.java (.../PackingAction.java) (revision 16230) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/PackingAction.java (.../PackingAction.java) (revision 16245) @@ -456,7 +456,11 @@ packingManager.materialSupplement(type, suppleJson, washBasketBarcode); //单个装配 }else{ - packingManager.materialSupplement(packingTaskId, type, suppleJson,washBasketBarcode,true); + JSONArray suppleArray = null; + if(StringUtils.isNotBlank(suppleJson)){ + suppleArray = JSONArray.fromObject(suppleJson); + } + packingManager.materialSupplement(packingTaskId, type, suppleArray,washBasketBarcode,false); } } catch (Exception e) { msg = e.getMessage();