From 0bf69602b36e476c5836ca3275d24553ebd176ee Mon Sep 17 00:00:00 2001 From: yuance <182865460@qq.com> Date: Mon, 22 Sep 2025 16:11:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=AE=A1=E8=AE=A1=E6=8A=A5?= =?UTF-8?q?=E5=91=8A=E7=94=9F=E6=88=90=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ai/controller/AuditReportController.java | 41 ++++++--- .../gxwebsoft/ai/dto/AuditReportRequest.java | 59 ++++++++++-- .../gxwebsoft/ai/enums/AuditReportEnum.java | 71 +++++++++++++-- .../gxwebsoft/ai/util/AuditReportUtil.java | 91 +++++++++++++++++++ 4 files changed, 235 insertions(+), 27 deletions(-) create mode 100644 src/main/java/com/gxwebsoft/ai/util/AuditReportUtil.java diff --git a/src/main/java/com/gxwebsoft/ai/controller/AuditReportController.java b/src/main/java/com/gxwebsoft/ai/controller/AuditReportController.java index e12a7af..c821b1e 100644 --- a/src/main/java/com/gxwebsoft/ai/controller/AuditReportController.java +++ b/src/main/java/com/gxwebsoft/ai/controller/AuditReportController.java @@ -20,6 +20,7 @@ import com.gxwebsoft.ai.config.TemplateConfig; import com.gxwebsoft.ai.dto.AuditReportRequest; import com.gxwebsoft.ai.dto.KnowledgeBaseRequest; import com.gxwebsoft.ai.enums.AuditReportEnum; +import com.gxwebsoft.ai.util.AuditReportUtil; import com.gxwebsoft.common.core.web.ApiResult; import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.common.system.entity.User; @@ -88,11 +89,12 @@ public class AuditReportController extends BaseController { KnowledgeBaseRequest knowledgeBaseRequest = new KnowledgeBaseRequest(); knowledgeBaseRequest.setKbId(req.getKbId()); - knowledgeBaseRequest.setFormCommit((req.getFormCommit() > 10) ? req.getFormCommit() / 10 : req.getFormCommit()); + knowledgeBaseRequest.setFormCommit((req.getFormCommit() >= 10) ? req.getFormCommit() / 10 : req.getFormCommit()); String knowledge = knowledgeBaseController.query(knowledgeBaseRequest).getData().toString(); String query = AuditReportEnum.getByCode(req.getFormCommit()).getDesc(); - String ret = this.invok(query, knowledge, req.getHistory(), req.getSuggestion(), loginUser.getUsername()); +// String ret = this.invok(query, knowledge, AuditReportUtil.generateReportContent(req), req.getSuggestion(), loginUser.getUsername()); + String ret = this.invok(query, knowledge, AuditReportUtil.generateReportContentByFormCommit(req), req.getSuggestion(), loginUser.getUsername()); return success(ret); } @@ -112,13 +114,29 @@ public class AuditReportController extends BaseController { // 准备模板数据 Map map = new HashMap<>(); - map.put(AuditReportEnum.AUDIT_TITLE.getCode().toString(), req.getFrom0()); - map.put(AuditReportEnum.AUDIT_BASIS.getCode().toString(), convertNewlines(req.getFrom1())); - map.put(AuditReportEnum.AUDIT_OBJECTIVE.getCode().toString(), convertNewlines(req.getFrom2())); - map.put(AuditReportEnum.AUDIT_SCOPE.getCode().toString(), convertNewlines(req.getFrom3())); + map.put(AuditReportEnum.TITLE.getCode().toString(), req.getFrom00()); + map.put(AuditReportEnum.BASIS.getCode().toString(), convertNewlines(req.getFrom10())); + map.put(AuditReportEnum.OBJECTIVE.getCode().toString(), convertNewlines(req.getFrom20())); + map.put(AuditReportEnum.SCOPE.getCode().toString(), convertNewlines(req.getFrom30())); map.put(AuditReportEnum.UNIT_OVERVIEW.getCode().toString(), convertNewlines(req.getFrom41())); - map.put(AuditReportEnum.ORG_AND_PERSONNEL.getCode().toString(), convertNewlines(req.getFrom42())); - map.put(AuditReportEnum.AUDIT_CONTENT_METHODS.getCode().toString(), convertNewlines(req.getFrom5())); + map.put(AuditReportEnum.ORG_PERSONNEL.getCode().toString(), convertNewlines(req.getFrom42())); + map.put(AuditReportEnum.FINANCIAL_ACCOUNTING.getCode().toString(), convertNewlines(req.getFrom43())); + // 处理列表数据 + map.put(AuditReportEnum.ANNUAL_BUSINESS.getCode().toString(), req.getFrom44()); + map.put(AuditReportEnum.INTERNAL_CONTROL.getCode().toString(), convertNewlines(req.getFrom45())); + map.put(AuditReportEnum.ECONOMIC_POLICIES.getCode().toString(), convertNewlines(req.getFrom51())); + map.put(AuditReportEnum.DEV_STRATEGY.getCode().toString(), convertNewlines(req.getFrom52())); + map.put(AuditReportEnum.MAJOR_ECONOMIC.getCode().toString(), convertNewlines(req.getFrom53())); + map.put(AuditReportEnum.CORP_GOVERNANCE.getCode().toString(), convertNewlines(req.getFrom54())); + map.put(AuditReportEnum.FINANCIAL_LEGAL.getCode().toString(), convertNewlines(req.getFrom55())); + map.put(AuditReportEnum.INTEGRITY_COMPLIANCE.getCode().toString(), convertNewlines(req.getFrom56())); + map.put(AuditReportEnum.PREV_AUDIT_ISSUES.getCode().toString(), convertNewlines(req.getFrom57())); + map.put(AuditReportEnum.OTHER_MATTERS.getCode().toString(), convertNewlines(req.getFrom58())); + map.put(AuditReportEnum.RISK_IDENTIFY.getCode().toString(), convertNewlines(req.getFrom61())); + map.put(AuditReportEnum.RISK_RESPONSE.getCode().toString(), convertNewlines(req.getFrom62())); + map.put(AuditReportEnum.TECHNIQUES.getCode().toString(), convertNewlines(req.getFrom70())); + map.put(AuditReportEnum.SCHEDULE.getCode().toString(), convertNewlines(req.getFrom80())); + map.put(AuditReportEnum.ORGANIZATION.getCode().toString(), convertNewlines(req.getFrom90())); // 使用Easypoi的Word模板功能 XWPFDocument document = WordExportUtil.exportWord07(templateConfig.getWordTemplatePath(), map); @@ -141,14 +159,11 @@ public class AuditReportController extends BaseController { } } - /** - * 将文本中的 \n\n 转换为Word可识别的换行格式 - */ private String convertNewlines(String text) { if (text == null) { return ""; } - String line = System.getProperty("line.separator"); - return text.replace("\n\n", line).replace("\n", line); + text = text.replace("\n\n", "\n"); + return text.replace("\n", "\r\n"); } } diff --git a/src/main/java/com/gxwebsoft/ai/dto/AuditReportRequest.java b/src/main/java/com/gxwebsoft/ai/dto/AuditReportRequest.java index 1fa78be..9bd2c19 100644 --- a/src/main/java/com/gxwebsoft/ai/dto/AuditReportRequest.java +++ b/src/main/java/com/gxwebsoft/ai/dto/AuditReportRequest.java @@ -1,5 +1,7 @@ package com.gxwebsoft.ai.dto; +import java.util.List; + import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -7,16 +9,16 @@ import lombok.Data; public class AuditReportRequest{ @Schema(description = "审计标题") - private String from0; + private String from00; @Schema(description = "审计依据") - private String from1; + private String from10; @Schema(description = "审计目标") - private String from2; + private String from20; @Schema(description = "审计对象和范围") - private String from3; + private String from30; @Schema(description = "被审计单位基本情况-单位概况") private String from41; @@ -24,8 +26,53 @@ public class AuditReportRequest{ @Schema(description = "被审计单位基本情况-机构和人员相关情况") private String from42; - @Schema(description = "审计内容和重点及审计方法") - private String from5; + @Schema(description = "被审计单位基本情况-财务会计、重大会计政策选用及变动情况") + private String from43; + + @Schema(description = "审计期间合并口径年度资产负债及各项业务总体情况") + private List from44; + + @Schema(description = "被审计单位基本情况-相关内部控制") + private String from45; + + @Schema(description = "审计内容和重点及审计方法-贯彻执行党和国家有关经济方针和上级决策部署情况") + private String from51; + + @Schema(description = "审计内容和重点及审计方法-公司发展战略规划的制定、执行和效果情况以及年度责任目标完成情况") + private String from52; + + @Schema(description = "审计内容和重点及审计方法-重大经济事项的决策、执行和效果情况") + private String from53; + + @Schema(description = "审计内容和重点及审计方法-公司法人治理结构的建立、健全和运行情况,内部控制制度的制定和执行情况") + private String from54; + + @Schema(description = "审计内容和重点及审计方法-公司财务的真实合法效益情况,风险管控情况,境外资产管理情况") + private String from55; + + @Schema(description = "审计内容和重点及审计方法-在经济活动中落实有关党风廉政建设责任和遵守廉洁从业规定情况") + private String from56; + + @Schema(description = "审计内容和重点及审计方法-对以往审计中发现问题的整改情况") + private String from57; + + @Schema(description = "审计内容和重点及审计方法-其他需要审计的事项") + private String from58; + + @Schema(description = "重要风险的识别及应对-重要风险的识别") + private String from61; + + @Schema(description = "重要风险的识别及应对-风险的应对策略") + private String from62; + + @Schema(description = "审计技术方法") + private String from70; + + @Schema(description = "工作步骤与时间安排") + private String from80; + + @Schema(description = "审计工作的组织实施") + private String from90; @Schema(description = "知识库ID") private String kbId; diff --git a/src/main/java/com/gxwebsoft/ai/enums/AuditReportEnum.java b/src/main/java/com/gxwebsoft/ai/enums/AuditReportEnum.java index d66b145..f543c45 100644 --- a/src/main/java/com/gxwebsoft/ai/enums/AuditReportEnum.java +++ b/src/main/java/com/gxwebsoft/ai/enums/AuditReportEnum.java @@ -2,13 +2,37 @@ package com.gxwebsoft.ai.enums; public enum AuditReportEnum { - AUDIT_TITLE(0, "审计标题"), - AUDIT_BASIS(1, "审计依据"), - AUDIT_OBJECTIVE(2, "审计目标"), - AUDIT_SCOPE(3, "审计对象和范围"), - UNIT_OVERVIEW(41, "被审计单位基本情况-单位概况"), - ORG_AND_PERSONNEL(42, "被审计单位基本情况-机构和人员相关情况"), - AUDIT_CONTENT_METHODS(5, "审计内容和重点及审计方法"); + // 基础信息 + TITLE(00, "审计标题"), + BASIS(10, "一、审计依据"), + OBJECTIVE(20, "二、审计目标"), + SCOPE(30, "三、审计对象和范围"), + + // 被审计单位基本情况 + UNIT_OVERVIEW(41, "四、被审计单位基本情况-(一)单位概况"), + ORG_PERSONNEL(42, "四、被审计单位基本情况-(二)机构和人员相关情况"), + FINANCIAL_ACCOUNTING(43, "四、被审计单位基本情况-(三)财务会计、重大会计政策选用及变动情况"), + ANNUAL_BUSINESS(44, "四、被审计单位基本情况-(四)审计期间合并口径年度资产负债及各项业务总体情况"), + INTERNAL_CONTROL(45, "四、被审计单位基本情况-(五)相关内部控制"), + + // 审计内容和重点及审计方法 + ECONOMIC_POLICIES(51, "五、审计内容和重点及审计方法-(一)贯彻执行党和国家有关经济方针和上级决策部署情况"), + DEV_STRATEGY(52, "五、审计内容和重点及审计方法-(二)公司发展战略规划的制定、执行和效果情况以及年度责任目标完成情况"), + MAJOR_ECONOMIC(53, "五、审计内容和重点及审计方法-(三)重大经济事项的决策、执行和效果情况"), + CORP_GOVERNANCE(54, "五、审计内容和重点及审计方法-(四)公司法人治理结构的建立、健全和运行情况,内部控制制度的制定和执行情况"), + FINANCIAL_LEGAL(55, "五、审计内容和重点及审计方法-(五)公司财务的真实合法效益情况,风险管控情况,境外资产管理情况"), + INTEGRITY_COMPLIANCE(56, "五、审计内容和重点及审计方法-(六)在经济活动中落实有关党风廉政建设责任和遵守廉洁从业规定情况"), + PREV_AUDIT_ISSUES(57, "五、审计内容和重点及审计方法-(七)对以往审计中发现问题的整改情况"), + OTHER_MATTERS(58, "五、审计内容和重点及审计方法-(八)其他需要审计的事项"), + + // 重要风险的识别及应对 + RISK_IDENTIFY(61, "六、重要风险的识别及应对-(一)重要风险的识别"), + RISK_RESPONSE(62, "六、重要风险的识别及应对-(二)风险的应对策略"), + + // 其他部分 + TECHNIQUES(70, "七、审计技术方法"), + SCHEDULE(80, "八、工作步骤与时间安排"), + ORGANIZATION(90, "九、审计工作的组织实施"); private final Integer code; private final String desc; @@ -42,4 +66,35 @@ public enum AuditReportEnum { AuditReportEnum enumValue = getByCode(code); return enumValue != null ? enumValue.getDesc() : null; } -} + + /** + * 根据代码获取枚举名称 + */ + public static String getNameByCode(Integer code) { + AuditReportEnum enumValue = getByCode(code); + return enumValue != null ? enumValue.name() : null; + } + + /** + * 根据代码获取标题部分(不带序号) + */ + public static String getTitleByCode(Integer code) { + AuditReportEnum enumValue = getByCode(code); + if (enumValue == null) return null; + + String desc = enumValue.getDesc(); + int lastDashIndex = desc.lastIndexOf("-"); + if (lastDashIndex > 0) { + return desc.substring(lastDashIndex + 1); + } + return desc; + } + + /** + * 根据代码获取完整路径(带序号) + */ + public static String getFullPathByCode(Integer code) { + AuditReportEnum enumValue = getByCode(code); + return enumValue != null ? enumValue.getDesc() : null; + } +} \ No newline at end of file diff --git a/src/main/java/com/gxwebsoft/ai/util/AuditReportUtil.java b/src/main/java/com/gxwebsoft/ai/util/AuditReportUtil.java new file mode 100644 index 0000000..422b03f --- /dev/null +++ b/src/main/java/com/gxwebsoft/ai/util/AuditReportUtil.java @@ -0,0 +1,91 @@ +package com.gxwebsoft.ai.util; + +import java.util.List; + +import com.gxwebsoft.ai.dto.AuditReportRequest; + +public class AuditReportUtil { + + public static String generateReportContent(AuditReportRequest request) { + // 创建模板字符串 + String template = + "# \n" + request.getFrom00() + "\n\n" + + "## 一、审计依据\n" + request.getFrom10() + "\n\n" + + "## 二、审计目标\n" + request.getFrom20() + "\n\n" + + "## 三、审计对象和范围\n" + request.getFrom30() + "\n\n" + + "## 四、被审计单位基本情况\n" + + "### (一)单位概况\n" + request.getFrom41() + "\n" + + "### (二)机构和人员相关情况\n" + request.getFrom42() + "\n" + + "### (三)财务会计、重大会计政策选用及变动情况\n" + request.getFrom43() + "\n" + listToString(request.getFrom44()) + "\n" + + "### (五)相关内部控制\n" + request.getFrom45() + "\n\n" + + "## 五、审计内容和重点及审计方法\n" + + "### (一)贯彻执行党和国家有关经济方针和上级决策部署情况\n" + request.getFrom51() + "\n" + + "### (二)公司发展战略规划的制定、执行和效果情况以及年度责任目标完成情况\n" + request.getFrom52() + "\n" + + "### (三)重大经济事项的决策、执行和效果情况\n" + request.getFrom53() + "\n" + + "### (四)公司法人治理结构的建立、健全和运行情况,内部控制制度的制定和执行情况\n" + request.getFrom54() + "\n" + + "### (五)公司财务的真实合法效益情况,风险管控情况,境外资产管理情况\n" + request.getFrom55() + "\n" + + "### (六)在经济活动中落实有关党风廉政建设责任和遵守廉洁从业规定情况\n" + request.getFrom56() + "\n" + + "### (七)对以往审计中发现问题的整改情况\n" + request.getFrom57() + "\n" + + "### (八)其他需要审计的事项\n" + request.getFrom58() + "\n\n" + + "## 六、重要风险的识别及应对\n" + + "### (一)重要风险的识别\n" + request.getFrom61() + "\n" + + "### (二)风险的应对策略\n" + request.getFrom62() + "\n\n" + + "## 七、审计技术方法\n" + request.getFrom70() + "\n\n" + + "## 八、工作步骤与时间安排\n" + request.getFrom80() + "\n\n" + + "## 九、审计工作的组织实施\n" + request.getFrom90(); + + return template; + } + + private static String listToString(List list) { + if (list == null || list.isEmpty()) { + return ""; + } + + StringBuilder sb = new StringBuilder(); + for (String item : list) { + sb.append(item).append("\n"); + } + return sb.toString(); + } + + public static String generateReportContentByFormCommit(AuditReportRequest request) { + int formCommit = (request.getFormCommit() >= 10) ? request.getFormCommit() / 10 : request.getFormCommit(); + // 创建模板字符串 + String template = ""; + if(formCommit == 5) { + template = + "## 四、被审计单位基本情况\n" + + "### (一)单位概况\n" + request.getFrom41() + "\n" + + "### (二)机构和人员相关情况\n" + request.getFrom42() + "\n" + + "### (三)财务会计、重大会计政策选用及变动情况\n" + request.getFrom43() + "\n" + listToString(request.getFrom44()) + "\n" + + "### (五)相关内部控制\n" + request.getFrom45() + "\n\n" + + "## 五、审计内容和重点及审计方法\n" + + "### (一)贯彻执行党和国家有关经济方针和上级决策部署情况\n" + request.getFrom51() + "\n" + + "### (二)公司发展战略规划的制定、执行和效果情况以及年度责任目标完成情况\n" + request.getFrom52() + "\n" + + "### (三)重大经济事项的决策、执行和效果情况\n" + request.getFrom53() + "\n" + + "### (四)公司法人治理结构的建立、健全和运行情况,内部控制制度的制定和执行情况\n" + request.getFrom54() + "\n" + + "### (五)公司财务的真实合法效益情况,风险管控情况,境外资产管理情况\n" + request.getFrom55() + "\n" + + "### (六)在经济活动中落实有关党风廉政建设责任和遵守廉洁从业规定情况\n" + request.getFrom56() + "\n" + + "### (七)对以往审计中发现问题的整改情况\n" + request.getFrom57() + "\n" + + "### (八)其他需要审计的事项\n" + request.getFrom58() + "\n\n"; + }else if(formCommit == 6) { + template = + "## 五、审计内容和重点及审计方法\n" + + "### (一)贯彻执行党和国家有关经济方针和上级决策部署情况\n" + request.getFrom51() + "\n" + + "### (二)公司发展战略规划的制定、执行和效果情况以及年度责任目标完成情况\n" + request.getFrom52() + "\n" + + "### (三)重大经济事项的决策、执行和效果情况\n" + request.getFrom53() + "\n" + + "### (四)公司法人治理结构的建立、健全和运行情况,内部控制制度的制定和执行情况\n" + request.getFrom54() + "\n" + + "### (五)公司财务的真实合法效益情况,风险管控情况,境外资产管理情况\n" + request.getFrom55() + "\n" + + "### (六)在经济活动中落实有关党风廉政建设责任和遵守廉洁从业规定情况\n" + request.getFrom56() + "\n" + + "### (七)对以往审计中发现问题的整改情况\n" + request.getFrom57() + "\n" + + "### (八)其他需要审计的事项\n" + request.getFrom58() + "\n\n" + + "## 六、重要风险的识别及应对\n" + + "### (一)重要风险的识别\n" + request.getFrom61() + "\n" + + "### (二)风险的应对策略\n" + request.getFrom62() + "\n\n"; + }else { + template = request.getHistory(); + } + return template.replaceAll("#", ""); + } +}