Index: ssts-web/src/main/webapp/homepage/menuconfigure.js
===================================================================
diff -u -r21930 -r21932
--- ssts-web/src/main/webapp/homepage/menuconfigure.js (.../menuconfigure.js) (revision 21930)
+++ ssts-web/src/main/webapp/homepage/menuconfigure.js (.../menuconfigure.js) (revision 21932)
@@ -333,7 +333,7 @@
{hidden :SSTS_ExpensiveGoods_Menu,text:"高值耗材盘盈盘亏管理",href:WWWROOT+'/disinfectsystem/assestManagement/expensiveGoods/expensiveGoodsGodownStockTakeView.jsp',hrefTarget:linkTarget,leaf:true},
{hidden :SSTS_ExpensiveGoods_Menu,text:"高值耗材盘点管理",href:WWWROOT+'/disinfectsystem/stocktakerecordmanager/inventoryrecordView.jsp'+'?type=' + inventoryTypeCodeExpensiveGoods,hrefTarget:linkTarget,leaf:true},
{hidden :SSTS_ExpensiveGoods_Menu,text:"高值耗材结算管理",href:WWWROOT+'/disinfectsystem/reportforms/stocktakeView.jsp',hrefTarget:linkTarget,leaf:true},
- {hidden :SSTS_ExpensiveGoods_Menu,text:"高值耗材发票管理",href:WWWROOT+'/disinfectsystem/assestManagement/expensiveGoods/expensiveGoodsBillView.jsp',hrefTarget:linkTarget,leaf:true},
+ {hidden :SSTS_ExpensiveGoods_Menu,text:"高值耗材发票管理",href:WWWROOT+'/disinfectsystem/assestManagement/expensiveGoods/expensiveGoodsBill/expensiveGoodsBillView.jsp',hrefTarget:linkTarget,leaf:true},
{hidden :SSTS_ExpensiveGoods_Menu,text:"高值耗材授权管理",href:WWWROOT+'/disinfectsystem/assestManagement/expensiveGoods/expensiveGoodsAuthorizationView.jsp',hrefTarget:linkTarget,leaf:true}
]
},{
Fisheye: Tag 21932 refers to a dead (removed) revision in file `ssts-web/src/main/webapp/disinfectsystem/assestManagement/expensiveGoods/expensiveGoodsBillView.js'.
Fisheye: No comparison available. Pass `N' to diff?
Index: ssts-web/src/main/webapp/disinfectsystem/assestManagement/expensiveGoods/expensiveGoodsBill/expensiveGoodsBillForm.js
===================================================================
diff -u
--- ssts-web/src/main/webapp/disinfectsystem/assestManagement/expensiveGoods/expensiveGoodsBill/expensiveGoodsBillForm.js (revision 0)
+++ ssts-web/src/main/webapp/disinfectsystem/assestManagement/expensiveGoods/expensiveGoodsBill/expensiveGoodsBillForm.js (revision 21932)
@@ -0,0 +1,627 @@
+
+/**
+ * 打开已保存并结算的发票单(显示结算的实例明细)
+ */
+function openBillRecord(id,committedStatus){
+ var rd = new top.Ext.data.JsonReader({
+ fields : [
+ {name : 'id'},
+ {name : 'expensiveGoodsId'},
+ {name : 'showName'},
+ {name : 'entryType'},
+ {name : 'price'},
+ {name : 'entryDate'},
+ {name : 'expDate'},
+ {name : 'model'},
+ {name : 'patientName'}
+ ]
+ });
+
+ //发票高值耗材实例明细
+ var expensiveGoodsInstanceStore = new Ext.data.Store({
+ proxy : new Ext.data.HttpProxy({
+ url : WWWROOT + '/disinfectSystem/expensiveGoodsBillAction!loadBillExpensiveGoodsInstanceById.do',
+ method : 'POST'
+ }),
+ reader : rd,
+ listeners : {
+ beforeload:function(thiz){
+// console.log("id");
+ thiz.baseParams["id"] = id;
+ }
+ }
+ });
+
+ if(id==undefined || id == "" || id < 0){
+ disableShowImageButton = true;
+ }else{
+ disableShowImageButton = false;
+ expensiveGoodsInstanceStore.load();
+ }
+ var form = new top.Ext.FormPanel({
+ id : 'expensiveGoodBillForm',
+ frame : true,
+ labelSeparator : ':',
+ bodyStyle : 'padding:5px 5px 0px 5px',
+ width : 1100,
+ height : 650,
+ autoScroll : true,
+ labelAlign : 'left',
+ items:[{
+ layout : 'column',
+ items : [{
+ xtype : 'hidden',
+ name : 'id',
+ id : 'id'
+ },{
+ xtype : 'hidden',
+ name : 'items',
+ id : 'items'
+ },{
+ xtype : 'hidden',
+ name : 'instanceItems',
+ id : 'instanceItems'
+ },{
+ xtype : 'hidden',
+ name : 'originalItems',
+ id : 'originalItems'
+ },{
+ xtype : 'hidden',
+ name : 'formParams',
+ id : 'formParams'
+ },{
+ xtype : 'hidden',
+ name : 'originalFormParams',
+ id : 'originalFormParams'
+ },{
+ xtype : 'hidden',
+ name : 'supplierId',
+ id : 'supplierId'
+ },{
+ //id : 'serialNum',
+ columnWidth : .5,
+ layout : 'form',
+ labelWidth : 60,
+ //hidden:true,
+ items : [{
+ xtype : 'textfield',
+ fieldLabel : '发票号',
+ maxLength : '60',
+ id : 'serialNumber',
+ name : 'serialNumber',
+ allowBlank : false,
+ readOnly : false,
+ anchor : '95%'
+ }]
+ }, {
+ columnWidth : .5,
+ layout : 'form',
+ labelWidth : 60,
+ items : [{
+ xtype : 'textfield',
+ fieldLabel : '录入人',
+ maxLength : '60',
+ id : 'operator',
+ name : 'operator',
+ allowBlank : false,
+ readOnly : true,
+ //cls : 'fieldReadOnlyNoRemove',
+ value : $Id('userName').value,
+ anchor : '95%'
+ }]
+ }, {
+ columnWidth : .5,
+ layout : 'form',
+ labelWidth : 60,
+ items : [{
+ xtype : 'datefieldWithMin',
+ fieldLabel : '录入时间',
+ id : 'time',
+ name : 'time',
+ format : 'Y-m-d H:i',
+// value : new Date(),
+ allowBlank : false,
+ anchor : '95%',
+ listeners : {
+ render : function() {
+ setStartDate(top.Ext, 'yyyy/MM/dd HH:mm', 'time'); //(操作时间,取服务器时间 cjr)
+ }
+ }
+ }]
+ },{
+ columnWidth : .5,
+ layout : 'form',
+ labelWidth : 60,
+ items : [{
+ xtype : 'datefieldWithMin',
+ fieldLabel : '开票时间',
+ id : 'settledTime',
+ name : 'settledTime',
+ format : 'Y-m-d H:i',
+ allowBlank : false,
+ anchor : '95%'
+ }]
+ },{
+ columnWidth : .5,
+ layout : 'form',
+ labelWidth : 60,
+ items : [{
+ xtype : 'combo',
+ fieldLabel : '供应商',
+ id : 'supplier1',
+ name : 'supplier1',
+ maxLength : '100',
+ queryParam : 'supplierName',
+ minChars : 0,
+ valueField : 'id',
+ displayField : 'name',
+ store : authorizedExpensiveGoodsSupplierStore,
+ forceSelection : false,
+ lazyInit : false,
+ triggerAction : 'all',
+ hideTrigger : false,
+ typeAhead : false,
+ allowBlank : true,
+ selectOnFocus :true,
+ editable:true,
+ width : 400,
+ tabIndex : 10,
+ anchor : '95%',
+ listeners : {
+ select : function(field, r) {
+ top.Ext.getCmp('name1').setValue('');
+ top.Ext.getCmp('price').setValue('');
+ top.Ext.getCmp('amount1').setValue('');
+ top.Ext.getCmp('name1').enable();
+ top.Ext.getCmp('supplier1').setValue(r.data.name);
+ top.Ext.getCmp('supplierId').setValue(r.data.id);
+ authorizedExpensiveGoodsStore.baseParams.supplierId = r.data.id;
+ authorizedExpensiveGoodsStore.load();
+ //console.log(r.data.id)
+ }
+ }
+ }]
+
+ },{
+ columnWidth : .5,
+ layout : 'form',
+ labelWidth : 60,
+ items : [{
+ xtype : 'textfield',
+ fieldLabel : '总金额',
+ id : 'totalPrice',
+ name : 'totalPrice',
+ readOnly:true,
+ cls : 'fieldReadOnlyNoRemove',
+ anchor : '95%'
+ }]
+ },{
+ columnWidth : 1,
+ layout : 'form',
+ labelWidth : 60,
+ items : [{
+ xtype : 'textarea',
+ fieldLabel : '备注',
+ height : 40,
+ id : 'remark',
+ name : 'remark',
+ maxLength : 665,
+ allowBlank : true,
+ anchor : '100%'
+ }]
+ },{
+ layout : 'column',
+ columnWidth : 1,
+ labelWidth : 90,
+ items : [{
+ layout : 'form',
+ columnWidth : 0.8,
+ labelWidth : 60,
+ items : [{
+ xtype : 'textfield',
+ name : 'uploadImage',
+ id : 'uploadImage',
+ fieldLabel : "上传图片",
+ anchor : '100%'
+ }]
+ },{
+ layout : 'form',
+ columnWidth : 0.08,
+ labelWidth : 60,
+ items : [{
+ xtype:'button',
+ text : '上传',
+ handler : function(){
+ if(id == null || id == ''){
+ showResultQM("请先保存后再上传图片!");
+ }else{
+ uploadWindowA(imageType_expensiveGoodsBill,id);
+ }
+ }
+ }]
+ },{
+ layout : 'form',
+ columnWidth : 0.12,
+ labelWidth : 60,
+ items : [{
+ xtype:'button',
+ text : '预览',
+ disabled:disableShowImageButton,
+ iconCls : 'btn_ext_application_search',
+ handler : function(){
+ showUploadImageWin(id);
+ }
+ }]
+ }]
+ }
+ ]},{
+ layout:'column',
+ items:[{
+ layout : 'form',
+ columnWidth : 0.45,
+ items : [
+ new top.Ext.grid.EditorGridPanel({
+ id : 'goodBillItemGrid',
+ bodyStyle : 'border:1px solid #afd7af',
+ frame :false,
+ title : '发票单明细',
+ width :500,
+ height : 390,
+ store : new top.Ext.data.Store({
+ reader : new top.Ext.data.JsonReader({
+ fields : [
+ {name : 'id'},
+ {name : 'name'},
+ {name : 'amount'},
+ {name : 'price'},
+ {name : 'totalPrice'},
+ {name : 'supplierName'},
+ {name : 'deleteButton'},
+ {name : 'expensiveGoodsId'}
+ ]
+ })
+ }),
+ cm : new top.Ext.grid.ColumnModel([new Ext.grid.RowNumberer(),
+ {header : "id",dataIndex : 'id',hidden : true},
+ {header : "名称",dataIndex : 'name',width : 130,menuDisabled : true},
+ {header : "供应商",dataIndex : 'supplierName',width : 125,menuDisabled : true},
+ {header : "单价",dataIndex : 'price',width : 60,menuDisabled : true},
+ {header : "数量",dataIndex : 'amount',width : 50,menuDisabled : true
+// ,editor : new top.Ext.form.TextField({
+// regex: /^\d+$/,
+// regexText:'只能输入数字',
+// allowBlank : false,
+// listeners:{
+// change :function(field,newVal,oldVal){
+//// var grid = top.Ext.getCmp('goodBillItemGrid');
+//// setTotalMoney(grid);
+// }
+// }
+// })
+ },
+ {header : "金额",width : 50,menuDisabled : true,dataIndex : 'totalPrice', renderer:renderTotalPrice},
+ {header : "删除",width : 50,menuDisabled : true,dataIndex : 'deleteButton', renderer:renderDeleteButton , hidden: (committedStatus == ""?false:true)}
+ ]),
+ selModel : new top.Ext.grid.RowSelectionModel({
+ singleSelect : false
+ }),
+ listeners :{
+ afteredit :function(){
+ var grid = top.Ext.getCmp('goodBillItemGrid');
+ setTotalMoney(grid);
+ }
+ },
+ //工具栏
+ tbar : [{
+ xtype : 'hidden',
+ name : 'expensiveGoodsId',
+ id : 'expensiveGoodsId'
+ },{
+ text : '物品名称:'
+ },{
+ xtype : 'combo',
+ id : 'name1',
+ name : 'name1',
+ queryParam : 'spell',
+ minChars : 0,
+ valueField : 'id',
+ displayField : 'displayName',
+ pageSize : 100,
+// listConfig: {width: 300},
+ listWidth : 250,
+ store : authorizedExpensiveGoodsStore,
+ forceSelection : true,
+ lazyInit : false,
+ triggerAction : 'all',
+ hideTrigger : true,
+ typeAhead : false,
+ allowBlank : true,
+ width : 150,
+ tabIndex : 1,
+ selectOnFocus : true,
+ disabled:true,
+ listeners : {
+ select : function(combo, record, index) {
+ top.Ext.getCmp('name1').setValue(record.data.displayName);
+ top.Ext.getCmp('name1').selectText();
+ top.Ext.getCmp('expensiveGoodsId').setValue(record.data.id);
+ top.Ext.getCmp('price').setValue(record.data.referencePrice);
+ //console.log(record.data);
+ }
+ }
+ },{
+ text : '数量:'
+ },{
+ xtype : 'textfield',
+ maxLength : '16',
+ id : 'amount1',
+ name : 'amount1',
+ allowBlank:true,
+ width : 50,
+ regex: /^\d+$/,
+ regexText:'只能输入整数',
+ anchor : '95%',
+ tabIndex : 2,
+ listeners : {
+ specialkey : function(field, e) {
+ if (e.getKey() == Ext.EventObject.ENTER) {
+ focusTo('price');
+ }
+ }
+ }
+ },{
+ text:'单价:'
+ },{
+ xtype : 'textfield',
+ maxLength : '16',
+ id : 'price',
+ name : 'price',
+ width : 50,
+ tabIndex : 7,
+ regex: /^(([1-9]+[0-9]*.{1}[0-9]+)|([0].{1}[1-9]+[0-9]*)|([1-9][0-9]*)|([0][.][0-9]+[1-9]*))$/,
+ regexText:'只能输入正数',
+ anchor : '95%',
+ allowBlank:true
+ },{
+ text : '添加',
+ hidden : committedStatus,
+ //hidden: (id == ""?false:true),
+ iconCls : 'btn_ext_add',
+ id:'addBtn',
+ handler : function() {
+ if(addExpensiveGoodsBill() == true){
+ focusTo('name1');
+ }
+ }
+ }]
+ })]
+ }
+ ,{
+ layout : 'form',
+ columnWidth : 0.55,
+ items:[new top.Ext.grid.EditorGridPanel({
+ id : 'expensiveGoodsInstanceGrid',
+ title : '高值耗材实例明细',
+ store : expensiveGoodsInstanceStore,
+ cm : new top.Ext.grid.ColumnModel([
+ {header : "id",dataIndex : 'id',hidden : true},
+ {header : "高值耗材定义id",dataIndex : 'expensiveGoodsId',hidden : true},
+ {header : "物品",dataIndex : 'showName',width : 100,menuDisabled : true},
+ {header : "型号",dataIndex : 'model',width : 50,menuDisabled : true},
+ {header : "入库类型",dataIndex : 'entryType',width : 50,menuDisabled : true},
+ {header : "单价",dataIndex : 'price',width : 50,menuDisabled : true},
+ {header : "入库日期",dataIndex : 'entryDate',width : 80,menuDisabled : true},
+ {header : "病人姓名",dataIndex : 'patientName',width : 50,menuDisabled : true}
+
+ ]),
+ enableHdMenu : false,
+ width : 570,
+ height : 385,
+ autoExpandColumn : 'deleteItem',
+ frame : false,
+ bodyStyle : 'border:1px solid #afd7af',
+ viewConfig : {forceFit : true},
+ clicksToEdit : 1,
+ selModel : new top.Ext.grid.RowSelectionModel({
+ singleSelect : false
+ }),
+ listeners : {
+ validateedit : function(o) {
+ if (!isPositiveInteger(o.value)){
+ return false;
+ }
+ }
+ }
+ })]
+ }
+ ]
+ }],
+ buttons : [{
+ text : '打印预览',
+ //hidden: (id == ""?true:false),
+ hidden:true,
+ handler : function() {
+ printGoodPurchasePlan(id, 1);
+ }
+ },{
+ text : '打印',
+ hidden:true,
+ // hidden: (id == ""?true:false),
+ handler : function() {
+ printGoodPurchasePlan(id, 0)
+ }
+ },{
+ text : '暂存',
+ hidden : committedStatus,
+ //hidden: (id == ""?false:true),
+ handler : function() {
+ if(!form.getForm().isValid()){
+ showResult('请正确填写表单各值');
+ return false;
+ }
+ var time = top.Ext.getCmp('time').getValue().format('Y-m-d H:i:s');
+ var settledTime = top.Ext.getCmp('settledTime').getValue().format('Y-m-d H:i:s');
+ var items = buildJSONStringFromStore(top.Ext.getCmp('goodBillItemGrid').getStore());
+ var instanceItems = buildJSONStringFromStore(top.Ext.getCmp('expensiveGoodsInstanceGrid').getStore());
+ // 设置formParams表单参数json
+ setFormParams(form,['id','serialNumber','supplierId','supplier1','remark','operator']);
+ var FormParams = top.Ext.getCmp("formParams").getValue();
+ //String转为json对象
+ var json = JSON.parse(FormParams);
+ //添加录入时间,开票时间的string类型(防止JSON.encode转换date对象格式不对)
+ json.time = time;
+ json.settledTime = settledTime;
+ //json对象转为String
+ var jsonstr = JSON.stringify(json);
+ //console.log(jsonstr);
+ //console.log(items);
+ top.Ext.getCmp("formParams").setValue(jsonstr);
+ top.Ext.getCmp("items").setValue(items);
+ top.Ext.getCmp("instanceItems").setValue(instanceItems);
+
+ // items为json数组字符串,不能为null
+ if(items == '[]'||items.length==0){
+ showResult('发票列表不能为空');
+ return false;
+ }
+ form.form.submit({
+ url : WWWROOT + '/disinfectSystem/expensiveGoodsBillAction!saveExpensiveGoodsBill.do',
+ method : 'POST',
+ params:{committedStatus:false},//给定一个参数,指定其状态是未提交
+ waitMsg : '正在保存数据,请稍候',
+ waitTitle : '提交表单',
+ success : function(form, action) {
+ showResult(action.result.message);
+ grid.dwrReload();
+ window.close();
+ },
+ failure : function(form, action) {
+ showResult(action.result.message);
+ }
+ });
+ }
+ },{
+ text : '保存并结算',
+ hidden: committedStatus,
+ // hidden:saveButton,
+ handler : function() {
+ if(!form.getForm().isValid()){
+ showResult('请正确填写表单各值');
+ return false;
+ }
+ var time = top.Ext.getCmp('time').getValue().format('Y-m-d H:i:s');
+ var settledTime = top.Ext.getCmp('settledTime').getValue().format('Y-m-d H:i:s');
+ var items = buildJSONStringFromStore(top.Ext.getCmp('goodBillItemGrid').getStore());
+ var instanceItems = buildJSONStringFromStore(top.Ext.getCmp('expensiveGoodsInstanceGrid').getStore());
+// console.log(instanceItems);
+ // 设置表单参数json
+ setFormParams(form,['id','serialNumber','supplierId','supplier1','remark','operator']);
+ var FormParams = top.Ext.getCmp("formParams").getValue();
+ //String转为json对象
+ var json = JSON.parse(FormParams);
+ //添加录入时间,开票时间的string类型(防止JSON.encode转换date对象格式不对)
+ json.time = time;
+ json.settledTime = settledTime;
+ //json对象转为String
+ var jsonstr = JSON.stringify(json);
+ //console.log(items);
+ top.Ext.getCmp("formParams").setValue(jsonstr);
+ top.Ext.getCmp("items").setValue(items);
+ top.Ext.getCmp("instanceItems").setValue(instanceItems);
+// console.log(items);
+ // items为json数组字符串,不会为null
+ if(items == '[]'||items.length==0){
+ showResult('发票列表不能为空');
+ return false;
+ }
+ form.form.submit({
+ url : WWWROOT + '/disinfectSystem/expensiveGoodsBillAction!saveExpensiveGoodsBill.do',
+ method : 'POST',
+ waitMsg : '正在保存数据,请稍候',
+ waitTitle : '提交表单',
+ success : function(form, action) {
+ showResult(action.result.message);
+ grid.dwrReload();
+ window.close();
+ },
+ failure : function(form, action) {
+ showResult(action.result.message);
+ }
+ });
+ }
+ },{
+ text : '取消',
+ handler : function() {
+ window.close();
+ }
+ }]
+ });
+
+ var window = new top.Ext.Window( {
+ id : 'expensiveGoodsBill',
+ layout : 'fit',
+ title : '高值耗材发票单',
+ width : 1100,
+ height :610,
+ modal : true,
+ border :false,
+ plain : true,
+ items : [ form ],
+ listeners : {
+ close : function (){
+ expensiveGoodsStore.baseParams.supplierId = null;
+ expensiveGoodsStore.load();
+ authorizedExpensiveGoodsStore.baseParams.supplierId = null;
+ authorizedExpensiveGoodsStore.load();
+ }
+ }
+ });
+ window.show();
+// top.Ext.getCmp('name1').focus(false, 100);
+
+}
+function addExpensiveGoodsInstanceItem(expensiveGoodsBillItem){
+ var expensiveGoodsId = expensiveGoodsBillItem.data.expensiveGoodsId;
+ var amount = expensiveGoodsBillItem.data.amount;
+ var settledTime = top.Ext.getCmp('settledTime').getValue().format('Y-m-d H:i:s');
+// console.log(expensiveGoodsBillItem);
+// console.log(expensiveGoodsId);
+// console.log(amount);
+ Ext.Ajax.request({
+ url : WWWROOT + '/disinfectSystem/expensiveGoodsBillAction!loadExpensiveGoodsInstanceByExpensiveGoodsId.do',
+ params : {
+ expensiveGoodsId : expensiveGoodsId,
+ amount : amount,
+ settledTime : settledTime
+ },
+ success : function(response) {
+ var result = Ext.decode(response.responseText).data;
+ var message = Ext.decode(response.responseText).message;
+// console.log(result);
+// console.log(message);
+ if(message.warning!=null){
+ showResult(message.warning);
+ }
+ if(result){
+ for (var i = 0; i < result.length; i++) {
+ var expensiveGoodsInstanceItem = new expensiveGoodsInstanceItemRecord({
+ id : result[i].id,
+ expensiveGoodsId : result[i].expensiveGoodsId,
+ showName : result[i].showName,
+ entryType : result[i].entryType,
+ price : result[i].price,
+ entryDate : result[i].entryDate,
+ expDate:result[i].expDate,
+ model: result[i].model,
+ patientName: result[i].patientName
+ });
+ top.Ext.getCmp('expensiveGoodsInstanceGrid').getStore().insert(0 , expensiveGoodsInstanceItem);
+ }
+ }
+
+ },
+ failure : function(response, options) {
+ showResult(response.responseText);
+ }
+ });
+}
Index: ssts-web/src/main/webapp/disinfectsystem/assestManagement/expensiveGoods/expensiveGoodsBill/expensiveGoodsBillView.js
===================================================================
diff -u -r21090 -r21932
--- ssts-web/src/main/webapp/disinfectsystem/assestManagement/expensiveGoods/expensiveGoodsBill/expensiveGoodsBillView.js (.../expensiveGoodsBillView.js) (revision 21090)
+++ ssts-web/src/main/webapp/disinfectsystem/assestManagement/expensiveGoods/expensiveGoodsBill/expensiveGoodsBillView.js (.../expensiveGoodsBill/expensiveGoodsBillView.js) (revision 21932)
@@ -23,6 +23,30 @@
])
});
+//高值耗材物品定义数据源(根据被受权的供应商获得)
+var authorizedExpensiveGoodsStore = new Ext.data.Store({
+ pageSize: 100,
+ proxy : new Ext.data.HttpProxy({
+ url : WWWROOT + '/disinfectSystem/expensiveGoodsAction!searchAuthorizedExpensiveGoods.do',
+ method : 'POST'
+ }),
+ reader : new Ext.data.JsonReader({
+ totalProperty : 'totalCount',
+ root : 'data'
+ }, [
+ {name : 'id',mapping : 'id'},
+ {name : 'spelling',mapping : 'spelling'},
+ {name : 'name',mapping : 'name'},
+ {name : 'displayName',mapping : 'displayName'},
+ {name : 'showName',mapping : 'showName'},
+ {name : 'referencePrice',mapping : 'referencePrice'},
+ {name : 'validityTime',mapping : 'validityTime'},
+ {name : 'certification',mapping : 'certification'},
+ {name : 'madeCompanyName',mapping : 'madeCompanyName'},
+ {name : 'madeCompanyId',mapping : 'madeCompanyId'}
+ ])
+});
+
function dateCompare(date1,date2){
date1 = date1.replace(/\-/gi,"/");
date2 = date2.replace(/\-/gi,"/");
@@ -36,10 +60,25 @@
return 3;
}}
-//供应商
-var expensiveGoodsSupplierStore = new Ext.data.Store({
+////供应商
+//var expensiveGoodsSupplierStore = new Ext.data.Store({
+// proxy : new Ext.data.HttpProxy({
+// url : WWWROOT + '/disinfectSystem/baseData/expensiveGoodsSupplierAction!getSupplierData.do?supplierType='+encodeURI(expensiveGoodsSupplier),
+// method : 'POST'
+// }),
+// reader : new Ext.data.JsonReader({
+// totalProperty : 'totalCount',
+// root : 'data'
+// }, [
+// {name : 'id',mapping : 'id'},
+// {name : 'name',mapping : 'name'}
+// ])
+//});
+
+//(被授权的)高值耗材供应商数据源
+var authorizedExpensiveGoodsSupplierStore = new Ext.data.Store({
proxy : new Ext.data.HttpProxy({
- url : WWWROOT + '/disinfectSystem/baseData/supplierAction!getSupplierData.do?supplierType='+encodeURI(expensiveGoodsSupplier),
+ url : WWWROOT + '/disinfectSystem/baseData/expensiveGoodsSupplierAction!getAuthorizedSupplierData.do?supplierType='+encodeURI(expensiveGoodsSupplier),
method : 'POST'
}),
reader : new Ext.data.JsonReader({
@@ -50,8 +89,7 @@
{name : 'name',mapping : 'name'}
])
});
-
-//高值耗材采购单对象
+//高值耗材发票明细对象
var expensiveGoodBillItemRecord = Ext.data.Record.create([
{name : 'localID'},
{name : 'id'},
@@ -63,6 +101,18 @@
{name : 'expensiveGoodsId'}
]);
+//高值耗材实例明细对象
+var expensiveGoodsInstanceItemRecord = Ext.data.Record.create([
+ {name : 'id'},
+ {name : 'showName'},
+ {name : 'entryType'},
+ {name : 'price'},
+ {name : 'entryDate'},
+ {name : 'expDate'},
+ {name : 'batchNumber'},
+ {name : 'patientName'}
+ ]);
+
//打印,目前只支持单个打印
function printGoodPurchasePlan(id, printType){
if(id == null)
@@ -159,7 +209,6 @@
function addItems(name,amount,price,supplierName,expensiveGoodsId){
for(var i = 0;i < top.Ext.getCmp('goodBillItemGrid').getStore().getCount();i++){
//console.log(top.Ext.getCmp('goodBillItemGrid').getStore().getAt(i).data);
- //console.log(name);
if(top.Ext.getCmp('goodBillItemGrid').getStore().getAt(i).data.name == name){
showResult("该物品已经存在,不能重复添加!");
return false;
@@ -196,14 +245,18 @@
supplierName : supplierName,
expensiveGoodsId : expensiveGoodsId
});
+ //显示高值耗材实例
+ addExpensiveGoodsInstanceItem(expensiveGoodsBillItem);
top.Ext.getCmp('goodBillItemGrid').getStore().insert(0 , expensiveGoodsBillItem);
setTotalMoney(top.Ext.getCmp('goodBillItemGrid'));
clearForm();
return true;
}
function renderDeleteButton(v,p,record){
- return "
";
+ var localID = record.data.localID;
+ var expensiveGoodsId = record.data.expensiveGoodsId;
+ return "
";
}
/**
* 精确计算arg1和arg2的乘积
@@ -273,7 +326,19 @@
return total;
}
-function deleteItem(localID){
+function deleteItem(localID,expensiveGoodsId){
+ var expensiveGoodsInstanceGrid = top.Ext.getCmp('expensiveGoodsInstanceGrid').getStore();
+ var count = expensiveGoodsInstanceGrid.getCount();
+ var removeList = new Array();
+ for(var i = 0;i 0) {
- String str = printResult.toString();
- printValue = str.substring(0, str.length() - 1);
+ private void printMsgToClient(boolean success, String message, JSONArray jsonArray) {
+ JSONObject jsonObj = new JSONObject();
+ jsonObj.put(JSONUtil.JSON_KEY_SUCCESS, success);
+ jsonObj.put(JSONUtil.JSON_KEY_MESSAGE, message);
+ if(jsonArray != null){
+ jsonObj.put("items", jsonArray);
}
- out.print("{success:" + success + ",message:'" + result + "',barcode:'"
- + printValue + "'}");
- out.close();
+ StrutsResponseUtils.output(jsonObj);
}
/**
@@ -125,49 +130,47 @@
* 保存高值耗材发票
*/
public String saveExpensiveGoodsBill() {
- HttpServletResponse response = StrutsParamUtils.getResponse();
- PrintWriter out = null;
- String result = "保存成功";
- response.setCharacterEncoding("UTF-8");
Map returnMsg = new HashMap();
- returnMsg.put("success", false);
- returnMsg.put("errMsg", "保存失败");
+ boolean success = false;
+ String message = "保存失败";
try {
- out = response.getWriter();
- } catch (IOException e) {
- e.printStackTrace();
- }
- boolean saveResult = false;
- try {
String id = StrutsParamUtils.getPraramValue("id", "");
+ // true :保存并结算发票(默认值),false:暂存发票
+ boolean committedStatus = "true".equals(StrutsParamUtils.getPraramValue("committedStatus", "true").trim());
ExpensiveGoodsBill NewBill = expensiveGoodsBill;
- if (StringUtils.isNotBlank(id)) {
+
+ if(StringUtils.isBlank(id)&&committedStatus){//保存并结算
+ NewBill = expensiveGoodsBill;
+ buildExpensiveGoodsBillParamsForSave(NewBill);
+ expensiveGoodsBillManager.saveExpensiveGoodsBill(NewBill, returnMsg);
+ }else if(StringUtils.isNotBlank(id)&&committedStatus){//暂存后再保存并结算
ExpensiveGoodsBill original = new ExpensiveGoodsBill();
buildExpensiveGoodsBillParamsForUpdate(original, NewBill);
expensiveGoodsBillManager.updateExpensiveGoodsBill(original, NewBill, returnMsg);
- } else {
+ }else if(!committedStatus){//暂存
NewBill = expensiveGoodsBill;
- buildExpensiveGoodsBillParamsForSave(NewBill);
+ buildExpensiveGoodsBillParamsForJustSave(NewBill);
expensiveGoodsBillManager.saveExpensiveGoodsBill(NewBill, returnMsg);
}
- saveResult = true;
+ success = true;
+ message = "保存成功";
} catch (Exception e) {
e.printStackTrace();
- saveResult = false;
- result = e.getMessage();
+ success = false;
+ message = e.getMessage();
}
- String itemsDetails = (String)returnMsg.get("itemsDetails");
-
- printMsgToClient(saveResult, out, result.toString(), itemsDetails);
+ JSONArray itemsDetails = (JSONArray)returnMsg.get("itemsDetails");
+ printMsgToClient(success, message, itemsDetails);
return null;
}
//新建发票对象
private void buildExpensiveGoodsBillParamsForSave(ExpensiveGoodsBill bill) {
String items = StrutsParamUtils.getPraramValue("items", "");
String formParams = StrutsParamUtils.getPraramValue("formParams", "");
+ String instanceItems = StrutsParamUtils.getPraramValue("instanceItems", "");
- setBillPropertiesFromParams(bill,formParams,items);
+ setBillPropertiesFromParams(bill,formParams,items,instanceItems);
}
//更新发票对象
@@ -176,28 +179,60 @@
String originalFormParams = StrutsParamUtils.getPraramValue("originalFormParams", "");
String originalItems = StrutsParamUtils.getPraramValue("originalItems", "");
String items = StrutsParamUtils.getPraramValue("items", "");
+ String instanceItems = StrutsParamUtils.getPraramValue("instanceItems", "");
- setBillPropertiesFromParams(original,originalFormParams,originalItems);
- setBillPropertiesFromParams(bill,null,items);
+ setBillPropertiesFromParamsNoInstanceItems(original,originalFormParams,originalItems);
+ setBillPropertiesFromParams(bill,null,items,instanceItems);
}
+ //暂存发票对象
+ private void buildExpensiveGoodsBillParamsForJustSave(ExpensiveGoodsBill bill) {
+ String items = StrutsParamUtils.getPraramValue("items", "");
+ String formParams = StrutsParamUtils.getPraramValue("formParams", "");
+ setBillPropertiesFromParamsNoInstanceItems(bill,formParams,items);
+ }
// 根据前台传入参数构造发票单及发票明细对象
- private void setBillPropertiesFromParams(ExpensiveGoodsBill bill,String formParams,String items){
+ private void setBillPropertiesFromParams(ExpensiveGoodsBill bill,String formParams,String items,String instanceItems){
+ // 如果为true,则为提交发票(默认值),否则暂存发票
+ boolean committedStatus = "true".equals(StrutsParamUtils.getPraramValue("committedStatus", "true").trim());
// 表单参数
if(StringUtils.isNotBlank(formParams)){
JSONObject formParamsObj = JSONObject.fromObject(formParams);
- expensiveGoodsBillManager.updateBillInfo(bill, formParamsObj);
+ expensiveGoodsBillManager.updateBillInfo(bill, formParamsObj,committedStatus);
+ }else if(StringUtils.isBlank(formParams)&&committedStatus){//暂存后再保存
+ bill.setCommittedStatus(committedStatus);
}
// items列表
JSONArray itemsArray = JSONArray.fromObject(items);
+ //高值耗材实例items
+ JSONArray instanceItemsArray = JSONArray.fromObject(instanceItems);
int size = itemsArray.size();
for (int i = 0; i < size; ++i) {
JSONObject obj = itemsArray.optJSONObject(i);
if (obj != null) {
- expensiveGoodsBillManager.addItemToBill(bill, obj);
+ expensiveGoodsBillManager.addItemToBill(bill, obj,instanceItemsArray);
}
}
}
+ //根据前台传入参数构造发票单及发票明细对象,不设置页面实例集合
+ private void setBillPropertiesFromParamsNoInstanceItems(ExpensiveGoodsBill bill,String formParams,String items){
+ // 如果为true,则为提交发票(默认值),否则暂存发票
+ boolean committedStatus = "true".equals(StrutsParamUtils.getPraramValue("committedStatus", "true").trim());
+ // 表单参数
+ if(StringUtils.isNotBlank(formParams)){
+ JSONObject formParamsObj = JSONObject.fromObject(formParams);
+ expensiveGoodsBillManager.updateBillInfo(bill, formParamsObj,committedStatus);
+ }
+ // items列表
+ JSONArray itemsArray = JSONArray.fromObject(items);
+ int size = itemsArray.size();
+ for (int i = 0; i < size; ++i) {
+ JSONObject obj = itemsArray.optJSONObject(i);
+ if (obj != null) {
+ expensiveGoodsBillManager.addItemToBillNoInstanceItems(bill, obj);
+ }
+ }
+ }
/**
* 读取高值耗材发票单
@@ -295,6 +330,43 @@
}
}
+ /**
+ * 根据发票id获的发票已结算的高值耗材实例
+ */
+ public void loadBillExpensiveGoodsInstanceById() {
+ String id = StrutsParamUtils.getPraramValue("id", "");
+ JSONArray jsonArr = new JSONArray();
+ if (StringUtils.isNotBlank(id)) {// 初始化加载的数据
+ try {
+ jsonArr = expensiveGoodsBillManager.getExpensiveGoodsInstanceDtailByBillId(id);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ StrutsResponseUtils.output(jsonArr);
+ }
+ /**
+ * 根据高值耗材id获得可结算的高值耗材实例详细
+ */
+ public void loadExpensiveGoodsInstanceByExpensiveGoodsId() {
+ String expensiveGoodsId = StrutsParamUtils.getPraramValue("expensiveGoodsId", "");
+ String amount = StrutsParamUtils.getPraramValue("amount", "");
+ String settledTime = StrutsParamUtils.getPraramValue("settledTime", "");
+ Map returnMsg = new HashMap();
+ JSONArray jsonArray = new JSONArray();
+ if (StringUtils.isNotBlank(expensiveGoodsId)) {
+ try {
+ jsonArray = expensiveGoodsBillManager.getExpensiveGoodsInstanceDtailByExpensiveGoodsId(settledTime,amount,expensiveGoodsId,returnMsg);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ JSONObject dataObj = new JSONObject();
+ dataObj.put("data", jsonArray);
+ dataObj.put("message", returnMsg);
+ StrutsResponseUtils.output(dataObj);
+ }
+
// // 合并打印
// public void mergeLoadToussePrintData() {
// try {
Index: ssts-web/src/main/webapp/disinfectsystem/assestManagement/expensiveGoods/expensiveGoodsBill/expensiveGoodsBillView.jsp
===================================================================
diff -u -r21038 -r21932
--- ssts-web/src/main/webapp/disinfectsystem/assestManagement/expensiveGoods/expensiveGoodsBill/expensiveGoodsBillView.jsp (.../expensiveGoodsBillView.jsp) (revision 21038)
+++ ssts-web/src/main/webapp/disinfectsystem/assestManagement/expensiveGoods/expensiveGoodsBill/expensiveGoodsBillView.jsp (.../expensiveGoodsBill/expensiveGoodsBillView.jsp) (revision 21932)
@@ -34,12 +34,13 @@
<%@page import="com.forgon.disinfectsystem.entity.basedatamanager.imagefilemanager.ImageFile"%>
+<%@page import="com.forgon.disinfectsystem.entity.basedatamanager.supplier.ExpensiveGoodsSupplier"%>
+
Index: ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/service/ExpensiveGoodsBillManager.java
===================================================================
diff -u -r21038 -r21932
--- ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/service/ExpensiveGoodsBillManager.java (.../ExpensiveGoodsBillManager.java) (revision 21038)
+++ ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/service/ExpensiveGoodsBillManager.java (.../ExpensiveGoodsBillManager.java) (revision 21932)
@@ -1,17 +1,21 @@
package com.forgon.disinfectsystem.expensiveGoods.service;
import java.io.OutputStream;
+import java.util.List;
import java.util.Map;
+import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsBill;
import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsBillItem;
import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsGodownEntry;
import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsGodownEntryItem;
+import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsInstance;
import com.forgon.disinfectsystem.entity.assestmanagement.GoodPurchaseItem;
import com.forgon.disinfectsystem.entity.assestmanagement.GoodPurchasePlan;
import com.forgon.tools.hibernate.BasePoManager;
+import com.google.gson.JsonArray;
/**
* 高值耗材发票管理manager
@@ -68,16 +72,41 @@
ExpensiveGoodsBill entry, Map returnMsg);
/**
+ * 根据发票id获得相应的已结算高值耗材实例
+ * @param id
+ * @return 发票相应的已结算高值耗材实例详细
+ */
+ public JSONArray getExpensiveGoodsInstanceDtailByBillId(String id);
+
+ /**
+ * 根据页面数据获得可结算的高值耗材实例集合
+ * 若发票时间大于入库时间太长提示信息
+ * @param settledTimeStr 页面的发票时间
+ * @param billAmount 页面的添加数量
+ * @param id 高值耗材id
+ * @param result
+ * @return
+ */
+ public JSONArray getExpensiveGoodsInstanceDtailByExpensiveGoodsId(String settledTimeStr,String billAmount,String expensiveGoodsId,Map result);
+
+ /**
* 根据前台传入数据创建发票单
* @param bill
* @param godownEntryInfo
+ * @param committedStatus 是否暂存
*/
- public void updateBillInfo(ExpensiveGoodsBill bill,JSONObject godownEntryInfo);
+ public void updateBillInfo(ExpensiveGoodsBill bill,JSONObject godownEntryInfo,boolean committedStatus);
/**
* 根据前台传入数据创建发票单明细
* @param entry
* @param itemObject
*/
- public void addItemToBill(ExpensiveGoodsBill entry, JSONObject itemObject);
+ public void addItemToBill(ExpensiveGoodsBill entry, JSONObject itemObject,JSONArray instanceItemsArray);
+ /**
+ * 根据前台传入数据创建发票单明细,不传页面的高值耗材实例
+ * @param entry
+ * @param itemObject
+ */
+ public void addItemToBillNoInstanceItems(ExpensiveGoodsBill entry, JSONObject itemObject);
}
Index: ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/service/ExpensiveGoodsBillManagerImpl.java
===================================================================
diff -u -r21090 -r21932
--- ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/service/ExpensiveGoodsBillManagerImpl.java (.../ExpensiveGoodsBillManagerImpl.java) (revision 21090)
+++ ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/service/ExpensiveGoodsBillManagerImpl.java (.../ExpensiveGoodsBillManagerImpl.java) (revision 21932)
@@ -10,10 +10,14 @@
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.stream.Collectors;
+import javassist.expr.NewArray;
+import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.commons.collections4.CollectionUtils;
@@ -28,9 +32,13 @@
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.RichTextString;
import org.springframework.stereotype.Service;
+import org.springframework.test.context.jdbc.Sql;
import com.forgon.Constants;
import com.forgon.directory.model.BarcodeDevice;
+import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager;
+import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManagerImpl;
+import com.forgon.disinfectsystem.common.CssdUtils;
import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoods;
import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsBill;
import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsBillItem;
@@ -40,20 +48,26 @@
import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntry;
import com.forgon.disinfectsystem.entity.assestmanagement.GoodPurchaseItem;
import com.forgon.disinfectsystem.entity.assestmanagement.GoodPurchasePlan;
+import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig;
import com.forgon.disinfectsystem.expensivegoods.ExpensiveGoodsServiceContext;
import com.forgon.disinfectsystem.vo.GodownEntryItemPrintVO;
import com.forgon.serialnumber.model.SerialNum;
import com.forgon.serialnumber.service.SerialNumManager;
import com.forgon.tools.MathTools;
import com.forgon.tools.Path;
+import com.forgon.tools.StrutsParamUtils;
import com.forgon.tools.date.DateTools;
import com.forgon.tools.db.DatabaseUtil;
import com.forgon.tools.excel.ExcelCellStyle;
import com.forgon.tools.excel.ExcelHelper;
import com.forgon.tools.hibernate.BasePoManagerImpl;
import com.forgon.tools.hibernate.ObjectDao;
import com.forgon.tools.json.JSONUtil;
+import com.forgon.tools.string.StringTools;
import com.forgon.tools.util.ForgonDateUtils;
+import com.forgon.tools.util.SqlUtils;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
/**
* 高值耗材发票ManagerImpl
@@ -67,12 +81,22 @@
private SerialNumManager serialNumManager;
private ExpensiveGoodsManager expensiveGoodsManager;
+
+ private SupplyRoomConfigManager supplyRoomConfigManager;
public void setExpensiveGoodsManager(ExpensiveGoodsManager expensiveGoodsManager) {
this.expensiveGoodsManager = expensiveGoodsManager;
}
+ public SupplyRoomConfigManager getSupplyRoomConfigManager() {
+ return supplyRoomConfigManager;
+ }
+ public void setSupplyRoomConfigManager(
+ SupplyRoomConfigManager supplyRoomConfigManager) {
+ this.supplyRoomConfigManager = supplyRoomConfigManager;
+ }
+
public void setSerialNumManager(SerialNumManager serialNumManager) {
this.serialNumManager = serialNumManager;
}
@@ -151,17 +175,21 @@
ExpensiveGoodsBill bill, Map returnMsg) {
// 锁定并获取发票单
-/* ExpensiveGoodsBill curExpensiveGoodsBill = getExpensiveGoodsBillById_ForUpdate(original.getId().toString());
+ ExpensiveGoodsBill curExpensiveGoodsBill = getExpensiveGoodsBillById_ForUpdate(original.getId().toString());
if(curExpensiveGoodsBill == null){
// 发票单已被删除
throw new RuntimeException("高值耗材发票单已被删除!");
}
-
- List originalItemList = original.getItems();
+
+ if(curExpensiveGoodsBill.getCommittedStatus()){
+ // 发票单已提交
+ throw new RuntimeException("高值耗材发票单已提交");
+ }
+ List originalItemList = original.getItems();//未修改的发票明细
List billItemList = bill.getItems();//修改的发票单明细
- List curItemList = curExpensiveGoodsBill.getItems();//未修改的发票明细
+ List curItemList = curExpensiveGoodsBill.getItems();//未修改的发票明细,用于更新
- // 处理修改
+ // 处理数量,价格修改
for (int i = 0; i < billItemList.size(); ++i) {
ExpensiveGoodsBillItem expensiveGoodsBillItem = billItemList.get(i);
Long itemID = expensiveGoodsBillItem.getId();
@@ -185,11 +213,10 @@
Long amount = expensiveGoodsBillItem.getAmount();
Long curAmount = curExpensiveGoodsBillItem.getAmount();
if(originalAmount == null || !originalAmount.equals(amount)){
- if(curAmount != null && !curAmount.equals(originalAmount)){// 有可能被并发修改了库存
+ if(curAmount != null && !curAmount.equals(originalAmount)){// 有可能被并发修改了
throw new RuntimeException("数量已被修改!");
}
- Long amountChange = amount - originalAmount;
-
+// Long amountChange = amount - originalAmount;
curExpensiveGoodsBillItem.setAmount(amount);
}
// 修改价格
@@ -209,14 +236,14 @@
if(itemID != null){// 有id就不是新增项
continue;
}
- //核对发票明细
- checkExpensiveGoodsBillItem(expensiveGoodsBillItem);
- //若核对成功修改高值耗材实例
- changeExpensiveGoodsInstance(expensiveGoodsBillItem,curExpensiveGoodsBill.getId());
+// //核对发票明细
+// checkExpensiveGoodsBillItem(expensiveGoodsBillItem);
+// //若核对成功修改高值耗材实例
+// changeExpensiveGoodsInstance(expensiveGoodsBillItem,curExpensiveGoodsBill.getId());
// 保存expensiveGoodsBillItem
expensiveGoodsBillItem.setExpensiveGoodsbBill(curExpensiveGoodsBill);
curItemList.add(expensiveGoodsBillItem);
- objectDao.save(expensiveGoodsBillItem);
+// objectDao.save(expensiveGoodsBillItem);
}
// 处理删除项
for (int i = 0; i < originalItemList.size(); ++i) {
@@ -237,14 +264,35 @@
}
// 删除godownEntryItem
curItemList.remove(curExpensiveGoodsBillItem);
- //需要改高值耗材实例状态吗?
- objectDao.delete(curExpensiveGoodsBillItem);
+// //需要改高值耗材实例状态吗?
+// objectDao.delete(curExpensiveGoodsBillItem);
}
+
+ //处理页面的高值耗材实例集合
+ List> expensiveGoodsInstanceList = billItemList.stream().map(ExpensiveGoodsBillItem::getExpensiveGoodsInstanceList).collect(Collectors.toList());
+ if(CollectionUtils.isNotEmpty(expensiveGoodsInstanceList)){
+ //获得页面高值耗材id集合
+ List billIExpensiveGoodsIds = billItemList.stream().map(ExpensiveGoodsBillItem::getExpensiveGoodsId).collect(Collectors.toList());
+ Map> expensiveGoodsIdToInstanceList = new HashMap>();
+ for (ExpensiveGoodsBillItem expensiveGoodsBillItem : billItemList) {
+ expensiveGoodsIdToInstanceList.put(expensiveGoodsBillItem.getExpensiveGoodsId(),expensiveGoodsBillItem.getExpensiveGoodsInstanceList());
+ }
+ for (ExpensiveGoodsBillItem expensiveGoodsBillItem : curItemList) {
+ Long expensiveGoodsId = expensiveGoodsBillItem.getExpensiveGoodsId();
+ if(billIExpensiveGoodsIds.contains(expensiveGoodsId)){
+ expensiveGoodsBillItem.setExpensiveGoodsInstanceList(expensiveGoodsIdToInstanceList.get(expensiveGoodsId));
+ }
+ }
+ }else{
+ throw new RuntimeException("获取不到页面高值耗材实例集合!");
+ }
// 更新发票单属性
updateExpensiveGoodsBillProperties(original, bill, curExpensiveGoodsBill);
// 更新发票单对象
- saveOrUpdate(curExpensiveGoodsBill);
+ //saveOrUpdate(curExpensiveGoodsBill);
+ // 保存并结算发票
+ saveAndBillExpensiveGoodsBill(curExpensiveGoodsBill,returnMsg);
}
private void updateExpensiveGoodsBillProperties(ExpensiveGoodsBill original,
@@ -267,26 +315,53 @@
if(originalSettledTime != null && !originalSettledTime.equals(settledTime)){
curExpensiveGoodsBill.setTime(settledTime);
}
-// // 供应商
-// String originalSupplierId = original.getSupplierId();
-// String SupplierId = bill.getSupplierId();
-// if(originalSupplierId != null && !originalSupplierId.equals(SupplierId)){
-// }
- */
+ // 供应商id
+ String originalSupplierId = original.getSupplierId();
+ String SupplierId = bill.getSupplierId();
+ if(originalSupplierId != null && !originalSupplierId.equals(SupplierId)){
+ curExpensiveGoodsBill.setTime(settledTime);
+ }
+ // 供应商名
+ String originalSupplierName = original.getSupplierName();
+ String SupplierName = bill.getSupplierName();
+ if(SupplierName != null && !originalSupplierName.equals(SupplierName)){
+ curExpensiveGoodsBill.setSupplierName(SupplierName);
+ }
+
}
/**
- * 保存发票
+ * 保存高值耗材发票
*/
@Override
- public void saveExpensiveGoodsBill(ExpensiveGoodsBill expensiveGoodsBill,
- Map result) {
+ public void saveExpensiveGoodsBill(ExpensiveGoodsBill expensiveGoodsBill,Map result) {
+ if(CollectionUtils.isNotEmpty( expensiveGoodsBill.getItems())){
+ if(expensiveGoodsBill.getCommittedStatus()){//是否提交
+ //保存并结算发票
+ saveAndBillExpensiveGoodsBill(expensiveGoodsBill,result);
+ }else{
+ //保存发票单
+ this.saveOrUpdate(expensiveGoodsBill);
+ }
+ }else{
+ throw new IllegalArgumentException("发票明细不能为空!");
+ }
+ }
+
+ /**
+ * 保存并结算发票
+ */
+ private void saveAndBillExpensiveGoodsBill(ExpensiveGoodsBill expensiveGoodsBill,Map result){
//用于汇总各发票细单中高值耗材的实例对象
Map> idToExpensiveGoodsInstanceMap = new HashMap>();
//核对发票单并汇总高值耗材实例
checkExpensiveGoodsBill(expensiveGoodsBill,idToExpensiveGoodsInstanceMap);
+ if(!expensiveGoodsBill.getCommittedStatus()){
+ //发票状态为已提交
+ expensiveGoodsBill.setCommittedStatus(true);
+ }
//保存发票单
- this.save(expensiveGoodsBill);
+ this.saveOrUpdate(expensiveGoodsBill);
//修改高值耗材实例
List itemList = expensiveGoodsBill.getItems();
for (int i = 0; i < itemList.size(); ++i) {
@@ -305,75 +380,115 @@
objectDao.update(expensiveGoodsInstance);
}
}
+ //设置结算的高值耗材实例详细
+// setReturnDetails(expensiveGoodsBill,result);
}
- //核对发票单并汇总高值耗材实例
+
+ /**
+ * 核对发票单并汇总高值耗材实例
+ * 1.核对可结算数量:
+ * 高值耗材('已使用','已验收'且入库类型为‘预入库’或‘自购入库’)的实例总数量不够:则核对失败
+ * 2.若可结算数量足够:
+ * 获取页面对应的高值耗材实例集合,检查页面的实例id是否可结算:可结算则核对成功
+ * 3.若核对成功则记录实例
+ * @param expensiveGoodsBill
+ * @param idToExpensiveGoodsInstanceMap
+ */
private void checkExpensiveGoodsBill(
- ExpensiveGoodsBill expensiveGoodsBill,Map> idToExpensiveGoodsInstanceMap){
- List billItemList = expensiveGoodsBill.getItems();
- for (ExpensiveGoodsBillItem expensiveGoodsBillItem : billItemList){
- String goodName = expensiveGoodsBillItem.getGoodsName();//拼接后的名字
- Long expensiveGoodsId = expensiveGoodsBillItem.getExpensiveGoodsId();//高值耗材物品定义id
- Long amount = expensiveGoodsBillItem.getAmount();//数量
- //根据高值耗材id获得状态为'已使用'且入库类型为‘预入库’的高值耗材实例
- String sql = String.format(" where po.expensiveGoods.id = %s and po.status = '%s' and po.entryType = '%s'",
- expensiveGoodsId,ExpensiveGoodsInstance.STATUS_USED,ExpensiveGoodsInstance.ENTRY_TYPE_PREPARE);
- List instanceList = objectDao.findBySql(
- ExpensiveGoodsInstance.class.getSimpleName(),sql);
- if(CollectionUtils.isEmpty(instanceList)){
- //若查到的为空则默认数量为0
- Long usedAmount = (long)0;
+ ExpensiveGoodsBill expensiveGoodsBill,Map> idToExpensiveGoodsInstanceMap){
+ List billItemList = expensiveGoodsBill.getItems();
+ for (ExpensiveGoodsBillItem expensiveGoodsBillItem : billItemList){
+ String goodName = expensiveGoodsBillItem.getGoodsName();//拼接后的名字
+ Long expensiveGoodsId = expensiveGoodsBillItem.getExpensiveGoodsId();//高值耗材物品定义id
+ int billAmount = expensiveGoodsBillItem.getAmount().intValue();//结算数量
+
+ //根据高值耗材id获得状态为'已使用','已验收'且入库类型为‘预入库’或‘自购入库’的高值耗材实例
+ String sql = String.format(" where po.expensiveGoods.id = '%s'"
+ + " and po.status = '%s' and po.checkStatus = '%s'"
+ + " and (po.entryType = '%s' or po.entryType = '%s') order by po.entryType desc, po.entryDate",
+ expensiveGoodsId,ExpensiveGoodsInstance.STATUS_USED,ExpensiveGoodsInstance.CHECK_STATUS_CHECKED,
+ ExpensiveGoodsInstance.ENTRY_TYPE_PREPARE,ExpensiveGoodsInstance.ENTRY_TYPE_PURCHASE);
+
+ @SuppressWarnings("unchecked")
+ List instanceList = objectDao.findBySql(ExpensiveGoodsInstance.class.getSimpleName(),sql);
+ //若查到的为空则默认数量为0
+ if(CollectionUtils.isEmpty(instanceList)){
+ int usedAmount = 0;
+ }
+ //判断已使用的预入库,自购入库高值耗材实例数量是否大于等于结算数量
+ int usedAmount = instanceList.size();
+ if( MathTools.sub(usedAmount,billAmount).intValue()<0){
+ throw new IllegalArgumentException("物品:"+goodName+"预入库,自购入库的验收且已使用总数量为:"+usedAmount+" 小于结算数量:"+billAmount+"!");
+ }
+
+ //获取页面对应的高值耗材实例集合
+ List itemInstanceList = expensiveGoodsBillItem.getExpensiveGoodsInstanceList();
+ List expensiveGoodsInstanceList = new ArrayList();
+ List itemInstanceIds = instanceList.stream().map(ExpensiveGoodsInstance::getId).collect(Collectors.toList());
+ if(CollectionUtils.isNotEmpty(itemInstanceList)){
+ for (ExpensiveGoodsInstance itemInstance : itemInstanceList) {
+ //检查页面的实例id是否属于可结算
+ if(itemInstanceIds.contains(itemInstance.getId())){
+ expensiveGoodsInstanceList.add(itemInstance);
+ }else{
+ throw new IllegalArgumentException(String.format("物品%s中高值耗材实例id为%s的高值耗材实例已不能结算",goodName,itemInstance.getId()));
+ }
}
- Long usedAmount = (long) instanceList.size();
- //判断已使用的预入库高值耗材实例数量是否大于等于结算数量
- if( MathTools.sub(usedAmount,amount).intValue()<0){
- throw new IllegalArgumentException("物品:"+goodName+"预入库已使用数量为:"+usedAmount+" 小于结算数量:"+amount+"!");
- }
- //汇总高值耗材实例
- List expensiveGoodsInstanceList = new ArrayList();
- for (int i = 0; i < amount; i++) {
- ExpensiveGoodsInstance expensiveGoodsInstance = instanceList.get(i);
- expensiveGoodsInstanceList.add(expensiveGoodsInstance);
- }
- //根据发票明细的高值耗材定义id汇总高值耗材实例集合
- idToExpensiveGoodsInstanceMap.put(expensiveGoodsId, expensiveGoodsInstanceList);
- }
+ }else{
+ throw new IllegalArgumentException("物品:"+goodName+"对应的页面的高值耗材实例为空");
+ }
+ idToExpensiveGoodsInstanceMap.put(expensiveGoodsId, expensiveGoodsInstanceList);
+
+// //自购入库实例集合
+// List purchaseInstanceList = new ArrayList();
+// //预入库实例集合
+// List prepareInstanceList = new ArrayList();
+// for (ExpensiveGoodsInstance list : instanceList) {
+// String entryType = list.getEntryType();
+// if(entryType.equals(ExpensiveGoodsInstance.ENTRY_TYPE_PURCHASE)){
+// purchaseInstanceList.add(list);
+// }
+// else if(entryType.equals(ExpensiveGoodsInstance.ENTRY_TYPE_PREPARE)){
+// prepareInstanceList.add(list);
+// }
+//// }
+// //自购入库实例数量
+// int purchaseAmount = purchaseInstanceList.size();
+//
+ //汇总高值耗材实例
+// List expensiveGoodsInstanceList = new ArrayList();
+ //若自购入库实例数量大于等于结算数量:则只需汇总自购入库实例
+ //若自购入库实例数量小于结算数量:则需要汇总自购入库实例和预入库实例
+// int prepareCount = purchaseAmount - billAmount >=0 ? 0 : billAmount - purchaseAmount;
+// if(prepareCount==0){
+// expensiveGoodsInstanceList.addAll(purchaseInstanceList.subList(0, billAmount));
+// }else{
+// expensiveGoodsInstanceList.addAll(purchaseInstanceList.subList(0, purchaseAmount));
+// expensiveGoodsInstanceList.addAll(prepareInstanceList.subList(0, prepareCount));
+// }
+ //根据发票明细的高值耗材定义id汇总高值耗材实例集合
+// idToExpensiveGoodsInstanceMap.put(expensiveGoodsId, expensiveGoodsInstanceList);
}
+}
-// //核对发票明细
-// private void checkExpensiveGoodsBillItem(ExpensiveGoodsBillItem expensiveGoodsBillItem){
-// String goodName = expensiveGoodsBillItem.getGoodsName();
-// Long expensiveGoodsId = expensiveGoodsBillItem.getExpensiveGoodsId();
-// Long amount = expensiveGoodsBillItem.getAmount();
-// //根据高值耗材id获得状态为'已使用'且入库类型为‘预入库’的高值耗材实例
-// String sql = String.format(" where po.expensiveGoods.id = %s and po.status = '%s' and po.entryType = '%s'",
-// expensiveGoodsId,ExpensiveGoodsInstance.STATUS_USED,ExpensiveGoodsInstance.ENTRY_TYPE_PREPARE);
-// List expensiveGoodsInstanceList = objectDao.findBySql(
-// ExpensiveGoodsInstance.class.getSimpleName(),sql);
-// Long usedAmount = (long) expensiveGoodsInstanceList.size();
-// //判断已使用的预入库高值耗材实例数量是否大于等于结算数量
-// if( MathTools.sub(usedAmount,amount).intValue()<0){
-// throw new IllegalArgumentException("物品:"+goodName+"预入库已使用数量为:"+usedAmount+" 小于结算数量:"+amount+"!");
+ /**
+ * 设置结算的高值耗材实例详细
+ */
+// private void setReturnDetails(ExpensiveGoodsBill expensiveGoodsBill,Map result){
+// JSONArray printItemJsonArray = new JSONArray();
+// List billItemList = expensiveGoodsBill.getItems();
+// for (ExpensiveGoodsBillItem billItem : billItemList) {
+// List expensiveGoodsInstanceList = billItem.getExpensiveGoodsInstanceList(objectDao);
+// for (ExpensiveGoodsInstance expensiveGoodsInstance : expensiveGoodsInstanceList) {
+// JSONObject printItemObj = new JSONObject();
+// printItemObj.put("id", expensiveGoodsInstance.getId());
+// }
+// result.put("itemsDetails", printItemJsonArray);
// }
// }
-// //通过发票明细修改高值耗材实例
-// private void changeExpensiveGoodsInstance(
-// ExpensiveGoodsBillItem expensiveGoodsBillItem,
-// Long expensiveGoodsBillId){
-// Long expensiveGoodsId = expensiveGoodsBillItem.getExpensiveGoodsId();
-// //根据高值耗材物品id获得状态为'已使用'且入库类型为‘预入库’的高值耗材实例
-// String sql = String.format(" where po.expensiveGoods.id = %s and po.status = '%s' and po.entryType = '%s'",
-// expensiveGoodsId,ExpensiveGoodsInstance.STATUS_USED,ExpensiveGoodsInstance.ENTRY_TYPE_PREPARE);
-// List expensiveGoodsInstanceList = objectDao.findBySql(
-// ExpensiveGoodsInstance.class.getSimpleName(),sql);
-////
-//// for (ExpensiveGoodsInstance expensiveGoodsInstance : expensiveGoodsInstanceList) {
-//// expensiveGoodsInstance.setStatus(ExpensiveGoodsInstance.STATUS_SETTLED);//状态改为以结算
-//// expensiveGoodsInstance.setExpensiveGoodsBillId(expensiveGoodsBillId);//高值耗材实例的发票单id赋值
-//// }
-// }
@Override
- public void updateBillInfo(ExpensiveGoodsBill bill,JSONObject billInfo) {
+ public void updateBillInfo(ExpensiveGoodsBill bill,JSONObject billInfo,boolean committedStatus) {
if(bill == null || billInfo == null){
return;
}
@@ -395,35 +510,51 @@
bill.setSerialNumber(serialNumber);
bill.setSupplierId(supplierId);
bill.setSupplierName(supplierName);
- Date time;
+ Date time = new Date();
Date settledTime;
try {
- time = new SimpleDateFormat(DateTools.COMMON_DATE_HM).parse(timeStr);
+// time = new SimpleDateFormat(DateTools.COMMON_DATE_HM).parse(timeStr);
settledTime = new SimpleDateFormat(DateTools.COMMON_DATE_HM).parse(settledTimeStr);
} catch (ParseException e) {
e.printStackTrace();
throw new RuntimeException("日期格式错误!");
}
bill.setTime(time);
bill.setSettledTime(settledTime);
+ bill.setCommittedStatus(committedStatus);
}
@Override
- public void addItemToBill(ExpensiveGoodsBill bill, JSONObject itemObject) {
+ public void addItemToBill(ExpensiveGoodsBill bill, JSONObject itemObject,JSONArray instanceItemsArray) {
if(bill == null || itemObject == null){
- throw new IllegalArgumentException("entry和itemObject都不能为空");
+ throw new IllegalArgumentException("entry和itemObjec不能为空");
}
- //新建发票明细
- ExpensiveGoodsBillItem expensiveGoodsBillItem = parseExpensiveGoodsBillItem(itemObject);
+ ExpensiveGoodsBillItem expensiveGoodsBillItem = parseExpensiveGoodsBillItem(bill,itemObject,instanceItemsArray);
expensiveGoodsBillItem.setExpensiveGoodsbBill(bill);
bill.getItems().add(expensiveGoodsBillItem);
}
+ @Override
+ public void addItemToBillNoInstanceItems(ExpensiveGoodsBill bill,JSONObject itemObject) {
+ if(bill == null || itemObject == null){
+ throw new IllegalArgumentException("entry和itemObjec不能为空");
+ }
+ ExpensiveGoodsBillItem expensiveGoodsBillItem = parseExpensiveGoodsBillItemNoInstanceItems(bill,itemObject);
+ expensiveGoodsBillItem.setExpensiveGoodsbBill(bill);
+ bill.getItems().add(expensiveGoodsBillItem);
+ }
//新建发票明细
- private ExpensiveGoodsBillItem parseExpensiveGoodsBillItem(JSONObject itemObject) {
+ private ExpensiveGoodsBillItem parseExpensiveGoodsBillItem(ExpensiveGoodsBill bill,JSONObject itemObject,JSONArray instanceItemsArray) {
if(itemObject == null){
- return null;
+ throw new IllegalArgumentException("itemObjec不能为空");
}
+ if(bill == null){
+ throw new IllegalArgumentException("entry不能为空");
+ }
+ if(CollectionUtils.isEmpty(instanceItemsArray)){
+ throw new IllegalArgumentException("页面的高值耗材实例不能为空");
+ }
+ ExpensiveGoodsBillItem expensiveGoodsBillItem = new ExpensiveGoodsBillItem();
Long itemId = JSONUtil.optLong(itemObject,"id",null);
Long expensiveGoodsId = JSONUtil.optLong(itemObject,"expensiveGoodsId",null);//高值耗材定义id
Long amount = JSONUtil.optLong(itemObject,"amount",null);//数量
@@ -434,7 +565,60 @@
if(expensiveGoods.getSpecification() !=null){
goodsName+="["+expensiveGoods.getSpecification()+"]";
}
+ /**
+ * 获得前台的高值耗材实例
+ * 保存并提交时才需要保存高值耗材实例集合
+ */
+ if(bill.getCommittedStatus()){
+ List expensiveGoodsInstanceList = new ArrayList();
+ List expensiveGoodsInstanceIds = new ArrayList();
+ for (Object object : instanceItemsArray) {
+ JSONObject obj = (JSONObject) object;
+ Long expensiveGoodsInstanceId = JSONUtil.optLong(obj,"id",null);
+ //遍历前台的高值耗材实例明细,获取和高值耗材定义id相同的实例id
+ if(JSONUtil.optLong(obj,"expensiveGoodsId",null).equals(expensiveGoodsId)){
+ expensiveGoodsInstanceIds.add(expensiveGoodsInstanceId);
+ }
+ }
+ if(CollectionUtils.isNotEmpty(expensiveGoodsInstanceIds)){
+ //高值耗材实例对象集合
+ expensiveGoodsInstanceList = objectDao.findByIds(
+ ExpensiveGoodsInstance.class.getSimpleName(), expensiveGoodsInstanceIds);
+ }
+ else{
+ throw new IllegalArgumentException("物品:"+goodsName+"对应的页面的高值耗材实例为空");
+ }
+ expensiveGoodsBillItem.setExpensiveGoodsInstanceList(expensiveGoodsInstanceList);
+ }
+ expensiveGoodsBillItem.setName(expensiveGoods.getName());
+ expensiveGoodsBillItem.setSpecification(expensiveGoods.getSpecification());
+ expensiveGoodsBillItem.setGoodsName(goodsName);
+ expensiveGoodsBillItem.setId(itemId);
+ expensiveGoodsBillItem.setExpensiveGoodsId(expensiveGoodsId);
+ expensiveGoodsBillItem.setAmount(amount);
+ expensiveGoodsBillItem.setPrice(price);
+ return expensiveGoodsBillItem;
+ }
+
+ //新建发票明细(没有高值耗材实例集合)
+ private ExpensiveGoodsBillItem parseExpensiveGoodsBillItemNoInstanceItems(ExpensiveGoodsBill bill,JSONObject itemObject) {
+ if(itemObject == null){
+ throw new IllegalArgumentException("itemObjec不能为空");
+ }
+ if(bill == null){
+ throw new IllegalArgumentException("entry不能为空");
+ }
ExpensiveGoodsBillItem expensiveGoodsBillItem = new ExpensiveGoodsBillItem();
+ Long itemId = JSONUtil.optLong(itemObject,"id",null);
+ Long expensiveGoodsId = JSONUtil.optLong(itemObject,"expensiveGoodsId",null);//高值耗材定义id
+ Long amount = JSONUtil.optLong(itemObject,"amount",null);//数量
+ double price = Double.valueOf(itemObject.optString("price"));// 价格
+ ExpensiveGoods expensiveGoods = expensiveGoodsManager.get(expensiveGoodsId);
+ //拼接物品名字[规格]
+ String goodsName = expensiveGoods.getName();
+ if(expensiveGoods.getSpecification() !=null){
+ goodsName+="["+expensiveGoods.getSpecification()+"]";
+ }
expensiveGoodsBillItem.setName(expensiveGoods.getName());
expensiveGoodsBillItem.setSpecification(expensiveGoods.getSpecification());
expensiveGoodsBillItem.setGoodsName(goodsName);
@@ -444,8 +628,118 @@
expensiveGoodsBillItem.setPrice(price);
return expensiveGoodsBillItem;
}
+
+ @Override
+ public JSONArray getExpensiveGoodsInstanceDtailByBillId(String id) {
+ if(!DatabaseUtil.isPoIdValid(id)){
+ return null;
+ }
+ JSONArray jsonArray = new JSONArray();
+ List expensiveGoodsInstanceList = new ArrayList();
+ String hql = String.format(
+ "select po from ExpensiveGoodsInstance po where po.expensiveGoodsBillId = %s order by po.expensiveGoods.id",id);
+ expensiveGoodsInstanceList = objectDao.findByHql(hql);
+// expensiveGoodsInstanceList = objectDao.findByProperty(
+// ExpensiveGoodsInstance.class.getSimpleName(),"expensiveGoodsBillId", id);
+
+ //返回高值耗材实例详细
+ if(CollectionUtils.isNotEmpty(expensiveGoodsInstanceList)){
+ SimpleDateFormat format=new SimpleDateFormat("yyy-MM-dd");
+ for (ExpensiveGoodsInstance ExpensiveGoodsInstance : expensiveGoodsInstanceList) {
+ JSONObject jsonObj = new JSONObject();
+ jsonObj.put("id", ExpensiveGoodsInstance.getId());
+ jsonObj.put("expensiveGoodsId", ExpensiveGoodsInstance.getExpensiveGoods().getId());
+ jsonObj.put("showName", ExpensiveGoodsInstance.getShowName());
+ jsonObj.put("entryType", ExpensiveGoodsInstance.getEntryType());
+ jsonObj.put("entryDate", format.format(ExpensiveGoodsInstance.getEntryDate()));
+ jsonObj.put("expDate", format.format(ExpensiveGoodsInstance.getExpDate()));
+ jsonObj.put("price", ExpensiveGoodsInstance.getPrice());
+ jsonObj.put("warehouseName", ExpensiveGoodsInstance.getWarehouseName());
+ jsonObj.put("batchNumber", ExpensiveGoodsInstance.getBatchNumber());
+// jsonObj.put("patientName", ExpensiveGoodsInstance.getUseRecord().getPatientName());
+ jsonArray.add(jsonObj);
+ }
+ return jsonArray;
+ }
+ return null;
+ }
-/////////////////
+ @Override
+ public JSONArray getExpensiveGoodsInstanceDtailByExpensiveGoodsId(String settledTimeStr,String billAmount,String expensiveGoodsId,Map result) {
+ if(!DatabaseUtil.isPoIdValid(expensiveGoodsId)||!StringTools.isNumber(billAmount)){
+ return null;
+ }
+ try {
+ JSONArray jsonArray = new JSONArray();
+ SimpleDateFormat format=new SimpleDateFormat(DateTools.COMMON_DATE_PATTEN);
+ List expensiveGoodsInstanceList = new ArrayList();
+ int amount = Integer.valueOf(billAmount);//页面添加的数量
+ List dateWarning = new ArrayList();//用于记录发票预警时间提示
+ SupplyRoomConfig supplyRoomConfig = supplyRoomConfigManager.getSystemParamsObj();
+ Long billDateWarning = 0L;
+
+ //根据高值耗材id获得状态为'已使用','已验收'且入库类型为‘预入库’或‘自购入库’的高值耗材实例 优先自购入库,按入库时间升序
+ String sql = String.format(" where po.expensiveGoods.id = '%s' "
+ + " and po.status = '%s' and po.checkStatus = '%s'"
+ + " and (po.entryType = '%s' or po.entryType = '%s') order by po.entryType desc, po.entryDate",
+ expensiveGoodsId,ExpensiveGoodsInstance.STATUS_USED,ExpensiveGoodsInstance.CHECK_STATUS_CHECKED,
+ ExpensiveGoodsInstance.ENTRY_TYPE_PREPARE,ExpensiveGoodsInstance.ENTRY_TYPE_PURCHASE);
+ expensiveGoodsInstanceList = objectDao.findBySql(ExpensiveGoodsInstance.class.getSimpleName(),sql);
+
+ if(CollectionUtils.isNotEmpty(expensiveGoodsInstanceList)){
+ List instanceList = new ArrayList();
+ //前台结算数量是否大于可结算数量,若大于则获取可结算的全部实例集合
+ if(expensiveGoodsInstanceList.size() >= amount){
+ instanceList.addAll(expensiveGoodsInstanceList.subList(0, amount));
+ }else{
+ instanceList = expensiveGoodsInstanceList;
+ }
+ if(supplyRoomConfig.getExpensiveGoodsBillWarningTime()!=null){
+ //配置的开票时间大于入库时间的预警时间
+ billDateWarning = supplyRoomConfig.getExpensiveGoodsBillWarningTime().longValue();
+ }
+ for (ExpensiveGoodsInstance expensiveGoodsInstance : instanceList) {
+ //判断开票时间大于入库时间太长则提示
+ if(billDateWarning>0 ){
+ String entryDateStr = format.format(expensiveGoodsInstance.getEntryDate());
+ //获得发票时间和入库时间的相差天数entryDateStr
+ Long day = DateTools.getCompareDate(entryDateStr,settledTimeStr,DateTools.COMMON_DATE_PATTEN);
+ if(day >= 0 ){
+ if(day > billDateWarning){
+ dateWarning.add(String.format("%s实例:开票时间大于入库时间太长%s天",expensiveGoodsInstance.getShowName(),day));
+ }
+ }
+ }
+ JSONObject jsonObj = new JSONObject();
+ jsonObj.put("id", expensiveGoodsInstance.getId());
+ jsonObj.put("expensiveGoodsId", expensiveGoodsInstance.getExpensiveGoods().getId());
+ jsonObj.put("showName", expensiveGoodsInstance.getShowName());
+ jsonObj.put("entryDate", format.format(expensiveGoodsInstance.getEntryDate()));
+ jsonObj.put("expDate", format.format(expensiveGoodsInstance.getExpDate()));
+ jsonObj.put("entryType", expensiveGoodsInstance.getEntryType());
+ jsonObj.put("price", expensiveGoodsInstance.getPrice());
+ jsonObj.put("warehouseName", expensiveGoodsInstance.getWarehouseName());
+ jsonObj.put("batchNumber", expensiveGoodsInstance.getBatchNumber());
+ jsonObj.put("model", expensiveGoodsInstance.getModel());
+// jsonObj.put("patientName", expensiveGoodsInstance.getUseRecord().getPatientName());
+ jsonArray.add(jsonObj);
+ if(CollectionUtils.isNotEmpty(dateWarning)){
+ result.put("warning", dateWarning);
+ }
+ }
+ return jsonArray;
+ }else{
+ ExpensiveGoodsInstance expensiveGoodsInstance = (ExpensiveGoodsInstance) objectDao.getByProperty(
+ ExpensiveGoodsInstance.class.getSimpleName(),"expensiveGoods.id",Long.parseLong(expensiveGoodsId));
+ result.put("warning",String.format("物品:%s的可结算数量为0", expensiveGoodsInstance.getShowName()));
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+////////////////////////////////////
// 获取入库单打印信息
/* @Override
public void loadGoodPurchasePlanPrintData(
@@ -639,7 +933,5 @@
}
}
}
-
-///////////////////////////
}
Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/ExpensiveGoodsBillItem.java
===================================================================
diff -u -r21030 -r21932
--- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/ExpensiveGoodsBillItem.java (.../ExpensiveGoodsBillItem.java) (revision 21030)
+++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/ExpensiveGoodsBillItem.java (.../ExpensiveGoodsBillItem.java) (revision 21932)
@@ -11,6 +11,7 @@
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
+import javax.persistence.Transient;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
@@ -19,6 +20,7 @@
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsBatchStock;
import com.forgon.disinfectsystem.entity.basedatamanager.materialdefinition.MaterialDefinition;
+import com.forgon.tools.hibernate.ObjectDao;
/**
* 高值耗材发票明细
@@ -65,6 +67,12 @@
*/
private Long amount ;
+ /**
+ * 高值耗材(非一次性物品高值耗材)实例集合
+ * 不持久化,仅用于前后端数据传递与交互
+ */
+ @JsonIgnore
+ private List expensiveGoodsInstanceList;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@@ -134,4 +142,25 @@
this.specification = specification;
}
+ @Transient
+ public List getExpensiveGoodsInstanceList() {
+ return expensiveGoodsInstanceList;
+ }
+
+ public void setExpensiveGoodsInstanceList(
+ List expensiveGoodsInstanceList) {
+ this.expensiveGoodsInstanceList = expensiveGoodsInstanceList;
+ }
+
+ /**
+ * 查询该发票明细的所有的高值耗材实例
+ * @param dao
+ * @return
+ */
+ public List getExpensiveGoodsInstanceList(ObjectDao dao) {
+ List expensiveGoodsInstanceList =
+ dao.findBySql(ExpensiveGoodsInstance.class.getSimpleName(), " where po.expensiveGoodsBillItemId =" + id );
+ return expensiveGoodsInstanceList;
+ }
+
}
Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/ExpensiveGoodsBill.java
===================================================================
diff -u -r21030 -r21932
--- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/ExpensiveGoodsBill.java (.../ExpensiveGoodsBill.java) (revision 21030)
+++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/ExpensiveGoodsBill.java (.../ExpensiveGoodsBill.java) (revision 21932)
@@ -50,7 +50,7 @@
private Date time;
/**
- * 开票时间时间
+ * 开票时间
*/
private Date settledTime;
@@ -79,6 +79,11 @@
*/
@JsonIgnore
private List items = new ArrayList();
+
+ /**
+ * true 则为保存并结算状态(默认值),否则暂存状态
+ */
+ private Boolean committedStatus;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@@ -106,6 +111,17 @@
this.settledTime = settledTime;
}
+ public Boolean getCommittedStatus() {
+ return committedStatus;
+ }
+
+ public void setCommittedStatus(Boolean committedStatus) {
+ if(committedStatus == null){
+ this.committedStatus = true;
+ }
+ this.committedStatus = committedStatus;
+ }
+
public String getOperator() {
return operator;
}
Fisheye: Tag 21932 refers to a dead (removed) revision in file `ssts-web/src/main/webapp/disinfectsystem/assestManagement/expensiveGoods/expensiveGoodsBillView.jsp'.
Fisheye: No comparison available. Pass `N' to diff?