This commit is contained in:
=
2026-07-15 09:23:00 +08:00
parent 33a9a3df05
commit b974d84086
18 changed files with 419 additions and 2 deletions
@@ -3,6 +3,7 @@ package com.budwk.app.zhgh.democratic.proposal.controller.transact;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.ExportTableColumns;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
@@ -21,7 +22,9 @@ import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.util.List;
@@ -116,6 +119,15 @@ public class ProposalCaseCheckController {
return Result.success(pagination);
}
@At
@Ok("void")
@SaCheckPermission("proposal.caseCheck")
@ApiOperation("导出列表")
public void exportList(@Valid @Param("pageForm") ProposalSearchParam pageForm, boolean approval,
@Param("tableColumns") ExportTableColumns[] tableColumns, HttpServletResponse response) {
proposalCommonService.exportWorkflowList("caseCheck", pageForm, approval, tableColumns, response);
}
@At
@SaCheckPermission("proposal.caseCheck")
@ApiOperation("查询当前提案承办单位")
@@ -4,6 +4,7 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.lang.Dict;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.ExportTableColumns;
import com.budwk.app.base.result.Result;
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
@@ -28,6 +29,7 @@ import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import javax.validation.Valid;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
@IocBean
@@ -114,6 +116,15 @@ public class ProposalCommitteeFilingController {
return Result.success(pagination);
}
@At
@Ok("void")
@SaCheckPermission("proposal.committeeFiling")
@ApiOperation("导出列表")
public void exportList(@Valid @Param("pageForm") ProposalSearchParam pageForm, boolean approval,
@Param("tableColumns") ExportTableColumns[] tableColumns, HttpServletResponse response) {
proposalCommonService.exportWorkflowList("committeeFiling", pageForm, approval, tableColumns, response);
}
@At
@SaCheckPermission("proposal.committeeFiling")
@ApiOperation("并案审核")
@@ -6,6 +6,7 @@ import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.ObjectUtil;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.ExportTableColumns;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.flow.entity.ProcessInstance;
@@ -36,6 +37,7 @@ import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import javax.validation.Valid;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
@IocBean
@@ -127,6 +129,15 @@ public class ProposalCommitteeFilingUnitController {
return Result.success(pagination);
}
@At
@Ok("void")
@SaCheckPermission("proposal.committeeFilingUnit")
@ApiOperation("导出列表")
public void exportList(@Valid @Param("pageForm") ProposalSearchParam pageForm, boolean approval,
@Param("tableColumns") ExportTableColumns[] tableColumns, HttpServletResponse response) {
proposalCommonService.exportWorkflowList("committeeFilingUnit", pageForm, approval, tableColumns, response);
}
@At
@SaCheckPermission("proposal.committeeFilingUnit")
@ApiOperation("执行任务")
@@ -4,6 +4,7 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.ExportTableColumns;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum;
@@ -32,6 +33,7 @@ import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import javax.validation.Valid;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
@@ -127,4 +129,13 @@ public class ProposalDelegationController {
return Result.success(pagination);
}
@At
@Ok("void")
@SaCheckPermission("proposal.delegation")
@ApiOperation("导出列表")
public void exportList(@Valid @Param("pageForm") ProposalSearchParam pageForm, boolean approval,
@Param("tableColumns") ExportTableColumns[] tableColumns, HttpServletResponse response) {
proposalCommonService.exportWorkflowList("delegation", pageForm, approval, tableColumns, response);
}
}
@@ -5,6 +5,7 @@ import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.ExportTableColumns;
import com.budwk.app.base.result.Result;
import com.budwk.app.flow.entity.ProcessTask;
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
@@ -26,6 +27,7 @@ import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import javax.validation.Valid;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
@IocBean
@@ -116,6 +118,15 @@ public class ProposalFeedbackEvaluationController {
return Result.success(pagination);
}
@At
@Ok("void")
@SaCheckPermission("proposal.feedbackEvaluation")
@ApiOperation("导出列表")
public void exportList(@Valid @Param("pageForm") ProposalSearchParam pageForm, boolean approval,
@Param("tableColumns") ExportTableColumns[] tableColumns, HttpServletResponse response) {
proposalCommonService.exportWorkflowList("feedbackEvaluation", pageForm, approval, tableColumns, response);
}
@At
@SaCheckPermission("proposal.feedbackEvaluation")
@ApiOperation("获取立案信息")
@@ -3,6 +3,7 @@ package com.budwk.app.zhgh.democratic.proposal.controller.transact;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.ExportTableColumns;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
@@ -20,7 +21,9 @@ import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.util.List;
@@ -113,4 +116,13 @@ public class ProposalPreAuditController {
Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(),pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@At
@Ok("void")
@SaCheckPermission("proposal.preAudit")
@ApiOperation("导出列表")
public void exportList(@Valid @Param("pageForm") ProposalSearchParam pageForm, boolean approval,
@Param("tableColumns") ExportTableColumns[] tableColumns, HttpServletResponse response) {
proposalCommonService.exportWorkflowList("preAudit", pageForm, approval, tableColumns, response);
}
}
@@ -7,6 +7,7 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.ExportTableColumns;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.vo.LabelValueVO;
import com.budwk.app.flow.constant.FlowConst;
@@ -38,6 +39,7 @@ import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import javax.validation.Valid;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
@@ -144,6 +146,15 @@ public class ProposalSchoolLeaderApprovalController {
return Result.success(pagination);
}
@At
@Ok("void")
@SaCheckPermission("proposal.schoolLeaderApproval")
@ApiOperation("导出列表")
public void exportList(@Valid @Param("pageForm") ProposalSearchParam pageForm, boolean approval,
@Param("tableColumns") ExportTableColumns[] tableColumns, HttpServletResponse response) {
proposalCommonService.exportWorkflowList("schoolLeaderApproval", pageForm, approval, tableColumns, response);
}
@At
@SaCheckPermission("proposal.schoolLeaderApproval")
@ApiOperation("获取主办单位")
@@ -5,6 +5,7 @@ import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.ObjectUtil;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.ExportTableColumns;
import com.budwk.app.base.result.Result;
import com.budwk.app.flow.entity.ProcessTask;
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
@@ -37,6 +38,7 @@ import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import javax.validation.Valid;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
@@ -170,6 +172,15 @@ public class ProposalUnderTakeReplyController {
return Result.success(pagination);
}
@At
@Ok("void")
@SaCheckPermission("proposal.unitReply")
@ApiOperation("导出列表")
public void exportList(@Valid @Param("pageForm") ProposalSearchParam pageForm, boolean approval,
@Param("tableColumns") ExportTableColumns[] tableColumns, HttpServletResponse response) {
proposalCommonService.exportWorkflowList("unitReply", pageForm, approval, tableColumns, response);
}
/**
* 承办单位答复节点撤回需要基于整组当前节点判断。
* 只有“当前流程正在办理的节点”和“这条列表记录所属节点”完全一致时,才允许撤回;
@@ -2,8 +2,10 @@ package com.budwk.app.zhgh.democratic.proposal.service.common;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.param.ExportTableColumns;
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
import com.budwk.app.zhgh.democratic.proposal.models.ProposalUndertake;
import com.budwk.app.zhgh.democratic.proposal.param.ProposalSearchParam;
import org.nutz.dao.Cnd;
import org.nutz.lang.util.NutMap;
@@ -137,6 +139,18 @@ public interface ProposalCommonService extends BaseService<ProposalInfo> {
*/
void exportYearReport(String sessionId, HttpServletResponse response);
/**
* 按办理页面当前筛选条件和可见列导出提案列表。
*
* @param pageCode 页面代码,用于固定查询范围、数据权限和排序白名单
* @param pageForm 页面筛选条件
* @param approval 审核状态筛选条件
* @param tableColumns 当前页面可见列
* @param response HTTP 响应
*/
void exportWorkflowList(String pageCode, ProposalSearchParam pageForm, boolean approval,
ExportTableColumns[] tableColumns, HttpServletResponse response);
/**
* 合并提案
@@ -7,8 +7,13 @@ import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
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.base.constant.RoleConstant;
import com.budwk.app.base.exception.BaseException;
import com.budwk.app.base.param.ExportTableColumns;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.base.utils.CommonDownloadUtil;
@@ -19,6 +24,7 @@ import com.budwk.app.flow.engine.FlowEngine;
import com.budwk.app.flow.engine.util.FlowUtil;
import com.budwk.app.flow.entity.ProcessInstance;
import com.budwk.app.flow.entity.ProcessTask;
import com.budwk.app.flow.enums.ProcessInstanceStateEnum;
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
import com.budwk.app.flow.vo.ProcessTaskVO;
import com.budwk.app.sys.models.Sys_dict;
@@ -28,11 +34,13 @@ import com.budwk.app.sys.models.Sys_user_role;
import com.budwk.app.sys.services.SysDictService;
import com.budwk.app.sys.services.SysRoleService;
import com.budwk.app.sys.services.SysUserService;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.web.commons.base.Globals;
import com.budwk.app.zhgh.democratic.proposal.constants.ProposalState;
import com.budwk.app.zhgh.democratic.proposal.models.*;
import com.budwk.app.zhgh.democratic.proposal.param.ProposalQueryComprehensiveParam;
import com.budwk.app.zhgh.democratic.proposal.param.ProposalSearchParam;
import com.budwk.app.zhgh.democratic.proposal.service.ProposalWriteService;
import com.budwk.app.zhgh.democratic.teachercongress.delegate.models.Teacher_congress_delegate;
import com.budwk.app.zhgh.democratic.teachercongress.delegate.service.TeacherCongressDelegateService;
@@ -55,6 +63,7 @@ import org.nutz.json.Json;
import org.nutz.lang.Lang;
import org.nutz.lang.Strings;
import org.nutz.lang.util.NutMap;
import org.apache.poi.ss.usermodel.Workbook;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
@@ -73,6 +82,9 @@ public class ProposalCommonServiceImpl extends BaseServiceImpl<ProposalInfo> imp
/** PC端提案列表页面的排序字段白名单,页面代码由对应Controller固定传入。 */
private static final Map<String, Map<String, String>> PROPOSAL_LIST_ORDER_COLUMNS = createProposalListOrderColumns();
/** 办理页面允许导出的列表字段,避免请求参数携带非页面字段。 */
private static final Map<String, Set<String>> WORKFLOW_EXPORT_COLUMNS = createWorkflowExportColumns();
//找出富文本里面上传的图片
static String IMG_SRC_REGEX = "<img\\s+[^>]*src\\s*=\\s*([\"'])(/platform/sys/file/download\\?id=.*?)\\1[^>]*>";
@@ -204,6 +216,219 @@ public class ProposalCommonServiceImpl extends BaseServiceImpl<ProposalInfo> imp
return Collections.unmodifiableMap(columns);
}
/**
* 按办理页面当前筛选条件和可见列导出列表,查询范围与页面分页列表保持一致。
*
* @param pageCode 页面代码
* @param pageForm 页面筛选条件
* @param approval 审核状态
* @param tableColumns 页面可见列
* @param response HTTP 响应
*/
@Override
public void exportWorkflowList(String pageCode, ProposalSearchParam pageForm, boolean approval,
ExportTableColumns[] tableColumns, HttpServletResponse response) {
List<ExportTableColumns> exportColumns = getWorkflowExportColumns(pageCode, tableColumns);
if (exportColumns.isEmpty()) {
throw Lang.makeThrow("请选择至少一个列表字段后再导出");
}
Sql sql = buildWorkflowExportSql(pageCode, pageForm, approval);
List<NutMap> rows = listMap(sql);
convertWorkflowExportValues(rows, pageCode);
List<ExcelExportEntity> excelColumns = new ArrayList<>();
for (ExportTableColumns column : exportColumns) {
excelColumns.add(new ExcelExportEntity(column.getLabel(), column.getProp(), 20));
}
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
exportParams.setTitle("提案列表");
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, excelColumns, rows);
CommonDownloadUtil.download("提案列表.xlsx", workbook, response);
}
/** 根据页面代码构造导出查询,保证数据权限、筛选条件及排序规则与列表页一致。 */
private Sql buildWorkflowExportSql(String pageCode, ProposalSearchParam pageForm, boolean approval) {
boolean isUnitReply = "unitReply".equals(pageCode);
boolean isSchoolLeaderApproval = "schoolLeaderApproval".equals(pageCode);
boolean requiresUnionFilter = Set.of("preAudit", "committeeFiling", "committeeFilingUnit",
"schoolLeaderApproval", "caseCheck").contains(pageCode);
String taskName = getWorkflowTaskName(pageCode);
String schoolLeaderColumns = isSchoolLeaderApproval ? """
GROUP_CONCAT(DISTINCT CASE WHEN pru.isMaster = 1 THEN pru.unitName END) AS masterUnitName,
GROUP_CONCAT(DISTINCT CASE WHEN pru.isMaster = 0 THEN pru.unitName END) AS slaveUnitNames,
""" : "";
String auditUserColumn = (isSchoolLeaderApproval || isUnitReply)
? "GROUP_CONCAT(DISTINCT ta.actorName, '(', ta.actorAccount, ')') AS auditUser,"
: "";
String unitReplyColumns = isUnitReply ? """
COALESCE(NULLIF(t.variable->>'$.underTakeName', ''), replyUnit.unitName) AS underTakeName,
CASE
WHEN JSON_EXTRACT(t.variable, '$.underTakeIsMaster') IS NOT NULL
THEN IF(JSON_EXTRACT(t.variable, '$.underTakeIsMaster') = true, 1, 0)
ELSE IFNULL(replyUnit.isMaster, 0)
END AS underTakeIsMaster,
""" : "";
String unionJoin = requiresUnionFilter ? "LEFT JOIN vw_user vu ON vu.id = info.createUserId" : "";
String schoolLeaderJoin = isSchoolLeaderApproval ? "LEFT JOIN proposal_reply_unit pru ON pru.proposalId = info.id" : "";
String unitReplyJoin = isUnitReply
? "LEFT JOIN proposal_reply_unit replyUnit ON replyUnit.proposalId = info.id AND replyUnit.unitId = ta.actorUnitId\n LEFT JOIN sys_user transferUser ON transferUser.id = t.variable->>'$.tf_transferUserId'"
: "";
Sql sql = Sqls.create("""
SELECT
info.*,
type.name AS typeName,
IF(mer.proposalId IS NOT NULL, 1, 0) AS merge,
tcs.fullName AS sessionName,
tcd.`name` AS delegationName,
ins.state AS instanceState,
t.finishTime,
%s
%s
%s
IFNULL(GROUP_CONCAT(DISTINCT nt.displayName), '结束') AS curTaskName
FROM wf_process_task t
LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId
LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id
LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10
LEFT JOIN proposal_info info ON info.id = ins.businessNo
LEFT JOIN proposal_type type ON type.id = info.typeId
LEFT JOIN proposal_merge mer ON mer.proposalId = info.id
LEFT JOIN teacher_congress_session tcs ON tcs.id = info.sessionId
LEFT JOIN teacher_congress_delegation tcd ON tcd.id = info.delegationId
%s
%s
%s
$condition
""".formatted(schoolLeaderColumns, auditUserColumn, unitReplyColumns, unionJoin, schoolLeaderJoin, unitReplyJoin));
Cnd cnd = Cnd.NEW();
if (isUnitReply) {
cnd.and("t.taskName", "in", List.of("unit_reply", "two_unit_reply", "opinion_unit_reply"));
if (!"superadmin".equals(SecurityUtil.getUserLoginname())) {
cnd.and("ta.actorId", "=", SecurityUtil.getUserId());
}
} else {
cnd.and("t.taskName", "=", taskName);
if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) {
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
}
}
if (approval) {
cnd.and("t.taskState", "in", isUnitReply
? List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.TRANSFER.getCode())
: List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
} else {
cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode());
}
if (requiresUnionFilter) {
cnd.andEX("vu.unionId", "=", pageForm.getUnionId());
}
ProposalSearchParam.buildSearch(cnd, pageForm);
cnd.groupBy("t.id");
if (!applySafeProposalListOrder(cnd, pageForm, pageCode)) {
cnd.desc("t.createdAt");
}
sql.setCondition(cnd);
return sql;
}
/** 获取页面对应的流程任务编码,页面代码不匹配时拒绝导出。 */
private String getWorkflowTaskName(String pageCode) {
Map<String, String> taskNames = Map.of(
"delegation", "delegation",
"preAudit", "preAudit",
"committeeFiling", "committee",
"committeeFilingUnit", "committeeFilingUnit",
"schoolLeaderApproval", "schoolLeader",
"feedbackEvaluation", "feedback",
"caseCheck", "caseCheck"
);
String taskName = taskNames.get(pageCode);
if (StrUtil.isBlank(taskName) && !"unitReply".equals(pageCode)) {
throw Lang.makeThrow("不支持的提案列表导出页面");
}
return taskName;
}
/** 将字典、枚举及组合字段转换为与列表页面相同的显示文本。 */
private void convertWorkflowExportValues(List<NutMap> rows, String pageCode) {
Map<String, String> caseFilingResultMap = sysDictService.getSubListByCode("PROPOSAL_CASE_FILING_RESULT")
.stream().collect(Collectors.toMap(Sys_dict::getCode, Sys_dict::getName));
Map<Integer, String> processStateMap = Arrays.stream(ProcessInstanceStateEnum.values())
.collect(Collectors.toMap(ProcessInstanceStateEnum::getCode, ProcessInstanceStateEnum::getMessage));
for (NutMap row : rows) {
if ("schoolLeaderApproval".equals(pageCode)) {
row.put("undertakeUnits", formatUndertakeUnits(row));
}
// 所有含“是否并案”列的办理页面统一导出“是/否”,避免未并案记录出现空白。
row.put("merge", row.getInt("merge") == 1 ? "" : "");
if ("unitReply".equals(pageCode)) {
row.put("underTakeIsMaster", row.getInt("underTakeIsMaster") == 1 ? "主办" : "协办");
}
row.put("caseFilingResult", caseFilingResultMap.getOrDefault(row.getString("caseFilingResult"), row.getString("caseFilingResult")));
Integer instanceState = row.getInt("instanceState");
row.put("instanceState", processStateMap.getOrDefault(instanceState, row.getString("instanceState")));
}
}
/** 校领导审批页按页面展示规则拼接承办单位。 */
private String formatUndertakeUnits(NutMap row) {
String masterUnitNames = StrUtil.nullToEmpty(row.getString("masterUnitName"));
String slaveUnitNames = StrUtil.nullToEmpty(row.getString("slaveUnitNames"));
if ("SUGGESTION".equals(row.getString("caseFilingResult"))) {
return StrUtil.isNotBlank(masterUnitNames) ? masterUnitNames : slaveUnitNames;
}
if ("CONFIRM_FILING".equals(row.getString("caseFilingResult"))) {
List<String> unitNames = new ArrayList<>();
if (StrUtil.isNotBlank(masterUnitNames)) {
unitNames.add("主办:" + masterUnitNames);
}
if (StrUtil.isNotBlank(slaveUnitNames)) {
unitNames.add("协办:" + slaveUnitNames);
}
return StrUtil.join("", unitNames);
}
return "";
}
/** 根据页面列定义过滤导出字段,确保导出范围只包含列表可展示字段。 */
private List<ExportTableColumns> getWorkflowExportColumns(String pageCode, ExportTableColumns[] tableColumns) {
Set<String> allowedColumns = WORKFLOW_EXPORT_COLUMNS.get(pageCode);
if (allowedColumns == null || tableColumns == null) {
return List.of();
}
return Arrays.stream(tableColumns)
.filter(Objects::nonNull)
.filter(column -> StrUtil.isNotBlank(column.getLabel()) && allowedColumns.contains(column.getProp()))
.collect(Collectors.toList());
}
/** 初始化各办理页面可导出的列表字段白名单。 */
private static Map<String, Set<String>> createWorkflowExportColumns() {
Set<String> commonColumns = Set.of("code", "caseFilingCode", "name", "createUserName", "typeName",
"sessionName", "delegationName", "curTaskName", "instanceState");
Map<String, Set<String>> columns = new HashMap<>();
columns.put("delegation", commonColumns);
columns.put("preAudit", commonColumns);
columns.put("caseCheck", Set.of("code", "caseFilingCode", "name", "createUserName", "typeName",
"sessionName", "delegationName", "curTaskName", "instanceState", "finishTime"));
columns.put("committeeFiling", Set.of("code", "caseFilingCode", "name", "typeName", "sessionName",
"caseFilingResult", "delegationName", "curTaskName", "instanceState"));
columns.put("committeeFilingUnit", Set.of("code", "caseFilingCode", "name", "typeName", "sessionName",
"caseFilingResult", "delegationName", "curTaskName", "instanceState"));
columns.put("schoolLeaderApproval", Set.of("code", "caseFilingCode", "name", "typeName", "undertakeUnits",
"merge", "curTaskName", "auditUser", "instanceState"));
columns.put("unitReply", Set.of("code", "caseFilingCode", "name", "typeName", "caseFilingResult",
"merge", "underTakeName", "underTakeIsMaster", "curTaskName", "auditUser", "instanceState"));
columns.put("feedbackEvaluation", Set.of("code", "caseFilingCode", "name", "typeName", "merge",
"curTaskName", "instanceState"));
return Collections.unmodifiableMap(columns);
}
/**
* 按白名单字段对统计结果执行后端排序,数字按数值比较,文本按中文区域规则比较。
*
@@ -35,6 +35,7 @@ layout("/layouts/platform.html"){
</el-card>
<el-card shadow="never">
<table-tool :columns.sync="tableColumns">
<el-button type="primary" size="small" @click="exportList">导出</el-button>
<el-radio-group v-model="pageForm.approval" size="small" @change="doSearch">
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
@@ -147,6 +148,7 @@ layout("/layouts/platform.html"){
return {
tableColumns: [
{label: "提案编号", prop: "code"},
{label: "立案编号", prop: "caseFilingCode"},
{label: "提案名称", prop: "name", width: "200px"},
{label: "提案人", prop: "createUserName", width: "80px"},
{label: "提案类别", prop: "typeName"},
@@ -172,6 +174,15 @@ layout("/layouts/platform.html"){
this.listUnion()
},
methods: {
exportList() {
this.$downLoad(loc() + "/exportList", {
pageForm: JSON.stringify(this.pageForm),
approval: this.pageForm.approval,
tableColumns: JSON.stringify(this.tableColumns.filter(function (item) {
return item.visible !== false
}))
})
},
openView(row) {
this.$refs.guava.edit(() => {
this.showApprovalForm = false
@@ -59,6 +59,7 @@ layout("/layouts/platform.html"){
<el-card shadow="never">
<table-tool :columns.sync="tableColumns">
<el-button type="primary" size="small" @click="exportList">导出</el-button>
<el-button type="primary" icon="el-icon-plus" size="small" @click="openMerge">并案审核</el-button>
<el-radio-group v-model="pageForm.approval" size="small" @change="doSearch">
<el-radio-button :label="true">已审核</el-radio-button>
@@ -200,6 +201,7 @@ layout("/layouts/platform.html"){
return {
tableColumns: [
{ label: "提案编号", prop: "code" },
{ label: "立案编号", prop: "caseFilingCode" },
{ label: "提案名称", prop: "name", width: "200px" },
{ label: "提案类别", prop: "typeName" },
{ label: "届次", prop: "sessionName" },
@@ -229,6 +231,15 @@ layout("/layouts/platform.html"){
}
},
methods: {
exportList() {
this.$downLoad(loc() + "/exportList", {
pageForm: JSON.stringify(this.pageForm),
approval: this.pageForm.approval,
tableColumns: JSON.stringify(this.tableColumns.filter(function (item) {
return item.visible !== false
}))
})
},
/**
* “作为建议”不再区分主办/协办,只保留办理单位;
* 切到“不予立案”等结果时,同时清空已选单位,避免旧值被误提交。
@@ -59,6 +59,7 @@ layout("/layouts/platform.html"){
<el-card shadow="never">
<table-tool :columns.sync="tableColumns">
<el-button type="primary" size="small" @click="exportList">导出</el-button>
<!-- <el-button type="primary" icon="el-icon-plus" size="small" @click="openMerge">并案审核</el-button>-->
<!-- <el-button type="primary" icon="el-icon-plus" size="small" @click="doUpData">更新</el-button>-->
<el-radio-group v-model="pageForm.approval" size="small" @change="doSearch">
@@ -208,6 +209,7 @@ layout("/layouts/platform.html"){
return {
tableColumns: [
{label: "提案编号", prop: "code"},
{label: "立案编号", prop: "caseFilingCode"},
{label: "提案名称", prop: "name", width: "200px"},
{label: "提案类别", prop: "typeName"},
{label: "届次", prop: "sessionName"},
@@ -231,6 +233,15 @@ layout("/layouts/platform.html"){
}
},
methods: {
exportList() {
this.$downLoad(loc() + "/exportList", {
pageForm: JSON.stringify(this.pageForm),
approval: this.pageForm.approval,
tableColumns: JSON.stringify(this.tableColumns.filter(function (item) {
return item.visible !== false
}))
})
},
/**
* “作为建议”场景下只保留办理单位,协办单位和立案类型都要及时清空,
* 避免旧表单值跟着一起提交到流程里。
@@ -25,6 +25,7 @@ layout("/layouts/platform.html"){
<el-card shadow="never">
<table-tool :columns.sync="tableColumns">
<el-button type="primary" size="small" @click="exportList">导出</el-button>
<el-radio-group v-model="pageForm.approval" size="small" @change="doSearch">
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
@@ -107,6 +108,7 @@ layout("/layouts/platform.html"){
return {
tableColumns: [
{label: "提案编号", prop: "code"},
{label: "立案编号", prop: "caseFilingCode"},
{label: "提案名称", prop: "name", width: "200px"},
{label: "提案人", prop: "createUserName", width: "80px"},
{label: "提案类别", prop: "typeName"},
@@ -122,6 +124,15 @@ layout("/layouts/platform.html"){
}
},
methods: {
exportList() {
this.$downLoad(loc() + "/exportList", {
pageForm: JSON.stringify(this.pageForm),
approval: this.pageForm.approval,
tableColumns: JSON.stringify(this.tableColumns.filter(function (item) {
return item.visible !== false
}))
})
},
openView(row) {
this.$refs.guava.edit(() => {
this.showApprovalForm = false
@@ -25,7 +25,8 @@ layout("/layouts/platform.html"){
</el-card>
<el-card shadow="never">
<table-tool>
<table-tool :columns.sync="tableColumns">
<el-button type="primary" size="small" @click="exportList">导出</el-button>
<el-radio-group v-model="pageForm.approval" size="small" @change="doSearch">
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
@@ -119,6 +120,7 @@ layout("/layouts/platform.html"){
return {
tableColumns: [
{label: "提案编号", prop: "code"},
{label: "立案编号", prop: "caseFilingCode"},
{label: "提案名称", prop: "name", width: "200px"},
{label: "提案类别", prop: "typeName"},
{label: "是否并案", prop: "merge"},
@@ -135,6 +137,15 @@ layout("/layouts/platform.html"){
}
},
methods: {
exportList() {
this.$downLoad(loc() + "/exportList", {
pageForm: JSON.stringify(this.pageForm),
approval: this.pageForm.approval,
tableColumns: JSON.stringify(this.tableColumns.filter(function (item) {
return item.visible !== false
}))
})
},
openView(row) {
this.$refs.guava.edit(() => {
this.showApprovalForm = false
@@ -36,6 +36,7 @@ layout("/layouts/platform.html"){
<el-card shadow="never">
<table-tool :columns.sync="tableColumns">
<el-button type="primary" size="small" @click="exportList">导出</el-button>
<el-radio-group v-model="pageForm.approval" size="small" @change="doSearch">
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
@@ -111,6 +112,7 @@ layout("/layouts/platform.html"){
return {
tableColumns: [
{label: "提案编号", prop: "code"},
{label: "立案编号", prop: "caseFilingCode"},
{label: "提案名称", prop: "name", width: "200px"},
{label: "提案人", prop: "createUserName", width: "80px"},
{label: "提案类别", prop: "typeName"},
@@ -134,6 +136,15 @@ layout("/layouts/platform.html"){
this.listUnion()
},
methods: {
exportList() {
this.$downLoad(loc() + "/exportList", {
pageForm: JSON.stringify(this.pageForm),
approval: this.pageForm.approval,
tableColumns: JSON.stringify(this.tableColumns.filter(function (item) {
return item.visible !== false
}))
})
},
openView(row) {
this.$refs.guava.edit(() => {
this.showApprovalForm = false
@@ -58,7 +58,8 @@ layout("/layouts/platform.html"){
</el-card>
<el-card shadow="never">
<table-tool>
<table-tool :columns.sync="tableColumns">
<el-button type="primary" size="small" @click="exportList">导出</el-button>
<el-radio-group v-model="pageForm.approval" size="small" @change="doSearch">
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
@@ -145,6 +146,7 @@ layout("/layouts/platform.html"){
return {
tableColumns: [
{label: "提案编号", prop: "code"},
{label: "立案编号", prop: "caseFilingCode"},
{label: "提案名称", prop: "name", width: "200px"},
{label: "提案类别", prop: "typeName"},
{label: "办理单位", prop: "undertakeUnits", width: "260px"},
@@ -164,6 +166,15 @@ layout("/layouts/platform.html"){
}
},
methods: {
exportList() {
this.$downLoad(loc() + "/exportList", {
pageForm: JSON.stringify(this.pageForm),
approval: this.pageForm.approval,
tableColumns: JSON.stringify(this.tableColumns.filter(function (item) {
return item.visible !== false
}))
})
},
/**
* 校领导审批列表需要按立案结果切换办理单位展示口径:
* 确定立案显示主办/协办,作为建议只显示办理单位。
@@ -97,6 +97,7 @@ layout("/layouts/platform.html"){
<el-card shadow="never">
<table-tool :columns.sync="tableColumns">
<el-button type="primary" size="small" @click="exportList">导出</el-button>
<el-radio-group v-model="pageForm.approval" size="small" @change="doSearch">
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
@@ -288,6 +289,7 @@ layout("/layouts/platform.html"){
return {
tableColumns: [
{label: "提案编号", prop: "code"},
{label: "立案编号", prop: "caseFilingCode"},
{label: "提案名称", prop: "name", width: "200px"},
{label: "提案类别", prop: "typeName"},
{label: "立案结果", prop: "caseFilingResult"},
@@ -319,6 +321,15 @@ layout("/layouts/platform.html"){
}
},
methods: {
exportList() {
this.$downLoad(loc() + "/exportList", {
pageForm: JSON.stringify(this.pageForm),
approval: this.pageForm.approval,
tableColumns: JSON.stringify(this.tableColumns.filter(function (item) {
return item.visible !== false
}))
})
},
openView(row) {
this.$refs.guava.edit(() => {
this.showApprovalForm = false