Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/dwr/table/TousseInstanceTableManager.java =================================================================== diff -u -r33314 -r33904 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/dwr/table/TousseInstanceTableManager.java (.../TousseInstanceTableManager.java) (revision 33314) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/dwr/table/TousseInstanceTableManager.java (.../TousseInstanceTableManager.java) (revision 33904) @@ -17,7 +17,7 @@ import java.util.List; import java.util.Map; import java.util.Set; -import java.util.stream.Collectors; +import java.util.UUID; import net.sf.json.JSONArray; import net.sf.json.JSONObject; @@ -29,6 +29,7 @@ import org.apache.log4j.Logger; import com.fasterxml.jackson.databind.ObjectMapper; +import com.forgon.Constants; import com.forgon.component.grid.GridManager; import com.forgon.databaseadapter.service.DateQueryAdapter; import com.forgon.directory.acegi.tools.AcegiHelper; @@ -43,6 +44,7 @@ import com.forgon.disinfectsystem.entity.basedatamanager.materialdefinition.MaterialDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; import com.forgon.disinfectsystem.entity.basedatamanager.sterilizer.Sterilizer; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.ImageVideoObjectIdTable; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.WareHouse; @@ -62,8 +64,10 @@ import com.forgon.tools.SqlBuilder; import com.forgon.tools.date.DateTools; import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.db.InitDbConnection; import com.forgon.tools.hibernate.ObjectDao; import com.forgon.tools.string.StringTools; +import com.forgon.tools.util.ConfigUtils; import com.forgon.tools.util.ForgonDateUtils; import com.forgon.tools.util.SqlUtils; @@ -95,7 +99,13 @@ protected Logger logger = Logger.getLogger(this.getClass()); private WareHouseManager wareHouseManager; + + private InitDbConnection dbConnection; + public void setDbConnection(InitDbConnection dbConnection) { + this.dbConnection = dbConnection; + } + public void setWareHouseManager(WareHouseManager wareHouseManager) { this.wareHouseManager = wareHouseManager; } @@ -438,6 +448,70 @@ sqlBuilder.append(" AND po.comboTousseInstanceId is null "); } + //加急级别查询 + //ZJYY-100 器械包信息模块的查询项新增扩展项【加急级别】和【影像记录】 + String urgentLevel = sqlWhereParamMap.get("urgentLevel"); + if(StringUtils.isNotBlank(urgentLevel) && expandColoumnsConfigIncludeFieldName("expandQueryFieldsConfigOfTousseInfoQuery", "urgentLevel")){ + if(StringUtils.contains(urgentLevel, "全部")){ + sqlBuilder.append(" AND po.urgentLevel is not null "); + }else{ + String[] urgentLevelIDArr = urgentLevel.split(","); + List urgentLevelIDList = new ArrayList(); + for (String idStr : urgentLevelIDArr) { + if(DatabaseUtil.isPoIdValid(idStr)){ + urgentLevelIDList.add(Long.valueOf(idStr)); + } + } + if(CollectionUtils.isNotEmpty(urgentLevelIDList)){ + sqlBuilder.append(" AND " + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.urgentLevel.id", urgentLevelIDList)); + } + } + } + + //影像记录查询 + //ZJYY-100 器械包信息模块的查询项新增扩展项【加急级别】和【影像记录】 + String tempImgVideoObjectIdTable = ImageVideoObjectIdTable.class.getSimpleName(); + String tempTableUUID = ""; + String videoAndPictureRecording = sqlWhereParamMap.get("videoAndPictureRecording"); + if(expandColoumnsConfigIncludeFieldName("expandQueryFieldsConfigOfTousseInfoQuery", "videoAndPictureRecording") && (StringUtils.equals(videoAndPictureRecording, Constants.HAS_TYPE_NO) + || StringUtils.equals(videoAndPictureRecording, Constants.HAS_TYPE_YES))){ + tempTableUUID = UUID.randomUUID().toString(); + String objectIdSql = " po.objectId "; + String insertSql = "insert into " + tempImgVideoObjectIdTable + " (Objectid, uuid) select distinct objectId, '" + tempTableUUID + "' "; + if(dbConnection.isOracle()){ + insertSql = "insert into " + tempImgVideoObjectIdTable + " (id, Objectid, uuid) select HIBERNATE_SEQUENCE.Nextval, objectId, '" + tempTableUUID + "' "; + objectIdSql = " to_number(po.objectId) "; + } + insertSql = insertSql + " from (" + + "select " + objectIdSql + " objectId from ImageFile po where po.objectId is not null and po.imageType in ('装配采集图片','器械包装配采集图片')" + + "union all " + + "select ti.id objectId from ImageFile po join TousseInstance ti on ti.tousseDefinition_id = po.objectId and po.objectId is not null and po.imageType in ('申请采集图片') " + + "union all " + + "select " + objectIdSql + " objectId from ImageFile po join RecyclingItem ri on po.objectId = ri.id join TousseInstance ti on ti.tousseDefinition_id = ri.tousseDefinitionId where po.objectId is not null and po.imageType ='回收采集图片' " + + "union all " + + "select " + objectIdSql + " objectId from VideoFile po where po.objectId is not null and po.videoType = '装配采集视频' " + + "union all " + + "select ti.id objectId from VideoFile v join TousseDefinition td on td.id = v.objectId join TousseInstance ti on ti.tousseDefinition_id = td.id where v.objectId is not null and v.videoType = '申请采集视频' " + + "union all " + + "select ti.id objectId from VideoFile v join RecyclingItem ri on ri.id = v.objectId join TousseInstance ti on ti.tousseDefinition_id = ri.tousseDefinitionId where v.objectId is not null and v.videoType = '回收采集视频' " + //外来器械拆分小包的查询 + + "union all " + + "select ti.id objectId from ImageFile po join TousseDefinition td on td.parentID = po.objectId join TousseInstance ti on ti.tousseDefinition_id = td.id where po.imageType = '申请采集图片' and td.tousseType = '外来器械拆分小包' " + + "union all " + + "select ti.id objectId from ImageFile po join RecyclingItem ri on ri.tousseDefinitionId = po.objectId join TousseDefinition td on td.parentID = ri.tousseDefinitionId join TousseInstance ti on ti.tousseDefinition_id = td.id where po.imageType = '回收采集图片' and td.tousseType = '外来器械拆分小包' " + + "union all " + + "select ti.id objectId from VideoFile v join RecyclingItem ri on ri.tousseDefinitionId = v.objectId join TousseDefinition td on td.parentID = ri.tousseDefinitionId join TousseInstance ti on ti.tousseDefinition_id = td.id where v.videoType = '回收采集视频' and td.tousseType = '外来器械拆分小包' " + + "union all " + + "select ti.id objectId from VideoFile v join TousseDefinition td on td.parentID = v.objectId join TousseInstance ti on ti.tousseDefinition_id = td.id where v.videoType = '申请采集视频' and td.tousseType = '外来器械拆分小包' " + + ") rs"; + objectDao.excuteSQL(insertSql); + if(StringUtils.equals(videoAndPictureRecording, Constants.HAS_TYPE_YES)){ + sqlBuilder.append(" and exists (select objectId from " + tempImgVideoObjectIdTable + " where objectId is not null and objectId = po.id) "); + }else if(StringUtils.equals(videoAndPictureRecording, Constants.HAS_TYPE_NO)){ + sqlBuilder.append(" and not exists (select objectId from " + tempImgVideoObjectIdTable + " where objectId is not null and objectId = po.id) "); + } + } + /*由于不追溯的器械包都会生成一个固定条码的包实例,这些包实例的operationTime都是null, 器械包信息页面oracle数据库按operationTime降排时默认null都排到最前面了,所以增加此过滤条件*/ sqlBuilder.append(" AND operationTime is not null "); @@ -551,6 +625,8 @@ Set packingRecordIds = new HashSet();//装配记录id Set idCardInstanceIDs = new HashSet();//标识牌id Set useRecordIDs = new HashSet();//使用记录id + //ZJYY-86 器械包信息模块的信息列表表格新增扩展列【加急级别】和【影像记录】 + boolean includeVideoAndPictureRecording = expandColoumnsConfigIncludeFieldName("expandColoumnsConfigOfTousseInfoList", "videoAndPictureRecording"); for (TousseInstance ti : list) { if(DatabaseUtil.isPoIdValid(ti.getInvoicePlanID())){ invoicePlanIds.add(ti.getInvoicePlanID()); @@ -570,12 +646,59 @@ if(DatabaseUtil.isPoIdValid(ti.getUseRecord_id())){ useRecordIDs.add(ti.getUseRecord_id()); } + if(includeVideoAndPictureRecording){ + //ZJYY-100 器械包信息模块的查询项新增扩展项【加急级别】和【影像记录】 + if(ti.calculateVideoAndPictureAmount(objectDao) > 0){ + ti.setVideoAndPictureRecording(Constants.HAS_TYPE_YES); + } + } } + + if(expandColoumnsConfigIncludeFieldName("expandQueryFieldsConfigOfTousseInfoQuery", "videoAndPictureRecording") && (StringUtils.equals(videoAndPictureRecording, Constants.HAS_TYPE_NO) + || StringUtils.equals(videoAndPictureRecording, Constants.HAS_TYPE_YES))){ + try { + //删除临时表 + if(StringUtils.isNotBlank(tempTableUUID)){ + objectDao.excuteSQL(" delete from " + tempImgVideoObjectIdTable + " where UUID = '" + tempTableUUID + "'"); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + // 统一修改返回的数据 return updateReturnInfo(gridManager.converJsonString(totalResults, list, sql,TousseInstance.filterProperties),wareHouseId2s,packingRecordIds,invoiceIds,invoicePlanIds,idCardInstanceIDs,useRecordIDs); } /** + * 判断配置项是否包含相应的元素名称 + * @param configName 配置项名称 + * @param fieldName 元素名称 + * @return + */ + private boolean expandColoumnsConfigIncludeFieldName(String configName,String fieldName) { + try { + String expandColoumnsConfigOfTousseInfoList = ConfigUtils.getSystemSetConfigByName(configName, ""); + if(StringUtils.isNotBlank(expandColoumnsConfigOfTousseInfoList)){ + JSONArray array = JSONArray.fromObject(expandColoumnsConfigOfTousseInfoList); + if(array != null && array.size() > 0){ + for(int i=0;i