Index: ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/action/WashAndDisinfectRecordAction.java =================================================================== diff -u -r20493 -r20578 --- ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/action/WashAndDisinfectRecordAction.java (.../WashAndDisinfectRecordAction.java) (revision 20493) +++ ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/action/WashAndDisinfectRecordAction.java (.../WashAndDisinfectRecordAction.java) (revision 20578) @@ -354,8 +354,17 @@ String barcode = StrutsParamUtils.getPraramValue("barcode", ""); boolean isLoadDefaultCleanMethod = ("true").equals(StrutsParamUtils .getPraramValue("isLoadDefaultCleanMethod", "")); - String materialInstance = beCleanItemManager - .loadContentByBasketBarcode(barcode, isLoadDefaultCleanMethod,false); + String materialInstance; + boolean isRetrospectTousse = ("true").equals(StrutsParamUtils + .getPraramValue("isRetrospectTousse", "")); + if(isRetrospectTousse){ + //清洗的是不追溯的器械包 + materialInstance = beCleanItemManager + .loadTousseContent(barcode,isLoadDefaultCleanMethod); + }else{ + materialInstance = beCleanItemManager + .loadContentByBasketBarcode(barcode, isLoadDefaultCleanMethod,false); + } try { StrutsParamUtils.getResponse().setCharacterEncoding("UTF-8"); if( materialInstance != null){ Index: ssts-web/src/main/webapp/disinfectsystem/config/zsyy/config.js =================================================================== diff -u -r20437 -r20578 --- ssts-web/src/main/webapp/disinfectsystem/config/zsyy/config.js (.../config.js) (revision 20437) +++ ssts-web/src/main/webapp/disinfectsystem/config/zsyy/config.js (.../config.js) (revision 20578) @@ -213,5 +213,7 @@ //允许外来器械部分装配,需要开启篮筐序号 allowForeignToussePartiallyPacking: true, //同步入库的默认查询开始时间为当天: true为启用,false为不启用 - sycDefaultStartTime : true + sycDefaultStartTime : true, + //是否启用扫描器械包固定条码清洗功能: true为启用,false为不启用 + endbleScanTousseFixationBarcode : true } \ No newline at end of file Index: ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/service/WashAndDisinfectRecordManagerImpl.java =================================================================== diff -u -r20493 -r20578 --- ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/service/WashAndDisinfectRecordManagerImpl.java (.../WashAndDisinfectRecordManagerImpl.java) (revision 20493) +++ ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/service/WashAndDisinfectRecordManagerImpl.java (.../WashAndDisinfectRecordManagerImpl.java) (revision 20578) @@ -1704,7 +1704,40 @@ }else{ retString = JSONUtil.buildErrorMsgJsonResult("请扫描清洗机的位置!"); } - }else if(barcodeDevice instanceof IDCardInstance){ + } else if(barcodeDevice instanceof TousseInstance){ + barcodeType = "器械包"; + TousseInstance tousseInstance = (TousseInstance)barcodeDevice; + TousseDefinition tousseDefinition = tousseInstance.getTousseDefinition(); + JSONObject result = new JSONObject(); + result.put("id", tousseInstance.getId()); + if (TousseDefinition.STR_YES + .equals(tousseDefinition.getIsTraceable())){ + return JSONUtil.buildErrorMsgJsonResult("此器械包为追溯物品,不能直接清洗!"); + } + JSONObject tousseJSONObj = new JSONObject(); + tousseJSONObj.put("barcode", tousseInstance.getBarcode()); + tousseJSONObj.put("name", tousseInstance.getTousseName()); + tousseJSONObj.put("amount",tousseDefinition.getScanAmount());//器械包定义的每次扫描数量 + result.put("container", tousseJSONObj); + List materialInstances = tousseInstance.getTousseDefinition().getMaterialInstances(); + JSONArray materialInfoJSONArray = new JSONArray(); + for(MaterialInstance materialInstance : materialInstances ){ + JSONObject materialInfoJSONObj = new JSONObject(); + int amount = materialInstance.getCount()* tousseDefinition.getScanAmount();//材料数量*包定义的每次扫描数量 + materialInfoJSONObj.put("id",0); + materialInfoJSONObj.put("itemDefinitionName",materialInstance.getMaterialName()); + materialInfoJSONObj.put("amount",amount); + materialInfoJSONObj.put("materialAmount",materialInstance.getCount()); + materialInfoJSONArray.add(materialInfoJSONObj); + } + result.put("itemAmountInfos", materialInfoJSONArray); + JSONBuilder builder = new JSONStringer().object().key("success") + .value(true).key("barcode").value(tousseInstance.getBarcode()) + .key("type").value("tousseInstance").key("data") + .value(result).endObject(); + retString = builder.toString(); + + } else if(barcodeDevice instanceof IDCardInstance){ //标识牌,需要加载标识牌关联的篮筐 barcodeType = BarcodeDevice.BARCODE_TYPE_SIGNBOARD; IDCardInstance idCardInstance = (IDCardInstance)barcodeDevice; @@ -1780,10 +1813,14 @@ public JSONObject classifyBasketToJson(ClassifyBasket classifyBasket) { JSONObject result = new JSONObject(); result.put("id", classifyBasket.getId()); - + int amount = 0; + for(ClassifiedItem classifiedItem : classifyBasket.getClassfiedItems()){ + amount += classifiedItem.getAmount(); + } JSONObject containerJSONObj = new JSONObject(); containerJSONObj.put("barcode", classifyBasket.getContainerBarcode()); containerJSONObj.put("name", classifyBasket.getContainerName()); + containerJSONObj.put("amount",amount); containerJSONObj.put("personInCharge", classifyBasket.getPersonInCharge()); containerJSONObj.put("personInChargeCode", classifyBasket.getPersonInChargeCode()); containerJSONObj.put("position", classifyBasket.getPosition()); Index: ssts-web/src/main/webapp/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/washAndDisinfectView.js =================================================================== diff -u -r20114 -r20578 --- ssts-web/src/main/webapp/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/washAndDisinfectView.js (.../washAndDisinfectView.js) (revision 20114) +++ ssts-web/src/main/webapp/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/washAndDisinfectView.js (.../washAndDisinfectView.js) (revision 20578) @@ -268,7 +268,7 @@ hidden : SSTS_WashRecord_Create, iconCls : 'btn_ext_application_add', handler : function() { - addAndEditWashAndDisinfectRecord(0,false); + addAndEditWashAndDisinfectRecord(0,false,false); } }, '-', { text : '修改', Index: ssts-web/src/main/webapp/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/washAndDisinfectForm.js =================================================================== diff -u -r20111 -r20578 --- ssts-web/src/main/webapp/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/washAndDisinfectForm.js (.../washAndDisinfectForm.js) (revision 20111) +++ ssts-web/src/main/webapp/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/washAndDisinfectForm.js (.../washAndDisinfectForm.js) (revision 20578) @@ -44,7 +44,14 @@ }, dataIndex:'button' }]); - +//每次扫描原有的器械包删除原有的器械包节点 +function removeTousseGrid(barcode){ + var root = top.Ext.getCmp('basketTreePanel').root; + var node = root.findChild('barcode', barcode); + if(node){ + node.remove(); + } +} function removeWashGridItem(barcode){ var root = top.Ext.getCmp('basketTreePanel').root; var node = root.findChild('barcode', barcode); @@ -144,19 +151,20 @@ //根据条码加载材料 -function loadMaterial(barcode,callBack,idCardBarcode) { +function loadMaterial(barcode,callBack,idCardBarcode,isRetrospectTousse) { if(typeof(barcode) == 'undefined' || barcode == '') { barcode = top.Ext.getCmp('inputText').getValue(); top.Ext.getCmp('inputText').setValue(""); } var root = top.Ext.getCmp('basketTreePanel').root; var node = root.findChild('barcode', barcode); - if (node) { - showResult("该篮筐或清洗架已在列表中"); - return; + if(!isRetrospectTousse){ + if (node) { + showResult("该篮筐或清洗架已在列表中"); + return; + } } - var isLoadDefaultCleanMethod = false; if(!top.Ext.getCmp('disinfectProgram').getValue() && !top.Ext.getCmp('disinfectIdentification').getValue()){ isLoadDefaultCleanMethod = true; @@ -167,7 +175,8 @@ url : WWWROOT + '/disinfectSystem/washAndDisinfect/washAndDisinfectRecordAction!loadMaterialInfo.do', params : { barcode : barcode, - isLoadDefaultCleanMethod : isLoadDefaultCleanMethod + isLoadDefaultCleanMethod : isLoadDefaultCleanMethod, + isRetrospectTousse : isRetrospectTousse }, success : function(response, options) { var result = response.responseText; @@ -178,18 +187,46 @@ showResult("该篮筐或清洗架未存放清洗物品"); }else if(result=="packed"){ showResult("该篮筐内部分物品已装配并打印标签,不能再次清洗!"); + }else if(result=="retrospect"){ + showResult("此器械包为追溯物品,不能直接进行清洗!"); }else if (result != null && result != "null") { + var tousseCounts = []; + var materialCounts = []; + var repeatedly ; var materialArray = new Array(); materialArray = result.split("#@"); var array = new Array(); array = materialArray[0].split(","); var root = top.Ext.getCmp('basketTreePanel').root; var node = root.findChild('id', array[0]); - if (node) { - showResult("该篮筐或清洗架已在列表中"); - return; + if(!isRetrospectTousse){ + if (node) { + showResult("该篮筐或清洗架已在列表中"); + return; + } + }else{ + //获取不追溯的器械包数量 + root.eachChild(function(node){ + var barcodes = node.attributes.barcode + var count = parseInt(node.attributes.count) + parseInt(array[2]); + if(barcodes==barcode){ + tousseCounts.push({ + count : count + }); + node.eachChild(function(tousseMaterial){ + var type = tousseMaterial.attributes.type + var materialCount = tousseMaterial.attributes.count + var counts = (parseInt(materialCount) / parseInt(node.attributes.count)) * (parseInt(count)); + materialCounts.push({ + count : counts + }); + }); + } + }); + if(node != null){ + repeatedly = true; + } } - var personInCharge = top.Ext.getCmp('personInCharge').getValue(); var personInChargeCode = top.Ext.getCmp('personInChargeCode').getValue(); @@ -204,11 +241,20 @@ if( isUndefinedOrNullOrEmpty(showBarcode) || showBarcode == 'undefined' ){ showBarcode = barcode; } + var tousseCount = array[2]; + //扫描的是不追溯的器械包可以重复扫描叠加数量 + if(repeatedly){ + removeTousseGrid(barcode); + for (var i = 0; i < tousseCounts.length; i++) { + var tousse = tousseCounts[i]; + tousseCount = tousse.count; + } + } var basket = new top.Ext.tree.TreeNode({ id : array[0], name : array[1], showname : array[1], - count : array[2], + count : tousseCount, barcode : showBarcode, personInCharge:personInCharge, personInChargeCode:personInChargeCode, @@ -221,6 +267,7 @@ }); var myArray = materialArray[1].split("$"); + var judge = [] ; //判断退出循环设的数组 for ( var i = 0; i < myArray.length; i++) { var tempArray = new Array(); tempArray = myArray[i].split(","); @@ -240,11 +287,25 @@ var showname = tempArray[0]; var type = tempArray[4]; var objectId = tempArray[5]; + var materialCount = tempArray[1]; + //扫描的是不追溯的器械包里面的材料可以重复扫描叠加数量 + if(repeatedly){ + for(var int = 0; int < materialCounts.length; int++) { + var material = materialCounts[int]; + materialCount = material.count; + if(judge.contains(materialCount)){ + continue; + }else{ + judge.push(materialCount); + break; + } + } + } var material = new top.Ext.tree.TreeNode({ id : '', name : tempArray[0], showname : showname, - count : tempArray[1], + count : materialCount, type : type, objectId : objectId, barcode : '', @@ -274,9 +335,11 @@ top.Ext.getCmp('basketTreePanel').collapseAll(); } root.appendChild(basket); - showFrequency(barcode); + showFrequency(barcode,isRetrospectTousse); //重新计算篮筐数量(除了本处新扫描篮筐外,另外在删除篮筐后也应相应减掉已扫描篮筐数量) resetContainerCount(); + //清空判断退出循环的数组 + judge.splice(0,judge.length); }else{ showResult("找不到该篮筐或清洗架"); } @@ -333,15 +396,19 @@ } -function showFrequency(barcode) { +function showFrequency(barcode,isRetrospectTousse) { Ext.Ajax.request( { url : WWWROOT + '/disinfectSystem/washAndDisinfect/washAndDisinfectRecordAction!getWashingFrequencyOfBasket.do', params : { barcode : barcode }, success : function(response, options) { var result = response.responseText; - showResult("此篮筐为第" + result + "次清洗"); + if(!isRetrospectTousse){ + showResult("此篮筐为第" + result + "次清洗"); + }else{ + showResult("扫描的为不追溯的器械包!"); + } }, failure : function(response, options) { var result = Ext.decode(response.responseText); @@ -777,6 +844,7 @@ if(barcode!=null && barcode != ""){ BarcodeTableManager.getBarcodeTypeByBarcode(barcode,function(jsonStr){ var result = Ext.util.JSON.decode(jsonStr); + var isRetrospectTousse = false; //是否是追溯的器械包 if(result !=null && result !=""){ if(result.returnType == 'container'){ if(result.isCurUserDepart != null && result.isCurUserDepart == true){ @@ -797,9 +865,16 @@ var containerBarcode = result.bindingContianer if( !isUndefinedOrNullOrEmpty(containerBarcode) ){ // 标识牌带出篮筐条码 - addPendingWashAndDisinfectBasketToRecord(containerBarcode,barcode); + addPendingWashAndDisinfectBasketToRecord(containerBarcode,barcode,isRetrospectTousse); }else{ - showResult(result.message); + //判断config是否启用清洗不追溯的器械包 + if(sstsConfig.endbleScanTousseFixationBarcode){ + // 不追溯的器械包 + isRetrospectTousse = true ; + addPendingWashAndDisinfectBasketToRecord(barcode,null,isRetrospectTousse); + }else{ + showResult(result.message); + } } }else{ showResult(result.message); @@ -1279,7 +1354,7 @@ washingMachineStore.load(); } } -function addPendingWashAndDisinfectBasketToRecord(barcode,idCardBarcode){ +function addPendingWashAndDisinfectBasketToRecord(barcode,idCardBarcode,isRetrospectTousse){ if(sstsConfig.hasOwnProperty('wrRecordScanPosition') && sstsConfig.wrRecordScanPosition){ if((sstsConfig.hasOwnProperty('haveRinserPosition')) && sstsConfig.haveRinserPosition){ var position = top.Ext.getCmp('position').getValue(); @@ -1289,9 +1364,14 @@ } } } - loadMaterial(barcode,removePendingWashAndDisinfectGoods(barcode,idCardBarcode),idCardBarcode); + loadMaterial(barcode,removePendingWashAndDisinfectGoods(barcode,idCardBarcode),idCardBarcode,isRetrospectTousse); + var type = "篮筐"; + if(isRetrospectTousse ){ + //日志保存清洗的是不追溯的器械包 + type = "器械包"; + } //日志 - buildLogInfo("PC清洗消毒扫描条码:" + barcode + ",条码类型:篮筐"); + buildLogInfo("PC清洗消毒扫描条码:" + barcode + ",条码类型:" + type + ""); } // callback //移除右边表格的数据(今天待审核的数据列表),barcode可能为单个器械包条码,也可能为两个条码中间用分号隔开 @@ -1553,6 +1633,7 @@ //获取篮筐和材料的数据 function getWashAndDisinfectGridData() { var classifyBasketInfo = []; + var washMaterials = []; var root = top.Ext.getCmp('basketTreePanel').root; root.eachChild(function(node){ classifyBasketInfo.push({ @@ -1561,11 +1642,19 @@ personInChargeCode: node.attributes.personInChargeCode, position: node.attributes.position }); + node.eachChild(function(tousseMaterial){ + var type = tousseMaterial.attributes.type + if(type=="材料"){ + washMaterials.push({ + id: " ", + name: tousseMaterial.attributes.name, + amount: tousseMaterial.attributes.count + }); + } + }); }); top.Ext.getCmp('classifyBasketInfo').setValue(JSON.stringify(classifyBasketInfo)); - var materialData = null; - - var washMaterials = []; + var materialData = null; for (var i = 0; i < materialStore.getCount(); i++) { var record = materialStore.getAt(i); washMaterials.push({