校工会文化活动-报名统计:新增导出签字表(excel按所属会来分Sheet页)

This commit is contained in:
dd3s_206
2026-06-01 17:21:35 +08:00
parent d6f0c5d507
commit 59ceb5283d
2 changed files with 88 additions and 0 deletions
@@ -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<NutMap> list = activityCultureApplyUserService.listMap(sql);
List<ExcelExportEntity> 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<NutMap> 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);
}
}
@@ -57,6 +57,8 @@ const ACTIVITY_CULTURE_USER_STATISTICS = {
<table-tool label="人员列表">
<el-button @click="doExport" icon="el-icon-s-promotion" type="primary" size="mini">导出
</el-button>
<el-button v-if="activity_type===40001" @click="doExportSignSheet" icon="el-icon-edit-outline" type="primary" size="mini">导出签字表
</el-button>
</table-tool>
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" row-key="id"
@@ -150,6 +152,14 @@ const ACTIVITY_CULTURE_USER_STATISTICS = {
unionId: unionId
})
},
async doExportSignSheet() {
if (!this.pageForm.activityId) {
return
}
this.$downLoad("/platform/activity/culture/userStatistics/doExportSignSheet", {
id: this.pageForm.activityId
})
},
pageData() {
if (!this.pageForm.activityId) {
return