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 = { 导出 + 导出签字表 +