Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/ReportSqlUtil.java =================================================================== diff -u -r35802 -r36865 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/ReportSqlUtil.java (.../ReportSqlUtil.java) (revision 35802) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/ReportSqlUtil.java (.../ReportSqlUtil.java) (revision 36865) @@ -85,7 +85,7 @@ * @return */ public String getInstrumentSetTypeSql(Set instrumentSetTypes){ - return " and td.ancestorid in (select istt.tousseDefinitionId from InstrumentSetType_TD istt " + return " and td.ancestorID in (select istt.tousseDefinitionId from InstrumentSetType_TD istt " + "join instrumentSetType ist on ist.id=istt.instrumentSetTypeId where "+ SqlUtils.getNonStringFieldInLargeCollectionsPredicate("ist.id", instrumentSetTypes) +") "; } Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/action/RecyclingRecordAction.java =================================================================== diff -u -r36650 -r36865 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/action/RecyclingRecordAction.java (.../RecyclingRecordAction.java) (revision 36650) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/action/RecyclingRecordAction.java (.../RecyclingRecordAction.java) (revision 36865) @@ -33,7 +33,6 @@ import org.apache.commons.collections4.map.HashedMap; import org.apache.commons.collections4.map.MultiValueMap; import org.apache.commons.lang.StringUtils; -import org.apache.commons.lang3.BooleanUtils; import org.apache.log4j.Logger; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; @@ -86,9 +85,9 @@ import com.forgon.disinfectsystem.entity.useRecord.UseRecord; import com.forgon.disinfectsystem.goodFilterConfig.service.GoodFilterConfigManager; import com.forgon.disinfectsystem.idcardinstance.util.IDCardInstanceUtils; -import com.forgon.disinfectsystem.materialerrordamage.service.MaterialErrorDamageDetailManager; import com.forgon.disinfectsystem.recyclingapplication.service.InvoicePlanManager; import com.forgon.disinfectsystem.recyclingapplication.service.RecyclingApplicationManager; +import com.forgon.disinfectsystem.recyclingapplication.vo.AwaitForRecyclingInvoicePlanParamVo; import com.forgon.disinfectsystem.recyclingerror.vo.RecyclingErrorVo; import com.forgon.disinfectsystem.recyclingrecord.service.RecyclingRecordManager; import com.forgon.disinfectsystem.recyclingrecord.vo.CustomIntoBasket; @@ -103,7 +102,6 @@ import com.forgon.disinfectsystem.tousse.imagefilemanager.service.ImageFileManager; import com.forgon.disinfectsystem.tousse.materialinstance.service.MaterialInstanceManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager; -import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseInstanceManager; import com.forgon.disinfectsystem.tousse.videomanager.service.VideoFileManager; import com.forgon.disinfectsystem.tousseitem.service.TousseItemManager; import com.forgon.disinfectsystem.version.VersionNotMatchException; @@ -123,6 +121,7 @@ import com.forgon.tools.string.StringTools; import com.forgon.tools.util.ConfigUtils; import com.forgon.tools.util.ForgonDateUtils; +import com.forgon.tools.util.RequestUtils; import com.forgon.tools.util.SqlUtils; import com.google.common.reflect.TypeToken; import com.opensymphony.xwork2.ModelDriven; @@ -178,10 +177,6 @@ private DepartmentAppTemplateManager departmentAppTemplateManager; - private MaterialErrorDamageDetailManager materialErrorDamageDetailManager; - - private TousseInstanceManager tousseInstanceManager; - private SqlFunctionsAdapter sqlFunctionsAdapter; private MaterialInstanceManager materialInstanceManager; private TousseItemManager tousseItemManager; @@ -225,16 +220,6 @@ public void setSqlFunctionsAdapter(SqlFunctionsAdapter sqlFunctionsAdapter) { this.sqlFunctionsAdapter = sqlFunctionsAdapter; } - - public void setTousseInstanceManager(TousseInstanceManager tousseInstanceManager) { - this.tousseInstanceManager = tousseInstanceManager; - } - - public void setMaterialErrorDamageDetailManager( - MaterialErrorDamageDetailManager materialErrorDamageDetailManager) { - this.materialErrorDamageDetailManager = materialErrorDamageDetailManager; - } - public void setDepartmentAppTemplateManager( DepartmentAppTemplateManager departmentAppTemplateManager) { this.departmentAppTemplateManager = departmentAppTemplateManager; @@ -1006,6 +991,9 @@ * 获取待回收申请单,供PC端的待回收列表页面调用 */ public void getAwaitForRecyclingInvoicePlan() { + //创建并设置参数值 + AwaitForRecyclingInvoicePlanParamVo paramVo = new AwaitForRecyclingInvoicePlanParamVo(); + RequestUtils.setPropertiesFromRequest(StrutsParamUtils.getRequest(), paramVo); //申请科室编码 String orgUnitCoding = StrutsParamUtils.getPraramValue("orgUnitCoding", ""); //回收科室分组的id @@ -1032,7 +1020,7 @@ //获取自定义显示的列 Set extraQuerys = CssdUtils.getSystemSetConfigByNameToSet("enableTableColumnCustomizationForTheWaitRecycleList"); Map resultMap = invoicePlanManager.getWaitingforRecyclingInvoicePlans(hospitalNumber,patient,loginUserDeptCoding,orgUnitCoding,appType,applyTimeOrder,operationRoom, - tousseGroupId,groupId,isQuerySum,pageIndex,pageSize); + tousseGroupId,groupId,isQuerySum,pageIndex,pageSize,paramVo); List invoicePlanList = new ArrayList(); JSONObject obj = new JSONObject(); if(MapUtils.isNotEmpty(resultMap)){ Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/vo/AwaitForRecyclingInvoicePlanParamVo.java =================================================================== diff -u --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/vo/AwaitForRecyclingInvoicePlanParamVo.java (revision 0) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/vo/AwaitForRecyclingInvoicePlanParamVo.java (revision 36865) @@ -0,0 +1,25 @@ +package com.forgon.disinfectsystem.recyclingapplication.vo; + +import com.forgon.tools.StrutsParamUtils; + +/** + * 待回收申请单参数vo + * + */ +public class AwaitForRecyclingInvoicePlanParamVo { + /** + * 器械包种类ids + */ + private String instrumentSetTypeIds; + + public String getInstrumentSetTypeIds() { + return instrumentSetTypeIds; + } + + public void setInstrumentSetTypeIds(String instrumentSetTypeIds) { + this.instrumentSetTypeIds = instrumentSetTypeIds; + } + + + +} Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/UrgentNeedGoodsProcessingCycleHelper.java =================================================================== diff -u -r36012 -r36865 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/UrgentNeedGoodsProcessingCycleHelper.java (.../UrgentNeedGoodsProcessingCycleHelper.java) (revision 36012) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/UrgentNeedGoodsProcessingCycleHelper.java (.../UrgentNeedGoodsProcessingCycleHelper.java) (revision 36865) @@ -20,6 +20,7 @@ import com.forgon.disinfectsystem.jasperreports.javabeansource.UrgentNeedGoodsProcessingCycle; import com.forgon.disinfectsystem.jasperreports.service.dataindex.DataIndex; import com.forgon.tools.MathTools; +import com.forgon.tools.StrutsParamUtils; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.db.InitDbConnection; import com.forgon.tools.hibernate.ObjectDao; @@ -33,13 +34,15 @@ @Component public class UrgentNeedGoodsProcessingCycleHelper { @Autowired - protected DateQueryAdapter dateQueryAdapter; + private DateQueryAdapter dateQueryAdapter; @Autowired - protected ObjectDao objectDao; + private ObjectDao objectDao; @Autowired - protected InitDbConnection dbConnection; + private InitDbConnection dbConnection; @Autowired - protected DataIndex dataIndex; + private DataIndex dataIndex; + @Autowired + private ReportSqlUtil reportSqlUtil; /** * 获取急用物品处理周期统计报表的数据 * @param startTime 开始时间格式如:2017-01-01 @@ -55,6 +58,13 @@ List firstColumnVos = new ArrayList(); Map firstColumnVoMap = new HashMap(); if (StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime)) { + String instrumentSetTypes = StrutsParamUtils.getPraramValue("instrumentSetTypeIds", null); + String instrumentSetTypesSql = null; + if(StringUtils.isNotBlank(instrumentSetTypes)){ + instrumentSetTypesSql = reportSqlUtil.getInstrumentSetTypeSql(SqlUtils.splitStringToSet(instrumentSetTypes, ";",false)); + }else{ + instrumentSetTypesSql = ""; + } String betweenSql = "and " + dateQueryAdapter.dateAreaSql("temp.回收时间", startTime, endTime, true); String tousseNameSql = ""; @@ -86,6 +96,7 @@ "left join Sterilizer sz on sr.sterilizer_id=sz.id " + "where ri.urgentAmount > 0 " + "and tit2.isUrgentTousse='是' " + + instrumentSetTypesSql + "and (ti.isTerminated is null or ti.isTerminated<>1) " + "union all " + //--2.使用记录转申请单后的预回收、回收、清洗交接 (排除装配的包实例数据) @@ -105,6 +116,7 @@ "join WashTransitionRecord wtr on wtr.id=wti.washTransitionRecordId " + "where ri.urgentAmount > 0 " + "and (ti.isTerminated is null or ti.isTerminated<>1) " + + instrumentSetTypesSql + "and tit.id not in (select lastTousseInstanceId from TousseInstance where lastTousseInstanceId is not null) " + "and ri.id not in (select sourceRecyclingItemId from TousseInstance where sourceRecyclingItemId is not null) " + "union all " + @@ -125,6 +137,7 @@ "join PackingTask pt on pt.sourceId=rr.id and pt.tousseDefinition_id=ri.tousseDefinitionId " + "where ri.urgentAmount > 0 " + "and (ti.isTerminated is null or ti.isTerminated<>1) " + + instrumentSetTypesSql + "and tit.id not in (select lastTousseInstanceId from TousseInstance where lastTousseInstanceId is not null) " + "and ri.id in (select sourceRecyclingItemId from TousseInstance where sourceRecyclingItemId is not null) " + "union all " + @@ -148,6 +161,7 @@ "where ri.urgentAmount > 0 " + "and tit2.isUrgentTousse='是' " + "and (ti.isTerminated is null or ti.isTerminated<>1) " + + instrumentSetTypesSql + "and b.barcode not in (select wti.tousseBarcode from WashTransitionItem wti where wti.tousseDefinitionId=ri.tousseDefinitionId and wti.tousseBarcode is not null) " + "union all " + //--4.使用记录转申请单后的预回收、回收 (排除清洗交接与装配的包实例数据) @@ -165,6 +179,7 @@ "join TousseTransitionRecord ttr on ttr.id=tti.tousseTransitionRecordId " + "where ri.urgentAmount > 0 " + "and (ti.isTerminated is null or ti.isTerminated<>1) " + + instrumentSetTypesSql + "and tit.id not in (select lastTousseInstanceId from TousseInstance where lastTousseInstanceId is not null) " + "and b.barcode not in (select wti.tousseBarcode from WashTransitionItem wti where wti.tousseDefinitionId=ri.tousseDefinitionId and wti.tousseBarcode is not null) " + "and ri.id not in (select sourceRecyclingItemId from TousseInstance where sourceRecyclingItemId is not null) " + @@ -184,6 +199,7 @@ "join PackingTask pt on pt.sourceId=rr.id and pt.tousseDefinition_id=ri.tousseDefinitionId " + "where ri.urgentAmount > 0 " + "and (ti.isTerminated is null or ti.isTerminated<>1) " + + instrumentSetTypesSql + "and tit.id not in (select lastTousseInstanceId from TousseInstance where lastTousseInstanceId is not null) " + "and b.barcode not in (select wti.tousseBarcode from WashTransitionItem wti where wti.tousseDefinitionId=ri.tousseDefinitionId and wti.tousseBarcode is not null) " + "and ri.id in (select sourceRecyclingItemId from TousseInstance where sourceRecyclingItemId is not null) " + @@ -207,6 +223,7 @@ "left join Sterilizer sz on sr.sterilizer_id=sz.id " + "where ri.urgentAmount > 0 " + "and (ti.isTerminated is null or ti.isTerminated<>1) " + + instrumentSetTypesSql + "and b.barcode not in (select tti.tousseBarcode from TousseTransitionItem tti where tti.tousseBarcode is not null) " + "and tit2.isUrgentTousse='是' " + "union all " + @@ -226,6 +243,7 @@ "where ri.urgentAmount > 0 " + "and (ti.isTerminated is null or ti.isTerminated<>1) " + "and b.barcode not in (select tti.tousseBarcode from TousseTransitionItem tti where tti.tousseBarcode is not null) " + + instrumentSetTypesSql + "and tit.id not in (select lastTousseInstanceId from TousseInstance where lastTousseInstanceId is not null) " + "and ri.id not in (select sourceRecyclingItemId from TousseInstance where sourceRecyclingItemId is not null) " + "union all " + @@ -246,6 +264,7 @@ "and (ti.isTerminated is null or ti.isTerminated<>1) " + "and b.barcode not in (select tti.tousseBarcode from TousseTransitionItem tti where tti.tousseBarcode is not null) " + "and tit.id not in (select lastTousseInstanceId from TousseInstance where lastTousseInstanceId is not null) " + + instrumentSetTypesSql + "and ri.id in (select sourceRecyclingItemId from TousseInstance where sourceRecyclingItemId is not null) " + "union all " + //--7.使用记录转申请单后的回收、装配 (排除预回收与清洗交接数据)(全部装配+部分装配) @@ -267,6 +286,7 @@ "and (ti.isTerminated is null or ti.isTerminated<>1) " + "and b.barcode not in (select tti.tousseBarcode from TousseTransitionItem tti where tti.tousseBarcode is not null) " + "and b.barcode not in (select wti.tousseBarcode from WashTransitionItem wti where wti.tousseDefinitionId=ri.tousseDefinitionId and wti.tousseBarcode is not null) " + + instrumentSetTypesSql + "and tit2.isUrgentTousse='是' " + "union all " + //--8.使用记录转申请单后的回收 (排除预回收、清洗交接与装配的包实例数据) @@ -285,6 +305,7 @@ "and b.barcode not in (select tti.tousseBarcode from TousseTransitionItem tti where tti.tousseBarcode is not null) " + "and b.barcode not in (select wti.tousseBarcode from WashTransitionItem wti where wti.tousseDefinitionId=ri.tousseDefinitionId and wti.tousseBarcode is not null) " + "and tit.id not in (select lastTousseInstanceId from TousseInstance where lastTousseInstanceId is not null) " + + instrumentSetTypesSql + "and ri.id not in (select sourceRecyclingItemId from TousseInstance where sourceRecyclingItemId is not null) " + "union all " + //--8.2.使用记录转申请单后的回收、查询有装配但未装完的未装配部分的数据 @@ -303,6 +324,7 @@ "and b.barcode not in (select tti.tousseBarcode from TousseTransitionItem tti where tti.tousseBarcode is not null) " + "and b.barcode not in (select wti.tousseBarcode from WashTransitionItem wti where wti.tousseDefinitionId=ri.tousseDefinitionId and wti.tousseBarcode is not null) " + "and tit.id not in (select lastTousseInstanceId from TousseInstance where lastTousseInstanceId is not null) " + + instrumentSetTypesSql + "and ri.id in (select sourceRecyclingItemId from TousseInstance where sourceRecyclingItemId is not null) " + "union all " + //--9.手工添加回收(或添加申请单后的回收)后的回收、装配 (排除预回收数据、手工添加的不会做预回收,清洗交接没有意义) @@ -320,6 +342,7 @@ "left join Sterilizer sz on sr.sterilizer_id=sz.id " + "where ri.urgentAmount > 0 " + "and (ti.isTerminated is null or ti.isTerminated<>1) " + + instrumentSetTypesSql + "and (ti.id is null or ti.id not in (select tousseItemId from TousseInstance where tousseItemId is not null)) " + "and tit2.isUrgentTousse='是' " + "union all " + @@ -334,7 +357,8 @@ "left join TousseItem ti on ti.recyclingApplication_ID=rr.recyclingApplication_id and ti.tousseDefinitionId=ri.tousseDefinitionId " + "where ri.urgentAmount > 0 " + "and (ti.isTerminated is null or ti.isTerminated<>1) " + - "and (ti.id is null or ti.id not in (select tousseItemId from TousseInstance where tousseItemId is not null)) " + + "and (ti.id is null or ti.id not in (select tousseItemId from TousseInstance where tousseItemId is not null)) " + + instrumentSetTypesSql + "and ri.id not in (select sourceRecyclingItemId from TousseInstance where sourceRecyclingItemId is not null) " + "and ri.tousseDefinitionId not in (select tousseDefinition_id from TousseInstance where recyclingRecordId=rr.id and sourceRecyclingItemId is null) " + "union all " + @@ -349,7 +373,8 @@ "join PackingTask pt on pt.sourceId=rr.id and pt.tousseDefinition_id=ri.tousseDefinitionId " + "where ri.urgentAmount > 0 " + "and (ti.isTerminated is null or ti.isTerminated<>1) " + - "and (ti.id is null or ti.id not in (select tousseItemId from TousseInstance where tousseItemId is not null)) " + + "and (ti.id is null or ti.id not in (select tousseItemId from TousseInstance where tousseItemId is not null)) " + + instrumentSetTypesSql + "and ri.id in (select sourceRecyclingItemId from TousseInstance where sourceRecyclingItemId is not null) " + ") temp2 " @@ -374,6 +399,7 @@ + " left join TousseItem ti on ti.recyclingApplication_ID=rr.recyclingApplication_id and ti.tousseDefinitionId=ri.tousseDefinitionId " + " where ri.urgentAmount > 0 and (ti.isTerminated is null or ti.isTerminated<>1) " + " and td.tousseType='"+ TousseDefinition.PACKAGE_TYPE_SPLIT +"' " + + instrumentSetTypesSql + ") temp where 1=1 " + betweenSql + tousseNameSql + whereSqlForOrgUnitCoding + tousseTypesSql + SqlUtils.getWhereSqlByfilterFieldAndStringValueAndSeparator2("temp.depart", departs, ",") + " order by temp.回收时间,temp.id,temp.物品名称 asc " Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordListSqlGenerator.java =================================================================== diff -u -r36614 -r36865 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordListSqlGenerator.java (.../RecyclingRecordListSqlGenerator.java) (revision 36614) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordListSqlGenerator.java (.../RecyclingRecordListSqlGenerator.java) (revision 36865) @@ -18,10 +18,13 @@ import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.directory.model.BarcodeDevice; import com.forgon.disinfectsystem.common.CssdUtils; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.becleanitem.ClassifiedItem; import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; import com.forgon.disinfectsystem.entity.recycledepartmentgroup.DepartmentGroup; +import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingItem; import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingRecord; +import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; import com.forgon.tools.SqlBuilder; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.db.InitDbConnection; @@ -95,9 +98,27 @@ map.put(invoicePlanPoName + ".type", appType); return buildRecyclingRecordFilterSql(map) + " and " + dateRangeSql + " and " + buildIdCardBarcodeSql(idCardBarcodeStr) + " and " + bulidTousseInstanceBarcodeSql(tousseInstanceBarcodeStr) + " and " + buildPackingSerialNumSql(packingSerialNum) + SqlUtils.getWhereSqlByfilterFieldAndStringValue(invoicePlanPoName + ".operationRoom", operationRoomStr) - + " and " + buildGroupIdSql(groupId) + buildOtherSql(jsonObj); + + " and " + buildGroupIdSql(groupId) + buildOtherSql(jsonObj) + buildInstrumentSetTypeIdsSql(jsonObj); } /** + * 器械包种类过滤 + * @param jsonObj + * @return + */ + private String buildInstrumentSetTypeIdsSql(JSONObject jsonObj){ + String instrumentSetTypeIds = JSONUtil.optString(jsonObj, "instrumentSetTypeIds", null); + if(StringUtils.isNotBlank(instrumentSetTypeIds)){ + return " and exists (select 1 from "+ RecyclingItem.class.getSimpleName() +" ri where recyclingRecord_id="+ recyclingRecordPoName +".id " + + " and ri.tousseDefinitionId in(select td.id from "+ TousseDefinition.class.getSimpleName() +" td " + + " where td.ancestorID in (select istt.tousseDefinitionId from InstrumentSetType_TD istt " + + " where istt.instrumentSetTypeId in(" + + "select ist.id from InstrumentSetType ist where " + + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("ist.id", SqlUtils.splitStringToSet(instrumentSetTypeIds, ";",false)) + +")))) "; + } + return ""; + } + /** * 其他个过滤条件 * @param jsonObj * @return Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/BorrowingReportReportHelper.java =================================================================== diff -u -r36218 -r36865 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/BorrowingReportReportHelper.java (.../BorrowingReportReportHelper.java) (revision 36218) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/BorrowingReportReportHelper.java (.../BorrowingReportReportHelper.java) (revision 36865) @@ -19,6 +19,7 @@ import com.forgon.databaseadapter.service.DateQueryAdapter; import com.forgon.disinfectsystem.common.CssdUtils; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; import com.forgon.disinfectsystem.entity.recyclingapplication.RecyclingApplication; import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingItem; @@ -27,10 +28,12 @@ import com.forgon.disinfectsystem.jasperreports.javabeansource.BorrowingRecordItemVo; import com.forgon.disinfectsystem.jasperreports.javabeansource.BorrowingRecordVo; import com.forgon.disinfectsystem.jasperreports.javabeansource.ReturnRecordItemVo; +import com.forgon.tools.StrutsParamUtils; import com.forgon.tools.date.DateTools; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.ObjectDao; import com.forgon.tools.json.JSONUtil; +import com.forgon.tools.util.SqlUtils; /** * 借还物品统计报表 */ @@ -40,6 +43,8 @@ private DateQueryAdapter dateQueryAdapter; @Autowired private ObjectDao objectDao; + @Autowired + private ReportSqlUtil reportSqlUtil; /** * 获取借物申请的汇总信息 * @param startDay 开始日期 @@ -55,10 +60,13 @@ if(StringUtils.isNotBlank(endDay)){ endDay += " 23:59:59"; } - // 查询满足搜索条件的借物单 - String sql = "select i.tousseName, sum(i.amount) amount from invoiceplan p,tousseItem i where " - + "p.id = i.recyclingApplication_ID and p.submitTime between " + String sql = "select i.tousseName, sum(i.amount) amount from invoiceplan p " + + "join tousseItem i on p.id = i.recyclingApplication_ID " + + "left join " + + TousseDefinition.class.getSimpleName() + + " td on td.id=i.tousseDefinitionId where " + + " p.submitTime between " + dateQueryAdapter.dateAdapter(startDay) + " and " + dateQueryAdapter.dateAdapter(endDay); @@ -71,6 +79,10 @@ if(StringUtils.isNotBlank(deptName)){ sql += " and p.depart = '"+deptName+"'"; } + String instrumentSetTypes = StrutsParamUtils.getPraramValue("instrumentSetTypeIds", null); + if(StringUtils.isNotBlank(instrumentSetTypes)){ + sql += reportSqlUtil.getInstrumentSetTypeSql(SqlUtils.splitStringToSet(instrumentSetTypes, ";",false)); + } sql += " group by i.tousseName"; List vos = new ArrayList(); ResultSet rs = objectDao.executeSql(sql); @@ -132,6 +144,16 @@ if(StringUtils.isNotBlank(deptName)){ sql += " and p.depart = '"+deptName+"'"; } + String instrumentSetTypes = StrutsParamUtils.getPraramValue("instrumentSetTypeIds", null); + if(StringUtils.isNotBlank(instrumentSetTypes)){ + sql += " and EXISTS (select id from TousseItem t where invoicePlan.id=p.id and t.tousseDefinitionId " + + " in(select td.id from "+ TousseDefinition.class.getSimpleName() + +" td where td.ancestorID in (select istt.tousseDefinitionId from InstrumentSetType_TD istt " + + " where istt.instrumentSetTypeId in(" + + "select ist.id from InstrumentSetType ist where " + + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("ist.id", SqlUtils.splitStringToSet(instrumentSetTypes, ";",false)) + +")))) "; + } // 按借物单的创建顺序升序排列,早的排在前面,新的排在后面 sql += " order by p.id asc"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/DepartmentMonthDetailHelper.java =================================================================== diff -u -r35797 -r36865 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/DepartmentMonthDetailHelper.java (.../DepartmentMonthDetailHelper.java) (revision 35797) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/DepartmentMonthDetailHelper.java (.../DepartmentMonthDetailHelper.java) (revision 36865) @@ -61,6 +61,8 @@ private Logger logger = Logger.getLogger(this.getClass()); @Autowired private SupplyRoomConfigManager supplyRoomConfigManager; + @Autowired + private ReportSqlUtil reportSqlUtil; /** * 查询明细核算月报数据 * @param showSendTime 显示发货时间 @@ -274,16 +276,12 @@ } if(enableToussePointsStatistics){ - addTousseDefinitionAtWhere = " left join TousseDefinition td on td.id = ii.tousseDefinitionId "; integralOftousseDefinitionSql = ",td.integral "; noQueryIntegralSql = ",0 integral "; - }else if(showSupplierNameInDetailedAccountingMonthlyReport){ - addTousseDefinitionAtWhere = " join TousseDefinition td on td.id = ii.tousseDefinitionId "; }else if(queryUnit){ - addTousseDefinitionAtWhere = " left join TousseDefinition td on td.id = ii.tousseDefinitionId "; unitSqlOftousseDefinitionSql = ",td.unit "; } - + addTousseDefinitionAtWhere = " left join TousseDefinition td on td.id = ii.tousseDefinitionId "; boolean queryTousseGroupName = false;//是否查询器械包分组 String nullTousseGroupNameSQL = ""; String tdcTousseGroupNameSQL = ""; @@ -607,6 +605,17 @@ //器械包 String tousseSql = null; String urgentSql = ""; + + String instrumentSetTypes = StrutsParamUtils.getPraramValue("instrumentSetTypeIds", null); + String instrumentSetTypesSql = null; + String onlyQueryTousse = null; + if(StringUtils.isNotBlank(instrumentSetTypes)){ + instrumentSetTypesSql = reportSqlUtil.getInstrumentSetTypeSql(SqlUtils.splitStringToSet(instrumentSetTypes, ";",false)); + onlyQueryTousse = " and 1=2 "; + }else{ + instrumentSetTypesSql = ""; + onlyQueryTousse = ""; + } if(queryUrgent){//加急要过滤到包实例 if(urgentLevel.equals("0")){//单选无 只查询不加急数据 urgentSql = " and ti.urgentLevel_id is null "; @@ -672,6 +681,7 @@ + tdTypeSql + tdNameFilterSql + urgentSql + + instrumentSetTypesSql + " and i.settleaccountsdepart is not null " + groupBySql; tousseSql += " union all " @@ -698,6 +708,7 @@ + tdTypeSql + tdNameFilterSql + urgentSql + + instrumentSetTypesSql + " and i.settleaccountsdepart is not null " + groupBySql + ") t " @@ -717,6 +728,7 @@ + departFilterSql + typeFilterSql + goodsNameFilterSql + + instrumentSetTypesSql + " and i.settleaccountsdepart is not null group by i.depart"+ tdcTousseGroupNameSQL + groupByIsendTimeOfShowTime + groupByIsendTime + unitSqlOftousseDefinitionSql +",i.settleAccountsDepart,ii.tousseType,ii.tousseName,ii.tousseDefinitionId " + tousseDefinitionOfSupplierNameSql + integralOftousseDefinitionSql + ")"; } //新的高值耗材(发货) @@ -740,6 +752,7 @@ + iDepartCodingSql + typeFilterSql + goodsNameFilterSql + + onlyQueryTousse + " and i.settleaccountsdepart is not null group by i.depart"+ groupByIsendTime +",i.settleAccountsDepart,ii.tousseType,case when egm.model is null then eg.name else eg.name "+ concatSymbolInDb +" '[' "+ concatSymbolInDb +" egm.model "+ concatSymbolInDb +" ']' end,ii.expensiveGoodsInstanceId,ei.expDate)"; //新的高值耗材(一键退库-即退货),如果所选物品类型为全部或高值耗材时, String orgUnitCodingSql = departCodingSet.size() > 0?" and " + SqlUtils.getStringFieldInLargeCollectionsPredicate("i.orgUnitCoding", departCodingSet):""; @@ -759,6 +772,7 @@ + departFilterSql + iDepartCodingSql + expensiveGoodsNameFilterSql + + onlyQueryTousse + " and i.settleaccountsdepart is not null group by i.depart"+ groupByIsendTimeOfShowTime + groupByIsendTime +",i.settleAccountsDepart,case when egm.model is null then eg.name else eg.name "+ concatSymbolInDb +" '[' "+ concatSymbolInDb +" egm.model "+ concatSymbolInDb +" ']' end,egi.expDate)"; } @@ -791,6 +805,7 @@ + departFilterSql + iDepartCodingSql + nameFilterSql + + onlyQueryTousse + " group by i.depart"+ groupByIsendTimeOfShowTime + groupByIsendTime +unitDGroupBySqlOfDiposableGoodsItem +",i.settleaccountsdepart,d.name,d.batch,dgbs.expDate "+ dgbsOfSupplierNameSql +") "; }else{ if(typeSearch.contains("高值耗材")){ @@ -811,6 +826,7 @@ + nameFilterSql + " and d.expensiveDisposablegoodsId is not null " + expensiveDisposablegoodsIdSql + + onlyQueryTousse + " group by i.depart"+ groupByIsendTimeOfShowTime + groupByIsendTime + unitDGroupBySqlOfDiposableGoodsItem +",i.settleaccountsdepart,d.name,d.batch,dgbs.expDate "+ dgbsOfSupplierNameSql +") "; } if(typeSearch.contains(TYPE_AUTO_DEDUCTION)){ @@ -830,6 +846,7 @@ + departFilterSql + iDepartCodingSql + nameFilterSql + + onlyQueryTousse + " group by i.depart"+ groupByIsendTimeOfShowTime + groupByIsendTime + unitDGroupBySqlOfDiposableGoodsItem +",i.settleaccountsdepart,d.name,d.batch,dgbs.expDate "+ dgbsOfSupplierNameSql +") "; } } @@ -851,6 +868,7 @@ + prDepartCodingSql + excludeDiposableGoodsItemSql + packingDisposableGoodsNameSql + + onlyQueryTousse // + expensiveDisposablegoodsSql + " group by pr.depart"+ groupByPrPackTimeOfShowTime + unitDGIGroupBySqlOfDiposableGoodsItem +",pr.orgUnitName,dgi.name,dgi.batch,dgbs.expDate "+ dgbsOfSupplierNameSql +") "; } @@ -880,6 +898,7 @@ + iDepartCodingSql + materialNameFilterSql + materialTypeFilterSql + + onlyQueryTousse + " group by i.depart" + tdcTousseGroupNameSQL + groupByIsendTimeOfShowTime + groupByIsendTime + unitDSqlOfMd +",i.settleaccountsdepart,case when td.name is null then ii.materialName else ii.materialName "+ concatSymbolInDb +" '(' "+ concatSymbolInDb +" td.name "+ concatSymbolInDb +"')' end,td.id) "; } if(StringUtils.isBlank(typeSearch) || "全部".equals(typeSearch) || typeSearch.contains("器械材料")){ @@ -898,6 +917,7 @@ + rrDepartCodingSql + materialNameFilterSql + materialTypeFilterSql + + onlyQueryTousse + " group by rr.depart"+ groupByRrReturnTimeOfShowTime + unitDSqlOfMd +",rr.settleAccountsDepart,ii.materialName) "; } lostMaterial = " union all (select "+ noMaterialAmountSql +"i.depart, i.settleAccountsDepart " + iOperationTimeSqlOfShowTime + noSendTime +noQuerySupplierName + noQueryIntegralSql +",i.materialName,sum(i.additionalAmount),sum(i.additionalAmount * i.materialCost)," @@ -909,6 +929,7 @@ + getHandleDeptCodeSql("i.handleDepartCode", isSupplyRoomUserOrIsExpensiveGoodsSupplyRoomUser, orgUnitCoding) + lostMaterialFilterSql + iDepartCodeSql + + onlyQueryTousse + "group by i.depart"+ groupByIOperationTimeOfShowTime + unitMSqlOfMd +",i.settleAccountsDepart,i.materialName ) "; String banQuery = " and 1 = 0 "; String damagedTousseAtCost = config.getDamagedTousseAtCost(); @@ -929,6 +950,7 @@ + getHandleDeptCodeSql("i.handleDepartCode", isSupplyRoomUserOrIsExpensiveGoodsSupplyRoomUser, orgUnitCoding) + damageFilterSql + iDepartCodeSql + + onlyQueryTousse + " group by i.depart" + groupByIOperationTimeOfShowTime + unitMSqlOfMd @@ -966,6 +988,7 @@ + returnGoodsFilterSql + urgentSql + rrSettleAccountsDepartCodingSql + + instrumentSetTypesSql +" and "+returnGoodsItemPredicate + " group by rr.depart" + tdcTousseGroupNameSQL; @@ -992,6 +1015,7 @@ + returnGoodsFilterSql + rrSettleAccountsDepartCodingSql +" and "+returnGoodsItemPredicate + + instrumentSetTypesSql + " group by rr.depart" + tdcTousseGroupNameSQL; if(queryUnit){ @@ -1019,6 +1043,7 @@ +" and "+receiveRecordItemPredicate + rrDepartCodingSql + supplyRoomDiposableGoodsFilterSql + + onlyQueryTousse + " group by rr.depart" + groupByRrTimeOfShowTime + unitDSqlOfMd @@ -1035,6 +1060,7 @@ +outEntryFilterSql + ogeTargetOrgUnitCodeSql +" and "+outEntryPredicate + + onlyQueryTousse + " group by oge.targetOrgUnitName, ged.goodsName,dgbs.batchNumber,dgbs.expDate "+ groupByOgeTimeOfShowTime + unitDGSqlOfDisposableGoods + dgbsOfSupplierNameSql +") "; // 盘亏出库 String stocktakeOutDiposableGoodsSql = " union all (select "+ noMaterialAmountSql +" oge.orgUnitName depart, oge.orgUnitName" +dgbsOfSupplierNameSql+" as settleaccountsdepart"+ ogeTimeSqlOfShowTime + noSendTime + noQueryIntegralSql +",ged.goodsName,sum(ged.amount)," @@ -1048,6 +1074,7 @@ +outEntryFilterSql + ogeOrgUnitCodeSql +" and "+outEntryPredicate + + onlyQueryTousse + " group by oge.orgUnitName, ged.goodsName,dgbs.batchNumber,dgbs.expDate" + groupByOgeTimeOfShowTime + unitDGSqlOfDisposableGoods + dgbsOfSupplierNameSql+") "; @@ -1077,15 +1104,15 @@ chargeDepartSql = String.format(" and %s ", SqlUtils.getStringFieldInLargeCollectionsPredicate("ci.orgUnitCode", departCodingSet)); } } - if(!queryUrgent && StringUtils.isNotBlank(typeSearch) && typeSearch.contains(TYPE_CHARGE)){ + if(StringUtils.isBlank(instrumentSetTypes) && !queryUrgent && StringUtils.isNotBlank(typeSearch) && typeSearch.contains(TYPE_CHARGE)){ String chargeSql = String.format(" union all select "+ noMaterialAmountSql +"ci.orgUnitName depart, ci.orgUnitName settleAccountsDepart" + crChargeTimeSqlOfShowTime + noSendTime + noQuerySupplierName + noQueryIntegralSql +",chargeItem name,1 amount,price settlementprice,0 settlementDiscountPrice,'收费项目' type "+ noQueryUnitSql +",'' batchNumber,NULL as expDate ,null as tousseDefinitionId " + nullTousseGroupNameSQL + " from ChargeRecordItem ci inner join ChargeRecord cr on cr.id=ci.chargeRecord_id where 1=1 %s %s %s %s group by ci.orgUnitName,chargeItem,price,chargeTime " + groupByCrChargeTimeOfShowTime , chargeDepartSql,chargeDateSql,chargeItemSql, ciOrgUnitCodeSql); sql += chargeSql; - }else if(!queryUrgent && StringUtils.isBlank(typeSearch)){ + }else if(StringUtils.isBlank(instrumentSetTypes) && !queryUrgent && StringUtils.isBlank(typeSearch)){ sql += String.format(" union all select "+ noMaterialAmountSql +"ci.orgUnitName depart,ci.orgUnitName settleAccountsDepart" + crChargeTimeSqlOfShowTime + noSendTime + noQuerySupplierName + noQueryIntegralSql +",chargeItem name,1 amount,price settlementprice,0 settlementDiscountPrice,'收费项目' type "+ noQueryUnitSql +",'' batchNumber,NULL as expDate ,null as tousseDefinitionId " + nullTousseGroupNameSQL + " from ChargeRecordItem ci inner join ChargeRecord cr on cr.id=ci.chargeRecord_id where 1=1 %s %s %s %s group by ci.orgUnitName,chargeItem,price,chargeTime " Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManager.java =================================================================== diff -u -r36548 -r36865 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManager.java (.../InvoicePlanManager.java) (revision 36548) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManager.java (.../InvoicePlanManager.java) (revision 36865) @@ -24,6 +24,7 @@ import com.forgon.disinfectsystem.entity.specialInfection.SpecialInfection; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; import com.forgon.disinfectsystem.recyclingapplication.vo.ApplicationGoodsVo; +import com.forgon.disinfectsystem.recyclingapplication.vo.AwaitForRecyclingInvoicePlanParamVo; import com.forgon.disinfectsystem.recyclingapplication.vo.ExpensiveGoodsInvoicePlanVo; import com.forgon.disinfectsystem.recyclingapplication.vo.ExpressInvoiceInvoicePlanVo; import com.forgon.disinfectsystem.recyclingapplication.vo.ExpressRecyclingVo; @@ -193,10 +194,13 @@ * @param isQuerySum 是否查询符合条件的申请单数和总科室数 * @param pageIndex 页码 * @param pageSize 每页条数 + * @param paramVo 部分参数 + * * return {invoicePlanAmount:申请单总数,departAmount:部门总数,invoicePlanList: 申请单列表} */ public Map getWaitingforRecyclingInvoicePlans(String hospitalNumber, String patient,String handleDepartCoding,String applicationOrgUnitCoding, - String applicationType,String applyTimeOrder,String operationRoom,String tousseGroupId, String groupId, boolean isQuerySum, Integer pageIndex, Integer pageSize); + String applicationType,String applyTimeOrder,String operationRoom,String tousseGroupId, String groupId, boolean isQuerySum, Integer pageIndex, Integer pageSize + , AwaitForRecyclingInvoicePlanParamVo paramVo); public List findApplicationItemVOListByInvoicePlanId( String id); Index: ssts-web/src/test/java/test/forgon/disinfectsystem/synthetic/allrecycle/service/RecyclingModule.java =================================================================== diff -u -r33656 -r36865 --- ssts-web/src/test/java/test/forgon/disinfectsystem/synthetic/allrecycle/service/RecyclingModule.java (.../RecyclingModule.java) (revision 33656) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/synthetic/allrecycle/service/RecyclingModule.java (.../RecyclingModule.java) (revision 36865) @@ -59,7 +59,7 @@ @Override public void runTask() { Map resultMap = invoicePlanManager.getWaitingforRecyclingInvoicePlans(null, null, AcegiHelper.getCurrentOrgUnitCode(), - null, null, null, null, null, null,false, 0, 1000); + null, null, null, null, null, null,false, 0, 1000, null); List list = new ArrayList(); List invoicePlanList = new ArrayList(); JSONObject obj = new JSONObject(); Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java =================================================================== diff -u -r36821 -r36865 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 36821) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 36865) @@ -111,6 +111,7 @@ import com.forgon.disinfectsystem.recyclingapplication.factory.DeliverManagerFactory; import com.forgon.disinfectsystem.recyclingapplication.updateLog.ApplicationLogManager; import com.forgon.disinfectsystem.recyclingapplication.vo.ApplicationGoodsVo; +import com.forgon.disinfectsystem.recyclingapplication.vo.AwaitForRecyclingInvoicePlanParamVo; import com.forgon.disinfectsystem.recyclingapplication.vo.ExpensiveGoodsInvoicePlanVo; import com.forgon.disinfectsystem.recyclingapplication.vo.ExpressInvoiceInvoicePlanVo; import com.forgon.disinfectsystem.recyclingapplication.vo.ExpressRecyclingVo; @@ -3927,7 +3928,8 @@ public Map getWaitingforRecyclingInvoicePlans( String hospitalNumber, String patient, String handleDepartCoding, String applicationOrgUnitCoding, String applicationType, String applyTimeOrder,String operationRoom, - String tousseGroupId, String groupId, boolean isQuerySum, Integer pageIndex, Integer pageSize) { + String tousseGroupId, String groupId, boolean isQuerySum, Integer pageIndex, Integer pageSize + , AwaitForRecyclingInvoicePlanParamVo paramVo) { boolean enableUrgentFunction = CssdUtils.getSystemSetConfigByNameBool("enableUrgentFunction", false); boolean enableExtendedInformationOfUrgentFunction = configHelper.getEnableExtendedInformationOfUrgentFunction(enableUrgentFunction , CssdUtils.getSystemSetConfigByNameBool("recyclingOnlyInTheCorrespondingApplicationFormWhenScanningUniqueBarcode", false)); @@ -4021,6 +4023,22 @@ //只查询包含有申请项的隐藏回收字段为空或者隐藏回收字段不为是的申请单 whereSql += " and po.id in (select invoicePlan.id from " + TousseItem.class.getSimpleName() + " where hideRecycling is null or hideRecycling <> '"+ Constants.STR_YES +"')"; + if(paramVo != null){ + if(StringUtils.isNotBlank(paramVo.getInstrumentSetTypeIds())){ + whereSql += " and exists (select 1 from " + + TousseItem.class.getSimpleName() + +" ti where recyclingApplication_ID=po.id " + + " and ti.tousseDefinitionId in(select td.id from " + + TousseDefinition.class.getSimpleName() + +" td where td.ancestorID in (select istt.tousseDefinitionId from " + + InstrumentSetType_TD.class.getSimpleName() + +" istt where istt.instrumentSetTypeId in(" + + "select ist.id from "+ InstrumentSetType.class.getSimpleName() + +" ist where " + + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("ist.id", SqlUtils.splitStringToSet(paramVo.getInstrumentSetTypeIds(), ";",false)) + +")))) "; + } + } String orderBySql = null; if(StringUtils.isBlank(applyTimeOrder)){ orderBySql = " order by "+ extraOrder +" po.sequence,po.departCoding,po.applicationTime ASC";