Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DisposableGoodsStockManagerImpl.java =================================================================== diff -u -r16292 -r17100 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DisposableGoodsStockManagerImpl.java (.../DisposableGoodsStockManagerImpl.java) (revision 16292) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DisposableGoodsStockManagerImpl.java (.../DisposableGoodsStockManagerImpl.java) (revision 17100) @@ -6,10 +6,16 @@ import java.util.ArrayList; import java.util.Collection; 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.stream.Collectors; +import com.forgon.directory.model.OrgUnit; +import com.forgon.disinfectsystem.basedatamanager.warehouse.service.WareHouseManager; +import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.WareHouse; import net.sf.json.JSONObject; import org.apache.commons.collections4.CollectionUtils; @@ -30,6 +36,8 @@ import com.forgon.tools.string.StringTools; import com.forgon.tools.util.SqlUtils; +import javax.annotation.Resource; + public class DisposableGoodsStockManagerImpl implements DisposableGoodsStockManager { @@ -38,7 +46,14 @@ private DiposableGoodBatchStockManager diposableGoodBatchStockManager; private SupplyRoomConfigManager supplyRoomConfigManager; - + + private WareHouseManager wareHouseManager; + + + public void setWareHouseManager(WareHouseManager wareHouseManager) { + this.wareHouseManager = wareHouseManager; + } + public void setObjectDao(ObjectDao objectDao) { this.objectDao = objectDao; } @@ -93,7 +108,25 @@ } } + + @Override + public List getDisposableGoodsStockByCodeAndDisposeGoodIds(String handleDepartCode, Set disposableGoodsIds) { + OrgUnit org = new OrgUnit(); + org.setOrgUnitCoding(handleDepartCode); + //找出该部门下的所有仓库 + List list = wareHouseManager.getWareHouseListByOrgUnit(org); + Set warehouseIds = new HashSet<>(); + if(list != null){ + warehouseIds = list.stream().map((warehouse)->warehouse.getId() + "").collect(Collectors.toSet()); + } + if (CollectionUtils.isNotEmpty(warehouseIds)){ + return this.getDisposableGoodsStockList(disposableGoodsIds, warehouseIds); + } + return null; + } + + @Override public List> searchDisposableGoodsStockList(String spell, String allItems, String wareHouseId) { String sql = buildGetDisposableGoodsStockSql(spell, allItems); Index: ssts-web/src/main/webapp/disinfectsystem/recyclingApplication/goodsTemplateApplicationView.js =================================================================== diff -u -r16995 -r17100 --- ssts-web/src/main/webapp/disinfectsystem/recyclingApplication/goodsTemplateApplicationView.js (.../goodsTemplateApplicationView.js) (revision 16995) +++ ssts-web/src/main/webapp/disinfectsystem/recyclingApplication/goodsTemplateApplicationView.js (.../goodsTemplateApplicationView.js) (revision 17100) @@ -1218,10 +1218,77 @@ return table; } +/** + * 处理数量的事件 + * @param context + */ +function handleAmountEvent(context) { + var record = context.record; + 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); + } + else { + storage = findRecord.get('amount'); + } + } + if (parseInt(context.value, 10) > storage && !allowApplyDisposableGoodsWhenUnderstock) { + showResult("申请数量不能大于库存数量!"); + record.set("count", ""); + } + if (!isValidDiposableAmount(minApplyAmount, context.value)) { + showResult("该一次性物品最小申请数量为" + minApplyAmount + ",所填数量必须是" + minApplyAmount + "的倍数。"); + record.set("count", ""); + } + if (!isUndefinedOrNullOrEmpty(maxApplyAmount) && maxApplyAmount < context.value) { + top.Ext4.Msg.alert("提示消息", "申请数量大于最大可申请数量"); + } + } +} + +/** + * 根据一次性物品id和处理科室编号来查找该一次性物品的库存 + * 这里使用jquery的ajax方法去查询,因为需要用到同步 + * @param id 一次性物品的id + * @returns {number} 返回该物品的库存 + */ +function findStorageByDisposeIdAndHandleDepartCode(id) { + var storage = 0; + top.$.ajax({ + url: WWWROOT + '/disinfectSystem/disposableGoodsStockAction!loadStorageByDisposableGoodIdAndHandleDepartCode.do', + data : {disposeGoodId : id, handleDepartCode: top.Ext4.getCmp('handleDepartCoding').getValue()}, + async: false, + success : function (data) { + var result = Ext.decode(data); + if (result.success){ + storage = result.message.storage; + } + else { + showResult(result.message); + } + } + }); + return storage; +} + function comboApplication(id,editable,hiddenCommitButton,hiddenSaveButton,hiddenReturnEditButton,type, originalCommittedStatus) { - allowApplyDisposableGoodsWhenUnderstock = getBoolValueFromJs('sstsConfig.allowApplyDisposableGoodsWhenUnderstock',true); - //是否供应室用户 - var isSupplyRoomUser = validateIsSupplyRoomUser(); + allowApplyDisposableGoodsWhenUnderstock = getBoolValueFromJs('sstsConfig.allowApplyDisposableGoodsWhenUnderstock',true); + //是否供应室用户 + var isSupplyRoomUser = validateIsSupplyRoomUser(); var departCoding = $Id('departCoding').value; var hideDiposableGoodsPrice = false; if(sstsConfig.hideDiposableGoodsPrice){ @@ -1854,30 +1921,12 @@ }, afteredit:function(editor, context, eOpts){ var record = context.record; - var isDiposableGoods = record.get("diposable"); - var minApplyAmount = record.get("minApplyAmount"); - var maxApplyAmount = record.get("maxApplyAmount"); var totalPrice; - if (isDiposableGoods == '是' && context.value != null && context.value != ''){ - if ("urgentAmount" != context.field){ - var storage = record.get("storage"); - if(parseInt(context.value,10) > storage && !allowApplyDisposableGoodsWhenUnderstock){ - showResult("申请数量不能大于库存数量!"); - record.set("count", ""); - } - if (!isValidDiposableAmount(minApplyAmount,context.value)){ - showResult("该一次性物品最小申请数量为"+minApplyAmount+",所填数量必须是"+minApplyAmount+"的倍数。"); - record.set("count", ""); - } - if (!isUndefinedOrNullOrEmpty(maxApplyAmount) && maxApplyAmount < context.value){ - top.Ext4.Msg.alert("提示消息","申请数量大于最大可申请数量"); - } - } + handleAmountEvent(context); totalPrice = reCalculateTotalPriceAndSetUnitCount(record,context); } - var depth = record.getDepth(); var isLeaf = record.get('leaf'); var tousseType = record.get('tousseType'); Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/action/DisposableGoodsStockAction.java =================================================================== diff -u -r16292 -r17100 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/action/DisposableGoodsStockAction.java (.../DisposableGoodsStockAction.java) (revision 16292) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/action/DisposableGoodsStockAction.java (.../DisposableGoodsStockAction.java) (revision 17100) @@ -5,19 +5,25 @@ 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; import javax.servlet.http.HttpServletResponse; +import com.forgon.tools.StrutsResponseUtils; import com.forgon.tools.util.PageUtil; +import com.forgon.util.StringUtil; import net.sf.json.JSONArray; 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; import org.apache.struts2.convention.annotation.Namespace; import org.apache.struts2.convention.annotation.ParentPackage; @@ -61,6 +67,8 @@ private final Pattern pat = Pattern.compile("[\\u4E00-\\u9FA5]+"); + protected final Logger logger = Logger.getLogger(this.getClass()); + public void setDiposableGoodBatchStockManager( DiposableGoodBatchStockManager diposableGoodBatchStockManager) { this.diposableGoodBatchStockManager = diposableGoodBatchStockManager; @@ -499,6 +507,34 @@ return null; } + /** + * 根据一次性物品的id和处理科室编号来查找对应的库存 + * @return + */ + public void loadStorageByDisposableGoodIdAndHandleDepartCode(){ + try { + String disposeGoodId = StrutsParamUtils.getPraramValue("disposeGoodId", ""); + String handleDepartCode = StrutsParamUtils.getPraramValue("handleDepartCode", ""); + if (StringUtils.isBlank(disposeGoodId) || StringUtils.isBlank(handleDepartCode)){ + StrutsResponseUtils.output(false, "处理科室或者一次性物品id不能为空!"); + return; + } + Set disposeGoodIds = new HashSet<>(); + disposeGoodIds.add(disposeGoodId); + List lists = disposableGoodsStockManager.getDisposableGoodsStockByCodeAndDisposeGoodIds(handleDepartCode, disposeGoodIds); + JSONObject json = new JSONObject(); + //因为这里的物品id只有一个,所以lists的大小只有1 + json.put("storage",CollectionUtils.isNotEmpty(lists) ? lists.get(0).getAmount() : 0); + StrutsResponseUtils.output(true, json.toString()); + } + catch (Exception e) { + logger.error(e, e); + StrutsResponseUtils.output(false, e.getMessage()); + } + } + + + @Override public void prepare() { String id = StrutsParamUtils.getPraramValue("id", ""); Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DisposableGoodsStockManager.java =================================================================== diff -u -r16292 -r17100 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DisposableGoodsStockManager.java (.../DisposableGoodsStockManager.java) (revision 16292) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DisposableGoodsStockManager.java (.../DisposableGoodsStockManager.java) (revision 17100) @@ -3,6 +3,7 @@ import java.util.Collection; import java.util.List; import java.util.Map; +import java.util.Set; import net.sf.json.JSONObject; @@ -53,4 +54,11 @@ * @return */ List> searchDisposableGoodsStockList(String spell, String allItems, String wareHouseId); + + /** + * 根据处理科室编号和一次性物品编号,查这些物品对应的库存状况 + * @param handleDepartCode 处理科室编号 + * @return disposableGoodsIds 一次性物品的id + */ + List getDisposableGoodsStockByCodeAndDisposeGoodIds(String handleDepartCode, Set disposableGoodsIds); }