This commit is contained in:
=
2026-08-05 10:27:25 +08:00
parent d5f4543493
commit ec900e5b4d
2 changed files with 67 additions and 14 deletions
@@ -187,6 +187,9 @@ public class ProposalExportServiceImpl extends BaseServiceImpl<ProposalInfo> imp
info.id,
info.name,
info.code,
info.caseFilingCode,
info.caseFilingResult,
info.caseFilingType,
info.researchFindings,
info.brief,
info.measures,
@@ -194,6 +197,10 @@ public class ProposalExportServiceImpl extends BaseServiceImpl<ProposalInfo> imp
tcde.unitName,
tcde.mobile,
type.name AS typeName,
caseFilingResultDict.name AS caseFilingResultName,
caseFilingTypeDict.name AS caseFilingTypeName,
EXISTS (SELECT 1 FROM proposal_consolidation consolidation
WHERE JSON_CONTAINS(consolidation.consolidationIds, JSON_QUOTE(info.id))) AS isConsolidation,
tcs.j,
tcs.c,
tcs.fullName AS sessionName,
@@ -204,6 +211,10 @@ public class ProposalExportServiceImpl extends BaseServiceImpl<ProposalInfo> imp
LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName
LEFT JOIN sys_dict caseFilingResultDict ON caseFilingResultDict.code = info.caseFilingResult
AND caseFilingResultDict.parentId = (SELECT id FROM sys_dict WHERE code = 'PROPOSAL_CASE_FILING_RESULT' LIMIT 1)
LEFT JOIN sys_dict caseFilingTypeDict ON caseFilingTypeDict.code = info.caseFilingType
AND caseFilingTypeDict.parentId = (SELECT id FROM sys_dict WHERE code = 'PROPOSAL_CASE_FILING_TYPE' LIMIT 1)
$condition
""");
Cnd cnd = Cnd.NEW();
@@ -217,23 +228,28 @@ public class ProposalExportServiceImpl extends BaseServiceImpl<ProposalInfo> imp
list.get(i).put("index", i + 1);
list.get(i).put("brief", HtmlUtil.cleanHtmlTag(list.get(i).getString("brief")));
list.get(i).put("measures", HtmlUtil.cleanHtmlTag(list.get(i).getString("measures")));
// Excel 汇总表使用中文并案标识,避免直接输出数据库布尔值。
list.get(i).put("isConsolidationName", Boolean.TRUE.equals(list.get(i).getBoolean("isConsolidation")) ? "" : "");
// 流程实例
ProcessInstance instance = dao().fetch(ProcessInstance.class, Cnd.where(ProcessInstance::getBusinessNo, "=", list.get(i).getString("id")));
// 查询附议人信息
ProcessTask inviteTask = dao().fetch(ProcessTask.class,
Cnd.where(ProcessTask::getProcessInstanceId, "=", instance.getId())
.and(ProcessTask::getTaskName, "=", "invite")
.and(ProcessTask::getTaskState, "in",
List.of(ProcessTaskStateEnum.DOING.getCode(), ProcessTaskStateEnum.FINISHED.getCode()))
.desc(ProcessTask::getCreatedAt));
// 历史提案可能没有迁移流程实例,此时仅不导出附议人,避免影响汇总表其他数据。
if (instance != null) {
// 查询附议人信息
ProcessTask inviteTask = dao().fetch(ProcessTask.class,
Cnd.where(ProcessTask::getProcessInstanceId, "=", instance.getId())
.and(ProcessTask::getTaskName, "=", "invite")
.and(ProcessTask::getTaskState, "in",
List.of(ProcessTaskStateEnum.DOING.getCode(), ProcessTaskStateEnum.FINISHED.getCode()))
.desc(ProcessTask::getCreatedAt));
if (inviteTask != null) {
NutMap variable = Json.fromJson(NutMap.class, inviteTask.getVariable());
List<NutMap> seconders = variable.getAsList(FlowConst.TASK_FORM_DATA_PREFIX + "seconder", NutMap.class);
if (Lang.isNotEmpty(seconders)) {
list.get(i).put("secondedUserNames", seconders.stream().map(v -> v.getString("userName")).collect(Collectors.joining(",")));
if (inviteTask != null) {
NutMap variable = Json.fromJson(NutMap.class, inviteTask.getVariable());
List<NutMap> seconders = variable.getAsList(FlowConst.TASK_FORM_DATA_PREFIX + "seconder", NutMap.class);
if (Lang.isNotEmpty(seconders)) {
list.get(i).put("secondedUserNames", seconders.stream().map(v -> v.getString("userName")).collect(Collectors.joining(",")));
}
}
}
}
@@ -241,6 +257,10 @@ public class ProposalExportServiceImpl extends BaseServiceImpl<ProposalInfo> imp
List<ExcelExportEntity> exportEntities = new ArrayList<>();
exportEntities.add(new ExcelExportEntity("序号", "index", 10));
exportEntities.add(new ExcelExportEntity("提案编号", "code", 20));
exportEntities.add(new ExcelExportEntity("立案编号", "caseFilingCode", 20));
exportEntities.add(new ExcelExportEntity("立案结果", "caseFilingResultName", 15));
exportEntities.add(new ExcelExportEntity("立案类型", "caseFilingTypeName", 15));
exportEntities.add(new ExcelExportEntity("是否并案", "isConsolidationName", 12));
exportEntities.add(new ExcelExportEntity("提案名称", "name", 20));
exportEntities.add(new ExcelExportEntity("提案案由", "brief", 40));
exportEntities.add(new ExcelExportEntity("代表调研情况", "researchFindings", 40));
@@ -870,18 +890,23 @@ public class ProposalExportServiceImpl extends BaseServiceImpl<ProposalInfo> imp
info.id,
info.name,
info.code,
info.caseFilingCode,
info.caseFilingResult,
info.caseFilingType,
info.researchFindings,
info.brief,
info.measures,
info.createUserName,
tcde.unitName,
tcde.mobile,
IF(mer.proposalId IS NOT NULL, '是', '') AS merge,
IF(mer.proposalId IS NOT NULL, '是', '') AS merge,
type.name AS typeName,
tcs.j,
tcs.c,
tcs.fullName AS sessionName,
tcd.`name` AS delegationName,
ins.state AS instanceState,
t.displayName AS curTaskName,
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
FROM
@@ -891,6 +916,8 @@ public class ProposalExportServiceImpl extends BaseServiceImpl<ProposalInfo> imp
LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName
LEFT JOIN wf_process_instance ins ON ins.businessNo = info.id
LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10
LEFT JOIN proposal_reply_unit pru ON pru.proposalId = info.id
$condition
""");
@@ -935,6 +962,24 @@ public class ProposalExportServiceImpl extends BaseServiceImpl<ProposalInfo> imp
Map<String, String> processInstanceStateMap = processInstanceState.stream().collect(Collectors.toMap(Sys_dict::getCode, Sys_dict::getName));
for (NutMap row : list) {
String caseFilingResultCode = row.getString("caseFilingResult");
String masterUnitName = StrUtil.blankToDefault(row.getString("masterUnitName"), "");
String slaveUnitNames = StrUtil.blankToDefault(row.getString("slaveUnitNames"), "");
// 自定义导出没有前端单元格渲染,需要按列表相同规则生成承办单位文本。
if ("SUGGESTION".equals(caseFilingResultCode)) {
row.put("undertakeUnits", StrUtil.isNotBlank(masterUnitName) ? masterUnitName : slaveUnitNames);
} else if ("CONFIRM_FILING".equals(caseFilingResultCode)) {
List<String> undertakeUnitTexts = new ArrayList<>();
if (StrUtil.isNotBlank(masterUnitName)) {
undertakeUnitTexts.add("主办:" + masterUnitName);
}
if (StrUtil.isNotBlank(slaveUnitNames)) {
undertakeUnitTexts.add("协办:" + slaveUnitNames);
}
row.put("undertakeUnits", String.join("", undertakeUnitTexts));
} else {
row.put("undertakeUnits", "");
}
row.put("caseFilingResult", caseFilingResultMap.get(row.getString("caseFilingResult")));
row.put("caseFilingType", caseFilingTypeMap.get(row.getString("caseFilingType")));
row.put("instanceState", processInstanceStateMap.get(row.getString("instanceState")));
@@ -33,7 +33,8 @@ const home = {
<div class="quick-grid">
<div class="section-title">推荐服务</div>
<div class="quick-scroll">
<div class="quick-scroll-grid">
<div class="quick-scroll-grid"
:class="{ 'quick-scroll-grid--single-row': quickEntries.length <= 4 }">
<div class="quick-entry-item"
v-for="item in quickEntries"
@click="menuClick(item)"
@@ -594,6 +595,13 @@ const home = {
min-width: 100%;
}
/* 推荐服务不超过四项时横向排列,避免少量服务按两行纵向展示。 */
.quick-scroll-grid--single-row {
grid-auto-flow: row;
grid-template-rows: 82px;
grid-template-columns: repeat(4, 25%);
}
.quick-entry-item {
min-width: 0;
height: 82px;