Index: ssts-web/src/main/webapp/common/common.css =================================================================== diff -u --- ssts-web/src/main/webapp/common/common.css (revision 0) +++ ssts-web/src/main/webapp/common/common.css (revision 13656) @@ -0,0 +1,11 @@ +.my_row_yellow{ + background-color: yellow; +} + +.my_row_red{ + background-color: red; +} + +.my_row_green { + background-color: green; +} \ No newline at end of file Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java =================================================================== diff -u -r13618 -r13656 --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java (.../ServiceManagerImpl.java) (revision 13618) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java (.../ServiceManagerImpl.java) (revision 13656) @@ -1003,7 +1003,7 @@ // 在发货任务的上下文,根据条码获取信息 public String getInfoByBarcode_InvoicePlan(JSONObject params) { JsonObject params2 = (JsonObject)new JsonParser().parse(params.toString()); - return invoiceManager.getInfoByBarcode(params2).toString(); + return invoiceManager.getInfoByBarcodeForInvoiceScan(params2).toString(); } /** Index: ssts-web/src/test/java/test/forgon/disinfectsystem/invoicemanager/service/ScanBasketInvoiceTests.java =================================================================== diff -u -r13055 -r13656 --- ssts-web/src/test/java/test/forgon/disinfectsystem/invoicemanager/service/ScanBasketInvoiceTests.java (.../ScanBasketInvoiceTests.java) (revision 13055) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/invoicemanager/service/ScanBasketInvoiceTests.java (.../ScanBasketInvoiceTests.java) (revision 13656) @@ -220,7 +220,7 @@ JsonObject pm = new JsonObject(); pm.addProperty("barcode", "018000001"); pm.add("extraParam", extraParam); - JsonObject result = invoiceManager.getInfoByBarcode(pm); + JsonObject result = invoiceManager.getInfoByBarcodeForInvoiceScan(pm); assertNotNull(result); boolean success = result.get("success").getAsBoolean(); Index: ssts-web/src/main/webapp/js/extUtils.js =================================================================== diff -u -r12331 -r13656 --- ssts-web/src/main/webapp/js/extUtils.js (.../extUtils.js) (revision 12331) +++ ssts-web/src/main/webapp/js/extUtils.js (.../extUtils.js) (revision 13656) @@ -95,6 +95,20 @@ } return undefined; } +// 拼接store里面的属性 +function joinPropertiesInStore(store,propName,separator){ + var str = ''; + for(var i=0;i 0){ @@ -116,6 +127,25 @@ } return false; } +function removeTousseIfNeeded(goods){ + var barcode = goods.barcode; + if(isBarcodeRepeat(barcode)){ + var name = goods.name; + for (var i = 0; i < recyclingapplicationStore.getCount(); i++) { + var record = recyclingapplicationStore.getAt(i); + var tempName = record.get('name'); + var tempAmount = record.get('tempAmount'); + if(tempName == name){ + var errorAmount = record.get('errorAmount'); + if(errorAmount < 0){ + removeSendOutTousseByBarcode(barcode); + return true; + } + } + } + } + return false; +} //扫描的物品是否是待发货物品 //name不是showTousseName字段 @@ -145,12 +175,25 @@ tempAmount = 0; } record.set('tempAmount',Number(amount) + Number(tempAmount)); + updateErrorAmount(record); } } } return false; } - +function updateErrorAmount(record){ + var awaitSendingAmount = record.get('count'); + var sentAmount = record.get('tempAmount'); + record.set('errorAmount',awaitSendingAmount - sentAmount); +} +function initErrorAmount(){ + for ( var i = 0; i < recyclingapplicationStore.getCount(); i++) { + var record = recyclingapplicationStore.getAt(i); + var awaitSendingAmount = record.get('count'); + var sentAmount = record.get('tempAmount'); + record.set('errorAmount',awaitSendingAmount - sentAmount); + } +} //校验物品数量是否为数字 function validGridAmount() { //申请的物品 @@ -164,6 +207,12 @@ b = false; break; } + var errorAmount = record.get('errorAmount'); + if(parseInt(errorAmount) < 0){ + showResult('['+record.get('name')+'] 误差数量不能小于0,保存失败!'); + b = false; + break; + } } for ( var i = 0; i < sendOutGoodsStore.getCount(); i++) { var record = sendOutGoodsStore.getAt(i); @@ -219,97 +268,207 @@ {name : 'tousseDefinitionId'} ]); -//扫描发货物品 -function loadGoodsByBarcode(orgUnitCoding) { +// 根据条码获取发送项 +function getSendOutGoodsByBarcode(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.data; + } + } + return null; +} +// 名字到数量的map +function getTousseNameToAmountMap(scannedResult){ + var map = {}; + for(var i=0;i 0 && notSendAmount < storageAmount){// 待发货数量小于库存 + count = notSendAmount; + }else{ + count = storageAmount; + } + + var price = goods.price; + var record = new addGridItem({ + id : 0, + barcode : goods.barcode, + name : goods.name, + showTousseName : goods.showTousseName, + count : count, + diposable : goods.diposable, + price : price, + fluctuationPrice : goods.fluctuationPrice, + storage : storageAmount, + batchNumber : goods.batchNumber, + tousseType : goods.tousseType, + sterilizerName : goods.sterilizerName, + frequency : goods.frequency, + isTracable : goods.isTracable, + tousseDefinitionId : goods.tousseDefinitionId, + externalCode : goods.externalCode + }); + sendOutGoodsStore.add(record); + speakBasket.addGoods('',record.data.showTousseName,record.data.count); + clearScanText(); + updateAmount(goods.name,count); +} + +function clearScanText(){ + var barcodeEnd = top.Ext.getCmp("scanTextEnd").getValue().Trim(); + if(barcodeEnd == ''){ + if(hiddenEndBarcode || currentScanMode == 'single'){ + top.Ext.getCmp('scanText').setValue("");//如果使用虚拟篮筐机制,扫描成功后需要清除该文本内容 + }else{ + top.Ext.getCmp('scanTextEnd').focus();//否则不清除,条码/篮筐(尾)获得焦点 + } + } +} +function getApplicationGoodsByName(goodsName){ + var record = findRecordByNameAndValueFromStore(recyclingapplicationStore,"name",goodsName); + if(record != null){ + return record.data; + } + return null; +} +function preprocessBeforeGetBarcodeInfo(){ var barcode = top.Ext.getCmp("scanText").getValue().Trim(); var barcodeEnd = top.Ext.getCmp("scanTextEnd").getValue().Trim(); + var singleMode = true; + if(barcodeEnd != ''){ + singleMode = false; + } var sourceWarehouseId = top.Ext.getCmp("sourceWarehouseId").getValue(); if(isUndefinedOrNullOrEmpty(sourceWarehouseId)){ showResult('请先选择仓库!'); return false; } - //top.Ext.getCmp("scanText").setValue(''); - var b = isBarcodeRepeat(barcode); - if(b && barcodeEnd == ''){ - showResult('条形码:'+barcode+' 已经存在!'); - return false; + if(singleMode){// 判断是否已经扫描过该条码 + var goods = getSendOutGoodsByBarcode(barcode); + if(goods != null){ + if(goods.tousseType == '器械包'){// 目前只处理普通器械包的误差,以及删除 + var appGoods = getApplicationGoodsByName(goods.name); + if(appGoods.errorAmount >= 0){// 误差数量大于等于0时,能正常发货,此时重复扫描,按以前的逻辑处理,提示条码已存在 + showResult('条形码:'+barcode+' 已经存在!'); + return false; + }else{// 误差数量小于0时,说明扫描数量已经大于申请数量,此时重复扫描某个包,需要删除该包。 + // 删除该器械包 + removeSendOutTousseByBarcode(goods.barcode); + return false; + } + }else{ + showResult('条形码:'+barcode+' 已经存在!'); + return false; + } + } } - //如果条码/篮筐(尾)不为空 + return true; +} +//扫描发货物品 +function loadGoodsByBarcode(orgUnitCoding) { + var barcode = top.Ext.getCmp("scanText").getValue().Trim(); + var barcodeEnd = top.Ext.getCmp("scanTextEnd").getValue().Trim(); + var singleMode = true; if(barcodeEnd != ''){ - barcode += ";" + barcodeEnd; + singleMode = false; } - - var saveBarcode = ""; - for(var i=0; i 0){ - showResult(scanFaildTousseArray[0] + ",篮筐内数量大于申请数量,请逐个扫描!"); + for( var name in exceedAmountNames ){ + if(exceedAmountNames.hasOwnProperty(name)){ + showResult(name + ",篮筐内数量大于申请数量,请逐个扫描!"); + } } - var alreadyAddAmount = 0;//已添加的器械包数量 var speakBasket = new SpeakBasket(); for(var x=0;x 0){ - showResult(msg); - } - } +// for(var x=0;x 0){ +// showResult(msg); +// } +// } speakBasket.speakContent(); - if(result.data.length > 0 && alreadyAddAmount == 0){ - showResult("器械包已扫描或不在发货单中"); - } +// if(result.data.length > 0 && alreadyAddAmount == 0){ +// showResult("器械包已扫描或不在发货单中"); +// } }, failure : function(response, options) { top.Ext.getCmp("sendOutGoods").getEl().unmask(); @@ -489,6 +531,7 @@ tempAmount = 0; } record.set('tempAmount', Number(amount)); + updateErrorAmount(record); } } } @@ -536,6 +579,7 @@ {name : 'diposable'}, {name : 'price'}, {name : 'tempAmount'}, + {name : 'errorAmount'}, {name : 'amount'}, {name : 'applicationAmount'}, {name : 'batchNumber'}, @@ -549,7 +593,12 @@ url : WWWROOT + '/disinfectSystem/invoiceAction!loadDepartApplicationAllGoodsByCondition.do', method : 'POST' }), - reader : rd + reader : rd, + listeners: { + load: function(thiz,records,options){ + initErrorAmount(); + } + } }); //回收误差 @@ -603,6 +652,7 @@ })*/ }, {header : '实发数量',id : 'tempAmount',dataIndex : 'tempAmount',width : 50,value : 0, menuDisabled: true,renderer:getDefaultAmount}, + {header : '误差数量',id : 'errorAmount',dataIndex : 'errorAmount',width : 50,value : 0, menuDisabled: true,renderer:getDefaultAmount}, {id : 'diposable',header : "是否一次性材料",dataIndex : 'diposable',hidden :true}, {id :'applicationAmount',header : "最大发货数量",dataIndex : 'applicationAmount',hidden : true,width :150}, {id : 'deleteItem',header:'删除',hidden :true,width :40,menuDisabled: true, @@ -1136,7 +1186,16 @@ frame : false, bodyStyle : 'border:1px solid #afd7af', viewConfig: { - forceFit:true + forceFit:true, + getRowClass : function(record,rowIndex,rowParams,store){ + if(record.data.errorAmount < 0){ + return 'my_row_red'; + }else if(record.data.errorAmount > 0){ + return 'my_row_yellow'; + }else{ + return 'my_row_green'; + } + } }, clicksToEdit:1, selModel : new top.Ext.grid.RowSelectionModel({ Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/action/InvoiceAction.java =================================================================== diff -u -r13559 -r13656 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/action/InvoiceAction.java (.../InvoiceAction.java) (revision 13559) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/action/InvoiceAction.java (.../InvoiceAction.java) (revision 13656) @@ -1345,16 +1345,13 @@ */ public void loadGoodsByBarcode(){ String barcode = StrutsParamUtils.getPraramValue("barcode", ""); - String saveBarcodeStr = StrutsParamUtils.getPraramValue("saveBarcode", ""); String sourceWarehouseId = StrutsParamUtils.getPraramValue("sourceWarehouseId", ""); String orgUnitCoding = StrutsParamUtils.getPraramValue("orgUnitCoding", ""); - JsonElement scannedBarcodes = new Gson().toJsonTree(StringUtils.split(saveBarcodeStr, ',')); JsonObject extraParam = new JsonObject(); extraParam.addProperty("mode", "depart"); extraParam.addProperty("departCodeOfInvoicePlan", orgUnitCoding); - extraParam.add("scannedBarcodes", scannedBarcodes); extraParam.addProperty("sourceWarehouseId", sourceWarehouseId); JsonObject params = new JsonObject(); @@ -1363,7 +1360,7 @@ params.add("extraParam", extraParam); try { - JsonObject result = invoiceManager.getInfoByBarcode(params); + JsonObject result = invoiceManager.getInfoByBarcodeForInvoiceScan(params); JsonElement result2 = convertResult(result); StrutsParamUtils.getResponse().setCharacterEncoding("UTF-8"); StrutsParamUtils.getResponse().getWriter() @@ -1445,7 +1442,7 @@ JsonElement ele = data.get("sterileEndTime"); vo.setEndDate(ele.isJsonNull()?"":ele.getAsString()); vo.setBatchNumber(data.get("batchNumber").getAsString()); -// vo.setTousseType(tousseDefinition.getTousseType()); + vo.setTousseType(data.get("tousseType").getAsString()); // vo.setSterilizerName(sterilizerName); // vo.setFrequency(frequency); // vo.setTousseDefinitionId(tousseDefinitionId); Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r13589 -r13656 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 13589) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 13656) @@ -2697,8 +2697,9 @@ fixedBarcodeTousseInstance.getTousseName()); return obj; } - @Override - public JsonObject getInfoByBarcode(JsonObject params) { + // 发货扫描时的扫条码处理,暂时从getInfoByBarcode复制而来,还需要做进一步的优化处理 + public JsonObject getInfoByBarcodeForInvoiceScan(JsonObject params){ + final String barcodeStr = params.get("barcode").getAsString(); if (StringUtils.isBlank(barcodeStr)) return buildErrorMsgJsonResult("请扫描条码!"); @@ -2727,9 +2728,7 @@ if (barcodeDevice == null) return buildErrorMsgJsonResult("查无此物品"); - SupplyRoomConfig cofig = supplyRoomConfigManager.getSystemParamsObj(); - Boolean warningTousseWhetherDelivery = cofig - .getWarningTousseWhetherDelivery(); + JsonArray tips = new JsonArray(); if (barcodeDevice instanceof TousseInstance) { // 器械包 @@ -2748,43 +2747,13 @@ return buildErrorMsgJsonResult("条码/篮筐(首)与条码/篮筐(尾)尾参数类型不一致!"); } } - - Collection invoiceGoodsOfAll; - switch(mode){ - case "depart": - invoiceGoodsOfAll = getWaitDeliverGoods( - departCodeOfInvoicePlan, TimeQuantum.All); - break; - case "invoicePlan": - invoiceGoodsOfAll = getWaitDeliverGoods(invoicePlanId); - break; - default: - return buildErrorMsgJsonResult("extraParam缺失参数mode"); - } //如果器械包实例条件(尾)为空 if(StringUtils.isBlank(barcodeEnd)){ - boolean inPlan = CollectionUtils.exists(invoiceGoodsOfAll, - new Predicate() { - @Override - public boolean evaluate(ApplicationGoodsVo arg0) { - String voName = arg0.name; - String tousseDefinitionName = tousseDefinition - .getName(); - if(StringUtils.equals(voName, tousseDefinitionName)){ - return true; - } - return false; - } - }); - // 不追溯的消毒物品,发货扫描固定条码,返回多个器械包 if (tousseInstance.getTousseFixedBarcode() && TousseDefinition.PACKAGE_TYPE_DISINFECTION .equals(tousseDefinition.getTousseType())) { - if (!inPlan) - return buildErrorMsgJsonResult("此物品不在发货计划内"); - long tousseInstanceAmount = 0; switch(mode){ case "depart": @@ -2819,24 +2788,7 @@ // 不追溯的器械包(除消毒物品外),发货扫描固定条码,返回多个器械包 if (TousseDefinition.STR_NO.equals(tousseDefinition .getIsTraceable())) { - if (!inPlan) - return buildErrorMsgJsonResult("此物品不在发货计划内"); - Collection sqlWheres = new ArrayList(); - // 判断状态 - sqlWheres.add(SqlBuilder.build_IN_Statement("po.status", - SqlBuilder.IN, TousseInstance.STATUS_STERILED, - TousseInstance.STATUS_NO_DELIVER)); - - // 排除已扫描的器械包 - Collection scannedBarcodes = new Gson().fromJson( - extraParam.get("scannedBarcodes"), - new TypeToken>() { - }.getType()); - sqlWheres.add(SqlBuilder.build_IN_Statement("po.barcode", - SqlBuilder.NOT_IN, scannedBarcodes)); - sqlWheres.add("po.tousseFixedBarcode = 0 "); - // 非可追溯器械包,返回多个器械包实例 Collection resultTousseInstanceList = getCanInvoiceTousseInstancesByFixedTousseInstance(tousseInstance); @@ -2879,15 +2831,16 @@ Date warningUntil = tousseInstance.getWarningUntil(); if (DateTools.isDuringWarningPeriod(validUntil, warningUntil, new Date())) { + SupplyRoomConfig cofig = supplyRoomConfigManager.getSystemParamsObj(); + Boolean warningTousseWhetherDelivery = cofig + .getWarningTousseWhetherDelivery(); if (warningTousseWhetherDelivery) { tips.add(new JsonPrimitive("器械包即将失效")); } else { return buildErrorMsgJsonResult("器械包处于预警期不能发货"); } } - if (!inPlan) - return buildErrorMsgJsonResult("此物品不在发货计划内"); JsonObject result = new JsonObject(); result.addProperty("success", true); @@ -3057,12 +3010,8 @@ if(diposableGoods.expensiveDiposablegoods()){ return buildErrorMsgJsonResult("此物品为高值耗材,请扫描高值耗材条码!"); } - String name = diposableGoods.getName(); - String specification = diposableGoods.getSpecification(); - if (StringUtils.isNotBlank(specification)) { - name = String.format("%s[%s]", diposableGoods.getName(), - specification); - } + String name = diposableGoods.getShowName(); + DisposableGoodsBatchStock disposableGoodsBatchStock = diposableGoodsManager.getDisposableGoodsStockByBatchNumber(sourceWarehouseId, diposableGoods.getId(), disposableGoodsBatch.getBatchNumber()); if(disposableGoodsBatchStock == null){ return buildErrorMsgJsonResult("批次库存为空!"); @@ -3142,342 +3091,6 @@ return buildErrorMsgJsonResult("查无此物品"); } } - // 发货扫描时的扫条码处理,暂时从getInfoByBarcode复制而来,还需要做进一步的优化处理 - public JsonObject getInfoByBarcodeForInvoiceScan(JsonObject params){ - - final String barcodeStr = params.get("barcode").getAsString(); - if (StringUtils.isBlank(barcodeStr)) - return buildErrorMsgJsonResult("请扫描条码!"); - - final JsonObject extraParam = params.get("extraParam") - .getAsJsonObject(); - if (extraParam == null) - return buildErrorMsgJsonResult("缺失参数extraParam"); - - final String mode = GsonUtil.getString(extraParam, "mode", ""); - final String departCodeOfInvoicePlan = GsonUtil.getString(extraParam, "departCodeOfInvoicePlan", ""); - final long invoicePlanId = GsonUtil.getLong(extraParam, "invoicePlanId", 0); - - if (StringUtils.isBlank(departCodeOfInvoicePlan)) - return buildErrorMsgJsonResult("extraParam缺失参数departCodeOfInvoicePlan"); - - String[] barcodeArray = barcodeStr.split(";"); - String barcode = barcodeArray[0]; - String barcodeEnd = ""; - if(barcodeArray.length > 1){ - barcodeEnd = barcodeArray[1]; - } - - BarcodeDevice barcodeDevice = barcodeManager - .getBarcodeByBarcode(barcode); - if (barcodeDevice == null) - return buildErrorMsgJsonResult("查无此物品"); - - - JsonArray tips = new JsonArray(); - if (barcodeDevice instanceof TousseInstance) { - // 器械包 - final TousseInstance tousseInstance = (TousseInstance) barcodeDevice; - final TousseDefinition tousseDefinition = tousseInstance - .getTousseDefinition(); - - //如果器械包实例条件(尾)不为空 - if(StringUtils.isNotBlank(barcodeEnd)){ - BarcodeDevice barcodeDeviceEnd = barcodeManager - .getBarcodeByBarcode(barcodeEnd); - if (barcodeDeviceEnd == null){ - return buildErrorMsgJsonResult("条码/篮筐(尾)请输入正确的参数"); - } - if(!(barcodeDeviceEnd instanceof TousseInstance)){ - return buildErrorMsgJsonResult("条码/篮筐(首)与条码/篮筐(尾)尾参数类型不一致!"); - } - } - - //如果器械包实例条件(尾)为空 - if(StringUtils.isBlank(barcodeEnd)){ - // 不追溯的消毒物品,发货扫描固定条码,返回多个器械包 - if (tousseInstance.getTousseFixedBarcode() - && TousseDefinition.PACKAGE_TYPE_DISINFECTION - .equals(tousseDefinition.getTousseType())) { - long tousseInstanceAmount = 0; - switch(mode){ - case "depart": - tousseInstanceAmount = getDisinfectionTousseInstanceAmount( - departCodeOfInvoicePlan, tousseDefinition); - break; - case "invoicePlan": - tousseInstanceAmount = getDisinfectionTousseInstanceAmountByInvoicePlanId( - invoicePlanId, tousseDefinition); - break; - default: - return buildErrorMsgJsonResult("extraParam缺失参数mode"); - } - - if (tousseInstanceAmount <= 0) - return buildErrorMsgJsonResult("该物品库存不足"); - - tousseInstance.setStockForFixedBarcode(new Long(tousseInstanceAmount)); - JsonObject result = new JsonObject(); - result.addProperty("success", true); - result.addProperty("barcode", barcode); - result.addProperty("type", "tousseInstance"); - result.add("data", buildJSONObjectForTousseInstance(tousseInstance)); -// result.addProperty("type", "tousseInstanceList"); -// result.add("fixedBarcodeInfo", getFixedBarcodeInfo(tousseInstance, resultTousseInstanceList)); -// result.add( -// "data", -// buildJSONArrayForTousseInstances(resultTousseInstanceList)); - return result; - } - - // 不追溯的器械包(除消毒物品外),发货扫描固定条码,返回多个器械包 - if (TousseDefinition.STR_NO.equals(tousseDefinition - .getIsTraceable())) { - - Collection sqlWheres = new ArrayList(); - // 判断状态 - sqlWheres.add(SqlBuilder.build_IN_Statement("po.status", - SqlBuilder.IN, TousseInstance.STATUS_STERILED, - TousseInstance.STATUS_NO_DELIVER)); - - // 排除已扫描的器械包 - Collection scannedBarcodes = new Gson().fromJson( - extraParam.get("scannedBarcodes"), - new TypeToken>() { - }.getType()); - sqlWheres.add(SqlBuilder.build_IN_Statement("po.barcode", - SqlBuilder.NOT_IN, scannedBarcodes)); - sqlWheres.add("po.tousseFixedBarcode = 0 "); - - // 非可追溯器械包,返回多个器械包实例 - Collection resultTousseInstanceList = getCanInvoiceTousseInstancesByFixedTousseInstance(tousseInstance); - - if (CollectionUtils.isEmpty(resultTousseInstanceList)) - return buildErrorMsgJsonResult("该物品库存不足"); - - JsonObject result = new JsonObject(); - tousseInstance.setStockForFixedBarcode(new Long(resultTousseInstanceList.size())); - result.addProperty("success", true); - result.addProperty("barcode", barcode); - result.addProperty("type", "tousseInstance"); - result.add("data", buildJSONObjectForTousseInstance(tousseInstance)); -// result.addProperty("type", "tousseInstanceList"); -// result.add("fixedBarcodeInfo", getFixedBarcodeInfo(tousseInstance, resultTousseInstanceList)); -// result.add( -// "data", -// buildJSONArrayForTousseInstances(resultTousseInstanceList)); - return result; - - } - // 如果是 - if(tousseInstance.getTousseFixedBarcode() && TousseDefinition.STR_YES.equals(tousseDefinition - .getIsTraceable())){ - return buildErrorMsgJsonResult(tousseInstance.getTousseName()+"为可追溯的包,不能扫描固定条码!"); - } - // 可追溯器械包,返回单个器械包实例 - if (!checkStatusForInvoice.evaluate(tousseInstance)) { - return buildErrorMsgJsonResult("器械包状态异常:" - + tousseInstance.getStatus()); - } - if (!tousseInstanceManager.checkTousseInstanceHasNotRecall() - .evaluate(tousseInstance)) { - return buildErrorMsgJsonResult("器械包已被召回"); - } - - Date validUntil = tousseInstance.getValidUntil(); - if (DateTools.isExpire(validUntil, new Date())) { - return buildErrorMsgJsonResult("器械包已过期"); - } - Date warningUntil = tousseInstance.getWarningUntil(); - if (DateTools.isDuringWarningPeriod(validUntil, warningUntil, - new Date())) { - SupplyRoomConfig cofig = supplyRoomConfigManager.getSystemParamsObj(); - Boolean warningTousseWhetherDelivery = cofig - .getWarningTousseWhetherDelivery(); - if (warningTousseWhetherDelivery) { - tips.add(new JsonPrimitive("器械包即将失效")); - } else { - return buildErrorMsgJsonResult("器械包处于预警期不能发货"); - } - } - - - JsonObject result = new JsonObject(); - result.addProperty("success", true); - result.addProperty("barcode", barcode); - result.addProperty("type", "tousseInstance"); - result.add("data", buildJSONObjectForTousseInstance(tousseInstance)); - result.add("tips", tips); - return result; - }else{ - //如果存在器械包实例条码(尾) - JsonObject result = new JsonObject(); - result.addProperty("success", true); - result.addProperty("barcode", barcodeStr); - result.addProperty("type", "tousseInstanceList"); - Map mapResult = - barcodeManager.getTousseInstanceListByRange(barcode, barcodeEnd, TousseInstance.STATUS_STERILED); - - if(mapResult != null && mapResult.get("result") != null){ - List tousseInstanceList = (List)mapResult.get("result"); - if(CollectionUtils.isNotEmpty(tousseInstanceList)){ - result.add("data",buildJSONArrayForTousseInstances(tousseInstanceList)); - }else{ - return buildErrorMsgJsonResult("未找到符合条件的器械包"); - } - }else{ - return buildErrorMsgJsonResult("未找到符合条件的器械包"); - } - result.add("tips", tips); - return result; - } - - } else if (barcodeDevice instanceof User) { - // 用户 - JsonObject data = new JsonObject(); - data.addProperty("fullName", ((User)barcodeDevice).getFullName()); - JsonObject result = new JsonObject(); - result.addProperty("success", true); - result.addProperty("barcode", barcode); - result.addProperty("type", "user"); - result.add("data", - data); - return result; - }else if (barcodeDevice instanceof Container) { - if(Container.CONTAINER_PURPOSE_DISINFECTION.equals(((Container) barcodeDevice).getPurpose())){ - // 容器(整筐发货),针对灭菌篮筐(单个)的处理 - Map multiResult = loadSterilizeBasketInsideTousseInstance( - barcode, departCodeOfInvoicePlan); - boolean success = (Boolean) multiResult.get("success"); - if (!success) { - String errorMsg = (String) multiResult.get("error"); - return buildErrorMsgJsonResult(errorMsg); - } - - Collection tousseInstances = (Collection) multiResult - .get("data"); - tips = (JsonArray) new Gson().toJsonTree(multiResult.get("tips"), - new TypeToken>() { - }.getType()); - - JsonObject result = new JsonObject(); - result.addProperty("success", true); - result.addProperty("barcode", barcode); - result.addProperty("type", "tousseInstancesInContainer"); - result.add("data", - buildJSONArrayForTousseInstances(tousseInstances)); - result.add("tips", tips); - return result; - }else if(Container.CONTAINER_PURPOSE_VIRTUAL.equals(((Container) barcodeDevice).getPurpose())){ - //判断条码/篮筐(尾)对应的篮筐是否存在,且类型与条码/篮筐(首)是否一致 - if(StringUtils.isNotBlank(barcodeEnd)){ - BarcodeDevice barcodeDeviceEnd = barcodeManager - .getBarcodeByBarcode(barcodeEnd); - if (barcodeDeviceEnd == null){ - return buildErrorMsgJsonResult("条码/篮筐(尾)请输入正确的参数"); - } - if(!(barcodeDeviceEnd instanceof Container) - || !Container.CONTAINER_PURPOSE_VIRTUAL.equals(((Container) barcodeDeviceEnd).getPurpose())){ - return buildErrorMsgJsonResult("条码/篮筐(首)与条码/篮筐(尾)尾参数类型不一致!"); - } - } - - // 容器(整筐发货),针对虚拟篮筐(单个或首尾)的处理 - Map multiResult = - loadSterilizeBasketInsideTousseInstanceByRange(barcode, barcodeEnd, departCodeOfInvoicePlan); - boolean success = (Boolean) multiResult.get("success"); - if (!success) { - String errorMsg = (String) multiResult.get("error"); - return buildErrorMsgJsonResult(errorMsg); - } - - Collection tousseInstances = (Collection) multiResult - .get("data"); - tips = (JsonArray) new Gson().toJsonTree(multiResult.get("tips"), - new TypeToken>() { - }.getType()); - - JsonObject result = new JsonObject(); - result.addProperty("success", true); - result.addProperty("barcode", barcode); - result.addProperty("type", "tousseInstancesInContainer"); - result.add("data", - buildJSONArrayForTousseInstances(tousseInstances)); - result.add("tips", tips); - return result; - }else{ - return buildErrorMsgJsonResult("篮筐为非有效的篮筐,请扫描或输入灭菌篮筐或虚拟篮筐"); - } - } else if (barcodeDevice instanceof DisposableGoodsBatch) { - // 一次性物品 - Long sourceWarehouseId = extraParam.get("sourceWarehouseId").getAsLong(); - DisposableGoodsBatch disposableGoodsBatch = (DisposableGoodsBatch) barcodeDevice; - DisposableGoods diposableGoods = disposableGoodsBatch - .getDiposableGoods(); - String name = diposableGoods.getShowName(); - - DisposableGoodsBatchStock disposableGoodsBatchStock = diposableGoodsManager.getDisposableGoodsStockByBatchNumber(sourceWarehouseId, diposableGoods.getId(), disposableGoodsBatch.getBatchNumber()); - if(disposableGoodsBatchStock == null){ - return buildErrorMsgJsonResult("批次库存为空!"); - } - // ***验证一次性物品*** - Date expDate = disposableGoodsBatch.getExpDate(); - String expDateStr = DateFormatUtils.format(expDate, - "yyyy-MM-dd HH:mm:ss"); - if (new Date().after(expDate)) {// 一次性物品失效 - return buildErrorMsgJsonResult(String.format("[%s]已过期", name)); - } - - // 获取单价 - List identificationOfDiposableGoodss = diposableGoodBatchStockManager - .getIdentificationsWithNoZeroStroge(disposableGoodsBatchStock - .getId()); - - Double price = null; - Double fluctuationPrice = null; - if (CollectionUtils.isNotEmpty(identificationOfDiposableGoodss)) { - price = identificationOfDiposableGoodss.get(0).getPrice(); - - SupplyRoomConfig config = supplyRoomConfigManager - .getSystemParamsObj(); - double fluctuationPercent = config - .getDiposablePriceFluctuation();// 浮动价格系数 - fluctuationPrice = MathTools.mul(price, fluctuationPercent, 2); - } - - JsonObject data = new JsonObject(); - data.addProperty("name", name); - data.addProperty("showTousseName", name); - data.addProperty("barcode", disposableGoodsBatch.getBarcode()); - data.addProperty("diposable", Constants.STR_YES); - data.addProperty("batchNumber", - disposableGoodsBatch.getBatchNumber()); - data.addProperty("storage", disposableGoodsBatchStock.getStorage()); - data.addProperty("price", price); - data.addProperty("fluctuationPrice", fluctuationPrice); - - String batchNumber = diposableGoodBatchStockManager - .getDiposableGoodBatchByName(name, expDateStr); - - if (StringUtils.isNotBlank(batchNumber)) { - String tipsStr = String.format("批次为[%s]的[%s]快到失效期,请优先发货", - batchNumber, name); - tips.add(new JsonPrimitive(tipsStr)); - } - - JsonObject result = new JsonObject(); - result.addProperty("success", true); - result.addProperty("barcode", barcode); - result.addProperty("type", "diposableGoodsBatchStock"); - result.add("data", data); - result.add("tips", tips); - return result; - - } else { - return buildErrorMsgJsonResult("查无此物品"); - } - - } @Override public Collection getDisinfectionTousseInstance( String orgUnitCoding, TousseDefinition tousseDefinition) { Index: ssts-web/src/main/webapp/homepage/portalPage.jsp =================================================================== diff -u -r13348 -r13656 --- ssts-web/src/main/webapp/homepage/portalPage.jsp (.../portalPage.jsp) (revision 13348) +++ ssts-web/src/main/webapp/homepage/portalPage.jsp (.../portalPage.jsp) (revision 13656) @@ -48,7 +48,7 @@ - + Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManager.java =================================================================== diff -u -r12331 -r13656 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManager.java (.../InvoiceManager.java) (revision 12331) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManager.java (.../InvoiceManager.java) (revision 13656) @@ -88,9 +88,6 @@ public void submitInvoice(JSONObject params); - @Deprecated// 太过通用,导致性能低下 - public JsonObject getInfoByBarcode(JsonObject params); - public JsonObject getInfoByBarcodeForInvoiceScan(JsonObject params);// 发货扫描时的扫条码处理 public Collection getDisinfectionTousseInstance(String orgUnitCoding, TousseDefinition tousseDefinition);