diff --git a/.gitignore b/.gitignore index 91e4468..eb82808 100644 --- a/.gitignore +++ b/.gitignore @@ -52,4 +52,5 @@ Thumbs.db outputs semgrep.json -trivy.json \ No newline at end of file +trivy.json +.workbuddy \ No newline at end of file diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/therapyRecuperation/controller/statistics/TheRapyRecuperationLineStatisticsController.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/therapyRecuperation/controller/statistics/TheRapyRecuperationLineStatisticsController.java index 3f403ea..8964a7d 100644 --- a/src/main/java/com/budwk/app/zhgh/staffbenefit/therapyRecuperation/controller/statistics/TheRapyRecuperationLineStatisticsController.java +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/therapyRecuperation/controller/statistics/TheRapyRecuperationLineStatisticsController.java @@ -1,5 +1,13 @@ package com.budwk.app.zhgh.staffbenefit.therapyRecuperation.controller.statistics; +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; +import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; +import com.budwk.app.zhgh.staffbenefit.therapyRecuperation.support.TherapyDownload; +import org.apache.poi.ss.usermodel.Workbook; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.budwk.app.base.result.Result; @@ -186,10 +194,27 @@ public class TheRapyRecuperationLineStatisticsController { @Param(value = "selectId") String selectId, @Param(value = "playMonth") String playMonth, @Param(value = "regionalNature") String regionalNature, - @Param(value = "travelAgencyId") String travelAgencyId) { - Sql sql = Sqls.create(""" + @Param(value = "travelAgencyId") String travelAgencyId, + @Param(value = "groupStatus") Integer groupStatus) { + List queries = buildStatisticsQueries(startYear, endYear, unionId, takePartInLineId, lotId, + signUpMode, selectId, playMonth, regionalNature, travelAgencyId, groupStatus); + return enrollService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), queries.get(0), queries.get(1)); + } + + private List buildStatisticsQueries(Integer startYear, Integer endYear, String unionId, + String takePartInLineId, String lotId, String signUpMode, + String selectId, String playMonth, String regionalNature, + String travelAgencyId, Integer groupStatus) { + if (startYear != null && endYear != null && startYear > endYear) { + throw new IllegalArgumentException("开始年度不能大于结束年度"); + } + String groupedCondition = "IFNULL(lineu.estimatedFamilyNumbers, 0) > 0 AND " + + "IFNULL(enrollStats.lineNum, 0) + IFNULL(enrollStats.adultFamilyNum, 0) >= lineu.estimatedFamilyNumbers"; + String query = """ SELECT line.id, + $groupStatus AS groupStatusName, + IFNULL(enrollStats.lineNum, 0) + IFNULL(enrollStats.adultFamilyNum, 0) AS groupCount, line.lineName, line.regionalNature, lineu.lineId, @@ -241,16 +266,12 @@ public class TheRapyRecuperationLineStatisticsController { ) enrollStats ON enrollStats.takePartInLineId = lineu.id $condition ORDER BY line.serialNumber ASC, lineu.playStartTime ASC - """); - Sql countSql = Sqls.create(""" - SELECT - COUNT(1) - FROM - inclusive_therapy_v3_line_union_select lineu - LEFT JOIN inclusive_therapy_v3_line line ON line.id = lineu.lineId - LEFT JOIN inclusive_therapy_v3_lot lot ON lot.id = line.lotId - $condition - """); + """; + Sql sql = Sqls.create(query); + Sql countSql = Sqls.create("SELECT COUNT(1) FROM (" + query.substring(0, query.indexOf("ORDER BY")) + ") statistics"); + String groupStatusExpression = "CASE WHEN " + groupedCondition + " THEN '成团' ELSE '未成团' END"; + sql.setVar("groupStatus", groupStatusExpression); + countSql.setVar("groupStatus", groupStatusExpression); Cnd cnd = Cnd.NEW(); if (startYear != null) { cnd.and("lineu.selectTime", ">=", startYear + "-01-01 00:00:00"); @@ -260,9 +281,11 @@ public class TheRapyRecuperationLineStatisticsController { } cnd.andEX("lineu.signUpMode", "=", signUpMode); sql.setVar("unionCnd", ""); + countSql.setVar("unionCnd", ""); if (!TherapyContext.hasAnyRoles("sysadmin,H06")) { String unionCndSql = "and (e.selfUnionId='%s' or e.takePartInUnionId = '%s')".formatted(TherapyContext.getUnionId(), TherapyContext.getUnionId()); sql.setVar("unionCnd", unionCndSql); + countSql.setVar("unionCnd", unionCndSql); cnd.and("lineu.unionId", "=", TherapyContext.getUnionId()); } else { if (Strings.isNotBlank(unionId)) { @@ -282,9 +305,55 @@ public class TheRapyRecuperationLineStatisticsController { } cnd.andEX("line.regionalNature", "=", regionalNature); addTravelAgencyCondition(cnd, travelAgencyId); + if (groupStatus != null && (groupStatus == 1 || groupStatus == 2)) { + cnd.and("(" + groupedCondition + ")", "=", groupStatus == 1 ? 1 : 0); + } sql.setCondition(cnd); countSql.setCondition(cnd); - return enrollService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql, countSql); + return Arrays.asList(sql, countSql); + } + + @At("/exportList") + @Ok("void") + @SaCheckPermission("inclusiveTherapyV3.statistics") + public void exportList(@Param("startYear") Integer startYear, + @Param("endYear") Integer endYear, + @Param("unionId") String unionId, + @Param("takePartInLineId") String takePartInLineId, + @Param("lotId") String lotId, + @Param("signUpMode") String signUpMode, + @Param("selectId") String selectId, + @Param("playMonth") String playMonth, + @Param("regionalNature") String regionalNature, + @Param("travelAgencyId") String travelAgencyId, + @Param("groupStatus") Integer groupStatus, + HttpServletResponse response) throws IOException { + List queries = buildStatisticsQueries(startYear, endYear, unionId, takePartInLineId, lotId, + signUpMode, selectId, playMonth, regionalNature, travelAgencyId, groupStatus); + List rows = enrollService.listMap(queries.get(0)); + List columns = new ArrayList<>(); + columns.add(new ExcelExportEntity("年度", "year", 12)); + columns.add(new ExcelExportEntity("线路名称", "lineName", 35)); + columns.add(new ExcelExportEntity("选择线路工会", "unionname", 25)); + columns.add(new ExcelExportEntity("出行时间", "linePlayTime", 20)); + columns.add(new ExcelExportEntity("报名时间", "signUpTime", 20)); + columns.add(new ExcelExportEntity("调剂报名截止时间", "adjustSignUpEndTime", 22)); + columns.add(new ExcelExportEntity("承担旅行社", "travelAgencyName", 25)); + columns.add(new ExcelExportEntity("线路类型", "regionalNature", 12)); + columns.add(new ExcelExportEntity("联系人", "contact", 15)); + columns.add(new ExcelExportEntity("联系方式", "contactMobileNumber", 20)); + columns.add(new ExcelExportEntity("最少成团人数", "estimatedFamilyNumbers", 16)); + columns.add(new ExcelExportEntity("成团计入人数", "groupCount", 16)); + columns.add(new ExcelExportEntity("教职工报名人数", "lineNum", 18)); + columns.add(new ExcelExportEntity("家属总人数", "signUpUserFamilyNum", 16)); + columns.add(new ExcelExportEntity("成年家属人数", "adultFamilyNum", 16)); + columns.add(new ExcelExportEntity("成团状态", "groupStatusName", 12)); + TherapyDownload.excelResponse(response, "疗休养线路统计.xlsx"); + ExportParams params = new ExportParams(); + params.setType(ExcelType.XSSF); + try (Workbook workbook = ExcelExportUtil.exportExcel(params, columns, rows)) { + workbook.write(response.getOutputStream()); + } } /** diff --git a/src/main/resources/views/platform/zhgh/staffbenefit/therapyRecuperation/audit/TheRapyAudit.html b/src/main/resources/views/platform/zhgh/staffbenefit/therapyRecuperation/audit/TheRapyAudit.html index b99a627..cc20e2c 100644 --- a/src/main/resources/views/platform/zhgh/staffbenefit/therapyRecuperation/audit/TheRapyAudit.html +++ b/src/main/resources/views/platform/zhgh/staffbenefit/therapyRecuperation/audit/TheRapyAudit.html @@ -231,15 +231,6 @@ layout("/layouts/platform.html"){ - - - - Mini - Small - Medium - Large - - - - - - Mini - Small - Medium - Large - - - - - - Mini - Small - Medium - Large - - 新建目的地 - - - - Mini - Small - Medium - Large - - 新建线路 - - - - Mini - Small - Medium - Large - - 新建旅行社 - - - - Mini - Small - Medium - Large - - @@ -617,15 +616,6 @@ layout("/layouts/platform.html"){ - - - - Mini - Small - Medium - Large - - .el-row > .el-col > span:first-child { + display: inline-block; + width: 5em; + white-space: nowrap; + vertical-align: middle; + } + .query-row:not(:last-child) { border-bottom: 1px dashed rgb(230, 230, 230); } @@ -42,23 +49,15 @@ layout("/layouts/platform.html"){ 年  度: - - - 至 - - +
+ + 至 + +
查询类型: @@ -73,7 +72,6 @@ layout("/layouts/platform.html"){ @@ -246,15 +244,6 @@ layout("/layouts/platform.html"){ - - - - Mini - Small - Medium - Large - - - - - - Mini - Small - Medium - Large - - - - - - Mini - Small - Medium - Large - - 导出表格 - - - - Mini - Small - Medium - Large - - - - - - Mini - Small - Medium - Large - -