Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManager.java =================================================================== diff -u -r18321 -r18407 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManager.java (.../DiposableGoodsManager.java) (revision 18321) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManager.java (.../DiposableGoodsManager.java) (revision 18407) @@ -207,5 +207,13 @@ * @return */ Double getRecentPrice(DisposableGoods disposableGoods); + + /** + * 省医需求:科室申领的时候重新计算该一次性物品的库存(库存 = 该物品库存数量–发货计划里该物品的待发货数量) + * @param disposableGoodId 一次性物品id + * @param storageAmount 原来的库存数量 + * @return 计算后的库存数量 + */ + int reCalculateStorageAmount(Long disposableGoodId, int storageAmount); } Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DisposableGoodsStockManager.java =================================================================== diff -u -r17100 -r18407 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DisposableGoodsStockManager.java (.../DisposableGoodsStockManager.java) (revision 17100) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DisposableGoodsStockManager.java (.../DisposableGoodsStockManager.java) (revision 18407) @@ -5,6 +5,7 @@ import java.util.Map; import java.util.Set; +import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; import net.sf.json.JSONObject; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsStock; @@ -61,4 +62,13 @@ * @return disposableGoodsIds 一次性物品的id */ List getDisposableGoodsStockByCodeAndDisposeGoodIds(String handleDepartCode, Set disposableGoodsIds); + + /** + * 获得该一次性物品的库存(省医需求:该物品的库存-代发货的数量) + *

如果config.js配置storageUseStorageSubtractWaitDeliver为true,则库存数量=该物品的库存-代发货的数量,不配或者为false为取原来的库存数量

+ * @param handleDepartCode 处理科室编号 + * @param disposableGoodsId 一次性物品的id + * @return 重新计算后的库存数量 + */ + int getDisposableGoodsStock(String handleDepartCode, String disposableGoodsId); } Index: ssts-web/src/main/webapp/disinfectsystem/recyclingApplication/goodsTemplateApplicationView.js =================================================================== diff -u -r18351 -r18407 --- ssts-web/src/main/webapp/disinfectsystem/recyclingApplication/goodsTemplateApplicationView.js (.../goodsTemplateApplicationView.js) (revision 18351) +++ ssts-web/src/main/webapp/disinfectsystem/recyclingApplication/goodsTemplateApplicationView.js (.../goodsTemplateApplicationView.js) (revision 18407) @@ -1047,17 +1047,21 @@ top.Ext4.getCmp('count1').focus(); return false; }else{ - var storageAmount = parseInt(top.Ext4.getCmp('diposableGoodsAmount').getValue(),10); - var isDiposableGoods = top.Ext4.getCmp('isDiposableGoods').getValue(); + // var storageAmount = parseInt(top.Ext4.getCmp('diposableGoodsAmount').getValue(),10); + var storageAmount = sstsConfig.storageUseStorageSubtractWaitDeliver ? findStorageByDisposeIdAndHandleDepartCode(id) : parseInt(top.Ext4.getCmp('diposableGoodsAmount').getValue(),10); + var isDiposableGoods = top.Ext4.getCmp('isDiposableGoods').getValue(); var minApplyAmount = top.Ext4.getCmp('minApplyAmount').getValue(); var maxApplyAmount = top.Ext4.getCmp('maxApplyAmount').getValue(); //如果是一次性物品 if(isDiposableGoods == '是'){ + //如果配置了中包装单位,这个数量的校验要用中包装的数量来校验 + var checkCount = getMiddleAmount(count); if(!isValidDiposableAmount(minApplyAmount,count)){ showResult("该一次性物品最小申请数量为"+minApplyAmount+",所填数量必须是"+minApplyAmount+"的倍数。"); // clearCount(); + // clearCount(); return false; - }else if(parseInt(count,10) > storageAmount ){ + }else if(parseInt(checkCount,10) > storageAmount ){ if(!allowApplyDisposableGoodsWhenUnderstock){ showResult("申请数量不能大于库存数量!"); return false; @@ -1092,6 +1096,16 @@ // setDisposableGoodTotalAmount(rightTemplateStore); } +/** + * 如果有中包装单位,则换算成对应的数量 + * @param count + * @returns {*} + */ +function getMiddleAmount(count) { + var middlePackageUnit = top.Ext4.getCmp('middlePackageUnit').getValue(); + var transferScale = top.Ext4.getCmp('transferScale').getValue(); + return top.Ext4.isEmpty(middlePackageUnit) || top.Ext4.isEmpty(transferScale) ? count : mul(count, transferScale); +} /** * 在点击了添加按钮后来进行判断是否有捆绑物品 @@ -1292,40 +1306,56 @@ var minApplyAmount = record.get("minApplyAmount"); var maxApplyAmount = record.get("maxApplyAmount"); if ("urgentAmount" != context.field) { - var storage = record.get("storage"); - if (storage == 0) { - //如果库存是0,则从store中去找,如果找不到(因为分页了),则从服务器中找 - var findRecord = null; - var tousseDefinitionID = record.get('tousseDefinitionID'); - comboGoodsStore.filterBy(function (re) { - if (re.get('id') == tousseDefinitionID && re.get('tousseType') == '一次性物品') { - findRecord = re; - return false; - } - }); - //如果找不到,则从服务器取找 - if (Ext.isEmpty(findRecord)) { - storage = findStorageByDisposeIdAndHandleDepartCode(tousseDefinitionID); + var tousseDefinitionID = record.get('tousseDefinitionID'); + var storage = 0; + //如果配置了该选项,直接从服务器找 + if (sstsConfig.storageUseStorageSubtractWaitDeliver){ + storage = findStorageByDisposeIdAndHandleDepartCode(tousseDefinitionID); + } + else { + storage = record.get("storage"); + if (storage == 0) { + //如果库存是0,则从store中去找,如果找不到(因为分页了),则从服务器中找 + var findRecord = null; + comboGoodsStore.filterBy(function (re) { + if (re.get('id') == tousseDefinitionID && re.get('tousseType') == '一次性物品') { + findRecord = re; + return false; + } + }); + //如果找不到,则从服务器取找 + storage = Ext.isEmpty(findRecord) ? findStorageByDisposeIdAndHandleDepartCode(tousseDefinitionID) : findRecord.get('amount');; } - else { - storage = findRecord.get('amount'); - } } - if (parseInt(context.value, 10) > storage && !allowApplyDisposableGoodsWhenUnderstock) { + var checkCount = getMiddleAmount(context.value); + if (parseInt(checkCount, 10) > storage && !allowApplyDisposableGoodsWhenUnderstock) { showResult("申请数量不能大于库存数量!"); - record.set("count", ""); + resetCountAndPrice(record); + return true; } - if (!isValidDiposableAmount(minApplyAmount, context.value)) { + if (!isValidDiposableAmount(minApplyAmount, checkCount)) { showResult("该一次性物品最小申请数量为" + minApplyAmount + ",所填数量必须是" + minApplyAmount + "的倍数。"); - record.set("count", ""); + resetCountAndPrice(record); + return true; } - if (!isUndefinedOrNullOrEmpty(maxApplyAmount) && maxApplyAmount < context.value) { + if (!isUndefinedOrNullOrEmpty(maxApplyAmount) && maxApplyAmount < checkCount) { top.Ext4.Msg.alert("提示消息", "申请数量大于最大可申请数量"); } } + return false; } /** + * 把数量设置成空,总价设置成0,一次性物品总价格设置成0.00 + * @param record 该行的记录 + */ +function resetCountAndPrice(record) { + record.set("count", ""); + record.set("totalPrice", 0); + top.Ext4.getCmp('disposableGoodTotalAmount').setValue("0.00"); +} + +/** * 根据一次性物品id和处理科室编号来查找该一次性物品的库存 * 这里使用jquery的ajax方法去查询,因为需要用到同步 * @param id 一次性物品的id @@ -1998,7 +2028,9 @@ var isDiposableGoods = record.get("diposable"); var totalPrice; if (isDiposableGoods == '是' && context.value != null && context.value != ''){ - handleAmountEvent(context); + if (handleAmountEvent(context)){ + return; + } totalPrice = reCalculateTotalPriceAndSetUnitCount(record,context); } var depth = record.getDepth(); Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManagerImpl.java =================================================================== diff -u -r18321 -r18407 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManagerImpl.java (.../DiposableGoodsManagerImpl.java) (revision 18321) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManagerImpl.java (.../DiposableGoodsManagerImpl.java) (revision 18407) @@ -23,12 +23,15 @@ import javax.servlet.http.HttpServletRequest; +import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang3.ObjectUtils; +import org.apache.log4j.Logger; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; @@ -96,6 +99,7 @@ public class DiposableGoodsManagerImpl implements DiposableGoodsManager { + protected Logger logger = Logger.getLogger(this.getClass()); private ObjectDao objectDao; private HttpOptionManager httpOptionManager; @@ -924,8 +928,14 @@ continue; } Object obj = temp.get("amount"); - temp.put("amount", Integer.parseInt(obj.toString()) - + goodsStock.getAmount()); + int storage = (int) (Integer.parseInt(obj.toString()) + goodsStock.getAmount()); + + //省医需求:一次性物品的库存数量 = 库存数量-待发货的物品数量 + if (ObjectUtils.equals("true", CssdUtils.getSystemSetConfigByName("storageUseStorageSubtractWaitDeliver"))){ + storage = this.reCalculateStorageAmount(disposableGoods.getId(), storage); + } + temp.put("amount", storage); + if (showReferencePrice) { temp.put("referencePrice", disposableGoods.getReferencePrice()); @@ -934,10 +944,10 @@ Double price = getRecentPrice(disposableGoods); price = MathTools.mul(price, floatPercent).doubleValue(); temp.put("price", price); - displayName = getDisposableGoodsDisplayName(disposableGoods,goodsStock,price); + displayName = getDisposableGoodsDisplayName(disposableGoods,temp,price); temp.put("displayName", displayName); }else{ - displayName = getDisposableGoodsDisplayName(disposableGoods,goodsStock); + displayName = getDisposableGoodsDisplayName(disposableGoods,temp); temp.put("displayName", displayName); } } @@ -951,21 +961,20 @@ return temp; } - private String getDisposableGoodsDisplayName(DisposableGoods disposableGoods, - DisposableGoodsStock goodsStock){ + private String getDisposableGoodsDisplayName(DisposableGoods disposableGoods, Map map){ if(disposableGoods == null){ return StringTools.EMPTY; } String displayName = disposableGoods.getShowName(); - if(goodsStock != null){ + Integer amount = MapUtils.getInteger(map, "amount", null); + if(amount != null){ displayName += "(库存:"; - displayName += goodsStock.getAmount(); + displayName += amount; displayName += ")"; } return displayName; } - private String getDisposableGoodsDisplayName(DisposableGoods disposableGoods, - DisposableGoodsStock goodsStock,Double price){ + private String getDisposableGoodsDisplayName(DisposableGoods disposableGoods, Map map, Double price){ if(disposableGoods == null){ return StringTools.EMPTY; } @@ -979,10 +988,11 @@ + ")"; } - if(goodsStock != null){ + Integer amount = MapUtils.getInteger(map, "amount", null); + if(amount != null){ displayName = displayName + packageSpec + "(参考价:" + price + ")(库存:" - + goodsStock.getAmount() + ")"; + + amount + ")"; } } return displayName; @@ -2635,4 +2645,19 @@ return list; } + @Override + public int reCalculateStorageAmount(Long disposableGoodId, int storageAmount) { + List lists = (List) objectDao.getHt().find("from TousseItem where disposableGoodsId = ?", disposableGoodId); + int waitDeliverAmount = 0; + for (TousseItem tousseItem : lists) { + //一次性物品的待发货数量依据是已发数量-申请数量 + waitDeliverAmount += (tousseItem.getAmount() - tousseItem.getSendOutAmount()); + } + int storage = Math.subtractExact(storageAmount, waitDeliverAmount); + if (storage < 0){ + logger.warn(String.format("物品[%s]库存为[%s]少于0", lists.get(0).getTousseName(), storage)); + storage = 0; + } + return storage; + } } Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DisposableGoodsStockManagerImpl.java =================================================================== diff -u -r17100 -r18407 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DisposableGoodsStockManagerImpl.java (.../DisposableGoodsStockManagerImpl.java) (revision 17100) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DisposableGoodsStockManagerImpl.java (.../DisposableGoodsStockManagerImpl.java) (revision 18407) @@ -15,7 +15,9 @@ import com.forgon.directory.model.OrgUnit; import com.forgon.disinfectsystem.basedatamanager.warehouse.service.WareHouseManager; +import com.forgon.disinfectsystem.common.CssdUtils; import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.WareHouse; +import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; import net.sf.json.JSONObject; import org.apache.commons.collections4.CollectionUtils; @@ -35,12 +37,16 @@ import com.forgon.tools.hibernate.ObjectDao; import com.forgon.tools.string.StringTools; import com.forgon.tools.util.SqlUtils; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.log4j.Logger; import javax.annotation.Resource; public class DisposableGoodsStockManagerImpl implements DisposableGoodsStockManager { + protected Logger logger = Logger.getLogger(this.getClass()); + private ObjectDao objectDao; private DiposableGoodBatchStockManager diposableGoodBatchStockManager; @@ -49,7 +55,12 @@ private WareHouseManager wareHouseManager; + private DiposableGoodsManager diposableGoodsManagerTarget; + public void setDiposableGoodsManagerTarget(DiposableGoodsManager diposableGoodsManagerTarget) { + this.diposableGoodsManagerTarget = diposableGoodsManagerTarget; + } + public void setWareHouseManager(WareHouseManager wareHouseManager) { this.wareHouseManager = wareHouseManager; } @@ -321,4 +332,20 @@ } return displayName; } + + @Override + public int getDisposableGoodsStock(String handleDepartCode, String disposableGoodsId) { + Set disposeGoodIds = new HashSet<>(); + disposeGoodIds.add(disposableGoodsId); + List lists = this.getDisposableGoodsStockByCodeAndDisposeGoodIds(handleDepartCode, disposeGoodIds); + //因为这里的物品id只有一个,所以lists的大小只有1 + int storage = CollectionUtils.isNotEmpty(lists) ? lists.get(0).getAmount().intValue() : 0; + // 省医需求:一次性物品库存数量 = 原来的库存数量 - 待发货的数量 + if (ObjectUtils.equals("true", CssdUtils.getSystemSetConfigByName("storageUseStorageSubtractWaitDeliver"))){ + storage = diposableGoodsManagerTarget.reCalculateStorageAmount(Long.parseLong(disposableGoodsId), storage); + logger.info("重新计算后的库存是:" + storage); + } + return storage; + } + } Index: ssts-web/src/main/webapp/disinfectsystem/config/gdsy/config.js =================================================================== diff -u -r18359 -r18407 --- ssts-web/src/main/webapp/disinfectsystem/config/gdsy/config.js (.../config.js) (revision 18359) +++ ssts-web/src/main/webapp/disinfectsystem/config/gdsy/config.js (.../config.js) (revision 18407) @@ -191,6 +191,8 @@ // 库存不足是否允许申请 allowApplyDisposableGoodsWhenUnderstock: false, //一次性物品申请单名字的显示(true表示名字[规格][申领规格],false或者不配按原来的方式显示) - disposableGoodShowAppSpAndSp : true + disposableGoodShowAppSpAndSp : true, + //一次性物品申库存是否使用库存数量减去待发货数量 + storageUseStorageSubtractWaitDeliver : true } \ No newline at end of file Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/action/DisposableGoodsStockAction.java =================================================================== diff -u -r17102 -r18407 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/action/DisposableGoodsStockAction.java (.../DisposableGoodsStockAction.java) (revision 17102) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/action/DisposableGoodsStockAction.java (.../DisposableGoodsStockAction.java) (revision 18407) @@ -5,10 +5,8 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -20,7 +18,6 @@ import net.sf.json.JSONObject; import net.sf.json.JsonConfig; -import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.apache.struts2.convention.annotation.Action; @@ -68,7 +65,7 @@ this.diposableGoodBatchStockManager = diposableGoodBatchStockManager; } - public void setDisposableGoodsManager( + public void setDiposableGoodsManager( DiposableGoodsManager disposableGoodsManager) { this.disposableGoodsManager = disposableGoodsManager; } @@ -513,12 +510,9 @@ StrutsResponseUtils.output(false, "处理科室或者一次性物品id不能为空!"); return; } - Set disposeGoodIds = new HashSet<>(); - disposeGoodIds.add(disposeGoodId); - List lists = disposableGoodsStockManager.getDisposableGoodsStockByCodeAndDisposeGoodIds(handleDepartCode, disposeGoodIds); + int storage = disposableGoodsStockManager.getDisposableGoodsStock(handleDepartCode, disposeGoodId); JSONObject json = new JSONObject(); - //因为这里的物品id只有一个,所以lists的大小只有1 - json.put("storage",CollectionUtils.isNotEmpty(lists) ? lists.get(0).getAmount() : 0); + json.put("storage", storage); StrutsResponseUtils.output(true, json.toString()); } catch (Exception e) {