From 59ceb5283da2a5faec177547608bc7c0bbcc3901 Mon Sep 17 00:00:00 2001 From: dd3s_206 Date: Mon, 1 Jun 2026 17:21:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=A1=E5=B7=A5=E4=BC=9A=E6=96=87=E5=8C=96?= =?UTF-8?q?=E6=B4=BB=E5=8A=A8-=E6=8A=A5=E5=90=8D=E7=BB=9F=E8=AE=A1?= =?UTF-8?q?=EF=BC=9A=E6=96=B0=E5=A2=9E=E5=AF=BC=E5=87=BA=E7=AD=BE=E5=AD=97?= =?UTF-8?q?=E8=A1=A8=EF=BC=88excel=E6=8C=89=E6=89=80=E5=B1=9E=E4=BC=9A?= =?UTF-8?q?=E6=9D=A5=E5=88=86Sheet=E9=A1=B5=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...tivityCultureUserStatisticsController.java | 78 +++++++++++++++++++ .../activity/culture/common/userStatistics.js | 10 +++ 2 files changed, 88 insertions(+) diff --git a/src/main/java/com/budwk/app/zhgh/activity/culture/controller/ActivityCultureUserStatisticsController.java b/src/main/java/com/budwk/app/zhgh/activity/culture/controller/ActivityCultureUserStatisticsController.java index a03772f..9d1df9b 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/culture/controller/ActivityCultureUserStatisticsController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/culture/controller/ActivityCultureUserStatisticsController.java @@ -4,6 +4,7 @@ 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 cn.afterturn.easypoi.excel.export.ExcelExportService; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaMode; import cn.hutool.core.util.ObjectUtil; @@ -16,6 +17,7 @@ import com.budwk.app.base.utils.CommonDownloadUtil; import com.budwk.app.base.utils.DynamicFormFieldParserUtil; import com.budwk.app.web.commons.auth.utils.AuthUtil; import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.sys.models.Sys_union; import com.budwk.app.web.commons.base.Globals; import com.budwk.app.zhgh.activity.culture.models.ActivityTissue; import com.budwk.app.zhgh.activity.culture.service.ActivityCultureApplyUserService; @@ -24,6 +26,7 @@ import com.budwk.app.zhgh.club.service.SysClubService; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.nutz.dao.Cnd; import org.nutz.dao.Dao; import org.nutz.dao.Sqls; @@ -248,6 +251,74 @@ public class ActivityCultureUserStatisticsController { } + @At + @SaCheckPermission(value = {"activity.culture.userStatistics.school", "activity.culture.userStatistics.branch", "activity.culture.userStatistics.club"}, mode = SaMode.OR) + @Ok("void") + @ApiOperation("导出签字表") + public void doExportSignSheet(String id, HttpServletResponse response) { + try { + ActivityTissue tissue = dao.fetch(ActivityTissue.class, id); + Sql sql = Sqls.create(""" + SELECT + atp.userName, + IFNULL(un.name, atp.unionName) unionName, + IFNULL(un.id, atp.unionId) unionId, + un.unionCode + FROM + `activity_tissue_person` atp + LEFT JOIN sys_union un ON un.id = atp.unionId + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.and("atp.tissueId", "=", id); + if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) { + cnd.and("atp.unionId", "=", SecurityUtil.getUnionId()); + } + cnd.asc("un.unionCode"); + cnd.asc("atp.userName"); + sql.setCondition(cnd); + List list = activityCultureApplyUserService.listMap(sql); + + List entityList = new ArrayList<>(); + ExcelExportEntity indexEntity = new ExcelExportEntity("序号", "indexNo", 10); + indexEntity.setType(10); + entityList.add(indexEntity); + entityList.add(new ExcelExportEntity("姓名", "userName", 20)); + entityList.add(new ExcelExportEntity("所属工会", "unionName", 30)); + entityList.add(new ExcelExportEntity("签字", "sign", 30)); + + Workbook workbook = new XSSFWorkbook(); + int sheetIndex = 1; + for (Sys_union union : dao.query(Sys_union.class, Cnd.NEW().asc(Sys_union::getUnionCode))) { + List unionUserList = list.stream() + .filter(row -> StrUtil.equals(row.getString("unionId"), union.getId())) + .collect(Collectors.toList()); + if (unionUserList.isEmpty()) { + continue; + } + for (int i = 0; i < unionUserList.size(); i++) { + unionUserList.get(i).put("indexNo", i + 1); + } + ExportParams exportParams = new ExportParams(); + exportParams.setType(ExcelType.XSSF); + exportParams.setTitle(tissue.getName() + "签字表"); + exportParams.setSheetName(formatSheetName(union.getName(), sheetIndex)); + new ExcelExportService().createSheetForMap(workbook, exportParams, entityList, unionUserList); + sheetIndex++; + } + if (sheetIndex == 1) { + ExportParams exportParams = new ExportParams(); + exportParams.setType(ExcelType.XSSF); + exportParams.setTitle(tissue.getName() + "签字表"); + exportParams.setSheetName("签字表"); + new ExcelExportService().createSheetForMap(workbook, exportParams, entityList, new ArrayList<>()); + } + CommonDownloadUtil.download(tissue.getName() + "签字表.xlsx", workbook, response); + } catch (Exception e) { + log.error("文化活动签字表导出失败", e); + } + } + @At @SaCheckPermission(value = {"activity.culture.userStatistics.school", "activity.culture.userStatistics.branch", "activity.culture.userStatistics.club"}, mode = SaMode.OR) @Ok("json:full") @@ -279,5 +350,12 @@ public class ActivityCultureUserStatisticsController { } } + private String formatSheetName(String sheetName, int index) { + String name = StrUtil.blankToDefault(sheetName, "分工会" + index).replaceAll("[\\\\/:*?\\[\\]]", ""); + if (StrUtil.isBlank(name)) { + name = "分工会" + index; + } + return StrUtil.sub(name, 0, 31); + } } diff --git a/src/main/resources/views/platform/zhgh/activity/culture/common/userStatistics.js b/src/main/resources/views/platform/zhgh/activity/culture/common/userStatistics.js index dabc2e5..1fe9f7f 100644 --- a/src/main/resources/views/platform/zhgh/activity/culture/common/userStatistics.js +++ b/src/main/resources/views/platform/zhgh/activity/culture/common/userStatistics.js @@ -57,6 +57,8 @@ const ACTIVITY_CULTURE_USER_STATISTICS = { 导出 + 导出签字表 +