Index: ssts-web/src/main/webapp/jasperRtp/steAmountEachBranchReport.jasper =================================================================== diff -u Binary files differ Index: ssts-web/src/main/webapp/jasperRtp/steAmountEachBranchReport.jrxml =================================================================== diff -u --- ssts-web/src/main/webapp/jasperRtp/steAmountEachBranchReport.jrxml (revision 0) +++ ssts-web/src/main/webapp/jasperRtp/steAmountEachBranchReport.jrxml (revision 34356) @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <band height="91" splitType="Stretch"> + <textField> + <reportElement uuid="ca358ad0-a064-4fbc-a5b2-ccd593e955f7" mode="Opaque" x="0" y="20" width="540" height="35"/> + <textElement textAlignment="Center" verticalAlignment="Middle"> + <font size="18" isBold="true"/> + </textElement> + <textFieldExpression><![CDATA[$P{title}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="ca358ad0-a064-4fbc-a5b2-ccd593e955f7" mode="Opaque" x="0" y="55" width="540" height="35"/> + <box> + <pen lineWidth="0.0"/> + <topPen lineWidth="0.0"/> + <leftPen lineWidth="0.0"/> + <bottomPen lineWidth="0.0"/> + <rightPen lineWidth="0.0"/> + </box> + <textElement textAlignment="Center" verticalAlignment="Top"> + <font size="10" isBold="true"/> + </textElement> + <textFieldExpression><![CDATA[$P{dateStr}]]></textFieldExpression> + </textField> + </band> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java =================================================================== diff -u -r34262 -r34356 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 34262) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 34356) @@ -27313,4 +27313,399 @@ + " and " + dateQueryAdapter.dateAreaSql("qmi.datetime", startTime, endTime); return objectDao.getALongNum(sql, "amount"); } + @Override + public List getSteAmountEachBranchReportDate( + String startTime, String endTime) { + startTime += " 00:00:00"; + endTime += " 23:59:59"; + List resultList = new ArrayList(); + String sql1 = "SELECT inn.bhName,inn.id FROM " + + " (SELECT t.id, t.bhName, ROW_NUMBER() OVER(PARTITION BY t.id ORDER BY t.id ) num " + + " FROM ( select id, bhName, count(*) count from (select te.id, " + + " (select bh.name from brancheOfHospital bh " + + " join OrgUnitGroup og on og.id = bh.orgUnitGroupId " + + " join Org_OrgGroup oog on oog.orgGroupId = og.id " + + " join OrgUnit ou on ou.id = oog.orgUnitId " + + " where ou.name = te.depart) bhName " + + " from (select ip.depart, sr.id from SterilizationRecord sr " + + " join TousseInstance ti on ti.sterilizationRecord_id = sr.id " + + " join invoicePlan ip on ip.id = ti.invoicePlanID " + + " where ti.foreignProxyItem_id is not null " + + " union all select ip.depart, sr.id " + + " from SterilizationRecord sr join TousseInstance ti on ti.sterilizationRecord_id = sr.id " + + " join invoicePlan ip on ip.id = ti.proxyDisinfection_id " + + " where ti.proxyDisinfection_id is not null " + + " union all select ti.depart, sr.id from SterilizationRecord sr " + + " join TousseInstance ti on ti.sterilizationRecord_id = sr.id " + + " where ti.proxyDisinfection_id is null and ti.foreignProxyItem_id is null " + + " ) te ) te2 where te2.bhname in ('芳村分院', '二沙分院', '大学城分院') group by id, bhName " + + " order by id desc, count desc, case when bhName = '大学城分院' then 3 when bhName = '芳村分院' then 2 when bhName = '二沙分院' then 1 else 0 end desc) " + + " t ) inn WHERE inn.num=1 "; + String sql = " select sql1Table.bhName,sout.owngroup,count(*) amount from SterilizationRecord srout " + + " join sterilizer sout on sout.id = srout.sterilizer_id " + + " join ("+ sql1 +") sql1Table on sql1Table.id=srout.id " + + " where sout.owngroup in('高温灭菌炉','低温灭菌炉') and srout.endDate between " + + dateQueryAdapter.dateAdapter(startTime) + " and " + + dateQueryAdapter.dateAdapter(endTime) + + " group by sql1Table.bhName,sout.owngroup "; + ResultSet rs = null; + SteAmountEachBranchReportVo vo1 = new SteAmountEachBranchReportVo();//大学城分院 + SteAmountEachBranchReportVo vo2 = new SteAmountEachBranchReportVo();//芳村分院 + SteAmountEachBranchReportVo vo3 = new SteAmountEachBranchReportVo();//二沙分院 + vo1.setRowNum(1); + vo1.setBrancheOfHospitalName("大学城"); + vo2.setRowNum(2); + vo2.setBrancheOfHospitalName("芳村"); + vo3.setRowNum(3); + vo3.setBrancheOfHospitalName("二沙"); + resultList.add(vo1); + resultList.add(vo2); + resultList.add(vo3); + try { + String sql2 = getSteAmountEachBranchReportDataSql(startTime, endTime); + rs = objectDao.executeSql(sql); + while(rs.next()){ + String bhname = rs.getString("bhname"); + Long amount = rs.getLong("amount"); + String owngroup = rs.getString("owngroup"); + if("大学城分院".equals(bhname)){ + setOwngroupAmount(owngroup, amount, vo1); + }else if("芳村分院".equals(bhname)){ + setOwngroupAmount(owngroup, amount, vo2); + }else if("二沙分院".equals(bhname)){ + setOwngroupAmount(owngroup, amount, vo3); + } + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + ResultSet rs2 = null; + try { + rs = objectDao.executeSql(getSteAmountEachBranchReportDataSql(startTime, endTime)); + while(rs.next()){ + String bhname = rs.getString("bhName"); + Long totalAmount = rs.getLong("totalAmount"); + if("大学城分院".equals(bhname)){ + vo1.setTotalAmountOfBags(totalAmount); + }else if("芳村分院".equals(bhname)){ + vo2.setTotalAmountOfBags(totalAmount); + }else if("二沙分院".equals(bhname)){ + vo3.setTotalAmountOfBags(totalAmount); + } + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + return resultList; + } + /** + * 根据灭菌炉分组给vo对应的字段赋值 + * @param owngroup 灭菌炉分组 + * @param amount 数量 + * @param vo + */ + private void setOwngroupAmount(String owngroup, Long amount, SteAmountEachBranchReportVo vo){ + if("高温灭菌炉".equals(owngroup)){ + vo.setHighPressureFurnacesAmount(amount); + }else{ + vo.setGasFurnacesAmount(amount); + } + } + /** + * 各分院消毒炉次及各类包统计表获取各类包数量的sql + * @param startDate 开始时间 + * @param endDate 结束时间 + * @return + */ + private String getSteAmountEachBranchReportDataSql(String startDate, String endDate){ + OrgUnit orgUnit = orgUnitManager.getByName("大院供应室"); + String orgUnitCoding = orgUnit.getOrgUnitCoding(); + String betweenSql = String.format(" between %s and %s ", dateQueryAdapter.dateAdapter(startDate),dateQueryAdapter.dateAdapter(endDate));; + //统计处理科室为【大院供应室】灭菌炉分组为【低温灭菌炉】的【炉次】总数X 1 + String sql = "select bhName,sum(amount) totalAmount from ( select (select bh.name from brancheOfHospital bh " + + "join OrgUnitGroup og on og.id = bh.orgUnitGroupId join Org_OrgGroup oog on oog.orgGroupId = og.id" + + " join OrgUnit ou on ou.id = oog.orgUnitId " + + " where ou.name = t2.depart) bhName,amount from ( "; + sql += "select rr.depart,sum(ri.amount) amount from RecyclingRecord rr " + + "join RecyclingItem ri on ri.recyclingRecord_id=rr.id " + + "join TousseDefinition td on td.id=ri.tousseDefinitionId join TousseDefinition tdc on tdc.id=td.ancestorID " + + "where tdc.taskGroup='器械二班' and rr.recyclingTime " + + betweenSql + + "and rr.orgUnitCoding='" + + orgUnitCoding + + "' " + + getInstrumentSetTypeSql("针头","in") + + " group by rr.depart "; + //统计处理科室为【大院供应室】装配任务组为【泡镊桶班】器械包种类为【临床各类包】(器械包种类为【治疗包】除外)复用物品【回收】的【件数】X 1 + sql += " union all "; + sql += "select rr.depart,sum(ri.amount * ri.materialAmount) amount from RecyclingRecord rr join RecyclingItem ri on ri.recyclingRecord_id=rr.id " + + "join TousseDefinition td on td.id=ri.tousseDefinitionId join TousseDefinition tdc on tdc.id=td.ancestorID " + + "where tdc.taskGroup='泡镊桶班' and rr.orgUnitCoding='" + +orgUnitCoding + + "' " + + "and rr.recyclingTime " + + betweenSql + + getInstrumentSetTypeSql("临床各类包","in") + + getInstrumentSetTypeSql("治疗包", "not in") + + " group by rr.depart "; + //统计处理科室为【大院供应室】装配任务组为【泡镊桶班】器械包种类为【治疗包】的复用物品【回收】的【包数】X 1 + sql += " union all "; + sql += "select rr.depart,sum(ri.amount) amount from RecyclingRecord rr " + + "join RecyclingItem ri on ri.recyclingRecord_id=rr.id " + + "join TousseDefinition td on td.id=ri.tousseDefinitionId join TousseDefinition tdc on tdc.id=td.ancestorID " + + "where tdc.taskGroup='泡镊桶班' and rr.recyclingTime " + + betweenSql + + "and rr.orgUnitCoding='" + + orgUnitCoding + + "' " + + getInstrumentSetTypeSql("治疗包","in") + + " group by rr.depart "; + //统计处理科室为【大院供应室】装配任务组为【剪刀班】器械包种类为【剪刀器械A类】的复用物品【回收】的【件数】X 1 + sql += " union all "; + sql += "select rr.depart,sum(ri.amount * ri.materialAmount) amount from RecyclingRecord rr join RecyclingItem ri on ri.recyclingRecord_id=rr.id " + + "join TousseDefinition td on td.id=ri.tousseDefinitionId join TousseDefinition tdc on tdc.id=td.ancestorID " + + "where tdc.taskGroup='剪刀班' and rr.orgUnitCoding='" + +orgUnitCoding + + "' and rr.recyclingTime " + + betweenSql + + getInstrumentSetTypeSql("剪刀器械A类","in") + + " group by rr.depart "; + //统计处理科室为【大院供应室】装配任务组为【剪刀班】器械包类型为【聚合包】器械包种类【剪刀自由装配包】的复用物品【装配】的【包数】X 1 + sql += " union all "; + sql += "select ti.depart,count(*) amount " + + " from TousseInstance ti inner join TousseDefinition td on ti.comboTousseDefinitionId = td.id " + + "join TousseDefinition tdc on tdc.id=td.ancestorid " + + "join CssdHandleTousses ch on ch.toussedefinitionid=tdc.id " + + "where ti.comboTousseInstanceId is null and ti.comboTousseDefinitionId is not null " + + " and ch.taskGroup='剪刀班' and ti.orgUnitCoding='" + +orgUnitCoding + + "' and ti.operationTime " + + betweenSql + + " and tdc.id in (select istt.tousseDefinitionId from InstrumentSetType_TD istt " + + "join instrumentSetType ist on ist.id=istt.instrumentSetTypeId where ist.name='剪刀自由装配包')" + + " group by ti.depart "; + //统计处理科室为【大院供应室】装配任务组为【出机班】器械包种类为【止血带(对换)】的复用物品【回收】的【件数】/ 10 + sql += " union all "; + sql += "select rr.depart,sum(ri.amount * ri.materialAmount)/10 amount from RecyclingRecord rr join RecyclingItem ri on ri.recyclingRecord_id=rr.id " + + "join TousseDefinition td on td.id=ri.tousseDefinitionId join TousseDefinition tdc on tdc.id=td.ancestorID " + + "where tdc.taskGroup='出机班' and rr.orgUnitCoding='" + +orgUnitCoding + + "' and rr.recyclingTime " + + betweenSql + + getInstrumentSetTypeSql("止血带(对换)","in") + + " group by rr.depart "; + ReportQueryParams params = new ReportQueryParams(objectDao); + params.betweenSql = betweenSql; + params.querySupplyRoom = orgUnitCoding; + //1.计算申请科室分组为【内部代理灭菌】的【代理灭菌】处理【包数】 2.计算申请科室分组为【临床外部代理灭菌】的【外部代理灭菌】处理【包数】 取数为两者总和 + params.extraQuery = " and ( 1=1 " + + getProxydisinfectionOrgUnitGroupSql("内部代理灭菌") + + " or 1=1 " + + getForeignproxyOrgUnitGroupSql("临床外部代理灭菌") + + ") "; + params.extraSelectColumns = " ,case when proxydisinfection_id is not null then (select depart from invoicePlan where id=ti.proxydisinfection_id ) else ti.depart end depart "; + params.extraGroupBy = " group by ti.proxydisinfection_id,ti.depart "; + //灭菌记录 + String sql2 = String.format(" union all select tl.depart,sum(tl.amount) amount from (" + +dataIndex.getWorkAmountByPackageSQL("灭菌数量", params) + + ") tl group by tl.depart "); + + //统计处理科室为【大院供应室】灭菌炉分组为【低温灭菌炉】的【包数】X 1 + sql += " union all "; + params.extraQuery = " and sr.sterilizer_id in(select id from Sterilizer where ownGroup='低温灭菌炉') "; + //灭菌记录 + sql += String.format(" select tl.depart,sum(tl.amount) amount from (" + +dataIndex.getWorkAmountByPackageSQL("灭菌数量", params) + + ") tl group by tl.depart "); + params.extraSelectColumns = ""; + params.extraGroupBy = ""; + //统计处理科室为【大院供应室】装配任务组为【器械二班】器械包种类为【临床各类包】的复用物品【回收】的【包数】 + sql += " union all "; + sql += "select rr.depart,sum(ri.amount) amount from RecyclingRecord rr " + + "join RecyclingItem ri on ri.recyclingRecord_id=rr.id " + + "join TousseDefinition td on td.id=ri.tousseDefinitionId join TousseDefinition tdc on tdc.id=td.ancestorID " + + "where tdc.taskGroup='器械二班' and rr.recyclingTime " + + betweenSql + + "and rr.orgUnitCoding='" + + orgUnitCoding + + "' " + + getInstrumentSetTypeSql("临床各类包","in") + + " group by rr.depart "; + + //1.统计处理科室为【大院供应室】装配任务组为【器械一班】器械包种类为【器械一班小手术包B类】的复用物品【回收】的【包数】 + //2.统计处理科室为【大院供应室】装配任务组为【器械二班】器械包种类为【器械二班包皮包B类】的复用物品【回收】的【包数】 + //取数为两者总和 X 5 + sql += " union all "; + sql += "select t.depart,sum(amount)*5 from( select rr.depart,ri.amount from RecyclingRecord rr " + + "join RecyclingItem ri on ri.recyclingRecord_id=rr.id " + + "join TousseDefinition td on td.id=ri.tousseDefinitionId join TousseDefinition tdc on tdc.id=td.ancestorID " + + "where tdc.taskGroup='器械一班' and rr.recyclingTime " + + betweenSql + + "and rr.orgUnitCoding='" + + orgUnitCoding + + "' " + + getInstrumentSetTypeSql("器械一班小手术包B类","in"); + sql += " union all select rr.depart,ri.amount from RecyclingRecord rr " + + "join RecyclingItem ri on ri.recyclingRecord_id=rr.id " + + "join TousseDefinition td on td.id=ri.tousseDefinitionId join TousseDefinition tdc on tdc.id=td.ancestorID " + + "where tdc.taskGroup='器械二班' and rr.recyclingTime " + + betweenSql + + "and rr.orgUnitCoding='" + + orgUnitCoding + + "' " + + getInstrumentSetTypeSql("器械二班包皮包B类","in") + + ") t group by t.depart "; + //统计处理科室为【大院供应室】装配任务组为【器械二班】器械包分组为【通用手术包】的复用物品【回收】的【包数】X 1 ②器械二班通用手术包 + sql += " union all "; + sql += "select rr.depart,sum(ri.amount) amount from RecyclingRecord rr " + + "join RecyclingItem ri on ri.recyclingRecord_id=rr.id " + + "join TousseDefinition td on td.id=ri.tousseDefinitionId join TousseDefinition tdc on tdc.id=td.ancestorID " + + "where tdc.taskGroup='器械二班' and tdc.tousseGroupName='通用手术包' " + + "and rr.recyclingTime " + + betweenSql + + "and rr.orgUnitCoding='" + + orgUnitCoding + + "' group by rr.depart"; + //③外来器械班 统计处理科室为【大院供应室】装配任务组为【外来器械班】器械包类型为【外来器械】的【装配】的【包数】X 2 + params.tousseTypeAndPackageSizeSql = " and tdc.tousseType in('"+ TousseDefinition.PACKAGE_TYPE_FOREIGN +"','"+ TousseDefinition.PACKAGE_TYPE_SPLIT +"') "; + params.tousseTypes = TousseDefinition.PACKAGE_TYPE_FOREIGN; + params.taskGroupSqlWithAliasOfTousseDefinitionIsTd= SqlUtils.get_InSql_Extra("tdc.taskGroup", "外来器械班"); + params.extraQuery = ""; + params.extraSelectColumns = ",ti.depart "; + params.extraGroupBy = " group by ti.depart "; + sql += String.format(" union all select tl.depart,sum(tl.amount)*2 amount from (" + +dataIndex.getWorkAmountByPackageSQL("配包数量", params) + + ") tl group by tl.depart "); + //④布类班 统计处理科室为【大院供应室】装配任务组为【布类班】器械包种类为【手术布类包】的【装配】的【包数】X 2 + params.taskGroupSqlWithAliasOfTousseDefinitionIsTd= SqlUtils.get_InSql_Extra("tdc.taskGroup", "布类班"); + params.tousseTypes = ""; + params.tousseTypeAndPackageSizeSql= ""; + params.extraQuery = getInstrumentSetTypeSql("手术布类包","in"); + sql += String.format(" union all select tl.depart,sum(tl.amount)*2 amount from (" + +dataIndex.getWorkAmountByPackageSQL("配包数量", params) + + ") tl group by tl.depart "); + //④布类班 统计处理科室为【大院供应室】装配任务组为【布类班】科室分组为【内部代理灭菌】器械包种类为【手术布类包】的【装配】的【包数】X1 + params.extraQuery = getInstrumentSetTypeSql("手术布类包","in") + + getInOrgUnitGroupSql("ti.departCoding", "内部代理灭菌"); + params.taskGroupSqlWithAliasOfTousseDefinitionIsTd = " and tdc.taskGroup='布类班' "; + sql += String.format(" union all select tl.depart,sum(tl.amount) amount from (" + +dataIndex.getWorkAmountByPackageSQL("配包数量", params) + + ") tl group by tl.depart "); + //泡镊桶班装配手术布类包总数 统计处理科室为【大院供应室】装配任务组为【泡镊桶班】器械包种类为【手术布类包】的【装配】的【包数】X 1 + params.extraQuery = getInstrumentSetTypeSql("手术布类包","in"); + params.taskGroupSqlWithAliasOfTousseDefinitionIsTd = " and tdc.taskGroup='泡镊桶班' "; + sql += String.format(" union all select tl.depart,sum(tl.amount) amount from (" + +dataIndex.getWorkAmountByPackageSQL("配包数量", params) + + ") tl group by tl.depart "); + //外来器械装配包数 统计处理科室为【大院供应室】装配任务组为【外来器械班】处理的【外来器械包】和【外来器械拆分小包】【装配】的【包数】X 1 + params.extraQuery = ""; + params.tousseTypeAndPackageSizeSql = " and tdc.tousseType in('"+ TousseDefinition.PACKAGE_TYPE_FOREIGN +"','"+ TousseDefinition.PACKAGE_TYPE_SPLIT +"') "; + params.tousseTypes = TousseDefinition.PACKAGE_TYPE_FOREIGN; + params.taskGroupSqlWithAliasOfTousseDefinitionIsTd = " and tdc.taskGroup='外来器械班' "; + sql += String.format(" union all select tl.depart,sum(tl.amount) amount from (" + +dataIndex.getWorkAmountByPackageSQL("配包数量", params) + + ") tl group by tl.depart "); + //①大院手术室一区 统计处理科室为【大院供应室】装配任务组为【手术器械(麻一)】的复用物品【装配】的【包数】X 1 + params.tousseTypeAndPackageSizeSql = ""; + params.tousseTypes = ""; + params.taskGroupSqlWithAliasOfTousseDefinitionIsTd = " and tdc.taskGroup='手术器械(麻一)' "; + sql += String.format(" union all select tl.depart,sum(tl.amount) amount from (" + +dataIndex.getWorkAmountByPackageSQL("配包数量", params) + + ") tl group by tl.depart "); + //②大院手术室二区 统计处理科室为【大院供应室】装配任务组为【手术器械(麻二)】的复用物品【装配】的【包数】X 1 + params.taskGroupSqlWithAliasOfTousseDefinitionIsTd = " and tdc.taskGroup='手术器械(麻二)' "; + sql += String.format(" union all select tl.depart,sum(tl.amount) amount from (" + +dataIndex.getWorkAmountByPackageSQL("配包数量", params) + + ") tl group by tl.depart "); + //器械一班 统计处理科室为【大院供应室】装配任务组为【器械一班】的复用物品【回收】的【包数】X 1 + sql += " union all "; + sql += "select rr.depart ,sum(ri.amount) amount from RecyclingRecord rr " + + "join RecyclingItem ri on ri.recyclingRecord_id=rr.id " + + "join TousseDefinition td on td.id=ri.tousseDefinitionId join TousseDefinition tdc on tdc.id=td.ancestorID " + + "where tdc.taskGroup='器械一班' " + + "and rr.recyclingTime " + + betweenSql + + "and rr.orgUnitCoding='" + + orgUnitCoding + + "' group by rr.depart "; + //器械二班 统计处理科室为【大院供应室】装配任务组为【器械二班】器械包种类为【手术器械包】的复用物品【回收】的【包数】X 1 + sql += " union all "; + sql += "select rr.depart,sum(ri.amount) amount from RecyclingRecord rr " + + "join RecyclingItem ri on ri.recyclingRecord_id=rr.id " + + "join TousseDefinition td on td.id=ri.tousseDefinitionId join TousseDefinition tdc on tdc.id=td.ancestorID " + + "where tdc.taskGroup='器械二班' " + + "and rr.recyclingTime " + + betweenSql + + "and rr.orgUnitCoding='" + + orgUnitCoding + + "' " + + getInstrumentSetTypeSql("手术器械包","in") + + " group by rr.depart "; + //口腔班 1.统计处理科室为【大院供应室】装配任务组为【口腔班】器械包种类为【口腔器械A类】的复用物品【回收】的【件数】 + //2.统计处理科室为【大院供应室】装配任务组为【口腔班】器械包种类为【口腔器械B类】的复用物品【回收】的【包数】 + //3.3.统计处理科室为【大院供应室】装配任务组为【口腔班】器械包类型为【聚合包】器械包种类为【口腔聚合包】的复用物品【装配】的【件数】 + //取数为三者总和 X 1 + sql += " union all select t.depart,sum(t.amount) amount from ("; + sql += "select rr.depart,ri.amount * ri.materialAmount amount from RecyclingRecord rr join RecyclingItem ri on ri.recyclingRecord_id=rr.id " + + "join TousseDefinition td on td.id=ri.tousseDefinitionId join TousseDefinition tdc on tdc.id=td.ancestorID " + + "where tdc.taskGroup='口腔班' and rr.orgUnitCoding='" + +orgUnitCoding + + "' " + + "and rr.recyclingTime " + + betweenSql + + getInstrumentSetTypeSql("口腔器械A类","in"); + sql += " union all select rr.depart, ri.amount from RecyclingRecord rr " + + "join RecyclingItem ri on ri.recyclingRecord_id=rr.id " + + "join TousseDefinition td on td.id=ri.tousseDefinitionId join TousseDefinition tdc on tdc.id=td.ancestorID " + + "where tdc.taskGroup='口腔班' and rr.recyclingTime " + + betweenSql + + "and rr.orgUnitCoding='" + + orgUnitCoding + + "' " + + getInstrumentSetTypeSql("口腔器械B类","in"); + + sql += " union all "; + sql += "select ti.depart,sum(case when ti.materialAmount is null then 0 else ti.materialAmount end) amount " + + " from TousseInstance ti inner join TousseDefinition td on ti.comboTousseDefinitionId = td.id " + + "join TousseDefinition tdc on tdc.id=td.ancestorid " + + "join CssdHandleTousses ch on ch.toussedefinitionid=tdc.id " + + "where ti.comboTousseInstanceId is null and ti.comboTousseDefinitionId is not null " + + " and ch.taskGroup='口腔班' and ti.orgUnitCoding='" + +orgUnitCoding + + "' and ti.operationTime " + + betweenSql + + " and tdc.id in (select istt.tousseDefinitionId from InstrumentSetType_TD istt " + + "join instrumentSetType ist on ist.id=istt.instrumentSetTypeId where ist.name='口腔聚合包') group by ti.depart "; + sql += ") t group by t.depart "; + //口腔自由装配 统计处理科室为【大院供应室】装配任务组为【口腔班】器械包类型为【聚合包】器械包种类为【口腔自由装配包】复用物品【装配】的【包数】 + sql += " union all "; + sql += "select ti.depart,count(*) amount " + + " from TousseInstance ti inner join TousseDefinition td on ti.comboTousseDefinitionId = td.id " + + "join TousseDefinition tdc on tdc.id=td.ancestorid " + + "join CssdHandleTousses ch on ch.toussedefinitionid=tdc.id " + + "where ti.comboTousseInstanceId is null and ti.comboTousseDefinitionId is not null " + + " and ch.taskGroup='口腔班' and ti.orgUnitCoding='" + +orgUnitCoding + + "' and ti.operationTime " + + betweenSql + + " and tdc.id in (select istt.tousseDefinitionId from InstrumentSetType_TD istt " + + "join instrumentSetType ist on ist.id=istt.instrumentSetTypeId where ist.name='口腔自由装配包') group by ti.depart "; + //呼吸球囊清点数目 统计处理科室为【大院供应室】装配任务组为【剪刀班】器械包种类为【呼吸球囊】的复用物品【回收】的【包数】X 1 + sql += " union all "; + sql += "select rr.depart,sum(ri.amount) amount from RecyclingRecord rr " + + "join RecyclingItem ri on ri.recyclingRecord_id=rr.id " + + "join TousseDefinition td on td.id=ri.tousseDefinitionId join TousseDefinition tdc on tdc.id=td.ancestorID " + + "where tdc.taskGroup='剪刀班' and rr.recyclingTime " + + betweenSql + + "and rr.orgUnitCoding='" + + orgUnitCoding + + "' " + + getInstrumentSetTypeSql("呼吸球囊","in") + + " group by rr.depart) t2 ) t1 where t1.bhName in('大学城分院','芳村分院','二沙分院') group by bhName "; + return sql; + } } Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManager.java =================================================================== diff -u -r34202 -r34356 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManager.java (.../JasperReportManager.java) (revision 34202) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManager.java (.../JasperReportManager.java) (revision 34356) @@ -72,6 +72,7 @@ import com.forgon.disinfectsystem.jasperreports.javabeansource.SciProjectAccountingVo; import com.forgon.disinfectsystem.jasperreports.javabeansource.SignGoodsItemVo; import com.forgon.disinfectsystem.jasperreports.javabeansource.StatisticalWorkload; +import com.forgon.disinfectsystem.jasperreports.javabeansource.SteAmountEachBranchReportVo; import com.forgon.disinfectsystem.jasperreports.javabeansource.SterilizationAreaWorkLoadBean; import com.forgon.disinfectsystem.jasperreports.javabeansource.SterilizationEffectMonitorReportVo; import com.forgon.disinfectsystem.jasperreports.javabeansource.SterilizationOmitReportBean; @@ -1244,5 +1245,13 @@ * @return */ public List getQualityMonitoringReportTaskGroupReportDate(String startTime, String endTime); + /** + * 获取各分院消毒炉次及各类包统计表数据 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @return + */ + public List getSteAmountEachBranchReportDate(String startTime, String endTime); + } Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/javabeansource/SteAmountEachBranchReportVo.java =================================================================== diff -u --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/javabeansource/SteAmountEachBranchReportVo.java (revision 0) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/javabeansource/SteAmountEachBranchReportVo.java (revision 34356) @@ -0,0 +1,61 @@ +package com.forgon.disinfectsystem.jasperreports.javabeansource; + +/** + * @author zc.li + * 2022-08-09 + * 各分院消毒炉次及各类包统计表vo + * GDSZYY-182 + */ +public class SteAmountEachBranchReportVo { + /** + * 序号 + */ + private Integer rowNum; + /** + * 院区名称 + */ + private String brancheOfHospitalName; + /** + * 高压炉数 + */ + private Long highPressureFurnacesAmount = 0L; + /** + * 气体炉数 + */ + private Long gasFurnacesAmount = 0L; + /** + * 各类包总数 + */ + private Long totalAmountOfBags = 0L; + public Integer getRowNum() { + return rowNum; + } + public void setRowNum(Integer rowNum) { + this.rowNum = rowNum; + } + public String getBrancheOfHospitalName() { + return brancheOfHospitalName; + } + public void setBrancheOfHospitalName(String brancheOfHospitalName) { + this.brancheOfHospitalName = brancheOfHospitalName; + } + public Long getHighPressureFurnacesAmount() { + return highPressureFurnacesAmount; + } + public void setHighPressureFurnacesAmount(Long highPressureFurnacesAmount) { + this.highPressureFurnacesAmount = highPressureFurnacesAmount; + } + public Long getGasFurnacesAmount() { + return gasFurnacesAmount; + } + public void setGasFurnacesAmount(Long gasFurnacesAmount) { + this.gasFurnacesAmount = gasFurnacesAmount; + } + public Long getTotalAmountOfBags() { + return totalAmountOfBags; + } + public void setTotalAmountOfBags(Long totalAmountOfBags) { + this.totalAmountOfBags = totalAmountOfBags; + } + +} Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/action/JasperreportsAction.java =================================================================== diff -u -r34286 -r34356 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/action/JasperreportsAction.java (.../JasperreportsAction.java) (revision 34286) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/action/JasperreportsAction.java (.../JasperreportsAction.java) (revision 34356) @@ -2198,6 +2198,12 @@ String endTime = StrutsParamUtils.getPraramValue("endTime", ""); parametMap.put("queryDate", startTime + " ~ " + endTime); return jasperReportManager.getQualityMonitoringReportTaskGroupReportDate(startTime, endTime); + }else if("steAmountEachBranchReport".equals(reportName)){//各分院消毒炉次及各类包统计表 + String startDate = StrutsParamUtils.getPraramValue("startDate", ""); + String endDate = StrutsParamUtils.getPraramValue("endDate", ""); + parametMap.put("dateStr", startDate + " ~ " + endDate); + parametMap.put("title", "各分院消毒炉次及各类包统计表"); + return jasperReportManager.getSteAmountEachBranchReportDate(startDate, endDate); } return null; }