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'},