Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/TousseSimpleVO.java =================================================================== diff -u -r22148 -r22327 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/TousseSimpleVO.java (.../TousseSimpleVO.java) (revision 22148) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/TousseSimpleVO.java (.../TousseSimpleVO.java) (revision 22327) @@ -45,6 +45,10 @@ private String reviewTime; private Long foreignProxyItemId; + + /** + * 代理灭菌单id + */ private Long proxyDisinfectionId; /** @@ -56,7 +60,27 @@ * 科室编码(外部代理灭菌物品装配打印时记录暂不处理) */ private String departCoding; + + /** + * 灭菌位置 + */ + private String sterilizerPosition; + /** + * 是否为:外来器械包当普通器械包 + */ + private String isForeignTousse; + + /** + * 器械包类型 + */ + private String tousseType; + + /** + * 库存数量(对于不追溯的包,比如在灭菌时的库存数量为已审核的包数量) + */ + private Long stockAmount; + public String getDefinitionName() { return definitionName; } @@ -193,6 +217,38 @@ this.fixedBarcode = fixedBarcode; } + public String getSterilizerPosition() { + return sterilizerPosition; + } + + public void setSterilizerPosition(String sterilizerPosition) { + this.sterilizerPosition = sterilizerPosition; + } + + public String getIsForeignTousse() { + return isForeignTousse; + } + + public void setIsForeignTousse(String isForeignTousse) { + this.isForeignTousse = isForeignTousse; + } + + public String getTousseType() { + return tousseType; + } + + public void setTousseType(String tousseType) { + this.tousseType = tousseType; + } + + public Long getStockAmount() { + return stockAmount; + } + + public void setStockAmount(Long stockAmount) { + this.stockAmount = stockAmount; + } + @Override public int compareTo(Object o) { TousseSimpleVO vo = (TousseSimpleVO)o; Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/action/SterilizationRecordAction.java =================================================================== diff -u -r22315 -r22327 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/action/SterilizationRecordAction.java (.../SterilizationRecordAction.java) (revision 22315) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/action/SterilizationRecordAction.java (.../SterilizationRecordAction.java) (revision 22327) @@ -399,7 +399,6 @@ */ public void loadSterilizationRecord() { try { - StrutsParamUtils.getResponse().setCharacterEncoding("UTF-8"); JsonConfig config = new JsonConfig(); PropertyFilter propertyFilter = new JsonPropertyFilter( new String[] { "tousseInstanceList", "reviewedBaskets", @@ -415,20 +414,20 @@ List interruptRecords = sterilizationRecordManager.getInerruptRecords(sterilizationRecord.getId()); //存放多个固定条码,用逗号隔开 - StringBuffer fixedBarcodes = new StringBuffer(); + List fixedBarcodes = new ArrayList(); //存放多个唯一条码,用逗号隔开 - StringBuffer barcodes =new StringBuffer(); + List barcodes =new ArrayList(); - if (sterilizationRecord.getId() != null && sterilizationRecord.getId()!=0) { //不是新加的记录 + if (DatabaseUtil.isPoIdValid(sterilizationRecord.getId())) { //不是新加的记录 //原有的代码 List reviewedBasketList = sterilizationRecord.getReviewedBaskets();//灭菌篮筐集合 sterilizationRecord.setReviewedBasketAmount(reviewedBasketList.size()); //计算此灭菌记录的灭菌篮筐总数 //只要状态不等于“灭菌完成”的都去获取条码 - if(!sterilizationRecord.getStatus().equals(SterilizationRecord.STERILIZATION_STATUS_END)){ + if(!StringUtils.equals(sterilizationRecord.getStatus() , SterilizationRecord.STERILIZATION_STATUS_END)){ //汇总后的数据,不显示唯一条码,所以在这里要提前拿到并给到前台 - List tousseInsList = sterilizationRecord.getTousseInstanceList();//器械包集合 + /*List tousseInsList = sterilizationRecord.getTousseInstanceList();//器械包集合 for (TousseInstance ti : tousseInsList) { if(tousseInstanceManager.isCountBarcode(ti.getBarcode())){//只有是固定条码才去获取 String barcode = ti.getBarcode();//当前条码 @@ -440,7 +439,8 @@ fixedBarcodes.append(fBarcode+","); } } - } + }*/ + sterilizationRecordManager.fillBarcodeToListFromSterilizationRecordWithoutReviewedBasket(sterilizationRecord, barcodes, fixedBarcodes); } } @@ -450,39 +450,34 @@ map.put("interruptRecords", interruptRecords); //去掉最后一个逗号 - if(StringUtils.isNotBlank(fixedBarcodes.toString()) && StringUtils.isNotBlank(barcodes.toString())){ + /*if(StringUtils.isNotBlank(fixedBarcodes.toString()) && StringUtils.isNotBlank(barcodes.toString())){ fixedBarcodes = fixedBarcodes.deleteCharAt(fixedBarcodes.length() - 1); barcodes = barcodes.deleteCharAt(barcodes.length() - 1); + }*/ + if(CollectionUtils.isNotEmpty(barcodes)){ + map.put("barcodes", StringUtils.join(barcodes, ",")); } - map.put("fixedBarcodes", fixedBarcodes.toString()); - map.put("barcodes", barcodes.toString()); + if(CollectionUtils.isNotEmpty(fixedBarcodes)){ + map.put("fixedBarcodes", StringUtils.join(fixedBarcodes, ",")); + } JSONObject jsonObject = JSONObject.fromObject(map, config); - String jsonStr = jsonObject.toString(); - try { - StrutsParamUtils.getResponse().getWriter().println(jsonStr); - } catch (IOException e) { - e.printStackTrace(); - } + StrutsResponseUtils.output(jsonObject); } catch (Exception e) { e.printStackTrace(); } } /** * 加载灭菌记录的灭菌物品 - * @since 2015-11-24 + * @since 2018-01-26 * @author SYF * @return */ - public String loadSterilizationGoods() { - // 没入篮筐的器械包 - List tousseInstanceList = sterilizationRecord.getTousseInstanceList(); - // 容器 - List reviewedBasketList = sterilizationRecord.getReviewedBaskets(); - - StrutsResponseUtils.output(sterilizationRecordManager.loadSterilizationGoods(tousseInstanceList,reviewedBasketList)); - return null; + public void loadSterilizationGoods() { + //根据灭菌记录加载没入篮筐的器械包与已录入到该灭菌记录篮筐实例及筐内的器械包 + JSONArray jsonArray = sterilizationRecordManager.loadSterilizationGoods(sterilizationRecord); + StrutsResponseUtils.output(jsonArray); } public static final String SHELF = "灭菌架"; @@ -693,9 +688,9 @@ String str = savedBarcodes==""?"":";"; finalBarcodes = savedBarcodes+str+myBarcodes; - JSONObject jsonObj = new JSONObject(); if (StringUtils.isNotBlank(barcodeStr)) { - StrutsResponseUtils.output(sterilizationRecordManager.loadTousseInstanceInfo(sterilizationRecordId , barcodeStr,finalBarcodes)); + JSONObject jsonObject = sterilizationRecordManager.loadTousseInstanceInfo(sterilizationRecordId , barcodeStr,finalBarcodes); + StrutsResponseUtils.output(jsonObject); } } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseInstance.java =================================================================== diff -u -r22288 -r22327 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseInstance.java (.../TousseInstance.java) (revision 22288) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseInstance.java (.../TousseInstance.java) (revision 22327) @@ -67,6 +67,7 @@ ,@Index(columnList = "virtualBasketSeqNum", name = "virtualBasketSeqNum_index"),@Index(columnList = "classifyBasket_id", name = "classifyBasket_id_index") ,@Index(columnList = "departCoding", name = "tis_departCoding_index"),@Index(columnList = "orgUnitCoding", name = "orgUnitCoding_index") ,@Index(columnList = "signedDate", name = "tis_signedDate_index"),@Index(columnList = "signRecordId", name = "tis_signRecordId_index") +,@Index(columnList = "departmentStock_id", name = "tis_dsid_index") }) @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) @JsonFilter("fieldFilter") Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java =================================================================== diff -u -r22301 -r22327 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 22301) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 22327) @@ -143,7 +143,7 @@ * @param orgUnitCode 供应室的科室编码 * @return */ - public List getTodayReviewedTousseInstanceWithOutBasket( + public List getTodayReviewedTousseInstanceWithOutBasket( String orgUnitCode); /** @@ -164,10 +164,16 @@ * @param sqlCondition where子句的Map * @return */ - public List getAllReviewedTousseInstanceWithOutBasket( + public List getAllReviewedTousseInstanceWithOutBasket( String orgUnitCode , String beginDate , String endDate ,String start , String limit , String searchKeyWord, Map sqlCondition); - + /** + * 根据查询器械包的语句返回查询结果 + * @param queryTousseSql + * @return + */ + public List getTousseVoDataFromDb(String queryTousseSql); + /** * 根据科室编码和器械包名称,获取今天审核未入灭菌篮筐的器械包(按装配时间正序) * @param orgUnitCode 科室编码 * @param name 器械包名称 @@ -807,11 +813,11 @@ /** * 加载已审核的器械包,作为篮筐视图的数据源 - * @param thisDepartName 科室名 + * @param thisDepartCode 科室编码 * @param taskGroup * @return */ - public JSONArray loadAllTousseInstance(String thisDepartName, String taskGroup); + public JSONArray loadAllTousseInstance(String thisDepartCode, String taskGroup); /** * 器械包转换灭菌篮筐,针对固定条码 Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManager.java =================================================================== diff -u -r22315 -r22327 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManager.java (.../SterilizationRecordManager.java) (revision 22315) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManager.java (.../SterilizationRecordManager.java) (revision 22327) @@ -32,11 +32,10 @@ /** * 加载灭菌物品列表 - * @param tousseInstanceList 没入篮筐的器械包 - * @param reviewedBasketList 容器 + * @param sterilizationRecord 灭菌记录 * @return */ - public JSONArray loadSterilizationGoods(List tousseInstanceList,List reviewedBasketList); + public JSONArray loadSterilizationGoods(SterilizationRecord sterilizationRecord); /** * 更新旧的灭菌记录 有时器械包在灭菌后不合格需要重新灭菌,并非该炉灭菌失败,而是某几个器械包需要重新灭菌 @@ -332,6 +331,16 @@ */ public void setCycleCountIfNeed(SterilizationRecord sterilizationRecord); + + /** + * 将该灭菌记录未入筐的器械包的条码分别添加至条码集合中 + * 需要追溯的物品条码添加至barcodes集合中,不需要追溯的物品条码添加至fixedBarcodes集合中 + * @param sterilizationRecord 灭菌记录 + * @param barcodes 需要追溯的物品条码集合 + * @param fixedBarcodes 不需要追溯的物品条码集合 + */ + public void fillBarcodeToListFromSterilizationRecordWithoutReviewedBasket(SterilizationRecord sterilizationRecord , List barcodes , List fixedBarcodes); + /** * 灭菌完成以后更新包的失效日期 * @param sterilizationRecordIds 灭菌记录ID集合 Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java =================================================================== diff -u -r22315 -r22327 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 22315) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 22327) @@ -2731,9 +2731,9 @@ } } } - List tousseInstances = tousseInstanceManager.getTodayReviewedTousseInstanceWithOutBasket(orgUnitCode); + List tousseInstances = tousseInstanceManager.getTodayReviewedTousseInstanceWithOutBasket(orgUnitCode); if(CollectionUtils.isNotEmpty(tousseInstances)){ - for(TousseInstance ti : tousseInstances){ + for(TousseSimpleVO ti : tousseInstances){ if(sterilizations.contains(ti.getSterilingType())){ SimpleInfoVo siv = SimpleInfoVo.find(list,ti.getBarcode()); if(siv == null){ @@ -2972,7 +2972,7 @@ if(i==0){//页面上只显示第一条数据 temp.put("tousseBarcode", tousseInstance.getBarcode()); temp.put("tousseName", tousseInstance1.getTousseName()); - temp.put("typeForSterilizationStatistics", getTypeForSterilizationStatistics(tousseInstance1)); + temp.put("typeForSterilizationStatistics", getTypeForSterilizationStatistics(tousseInstance1.getProxyDisinfection_id() , tousseInstance1.getTousseDefinition().getTousseType() , tousseInstance1.getTousseDefinition().getIsForeignTousse())); temp.put("SterilingType", tousseInstance1.getSterilingType()); temp.put("department", "");//固定条码不显示科室 temp.put("reviewTime", ForgonDateUtils.safelyFormatDate(tousseInstance1.getReviewTime(), Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM, "")); @@ -2983,7 +2983,7 @@ } temp.put("tousseBarcode", barcodeList.get(i)); temp.put("tousseName", tousseInstance1.getTousseName()); - temp.put("typeForSterilizationStatistics", getTypeForSterilizationStatistics(tousseInstance1)); + temp.put("typeForSterilizationStatistics", getTypeForSterilizationStatistics(tousseInstance1.getProxyDisinfection_id() , tousseInstance1.getTousseDefinition().getTousseType() , tousseInstance1.getTousseDefinition().getIsForeignTousse())); temp.put("SterilingType", tousseInstance1.getSterilingType()); temp.put("department", StringUtils.defaultString(tousseInstance1.getDepart(), "")); temp.put("reviewTime", ForgonDateUtils.safelyFormatDate(tousseInstance1.getReviewTime(), Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM, "")); @@ -3038,7 +3038,7 @@ jsonObj.put("success", 0); jsonObj.put("tousseBarcode", tousseInstance.getBarcode()); jsonObj.put("tousseName", tousseInstance.getTousseName()); - jsonObj.put("typeForSterilizationStatistics", getTypeForSterilizationStatistics(tousseInstance)); + jsonObj.put("typeForSterilizationStatistics", getTypeForSterilizationStatistics(tousseInstance.getProxyDisinfection_id() , tousseInstance.getTousseDefinition().getTousseType() , tousseInstance.getTousseDefinition().getIsForeignTousse())); jsonObj.put("SterilingType", tousseInstance.getSterilingType()); jsonObj.put("department", StringUtils.defaultString(tousseInstance.getDepart(), "")); jsonObj.put("includeImplant", includeImplant); @@ -3110,7 +3110,7 @@ temp.put("tousseBarcode", tousseInstance.getBarcode()); temp.put("amount", 1); temp.put("tousseName", tousseName); - temp.put("typeForSterilizationStatistics", getTypeForSterilizationStatistics(tousseInstance)); + temp.put("typeForSterilizationStatistics", getTypeForSterilizationStatistics(tousseInstance.getProxyDisinfection_id() , tousseInstance.getTousseDefinition().getTousseType() , tousseInstance.getTousseDefinition().getIsForeignTousse())); temp.put("SterilingType", tousseInstance.getSterilingType()); temp.put("department", StringUtils.defaultString(tousseInstance.getDepart(), "")); temp.put("reviewTime", ForgonDateUtils.safelyFormatDate(tousseInstance.getReviewTime(), Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM, "")); @@ -3154,7 +3154,7 @@ JSONObject temp = new JSONObject(); temp.put("tousseBarcode", tousseInstance.getBarcode()); temp.put("tousseName", tousseInstance.getTousseName()); - temp.put("typeForSterilizationStatistics", getTypeForSterilizationStatistics(tousseInstance)); + temp.put("typeForSterilizationStatistics", getTypeForSterilizationStatistics(tousseInstance.getProxyDisinfection_id() , tousseInstance.getTousseDefinition().getTousseType() , tousseInstance.getTousseDefinition().getIsForeignTousse())); temp.put("SterilingType", tousseInstance.getSterilingType()); temp.put("department", StringUtils.defaultString(tousseInstance.getDepart(), "")); temp.put("reviewTime", ForgonDateUtils.safelyFormatDate(tousseInstance.getReviewTime(), Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM, "")); @@ -3173,7 +3173,8 @@ temp.put("virtualBasketSeqNum", tousseInstance.getVirtualBasketSeqNum()); temp.put("tousseBarcode", tousseInstance.getBarcode()); temp.put("tousseName", tousseInstance.getTousseName()); - temp.put("typeForSterilizationStatistics", getTypeForSterilizationStatistics(tousseInstance)); + temp.put("typeForSterilizationStatistics", + getTypeForSterilizationStatistics(tousseInstance.getProxyDisinfection_id() , tousseInstance.getTousseDefinition().getTousseType() , tousseInstance.getTousseDefinition().getIsForeignTousse())); temp.put("SterilingType", tousseInstance.getSterilingType()); temp.put("department", StringUtils.defaultString(tousseInstance.getDepart(), "")); temp.put("reviewTime", ForgonDateUtils.safelyFormatDate(tousseInstance.getReviewTime(), Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM, "")); @@ -3196,39 +3197,38 @@ } - /** + /** * 判别器械包的类型(此方法只适用于灭菌那里对器械包类型的分类统计) - * @param tousseInstance 器械包实例 + * @param proxyDisinfection_id 代理灭菌单id + * @param tousseType 器械包类型 + * @param isForeignTousse 是否为:外来器械包当普通器械包 * @return */ - public String getTypeForSterilizationStatistics(TousseInstance tousseInstance) { + private String getTypeForSterilizationStatistics(Long proxyDisinfection_id, String tousseType , String isForeignTousse) { 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()) { + //敷料包 + if (StringUtils.equals(tousseType, TousseDefinition.PACKAGE_TYPE_DRESSING)) { + if (DatabaseUtil.isPoIdValid(proxyDisinfection_id)) { typeForSterilizationStatistics = TousseDefinition.PACKAGE_TYPE_PROXY; + } else { + typeForSterilizationStatistics = TousseDefinition.PACKAGE_TYPE_DRESSING; } - } else { - throw new RuntimeException("找不到包定义!"); + // 器械包(包括但不限于"器械包"、"自定义器械包") + } else if (StringUtils.equals(tousseType, TousseDefinition.PACKAGE_TYPE_INSIDE) + || StringTools.equals(tousseType, TousseDefinition.PACKAGE_TYPE_CUSTOM)) { + if (DatabaseUtil.isPoIdValid(proxyDisinfection_id)) { + typeForSterilizationStatistics = TousseDefinition.PACKAGE_TYPE_PROXY; + } else if (TousseDefinition.STR_YES.equals(isForeignTousse)) { + typeForSterilizationStatistics = TousseDefinition.PACKAGE_TYPE_FOREIGN; + } else { + typeForSterilizationStatistics = TousseDefinition.PACKAGE_TYPE_INSIDE; + } + // 外来器械包(包括但不限于"外来器械包"、"外来器械拆分小包"、"外来器械包当普通器械包") + } else if (StringTools.equals(tousseType, TousseDefinition.PACKAGE_TYPE_SPLIT) + || StringTools.equals(tousseType, TousseDefinition.PACKAGE_TYPE_FOREIGN)) { + typeForSterilizationStatistics = TousseDefinition.PACKAGE_TYPE_FOREIGN; + } else if (StringTools.equals(tousseType, TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY)) { + typeForSterilizationStatistics = TousseDefinition.PACKAGE_TYPE_PROXY; } return typeForSterilizationStatistics; } @@ -3252,26 +3252,68 @@ * @return */ @Override - public JSONArray loadSterilizationGoods(List tousseInstanceList,List reviewedBasketList) { + public JSONArray loadSterilizationGoods(SterilizationRecord sterilizationRecord) { + // 没入篮筐的器械包 + //List tousseInstanceList = sterilizationRecord.getTousseInstanceList(); + List tousseInstanceListWithoutReviewedBasket = getTousseSimpleVOsBySterilizationRecord(sterilizationRecord , null); + // 容器 + List reviewedBasketList = sterilizationRecord.getReviewedBaskets(); JSONArray jsonArray = new JSONArray(); Map bMap=Maps.newHashMap(); String orgUnitCoding = AcegiHelper.getLoginUser() .getOrgUnitCodingFromSupplyRoomConfig(); // 当天审核的,未入筐的器械包 - List toussesOutsideBasketOfToday = tousseInstanceManager.getTodayReviewedTousseInstanceWithOutBasket(orgUnitCoding); + List toussesOutsideBasketOfToday = tousseInstanceManager.getTodayReviewedTousseInstanceWithOutBasket(orgUnitCoding); // 没入篮筐的器械包 - if(CollectionUtils.isNotEmpty(tousseInstanceList)){ - for (TousseInstance tousse : tousseInstanceList) { - //如果为聚合包内的包实例,则过滤掉 - if(tousse.getComboTousseInstanceId() != null){ - continue; - } + if(CollectionUtils.isNotEmpty(tousseInstanceListWithoutReviewedBasket)){ + for (TousseSimpleVO tousse : tousseInstanceListWithoutReviewedBasket) { String tousseName = tousse.getTousseName(); String key=tousseName; - boolean isCountBarcode=tousseInstanceManager.isCountBarcode(tousse.getBarcode()); - if(bMap.containsKey(key) && isCountBarcode){//只有支持扫固定条码的包,才去统计 + if(Constants.STR_NO.equals(tousse.getIsTraceable())){ + if(bMap.containsKey(key)){ + //已存在 则取出该对象,对象中 objAmount 累加。 + JSONObject obj = bMap.get(key); + int amt=(int) obj.get("amount"); + amt++; + obj.put("amount", amt); + obj.put("barcode", tousse.getFixedBarcode());//固定条码 + + //覆盖 + bMap.put(key, obj); + }else{ + JSONObject obj = new JSONObject(); + obj.put("amount", 1); + obj.put("barcode", tousse.getFixedBarcode());//固定条码 + obj.put("typeForSterilizationStatistics", getTypeForSterilizationStatistics(null , tousse.getTousseType() , tousse.getIsForeignTousse())); + obj.put("name", tousseName); + obj.put("leaf", true); + obj.put("iconCls", "task"); + obj.put("isParentNode", true); + obj.put("uiProvider", "col"); + //覆盖 + bMap.put(key, obj); + } + }else{ + JSONObject jsonObj = new JSONObject(); + jsonObj.put("isParentNode", true); + jsonObj.put("barcode", tousse.getBarcode()); + jsonObj.put("name", tousseName); + jsonObj.put("typeForSterilizationStatistics", getTypeForSterilizationStatistics(tousse.getProxyDisinfectionId() , tousse.getTousseType() , tousse.getIsForeignTousse())); + 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("iconCls", "task"); + jsonObj.put("leaf", true); + //jsonObj.put("stockAmount",tousseInstanceManager.getTousseInstanceStockAmount(tousse.getBarcode()));//库存数量 + jsonObj.put("stockAmount",tousse.getStockAmount());//库存数量 + jsonObj.put("todayAmount",toussesOutsideBasketOfToday.size());//今日审核数量 + bMap.put(tousse.getBarcode(), jsonObj); + } + /*if(bMap.containsKey(key) && isCountBarcode){//只有支持扫固定条码的包,才去统计 //已存在 则取出该对象,对象中 objAmount 累加。 JSONObject obj = bMap.get(key); int amt=(int) obj.get("amount"); @@ -3303,7 +3345,7 @@ jsonObj.put("stockAmount",tousseInstanceManager.getTousseInstanceStockAmount(fixedBarcode));//库存数量 bMap.put(key, jsonObj); } - } + }*/ } @@ -3315,7 +3357,8 @@ // 容器 for (ReviewedBasket reviewedBasket : reviewedBasketList) { try { - Set tousseInstanceList2 = reviewedBasket.getTousseInstances(objectDao); +// Set tousseInstanceList2 = reviewedBasket.getTousseInstances(objectDao); + List tousseInstanceList2 = getTousseSimpleVOsBySterilizationRecord(sterilizationRecord , reviewedBasket); JSONObject jsonObj = new JSONObject(); jsonObj.put("isParentNode", true); jsonObj.put("barcode", reviewedBasket.getContainer().getBarcode()); @@ -3328,12 +3371,47 @@ JSONArray tousseInBasketArray = new JSONArray(); Map cMap=Maps.newHashMap(); - List tousseInstanceResultList = new ArrayList(); + List tousseInstanceResultList = new ArrayList(); tousseInstanceResultList.addAll(tousseInstanceList2); Collections.sort(tousseInstanceResultList); - for (TousseInstance tousseInstance : tousseInstanceResultList) { - String tousseName = tousseInstance.getTousseName(); - boolean isCountBarcode = tousseInstanceManager.isCountBarcode(tousseInstance.getBarcode()); + for (TousseSimpleVO tousseSimpleVO : tousseInstanceResultList) { + String tousseName = tousseSimpleVO.getTousseName(); + if(StringUtils.equals(Constants.STR_NO, tousseSimpleVO.getIsTraceable())){ + if(cMap.containsKey(tousseName)){//只有固定条码才去汇总 + JSONObject obj = cMap.get(tousseName); + int amt=(int) obj.get("amount"); + amt++; + obj.put("amount", amt); + obj.put("barcode", tousseSimpleVO.getFixedBarcode()); + //覆盖 + cMap.put(tousseName, obj); + }else{ + JSONObject obj = new JSONObject(); + obj.put("amount", 1); + obj.put("barcode", tousseSimpleVO.getFixedBarcode()); + obj.put("name", tousseName); + obj.put("leaf", true); + obj.put("iconCls", "task"); + obj.put("isParentNode", true); + obj.put("uiProvider", "col"); + cMap.put(tousseName, obj); + } + }else{ + JSONObject tousseObj = new JSONObject(); + tousseObj.put("isParentNode", false); + tousseObj.put("barcode", tousseSimpleVO.getBarcode()); + tousseObj.put("name", tousseName); + tousseObj.put("typeForSterilizationStatistics", + getTypeForSterilizationStatistics(tousseSimpleVO.getProxyDisinfectionId() , tousseSimpleVO.getTousseType() , tousseSimpleVO.getIsForeignTousse())); + tousseObj.put("depart", StringUtils.defaultString(tousseSimpleVO.getDepart(), "")); + tousseObj.put("type", TousseDefinition.PACKAGE_TYPE_INSIDE); + tousseObj.put("amount", 1); + tousseObj.put("uiProvider", "col"); + tousseObj.put("leaf", true); + tousseObj.put("iconCls", "task"); + cMap.put(tousseSimpleVO.getBarcode(), tousseObj); + } + /*boolean isCountBarcode = tousseInstanceManager.isCountBarcode(tousseInstance.getBarcode()); if(cMap.containsKey(tousseName) && isCountBarcode){//只有固定条码才去汇总 JSONObject obj = cMap.get(tousseName); int amt=(int) obj.get("amount"); @@ -3347,7 +3425,8 @@ tousseObj.put("isParentNode", false); tousseObj.put("barcode", tousseInstance.getBarcode()); tousseObj.put("name", tousseName); - tousseObj.put("typeForSterilizationStatistics", getTypeForSterilizationStatistics(tousseInstance)); + tousseObj.put("typeForSterilizationStatistics", + getTypeForSterilizationStatistics(tousseInstance.getProxyDisinfection_id() , tousseInstance.getTousseDefinition().getTousseType() , tousseInstance.getTousseDefinition().getIsForeignTousse())); tousseObj.put("depart", StringUtils.defaultString(tousseInstance.getDepart(), "")); tousseObj.put("type", "器械包"); tousseObj.put("amount", 1); @@ -3362,7 +3441,7 @@ cMap.put(tousseName, tousseObj); } //cMap.put(tousseName, tousseObj); - } + }*/ } @@ -3380,6 +3459,46 @@ } return jsonArray; } + + /** + * 根据灭菌篮筐实例或灭菌记录获取对应的物品(优先按灭菌篮筐实例过滤,如果灭菌篮筐实例为空则按灭菌篮筐实例参数查询出未入筐的器械包) + * @param sterilizationRecord + * @param reviewedBasket + * @return + */ + private List getTousseSimpleVOsBySterilizationRecord(SterilizationRecord sterilizationRecord , ReviewedBasket reviewedBasket){ + List list = null; + StringBuffer queryTousseSql = new StringBuffer(); + if(reviewedBasket != null && DatabaseUtil.isPoIdValid(reviewedBasket.getId())){ + queryTousseSql.append("select b.barcode,tdAncestor.name definitionName,po.tousseName,po.depart,po.departCoding,tdAncestor.isTraceable,po.isUrgentTousse,po.orgUnitCoding,po.orgUnitName,po.reviewTime,po.sterilingType,po.validUntil "); + if(dbConnection.isSqlServer()){ + queryTousseSql.append(",(select top 1 barcode from TousseInstance ti1 join barcodeDevice b1 on b1.id=ti1.id where ti1.tousseFixedBarcode=1 and ti1.tousseDefinition_id=tdAncestor.id) fixedBarcode "); + }else if(dbConnection.isOracle()){ + queryTousseSql.append(",(select barcode from TousseInstance ti1 join barcodeDevice b1 on b1.id=ti1.id where ti1.tousseFixedBarcode=1 and ti1.tousseDefinition_id=tdAncestor.id and rownum <= 1) fixedBarcode "); + } + queryTousseSql.append(",po.proxyDisinfection_id,tdAncestor.tousseType,tdAncestor.isForeignTousse,po.proxyDisinfection_id " + + ",0 stockAmount " + + "from " + TousseInstance.class.getSimpleName() + " po join " + BarcodeDevice.class.getSimpleName() + " b on po.id=b.id " + + "join "+ TousseDefinition.class.getSimpleName() +" td on po.tousseDefinition_id=td.id " + + "join "+ TousseDefinition.class.getSimpleName() +" tdAncestor on td.ancestorId=tdAncestor.id where po.reviewBasket_id=" + reviewedBasket.getId()); + return tousseInstanceManager.getTousseVoDataFromDb(queryTousseSql.toString()); + }else if(sterilizationRecord != null && DatabaseUtil.isPoIdValid(sterilizationRecord.getId())){ + queryTousseSql.append("select b.barcode,tdAncestor.name definitionName,po.tousseName,po.depart,po.departCoding,tdAncestor.isTraceable,po.isUrgentTousse,po.orgUnitCoding,po.orgUnitName,po.reviewTime,po.sterilingType,po.validUntil "); + if(dbConnection.isOracle()){ + queryTousseSql.append(",(select barcode from TousseInstance ti1 join barcodeDevice b1 on b1.id=ti1.id where ti1.tousseFixedBarcode=1 and ti1.tousseDefinition_id=tdAncestor.id and rownum <= 1) fixedBarcode "); + }else if(dbConnection.isSqlServer()){ + queryTousseSql.append(",(select top 1 barcode from TousseInstance ti1 join barcodeDevice b1 on b1.id=ti1.id where ti1.tousseFixedBarcode=1 and ti1.tousseDefinition_id=tdAncestor.id) fixedBarcode "); + } + queryTousseSql.append(",po.proxyDisinfection_id,tdAncestor.tousseType,tdAncestor.isForeignTousse,po.proxyDisinfection_id " + + ",0 stockAmount " + + "from " + TousseInstance.class.getSimpleName() + " po join " + BarcodeDevice.class.getSimpleName() + " b on po.id=b.id " + + "join "+ TousseDefinition.class.getSimpleName() +" td on po.tousseDefinition_id=td.id " + + "join "+ TousseDefinition.class.getSimpleName() +" tdAncestor on td.ancestorId=tdAncestor.id " + + "join sterilization_tousseInstance st on st.tousseInstance_id=po.id where st.sterilizationRecord_id=" + sterilizationRecord.getId()); + return tousseInstanceManager.getTousseVoDataFromDb(queryTousseSql.toString()); + } + return list; + } @Override @SuppressWarnings("unchecked") @@ -3452,7 +3571,59 @@ return new Date(time); // 将毫秒数转换成日期 } - @Override + @Override + public void fillBarcodeToListFromSterilizationRecordWithoutReviewedBasket(SterilizationRecord sterilizationRecord , List barcodes , List fixedBarcodes){ + String subFixedBarcodeQuerySql = null; + if(dbConnection.isSqlServer()){ + subFixedBarcodeQuerySql = "(select top 1 barcode from TousseInstance ti1 join barcodeDevice b1 on b1.id=ti1.id where ti1.tousseFixedBarcode=1 and ti1.tousseDefinition_id=tdancestor.id)"; + } else if(dbConnection.isOracle()){ + subFixedBarcodeQuerySql = "(select barcode from TousseInstance ti1 join barcodeDevice b1 on b1.id=ti1.id where ti1.tousseFixedBarcode=1 and ti1.tousseDefinition_id=tdancestor.id and rownum <= 1)"; + } + //不追溯的固定条码查询 + String fixedBarcodeQuerySql = "select distinct "+ subFixedBarcodeQuerySql +" fixedBarcode from " + TousseInstance.class.getSimpleName() + " po " + + " join " + BarcodeDevice.class.getSimpleName() + " bd on po.id=bd.id " + + " join " + TousseDefinition.class.getSimpleName() + " td on po.tousseDefinition_id=td.id " + + " join " + TousseDefinition.class.getSimpleName() + " tdAncestor on td.ancestorId=tdAncestor.id " + + " join sterilization_tousseInstance st on po.id=st.tousseInstance_id " + + " where st.sterilizationRecord_id =" + sterilizationRecord.getId() + " and tdAncestor.isTraceable='" + Constants.STR_NO + "'"; + ResultSet rs = null; + try { + rs = objectDao.executeSql(fixedBarcodeQuerySql); + while(rs.next()){ + String barcode = rs.getString("fixedBarcode"); + if(!fixedBarcodes.contains(barcode)){ + fixedBarcodes.add(barcode); + } + } + } catch (Exception e) { + e.printStackTrace(); + }finally{ + DatabaseUtil.closeResultSetAndStatement(rs); + } + + //要追溯的唯一条码查询 + String uniqueBarcodeQuerySql = "select bd.barcode from " + TousseInstance.class.getSimpleName() + " po " + + " join " + BarcodeDevice.class.getSimpleName() + " bd on po.id=bd.id " + + " join " + TousseDefinition.class.getSimpleName() + " td on po.tousseDefinition_id=td.id " + + " join " + TousseDefinition.class.getSimpleName() + " tdAncestor on td.ancestorId=tdAncestor.id " + + " join sterilization_tousseInstance st on po.id=st.tousseInstance_id " + + " where st.sterilizationRecord_id =" + sterilizationRecord.getId() + " and tdAncestor.isTraceable='" + Constants.STR_YES + "'"; + try { + rs = objectDao.executeSql(uniqueBarcodeQuerySql); + while(rs.next()){ + String barcode = rs.getString("barcode"); + if(!barcodes.contains(barcode)){ + barcodes.add(barcode); + } + } + } catch (Exception e) { + e.printStackTrace(); + }finally{ + DatabaseUtil.closeResultSetAndStatement(rs); + } + } + + @Override public void set2Printed(Long id) { SterilizationRecord record = getForUpdate(id); JSONObject description = new JSONObject(); Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java =================================================================== diff -u -r22301 -r22327 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 22301) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 22327) @@ -717,8 +717,11 @@ + "and tdancestor.isTraceable='是' "+keyWordSearchSql+" and ti.status='"+TousseInstance.STATUS_REVIEWED+"' "+departSearchSql+" and ti.reviewBasket_id is null and " + "((ti.proxyDisinfection_id is null and ti.orgUnitCoding='"+orgUnitCode+"') " + "or (ti.proxyDisinfection_id is not null and ti.proxyDisinfection_id in (select ip.id from InvoicePlan ip where ip.handleDepartCoding='"+orgUnitCode+"')))) " - + "union (select tdancestor.id,null depart,tdancestor.name tousseName,(select min(barcode) from TousseInstance ti1 " - + "join barcodeDevice b1 on b1.id=ti1.id where ti1.tousseFixedBarcode=1 and ti1.tousseDefinition_id=tdancestor.id) " + + + " union " + + + "(select tdancestor.id,null depart,tdancestor.name tousseName" + + ",(select top 1 barcode from TousseInstance ti1 join barcodeDevice b1 on b1.id=ti1.id where ti1.tousseFixedBarcode=1 and ti1.tousseDefinition_id=tdancestor.id) " + "barcode,null reviewTime,count(0) amount from TousseInstance ti join barcodeDevice b on b.id=ti.id " + "join toussedefinition td on ti.tousseDefinition_id=td.id join toussedefinition tdancestor " + "on td.ancestorID=tdancestor.id where 1=1 and ti.comboTousseInstanceId is null " @@ -740,9 +743,13 @@ + "is null and tdancestor.isTraceable='是' "+keyWordSearchSql+" and ti.status='"+TousseInstance.STATUS_REVIEWED+"' "+departSearchSql+" and ti.reviewBasket_id is null " + "and ((ti.proxyDisinfection_id is null and ti.orgUnitCoding='"+orgUnitCode+"') or (ti.proxyDisinfection_id " + "is not null and ti.proxyDisinfection_id in (select ip.id from InvoicePlan ip " - + "where ip.handleDepartCoding='"+orgUnitCode+"')))) union (select tdancestor.id,null depart,tdancestor.name tousseName," - + "(select min(barcode) from TousseInstance ti1 join barcodeDevice b1 on b1.id=ti1.id " - + "where ti1.tousseFixedBarcode=1 and ti1.tousseDefinition_id=tdancestor.id) barcode,null " + + "where ip.handleDepartCoding='"+orgUnitCode+"'))))" + + + " union " + + + "(select tdancestor.id,null depart,tdancestor.name tousseName," + + "(select barcode from TousseInstance ti1 join barcodeDevice b1 on b1.id=ti1.id " + + "where ti1.tousseFixedBarcode=1 and ti1.tousseDefinition_id=tdancestor.id and rownum <= 1) barcode,null " + "reviewTime,count(0) amount from TousseInstance ti join barcodeDevice b on b.id=ti.id join " + "toussedefinition td on ti.tousseDefinition_id=td.id join toussedefinition tdancestor " + "on td.ancestorID=tdancestor.id where 1=1 and ti.comboTousseInstanceId is null and " @@ -757,7 +764,7 @@ * 获取待灭菌器械包分页的sql(Oracle) * @param start 开始条数 * @param limit 结束条数 - * @param orgUnitCoding 当前登陆科室 + * @param orgUnitCoding 当前登录科室 * @param departSearchSql 根据科室搜索 * @param keyWordSearchSql 关键字搜索 * @return @@ -771,9 +778,12 @@ + "and ti.status='"+TousseInstance.STATUS_REVIEWED+"' "+departSearchSql+" and ti.reviewBasket_id is null and ((ti.proxyDisinfection_id is null and ti.orgUnitCoding='"+orgUnitCoding+"') " + "or (ti.proxyDisinfection_id is not null and ti.proxyDisinfection_id in " + "(select ip.id from InvoicePlan ip where ip.handleDepartCoding='"+orgUnitCoding+"')) ) ) " - + "union (select tdancestor.id,null depart,tdancestor.name tousseName,(select min(barcode) " - + "from TousseInstance ti1 join barcodeDevice b1 on b1.id=ti1.id where ti1.tousseFixedBarcode=1 " - + "and ti1.tousseDefinition_id=tdancestor.id) barcode, null reviewTime,count(0) amount from TousseInstance ti " + + + " union " + + + "(select tdancestor.id,null depart,tdancestor.name tousseName" + + ",(select barcode from TousseInstance ti1 join barcodeDevice b1 on b1.id=ti1.id where ti1.tousseFixedBarcode=1 and ti1.tousseDefinition_id=tdancestor.id and rownum <= 1) barcode" + + ", null reviewTime,count(0) amount from TousseInstance ti " + "join barcodeDevice b on b.id=ti.id join toussedefinition td on ti.tousseDefinition_id=td.id join toussedefinition " + "tdancestor on td.ancestorID=tdancestor.id where 1=1 and ti.comboTousseInstanceId is null and tdancestor.isTraceable='否' "+keyWordSearchSql+" " + "and ti.status='"+TousseInstance.STATUS_REVIEWED+"' "+departSearchSql+" and ti.reviewBasket_id is null and ((ti.proxyDisinfection_id is null and ti.orgUnitCoding='"+orgUnitCoding+"') " @@ -795,9 +805,12 @@ + "((select tdancestor.id,depart,ti.tousseName,b.barcode,ti.reviewTime,1 amount from TousseInstance ti " + "join barcodeDevice b on b.id=ti.id join toussedefinition td on ti.tousseDefinition_id=td.id join " + "toussedefinition tdancestor on td.ancestorID=tdancestor.id where tdancestor.isTraceable='是' "+keyWordSearchSql+" and " - + "ti.status='"+TousseInstance.STATUS_REVIEWED+"' "+departSearchSql+" and ti.reviewBasket_id is null and ti.orgunitcoding='"+orgUnitCoding+"') union " - + "(select tdancestor.id,null depart,tdancestor.name tousseName,(select min(barcode) " - + "from TousseInstance ti1 join barcodeDevice b1 on b1.id=ti1.id where ti1.tousseFixedBarcode=1 and " + + "ti.status='"+TousseInstance.STATUS_REVIEWED+"' "+departSearchSql+" and ti.reviewBasket_id is null and ti.orgunitcoding='"+orgUnitCoding+"')" + + + " union " + + + "(select tdancestor.id,null depart,tdancestor.name tousseName" + + ",(select top 1 barcode from TousseInstance ti1 join barcodeDevice b1 on b1.id=ti1.id where ti1.tousseFixedBarcode=1 and " + "ti1.tousseDefinition_id=tdancestor.id) barcode,null reviewTime,count(0) amount from TousseInstance " + "ti join barcodeDevice b on b.id=ti.id join toussedefinition td on ti.tousseDefinition_id=td.id join " + "toussedefinition tdancestor on td.ancestorID=tdancestor.id where 1=1 and tdancestor.isTraceable='否' "+keyWordSearchSql+" " @@ -808,8 +821,12 @@ + "join barcodeDevice b on b.id=ti.id join toussedefinition td on ti.tousseDefinition_id=td.id join " + "toussedefinition tdancestor on td.ancestorID=tdancestor.id where tdancestor.isTraceable='是' "+keyWordSearchSql+" " + "and ti.status='"+TousseInstance.STATUS_REVIEWED+"' "+departSearchSql+" " - + " and ti.reviewBasket_id is null and ti.orgunitcoding='"+orgUnitCoding+"') union (select tdancestor.id,null depart,tdancestor.name " - + "tousseName,(select min(barcode) from TousseInstance ti1 join barcodeDevice b1 on b1.id=ti1.id where ti1.tousseFixedBarcode=1 " + + " and ti.reviewBasket_id is null and ti.orgunitcoding='"+orgUnitCoding+"')" + + + " union " + + + "(select tdancestor.id,null depart,tdancestor.name " + + "tousseName,(select top 1 barcode from TousseInstance ti1 join barcodeDevice b1 on b1.id=ti1.id where ti1.tousseFixedBarcode=1 " + "and ti1.tousseDefinition_id=tdancestor.id) barcode,null reviewTime,count(0) amount from TousseInstance ti join barcodeDevice " + "b on b.id=ti.id join toussedefinition td on ti.tousseDefinition_id=td.id join " + "toussedefinition tdancestor on td.ancestorID=tdancestor.id where 1=1 and tdancestor.isTraceable='否' "+keyWordSearchSql+" " @@ -875,7 +892,7 @@ @SuppressWarnings("unchecked") @Override - public List getAllReviewedTousseInstanceWithOutBasket( + public List getAllReviewedTousseInstanceWithOutBasket( String orgUnitCode , String beginDate , String endDate , String start , String limit, String searchKeyWord, Map sqlCondition){ String sql = " where po.comboTousseInstanceId is null and po.status = '" + TousseInstance.STATUS_REVIEWED + "' and reviewBasket_id is null"; //已审核并且还未入审核篮筐 @@ -954,22 +971,121 @@ } } @SuppressWarnings("unchecked") - List list = null; + List list = null; //如果有分页的参数(比如灭菌装载的待灭菌装载grid的数据源action有调用),则 - if(StringUtils.isNumeric(start) && StringUtils.isNumeric(limit)){ + /*if(StringUtils.isNumeric(start) && StringUtils.isNumeric(limit)){ String defaultOrderColumnSql = StringUtils.isBlank(orderColumnSqlByConfig) ? "barcode desc" : orderColumnSqlByConfig; list = objectDao.findBySql( TousseInstance.class.getSimpleName(), sql,Integer.parseInt(start) , Integer.parseInt(limit),defaultOrderColumnSql); }else{ String defaultOrderColumnSql = StringUtils.isBlank(orderColumnSqlByConfig) ? "depart" : orderColumnSqlByConfig; //不分页时,比如添加灭菌记录的窗口的待灭菌树型grid数据源请求 list = objectDao.findBySql(TousseInstance.class.getSimpleName(), sql, 0, 0, defaultOrderColumnSql); + }*/ + String firstBarcodeSql = null; + if(dbConnection.isSqlServer()){ + firstBarcodeSql = "(select top 1 barcode from "+ TousseInstance.class.getSimpleName() +" ti1 join "+ BarcodeDevice.class.getSimpleName() +" b1 on b1.id=ti1.id where ti1.tousseFixedBarcode=1 and ti1.tousseDefinition_id=tdAncestor.id) fixedBarcode "; + } else if(dbConnection.isOracle()){ + firstBarcodeSql = "(select barcode from "+ TousseInstance.class.getSimpleName() +" ti1 join "+ BarcodeDevice.class.getSimpleName() +" b1 on b1.id=ti1.id where ti1.tousseFixedBarcode=1 and ti1.tousseDefinition_id=tdAncestor.id and rownum <= 1) fixedBarcode "; } + String querySql = "select b.barcode,tdAncestor.name definitionName,po.tousseName,po.depart,po.departCoding,tdAncestor.isTraceable,po.isUrgentTousse,po.orgUnitCoding,po.orgUnitName,po.reviewTime,po.sterilingType,po.validUntil," + + firstBarcodeSql + + "from " + TousseInstance.class.getSimpleName() + " po join " + BarcodeDevice.class.getSimpleName() + " b on po.id=b.id " + + "join "+ TousseDefinition.class.getSimpleName() +" td on po.tousseDefinition_id=td.id join "+ TousseDefinition.class.getSimpleName() +" tdAncestor on td.ancestorId=tdAncestor.id " + sql; + if(StringUtils.isNumeric(start) && StringUtils.isNumeric(limit)){ + String defaultOrderColumnSql = StringUtils.isBlank(orderColumnSqlByConfig) ? "barcode desc" : orderColumnSqlByConfig; + querySql = querySql + " order by " + defaultOrderColumnSql; + if(dbConnection.isSqlServer()){ + list = getTousseVoDataFromDb(SqlUtils.getSqlServerQuerySqlByPage(querySql, Integer.parseInt(start), Integer.parseInt(limit), "barcode")); + } else if(dbConnection.isOracle()){ + list = getTousseVoDataFromDb(SqlUtils.getOracleQuerySqlByPage(querySql, Integer.parseInt(start), Integer.parseInt(limit))); + } + }else{ + String defaultOrderColumnSql = StringUtils.isBlank(orderColumnSqlByConfig) ? "depart" : orderColumnSqlByConfig; + list = getTousseVoDataFromDb(querySql + " order by " + defaultOrderColumnSql); + } return list; } @Override - public List getTodayReviewedTousseInstanceWithOutBasket( + public List getTousseVoDataFromDb(String queryTousseSql){ + List list = new ArrayList(); + TousseSimpleVO vo = null; + ResultSet rs = null; + try { + rs = objectDao.executeSql(queryTousseSql); + while (rs.next()) { + vo = new TousseSimpleVO(); + try{ + vo.setBarcode(rs.getString("barcode")); + }catch(Exception e){} + try{ + vo.setTousseName(rs.getString("tousseName")); + }catch(Exception e){} + try{ + vo.setDefinitionName(rs.getString("definitionName")); + }catch(Exception e){} + try{ + vo.setDepart(rs.getString("depart")); + }catch(Exception e){} + try{ + vo.setDepartCoding(rs.getString("departCoding")); + }catch(Exception e){} + try{ + vo.setFixedBarcode(rs.getString("fixedBarcode")); + }catch(Exception e){} + try{ + vo.setIsTraceable(rs.getString("isTraceable")); + }catch(Exception e){} + try{ + vo.setIsUrgentTousse(rs.getString("isUrgentTousse")); + }catch(Exception e){} + try{ + vo.setOrgUnitCoding(rs.getString("orgUnitCoding")); + }catch(Exception e){} + try{ + vo.setOrgUnitName(rs.getString("orgUnitName")); + }catch(Exception e){} + try{ + vo.setReviewTime(ForgonDateUtils.safelyFormatDate(rs.getTimestamp("reviewTime") , Constants.DATEFORMAT_YYYYMMDDHHMM , null)); + }catch(Exception e){} + try{ + vo.setSterilingType(rs.getString("sterilingType")); + }catch(Exception e){} + try{ + vo.setValidUntil(ForgonDateUtils.safelyFormatDate(rs.getTimestamp("validUntil") , Constants.DATEFORMAT_YYYYMMDDHHMM , null)); + }catch(Exception e){} + try{ + vo.setTousseType(rs.getString("tousseType")); + }catch(Exception e){} + try{ + vo.setIsForeignTousse(rs.getString("isForeignTousse")); + }catch(Exception e){} + try{ + vo.setProxyDisinfectionId(rs.getLong("proxyDisinfection_Id")); + }catch(Exception e){} + try{ + Object stockAmountObj = rs.getObject("StockAmount"); + if(stockAmountObj != null){ + if(stockAmountObj instanceof BigDecimal){ + vo.setStockAmount(((BigDecimal) stockAmountObj).longValue()); + } else if(stockAmountObj instanceof Long){ + vo.setStockAmount(((Long) stockAmountObj).longValue()); + } + } + }catch(Exception e){} + list.add(vo); + } + } catch (Exception e) { + e.printStackTrace(); + }finally{ + DatabaseUtil.closeResultSetAndStatement(rs); + } + return list; + } + + @Override + public List getTodayReviewedTousseInstanceWithOutBasket( String orgUnitCode) { String todayStr = DateTools.getCurrentDayByFormat("yyyy-MM-dd"); return getAllReviewedTousseInstanceWithOutBasket(orgUnitCode , todayStr, todayStr , null , null , null , null); @@ -1139,11 +1255,16 @@ departmentCodeSql = String.format(" and t.departCoding='%s' ", departmentCode); } - + String queryFixedBarcodeSql = null; + if(dbConnection.isSqlServer()){ + queryFixedBarcodeSql = ",(select top 1 barcode from "+ TousseInstance.class.getSimpleName() +" ti1 join "+ BarcodeDevice.class.getSimpleName() +" b1 on b1.id=ti1.id where ti1.tousseFixedBarcode=1 and ti1.tousseDefinition_id=tdAncestor.id) fixedBarcode "; + } else if(dbConnection.isOracle()){ + queryFixedBarcodeSql = ",(select barcode from "+ TousseInstance.class.getSimpleName() +" ti1 join "+ BarcodeDevice.class.getSimpleName() +" b1 on b1.id=ti1.id where ti1.tousseFixedBarcode=1 and ti1.tousseDefinition_id=tdAncestor.id and rownum <= 1) fixedBarcode "; + } //1、普通器械包、消毒物品、敷料包 String sql1 = "select distinct t.id id, t.depart depart, t.departCoding departCoding, t.tousseName name, td.tousseType, t.tousseName, b.barcode, t.validUntil, t.sterilingType," + "t.orgUnitCoding, t.orgUnitName, t.foreignProxyItem_Id, t.proxyDisinfection_Id,t.reviewTime,t.isUrgentTousse,tdAncestor.isTraceable " - + ",(select min(barcode) from TousseInstance ti1 join barcodeDevice b1 on b1.id=ti1.id where ti1.tousseFixedBarcode=1 and ti1.tousseDefinition_id=tdAncestor.id) fixedBarcode " + + queryFixedBarcodeSql + "from tousseinstance t, barcodedevice b , cssdHandleTousses tt , TousseDefinition td , TousseDefinition tdAncestor " + "where t.id = b.id and tt.tousseDefinitionId=td.ancestorID and t.tousseDefinition_id=td.id and td.ancestorID=tdAncestor.id " + "and t.reviewBasket_id =" + reviewedBasket.getId() @@ -1226,9 +1347,15 @@ buildTousseSimpleVOs(vos, sql3); //4、外部代理灭菌 + String firstBarcodeSql = null; + if(dbConnection.isSqlServer()){ + firstBarcodeSql = "(select top 1 barcode from TousseInstance ti1 join barcodeDevice b1 on b1.id=ti1.id where ti1.tousseFixedBarcode=1 and ti1.tousseDefinition_id=tdAncestor.id) fixedBarcode "; + } else if(dbConnection.isOracle()){ + firstBarcodeSql = "(select barcode from TousseInstance ti1 join barcodeDevice b1 on b1.id=ti1.id where ti1.tousseFixedBarcode=1 and ti1.tousseDefinition_id=tdAncestor.id and rownum <= 1) fixedBarcode "; + } String sql4 = "select t.id id, t.depart depart, t.departCoding departCoding,t.tousseName name, td.tousseType, t.tousseName, b.barcode, t.validUntil, t.sterilingType," - + "t.orgUnitCoding, t.orgUnitName, t.foreignProxyItem_Id, t.proxyDisinfection_Id,t.reviewTime,t.isUrgentTousse,tdAncestor.isTraceable " - + ",(select min(barcode) from TousseInstance ti1 join barcodeDevice b1 on b1.id=ti1.id where ti1.tousseFixedBarcode=1 and ti1.tousseDefinition_id=tdAncestor.id) fixedBarcode " + + "t.orgUnitCoding, t.orgUnitName, t.foreignProxyItem_Id, t.proxyDisinfection_Id,t.reviewTime,t.isUrgentTousse,tdAncestor.isTraceable," + + firstBarcodeSql + "from tousseinstance t, barcodedevice b , TousseDefinition td , TousseDefinition tdAncestor " + "where t.id = b.id and t.tousseDefinition_id=td.id and td.ancestorID=tdAncestor.id and td.tousseType in ('"+TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY+"') and t.reviewBasket_id =" + reviewedBasket.getId() @@ -3955,13 +4082,6 @@ List reviewedBaskets = reviewedBasketManager .getDepartAllReviewedBasket(orgUnitCoding); - // 当天审核的,未入筐的器械包 ( 旧 ) -// List toussesOutsideBasketOfToday = getTodayReviewedTousseInstanceWithOutBasket(orgUnitCoding); - - //当天审核的,未入筐的器械包(新) :包括固定条码汇总 - List toussesOutsideBasketOfToday = getTodayReviewedTousseInsWithOutBasketBySterilization(orgUnitCoding); - - // 遍历加载放入灭菌篮筐的器械包 for (ReviewedBasket basket : reviewedBaskets) { Container container = basket.getContainer(); @@ -3995,15 +4115,67 @@ flag = true; } String key =vo.getDefinitionName(); + //是否需要汇总固定条码的包实例数量 boolean isCountBarcode=Constants.STR_NO.equals(vo.getIsTraceable()); - String objName=vo.getDefinitionName(); - if(bMap.containsKey(key) && isCountBarcode){//只有支持扫固定条码的包,才去统计 + String objName=vo.getDefinitionName(); + if(isCountBarcode){ + if(bMap.containsKey(key)){ + //已存在 则取出该对象,对象中 objAmount 累加。 + JSONObject obj = bMap.get(key); + int amt=(int) obj.get("objAmount"); + amt++; + obj.put("objAmount", amt); + obj.put("objBarcode", vo.getFixedBarcode());//固定条码 + //覆盖 + bMap.put(key, obj); + }else{ + //已存在 则取出该对象,对象中 objAmount 累加。 + JSONObject obj = new JSONObject(); + obj.put("objAmount", 1); + obj.put("objBarcode", vo.getFixedBarcode());//固定条码 + obj.put("type", "TOUSSE_IN"); + obj.put("uiProvider", "col"); + obj.put("leaf", true); + obj.put("iconCls", "task"); + obj.put("objName",objName ); + //覆盖 + bMap.put(key, obj); + } + }else{ + JSONObject tousseInBasket = new JSONObject(); + String isUrgentTousse = vo.getIsUrgentTousse(); + boolean isTimeout =false; + isTimeout =timeoutManager.isTimeouted(vo.getReviewTime(),timeoutSetting); + + tousseInBasket.put("depart", vo.getDepart()); + tousseInBasket.put("objName",objName ); + tousseInBasket.put("objBarcode", vo.getBarcode()); + tousseInBasket.put("objAmount", 1); + tousseInBasket.put("reviewTime", vo.getReviewTime()); + tousseInBasket.put("type", "TOUSSE_IN"); + tousseInBasket.put("uiProvider", "col"); + tousseInBasket.put("leaf", true); + tousseInBasket.put("iconCls", "task"); + tousseInBasket.put("cls", isTimeout ? "itemTimeout" : ""); + // 只要有一个包超时,篮筐就显示超时 + if(isTimeout){ + isNotTimeout = false; + } + if(isUrgentTousse != null && isUrgentTousse.equals(TousseDefinition.STR_YES )){ + isBasketUrgent = true; // 只要有一个包加急,篮筐就显示加急 + tousseInBasket.put("isUrgent", TousseDefinition.STR_YES); + }else{ + tousseInBasket.put("isUrgent", TousseDefinition.STR_NO); + } + bMap.put(vo.getBarcode(), tousseInBasket); + } + /*if(bMap.containsKey(key) && isCountBarcode){//只有支持扫固定条码的包,才去统计 //已存在 则取出该对象,对象中 objAmount 累加。 JSONObject obj = bMap.get(key); int amt=(int) obj.get("objAmount"); amt++; obj.put("objAmount", amt); - obj.put("objBarcode", getTousseFixedBarcodeByBarcode(vo.getBarcode(),TousseDefinition.STR_NO));//固定条码 + obj.put("objBarcode", vo.getFixedBarcode());//固定条码 //覆盖 bMap.put(key, obj); }else{ @@ -4038,7 +4210,7 @@ bMap.put(vo.getBarcode(), tousseInBasket); } - } + }*/ } for (String key : bMap.keySet()) { JSONObject tousseInBasket=bMap.get(key); @@ -4061,7 +4233,10 @@ } } - + // 当天审核的,未入筐的器械包 + //List toussesOutsideBasketOfToday = getTodayReviewedTousseInstanceWithOutBasket(orgUnitCoding); + //当天审核的,未入筐的器械包(新) :包括固定条码汇总 + List toussesOutsideBasketOfToday = getTodayReviewedTousseInsWithOutBasketBySterilization(orgUnitCoding); for (TousseInstanceVo tousseOutsideBasket : toussesOutsideBasketOfToday) { boolean isTimeout = timeoutManager.isTimeouted(tousseOutsideBasket.getReviewTime(), timeoutSetting); //器械包的灭菌程序,属于此灭菌分组或者此灭菌炉(或者器械包的灭菌程序为“无”)才会显示(没选灭菌炉就按灭菌分组过滤) @@ -4117,11 +4292,6 @@ return null; } - - - - - /** * 根据固定条码获取包实例的参数 * @param fixedBarcode 固定条码 @@ -4476,7 +4646,7 @@ } @Override - public JSONArray loadAllTousseInstance(String thisDepartName, String taskGroup) { + public JSONArray loadAllTousseInstance(String thisDepartCode, String taskGroup) { try { String departCode = AcegiHelper.getLoginUser().getCurrentOrgUnitCode(); @@ -4494,7 +4664,7 @@ statistics.put("敷料包", 0); statistics.put("总数", 0); - List vos = getTousseInstanceVOsInReviewedBasket(reviewedBasket, taskGroup, thisDepartName); + List vos = getTousseInstanceVOsInReviewedBasket(reviewedBasket, taskGroup, thisDepartCode); JSONArray tiJsonArray = new JSONArray(); //用来汇总数据 @@ -4680,19 +4850,26 @@ + dateQueryAdapter.dateAdapter(todayStr + " 00:00:00") + " and ti.reviewTime <= " + dateQueryAdapter.dateAdapter(todayStr + " 23:59:59"); - + String firstBarcodeSql = null; + if(dbConnection.isSqlServer()){ + firstBarcodeSql = "(select top 1 barcode from TousseInstance ti1 join barcodeDevice b1 on b1.id=ti1.id where ti1.tousseFixedBarcode=1 and ti1.tousseDefinition_id=tdancestor.id) "; + } else if(dbConnection.isOracle()){ + firstBarcodeSql = "(select barcode from TousseInstance ti1 join barcodeDevice b1 on b1.id=ti1.id where ti1.tousseFixedBarcode=1 and ti1.tousseDefinition_id=tdancestor.id and rownum <= 1) "; + } String sql = "select * from ((select tdancestor.id,depart,ti.tousseName,ti.comboTousseInstanceId,ti.sterilingType," - + "IsUrgentTousse,b.barcode,ti.reviewTime,1 amount from TousseInstance ti join barcodeDevice b on b.id=ti.id " - + "join toussedefinition td on ti.tousseDefinition_id=td.id join toussedefinition tdancestor on " - + "td.ancestorID=tdancestor.id where tdancestor.isTraceable='是' and ti.status='已审核' " + + "IsUrgentTousse,b.barcode,ti.reviewTime,1 amount from "+ TousseInstance.class.getSimpleName() +" ti join "+ BarcodeDevice.class.getSimpleName() +" b on b.id=ti.id " + + "join "+ TousseDefinition.class.getSimpleName() +" td on ti.tousseDefinition_id=td.id join "+ TousseDefinition.class.getSimpleName() +" tdancestor on " + + "td.ancestorID=tdancestor.id where tdancestor.isTraceable='"+ Constants.STR_YES +"' and ti.status='"+ TousseInstance.STATUS_REVIEWED +"' " + "and ti.reviewBasket_id is null "+dateSql+" " - + " and ti.orgunitcoding='"+orgUnitCode+"') union " + + " and ti.orgunitcoding='"+orgUnitCode+"') " + + + " union " + + "(select tdancestor.id ,null depart,tdancestor.name tousseName,null,null,null," - + "(select min(barcode) from TousseInstance ti1 join barcodeDevice " - + "b1 on b1.id=ti1.id where ti1.tousseFixedBarcode=1 and ti1.tousseDefinition_id=tdancestor.id) " - + "barcode,null reviewTime,count(0) amount from TousseInstance ti join barcodeDevice b on b.id=ti.id " - + "join toussedefinition td on ti.tousseDefinition_id=td.id join toussedefinition tdancestor " - + "on td.ancestorID=tdancestor.id where 1=1 and tdancestor.isTraceable='否' and ti.status='已审核' " + + firstBarcodeSql + + "barcode,null reviewTime,count(0) amount from "+ TousseInstance.class.getSimpleName() +" ti join "+ BarcodeDevice.class.getSimpleName() +" b on b.id=ti.id " + + "join "+ TousseDefinition.class.getSimpleName() +" td on ti.tousseDefinition_id=td.id join "+ TousseDefinition.class.getSimpleName() +" tdancestor " + + "on td.ancestorID=tdancestor.id where 1=1 and tdancestor.isTraceable='"+ Constants.STR_NO +"' and ti.status='"+ TousseInstance.STATUS_REVIEWED +"' " + "and ti.reviewBasket_id is null and ti.orgunitcoding='"+orgUnitCode+"'group by tdancestor.id,tdancestor.name" + "))t"; return sql; Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/TousseInstanceAction.java =================================================================== diff -u -r22301 -r22327 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/TousseInstanceAction.java (.../TousseInstanceAction.java) (revision 22301) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/TousseInstanceAction.java (.../TousseInstanceAction.java) (revision 22327) @@ -441,17 +441,19 @@ } /** - * 加载已审核的器械包,作为篮筐视图的数据源 + * 灭菌装载界面加载已入筐的器械包,作为页面右下角篮筐视图的数据源 * * @return */ public String loadAllTousseInstance() { try { - String thisDepartName = StrutsParamUtils.getPraramValue("thisDepartName", ""); + //科室编码 + String thisDepartCode = StrutsParamUtils.getPraramValue("thisDepartCode", ""); String taskGroup = StrutsParamUtils.getPraramValue("taskGroup", ""); - String departCode = AcegiHelper.getLoginUser() - .getCurrentOrgUnitCode(); - StrutsResponseUtils.output(tousseInstanceManager.loadAllTousseInstance(thisDepartName,taskGroup)); + long start = System.currentTimeMillis(); + JSONArray jsonArray = tousseInstanceManager.loadAllTousseInstance(thisDepartCode,taskGroup); + logger.debug("加载入筐物品查询耗时:" + (System.currentTimeMillis() - start)); + StrutsResponseUtils.output(jsonArray); }catch(Exception e){ e.printStackTrace(); }