Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java =================================================================== diff -u -r27634 -r28386 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 27634) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 28386) @@ -1036,5 +1036,31 @@ * @return key:条码 value:包实例状态 */ public Map> getStatusAndBarcodeMap(List barcodes); + + /** + * 获取已审核灭菌篮筐内的器械包 + * @param reviewedBaskets + * @param sterilisation 灭菌程序 + * @param taskGroup 任务组为空时,不按照任务组过滤(查所有任务组) + * @param extraOrder + * @return + */ + public List getTousseSimpleVOsInReviewedBaskets(List reviewedBaskets, String sterilisation, String taskGroup, String extraOrder); + + /** + * 获取已审核灭菌篮筐内的器械包 + * @param sterilisations 灭菌程序(灭菌程序1;灭菌程序2;灭菌程序3) + * @param taskGroup 任务组 + * @param saveBarcodes 页面已经入炉的篮筐或器械包条码(010000001;010000002;010000003) + * @return + */ + public JSONArray getWaitSterileGoods(String sterilisations, String taskGroup, String saveBarcodes); + + /** + * 根据器械包条码获取器械包实例 + * @param barcodes 器械包实例条码(010000001;010000002) + * @return + */ + public JSONArray loadTousseInstanceByBarcodesForPrint(String barcodes); } Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/TousseInstanceAction.java =================================================================== diff -u -r27971 -r28386 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/TousseInstanceAction.java (.../TousseInstanceAction.java) (revision 27971) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/TousseInstanceAction.java (.../TousseInstanceAction.java) (revision 28386) @@ -38,6 +38,7 @@ import com.forgon.disinfectsystem.basedatamanager.container.service.ReviewedBasketManager; import com.forgon.disinfectsystem.basedatamanager.sterilisation.service.SterilisationManager; import com.forgon.disinfectsystem.basedatamanager.sterilizer.service.SterilizerManager; +import com.forgon.disinfectsystem.basedatamanager.taskGroup.service.TaskGroupManager; import com.forgon.disinfectsystem.basedatamanager.urgent.vo.UrgentLevelVo; import com.forgon.disinfectsystem.basedatamanager.warehouse.service.WareHouseManager; import com.forgon.disinfectsystem.common.CssdUtils; @@ -48,6 +49,7 @@ import com.forgon.disinfectsystem.entity.basedatamanager.materialdefinition.MaterialDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; import com.forgon.disinfectsystem.entity.basedatamanager.signRecord.SignRecord; +import com.forgon.disinfectsystem.entity.basedatamanager.taskGroup.TaskGroup; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstanceImplantData; @@ -147,6 +149,8 @@ private WareHouseManager wareHouseManager; + private TaskGroupManager taskGroupManager; + public void setWareHouseManager(WareHouseManager wareHouseManager) { this.wareHouseManager = wareHouseManager; } @@ -243,6 +247,10 @@ this.barcodeManager = barcodeManager; } + public void setTaskGroupManager(TaskGroupManager taskGroupManager) { + this.taskGroupManager = taskGroupManager; + } + //更新数据库器械包错误的失效日期 public void updateTousseValidUntil(){ String sql = "where DATEDIFF(day,operationTime,validUntil) > 200 and (packageType = '纸塑' or packageType = '无纺布')"; @@ -401,6 +409,24 @@ JSONObject jsonObject = JSONObject.fromObject(map); StrutsResponseUtils.output(jsonObject); } + + /** + * 根据器械包实例条码获取包实例 + * @param + */ + public void loadTousseInstanceByBarcodes() { + try { + String barcodes = StrutsParamUtils.getPraramValue("barcodes", ""); + if(StringUtils.isBlank(barcodes)){ + throw new RuntimeException("器械包条码为空"); + } + JSONArray jsonArr = tousseInstanceManager.loadTousseInstanceByBarcodesForPrint(barcodes); + StrutsResponseUtils.output(true, jsonArr); + } catch (Exception e) { + e.printStackTrace(); + StrutsResponseUtils.output(false, e.getMessage()); + } + } /** @@ -1012,6 +1038,36 @@ e.printStackTrace(); } } + + /** + * 获取未入炉的待灭菌物品列表 + */ + public void getWaitSterileGoods(){ + try { + String sterilingType = StrutsParamUtils.getPraramValue("sterilingType", ""); + String taskGroupId = StrutsParamUtils.getPraramValue("taskGroup", ""); + // 页面已经入炉的灭菌篮筐或者器械包实例条码,用;分割(010000001;010000002;010000003) + String saveBarcodes = StrutsParamUtils.getPraramValue("saveBarcode", ""); + if(StringUtils.isBlank(sterilingType)){ + throw new RuntimeException("请选择灭菌程序"); + } + String taskGroupName = ""; + if(taskGroupId == null || "all".equals(taskGroupId)){ + taskGroupId = ""; + } else { + TaskGroup taskGroup = taskGroupManager.get(taskGroupId); + if(taskGroup != null){ + taskGroupName = taskGroup.getTaskGroupName(); + } + } + JSONArray array = tousseInstanceManager.getWaitSterileGoods(sterilingType, taskGroupName, saveBarcodes); + StrutsResponseUtils.output(true, array); + } catch (Exception e) { + e.printStackTrace(); + StrutsResponseUtils.output(false, e.getMessage()); + } + } + /*** * @author liujie Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java =================================================================== diff -u -r28356 -r28386 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 28356) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 28386) @@ -4,6 +4,7 @@ import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; +import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; @@ -34,6 +35,7 @@ import org.apache.commons.collections.MapUtils; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.Predicate; +import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; import org.hibernate.Query; @@ -6452,7 +6454,7 @@ ti.setDepart(rs.getString("depart")); ti.setTousseName(rs.getString("tousseName")); ti.setSterilingMode(rs.getString("sterilingMode")); - ti.setReviewTime(rs.getString("reviewTime")); + ti.setReviewTime(ForgonDateUtils.safelyFormatDate(rs.getTimestamp("reviewTime"), Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM, "")); ti.setAmount(rs.getInt("amount")); ti.setSterilingType(rs.getString("sterilingType")); ti.setIsUrgentTousse(rs.getString("IsUrgentTousse")); @@ -6466,6 +6468,7 @@ urgentLevelVo.setGrade(rs.getInt("ulGrade")); ti.setUrgentLevelInfo(urgentLevelVo); } + ti.setTaskGroup(rs.getString("taskGroup")); tousseList.add(ti); } }else{ @@ -6478,10 +6481,11 @@ ti.setDepart(rs.getString("depart")); ti.setTousseName(rs.getString("tousseName")); ti.setSterilingMode(rs.getString("sterilingMode")); - ti.setReviewTime(rs.getString("reviewTime")); + ti.setReviewTime(ForgonDateUtils.safelyFormatDate(rs.getTimestamp("reviewTime"), Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM, "")); ti.setAmount(rs.getInt("amount")); ti.setSterilingType(rs.getString("sterilingType")); ti.setIsUrgentTousse(rs.getString("IsUrgentTousse")); + ti.setTaskGroup(rs.getString("taskGroup")); tousseList.add(ti); } } @@ -6531,7 +6535,7 @@ sqlJoin_UrgentLevel = String.format(" left join %s ul on ti.urgentLevel_id = ul.id ", UrgentLevel.class.getSimpleName()); nullSql = " ,null ulColorCode ,null ulGrade, null ulName , null ulId "; } - String sql = "select * from ((select tdancestor.id,ti.depart,ti.tousseName,ti.sterilingType,ti.sterilingMode," + String sql = "select * from ((select tdancestor.id,ti.depart,ti.tousseName,ti.sterilingType,ti.sterilingMode,ti.taskGroup," + "IsUrgentTousse,b.barcode,ti.reviewTime,1 amount, td.includeImplant " + sqlSelect_UrgentLevel + " from "+ TousseInstance.class.getSimpleName() +" ti " @@ -6544,7 +6548,7 @@ + " union " - + "(select tdancestor.id ,null depart,tdancestor.name tousseName,null,null sterilingMode,null," + + "(select tdancestor.id ,null depart,tdancestor.name tousseName,null,null sterilingMode,null,ti.taskGroup taskGroup," + firstBarcodeSql + "barcode,null reviewTime,count(0) amount, max(tdancestor.includeImplant) " + nullSql @@ -6553,7 +6557,7 @@ + "join "+ TousseDefinition.class.getSimpleName() +" td on ti.tousseDefinition_id=td.id join "+ TousseDefinition.class.getSimpleName() +" tdancestor " + "on td.ancestorID=tdancestor.id left join "+ InvoicePlan.class.getSimpleName() +" pd on pd.id=ti.proxyDisinfection_id where 1=1 and tdancestor.isTraceable='"+ Constants.STR_NO +"' and ti.status='"+ TousseInstance.STATUS_REVIEWED +"' and ti.comboTousseInstanceId is null " + dateSql - + " and ti.reviewBasket_id is null and (pd.id is null and ti.orgunitcoding='"+orgUnitCode+"' or pd.id is not null and pd.handleDepartCoding='"+orgUnitCode+"') group by tdancestor.id,tdancestor.name" + + " and ti.reviewBasket_id is null and (pd.id is null and ti.orgunitcoding='"+orgUnitCode+"' or pd.id is not null and pd.handleDepartCoding='"+orgUnitCode+"') group by tdancestor.id,tdancestor.name,ti.taskGroup" + "))t"; if(StringUtils.isNotBlank(extraOrder)){ sql += " order by " + extraOrder; @@ -7467,4 +7471,377 @@ return null; } + + @SuppressWarnings("unchecked") + @Override + public JSONArray loadTousseInstanceByBarcodesForPrint(String barcodes) { + if(StringUtils.isBlank(barcodes)){ + throw new RuntimeException("器械包实例条码为空"); + } + JSONArray jsonArr = new JSONArray(); + List tousseInstances = new ArrayList(); + barcodes = "'" + barcodes + "'"; + barcodes = barcodes.replaceAll(";", "','"); + List barcodeDevices = objectDao.findBySql(BarcodeDevice.class.getSimpleName(), " where po.barcode in (" + barcodes + ")"); + if(CollectionUtils.isNotEmpty(barcodeDevices)){ + for (BarcodeDevice barcodeDevice : barcodeDevices) { + if(barcodeDevice instanceof TousseInstance){ + tousseInstances.add((TousseInstance)barcodeDevice); + } + } + } + + if(CollectionUtils.isNotEmpty(tousseInstances)){ + SupplyRoomConfig systemConfig = supplyRoomConfigManager.getSystemParamsObj(); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + for (TousseInstance ti : tousseInstances) { + TousseDefinition td = ti.getTousseDefinition(); + JSONArray subBarcodeArray = new JSONArray(); + subBarcodeArray.add(ti.getBarcode()); + String packageTypeAbbreviation = TousseInstanceUtils.getPackageTypeAbbreviation(objectDao, ti.getPackageType()); + boolean isReview = true; + if (TousseDefinition.STR_NO.equals(td.getIsReview())) { + isReview = false; + } + boolean isTraceable = true; + if (TousseDefinition.STR_NO.equals(td.getIsPrint())) { + isTraceable = false; + } else { + if (TousseDefinition.STR_NO.equals(td + .getIsTraceable())) { + isTraceable = false; + } + } + JSONObject result = CssdUtils.getTousseObjForPrint(td.getName(), null,ti, + subBarcodeArray, null, td.getTousseType(), td.getPackageType(), + packageTypeAbbreviation, td.getSterilingMethod(), + ti.getSterilizerName(), ti.getSterileFrequency(), + systemConfig.isPrintUserFullName(), ti.getOperator(), + ti.getOperatorCode(), ti.getReviewer(), ti.getReviewerCode(), + ti.getSterilizationUser(), ti.getSterilizationUserCode(), + ti.getValidUntilStr(format), ti.getSterileStartTime(), true, + ti.getOperationTime(), false, false, true, isReview, + isTraceable, td.getIsBigPackage(), "", null, 0l, "", 0, + 0, ti.getDepart(), TousseDefinition.PRINGORGSOURCE_NONE, 0l, "", "", objectDao, td.getBarcodePaperType(), "", "", + ti.getWeight(),null,1 ,BooleanUtils.toBooleanDefaultIfNull(ti.getHaveUnSupplementMaterials(), false),ti.getIsUrgentTousse(),ti.getTousseInstancesAmountBelongToThisComboTousse(objectDao)); + + jsonArr.add(result); + } + + } + return jsonArr; + } + + @Override + public List getTousseSimpleVOsInReviewedBaskets(List reviewedBaskets, String sterilingType, String taskGroup, String extraOrder) { + String sterilingTypeList = ""; + if(StringUtils.isNotBlank(sterilingType)){ + String[] sterilingTypes = sterilingType.split(","); + for(int i=0;i tousseSimpleVOs = new ArrayList(); + if(CollectionUtils.isEmpty(reviewedBaskets)){ + return tousseSimpleVOs; + } + String orderBySql = null; + if(StringUtils.isNotBlank(extraOrder)){ + orderBySql = " order by " + extraOrder; + }else{ + orderBySql = ""; + } + String currentOrgUnitCode = AcegiHelper.getCurrentOrgUnitCode(); + StringBuffer reviewedBasketSql = new StringBuffer(); + if(reviewedBaskets.size() == 1){ + reviewedBasketSql.append(" =").append(reviewedBaskets.get(0).getId()); + }else{ + reviewedBasketSql.append(" in("); + for (int i = 0; i < reviewedBaskets.size(); i++) { + reviewedBasketSql.append(reviewedBaskets.get(i).getId()).append(","); + } + reviewedBasketSql.replace(reviewedBasketSql.length() - 1, reviewedBasketSql.length(), "").append(") "); + } + //科室供应室配置 + SupplyRoomConfig supplyRoomConfig = supplyRoomConfigManager.getSystemParamsObj(); + //关联加急对象的sql语句 + String sqlJoin_UrgentLevel = String.format(" left join %s ul on t.urgentLevel_id = ul.id ", UrgentLevel.class.getSimpleName()); + String sqlSelect_UrgentLevel = String.format(" ,ul.colorCode ulColorCode ,ul.grade ulGrade, ul.name ulName , ul.id ulId "); + + 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 sql = "select * from (select distinct t.reviewBasket_id,t.id id, t.depart depart, t.tousseName, td.name, td.includeImplant, b.barcode, t.sterilingType, t.sterilingMode," + + " t.reviewTime,t.isUrgentTousse,tdAncestor.isTraceable " + + ", tt.taskGroup, t.operator, t.reviewer " + + queryFixedBarcodeSql + sqlSelect_UrgentLevel + + " from tousseinstance t" + sqlJoin_UrgentLevel + + " , 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 " + reviewedBasketSql + + " and t.comboTousseInstanceId is null and td.tousseType in ('"+TousseDefinition.PACKAGE_TYPE_INSIDE+"','"+TousseDefinition.PACKAGE_TYPE_DISINFECTION+"','"+TousseDefinition.PACKAGE_TYPE_DRESSING+"','"+TousseDefinition.PACKAGE_TYPE_COMBO+"') " + //本供应室处理的器械包实例,但是录入代理灭菌单的器械包实例(只有代理科室才能灭菌) +// + " and t.orgUnitCoding='"+currentOrgUnitCode+"' and tt.orgUnitCode='"+currentOrgUnitCode+"'" + + " and (" + + "(t.proxyDisinfection_id is null and t.orgUnitCoding='"+currentOrgUnitCode+"' and tt.orgUnitCode='"+currentOrgUnitCode+"') or " + + "(t.proxyDisinfection_id is not null and t.proxyDisinfection_id in (select ip.id from invoicePlan ip where ip.handleDepartCoding='"+currentOrgUnitCode+"'))" + + ")" + + " and t.status <> '" + TousseInstance.STATUS_DISCARD + "' " + + (StringUtils.isNotBlank(taskGroup) ? String.format(" and tt.taskGroup = '%s' ", taskGroup) : "") + + (StringUtils.isNotBlank(sterilingTypeList) ? String.format(" and t.sterilingType in (%s) ", sterilingTypeList) : ""); + if(StringUtils.isNotBlank(taskGroup)){ + //外来器械包默认处理科室及任务组 + JSONObject foreignTousseHandleDepartAndTaskGroupJsonobject = supplyRoomConfig.getOneForeignTousseHandleDepartAndTaskGroupByDepartCode(AcegiHelper.getCurrentOrgUnitCode()); + //2、外来器械包、外来器械拆分小包 + if(foreignTousseHandleDepartAndTaskGroupJsonobject != null && StringTools.equals(taskGroup, foreignTousseHandleDepartAndTaskGroupJsonobject.optString("taskGroup"))){ + sql += " union all select t.reviewBasket_id,t.id id, t.depart depart, t.tousseName, td.name, td.includeImplant, b.barcode, t.sterilingType, t.sterilingMode," + + " t.reviewTime,t.isUrgentTousse, '"+ Constants.STR_YES +"' isTraceable " + + ", t.taskGroup, t.operator, t.reviewer" + + ",null fixedBarcode " + sqlSelect_UrgentLevel + + " from tousseinstance t " + sqlJoin_UrgentLevel + + " , barcodedevice b , TousseDefinition td " + + "where t.id = b.id and t.tousseDefinition_id=td.id and td.tousseType in ('"+TousseDefinition.PACKAGE_TYPE_FOREIGN+"','"+TousseDefinition.PACKAGE_TYPE_SPLIT+"') and t.reviewBasket_id " + + reviewedBasketSql + + " and t.orgUnitCoding='"+currentOrgUnitCode+"' " + + " and t.status <> '" + TousseInstance.STATUS_DISCARD + "'" + + (StringUtils.isNotBlank(sterilingTypeList) ? String.format(" and t.sterilingMode in (%s) ", sterilingTypeList) : " and (t.sterilingMode is null or t.sterilingMode = '') ) "); + } + //3、自定义器械包 + if(taskGroup.equals(supplyRoomConfig.getCustomTousseDefaultTaskGroup())){ + sql += " union all select reviewBasket_id,t.id id, t.depart depart, t.tousseName, td.name, td.includeImplant, b.barcode, t.sterilingType, t.sterilingMode," + + " t.reviewTime,t.isUrgentTousse , '"+ Constants.STR_YES +"' isTraceable " + + ", t.taskGroup, t.operator, t.reviewer" + + ",null fixedBarcode " + sqlSelect_UrgentLevel + + " from tousseinstance t" + sqlJoin_UrgentLevel + + " , barcodedevice b , TousseDefinition td " + + "where t.id = b.id and t.tousseDefinition_id=td.id and td.tousseType in ('"+TousseDefinition.PACKAGE_TYPE_CUSTOM+"') and t.reviewBasket_id " + + reviewedBasketSql + + " and t.orgUnitCoding='"+currentOrgUnitCode+"' " + + " and t.status <> '" + TousseInstance.STATUS_DISCARD + "'" + + (StringUtils.isNotBlank(sterilingTypeList) ? String.format(" and t.sterilingType in (%s) ", sterilingTypeList) : ""); + } + //4、外部代理灭菌 + sql += " union all select t.reviewBasket_id,t.id id, t.depart depart,t.tousseName, td.name, td.includeImplant, b.barcode, t.sterilingType, t.sterilingMode," + + " t.reviewTime,t.isUrgentTousse,tdAncestor.isTraceable " + + ", t.taskGroup, t.operator, t.reviewer" + + ",null fixedBarcode "+ sqlSelect_UrgentLevel + + "from tousseinstance t"+ sqlJoin_UrgentLevel + + " , 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 " + + reviewedBasketSql + + " and t.orgUnitCoding='"+currentOrgUnitCode+"' " + + " and t.status <> '" + TousseInstance.STATUS_DISCARD + "'" + + (StringUtils.isNotBlank(sterilingTypeList) ? String.format(" and t.sterilingType in (%s) ", sterilingTypeList) : ""); + }else{ + //2、外来器械包、外来器械拆分小包 + sql += " union all select t.reviewBasket_id,t.id id, t.depart depart, t.tousseName, td.name, td.includeImplant, b.barcode, t.sterilingType, t.sterilingMode," + + "t.reviewTime,t.isUrgentTousse , '"+ Constants.STR_YES +"' isTraceable " + + ", t.taskGroup, t.operator, t.reviewer" + + ",null fixedBarcode " + sqlSelect_UrgentLevel + + "from tousseinstance t " + sqlJoin_UrgentLevel + + " , barcodedevice b , TousseDefinition td " + + "where t.id = b.id and t.tousseDefinition_id=td.id and td.tousseType in ('"+TousseDefinition.PACKAGE_TYPE_FOREIGN+"','"+TousseDefinition.PACKAGE_TYPE_SPLIT+"') and t.reviewBasket_id " + + reviewedBasketSql + + " and t.orgUnitCoding='"+currentOrgUnitCode+"' " + + " and t.status <> '" + TousseInstance.STATUS_DISCARD + "'" + + (StringUtils.isNotBlank(sterilingTypeList) ? String.format(" and t.sterilingType in (%s) ", sterilingTypeList) : ""); + //3、自定义器械包 + sql += " union all select t.reviewBasket_id,t.id id, t.depart depart, t.tousseName, td.name, td.includeImplant, b.barcode, t.sterilingType, t.sterilingMode," + + "t.reviewTime,t.isUrgentTousse , '"+ Constants.STR_YES +"' isTraceable " + + ", t.taskGroup, t.operator, t.reviewer" + + ",null fixedBarcode " + sqlSelect_UrgentLevel + + " from tousseinstance t " + sqlJoin_UrgentLevel + + " , barcodedevice b , TousseDefinition td " + + "where t.id = b.id and t.tousseDefinition_id=td.id and td.tousseType in ('"+TousseDefinition.PACKAGE_TYPE_CUSTOM+"') and t.reviewBasket_id " + + reviewedBasketSql + + " and t.orgUnitCoding='"+currentOrgUnitCode+"' " + + " and t.status <> '" + TousseInstance.STATUS_DISCARD + "'" + + (StringUtils.isNotBlank(sterilingTypeList) ? String.format(" and t.sterilingType in (%s) ", sterilingTypeList) : ""); + //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 "; + } + sql += " union all select t.reviewBasket_id,t.id id, t.depart depart,t.tousseName, td.name, td.includeImplant, b.barcode, t.sterilingType, t.sterilingMode," + + "t.reviewTime,t.isUrgentTousse,tdAncestor.isTraceable," + + " t.taskGroup, t.operator, t.reviewer," + + firstBarcodeSql+ sqlSelect_UrgentLevel + + "from tousseinstance t"+ sqlJoin_UrgentLevel + + " , 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 " + + reviewedBasketSql + + " and t.orgUnitCoding='"+currentOrgUnitCode+"' " + + " and t.status <> '" + TousseInstance.STATUS_DISCARD + "'" + + (StringUtils.isNotBlank(sterilingTypeList) ? String.format(" and t.sterilingType in (%s) ", sterilingTypeList) : ""); + } + sql += ")tempTable " + orderBySql; + buildTousseSimpleVOs2(tousseSimpleVOs, sql); + return tousseSimpleVOs; + } + + private void buildTousseSimpleVOs2(List tousseSimpleVOs, String sql){ + ResultSet rs = objectDao.executeSql(sql); + try { + if(tousseSimpleVOs == null){ + tousseSimpleVOs = new ArrayList(); + } + while(rs.next()){ + TousseSimpleVO vo = new TousseSimpleVO(); + vo.setId(rs.getLong("id")); + vo.setTousseName(rs.getString("tousseName")); + vo.setBarcode(rs.getString("barcode")); + vo.setSterilingType(rs.getString("SterilingType")); + vo.setSterilingMode(rs.getString("SterilingMode")); + vo.setAmount(1); + vo.setTaskGroup(rs.getString("taskGroup")); + vo.setIsTraceable(rs.getString("isTraceable")); + vo.setFixedBarcode(rs.getString("fixedBarcode")); + vo.setOperator(rs.getString("operator")); + vo.setReviewTime(ForgonDateUtils.safelyFormatDate(rs.getTimestamp("reviewTime"), Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM, "")); + vo.setReviewer(rs.getString("reviewer")); + vo.setReviewBasketId(rs.getLong("reviewBasket_id")); + + tousseSimpleVOs.add(vo); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + } + + @SuppressWarnings("unchecked") + @Override + public JSONArray getWaitSterileGoods(String sterilisation, String taskGroup, String saveBarcodes){ + saveBarcodes = saveBarcodes == null ? "" : saveBarcodes; + List saveBarcodeList = new ArrayList(); + String[] barcodeArr = saveBarcodes.split(";"); + for(int i=0;i sterilisationList = objectDao.findByProperty(Sterilisation.class.getSimpleName(), "sterilizationMode", sterilizationMode); + if(CollectionUtils.isNotEmpty(sterilisationList)){ + for(int i=0;i reviewedBaskets = reviewedBasketManager.getDepartAllReviewedBasket(orgUnitCoding); + List newReviewedBaskets = new ArrayList(); + Map idToBasketMap = new HashMap(); + if(CollectionUtils.isNotEmpty(reviewedBaskets)){ + for (ReviewedBasket reviewedBasket : reviewedBaskets) { + if(saveBarcodeList.contains(reviewedBasket.getBarcode())){ + continue; + } + idToBasketMap.put(reviewedBasket.getId(), reviewedBasket); + newReviewedBaskets.add(reviewedBasket); + } + } + List tousseSimpleVOsInBaskets = this.getTousseSimpleVOsInReviewedBaskets(newReviewedBaskets, sterilisations, taskGroup, "id"); + if(CollectionUtils.isNotEmpty(tousseSimpleVOsInBaskets)){ + Map bMap= new LinkedHashMap(); + for (TousseSimpleVO vo : tousseSimpleVOsInBaskets) { + //是否需要汇总固定条码的包实例数量 + if(Constants.STR_NO.equals(vo.getIsTraceable())){ + String key = vo.getTousseName(); + if(bMap.containsKey(key)){ + JSONObject tousseJson = bMap.get(key); + tousseJson.put("amount", tousseJson.optInt("amount", 0) + 1); + bMap.put(key, tousseJson); + } else { + JSONObject tousseJson = new JSONObject(); + tousseJson.put("id", vo.getId()); + tousseJson.put("tousseName", vo.getTousseName()); + tousseJson.put("barcode", vo.getFixedBarcode()); + tousseJson.put("amount", vo.getAmount()); + tousseJson.put("sterilingMode", vo.getSterilingMode()); + tousseJson.put("taskGroup", vo.getTaskGroup()); + tousseJson.put("reviewTime", vo.getReviewTime()); + tousseJson.put("operator", vo.getOperator()); + tousseJson.put("reviewer", vo.getReviewer()); + tousseJson.put("reviewBasketBarcode", idToBasketMap.get(vo.getReviewBasketId()).getBarcode()); + tousseJson.put("reviewBasketName", idToBasketMap.get(vo.getReviewBasketId()).getContainerName()); + bMap.put(key, tousseJson); + } + } else { + String key = vo.getBarcode(); + JSONObject tousseJson = new JSONObject(); + tousseJson.put("id", vo.getId()); + tousseJson.put("tousseName", vo.getTousseName()); + tousseJson.put("barcode", vo.getBarcode()); + tousseJson.put("amount", vo.getAmount()); + tousseJson.put("sterilingMode", vo.getSterilingMode()); + tousseJson.put("taskGroup", vo.getTaskGroup()); + tousseJson.put("reviewTime", vo.getReviewTime()); + tousseJson.put("operator", vo.getOperator()); + tousseJson.put("reviewer", vo.getReviewer()); + tousseJson.put("reviewBasketBarcode", idToBasketMap.get(vo.getReviewBasketId()).getBarcode()); + tousseJson.put("reviewBasketName", idToBasketMap.get(vo.getReviewBasketId()).getContainerName()); + bMap.put(key, tousseJson); + } + } + + for (String key : bMap.keySet()) { + JSONObject tousseInBasket = bMap.get(key); + jsonArray.add(tousseInBasket); + } + } + + //2、当天审核的,未入筐的器械包 + List tousseSimpleVOsWithOutBasket = this.getTodayReviewedTousseInsWithOutBasketBySterilization(orgUnitCoding, false, null); + //List tousseSimpleVOsWithOutBasket = this.getAllReviewedTousseInstanceWithOutBasket(orgUnitCoding, null, null, null, null, null, null); + if(CollectionUtils.isNotEmpty(tousseSimpleVOsWithOutBasket)){ + for (TousseSimpleVO vo : tousseSimpleVOsWithOutBasket) { + // 只过滤符合灭菌方式的数据 + if(StringUtils.equals(sterilizationMode, vo.getSterilingMode())){ + if(saveBarcodeList.contains(vo.getBarcode())){ + continue; + } + JSONObject tousseJson = new JSONObject(); + tousseJson.put("id", vo.getId()); + tousseJson.put("tousseName", vo.getTousseName()); + tousseJson.put("barcode", vo.getBarcode()); + tousseJson.put("amount", vo.getAmount()); + tousseJson.put("sterilingMode", vo.getSterilingMode()); + tousseJson.put("taskGroup", vo.getTaskGroup()); + tousseJson.put("reviewTime", vo.getReviewTime()); + tousseJson.put("operator", vo.getOperator()); + tousseJson.put("reviewer", vo.getReviewer()); + tousseJson.put("reviewBasketBarcode", ""); + tousseJson.put("reviewBasketName", ""); + jsonArray.add(tousseJson); + } + } + } + return jsonArray; + } + }