Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/TousseInstanceAction.java =================================================================== diff -u -r21796 -r21831 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/TousseInstanceAction.java (.../TousseInstanceAction.java) (revision 21796) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/TousseInstanceAction.java (.../TousseInstanceAction.java) (revision 21831) @@ -513,6 +513,15 @@ } return null; } + + /** + * 是否为固定条码 + */ + public void equalsBarcode(){ + String barcode = StrutsParamUtils.getPraramValue("barcode", ""); + JSONObject json = JSONUtil.buildJsonObject(tousseInstanceManager.equalsBarcode(barcode)); + StrutsResponseUtils.output(json); + } /** * 用Map统计篮筐内各类型器械包的数量 @@ -877,6 +886,13 @@ * 获取本供应室今天审核的未入筐器械包. */ public void getTodayPendingSterilizationTousseAndBasket() { + String status = StrutsParamUtils.getPraramValue("status", ""); + String sterilizerNameTemp = StrutsParamUtils.getPraramValue("sterilizerNameTemp", ""); + String ownGroupTemp = StrutsParamUtils.getPraramValue("ownGroupTemp", ""); + String taskGroup = StrutsParamUtils.getPraramValue("taskGroup", ""); + StrutsResponseUtils.output(tousseInstanceManager.getTodayPendingSterilizationTousseAndBasket(status,sterilizerNameTemp,ownGroupTemp,taskGroup)); + + /* try { String status = StrutsParamUtils.getPraramValue("status", ""); @@ -904,6 +920,8 @@ } TimeoutSetting timeoutSetting = timeoutManager.getTimeoutSetting(TimeoutManager.PROCEDURE_REVIEW_TO_STERILE); + int hour=timeoutSetting.getHour(); + int minute=timeoutSetting.getMinute(); // 状态如果是已灭菌或者灭菌失败,就不用加载 if (StringUtils.equals(status, SterilizationRecord.STERILIZATION_STATUS_END) @@ -920,14 +938,18 @@ // 所有待灭菌的审核篮筐 List reviewedBaskets = reviewedBasketManager .getDepartAllReviewedBasket(orgUnitCoding); + System.out.println("==待灭菌的审核篮筐="+reviewedBaskets); // 当天审核的,未入筐的器械包 List toussesOutsideBasketOfToday = tousseInstanceManager .getTodayReviewedTousseInstanceWithOutBasket(orgUnitCoding); + System.out.println("==未入筐的器械包="+toussesOutsideBasketOfToday); + - + long start=System.currentTimeMillis(); // 遍历加载放入灭菌篮筐的器械包 for (ReviewedBasket basket : reviewedBaskets) { + System.out.println("开始循环"); Container container = basket.getContainer(); List vos = tousseInstanceManager .getTousseInstanceVOsInReviewedBasket(basket, taskGroup, null); @@ -953,33 +975,57 @@ //灭菌筐里面器械包的全部的灭菌程序,至少要有一个是属于此灭菌分组或者此灭菌炉(或者至少有一个器械包的灭菌程序为“无”)才会显示(没选灭菌炉就按灭菌分组过滤) boolean flag = false; - Map bMap=Maps.newTreeMap(); - + Map bMap=Maps.newHashMap(); + long start11=System.currentTimeMillis(); + System.out.println("2ceng each start,size="+vos.size()); + + long extime=0; + long extime1=0; + long extime55=0; + long extime444=0; + int successcut=0; + int successcutnihsangsi=0; for (TousseSimpleVO vo : vos) { if (sterilingTypeMap == null || Constants.HAS_TYPE_NO.equals(vo.getSterilingType()) || sterilingTypeMap.get(vo.getSterilingType()) != null) { flag = true; } - String key = vo.getItemDefinition().getName(); - if(bMap.containsKey(key) && tousseInstanceManager.isCountBarcode(vo.getBarcode())){//只有支持扫固定条码的包,才去统计 + long start44=System.currentTimeMillis(); + String key =vo.getDefinitionName(); + boolean isCountBarcode="是".equals(vo.getIsTraceable())?true:false; + String objName=vo.getDefinitionName(); + long end44=System.currentTimeMillis(); + extime1=extime1+(end44-start44); + 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", tousseInstanceManager.getTousseInsFixedBarcode(vo.getItemDefinition().getName())); + long start33=System.currentTimeMillis(); + obj.put("objBarcode", tousseInstanceManager.getTousseInsFixedBarcode(objName)); + + long end33=System.currentTimeMillis(); + extime=extime+(end33-start33); //覆盖 bMap.put(key, obj); }else{ JSONObject tousseInBasket = new JSONObject(); String isUrgentTousse = vo.getIsUrgentTousse(); - boolean isTimeout = timeoutManager.isTimeouted(vo.getReviewTime(),timeoutSetting); + + boolean isTimeout =false; + long start444=System.currentTimeMillis(); + // 判断是否超时的java代码 处理缓慢 + isTimeout =timeoutManager.isTimeouted(vo.getReviewTime(),timeoutSetting); + //isTimeout=timeoutManager.isTimeouted(vo.getReviewTime(), hour, minute); //自测速度跟上一段代码一样 + long end444=System.currentTimeMillis(); + + extime444=extime444+(end444-start444); tousseInBasket.put("depart", vo.getDepart()); - tousseInBasket.put("objName", vo.getItemDefinition().getName()); + 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("uiProvider", "col"); tousseInBasket.put("leaf", true); tousseInBasket.put("iconCls", "task"); tousseInBasket.put("cls", isTimeout ? "itemTimeout" : ""); @@ -988,18 +1034,22 @@ isNotTimeout = false; } if(isUrgentTousse != null && isUrgentTousse.equals(TousseDefinition.STR_YES )){ - isBasketUrgent = true; // 只要有一个包加急,篮筐就显示加急 + isBasketUrgent = true; // 只要有一个包加急,篮筐就显示加急 tousseInBasket.put("isUrgent", TousseDefinition.STR_YES); }else{ tousseInBasket.put("isUrgent", TousseDefinition.STR_NO); } - if(tousseInstanceManager.isCountBarcode(vo.getBarcode())){ + if(isCountBarcode){ bMap.put(key, tousseInBasket); }else{ bMap.put(vo.getBarcode(), tousseInBasket); } - } + + } } + System.out.println("2ceng each end,"+(System.currentTimeMillis()-start11)+ + ",===tousseInstanceManager.getTousseInsFixedBarcode(vo.getItemDefinition().getName())总用时,"+extime + +"==-=-=-"+extime1+"---=--=判断超时代码:"+extime444); for (String key : bMap.keySet()) { JSONObject tousseInBasket=bMap.get(key); tousseInBasketArray.add(tousseInBasket); @@ -1020,7 +1070,12 @@ } } } - // 去重,key为名称, value为具体的数据。 如果名称重复,则取出该分组数据,累加。否则新增.。 + long end=System.currentTimeMillis(); + System.out.println("第一部分耗时:"+(end-start)); + System.out.println("遍历加载放入灭菌篮筐的器械包结束循环"); + + long start2=System.currentTimeMillis(); + // 去重,key为名称, value为具体的数据。 如果名称重复,则取出该分组数据,累加。否则新增.。 什么结果? Map resultMap=Maps.newTreeMap(); String sortRule="aaaaa";//根据treeMap 特性,将已超时的排在前面 for (TousseInstance tousseOutsideBasket : toussesOutsideBasketOfToday) { @@ -1038,7 +1093,7 @@ //System.out.println(tousseOutsideBasket.getShowTousseName()+"已超时"); } if(resultMap.containsKey(key) && tousseInstanceManager.isCountBarcode(tousseOutsideBasket.getBarcode())){//只有支持扫固定条码的包,才去统计 - //已存在 则取出该对象,对象中 objAmount 累加。 + //已存在 则取出该对象,对象中 objAmount 累加。 启动name就 JSONObject obj = resultMap.get(key); int amt=(int) obj.get("objAmount"); amt++; @@ -1072,9 +1127,11 @@ } } } - + long end2=System.currentTimeMillis(); + System.out.println("第二段耗时:"+(end2-start2)); + System.out.println("第二段循环完成"); // 加载未入筐的器械包 - /*for (TousseInstance tousseOutsideBasket : toussesOutsideBasketOfToday) { + for (TousseInstance tousseOutsideBasket : toussesOutsideBasketOfToday) { boolean isTimeout = timeoutManager.isTimeouted(tousseOutsideBasket.getReviewTime(), timeoutSetting); //器械包的灭菌程序,属于此灭菌分组或者此灭菌炉(或者器械包的灭菌程序为“无”)才会显示(没选灭菌炉就按灭菌分组过滤) if (sterilingTypeMap != null && !Constants.HAS_TYPE_NO.equals(tousseOutsideBasket.getSterilingType())) { @@ -1106,7 +1163,9 @@ }else{ notTimeoutArray.add(obj); } - }*/ + } + + long start3=System.currentTimeMillis(); List resultList=Lists.newArrayList(); for (String key : resultMap.keySet()) { JSONObject obj = resultMap.get(key); @@ -1124,12 +1183,15 @@ it.remove(); } } - } + } + long end3=System.currentTimeMillis(); + System.out.println("第三段耗时:"+(end3-start3)); + System.out.println("第3段循环完成"); StrutsResponseUtils.output(jsonArray); } catch (Exception e) { e.printStackTrace(); } - } + */} /*** * @author liujie Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java =================================================================== diff -u -r21796 -r21831 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 21796) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 21831) @@ -7,6 +7,7 @@ import java.util.Map; import java.util.Set; +import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.apache.commons.collections4.Predicate; @@ -23,6 +24,7 @@ import com.forgon.disinfectsystem.entity.washanddisinfectmanager.washanddisinfectrecord.WashAndDisinfectRecord; import com.forgon.disinfectsystem.vo.TousseSimpleVO; import com.forgon.tools.hibernate.BasePoManager; +import com.google.gson.JsonObject; /** * @author songwei 2012-3-27 下午13:59:34 @@ -70,6 +72,9 @@ * @return */ public TousseInstance getTousseInstanceByBarcode(String barcode); + + + JSONArray getTodayPendingSterilizationTousseAndBasket(String status,String sterilizerNameTemp,String ownGroupTemp,String taskGroup); /** * 根据使用记录ID,查找所有在使用记录里的器械包. @@ -140,6 +145,15 @@ public List getTodayReviewedTousseInstanceByNameAndOrgUnitCode( String orgUnitCode,String name); + /** + * 根据固定条码获取所有已审核的包数量 + * @param barcode + * @return + */ + public int getTousseInstanceStockAmount(String barcode); + + + public List addTousseInstanceToBasket(String basketBarcode, Collection tousseInstanceBarcodes, Collection excludeBarcodes); @@ -715,6 +729,11 @@ public boolean isCountBarcode(String barcode); /** + * 根据条码判断是否需要统计汇总包信息 + * @return + */ + public boolean isCountBarcodeFor(String barcode); + /** * 根据包名,获取固定条码。如果没有则返回空字符串 * @return */ Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java =================================================================== diff -u -r20940 -r21831 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 20940) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 21831) @@ -29,9 +29,11 @@ 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.directory.model.OrgUnit; import com.forgon.directory.service.OrgUnitManager; import com.forgon.directory.vo.LoginUserData; +import com.forgon.disinfectsystem.barcode.service.BarcodeManager; import com.forgon.disinfectsystem.basedatamanager.container.service.ReviewedBasketManager; import com.forgon.disinfectsystem.basedatamanager.goodsstock.service.GoodsStockManager; import com.forgon.disinfectsystem.basedatamanager.sterilisation.service.SterilisationManager; @@ -71,6 +73,9 @@ import com.forgon.serialnumber.service.SerialNumManager; import com.forgon.tools.MathTools; import com.forgon.tools.Path; +import com.forgon.tools.StrutsParamUtils; +import com.forgon.tools.StrutsResponseUtils; +import com.forgon.tools.date.DateTools; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.BasePoManagerImpl; import com.forgon.tools.json.JSONUtil; @@ -86,6 +91,7 @@ private SerialNumManager serialNumManager; + private BarcodeManager barcodeManager; private SterilizerManager sterilizerManager; private TousseInstanceManager tousseInstanceManager; @@ -112,7 +118,17 @@ protected RunWithTransNewManager runWithTransNewManager; - public void setRunWithTransNewManager( + + + public BarcodeManager getBarcodeManager() { + return barcodeManager; + } + + public void setBarcodeManager(BarcodeManager barcodeManager) { + this.barcodeManager = barcodeManager; + } + + public void setRunWithTransNewManager( RunWithTransNewManager runWithTransNewManager) { this.runWithTransNewManager = runWithTransNewManager; } @@ -2718,4 +2734,308 @@ } } + public JSONObject loadTousseInstanceInfo(String barcodeStr,String finalBarcodes){ + String[] barcodeArray = barcodeStr.split(";"); + String barcode = barcodeArray[0]; + BarcodeDevice barcodeDevice = barcodeManager.getBarcodeByBarcode(barcode); + JSONObject jsonObj = new JSONObject(); + + //单个条码 + if(barcodeArray.length == 1){ + if (barcodeDevice != null + && barcodeDevice instanceof TousseInstance) { + TousseInstance tousseInstance = (TousseInstance) barcodeDevice; + + String status = tousseInstance.getStatus(); + TousseDefinition tousseDefinition = tousseInstance.getTousseDefinition(); + String tousseType = tousseDefinition.getTousseType(); + + // 扫描的物品是消毒物品并且是否灭菌不为是时,提示不需要灭菌(应对省医高水平消毒的需求进行调整 since 2016-01-22 SYF) + if (TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(tousseType) + && !TousseDefinition.STR_YES.equals(tousseDefinition.getIsSterile())){ + jsonObj.put("success", -1); + jsonObj.put("failureCause", "您扫描的是消毒物品条码,该物品不需要灭菌!"); + } else { // 其它物品(器械包、敷料包、外来器械、自定义器械包等) + //判断扫描的器械包是否可以灭菌(即:器械包状态为“已审核”,或者扫描的是固定条码) + boolean isReviewed = StringUtils.equals(status,TousseInstance.STATUS_REVIEWED) + || tousseInstance.getTousseFixedBarcode(); + //验证是否是代理灭菌(代理灭菌器械包状态已装配就可以灭菌) + if (!isReviewed) { + if (!StringUtils.equals(tousseInstance.getOrgUnitCoding(), AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig())) { + if (status.equals(TousseInstance.STATUS_PACKED)) { + isReviewed = true; + } + } + } + + if (isReviewed) { + boolean isOutBasket = tousseInstanceManager.isTousseInstanceOutOfBasket(tousseInstance.getId()); + //没入灭菌篮筐 + if (isOutBasket) { + //不追溯的器械包(含普通器械包、敷料包、外部代理灭菌包) + if (!StringUtils.equals(Constants.STR_YES, tousseInstance.getTousseDefinition().getIsTraceable())) { + //if (tousseInstance.getUnTraceableTousse()) { + //先判断用户输入的条码是不是固定条码 + if(!tousseInstanceManager.equalsBarcode(barcodeStr)){//如果不是固定条码 + jsonObj.put("success", -1); + jsonObj.put("failureCause", "不追溯的包只支持扫描固定条码"); + StrutsResponseUtils.output(jsonObj); + } + String name = tousseDefinition.getName(); + String orgUnitCode = AcegiHelper.getLoginUser().getCurrentOrgUnitCode(); + Integer scanAmount = tousseDefinition.getScanAmount(); + + //得到获取今天审核未入灭菌篮筐的器械包集合toussesOfToday,再转到todayToussesMap + List toussesOfToday = tousseInstanceManager.getTodayReviewedTousseInstanceByNameAndOrgUnitCode(orgUnitCode, name); + Map todayToussesMap = new HashMap(); + for (TousseInstance tousse : toussesOfToday) { + todayToussesMap.put(tousse.getBarcode(), tousse); + } + + //从toussesOfToday中删除已经扫描了的器械包集合 + List alreadyLoadedTousses = new ArrayList(); + if (StringUtils.isNotBlank(finalBarcodes)) { + String[] savedBarcodeArray = finalBarcodes.split(";"); + for (int i = 0; i < savedBarcodeArray.length; i++) { + String savedBarcodeStr = savedBarcodeArray[i]; + TousseInstance tousseInstance2 = todayToussesMap.get(savedBarcodeStr); + alreadyLoadedTousses.add(tousseInstance2); + } + } + if (CollectionUtils.isNotEmpty(alreadyLoadedTousses)) { + for (TousseInstance temp : alreadyLoadedTousses) { + toussesOfToday.remove(temp); + } + } + + if (CollectionUtils.isNotEmpty(toussesOfToday)) { + //设置的数量大于0时才做限制 + int toussesAmount = toussesOfToday.size(); + if(scanAmount != null && scanAmount.intValue() > 0){ + if (toussesAmount > scanAmount) { + toussesAmount = scanAmount; + } + } + + JSONArray tousseInstanceArr = new JSONArray(); + for (int i = 0; i < toussesAmount; i++) { + TousseInstance tousseInstance1 = toussesOfToday.get(i); + JSONObject temp = new JSONObject(); + if(i==0){//页面上只显示第一条数据 + temp.put("tousseBarcode", tousseInstance.getBarcode()); + temp.put("tousseName", tousseInstance1.getTousseName()); + temp.put("typeForSterilizationStatistics", getTypeForSterilizationStatistics(tousseInstance1)); + temp.put("SterilingType", tousseInstance1.getSterilingType()); + temp.put("department", StringUtils.defaultString(tousseInstance1.getDepart(), "")); + temp.put("reviewTime", ForgonDateUtils.safelyFormatDate(tousseInstance1.getReviewTime(), Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM, "")); + temp.put("amount",toussesAmount );//每次扫描加载的数量 + temp.put("stockAmount",tousseInstanceManager.getTousseInstanceStockAmount(tousseInstance.getBarcode()));//库存数量 + temp.put("todayAmount",toussesOfToday.size());//库存数量 + tousseInstanceArr.add(temp); + } + temp.put("tousseBarcode", tousseInstance1.getBarcode()); + temp.put("tousseName", tousseInstance1.getTousseName()); + temp.put("typeForSterilizationStatistics", getTypeForSterilizationStatistics(tousseInstance1)); + temp.put("SterilingType", tousseInstance1.getSterilingType()); + temp.put("department", StringUtils.defaultString(tousseInstance1.getDepart(), "")); + temp.put("reviewTime", ForgonDateUtils.safelyFormatDate(tousseInstance1.getReviewTime(), Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM, "")); + tousseInstanceArr.add(temp); + } + jsonObj.put("success", 2); + jsonObj.put("tousseInstanceArr", tousseInstanceArr); + } else { + jsonObj.put("success", -1); + jsonObj.put("failureCause", "加载完毕或者没有需要灭菌的包!"); + } + } else { // 需要追溯的器械包 + String includeImplant = Constants.STR_NO; + //含有植入物的外来器械包,需要提示做生物监测 + if ((TousseDefinition.PACKAGE_TYPE_FOREIGN.equals(tousseType) + || TousseDefinition.PACKAGE_TYPE_SPLIT.equals(tousseType)) + && (tousseDefinition.getIncludeImplant() != null + && TousseDefinition.INCLUDE_IMPLANT == tousseDefinition.getIncludeImplant().intValue())) { + includeImplant = "是"; + } + jsonObj.put("success", 0); + jsonObj.put("tousseBarcode", tousseInstance.getBarcode()); + jsonObj.put("tousseName", tousseInstance.getTousseName()); + jsonObj.put("typeForSterilizationStatistics", getTypeForSterilizationStatistics(tousseInstance)); + jsonObj.put("SterilingType", tousseInstance.getSterilingType()); + jsonObj.put("department", StringUtils.defaultString(tousseInstance.getDepart(), "")); + jsonObj.put("includeImplant", includeImplant); + jsonObj.put("reviewTime", ForgonDateUtils.safelyFormatDate(tousseInstance.getReviewTime(), Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM, "")); + } + } else { + jsonObj.put("success", -1); + jsonObj.put("failureCause", "无法添加,因为器械包已放入篮筐,请通过扫描篮筐进行添加!"); + } + + //检查代理灭菌是否已录入代理灭菌单 + String checkProxyDisinfection = StrutsParamUtils.getPraramValue("checkProxyDisinfection", ""); + if (StringUtils.isNotBlank(checkProxyDisinfection)) { + String userOrgUnitCode = AcegiHelper.getLoginUser().getCurrentOrgUnitCode(); + if (tousseInstance.getOrgUnitCoding() != null + && !tousseInstance.getOrgUnitCoding().equals(userOrgUnitCode) + && tousseInstance.getProxyDisinfection_id() == null) { + jsonObj.put("success", -1); + jsonObj.put("failureCause", "无法添加,因为器械包未录入代理灭菌单!"); + } + } + } else { + jsonObj.put("success", -1); + jsonObj.put("failureCause", "无法添加,此器械包没有经过审核!"); + } + } + } else if (barcodeDevice != null + && barcodeDevice instanceof Container) { + // TODO 当篮筐正在灭菌中,还是能够读取到的bug + Container container = (Container) barcodeDevice; + if (container.getContainerType().equals(Container.CONTAINERTYPE_BASKET)) { + JSONArray tousseInstanceArr = new JSONArray(); + //是否要加载篮筐里的器械包名称 + String loadTousseNamesInBasket = StrutsParamUtils.getPraramValue("loadTousseNamesInBasket", ""); + if (StringUtils.isNotBlank(loadTousseNamesInBasket)) { + Set toussesInBasket = null; + if(Container.CONTAINER_PURPOSE_DISINFECTION.equals(container.getPurpose())){ //如果为灭菌筐,按原有方式查询 + toussesInBasket = tousseInstanceManager.getReviewedTousseInstanceByBasket(barcode); + }else if(Container.CONTAINER_PURPOSE_VIRTUAL.equals(container.getPurpose())){ //如果为虚拟篮筐,则按范围区间方式查询,begin和end都为条码的参数 + Map map = barcodeManager.getTousseInstanceListByRange(barcode, barcode, TousseInstance.STATUS_REVIEWED); + if(map != null && map.get("result") != null){ + toussesInBasket = new HashSet(); + toussesInBasket.addAll((List)map.get("result")); + } + } + if (toussesInBasket != null && toussesInBasket.size() > 0) { + List tousseList = new ArrayList(); + tousseList.addAll(toussesInBasket); + Collections.sort(tousseList);//按id降序排序 + + for (TousseInstance tousseInstance : tousseList) { + if (tousseInstance != null + && StringUtils.isNotBlank(tousseInstance.getTousseName())) { + JSONObject temp = new JSONObject(); + temp.put("tousseBarcode", tousseInstance.getBarcode()); + temp.put("tousseName", tousseInstance.getTousseName()); + temp.put("typeForSterilizationStatistics", getTypeForSterilizationStatistics(tousseInstance)); + temp.put("SterilingType", tousseInstance.getSterilingType()); + temp.put("department", StringUtils.defaultString(tousseInstance.getDepart(), "")); + temp.put("reviewTime", ForgonDateUtils.safelyFormatDate(tousseInstance.getReviewTime(), Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM, "")); + tousseInstanceArr.add(temp); + } + } + } + } + jsonObj.put("success", 1); + jsonObj.put("containerName", container.getContainerName()); + jsonObj.put("tousseInstanceArr", tousseInstanceArr); + } + } + } else if(barcodeArray.length > 1) { //按首尾两个条码进行过滤 + Map map = barcodeManager.getTousseInstanceListByRange(barcode, barcodeArray[1], TousseInstance.STATUS_REVIEWED); + if(map != null && "tousseInstanceSuccess".equals(map.get("returnType"))){ + List tousseInstanceList = (List)map.get("result"); + if(CollectionUtils.isNotEmpty(tousseInstanceList)){ + Collections.sort(tousseInstanceList);//增加按id降序排序 + TousseInstance tousseInstance = null; + if(barcodeDevice instanceof TousseInstance){ + JSONArray tousseInstanceArr = new JSONArray(); + //判断是否有已装入至灭菌篮筐或虚拟篮筐的器械包实例,如果有,则返回失败并进行提示 + for(int i = 0; i < tousseInstanceList.size(); i++){ + tousseInstance = (TousseInstance)tousseInstanceList.get(i); + if (tousseInstance != null + && !DatabaseUtil.isPoIdValid(tousseInstance.getReviewBasket_id()) + && StringUtils.isNotBlank(tousseInstance.getTousseName())) { + JSONObject temp = new JSONObject(); + temp.put("tousseBarcode", tousseInstance.getBarcode()); + temp.put("tousseName", tousseInstance.getTousseName()); + temp.put("typeForSterilizationStatistics", getTypeForSterilizationStatistics(tousseInstance)); + temp.put("SterilingType", tousseInstance.getSterilingType()); + temp.put("department", StringUtils.defaultString(tousseInstance.getDepart(), "")); + temp.put("reviewTime", ForgonDateUtils.safelyFormatDate(tousseInstance.getReviewTime(), Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM, "")); + tousseInstanceArr.add(temp); + } + } + jsonObj.put("success", 3); + jsonObj.put("tousseInstanceArr", tousseInstanceArr); + }else if(barcodeDevice instanceof Container){ + JSONArray tousseInstanceArr = new JSONArray(); + for(int i = 0;i < tousseInstanceList.size();i++){ + tousseInstance = (TousseInstance)tousseInstanceList.get(i); + if (tousseInstance != null + && StringUtils.isNotBlank(tousseInstance.getTousseName())) { + JSONObject temp = new JSONObject(); + temp.put("virtualBasketSeqNum", tousseInstance.getVirtualBasketSeqNum()); + temp.put("tousseBarcode", tousseInstance.getBarcode()); + temp.put("tousseName", tousseInstance.getTousseName()); + temp.put("typeForSterilizationStatistics", getTypeForSterilizationStatistics(tousseInstance)); + temp.put("SterilingType", tousseInstance.getSterilingType()); + temp.put("department", StringUtils.defaultString(tousseInstance.getDepart(), "")); + temp.put("reviewTime", ForgonDateUtils.safelyFormatDate(tousseInstance.getReviewTime(), Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM, "")); + tousseInstanceArr.add(temp); + } + } + jsonObj.put("success", 4); + jsonObj.put("tousseInstanceArr", tousseInstanceArr); + } + }else{ + jsonObj.put("success", -1); + jsonObj.put("failureCause", "未找到符合条件的器械包!"); + } + }else{ + jsonObj.put("success", -1); + jsonObj.put("failureCause", "未找到符合条件的器械包!"); + } + } + return jsonObj; + } + + + /** + * 判别器械包的类型(此方法只适用于灭菌那里对器械包类型的分类统计) + * @param tousseInstance 器械包实例 + * @return + */ + public String getTypeForSterilizationStatistics(TousseInstance tousseInstance) { + String typeForSterilizationStatistics = TousseDefinition.PACKAGE_TYPE_INSIDE; + TousseDefinition td = tousseInstance.getTousseDefinition(); + if (td != null) { + //敷料包 + if (td.isDressing()) { + if (tousseInstance.getProxyDisinfection_id() != null) { + typeForSterilizationStatistics = TousseDefinition.PACKAGE_TYPE_PROXY; + } else { + typeForSterilizationStatistics = TousseDefinition.PACKAGE_TYPE_DRESSING; + } + // 器械包(包括但不限于"器械包"、"自定义器械包") + } else if (td.isInsideTousse() || td.isCustomTousse()) { + if (tousseInstance.getProxyDisinfection_id() != null) { + typeForSterilizationStatistics = TousseDefinition.PACKAGE_TYPE_PROXY; + } else if (TousseDefinition.STR_YES.equals(td.getIsForeignTousse())) { + typeForSterilizationStatistics = TousseDefinition.PACKAGE_TYPE_FOREIGN; + } else { + typeForSterilizationStatistics = TousseDefinition.PACKAGE_TYPE_INSIDE; + } + // 外来器械包(包括但不限于"外来器械包"、"外来器械拆分小包"、"外来器械包当普通器械包") + } else if (td.isSplit() || td.isForeignTousse()) { + typeForSterilizationStatistics = TousseDefinition.PACKAGE_TYPE_FOREIGN; + } else if (td.isForeignProxyTousse()) { + typeForSterilizationStatistics = TousseDefinition.PACKAGE_TYPE_PROXY; + } + } else { + throw new RuntimeException("找不到包定义!"); + } + return typeForSterilizationStatistics; + } + + /** + * 根据包ID,获取今日审核的数量 + * @param id + * @return + */ + public int getTousseInsTodayAmountById(Long id,String orgUnitCode){ + String todayStr = DateTools.getCurrentDayByFormat("yyyy-MM-dd"); + String slq = "select count(0) from TousseInstance where id = "+id+" and " + + "reviewTime >= convert(datetime,'"+todayStr+" 00:00:00',120) and reviewTime <= convert(datetime,'"+todayStr+" 23:59:59',120)"; + return 0; + } } Index: ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordForm.js =================================================================== diff -u -r21799 -r21831 --- ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordForm.js (.../sterilizationRecordForm.js) (revision 21799) +++ ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordForm.js (.../sterilizationRecordForm.js) (revision 21831) @@ -94,16 +94,7 @@ }) }); -function arrRemoval(arr) { - var result=[] - for(var i=0; i= todayAmount){ + finalAmount = todayAmount + }else if (surplusAmount<=amount){ + finalAmount = surplusAmount + } + removeAndUpdateAmountToFixedBarcodes(tousseBarcode,finalAmount)//针对不追溯的包,动态修改右边对应的数量 } Array.prototype.push.apply(myBarcodes,myBarcodes2);//将所有的包实例条码存入全局条码中 speakContent = sterilizationColumnTree.getRootNode().text; @@ -995,11 +1030,11 @@ /** * 扫描固定条码和修改数量后,修改右边表格对应的数量 * @param barcode 条码 - * @param parentNode 左边的节点 - * @param objAmount 左边的数量 + * @param surplusAmount 剩余可用数量 */ -function removeAndUpdateAmountToFixedBarcodes(barcode,objAmount,isDel){ +function removeAndUpdateAmountToFixedBarcodes(barcode,finalAmount){ var i = 0; + finalAmount = parseInt(finalAmount); pendingSterilizationColumnTree.getRootNode().eachChild(function(pNode){ //移除某一个节点后,再遍历其他节点得到的是undefined if (pNode != null && pNode.attributes && pNode.attributes.objBarcode) { @@ -1009,15 +1044,11 @@ var type = pNode.attributes.type; var depart = pNode.attributes.depart; var reviewTime = pNode.attributes.reviewTime; - var amount = pNode.attributes.objAmount;//右边的数量 + var amount = parseInt(pNode.attributes.objAmount);//右边的数量 var rootNode = sterilizationColumnTree.getRootNode(); - var finalAmount = parseFloat(amount)+parseFloat(objAmount) pNode.remove();//移除对应右边的节点 - if(isDel){ - finalAmount = parseFloat(amount)-parseFloat(objAmount) - } - var myNode = createNodeForPendingStarilizationGoods(true,barcode,name,type,depart,reviewTime,finalAmount) - pendingSterilizationColumnTree.getRootNode().appendChild(myNode); + var myNode = createNodeForPendingStarilizationGoods(true,barcode,name,type,depart,reviewTime,finalAmount) + pendingSterilizationColumnTree.getRootNode().appendChild(myNode); } } }); @@ -1043,9 +1074,9 @@ var reviewTime = pNode.attributes.reviewTime; var amount = pNode.attributes.objAmount;//右边的数量 var rootNode = sterilizationColumnTree.getRootNode(); - //var finalAmount = parseFloat(amount)+parseFloat(objAmount) + //var finalAmount = parseInt(amount)+parseInt(objAmount) pNode.remove();//移除对应右边的节点 - var myNode = createNodeForPendingStarilizationGoods(true,barcode,name,type,depart,reviewTime,parseFloat(objAmount)) + var myNode = createNodeForPendingStarilizationGoods(true,barcode,name,type,depart,reviewTime,parseInt(objAmount)) pendingSterilizationColumnTree.getRootNode().appendChild(myNode); } } @@ -1104,7 +1135,7 @@ * 删除灭菌物品栏,物品回退至待灭菌物品列表 * @param clickNode */ -function addPendingStarilizationGoodsFromRecord(clickNode) { +function addPendingStarilizationGoodsFromRecord(clickNode,isFixedBarcode) { var objBarcode = clickNode.attributes.barcode; var objName = clickNode.attributes.name; var type = clickNode.attributes.type; @@ -1220,7 +1251,91 @@ + /** + * 删除灭菌物品栏,物品回退至待灭菌物品列表 + * @param clickNode + */ +function addPendingStarilizationGoodsFromRecord(clickNode) { + var objBarcode = clickNode.attributes.barcode; + var objName = clickNode.attributes.name; + var type = clickNode.attributes.type; + var depart = clickNode.attributes.depart; + var reviewTime = clickNode.attributes.reviewTime; + + var array = new Array(); + var isBasketUrgent = false; //篮筐是否加急 + var objAmount = 1; + if (type == '篮筐') { + type = 'BASKET'; + objAmount = 0; + clickNode.eachChild(function(pNode){ + objAmount++; + + var childObjBarcode = pNode.attributes.barcode; + var childObjName = pNode.attributes.name; + var childObjAmount = 1; + var childType = 'TOUSSE_IN'; + var isUrgent = '否'; + var childNode = createPendingSterilizationGoodsNode(childObjBarcode, childObjName, childObjAmount, childType , pNode.attributes.depart, pNode.attributes.reviewTime); + DWREngine.setAsync(false); + //如果灭菌程序不能添加器械包,要清除灭菌物品列表 + SterilizationRecordTableManager.isTousseUrgent(childObjBarcode,function(result){ + if(result == true){ + isUrgent = '是'; + isBasketUrgent = true; + } + }); + DWREngine.setAsync(true); + childNode.attributes.isUrgent = isUrgent; + array.push(childNode); + }); + } else { + type = 'TOUSSE'; + } + + var node = createPendingSterilizationGoodsNode(objBarcode, objName, objAmount, type, depart, reviewTime); + if(type == 'TOUSSE'){ + var isUrgent = '否'; + DWREngine.setAsync(false); + //如果灭菌程序不能添加器械包,要清除灭菌物品列表 + SterilizationRecordTableManager.isTousseUrgent(node.attributes.objBarcode,function(result){ + if(result == true){ + isUrgent = '是'; + } + }); + DWREngine.setAsync(true); + node.attributes.isUrgent=isUrgent; + } + if (type == 'BASKET') { + if(isBasketUrgent){ + node.attributes.isUrgent = '是'; + } + node.appendChild(array); + } + + pendingSterilizationColumnTree.getRootNode().appendChild(node); + + //如果一键入炉的按钮不可用,则将其变成可用 + //判断表格中的物品数量是否大于0 + if(pendingSterilizationColumnTree.getRootNode().childNodes.length == 0){ + top.Ext.getCmp("btnBatchAddTousse").disable(); + }else{ + top.Ext.getCmp("btnBatchAddTousse").enable(); + } +} + + + + + + + + + + + +/** * 生成待灭菌物品节点(“将器械包移除篮筐”和“删除灭菌物品”两个操作会调用此函数) * @param objBarcode 条码(篮筐或器械包) * @param objName 名称(篮筐或器械包) @@ -1295,7 +1410,7 @@ } }, failure : function(response, options) { - showResult("后台运行异常,请稍候再试..."); + showResult("系统发生异常,请勿提交数据"); formObj.getEl().unmask(); } }); @@ -1322,7 +1437,7 @@ fixedBarcodeAmount = result.message; if(delAmount==fixedBarcodeAmount){ //setAmountToFixedBarcodes(fixedBarcode,fixedBarcodeAmount) - removeAndUpdateAmountToFixedBarcodes(fixedBarcode,delAmount,false) + removeAndUpdateAmountToFixedBarcodes(fixedBarcode,delAmount) }/*else{ removeAndUpdateAmountToFixedBarcodes(fixedBarcode,delAmount,false) }*/ @@ -1407,7 +1522,9 @@ } sterilizationColumnTreeColumnArray.push({header:'条码',width:112,dataIndex:'barcode'}); sterilizationColumnTreeColumnArray.push({header:'名称',width:170,dataIndex:'name'}); - sterilizationColumnTreeColumnArray.push({header : "数量",dataIndex : 'amount',width : 50, align:'right', menuDisabled: true}); + sterilizationColumnTreeColumnArray.push({header : '库存',dataIndex : 'stockAmount',width : 50, hidden:true}); + sterilizationColumnTreeColumnArray.push({header : '今日审核',dataIndex : 'todayAmount',width : 50, hidden:true}); + sterilizationColumnTreeColumnArray.push({header : '数量',dataIndex : 'amount',width : 50}); if (sstsConfig.haveSterilizerPosition) { sterilizationColumnTreeColumnArray.push({header:'位置',width:80,dataIndex:'position'}); } @@ -1456,12 +1573,13 @@ allowBlank: false, selectOnFocus : true, revertInvalid:true, - ignoreNoChange : true + ignoreNoChange : true, + clicksToEdit:1 }); sterilizationColumnTreeEditer.on("beforestartedit", function(thiz,el,v){ var tempNode = thiz.editNode;//将要编辑的节点&& tempNode.attributes.scanFixedBarcode == '是' - if(thiz.editColIndex == 'amount'){ + if(thiz.editColIndex == 'amount' && parseInt(tempNode.attributes.stockAmount)>0){ return true; }else { return false; @@ -1476,6 +1594,7 @@ var newAmount = parseInt(newValue) var oldAmount = parseInt(oldValue) var reg = new RegExp("^[0-9]*$"); + var stockAmount = parseInt(editNode.attributes.stockAmount) //修改失败后调用 var updateFail=function roleBack(){ //克隆修改前的数据 @@ -1485,9 +1604,11 @@ var position = editNode.attributes.position ; var amount = editNode.attributes.amount ; var reviewTime = editNode.attributes.reviewTime ; + var stockAmount = editNode.attributes.stockAmount ; + var todayAmount = editNode.attributes.todayAmount ; var rootNode = sterilizationColumnTree.getRootNode(); - var parentNode = createNode(true, barcode, name, typeForSterilizationStatistics, department, '器械包', position, oldValue, reviewTime); + var parentNode = createNode(true, barcode, name, typeForSterilizationStatistics, department, '器械包', position, oldValue, reviewTime,stockAmount,todayAmount); var firstChildNode = rootNode.item(0); editNode.remove();//删除修改后的节点数据 rootNode.appendChild(parentNode);//追加修改前的数据 @@ -1497,6 +1618,8 @@ updateFail() return; } + var stockAmount = editNode.attributes.stockAmount ; + var todayAmount = editNode.attributes.todayAmount ; Ext.Ajax.request({ url : WWWROOT + '/disinfectSystem/sterilization/sterilizationRecordAction!checkTousseInsAmountByBarcode.do', params : { @@ -1507,15 +1630,29 @@ waitMsg : '正在处理,请稍候...', success : function(response, options) { var result = Ext.decode(response.responseText); + var finalAmount; if(result.success){ if(newAmount>oldAmount){//如果是增加数量 - var count = newAmount - oldAmount + var count = newAmount - oldAmount//修改后 - 修改前 = 增加的数量 +// var surplusAmount = stockAmount - newAmount //剩余可用数量 +// +// if(surplusAmount >= todayAmount){ +// finalAmount = todayAmount +// }else if (surplusAmount<=todayAmount){ +// finalAmount = surplusAmount +// } addTousseInsAmount(attr.barcode,count) - removeAndUpdateAmountToFixedBarcodes(barcode,count,true) +// removeAndUpdateAmountToFixedBarcodes(barcode,finalAmount) }else{ var count = oldAmount - newAmount //减少的数量 delTousseInsAmount(count,attr.barcode) - removeAndUpdateAmountToFixedBarcodes(barcode,count,false) +// var surplusAmount = stockAmount - newAmount //剩余可用数量 +// if(surplusAmount >= todayAmount){ +// finalAmount = todayAmount +// }else if (surplusAmount<=todayAmount){ +// finalAmount = surplusAmount +// } +// removeAndUpdateAmountToFixedBarcodes(barcode,finalAmount) } }else{//修改数量失败 showResult(result.message); @@ -1649,6 +1786,7 @@ formObj.getEl().mask("正在加载,请稍候..."); //ajax请求后台传递待灭菌的条码(灭菌筐及包实例的条码集合) + Ext.Ajax.timeout=90000; Ext.Ajax.request({ url : WWWROOT + '/disinfectSystem/sterilization/sterilizationRecordAction!batchAddToRecord.do', params : { @@ -2982,6 +3120,8 @@ var barcodePostionInfo = getBarcodePositionData(); top.Ext.getCmp("barcodePositionInfo").setValue(barcodePostionInfo); Ext.getCmp("formSubmitResult").setValue(0); + alert(result) + return formObj.form .submit( { url : WWWROOT + '/disinfectSystem/sterilization/sterilizationRecordAction!savesterilizationRecord.do', Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/action/SterilizationRecordAction.java =================================================================== diff -u -r21796 -r21831 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/action/SterilizationRecordAction.java (.../SterilizationRecordAction.java) (revision 21796) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/action/SterilizationRecordAction.java (.../SterilizationRecordAction.java) (revision 21831) @@ -682,261 +682,13 @@ String finalBarcodes =""; String str = savedBarcodes==""?"":";"; finalBarcodes = savedBarcodes+str+myBarcodes; + System.out.println("=="+finalBarcodes); - JSONObject jsonObj = new JSONObject(); if (StringUtils.isNotBlank(barcodeStr)) { - String[] barcodeArray = barcodeStr.split(";"); - String barcode = barcodeArray[0]; - BarcodeDevice barcodeDevice = barcodeManager.getBarcodeByBarcode(barcode); - - //单个条码 - if(barcodeArray.length == 1){ - if (barcodeDevice != null - && barcodeDevice instanceof TousseInstance) { - TousseInstance tousseInstance = (TousseInstance) barcodeDevice; - - String status = tousseInstance.getStatus(); - TousseDefinition tousseDefinition = tousseInstance.getTousseDefinition(); - String tousseType = tousseDefinition.getTousseType(); - - // 扫描的物品是消毒物品并且是否灭菌不为是时,提示不需要灭菌(应对省医高水平消毒的需求进行调整 since 2016-01-22 SYF) - if (TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(tousseType) - && !TousseDefinition.STR_YES.equals(tousseDefinition.getIsSterile())){ - jsonObj.put("success", -1); - jsonObj.put("failureCause", "您扫描的是消毒物品条码,该物品不需要灭菌!"); - } else { // 其它物品(器械包、敷料包、外来器械、自定义器械包等) - //判断扫描的器械包是否可以灭菌(即:器械包状态为“已审核”,或者扫描的是固定条码) - boolean isReviewed = StringUtils.equals(status,TousseInstance.STATUS_REVIEWED) - || tousseInstance.getTousseFixedBarcode(); - //验证是否是代理灭菌(代理灭菌器械包状态已装配就可以灭菌) - if (!isReviewed) { - if (!StringUtils.equals(tousseInstance.getOrgUnitCoding(), AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig())) { - if (status.equals(TousseInstance.STATUS_PACKED)) { - isReviewed = true; - } - } - } - - if (isReviewed) { - boolean isOutBasket = tousseInstanceManager.isTousseInstanceOutOfBasket(tousseInstance.getId()); - //没入灭菌篮筐 - if (isOutBasket) { - //不追溯的器械包(含普通器械包、敷料包、外部代理灭菌包) - if (!StringUtils.equals(Constants.STR_YES, tousseInstance.getTousseDefinition().getIsTraceable())) { - //if (tousseInstance.getUnTraceableTousse()) { - //先判断用户输入的条码是不是固定条码 - if(!tousseInstanceManager.equalsBarcode(barcodeStr)){//如果不是固定条码 - jsonObj.put("success", -1); - jsonObj.put("failureCause", "不追溯的包只支持扫描固定条码"); - StrutsResponseUtils.output(jsonObj); - } - String name = tousseDefinition.getName(); - String orgUnitCode = AcegiHelper.getLoginUser().getCurrentOrgUnitCode(); - Integer scanAmount = tousseDefinition.getScanAmount(); - - //得到获取今天审核未入灭菌篮筐的器械包集合toussesOfToday,再转到todayToussesMap - List toussesOfToday = tousseInstanceManager.getTodayReviewedTousseInstanceByNameAndOrgUnitCode(orgUnitCode, name); - Map todayToussesMap = new HashMap(); - for (TousseInstance tousse : toussesOfToday) { - todayToussesMap.put(tousse.getBarcode(), tousse); - } - - //从toussesOfToday中删除已经扫描了的器械包集合 - List alreadyLoadedTousses = new ArrayList(); - if (StringUtils.isNotBlank(finalBarcodes)) { - String[] savedBarcodeArray = finalBarcodes.split(";"); - for (int i = 0; i < savedBarcodeArray.length; i++) { - String savedBarcodeStr = savedBarcodeArray[i]; - TousseInstance tousseInstance2 = todayToussesMap.get(savedBarcodeStr); - alreadyLoadedTousses.add(tousseInstance2); - } - } - if (CollectionUtils.isNotEmpty(alreadyLoadedTousses)) { - for (TousseInstance temp : alreadyLoadedTousses) { - toussesOfToday.remove(temp); - } - } - - if (CollectionUtils.isNotEmpty(toussesOfToday)) { - //设置的数量大于0时才做限制 - int toussesAmount = toussesOfToday.size(); - if(scanAmount != null && scanAmount.intValue() > 0){ - if (toussesAmount > scanAmount) { - toussesAmount = scanAmount; - } - } - - JSONArray tousseInstanceArr = new JSONArray(); - for (int i = 0; i < toussesAmount; i++) { - TousseInstance tousseInstance1 = toussesOfToday.get(i); - JSONObject temp = new JSONObject(); - if(i==0){//页面上只显示第一条数据 - temp.put("tousseBarcode", tousseInstance.getBarcode()); - temp.put("tousseName", tousseInstance1.getTousseName()); - temp.put("typeForSterilizationStatistics", getTypeForSterilizationStatistics(tousseInstance1)); - temp.put("SterilingType", tousseInstance1.getSterilingType()); - temp.put("department", StringUtils.defaultString(tousseInstance1.getDepart(), "")); - temp.put("reviewTime", ForgonDateUtils.safelyFormatDate(tousseInstance1.getReviewTime(), Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM, "")); - temp.put("amount",toussesAmount ); - tousseInstanceArr.add(temp); - } - temp.put("tousseBarcode", tousseInstance1.getBarcode()); - temp.put("tousseName", tousseInstance1.getTousseName()); - temp.put("typeForSterilizationStatistics", getTypeForSterilizationStatistics(tousseInstance1)); - temp.put("SterilingType", tousseInstance1.getSterilingType()); - temp.put("department", StringUtils.defaultString(tousseInstance1.getDepart(), "")); - temp.put("reviewTime", ForgonDateUtils.safelyFormatDate(tousseInstance1.getReviewTime(), Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM, "")); - tousseInstanceArr.add(temp); - } - jsonObj.put("success", 2); - jsonObj.put("tousseInstanceArr", tousseInstanceArr); - } else { - jsonObj.put("success", -1); - jsonObj.put("failureCause", "加载完毕或者没有需要灭菌的包!"); - } - } else { // 需要追溯的器械包 - String includeImplant = Constants.STR_NO; - //含有植入物的外来器械包,需要提示做生物监测 - if ((TousseDefinition.PACKAGE_TYPE_FOREIGN.equals(tousseType) - || TousseDefinition.PACKAGE_TYPE_SPLIT.equals(tousseType)) - && (tousseDefinition.getIncludeImplant() != null - && TousseDefinition.INCLUDE_IMPLANT == tousseDefinition.getIncludeImplant().intValue())) { - includeImplant = "是"; - } - jsonObj.put("success", 0); - jsonObj.put("tousseBarcode", tousseInstance.getBarcode()); - jsonObj.put("tousseName", tousseInstance.getTousseName()); - jsonObj.put("typeForSterilizationStatistics", getTypeForSterilizationStatistics(tousseInstance)); - jsonObj.put("SterilingType", tousseInstance.getSterilingType()); - jsonObj.put("department", StringUtils.defaultString(tousseInstance.getDepart(), "")); - jsonObj.put("includeImplant", includeImplant); - jsonObj.put("reviewTime", ForgonDateUtils.safelyFormatDate(tousseInstance.getReviewTime(), Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM, "")); - } - } else { - jsonObj.put("success", -1); - jsonObj.put("failureCause", "无法添加,因为器械包已放入篮筐,请通过扫描篮筐进行添加!"); - } - - //检查代理灭菌是否已录入代理灭菌单 - String checkProxyDisinfection = StrutsParamUtils.getPraramValue("checkProxyDisinfection", ""); - if (StringUtils.isNotBlank(checkProxyDisinfection)) { - String userOrgUnitCode = AcegiHelper.getLoginUser().getCurrentOrgUnitCode(); - if (tousseInstance.getOrgUnitCoding() != null - && !tousseInstance.getOrgUnitCoding().equals(userOrgUnitCode) - && tousseInstance.getProxyDisinfection_id() == null) { - jsonObj.put("success", -1); - jsonObj.put("failureCause", "无法添加,因为器械包未录入代理灭菌单!"); - } - } - } else { - jsonObj.put("success", -1); - jsonObj.put("failureCause", "无法添加,此器械包没有经过审核!"); - } - } - } else if (barcodeDevice != null - && barcodeDevice instanceof Container) { - // TODO 当篮筐正在灭菌中,还是能够读取到的bug - Container container = (Container) barcodeDevice; - if (container.getContainerType().equals(Container.CONTAINERTYPE_BASKET)) { - JSONArray tousseInstanceArr = new JSONArray(); - //是否要加载篮筐里的器械包名称 - String loadTousseNamesInBasket = StrutsParamUtils.getPraramValue("loadTousseNamesInBasket", ""); - if (StringUtils.isNotBlank(loadTousseNamesInBasket)) { - Set toussesInBasket = null; - if(Container.CONTAINER_PURPOSE_DISINFECTION.equals(container.getPurpose())){ //如果为灭菌筐,按原有方式查询 - toussesInBasket = tousseInstanceManager.getReviewedTousseInstanceByBasket(barcode); - }else if(Container.CONTAINER_PURPOSE_VIRTUAL.equals(container.getPurpose())){ //如果为虚拟篮筐,则按范围区间方式查询,begin和end都为条码的参数 - Map map = barcodeManager.getTousseInstanceListByRange(barcode, barcode, TousseInstance.STATUS_REVIEWED); - if(map != null && map.get("result") != null){ - toussesInBasket = new HashSet(); - toussesInBasket.addAll((List)map.get("result")); - } - } - if (toussesInBasket != null && toussesInBasket.size() > 0) { - List tousseList = new ArrayList(); - tousseList.addAll(toussesInBasket); - Collections.sort(tousseList);//按id降序排序 - - for (TousseInstance tousseInstance : tousseList) { - if (tousseInstance != null - && StringUtils.isNotBlank(tousseInstance.getTousseName())) { - JSONObject temp = new JSONObject(); - temp.put("tousseBarcode", tousseInstance.getBarcode()); - temp.put("tousseName", tousseInstance.getTousseName()); - temp.put("typeForSterilizationStatistics", getTypeForSterilizationStatistics(tousseInstance)); - temp.put("SterilingType", tousseInstance.getSterilingType()); - temp.put("department", StringUtils.defaultString(tousseInstance.getDepart(), "")); - temp.put("reviewTime", ForgonDateUtils.safelyFormatDate(tousseInstance.getReviewTime(), Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM, "")); - tousseInstanceArr.add(temp); - } - } - } - } - jsonObj.put("success", 1); - jsonObj.put("containerName", container.getContainerName()); - jsonObj.put("tousseInstanceArr", tousseInstanceArr); - } - } - } else if(barcodeArray.length > 1) { //按首尾两个条码进行过滤 - Map map = barcodeManager.getTousseInstanceListByRange(barcode, barcodeArray[1], TousseInstance.STATUS_REVIEWED); - if(map != null && "tousseInstanceSuccess".equals(map.get("returnType"))){ - List tousseInstanceList = (List)map.get("result"); - if(CollectionUtils.isNotEmpty(tousseInstanceList)){ - Collections.sort(tousseInstanceList);//增加按id降序排序 - TousseInstance tousseInstance = null; - if(barcodeDevice instanceof TousseInstance){ - JSONArray tousseInstanceArr = new JSONArray(); - //判断是否有已装入至灭菌篮筐或虚拟篮筐的器械包实例,如果有,则返回失败并进行提示 - for(int i = 0; i < tousseInstanceList.size(); i++){ - tousseInstance = (TousseInstance)tousseInstanceList.get(i); - if (tousseInstance != null - && !DatabaseUtil.isPoIdValid(tousseInstance.getReviewBasket_id()) - && StringUtils.isNotBlank(tousseInstance.getTousseName())) { - JSONObject temp = new JSONObject(); - temp.put("tousseBarcode", tousseInstance.getBarcode()); - temp.put("tousseName", tousseInstance.getTousseName()); - temp.put("typeForSterilizationStatistics", getTypeForSterilizationStatistics(tousseInstance)); - temp.put("SterilingType", tousseInstance.getSterilingType()); - temp.put("department", StringUtils.defaultString(tousseInstance.getDepart(), "")); - temp.put("reviewTime", ForgonDateUtils.safelyFormatDate(tousseInstance.getReviewTime(), Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM, "")); - tousseInstanceArr.add(temp); - } - } - jsonObj.put("success", 3); - jsonObj.put("tousseInstanceArr", tousseInstanceArr); - }else if(barcodeDevice instanceof Container){ - JSONArray tousseInstanceArr = new JSONArray(); - for(int i = 0;i < tousseInstanceList.size();i++){ - tousseInstance = (TousseInstance)tousseInstanceList.get(i); - if (tousseInstance != null - && StringUtils.isNotBlank(tousseInstance.getTousseName())) { - JSONObject temp = new JSONObject(); - temp.put("virtualBasketSeqNum", tousseInstance.getVirtualBasketSeqNum()); - temp.put("tousseBarcode", tousseInstance.getBarcode()); - temp.put("tousseName", tousseInstance.getTousseName()); - temp.put("typeForSterilizationStatistics", getTypeForSterilizationStatistics(tousseInstance)); - temp.put("SterilingType", tousseInstance.getSterilingType()); - temp.put("department", StringUtils.defaultString(tousseInstance.getDepart(), "")); - temp.put("reviewTime", ForgonDateUtils.safelyFormatDate(tousseInstance.getReviewTime(), Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM, "")); - tousseInstanceArr.add(temp); - } - } - jsonObj.put("success", 4); - jsonObj.put("tousseInstanceArr", tousseInstanceArr); - } - }else{ - jsonObj.put("success", -1); - jsonObj.put("failureCause", "未找到符合条件的器械包!"); - } - }else{ - jsonObj.put("success", -1); - jsonObj.put("failureCause", "未找到符合条件的器械包!"); - } - } + StrutsResponseUtils.output(sterilizationRecordManager.loadTousseInstanceInfo(barcodeStr,finalBarcodes)); } - StrutsResponseUtils.output(jsonObj); } /** @@ -1839,7 +1591,9 @@ StrutsResponseUtils.output(jSONObj); } + + /** * 根据固定条码,获取可用的包实例 */ @@ -1900,6 +1654,9 @@ e.printStackTrace(); } } + + + Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java =================================================================== diff -u -r21799 -r21831 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 21799) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 21831) @@ -32,6 +32,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; import org.hibernate.Query; +import org.testng.collections.Lists; import com.forgon.Constants; import com.forgon.databaseadapter.service.DateQueryAdapter; @@ -41,6 +42,8 @@ import com.forgon.disinfectsystem.basedata.becleanitem.service.ClassifyBasketManager; import com.forgon.disinfectsystem.basedatamanager.container.service.ReviewedBasketManager; import com.forgon.disinfectsystem.basedatamanager.goodsstock.service.GoodsStockManager; +import com.forgon.disinfectsystem.basedatamanager.sterilisation.service.SterilisationManager; +import com.forgon.disinfectsystem.basedatamanager.sterilizer.service.SterilizerManager; import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; import com.forgon.disinfectsystem.basedatamanager.toussedefinition.service.TousseDefinitionUtils; import com.forgon.disinfectsystem.basedatamanager.toussedefinition.service.TousseInstanceUtils; @@ -57,6 +60,8 @@ import com.forgon.disinfectsystem.entity.basedatamanager.operationRoom.OperationRoom; import com.forgon.disinfectsystem.entity.basedatamanager.position.TousseOperation; import com.forgon.disinfectsystem.entity.basedatamanager.signRecord.SignRecord; +import com.forgon.disinfectsystem.entity.basedatamanager.sterilisation.Sterilisation; +import com.forgon.disinfectsystem.entity.basedatamanager.sterilizer.Sterilizer; import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; @@ -88,9 +93,13 @@ import com.forgon.log.service.LogManager; import com.forgon.serialnumber.model.SerialNum; import com.forgon.serialnumber.service.SerialNumManager; +import com.forgon.timeout.model.TimeoutSetting; +import com.forgon.timeout.service.TimeoutManager; import com.forgon.tools.MathTools; import com.forgon.tools.SpringBeanManger; import com.forgon.tools.SqlBuilder; +import com.forgon.tools.StrutsParamUtils; +import com.forgon.tools.StrutsResponseUtils; import com.forgon.tools.date.DateTools; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.db.InitDbConnection; @@ -99,6 +108,7 @@ import com.forgon.tools.string.StringTools; import com.forgon.tools.util.ForgonDateUtils; import com.forgon.tools.util.SqlUtils; +import com.google.common.collect.Maps; import edu.emory.mathcs.backport.java.util.Collections; @@ -120,6 +130,12 @@ private SupplyRoomConfigManager supplyRoomConfigManager; + private SterilizerManager sterilizerManager; + + private TimeoutManager timeoutManager; + + private SterilisationManager sterilisationManager; + private BarcodeManager barcodeManager; private InitDbConnection dbConnection; @@ -140,7 +156,17 @@ private ClassifyBasketManager classifyBasketManager; - public void setClassifyBasketManager(ClassifyBasketManager classifyBasketManager) { + + + public TimeoutManager getTimeoutManager() { + return timeoutManager; + } + + public void setTimeoutManager(TimeoutManager timeoutManager) { + this.timeoutManager = timeoutManager; + } + + public void setClassifyBasketManager(ClassifyBasketManager classifyBasketManager) { this.classifyBasketManager = classifyBasketManager; } @@ -836,7 +862,7 @@ //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 " + + "t.orgUnitCoding, t.orgUnitName, t.foreignProxyItem_Id, t.proxyDisinfection_Id,t.reviewTime,t.isUrgentTousse,td.isTraceable " + "from tousseinstance t, barcodedevice b , cssdHandleTousses tt , TousseDefinition td " + "where t.id = b.id and tt.tousseDefinitionId=td.ancestorID and t.tousseDefinition_id=td.id and t.reviewBasket_id =" + reviewedBasket.getId() @@ -963,6 +989,8 @@ vo.setDepartCoding(rs.getString("departCoding")); vo.setItemDefinition(definition); + vo.setIsTraceable(rs.getString("isTraceable")); + vo.setDefinitionName(rs.getString("name")); vos.add(vo); } } catch (SQLException e) { @@ -1405,11 +1433,23 @@ + dateQueryAdapter.dateAdapter(todayStr + " 23:59:59") + " and po.orgUnitCoding = '" + orgUnitCode + "'" + " order by operationTime"; - List list = objectDao.findBySql( TousseInstance.class.getSimpleName(), sql); return list; } + + + + /** + * 根据固定条码获取所有已审核的包数量(也可以说是库存) + * @return + */ + public int getTousseInstanceStockAmount(String barcode){ + if(StringUtils.isNotBlank(barcode)){ + return getTousseInsDataByFixedBarcode(barcode,"","灭菌记录").size(); + } + return 0; + } @Override public Collection getUnTraceableTousseInstanceListByFictitiousTousseDefinition( @@ -3381,20 +3421,23 @@ */ private String getCheckIsFixedBarcodeSql(String barcode) { return " select ti.tousseFixedBarcode,ti.unTraceableTousse,ti.tousseDefinition_id,barcode,ti.status,td.isTraceable," - + "td.tousseType from TousseInstance ti join barcodeDevice b on ti.id=b.id " - + "join TousseDefinition td on td.id=ti.tousseDefinition_id where b.barcode='"+barcode+"'"; + + "td.tousseType from TousseInstance ti left join barcodeDevice b on ti.id=b.id " + + "left join TousseDefinition td on td.id=ti.tousseDefinition_id where b.barcode='"+barcode+"'"; } /** - * 根据条码判断是否需要统计汇总包信息 + * 根据条码判断是否需要统计汇总包信息 * @return */ public boolean isCountBarcode(String barcode){ - ResultSet rs = objectDao.executeSql(getCheckIsFixedBarcodeSql(barcode)); + long start=System.currentTimeMillis(); + String sql="select td.isTraceable,b.barcode from barcodeDevice b " + + "left join TousseInstance ti on ti.id=b.id left join TousseDefinition td on td.id=ti.tousseDefinition_id where b.barcode='"+barcode+"'"; + ResultSet rs = objectDao.executeSql(sql); String isTraceable=""; try { while(rs.next()){ - isTraceable = rs.getString("isTraceable");//是否追溯:“是”或者“否” + isTraceable = rs.getString("isTraceable");//是否追溯:“是”或者“否” 能不能根据barcode查询isTraceable这一个列 要查多少张表 } if(isTraceable.equals(TousseDefinition.STR_NO)){ return true; @@ -3403,9 +3446,310 @@ } catch (SQLException e) { e.printStackTrace(); } + long end=System.currentTimeMillis(); + + return false; } + //根据barcode 判断是否追溯 true“是”或者“false否” + public boolean isCountBarcodeFor(String barcode){ + long start=System.currentTimeMillis(); + + try { + String sql="select td.isTraceable,b.barcode from barcodeDevice b " + + " join TousseInstance ti on ti.id=b.id join TousseDefinition td on td.id=ti.tousseDefinition_id where b.barcode='"+barcode+"'"; + ResultSet rs = objectDao.executeSql(sql); + String isTraceable=""; + while(rs.next()){ + isTraceable = rs.getString("isTraceable");//是否追溯:“是”或者“否” 能不能根据barcode查询isTraceable这一个列 要查多少张表 + } + + if(isTraceable.equals(TousseDefinition.STR_NO)){ + return true; + } + + } catch (Exception e) { + e.printStackTrace(); + } + long end=System.currentTimeMillis(); + + System.out.println("111111111111111111:"+(end-start)); + return false; + + } + + + public JSONArray getTodayPendingSterilizationTousseAndBasket(String status,String sterilizerNameTemp,String ownGroupTemp,String taskGroup){ + try { + //String status = StrutsParamUtils.getPraramValue("status", ""); + Map sterilingTypeMap = null; + if (CssdUtils.getSystemSetConfigByNameBool("sterilizationCheckTousseSterilingType")) { +// String sterilizerNameTemp = StrutsParamUtils.getPraramValue("sterilizerNameTemp", ""); +// String ownGroupTemp = StrutsParamUtils.getPraramValue("ownGroupTemp", ""); + + sterilingTypeMap = new HashMap(); + if (StringTools.isNotBlank(sterilizerNameTemp)) { + Sterilizer sterilizer = sterilizerManager.getSterilizerByName(sterilizerNameTemp); + if (sterilizer != null) { + Set sterilisations = sterilizer.getSterilisations(); + for (Sterilisation sterilisation : sterilisations) { + String name = sterilisation.getSterilisation(); + sterilingTypeMap.put(name, name); + } + } + } else { + List sterilingTypeList = sterilisationManager.getSterilingTypeByOwnGroup(ownGroupTemp); + for (String sterilingType : sterilingTypeList) { + sterilingTypeMap.put(sterilingType, sterilingType); + } + } + } + JSONArray jsonArray = new JSONArray(); + System.out.println(dateQueryAdapter); + TimeoutSetting timeoutSetting = timeoutManager.getTimeoutSetting(TimeoutManager.PROCEDURE_REVIEW_TO_STERILE); + int hour=timeoutSetting.getHour(); + int minute=timeoutSetting.getMinute(); + // 状态如果是已灭菌或者灭菌失败,就不用加载 + if (StringUtils.equals(status,SterilizationRecord.STERILIZATION_STATUS_END)|| StringUtils.equals(status,SterilizationRecord.STERILIZATION_STATUS_FAILURE)) { + return jsonArray; + } +// String taskGroup = StrutsParamUtils.getPraramValue("taskGroup", ""); + String orgUnitCoding = AcegiHelper.getLoginUser() + .getOrgUnitCodingFromSupplyRoomConfig(); + + + JSONArray notTimeoutArray = new JSONArray(); + // 所有待灭菌的审核篮筐 + List reviewedBaskets = reviewedBasketManager + .getDepartAllReviewedBasket(orgUnitCoding); + System.out.println("==待灭菌的审核篮筐="+reviewedBaskets); + + // 当天审核的,未入筐的器械包 + List toussesOutsideBasketOfToday = getTodayReviewedTousseInstanceWithOutBasket(orgUnitCoding); + System.out.println("==未入筐的器械包="+toussesOutsideBasketOfToday); + + + long start=System.currentTimeMillis(); + // 遍历加载放入灭菌篮筐的器械包 + for (ReviewedBasket basket : reviewedBaskets) { + System.out.println("开始循环"); + Container container = basket.getContainer(); + List vos = getTousseInstanceVOsInReviewedBasket(basket, taskGroup, null); + //对包实例的集合进行排序(排序处理逻辑参见TousseSimpleVO类的compareTo方法) + String waitSterilizedTousseInstanceDefaultSortOrder = CssdUtils.getSystemSetConfigByName("waitSterilizedTousseInstanceDefaultSortOrder"); + if(StringUtils.isNotBlank(waitSterilizedTousseInstanceDefaultSortOrder)){ + Collections.sort(vos); + } + JSONObject basketObj = new JSONObject(); + basketObj.put("objName", container.getContainerName()); + basketObj.put("objBarcode", container.getBarcode()); + basketObj.put("objAmount", vos.size()); + basketObj.put("reviewTime", ""); + basketObj.put("type", "BASKET"); + basketObj.put("uiProvider", "col"); + basketObj.put("cls", "master-task"); + basketObj.put("iconCls", "task-folder"); + + + JSONArray tousseInBasketArray = new JSONArray(); + boolean isNotTimeout = true; + boolean isBasketUrgent = false; + + //灭菌筐里面器械包的全部的灭菌程序,至少要有一个是属于此灭菌分组或者此灭菌炉(或者至少有一个器械包的灭菌程序为“无”)才会显示(没选灭菌炉就按灭菌分组过滤) + boolean flag = false; + Map bMap=Maps.newHashMap(); + long start11=System.currentTimeMillis(); + System.out.println("2ceng each start,size="+vos.size()); + + long extime=0; + long extime1=0; + long extime55=0; + long extime444=0; + int successcut=0; + int successcutnihsangsi=0; + for (TousseSimpleVO vo : vos) { + if (sterilingTypeMap == null || Constants.HAS_TYPE_NO.equals(vo.getSterilingType()) || sterilingTypeMap.get(vo.getSterilingType()) != null) { + flag = true; + } + long start44=System.currentTimeMillis(); + String key =vo.getDefinitionName(); + boolean isCountBarcode="是".equals(vo.getIsTraceable())?true:false; + String objName=vo.getDefinitionName(); + long end44=System.currentTimeMillis(); + extime1=extime1+(end44-start44); + if(bMap.containsKey(key) && isCountBarcode){//只有支持扫固定条码的包,才去统计 + //已存在 则取出该对象,对象中 objAmount 累加。 + JSONObject obj = bMap.get(key); + int amt=(int) obj.get("objAmount"); + amt++; + obj.put("objAmount", amt); + long start33=System.currentTimeMillis(); + obj.put("objBarcode", getTousseInsFixedBarcode(objName)); + + long end33=System.currentTimeMillis(); + extime=extime+(end33-start33); + //覆盖 + bMap.put(key, obj); + }else{ + JSONObject tousseInBasket = new JSONObject(); + String isUrgentTousse = vo.getIsUrgentTousse(); + + boolean isTimeout =false; + long start444=System.currentTimeMillis(); + // 判断是否超时的java代码 处理缓慢 + isTimeout =timeoutManager.isTimeouted(vo.getReviewTime(),timeoutSetting); + //isTimeout=timeoutManager.isTimeouted(vo.getReviewTime(), hour, minute); //自测速度跟上一段代码一样 + long end444=System.currentTimeMillis(); + + extime444=extime444+(end444-start444); + tousseInBasket.put("depart", vo.getDepart()); + tousseInBasket.put("objName",objName ); + tousseInBasket.put("objBarcode", vo.getBarcode()); + 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); + } + if(isCountBarcode){ + bMap.put(key, tousseInBasket); + }else{ + bMap.put(vo.getBarcode(), tousseInBasket); + } + + } + } + System.out.println("2ceng each end,"+(System.currentTimeMillis()-start11)+ + ",===tousseInstanceManager.getTousseInsFixedBarcode(vo.getItemDefinition().getName())总用时,"+extime + +"==-=-=-"+extime1+"---=--=判断超时代码:"+extime444); + for (String key : bMap.keySet()) { + JSONObject tousseInBasket=bMap.get(key); + tousseInBasketArray.add(tousseInBasket); + } + if (flag) { + basketObj.put("children", tousseInBasketArray); + basketObj.put("isTimeout", !isNotTimeout); + if(isBasketUrgent){ + basketObj.put("isUrgent", TousseDefinition.STR_YES); + }else{ + basketObj.put("isUrgent", TousseDefinition.STR_NO); + } + if(isNotTimeout){ + notTimeoutArray.add(basketObj); + }else{ + basketObj.put("cls", "itemTimeout"); + jsonArray.add(basketObj); + } + } + } + long end=System.currentTimeMillis(); + System.out.println("第一部分耗时:"+(end-start)); + System.out.println("遍历加载放入灭菌篮筐的器械包结束循环"); + + long start2=System.currentTimeMillis(); + // 去重,key为名称, value为具体的数据。 如果名称重复,则取出该分组数据,累加。否则新增.。 什么结果? + Map resultMap=Maps.newTreeMap(); + String sortRule="aaaaa";//根据treeMap 特性,将已超时的排在前面 + for (TousseInstance tousseOutsideBasket : toussesOutsideBasketOfToday) { + boolean isTimeout = timeoutManager.isTimeouted(tousseOutsideBasket.getReviewTime(), timeoutSetting); + //器械包的灭菌程序,属于此灭菌分组或者此灭菌炉(或者器械包的灭菌程序为“无”)才会显示(没选灭菌炉就按灭菌分组过滤) + if (sterilingTypeMap != null && !Constants.HAS_TYPE_NO.equals(tousseOutsideBasket.getSterilingType())) { + String sterilingTypeTemp = sterilingTypeMap.get(tousseOutsideBasket.getSterilingType()); + if (sterilingTypeTemp == null) { + continue; + } + } + String key=tousseOutsideBasket.getShowTousseName(); + if(isTimeout){ + key=sortRule+tousseOutsideBasket.getShowTousseName(); + //System.out.println(tousseOutsideBasket.getShowTousseName()+"已超时"); + } + if(resultMap.containsKey(key) && isCountBarcode(tousseOutsideBasket.getBarcode())){//只有支持扫固定条码的包,才去统计 + //已存在 则取出该对象,对象中 objAmount 累加。 启动name就 + JSONObject obj = resultMap.get(key); + int amt=(int) obj.get("objAmount"); + amt++; + obj.put("objAmount", amt); + obj.put("objBarcode", getTousseInsFixedBarcode(tousseOutsideBasket.getTousseName())); + //覆盖 + resultMap.put(key, obj); + }else{ + //不存在,则新增 + JSONObject obj = new JSONObject(); + obj.put("depart", tousseOutsideBasket.getDepart()); + obj.put("objName", tousseOutsideBasket.getShowTousseName()); + obj.put("objBarcode", tousseOutsideBasket.getBarcode()); + obj.put("objAmount", 1); + obj.put("reviewTime", ForgonDateUtils.safelyFormatDate(tousseOutsideBasket.getReviewTime(), Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM, "")); + obj.put("type", "TOUSSE"); + obj.put("uiProvider", "col"); + obj.put("leaf", true); + obj.put("cls", isTimeout ? "itemTimeout" : "master-task"); + obj.put("iconCls", "task"); + obj.put("isTimeout", isTimeout); + if(tousseOutsideBasket.getIsUrgentTousse() != null && tousseOutsideBasket.getIsUrgentTousse().equals(TousseDefinition.STR_YES )){ + obj.put("isUrgent", TousseDefinition.STR_YES); + }else{ + obj.put("isUrgent", TousseDefinition.STR_NO); + } + if(isCountBarcode(tousseOutsideBasket.getBarcode())){//只有支持扫固定条码的包,才去统计 + resultMap.put(key, obj); + }else{ + resultMap.put(tousseOutsideBasket.getBarcode(), obj); + } + } + } + long end2=System.currentTimeMillis(); + System.out.println("第二段耗时:"+(end2-start2)); + System.out.println("第二段循环完成"); + + long start3=System.currentTimeMillis(); + List resultList=Lists.newArrayList(); + for (String key : resultMap.keySet()) { + JSONObject obj = resultMap.get(key); + resultList.add(obj); + } + jsonArray.addAll(notTimeoutArray); //未超时的加到最后 + jsonArray.addAll(resultList); + @SuppressWarnings("unchecked") + Iterator it = jsonArray.iterator(); + while (it.hasNext()) { + JSONObject jsonObject = it.next(); + if (jsonObject.containsKey("objAmount")) { + int amount = jsonObject.getInt("objAmount"); + if (amount == 0) { + it.remove(); + } + } + } + long end3=System.currentTimeMillis(); + System.out.println("第三段耗时:"+(end3-start3)); + System.out.println("第3段循环完成"); + //StrutsResponseUtils.output(jsonArray); + return jsonArray; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + + } + + + + + + /** * 根据包名,获取包固定条码。如果没有则返回空字符串 * @return @@ -3419,7 +3763,6 @@ String fixedBarcode = rs.getString("barcode"); return fixedBarcode; } - rs.close(); } catch (SQLException e) { e.printStackTrace(); } Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManager.java =================================================================== diff -u -r20810 -r21831 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManager.java (.../SterilizationRecordManager.java) (revision 20810) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManager.java (.../SterilizationRecordManager.java) (revision 21831) @@ -33,6 +33,13 @@ * @param tousseInstance */ public void updateOldSterilization(TousseInstance tousseInstance); + + + /** + * 加载条码数据 + * @return + */ + public JSONObject loadTousseInstanceInfo(String barcodeStr,String finalBarcodes); /** * 灭菌完成.