Index: ssts-web/src/main/webapp/disinfectsystem/invoice/invoicePlanExtractedForm.js =================================================================== diff -u -r16509 -r16516 --- ssts-web/src/main/webapp/disinfectsystem/invoice/invoicePlanExtractedForm.js (.../invoicePlanExtractedForm.js) (revision 16509) +++ ssts-web/src/main/webapp/disinfectsystem/invoice/invoicePlanExtractedForm.js (.../invoicePlanExtractedForm.js) (revision 16516) @@ -295,6 +295,19 @@ } return null; } +function getSendOutRecordByBarcode(barcode){ + if(isUndefinedOrNullOrEmpty(barcode)){ + return null; + } + for ( var i = 0; i < sendOutGoodsStore.getCount(); i++) { + var record = sendOutGoodsStore.getAt(i); + var tempBarcode = record.get('barcode'); + if(barcode == tempBarcode){ + return record; + } + } + return null; +} // 名字到数量的map function getTousseNameToAmountMap(scannedResult){ var map = {}; @@ -327,37 +340,65 @@ var sendAmount = Number(record.data['tempAmount']);// 已扫描数量 var notSendAmount = Number(waitDeliveryCount) - Number(sendAmount);// 待发货数量 var sendAmount = 0 ; - if(notSendAmount > 0 && notSendAmount < storageAmount){// 待发货数量小于库存 + if(notSendAmount <= 0){ + return; + } + if(sendAmount >= storageAmount){ + return; + } + if(notSendAmount < storageAmount){// 待发货数量小于库存 count = notSendAmount; }else{ count = storageAmount; } + var remnantStorage = storageAmount - sendAmount; + // 固定条码每次增加的数量不能超过包定义的扫描数量 + if(goods.tousseFixedBarcode){ + count = Math.min(count,goods.scanAmount);// 单次增加数量不能超过每次扫描数量 + } + count = Math.min(count,remnantStorage);// 增加数量不能超过剩余库存 + if(count == 0){ + return; + } var price = goods.price; - var record = new addGridItem({ - id : 0, - barcode : goods.barcode, - name : goods.name, - tousseFixedBarcode : goods.tousseFixedBarcode, - showTousseName : goods.showTousseName, - count : count, - waitDeliveryCount:waitDeliveryCount, - diposable : goods.diposable, - price : price, - fluctuationPrice : goods.fluctuationPrice, - storage : storageAmount, - batchNumber : goods.batchNumber, - tousseType : goods.tousseType, - typeInfoOnScanned : goods.typeInfoOnScanned, - sterilizerName : goods.sterilizerName, - frequency : goods.frequency, - isTracable : goods.isTracable, - tousseDefinitionId : goods.tousseDefinitionId, - externalCode : goods.externalCode, - isRoutine : goods.isRoutine - }); - sendOutGoodsStore.insert(0,record); - speakBasket.addGoods('',record.data.showTousseName,record.data.count); + var add = true; + if(goods.tousseFixedBarcode){ + var existingRecord = getSendOutRecordByBarcode(goods.barcode); + if(existingRecord != null){ + add = false; + var totalCount = count + existingRecord.data.count; + existingRecord.set('count',totalCount); + } + } + if(add){ + var record = new addGridItem({ + id : 0, + barcode : goods.barcode, + name : goods.name, + tousseFixedBarcode : goods.tousseFixedBarcode, + showTousseName : goods.showTousseName, + count : count, + scanAmount : goods.scanAmount, + waitDeliveryCount:waitDeliveryCount, + diposable : goods.diposable, + price : price, + fluctuationPrice : goods.fluctuationPrice, + storage : storageAmount, + batchNumber : goods.batchNumber, + tousseType : goods.tousseType, + typeInfoOnScanned : goods.typeInfoOnScanned, + sterilizerName : goods.sterilizerName, + frequency : goods.frequency, + isTracable : goods.isTracable, + tousseDefinitionId : goods.tousseDefinitionId, + externalCode : goods.externalCode, + isRoutine : goods.isRoutine + }); + sendOutGoodsStore.insert(0,record); + } + + speakBasket.addGoods('',goods.showTousseName,count); // clearScanText(); updateAmount(goods.name,count); } @@ -387,6 +428,8 @@ function preprocessBeforeGetBarcodeInfo(){ var barcode = top.Ext.getCmp("scanText").getValue().Trim(); var barcodeEnd = top.Ext.getCmp("scanTextEnd").getValue().Trim(); + + clearScanText();// 清除条码 var singleMode = true; if(barcodeEnd != ''){ singleMode = false; @@ -399,6 +442,10 @@ if(singleMode){// 判断是否已经扫描过该条码 var goods = getSendOutGoodsByBarcode(barcode); if(goods != null){ + if(goods.tousseFixedBarcode){ + // 固定条码允许重复扫 + return true; + } if(goods.tousseType == '器械包'){// 目前只处理普通器械包的误差,以及删除 var appGoods = getApplicationGoodsByName(goods.name); if(appGoods.errorAmount >= 0){// 误差数量大于等于0时,能正常发货,此时重复扫描,按以前的逻辑处理,提示条码已存在 @@ -436,7 +483,7 @@ // 开始查询条码信息 top.Ext.getCmp("sendOutGoods").getEl().mask("后台处理中,请稍候..."); Ext.Ajax.timeout=300*1000; - clearScanText();// 清除条码 +// clearScanText();// 清除条码 Ext.Ajax.request({ url : WWWROOT + '/disinfectSystem/invoiceAction!loadGoodsByBarcode.do', params : {barcode : barcode,orgUnitCoding : orgUnitCoding,sourceWarehouseId: sourceWarehouseId}, @@ -490,8 +537,13 @@ for(var x=0;x 1) && goods.tousseFixedBarcode){// 扫单个包才提示 + continue; + } + var b = isBarcodeRepeat(goods.barcode); - if(b){// 扫描多个时,如果存在已扫描的,直接忽略,跳过 + if(b && (goods.diposable == '是' || !goods.tousseFixedBarcode)){// 扫描多个时,如果存在已扫描的,直接忽略,跳过 continue; } // 校验是否超过待发数量,如果是,也跳过 @@ -776,6 +828,7 @@ {name : 'name'}, {name : 'showTousseName'}, {name : 'count'}, + {name : 'scanAmount'}, {name : 'waitDeliveryCount'}, {name : 'diposable'}, {name : 'tousseType'}, Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/action/InvoiceAction.java =================================================================== diff -u -r16460 -r16516 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/action/InvoiceAction.java (.../InvoiceAction.java) (revision 16460) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/action/InvoiceAction.java (.../InvoiceAction.java) (revision 16516) @@ -1501,6 +1501,7 @@ if(vo.getTousseFixedBarcode()){ vo.setStorage(data.get("stockForFixedBarcode").getAsString()); } + vo.setScanAmount(data.get("scanAmount").getAsInt()); vo.setInvoicePlanID(JSONUtil.optLong(data,"invoicePlanID",null)); vo.setProxyDisinfection_id(JSONUtil.optLong(data,"proxyDisinfection_id",null)); vo.setProxyDisinfectionSent(JSONUtil.optString(data,"proxyDisinfectionSent",null)); @@ -1537,6 +1538,7 @@ vo.setName(data.get("tousseName").getAsString()); vo.setShowTousseName(data.get("showTousseName").getAsString()); vo.setStorage("1"); + vo.setScanAmount(data.get("scanAmount").getAsInt()); vo.setTousseType(data.get("tousseType").getAsString()); vo.setInvoicePlanID(JSONUtil.optLong(data,"invoicePlanID",null)); vo.setProxyDisinfection_id(JSONUtil.optLong(data,"proxyDisinfection_id",null)); Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/InvoiceGoodsVo.java =================================================================== diff -u -r16386 -r16516 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/InvoiceGoodsVo.java (.../InvoiceGoodsVo.java) (revision 16386) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/InvoiceGoodsVo.java (.../InvoiceGoodsVo.java) (revision 16516) @@ -30,6 +30,8 @@ private String storage; + private Integer scanAmount; + private String batchNumber; private String tousseType; @@ -149,6 +151,14 @@ this.storage = storage; } + public Integer getScanAmount() { + return scanAmount; + } + + public void setScanAmount(Integer scanAmount) { + this.scanAmount = scanAmount; + } + public String getBatchNumber() { return batchNumber; } Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r16499 -r16516 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 16499) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 16516) @@ -3454,6 +3454,8 @@ result.addProperty("stockForFixedBarcode", tousseInstance.getStockForFixedBarcode()); result.addProperty("storage", tousseInstance.getStockForFixedBarcode()); } + result.addProperty("scanAmount", td.getScanAmount()); + // 验证是否超过预警期 Date validUntil = tousseInstance.getValidUntil(); Date warningUntil = tousseInstance.getWarningUntil();