Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/container/service/ReviewedBasketManagerImpl.java =================================================================== diff -u -r36710 -r36717 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/container/service/ReviewedBasketManagerImpl.java (.../ReviewedBasketManagerImpl.java) (revision 36710) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/container/service/ReviewedBasketManagerImpl.java (.../ReviewedBasketManagerImpl.java) (revision 36717) @@ -128,9 +128,9 @@ @SuppressWarnings("rawtypes") @Override public List getAllReviewedBasket(String taskGroup) { - String sql = "select po,s from " + String sql = "select po from " + ReviewedBasket.class.getSimpleName() - + " po left join po.sterilizationRecords s where s.id is null and po.container.status = '" + + " po where not exists (select 1 from po.sterilizationRecords ) and po.container.status = '" + Container.CONTAINER_STATUS_STERILIZELOADING + "'"; if (StringUtils.isNotBlank(taskGroup)) { @@ -139,13 +139,9 @@ List basketReturnList = new ArrayList(); List objs = objectDao.findByHql(sql); - if (objs != null) { - for (Object obj : objs) { - Object[] objArray = (Object[]) obj; - Object reviewedBasketObj = objArray[0]; - Object recordObj = objArray[1]; - if (recordObj == null - && reviewedBasketObj instanceof ReviewedBasket) { + if (CollectionUtils.isNotEmpty(objs)) { + for (Object reviewedBasketObj : objs) { + if (reviewedBasketObj instanceof ReviewedBasket) { basketReturnList.add((ReviewedBasket) reviewedBasketObj); } } @@ -158,7 +154,7 @@ public List getDepartAllReviewedBasket(String departCode) { String sql = "select po from " + ReviewedBasket.class.getSimpleName() - + " po left join po.sterilizationRecords s where s.id is null and po.container.status = '" + + " po where not exists (select 1 from po.sterilizationRecords ) and po.container.status = '" + Container.CONTAINER_STATUS_STERILIZELOADING + "' and (po.container.departCode = '" + departCode + "'" + " or po.id in (select rbs.id from "+ ProxyDisinfection.class.getSimpleName() +" pd join pd.reviewedBaskets rbs where pd.handleDepartCoding='" + departCode + "')" @@ -187,16 +183,30 @@ containerManager.save(container); - basket = getBasketByBarcode(basketBarcode); + basket = getBasketByContainerId(container.getId()); if (basket == null) { basket = new ReviewedBasket(); basket.setContainer(container); } } return basket; } - @Override + public ReviewedBasket getReviewedBasketButNew(Container container) { + if(container == null){ + throw new RuntimeException("未找到对应的的容器"); + } + ReviewedBasket basket = null; + container.setStatus(Container.CONTAINER_STATUS_STERILIZELOADING); + containerManager.save(container); + basket = getBasketByContainerId(container.getId()); + if (basket == null) { + basket = new ReviewedBasket(); + basket.setContainer(container); + } + return basket; + } + @Override public ReviewedBasket getReviewedBasketButNew(String basketBarcode, String statusChange) { ReviewedBasket basket = null; @@ -210,7 +220,7 @@ container.setStatus(statusChange); } containerManager.save(container); - basket = getBasketByBarcode(basketBarcode); + basket = getBasketByContainerId(container.getId()); if (basket == null) { basket = new ReviewedBasket(); basket.setContainer(container); @@ -221,22 +231,40 @@ @Override public ReviewedBasket getBasketByBarcode(String barcode) { if (StringUtils.isNotBlank(barcode)) { - String sql = "select po,s from " + String sql = "select po from " + ReviewedBasket.class.getSimpleName() - + " po left join po.sterilizationRecords s where s.id is null and po.container.barcode = '" + + " po where not exists (select 1 from po.sterilizationRecords ) and po.container.barcode = '" + barcode + "'"; List list = objectDao.findByHql(sql); if (list != null && list.size() > 0) { - Object[] objArray = (Object[]) list.get(0); - Object basketObj = objArray[0]; - Object recordObj = objArray[1]; - if (recordObj == null && basketObj instanceof ReviewedBasket) { - return (ReviewedBasket) basketObj; + for (Object basketObj : list) { + if (basketObj instanceof ReviewedBasket) { + return (ReviewedBasket) basketObj; + } } } } return null; } + @Override + public ReviewedBasket getBasketByContainerId(Long container_id) { + if (DatabaseUtil.isPoIdValid(container_id)) { + String sql = "select po from " + + ReviewedBasket.class.getSimpleName() + + " po where not exists (select 1 from po.sterilizationRecords ) " + + "and po.container.id = " + + container_id; + List list = objectDao.findByHql(sql); + if (list != null && list.size() > 0) { + for (Object basketObj : list) { + if (basketObj instanceof ReviewedBasket) { + return (ReviewedBasket) basketObj; + } + } + } + } + return null; + } @Override public ReviewedBasket getReviewedBasketForSterilizeRecord(String barcode) { Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r36643 -r36717 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 36643) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 36717) @@ -3303,27 +3303,31 @@ JSONObject json = new JSONObject(); JSONArray toussesArray = new JSONArray(); JSONArray logTousseArray = new JSONArray(); - List ids = new ArrayList(); + Collection ids = new ArrayList(); String[] tids = StringUtils.split(idsStr, ';'); for (String id : tids){ if (StringUtils.isNumeric(id)){ - ids.add(id); + ids.add(Long.parseLong(id)); } } // 根据页面传过来的器械包的id集合,查找待审核的器械包,并且只找状态为待审核的包,避免重复审核 @SuppressWarnings("unchecked") List tousses = objectDao.findBySql_ForUpdate(TousseInstance.class.getSimpleName(), - String.format("where %s and po.status = '%s'", - SqlUtils.getStringFieldInLargeCollectionsPredicate("po.id", ids), TousseInstance.STATUS_PACKED)); + String.format("where 1=1 %s and po.status = '%s'", + SqlUtils.getInLongListSql("po.id", ids), TousseInstance.STATUS_PACKED)); if(CollectionUtils.isEmpty(tousses)){ return JSONUtil.buildJsonObject(false, "没有要审核的包"); } - @SuppressWarnings("unchecked") - List tousseInstanceAdditionalInfos = objectDao.findByHql("select po from " + TousseInstanceAdditionalInfo.class.getSimpleName() + " po where " + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.tousseInstanceId", ids)); - Map tousseInstanceAdditionalInfoMap = new HashMap(); - if(!CollectionUtils.isEmpty(tousseInstanceAdditionalInfos)){ - for (TousseInstanceAdditionalInfo info : tousseInstanceAdditionalInfos) { - tousseInstanceAdditionalInfoMap.put(info.getTousseInstanceId(), info); + boolean enableFlexiblePriceCalculationOfDisinfectionGoodsFunction = CssdUtils.getSystemSetConfigByNameBool("enableFlexiblePriceCalculationOfDisinfectionGoodsFunction", false); + Map tousseInstanceAdditionalInfoMap = null; + if(enableFlexiblePriceCalculationOfDisinfectionGoodsFunction){ + @SuppressWarnings("unchecked") + List tousseInstanceAdditionalInfos = objectDao.findByHql("select po from " + TousseInstanceAdditionalInfo.class.getSimpleName() + " po where " + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.tousseInstanceId", ids)); + tousseInstanceAdditionalInfoMap = new HashMap(); + if(!CollectionUtils.isEmpty(tousseInstanceAdditionalInfos)){ + for (TousseInstanceAdditionalInfo info : tousseInstanceAdditionalInfos) { + tousseInstanceAdditionalInfoMap.put(info.getTousseInstanceId(), info); + } } } // 装配人与审核人是否相同的检查方式 @@ -3376,15 +3380,13 @@ ReviewedBasket reviewedBasket = null; if(StringUtils.isNotBlank(sterileBasketBarcode)){//灭菌篮筐条码 - BarcodeDevice bd = (BarcodeDevice) objectDao.getByProperty_ForUpdate( - BarcodeDevice.class.getSimpleName(), "barcode", sterileBasketBarcode); - if(bd == null || !(bd instanceof Container)){ + Container container = (Container) objectDao.getByProperty_ForUpdate( + Container.class.getSimpleName(), "barcode", sterileBasketBarcode); + if(container == null){ json.put("success", false); json.put("message", "条码:" + sterileBasketBarcode + "不是篮筐条码,不能进行审核"); return json; } - - Container container = (Container)bd; if(!container.isDisinfectionBasket()){ json.put("success", false); json.put("message", "篮筐条码:" + sterileBasketBarcode + "不是灭菌篮筐,不能进行审核"); @@ -3398,7 +3400,7 @@ return json; } - reviewedBasket = reviewedBasketManager.getReviewedBasketButNew(sterileBasketBarcode); + reviewedBasket = reviewedBasketManager.getReviewedBasketButNew(container); reviewedBasketManager.saveOrUpdate(reviewedBasket); } @@ -3491,7 +3493,10 @@ tousseInstance .setStatus(TousseInstance.STATUS_DISINFECTED); //如果为需要灭菌,则更改其状态为已审核(针对省医的高水平消毒的需求增加的处理,since 2016-01-20 SYF) - TousseInstanceAdditionalInfo info = tousseInstanceAdditionalInfoMap.get(tousseInstance.getId()); + TousseInstanceAdditionalInfo info = null; + if(enableFlexiblePriceCalculationOfDisinfectionGoodsFunction){ + info = tousseInstanceAdditionalInfoMap.get(tousseInstance.getId()); + } boolean sterilizedThisTime = false; if(info != null){ sterilizedThisTime = info.getSterilizedThisTime(); @@ -3739,9 +3744,9 @@ }else{ //否则判断要灭菌装载的包的灭菌方式与篮筐内已有的包的灭菌方式是否一致(排除不追溯的包) //判断现有篮筐实例里的包实例的灭菌方式与本次要灭菌装载的器械包实例的灭菌方式是否有不一致的包(排除掉不追溯的包),如果有不一致则抛出异常 - String condition = String.format(" where tousseDefinition.isTraceable='%s' %s and %s", + String condition = String.format(" where tousseDefinition.isTraceable='%s' %s %s", Constants.STR_YES, StringUtils.isNotBlank(sterilingMode) ? " and (sterilingMode is null or sterilingMode <> '"+ sterilingMode +"')" : " and (sterilingMode is not null and sterilingMode <> '') ", - SqlUtils.getStringFieldInLargeCollectionsPredicate("id", ids)); + SqlUtils.getInLongListSql("id", ids)); TousseInstance ti = (TousseInstance)objectDao.getBySql_ForUpdate(TousseInstance.class.getSimpleName(), condition); if(ti != null){ //throw new SystemException("【"+ ti.getTousseName() +"】属于【"+ ti.getSterilingMode() +"】物品与原有【"+ (StringUtils.isNotBlank(sterilingMode) ? "物品" : "物品灭菌方式") +"】不一致,不能入框"); Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java =================================================================== diff -u -r36710 -r36717 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 36710) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 36717) @@ -2315,24 +2315,24 @@ if(StringUtils.isBlank(basketBarcode)){ throw new RuntimeException("灭菌篮筐条码不能为空."); } - BarcodeDevice barcodeDevice = barcodeManager.getBarcodeByBarcode(basketBarcode); - if(barcodeDevice == null){ + Container container = (Container) objectDao.getByProperty( + Container.class.getSimpleName(), "barcode", basketBarcode); + if(container == null){ throw new RuntimeException("未找到条码为"+ basketBarcode +"的灭菌篮筐."); } - if(!(barcodeDevice instanceof Container) || !((Container)barcodeDevice).isDisinfectionBasket()){ + if(!container.isDisinfectionBasket()){ throw new RuntimeException("只能扫描灭菌篮筐."); } //灭菌篮筐的灭菌方式(如果配了灭菌方式,则判断所扫描的包的灭菌方式与灭菌篮筐的灭菌方式是否一致) - String sterilingMode = ((Container)barcodeDevice).getSterilingMode(); + String sterilingMode = container.getSterilingMode(); if(StringUtils.isNotBlank(sterilingMode)){ - List barcodeList = barcodeManager.getCollectionForUpdate("barcode", tousseInstanceBarcodes); + List barcodeList = objectDao.getCollection_ForUpdate(TousseInstance.class.getSimpleName(), "barcode", Arrays.asList(tousseInstanceBarcodes)); if(CollectionUtils.isNotEmpty(barcodeList)){ - for (BarcodeDevice barcode : barcodeList) { - TousseInstance tousseInstance = (TousseInstance)barcode; + for (TousseInstance tousseInstance : barcodeList) { if(StringUtils.isBlank(tousseInstance.getSterilingMode())){ - throw new SterilingModeNotTheSameException(barcode.getBarcode() +" "+ tousseInstance.getTousseName() +"的灭菌方式为空,不能装载."); + throw new SterilingModeNotTheSameException(tousseInstance.getBarcode() +" "+ tousseInstance.getTousseName() +"的灭菌方式为空,不能装载."); }else if(!StringUtils.equals(sterilingMode, tousseInstance.getSterilingMode())){ - throw new SterilingModeNotTheSameException(barcode.getBarcode() +" "+ tousseInstance.getTousseName() +"的灭菌方式为"+ tousseInstance.getSterilingMode() +",不能装载."); + throw new SterilingModeNotTheSameException(tousseInstance.getBarcode() +" "+ tousseInstance.getTousseName() +"的灭菌方式为"+ tousseInstance.getSterilingMode() +",不能装载."); } } } @@ -2345,7 +2345,7 @@ } checkHasReceived(tousseInstanceBarcodes); ReviewedBasket basket = reviewedBasketManager - .getReviewedBasketButNew(basketBarcode); + .getReviewedBasketButNew(container); if (basket.getId() == null) { reviewedBasketManager.saveOrUpdate(basket); } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/container/service/ReviewedBasketManager.java =================================================================== diff -u -r35588 -r36717 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/container/service/ReviewedBasketManager.java (.../ReviewedBasketManager.java) (revision 35588) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/container/service/ReviewedBasketManager.java (.../ReviewedBasketManager.java) (revision 36717) @@ -43,8 +43,13 @@ * @return */ public ReviewedBasket getReviewedBasketButNew(String basketBarcode); - /** + * 根据容器找篮筐,如果没找到则根据taskGroup新建一个.会把篮筐状态变成灭菌装载,慎用! + * @param container 容器 + * @return + */ + public ReviewedBasket getReviewedBasketButNew(Container container); + /** * 根据barcode找篮筐,如果没找到则根据taskGroup新建一个. * @param basketBarcode 篮筐条码 * @param statusChange 新的状态 如果为空 则不改变状态 @@ -57,7 +62,14 @@ * @return */ public ReviewedBasket getBasketByBarcode(String barcode); + /** + * 通过容器id获得本任务组正处于整理的篮筐. + * @param barcode 容器条码 + * @return + */ + public ReviewedBasket getBasketByContainerId(Long container_id); + /** * 根据条形码查找篮筐(sterilizeRecordId为空表示篮筐还未与灭菌记录绑定). * @param barcode * @param sterilizeRecordId 调用的地方传的参数都是null,取消参数