Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/barcode/service/BarcodeManager.java =================================================================== diff -u -r14297 -r16092 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/barcode/service/BarcodeManager.java (.../BarcodeManager.java) (revision 14297) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/barcode/service/BarcodeManager.java (.../BarcodeManager.java) (revision 16092) @@ -61,4 +61,11 @@ * @return */ public String getContainerResult(JSONObject json, String barcode, String barcodeEnd, Container container); + + /** + * 通过hql语句获得BarcodeDevice + * @param hql + * @return + */ + public List getBarcodeDeviceBySql(String hql); } Index: ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordForm.js =================================================================== diff -u -r16079 -r16092 --- ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordForm.js (.../sterilizationRecordForm.js) (revision 16079) +++ ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordForm.js (.../sterilizationRecordForm.js) (revision 16092) @@ -203,12 +203,16 @@ }); /** - * 创建节点 + * 创建节点的方法 + * * isParentNode 是否父节点(一般如为篮筐则为true,为器械包则为false) * barcode 条码(篮筐或器械包) * name 名称(篮筐或器械包) + * depart 科室 * type 类型即篮筐或器械包 * insideTousse + * position 位置 + * */ function createNode(isParentNode,barcode,name,depart,type,insideTousse,position){ var node; @@ -244,6 +248,61 @@ } /** + * 统计篮筐和器械包数量 + * + */ +function statisticsTousseAndBasket () { + + var rootNode = sterilizationColumnTree.getRootNode(); //灭菌物品columnTree的根节点 + var basketAmount = 0; //篮筐数量 + var toussBarcodes = ''; //需要进行统计器械包条码的集合每个条码之间用分号分隔 + + var noChild = true; + rootNode.eachChild(function(pNode){ + noChild = false; + if(pNode.attributes.type == '篮筐') { //此节点是篮筐 + basketAmount ++; + pNode.eachChild(function(pNode){ + toussBarcodes += pNode.attributes.barcode + ';'; + }); + } else { //此节点是器械包 + toussBarcodes += pNode.attributes.barcode + ';'; + } + }); + + if (noChild) { + top.Ext.getCmp('typeTotalAmount').setText(''); + return false; + } + + + toussBarcodes = (toussBarcodes == '' ? '' : toussBarcodes.substring(0, toussBarcodes.length - 1)); + + Ext.Ajax.request({ + url : WWWROOT + '/disinfectSystem/sterilization/sterilizationRecordAction!statisticsTousseByType.do', + params : { + toussBarcodes : toussBarcodes //需要进行统计器械包条码的集合每个条码之间用分号分隔 + }, + success : function(response, options) { + var result = Ext.decode(response.responseText); + if(result.success){ + var t_amount = result.tousseAmount; + var f_amount = result.foreignTousseAmount; + var d_amount = result.dressingTousseAmount; + var p_amount = result.proxyTousseAmount; + + top.Ext.getCmp('typeTotalAmount').setText("篮筐:"+basketAmount+" ,器械包:"+t_amount+" ,敷料包:"+d_amount+" ,外来器械包:"+f_amount+", 代理灭菌包:"+p_amount); + } + }, + failure : function(response, options) { + } + }); + + + +} + +/** * 扫描灭菌架条码 */ function loadSterilizationShelf(barcode){ @@ -535,7 +594,7 @@ } for(var i=3;i 0){ @@ -655,20 +714,20 @@ var barcode =array[0]; var exists = false; rootNode.eachChild(function(pNode){ - if(pNode.attributes.barcode == barcode) { + if(pNode.attributes.barcode == barcode) { //此包已经扫描过了 exists = true; return false; } if(pNode.childNodes){ pNode.eachChild(function(cNode){ - if(cNode.attributes.barcode == barcode) { + if(cNode.attributes.barcode == barcode) { //此包已经入审核篮筐的 exists = true; return false; } }); } }); - if(!exists){ + if(!exists){ //此包没有扫描过并且没有入审核篮筐 var name = array[1]; var tousseDepart = str[3];//科室 var parentNode = createNode(true,barcode,name,tousseDepart,'器械包',true,position); @@ -706,7 +765,7 @@ } for(var i=3;i 0){ @@ -765,7 +824,7 @@ speakBasket.addGoods('',array[2],1); alreadyAdd++; }else{ - var existsCNode = false; + var existsCNode = false;//虚拟篮筐的机制 if(currentParentNode.childNodes){ currentParentNode.eachChild(function(cNode){ if(cNode.attributes.barcode == barcode) { @@ -805,6 +864,7 @@ }else{ showResult("您扫描的物品非已审核的器械包或篮筐!"); } + statisticsTousseAndBasket(); //每次成功扫描条码后统计一下器械包的数量和灭菌篮筐的数量 }, failure : function(response, options) { var result = Ext.decode(response.responseText); @@ -879,7 +939,7 @@ } addPendingStarilizationGoodsFromRecord(clickNode); clickNode.remove(); - + statisticsTousseAndBasket(); } //待灭菌物品点击按钮添加至灭菌物品栏 @@ -1761,7 +1821,7 @@ showResult("请输入正确的条码!"); } top.Ext.getCmp('inputBarcode').setValue(""); - }else if(BASKET == result){ //灭菌篮筐 + }else if(BASKET == result){ //灭菌篮筐 1 loadTousseInstanceCheckPosition(barcode,recordID); if(hiddenEndBarcode || currentScanMode == 'single'){ top.Ext.getCmp('inputBarcode').setValue("");//如果使用虚拟篮筐机制,扫描成功后需要清除该文本内容 @@ -1779,7 +1839,7 @@ } loadSterilizationType(barcode,sterilizerName); top.Ext.getCmp('inputBarcode').setValue(""); - }else if(TOUSSEINSTANCE == result){ //器械包实例 + }else if(TOUSSEINSTANCE == result){ //器械包实例2 loadTousseInstanceCheckPosition(barcode,recordID); if(hiddenEndBarcode || currentScanMode == 'single'){ top.Ext.getCmp('inputBarcode').setValue("");//如果使用虚拟篮筐机制,扫描成功后需要清除该文本内容 @@ -1789,7 +1849,7 @@ }else if(POSITION == result){ //位置 loadPositionByBarcode(barcode); top.Ext.getCmp('inputBarcode').setValue(""); - }else if("virtualBasket" == result){ //虚拟篮筐 + }else if("virtualBasket" == result){ //虚拟篮筐3 loadTousseInstance(barcode,recordID,removePendingSterilizationGoods(barcode)); if(hiddenEndBarcode || currentScanMode == 'single'){ top.Ext.getCmp('inputBarcode').setValue("");//如果使用虚拟篮筐机制,扫描成功后需要清除该文本内容 Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java =================================================================== diff -u -r16068 -r16092 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 16068) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 16092) @@ -1231,10 +1231,12 @@ || td.isSterilizationTousse()) { if (tousseInstance.getProxyDisinfection_id() != null) { proxyTousseAmount++; + } else if (TousseDefinition.STR_YES.equals(td.getIsForeignTousse())) { + foreignTousseAmount++; } else { tousseAmount++; } - // 外来器械包 + // 外来器械包(包括但不限于"外来器械包"、"外来器械拆分小包"、"外来器械包当普通器械包") } else if (td.isSplit() || td.isForeignTousse()) { foreignTousseAmount++; } else if (td.isForeignProxyTousse()) { Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/action/SterilizationRecordAction.java =================================================================== diff -u -r16079 -r16092 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/action/SterilizationRecordAction.java (.../SterilizationRecordAction.java) (revision 16079) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/action/SterilizationRecordAction.java (.../SterilizationRecordAction.java) (revision 16092) @@ -1468,5 +1468,66 @@ } } + /** + * 按器械包类型统计器械包的数量 + * + */ + public void statisticsTousseByType() { + + String toussBarcodes = StrutsParamUtils.getPraramValue("toussBarcodes", ""); + if (!StringUtils.isBlank(toussBarcodes)) { + String hql = "where 1=1 and("; + String[] toussBarcodeArray = toussBarcodes.split(";"); + for (String toussBarcode : toussBarcodeArray) { + hql += "po.barcode='" + toussBarcode + "' or "; + } + hql = hql.substring(0, hql.length() - 4) + ")"; + + List list = barcodeManager.getBarcodeDeviceBySql(hql); + + int tousseAmount = 0; //器械包(包括但不限于"内部包"、"自定义器械包"、"灭菌物品") + int foreignTousseAmount = 0; // 外来器械包(包括但不限于"外来器械包"、"外来器械拆分小包"、"外来器械包当普通器械包") + int dressingTousseAmount = 0; //敷料包 + int proxyTousseAmount = 0; //代理灭菌包(包括但不限于"代理灭菌单申请的包"、"外部代理灭菌包") + + for (BarcodeDevice barcodeDevice : list) { + if (barcodeDevice instanceof TousseInstance) { + TousseInstance tousseInstance = (TousseInstance) barcodeDevice; + TousseDefinition td = tousseInstance.getTousseDefinition(); + + if (td.isDressing()) { + if (tousseInstance.getProxyDisinfection_id() != null) { + proxyTousseAmount++; + } else { + dressingTousseAmount++; + } + } else if (td.isInsideTousse() + || td.isCustomTousse() + || td.isSterilizationTousse()) { + if (tousseInstance.getProxyDisinfection_id() != null) { + proxyTousseAmount++; + } else if (TousseDefinition.STR_YES.equals(td.getIsForeignTousse())) { + foreignTousseAmount++; + } else { + tousseAmount++; + } + } else if (td.isSplit() || td.isForeignTousse()) { + foreignTousseAmount++; + } else if (td.isForeignProxyTousse()) { + proxyTousseAmount++; + } + } + } + + JSONObject jSONObj = JSONUtil.buildJsonObject(true, "success"); + jSONObj.put("tousseAmount", tousseAmount); + jSONObj.put("foreignTousseAmount", foreignTousseAmount); + jSONObj.put("dressingTousseAmount", dressingTousseAmount); + jSONObj.put("proxyTousseAmount", proxyTousseAmount); + + StrutsResponseUtils.output(jSONObj); + } + + } } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/barcode/service/BarcodeManagerImpl.java =================================================================== diff -u -r14586 -r16092 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/barcode/service/BarcodeManagerImpl.java (.../BarcodeManagerImpl.java) (revision 14586) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/barcode/service/BarcodeManagerImpl.java (.../BarcodeManagerImpl.java) (revision 16092) @@ -255,4 +255,14 @@ JSONUtil.addProperty(json, "containerName", container.getContainerName()); return JSONUtil.addProperty(json, "containerType", container.getPurpose()).toString(); } + + /** + * 通过hql语句获得BarcodeDevice + * @param hql + * @return + */ + @Override + public List getBarcodeDeviceBySql(String hql) { + return objectDao.findBySql(BarcodeDevice.class.getSimpleName(), hql); + } }