Index: ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordForm.js =================================================================== diff -u -r29869 -r29931 --- ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordForm.js (.../sterilizationRecordForm.js) (revision 29869) +++ ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordForm.js (.../sterilizationRecordForm.js) (revision 29931) @@ -36,11 +36,14 @@ //灭菌炉名称 var sterilizerNameTemp = ''; //全局包实例条码 -var myBarcodes = [] +var myBarcodes = []; +//载入,一键入炉和扫描条码时缓存包实例的所有条码 +var leftFixedBarcodeMap = new Map();//灭菌列表 +var rightFixedBarcodeMap = new Map();//待灭菌列表 +var scanAmountMap = new Map(); +var tousseInstanMap = new Map(); +var leftFixedBarcodeMapBySterilization = new Map(); -//全局固定条码 -var myFixedBarcodes = [] - var SHELF = "灭菌架"; var BASKET = "灭菌筐"; var STERILIZER = "灭菌炉"; @@ -119,45 +122,86 @@ }) }); - +//合并数组并去重 +function mergeArray(arr){ + var map = {},dest = []; + for(var i = 0; i < arr.length; i++){ + var ai = arr[i]; + if(!map[ai.fixedBarcodes]){ + dest.push(ai); + map[ai.fixedBarcodes] = ai; + }else { + for(var j = 0; j < dest.length; j++){ + var dj = dest[j]; + if(dj.fixedBarcodes == ai.fixedBarcodes){ + var amount = parseInt(ai.amount); + dj.amount += amount; + if(dj.amount > 2000){ + dj.amount = 2000; + } + } + } + } + } + return dest; +} /** * 获取灭菌物品 */ function getItemTreeData() { var rootNode = sterilizationColumnTree.getRootNode(); var pTousseStr = ""; + var myBarcodes = []; + leftFixedBarcodeMap.forEach(function(item,i){ + var amount = item; + if(leftFixedBarcodeMapBySterilization.get(i)){ + amount = amount - leftFixedBarcodeMapBySterilization.get(i); + } + if(amount !== 0){ + myBarcodes.push({ + fixedBarcodes:i, + amount:amount + }) + } + }); rootNode.eachChild(function (pNode) { var tousseStr = ""; - if (!pNode.isLeaf()) {//父节点 - pNode.eachChild(function (cNode) { - var cAttr = cNode.attributes; - if (tousseStr.length > 0) { - tousseStr += ";"; - } - tousseStr += (cAttr.barcode); - }); - } + var isFixed = false; var pTousseName = pNode.attributes.barcode; - if (pTousseStr.length > 0) { - pTousseStr += "##"; + for (var i = 0; i < myBarcodes.length; i++) { + if(myBarcodes[i].fixedBarcodes == pTousseName){ + //pTousseStr += myBarcodes[i].fixedBarcodes+',,固定条码,,'+myBarcodes[i].amount; + isFixed = true; + break; + } } - var pType = pNode.attributes.type; - if (pType == '篮筐') { - tousseStr = "篮筐"; - } else { - tousseStr = "器械包"; + if(leftFixedBarcodeMapBySterilization.has(pTousseName)){ + isFixed = true; } - pTousseStr += (pTousseName + ",," + tousseStr); - }); - if (myBarcodes.length > 0) {//全局条码数组(针对不追溯的包) - pTousseStr += "##"; - for (var i = 0; i < myBarcodes.length; i++) { - if (i + 1 == myBarcodes.length) { - pTousseStr += (myBarcodes[i] + ",," + "器械包"); + if(!isFixed){ + if (!pNode.isLeaf()) {//父节点 + pNode.eachChild(function (cNode) { + var cAttr = cNode.attributes; + if (tousseStr.length > 0) { + tousseStr += ";"; + } + tousseStr += (cAttr.barcode); + }); + } + if (pTousseStr.length > 0) { + pTousseStr += "##"; + } + var pType = pNode.attributes.type; + if (pType == '篮筐') { + tousseStr = "篮筐"; } else { - pTousseStr += (myBarcodes[i] + ",," + "器械包##"); + tousseStr = "器械包"; } + pTousseStr += (pTousseName + ",," + tousseStr); } + }); + for (var i = 0; i < myBarcodes.length; i++) { + pTousseStr += "##" + myBarcodes[i].fixedBarcodes+',,固定条码,,'+myBarcodes[i].amount; } return pTousseStr; } @@ -220,7 +264,7 @@ * @param reviewTime 审核时间 * @param sterilingMode 灭菌方式 */ -function createNode(isParentNode, barcode, name, typeForSterilizationStatistics, depart, type, position, amount, reviewTime, stockAmount, sterilingMode) { +function createNode(isParentNode, barcode, name, typeForSterilizationStatistics, depart, type, position, amount, reviewTime, stockAmount, sterilingMode,scanAmount,isTraceable) { var node; if (isParentNode == true) { //创建父节点(灭菌筐节点或者没有入灭菌筐的器械包节点) @@ -253,6 +297,8 @@ node.attributes.reviewTime = reviewTime; node.attributes.sterilingMode = sterilingMode; node.attributes.stockAmount = stockAmount; + node.attributes.scanAmount = scanAmount; + node.attributes.isTraceable = isTraceable; return node; } //加急--创建节点 @@ -295,7 +341,7 @@ return node; } -function createNodeForPendingStarilizationGoods(isParentNode, barcode, name, type, depart, reviewTime, amount, sterilingMode) { +function createNodeForPendingStarilizationGoods(isParentNode, barcode, name, type, depart, reviewTime, amount, sterilingMode,isTraceable,scanAmount,typeForSterilizationStatistics) { var node; if (isParentNode == true) { //创建父节点(灭菌筐节点或者没有入灭菌筐的器械包节点) @@ -323,6 +369,9 @@ node.attributes.reviewTime = reviewTime; node.attributes.objAmount = amount; node.attributes.sterilingMode = sterilingMode; + node.attributes.isTraceable = isTraceable; + node.attributes.scanAmount = scanAmount; + node.attributes.typeForSterilizationStatistics = typeForSterilizationStatistics; return node } @@ -745,59 +794,95 @@ * 针对固定条码多次扫描,累加数量 * @param fixedBarcode */ -function scanFixedBarcode(fixedBarcode) { - formObj.getEl().mask("正在加载,请稍候..."); - Ext.Ajax.request({ - url: WWWROOT + '/disinfectSystem/tousseInstanceAction!scanFixedBarcode.do', - params: { - fixedBarcode: fixedBarcode, - sterilizationRecordId: top.Ext.getCmp('id').getValue(), - myBarcodes: JSON.stringify(myBarcodes)//将数组已json格式传入后台 - }, - waitMsg: '正在处理,请稍候...', - success: function (response, options) { - var result = Ext.decode(response.responseText); - if (result.success) { - var newBarcode = result.message.split(",") - var finalAmount = parseInt(newBarcode.length)//返回的条码数量 - var rootNode = sterilizationColumnTree.getRootNode(); - var isAll = false; - //循环左边的节点 - rootNode.eachChild(function (pNode) { - if (pNode != null && pNode.attributes && pNode.attributes.barcode) { - if (pNode.attributes.barcode == fixedBarcode) { - var name = pNode.attributes.name; - var amount = parseInt(pNode.attributes.amount) + parseInt(finalAmount);//当前数量加上 扫描加载的数量 - if (parseInt(pNode.attributes.amount) == maxScanAmount) { - showResult(name + '已全部加载完毕'); - isAll = true; - return - } - if (amount > maxScanAmount) { - var newAmount = finalAmount - (amount - maxScanAmount); - newBarcode = newBarcode.splice(0, newAmount); - } - } +function scanFixedBarcode(fixedBarcode,isLoadAll) { + var rootNode = sterilizationColumnTree.getRootNode(); + var leftFixedLenght = parseInt(leftFixedBarcodeMap.get(fixedBarcode) || 0); + var rightFixedLenght = parseInt(rightFixedBarcodeMap.get(fixedBarcode) || 0); + var scanAmount = scanAmountMap.get(fixedBarcode); + var finalAmount = 0; + var isLast = false; + var i = 0; + var leftHasBarcode = false; + //循环左边的节点 + rootNode.eachChild(function (pNode) { + if (pNode != null && pNode.attributes && pNode.attributes.barcode) { + if (pNode.attributes.barcode == fixedBarcode && i < 1) { + leftHasBarcode = true; + i++; + if(rightFixedLenght > scanAmount){ + finalAmount = scanAmount; + }else { + finalAmount = rightFixedLenght; + } + if(leftFixedLenght+finalAmount > 2000){ + if(leftFixedLenght == 2000){ + showResult('已超过'+pNode.attributes.name+'的最大待灭菌物品总数2000!'); + isLast = true; + return + }else if(leftFixedLenght > 2000){ + finalAmount = 2000 - pNode.attributes.amount; + leftFixedBarcodeMap.set(fixedBarcode,2000); + rightFixedBarcodeMap.set(fixedBarcode,0); + return + }else { + finalAmount -= (leftFixedLenght+finalAmount)-2000; } - }); - finalAmount = parseInt(newBarcode.length)//返回的条码数量 - if (!isAll) { - myBarcodes = myBarcodes.concat(newBarcode);//将返回的条码添加到全局中 - updateRigthFixedBarcodeAmount(fixedBarcode, finalAmount)//修改右边的数量 - updateLeftFixedBarcodeAmount(fixedBarcode, finalAmount)//修改左边的数量 - statisticsTousseAndBasket();//统计总数量 } - } else { - showResult(result.message, null, sstsConfig.messagePauseTimeOnSterilizationRecordPage); + var newAmount = rightFixedLenght-finalAmount; + leftFixedLenght = leftFixedLenght+parseInt(finalAmount); + leftFixedBarcodeMap.set(fixedBarcode,leftFixedLenght); + rightFixedBarcodeMap.set(fixedBarcode,newAmount); } - formObj.getEl().unmask(); - }, - failure: function (response, options) { - showResult("系统发生异常,请勿提交数据", null, sstsConfig.messagePauseTimeOnSterilizationRecordPage); - - formObj.getEl().unmask(); } }); + if(!leftHasBarcode){ + var tousseInstan = tousseInstanMap.get(fixedBarcode); + var scanAmount = parseInt(tousseInstan.scanAmount) || 0; + var objAmount = parseInt(tousseInstan.objAmount) || 0; + if(!scanAmountMap.has(fixedBarcode)){ + scanAmountMap.set(fixedBarcode,scanAmount) + } + var tousseName = tousseInstan.objName; //器械包名称 + var amount = (scanAmount>objAmount)?objAmount:scanAmount; //每次扫描数量 + amount = isLoadAll?objAmount:amount; + leftFixedBarcodeMap.set(fixedBarcode,amount) + rightFixedBarcodeMap.set(fixedBarcode,objAmount-amount); + var sterilingTypeTemp = top.Ext.getCmp('sterilizationType').getValue(); + var diffTousseNames = ""; + var typeForSterilizationStatistics = tousseInstan.typeForSterilizationStatistics; //器械包类型(用于分类统计) + var tousseBarcode = tousseInstan.objBarcode; //器械包条码 + var sterilingType = tousseInstan.SterilingType || ''; //灭菌程序 + var reviewTime = tousseInstan.reviewTime; //审核时间 + var sterilingMode = tousseInstan.sterilingMode || '';//灭菌方式 + var isTraceable = tousseInstan.isTraceable || ''; + //多个灭菌程序和所选的灭菌程序不同的器械包提示一起提示。同名包只出现一次 + if (sterilingTypeTemp != sterilingType && diffTousseNames.indexOf(tousseName) == -1) { + diffTousseNames += '[' + tousseName + ']'; + } + //添加到灭菌物品视图列表的第一行 + var rootNode = sterilizationColumnTree.getRootNode(); + var position = top.Ext.getCmp('position').getValue(); + var parentNode = createNode(true, tousseBarcode, tousseName, typeForSterilizationStatistics, "", '器械包', position, amount, reviewTime, 0, sterilingMode,scanAmount,isTraceable); + var firstChildNode = rootNode.item(0); + if (firstChildNode == null || firstChildNode == undefined) {//第一行数据为空 + rootNode.appendChild(parentNode); + } else { + rootNode.insertBefore(parentNode, firstChildNode); + } + updateRigthFixedBarcodeAmount(tousseBarcode, amount)//修改右边节点的数量 + var speakBasket = new SpeakBasket(); + speakBasket.addGoods('', tousseName, 1); + + if (diffTousseNames != '') { + showResultWithoutSpeak("器械包" + diffTousseNames + "的灭菌程序和所选的灭菌程序不同!", null, sstsConfig.messagePauseTimeOnSterilizationRecordPage); + } + }else { + if(!isLast){ + updateRigthFixedBarcodeAmount(fixedBarcode, finalAmount)//修改右边的数量 + updateLeftFixedBarcodeAmount(fixedBarcode, finalAmount)//修改左边的数量 + statisticsTousseAndBasket();//统计总数量 + } + } } @@ -848,7 +933,7 @@ * @param barcodeStr 器械包、灭菌篮筐、虚拟篮筐(还有可能是器械包或者虚拟篮筐的条码段) * @param sterilizationRecordId 灭菌记录id */ -function loadTousseInstanceCheckPosition(barcodeStr, sterilizationRecordId) { +function loadTousseInstanceCheckPosition(barcodeStr, sterilizationRecordId,tousseInstan) { if (sstsConfig.hasOwnProperty('stRecordScanPosition') && sstsConfig.stRecordScanPosition) { if ((sstsConfig.hasOwnProperty('haveSterilizerPosition')) && sstsConfig.haveSterilizerPosition) { var position = top.Ext.getCmp('position').getValue(); @@ -859,66 +944,96 @@ } } } + var tousseInstan = tousseInstanMap.get(barcodeStr); //如果扫描固定条码,发现已存在,则累加数量 - if (myFixedBarcodes.indexOf(barcodeStr) != -1) { - scanFixedBarcode(barcodeStr, myBarcodes) + if (tousseInstan && tousseInstan.isTraceable == '否') { + scanFixedBarcode(barcodeStr) } else {//否则当唯一条码处理 - loadTousseInstance(barcodeStr, sterilizationRecordId, false); + loadTousseInstance(barcodeStr, sterilizationRecordId); } - //loadTousseInstance(barcodeStr,sterilizationRecordId,false); } /** * 载入修改右边的数量 * @param fixedBarcode 固定条码 * @param scanAmount 每次扫描数量 */ -function updateRigthFixedBarcodeAmount(fixedBarcode, scanAmount) { - scanAmount = parseInt(scanAmount) +function updateRigthFixedBarcodeAmount(fixedBarcode, scanAmount,updateType) { + var rootNode = pendingSterilizationColumnTree.getRootNode(); var i = 0; - pendingSterilizationColumnTree.getRootNode().eachChild(function (pNode) { + var isTrue = false; + //循环右边的节点 + rootNode.eachChild(function (pNode) { if (pNode != null && pNode.attributes && pNode.attributes.objBarcode) { if (pNode.attributes.objBarcode == fixedBarcode && i < 1) { + isTrue = true; i++ var name = pNode.attributes.objName; var type = pNode.attributes.type; - var depart = pNode.attributes.depart; + var depart = pNode.attributes.depart || ''; var reviewTime = pNode.attributes.reviewTime; - var sterilingMode = pNode.attributes.sterilingMode; + var sterilingMode = pNode.attributes.sterilingMode || ''; var amountRight = parseInt(pNode.attributes.objAmount);//右边的数量 - var rootNode = sterilizationColumnTree.getRootNode(); - pNode.remove();//移除对应右边的节点 - //修改数量 :当前数量-扫描的数量 amountRight-scanAmount - if (amountRight - scanAmount > 0) { - var myNode = createNodeForPendingStarilizationGoods(true, fixedBarcode, name, type, depart, reviewTime, amountRight - scanAmount, sterilingMode) - pendingSterilizationColumnTree.getRootNode().appendChild(myNode); + var isTraceable = pNode.attributes.isTraceable || ''; + var typeForSterilizationStatistics = pNode.attributes.typeForSterilizationStatistics || ''; + var amount; + if(updateType == 'reduce'){ + amount = amountRight + parseInt(scanAmount); + }else { + amount = amountRight - parseInt(scanAmount); } + if (amount > 0) { + var myNode = createNodeForPendingStarilizationGoods(true, fixedBarcode, name, type, depart, reviewTime, amount, sterilingMode,isTraceable,scanAmount,typeForSterilizationStatistics) + setTimeout(function(){ + rootNode.replaceChild(myNode, pNode); + }, 10); + }else { + setTimeout(function(){ + pNode.remove(); + }, 10); + } } } }); + if(!isTrue && updateType == 'reduce'){ + var rootNode = sterilizationColumnTree.getRootNode(); + var j = 0 + //循环左边的节点 + rootNode.eachChild(function (pNode) { + if (pNode != null && pNode.attributes && pNode.attributes.barcode) { + if (pNode.attributes.barcode == fixedBarcode && j < 1) {//找到左边对应的条码 + i++ + var barcode = pNode.attributes.barcode; + var name = pNode.attributes.name; + var sterilingMode = pNode.attributes.sterilingMode; + var isTraceable = pNode.attributes.isTraceable; + var typeForSterilizationStatistics = pNode.attributes.typeForSterilizationStatistics; + var myNode = createNodeForPendingStarilizationGoods(true, barcode, name, "TOUSSE", "", "", scanAmount, sterilingMode,isTraceable,scanAmount,typeForSterilizationStatistics) + pendingSterilizationColumnTree.getRootNode().appendChild(myNode); + } + } + }); + } } function updateLeftFixedBarcodeAmount(fixedBarcode, scanAmount) { var rootNode = sterilizationColumnTree.getRootNode(); - var i = 0 + var i = 0; //循环左边的节点 rootNode.eachChild(function (pNode) { if (pNode != null && pNode.attributes && pNode.attributes.barcode) { - if (pNode.attributes.barcode == fixedBarcode && i < 1) {//找到左边对应的条码 - i++ - var isParentNode = pNode.attributes.isParentNode; + if (pNode.attributes.barcode == fixedBarcode && i < 1) {//找到左边对应的条码 + i++; var typeForSterilizationStatistics = pNode.attributes.typeForSterilizationStatistics; var department = pNode.attributes.depart; var position = pNode.attributes.position; var amount = parseInt(pNode.attributes.amount) + parseInt(scanAmount);//当前数量加上 扫描加载的数量 var reviewTime = pNode.attributes.reviewTime; - var stockAmount = pNode.attributes.stockAmount; var barcode = pNode.attributes.barcode; var name = pNode.attributes.name; - var sterilingMode = pNode.attributes.sterilingMode; - var rootNode = sterilizationColumnTree.getRootNode(); - var parentNode = createNode(true, barcode, name, typeForSterilizationStatistics, department, '器械包', position, amount, reviewTime, 0, sterilingMode); - var firstChildNode = rootNode.item(0); + var sterilingMode = pNode.attributes.sterilingMode || ''; + var isTraceable = pNode.attributes.isTraceable; + var parentNode = createNode(true, barcode, name, typeForSterilizationStatistics, department, '器械包', position, amount, reviewTime, 0, sterilingMode,scanAmount,isTraceable); pNode.remove();//删除修改后的节点数据 rootNode.appendChild(parentNode);//追加修改前的数据 } @@ -954,10 +1069,6 @@ } else if (editType == 2) {//如果是减少了数量,则对应右边要增加 resultAmount = amountRight + editCompleteAmount } - if (resultAmount > 0) { - var myNode = createNodeForPendingStarilizationGoods(true, fixedBarcode, name, type, "", "", resultAmount, sterilingMode) - pendingSterilizationColumnTree.getRootNode().appendChild(myNode); - } } } }); @@ -1063,6 +1174,10 @@ } var position = top.Ext.getCmp('position').getValue(); sterilizationRecordWin.getEl().mask("正在加载中.请稍等...", "x-mask-loading"); + if(isFiexdBarcode){ + loadAllTousseInstanceInfoByFixedBarcode(barcodeStr, sterilizationRecordId,isFiexdBarcode); + return + } Ext.Ajax.request({ url: WWWROOT + '/disinfectSystem/sterilization/sterilizationRecordAction!loadTousseInstanceInfo.do', params: { @@ -1272,64 +1387,8 @@ removePendingSterilizationGoods(barcodeStr) sterilizationRecordWin.getEl().unmask(); } else if (success == 2) { //不追溯器械包(不追溯的包暂不校验灭菌方式是否不一致) - var tousseInstanceArr = resultData.tousseInstanceArr; - var length = tousseInstanceArr.length; - if (length < 1) { - showResult('未找到符合条件的器械包!', null, sstsConfig.messagePauseTimeOnSterilizationRecordPage); - sterilizationRecordWin.getEl().unmask(); - return; - } - - var sterilingTypeTemp = top.Ext.getCmp('sterilizationType').getValue(); - var myBarcodes2 = [] - var myBarcodes3 = [] - var diffTousseNames = ""; - for (var i = 0; i < length; i++) { - var tousseInstan = tousseInstanceArr[i]; - var typeForSterilizationStatistics = tousseInstan.typeForSterilizationStatistics; //器械包类型(用于分类统计) - var tousseBarcode = tousseInstan.tousseBarcode; //器械包条码 - var tousseName = tousseInstan.tousseName; //器械包名称 - var sterilingType = tousseInstan.SterilingType; //灭菌程序 - var department = tousseInstan.department; //科室 - var reviewTime = tousseInstan.reviewTime; //审核时间 - var amount = parseInt(tousseInstan.amount || 0); //每次扫描数量 - var stockAmount = parseInt(tousseInstan.stockAmount);//库存数量 - var sterilingMode = tousseInstan.sterilingMode;//灭菌方式 - if (checkRepeat(tousseBarcode) && !isFiexdBarcode) { - showResult("输入的条码已存在!", null, sstsConfig.messagePauseTimeOnSterilizationRecordPage); - sterilizationRecordWin.getEl().unmask(); - return; - }; - //多个灭菌程序和所选的灭菌程序不同的器械包提示一起提示。同名包只出现一次 - if (sterilingTypeTemp != sterilingType && diffTousseNames.indexOf(tousseName) == -1) { - diffTousseNames += '[' + tousseName + ']'; - } - if (i == 0) { - myBarcodes3[0] = tousseInstan.tousseBarcode;//临时存放固定条码 - //添加到灭菌物品视图列表的第一行 - var rootNode = sterilizationColumnTree.getRootNode(); - var parentNode = createNode(true, tousseBarcode, tousseName, typeForSterilizationStatistics, "", '器械包', position, amount, reviewTime, stockAmount, sterilingMode); - var firstChildNode = rootNode.item(0); - if (firstChildNode == null || firstChildNode == undefined) {//第一行数据为空 - rootNode.appendChild(parentNode); - } else { - rootNode.insertBefore(parentNode, firstChildNode); - } - speakBasket.addGoods('', tousseName, 1); - Array.prototype.push.apply(myFixedBarcodes, myBarcodes3);//将本次的固定条码存入全局数组 - - updateRigthFixedBarcodeAmount(tousseBarcode, amount)//修改右边节点的数量 - - } else { - myBarcodes2[i - 1] = tousseInstan.tousseBarcode //本次的包实例条码 - } - } - if (diffTousseNames != '') { - showResultWithoutSpeak("器械包" + diffTousseNames + "的灭菌程序和所选的灭菌程序不同!", null, sstsConfig.messagePauseTimeOnSterilizationRecordPage); - } - Array.prototype.push.apply(myBarcodes, myBarcodes2);//将所有的包实例条码存入全局条码中 - speakContent = sterilizationColumnTree.getRootNode().text; - sterilizationRecordWin.getEl().unmask(); + sterilizationRecordWin.getEl().mask("正在加载中.请稍等...", "x-mask-loading"); + loadAllTousseInstanceInfoByFixedBarcode(barcodeStr, sterilizationRecordId); } else if (success == 3) { //首尾器械包,since2015-10-27 var tousseInstanceArr = resultData.tousseInstanceArr; var length = tousseInstanceArr.length; @@ -1594,6 +1653,9 @@ rootNode.eachChild(function (pNode) { if (pNode.attributes.barcode == newObj.barcode) { var amount = parseInt(pNode.attributes.amount) + parseInt(newObj.amount); + if(amount > 2000){ + amount = 2000; + } var newNode = createNode(true, newObj.barcode, newObj.name, newObj.typeForSterilizationStatistics, newObj.depart, '器械包', position, amount, newObj.reviewTime, 0, newObj.sterilingMode); rootNode.replaceChild(newNode, pNode); return true; @@ -1737,8 +1799,11 @@ var sterilingMode = pNode.attributes.sterilingMode; var amount = parseInt(pNode.attributes.objAmount);//右边的数量 var rootNode = sterilizationColumnTree.getRootNode(); + var isTraceable = pNode.attributes.isTraceable; + var scanAmount = pNode.attributes.scanAmount; + var typeForSterilizationStatistics = pNode.attributes.typeForSterilizationStatistics; pNode.remove();//移除对应右边的节点 - var myNode = createNodeForPendingStarilizationGoods(true, barcode, name, type, depart, reviewTime, finalAmount, sterilingMode) + var myNode = createNodeForPendingStarilizationGoods(true, barcode, name, type, depart, reviewTime, finalAmount, sterilingMode,isTraceable,scanAmount,typeForSterilizationStatistics) pendingSterilizationColumnTree.getRootNode().appendChild(myNode); } } @@ -1765,9 +1830,12 @@ var sterilingMode = pNode.attributes.sterilingMode; var amount = pNode.attributes.objAmount;//右边的数量 var rootNode = sterilizationColumnTree.getRootNode(); + var isTraceable = pNode.attributes.isTraceable; + var scanAmount = pNode.attributes.scanAmount; + var typeForSterilizationStatistics = pNode.attributes.typeForSterilizationStatistics; //var finalAmount = parseInt(amount)+parseInt(objAmount) pNode.remove();//移除对应右边的节点 - var myNode = createNodeForPendingStarilizationGoods(true, barcode, name, type, depart, reviewTime, parseInt(objAmount), sterilingMode) + var myNode = createNodeForPendingStarilizationGoods(true, barcode, name, type, depart, reviewTime, parseInt(objAmount), sterilingMode,isTraceable,scanAmount,typeForSterilizationStatistics) pendingSterilizationColumnTree.getRootNode().appendChild(myNode); } } @@ -1904,7 +1972,7 @@ * @param sterilingMode 灭菌方式 * @returns */ -function createPendingSterilizationGoodsNode(objBarcode, objName, objAmount, type, depart, reviewTime, sterilingMode) { +function createPendingSterilizationGoodsNode(objBarcode, objName, objAmount, type, depart, reviewTime, sterilingMode,isTraceable,scanAmount,typeForSterilizationStatistics) { var node; if (type == 'BASKET') { //创建父节点 @@ -1932,6 +2000,9 @@ node.attributes.type = type; node.attributes.reviewTime = reviewTime; node.attributes.sterilingMode = sterilingMode; + node.attributes.isTraceable = isTraceable; + node.attributes.scanAmount = scanAmount; + node.attributes.typeForSterilizationStatistics = typeForSterilizationStatistics; return node; } @@ -2061,54 +2132,42 @@ } /** - * 只针对固定条码:点击删除图标后事件 + * 只针对固定条码:删除固定条码 */ function clickDeleteIcon(clickNode) { - var i = 0; var objName = clickNode.attributes.name; - var type = clickNode.attributes.type; - var depart = clickNode.attributes.depart; var reviewTime = clickNode.attributes.reviewTime; var sterilingMode = clickNode.attributes.sterilingMode; var amount = parseInt(clickNode.attributes.amount); - var delAmount = clickNode.attributes.amount - var fixedBarcode = clickNode.attributes.barcode - var stockAmount = parseInt(clickNode.attributes.stockAmount); + var fixedBarcode = clickNode.attributes.barcode; + var isTraceable = clickNode.attributes.isTraceable; + var scanAmount = clickNode.attributes.scanAmount; + var typeForSterilizationStatistics = clickNode.attributes.typeForSterilizationStatistics; var node = ''; - delTousseInsAmount(delAmount, fixedBarcode)//从全局数组中删除 - myFixedBarcodes.removeByValue(fixedBarcode);//在全局条码中移除该固定条码 pendingSterilizationColumnTree.getRootNode().eachChild(function (pNode) { //移除某一个节点后,再遍历其他节点得到的是undefined if (pNode != null && pNode.attributes && pNode.attributes.objBarcode) { - if (pNode.attributes.objBarcode == fixedBarcode && i < 1) { - i++ - var name2 = pNode.attributes.objName; - var type2 = pNode.attributes.type; - var depart2 = pNode.attributes.depart; - var reviewTime2 = pNode.attributes.reviewTime; + if (pNode.attributes.objBarcode == fixedBarcode) { var amountRight = parseInt(pNode.attributes.objAmount);//右边的数量 - var rootNode2 = sterilizationColumnTree.getRootNode(); removePendingSterilizationGoods(fixedBarcode)//删除右边的数据 - node = createPendingSterilizationGoodsNode(fixedBarcode, objName, amount + amountRight, 'TOUSSE', '', '', sterilingMode) - } else { - - if (stockAmount < 0 || isNaN(stockAmount)) { - stockAmount = 0; - } - node = createPendingSterilizationGoodsNode(fixedBarcode, objName, parseInt(stockAmount) + parseInt(amount), 'TOUSSE', '', '', sterilingMode) + node = createPendingSterilizationGoodsNode(fixedBarcode, objName, amount + amountRight, 'TOUSSE', '', '', sterilingMode,isTraceable,scanAmount,typeForSterilizationStatistics) } } }); if (!pendingSterilizationColumnTree.getRootNode().childNode) { pendingSterilizationColumnTree.getRootNode().childNode = []; } if (node == '') { - node = createPendingSterilizationGoodsNode(fixedBarcode, objName, amount, 'BASKET', '', reviewTime, sterilingMode); + node = createPendingSterilizationGoodsNode(fixedBarcode, objName, amount, 'TOUSSE', '', reviewTime, sterilingMode,isTraceable,scanAmount,typeForSterilizationStatistics); pendingSterilizationColumnTree.getRootNode().appendChild(node); } else { pendingSterilizationColumnTree.getRootNode().appendChild(node); } clickNode.remove();//将当前节点移除 + sterilizationRecordWin.getEl().unmask(); + if(leftFixedBarcodeMap.get(fixedBarcode)){ + leftFixedBarcodeMap.set(fixedBarcode,0); + } statisticsTousseAndBasket(); } @@ -2162,7 +2221,151 @@ } } +//获取固定条码的所有实例条码 +function loadAllTousseInstanceInfoByFixedBarcode(barcode,sterilizationRecordId,isFiexdBarcode){ + Ext.Ajax.request({ + url: WWWROOT + '/disinfectSystem/sterilization/sterilizationRecordAction!loadAllTousseInstanceInfoByFixedBarcode.do', + params: { + barcode: barcode, + sterilizationRecordId:sterilizationRecordId + }, + waitMsg: '正在处理,请稍候...', + success: function (response, options) { + var result = Ext.decode(response.responseText); + if (result.success) { + var tousseInstanceArr = result.tousseInstanceArr || []; + var length = tousseInstanceArr.length; + var speakBasket = new SpeakBasket(); + if(result.success == -1){ + showResult(result.failureCause, null, sstsConfig.messagePauseTimeOnSterilizationRecordPage); + sterilizationRecordWin.getEl().unmask(); + return; + } + if (length < 1) { + showResult('未找到符合条件的器械包!', null, sstsConfig.messagePauseTimeOnSterilizationRecordPage); + sterilizationRecordWin.getEl().unmask(); + return; + } + var scanAmount = result.scanAmount || 0; + if(!scanAmountMap.has(barcode)){ + scanAmountMap.set(barcode,scanAmount) + } + var tousseInstan = result.fixedBarcodeInfo; + var tousseName = tousseInstan.tousseName; //器械包名称 + var amount = (parseInt(scanAmount)>parseInt(length))?parseInt(length):parseInt(scanAmount); //每次扫描数量 + leftFixedBarcodeMap.set(barcode,amount) + rightFixedBarcodeMap.set(barcode,length-amount); + var sterilingTypeTemp = top.Ext.getCmp('sterilizationType').getValue(); + var diffTousseNames = ""; + var typeForSterilizationStatistics = tousseInstan.typeForSterilizationStatistics; //器械包类型(用于分类统计) + var tousseBarcode = tousseInstan.tousseBarcode; //器械包条码 + var sterilingType = tousseInstan.SterilingType; //灭菌程序 + var reviewTime = tousseInstan.reviewTime; //审核时间 + var stockAmount = parseInt(tousseInstan.stockAmount);//库存数量 + var sterilingMode = tousseInstan.sterilingMode;//灭菌方式 + //多个灭菌程序和所选的灭菌程序不同的器械包提示一起提示。同名包只出现一次 + if (sterilingTypeTemp != sterilingType && diffTousseNames.indexOf(tousseName) == -1) { + diffTousseNames += '[' + tousseName + ']'; + } + //添加到灭菌物品视图列表的第一行 + var rootNode = sterilizationColumnTree.getRootNode(); + var position = top.Ext.getCmp('position').getValue(); + if(!isFiexdBarcode){ + var parentNode = createNode(true, tousseBarcode, tousseName, typeForSterilizationStatistics, "", '器械包', position, amount, reviewTime, stockAmount, sterilingMode); + var firstChildNode = rootNode.item(0); + if (firstChildNode == null || firstChildNode == undefined) {//第一行数据为空 + rootNode.appendChild(parentNode); + } else { + rootNode.insertBefore(parentNode, firstChildNode); + } + }else { + updateLeftFixedBarcodeAmount(tousseBarcode, amount)//修改右边节点的数量 + } + updateRigthFixedBarcodeAmount(tousseBarcode, amount)//修改右边节点的数量 + speakBasket.addGoods('', tousseName, 1); + + if (diffTousseNames != '') { + showResultWithoutSpeak("器械包" + diffTousseNames + "的灭菌程序和所选的灭菌程序不同!", null, sstsConfig.messagePauseTimeOnSterilizationRecordPage); + } + }else { + if(result.failureCause){ + showResult(result.failureCause, null, sstsConfig.messagePauseTimeOnSterilizationRecordPage); + } + } + sterilizationColumnTree.getEl().unmask(); + sterilizationRecordWin.getEl().unmask(); + statisticsTousseAndBasket();//统计总数量 + }, + failure: function (response, options) { + showResult("后台运行异常,请稍候再试...", null, sstsConfig.messagePauseTimeOnSterilizationRecordPage); + + formObj.getEl().unmask(); + } + }); +} + +//修改灭菌中的物品数量时修改状态为待灭菌 +function substractFixedBarcodeGoodsOfSterilizationRecord(id,barcode,amount,isDelAll){ + Ext.Ajax.request({ + url: WWWROOT + '/disinfectSystem/sterilization/sterilizationRecordAction!substractFixedBarcodeGoodsOfSterilizationRecord.do', + params: { + fixedBarcode: barcode, + id:id, + subAmount:amount + }, + waitMsg: '正在处理,请稍候...', + success: function (response, options) { + if(isDelAll){ + leftFixedBarcodeMapBySterilization.delete(barcode) + } + } + }) +} + /** + * 修改leftFixedBarcodeMap和rightFixedBarcodeMap + * @param {固定条码} fixedBarcode + * @param {最新的数量} newAmount + * @param {修改后的数量} oldAmount + * @param {增加或减少的类型} type + */ +function updateLeftAndRightMap(thiz,newAmount,oldAmount,type){ + var editNode = thiz.editNode; + var barcode = editNode.attributes.barcode; + var amount; + if(type == 'add'){ + leftFixedBarcodeMap.set(barcode,newAmount); + amount = parseInt(newAmount-oldAmount); + if(rightFixedBarcodeMap.get(barcode)){ + var amount1 = rightFixedBarcodeMap.get(barcode); + rightFixedBarcodeMap.set(barcode,amount1-amount); + } + }else { + leftFixedBarcodeMap.set(barcode,newAmount); + amount = parseInt(oldAmount-newAmount); + if(rightFixedBarcodeMap.get(barcode)){ + var amount1 = rightFixedBarcodeMap.get(barcode); + rightFixedBarcodeMap.set(barcode,amount1+amount); + } + } + var name = editNode.attributes.name; + var typeForSterilizationStatistics = editNode.attributes.typeForSterilizationStatistics; + var department = editNode.attributes.depart; + var position = editNode.attributes.position; + var reviewTime = editNode.attributes.reviewTime; + var stockAmount = editNode.attributes.stockAmount; + var sterilingMode = editNode.attributes.sterilingMode; + var isTraceable = editNode.attributes.isTraceable; + var scanAmount = editNode.attributes.scanAmount; + var rootNode = sterilizationColumnTree.getRootNode(); + var parentNode = createNode(true, barcode, name, typeForSterilizationStatistics, department, '器械包', position, newAmount, reviewTime, stockAmount, sterilingMode,scanAmount,isTraceable); + editNode.remove();//删除修改后的节点数据 + rootNode.appendChild(parentNode);//追加修改前的数据 + updateRigthFixedBarcodeAmount(barcode, amount,type)//修改右边的数量 + sterilizationRecordWin.getEl().unmask();//关闭进度条 +} + +/** * 新增或者修改 * @param id 灭菌记录的id * @param currentStatus 灭菌记录的状态 @@ -2287,6 +2490,19 @@ }, load: function (_this, node, response) { statisticsTousseAndBasket(); + if(response.responseText == ''){ + sterilizationColumnTree.getEl().unmask(); + return; + } + var result = Ext.decode(response.responseText); + if(result && result.length > 0){ + for(var i=0;i oldAmount) {//如果是增加数量 - if (newAmount > 2000 && rigthAmount < 0) { - showResult('已超过' + name + '包的最大待灭菌物品总数2000'); + if(!rightFixedBarcodeMap.get(fixedBarcode) || rightFixedBarcodeMap.get(fixedBarcode) == 0){ + var sumAmount = leftFixedBarcodeMap.get(fixedBarcode); + showResult('已超过'+attr.name+'的最大待灭菌物品总数'+sumAmount+'!'); sterilizationRecordWin.getEl().unmask(); return false; } if (newAmount > 2000) { newAmount = parseInt(rigthAmount) + parseInt(oldAmount); - newValue = newAmount; + newAmount = newAmount>2000?2000:newAmount; } - addTousseInsAmount(attr.barcode, newAmount - oldAmount, thiz, newValue, oldValue) + updateLeftAndRightMap(thiz,newAmount,oldAmount,'add'); } else if (newAmount < oldAmount) { - delTousseInsAmount(oldAmount - newAmount, attr.barcode) + updateLeftAndRightMap(thiz,newAmount,oldAmount,'reduce'); } statisticsTousseAndBasket(); @@ -2368,16 +2583,13 @@ if (isClickDel) { //点击删除图标 if (!clickNode.attributes.isParentNode) { delChildNode(clickNode); - } else if (myFixedBarcodes.indexOf(clickNode.attributes.barcode) != -1) {//该条码为固定条码 + } else if (leftFixedBarcodeMap.get(clickNode.attributes.barcode)) {//该条码为固定条码 sterilizationRecordWin.getEl().mask("正在删除.请稍等...", "x-mask-loading"); clickDeleteIcon(clickNode); } else { deleteGiveBackColumnTreeItem(clickNode); } setIsClickDel(0); - - //统计 - statisticsTousseAndBasket(); } }); sterilizationColumnTree.on("load", function (node, response) { @@ -2507,71 +2719,81 @@ //先将节点的条码存储到集合变量中 var waitSterilingBarcodeArray = []; + var fixedBarcodeArr = []; //查询节点的数据是否存在,如果存在则进行循环 Ext.each(rootNode.childNodes, function (cNode) { - waitSterilingBarcodeArray.push(cNode.attributes["objBarcode"]); + if (cNode != null && cNode.attributes && cNode.attributes.objBarcode) { + var objBarcode = cNode.attributes.objBarcode; + if(cNode.attributes["isTraceable"] == '是'){ + waitSterilingBarcodeArray.push(objBarcode); + }else { + if(leftFixedBarcodeMap.get(objBarcode)){ + var len = leftFixedBarcodeMap.get(objBarcode); + var sum = parseInt(len)+parseInt(rightFixedBarcodeMap.get(objBarcode)); + leftFixedBarcodeMap.set(objBarcode,sum); + }else { + var len = leftFixedBarcodeMap.get(objBarcode); + leftFixedBarcodeMap.set(objBarcode,len); + } + rightFixedBarcodeMap.delete(objBarcode); + fixedBarcodeArr.push(objBarcode); + } + } }); - top.Ext.getCmp('btnBatchAddTousse').disable(); - // formObj.getEl().mask("正在加载,请稍候..."); - Ext.Ajax.timeout = 90000; - // pendingSterilizationColumnTree.getEl().mask("正在加载中.请稍等...", "x-mask-loading"); - Ext.Ajax.request({ - url: WWWROOT + '/disinfectSystem/sterilization/sterilizationRecordAction!batchAddToRecord.do', - params: { - sterilizationRecordId: top.Ext.getCmp('id').getValue(), - barcodes: waitSterilingBarcodeArray.join(";"), - loadTousseNamesInBasket: true, //是否要加载篮筐里的器械包名称 - //sterilizationRecordId : sterilizationRecordId, //灭菌记录id - checkProxyDisinfection: 'yes', //是否需要检查代理灭菌是否已录入代理灭菌单 - saveBarcode: myBarcodes.join(';'), //此次扫描之前已经扫描的条码集合 - myBarcode: getAlreadyScanBarcodes() //此次扫描之前已经扫描的固定条码集合 - }, - waitMsg: '正在处理,请稍候...', - success: function (response, options) { - top.Ext.getCmp('btnBatchAddTousse').enable(); - var result = Ext.decode(response.responseText); - if (result.success) { - var fixedBarodeJsonArray = result.fixedBarodeJsonArray - var barodeJsonArray = result.barodeJsonArray - - //如果存在固定条码,则缓存在页面上 - if (fixedBarodeJsonArray && barodeJsonArray) { - for (var f = 0; f < fixedBarodeJsonArray.length; f++) { - if (myFixedBarcodes.indexOf(fixedBarodeJsonArray[f]) == -1) { - myFixedBarcodes.push(fixedBarodeJsonArray[f]) - } + if(waitSterilingBarcodeArray.length == 0){ + for (var i = 0; i < fixedBarcodeArr.length; i++) { + scanFixedBarcode(fixedBarcodeArr[i],true); + } + } + if(waitSterilingBarcodeArray.length > 0){ + Ext.Ajax.timeout = 90000; + pendingSterilizationColumnTree.getEl().mask("正在加载中.请稍等...", "x-mask-loading"); + Ext.Ajax.request({ + url: WWWROOT + '/disinfectSystem/sterilization/sterilizationRecordAction!batchAddToRecord.do', + params: { + sterilizationRecordId: top.Ext.getCmp('id').getValue(), + barcodes: waitSterilingBarcodeArray.join(";"), + loadTousseNamesInBasket: true, //是否要加载篮筐里的器械包名称 + checkProxyDisinfection: 'yes' //是否需要检查代理灭菌是否已录入代理灭菌单 + }, + waitMsg: '正在处理,请稍候...', + success: function (response, options) { + top.Ext.getCmp('btnBatchAddTousse').enable(); + var result = Ext.decode(response.responseText); + if (result.success) { + //判断是否含有植入物 + var includeImplant = result.includeImplant; + + if (includeImplant == '是') { + showResult('篮筐内物品含有植入物,请做生物监测', null, sstsConfig.messagePauseTimeOnSterilizationRecordPage); } - for (var b = 0; b < barodeJsonArray.length; b++) { - myBarcodes.push(barodeJsonArray[b]) + //将篮筐与器械包加载到灭菌列表中 + loadContainerAndTousseToGrid(result.datas); + for (var i = 0; i < waitSterilingBarcodeArray.length; i++) { + //移除今天审核待灭菌物品的数据 + removePendingSterilizationGoods(waitSterilingBarcodeArray[i]); } + for (var i = 0; i < fixedBarcodeArr.length; i++) { + scanFixedBarcode(fixedBarcodeArr[i],true); + } + pendingSterilizationColumnTree.getEl().unmask(); + top.Ext.getCmp("btnBatchAddTousse").enable(); + top.Ext.getCmp('saveBtn').enable(); + top.Ext.getCmp('save2').enable(); + top.Ext.getCmp('monitorBtn').enable(); + top.Ext.getCmp('saveAndNewBtn').enable(); + } else { + showResult(result.message, null, sstsConfig.messagePauseTimeOnSterilizationRecordPage); } - - //判断是否含有植入物 - var includeImplant = result.includeImplant; - - if (includeImplant == '是') { - showResult('篮筐内物品含有植入物,请做生物监测', null, sstsConfig.messagePauseTimeOnSterilizationRecordPage); - } - - //将篮筐与器械包加载到灭菌列表中 - loadContainerAndTousseToGrid(result.datas); - - for (var i = 0; i < waitSterilingBarcodeArray.length; i++) { - //移除今天审核待灭菌物品的数据 - removePendingSterilizationGoods(waitSterilingBarcodeArray[i]); - } - top.Ext.getCmp("btnBatchAddTousse").disable(); - } else { - showResult(result.message, null, sstsConfig.messagePauseTimeOnSterilizationRecordPage); + formObj.getEl().unmask(); + }, + failure: function (response, options) { + showResult("后台运行异常,请稍候再试...", null, sstsConfig.messagePauseTimeOnSterilizationRecordPage); + + formObj.getEl().unmask(); } - formObj.getEl().unmask(); - }, - failure: function (response, options) { - showResult("后台运行异常,请稍候再试...", null, sstsConfig.messagePauseTimeOnSterilizationRecordPage); - - formObj.getEl().unmask(); - } - }); + }); + } } }], columns: pendingSterilizationColumnTreeColumnArray, @@ -2584,6 +2806,10 @@ beforeload: function (treeLoader, node) { pendingSterilizationColumnTree.getEl().mask("数据重新加载中,请稍等!"); treeLoader.baseParams.sterilizerNameTemp = top.Ext.getCmp("sterilizerName").getValue(); + top.Ext.getCmp('saveBtn').disable(); + top.Ext.getCmp('save2').disable(); + top.Ext.getCmp('monitorBtn').disable(); + top.Ext.getCmp('saveAndNewBtn').disable(); treeLoader.baseParams.ownGroupTemp = ownGroup; }, load: function (treeLoader, node, response) { @@ -2593,6 +2819,23 @@ } else { top.Ext.getCmp("btnBatchAddTousse").enable(); } + var result = Ext.decode(response.responseText); + for(var i=0;i 0) { - sterilizationColumnTree.getEl().mask("数据重新加载中,请稍等!"); + sterilizationColumnTree.getEl().mask("数据重新加载中,请稍等!") Ext.Ajax.request({ url: WWWROOT + '/disinfectSystem/sterilization/sterilizationRecordAction!getBarcodeType.do', params: { @@ -4141,6 +4388,11 @@ items: [formObj] }); sterilizationRecordWin.show(); + leftFixedBarcodeMap = new Map();//灭菌列表 + rightFixedBarcodeMap = new Map();//待灭菌列表 + tousseInstanMap = new Map(); + scanAmountMap = new Map(); + leftFixedBarcodeMapBySterilization = new Map(); //灭菌记录 Ext.Ajax.timeout = 180000; formObj.form.load({