Index: ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationMonitoring.js =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationMonitoring.js (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationMonitoring.js (revision 19303) @@ -0,0 +1,92 @@ +/** + * 保存灭菌监测(物理、化学、生物监测) + * @returns {Boolean} + */ +function saveMonitor(){ + if (!formObj.getForm().isValid()) { + showResult('请正确填写表单各值'); + return false; + } + + var id =top.Ext.getCmp('id').getValue(); + var physicsResult =top.Ext.getCmp('physicsResult').getValue(); + var chemistryResult =top.Ext.getCmp('chemistryResult').getValue(); + var biologyResult =top.Ext.getCmp('biologyResult').getValue(); + var sterilizerName = top.Ext.getCmp('sterilizerName').getValue(); + var cycleCounter = top.Ext.getCmp('cycleCounter').getValue(); + var remark = top.Ext.getCmp('remark').getValue(); + var biologicalMonitoringStartDate = top.Ext.getCmp('biologicalMonitoringStartDate').getValue(); + var biologicalMonitoringEndDate = top.Ext.getCmp('biologicalMonitoringEndDate').getValue(); + var biologicalMonitoringStartDateString = Ext.util.Format.date(biologicalMonitoringStartDate, 'Y-m-d H:i'); + var biologicalMonitoringEndDateString = Ext.util.Format.date(biologicalMonitoringEndDate, 'Y-m-d H:i'); + var monitorUser = top.Ext.getCmp('monitorUser').getValue(); + var monitorChecker = top.Ext.getCmp('monitorChecker').getValue(); + var monitorAuditor = top.Ext.getCmp('monitorAuditor').getValue(); + var endDate = top.Ext.getCmp('endDate').getValue(); + + if (sstsConfig.monitorCheckerMustFill) { //保存时,需要填写监测核对员 + if (sstsConfig.needMonitorAuditor) { //如果有监测审核员也要填写 + if (biologyResult != '无' && (!biologicalMonitoringStartDateString || !biologicalMonitoringEndDateString || !monitorUser || !monitorChecker || !monitorAuditor)) { + showResult('生物监测开始时间,结束时间,监测员,监测核对员,监测审核员,都要填写!'); + return false; + } + } else { + if (biologyResult != '无' && (!biologicalMonitoringStartDateString || !biologicalMonitoringEndDateString || !monitorUser || !monitorChecker)) { + showResult('生物监测开始时间,结束时间,监测员,监测核对员,都要填写!'); + return false; + } + } + } else { + if (biologyResult != '无' && (!biologicalMonitoringStartDateString || !biologicalMonitoringEndDateString || !monitorUser)) { + showResult('生物监测开始时间,结束时间,监测员,都要填写!'); + return false; + } + } + + if (biologicalMonitoringStartDateString) { + if (biologicalMonitoringStartDate < endDate) { + showResult('生物监测开始时间不能小于灭菌结束时间!'); + return false; + } + } + if (biologicalMonitoringStartDateString && biologicalMonitoringEndDateString) { + if (biologicalMonitoringStartDate > biologicalMonitoringEndDate) { + showResult('生物监测开始时间不能大于结束时间!'); + return false; + } + } + + // 验证循环计数器是否已经存在,一个灭菌炉的一个循环次数应是唯一的。 + { + DWREngine.setAsync(false); + var sign = true; + var isDefineDeviceInterface = true; + SterilizationRecordTableManager.isDefineDeviceInterface(sterilizerName,function(result){ + isDefineDeviceInterface = result; + }); + if( isDefineDeviceInterface ) + { + SterilizationRecordTableManager.isSterilizerCycleCounterExist(id,sterilizerName,cycleCounter, + function(result) { + sign = result; + }); + DWREngine.setAsync(true); + if (sign) { + showResult("灭菌炉的循环次数已存在,保存失败!"); + return false; + } + }else + { + top.Ext.getCmp('cycleCounter').setValue(0); + } + } + SterilizationRecordTableManager.saveMonitorResult(id,physicsResult,chemistryResult,biologyResult,cycleCounter,biologicalMonitoringStartDateString,biologicalMonitoringEndDateString,monitorUser,monitorChecker,monitorAuditor,remark,function(result){ + if(result){ + sterilizationRecordWin.close(); + showResult('保存成功'); + grid.dwrReload(); + }else{ + showResult("保存失败!"); + } + }); +} \ No newline at end of file Index: ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordView.js =================================================================== diff -u -r19160 -r19303 --- ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordView.js (.../sterilizationRecordView.js) (revision 19160) +++ ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordView.js (.../sterilizationRecordView.js) (revision 19303) @@ -560,6 +560,9 @@ handler : function(){ sterilizationFailure(grid,statusFailure); sterilizerStatus = statusFailure; + if( typeof(interruptWin) != 'undefined' && interruptWin != null ){ + interruptWin.close(); + } } }, { text : '取消', @@ -954,7 +957,7 @@ title : '灭菌列表', tbar : tbar, pageSize : 20, - defaultSortField : 'startDate', + defaultSortField : 'id', defaultSortDirection : 'DESC', isCheckboxSelectionModel : true, rememberSelected : false, Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/container/service/ReviewedBasketManager.java =================================================================== diff -u -r16904 -r19303 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/container/service/ReviewedBasketManager.java (.../ReviewedBasketManager.java) (revision 16904) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/container/service/ReviewedBasketManager.java (.../ReviewedBasketManager.java) (revision 19303) @@ -24,7 +24,7 @@ public List getAllReviewedBasket(String taskGroup); /** - * 根据科室编码,获取所有待灭菌的审核篮筐(即:状态为灭菌装载,而且没有灭过菌) + * 根据科室编码,获取所有待灭菌的审核篮筐(即:状态为灭菌装载,而且没有灭过菌,注意此方法没有校验篮筐里面器械包的状态为“已审核”,调用者自行校验) * @param departCode 科室编码 * @return */ Index: ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordView.jsp =================================================================== diff -u -r18756 -r19303 --- ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordView.jsp (.../sterilizationRecordView.jsp) (revision 18756) +++ ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordView.jsp (.../sterilizationRecordView.jsp) (revision 19303) @@ -1,129 +1,123 @@ +<%@page contentType="text/html; charset=UTF-8"%> <%@page import="com.forgon.disinfectsystem.entity.customform.formdefinition.FormDefinition"%> <%@page import="com.forgon.disinfectsystem.entity.qualitymonitoringmanager.qualitymonitoringconfig.QualityMonitoringDefinition"%> <%@page import="com.forgon.disinfectsystem.entity.basedatamanager.container.Container"%> <%@page import="com.forgon.directory.vo.LoginUserData"%> -<%@ page contentType="text/html; charset=UTF-8"%> -<%@ include file="/common/taglibs.jsp"%> <%@page import="com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord"%> <%@page import="com.forgon.disinfectsystem.entity.basedatamanager.imagefilemanager.ImageFile"%> -<%@page import="com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition" %> - - - -灭菌记录 - - - - +<%@page import="com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition"%> +<%@include file="/common/taglibs.jsp"%> +<%@include file="/common/includeExtJsAndCss.jsp"%> <% LoginUserData userData = AcegiHelper.getLoginUser(); request.setAttribute("userName",userData.getUserFullName()); request.setAttribute("orgUnitCoding",userData.getOrgUnitCodingFromSupplyRoomConfig()); %> -<%@ include file="/common/includeExtJsAndCss.jsp"%> - - - - - - - - - - - - - - - - - - - - - - + + + + 灭菌记录 + + + <%--引入一些工具类 --%> + + + + + + + + + + <%--引入dwr框架 --%> + + + + + + + + + + <%--引入自己的js --%> + + + <%--完成灭菌 --%> + <%--灭菌监测 --%> + <%--完成查看灭菌记录图片 --%> + <%--填写质量监测 --%> + - - - - - - -
- - - - - -
- - - - - -
-
-
+ + +
+ + + + + +
+ + + + + +
+
+
\ No newline at end of file Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManager.java =================================================================== diff -u -r19173 -r19303 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManager.java (.../SterilizationRecordManager.java) (revision 19173) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManager.java (.../SterilizationRecordManager.java) (revision 19303) @@ -196,4 +196,11 @@ * @return */ public List getWaitSterileGoods(String sterilizerName); + + /** + * 判别器械包的类型(此方法只适用于灭菌那里对器械包类型的分类统计) + * @param tousseInstance 器械包实例 + * @return + */ + public String getTypeForSterilizationStatistics(TousseInstance tousseInstance); } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/container/service/ReviewedBasketManagerImpl.java =================================================================== diff -u -r19158 -r19303 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/container/service/ReviewedBasketManagerImpl.java (.../ReviewedBasketManagerImpl.java) (revision 19158) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/container/service/ReviewedBasketManagerImpl.java (.../ReviewedBasketManagerImpl.java) (revision 19303) @@ -138,11 +138,6 @@ return basketReturnList; } - /** - * 根据科室编码,获取所有待灭菌的审核篮筐(即:状态为灭菌装载,而且没有灭过菌) - * @param departCode 科室编码 - * @return - */ @Override public List getDepartAllReviewedBasket(String departCode) { String sql = "select po,s from " Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/action/SterilizationRecordAction.java =================================================================== diff -u -r18447 -r19303 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/action/SterilizationRecordAction.java (.../SterilizationRecordAction.java) (revision 18447) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/action/SterilizationRecordAction.java (.../SterilizationRecordAction.java) (revision 19303) @@ -379,88 +379,69 @@ } /** - * 加载待灭菌物品,对于已经在其它单中灭过菌的器械包(或篮筐),将不再显示出来。以防止器械包在其它单灭菌中或已灭菌还能再次进行重复灭菌操作 + * 加载灭菌记录的灭菌物品 * @since 2015-11-24 * @author SYF * @return */ public String loadSterilizationGoods() { JSONArray jsonArray = new JSONArray(); - // 器械包 - List tousseInstanceList = sterilizationRecord - .getTousseInstanceList(); + // 没入篮筐的器械包 + List tousseInstanceList = sterilizationRecord.getTousseInstanceList(); if(CollectionUtils.isNotEmpty(tousseInstanceList)){ for (TousseInstance tousse : tousseInstanceList) { //如果为聚合包内的包实例,则过滤掉 if(tousse.getComboTousseInstanceId() != null){ continue; } - // 外来器械包去掉下划线ID String tousseName = tousse.getTousseName(); JSONObject jsonObj = new JSONObject(); + jsonObj.put("isParentNode", true); jsonObj.put("barcode", tousse.getBarcode()); jsonObj.put("name", tousseName); - jsonObj.put("position", tousse.getSterilizerPosition()); - jsonObj.put("reviewTime", ForgonDateUtils.safelyFormatDate(tousse.getReviewTime(), Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM, "")); - jsonObj.put("type", "器械包"); + jsonObj.put("typeForSterilizationStatistics", sterilizationRecordManager.getTypeForSterilizationStatistics(tousse)); jsonObj.put("depart", StringUtils.defaultString(tousse.getDepart(), "")); + jsonObj.put("type", "器械包"); + jsonObj.put("position", tousse.getSterilizerPosition()); + jsonObj.put("amount", 1); jsonObj.put("uiProvider", "col"); - jsonObj.put("cls", "master-task"); - jsonObj.put("insideTousse", true); + jsonObj.put("iconCls", "task"); jsonObj.put("leaf", true); jsonArray.add(jsonObj); } } // 容器 - List reviewedBasketList = sterilizationRecord - .getReviewedBaskets(); + List reviewedBasketList = sterilizationRecord.getReviewedBaskets(); for (ReviewedBasket reviewedBasket : reviewedBasketList) { try { - Set tousseInstanceList2 = reviewedBasket - .getTousseInstances(objectDao); + Set tousseInstanceList2 = reviewedBasket.getTousseInstances(objectDao); - boolean ignoreTousseInstance = false; - //判断该篮筐的全部器械包是否已在其它状态为灭单中或已灭菌的灭菌单中,即该篮筐的全部器械包状态如果为灭菌中或已灭菌,则忽略该篮筐及器械包实例 - for(TousseInstance tousse : tousseInstanceList2){ - TousseInstance tousseInstance = tousseInstanceManager.getTousseInstanceById(String.valueOf(tousse.getId())); - if(tousseInstance != null && - (TousseInstance.STATUS_STERILING.equals(tousseInstance.getStatus()) || - TousseInstance.STATUS_STERILED.equals(tousseInstance.getStatus()))){ - ignoreTousseInstance = true; - break; - } - } - - if(ignoreTousseInstance == true){ - //continue;//暂时不需要,否则会导致查看灭菌中或已灭菌的灭菌单中的器械显示不出来 - } JSONObject jsonObj = new JSONObject(); + jsonObj.put("isParentNode", true); jsonObj.put("barcode", reviewedBasket.getContainer().getBarcode()); jsonObj.put("name", reviewedBasket.getContainer().getContainerName()); - jsonObj.put("position", reviewedBasket.getSterilizerPosition()); - jsonObj.put("reviewTime", ""); jsonObj.put("type", "篮筐"); + jsonObj.put("position", reviewedBasket.getSterilizerPosition()); + jsonObj.put("amount", 1); jsonObj.put("uiProvider", "col"); - jsonObj.put("cls", "master-task"); jsonObj.put("iconCls", "task-folder"); JSONArray tousseInBasketArray = new JSONArray(); List tousseInstanceResultList = new ArrayList(); tousseInstanceResultList.addAll(tousseInstanceList2); Collections.sort(tousseInstanceResultList); for (TousseInstance tousseInstance : tousseInstanceResultList) { - // 外来器械包去掉下划线ID String tousseName = tousseInstance.getTousseName(); JSONObject tousseObj = new JSONObject(); + tousseObj.put("isParentNode", false); tousseObj.put("barcode", tousseInstance.getBarcode()); tousseObj.put("name", tousseName); - tousseObj.put("reviewTime", ForgonDateUtils.safelyFormatDate(tousseInstance.getReviewTime(), Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM, "")); - tousseObj.put("type", "器械包"); + tousseObj.put("typeForSterilizationStatistics", sterilizationRecordManager.getTypeForSterilizationStatistics(tousseInstance)); tousseObj.put("depart", StringUtils.defaultString(tousseInstance.getDepart(), "")); + tousseObj.put("type", "器械包"); + tousseObj.put("amount", 1); tousseObj.put("uiProvider", "col"); - tousseObj.put("cls", "master-task"); - tousseObj.put("insideTousse", false); tousseObj.put("leaf", true); tousseObj.put("iconCls", "task"); tousseInBasketArray.add(tousseObj); @@ -472,17 +453,7 @@ e.printStackTrace(); } } - - HttpServletResponse response = StrutsParamUtils.getResponse(); - response.setCharacterEncoding("UTF-8"); - PrintWriter out; - try { - out = response.getWriter(); - out.println(jsonArray.toString()); - out.close(); - } catch (IOException e) { - e.printStackTrace(); - } + StrutsResponseUtils.output(jsonArray); return null; } @@ -670,16 +641,15 @@ * 1、扫描失败: * {success:-1,failureCause:失败原因} * 2、单个器械包: - * {success:0,tousseBarcode:器械包条码,tousseName:器械包名称,SterilingType:装配时选的灭菌程序,department:科室,includeImplant:是否为含有植入物的外来器械包} + * {success:0,tousseBarcode:器械包条码,tousseName:器械包名称,typeForSterilizationStatistics:器械包类型(注意区别于真正的类型),SterilingType:装配时选的灭菌程序,department:科室,includeImplant:是否为含有植入物的外来器械包} * 3、单个容器(单个灭菌筐或虚拟篮筐): - * {success:1,containerName:容器名称,tousseInstanceArr:[{tousseBarcode:器械包条码,tousseName:器械包名称,SterilingType:装配时选的灭菌程序,department:科室},...]} + * {success:1,containerName:容器名称,tousseInstanceArr:[{tousseBarcode:器械包条码,tousseName:器械包名称,typeForSterilizationStatistics:器械包类型(注意区别于真正的类型),SterilingType:装配时选的灭菌程序,department:科室},...]} * 4、不追溯器械包: - * {success:2,tousseInstanceArr:[{tousseBarcode:器械包条码,tousseName:器械包名称,SterilingType:装配时选的灭菌程序,department:科室},...]} + * {success:2,tousseInstanceArr:[{tousseBarcode:器械包条码,tousseName:器械包名称,typeForSterilizationStatistics:器械包类型(注意区别于真正的类型),SterilingType:装配时选的灭菌程序,department:科室},...]} * 5、首尾器械包: - * {success:3,tousseInstanceArr:[{tousseBarcode:器械包条码,tousseName:器械包名称,SterilingType:装配时选的灭菌程序,department:科室},...]} + * {success:3,tousseInstanceArr:[{tousseBarcode:器械包条码,tousseName:器械包名称,typeForSterilizationStatistics:器械包类型(注意区别于真正的类型),SterilingType:装配时选的灭菌程序,department:科室},...]} * 6、首尾虚拟篮筐: - * {success:4,tousseInstanceArr:[{virtualBasketSeqNum:虚拟篮筐编号,tousseBarcode:器械包条码,tousseName:器械包名称,SterilingType:装配时选的灭菌程序,department:科室},...]} - * + * {success:4,tousseInstanceArr:[{virtualBasketSeqNum:虚拟篮筐编号,tousseBarcode:器械包条码,tousseName:器械包名称,typeForSterilizationStatistics:器械包类型(注意区别于真正的类型),SterilingType:装配时选的灭菌程序,department:科室},...]} */ public void loadTousseInstanceInfo() { String barcodeStr = StrutsParamUtils.getPraramValue("barcode", ""); @@ -708,10 +678,9 @@ jsonObj.put("success", -1); jsonObj.put("failureCause", "您扫描的是消毒物品条码,该物品不需要灭菌!"); } else { // 其它物品(器械包、敷料包、外来器械、自定义器械包等) - //判断器械包是否可以灭菌(即:器械包状态为“已审核”,“已灭菌”,或者是不追溯的器械包) + //判断扫描的器械包是否可以灭菌(即:器械包状态为“已审核”,或者扫描的是固定条码) boolean isReviewed = StringUtils.equals(status,TousseInstance.STATUS_REVIEWED) - || StringUtils.equals(status,TousseInstance.STATUS_STERILED) - || tousseInstance.getUnTraceableTousse(); + || tousseInstance.getTousseFixedBarcode(); //验证是否是代理灭菌(代理灭菌器械包状态已装配就可以灭菌) if (!isReviewed) { if (!StringUtils.equals(tousseInstance.getOrgUnitCoding(), AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig())) { @@ -741,7 +710,7 @@ //从toussesOfToday中删除已经扫描了的器械包集合 List alreadyLoadedTousses = new ArrayList(); if (StringUtils.isNotBlank(savedBarcodes)) { - String[] savedBarcodeArray = savedBarcodes.split(","); + String[] savedBarcodeArray = savedBarcodes.split(";"); for (int i = 0; i < savedBarcodeArray.length; i++) { String savedBarcodeStr = savedBarcodeArray[i]; TousseInstance tousseInstance2 = todayToussesMap.get(savedBarcodeStr); @@ -769,6 +738,7 @@ JSONObject temp = new JSONObject(); temp.put("tousseBarcode", tousseInstance1.getBarcode()); temp.put("tousseName", tousseInstance1.getTousseName()); + temp.put("typeForSterilizationStatistics", sterilizationRecordManager.getTypeForSterilizationStatistics(tousseInstance1)); temp.put("SterilingType", tousseInstance1.getSterilingType()); temp.put("department", StringUtils.defaultString(tousseInstance1.getDepart(), "")); tousseInstanceArr.add(temp); @@ -791,6 +761,7 @@ jsonObj.put("success", 0); jsonObj.put("tousseBarcode", tousseInstance.getBarcode()); jsonObj.put("tousseName", tousseInstance.getTousseName()); + jsonObj.put("typeForSterilizationStatistics", sterilizationRecordManager.getTypeForSterilizationStatistics(tousseInstance)); jsonObj.put("SterilingType", tousseInstance.getSterilingType()); jsonObj.put("department", StringUtils.defaultString(tousseInstance.getDepart(), "")); jsonObj.put("includeImplant", includeImplant); @@ -846,6 +817,7 @@ JSONObject temp = new JSONObject(); temp.put("tousseBarcode", tousseInstance.getBarcode()); temp.put("tousseName", tousseInstance.getTousseName()); + temp.put("typeForSterilizationStatistics", sterilizationRecordManager.getTypeForSterilizationStatistics(tousseInstance)); temp.put("SterilingType", tousseInstance.getSterilingType()); temp.put("department", StringUtils.defaultString(tousseInstance.getDepart(), "")); tousseInstanceArr.add(temp); @@ -870,15 +842,13 @@ //判断是否有已装入至灭菌篮筐或虚拟篮筐的器械包实例,如果有,则返回失败并进行提示 for(int i = 0; i < tousseInstanceList.size(); i++){ tousseInstance = (TousseInstance)tousseInstanceList.get(i); - if(tousseInstance != null && tousseInstance.getReviewBasket_id() != null){ - jsonObj.put("success", -1); - jsonObj.put("failureCause", "发现有已装入到篮筐的器械包,对于已装入到篮筐的器械包只能通过扫描篮筐进行灭菌!"); - break; - }else if (tousseInstance != null + if (tousseInstance != null //这里 + && !DatabaseUtil.isPoIdValid(tousseInstance.getReviewBasket_id()) && StringUtils.isNotBlank(tousseInstance.getTousseName())) { JSONObject temp = new JSONObject(); temp.put("tousseBarcode", tousseInstance.getBarcode()); temp.put("tousseName", tousseInstance.getTousseName()); + temp.put("typeForSterilizationStatistics", sterilizationRecordManager.getTypeForSterilizationStatistics(tousseInstance)); temp.put("SterilingType", tousseInstance.getSterilingType()); temp.put("department", StringUtils.defaultString(tousseInstance.getDepart(), "")); tousseInstanceArr.add(temp); @@ -896,6 +866,7 @@ temp.put("virtualBasketSeqNum", tousseInstance.getVirtualBasketSeqNum()); temp.put("tousseBarcode", tousseInstance.getBarcode()); temp.put("tousseName", tousseInstance.getTousseName()); + temp.put("typeForSterilizationStatistics", sterilizationRecordManager.getTypeForSterilizationStatistics(tousseInstance)); temp.put("SterilingType", tousseInstance.getSterilingType()); temp.put("department", StringUtils.defaultString(tousseInstance.getDepart(), "")); tousseInstanceArr.add(temp); @@ -916,379 +887,28 @@ } StrutsResponseUtils.output(jsonObj); } -// /** -// * 扫描灭菌物品条码 -// * params:barcode 器械包或灭菌篮筐条码或虚拟篮筐,或器械包条码段、虚拟篮筐编号段,用分号分隔 -// * saveBarcode 已显示在columnGrid中的条码 -// * 响应消息格式(success分别对应-1:失败、0:单个器械包、1:单个容器(单个灭菌框或虚拟篮筐)、2:不追溯器械包、3:首尾器械包、4:首尾虚拟篮筐) -// * 1. failure,-1,您扫描的是消毒物品条码,该物品不需要灭菌 -// * 2. success,0, [条码]:[名称]:[灭菌程序]:[科室]:true -// * 3. success,1, ,[篮筐]:[条码]:[名称]:[灭菌程序]:true -// * 4. success,2, [条码]:[名称]:[灭菌程序]:[科室]:true -// * 5. success,3, [条码]:[名称]:[灭菌程序]:[科室]:true ,[条码]:[名称]:[灭菌程序]:[科室]:true -// * 6. success,4, ,[篮筐]:[条码]:[名称]:[灭菌程序]:true ,[篮筐]:[条码]:[名称]:[灭菌程序]:true -// * -// * -// * 上面解释的六种响应消息格式和下面代码不一致,对下面代码的响应格式补充说明 -// * 响应消息格式(success分别对应-1:失败、0:单个器械包、1:单个容器(单个灭菌框或虚拟篮筐)、2:不追溯器械包、3:首尾器械包、4:首尾虚拟篮筐) -// * 1. failure,-1,失败原因 -// * 2. success,0,[器械包名称],[灭菌程序],[科室名称][,true,在科室供应室那里配置的超大、重外来器械灭菌方式/,true,false,/,false,][,是/,否] -// * 3. success,1,审核篮筐名称 【,[器械包条码]:[器械包名称]:[灭菌程序]:[科室名称][:true:在科室供应室那里配置的超大、重外来器械灭菌方式/:true:/:false:]】 ....... -// * 4. success,2 【,[器械包条码]:[器械包名称]:[灭菌程序]:[科室名称][:true:在科室供应室那里配置的超大、重外来器械灭菌方式/:true:/:false:]】 ....... -// * 5. success,3, 【,[器械包条码]:[器械包名称]:[灭菌程序]:[科室名称][:true:在科室供应室那里配置的超大、重外来器械灭菌方式/:true:/:false:]】 ....... -// * 6. success,4, 【,[虚拟篮筐编号]:[器械包条码]:[器械包名称]:[灭菌程序]:[科室名称][:true:在科室供应室那里配置的超大、重外来器械灭菌方式/:true:/:false:]】 ....... -// * -// */ -// public void loadTousseInstanceInfo() { -// String barcodeStr = StrutsParamUtils.getPraramValue("barcode", ""); -// barcodeStr = barcodeStr.replaceAll("\r\n", ""); -// -// String savedBarcodes = StrutsParamUtils.getPraramValue("saveBarcode", ""); -// -// String result = null; -// if (StringUtils.isNotBlank(barcodeStr)) { -// try { -// String[] barcodeArray = barcodeStr.split(";"); -// String barcode = barcodeArray[0]; -// BarcodeDevice barcodeDevice = barcodeManager.getBarcodeByBarcode(barcode); -// -// if(barcodeArray.length > 1){//按首尾两个条码进行过滤 -// Map map = barcodeManager.getTousseInstanceListByRange(barcode, barcodeArray[1], TousseInstance.STATUS_REVIEWED); -// -// if(map != null && "tousseInstanceSuccess".equals(map.get("returnType"))){ -// List tousseInstanceList = (List)map.get("result"); -// if(CollectionUtils.isNotEmpty(tousseInstanceList)){ -// Collections.sort(tousseInstanceList);//增加按id降序排序 -// TousseInstance tousseInstance = null; -// if(barcodeDevice instanceof TousseInstance){ -// result = "success,3,"; -// //判断是否有已装入至灭菌篮筐或虚拟篮筐的器械包实例,如果有,则返回失败并进行提示 -// for(int i = 0;i < tousseInstanceList.size();i++){ -// tousseInstance = (TousseInstance)tousseInstanceList.get(i); -// if(tousseInstance != null && tousseInstance.getReviewBasket_id() != null){ -// result = "success,-1,发现有已装入到篮筐的器械包,对于已装入到篮筐的器械包只能通过扫描篮筐进行灭菌"; -// break; -// }else if (tousseInstance != null -// && StringUtils.isNotBlank(tousseInstance.getTousseName())) { -// String tousseName = tousseInstance.getTousseName(); -// -// result += "," -// + tousseInstance.getBarcode() -// + ":" + tousseName -// + ":" + tousseInstance.getSterilingType() -// + ":" + StringUtils.defaultString(tousseInstance.getDepart(), ""); -// // 超重、超大外来器械用配置的灭菌方式 -// if (TousseDefinition.BIG_PACKAGE_TRUE.equals( -// tousseInstance.getTousseDefinition().getIsBigPackage())) { -// String bigPackage = supplyRoomConfigManager.getSystemParamsObj().getBigPackageSterilizerType(); -// if (StringUtils.isNotBlank(bigPackage)) { -// result += ":true:" + bigPackage; -// } else { -// result += ":true:"; -// } -// } else { -// result += ":false:"; -// } -// } -// } -// }else if(barcodeDevice instanceof Container){ -// result = "success,4,"; -// for(int i = 0;i < tousseInstanceList.size();i++){ -// tousseInstance = (TousseInstance)tousseInstanceList.get(i); -// if (tousseInstance != null -// && StringUtils.isNotBlank(tousseInstance.getTousseName())) { -// String tousseName = tousseInstance.getTousseName(); -// -// result += "," -// + tousseInstance.getVirtualBasketSeqNum() -// + ":"+ tousseInstance.getBarcode() -// + ":" + tousseName -// + ":" + tousseInstance.getSterilingType() -// + ":" + StringUtils.defaultString(tousseInstance.getDepart(), ""); -// // 超重、超大外来器械用配置的灭菌方式 -// if (TousseDefinition.BIG_PACKAGE_TRUE.equals( -// tousseInstance.getTousseDefinition().getIsBigPackage())) { -// String bigPackage = supplyRoomConfigManager.getSystemParamsObj().getBigPackageSterilizerType(); -// if (StringUtils.isNotBlank(bigPackage)) { -// result += ":true:" + bigPackage; -// } else { -// result += ":true:"; -// } -// } else { -// result += ":false:"; -// } -// } -// } -// } -// result += ""; -// }else{ -// result = "success,-1,未找到符合条件的器械包"; -// } -// }else{ -// result = "success,-1,未找到符合条件的器械包"; -// } -// }else{ -// //仅按条码/篮筐(首)的条件过滤,原逻辑保持不变 -// if (barcodeDevice != null -// && barcodeDevice instanceof TousseInstance) { -// TousseInstance tousseInstance = (TousseInstance) barcodeDevice; -// -// String status = tousseInstance.getStatus(); -// TousseDefinition tousseDefinition = tousseInstance.getTousseDefinition(); -// String tousseType = tousseDefinition.getTousseType(); -// -// -// // 扫描的物品是消毒物品并且是否灭菌不为是时,提示不需要灭菌(应对省医高水平消毒的需求进行调整 since 2016-01-22 SYF) -// if (TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(tousseType) -// && !TousseDefinition.STR_YES.equals(tousseDefinition.getIsSterile())){ -// result = "failure,-1,您扫描的是消毒物品条码,该物品不需要灭菌!"; -// } else { // 其它物品(器械包、敷料包、外来器械、自定义器械包等) -// boolean isReviewed = StringUtils.equals(status,TousseInstance.STATUS_REVIEWED) || StringUtils.equals(status,TousseInstance.STATUS_STERILED); -// -// if (tousseInstance.getUnTraceableTousse()) { -// isReviewed = true; -// } -// -// // 验证是否是代理灭菌(代理灭菌器械包状态已装配就可以灭菌) -// if (!isReviewed) { -// if (!StringUtils.equals(tousseInstance.getOrgUnitCoding(), AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig())) { -// if (status.equals(TousseInstance.STATUS_PACKED)) { -// isReviewed = true; -// } -// } -// } -// if (isReviewed) { -// boolean isOutBasket = tousseInstanceManager.isTousseInstanceOutOfBasket(tousseInstance.getId()); -// -// if (isOutBasket) { //没入灭菌篮筐 -// if (tousseInstance.getUnTraceableTousse()) { // 不追溯的器械包(含普通器械包、敷料包、外部代理灭菌包) -// String name = tousseDefinition.getName(); -// String orgUnitCode = AcegiHelper.getLoginUser().getCurrentOrgUnitCode(); -// Integer scanAmount = tousseDefinition.getScanAmount(); -// -// List toussesOfToday = tousseInstanceManager.getTodayReviewedTousseInstanceByNameAndOrgUnitCode(orgUnitCode, name); -// -// Map todayToussesMap = new HashMap(); -// for (TousseInstance tousse : toussesOfToday) { -// todayToussesMap.put(tousse.getBarcode(), tousse); -// } -// -// // 已经装载了的器械包集合 -// List alreadyLoadedTousses = new ArrayList(); -// if (StringUtils.isNotBlank(savedBarcodes)) { -// String[] savedBarcodeArray = savedBarcodes.split(","); -// for (int i = 0; i < savedBarcodeArray.length; i++) { -// String savedBarcodeStr = savedBarcodeArray[i]; -// TousseInstance tousseInstance2 = todayToussesMap.get(savedBarcodeStr); -// alreadyLoadedTousses.add(tousseInstance2); -// } -// } -// if (CollectionUtils.isNotEmpty(alreadyLoadedTousses)) { -// for (TousseInstance temp : alreadyLoadedTousses) { -// toussesOfToday.remove(temp); -// } -// } -// -// if (CollectionUtils.isNotEmpty(toussesOfToday)) { -// result = "success,2"; -// -// int toussesAmount = toussesOfToday.size(); -// // 设置的数量大于0时才做限制 -// if(scanAmount != null && scanAmount.intValue() > 0){ -// if (toussesAmount > scanAmount) { -// toussesAmount = scanAmount; -// } -// } -// -// for (int i = 0; i < toussesAmount; i++) { -// TousseInstance tousseInstance1 = toussesOfToday.get(i); -// -// String tousseName = tousseInstance1.getTousseName(); -// String myTousseType = tousseInstance1.getTousseDefinition().getTousseType(); -// -// result += ("," -// + tousseInstance1.getBarcode() -// + ":" + tousseName -// + ":" + tousseInstance1.getSterilingType()) -// + ":" + StringUtils.defaultString(tousseInstance.getDepart(), ""); -// -// -// -// if (TousseDefinition.BIG_PACKAGE_TRUE.equals( -// tousseInstance1.getTousseDefinition().getIsBigPackage())) { // 超重、超大外来器械用配置的灭菌方式 -// String bigPackage = supplyRoomConfigManager.getSystemParamsObj().getBigPackageSterilizerType(); //获取在科室供应室配置那里配置的超大、重外来器械灭菌方式 -// if (StringUtils.isNotBlank(bigPackage)) { -// result += ":true:" + bigPackage; -// } else { -// result += ":true:"; -// } -// } else { -// result += ":false:"; -// } -// } -// } else { -// result = "failure,-1,加载完毕或者没有需要灭菌的包!"; -// } -// } else { // 需要追溯的器械包 -// Integer includeImplant = tousseDefinition.getIncludeImplant(); -// String tousseName = tousseInstance.getTousseName(); // 外来器械包去掉下划线ID -// -// result = "success,0," + tousseName -// + "," + tousseInstance.getSterilingType() -// + "," + StringUtils.defaultString(tousseInstance.getDepart()," "); -// -// // 超大、超重拆分器械包要用特定的灭菌方式 -// if (TousseDefinition.PACKAGE_TYPE_SPLIT.equals(tousseType) -// && TousseDefinition.BIG_PACKAGE_TRUE.equals(tousseDefinition.getIsBigPackage())) { -// result += ",true"; -// String bigPackageSterileType = supplyRoomConfigManager.getSystemParamsObj().getBigPackageSterilizerType(); -// if (StringUtils.isNotBlank(bigPackageSterileType)) { -// result += ("," + bigPackageSterileType); -// } else { -// result += ",false,"; -// } -// } else { -// result += ",false,"; -// } -// -// if ((TousseDefinition.PACKAGE_TYPE_FOREIGN.equals(tousseType) -// || TousseDefinition.PACKAGE_TYPE_SPLIT.equals(tousseType)) -// && TousseDefinition.INCLUDE_IMPLANT == includeImplant) { //外来器械包有植入物的话要做生物监测 -// result += ",是"; -// } else { -// result += ",否"; -// } -// } -// } else { -// result = "failure,-1,无法添加,因为器械包已放入篮筐,请通过扫描篮筐进行添加"; -// } -// -// //检查代理灭菌是否已录入代理灭菌单 -// String checkProxyDisinfection = StrutsParamUtils.getPraramValue("checkProxyDisinfection", ""); -// if (StringUtils.isNotBlank(checkProxyDisinfection)) { -// String userOrgUnitCode = AcegiHelper.getLoginUser().getCurrentOrgUnitCode(); -// if (tousseInstance.getOrgUnitCoding() != null -// && !tousseInstance.getOrgUnitCoding().equals(userOrgUnitCode) -// && tousseInstance.getProxyDisinfection_id() == null) { -// result = "failure,-1,无法添加,因为器械包未录入代理灭菌单"; -// } -// } -// } else { -// result = "failure,-1,无法添加,此器械包没有经过审核"; -// } -// } -// } else if (barcodeDevice != null -// && barcodeDevice instanceof Container) { -// // TODO 当篮筐正在灭菌中,还是能够读取到的bug -// Container container = (Container) barcodeDevice; -// if (container.getContainerType().equals(Container.CONTAINERTYPE_BASKET)) { -// //是否要加载篮筐里的器械包名称 -// String loadTousseNamesInBasket = StrutsParamUtils.getPraramValue("loadTousseNamesInBasket", ""); -// result = "success,1," + container.getContainerName(); -// -// if (StringUtils.isNotBlank(loadTousseNamesInBasket)) { -// Set toussesInBasket = null; -// -// if(Container.CONTAINER_PURPOSE_DISINFECTION.equals(container.getPurpose())){ //如果为灭菌筐,按原有方式查询 -// toussesInBasket = tousseInstanceManager.getReviewedTousseInstanceByBasket(barcode); -// }else if(Container.CONTAINER_PURPOSE_VIRTUAL.equals(container.getPurpose())){ //如果为虚拟篮筐,则按范围区间方式查询,begin和end都为条码的参数 -// Map map = barcodeManager.getTousseInstanceListByRange(barcode, barcode, TousseInstance.STATUS_REVIEWED); -// if(map != null && map.get("result") != null){ -// toussesInBasket = new HashSet(); -// toussesInBasket.addAll((List)map.get("result")); -// } -// } -// if (toussesInBasket != null && toussesInBasket.size() > 0) { -// List tousseList = new ArrayList(); -// tousseList.addAll(toussesInBasket); -// Collections.sort(tousseList);//按id降序排序 -// for (TousseInstance tousseInstance : tousseList) { -// if (tousseInstance != null -// && StringUtils.isNotBlank(tousseInstance.getTousseName())) { -// String tousseName = tousseInstance.getTousseName(); -// String tousseType = tousseInstance.getTousseDefinition().getTousseType(); -// -// result += "," -// + tousseInstance.getBarcode() -// + ":" + tousseName -// + ":" + tousseInstance.getSterilingType() -// + ":" + StringUtils.defaultString(tousseInstance.getDepart(), ""); -// // 超重、超大外来器械用配置的灭菌方式 -// if (TousseDefinition.BIG_PACKAGE_TRUE.equals( -// tousseInstance.getTousseDefinition().getIsBigPackage())) { -// String bigPackage = supplyRoomConfigManager.getSystemParamsObj().getBigPackageSterilizerType(); -// if (StringUtils.isNotBlank(bigPackage)) { -// result += ":true:" + bigPackage; -// } else { -// result += ":true:"; -// } -// } else { -// result += ":false:"; -// } -// } -// } -// } -// } -// } -// } -// } -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } -// try { -// StrutsParamUtils.getResponse().setCharacterEncoding("UTF-8"); -// StrutsParamUtils.getResponse().getWriter().print(result); -// } catch (IOException e) { -// e.printStackTrace(); -// } -// } /** - * 一键入炉请求action - * request请求参数barcodes:器械包、灭菌筐或虚拟篮筐的条码或条码串,多个条码采用分号分隔 - * response响应参数格式: - * { - success:true, - data:[{ - dataList:[{ - type:"器械包/篮筐",barcode:"",name:"",position:"", depart:'',reviewTime:"",isUrgent:"",sterilingType:"",isBigPackage:"",bigPackageSterilizerType:"",includeImplant:"", - dataList:[ - {depart:'',barcode:"",name:"",isUrgent:"",reviewTime:"",sterilingType:"",isBigPackage:"",bigPackageSterilizerType:"",includeImplant:""}, - {depart:'',barcode:"",name:"",isUrgent:"",reviewTime:"",sterilingType:"",isBigPackage:"",bigPackageSterilizerType:"",includeImplant:""}, - ********************************************************************, - {depart:'',barcode:"",name:"",isUrgent:"",reviewTime:"",sterilingType:"",isBigPackage:"",bigPackageSterilizerType:"",includeImplant:""} - ] - }] - }, - { - dataList:[{ - type:"器械包/篮筐",barcode:"",name:"",position:"", depart:'',reviewTime:"",isUrgent:"",sterilingType:"",isBigPackage:"",bigPackageSterilizerType:"",includeImplant:"", - dataList:[ - {depart:'',barcode:"",name:"",isUrgent:"",reviewTime:"",sterilingType:"",isBigPackage:"",bigPackageSterilizerType:"",includeImplant:""}, - {depart:'',barcode:"",name:"",isUrgent:"",reviewTime:"",sterilingType:"",isBigPackage:"",bigPackageSterilizerType:"",includeImplant:""}, - ********************************************************************, - {depart:'',barcode:"",name:"",isUrgent:"",reviewTime:"",sterilingType:"",isBigPackage:"",bigPackageSterilizerType:"",includeImplant:""} - ] - }] - }] - } - 或{success:false,message:"***"} + * 一键入炉请求action. + * 器械包节点 = {type:"器械包",barcode:"器械包条码",name:"器械包名称",typeForSterilizationStatistics:"器械包类型(注意区别于真正的类型)",sterilingType:"灭菌程序",depart:"科室"} + * 篮筐节点 = {type:"篮筐",barcode:"篮筐条码",name:"篮筐名称",dataList:[{barcode:"器械包条码",name:"器械包名称",typeForSterilizationStatistics:"器械包类型(注意区别于真正的类型)",sterilingType:"灭菌程序",depart:"科室"}...]} + * response响应参数格式: + * 加载成功: + * {success:true,datas:[器械包节点/篮筐节点,...]} + * 加载失败: + * {success:false,message:"加载失败的原因"} */ public void batchAddToRecord(){ JSONObject jsonObject = new JSONObject(); JSONArray resultJsonArray = new JSONArray(); String barcodes = StrutsParamUtils.getPraramValue("barcodes", ""); String savedBarcodes = StrutsParamUtils.getPraramValue("saveBarcode", ""); if(StringUtils.isNotBlank(barcodes)){ - Query query = objectDao.getHibernateSession().createQuery("from BarcodeDevice where barcode in (:barcodeList)"); - query.setParameterList("barcodeList", Arrays.asList(barcodes.split(";"))); - @SuppressWarnings("unchecked") - List barcodeList = query.list(); - for(BarcodeDevice barcodeDevice : barcodeList){ - JSONObject validateResultJsonObject = validateBarcodeForBarcodeDevice(barcodeDevice.getBarcode() , savedBarcodes); + String[] barcodeArr = barcodes.split(";"); + for(String barcode : barcodeArr){ + JSONObject validateResultJsonObject = validateBarcodeForBarcodeDevice(barcode , savedBarcodes); if(validateResultJsonObject.optBoolean("success")){ - resultJsonArray.add(validateResultJsonObject); + resultJsonArray.add(validateResultJsonObject.optJSONObject("dataList")); }else{ jsonObject.put("success", false); jsonObject.put("message", validateResultJsonObject.optString("message")); @@ -1297,368 +917,142 @@ } } jsonObject.put("success", true); - jsonObject.put("data", resultJsonArray); + jsonObject.put("datas", resultJsonArray); } StrutsResponseUtils.output(jsonObject); } /** - * 添加灭菌时,校验条码对象 - * @param barcodeStr 条码(器械包、灭菌篮筐或虚拟筐的条码) - * @return JSONObject:格式如下 - { - success:true, - dataList:[{ - type:"器械包/篮筐",barcode:"",name:"",position:"", depart:'',reviewTime:"",isUrgent:"",sterilingType:"",isBigPackage:"",bigPackageSterilizerType:"",includeImplant:"", - dataList:[ - {depart:'',barcode:"",name:"",isUrgent:"",reviewTime:"",sterilingType:"",isBigPackage:"",bigPackageSterilizerType:"",includeImplant:""}, - {depart:'',barcode:"",name:"",isUrgent:"",reviewTime:"",sterilingType:"",isBigPackage:"",bigPackageSterilizerType:"",includeImplant:""}, - ********************************************************************, - {depart:'',barcode:"",name:"",isUrgent:"",reviewTime:"",sterilingType:"",isBigPackage:"",bigPackageSterilizerType:"",includeImplant:""} - ] - }] - } - 或{success:false,message:"***"} + * 点击一键入炉添加灭菌物品时,校验条码对象... + * @param barcode 器械包条码或者容器条码 + * @param savedBarcodes 已经扫描的器械包集合(用分号分隔) + * @return */ - private JSONObject validateBarcodeForBarcodeDevice(String barcodeStr , String savedBarcodes){ + private JSONObject validateBarcodeForBarcodeDevice(String barcode , String savedBarcodes){ + savedBarcodes = ";" + savedBarcodes + ";"; JSONObject validateResultJsonObject = new JSONObject();//验证结果的json对象,用于最终返回 - validateResultJsonObject.put("success" , true); - JSONArray returnDataJsonArray = new JSONArray();//验证结果的json的data对象 - JSONArray returnDataListJsonArray = new JSONArray();//验证结果的json的data对象里的集合对象 - /*if(barcodeDevice instanceof Container){ - Container container = (Container)barcodeDevice; - if(Container.CONTAINER_PURPOSE_DISINFECTION.equals(container.getPurpose()) || Container.CONTAINER_PURPOSE_VIRTUAL.equals(container.getPurpose())){ - - }else{ - jsonObject.put("success", false); - jsonObject.put("message", "该条码对应的篮筐用途为" + container.getPurpose() + ",只能对灭菌篮筐或虚拟篮筐进行灭菌"); - } - }else if(barcodeDevice instanceof TousseInstance){ - TousseInstance tousseInstance = (TousseInstance)barcodeDevice; - - }else{ - jsonObject.put("success", false); - jsonObject.put("message", "只能对器械包或灭菌篮筐或虚拟篮筐进行灭菌"); - }*/ - - if (StringUtils.isNotBlank(barcodeStr)) { - try { - String[] barcodeArray = barcodeStr.split(";"); - String barcode = barcodeArray[0]; + if (StringUtils.isNotBlank(barcode)) { + if (savedBarcodes.contains(";" + barcode + ";")) { + validateResultJsonObject.put("success", false); + validateResultJsonObject.put("message", "条码:" + barcode + "已经扫描!"); + } else { BarcodeDevice barcodeDevice = barcodeManager.getBarcodeByBarcode(barcode); - if(barcodeArray.length > 1){//按首尾两个条码进行过滤 - Map map = barcodeManager.getTousseInstanceListByRange(barcode, barcodeArray[1], TousseInstance.STATUS_REVIEWED); - - if(map != null && "tousseInstanceSuccess".equals(map.get("returnType"))){ - List tousseInstanceList = (List)map.get("result"); - if(CollectionUtils.isNotEmpty(tousseInstanceList)){ - Collections.sort(tousseInstanceList);//增加按id降序排序 - TousseInstance tousseInstance = null; - if(barcodeDevice instanceof TousseInstance){ - //判断是否有已装入至灭菌篮筐或虚拟篮筐的器械包实例,如果有,则返回失败并进行提示 - for(int i = 0;i < tousseInstanceList.size();i++){ - tousseInstance = (TousseInstance)tousseInstanceList.get(i); - if(tousseInstance != null && tousseInstance.getReviewBasket_id() != null){ - validateResultJsonObject.put("success", false); - validateResultJsonObject.put("message", "发现有已装入到篮筐的器械包,对于已装入到篮筐的器械包只能通过扫描篮筐进行灭菌"); - break; - }else if (tousseInstance != null - && StringUtils.isNotBlank(tousseInstance.getTousseName())) { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("type", TousseDefinition.PACKAGE_TYPE_INSIDE); - jsonObject.put("depart", StringUtils.defaultString(tousseInstance.getDepart()," ")); - jsonObject.put("name", tousseInstance.getTousseName()); - jsonObject.put("barcode", tousseInstance.getBarcode()); - jsonObject.put("sterilingType", tousseInstance.getSterilingType()); - - if (TousseDefinition.BIG_PACKAGE_TRUE.equals( - tousseInstance.getTousseDefinition().getIsBigPackage())) { // 超重、超大外来器械用配置的灭菌方式 - String bigPackage = supplyRoomConfigManager.getSystemParamsObj().getBigPackageSterilizerType(); //获取在科室供应室配置那里配置的超大、重外来器械灭菌方式 - if (StringUtils.isNotBlank(bigPackage)) { - jsonObject.put("bigPackageSterilizerType", bigPackage); - } else { - jsonObject.put("bigPackageSterilizerType", false); - } - } else { - jsonObject.put("isBigPackage", false); - } - - returnDataJsonArray.add(jsonObject); - } + //没如筐的器械包节点 + if (barcodeDevice != null && barcodeDevice instanceof TousseInstance) { + TousseInstance tousseInstance = (TousseInstance) barcodeDevice; + + String status = tousseInstance.getStatus(); + TousseDefinition tousseDefinition = tousseInstance.getTousseDefinition(); + String tousseType = tousseDefinition.getTousseType(); + + // 扫描的物品是消毒物品并且是否灭菌不为是时,提示不需要灭菌(应对省医高水平消毒的需求进行调整 since 2016-01-22 SYF) + if (TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(tousseType) + && !TousseDefinition.STR_YES.equals(tousseDefinition.getIsSterile())){ + validateResultJsonObject.put("success", false); + validateResultJsonObject.put("message", barcode + "是消毒物品条码,该物品不需要灭菌!"); + } else { // 其它物品(器械包、敷料包、外来器械、自定义器械包等) + //判断扫描的器械包是否可以灭菌(即:器械包状态为“已审核”) + boolean isReviewed = StringUtils.equals(status,TousseInstance.STATUS_REVIEWED); + //验证是否是代理灭菌(代理灭菌器械包状态已装配就可以灭菌) + if (!isReviewed) { + if (!StringUtils.equals(tousseInstance.getOrgUnitCoding(), AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig())) { + if (status.equals(TousseInstance.STATUS_PACKED)) { + isReviewed = true; } - validateResultJsonObject.put("dataList", returnDataJsonArray); - }else if(barcodeDevice instanceof Container){ - Container container = (Container)barcodeDevice; + } + } + + if (isReviewed) { + boolean isOutBasket = tousseInstanceManager.isTousseInstanceOutOfBasket(tousseInstance.getId()); + if (isOutBasket) { //没入灭菌篮筐 JSONObject returnDataJsonObject = new JSONObject(); - returnDataJsonObject.put("type", Container.CONTAINERTYPE_BASKET); - returnDataJsonObject.put("name", container.getContainerName()); - returnDataJsonObject.put("barcode", container.getBarcode()); - for(int i = 0;i < tousseInstanceList.size();i++){ - tousseInstance = (TousseInstance)tousseInstanceList.get(i); - if (tousseInstance != null - && StringUtils.isNotBlank(tousseInstance.getTousseName())) { - - JSONObject jsonObject = new JSONObject(); - jsonObject.put("depart", StringUtils.defaultString(tousseInstance.getDepart()," ")); - jsonObject.put("name", tousseInstance.getTousseName()); - jsonObject.put("barcode", tousseInstance.getBarcode()); - jsonObject.put("sterilingType", tousseInstance.getSterilingType()); - - if (TousseDefinition.BIG_PACKAGE_TRUE.equals( - tousseInstance.getTousseDefinition().getIsBigPackage())) { // 超重、超大外来器械用配置的灭菌方式 - String bigPackage = supplyRoomConfigManager.getSystemParamsObj().getBigPackageSterilizerType(); //获取在科室供应室配置那里配置的超大、重外来器械灭菌方式 - if (StringUtils.isNotBlank(bigPackage)) { - jsonObject.put("bigPackageSterilizerType", bigPackage); - } else { - jsonObject.put("bigPackageSterilizerType", false); - } - } else { - jsonObject.put("isBigPackage", false); - } - - returnDataListJsonArray.add(jsonObject); - } - } - returnDataJsonObject.put("dataList", returnDataListJsonArray); - returnDataJsonArray.add(returnDataJsonObject); - validateResultJsonObject.put("dataList", returnDataJsonArray); + returnDataJsonObject.put("type", TousseDefinition.PACKAGE_TYPE_INSIDE); + returnDataJsonObject.put("barcode", tousseInstance.getBarcode()); + returnDataJsonObject.put("name", tousseInstance.getTousseName()); + returnDataJsonObject.put("typeForSterilizationStatistics", sterilizationRecordManager.getTypeForSterilizationStatistics(tousseInstance)); + returnDataJsonObject.put("sterilingType", tousseInstance.getSterilingType()); + returnDataJsonObject.put("depart", StringUtils.defaultString(tousseInstance.getDepart()," ")); + + validateResultJsonObject.put("success" , true); + validateResultJsonObject.put("dataList", returnDataJsonObject); + } else { + validateResultJsonObject.put("success", false); + validateResultJsonObject.put("message", "条码为" + barcode + "的器械包已放入篮筐,请通过扫描篮筐进行添加"); } - }else{ + //检查代理灭菌是否已录入代理灭菌单 + String checkProxyDisinfection = StrutsParamUtils.getPraramValue("checkProxyDisinfection", ""); + if (StringUtils.isNotBlank(checkProxyDisinfection)) { + String userOrgUnitCode = AcegiHelper.getLoginUser().getCurrentOrgUnitCode(); + if (tousseInstance.getOrgUnitCoding() != null + && !tousseInstance.getOrgUnitCoding().equals(userOrgUnitCode) + && tousseInstance.getProxyDisinfection_id() == null) { + validateResultJsonObject.put("success", false); + validateResultJsonObject.put("message", "条码为" + barcode + "的器械包未录入代理灭菌单"); + } + } + } else { validateResultJsonObject.put("success", false); - validateResultJsonObject.put("message", "条码" + barcode + "既不是器械包也不是篮筐"); + validateResultJsonObject.put("message", "条码为" + barcode + "的器械包没有经过审核"); } - }else{ - validateResultJsonObject.put("success", false); - validateResultJsonObject.put("message", "条码" + barcode + "未找到符合条件的器械包"); } - }else{//仅按条码/篮筐(首)的条件(单个条码的情况)过滤,原逻辑保持不变 - //如果barcodeDevice为器械包条码时 - if (barcodeDevice != null && barcodeDevice instanceof TousseInstance) { - TousseInstance tousseInstance = (TousseInstance) barcodeDevice; + } else if (barcodeDevice != null && barcodeDevice instanceof Container) { + // TODO 当篮筐正在灭菌中,还是能够读取到的bug + Container container = (Container) barcodeDevice; + if (Container.CONTAINERTYPE_BASKET.equals(container.getContainerType())) { + //是否要加载篮筐里的器械包名称 + String loadTousseNamesInBasket = StrutsParamUtils.getPraramValue("loadTousseNamesInBasket", ""); - String status = tousseInstance.getStatus(); - TousseDefinition tousseDefinition = tousseInstance.getTousseDefinition(); - String tousseType = tousseDefinition.getTousseType(); - - - // 扫描的物品是消毒物品并且是否灭菌不为是时,提示不需要灭菌(应对省医高水平消毒的需求进行调整 since 2016-01-22 SYF) - if (TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(tousseType) - && !TousseDefinition.STR_YES.equals(tousseDefinition.getIsSterile())){ - validateResultJsonObject.put("success", false); - validateResultJsonObject.put("message", barcode + "是消毒物品条码,该物品不需要灭菌!"); - } else { // 其它物品(器械包、敷料包、外来器械、自定义器械包等) - boolean isReviewed = StringUtils.equals(status,TousseInstance.STATUS_REVIEWED) || StringUtils.equals(status,TousseInstance.STATUS_STERILED); - - if (tousseInstance.getUnTraceableTousse()) { - isReviewed = true; - } - - // 验证是否是代理灭菌(代理灭菌器械包状态已装配就可以灭菌) - if (!isReviewed) { - if (!StringUtils.equals(tousseInstance.getOrgUnitCoding(), AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig())) { - if (status.equals(TousseInstance.STATUS_PACKED)) { - isReviewed = true; - } + JSONArray tousseInstanceArr = new JSONArray(); + if (StringUtils.isNotBlank(loadTousseNamesInBasket)) { + Set toussesInBasket = null; + + if(Container.CONTAINER_PURPOSE_DISINFECTION.equals(container.getPurpose())){ //如果为灭菌筐,按原有方式查询 + toussesInBasket = tousseInstanceManager.getReviewedTousseInstanceByBasket(barcode); + }else if(Container.CONTAINER_PURPOSE_VIRTUAL.equals(container.getPurpose())){ //如果为虚拟篮筐,则按范围区间方式查询,begin和end都为条码的参数 + Map map = barcodeManager.getTousseInstanceListByRange(barcode, barcode, TousseInstance.STATUS_REVIEWED); + if(map != null && map.get("result") != null){ + toussesInBasket = new HashSet(); + toussesInBasket.addAll((List)map.get("result")); } } - if (isReviewed) { - boolean isOutBasket = tousseInstanceManager.isTousseInstanceOutOfBasket(tousseInstance.getId()); - - if (isOutBasket) { //没入灭菌篮筐 - if (tousseInstance.getUnTraceableTousse() && tousseInstance.getTousseFixedBarcode()) { // 不追溯的器械包(含普通器械包、敷料包、外部代理灭菌包) - String name = tousseDefinition.getName(); - String orgUnitCode = AcegiHelper.getLoginUser().getCurrentOrgUnitCode(); - Integer scanAmount = tousseDefinition.getScanAmount(); - - List toussesOfToday = tousseInstanceManager.getTodayReviewedTousseInstanceByNameAndOrgUnitCode(orgUnitCode, name); - - Map todayToussesMap = new HashMap(); - for (TousseInstance tousse : toussesOfToday) { - todayToussesMap.put(tousse.getBarcode(), tousse); - } - - // 已经装载了的器械包集合 - List alreadyLoadedTousses = new ArrayList(); - if (StringUtils.isNotBlank(savedBarcodes)) { - String[] savedBarcodeArray = savedBarcodes.split(","); - for (int i = 0; i < savedBarcodeArray.length; i++) { - String savedBarcodeStr = savedBarcodeArray[i]; - TousseInstance tousseInstance2 = todayToussesMap.get(savedBarcodeStr); - alreadyLoadedTousses.add(tousseInstance2); - } - } - if (CollectionUtils.isNotEmpty(alreadyLoadedTousses)) { - for (TousseInstance temp : alreadyLoadedTousses) { - toussesOfToday.remove(temp); - } - } - - if (CollectionUtils.isNotEmpty(toussesOfToday)) { - - int toussesAmount = toussesOfToday.size(); - // 设置的数量大于0时才做限制 - if(scanAmount != null && scanAmount.intValue() > 0){ - if (toussesAmount > scanAmount) { - toussesAmount = scanAmount; - } - } - - for (int i = 0; i < toussesAmount; i++) { - TousseInstance tousseInstance1 = toussesOfToday.get(i); - - String tousseName = tousseInstance1.getTousseName(); - - JSONObject jsonObject = new JSONObject(); - jsonObject.put("type", TousseDefinition.PACKAGE_TYPE_INSIDE); - jsonObject.put("depart", StringUtils.defaultString(tousseInstance1.getDepart()," ")); - jsonObject.put("name", tousseName); - jsonObject.put("barcode", tousseInstance1.getBarcode()); - jsonObject.put("sterilingType", tousseInstance1.getSterilingType()); - - if (TousseDefinition.BIG_PACKAGE_TRUE.equals( - tousseInstance1.getTousseDefinition().getIsBigPackage())) { // 超重、超大外来器械用配置的灭菌方式 - String bigPackage = supplyRoomConfigManager.getSystemParamsObj().getBigPackageSterilizerType(); //获取在科室供应室配置那里配置的超大、重外来器械灭菌方式 - if (StringUtils.isNotBlank(bigPackage)) { - jsonObject.put("bigPackageSterilizerType", bigPackage); - } else { - jsonObject.put("bigPackageSterilizerType", false); - } - } else { - jsonObject.put("isBigPackage", false); - } - - returnDataJsonArray.add(jsonObject); - } - validateResultJsonObject.put("dataList", returnDataJsonArray); - } else { - validateResultJsonObject.put("success", false); - validateResultJsonObject.put("message", "条码为" + barcode + "加载完毕或者没有需要灭菌的包!"); - } - } else { // 需要追溯的器械包 - Integer includeImplant = tousseDefinition.getIncludeImplant(); - String tousseName = tousseInstance.getTousseName(); // 外来器械包去掉下划线ID - - JSONObject returnDataJsonObject = new JSONObject(); - returnDataJsonObject.put("type", TousseDefinition.PACKAGE_TYPE_INSIDE); - returnDataJsonObject.put("depart", StringUtils.defaultString(tousseInstance.getDepart()," ")); - returnDataJsonObject.put("name", tousseName); - returnDataJsonObject.put("barcode", tousseInstance.getBarcode()); - returnDataJsonObject.put("sterilingType", tousseInstance.getSterilingType()); - - // 超大、超重拆分器械包要用特定的灭菌方式 - if (TousseDefinition.PACKAGE_TYPE_SPLIT.equals(tousseType) - && TousseDefinition.BIG_PACKAGE_TRUE.equals(tousseDefinition.getIsBigPackage())) { - returnDataJsonObject.put("isBigPackage", true); - String bigPackageSterileType = supplyRoomConfigManager.getSystemParamsObj().getBigPackageSterilizerType(); - if (StringUtils.isNotBlank(bigPackageSterileType)) { - returnDataJsonObject.put("bigPackageSterilizerType", bigPackageSterileType); - } else { - returnDataJsonObject.put("bigPackageSterilizerType", false); - } - } else { - returnDataJsonObject.put("isBigPackage", false); - } - - if ((TousseDefinition.PACKAGE_TYPE_FOREIGN.equals(tousseType) - || TousseDefinition.PACKAGE_TYPE_SPLIT.equals(tousseType)) - && TousseDefinition.INCLUDE_IMPLANT == includeImplant) { //外来器械包有植入物的话要做生物监测 - returnDataJsonObject.put("includeImplant", Constants.STR_YES); - } else { - returnDataJsonObject.put("includeImplant", Constants.STR_NO); - } - - returnDataJsonArray.add(returnDataJsonObject); - validateResultJsonObject.put("dataList", returnDataJsonArray); + if (toussesInBasket != null && toussesInBasket.size() > 0) { + List tousseList = new ArrayList(); + tousseList.addAll(toussesInBasket); + Collections.sort(tousseList);//按id降序排序 + for (TousseInstance tousseInstance : tousseList) { + if (tousseInstance != null + && StringUtils.isNotBlank(tousseInstance.getTousseName())) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("barcode", tousseInstance.getBarcode()); + jsonObject.put("name", tousseInstance.getTousseName()); + jsonObject.put("typeForSterilizationStatistics", sterilizationRecordManager.getTypeForSterilizationStatistics(tousseInstance)); + jsonObject.put("sterilingType", tousseInstance.getSterilingType()); + jsonObject.put("depart", StringUtils.defaultString(tousseInstance.getDepart()," ")); + tousseInstanceArr.add(jsonObject); } - } else { - validateResultJsonObject.put("success", false); - validateResultJsonObject.put("message", "条码为" + barcode + "的器械包已放入篮筐,请通过扫描篮筐进行添加"); } - - //检查代理灭菌是否已录入代理灭菌单 - String checkProxyDisinfection = StrutsParamUtils.getPraramValue("checkProxyDisinfection", ""); - if (StringUtils.isNotBlank(checkProxyDisinfection)) { - String userOrgUnitCode = AcegiHelper.getLoginUser().getCurrentOrgUnitCode(); - if (tousseInstance.getOrgUnitCoding() != null - && !tousseInstance.getOrgUnitCoding().equals(userOrgUnitCode) - && tousseInstance.getProxyDisinfection_id() == null) { - validateResultJsonObject.put("success", false); - validateResultJsonObject.put("message", "条码为" + barcode + "的器械包未录入代理灭菌单"); - } - } } else { validateResultJsonObject.put("success", false); - validateResultJsonObject.put("message", "条码为" + barcode + "的器械包没有经过审核"); + validateResultJsonObject.put("message", "条码为[" + barcode + "]的灭菌筐里面没有待灭菌的器械包"); + return validateResultJsonObject; } } - } else if (barcodeDevice != null && barcodeDevice instanceof Container) { - // TODO 当篮筐正在灭菌中,还是能够读取到的bug - Container container = (Container) barcodeDevice; - if (container.getContainerType().equals(Container.CONTAINERTYPE_BASKET)) { - //是否要加载篮筐里的器械包名称 - String loadTousseNamesInBasket = StrutsParamUtils.getPraramValue("loadTousseNamesInBasket", ""); - JSONObject returnDataJsonObject = new JSONObject(); - returnDataJsonObject.put("type", Container.CONTAINERTYPE_BASKET); - returnDataJsonObject.put("name", container.getContainerName()); - returnDataJsonObject.put("barcode", container.getBarcode()); - - if (StringUtils.isNotBlank(loadTousseNamesInBasket)) { - Set toussesInBasket = null; - - if(Container.CONTAINER_PURPOSE_DISINFECTION.equals(container.getPurpose())){ //如果为灭菌筐,按原有方式查询 - toussesInBasket = tousseInstanceManager.getReviewedTousseInstanceByBasket(barcode); - }else if(Container.CONTAINER_PURPOSE_VIRTUAL.equals(container.getPurpose())){ //如果为虚拟篮筐,则按范围区间方式查询,begin和end都为条码的参数 - Map map = barcodeManager.getTousseInstanceListByRange(barcode, barcode, TousseInstance.STATUS_REVIEWED); - if(map != null && map.get("result") != null){ - toussesInBasket = new HashSet(); - toussesInBasket.addAll((List)map.get("result")); - } - } - if (toussesInBasket != null && toussesInBasket.size() > 0) { - List tousseList = new ArrayList(); - tousseList.addAll(toussesInBasket); - Collections.sort(tousseList);//按id降序排序 - for (TousseInstance tousseInstance : tousseList) { - if (tousseInstance != null - && StringUtils.isNotBlank(tousseInstance.getTousseName())) { - - JSONObject jsonObject = new JSONObject(); - jsonObject.put("depart", StringUtils.defaultString(tousseInstance.getDepart()," ")); - jsonObject.put("name", tousseInstance.getTousseName()); - jsonObject.put("barcode", tousseInstance.getBarcode()); - jsonObject.put("sterilingType", tousseInstance.getSterilingType()); - - if (TousseDefinition.BIG_PACKAGE_TRUE.equals( - tousseInstance.getTousseDefinition().getIsBigPackage())) { // 超重、超大外来器械用配置的灭菌方式 - String bigPackage = supplyRoomConfigManager.getSystemParamsObj().getBigPackageSterilizerType(); //获取在科室供应室配置那里配置的超大、重外来器械灭菌方式 - if (StringUtils.isNotBlank(bigPackage)) { - jsonObject.put("bigPackageSterilizerType", bigPackage); - } else { - jsonObject.put("bigPackageSterilizerType", false); - } - } else { - jsonObject.put("isBigPackage", false); - } - - returnDataListJsonArray.add(jsonObject); - } - } - returnDataJsonObject.put("dataList", returnDataListJsonArray); - returnDataJsonArray.add(returnDataJsonObject); - validateResultJsonObject.put("dataList", returnDataJsonArray); - } - } - } - }else{ - //barcodeDevice对象为空或都即不是器械包又不是篮筐条码的情况 - validateResultJsonObject.put("success", false); - validateResultJsonObject.put("message", "条码为" + barcode + "的既不是器械包也不是篮筐."); + + JSONObject returnDataJsonObject = new JSONObject(); + returnDataJsonObject.put("type", Container.CONTAINERTYPE_BASKET); + returnDataJsonObject.put("name", container.getContainerName()); + returnDataJsonObject.put("barcode", container.getBarcode()); + returnDataJsonObject.put("dataList", tousseInstanceArr); + validateResultJsonObject.put("success", true); + validateResultJsonObject.put("dataList", returnDataJsonObject); } + }else{ + //barcodeDevice对象为空或都即不是器械包又不是篮筐条码的情况 + validateResultJsonObject.put("success", false); + validateResultJsonObject.put("message", "条码为" + barcode + "的既不是器械包也不是篮筐."); } - } catch (Exception e) { - e.printStackTrace(); } } return validateResultJsonObject; @@ -1680,39 +1074,7 @@ e.printStackTrace(); } } - /** - * 统计灭菌记录中包的名称和数量 - */ - public void getSterilizationRecordInfo() { - if (sterilizationRecord != null) { - Map temMap = tousseInstanceManager.statisticToussesInSterilization(sterilizationRecord); - try { - StringBuffer buffer = new StringBuffer(); - // 遍历map - for(Map.Entry entry : temMap.entrySet()){ - String tousseName = entry.getKey(); - Long count = entry.getValue(); - buffer.append("{tousseName:'" + tousseName + "',count:" - + count + "},"); - } - HttpServletResponse response = StrutsParamUtils.getResponse(); - String str = ""; - if (buffer.length() > 0) { - str = buffer.substring(0, buffer.length() - 1); - } - try { - response.setCharacterEncoding("utf-8"); - response.getWriter().print("[" + str + "]"); - } catch (IOException e) { - e.printStackTrace(); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - } - /** * 灭菌失败 */ Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java =================================================================== diff -u -r18907 -r19303 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 18907) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 19303) @@ -661,17 +661,6 @@ } - /** - * 根据时间段及科室编码查询所有已审核并且还未入审核篮筐的器械包实例(从结果集的下标为start开始取limit个) - * @param orgUnitCode 科室编码 - * @param beginDate 开始日期 - * @param endDate 结束日期 - * @param start 开始下标 - * @param limit 获取的个数 - * @param searchKeyWord 检索关键字(按器械包名称,拼音码,五笔码) - * @param sqlCondition where子句的Map - * @return - */ @Override public List getAllReviewedTousseInstanceWithOutBasket( String orgUnitCode , String beginDate , String endDate , String start , String limit, String searchKeyWord, Map sqlCondition){ @@ -713,9 +702,6 @@ return list; } - /** - * 今天审核的未入筐器械包 - */ @Override public List getTodayReviewedTousseInstanceWithOutBasket( String orgUnitCode) { @@ -779,62 +765,31 @@ return objectDao.findBySql(ReviewedBasket.class.getSimpleName(), sql, 0, 3, "id desc"); } - /** - * 根据器械包的状态过滤掉篮筐中的器械包 - * @param instances - * @return - * 2014-9-11 - * forgonSet - */ - private Set filterTousseInstanceByStatus(Collection instances){ - Set tousseInstances = new HashSet(); - for(TousseInstance instance :instances){ - if(instance.isDiscarded() - || instance.isShipped() - || instance.isUsed()){ - continue; - } - tousseInstances.add(instance); - } - return tousseInstances; - } - - /** - * 根据审核篮筐获取审核篮筐的所有器械包(前提是该篮筐没有登记过灭菌记录或者灭菌失败) - * @param barcode 审核篮筐条码 - * @return - */ @Override public Set getReviewedTousseInstanceByBasket(String barcode) { - String sql = "select po,s from " + String hql = "select po,s from " + ReviewedBasket.class.getSimpleName() - + " po left join po.sterilizationRecords s where (s.id is null or s.status = '"+SterilizationRecord.STERILIZATION_STATUS_FAILURE+"') and po.container.barcode = '" - + barcode + "'"; + + " po left join po.sterilizationRecords s where (s.id is null or s.status = '" + SterilizationRecord.STERILIZATION_STATUS_FAILURE + "') " + + "and po.container.barcode = '" + barcode + "'"; + List basket = new ArrayList(); - List objs = objectDao.findByHql(sql); + List objs = objectDao.findByHql(hql); for (Object obj : objs) { Object[] objArray = (Object[]) obj; - Object reviewedBasketObj = objArray[0]; - Object recordObj = objArray[1]; - if ((recordObj == null || SterilizationRecord.STERILIZATION_STATUS_FAILURE.equals(((SterilizationRecord)recordObj).getStatus())) - && reviewedBasketObj instanceof ReviewedBasket) { - basket.add((ReviewedBasket) reviewedBasketObj); - } + basket.add((ReviewedBasket) objArray[0]); } if (basket != null && basket.size() > 0) { Set newTousseInstances = new HashSet(); for(ReviewedBasket reviewedBasket : basket){ Set reviewedTousseInstances = getReviewedTousseInstance(reviewedBasket); - MyCollectionUtils.addAllIgnoreNull(newTousseInstances, reviewedTousseInstances); newTousseInstances.addAll(reviewedTousseInstances); } - logger.debug(barcode + "篮筐全部过滤后篮筐内有" - + newTousseInstances - .size() + "个器械包"); + logger.debug(barcode + "篮筐全部过滤后篮筐内有" + newTousseInstances.size() + "个器械包"); return newTousseInstances; } return new HashSet(); } + @Override public Set getReviewedTousseInstance(ReviewedBasket reviewedBasket) { if(reviewedBasket == null){ @@ -843,31 +798,21 @@ Set newTousseInstances = new HashSet<>(); Set tousseInstances = reviewedBasket.getTousseInstances(objectDao); if (tousseInstances == null) { - logger.debug("篮筐Id:" + reviewedBasket.getId() - + ",篮筐内有0个器械包"); + logger.debug("篮筐Id:" + reviewedBasket.getId() + ",篮筐内有0个器械包"); } else { - logger.debug("篮筐Id:"+ reviewedBasket.getId()+ ",过滤前篮筐内有" - + tousseInstances.size() + "个器械包"); - + logger.debug("篮筐Id:"+ reviewedBasket.getId()+ ",过滤前篮筐内有" + tousseInstances.size() + "个器械包"); + //过滤掉篮筐中器械包状态不为已装配的包 for(TousseInstance tousseInstance : tousseInstances){ if(TousseInstance.STATUS_REVIEWED.equals(tousseInstance.getStatus())){ newTousseInstances.add(tousseInstance); } } - logger.debug("篮筐Id:"+ reviewedBasket.getId()+ ",过滤后篮筐内有" - + newTousseInstances.size() + "个器械包"); + logger.debug("篮筐Id:"+ reviewedBasket.getId()+ ",过滤后篮筐内有" + newTousseInstances.size() + "个器械包"); } return newTousseInstances; } - /*** - * - * 获取已审核灭菌篮筐内的器械包VO集合,返回的是TousseInstanceVO值对象 - * @param reviewedBasketId - * @param taskGroup - * @return - */ @Override public List getTousseInstanceVOsInReviewedBasket( ReviewedBasket reviewedBasket, String taskGroup) { Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/TousseInstanceAction.java =================================================================== diff -u -r18520 -r19303 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/TousseInstanceAction.java (.../TousseInstanceAction.java) (revision 18520) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/TousseInstanceAction.java (.../TousseInstanceAction.java) (revision 19303) @@ -882,7 +882,7 @@ } /** - * 获取今天审核的待灭菌物品 + * 获取本供应室今天审核的未入筐器械包. */ public void getTodayPendingSterilizationTousseAndBasket() { try { @@ -929,7 +929,6 @@ List reviewedBaskets = reviewedBasketManager .getDepartAllReviewedBasket(orgUnitCoding); - // 当天审核的,未入筐的器械包 List toussesOutsideBasketOfToday = tousseInstanceManager .getTodayReviewedTousseInstanceWithOutBasket(orgUnitCoding); Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java =================================================================== diff -u -r19199 -r19303 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 19199) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 19303) @@ -2789,4 +2789,38 @@ } return list; } + + @Override + public String getTypeForSterilizationStatistics(TousseInstance tousseInstance) { + String typeForSterilizationStatistics = TousseDefinition.PACKAGE_TYPE_INSIDE; + TousseDefinition td = tousseInstance.getTousseDefinition(); + if (td != null) { + //敷料包 + if (td.isDressing()) { + if (tousseInstance.getProxyDisinfection_id() != null) { + typeForSterilizationStatistics = TousseDefinition.PACKAGE_TYPE_PROXY; + } else { + typeForSterilizationStatistics = TousseDefinition.PACKAGE_TYPE_DRESSING; + } + // 器械包(包括但不限于"器械包"、"自定义器械包") + } else if (td.isInsideTousse() || td.isCustomTousse()) { + if (tousseInstance.getProxyDisinfection_id() != null) { + typeForSterilizationStatistics = TousseDefinition.PACKAGE_TYPE_PROXY; + } else if (TousseDefinition.STR_YES.equals(td.getIsForeignTousse())) { + typeForSterilizationStatistics = TousseDefinition.PACKAGE_TYPE_FOREIGN; + } else { + typeForSterilizationStatistics = TousseDefinition.PACKAGE_TYPE_INSIDE; + } + // 外来器械包(包括但不限于"外来器械包"、"外来器械拆分小包"、"外来器械包当普通器械包") + } else if (td.isSplit() || td.isForeignTousse()) { + typeForSterilizationStatistics = TousseDefinition.PACKAGE_TYPE_FOREIGN; + } else if (td.isForeignProxyTousse()) { + typeForSterilizationStatistics = TousseDefinition.PACKAGE_TYPE_PROXY; + } + } else { + throw new RuntimeException("找不到包定义!"); + } + return typeForSterilizationStatistics; + } + } Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java =================================================================== diff -u -r18474 -r19303 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 18474) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 19303) @@ -62,6 +62,12 @@ public boolean isBasketBeUsed(String barcode); + /*** + * 获取已审核灭菌篮筐内的器械包VO集合,返回的是TousseInstanceVO值对象 + * @param reviewedBasketId + * @param taskGroup + * @return + */ public List getTousseInstanceVOsInReviewedBasket( ReviewedBasket reviewedBasket, String taskGroup); /** @@ -73,7 +79,7 @@ String sterileBasketBarcode); /** - * 根据审核篮筐获取审核篮筐的所有器械包(前提是该篮筐没有登记过灭菌记录或者灭菌失败) + * 根据审核篮筐获取审核篮筐的所有器械包(前提是该篮筐没有登记过灭菌记录或者灭菌失败,主要用于“获取待灭菌的物品”). * @param barcode 审核篮筐条码 * @return */ @@ -85,16 +91,21 @@ */ public Set getReviewedTousseInstance(ReviewedBasket reviewedBasket); + /** + * 获取指定供应室今天审核的未入筐器械包. + * @param orgUnitCode 供应室的科室编码 + * @return + */ public List getTodayReviewedTousseInstanceWithOutBasket( String orgUnitCode); /** - * 根据时间段及科室编码查询所有已审核的器械包实例(从结果集的下标为start开始取limit个) + * 根据时间段及科室编码查询所有已审核并且还未入审核篮筐的器械包实例(从结果集的下标为start开始取limit个). * @param orgUnitCode 科室编码 - * @param beginDate 开始日期 - * @param endDate 结束日期 - * @param start 开始下标 - * @param limit 获取的个数 + * @param beginDate 开始日期 + * @param endDate 结束日期 + * @param start 开始下标 + * @param limit 获取的个数 * @param searchKeyWord 检索关键字(按器械包名称,拼音码,五笔码) * @param sqlCondition where子句的Map * @return Index: ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordForm.js =================================================================== diff -u -r18744 -r19303 --- ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordForm.js (.../sterilizationRecordForm.js) (revision 18744) +++ ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordForm.js (.../sterilizationRecordForm.js) (revision 19303) @@ -87,21 +87,6 @@ }) }); -var ds = new Ext.data.Store({ - proxy : new Ext.data.HttpProxy({ - url : WWWROOT + '/disinfectSystem/sterilization/sterilizationRecordAction!loadTousseInstance.do', - method : 'POST' - }), - reader : new Ext.data.JsonReader( { - fields : [ - {name : 'id'}, - {name : 'name'}, - {name : 'tousseNames'} - ] - }) -}); - - /** * 获取灭菌物品 */ @@ -181,131 +166,107 @@ /** * 创建节点的方法 - * - * isParentNode 是否父节点(一般如为篮筐则为true,为器械包则为false) - * barcode 条码(篮筐或器械包) - * name 名称(篮筐或器械包) - * depart 科室 - * type 值为即“篮筐”或“器械包” - * insideTousse 节点类型为“器械包”,并且没有父节点时值为true,其他的情况值为false(请注意:这个参数和type参数会决定此节点是否可以被删除) - * position 位置 - * + * @param isParentNode 是否父节点(灭菌筐节点或者没有入灭菌筐的器械包节点为true) + * @param barcode 条码(篮筐或器械包) + * @param name 名称(篮筐或器械包) + * @param typeForSterilizationStatistics 器械包类型(注意区别于真正的类型) + * @param depart 科室 + * @param type 值为即“篮筐”或“器械包” + * @param position 位置 + * @param amount 数量(便于以后扫描固定条码支持修改数量的功能,目前值为均为1) */ -function createNode(isParentNode,barcode,name,depart,type,insideTousse,position){ +function createNode(isParentNode,barcode,name,typeForSterilizationStatistics,depart,type,position,amount){ var node; if(isParentNode==true){ - //创建父节点 + //创建父节点(灭菌筐节点或者没有入灭菌筐的器械包节点) node = new top.Ext.tree.TreeNode({ id:Ext.id(), - text:sstsConfig.showDepartOfTousseInstanceSterile == true ? depart : barcode, - cls:'master-task', + iconCls:type=='篮筐' ? 'task-folder' : 'task', uiProvider:top.Ext.tree.ColumnNodeUI, leaf:false, expanded:true }); }else{ - //创建子节点 + //创建子节点(进入灭菌筐器械包节点) node = new top.Ext.tree.TreeNode({ id:Ext.id(), - text:sstsConfig.showDepartOfTousseInstanceSterile == true ? depart : barcode, iconCls:'task', uiProvider:top.Ext.tree.ColumnNodeUI, leaf:true, expanded:true }); } - //********************** 节点保存的属性值 ****************************// + + node.attributes.isParentNode=isParentNode; node.attributes.barcode=barcode; node.attributes.name=name; - node.attributes.type=type; - node.attributes.insideTousse = insideTousse; - node.attributes.position = position; + node.attributes.typeForSterilizationStatistics=typeForSterilizationStatistics; node.attributes.depart=depart; + node.attributes.type = type; + node.attributes.position = position; + node.attributes.amount = amount; return node; } /** * 统计篮筐和器械包数量,并且更新统计信息列表 - * */ function statisticsTousseAndBasket () { var rootNode = sterilizationColumnTree.getRootNode(); //灭菌物品columnTree的根节点 var basketAmount = 0; //篮筐数量 - var toussBarcodes = ''; //需要进行统计器械包条码的集合每个条码之间用分号分隔 - var noChild = true; var tousseNameOfAmount = {}; //器械包名称和数量 + var statisticsAmount = {'篮筐':0,'器械包':0,'敷料包':0,'外来器械包':0,'代理灭菌包':0,'灭菌物品总数量':0}; rootNode.eachChild(function(pNode){ - noChild = false; if(pNode.attributes.type == '篮筐') { //此节点是篮筐 - basketAmount ++; + statisticsAmount['篮筐'] = statisticsAmount['篮筐'] + 1; if (!pNode.isExpanded()) { //如果没展开,需要手动展开,不然会导致里面的子节点没有加载 pNode.expand(); } pNode.eachChild(function(pNode){ - toussBarcodes += pNode.attributes.barcode + ';'; - var tousseName = pNode.attributes.name; - if (tousseNameOfAmount.hasOwnProperty(tousseName)) { //存在此属性,则值加1 - var amount = tousseNameOfAmount[tousseName]; - tousseNameOfAmount[tousseName] = ++ amount; - } else { - tousseNameOfAmount[tousseName] = 1; - } + sumTousseAndBasket(pNode, tousseNameOfAmount, statisticsAmount); }); } else { //此节点是器械包 - toussBarcodes += pNode.attributes.barcode + ';'; - var tousseName = pNode.attributes.name; - if (tousseNameOfAmount.hasOwnProperty(tousseName)) { //存在此属性,则值加1 - var amount = tousseNameOfAmount[tousseName]; - tousseNameOfAmount[tousseName] = ++ amount; - } else { - tousseNameOfAmount[tousseName] = 1; - } + sumTousseAndBasket(pNode, tousseNameOfAmount, statisticsAmount); } }); - if (noChild) { //没有子节点 - tousseItemCountJsonStore.removeAll(); - top.Ext.getCmp('totalAmount').setText("灭菌物品总数量:"); - top.Ext.getCmp('typeTotalAmount').setText(''); - return false; - } + top.Ext.getCmp('totalAmount').setText("灭菌物品总数量:"+(statisticsAmount['灭菌物品总数量'])); + top.Ext.getCmp('typeTotalAmount').setText( + "篮筐:" + statisticsAmount['篮筐'] + + " ,器械包:" + statisticsAmount['器械包'] + + " ,敷料包:" + statisticsAmount['敷料包'] + + " ,外来器械包:" + statisticsAmount['外来器械包'] + + ", 代理灭菌包:"+ statisticsAmount['代理灭菌包']); - - 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('totalAmount').setText("灭菌物品总数量:"+(t_amount+f_amount+d_amount+p_amount)); - top.Ext.getCmp('typeTotalAmount').setText("篮筐:"+basketAmount+" ,器械包:"+t_amount+" ,敷料包:"+d_amount+" ,外来器械包:"+f_amount+", 代理灭菌包:"+p_amount); - } - }, - failure : function(response, options) { - } - }); - tousseItemCountJsonStore.removeAll(); for(var key in tousseNameOfAmount){ - if (tousseNameOfAmount.hasOwnProperty(key)) { //过滤掉非“tousseNameOfAmount”本对象的属性比较严谨一些 - tousseItemCountJsonStore.add(new tousseItemCountRecord({ + if (tousseNameOfAmount.hasOwnProperty(key)) { //过滤掉非“tousseNameOfAmount”本对象的属性比较严谨一些 + tousseItemCountJsonStore.add(new tousseItemCountRecord({ tousseName : key, count : tousseNameOfAmount[key] })); - } - } + } + } } /** + * 合计器械包和灭菌筐个数 + */ +function sumTousseAndBasket(pNode, tousseNameOfAmount, statisticsAmount) { + var tousseName = pNode.attributes.name; + var typeForSterilizationStatistics = pNode.attributes.typeForSterilizationStatistics; + var amount = parseInt(pNode.attributes.amount); + if (tousseNameOfAmount.hasOwnProperty(tousseName)) { + tousseNameOfAmount[tousseName] = tousseNameOfAmount[tousseName] + amount; + } else { + tousseNameOfAmount[tousseName] = amount; + } + statisticsAmount[typeForSterilizationStatistics] = statisticsAmount[typeForSterilizationStatistics] + amount; + statisticsAmount['灭菌物品总数量'] = statisticsAmount['灭菌物品总数量'] + amount; +} + +/** * 扫描灭菌架条码 * @param barcode 架条码条码 */ @@ -423,24 +384,28 @@ function cloneBasketOrTousse(node){ var barcode = node.attributes.barcode; var name = node.attributes.name; + var typeForSterilizationStatistics = node.attributes.typeForSterilizationStatistics; var type = node.attributes.type; - var insideTousse = node.attributes.insideTousse; var depart = node.attributes.depart; var position = node.attributes.position; - if(typeof(insideTousse) == 'undefined' || insideTousse == true){ - // 单个器械包或者篮筐 + var amount = node.attributes.amount; + // 没入篮筐的器械包或者篮筐 + if(node.attributes.isParentNode){ if(type == '器械包'){ - var cloneNode = createNode(true,barcode,name,depart,'器械包',true,position); + var cloneNode = createNode(true,barcode,name,typeForSterilizationStatistics,depart,type,position,amount); return cloneNode; }else{ - var cloneNode = createNode(true,barcode,name,'','篮筐',true,position); + var cloneNode = createNode(true,barcode,name,typeForSterilizationStatistics,depart,type,position,amount); var childNodes = node.attributes.children; if(childNodes != null){ for(var i=0;i 0){ - var sterilization = top.Ext.getCmp('sterilizationType').getValue(); - if(!sterilization){ - top.Ext.getCmp('sterilizationType').setValue(sterilingType); - }else if(sterilingType != sterilization){ - showResultWithoutSpeak(tousseName + "的灭菌程序为【" + sterilingType + "】"); - } + if(top.Ext.getCmp('sterilizationType').getValue() != sterilingType){ + showResultWithoutSpeak("器械包[" + tousseName + "]的灭菌程序和所选的灭菌程序不同!"); } + if(includeImplant == "是"){ + showResultWithoutSpeak("此外来器械包含有植入物,需要做生物监测!"); + } + //添加到灭菌物品视图列表的第一行 var rootNode = sterilizationColumnTree.getRootNode(); - var parentNode = createNode(true, barcodeStr, tousseName, department, '器械包', true, position); + var parentNode = createNode(true, barcodeStr, tousseName, typeForSterilizationStatistics, department, '器械包', position, 1); var firstChildNode = rootNode.item(0); if(firstChildNode == null || firstChildNode == undefined){ rootNode.appendChild(parentNode); }else{ rootNode.insertBefore(parentNode, firstChildNode); } speakBasket.addGoods('', tousseName, 1); - if(includeImplant == "是"){ - showResultWithoutSpeak("此外来器械包含有植入物,需要做生物监测!"); - } + removePendingSterilizationGoods(barcodeStr) } else if (success == 1) { //容器(单个灭菌框或虚拟篮筐) var tousseInstanceArr = resultData.tousseInstanceArr; //进入容器的器械包集合 var containerName = resultData.containerName; //容器名称 @@ -583,51 +544,40 @@ speakContent = containerName; //添加到灭菌物品视图列表的第一行 var rootNode = sterilizationColumnTree.getRootNode(); - var parentNode = createNode(true, barcodeStr, containerName, '', '篮筐', true, position); + var parentNode = createNode(true, barcodeStr, containerName, '', '', '篮筐', position, 1); var firstChildNode = rootNode.item(0); if(firstChildNode == null || firstChildNode == undefined){ rootNode.appendChild(parentNode); }else{ rootNode.insertBefore(parentNode, firstChildNode); } - var sterilingTypeTemp = ''; + var sterilingTypeTemp = top.Ext.getCmp('sterilizationType').getValue(); for(var i = 0; i < length; i ++) { var tousseInstan = tousseInstanceArr[i]; var tousseBarcode = tousseInstan.tousseBarcode; //器械包条码 var tousseName = tousseInstan.tousseName; //器械包名称 + var typeForSterilizationStatistics = tousseInstan.typeForSterilizationStatistics; //器械包类型(用于分类统计) var sterilingType = tousseInstan.SterilingType; //灭菌程序 var department = tousseInstan.department; //科室 - if(sterilingTypeTemp == ''){ - sterilingTypeTemp = sterilingType; - }else{ - if(sterilingTypeTemp != sterilingType){ - showResultWithoutSpeak(containerName + "中包含不同的灭菌程序的物品!"); - } + if(sterilingTypeTemp != sterilingType){ + showResultWithoutSpeak("灭菌筐[" + containerName + "]里面的器械包[" + tousseName + "]的灭菌程序和所选的灭菌程序不同!"); } - var childNode = createNode(false, tousseBarcode, tousseName, department, '器械包', false, ''); + var childNode = createNode(false, tousseBarcode, tousseName, typeForSterilizationStatistics, department, '器械包', '', 1); parentNode.appendChild(childNode); speakBasket.addGoods(containerName, tousseName, 1); } - if(sterilingTypeTemp){ - var sterilization = top.Ext.getCmp('sterilizationType').getValue(); - if(!sterilization){ - top.Ext.getCmp('sterilizationType').setValue(sterilingTypeTemp); - }else if(sterilization != sterilingTypeTemp){ - showResultWithoutSpeak(containerName + '中物品与所选灭菌程序不匹配!'); - } - } - //加载灭菌参数 SterilizationRecordTableManager.getParameter(top.Ext.getCmp('sterilizationType').getValue(), function(result){ if(result != null && result.length > 0){ top.Ext.getCmp('parameter').setValue(result); } }); + removePendingSterilizationGoods(barcodeStr) } else if(success == 2) { //不追溯器械包 var tousseInstanceArr = resultData.tousseInstanceArr; var length = tousseInstanceArr.length; @@ -636,9 +586,10 @@ return; } + var sterilingTypeTemp = top.Ext.getCmp('sterilizationType').getValue(); 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; //灭菌程序 @@ -649,9 +600,13 @@ return; }; + if(sterilingTypeTemp != sterilingType){ + showResultWithoutSpeak("器械包[" + tousseName + "]的灭菌程序和所选的灭菌程序不同!"); + } + //添加到灭菌物品视图列表的第一行 var rootNode = sterilizationColumnTree.getRootNode(); - var parentNode = createNode(true, tousseBarcode, tousseName, department, '器械包', true, position); + var parentNode = createNode(true, tousseBarcode, tousseName, typeForSterilizationStatistics, department, '器械包', position, 1); var firstChildNode = rootNode.item(0); if(firstChildNode == null || firstChildNode == undefined){ rootNode.appendChild(parentNode); @@ -671,23 +626,20 @@ } var alreadyAdd = 0; - var sterilingTypeTemp = ''; + var sterilingTypeTemp = top.Ext.getCmp('sterilizationType').getValue(); var rootNode = sterilizationColumnTree.getRootNode(); speakContent = rootNode.text; for(var i = 0; i < length; i ++) { var tousseInstan = tousseInstanceArr[i]; var tousseBarcode = tousseInstan.tousseBarcode; //器械包条码 var tousseName = tousseInstan.tousseName; //器械包名称 + var typeForSterilizationStatistics = tousseInstan.typeForSterilizationStatistics; //器械包类型(用于分类统计) var sterilingType = tousseInstan.SterilingType; //灭菌程序 var department = tousseInstan.department; //科室 - if(sterilingTypeTemp == ''){ - sterilingTypeTemp = sterilingType; - }else{ - if(sterilingTypeTemp != sterilingType){ - showResultWithoutSpeak(containerName + "中包含不同的灭菌程序的物品!"); - } + if(sterilingTypeTemp != sterilingType){ + showResultWithoutSpeak("器械包[" + tousseName + "]的灭菌程序和所选的灭菌程序不同!"); } var exists = false; @@ -707,7 +659,7 @@ }); if(!exists){ //此包没有扫描过并且没有入审核篮筐 //添加到灭菌物品视图列表的第一行 - var parentNode = createNode(true, tousseBarcode, tousseName, department, '器械包', true, position); + var parentNode = createNode(true, tousseBarcode, tousseName, typeForSterilizationStatistics, department, '器械包', position, 1); var firstChildNode = rootNode.item(0); if(firstChildNode == null || firstChildNode == undefined){ rootNode.appendChild(parentNode); @@ -716,18 +668,10 @@ } speakBasket.addGoods('', tousseName, 1); alreadyAdd ++; + removePendingSterilizationGoods(tousseBarcode); } } - if(sterilingTypeTemp){ - var sterilization = top.Ext.getCmp('sterilizationType').getValue(); - if(!sterilization){ - top.Ext.getCmp('sterilizationType').setValue(sterilingTypeTemp); - }else if(sterilization != sterilingTypeTemp){ - showResultWithoutSpeak(containerName + '中物品与所选灭菌程序不匹配!'); - } - } - //加载灭菌参数 SterilizationRecordTableManager.getParameter(top.Ext.getCmp('sterilizationType').getValue(), function(result){ if(result != null && result.length > 0){ @@ -738,7 +682,7 @@ showResult('未找到符合条件的器械包或器械包已扫描至表格中.'); speakContent = null; } - } else if(success == 4) { + } else if(success == 4) { //首尾虚拟篮筐 var tousseInstanceArr = resultData.tousseInstanceArr; var length = tousseInstanceArr.length; if (length < 1) { @@ -747,7 +691,7 @@ } var alreadyAdd = 0; - var sterilingTypeTemp = ''; + var sterilingTypeTemp = top.Ext.getCmp('sterilizationType').getValue(); var rootNode = sterilizationColumnTree.getRootNode(); speakContent = rootNode.text; for(var i = 0; i < length; i ++) { @@ -756,18 +700,14 @@ var virtualBasketSeqNum = tousseInstan.virtualBasketSeqNum; //虚拟篮筐编号 var tousseBarcode = tousseInstan.tousseBarcode; //器械包条码 var tousseName = tousseInstan.tousseName; //器械包名称 + var typeForSterilizationStatistics = tousseInstan.typeForSterilizationStatistics; //器械包类型(用于分类统计) var sterilingType = tousseInstan.SterilingType; //灭菌程序 var department = tousseInstan.department; //科室 - if(sterilingTypeTemp == ''){ - sterilingTypeTemp = sterilingType; - }else{ - if(sterilingTypeTemp != sterilingType){ - showResultWithoutSpeak(containerName + "中包含不同的灭菌程序的物品!"); - } + if(sterilingTypeTemp != sterilingType){ + showResultWithoutSpeak("虚拟篮筐[" + virtualBasketSeqNum + "]里面的器械包[" + tousseName + "]的灭菌程序和所选的灭菌程序不同!"); } - var exists = false; var currentParentNode; rootNode.eachChild(function(pNode){ @@ -780,15 +720,15 @@ if(!exists){ //添加到灭菌物品视图列表的第一行 - currentParentNode = createNode(true, virtualBasketSeqNum, "虚拟篮筐", '', '篮筐', true, position); + currentParentNode = createNode(true, virtualBasketSeqNum, "虚拟篮筐", '', '', '篮筐', position, 1); var firstChildNode = rootNode.item(0); if(firstChildNode == null || firstChildNode == undefined){ rootNode.appendChild(currentParentNode); }else{ rootNode.insertBefore(currentParentNode,firstChildNode); } - var childNode = createNode(false, tousseBarcode, tousseName, department, '器械包', false, ''); + var childNode = createNode(false, tousseBarcode, tousseName, typeForSterilizationStatistics, department, '器械包', '', 1); currentParentNode.appendChild(childNode); speakBasket.addGoods('', tousseName, 1); alreadyAdd ++; @@ -803,23 +743,14 @@ }); } if(!existsCNode){ - var childNode = createNode(false, tousseBarcode, tousseName, department, '器械包', false, ''); + var childNode = createNode(false, tousseBarcode, tousseName, typeForSterilizationStatistics, department, '器械包', '', 1); currentParentNode.appendChild(childNode); speakBasket.addGoods('', tousseName, 1); alreadyAdd ++; } } } - if(sterilingTypeTemp){ - var sterilization = top.Ext.getCmp('sterilizationType').getValue(); - if(!sterilization){ - top.Ext.getCmp('sterilizationType').setValue(sterilingTypeTemp); - }else if(sterilization != sterilingTypeTemp){ - showResultWithoutSpeak(containerName + '中物品与所选灭菌程序不匹配!'); - } - } - //加载灭菌参数 SterilizationRecordTableManager.getParameter(top.Ext.getCmp('sterilizationType').getValue(),function(result){ if(result != null && result.length > 0){ @@ -833,10 +764,6 @@ } else if (success == -1) { showResult(resultData.failureCause); } - - if (success == 0 || success == 1 || success == 3) { - removePendingSterilizationGoods(barcodeStr); - } speakBasket.speakContent(); }else{ showResult("您扫描的物品非已审核的器械包或篮筐!"); @@ -851,126 +778,43 @@ } /** - * 将待灭菌的篮筐与器械包的数据加载到待灭菌表格中 - * @param data 数据格式如下: - * [ - * { //一键入炉的待灭菌器械包或篮筐这一层 - * dataList:[ - * { //第一层节点,一般是灭菌筐或者是器械包 - * type:"器械包/篮筐",depart:'',barcode:"",name:"",isUrgent:"",reviewTime:"",sterilingType:"",isBigPackage:"",bigPackageSterilizerType:"",includeImplant:"" - * dataList:[ - * //第二层节点,一般是灭菌筐内的器械包 - * {depart:'',barcode:"",name:"",isUrgent:"",reviewTime:"",sterilingType:"",isBigPackage:"",bigPackageSterilizerType:"",includeImplant:""}, - * {depart:'',barcode:"",name:"",isUrgent:"",reviewTime:"",sterilingType:"",isBigPackage:"",bigPackageSterilizerType:"",includeImplant:""} - * ] - * }, - * { - * type:"器械包/篮筐",depart:'',barcode:"",name:"",isUrgent:"",reviewTime:"",sterilingType:"",isBigPackage:"",bigPackageSterilizerType:"",includeImplant:"" - * dataList:[ - * {depart:'',barcode:"",name:"",isUrgent:"",reviewTime:"",sterilingType:"",isBigPackage:"",bigPackageSterilizerType:"",includeImplant:""}, - * {depart:'',barcode:"",name:"",isUrgent:"",reviewTime:"",sterilingType:"",isBigPackage:"",bigPackageSterilizerType:"",includeImplant:""} - * ] - * } - * ] - * }, - * { - * dataList:[ - * { - * type:"器械包/篮筐",depart:'',barcode:"",name:"",isUrgent:"",reviewTime:"",sterilingType:"",isBigPackage:"",bigPackageSterilizerType:"",includeImplant:"" - * dataList:[ - * {depart:'',barcode:"",name:"",isUrgent:"",reviewTime:"",sterilingType:"",isBigPackage:"",bigPackageSterilizerType:"",includeImplant:""}, - * {depart:'',barcode:"",name:"",isUrgent:"",reviewTime:"",sterilingType:"",isBigPackage:"",bigPackageSterilizerType:"",includeImplant:""} - * ] - * }, - * { - * type:"器械包/篮筐",depart:'',barcode:"",name:"",isUrgent:"",reviewTime:"",sterilingType:"",isBigPackage:"",bigPackageSterilizerType:"",includeImplant:"" - * dataList:[ - * {depart:'',barcode:"",name:"",isUrgent:"",reviewTime:"",sterilingType:"",isBigPackage:"",bigPackageSterilizerType:"",includeImplant:""}, - * {depart:'',barcode:"",name:"",isUrgent:"",reviewTime:"",sterilingType:"",isBigPackage:"",bigPackageSterilizerType:"",includeImplant:""} - * ] - * } - * ] - * } - * ] + * 器械包节点 = {type:"器械包",barcode:"器械包条码",name:"器械包名称",typeForSterilizationStatistics:"器械包类型(注意区别于真正的类型)",sterilingType:"灭菌程序",depart:"科室"} + * 篮筐节点 = {type:"篮筐",barcode:"篮筐条码",name:"篮筐名称",dataList:[{barcode:"器械包条码",name:"器械包名称",typeForSterilizationStatistics:"器械包类型(注意区别于真正的类型)",sterilingType:"灭菌程序",depart:"科室"}...]} + * datas格式:[器械包节点/篮筐节点,...] */ -function loadContainerAndTousseToGrid(data){ +function loadContainerAndTousseToGrid(datas){ var position = top.Ext.getCmp('position').getValue(); var rootNode = sterilizationColumnTree.getRootNode(); - var speakBasket = new SpeakBasket(); - if(data && data.length > 0){ - for(var i = 0;i < data.length;i++){ - var waitSterilingNodeJsonObject = data[i];//一键入炉的待灭菌器械包或篮筐这一层 - if(waitSterilingNodeJsonObject && waitSterilingNodeJsonObject.dataList){ - var waitSterilingFirstNodeJsonArray = waitSterilingNodeJsonObject.dataList; - if(waitSterilingFirstNodeJsonArray && waitSterilingFirstNodeJsonArray.length > 0){ - for(var j = 0; j < waitSterilingFirstNodeJsonArray.length;j++){ - var waitSterilingFirstNodeJsonObject = waitSterilingFirstNodeJsonArray[j]; - - //构造第一层级节点 - var parentNode = createNode(true,waitSterilingFirstNodeJsonObject.barcode,waitSterilingFirstNodeJsonObject.name,waitSterilingFirstNodeJsonObject.depart,waitSterilingFirstNodeJsonObject.type,true,position); - var firstChildNode = rootNode.item(0); - if(!firstChildNode || i > 0){ - rootNode.appendChild(parentNode); - }else{ - rootNode.insertBefore(parentNode,firstChildNode); - } - - if(waitSterilingFirstNodeJsonObject && waitSterilingFirstNodeJsonObject.dataList){ - var waitSterilingSecondNodeJsonArray = waitSterilingFirstNodeJsonObject.dataList; - if(waitSterilingSecondNodeJsonArray && waitSterilingSecondNodeJsonArray.length > 0){ - for(var k = 0; k < waitSterilingSecondNodeJsonArray.length;k++){ - var waitSterilingSecondNodeNodeJsonObject = waitSterilingSecondNodeJsonArray[k]; - //构造第二层级节点 - var childNode = createNode(false,waitSterilingSecondNodeNodeJsonObject.barcode,waitSterilingSecondNodeNodeJsonObject.name, - waitSterilingSecondNodeNodeJsonObject.depart,waitSterilingSecondNodeNodeJsonObject.type,false,position); -// var childNode = createNode(true,waitSterilingSecondNodeNodeJsonObject.barcode,waitSterilingSecondNodeNodeJsonObject.name, -// waitSterilingSecondNodeNodeJsonObject.depart,waitSterilingSecondNodeNodeJsonObject.type,true,position); - parentNode.appendChild(childNode); - } - } - } + if(datas && datas.length){ + for(var i = 0;i < datas.length;i++){ + var data = datas[i];//一键入炉的待灭菌,没有入篮筐的器械包或篮筐节点 + var parentNode; + if ('器械包' == data.type) { + parentNode = createNode(true,data.barcode,data.name,data.typeForSterilizationStatistics,data.depart,'器械包',position,1); + } else { + parentNode = createNode(true,data.barcode,data.name,'',data.depart,'篮筐',position,1); + var tousseInstanceArr = data.dataList + if(tousseInstanceArr && tousseInstanceArr.length > 0){ + for(var k = 0; k < tousseInstanceArr.length; k++){ + var ti = tousseInstanceArr[k]; + var childNode = createNode(false,ti.barcode,ti.name,ti.typeForSterilizationStatistics,ti.depart,'器械包',position,1); + parentNode.appendChild(childNode); } } } + var firstChildNode = rootNode.item(0); + if(!firstChildNode){ + rootNode.appendChild(parentNode); + }else{ + rootNode.insertBefore(parentNode,firstChildNode); + } } } - statisticsTousseAndBasket(); //每次成功扫描条码后统计一下器械包的数量和灭菌篮筐的数量 } -function reloadGrid() { - ds.load( { - params : { - tousseId : id - }, - callback : function(records, options, success){ - if(success){ - var countObj = new countTousseNameObj(); - for(var i=0,len=records.length;i= objBarcodeInt){ pNode.remove(); } @@ -1048,7 +912,11 @@ } }); } -//将器械包移除篮筐 + +/** + * 将器械包移除篮筐(只能移除篮筐里面的器械包,这里只是方便用户,不需要特意回到“灭菌装载”界面操作) + * @param barcode + */ function removeGridItem(barcode) { top.Ext.Msg.confirm("删除确认","是否要将此器械包移除篮筐",function(btn){ if(btn=='yes'){ @@ -1089,55 +957,20 @@ } }); } -//已审核未灭菌的器械包删除 -function deleteTousseInstance(barcode){ - top.Ext.MessageBox.confirm("请确认", "是否删除该器械包?", - function(btn) { - if (btn == 'yes') { - TousseInstanceTableManager.deleteTousseInstance(barcode,function(msg){ - showResult(msg); - if(msg == '删除成功'){ - var rootNode = pendingSterilizationColumnTree.getRootNode(); - var needToDeletedNode = rootNode.findChild('objBarcode',barcode); - if(needToDeletedNode == null){ - rootNode.eachChild(function(pNode){ - if(pNode.findChild('objBarcode',barcode) != null){ - var newChildNodes = new Array(); - pNode.eachChild(function(cNode){ - if(cNode.attributes.objBarcode != barcode){ - newChildNodes.push(createPendingSterilizationGoodsNode(cNode.attributes.objBarcode, cNode.attributes.objName, cNode.attributes.objAmount, cNode.attributes.type, cNode.attributes.depart)); - } - }); - if(newChildNodes.length != 0){ - var newNode = createPendingSterilizationGoodsNode(pNode.attributes.objBarcode, pNode.attributes.objName, pNode.attributes.objAmount - 1, pNode.attributes.type,''); - rootNode.replaceChild(newNode,pNode); - newNode.appendChild(newChildNodes); - }else{ - pNode.remove(); - } - return false; - } - }); - }else{ - needToDeletedNode.remove(); - } - }else{ - pendingSterilizationColumnTree.loader.load(pendingSterilizationColumnTree.root,function(){}); - } - }); - } - } - ); -} -//删除灭菌物品栏,物品回退至待灭菌物品列表 + +/** + * 删除灭菌物品栏,物品回退至待灭菌物品列表 + * @param clickNode + */ function addPendingStarilizationGoodsFromRecord(clickNode) { var objBarcode = clickNode.attributes.barcode; var objName = clickNode.attributes.name; - var objAmount = 1; var type = clickNode.attributes.type; - var array = new Array(); - var isBasketUrgent = false; + var depart = clickNode.attributes.depart; + var array = new Array(); + var isBasketUrgent = false; //篮筐是否加急 + var objAmount = 1; if (type == '篮筐') { type = 'BASKET'; objAmount = 0; @@ -1166,7 +999,7 @@ type = 'TOUSSE'; } - var node = createPendingSterilizationGoodsNode(objBarcode, objName, objAmount, type,''); + var node = createPendingSterilizationGoodsNode(objBarcode, objName, objAmount, type, depart); if(type == 'TOUSSE'){ var isUrgent = '否'; DWREngine.setAsync(false); @@ -1197,15 +1030,22 @@ } } -//生成待灭菌物品节点 -function createPendingSterilizationGoodsNode(objBarcode, objName, objAmount, type,depart) { +/** + * 生成待灭菌物品节点 + * @param objBarcode 条码(篮筐或器械包) + * @param objName 名称(篮筐或器械包) + * @param objAmount 数量(如果type=BASKET则表示此篮筐里面的器械包个数,其他的均为1) + * @param type 类型(值为“BASKET”或者“TOUSSE”或者“TOUSSE_IN”,分别表示“篮筐”、“没入篮筐的器械包”、“入灭菌筐的器械包”) + * @param depart 科室 + * @returns + */ +function createPendingSterilizationGoodsNode(objBarcode, objName, objAmount, type, depart) { var node; if(type == 'BASKET'){ //创建父节点 node = new top.Ext.tree.TreeNode({ id : Ext.id(), - text : sstsConfig.showDepartOfTousseInstanceSterile == true ? depart : objBarcode, - cls : 'master-task', + iconCls:'task-folder', uiProvider : top.Ext.tree.ColumnNodeUI, leaf : false, expanded : false @@ -1214,15 +1054,14 @@ //创建子节点 node = new top.Ext.tree.TreeNode({ id : Ext.id(), - text : sstsConfig.showDepartOfTousseInstanceSterile == true ? depart : objBarcode, iconCls : 'task', uiProvider : top.Ext.tree.ColumnNodeUI, leaf : true, expanded : false }); node.attributes.depart=depart; } - //********************** 节点保存的属性值 ****************************// + node.attributes.objBarcode=objBarcode; node.attributes.objName=objName; node.attributes.objAmount=objAmount; @@ -1248,10 +1087,6 @@ function addAndEditSterilizationRecord(id, currentStatus, reSterilization) { tousseItemCountJsonStore = new Ext.data.Store({ autoLoad : false, - proxy : new Ext.data.HttpProxy({ - url : WWWROOT + '/disinfectSystem/sterilization/sterilizationRecordAction!getSterilizationRecordInfo.do?id='+id, - method : 'POST' - }), reader : new Ext.data.JsonReader({ fields : [ { name : 'tousseName' @@ -1261,27 +1096,23 @@ }) }); - if(id){ - tousseItemCountJsonStore.load(); - } - //灭菌物品列表grid的列头,根据可配置的参数进行动态定义 var sterilizationColumnTreeColumnArray = []; - if(sstsConfig.showDepartOfTousseInstanceSterile == true){ + if(sstsConfig.showDepartOfTousseInstanceSterile){ sterilizationColumnTreeColumnArray.push({header:'科室',width:150,dataIndex:'depart'}); } - sterilizationColumnTreeColumnArray.push({header:'条码',width:110,dataIndex:'barcode'}); + sterilizationColumnTreeColumnArray.push({header:'条码',width:80,dataIndex:'barcode'}); sterilizationColumnTreeColumnArray.push({header:'名称',width:170,dataIndex:'name'}); - sterilizationColumnTreeColumnArray.push({header:'加急',width:170,dataIndex:'isUrgent',hidden:true}); - sterilizationColumnTreeColumnArray.push({header:'审核时间',width:170,dataIndex:'reviewTime',hidden:true}); - sterilizationColumnTreeColumnArray.push({header:'位置',width:80,dataIndex:'position',hidden:!((sstsConfig.hasOwnProperty('haveSterilizerPosition')) && sstsConfig.haveSterilizerPosition)}); + if (sstsConfig.haveSterilizerPosition) { + sterilizationColumnTreeColumnArray.push({header:'位置',width:80,dataIndex:'position'}); + } sterilizationColumnTreeColumnArray.push({header:'删除',width:60,dataIndex:'type', renderer:function(v,p,record){ - var str = "\"删除外来器械包\""; - if (record.type == '篮筐' || record.insideTousse == true) { - if(currentStatus != statusEnd && currentStatus != statusFailure){ - return str; - } + //只有“没有入篮筐的器械包节点”或者“篮筐节点”,并且灭菌记录的状态不为“已灭菌”和“灭菌失败”才可以删除 + if(record.isParentNode == true + && currentStatus != statusEnd + && currentStatus != statusFailure){ + return "\"删除外来器械包\""; } return ''; } @@ -1302,15 +1133,18 @@ baseParams : {id:id}, uiProviders:{ 'col': top.Ext.tree.ColumnNodeUI + }, + listeners : { + load : function(_this, node, response) { + statisticsTousseAndBasket(); + } } }), root: new top.Ext.tree.AsyncTreeNode({ text:'灭菌物品列表' }) }); - //sterilizationColumnTree.expand(); - sterilizationColumnTree.on("beforeclick",function(clickNode,eObj){ if(isClickDel){ //点击删除图标 setIsClickDel(0); @@ -1331,132 +1165,60 @@ //灭菌物品列表grid的列头,根据可配置的参数进行动态定义 var pendingSterilizationColumnTreeColumnArray = []; - if(sstsConfig.showDepartOfTousseInstanceSterile == true){ + pendingSterilizationColumnTreeColumnArray.push({ + header : '条码',width : 105,dataIndex : 'objBarcode' + }); + pendingSterilizationColumnTreeColumnArray.push({ + header : '名称',width : 150,dataIndex : 'objName' + }); + pendingSterilizationColumnTreeColumnArray.push({ + header : '数量',width : 35,dataIndex : 'objAmount' + }); + pendingSterilizationColumnTreeColumnArray.push({ + header : '载入',width : 35,dataIndex : 'type', + renderer : function(v,p,record){ + var str = "\"\""; + if (record.type == 'BASKET' || record.type == 'TOUSSE') { + if(currentStatus != statusEnd && currentStatus != statusFailure){ + return str; + } + } + return ''; + } + }); + if(sstsConfig.showDepartOfTousseInstanceSterile == true) { pendingSterilizationColumnTreeColumnArray.push({ - header : '科室', - width : 150, - dataIndex : 'depart',hidden:false + header : '科室',width : 150,dataIndex : 'depart' }); - - pendingSterilizationColumnTreeColumnArray.push({ - header : '名称', - width : 150, - dataIndex : 'objName' - }); - - pendingSterilizationColumnTreeColumnArray.push({ - header : '数量', - width : 35, - dataIndex : 'objAmount' - }); - - pendingSterilizationColumnTreeColumnArray.push({ - header : '条码', - width : 105, - dataIndex : 'objBarcode' - }); - - pendingSterilizationColumnTreeColumnArray.push({ - header : '审核时间', - width : 135, - dataIndex : 'reviewTime' - }); - - pendingSterilizationColumnTreeColumnArray.push({ - header : '载入', - width : 35, - dataIndex : 'type', - renderer : function(v,p,record){ - var str = "\"\""; - if (record.type == 'BASKET' || record.type == 'TOUSSE') { - if(currentStatus != statusEnd && currentStatus != statusFailure){ - return str; - } - } - return ''; - } - }); - - pendingSterilizationColumnTreeColumnArray.push({ - header : '加急', - width : 35, - dataIndex : 'isUrgent', - renderer : function(v, p, record) { - if (v == '是') { - return '' + v + ''; - }else{ - return '' + '否' + ''; - } - } - }); - - }else{ - pendingSterilizationColumnTreeColumnArray.push({ - header : '条码', - width : 115, - dataIndex : 'objBarcode' - }); - - pendingSterilizationColumnTreeColumnArray.push({ - header : '数量', - width : 35, - dataIndex : 'objAmount' - }); - - pendingSterilizationColumnTreeColumnArray.push({ - header : '加急', - width : 35, - dataIndex : 'isUrgent', - renderer : function(v, p, record) { - if (v == '是') { - return '' + v + ''; - }else{ - return '' + '否' + ''; - } - } - }); - - pendingSterilizationColumnTreeColumnArray.push({ - header : '审核时间', - width : 135, - dataIndex : 'reviewTime' - }); - - pendingSterilizationColumnTreeColumnArray.push({ - header : '载入', - width : 35, - dataIndex : 'type', - renderer : function(v,p,record){ - var str = "\"\""; - if (record.type == 'BASKET' || record.type == 'TOUSSE') { - if(currentStatus != statusEnd && currentStatus != statusFailure){ - return str; - } - } - return ''; - } - }); - - pendingSterilizationColumnTreeColumnArray.push({ - header : '名称', - width : 150, - dataIndex : 'objName' - }); } pendingSterilizationColumnTreeColumnArray.push({ + header : '审核时间',width : 135,dataIndex : 'reviewTime' + }); + pendingSterilizationColumnTreeColumnArray.push({ + header : '加急',width : 35,dataIndex : 'isUrgent', + renderer : function(v, p, record) { + if (v == '是') { + return '' + v + ''; + }else{ + return '' + '否' + ''; + } + } + }); + pendingSterilizationColumnTreeColumnArray.push({ header : '删除', width : 40, dataIndex : 'type', renderer : function(v,p,record){ var str = "\"\""; - if (record.type == 'TOUSSE' || record.type == 'TOUSSE_IN') { + if (record.type == 'TOUSSE_IN') { if(currentStatus != statusEnd && currentStatus != statusFailure){ return str; } } return ''; } }); + /** * 今天审核的待灭菌物品列表 */ @@ -1489,10 +1251,6 @@ formObj.getEl().mask("正在加载,请稍候..."); - var saveBarcode = ""; - sterilizationColumnTree.getRootNode().eachChild(function(pNode){ - saveBarcode += pNode.attributes.barcode+","; - }); //ajax请求后台传递待灭菌的条码(灭菌筐及包实例的条码集合) Ext.Ajax.request({ url : WWWROOT + '/disinfectSystem/sterilization/sterilizationRecordAction!batchAddToRecord.do', @@ -1501,14 +1259,14 @@ loadTousseNamesInBasket : true, //是否要加载篮筐里的器械包名称 //sterilizationRecordId : sterilizationRecordId, //灭菌记录id checkProxyDisinfection : 'yes', //是否需要检查代理灭菌是否已录入代理灭菌单 - saveBarcode : saveBarcode //此次扫描之前已经扫描的条码集合 + saveBarcode : getAlreadyScanBarcodes() //此次扫描之前已经扫描的条码集合 }, waitMsg : '正在处理,请稍候...', success : function(response, options) { var result = Ext.decode(response.responseText); if(result.success){ //将篮筐与器械包加载到灭菌列表中 - loadContainerAndTousseToGrid(result.data); + loadContainerAndTousseToGrid(result.datas); for(var i = 0;i < waitSterilingBarcodeArray.length;i++){ //移除今天审核待灭菌物品的数据 removePendingSterilizationGoods(waitSterilingBarcodeArray[i]); @@ -1572,7 +1330,7 @@ }); this.id = id; tousseItemCountJsonStore.removeAll(); - ds.removeAll(); + formObj = new top.Ext.FormPanel({ id : 'sterilizerForm', frame : true, @@ -1588,7 +1346,7 @@ items : [{ layout : 'column', items : [{ - columnWidth : 0.75, + columnWidth : 0.67, layout : 'column', items : [{ xtype : "fieldset", @@ -1928,7 +1686,7 @@ loadPositionByBarcode(barcode); top.Ext.getCmp('inputBarcode').setValue(""); }else if("virtualBasket" == result){ //虚拟篮筐3 - loadTousseInstance(barcode,recordID); + loadTousseInstanceCheckPosition(barcode,recordID); if(hiddenEndBarcode || currentScanMode == 'single'){ top.Ext.getCmp('inputBarcode').setValue("");//如果使用虚拟篮筐机制,扫描成功后需要清除该文本内容 }else{ @@ -2005,9 +1763,9 @@ var result = response.responseText; if(result != null && result.length > 0){ if("virtualBasket" == result){ - loadTousseInstance(barcode + ";" + barcodeEnd,recordID); + loadTousseInstanceCheckPosition(barcode + ";" + barcodeEnd,recordID); }else if(TOUSSEINSTANCE == result){ - loadTousseInstance(barcode + ";" + barcodeEnd,recordID); + loadTousseInstanceCheckPosition(barcode + ";" + barcodeEnd,recordID); }else if("notTheSame" == result){ showResult("首尾条码/篮筐类型不一致,必须均为器械包条码或虚拟篮筐编号!"); }else if("barcodeEndInvalid" == result){ @@ -2160,16 +1918,16 @@ items : [ new top.Ext.grid.GridPanel({ id : 'tousseItemCountPanel', height : 325, - width : 385, +// width : 385, frame : false, border : true, tbar:[{ xtype : 'button', text : '灭菌物品统计' },"->",{ xtype : 'button', - id : 'totalAmount', - text : '灭菌物品总数量:' + id : 'totalAmount'/*, + text : '灭菌物品总数量:'*/ }], bbar:[{ xtype : 'button', @@ -2441,8 +2199,8 @@ },{ xtype : "fieldset", title : "中断记录列表", - layout : 'column', - height :120, + layout : 'fit', + height :200, columnWidth : 1, cls:'edit-5char-labelwidth', id : "interruptList", @@ -2476,15 +2234,14 @@ return str; }} ]), - width : 650, - height : 100, +// width : 650, +// height : 100, border : true, frame : false - }) - ] + })] }] },{ - columnWidth : 0.25, + columnWidth : 0.33, bodyStyle : 'margin-left:2px;margin-right:0px', layout : 'fit', items : [{ @@ -2578,9 +2335,8 @@ title : '灭菌记录信息', border : false, modal : true, - width : 1000, + width : top.screen.width > 1030 ? 1150 : 1020, height : top.screen.height > 800 ? 660 : 500, - // height: 650, plain : true, align : 'center', items : [ formObj ] @@ -2603,8 +2359,6 @@ top.Ext.getCmp('startDate').setValue(formatDateYear(sr.startDate)); top.Ext.getCmp('endDate').setValue(formatDateYear(sr.endDate)); top.Ext.getCmp('srSituationComfirmer').setValue(sr.srSituationComfirmer); - top.Ext.getCmp('totalAmount').setText("灭菌物品总数量:"+(sr.amount)); - top.Ext.getCmp('typeTotalAmount').setText("篮筐:"+sr.reviewedBasketAmount+" ,器械包:"+sr.tousseAmount+" ,敷料包:"+sr.dressingTousseAmount+" ,外来器械包:"+sr.foreignTousseAmount+", 代理灭菌包:"+sr.proxyTousseAmount); } if(reSterilization){ //重新灭菌 @@ -2731,104 +2485,14 @@ } var isNewRecord = false; -function saveMonitor(){ - if (!formObj.getForm().isValid()) { - showResult('请正确填写表单各值'); - return false; - } - - var id =top.Ext.getCmp('id').getValue(); - var physicsResult =top.Ext.getCmp('physicsResult').getValue(); - var chemistryResult =top.Ext.getCmp('chemistryResult').getValue(); - var biologyResult =top.Ext.getCmp('biologyResult').getValue(); - var sterilizerName = top.Ext.getCmp('sterilizerName').getValue(); - var cycleCounter = top.Ext.getCmp('cycleCounter').getValue(); - var remark = top.Ext.getCmp('remark').getValue(); - var biologicalMonitoringStartDate = top.Ext.getCmp('biologicalMonitoringStartDate').getValue(); - var biologicalMonitoringEndDate = top.Ext.getCmp('biologicalMonitoringEndDate').getValue(); - var biologicalMonitoringStartDateString = Ext.util.Format.date(biologicalMonitoringStartDate, 'Y-m-d H:i'); - var biologicalMonitoringEndDateString = Ext.util.Format.date(biologicalMonitoringEndDate, 'Y-m-d H:i'); - var monitorUser = top.Ext.getCmp('monitorUser').getValue(); - var monitorChecker = top.Ext.getCmp('monitorChecker').getValue(); - var monitorAuditor = top.Ext.getCmp('monitorAuditor').getValue(); - var endDate = top.Ext.getCmp('endDate').getValue(); - - if (sstsConfig.monitorCheckerMustFill) { //保存时,需要填写监测核对员 - if (sstsConfig.needMonitorAuditor) { //如果有监测审核员也要填写 - if (biologyResult != '无' && (!biologicalMonitoringStartDateString || !biologicalMonitoringEndDateString || !monitorUser || !monitorChecker || !monitorAuditor)) { - showResult('生物监测开始时间,结束时间,监测员,监测核对员,监测审核员,都要填写!'); - return false; - } - } else { - if (biologyResult != '无' && (!biologicalMonitoringStartDateString || !biologicalMonitoringEndDateString || !monitorUser || !monitorChecker)) { - showResult('生物监测开始时间,结束时间,监测员,监测核对员,都要填写!'); - return false; - } - } - } else { - if (biologyResult != '无' && (!biologicalMonitoringStartDateString || !biologicalMonitoringEndDateString || !monitorUser)) { - showResult('生物监测开始时间,结束时间,监测员,都要填写!'); - return false; - } - } - - if (biologicalMonitoringStartDateString) { - if (biologicalMonitoringStartDate < endDate) { - showResult('生物监测开始时间不能小于灭菌结束时间!'); - return false; - } - } - if (biologicalMonitoringStartDateString && biologicalMonitoringEndDateString) { - if (biologicalMonitoringStartDate > biologicalMonitoringEndDate) { - showResult('生物监测开始时间不能大于结束时间!'); - return false; - } - } - - - - - - // 验证循环计数器是否已经存在,一个灭菌炉的一个循环次数应是唯一的。 - { - DWREngine.setAsync(false); - var sign = true; - var isDefineDeviceInterface = true; - SterilizationRecordTableManager.isDefineDeviceInterface(sterilizerName,function(result){ - isDefineDeviceInterface = result; - }); - if( isDefineDeviceInterface ) - { - SterilizationRecordTableManager.isSterilizerCycleCounterExist(id,sterilizerName,cycleCounter, - function(result) { - sign = result; - }); - DWREngine.setAsync(true); - if (sign) { - showResult("灭菌炉的循环次数已存在,保存失败!"); - return false; - } - }else - { - top.Ext.getCmp('cycleCounter').setValue(0); - } - } - SterilizationRecordTableManager.saveMonitorResult(id,physicsResult,chemistryResult,biologyResult,cycleCounter,biologicalMonitoringStartDateString,biologicalMonitoringEndDateString,monitorUser,monitorChecker,monitorAuditor,remark,function(result){ - if(result){ - sterilizationRecordWin.close(); - showResult('保存成功'); - grid.dwrReload(); - }else{ - showResult("保存失败!"); - } - }); -} + function save() { if (!formObj.form.isValid()) { showResult('请正确填写表单各值'); this.enable(); return false; } + //重新灭菌 if(isNewRecord){ var tempid = top.Ext.getCmp('id').getValue(); top.Ext.getCmp('recordId').setValue(tempid); @@ -2934,6 +2598,20 @@ sterilizationRecordWin.close(); } +/** + * 获取已经扫描的条码集合(用分号分隔) + */ +function getAlreadyScanBarcodes() { + var barcodes = ""; + sterilizationColumnTree.getRootNode().eachChild(function(pNode){ + barcodes += pNode.attributes.barcode + ";"; + }); + if (barcodes) { + barcodes = barcodes.substring(0, barcodes.length - 1); + } + return barcodes; +} + function showQualityMonitory(qualityMonitoryId){ sterilizationRecordWin.close(); addQualityMonitoring(qualityMonitoryId);