Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/InvoicePlanAction.java =================================================================== diff -u -r12331 -r13381 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/InvoicePlanAction.java (.../InvoicePlanAction.java) (revision 12331) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/InvoicePlanAction.java (.../InvoicePlanAction.java) (revision 13381) @@ -14,7 +14,6 @@ import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @@ -40,7 +39,6 @@ import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.directory.model.BarcodeDevice; import com.forgon.disinfectsystem.barcode.service.BarcodeManager; -import com.forgon.disinfectsystem.diposablegoods.service.DiposableGoodsManager; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.invoicemanager.Invoice; import com.forgon.disinfectsystem.entity.invoicemanager.InvoiceItem; @@ -51,8 +49,6 @@ import com.forgon.disinfectsystem.entity.sterilizationmanager.foreignproxydisinfection.ForeignProxyItem; import com.forgon.disinfectsystem.recyclingapplication.service.InvoicePlanManager; import com.forgon.disinfectsystem.recyclingapplication.vo.InvoicePlanVo; -import com.forgon.disinfectsystem.stockmanage.cssdstock.service.TousseStockManager; -import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseInstanceManager; import com.forgon.serialnumber.model.SerialNum; import com.forgon.serialnumber.service.SerialNumManager; @@ -85,22 +81,15 @@ private BarcodeManager barcodeManager; - private TousseStockManager tousseStockManager; - - private DiposableGoodsManager diposableGoodsManager; - private InvoicePlanManager invoicePlanManager; private TousseInstanceManager tousseInstanceManager; private SerialNumManager serialNumManager; - private TousseDefinitionManager tousseDefinitionManager; - private HttpOptionManager httpOptionManager; private ObjectDao objectDao; - private String sendOutGoodsStoreData;// 发货扫描的物品 private String recyclingappStoreData;// 申请的物品 @@ -152,11 +141,6 @@ this.orgUnitCoding = orgUnitCoding; } - public void setTousseDefinitionManager( - TousseDefinitionManager tousseDefinitionManager) { - this.tousseDefinitionManager = tousseDefinitionManager; - } - public void setSerialNumManager(SerialNumManager serialNumManager) { this.serialNumManager = serialNumManager; } @@ -170,15 +154,6 @@ this.invoicePlanManager = invoicePlanManager; } - public void setDiposableGoodsManager( - DiposableGoodsManager diposableGoodsManager) { - this.diposableGoodsManager = diposableGoodsManager; - } - - public void setTousseStockManager(TousseStockManager tousseStockManager) { - this.tousseStockManager = tousseStockManager; - } - public void setBarcodeManager(BarcodeManager barcodeManager) { this.barcodeManager = barcodeManager; } Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/RecyclingApplicationAction.java =================================================================== diff -u -r13368 -r13381 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/RecyclingApplicationAction.java (.../RecyclingApplicationAction.java) (revision 13368) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/RecyclingApplicationAction.java (.../RecyclingApplicationAction.java) (revision 13381) @@ -3,6 +3,7 @@ import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; +import java.lang.reflect.InvocationTargetException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; @@ -24,6 +25,7 @@ import net.sf.json.util.CycleDetectionStrategy; import net.sf.json.util.PropertyFilter; +import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.Predicate; import org.apache.commons.collections4.Transformer; @@ -43,7 +45,6 @@ import com.forgon.disinfectsystem.departmentapplicationtemplate.service.DepartmentAppTemplateManager; import com.forgon.disinfectsystem.diposablegoods.service.DiposableGoodsManager; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; -import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsStock; import com.forgon.disinfectsystem.entity.basedatamanager.departmentapplicationtemplate.DepartmentAppTemplate; import com.forgon.disinfectsystem.entity.basedatamanager.departmentapplicationtemplate.DiposableGoodsTemplateItem; import com.forgon.disinfectsystem.entity.basedatamanager.departmentapplicationtemplate.TousseDefinitionTemplateItem; @@ -1697,6 +1698,52 @@ } return tousseDefinition; } + + public void loadTousseItems(){ + String invoicePlanId = StrutsParamUtils.getPraramValue("invoicePlanId", null); + InvoicePlan invoicePlan = invoicePlanManager.getInvoicePlanById(invoicePlanId); + HttpServletResponse response = StrutsParamUtils.getResponse(); + response.setCharacterEncoding("UTF-8"); + JSONObject result = new JSONObject(); + JSONArray dataArray = new JSONArray(); + if(invoicePlan != null){ + for (TousseItem item : invoicePlan.getApplicationItems()) { + JSONObject obj = new JSONObject(); + obj.put("id", item.getId()); + obj.put("tousseName", item.getTousseName()); + obj.put("type", item.getTousseType()); + obj.put("amount", item.getAmount()); + obj.put("maxSplitAmount", item.getAmount()); + dataArray.add(obj); + } + } + result.put("success", true); + result.put("data", dataArray); + try { + response.getWriter().print(result.toString()); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void saveSplitInvoicePlan(){ + String resultStr = StrutsParamUtils.getPraramValue("result", null); + boolean success = true; + String msg = "保存成功!"; + try { + recyclingApplicationManager.interfereInvoicePlan(resultStr); + } catch (Exception e) { + success = false; + msg = e.getMessage(); + } + HttpServletResponse response = StrutsParamUtils.getResponse(); + response.setCharacterEncoding("UTF-8"); + try { + response.getWriter().print("{success:"+success+",msg:'"+msg+"'}"); + } catch (IOException e) { + e.printStackTrace(); + } + } public void getAllProject(){ String projectName = StrutsParamUtils.getPraramValue("spell", ""); Index: ssts-web/src/main/webapp/disinfectsystem/interfere/interfereGoodsApplicationView.jsp =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/interfere/interfereGoodsApplicationView.jsp (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/interfere/interfereGoodsApplicationView.jsp (revision 13381) @@ -0,0 +1,77 @@ +<%@page import="com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan"%> +<%@page import="com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig"%> +<%@ page import="com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager" %> +<%@ page contentType="text/html; charset=UTF-8"%> +<%@ include file="/common/taglibs.jsp"%> +<% + SupplyRoomConfigManager supplyRoomConfigManager = (SupplyRoomConfigManager)SpringBeanManger.getBean("supplyRoomConfigManager"); + LoginUserData userData = AcegiHelper.getLoginUser(); + String currentOrgUnitName = userData.getCurrentOrgUnitName(); + String currentOrgUnitCode = userData.getCurrentOrgUnitCode(); + if(currentOrgUnitName != null && currentOrgUnitCode != null){ + request.setAttribute("depart",currentOrgUnitName); + request.setAttribute("departCoding",currentOrgUnitCode); + } + request.setAttribute("userName",userData.getUserFullName()); + String listType = request.getParameter("listType"); + +%> + + + +<%@ include file="/common/includeExtJsAndCss.jsp"%> + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+ + +
+ + \ No newline at end of file Index: ssts-web/src/main/webapp/homepage/menuconfigure.js =================================================================== diff -u -r13300 -r13381 --- ssts-web/src/main/webapp/homepage/menuconfigure.js (.../menuconfigure.js) (revision 13300) +++ ssts-web/src/main/webapp/homepage/menuconfigure.js (.../menuconfigure.js) (revision 13381) @@ -301,7 +301,8 @@ singleClickExpand:singleClickExpandTree, hidden:SSTS_InterfereManagerView, children:[ - {hidden :SSTS_InterfereSterilizationRecord_ViewMenu,text:"灭菌记录干预管理",href:WWWROOT+'/disinfectsystem/interfere/interfereSterilizationView.jsp',hrefTarget:linkTarget,leaf:true} + {hidden :SSTS_InterfereSterilizationRecord_ViewMenu,text:"灭菌记录干预管理",href:WWWROOT+'/disinfectsystem/interfere/interfereSterilizationView.jsp',hrefTarget:linkTarget,leaf:true}, + {hidden :SSTS_InterfereSterilizationRecord_ViewMenu,text:"申请单干预管理",href:WWWROOT+'/disinfectsystem/interfere/interfereGoodsApplicationView.jsp',hrefTarget:linkTarget,leaf:true} ] },{ text:"消毒供应中心物品领用", Index: ssts-web/src/main/webapp/disinfectsystem/interfere/splitRecyclingApplicationView.js =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/interfere/splitRecyclingApplicationView.js (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/interfere/splitRecyclingApplicationView.js (revision 13381) @@ -0,0 +1,532 @@ +var leftGridPanel; +var rightGridPanel; +var splitInvoicePlanPanel; + +var leftStore; +var rightStore; +var addSplitMaterial; + +function toRightGrid(){ + var records = leftGridPanel.getSelectionModel().getSelections(); + if (records.length == 0) { + showResult("请选择!"); + return false; + } + //添加 + for ( var j = 0; j < records.length; j++) { + var tousseItemId = records[j].data['id']; + var left_tousseName = records[j].data['tousseName']; + var amount = records[j].data['amount']; + var maxSplitAmount = records[j].data['maxSplitAmount']; + if(amount > maxSplitAmount){ + showResult("申请数量不能大于" + maxSplitAmount + "!"); + return false; + } + if(amount == 0){ + continue; + } + var isExist = false; + for ( var n = 0; n < rightStore.getCount(); n++) { + var record = rightStore.getAt(n); + var right_id =record.get('id'); + var right_amount = record.get('amount'); + if(right_id == tousseItemId){ + isExist = true; + var num = Number(amount) + Number(right_amount); + record.set('amount', num); + } + } + if(!isExist){ + var record = new addSplitMaterial({ + id : tousseItemId, + tousseName : left_tousseName, + amount : amount + }); + rightStore.addSorted(record); + } + } + //删除 + var rows = top.Ext.getCmp('splitMaterialGrid2').getSelectionModel().getSelections();// 返回值为 + if (rows) { + for ( var i = 0; i < rows.length; i++) { + var amount = rows[i].data['amount']; + var maxSplitAmount = rows[i].data['maxSplitAmount']; + if(amount == maxSplitAmount){ + leftStore.remove(rows[i]); + }else{ + var num = Number(maxSplitAmount) - Number(amount); + rows[i].set('amount', num); + rows[i].set('maxSplitAmount', num); + } + } + } +} + +function toLeftGrid(){ + var records = rightGridPanel.getSelectionModel().getSelections(); + if (records.length == 0) { + showResult("请选择!"); + return false; + } + for ( var j = 0; j < records.length; j++) { + var tousseItemId = records[j].data['id']; + var right_tousseName = records[j].data['tousseName']; + var right_amount = records[j].data['amount']; + + var isExist = false; + for ( var n = 0; n < leftStore.getCount(); n++) { + var record = leftStore.getAt(n); + var left_id =record.get('id'); + var amount = record.get('amount'); + if(left_id == tousseItemId){ + isExist = true; + var num = Number(right_amount) + Number(amount); + record.set('amount', num); + record.set('maxSplitAmount', num); + } + } + if(!isExist){ + var record = new addSplitMaterial({ + id : tousseItemId, + tousseName : right_tousseName, + amount : right_amount + }); + leftStore.add(record); + } + } + //删除 + var rows = top.Ext.getCmp('splitMaterialGrid3').getSelectionModel().getSelections();// 返回值为 + if (rows) { + for ( var i = 0; i < rows.length; i++) { + rightStore.remove(rows[i]); + } + } +} + +function loadReviewerByBarcode(barcodeField){ + var peopleOfBarcode = barcodeField.getValue(); + if(peopleOfBarcode){ + UserTableManager.getUserByBarcode(peopleOfBarcode,function(responseText){ + if(responseText){ + var result = Ext.decode(responseText); + if(!result.success){ + showResult("输入的条码有误!"); + return; + }else{ + top.Ext.getCmp('reviewer2').setValue(result.fullName); + top.Ext.getCmp('reviewerCode2').setValue(result.name); + } + }else{ + showResult('找不到该条码所对应的人员信息'); + top.Ext.getCmp('reviewer2').setValue(); + } + }); + } + barcodeField.setValue(); +} + +function splitInvoicePlan(invoicePlanId,serialNum,depart,settleAccountsDepart,handleDepart){ + + var selectModel = new top.Ext.grid.CheckboxSelectionModel(); + + var handleDepartStore = new Ext.data.Store({ + autoLoad : false, + proxy : new Ext.data.HttpProxy({ + url : WWWROOT + '/systemmanage/getCssdsByApplyDepartAndType.do', + method : 'POST' + }), + reader : new Ext.data.JsonReader({ + root : 'data' + }, [ + {name : 'cssdOrgUnitCode',mapping : 'cssdOrgUnitCode'}, + {name : 'name',mapping : 'cssdOrgUnitName'} + ]) + }); + handleDepartStore.load(); + + splitInvoicePlanPanel = new top.Ext.form.FormPanel( { + labelAlign : 'right', + buttonAlign : 'center', + collapsible : true, + collapseMode : 'mini', + split : true, + border : 0, + labelSeparator : ':', + frame : true, + layout: 'column', + bodyStyle : 'padding:0px auto;margin:0px', + items : [{ + xtype : "fieldset", + title : '旧申请单', + layout:'column', + columnWidth : 0.5, + height:100, + items : [{ + layout : 'column', + items : [ + { + columnWidth : 0.5, + layout : 'form', + labelWidth : 60, + items : [{ + xtype : 'textfield', + fieldLabel : "申请科室", + name : "depart", + readOnly : true, + id : "depart", + anchor : '99%', + value:depart, + cls:'fieldReadOnlyNoRemove' + }] + },{ + columnWidth : 0.5, + layout : 'form', + labelWidth : 60, + items : [{ + xtype : 'textfield', + fieldLabel : "结算科室", + name : "settleAccountsDepart", + readOnly : true, + id : "settleAccountsDepart", + anchor : '99%', + value:settleAccountsDepart, + cls:'fieldReadOnlyNoRemove' + }] + },{ + columnWidth : 0.5, + layout : 'form', + labelWidth : 60, + items : [{ + xtype : 'textfield', + fieldLabel : "流水号", + name : "serialNumber", + readOnly : true, + id : "serialNumber", + anchor : '99%', + value:serialNum, + cls:'fieldReadOnlyNoRemove' + }] + },{ + columnWidth : 0.5, + layout : 'form', + labelWidth : 60, + items : [{ + xtype : 'textfield', + fieldLabel : "处理科室", + name : "handleDepart", + readOnly : true, + id : "handleDepart", + anchor : '99%', + value:handleDepart, + cls:'fieldReadOnlyNoRemove' + }] + } + ]} + ] + },{ + + xtype : "fieldset", + title : '新申请单', + layout:'column', + columnWidth : 0.5, + height:100, + items : [{ + layout : 'column', + items : [ + { + columnWidth : 1, + layout : 'form', + labelWidth : 100, + items : [{ + xtype : 'combo', + fieldLabel : '处理科室', + id : 'newHandleDepart', + name : 'newHandleDepart', + valueField : 'cssdOrgUnitCode', + displayField : 'name', + store : handleDepartStore, + forceSelection : true, + lazyInit : true, + triggerAction : 'all', + typeAhead : false, + editable : false, + allowBlank : false + }] + } + ]} + ] + }] + }); + + /**********************待拆分区域**************************************************************/ + + var leftMaterialCm = new top.Ext.grid.ColumnModel( [selectModel, { + header : "id", + dataIndex : 'id', + width : 100, + hidden:true + },{ + header : "物品名称", + dataIndex : 'tousseName', + width : 100, + menuDisabled: true + }, { + id:'amount', + header : "申请数量", + dataIndex : 'amount', + width : 40, + align : 'center', + menuDisabled: true, + editor : new top.Ext.form.NumberField({ + allowBlank : false, + listeners : { + focus : function(thiz){ + thiz.selectText(); + } + } + }) + }, { + header : "可拆分数量", + hidden:true, + dataIndex : 'maxSplitAmount', + width : 60, + menuDisabled: true + }]); + + var rightMaterialCm = new top.Ext.grid.ColumnModel( [selectModel, { + header : "id", + hidden : true, + dataIndex : 'id', + width : 200, + menuDisabled: true + },{ + header : "物品名称", + dataIndex : 'tousseName', + width : 200, + menuDisabled: true + }, { + header : "数量", + dataIndex : 'amount', + width : 60, + menuDisabled: true + }]); + + //初始化加载器械包 + leftStore = new Ext.data.Store({ + proxy : new Ext.data.HttpProxy({ + url : WWWROOT + '/disinfectSystem/recyclingApplicationAction!loadTousseItems.do', + method : 'POST' + }), + reader : new Ext.data.JsonReader({ + root : 'data' + }, [ + {name : 'id',mapping : 'id'}, + {name : 'tousseName',mapping : 'tousseName'}, + {name : 'amount',mapping : 'amount'}, + {name : 'maxSplitAmount',mapping : 'maxSplitAmount'} + ]) + }); + leftStore.load({params:{invoicePlanId : invoicePlanId}}); + + leftGridPanel = new top.Ext.grid.EditorGridPanel( { + id : 'splitMaterialGrid2', + height : 350, + store : leftStore, + cm : leftMaterialCm, + title : '待拆分的物品', + clicksToEdit : 1,// 设置点击几次才可编辑 + selModel : new top.Ext.grid.RowSelectionModel({ + singleSelect : false + }), + viewConfig: { + forceFit:true + }, + frame : false, + border : true, + bodyStyle : 'border:1px solid #afd7af;padding-left:5px' + }); + + + + /**************分类区*************/ + addSplitMaterial = Ext.data.Record.create( [{ + name : 'id' + },{ + name : 'tousseName' + }, { + name : 'amount' + }]); + + rightStore = new Ext.data.Store({ + proxy : new Ext.data.HttpProxy({ + url : WWWROOT + '/disinfectSystem/packingAction!getTousseIncludeMaterials.do', + method : 'POST' + }), + reader : new Ext.data.JsonReader({ + root : 'data' + }, [ + {name : 'id',mapping : 'id'}, + {name : 'tousseName',mapping : 'tousseName'}, + {name : 'amount',mapping : 'amount'} + ]) + }); + + rightGridPanel = new top.Ext.grid.GridPanel( { + id : 'splitMaterialGrid3', + height : 350, + store : rightStore, + cm : rightMaterialCm, + enableHdMenu : false, + clicksToEdit : 1,// 设置点击几次才可编辑 + selModel : new top.Ext.grid.RowSelectionModel({ + singleSelect : false + }), + viewConfig: { + forceFit:true + }, + title : '已拆分的物品', +// frame : false, +// border : true, + autoExpandColumn : 'materialAmount', + bodyStyle : 'border:1px solid #afd7af;padding-left:5px' + }); + + + /*************************已拆分区域*************************************************************************************/ + var window = new top.Ext.Window( { + id : 'invoiceWin', + layout : 'border', + title : '申请单拆单', + width : 850, + height:550, + autoHeight : false, + border : false, + plain : true, + modal :true, + items : [{ + region : 'north', + height : 130, + layout : 'fit', + items : [splitInvoicePlanPanel] + }, { + region : 'center', + height : 250, + layout : 'column', + items : [ + { + layout : 'form', + columnWidth : 0.47, + items : [ leftGridPanel ] + },{ + layout : 'form', + columnWidth : 0.06, + buttonAlign:'center', + height : 350, + items : [ + { height :100, + border:false + }, { + xtype :'button', + text : '>>', + minWidth:48, + handler : toRightGrid + }, { + xtype :'button', + text : '<<', + minWidth:48, + handler : toLeftGrid + }] + }, { + layout : 'form', + columnWidth : 0.47, + items : [ rightGridPanel ] + } ] + }], + buttonAlign:'center', + buttons:[{ + text:'保存', + handler:function(){ + var handleDepartCode = top.Ext.getCmp('newHandleDepart').getValue(); + if(handleDepartCode == ""){ + showResult("请选择处理科室!"); + return; + } + + var newHandleDepartName = top.Ext.getCmp('newHandleDepart').getRawValue(); + if(newHandleDepartName == handleDepart){ + showResult("旧申请单的处理科室不能与新申请单的结算科室一样!"); + return; + } + + var result = {}; + result.invoicePlanId = invoicePlanId; + result.newAppHandleDepartCode = handleDepartCode; + var oldInvoicePlanItems = new Array(); + var newInvoicePlanItems = new Array(); + var validPass = true; + for ( var i = 0; i < leftStore.getCount(); i++) { + var record = leftStore.getAt(i); + var tousseItemId = record.get('id'); + var tousseName = record.get('tousseName'); + var tousseType = record.get('tousseType'); + var amount = record.get("amount"); + var maxSplitAmount = record.get('maxSplitAmount'); + if(amount != maxSplitAmount){ + showResult(tousseName+",申请数量已修改但未拆分!"); + validPass = false; + break; + } + var json = { + tousseItemId : tousseItemId, + tousseType : tousseType, + amount : amount + }; + oldInvoicePlanItems.push(json); + } + if(validPass){ + for ( var i = 0; i < rightStore.getCount(); i++) { + var record = rightStore.getAt(i); + var tousseItemId = record.get('id'); + var tousseType = record.get('tousseType'); + var amount = record.get("amount"); + var json = { + tousseItemId : tousseItemId, + tousseType : tousseType, + amount : amount + }; + newInvoicePlanItems.push(json); + } + + result.oldInvoicePlanItems = oldInvoicePlanItems; + result.newInvoicePlanItems = newInvoicePlanItems; + + splitInvoicePlanPanel.form.submit( { + url : WWWROOT + '/disinfectSystem/recyclingApplicationAction!saveSplitInvoicePlan.do', + method : 'POST', + waitMsg : '正在保存数据,请稍候', + waitTitle : '提交表单', + params : { + result:JSON.stringify(result) + }, + success : function(form, action) { + showResult(action.result.msg); + grid.dwrReload(); + window.close(); + }, + failure : function(form, action) { + showResult(action.result.msg); + } + }); + } + } + }, + { + text:'取消', + handler:function(){ + window.close(); + } + }] + }); + + window.show(); +} Index: ssts-web/src/main/webapp/disinfectsystem/interfere/interfereGoodsApplicationView.js =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/interfere/interfereGoodsApplicationView.js (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/interfere/interfereGoodsApplicationView.js (revision 13381) @@ -0,0 +1,257 @@ +var entityName = "申请"; +var grid; +Ext.onReady(function() { + + Ext.QuickTips.init(); + Ext.apply(Ext.QuickTips.getQuickTip(), { + showDelay: 0, + trackMouse: false, + hideDelay: true, + closable: false, + autoHide: false, + draggable: true, + dismissDelay: 0 + }); + Ext.BLANK_IMAGE_URL = WWWROOT + '/ext/resources/images/default/s.gif'; + + function renderColor(v, p, record){ + var status = record.data['deliverStatus']; + var color = ""; + /*if(!record.data['committedStatus']){//未提交 + color = "red"; + v = "未提交"; + }else*/ if(statusArr[0] == status){//待发货 黄色 + color = "yellow"; + }else if(statusArr[1] == status){ //部分发货 粉红色 + color = "#F5A7FA"; + }/*else if(statusArr[3] == status){//待回收 + color = "orange"; + }*/ + return "

" + v + "

"; + } + + function renderColor2(v, p, record){ + var status = record.data['recyclingStatus']; + var color = ""; + if(statusArr[3] == status){//待回收 + color = "orange"; + } + return "

" + v + "

"; + } + function renderStatus(v, p, record){ + var committedStatus = record.data['committedStatus']; + var color = ""; + var status = '否'; + //器械包申请单状态 + if(committedStatus == true || committedStatus == 'true'){ + status = "是"; + }else{ + color = "#A5A8AB"; + } + return "

" + status + "

"; + } + + function renderPrintStatu(v, p, record){ + var status = ""; + var color = ""; + switch(v){ + case 0: + status = "部分"; + color = "yellow"; + break; + case 1: + status = "否"; + color = "red"; + break; + case 2: + status = "是"; + color = ""; + break; + } + + return "

" + status + "

"; + } + + function renderReturnStatusColor(v, p, record){ + var color = ""; + if(returnStatusArr[0] == v){//未归还 粉红色 + color = "#F5A7FA"; + }else if(returnStatusArr[1] == v){//部分归还 黄色 + color = "yellow"; + }else if(returnStatusArr[3] == v){//归还确认 + color = "gray"; + } + return "

" + v + "

"; + } + + function renderModifyFun(v, p, record){ + var serialNum = record.data.serialNumber; + var depart = record.data.depart; + var settleAccountsDepart = record.data.settleAccountsDepart; + var handleDepart = record.data.handleDepart; + var id = record.data.id; + return "" + v + ""; + } + + var columns = [ + {header : "流水号",width : 75,dataIndex : 'serialNumber',renderer : renderModifyFun}, + {header : "申请科室",width : 120,dataIndex : 'depart'}, + {header : "结算科室",width : 120,dataIndex : 'settleAccountsDepart'}, + {header : "处理科室",width : 120,dataIndex : 'handleDepart'}, + {header : "申请人",width : 60,dataIndex : 'applicant'}, + {header : "申请时间",width : 120,dataIndex : 'applicationTime', renderer : myDateFormatByMinute}, + {header : "最后修改时间",width : 120,dataIndex : 'submitTime', renderer : myDateFormatByMinute}, + {header : "打印时间",width : 120,dataIndex : 'printTime', renderer : myDateFormatByMinute}, + {header : "类型",width : 105,dataIndex : 'type'}, + {header : "已提交",width : 45,dataIndex : 'committedStatus', renderer : renderStatus}, + {header : "已打印",width : 45,dataIndex : 'printed', renderer : renderPrintStatu}, + {header : "回收状态",width : 65,dataIndex : 'recyclingStatus', renderer : renderColor2}, + {header : "发货状态",width : 65,dataIndex : 'deliverStatus', renderer : renderColor}, + {header : "归还状态",width : 65,dataIndex : 'returnStatus', renderer : renderReturnStatusColor}, + {header : "终止状态",width : 65,dataIndex : 'endStatus'}, + {id:'operationRemark',header: "备注", dataIndex: 'remark'}, + {header : "拼音码",width : 120,dataIndex : 'spelling',hidden:true}, + {header : "五笔码",width : 120,dataIndex : 'wbCode',hidden:true}, + {header: "发货单状态", dataIndex: 'invoiceStatus',hidden:true} + + ]; + + var readerDetail = [ + {name : 'id'}, + {name : 'serialNumber'}, + {name : 'applicant'}, + {name : 'applicationTime'}, + {name : 'submitTime'}, + {name : 'printTime'}, + {name : 'type'}, + {name : 'spelling'}, + {name : 'wbCode'}, + {name : 'recyclingStatus'}, + {name : 'deliverStatus'}, + {name : 'returnStatus'}, + {name : 'endStatus'}, + {name : 'depart'}, + {name : 'departCoding'}, + {name : 'settleAccountsDepart'}, + {name : 'settleAccountsDepartCoding'}, + {name : 'handleDepart'}, + {name : 'remark'}, + {name : 'printed'}, + {name : 'readed'}, + {name : 'committedStatus'}, + {name : 'invoiceStatus'} + ]; + + var filters = new Ext.grid.GridFilters({ + filters:[ + {type: 'string', dataIndex: 'serialNumber'}, + {type: 'string', dataIndex: 'applicant'}, + {type: 'date', dataIndex: 'applicationTime'}, + {type: 'date', dataIndex: 'submitTime'}, + {type: 'date', dataIndex: 'printTime'}, + {type: 'string', dataIndex: 'type'}, + {type: 'string', dataIndex: 'readed'}, + {type: 'string', dataIndex: 'printed'}, + {type: 'list',dataIndex:'recyclingStatus', phpMode:true ,options:recyclingStatusArr}, + {type: 'list', dataIndex: 'deliverStatus', phpMode:true ,options:statusArr}, + {type: 'list', dataIndex: 'returnStatus', phpMode:true ,options:returnStatusArr}, + {type: 'string', dataIndex: 'depart'}, + {type: 'string', dataIndex: 'settleAccountsDepart'}, + {type: 'string', dataIndex: 'handleDepart'}, + {type: 'string', dataIndex: 'receiptor'}, + {type: 'date', dataIndex: 'receiptingTime'}, + {type: 'string', dataIndex: 'remark'} + ] + }); + var tbar = []; + + grid = new Ext.ux.ForgonPageGrid({ + title : entityName + '单列表', + tbar : tbar, + pageSize : 20, + defaultSortField : 'submitTime', + defaultSortDirection : 'DESC', + searchDisableIndexes : ['invoiceStatus'], + isCheckboxSelectionModel : true, + rememberSelected : false, + isShowSearchField : true, + columns : columns, + plugins: filters, + autoExpandColumn : 'operationRemark', + renderTo : 'gridDiv', + frame : false + }, + readerDetail, + RecyclingApplicationTableManager.findRecyclingApplicationTableList, + null + ); + + var tableContent; + grid.on('mouseover', function(e) {// 添加mouseover事件 + var index = grid.getView().findRowIndex(e.getTarget());// 根据mouse所在的target可以取到列的位置 + if (index !== false) {// 当取到了正确的列时,(因为如果传入的target列没有取到的时候会返回false) + var record = this.getStore().getAt(index); + var BorrowName = ''; + var BorrowAmount = ''; + var isDiposableApplicationForm = (record.data['type']==diposableGoodsApplicationForm); + tableContent = record.data['htmlContent'];// + if(!tableContent){ + var content = ""; + DWREngine.setAsync(false); + InvoicePlanTableManager.findApplicationItemVOListByInvoicePlanId(record.data['id'],function(voItems){ + for(var i=0;i"; + } + var recyclingAmount = voItems[i].recyclingAmount; + content +=" " + tousseName +"" + voItems[i].amount+"" + recyclingAmount+"" + voItems[i].invoiceAmount+""+BorrowAmount; + //一次性物品加编号 + if(isDiposableApplicationForm){ + var code = voItems[i].externalCode; + if(code == null || code.length <= 0){ + code = " "; + } + content +=""+ code +""; + } + content +=""; + //消毒物品加材料 + var material = voItems[i].material; + if(material != null && material.length > 0){ + var materialArray = material.split("@&"); + for ( var j = 0; j < materialArray.length; j++) { + var materialItems = materialArray[j].split("#&"); + content +="   " + materialItems[0] +"" + materialItems[1]+""; + content +="" + (materialItems[2] == "null" ? " " : materialItems[2]) + " "; + } + } + } + }); + DWREngine.setAsync(true); + tableContent = (""+BorrowName); + if(isDiposableApplicationForm){ + tableContent += ""; + } + tableContent += "" + content + "

物品名称

申请数量

回收数量

已发货数量

编码


"; + record.set("htmlContent",tableContent); + } + + var rowEl = top.Ext.fly(e.getTarget());// 把target转换成Ext.Element对象 + rowEl.set({ + 'ext:qtip' : tableContent,'ext:qwidth':450,'ext:qtitle':' 申请物品列表:'},false); + }else{ + + } + }); + + var viewport = new Ext.Viewport({ + layout : 'border', + items : [{ + region : 'center', + margins : '0 0 0 0', + layout : 'fit', + items : grid + }] + }); +}); \ No newline at end of file Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java =================================================================== diff -u -r13368 -r13381 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 13368) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 13381) @@ -1,6 +1,7 @@ package com.forgon.disinfectsystem.recyclingapplication.service; import java.io.Serializable; +import java.lang.reflect.InvocationTargetException; import java.sql.ResultSet; import java.sql.SQLException; import java.text.SimpleDateFormat; @@ -20,6 +21,7 @@ import net.sf.json.JSONArray; import net.sf.json.JSONObject; +import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.collections4.Closure; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; @@ -53,7 +55,6 @@ import com.forgon.disinfectsystem.diposablegoods.service.DiposableGoodsManager; import com.forgon.disinfectsystem.entity.assestmanagement.DiposableGoodsInstance; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; -import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsStock; import com.forgon.disinfectsystem.entity.basedatamanager.materialdefinition.MaterialDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; @@ -89,6 +90,7 @@ import com.forgon.tools.SqlBuilder; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.treenode.model.THTreeNode; import com.google.common.collect.Maps; /** @@ -620,7 +622,7 @@ Long appid = application.getId(); // td = tousseDefinitionManager.getTousseDefinitionByNameTypeAndAPPID(tousseName, TousseDefinition.PACKAGE_TYPE_DISINFECTION, appid.toString()); td = tousseDefinitionManager.getTousseDefinitionByTousseItem(tousseItem); - if(tousseItem.isDisinfection() && td!=null && td.getForDisplay()){ + if(tousseItem.isDisinfection() && td != null && td.getForDisplay()){ td = null;// 消毒物品不能直接关联页面上能看到的那个包定义。 } if (td == null) { @@ -4394,4 +4396,152 @@ return result; } + + @Override + public void interfereInvoicePlan(String resultStr) { + if(StringUtils.isNotBlank(resultStr)){ + try { + JSONObject result = JSONObject.fromObject(resultStr); + String soureceId = result.getString("invoicePlanId"); + RecyclingApplication oldPlan = getRecyclingApplicationById(soureceId); + if (oldPlan != null) { + if (!InvoicePlan.RECYCLINGSTATUS_AWAITRECYCLE + .equals(oldPlan.getRecyclingStatus())) { + throw new RuntimeException("该申请单已回收!"); + } + if (!InvoicePlan.DELIVERSTATUS_AWAITDELIVER.equals(oldPlan + .getDeliverStatus())) { + throw new RuntimeException("该申请单已发货!"); + } + if (StringUtils.isNotBlank(oldPlan.getEndStatus())) { + throw new RuntimeException("该申请单已终止"); + } + if (!oldPlan.getCommittedStatus()) { + throw new RuntimeException("该申请单未提交!"); + } + if (InvoicePlan.TYPE_COMBO_FORM.equals(oldPlan.getType())) { + + String handleDepartCode = result.optString("newAppHandleDepartCode"); + + THTreeNode node = orgUnitManager.getOrgUnitByCode(handleDepartCode); + if (node == null) { + throw new RuntimeException("处理科室不存在!"); + } + + Collection oldItemVos = newTousseItemVos(result + .optJSONArray("oldInvoicePlanItems"),false); + Collection newItemVos = newTousseItemVos(result + .optJSONArray("newInvoicePlanItems"),true); + + boolean isOnlyUpdateHandleDepart = false; + if(oldItemVos.size() == 0){ + isOnlyUpdateHandleDepart = true; + + oldPlan.setHandleDepart(node.getName()); + oldPlan.setHandleDepartCoding(handleDepartCode); + oldPlan.setHandleDepartId("" + node.getId()); + saveOrUpdate(oldPlan); + } + + String description = ""; + + if(!isOnlyUpdateHandleDepart){ + + saveApplication(oldPlan, oldItemVos, true); + //新申请单 + RecyclingApplication newApplicaiton = new RecyclingApplication(); + try { + BeanUtils.copyProperties(newApplicaiton, oldPlan); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + + newApplicaiton.setId(null); + newApplicaiton.setSerialNumber(serialNumManager.getSerialNumberStr(SerialNum.TYPE_RECYCLINGAPPLICATION)); + newApplicaiton.setApplicationItems(null); + newApplicaiton.setHandleDepart(node.getName()); + newApplicaiton.setHandleDepartCoding(handleDepartCode); + newApplicaiton.setHandleDepartId("" + node.getId()); + newApplicaiton.setInvoice(null); + newApplicaiton.setRecyclingApplications(null); + + //验证该申请单的处理科室能否服务该单的申请物品 + JSONObject resultObj = tousseDefinitionManager + .validateRecyclingApplicationCssdPrivilege( + newApplicaiton, newItemVos); + if (!resultObj.optBoolean("success")) { + throw new RuntimeException( + resultObj.optString("message")); + } + + saveApplication(newApplicaiton, newItemVos, true); + + description = "申请单干预,流水号为" + oldPlan.getSerialNumber() + + "的申请被拆分,拆分的子单号为:" + newApplicaiton.getSerialNumber(); + }else{ + description = "申请单干预,流水号为" + oldPlan.getSerialNumber() + + "的申请修改了处理科室"; + } + + LoginUserData loginUser = AcegiHelper.getLoginUser(); + appLogManager.saveLog(loginUser,Log.MODEL_APPLICATION,"U",description); + } else { + throw new RuntimeException("保存失败,该类申请单不允许拆单!"); + } + } + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException(e.getMessage()); + } + }else{ + throw new RuntimeException("缺少参数"); + } + } + + private Collection newTousseItemVos(JSONArray itemJsonArray,boolean setIdNull) { + Collection vos = new ArrayList(); + if(itemJsonArray.size() > 0){ + for (int i = 0; i < itemJsonArray.size(); i++) { + JSONObject oldItem = itemJsonArray.optJSONObject(i); + TousseItemVo vo = new TousseItemVo(); + Long tousseItemId = oldItem.optLong("tousseItemId"); + TousseItem item = tousseItemManager.getTousseItemById("" + tousseItemId); + if(item == null){ + throw new RuntimeException("申请物品ID="+tousseItemId+",已不存在!"); + } + if(setIdNull){ + vo.setId(null); + }else{ + vo.setId(tousseItemId); + } + vo.setTousseName(item.getTousseName()); + vo.setAmount(oldItem.optInt("amount")); + vo.setPrice(item.getPrice()); + vo.setRowPrice(MathTools.mul(vo.getAmount(), vo.getPrice(), 2)); + vo.setDiposable(item.getDiposable()); + vo.setTousseDefinitionId(item.getTousseDefinitionId()); + vo.setTousseDefinitionID(item.getTousseDefinitionId()); + vo.setDisposableGoodsId(item.getDisposableGoodsId()); + vo.setTousseType(item.getTousseType()); + vo.setUnit(item.getUnit()); + if (TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(item + .getTousseType())) { + TousseDefinition td = tousseDefinitionManager + .getTousseDefinitionById("" + item.getTousseDefinitionId()); + if (td != null) { + JSONArray materials = tousseDefinitionManager + .getMaterialsOfDisinfectionGoods(td, true); + vo.setDisinfectMaterilas(materials.toString()); + } else { + throw new RuntimeException(item.getTousseName() + + ",器械包定义已不存在!"); + } + } + vos.add(vo); + } + } + return vos; + } } Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManager.java =================================================================== diff -u -r12596 -r13381 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManager.java (.../RecyclingApplicationManager.java) (revision 12596) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManager.java (.../RecyclingApplicationManager.java) (revision 13381) @@ -160,4 +160,6 @@ boolean printApplyInfo, boolean isMergePrintMultiApplicationsOfSameDepart, String shiftName, String sheetName); public void setPrintInfo(String printUser, List summaryList); + + public void interfereInvoicePlan(String result); } Index: ssts-web/src/main/webapp/disinfectsystem/recyclingApplication/goodsTemplateApplicationView.js =================================================================== diff -u -r13367 -r13381 --- ssts-web/src/main/webapp/disinfectsystem/recyclingApplication/goodsTemplateApplicationView.js (.../goodsTemplateApplicationView.js) (revision 13367) +++ ssts-web/src/main/webapp/disinfectsystem/recyclingApplication/goodsTemplateApplicationView.js (.../goodsTemplateApplicationView.js) (revision 13381) @@ -355,7 +355,7 @@ {name : 'externalCode'}, {name : 'storage'}, {name : 'unit'}, - {name : 'packageSpec'}, + {name : 'packageSpec'}, {name : 'tousseType'}, {name : 'minAppAmount'}, {name : 'sequence'},