Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterileloading/service/SterileLoadingManager.java =================================================================== diff -u -r38460 -r38557 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterileloading/service/SterileLoadingManager.java (.../SterileLoadingManager.java) (revision 38460) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterileloading/service/SterileLoadingManager.java (.../SterileLoadingManager.java) (revision 38557) @@ -35,4 +35,22 @@ public Collection getUnTraceableTousseInstanceList( final String departCode, final JSONObject extraParam, TousseDefinition tousseDefinition,String orgUnitCoding); + /** + * 灭菌装载的条码扫描(灭菌筐条码、器械包实例条码、虚拟篮筐条码、器械包实例条码段、虚拟篮筐条码段等)调用的方法,并装载至灭菌篮筐 + * 将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); + /** + * 灭菌装载的条码扫描(灭菌筐条码、器械包实例条码、虚拟篮筐条码、器械包实例条码段、虚拟篮筐条码段等)调用的方法 + * @param barcodes 灭菌筐条码、器械包实例条码、虚拟篮筐条码、器械包实例条码段、虚拟篮筐条码段等.条码段的中间用逗号分隔 + * @param extraParam 不再使用的参数 已入筐说明 TousseInstance.reviewBasket_id是有值的,用reviewBasket_id is null就可以; 已入筐的条码json参数,格式:{scannedBarcodes:['器械包条码1','器械包条码2'...,'器械包条码3']} + * @param basketBarcode 灭菌筐条码(只在扫描器械包条码时,才根据此参数判断) + * @return json字符串 {returnType:'',status:''...} + */ + public String getResultJsonStrByBarcode(String barcodes,JSONObject extraParam , String basketBarcode); } Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterileloading/dwr/table/SterileLoadingTableManager.java =================================================================== diff -u -r38461 -r38557 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterileloading/dwr/table/SterileLoadingTableManager.java (.../SterileLoadingTableManager.java) (revision 38461) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterileloading/dwr/table/SterileLoadingTableManager.java (.../SterileLoadingTableManager.java) (revision 38557) @@ -1,94 +1,23 @@ package com.forgon.disinfectsystem.sterilizationmanager.sterileloading.dwr.table; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import net.sf.json.JSONArray; import net.sf.json.JSONObject; -import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.lang.StringUtils; - -import com.forgon.Constants; -import com.forgon.directory.acegi.tools.AcegiHelper; -import com.forgon.directory.model.BarcodeDevice; -import com.forgon.disinfectsystem.barcode.service.BarcodeManager; -import com.forgon.disinfectsystem.basedatamanager.container.service.ReviewedBasketManager; -import com.forgon.disinfectsystem.basedatamanager.urgent.service.UrgentLevelManager; -import com.forgon.disinfectsystem.common.CssdUtils; -import com.forgon.disinfectsystem.entity.basedatamanager.container.Container; -import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; -import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; -import com.forgon.disinfectsystem.entity.sterilizationmanager.proxydisinfection.ProxyDisinfection; import com.forgon.disinfectsystem.sterilizationmanager.sterileloading.service.SterileLoadingManager; -import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseInstanceManager; -import com.forgon.exception.SterilingModeNotTheSameException; -import com.forgon.exception.SystemException; -import com.forgon.log.model.Log; -import com.forgon.log.service.LogManager; -import com.forgon.tools.db.DatabaseUtil; -import com.forgon.tools.db.InitDbConnection; -import com.forgon.tools.hibernate.ObjectDao; -import com.forgon.tools.json.JSONUtil; /** * 灭菌装载的dwr调用接口 * @author kzh * */ public class SterileLoadingTableManager { - private BarcodeManager barcodeManager; - private TousseInstanceManager tousseInstanceManager; private SterileLoadingManager sterileLoadingManager; - private InitDbConnection dbConnection; - private LogManager appLogManager; - private ObjectDao objectDao; - - private UrgentLevelManager urgentLevelManager; - - private ReviewedBasketManager reviewedBasketManager; - - public void setReviewedBasketManager(ReviewedBasketManager reviewedBasketManager) { - this.reviewedBasketManager = reviewedBasketManager; - } - public InitDbConnection getDbConnection() { - return dbConnection; - } - public void setDbConnection(InitDbConnection dbConnection) { - this.dbConnection = dbConnection; - } - - public void setAppLogManager(LogManager appLogManager) { - this.appLogManager = appLogManager; - } - - public void setBarcodeManager(BarcodeManager barcodeManager) { - this.barcodeManager = barcodeManager; - } - public void setSterileLoadingManager(SterileLoadingManager sterileLoadingManager) { this.sterileLoadingManager = sterileLoadingManager; } - public void setTousseInstanceManager(TousseInstanceManager tousseInstanceManager) { - this.tousseInstanceManager = tousseInstanceManager; - } - - public void setObjectDao(ObjectDao objectDao) { - this.objectDao = objectDao; - } - - public void setUrgentLevelManager(UrgentLevelManager urgentLevelManager) { - this.urgentLevelManager = urgentLevelManager; - } - /** * 灭菌装载的条码扫描(灭菌筐条码、器械包实例条码、虚拟篮筐条码、器械包实例条码段、虚拟篮筐条码段等)调用的方法 * @param barcodes 灭菌筐条码、器械包实例条码、虚拟篮筐条码、器械包实例条码段、虚拟篮筐条码段等.条码段的中间用逗号分隔 @@ -97,175 +26,9 @@ * @return json字符串 {returnType:'',status:''...} */ public String getResultJsonStrByBarcode(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); - - BarcodeDevice barcodeDeviceEnd = null; - - //条码的详细信息(条码、类型、对应的名称),用于记录日志 - String barcodeDetailInfo = null; - if(StringUtils.isNotBlank(barcodeEnd)){ - barcodeDeviceEnd = barcodeManager.getBarcodeByBarcode(barcode); - if(barcodeDeviceEnd != null){ - barcodeDetailInfo = "尾条码为:" + barcode + ",类型为:" + barcodeDeviceEnd.getType(); - if(barcodeDeviceEnd instanceof Container){ - barcodeDetailInfo += ",container名称为:" + ((Container)barcodeDeviceEnd).getContainerName(); - }else if(barcodeDeviceEnd instanceof TousseInstance){ - barcodeDetailInfo += ",TousseInstance名称为:" + ((TousseInstance)barcodeDeviceEnd).getTousseName(); - } - }else{ - barcodeDetailInfo = "尾条码为:" + barcode + ",不存在的无效条码"; - } - }else{ - if(barcodeDevice != null){ - barcodeDetailInfo = "首条码为:" + barcode + ",类型为:" + barcodeDevice.getType(); - if(barcodeDevice instanceof Container){ - barcodeDetailInfo += ",container名称为:" + ((Container)barcodeDevice).getContainerName(); - }else if(barcodeDevice instanceof TousseInstance){ - barcodeDetailInfo += ",TousseInstance名称为:" + ((TousseInstance)barcodeDevice).getTousseName(); - } - }else{ - barcodeDetailInfo = "首条码为:" + barcode + ",不存在的无效条码"; - } - } - appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_STERILELOADING, Log.TYPE_ADD, barcodeDetailInfo); - //判断是否存在 - 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(); - } - barcodeManager.getContainerResult(json, barcode, barcodeEnd, container); - return json.toString(); - }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,AcegiHelper.getLoginUser().getCurrentOrgUnitCode()); - 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( - currentOrgUnitCode, extraParam, - tousseInstance.getTousseDefinition(),currentOrgUnitCode)).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); - - return jsonObj.toString(); - } - }catch(Exception ex){ - ex.printStackTrace(); - JSONUtil.addProperty(json, "returnType", ""); - JSONUtil.addMessage(json, ex.getMessage()); - } - return json.toString(); + return sterileLoadingManager.getResultJsonStrByBarcode(barcodes, extraParam, basketBarcode); } - /** - * 构造多个器械包的集合的返回json - * @param tousseInstanceList 器械包实例集合 - * @return - */ - private JSONObject buildMultiTousseReturnJson(Collection tousseInstanceList){ - JSONObject jsonObj = new JSONObject(); - if(CollectionUtils.isNotEmpty(tousseInstanceList)){ - jsonObj.put("returnType", "multiTousseInstancesSuccess"); - //是否包含装载到虚拟篮筐的器械包(如果有则需要返回前台提示) - boolean includeTousseInVirtualBasket = false; - for(TousseInstance tousseInstance : tousseInstanceList){ - //如果包实例的虚拟篮筐编号不为空时,则变量置为true - if(StringUtils.isNotBlank(tousseInstance.getVirtualBasketSeqNum())){ - includeTousseInVirtualBasket = true; - } - } - JSONArray tousses = tousseInstanceManager.batchBuildTousseInstanceSuccessJson(tousseInstanceList); - jsonObj.put("tousseInstances", tousses); - - jsonObj.put("includeTousseInVirtualBasket", includeTousseInVirtualBasket); - }else{ - jsonObj.put("returnType", "noResult"); - JSONUtil.addMessage(jsonObj, "没有需要灭菌装载的器械包"); - } - return jsonObj; - } - - - /** * 灭菌装载的条码扫描(灭菌筐条码、器械包实例条码、虚拟篮筐条码、器械包实例条码段、虚拟篮筐条码段等)调用的方法,并装载至灭菌篮筐 * 将getResultJsonStrByBarcode方法及装载至篮筐合并到一起 * @param barcodes 灭菌筐条码、器械包实例条码、虚拟篮筐条码、器械包实例条码段、虚拟篮筐条码段等.条码段的中间用逗号分隔 @@ -275,287 +38,6 @@ * @return json字符串 {returnType:'',status:''...} */ public String scanBarcodeAndAddTousseToBasket(String barcodes,JSONObject extraParam , String basketBarcode){ - - JSONObject json = JSONUtil.buildJsonObject(false); - 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); - - BarcodeDevice barcodeDeviceEnd = null; - - //条码的详细信息(条码、类型、对应的名称),用于记录日志 - String barcodeDetailInfo = null; - if(StringUtils.isNotBlank(barcodeEnd)){ - barcodeDeviceEnd = barcodeManager.getBarcodeByBarcode(barcode); - if(barcodeDeviceEnd != null){ - barcodeDetailInfo = "尾条码为:" + barcode + ",类型为:" + barcodeDeviceEnd.getType(); - if(barcodeDeviceEnd instanceof Container){ - barcodeDetailInfo += ",container名称为:" + ((Container)barcodeDeviceEnd).getContainerName(); - }else if(barcodeDeviceEnd instanceof TousseInstance){ - barcodeDetailInfo += ",TousseInstance名称为:" + ((TousseInstance)barcodeDeviceEnd).getTousseName(); - } - }else{ - barcodeDetailInfo = "尾条码为:" + barcode + ",不存在的无效条码"; - } - }else{ - if(barcodeDevice != null){ - barcodeDetailInfo = "首条码为:" + barcode + ",类型为:" + barcodeDevice.getType(); - if(barcodeDevice instanceof Container){ - barcodeDetailInfo += ",container名称为:" + ((Container)barcodeDevice).getContainerName(); - }else if(barcodeDevice instanceof TousseInstance){ - barcodeDetailInfo += ",TousseInstance名称为:" + ((TousseInstance)barcodeDevice).getTousseName(); - } - }else{ - barcodeDetailInfo = "首条码为:" + barcode + ",不存在的无效条码"; - } - } - appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_STERILELOADING, Log.TYPE_ADD, barcodeDetailInfo); - //判断是否存在 - if(barcodeDevice == null){ - return json.toString(); - } - Long reviewedBasketId = null; - //当前登录用户所属科室 - String currentOrgUnitCode = AcegiHelper.getLoginUser() - .getCurrentOrgUnitCode(); - if(BarcodeDevice.BARCODE_TYPE_TOUSSEINSTANCESETCODE.equals(barcodeDevice.getType())){ - throw new SystemException("暂不支持使用器械包集合码,请扫描器械包条码进行加载操作。"); - }else if(barcodeDevice instanceof Container){ - Container container = (Container)barcodeDevice; - if(container!=null){ - //判断是否为本科室的篮筐,如果不是则给予提示 - if(!StringUtils.equals(currentOrgUnitCode, container.getDepartCode())){ - JSONUtil.addProperty(json, "returnType", "notCurrentDepartContainer"); - JSONUtil.addProperty(json, "message", "该篮筐不属于当前科室、请扫描当前科室的篮筐"); - return json.toString(); - } - //判断是否为本科室的灭菌筐,如果不是则给予提示 - if(!StringUtils.equals(Container.CONTAINER_PURPOSE_DISINFECTION, container.getPurpose())){ - JSONUtil.addProperty(json, "returnType", "notSterilingBasket"); - JSONUtil.addProperty(json, "message", "该篮筐不是灭菌篮筐、请扫描灭菌篮筐条码"); - return json.toString(); - } - String top=""; - String rownum=""; - if(dbConnection.isSqlServer()){ - top = " top 1 "; - }else if(dbConnection.isOracle()){ - rownum = " rownum = 1 and "; - } - String sql = " select "+top+" rb.id from reviewedbasket rb join container c on rb.container_id = c.id" - + " where "+rownum+" rb.container_id = "+container.getId()+" and (c.status = '"+Container.CONTAINER_STATUS_STERILIZELOADING+"' or c.status='"+Container.CONTAINER_STATUS_FREE+"')" - + " order by rb.id desc"; - ResultSet rs = objectDao.executeSql(sql); - try { - while(rs.next()){ - reviewedBasketId =(rs.getLong("id")); - } - } catch (SQLException e) { - e.printStackTrace(); - }finally { - DatabaseUtil.closeResultSetAndStatement(rs); - } - json.put("reviewedBasketId", reviewedBasketId); - } - //判断灭菌筐是否为灭菌中,如果为灭菌中则提示灭菌中的篮筐不能进行灭菌装载 - if(Container.CONTAINER_STATUS_STERILIZING.equals(container.getStatus())){ - JSONUtil.addProperty(json, "returnType", "containerSterilizing"); - return json.toString(); - } - //判断是否为虚拟篮筐(不支持扫描虚拟篮筐) - if(container.isVirtualBasket()){ -// tousseInstanceManager.getVirtualBasketTousse(json, barcode, barcodeEnd); -// return json.toString(); - JSONUtil.addProperty(json, "returnType", "isVirtualBasket"); - return json.toString(); - } - //判断篮筐中是否有未发货(已灭菌)的器械包,如果有则进行提示 - int count = reviewedBasketManager.getSterilizedTousseAmountBySterilizeBasketWhenNotConfigureDisableGoodsNotShippedAlert(container); - if(count > 0){ - JSONUtil.addProperty(json, "returnType", "scanBasketFoundNotDeliverTousseInContainer");//扫描篮筐时发现有未发货的器械包 - JSONUtil.addProperty(json, "notDeliverTousseAmount", count);//扫描篮筐时发现有未发货的器械包数量 - JSONUtil.addProperty(json, "containerName", container.getContainerName()); - JSONUtil.addProperty(json, "basketBarcode", container.getBarcode()); - return JSONUtil.addProperty(json, "containerType", container.getPurpose()).toString(); - } - barcodeManager.getContainerResult(json, barcode, barcodeEnd, container); - return json.toString(); - }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(); - } - }else{ - JSONUtil.addProperty(json, "returnType", "other"); - JSONUtil.addProperty(json, "message", "请先扫描灭菌篮筐!"); - return json.toString(); - } - TousseInstance tousseInstance = (TousseInstance)barcodeDevice; - boolean correct = false; - String status = tousseInstance.getStatus(); - if(tousseInstance.getUnTraceableTousse() && tousseInstance.getTousseFixedBarcode()){ - //不追溯的器械包,固定条码。检查当前固定条码下的已审核的包实例的数量是否大于0,如果大于0可以灭菌装载,否则不可以 - return buildMultiTousseReturnJson(sterileLoadingManager.getUnTraceableTousseInstanceList( - currentOrgUnitCode, extraParam, - tousseInstance.getTousseDefinition(),currentOrgUnitCode)).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(); - } - } - //未审核的包禁止载入到篮筐内 - if(!StringUtils.equals(TousseInstance.STATUS_REVIEWED, status) && !tousseInstance.getUnTraceableTousse() && !tousseInstance.getTousseFixedBarcode()){ - JSONUtil.addProperty(json, "returnType", "erroeStatus"); - JSONUtil.addProperty(json, "status", status); - return json.toString(); - } - //代理灭菌单上的包要接收了才能进行灭菌装载GDSZYY-131 - if(StringUtils.equals(tousseInstance.hasReceived(), Constants.STR_NO)){ - JSONUtil.addProperty(json, "returnType", "dataError"); - JSONUtil.addProperty(json, JSONUtil.JSON_KEY_MESSAGE, tousseInstance.getTousseDefinitionName() + tousseInstance.getBarcode() + "未进行扫描接收,请先打开代理灭菌单进行扫描!"); - return json.toString(); - } - - String orgUnitCoding = tousseInstance.getOrgUnitCoding(); - if(StringUtils.isEmpty(orgUnitCoding)){ - JSONUtil.addProperty(json, "returnType", "dataError"); - JSONUtil.addProperty(json, JSONUtil.JSON_KEY_MESSAGE, "未找到该包的生产科室,数据有误,请联系管理员!"); - return json.toString(); - } - if (!StringUtils.equals(orgUnitCoding , currentOrgUnitCode)) { - if(!DatabaseUtil.isPoIdValid(tousseInstance.getProxyDisinfection_id())){ - JSONObject jsonObj = tousseInstanceManager.buildTousseInstanceSuccessJson("emptyProxyDisinfection",tousseInstance); - return jsonObj.toString(); - } - ProxyDisinfection pd = (ProxyDisinfection)objectDao.getByProperty(ProxyDisinfection.class.getSimpleName(), "id", tousseInstance.getProxyDisinfection_id()); - if(pd == null){ - JSONUtil.addProperty(json, "returnType", "dataError"); - JSONUtil.addProperty(json, JSONUtil.JSON_KEY_MESSAGE, "该包已录入代理灭菌,但未找到所属的代理灭菌单"); - return json.toString(); - } - if(!StringUtils.equals(currentOrgUnitCode, pd.getHandleDepartCoding())){ - JSONUtil.addProperty(json, "returnType", "dataError"); - JSONUtil.addProperty(json, JSONUtil.JSON_KEY_MESSAGE, "该包已录入代理灭菌,单号为:"+ pd.getSerialNumber() +",但该代理灭菌单的处理科室并不是当前科室"); - return json.toString(); - } - }else{ - if(DatabaseUtil.isPoIdValid(tousseInstance.getProxyDisinfection_id())){ - ProxyDisinfection pd = (ProxyDisinfection)objectDao.getByProperty(ProxyDisinfection.class.getSimpleName(), "id", tousseInstance.getProxyDisinfection_id()); - if(pd != null && !StringUtils.equals(currentOrgUnitCode, pd.getHandleDepartCoding())){ - JSONUtil.addProperty(json, "returnType", "dataError"); - JSONUtil.addProperty(json, JSONUtil.JSON_KEY_MESSAGE, "该包已录入代理灭菌,单号为:"+ pd.getSerialNumber() +",但该代理灭菌单的处理科室并不是当前科室"); - return json.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")); - } - } - - 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); - } - }*/ - - //扫描虚拟篮筐内的包 - List virtualBasketNameList = new ArrayList(); - String queryAllVirtualBasketNameSql = "select distinct virtualBasketSeqNum from " + TousseInstance.class.getSimpleName() - + " ti join "+ BarcodeDevice.class.getSimpleName() +" b on ti.id=b.id where barcode = '"+barcodes+"'" ; - ResultSet rs = null; - try { - rs = objectDao.executeSql(queryAllVirtualBasketNameSql); - while(rs.next()){ - virtualBasketNameList.add(rs.getString("virtualBasketSeqNum")); - } - } catch (Exception e) { - }finally{ - DatabaseUtil.closeResultSetAndStatement(rs); - } - - try{ - //将器械包装载到篮筐内 - tousseInstanceManager.addTousseInstanceToBasket( - basketBarcode, barcode, Arrays.asList(excludeBarcodeArray)); - - //然后执行计算虚拟篮筐状态 - if(CollectionUtils.isNotEmpty(virtualBasketNameList)){ - //重新计算虚拟篮筐状态 - tousseInstanceManager.countVirtualContainerStatus(virtualBasketNameList); - } - json.put("success", true); - json.put("msg", "成功放入篮筐"); - json.put("depart", tousseInstance.loadDepart(objectDao)); - json.put("tousseName", tousseInstance.getTousseName()); - json.put("barcode", tousseInstance.getBarcode()); - json.put("fixedBarcode", tousseInstanceManager.getTousseFixedBarcodeByBarcode(tousseInstance.getBarcode(), TousseDefinition.STR_NO)); - json.put("departCoding", tousseInstance.getDepartCoding()); - json.put("sterilingType", tousseInstance.getSterilingType()); - json.put("sterilingMode", tousseInstance.getSterilingMode()); - json.put("amount", 1); - json.put("isUrgentTousse", tousseInstance.getIsUrgentTousse());//是否加急 - json.put("urgentLevel", urgentLevelManager.getUrgentLevelVoInfo(tousseInstance));//加急信息 - - }catch(SterilingModeNotTheSameException e){ - String msg = e.getMessage(); - json = JSONUtil.buildJsonObject(false, msg); - //灭菌方式不一致的消息提示方式 - int noticeMode = - CssdUtils.getSystemSetConfigByNameInt("alertModeOfDiffSterileMethod", Constants.NOTICE_MODE_TIPS); - if(noticeMode != Constants.NOTICE_MODE_TIPS){ - json.put(JSONUtil.JSON_KEY_NOTICEMODE, noticeMode); - } - e.printStackTrace(); - }catch (RuntimeException e){ - e.printStackTrace(); - JSONUtil.addProperty(json, "returnType", "notTheSameSterilingMode"); - JSONUtil.addMessage(json, e.getMessage()); - } - } - }catch(Exception ex){ - ex.printStackTrace(); - JSONUtil.addProperty(json, "returnType", ""); - JSONUtil.addMessage(json, ex.getMessage()); - } - return json.toString(); + return sterileLoadingManager.scanBarcodeAndAddTousseToBasket(barcodes, extraParam, basketBarcode); } } Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterileloading/service/SterileLoadingManagerImpl.java =================================================================== diff -u -r38459 -r38557 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterileloading/service/SterileLoadingManagerImpl.java (.../SterileLoadingManagerImpl.java) (revision 38459) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterileloading/service/SterileLoadingManagerImpl.java (.../SterileLoadingManagerImpl.java) (revision 38557) @@ -1,24 +1,70 @@ package com.forgon.disinfectsystem.sterilizationmanager.sterileloading.service; +import java.sql.ResultSet; +import java.sql.SQLException; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; +import java.util.List; +import java.util.Map; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; +import com.forgon.Constants; import com.forgon.databaseadapter.service.DateQueryAdapter; +import com.forgon.directory.acegi.tools.AcegiHelper; +import com.forgon.directory.model.BarcodeDevice; +import com.forgon.disinfectsystem.barcode.service.BarcodeManager; +import com.forgon.disinfectsystem.basedatamanager.container.service.ReviewedBasketManager; +import com.forgon.disinfectsystem.basedatamanager.urgent.service.UrgentLevelManager; import com.forgon.disinfectsystem.common.CssdUtils; +import com.forgon.disinfectsystem.entity.basedatamanager.container.Container; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; +import com.forgon.disinfectsystem.entity.sterilizationmanager.proxydisinfection.ProxyDisinfection; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseInstanceManager; -import com.forgon.tools.SqlBuilder; +import com.forgon.exception.SterilingModeNotTheSameException; +import com.forgon.exception.SystemException; +import com.forgon.log.model.Log; +import com.forgon.log.service.LogManager; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.db.InitDbConnection; +import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.json.JSONUtil; public class SterileLoadingManagerImpl implements SterileLoadingManager { private TousseInstanceManager tousseInstanceManager; private DateQueryAdapter dateQueryAdapter; + private BarcodeManager barcodeManager; + public void setBarcodeManager(BarcodeManager barcodeManager) { + this.barcodeManager = barcodeManager; + } + private LogManager appLogManager; + public void setAppLogManager(LogManager appLogManager) { + this.appLogManager = appLogManager; + } + private InitDbConnection dbConnection; + public void setDbConnection(InitDbConnection dbConnection) { + this.dbConnection = dbConnection; + } + private ObjectDao objectDao; + public void setObjectDao(ObjectDao objectDao) { + this.objectDao = objectDao; + } + private ReviewedBasketManager reviewedBasketManager; + + public void setReviewedBasketManager(ReviewedBasketManager reviewedBasketManager) { + this.reviewedBasketManager = reviewedBasketManager; + } + + private UrgentLevelManager urgentLevelManager; + public void setUrgentLevelManager(UrgentLevelManager urgentLevelManager) { + this.urgentLevelManager = urgentLevelManager; + } public void setDateQueryAdapter(DateQueryAdapter dateQueryAdapter) { this.dateQueryAdapter = dateQueryAdapter; } @@ -73,4 +119,458 @@ TousseDefinition tousseDefinition) { return getUnTraceableTousseInstanceList(departCode, extraParam, tousseDefinition, null); } + @Override + public String scanBarcodeAndAddTousseToBasket(String barcodes, + JSONObject extraParam, String basketBarcode) { + + JSONObject json = JSONUtil.buildJsonObject(false); + 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); + + BarcodeDevice barcodeDeviceEnd = null; + + //条码的详细信息(条码、类型、对应的名称),用于记录日志 + String barcodeDetailInfo = null; + if(StringUtils.isNotBlank(barcodeEnd)){ + barcodeDeviceEnd = barcodeManager.getBarcodeByBarcode(barcode); + if(barcodeDeviceEnd != null){ + barcodeDetailInfo = "尾条码为:" + barcode + ",类型为:" + barcodeDeviceEnd.getType(); + if(barcodeDeviceEnd instanceof Container){ + barcodeDetailInfo += ",container名称为:" + ((Container)barcodeDeviceEnd).getContainerName(); + }else if(barcodeDeviceEnd instanceof TousseInstance){ + barcodeDetailInfo += ",TousseInstance名称为:" + ((TousseInstance)barcodeDeviceEnd).getTousseName(); + } + }else{ + barcodeDetailInfo = "尾条码为:" + barcode + ",不存在的无效条码"; + } + }else{ + if(barcodeDevice != null){ + barcodeDetailInfo = "首条码为:" + barcode + ",类型为:" + barcodeDevice.getType(); + if(barcodeDevice instanceof Container){ + barcodeDetailInfo += ",container名称为:" + ((Container)barcodeDevice).getContainerName(); + }else if(barcodeDevice instanceof TousseInstance){ + barcodeDetailInfo += ",TousseInstance名称为:" + ((TousseInstance)barcodeDevice).getTousseName(); + } + }else{ + barcodeDetailInfo = "首条码为:" + barcode + ",不存在的无效条码"; + } + } + appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_STERILELOADING, Log.TYPE_ADD, barcodeDetailInfo); + //判断是否存在 + if(barcodeDevice == null){ + return json.toString(); + } + Long reviewedBasketId = null; + //当前登录用户所属科室 + String currentOrgUnitCode = AcegiHelper.getLoginUser() + .getCurrentOrgUnitCode(); + if(BarcodeDevice.BARCODE_TYPE_TOUSSEINSTANCESETCODE.equals(barcodeDevice.getType())){ + throw new SystemException("暂不支持使用器械包集合码,请扫描器械包条码进行加载操作。"); + }else if(barcodeDevice instanceof Container){ + Container container = (Container)barcodeDevice; + if(container!=null){ + //判断是否为本科室的篮筐,如果不是则给予提示 + if(!StringUtils.equals(currentOrgUnitCode, container.getDepartCode())){ + JSONUtil.addProperty(json, "returnType", "notCurrentDepartContainer"); + JSONUtil.addProperty(json, "message", "该篮筐不属于当前科室、请扫描当前科室的篮筐"); + return json.toString(); + } + //判断是否为本科室的灭菌筐,如果不是则给予提示 + if(!StringUtils.equals(Container.CONTAINER_PURPOSE_DISINFECTION, container.getPurpose())){ + JSONUtil.addProperty(json, "returnType", "notSterilingBasket"); + JSONUtil.addProperty(json, "message", "该篮筐不是灭菌篮筐、请扫描灭菌篮筐条码"); + return json.toString(); + } + String top=""; + String rownum=""; + if(dbConnection.isSqlServer()){ + top = " top 1 "; + }else if(dbConnection.isOracle()){ + rownum = " rownum = 1 and "; + } + String sql = " select "+top+" rb.id from reviewedbasket rb join container c on rb.container_id = c.id" + + " where "+rownum+" rb.container_id = "+container.getId()+" and (c.status = '"+Container.CONTAINER_STATUS_STERILIZELOADING+"' or c.status='"+Container.CONTAINER_STATUS_FREE+"')" + + " order by rb.id desc"; + ResultSet rs = objectDao.executeSql(sql); + try { + while(rs.next()){ + reviewedBasketId =(rs.getLong("id")); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + json.put("reviewedBasketId", reviewedBasketId); + } + //判断灭菌筐是否为灭菌中,如果为灭菌中则提示灭菌中的篮筐不能进行灭菌装载 + if(Container.CONTAINER_STATUS_STERILIZING.equals(container.getStatus())){ + JSONUtil.addProperty(json, "returnType", "containerSterilizing"); + return json.toString(); + } + //判断是否为虚拟篮筐(不支持扫描虚拟篮筐) + if(container.isVirtualBasket()){ +// tousseInstanceManager.getVirtualBasketTousse(json, barcode, barcodeEnd); +// return json.toString(); + JSONUtil.addProperty(json, "returnType", "isVirtualBasket"); + return json.toString(); + } + //判断篮筐中是否有未发货(已灭菌)的器械包,如果有则进行提示 + int count = reviewedBasketManager.getSterilizedTousseAmountBySterilizeBasketWhenNotConfigureDisableGoodsNotShippedAlert(container); + if(count > 0){ + JSONUtil.addProperty(json, "returnType", "scanBasketFoundNotDeliverTousseInContainer");//扫描篮筐时发现有未发货的器械包 + JSONUtil.addProperty(json, "notDeliverTousseAmount", count);//扫描篮筐时发现有未发货的器械包数量 + JSONUtil.addProperty(json, "containerName", container.getContainerName()); + JSONUtil.addProperty(json, "basketBarcode", container.getBarcode()); + return JSONUtil.addProperty(json, "containerType", container.getPurpose()).toString(); + } + barcodeManager.getContainerResult(json, barcode, barcodeEnd, container); + return json.toString(); + }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(); + } + }else{ + JSONUtil.addProperty(json, "returnType", "other"); + JSONUtil.addProperty(json, "message", "请先扫描灭菌篮筐!"); + return json.toString(); + } + TousseInstance tousseInstance = (TousseInstance)barcodeDevice; + boolean correct = false; + String status = tousseInstance.getStatus(); + if(tousseInstance.getUnTraceableTousse() && tousseInstance.getTousseFixedBarcode()){ + //不追溯的器械包,固定条码。检查当前固定条码下的已审核的包实例的数量是否大于0,如果大于0可以灭菌装载,否则不可以 + return buildMultiTousseReturnJson(getUnTraceableTousseInstanceList( + currentOrgUnitCode, extraParam, + tousseInstance.getTousseDefinition(),currentOrgUnitCode)).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(); + } + } + //未审核的包禁止载入到篮筐内 + if(!StringUtils.equals(TousseInstance.STATUS_REVIEWED, status) && !tousseInstance.getUnTraceableTousse() && !tousseInstance.getTousseFixedBarcode()){ + JSONUtil.addProperty(json, "returnType", "erroeStatus"); + JSONUtil.addProperty(json, "status", status); + return json.toString(); + } + //代理灭菌单上的包要接收了才能进行灭菌装载GDSZYY-131 + if(StringUtils.equals(tousseInstance.hasReceived(), Constants.STR_NO)){ + JSONUtil.addProperty(json, "returnType", "dataError"); + JSONUtil.addProperty(json, JSONUtil.JSON_KEY_MESSAGE, tousseInstance.getTousseDefinitionName() + tousseInstance.getBarcode() + "未进行扫描接收,请先打开代理灭菌单进行扫描!"); + return json.toString(); + } + + String orgUnitCoding = tousseInstance.getOrgUnitCoding(); + if(StringUtils.isEmpty(orgUnitCoding)){ + JSONUtil.addProperty(json, "returnType", "dataError"); + JSONUtil.addProperty(json, JSONUtil.JSON_KEY_MESSAGE, "未找到该包的生产科室,数据有误,请联系管理员!"); + return json.toString(); + } + if (!StringUtils.equals(orgUnitCoding , currentOrgUnitCode)) { + if(!DatabaseUtil.isPoIdValid(tousseInstance.getProxyDisinfection_id())){ + JSONObject jsonObj = tousseInstanceManager.buildTousseInstanceSuccessJson("emptyProxyDisinfection",tousseInstance); + return jsonObj.toString(); + } + ProxyDisinfection pd = (ProxyDisinfection)objectDao.getByProperty(ProxyDisinfection.class.getSimpleName(), "id", tousseInstance.getProxyDisinfection_id()); + if(pd == null){ + JSONUtil.addProperty(json, "returnType", "dataError"); + JSONUtil.addProperty(json, JSONUtil.JSON_KEY_MESSAGE, "该包已录入代理灭菌,但未找到所属的代理灭菌单"); + return json.toString(); + } + if(!StringUtils.equals(currentOrgUnitCode, pd.getHandleDepartCoding())){ + JSONUtil.addProperty(json, "returnType", "dataError"); + JSONUtil.addProperty(json, JSONUtil.JSON_KEY_MESSAGE, "该包已录入代理灭菌,单号为:"+ pd.getSerialNumber() +",但该代理灭菌单的处理科室并不是当前科室"); + return json.toString(); + } + }else{ + if(DatabaseUtil.isPoIdValid(tousseInstance.getProxyDisinfection_id())){ + ProxyDisinfection pd = (ProxyDisinfection)objectDao.getByProperty(ProxyDisinfection.class.getSimpleName(), "id", tousseInstance.getProxyDisinfection_id()); + if(pd != null && !StringUtils.equals(currentOrgUnitCode, pd.getHandleDepartCoding())){ + JSONUtil.addProperty(json, "returnType", "dataError"); + JSONUtil.addProperty(json, JSONUtil.JSON_KEY_MESSAGE, "该包已录入代理灭菌,单号为:"+ pd.getSerialNumber() +",但该代理灭菌单的处理科室并不是当前科室"); + return json.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")); + } + } + + 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); + } + }*/ + + //扫描虚拟篮筐内的包 + List virtualBasketNameList = new ArrayList(); + String queryAllVirtualBasketNameSql = "select distinct virtualBasketSeqNum from " + TousseInstance.class.getSimpleName() + + " ti join "+ BarcodeDevice.class.getSimpleName() +" b on ti.id=b.id where barcode = '"+barcodes+"'" ; + ResultSet rs = null; + try { + rs = objectDao.executeSql(queryAllVirtualBasketNameSql); + while(rs.next()){ + virtualBasketNameList.add(rs.getString("virtualBasketSeqNum")); + } + } catch (Exception e) { + }finally{ + DatabaseUtil.closeResultSetAndStatement(rs); + } + + try{ + //将器械包装载到篮筐内 + tousseInstanceManager.addTousseInstanceToBasket( + basketBarcode, barcode, Arrays.asList(excludeBarcodeArray)); + + //然后执行计算虚拟篮筐状态 + if(CollectionUtils.isNotEmpty(virtualBasketNameList)){ + //重新计算虚拟篮筐状态 + tousseInstanceManager.countVirtualContainerStatus(virtualBasketNameList); + } + json.put("success", true); + json.put("msg", "成功放入篮筐"); + json.put("depart", tousseInstance.loadDepart(objectDao)); + json.put("tousseName", tousseInstance.getTousseName()); + json.put("barcode", tousseInstance.getBarcode()); + json.put("fixedBarcode", tousseInstanceManager.getTousseFixedBarcodeByBarcode(tousseInstance.getBarcode(), TousseDefinition.STR_NO)); + json.put("departCoding", tousseInstance.getDepartCoding()); + json.put("sterilingType", tousseInstance.getSterilingType()); + json.put("sterilingMode", tousseInstance.getSterilingMode()); + json.put("amount", 1); + json.put("isUrgentTousse", tousseInstance.getIsUrgentTousse());//是否加急 + json.put("urgentLevel", urgentLevelManager.getUrgentLevelVoInfo(tousseInstance));//加急信息 + + }catch(SterilingModeNotTheSameException e){ + String msg = e.getMessage(); + json = JSONUtil.buildJsonObject(false, msg); + //灭菌方式不一致的消息提示方式 + int noticeMode = + CssdUtils.getSystemSetConfigByNameInt("alertModeOfDiffSterileMethod", Constants.NOTICE_MODE_TIPS); + if(noticeMode != Constants.NOTICE_MODE_TIPS){ + json.put(JSONUtil.JSON_KEY_NOTICEMODE, noticeMode); + } + e.printStackTrace(); + }catch (RuntimeException e){ + e.printStackTrace(); + JSONUtil.addProperty(json, "returnType", "notTheSameSterilingMode"); + JSONUtil.addMessage(json, e.getMessage()); + } + } + }catch(Exception ex){ + ex.printStackTrace(); + JSONUtil.addProperty(json, "returnType", ""); + JSONUtil.addMessage(json, ex.getMessage()); + } + return json.toString(); + } + /** + * 构造多个器械包的集合的返回json + * @param tousseInstanceList 器械包实例集合 + * @return + */ + private JSONObject buildMultiTousseReturnJson(Collection tousseInstanceList){ + JSONObject jsonObj = new JSONObject(); + if(CollectionUtils.isNotEmpty(tousseInstanceList)){ + jsonObj.put("returnType", "multiTousseInstancesSuccess"); + //是否包含装载到虚拟篮筐的器械包(如果有则需要返回前台提示) + boolean includeTousseInVirtualBasket = false; + for(TousseInstance tousseInstance : tousseInstanceList){ + //如果包实例的虚拟篮筐编号不为空时,则变量置为true + if(StringUtils.isNotBlank(tousseInstance.getVirtualBasketSeqNum())){ + includeTousseInVirtualBasket = true; + } + } + JSONArray tousses = tousseInstanceManager.batchBuildTousseInstanceSuccessJson(tousseInstanceList); + jsonObj.put("tousseInstances", tousses); + + jsonObj.put("includeTousseInVirtualBasket", includeTousseInVirtualBasket); + }else{ + jsonObj.put("returnType", "noResult"); + JSONUtil.addMessage(jsonObj, "没有需要灭菌装载的器械包"); + } + return jsonObj; + } + @Override + public String getResultJsonStrByBarcode(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); + + BarcodeDevice barcodeDeviceEnd = null; + + //条码的详细信息(条码、类型、对应的名称),用于记录日志 + String barcodeDetailInfo = null; + if(StringUtils.isNotBlank(barcodeEnd)){ + barcodeDeviceEnd = barcodeManager.getBarcodeByBarcode(barcode); + if(barcodeDeviceEnd != null){ + barcodeDetailInfo = "尾条码为:" + barcode + ",类型为:" + barcodeDeviceEnd.getType(); + if(barcodeDeviceEnd instanceof Container){ + barcodeDetailInfo += ",container名称为:" + ((Container)barcodeDeviceEnd).getContainerName(); + }else if(barcodeDeviceEnd instanceof TousseInstance){ + barcodeDetailInfo += ",TousseInstance名称为:" + ((TousseInstance)barcodeDeviceEnd).getTousseName(); + } + }else{ + barcodeDetailInfo = "尾条码为:" + barcode + ",不存在的无效条码"; + } + }else{ + if(barcodeDevice != null){ + barcodeDetailInfo = "首条码为:" + barcode + ",类型为:" + barcodeDevice.getType(); + if(barcodeDevice instanceof Container){ + barcodeDetailInfo += ",container名称为:" + ((Container)barcodeDevice).getContainerName(); + }else if(barcodeDevice instanceof TousseInstance){ + barcodeDetailInfo += ",TousseInstance名称为:" + ((TousseInstance)barcodeDevice).getTousseName(); + } + }else{ + barcodeDetailInfo = "首条码为:" + barcode + ",不存在的无效条码"; + } + } + appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_STERILELOADING, Log.TYPE_ADD, barcodeDetailInfo); + //判断是否存在 + 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(); + } + barcodeManager.getContainerResult(json, barcode, barcodeEnd, container); + return json.toString(); + }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,AcegiHelper.getLoginUser().getCurrentOrgUnitCode()); + 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(getUnTraceableTousseInstanceList( + currentOrgUnitCode, extraParam, + tousseInstance.getTousseDefinition(),currentOrgUnitCode)).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); + + return jsonObj.toString(); + } + }catch(Exception ex){ + ex.printStackTrace(); + JSONUtil.addProperty(json, "returnType", ""); + JSONUtil.addMessage(json, ex.getMessage()); + } + return json.toString(); + } }