优化审计报告生成接口

This commit is contained in:
2025-09-22 16:11:30 +08:00
parent dff30a95a3
commit 0bf69602b3
4 changed files with 235 additions and 27 deletions

View File

@@ -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<String, Object> 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");
}
}

View File

@@ -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<String> 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;

View File

@@ -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;
}
}

View File

@@ -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<String> 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("#", "");
}
}