Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsstock/service/GoodsStockManager.java =================================================================== diff -u -r12653 -r12702 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsstock/service/GoodsStockManager.java (.../GoodsStockManager.java) (revision 12653) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsstock/service/GoodsStockManager.java (.../service/GoodsStockManager.java) (revision 12702) @@ -1,4 +1,4 @@ -package com.forgon.disinfectsystem.basedatamanager.goodsstock; +package com.forgon.disinfectsystem.basedatamanager.goodsstock.service; import java.util.List; @@ -26,7 +26,7 @@ * @param goodsStockList * @return */ - public List saveOrUpdateGoodsStock(List goodsStockList, String mode); + public List saveOrUpdateGoodsStock(List goodsStockList, String mode) throws Exception; /** * 查询材料库存数据明细,(按仓库对器械包或材料进行数量汇总,显示仓库明细) Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/RecyclingApplicationAction.java =================================================================== diff -u -r12672 -r12702 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/RecyclingApplicationAction.java (.../RecyclingApplicationAction.java) (revision 12672) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/RecyclingApplicationAction.java (.../RecyclingApplicationAction.java) (revision 12702) @@ -329,9 +329,18 @@ HttpServletResponse response = StrutsParamUtils.getResponse(); response.setCharacterEncoding("UTF-8"); + //校验申请的物品(器械包)能否被所选处理科室(供应室)处理以及申请的科室能否被所选处理科室(供应室)服务 + JSONObject jsonObject = + tousseDefinitionManager.validateRecyclingApplicationCssdPrivilege(application, newTousseItemVoList); + + //如果校验不通过,则直接返回至前端 + if(jsonObject != null && !jsonObject.optBoolean("success")){ + return jsonObject; + } + if(projectManager != null && StringUtils.isNotBlank(application.getProjCode())){ //验证是否必须选择项目及所选项目是否已经超支 - JSONObject jsonObject = projectManager.judgeOverspendByProjCode(application.getProjCode() , application, newTousseItemVoList); + jsonObject = projectManager.judgeOverspendByProjCode(application.getProjCode() , application, newTousseItemVoList); if(jsonObject != null && jsonObject.optBoolean("success") == false){ return jsonObject; } Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/action/TousseDefinitionAction.java =================================================================== diff -u -r12675 -r12702 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/action/TousseDefinitionAction.java (.../TousseDefinitionAction.java) (revision 12675) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/action/TousseDefinitionAction.java (.../TousseDefinitionAction.java) (revision 12702) @@ -25,8 +25,10 @@ import net.sf.json.JsonConfig; import net.sf.json.processors.DefaultValueProcessor; import net.sf.json.util.CycleDetectionStrategy; +import net.sf.json.util.JSONUtils; import net.sf.json.util.PropertyFilter; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; @@ -35,6 +37,7 @@ import org.springframework.security.core.context.SecurityContextHolder; import com.forgon.directory.acegi.tools.AcegiHelper; +import com.forgon.directory.model.OrgUnit; import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; import com.forgon.disinfectsystem.basedatamanager.taskGroup.service.TaskGroupManager; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsStock; @@ -1183,6 +1186,9 @@ // 搜索组合物品,包含器械包和一次性物品 public String searchComboGoodsData() { + //处理科室(供应室)编码,按科室编码过滤器械包 + String cssdOrgUnitCode = StrutsParamUtils.getPraramValue("cssdOrgUnitCode", ""); + String tousseType = StrutsParamUtils.getPraramValue("tousseType", ""); String hideDiposableGoodsPrice = StrutsParamUtils.getPraramValue("hideDiposableGoodsPrice", null); if (tousseType.indexOf(TousseDefinition.PACKAGE_TYPE_INSIDE) >= 0){ @@ -1196,21 +1202,74 @@ } if (spell == null) { - return null; + spell = ""; } try { spell = java.net.URLDecoder.decode(spell, "UTF-8"); JSONObject json = null; - boolean showReferencePrice = true; - if(StringUtils.isNotBlank(hideDiposableGoodsPrice) && "true".equals(hideDiposableGoodsPrice)){ - showReferencePrice = false; + + //如果处理科室编码不为空且类型不为一次性物品,则进行过滤 + if(StringUtils.isNotBlank(cssdOrgUnitCode) && !TousseItem.TYPE_DIPOSABLE_GOODS.equals(tousseType)){ + OrgUnit cssd = new OrgUnit(); + cssd.setOrgUnitCoding(cssdOrgUnitCode); + + List tousseDefinitiionList = + tousseDefinitionManager.getCssdHandleTousseDefinitionList(cssd); + + List> mapList = new ArrayList>(); + if(CollectionUtils.isNotEmpty(tousseDefinitiionList)){ + Map map = null; + for(TousseDefinition tousseDefinition : tousseDefinitiionList){ + //如果类型为消毒物品,则只保留类型为消毒物品的数据 + if(TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(tousseType)){ + if(TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(tousseDefinition.getTousseType())){ + map = new HashMap(); + map.put("id", tousseDefinition.getId()); + map.put("name", tousseDefinition.getName()); + map.put("borrowPrice", tousseDefinition.getBorrowPrice() == null ? 0 : tousseDefinition.getBorrowPrice()); + map.put("displayName", tousseDefinition.getName()); + map.put("isCleanedEntirely", tousseDefinition.getIsCleanedEntirely()); + map.put("price", tousseDefinition.getPrice()); + map.put("spelling", tousseDefinition.getSpelling()); + map.put("tousseType", tousseDefinition.getTousseType()); + map.put("type", tousseDefinition.getTousseType()); + map.put("unit", tousseDefinition.getUnit()); + mapList.add(map); + } + }else{ + map = new HashMap(); + map.put("id", tousseDefinition.getId()); + map.put("name", tousseDefinition.getName()); + map.put("borrowPrice", tousseDefinition.getBorrowPrice() == null ? 0 : tousseDefinition.getBorrowPrice()); + map.put("displayName", tousseDefinition.getName()); + map.put("isCleanedEntirely", tousseDefinition.getIsCleanedEntirely()); + map.put("price", tousseDefinition.getPrice()); + map.put("spelling", tousseDefinition.getSpelling()); + map.put("tousseType", tousseDefinition.getTousseType()); + map.put("type", tousseDefinition.getTousseType()); + map.put("unit", tousseDefinition.getUnit()); + mapList.add(map); + } + } + } + + Map result = new HashMap(); + result.put("totalCount", mapList.size()); + result.put("data", mapList); + json = JSONObject.fromObject(result); + }else{ + boolean showReferencePrice = true; + if(StringUtils.isNotBlank(hideDiposableGoodsPrice) && "true".equals(hideDiposableGoodsPrice)){ + showReferencePrice = false; + } + json = tousseDefinitionManager.searchComboGoods(spell, tousseType,showReferencePrice); } - json = tousseDefinitionManager.searchComboGoods(spell, tousseType,showReferencePrice); + HttpServletResponse response = StrutsParamUtils.getResponse(); response.setCharacterEncoding("UTF-8"); PrintWriter out; - + out = response.getWriter(); out.print(json); out.close(); Index: ssts-web/src/main/webapp/disinfectsystem/recyclingApplication/goodsTemplateApplicationView.js =================================================================== diff -u -r12643 -r12702 --- ssts-web/src/main/webapp/disinfectsystem/recyclingApplication/goodsTemplateApplicationView.js (.../goodsTemplateApplicationView.js) (revision 12643) +++ ssts-web/src/main/webapp/disinfectsystem/recyclingApplication/goodsTemplateApplicationView.js (.../goodsTemplateApplicationView.js) (revision 12702) @@ -206,6 +206,28 @@ }); appDepartJsonStore.reload(); +//申请单类型(即申请物品类型,有通用、一次性物品、器械包(含消毒物品)) +var invoicePlanForTousseType; +var invoicePlanForTousseType_Tousse = "器械包"; +var invoicePlanForTousseType_Diposable = "一次性物品"; +//处理科室(即服务的供应室)数据源 +var handleDepartStore = new Ext4.data.JsonStore({ + proxy : { + type : 'ajax', + url : WWWROOT + '/systemmanage/getCssdsByApplyDepartAndType.do', + reader : { + type : 'json', + root : 'data' + } + }, + fields : [ + /*{name : 'cssdOrgUnitId',mapping : 'cssdOrgUnitId'},*/ + {name : 'cssdOrgUnitCode',mapping : 'cssdOrgUnitCode'}, + {name : 'cssdOrgUnitName',mapping : 'cssdOrgUnitName'} + ] +}); +handleDepartStore.reload(); + var disinfectStore = new Ext4.data.JsonStore({ fields : [ {name : 'id'}, @@ -1697,10 +1719,15 @@ name : 'departCoding', itemId : 'departCoding' }, - { + { xtype : 'hidden', name : 'settleAccountsDepartCoding', id : 'settleAccountsDepartCoding' + }, + { + xtype : 'hidden', + name : 'handleDepartName', + id : 'handleDepartName' }, { xtype : 'hidden', name : 'isDiposableGoods', @@ -1774,7 +1801,7 @@ }] }, - // 申请科室、结算科室 + // 申请科室、结算科室、处理的供应室 { xtype : 'container', width : 800, @@ -1803,6 +1830,26 @@ var deptCoding = getDepartCoding(appDepartJsonStore,deptName); top.Ext4.ComponentQuery.query("#recyclingApplicationForm #departCoding")[0].setValue(deptCoding); setSettleAccountsDepartDefaultValue(deptName, deptCoding, departJsonStore); + + //选择申请科室后,根据申请科室及单类型加载处理科室,如果加载后的数量为1,则进行默认处理科室赋值 + handleDepartStore.proxy.extraParams.applyDepartCode = deptCoding; + handleDepartStore.proxy.extraParams.tousseType = invoicePlanForTousseType; + handleDepartStore.load({ + //params:{applyDepartCode:deptCoding,tousseType:invoicePlanForTousseType}, + callback: function(records, operation, success) { + var record = records; + if (records.length == 1){ + record = records[0]; + top.Ext4.getCmp("handleDepart").setValue(record.data.cssdOrgUnitCode); + //top.Ext4.getCmp("handleDepart").setValue(record.data.cssdOrgUnitName); + top.Ext4.getCmp('handleDepart').setRawValue(record.data.cssdOrgUnitName); + + comboGoodsStore.proxy.extraParams.cssdOrgUnitCode = record.data.cssdOrgUnitCode; + comboGoodsStore.reload(); + } + } + }); + //如果菜单中已启用申领一次性物品增加项目选项功能并且申请科室为课教项目经费,则该下拉框给予显示(仅中山眼科增加) if(sstsConfig.showProjectNameSelectWhenApplyDiposableGoods == true){ if(deptName == '科教项目经费'){ @@ -1845,6 +1892,35 @@ thiz.selectText(); } } + }, { + xtype : 'combo', + fieldLabel : '处理科室', + id : 'handleDepart', + name : 'handleDepart', + minChars : 0, + valueField : 'cssdOrgUnitCode', + displayField : 'cssdOrgUnitName', + store : handleDepartStore, + forceSelection : true, + lazyInit : true, + triggerAction : 'all', + hideTrigger : true, + typeAhead : false, + allowBlank : false, + flex : 1, + listeners:{ + select:function(combo, record, index){ + console.log(combo);console.log(record); + //alert(combo.getValue() + '=' + combo.value);alert(combo.getRawValue() + '=' + combo.rawValue); + top.Ext4.getCmp("handleDepartName").setValue(combo.rawValue); + + comboGoodsStore.proxy.extraParams.cssdOrgUnitCode = combo.value; + comboGoodsStore.reload(); + }, + focus : function(thiz){ + thiz.selectText(); + } + } }] }, { @@ -2133,6 +2209,7 @@ }); } + //处理科室 } function getApplyItemsInfo(treeStore, tousseInstanceInfos, tousseNames){ @@ -2726,6 +2803,11 @@ tooltip : '申请物品', hidden : SSTS_RecycApplication_Create || sstsConfig.applicationFormType != 1, handler : function() { + //新打开申请对话框时,相关参数调整及清除 + handleDepartStore.proxy.extraParams.applyDepartCode = ""; + handleDepartStore.proxy.extraParams.tousseType = ""; + + comboGoodsStore.proxy.extraParams.cssdOrgUnitCode = ""; comboApplication(0, "true",false,false,true,comboApplicationForm, false); } },{ @@ -2734,6 +2816,12 @@ tooltip : '申请器械包', hidden : SSTS_RecycApplication_Create || sstsConfig.applicationFormType != 2, handler : function() { + invoicePlanForTousseType = invoicePlanForTousseType_Tousse;//器械包 + //新打开申请对话框时,相关参数调整及清除 + handleDepartStore.proxy.extraParams.applyDepartCode = ""; + handleDepartStore.proxy.extraParams.tousseType = invoicePlanForTousseType; + + comboGoodsStore.proxy.extraParams.cssdOrgUnitCode = ""; comboApplication(0, "true",false,false,true,tousseApplicationForm, false);//待发货 } },{ @@ -2742,6 +2830,12 @@ tooltip : '申请一次性物品', hidden : SSTS_RecycApplication_Create || sstsConfig.applicationFormType != 2, handler : function() { + invoicePlanForTousseType = invoicePlanForTousseType_Diposable;//一次性物品 + //新打开申请对话框时,相关参数调整及清除 + handleDepartStore.proxy.extraParams.applyDepartCode = ""; + handleDepartStore.proxy.extraParams.tousseType = invoicePlanForTousseType; + + comboGoodsStore.proxy.extraParams.cssdOrgUnitCode = ""; comboApplication(0, "true",false,false,true,diposableGoodsApplicationForm, false);//待发货 } },{ @@ -2750,6 +2844,12 @@ iconCls : 'btn_ext_add_foreignTousse', hidden : SSTS_RecycApplication_Create || sstsConfig.applicationFormType != 2, handler : function() { + invoicePlanForTousseType = invoicePlanForTousseType_Tousse;//消毒物品也属器械包的类型 + //新打开申请对话框时,相关参数调整及清除 + handleDepartStore.proxy.extraParams.applyDepartCode = ""; + handleDepartStore.proxy.extraParams.tousseType = invoicePlanForTousseType; + + comboGoodsStore.proxy.extraParams.cssdOrgUnitCode = ""; addAndEditUntracableTousse(null,0,"01",function(){}); } },{ Index: ssts-web/src/main/resources/strtus_oa.xml =================================================================== diff -u -r12331 -r12702 --- ssts-web/src/main/resources/strtus_oa.xml (.../strtus_oa.xml) (revision 12331) +++ ssts-web/src/main/resources/strtus_oa.xml (.../strtus_oa.xml) (revision 12702) @@ -25,6 +25,8 @@ + + Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManager.java =================================================================== diff -u -r12675 -r12702 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManager.java (.../TousseDefinitionManager.java) (revision 12675) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManager.java (.../TousseDefinitionManager.java) (revision 12702) @@ -1,6 +1,7 @@ package com.forgon.disinfectsystem.tousse.toussedefinition.service; import java.io.File; +import java.util.Collection; import java.util.List; import java.util.Map; @@ -11,7 +12,9 @@ import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.idcardinstance.IDCardInstance; +import com.forgon.disinfectsystem.entity.recyclingapplication.RecyclingApplication; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; +import com.forgon.disinfectsystem.vo.TousseItemVo; /** * @author WangYi @@ -163,7 +166,7 @@ * @param orgUnit * @return */ - public List getCssdHandleTousseDefinitionList(OrgUnit orgUnit); + public List getCssdHandleTousseDefinitionList(OrgUnit cssdOrgUnit); /** * 新建或修改科室处理器械包配置 @@ -187,4 +190,13 @@ * @return */ public int removeCssdHandleTousseDefinitions(List idList); + + /** + * 校验申请的物品(器械包)能否能被所选处理科室(供应室)处理以及申请的科室能否被所选处理科室(供应室)服务 + * @param application 申请单 + * @param tousseItemVoList 申请器械物品 + * @return + */ + public JSONObject validateRecyclingApplicationCssdPrivilege(RecyclingApplication application, + Collection tousseItemVoList); } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsstock/service/GoodsStockManagerImpl.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsstock/service/GoodsStockManagerImpl.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsstock/service/GoodsStockManagerImpl.java (revision 12702) @@ -0,0 +1,122 @@ +package com.forgon.disinfectsystem.basedatamanager.goodsstock.service; + +import java.util.List; + +import org.apache.commons.collections4.CollectionUtils; + +import com.forgon.disinfectsystem.entity.goodsstock.GoodsStock; +import com.forgon.tools.hibernate.ObjectDao; + +/** + * 器械包、材料库存manager实现类 + * @author shuyongfu + * @since 2016-03-21 + */ +public class GoodsStockManagerImpl implements GoodsStockManager { + + private ObjectDao objectDao; + + public void setObjectDao(ObjectDao objectDao) { + this.objectDao = objectDao; + } + + /** + * 新增或修改材料库存数据(同一个仓库的同一个器械包或材料id只存在一条数据),同步方法防止并发出错 + * 修改入库或出库单时,数量应传修改后减修改前的差值。如果修改前后数量不变,则数量应该传0 + * @param goodsStockList + * @return + */ + public synchronized List saveOrUpdateGoodsStock(List goodsStockList, String mode) throws Exception{ + if(!MODE_INSTOCK.equals(mode) && !MODE_OUTSTOCK.equals(mode)){ + throw new Exception("参数mode="+mode+"值非法"); + } + if(CollectionUtils.isEmpty(goodsStockList)){ + throw new Exception("入/退库单明细数据不能为空"); + } + //1.如果为出库,校验库存是否够扣减 + if(MODE_OUTSTOCK.equals(mode)){ + String sql = null; + GoodsStock goodsStock = null; + for(GoodsStock goodsStockTemp : goodsStockList){ + if(goodsStockTemp.getAmount() == null || goodsStockTemp.getAmount() == 0){ + throw new Exception("入/退库单"+goodsStockTemp.getName()+"的数量不能为空或0"); + } + sql = " where 1=1 and wareHouseId = " + goodsStockTemp.getWareHouseId(); + if(goodsStockTemp.getTousseDefinitionId() != null && goodsStockTemp.getTousseDefinitionId() != 0){ + sql += " and tousseDefinitionId = " + goodsStockTemp.getTousseDefinitionId(); + }else if(goodsStockTemp.getMaterialDefinitionId() != null && goodsStockTemp.getMaterialDefinitionId() != 0){ + sql += " and materialDefinitionId = " + goodsStockTemp.getMaterialDefinitionId(); + } else { + throw new Exception("入/退库单器械包id与材料id不能同时为空"); + } + //判断库存数量是否大于退/出库数量 + goodsStock = (GoodsStock)objectDao.getBySql(GoodsStock.class.getSimpleName(), sql); + if(goodsStock == null){ + throw new Exception("未找到"+goodsStockTemp.getName()+"的库存数据,不能出库或退库"); + } else if(goodsStock.getAmount() < goodsStockTemp.getAmount()){ + throw new Exception(goodsStockTemp.getName() + "的库存数量小于出库或退库数量,不能出库或退库"); + } else { + goodsStock.setAmount(goodsStock.getAmount() - goodsStockTemp.getAmount()); + objectDao.saveOrUpdate(goodsStock); + } + } + } else if(MODE_INSTOCK.equals(mode)){ + String sql = null; + GoodsStock goodsStock = null; + for(GoodsStock goodsStockTemp : goodsStockList){ + if(goodsStockTemp.getAmount() == null || goodsStockTemp.getAmount() == 0){ + throw new Exception("入/退库单"+goodsStockTemp.getName()+"的数量不能为空或0"); + } + sql = " where 1=1 and wareHouseId = " + goodsStockTemp.getWareHouseId(); + if(goodsStockTemp.getTousseDefinitionId() != null && goodsStockTemp.getTousseDefinitionId() != 0){ + sql += " and tousseDefinitionId = " + goodsStockTemp.getTousseDefinitionId(); + }else if(goodsStockTemp.getMaterialDefinitionId() != null && goodsStockTemp.getMaterialDefinitionId() != 0){ + sql += " and materialDefinitionId = " + goodsStockTemp.getMaterialDefinitionId(); + } else { + throw new Exception("入/退库单器械包id与材料id不能同时为空"); + } + //判断库存数量是否大于退/出库数量 + goodsStock = (GoodsStock)objectDao.getBySql(GoodsStock.class.getSimpleName(), sql); + if(goodsStock == null){ + goodsStock = new GoodsStock(); + goodsStock.setWareHouseId(goodsStockTemp.getWareHouseId()); + goodsStock.setWareHouseName(goodsStockTemp.getWareHouseName()); + goodsStock.setMaterialDefinitionId(goodsStockTemp.getMaterialDefinitionId()); + goodsStock.setTousseDefinitionId(goodsStockTemp.getTousseDefinitionId()); + goodsStock.setName(goodsStockTemp.getName()); + goodsStock.setGoodsType(goodsStockTemp.getGoodsType()); + goodsStock.setOrgUnitCode(goodsStockTemp.getOrgUnitCode()); + goodsStock.setOrgUnitName(goodsStockTemp.getOrgUnitName()); + goodsStock.setAmount(goodsStockTemp.getAmount()); + objectDao.saveOrUpdate(goodsStock); + } else { + goodsStock.setAmount(goodsStock.getAmount() + goodsStockTemp.getAmount()); + objectDao.saveOrUpdate(goodsStock); + } + } + } + return goodsStockList; + } + + /** + * 查询材料库存数据明细,(按仓库对器械包或材料进行数量汇总,显示仓库明细) + * @param goodsStock 可以查询的属性有仓库id,器械包或材料定义id等 + * @return + */ + public List getGoodsStockList(GoodsStock goodsStock){ + List result = null; + String sql = " where 1=1 "; + if(goodsStock.getWareHouseId() != null && goodsStock.getWareHouseId() != 0){ + sql += " and wareHouseId = " + goodsStock.getWareHouseId(); + } + if(goodsStock.getTousseDefinitionId() != null && goodsStock.getTousseDefinitionId() != 0){ + sql += " and tousseDefinitionId = " + goodsStock.getTousseDefinitionId(); + }else if(goodsStock.getMaterialDefinitionId() != null && goodsStock.getMaterialDefinitionId() != 0){ + sql += " and materialDefinitionId = " + goodsStock.getMaterialDefinitionId(); + } + //判断库存数量是否大于退/出库数量 + result = (List)objectDao.findBySql(GoodsStock.class.getSimpleName(), sql); + return result; + } + +} Index: forgon-core/src/main/java/com/forgon/directory/action/OrgUnitAction.java =================================================================== diff -u -r12331 -r12702 --- forgon-core/src/main/java/com/forgon/directory/action/OrgUnitAction.java (.../OrgUnitAction.java) (revision 12331) +++ forgon-core/src/main/java/com/forgon/directory/action/OrgUnitAction.java (.../OrgUnitAction.java) (revision 12702) @@ -15,14 +15,17 @@ import net.sf.json.JsonConfig; import net.sf.json.util.PropertyFilter; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; import com.forgon.directory.model.BarcodeDevice; +import com.forgon.directory.model.CssdServiceDepts; import com.forgon.directory.model.OrgUnit; import com.forgon.directory.service.OrgUnitManager; import com.forgon.serialnumber.model.SerialNum; import com.forgon.serialnumber.service.SerialNumManager; import com.forgon.tools.StrutsParamUtils; +import com.forgon.tools.hibernate.ObjectDao; import com.forgon.tools.json.JsonPropertyFilter; import com.forgon.treenode.ext.model.ExtTreeNode; import com.forgon.treenode.model.THTreeNode; @@ -42,6 +45,8 @@ private SerialNumManager serialNumManager; + private ObjectDao objectDao; + public void setSerialNumManager(SerialNumManager serialNumManager) { this.serialNumManager = serialNumManager; } @@ -65,6 +70,10 @@ public OrgUnitManager getOrgUnitManager() { return orgUnitManager; } + public void setObjectDao(ObjectDao objectDao) { + this.objectDao = objectDao; + } + public void getOrgNameBySpellingAndWB(){ String spell = StrutsParamUtils.getPraramValue("spell", ""); String related = StrutsParamUtils.getPraramValue("related", ""); @@ -302,6 +311,64 @@ } } + + /** + * 根据申请科室编码及申请单的物品类型加载处理科室 + */ + public void getCssdsByApplyDepartAndType(){ + HttpServletResponse response = StrutsParamUtils.getResponse(); + String applyDepartCode = StrutsParamUtils.getPraramValue("applyDepartCode", ""); + String tousseType = StrutsParamUtils.getPraramValue("tousseType", ""); + Map result = new HashMap(); + + String sql = " where 1=1 "; + //如果申请科室不为空,根据申请科室及类型查询其处理科室 + if(StringUtils.isNotBlank(applyDepartCode)){ + sql += " and clinicOrgUnitCode = '" + applyDepartCode + "'"; + if(StringUtils.isNotBlank(tousseType)){ + sql += " and tousseType = '" + tousseType + "'"; + } + } + List list = (List)objectDao.findBySql(CssdServiceDepts.class.getSimpleName(), sql); + List> resultMapList = new ArrayList>(); + if(CollectionUtils.isNotEmpty(list)){ + Map resultMap = null; + for(CssdServiceDepts cssdServiceDepts : list){ + if(CollectionUtils.isNotEmpty(resultMapList)){ + boolean exists = false; + for(Map resultMapTemp : resultMapList){ + if(cssdServiceDepts.getCssdOrgUnitCode().equals(resultMapTemp.get("cssdOrgUnitCode"))){ + exists = true; + break; + } + } + if(!exists){ + resultMap = new HashMap(); + resultMap.put("cssdOrgUnitId", cssdServiceDepts.getCssdOrgUnitId()); + resultMap.put("cssdOrgUnitCode", cssdServiceDepts.getCssdOrgUnitCode()); + resultMap.put("cssdOrgUnitName", cssdServiceDepts.getCssdOrgUnitName()); + resultMapList.add(resultMap); + } + }else{ + resultMap = new HashMap(); + resultMap.put("cssdOrgUnitId", cssdServiceDepts.getCssdOrgUnitId()); + resultMap.put("cssdOrgUnitCode", cssdServiceDepts.getCssdOrgUnitCode()); + resultMap.put("cssdOrgUnitName", cssdServiceDepts.getCssdOrgUnitName()); + resultMapList.add(resultMap); + } + } + } + + result.put("data", resultMapList); + try { + response.setCharacterEncoding("utf-8"); + String jsonResult = JSONObject.fromObject(result).toString(); + response.getWriter().print(jsonResult); + response.getWriter().close(); + } catch (IOException e) { + e.printStackTrace(); + } + } public void prepareSave() { iniInfo(); Fisheye: Tag 12702 refers to a dead (removed) revision in file `ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsstock/GoodsStockManager.java'. Fisheye: No comparison available. Pass `N' to diff? Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java =================================================================== diff -u -r12675 -r12702 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java (.../TousseDefinitionManagerImpl.java) (revision 12675) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java (.../TousseDefinitionManagerImpl.java) (revision 12702) @@ -28,6 +28,7 @@ import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.directory.model.BarcodeDevice; import com.forgon.directory.model.CssdHandleTousses; +import com.forgon.directory.model.CssdServiceDepts; import com.forgon.directory.model.OrgUnit; import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; import com.forgon.disinfectsystem.common.CssdUtils; @@ -41,10 +42,12 @@ import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.WareHouse; import com.forgon.disinfectsystem.entity.idcardinstance.IDCardInstance; +import com.forgon.disinfectsystem.entity.recyclingapplication.RecyclingApplication; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; import com.forgon.disinfectsystem.tousse.imagefilemanager.service.ImageFileManager; import com.forgon.disinfectsystem.tousse.materialdefinition.service.MaterialDefinitionManager; import com.forgon.disinfectsystem.tousse.videomanager.service.VideoFileManager; +import com.forgon.disinfectsystem.vo.TousseItemVo; import com.forgon.log.model.Log; import com.forgon.log.service.LogManager; import com.forgon.security.tools.Util; @@ -1860,10 +1863,13 @@ return null; } + @SuppressWarnings("unchecked") @Override public List getCssdHandleTousseDefinitionList( - OrgUnit orgUnit) { - return null; + OrgUnit cssdOrgUnit) { + String sql = "from " + TousseDefinition.class.getSimpleName() + " where id in (select tousseDefinitionId from " + + CssdHandleTousses.class.getSimpleName() + " where orgUnitCode = '" + cssdOrgUnit.getOrgUnitCoding() + "')"; + return objectDao.findByHql(sql); } @Override @@ -1944,4 +1950,97 @@ } return 0; } + + @Override + public JSONObject validateRecyclingApplicationCssdPrivilege( + RecyclingApplication application, + Collection tousseItemVoList) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("success", true); + //处理科室(为空时需提示) + String cssdOrgUnitCode = application.getHandleDepartCoding(); + if(StringUtils.isNotBlank(cssdOrgUnitCode)){ + jsonObject.put("success", false); + jsonObject.put("message", "处理科室不能为空"); + return jsonObject; + } + //申请科室(为空时需提示) + String applyOrgUnitCode = application.getDepartCoding(); + if(StringUtils.isNotBlank(cssdOrgUnitCode)){ + jsonObject.put("success", false); + jsonObject.put("message", "申请科室不能为空"); + return jsonObject; + } + //申请物品(为空时需提示) + if(CollectionUtils.isEmpty(tousseItemVoList)){ + jsonObject.put("success", false); + jsonObject.put("message", "申请物品不能为空"); + return jsonObject; + } + + boolean appliedTousse = false;//是否有申领器械包(含消毒物品与敷料包) + boolean appliedDiposableGoods = false;//是否有申领一次性物品 + for(TousseItemVo tousseItemVo : tousseItemVoList){ + if(appliedTousse == false && + (TousseDefinition.PACKAGE_TYPE_INSIDE.equals(tousseItemVo.getTousseType()) + || TousseDefinition.PACKAGE_TYPE_DRESSING.equals(tousseItemVo.getTousseType()) + || TousseDefinition.PACKAGE_TYPE_DRESSING.equals(tousseItemVo.getTousseType()))){ + appliedTousse = true; + } + if(appliedDiposableGoods == false && + TousseItem.TYPE_DIPOSABLE_GOODS.equals(tousseItemVo.getTousseType())){ + appliedDiposableGoods = true; + } + if(appliedTousse && appliedDiposableGoods){ + break; + } + } + + //1.校验所选处理科室是否配置服务该申请科室(如果申请项里含有器械包,需校验是否配置针对器械包服务该申请科室;同时如果申请项里含有一次性物品,需校验是否配置针对一次性物品服务该申请科室) + if(appliedTousse){ + String sql = " where cssdOrgUnitCode = '" + cssdOrgUnitCode + + "' and clinicOrgUnitCode = '" + applyOrgUnitCode + + "' and tousseType = '" + CssdServiceDepts.TOUSSETYPE_TOUSSE + + "' "; + if(objectDao.getBySql(CssdServiceDepts.class.getSimpleName(), sql) == null){ + jsonObject.put("success", false); + jsonObject.put("message", application.getHandleDepart() + "未配置"+ + CssdServiceDepts.TOUSSETYPE_TOUSSE + "服务" + application.getDepart()); + return jsonObject; + } + } + + if(appliedDiposableGoods){ + String sql = " where cssdOrgUnitCode = '" + cssdOrgUnitCode + + "' and clinicOrgUnitCode = '" + applyOrgUnitCode + + "' and tousseType = '" + CssdServiceDepts.TOUSSETYPE_DIPOSABLEGOODS + + "' "; + if(objectDao.getBySql(CssdServiceDepts.class.getSimpleName(), sql) == null){ + jsonObject.put("success", false); + jsonObject.put("message", application.getHandleDepart() + "未配置"+ + CssdServiceDepts.TOUSSETYPE_DIPOSABLEGOODS + "服务" + application.getDepart()); + return jsonObject; + } + } + + //2.校验所选处理科室是否配置处理所选的器械包(暂不校验一次性物品) + for(TousseItemVo tousseItemVo : tousseItemVoList){ + if(TousseDefinition.PACKAGE_TYPE_INSIDE.equals(tousseItemVo.getTousseType()) + || TousseDefinition.PACKAGE_TYPE_DRESSING.equals(tousseItemVo.getTousseType()) + || TousseDefinition.PACKAGE_TYPE_DRESSING.equals(tousseItemVo.getTousseType())){ + + String sql = " where orgUnitCode = '" + cssdOrgUnitCode + + "' and tousseName = '" + tousseItemVo.getTousseName() + "' "; + if(objectDao.getBySql(CssdHandleTousses.class.getSimpleName(), sql) == null){ + jsonObject.put("success", false); + jsonObject.put("message", application.getHandleDepart() + "未配置"+ + "处理" + tousseItemVo.getTousseName()); + return jsonObject; + } + } + + } + + return jsonObject; + } }