Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r24092 -r24093 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 24092) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 24093) @@ -124,6 +124,7 @@ import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseInstanceManager; import com.forgon.disinfectsystem.washanddisinfectmanager.washanddisinfectrecord.service.WashAndDisinfectRecordManager; import com.forgon.excel.service.CommonExportManager; +import com.forgon.exception.SystemException; import com.forgon.log.model.Log; import com.forgon.log.service.LogManager; import com.forgon.reflect.ReflectUtil; @@ -2116,42 +2117,39 @@ String taskGroup, String reviewer, String reviewerCode, Date sterileDate) { LoginUserData loginUser = AcegiHelper.getLoginUser(); logger.debug("进行审核的用户:" + loginUser.getUserFullName() + ",审核的器械包Ids = " + idsStr); - boolean success = true; - String msg = "审核成功"; - if(StringUtils.isBlank(idsStr)){ return JSONUtil.buildJsonObject(false, "没有要审核的包"); } + boolean success = true; + String msg = "审核成功"; JSONObject json = new JSONObject(); JSONArray toussesArray = new JSONArray(); JSONArray logTousseArray = new JSONArray(); - // 根据页面传过来的器械包的id集合,查找待审核的器械包,并且只找状态为待审核的包,避免重复审核 - Query query = objectDao.getHibernateSession().createQuery( - "SELECT po FROM TousseInstance po" - + " WHERE po.id in (:ids) and po.status = :status"); - - List ids = new ArrayList(); String[] tids = StringUtils.split(idsStr, ';'); for (String id : tids){ if (StringUtils.isNumeric(id)){ ids.add(new Long(id)); } } + // 根据页面传过来的器械包的id集合,查找待审核的器械包,并且只找状态为待审核的包,避免重复审核 + @SuppressWarnings("unchecked") + List tousses = (List)objectDao.findBySql_ForUpdate(TousseInstance.class.getSimpleName(), + String.format("where po.id in and po.status = :status", + SqlUtils.getStringFieldInLargeCollectionsPredicate("po.id", ids), TousseInstance.STATUS_PACKED)); + if(CollectionUtils.isEmpty(tousses)){ + return JSONUtil.buildJsonObject(false, "没有要审核的包"); + } - - query.setParameterList("ids", ids); - query.setParameter("status", TousseInstance.STATUS_PACKED); - - List tousses = query.list(); //先锁住包实例和篮筐 boolean isNeedSetReviewer = StringUtils.isNotBlank(reviewer); boolean isDisinfectionGoodsPrintExpirationDate = false;// 消毒物品是否打印失效期 ReviewedBasket reviewedBasket = null; if(StringUtils.isNotBlank(basketBarcode)){//灭菌篮筐条码 - BarcodeDevice bd = barcodeManager.getBarcodeByBarcode(basketBarcode); + BarcodeDevice bd = (BarcodeDevice) objectDao.getByProperty_ForUpdate( + BarcodeDevice.class.getSimpleName(), "barcode", basketBarcode); if(bd == null || !(bd instanceof Container)){ json.put("success", false); json.put("message", "条码:" + basketBarcode + "不是篮筐条码,不能进行审核"); @@ -2175,8 +2173,51 @@ reviewedBasket = reviewedBasketManager.getReviewedBasketButNew(basketBarcode); reviewedBasketManager.saveOrUpdate(reviewedBasket); + ResultSet rs = null; //查出该篮筐实例中所有包实例的所有的灭菌方式(去除重复值后)、因为一个篮筐也有可能同时有多人用来做审核、同时前端页面也没有刷新 - + try{ + List sterilingModeList = null; + //判断现有篮筐实例里的包实例的灭菌方式与本次要灭菌装载的器械包实例的灭菌方式是否一致(排除掉不追溯的包),如果不一致则抛出异常 + rs = objectDao.executeSql("select distinct sterilingMode from " + TousseInstance.class.getSimpleName() + + " join "+ TousseDefinition.class.getSimpleName() +" td on ti.tousseDefinition_id=td.id " + + " where td.isTraceable='"+ Constants.STR_NO +"' and ReviewBasket_id = "+ reviewedBasket.getId()); + String sterilingMode = null; + while(rs.next()){ + if(sterilingModeList == null){ + sterilingModeList = new ArrayList(); + } + sterilingMode = rs.getString("sterilingMode"); + if(StringUtils.isNotBlank(sterilingMode)){ + if(!sterilingModeList.contains(sterilingMode)){ + sterilingModeList.add(sterilingMode); + } + }else{ + if(!sterilingModeList.contains("")){ + sterilingModeList.add(""); + } + } + } + + if(CollectionUtils.isNotEmpty(sterilingModeList) && CollectionUtils.isNotEmpty(tousses)){ + if(sterilingModeList.size() > 1){ + throw new SystemException("该篮筐有多种不同灭菌方式的物品,不能装载器械包,请先将框内灭菌方式不同的物品移除!"); + }else{ + //否则判断要灭菌装载的包的灭菌方式与篮筐内已有的包的灭菌方式是否一致(排除不追溯的包) + //判断现有篮筐实例里的包实例的灭菌方式与本次要灭菌装载的器械包实例的灭菌方式是否有不一致的包(排除掉不追溯的包),如果有不一致则抛出异常 + String condition = String.format(" where tousseDefinition.isTraceble='%s' %s and %s", + Constants.STR_YES, StringUtils.isNotBlank(sterilingMode) ? " and sterilingMode <> '"+ sterilingMode +"'" : " and sterilingMode is not null ", + SqlUtils.getStringFieldInLargeCollectionsPredicate("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) ? "物品" : "物品灭菌方式") +"】不一致,不能入框"); + } + } + } + }catch (Exception e){ + + }finally{ + DatabaseUtil.closeResultSetAndStatement(rs); + } } boolean isPrintUserName = supplyRoomConfigManager.getSystemParamsObj().isPrintUserFullName();