Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterileloading/dwr/table/SterileLoadingTableManager.java =================================================================== diff -u -r15026 -r15975 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterileloading/dwr/table/SterileLoadingTableManager.java (.../SterileLoadingTableManager.java) (revision 15026) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterileloading/dwr/table/SterileLoadingTableManager.java (.../SterileLoadingTableManager.java) (revision 15975) @@ -174,4 +174,141 @@ } return jsonObj; } + + + /** + * 灭菌装载的条码扫描(灭菌筐条码、器械包实例条码、虚拟篮筐条码、器械包实例条码段、虚拟篮筐条码段等)调用的方法,并装载至灭菌篮筐 + * 将getResultJsonStrByBarcode方法及装载至篮筐合并到一起 + * @param barcodes 灭菌筐条码、器械包实例条码、虚拟篮筐条码、器械包实例条码段、虚拟篮筐条码段等.条码段的中间用逗号分隔 + * @param extraParam 已入筐的条码json参数,格式:{scannedBarcodes:['器械包条码1','器械包条码2'...,'器械包条码3']} + * @param basketBarcode 灭菌筐条码(只在扫描器械包条码时,才根据此参数判断) + * @param excludeBarcodes 已装载进来的条码 + * @return json字符串 {returnType:'',status:''...} + */ + public String scanBarcodeAndAddTousseToBasket(String barcodes,JSONObject extraParam , String basketBarcode){ + JSONObject json = new JSONObject(); + JSONUtil.addProperty(json, "returnType", "basketNotFound"); + if(StringUtils.isBlank(barcodes)){ + JSONUtil.addProperty(json, "returnType", ""); + return JSONUtil.addMessage(json, "条码不能为空!").toString(); + } + try{ + //拆分barcode,分号前作为首,之后作为尾 + String[] barCodeArray = barcodes.split(";"); + String barcode = barCodeArray[0]; + String barcodeEnd = null; + if(barCodeArray.length >= 2){ + barcodeEnd = barCodeArray[1]; + } + BarcodeDevice barcodeDevice = barcodeManager.getBarcodeByBarcode(barcode); + //判断是否存在 + if(barcodeDevice == null){ + return json.toString(); + } + //当前登录用户所属科室 + String currentOrgUnitCode = AcegiHelper.getLoginUser() + .getCurrentOrgUnitCode(); + if(barcodeDevice instanceof Container){ + Container container = (Container)barcodeDevice; + //判断灭菌筐是否为灭菌中,如果为灭菌中则提示灭菌中的篮筐不能进行灭菌装载 + if(Container.CONTAINER_STATUS_STERILIZING.equals(container.getStatus())){ + JSONUtil.addProperty(json, "returnType", "containerSterilizing"); + return json.toString(); + } + //判断篮筐中是否有未发货(已灭菌)的器械包,如果有则进行提示 + if(CollectionUtils.isNotEmpty(tousseInstanceManager.getTousseInstanceBySql("where po.status='" + TousseInstance.STATUS_STERILED + + "' and po.reviewBasket_id in (select id from ReviewedBasket where container.id='" + container.getId() + "'))"))){ + JSONUtil.addProperty(json, "returnType", "scanBasketFoundNotDeliverTousseInContainer");//扫描篮筐时发现有未发货的器械包 + JSONUtil.addProperty(json, "containerName", container.getContainerName()); + JSONUtil.addProperty(json, "basketBarcode", container.getBarcode()); + return JSONUtil.addProperty(json, "containerType", container.getPurpose()).toString(); + } + //判断是否为虚拟篮筐 + if(container.isVirtualBasket()){ + tousseInstanceManager.getVirtualBasketTousse(json, barcode, barcodeEnd); + return json.toString(); + } + return barcodeManager.getContainerResult(json, barcode, barcodeEnd, container); + }else if(barcodeDevice instanceof TousseInstance){ + //根据灭菌条码条码判断灭菌筐的状态 + if(StringUtils.isNotBlank(basketBarcode)){ + BarcodeDevice basketBarcodeDevice = barcodeManager.getBarcodeByBarcode(basketBarcode); + Container container = (Container)basketBarcodeDevice; + + //判断灭菌筐是否为灭菌中,如果为灭菌中则提示灭菌中的篮筐不能进行灭菌装载 + if(Container.CONTAINER_STATUS_STERILIZING.equals(container.getStatus())){ + JSONUtil.addProperty(json, "returnType", "containerSterilizing"); + return json.toString(); + } + } + TousseInstance tousseInstance = (TousseInstance)barcodeDevice; + String status = tousseInstance.getStatus(); + + boolean correct = false; + + String orgUnitCoding = tousseInstance.getOrgUnitCoding(); + if (orgUnitCoding != null + && !orgUnitCoding.equals(currentOrgUnitCode) + && tousseInstance.getProxyDisinfection_id() == null) { + JSONObject jsonObj = tousseInstanceManager.buildTousseInstanceSuccessJson("emptyProxyDisinfection",tousseInstance); + return jsonObj.toString(); + } + + //有结束条码,则判断器械包状态 + if(StringUtils.isNotBlank(barcodeEnd)){ + Map result = barcodeManager.getTousseInstanceListByRange(barcode, barcodeEnd , + TousseInstance.STATUS_REVIEWED); + if(result != null && "tousseInstanceSuccess".equals(result.get("returnType"))){ + List tousseInstanceList = (List)result.get("result"); + return buildMultiTousseReturnJson(tousseInstanceList).toString(); + }else{ + JSONUtil.addProperty(json, "returnType", result.get("returnType")); + } + } + if(tousseInstance.getUnTraceableTousse() && tousseInstance.getTousseFixedBarcode()){ + //不追溯的器械包,固定条码。检查当前固定条码下的已审核的包实例的数量是否大于0,如果大于0可以灭菌装载,否则不可以 + return buildMultiTousseReturnJson(sterileLoadingManager.getUnTraceableTousseInstanceList( + AcegiHelper.getLoginUser().getCurrentOrgUnitCode(), extraParam, + tousseInstance.getTousseDefinition())).toString(); + }else{ + correct = Arrays.asList(TousseInstance.STATUS_PACKED, + TousseInstance.STATUS_REVIEWED).contains(status); + } + + if(!correct){ + JSONUtil.addProperty(json, "returnType", "erroeStatus"); + JSONUtil.addProperty(json, "status", status); + return json.toString(); + } + JSONObject jsonObj = tousseInstanceManager.buildTousseInstanceSuccessJson("tousseInstanceSuccess", tousseInstance); + for(Object key : jsonObj.keySet()){ + json.put(key, jsonObj.opt((String)key)); + } + + //载入到篮筐 + String[] excludeBarcodeArray = new String[]{""}; + JSONArray scannedBarcodeArray = extraParam.optJSONArray("scannedBarcodes"); + if(scannedBarcodeArray != null && scannedBarcodeArray.size() > 0){ + excludeBarcodeArray = new String[scannedBarcodeArray.size()]; + for(int i = 0;i < scannedBarcodeArray.size();i++){ + excludeBarcodeArray[i] = scannedBarcodeArray.optString(i); + } + } + + + tousseInstanceManager.addTousseInstanceToBasket( + basketBarcode, barcode, Arrays.asList(excludeBarcodeArray)); + json.put("success", true); + json.put("msg", "成功放入篮筐"); + json.put("depart", tousseInstance.getDepart()); + json.put("tousseName", tousseInstance.getTousseName()); + json.put("barcode", tousseInstance.getBarcode()); + } + }catch(Exception ex){ + ex.printStackTrace(); + JSONUtil.addProperty(json, "returnType", ""); + JSONUtil.addMessage(json, ex.getMessage()); + } + return json.toString(); + } } Index: ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationLoadingForm.js =================================================================== diff -u -r15951 -r15975 --- ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationLoadingForm.js (.../sterilizationLoadingForm.js) (revision 15951) +++ ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationLoadingForm.js (.../sterilizationLoadingForm.js) (revision 15975) @@ -108,9 +108,10 @@ } //ObjBarcode可能为入筐器械包的篮筐条码,也可能为入筐器械包的械包条码 function transformGridItem(ObjBarcode){ - Ext.getCmp('barcode').setValue(ObjBarcode); - SterileLoadingTableManager.getResultJsonStrByBarcode(ObjBarcode,getTousseStoreBarcodes(),Ext.getCmp('basketBarcode').getValue(),function(jsonStr){ + clearScanText(); + scanBarcodeAndAddToBasket(ObjBarcode); + /*SterileLoadingTableManager.getResultJsonStrByBarcode(ObjBarcode,getTousseStoreBarcodes(),Ext.getCmp('basketBarcode').getValue(),function(jsonStr){ var obj = Ext.util.JSON.decode(jsonStr); var returnType = obj.returnType; @@ -221,8 +222,124 @@ showResult('器械包【' + obj.tousseName + '】未录入代理灭菌单,无法灭菌装载'); clearScanText(); } + });*/ +} + +/** + * 扫描条码及装载至灭菌筐 + * (原SterileLoadingTableManager.getResultJsonStrByBarcode的dwr请求与/disinfectSystem/tousseInstanceAction!addToBasket的Ext的ajax请求合并到一起) + * @param barcode 所扫描条码 + * + */ +function scanBarcodeAndAddToBasket(barcode){ + //灭菌篮筐条码 + var basketBarcode = Ext.getCmp('basketBarcode').getValue(); + SterileLoadingTableManager.scanBarcodeAndAddTousseToBasket(barcode,getTousseStoreBarcodes(),basketBarcode,function(jsonStr){ + //console.log('barcode2='+barcode+','+new Date().format('y-m-d H:i:s') + '.' + new Date().getMilliseconds()); + var obj = Ext.util.JSON.decode(jsonStr); + var returnType = obj.returnType; + var containerType = obj.containerType; + if(returnType=="basketNotFound"){//条码不存在 + showResult("找不到该包或篮筐。"); + //Ext.getCmp('barcode').setValue(''); + }else if(returnType == "noResult"){ + showResult('未找到相应的结果'); + }else if(returnType == "containerSterilizing"){ + showResult('该灭菌筐当前状态为灭菌中,不能进行灭菌装载!'); + }else if(returnType == "scanBasketFoundNotDeliverTousseInContainer"){ + Ext.MessageBox.confirm("请确认","该篮筐有未发货的器械包,是否继续",function(button, text) { + if ("yes" == button){ + Ext.getCmp("basketName").setValue(obj.containerName); + Ext.getCmp('basketBarcode').setValue(obj.basketBarcode); + + tousseStore.baseParams.basketBarcode = obj.basketBarcode; + tousseStore.load(); + stasticsStore.baseParams.basketBarcode = obj.basketBarcode; + stasticsStore.load(); + } + }); + }else if(returnType == "tousseInstanceSuccess"){//扫描的是包 + if(Ext.getCmp('basketBarcode').getValue() == '') { + showResult('请先录入篮筐'); + return; + } + + //console.log('barcode3='+barcode+','+new Date().format('y-m-d H:i:s') + '.' + new Date().getMilliseconds()); + + if(obj.msg == "成功放入篮筐") { + +// Ext.getCmp('tousseGrid').getStore().add(tousseInstance); + stasticsStore.load(); + //如果未启用首尾篮筐时,文本框清空 + if(enableBeginEndBarcodeScan == false || currentScanMode == 'single'){ + //Ext.getCmp('barcode').setValue(''); + }else{ + Ext.getCmp('barcodeEnd').focus(); + } + //tousseGridStore.removeAll(); + reviewedPanel.loader.load(reviewedPanel.root,function(){ + reviewedPanel.expandAll(); + reviewedPanel.root.eachChild( function(childNode){ + if(childNode.attributes.objBarcode == basketBarcode){ + childNode.eachChild(function(node){ + + var tousseInstance = new tousseInstanceRecord({ + tousseDefinitionName: node.attributes.objName, + barcode: node.attributes.objBarcode + }); + + //Ext.getCmp('tousseGrid').getStore().add(tousseInstance); + //tousseGridStore.reload();//不需要重新刷新,不然会重新查询数据库导致按id大小排序 + }); + } + }); + }); + + for(var i=0;i