Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/dwr/table/TousseInstanceTableManager.java =================================================================== diff -u -r16928 -r16934 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/dwr/table/TousseInstanceTableManager.java (.../TousseInstanceTableManager.java) (revision 16928) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/dwr/table/TousseInstanceTableManager.java (.../TousseInstanceTableManager.java) (revision 16934) @@ -129,11 +129,12 @@ sqlBuilder.append(" AND operationTime is not null "); String barcodeSearch = sqlWhereParamMap.get("barcodeSearch"); //条码(包含但不限于:器械包实例条码、标识牌) + String barcodes = sqlWhereParamMap.get("barcodes"); //条码集合(用户启用多次扫描模式并且不是第一次扫描条码时才有值,此时要按照此条码集合查询) if(StringUtils.isNotBlank(barcodeSearch)){ BarcodeDevice barcodeDevice = barcodeManager .getBarcodeByBarcode(barcodeSearch); - if(barcodeDevice == null) { - // 若无此条码,则直接返回 + if(barcodeDevice == null + && StringUtils.isBlank(barcodes)) { //1、若无此条码 2、用户没启用多次扫描模式,或者是启用了而且是第一次扫描 同时满足1和2则两个条件直接返回 Map map = new HashMap(); map.put("totalResults", 0); map.put("list", Arrays.asList()); @@ -143,12 +144,11 @@ return json; } - // 判断如果是标识牌类型 - if (barcodeDevice instanceof IDCardInstance) { + if (barcodeDevice instanceof IDCardInstance) { //是标识牌的条码 IDCardInstance idCardInstance = (IDCardInstance) barcodeDevice; List tousseInstances = idCardInstance .getTousseInstances(objectDao); - Collection barcodes = CollectionUtils.collect( + Collection barcodeCollection = CollectionUtils.collect( tousseInstances, new Transformer() { @Override public String transform(TousseInstance input) { @@ -157,10 +157,17 @@ }); sqlBuilder.append(" AND"); sqlBuilder.append(SqlBuilder.build_IN_Statement("po.barcode", - SqlBuilder.IN, barcodes)); + SqlBuilder.IN, barcodeCollection)); } else { - sqlBuilder.append(String.format(" AND po.barcode = '%s'", - barcodeSearch)); + if (StringUtils.isNotBlank(barcodes)) { + String[] barcodeArray = barcodes.split(";"); + List barcodeList = Arrays.asList(barcodeArray); + sqlBuilder.append(" AND" + SqlBuilder.build_IN_Statement("po.barcode", + SqlBuilder.IN, barcodeList)); + } else { + sqlBuilder.append(String.format(" AND po.barcode = '%s'", + barcodeSearch)); + } } } Index: ssts-web/src/main/webapp/disinfectsystem/useRecord/useRecordForm.js =================================================================== diff -u -r16868 -r16934 --- ssts-web/src/main/webapp/disinfectsystem/useRecord/useRecordForm.js (.../useRecordForm.js) (revision 16868) +++ ssts-web/src/main/webapp/disinfectsystem/useRecord/useRecordForm.js (.../useRecordForm.js) (revision 16934) @@ -1510,7 +1510,7 @@ var tousseType = record.data['tousseType']; var tousseDefinitionName = record.data['tousseDefinitionName']; if(tousseType != '一次性物品'){ - return "" + v + ""; + return "" + v + ""; }else{ return v; } Index: ssts-web/src/main/webapp/disinfectsystem/toussemanager/tousseinstancemanager/tousseInstanceView.jsp =================================================================== diff -u -r16731 -r16934 --- ssts-web/src/main/webapp/disinfectsystem/toussemanager/tousseinstancemanager/tousseInstanceView.jsp (.../tousseInstanceView.jsp) (revision 16731) +++ ssts-web/src/main/webapp/disinfectsystem/toussemanager/tousseinstancemanager/tousseInstanceView.jsp (.../tousseInstanceView.jsp) (revision 16934) @@ -105,6 +105,7 @@ + Index: ssts-web/src/test/java/test/forgon/disinfectsystem/invoicemanager/service/ComboTousseInvoiceTests.java =================================================================== diff -u -r16849 -r16934 --- ssts-web/src/test/java/test/forgon/disinfectsystem/invoicemanager/service/ComboTousseInvoiceTests.java (.../ComboTousseInvoiceTests.java) (revision 16849) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/invoicemanager/service/ComboTousseInvoiceTests.java (.../ComboTousseInvoiceTests.java) (revision 16934) @@ -174,7 +174,7 @@ assertNotNull(invoice); //断言发货单关联的包实例为3个 - assertEquals(3 , invoice.getTousseInstances(objectDao).size()); + assertEquals(4 , invoice.getTousseInstances(objectDao).size()); //断言器械包状态为已发货 TousseInstance tousseInstance = tousseInstanceManager.getTousseInstanceByBarcode(barcodeArray_开胸包[0]); @@ -360,7 +360,7 @@ assertNotNull(invoice); //断言发货单关联的包实例为3个 - assertEquals(3 , invoice.getTousseInstances(objectDao).size()); + assertEquals(4 , invoice.getTousseInstances(objectDao).size()); //断言器械包状态为已发货 TousseInstance tousseInstance = tousseInstanceManager.getTousseInstanceByBarcode(barcodeArray_开胸包[0]); Index: ssts-web/src/main/webapp/disinfectsystem/toussemanager/tousseinstancemanager/tousseInstanceView.js =================================================================== diff -u -r16928 -r16934 --- ssts-web/src/main/webapp/disinfectsystem/toussemanager/tousseinstancemanager/tousseInstanceView.js (.../tousseInstanceView.js) (revision 16928) +++ ssts-web/src/main/webapp/disinfectsystem/toussemanager/tousseinstancemanager/tousseInstanceView.js (.../tousseInstanceView.js) (revision 16934) @@ -1,24 +1,49 @@ var grid; -//物品名称选择下拉框的当前所选中的值 -var currentSelectedTousseName; +var currentSelectedTousseName; //物品名称选择下拉框的当前所选中的值 +var barcodes = ''; +var singleScanLabel = '单次扫描'; +var repeatScanLabel = '多次扫描'; function initQueryValueAndReload() { - $Id('parm_s_barcodeSearch').value = $Id('barcodeSearch').value; - $Id('parm_s_sterilizationDate').value = $Id('sterilizationDate').value; - $Id('parm_s_sterilizationEndDate').value = $Id('sterilizationEndDate').value; - $Id('parm_s_sterilizerName').value = $Id('sterilizerName').value; - $Id('parm_s_frequency').value = $Id('frequency').value; - $Id('parm_s_tousseGroupName').value = $Id('tousseGroupName').value; + $Id('parm_s_sterilizationDate').value = $Id('sterilizationDate').value; //灭菌开始时间 + $Id('parm_s_sterilizationEndDate').value = $Id('sterilizationEndDate').value; //灭菌结束时间 + $Id('parm_s_sterilizerName').value = $Id('sterilizerName').value; //灭菌炉名称 + $Id('parm_s_frequency').value = $Id('frequency').value; //炉次 + $Id('parm_s_tousseGroupName').value = $Id('tousseGroupName').value; //器械包分组 + //如果当前所选中值与下拉框的值相同时,则采用精确匹配.否则采用模糊匹配 if(currentSelectedTousseName == Ext.getCmp('tousseName').getRawValue()){ $Id('parm_s_tousseName').value = Ext.getCmp('tousseName').getRawValue(); }else{ $Id('parm_s_tousseName').value = ''; $Id('parm_s_tousseNameFuzzy').value = Ext.getCmp('tousseName').getRawValue(); } + + + var barcode = $Id('barcodeSearch').value; //条码字符串 + var barcodeReg = /(\d){9}/; + if (barcode.length == 9 && barcodeReg.test(barcode)) { //条码字符串为9数字,扫描码才有意义,否则清空 + if (repeatScanLabel == $Id('scanPattern').value) { //启用多次扫描模式 + if (barcodes) { + barcodes += ';' + barcode ; + } else { //启用多次扫描模式的第一次扫描 + barcodes = barcode; + } + } else { + barcodes = ''; + } + } else { + barcode = ''; + barcodes = ''; + } + + $Id('parm_s_barcodeSearch').value = barcode; + $Id('parm_s_barcodes').value = (barcodes.length == 9 ? '' : barcodes); //barcodes长度为9说明用户启用多次扫描模式,并且是第一次扫描 + + Ext.getCmp('barcodeSearch').setValue(''); grid.getStore().lastOptions.params['start'] = 0; -// Ext.getCmp('barcodeSearch').setValue(''); grid.dwrReload(); + } /** @@ -189,7 +214,6 @@ region : 'north', border : false, bodyBorder : false, - labelAlign:"right", layoutConfig : {columns : 2}, height : 88, items : [{ @@ -198,28 +222,115 @@ items:[{ columnWidth : .25, layout : 'form', - labelWidth : 40, + labelWidth : 70, + labelAlign:"right", items : [{ + xtype : 'combo', + id : 'scanPattern', + name : 'scanPattern', + valueField : 'scanPatternValue', + displayField : 'scanPatternValue', + anchor : '95%', + fieldLabel : '扫描模式', + mode : 'local', + readOnly : true, + value : singleScanLabel, + triggerAction : 'all', + forceSelection : true, + store : new Ext.data.SimpleStore({ + fields : ['scanPatternValue'], + data : [[singleScanLabel],[repeatScanLabel]] + }) + }] + },{ + columnWidth : .25, + layout : 'form', + labelWidth : 70, + labelAlign:"right", + items : [{ xtype : 'textfield', fieldLabel : '条码', name : 'barcodeSearch', id : 'barcodeSearch', - anchor : '90%', + anchor : '95%', listeners : { specialkey : function(field, ee) { if (ee.getKey() == Ext.EventObject.ENTER) { initQueryValueAndReload(); - Ext.getCmp("barcodeSearch").setValue(""); } } } }] },{ columnWidth : .25, layout : 'form', - labelWidth : 85, + labelWidth : 81, items : [{ + xtype : 'datefield', + fieldLabel : '灭菌开始日期', + name : 'sterilizationDate', + id : 'sterilizationDate', + readOnly : false, + altFormats:'Y-m-d|Y-n-j|y-n-j|y-m-j|y-m-d|y-n-d|Y-n-d|Y-m-j|Ymd|Ynj|ynj|ymj|ymd|ynd|Ynd|Ymj|Y/m/d|Y/n/j|y/n/j|y/m/j|y/m/d|y/n/d|Y/n/d|Y/m/j', + editable : false, + format : 'Y-m-d', + anchor : '95%' + }] + },{ + columnWidth : .25, + layout : 'form', + labelWidth : 45, + items : [{ xtype : 'combo', + fieldLabel : '灭菌炉', + id : 'sterilizerName', + name : 'sterilizerName', + valueField : 'sterilizerName', + displayField : 'sterilizerName', + store : new Ext.data.SimpleStore({ + fields : [ 'sterilizerName' ], + url : WWWROOT + '/disinfectSystem/baseData/sterilizerAction!getAllSterilizer.do' + }), + triggerAction : 'all', + mode : 'remote', + forceSelection : true, + allowBlank : true, + editable : false, + anchor : '95%' + }] + },{ + columnWidth : .25, + layout : 'form', + labelWidth : 70, + items : [{ + xtype : 'multiSelect', + id : 'tousseGroupName', + name : 'tousseGroupName', + valueField : 'tousseGroupName', + displayField : 'tousseGroupName', + allowBlank : true, + editable : false, + fieldLabel:'器械包分组', + triggerAction : 'all', + //--------------------// + store : new Ext.data.JsonStore({ + url : WWWROOT + '/disinfectSystem/baseData/tousseGroupAction!getAllTousseGroup.do', + fields : ['tousseGroupName'], + listeners : { + beforeload : function(_this, options) { + _this.baseParams.needAll = '是'; + } + } + }), + //---------------------------// + anchor : '95%' + }] + },{ + columnWidth : .25, + layout : 'form', + labelWidth : 70, + items : [{ + xtype : 'combo', id : 'tousseName', name : 'tousseName', fieldLabel : '器械包名称', @@ -260,115 +371,33 @@ },{ columnWidth : .25, layout : 'form', - labelWidth : 60, + labelWidth : 81, items : [{ - xtype : 'combo', - fieldLabel : '灭菌炉', - id : 'sterilizerName', - name : 'sterilizerName', - valueField : 'sterilizerName', - displayField : 'sterilizerName', - store : new Ext.data.SimpleStore({ - fields : [ 'sterilizerName' ], - url : WWWROOT + '/disinfectSystem/baseData/sterilizerAction!getAllSterilizer.do' - }), - triggerAction : 'all', - mode : 'remote', - forceSelection : true, - allowBlank : true, - editable : false, - anchor : '95%' - }] - },{ - columnWidth : .25, - layout : 'form', - labelWidth : 40, - items : [{ - xtype : 'numberfield', - fieldLabel : '炉次', - name : 'frequency', - id : 'frequency', - anchor : '90%' - }] - },{ - columnWidth : .25, - layout : 'form', - labelWidth : 85, - items : [{ xtype : 'datefield', - fieldLabel : '灭菌开始日期', - name : 'sterilizationDate', - id : 'sterilizationDate', - readOnly : false, - altFormats:'Y-m-d|Y-n-j|y-n-j|y-m-j|y-m-d|y-n-d|Y-n-d|Y-m-j|Ymd|Ynj|ynj|ymj|ymd|ynd|Ynd|Ymj|Y/m/d|Y/n/j|y/n/j|y/m/j|y/m/d|y/n/d|Y/n/d|Y/m/j', - editable : false, - format : 'Y-m-d', -// value:new Date(startDayOfMonth), - anchor : '95%' - }] - },{ - columnWidth : .25, - layout : 'form', - labelWidth : 85, - items : [{ - xtype : 'datefield', fieldLabel : '灭菌结束日期', name : 'sterilizationEndDate', id : 'sterilizationEndDate', readOnly : false, altFormats:'Y-m-d|Y-n-j|y-n-j|y-m-j|y-m-d|y-n-d|Y-n-d|Y-m-j|Ymd|Ynj|ynj|ymj|ymd|ynd|Ynd|Ymj|Y/m/d|Y/n/j|y/n/j|y/m/j|y/m/d|y/n/d|Y/n/d|Y/m/j', editable : false, format : 'Y-m-d', -// value:new Date(), anchor : '95%' }] },{ columnWidth : .25, layout : 'form', - labelWidth : 70, + labelAlign:"right", + labelWidth : 45, items : [{ - xtype : 'multiSelect', - id : 'tousseGroupName', - name : 'tousseGroupName', - valueField : 'tousseGroupName', - displayField : 'tousseGroupName', - allowBlank : true, - editable : false, - fieldLabel:'器械包分组', - triggerAction : 'all', - //--------------------// -// mode:'local', - store : new Ext.data.JsonStore({ - url : WWWROOT + '/disinfectSystem/baseData/tousseGroupAction!getAllTousseGroup.do', - fields : ['tousseGroupName'], - listeners : { - beforeload : function(_this, options) { - _this.baseParams.needAll = '是'; - } - } - }), -// store : new Ext.data.SimpleStore({ -// url : WWWROOT + '/disinfectSystem/baseData/tousseGroupAction!getAllTousseGroup.do', -// fields:['tousseGroupName'] -// }), - -// store : new Ext.data.Store({ -// proxy : new Ext.data.HttpProxy({ -// url : WWWROOT + '/disinfectSystem/baseData/tousseGroupAction!getAllTousseGroup.do', -// method : 'POST' -// }), -// reader : new Ext.data.JsonReader({ -// fields : [{name : 'tousseGroupId', name : 'tousseGroupName'}] -// }), -// listeners : { -// } -// }), - //---------------------------// + xtype : 'numberfield', + fieldLabel : '炉次', + name : 'frequency', + id : 'frequency', anchor : '95%' }] }] },{ - width :120, + width : 120, layout : 'column', items : [{ columnWidth : .5, @@ -390,13 +419,16 @@ text : '重置', minWidth : 50, iconCls : 'icon_set', - handler : function() { + handler : function() { //查询条件全部重置 $Id('barcodeSearch').value = ""; $Id('sterilizationDate').value = ""; $Id('sterilizationEndDate').value = ""; $Id('sterilizerName').value = ""; $Id('frequency').value = ""; $Id('tousseName').value = ""; + $Id('tousseGroupName').value = ""; + $Id('scanPattern').value = singleScanLabel; + barcodes = ''; } }] }]