新增审计内容10-廉政情况接口

This commit is contained in:
2025-12-12 15:22:07 +08:00
parent 4c022d3c21
commit da4b230bd7
5 changed files with 1080 additions and 0 deletions

View File

@@ -0,0 +1,431 @@
package com.gxwebsoft.ai.constants;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
/**
* 党风廉政建设责任制审计常量类
*/
public class AuditContent10PartyConductConstants {
// 大类定义
public static final String CATEGORY_TARGET_RESPONSIBILITY = "落实党风廉政建设责任制";
public static final String CATEGORY_INSPECTION_RECTIFICATION = "巡视整改工作";
public static final String CATEGORY_DISCIPLINE_REFORM = "深化纪律检查体制改革";
// 子类定义 - 落实党风廉政建设责任制
public static final String SUBCATEGORY_MAIN_RESPONSIBILITY = "落实主体责任和监督责任";
public static final String SUBCATEGORY_EIGHT_REGULATIONS = "落实中央八项规定精神工作";
public static final String SUBCATEGORY_ANTI_CORRUPTION = "开展查处发生在群众身边的\"四风\"和腐败问题专项工作";
public static final String SUBCATEGORY_DISCIPLINE_ENFORCEMENT = "严明纪律确保政令畅通";
// 子类定义 - 巡视整改工作
public static final String SUBCATEGORY_MONTHLY_REPORT = "严格执行月报告制度";
public static final String SUBCATEGORY_RECTIFICATION_TASK = "按时完成整改任务";
public static final String SUBCATEGORY_RECTIFICATION_ACCOUNTABILITY = "因巡视整改不给力被追究";
// 子类定义 - 深化纪律检查体制改革
public static final String SUBCATEGORY_THREE_TURNS = "聚焦主业主责,持续深化\"三转\"工作";
public static final String SUBCATEGORY_SYSTEM_CONSTRUCTION = "健全完善深化纪检体制改革的相关制度文件并抓好贯彻落实";
// 小类定义
public static final String DETAIL_LEADERSHIP_STRENGTHENING = "1 强化组织领导";
public static final String DETAIL_TASK_DEPLOYMENT = "2 及时部署工作任务";
public static final String DETAIL_PRESSURE_TRANSMISSION = "3 层层传到责任和压力";
public static final String DETAIL_CASE_DOUBLE_CHECK = "4 坚持\"一案双查\"";
public static final String DETAIL_WORK_REPORTING = "5 及时汇报工作情况";
public static final String DETAIL_INSPECTION_AND_SUPERVISION = "1 开展监督检查";
public static final String DETAIL_DATA_SUBMISSION = "2 报送数据和资料";
public static final String DETAIL_CASE_HANDLING = "3 查办违反中央八项规定精神案件";
public static final String DETAIL_EXPOSURE_NOTIFICATION = "4 通报曝光";
public static final String DETAIL_HOUSING_CLEARANCE = "5 清退干部职工多占住房";
public static final String DETAIL_PROBLEM_CLUE_HANDLING = "1 及时梳理处置问题线索";
public static final String DETAIL_CASE_INVESTIGATION = "2 查处一批案件";
public static final String DETAIL_TYPICAL_CASE_EXPOSURE = "3 通报曝光一批典型案件";
public static final String DETAIL_ATMOSPHERE_CREATION = "4 营造氛围";
public static final String DETAIL_PROBLEM_CONFESSION = "5 督促违纪人员主动交代问题";
public static final String DETAIL_SUMMARY_AND_MECHANISM = "6 进行总结并建立长效机制";
public static final String DETAIL_NORMALIZED_GOVERNANCE = "7 专项工作纳入常态化治理";
public static final String DETAIL_POLITICAL_DISCIPLINE = "1 严明政治纪律和组织纪律";
public static final String DETAIL_MAJOR_DECISION = "2 按时完成中央和自治区重大决策部署";
public static final String DETAIL_CASE_COMPLETION = "3 按时完成转办督办案件";
// 大类与子类映射关系
public static final Map<String, List<String>> CATEGORY_SUBCATEGORY_MAP = new HashMap<>();
static {
// 落实党风廉政建设责任制
CATEGORY_SUBCATEGORY_MAP.put(CATEGORY_TARGET_RESPONSIBILITY, Arrays.asList(
SUBCATEGORY_MAIN_RESPONSIBILITY,
SUBCATEGORY_EIGHT_REGULATIONS,
SUBCATEGORY_ANTI_CORRUPTION,
SUBCATEGORY_DISCIPLINE_ENFORCEMENT
));
// 巡视整改工作
CATEGORY_SUBCATEGORY_MAP.put(CATEGORY_INSPECTION_RECTIFICATION, Arrays.asList(
SUBCATEGORY_MONTHLY_REPORT,
SUBCATEGORY_RECTIFICATION_TASK,
SUBCATEGORY_RECTIFICATION_ACCOUNTABILITY
));
// 深化纪律检查体制改革
CATEGORY_SUBCATEGORY_MAP.put(CATEGORY_DISCIPLINE_REFORM, Arrays.asList(
SUBCATEGORY_THREE_TURNS,
SUBCATEGORY_SYSTEM_CONSTRUCTION
));
}
// 子类与小类映射关系
public static final Map<String, List<String>> SUBCATEGORY_DETAIL_MAP = new HashMap<>();
static {
// 落实主体责任和监督责任
SUBCATEGORY_DETAIL_MAP.put(SUBCATEGORY_MAIN_RESPONSIBILITY, Arrays.asList(
DETAIL_LEADERSHIP_STRENGTHENING,
DETAIL_TASK_DEPLOYMENT,
DETAIL_PRESSURE_TRANSMISSION,
DETAIL_CASE_DOUBLE_CHECK,
DETAIL_WORK_REPORTING
));
// 落实中央八项规定精神工作
SUBCATEGORY_DETAIL_MAP.put(SUBCATEGORY_EIGHT_REGULATIONS, Arrays.asList(
DETAIL_INSPECTION_AND_SUPERVISION,
DETAIL_DATA_SUBMISSION,
DETAIL_CASE_HANDLING,
DETAIL_EXPOSURE_NOTIFICATION,
DETAIL_HOUSING_CLEARANCE
));
// 开展查处发生在群众身边的"四风"和腐败问题专项工作
SUBCATEGORY_DETAIL_MAP.put(SUBCATEGORY_ANTI_CORRUPTION, Arrays.asList(
DETAIL_PROBLEM_CLUE_HANDLING,
DETAIL_CASE_INVESTIGATION,
DETAIL_TYPICAL_CASE_EXPOSURE,
DETAIL_ATMOSPHERE_CREATION,
DETAIL_PROBLEM_CONFESSION,
DETAIL_SUMMARY_AND_MECHANISM,
DETAIL_NORMALIZED_GOVERNANCE
));
// 严明纪律确保政令畅通
SUBCATEGORY_DETAIL_MAP.put(SUBCATEGORY_DISCIPLINE_ENFORCEMENT, Arrays.asList(
DETAIL_POLITICAL_DISCIPLINE,
DETAIL_MAJOR_DECISION,
DETAIL_CASE_COMPLETION
));
// 巡视整改工作的子类
SUBCATEGORY_DETAIL_MAP.put(SUBCATEGORY_MONTHLY_REPORT, Arrays.asList("1 严格执行月报告制度"));
SUBCATEGORY_DETAIL_MAP.put(SUBCATEGORY_RECTIFICATION_TASK, Arrays.asList("2 按时完成整改任务"));
SUBCATEGORY_DETAIL_MAP.put(SUBCATEGORY_RECTIFICATION_ACCOUNTABILITY, Arrays.asList("3 因巡视整改不给力被追究"));
// 深化纪律检查体制改革的子类
SUBCATEGORY_DETAIL_MAP.put(SUBCATEGORY_THREE_TURNS, Arrays.asList("1 聚焦主业主责,持续深化\"三转\"工作"));
SUBCATEGORY_DETAIL_MAP.put(SUBCATEGORY_SYSTEM_CONSTRUCTION, Arrays.asList("2 健全完善深化纪检体制改革的相关制度文件并抓好贯彻落实"));
}
// 固定顺序的示例数据列表按审计内容10.txt中的顺序
private static final List<JSONObject> FIXED_ORDER_EXAMPLE_DATA = new ArrayList<>();
static {
// 落实主体责任和监督责任
addExampleData("落实党风廉政建设责任制", "落实主体责任和监督责任", "1 强化组织领导", "建立责任清单、明确党组、纪检责任");
addExampleData("落实党风廉政建设责任制", "落实主体责任和监督责任", "1 强化组织领导", "建立健全反腐败领导机制,人员调整后及时进行分工,并全年召开两次以上协调会");
addExampleData("落实党风廉政建设责任制", "落实主体责任和监督责任", "1 强化组织领导", "主要领导认真履行第一责任人责任对党风廉政建设重要工作亲自部署、重大问题亲自过问、重点环节亲自协调、重要案件亲自督办5次以上");
addExampleData("落实党风廉政建设责任制", "落实主体责任和监督责任", "1 强化组织领导", "领导班子其他成员对职责范围内的党风廉政建设承担主要责任与分管联系部门研究安排党风廉政建设工作4次以上");
addExampleData("落实党风廉政建设责任制", "落实主体责任和监督责任", "2 及时部署工作任务", "有党风廉政建设任务分工方案党组专题研究部署党风廉政建设工作4次以上");
addExampleData("落实党风廉政建设责任制", "落实主体责任和监督责任", "3 层层传到责任和压力", "主要领导检查和调研党风廉政建设各一次以上,每年听取分管联系部门的党风廉政建设一次以上且每年亲自上廉政党课不少于1次");
addExampleData("落实党风廉政建设责任制", "落实主体责任和监督责任", "3 层层传到责任和压力", "分管领导对分管联系部门党风廉政建设检查和调研各1次以上每年听取分管联系部门的党风廉政建设情况汇报一次以上到分管联系部门上廉政党课1次以上");
addExampleData("落实党风廉政建设责任制", "落实主体责任和监督责任", "3 层层传到责任和压力", "党组、纪检组注重抓早抓小经常进行咬耳扯袖、红脸出汗及时开展约谈、集体廉政谈话等工作3次以上");
addExampleData("落实党风廉政建设责任制", "落实主体责任和监督责任", "3 层层传到责任和压力", "开展述责评议工作");
addExampleData("落实党风廉政建设责任制", "落实主体责任和监督责任", "4 坚持\"一案双查\"", "对发生在本单位的较严重的违反政治纪律、组织纪律等问题进行\"一案双查\"");
addExampleData("落实党风廉政建设责任制", "落实主体责任和监督责任", "4 坚持\"一案双查\"", "出现\"四风\"和腐败等顶风违纪问题的");
addExampleData("落实党风廉政建设责任制", "落实主体责任和监督责任", "4 坚持\"一案双查\"", "出现区域性系统性违纪违法问题突出的");
addExampleData("落实党风廉政建设责任制", "落实主体责任和监督责任", "4 坚持\"一案双查\"", "出现上级交办的党风廉政建设事项不传达部署和落实的");
addExampleData("落实党风廉政建设责任制", "落实主体责任和监督责任", "4 坚持\"一案双查\"", "出现违纪行为隐瞒不报压案不查等问题而未进行责任追究被中央、自治区进行挂牌督办或直接问责、约谈等");
addExampleData("落实党风廉政建设责任制", "落实主体责任和监督责任", "5 及时汇报工作情况", "党组、纪检组向自治区党委、纪委汇报\"两个\"责任落实情况两次以上");
addExampleData("落实党风廉政建设责任制", "落实主体责任和监督责任", "5 及时汇报工作情况", "班子成员年底向自治区纪委报送个人落实\"两个责任\"情况报告");
addExampleData("落实党风廉政建设责任制", "落实主体责任和监督责任", "5 及时汇报工作情况", "按照自治区纪委部署开展其他工作,并按时报送总结报告的");
// 落实中央八项规定精神工作
addExampleData("落实党风廉政建设责任制", "落实中央八项规定精神工作", "1 开展监督检查", "部署开展监督检查3次以上");
addExampleData("落实党风廉政建设责任制", "落实中央八项规定精神工作", "2 报送数据和资料", "每月按时报送中央八项规定精神案件有关统计数据和有关资料");
addExampleData("落实党风廉政建设责任制", "落实中央八项规定精神工作", "2 报送数据和资料", "每月不按时报送或未按要求报送的");
addExampleData("落实党风廉政建设责任制", "落实中央八项规定精神工作", "3 查办违反中央八项规定精神案件", "及时查处监督检查中发现的问题和中央、自治区转办督办的问题线索");
addExampleData("落实党风廉政建设责任制", "落实中央八项规定精神工作", "3 查办违反中央八项规定精神案件", "出现违反中央八项规定精神问题被上级查处的,或查处但问责太轻,被上级责令重新查办");
addExampleData("落实党风廉政建设责任制", "落实中央八项规定精神工作", "4 通报曝光", "对受到党纪政纪处分的问题全部进行通报曝光的");
addExampleData("落实党风廉政建设责任制", "落实中央八项规定精神工作", "5 清退干部职工多占住房", "到年底还不能完成干部职工多占住房清退的");
addExampleData("落实党风廉政建设责任制", "落实中央八项规定精神工作", "5 清退干部职工多占住房", "信访反映清房工作不到位被查实的");
// 开展查处发生在群众身边的"四风"和腐败问题专项工作
addExampleData("落实党风廉政建设责任制", "开展查处发生在群众身边的\"四风\"和腐败问题专项工作", "1 及时梳理处置问题线索", "对收到或者上级交办问题线索进行转办督办或直接查办的");
addExampleData("落实党风廉政建设责任制", "开展查处发生在群众身边的\"四风\"和腐败问题专项工作", "2 查处一批案件", "因查处案件不力被自治区约谈或通报批评的");
addExampleData("落实党风廉政建设责任制", "开展查处发生在群众身边的\"四风\"和腐败问题专项工作", "3 通报曝光一批典型案件", "对查处的案件进行通报曝光");
addExampleData("落实党风廉政建设责任制", "开展查处发生在群众身边的\"四风\"和腐败问题专项工作", "4 营造氛围", "加大宣传力度,用典型案例进行警示教育");
addExampleData("落实党风廉政建设责任制", "开展查处发生在群众身边的\"四风\"和腐败问题专项工作", "5 督促违纪人员主动交代问题", "以文件形式或在网络、报纸、电视等媒介上发布公告,督促违纪人员主动交代问题并主动上缴违纪所得");
addExampleData("落实党风廉政建设责任制", "开展查处发生在群众身边的\"四风\"和腐败问题专项工作", "6 进行总结并建立长效机制", "没有在6月20日前进行总结");
addExampleData("落实党风廉政建设责任制", "开展查处发生在群众身边的\"四风\"和腐败问题专项工作", "6 进行总结并建立长效机制", "没有结合专项工作中发现存在的突出问题建立完善制度措施");
addExampleData("落实党风廉政建设责任制", "开展查处发生在群众身边的\"四风\"和腐败问题专项工作", "7 专项工作纳入常态化治理", "6月后在全部二层单位开展专项工作");
// 严明纪律确保政令畅通
addExampleData("落实党风廉政建设责任制", "严明纪律确保政令畅通", "1 严明政治纪律和组织纪律", "有违反政治纪律等问题被中央、自治区查处的");
addExampleData("落实党风廉政建设责任制", "严明纪律确保政令畅通", "2 按时完成中央和自治区重大决策部署", "出现问题被中央、自治区问责的");
addExampleData("落实党风廉政建设责任制", "严明纪律确保政令畅通", "3 按时完成转办督办案件", "按时完成自治区纪委转办督办的党风政风类案件");
addExampleData("落实党风廉政建设责任制", "严明纪律确保政令畅通", "3 按时完成转办督办案件", "不按时完成或不完成的");
// 巡视整改工作
addExampleData("巡视整改工作", "严格执行月报告制度", "1 严格执行月报告制度", "严格执行月报告制度");
addExampleData("巡视整改工作", "按时完成整改任务", "2 按时完成整改任务", "按时完成整改任务");
addExampleData("巡视整改工作", "因巡视整改不给力被追究", "3 因巡视整改不给力被追究", "因巡视整改不给力被追究");
// 深化纪律检查体制改革
addExampleData("深化纪律检查体制改革", "聚焦主业主责,持续深化\"三转\"工作", "1 聚焦主业主责,持续深化\"三转\"工作", "纪检组长或纪工委书记不分管具体业务工作,专职抓执纪监督问责工作");
addExampleData("深化纪律检查体制改革", "聚焦主业主责,持续深化\"三转\"工作", "1 聚焦主业主责,持续深化\"三转\"工作", "检查发现有参与业务工作");
addExampleData("深化纪律检查体制改革", "健全完善深化纪检体制改革的相关制度文件并抓好贯彻落实", "2 健全完善深化纪检体制改革的相关制度文件并抓好贯彻落实", "年底前制定有1项以上配套制度文件");
}
private static void addExampleData(String category, String subCategory, String detailCategory, String content) {
JSONObject obj = new JSONObject();
obj.put("category", category);
obj.put("subCategory", subCategory);
obj.put("detailCategory", detailCategory);
obj.put("content", content);
obj.put("executionStatus", "");
obj.put("workPaperIndex", "[\"实际存在的完整文件名1\", \"实际存在的完整文件名2\", \"...\"]");
FIXED_ORDER_EXAMPLE_DATA.add(obj);
}
/**
* 获取所有固定顺序的示例数据
*/
public static List<JSONObject> getFixedOrderExampleData() {
return new ArrayList<>(FIXED_ORDER_EXAMPLE_DATA);
}
/**
* 获取指定子类的示例数据
*/
public static JSONArray getExampleDataBySubCategory(String subCategory) {
JSONArray result = new JSONArray();
for (JSONObject example : FIXED_ORDER_EXAMPLE_DATA) {
if (subCategory.equals(example.getString("subCategory"))) {
result.add(example);
}
}
return result;
}
/**
* 获取固定顺序的内容列表
*/
public static List<String> getFixedOrderContentList() {
List<String> contentList = new ArrayList<>();
for (JSONObject example : FIXED_ORDER_EXAMPLE_DATA) {
contentList.add(example.getString("content"));
}
return contentList;
}
/**
* 获取内容在固定顺序中的索引
*/
public static int getContentFixedOrderIndex(String content) {
List<String> fixedOrder = getFixedOrderContentList();
int index = fixedOrder.indexOf(content);
return index != -1 ? index : Integer.MAX_VALUE;
}
/**
* 获取所有子类列表(包括所有大类的子类)
*/
public static List<String> getAllSubCategories() {
List<String> allSubCategories = new ArrayList<>();
for (List<String> subCategories : CATEGORY_SUBCATEGORY_MAP.values()) {
allSubCategories.addAll(subCategories);
}
return allSubCategories;
}
// 大类顺序 - 用于排序
public static final List<String> CATEGORY_ORDER = Arrays.asList(
CATEGORY_TARGET_RESPONSIBILITY,
CATEGORY_INSPECTION_RECTIFICATION,
CATEGORY_DISCIPLINE_REFORM
);
// 大类描述
public static final Map<String, String> CATEGORY_DESCRIPTIONS = new HashMap<>();
static {
CATEGORY_DESCRIPTIONS.put(CATEGORY_TARGET_RESPONSIBILITY, "落实党风廉政建设主体责任和监督责任");
CATEGORY_DESCRIPTIONS.put(CATEGORY_INSPECTION_RECTIFICATION, "巡视反馈问题的整改落实情况");
CATEGORY_DESCRIPTIONS.put(CATEGORY_DISCIPLINE_REFORM, "深化纪律检查体制改革工作情况");
}
// 子类描述
public static final Map<String, String> SUBCATEGORY_DESCRIPTIONS = new HashMap<>();
static {
SUBCATEGORY_DESCRIPTIONS.put(SUBCATEGORY_MAIN_RESPONSIBILITY, "党委主体责任和纪委监督责任落实情况");
SUBCATEGORY_DESCRIPTIONS.put(SUBCATEGORY_EIGHT_REGULATIONS, "中央八项规定精神落实情况");
SUBCATEGORY_DESCRIPTIONS.put(SUBCATEGORY_ANTI_CORRUPTION, "查处群众身边腐败问题工作情况");
SUBCATEGORY_DESCRIPTIONS.put(SUBCATEGORY_DISCIPLINE_ENFORCEMENT, "纪律执行和政令畅通情况");
SUBCATEGORY_DESCRIPTIONS.put(SUBCATEGORY_MONTHLY_REPORT, "巡视整改月报告制度执行情况");
SUBCATEGORY_DESCRIPTIONS.put(SUBCATEGORY_RECTIFICATION_TASK, "巡视整改任务完成情况");
SUBCATEGORY_DESCRIPTIONS.put(SUBCATEGORY_RECTIFICATION_ACCOUNTABILITY, "巡视整改责任追究情况");
SUBCATEGORY_DESCRIPTIONS.put(SUBCATEGORY_THREE_TURNS, "纪检机构转职能、转方式、转作风工作情况");
SUBCATEGORY_DESCRIPTIONS.put(SUBCATEGORY_SYSTEM_CONSTRUCTION, "纪检体制改革制度建设情况");
}
// 执行状态选项
public static final String STATUS_IMPLEMENTED = "已落实";
public static final String STATUS_PARTIALLY_IMPLEMENTED = "部分落实";
public static final String STATUS_NOT_IMPLEMENTED = "未落实";
public static final String STATUS_NOT_APPLICABLE = "不适用";
// 关键词权重
public static final Map<String, Integer> KEYWORD_WEIGHTS = new HashMap<>();
static {
KEYWORD_WEIGHTS.put("党风廉政建设", 10);
KEYWORD_WEIGHTS.put("主体责任", 9);
KEYWORD_WEIGHTS.put("监督责任", 9);
KEYWORD_WEIGHTS.put("中央八项规定", 8);
KEYWORD_WEIGHTS.put("廉洁从业", 8);
KEYWORD_WEIGHTS.put("巡视整改", 7);
KEYWORD_WEIGHTS.put("纪律检查", 7);
KEYWORD_WEIGHTS.put("廉政谈话", 6);
KEYWORD_WEIGHTS.put("一案双查", 6);
KEYWORD_WEIGHTS.put("四风", 5);
KEYWORD_WEIGHTS.put("腐败", 5);
}
// 工作底稿关键词
public static final Map<String, String> WORK_PAPER_KEYWORDS = new HashMap<>();
static {
WORK_PAPER_KEYWORDS.put("会议纪要", "党委会议纪要、党风廉政建设专题会议纪要");
WORK_PAPER_KEYWORDS.put("责任清单", "党风廉政建设责任清单、主体责任清单");
WORK_PAPER_KEYWORDS.put("检查报告", "党风廉政建设检查报告、巡视整改报告");
WORK_PAPER_KEYWORDS.put("谈话记录", "廉政谈话记录、提醒谈话记录");
WORK_PAPER_KEYWORDS.put("制度文件", "党风廉政建设制度、廉洁从业规定");
WORK_PAPER_KEYWORDS.put("审批文件", "津补贴审批文件、车辆配备审批");
WORK_PAPER_KEYWORDS.put("举报材料", "信访举报材料、问题线索登记");
}
/**
* 对廉政情况数据进行排序提供给ServiceImpl使用
*/
public static void sortPartyConductData(JSONArray data) {
if (data == null || data.isEmpty()) {
return;
}
// 转换为List进行排序
List<JSONObject> dataList = new ArrayList<>();
for (int i = 0; i < data.size(); i++) {
dataList.add(data.getJSONObject(i));
}
// 排序:优先按固定顺序,其次按类别
dataList.sort(AuditContent10PartyConductConstants::compareJSONObject);
// 清空原数组并添加排序后的数据
data.clear();
data.addAll(dataList);
}
/**
* 比较两个JSON对象的排序
*/
public static int compareJSONObject(JSONObject o1, JSONObject o2) {
String content1 = o1.getString("content");
String content2 = o2.getString("content");
// 1. 按固定顺序排序
int index1 = getContentFixedOrderIndex(content1);
int index2 = getContentFixedOrderIndex(content2);
if (index1 != index2) {
return Integer.compare(index1, index2);
}
// 2. 如果都不在固定顺序中,按类别排序
return compareByCategory(o1, o2);
}
/**
* 按照大类、子类、小类排序
*/
public static int compareByCategory(JSONObject o1, JSONObject o2) {
// 清理子类字符串用于比较
String cleanSubCategory1 = cleanSubCategory(o1.getString("subCategory"));
String cleanSubCategory2 = cleanSubCategory(o2.getString("subCategory"));
// 1. 按大类排序
String category1 = o1.getString("category");
String category2 = o2.getString("category");
int categoryIndex1 = CATEGORY_ORDER.indexOf(category1);
int categoryIndex2 = CATEGORY_ORDER.indexOf(category2);
if (categoryIndex1 != categoryIndex2) {
return Integer.compare(categoryIndex1, categoryIndex2);
}
// 2. 按子类排序
String subCategory1 = o1.getString("subCategory");
String subCategory2 = o2.getString("subCategory");
List<String> subCategories = CATEGORY_SUBCATEGORY_MAP.get(category1);
if (subCategories != null) {
int subCategoryIndex1 = subCategories.indexOf(subCategory1);
int subCategoryIndex2 = subCategories.indexOf(subCategory2);
if (subCategoryIndex1 != subCategoryIndex2) {
return Integer.compare(subCategoryIndex1, subCategoryIndex2);
}
}
// 3. 按小类排序
String detailCategory1 = o1.getString("detailCategory");
String detailCategory2 = o2.getString("detailCategory");
List<String> detailCategories = SUBCATEGORY_DETAIL_MAP.get(subCategory1);
if (detailCategories != null) {
int detailCategoryIndex1 = detailCategories.indexOf(detailCategory1);
int detailCategoryIndex2 = detailCategories.indexOf(detailCategory2);
if (detailCategoryIndex1 != detailCategoryIndex2) {
return Integer.compare(detailCategoryIndex1, detailCategoryIndex2);
}
}
// 4. 如果小类也相同,按内容排序
String content1 = o1.getString("content");
String content2 = o2.getString("content");
return content1.compareTo(content2);
}
private static String cleanSubCategory(String subCategory) {
if (subCategory == null) return "";
if (subCategory.contains(" - ")) {
return subCategory.split(" - ")[0].trim();
}
return subCategory;
}
/**
* 获取指定子类的示例数据JSON字符串
*/
public static String getExampleDataJsonString(String subCategory) {
JSONArray exampleData = getExampleDataBySubCategory(subCategory);
if (exampleData == null || exampleData.isEmpty()) {
return "[]";
}
// 直接使用FastJSON的序列化确保正确转义即可
return exampleData.toJSONString();
}
private AuditContent10PartyConductConstants() {
// 防止实例化
}
}

View File

@@ -0,0 +1,296 @@
package com.gxwebsoft.ai.controller;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.gxwebsoft.ai.dto.AuditContentRequest;
import com.gxwebsoft.ai.dto.export.PartyConductExportEntity;
import com.gxwebsoft.ai.entity.AiCloudDoc;
import com.gxwebsoft.ai.entity.AiCloudFile;
import com.gxwebsoft.ai.service.AiHistoryService;
import com.gxwebsoft.ai.utils.ExcelExportTool;
import com.gxwebsoft.common.core.web.ApiResult;
import com.gxwebsoft.common.core.web.BaseController;
import com.gxwebsoft.common.system.entity.User;
import com.gxwebsoft.pwl.entity.PwlProjectLibrary;
import com.gxwebsoft.pwl.service.PwlProjectLibraryService;
import com.gxwebsoft.ai.service.AiCloudDocService;
import com.gxwebsoft.ai.service.AiCloudFileService;
import com.gxwebsoft.ai.service.AuditContent10PartyConductService;
import com.gxwebsoft.ai.service.KnowledgeBaseService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.DigestUtil;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* 审计内容10控制器 - 党风廉政建设责任制审计
*/
@Slf4j
@Tag(name = "审计内容10-廉政情况")
@RestController
@RequestMapping("/api/ai/auditContent10")
public class AuditContent10Controller extends BaseController {
@Autowired
private AuditContent10PartyConductService auditContent10PartyConductService;
@Autowired
private AiCloudDocService aiCloudDocService;
@Autowired
private AiCloudFileService aiCloudFileService;
@Autowired
private KnowledgeBaseService knowledgeBaseService;
@Autowired
private PwlProjectLibraryService pwlProjectLibraryService;
@Autowired
private AiHistoryService aiHistoryService;
// 历史记录有效期(分钟)
private static final int HISTORY_EXPIRE_MINUTES = 10;
/**
* 生成党风廉政建设责任制审计表数据
*/
@Operation(summary = "生成党风廉政建设责任制审计表")
@PostMapping("/generatePartyConductTable")
public ApiResult<?> generatePartyConductTable(@RequestBody AuditContentRequest request, HttpServletRequest servletRequest) {
return generateTableData(request, servletRequest.getRequestURI(),
(params) -> auditContent10PartyConductService.generatePartyConductTableData(
params.knowledgeBaseId, params.libraryKbIds, params.projectLibrary,
params.username, params.history, params.suggestion
));
}
/**
* 通用的表格数据生成方法
*/
private ApiResult<?> generateTableData(AuditContentRequest request, String interfaceName, Function<GenerateParams, JSONObject> generateFunction) {
final User loginUser = getLoginUser();
String requestHistory = request.getHistory();
request.setHistory("");
// 检查历史记录
String requestHash = generateRequestHash(request, interfaceName);
var history = aiHistoryService.getValidHistory(requestHash, interfaceName, HISTORY_EXPIRE_MINUTES);
if (history != null) {
log.info("返回历史数据,请求哈希: {}", requestHash);
return success(JSONObject.parseObject(history.getResponseData()));
}
request.setHistory(requestHistory);
String kbIdTmp = "";
String libraryKbIds = "";
try {
// 创建临时知识库(如果需要)
if (hasUploadedFiles(request)) {
kbIdTmp = createTempKnowledgeBase(request);
}
// 查询项目库信息
libraryKbIds = getLibraryKbIds(request.getLibraryIds());
// 生成数据
String knowledgeBaseId = getKnowledgeBaseId(kbIdTmp, request.getKbIds());
GenerateParams params = new GenerateParams(knowledgeBaseId, libraryKbIds, request.getProjectLibrary(), loginUser.getUsername(), request.getHistory(), request.getSuggestion());
JSONObject result = generateFunction.apply(params);
if(result.getBoolean("success")) {
// 保存到历史记录
saveToHistory(request, interfaceName, requestHash, result, loginUser);
}
return success(result);
} catch (Exception e) {
log.error("生成表格数据失败,接口: {}", interfaceName, e);
return fail("生成表格数据失败: " + e.getMessage());
} finally {
cleanupTempKnowledgeBase(kbIdTmp);
}
}
/**
* 生成请求哈希
*/
private String generateRequestHash(AuditContentRequest request, String interfaceName) {
String requestJson = JSONObject.toJSONString(request);
return DigestUtil.md5Hex(interfaceName + ":" + requestJson);
}
/**
* 保存到历史记录
*/
private void saveToHistory(AuditContentRequest request, String interfaceName, String requestHash, JSONObject result, User loginUser) {
try {
aiHistoryService.saveHistory(requestHash, interfaceName, JSONObject.toJSONString(request), result.toJSONString(), loginUser.getUserId(), loginUser.getUsername(), loginUser.getTenantId());
} catch (Exception e) {
log.warn("保存历史记录失败", e);
}
}
/**
* 检查是否有上传的文件
*/
private boolean hasUploadedFiles(AuditContentRequest request) {
return !request.getDocList().isEmpty() || !request.getFileList().isEmpty();
}
/**
* 获取知识库ID
*/
private String getKnowledgeBaseId(String tempKbId, String requestKbIds) {
return StrUtil.isNotBlank(tempKbId) ? tempKbId : requestKbIds;
}
/**
* 获取项目库KB IDs
*/
private String getLibraryKbIds(String libraryIds) {
if (StrUtil.isBlank(libraryIds)) {
return "";
}
List<String> idList = StrUtil.split(libraryIds, ',');
List<PwlProjectLibrary> ret = pwlProjectLibraryService.list(new LambdaQueryWrapper<PwlProjectLibrary>().in(PwlProjectLibrary::getId, idList));
return ret.stream().map(PwlProjectLibrary::getKbId).filter(StrUtil::isNotBlank).collect(Collectors.joining(","));
}
/**
* 创建临时知识库并提交文档
*/
private String createTempKnowledgeBase(AuditContentRequest request) {
String kbIdTmp = knowledgeBaseService.createKnowledgeBaseTemp();
// 收集文档ID
Set<Integer> docIds = request.getDocList().stream().flatMap(docId -> aiCloudDocService.getSelfAndChildren(docId).stream()).map(AiCloudDoc::getId).collect(Collectors.toSet());
// 查询相关文件
List<AiCloudFile> fileList = getRelatedFiles(docIds, request.getFileList());
// 提取文件ID并提交到知识库
Set<String> kbFileIds = fileList.stream().map(AiCloudFile::getFileId).collect(Collectors.toSet());
if (!kbFileIds.isEmpty()) {
knowledgeBaseService.submitDocuments(kbIdTmp, new ArrayList<>(kbFileIds));
}
return kbIdTmp;
}
/**
* 获取相关文件列表
*/
private List<AiCloudFile> getRelatedFiles(Set<Integer> docIds, List<Integer> fileList) {
LambdaQueryWrapper<AiCloudFile> queryWrapper = new LambdaQueryWrapper<AiCloudFile>()
.in(!docIds.isEmpty(), AiCloudFile::getDocId, docIds)
.or(!fileList.isEmpty())
.in(!fileList.isEmpty(), AiCloudFile::getId, fileList);
return aiCloudFileService.list(queryWrapper);
}
/**
* 清理临时知识库
*/
private void cleanupTempKnowledgeBase(String kbId) {
if (StrUtil.isNotBlank(kbId)) {
try {
knowledgeBaseService.deleteIndex(kbId);
} catch (Exception e) {
log.warn("删除临时知识库失败: {}", kbId, e);
}
}
}
/**
* 导出党风廉政建设责任制审计表到Excel
*/
@Operation(summary = "导出党风廉政建设责任制审计表到Excel")
@PostMapping("/exportPartyConductTable")
public void exportPartyConductTable(@RequestBody Map<String, Object> request, HttpServletResponse response) {
exportToExcel(request, response, "党风廉政建设责任制审计表",
this::convertToPartyConductEntityList, PartyConductExportEntity.class);
}
/**
* 通用的Excel导出方法
*/
private <T> void exportToExcel(Map<String, Object> request, HttpServletResponse response,
String sheetName, Function<List<Map<String, Object>>, List<T>> converter,
Class<T> entityClass) {
List<Map<String, Object>> dataList = (List<Map<String, Object>>) request.get("data");
String companyName = (String) request.get("companyName");
List<T> exportData = converter.apply(dataList);
String fileName = sheetName + "_" + (companyName != null ? companyName : "未知公司");
String title = companyName != null ? companyName + " - " + sheetName : sheetName;
ExcelExportTool.exportExcel(exportData, entityClass, fileName, sheetName, title, response);
}
/**
* 参数包装类
*/
private static class GenerateParams {
final String knowledgeBaseId;
final String libraryKbIds;
final String projectLibrary;
final String username;
final String history;
final String suggestion;
GenerateParams(String knowledgeBaseId, String libraryKbIds, String projectLibrary, String username, String history, String suggestion) {
this.knowledgeBaseId = knowledgeBaseId;
this.libraryKbIds = libraryKbIds;
this.projectLibrary = projectLibrary;
this.username = username;
this.history = history;
this.suggestion = suggestion;
}
}
// ========== 数据转换方法 ==========
private List<PartyConductExportEntity> convertToPartyConductEntityList(List<Map<String, Object>> originalData) {
return originalData.stream().map(this::convertToPartyConductEntity).collect(Collectors.toList());
}
private PartyConductExportEntity convertToPartyConductEntity(Map<String, Object> item) {
PartyConductExportEntity entity = new PartyConductExportEntity();
entity.setCategory(getStringValue(item, "category"));
entity.setSubCategory(getStringValue(item, "subCategory"));
entity.setDetailCategory(getStringValue(item, "detailCategory"));
entity.setContent(getStringValue(item, "content"));
entity.setExecutionStatus(getStringValue(item, "executionStatus"));
entity.setWorkPaperIndex(formatWorkPaperIndex(item.get("workPaperIndex")));
return entity;
}
private String getStringValue(Map<String, Object> map, String key) {
Object value = map.get(key);
return value != null ? value.toString() : "";
}
private String formatWorkPaperIndex(Object workPaperIndex) {
if (workPaperIndex == null) {
return "";
}
if (workPaperIndex instanceof List) {
List<?> list = (List<?>) workPaperIndex;
return String.join(", ", list.stream()
.map(Object::toString)
.collect(Collectors.toList()));
}
return workPaperIndex.toString();
}
}

View File

@@ -0,0 +1,31 @@
package com.gxwebsoft.ai.dto.export;
import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.excel.annotation.ExcelTarget;
import lombok.Data;
/**
* 党风廉政建设责任制审计表导出实体
*/
@Data
@ExcelTarget("PartyConductExportEntity")
public class PartyConductExportEntity {
@Excel(name = "大类", orderNum = "1", width = 20, isWrap = true)
private String category;
@Excel(name = "子类", orderNum = "2", width = 25, isWrap = true)
private String subCategory;
@Excel(name = "小类", orderNum = "3", width = 15, isWrap = true)
private String detailCategory;
@Excel(name = "内容", orderNum = "4", width = 40, isWrap = true)
private String content;
@Excel(name = "执行情况", orderNum = "5", width = 12)
private String executionStatus;
@Excel(name = "工作底稿索引", orderNum = "6", width = 30, isWrap = true)
private String workPaperIndex;
}

View File

@@ -0,0 +1,15 @@
package com.gxwebsoft.ai.service;
import com.alibaba.fastjson.JSONObject;
/**
* 审计内容10服务接口 - 党风廉政建设责任制审计
*/
public interface AuditContent10PartyConductService {
/**
* 生成党风廉政建设责任制审计表数据
*/
JSONObject generatePartyConductTableData(String kbIds, String libraryKbIds, String projectLibrary,
String userName, String history, String suggestion);
}

View File

@@ -0,0 +1,307 @@
package com.gxwebsoft.ai.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.gxwebsoft.ai.constants.AuditContent10PartyConductConstants;
import com.gxwebsoft.ai.service.AuditContent10PartyConductService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import cn.hutool.core.util.StrUtil;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
@Slf4j
@Service
public class AuditContent10PartyConductServiceImpl extends AbstractAuditContentService implements AuditContent10PartyConductService {
// 工作流配置
private static final String DIFY_WORKFLOW_TOKEN = "Bearer app-NpWFaPdBAl3LH7HqRXenlnVD";
@Override
public JSONObject generatePartyConductTableData(String kbIds, String libraryKbIds, String projectLibrary, String userName, String history, String suggestion) {
log.info("开始生成党风廉政建设责任制审计表数据 - 用户: {}, kbIds: {}, libraryIds: {}, projectLibrary: {}", userName, kbIds, libraryKbIds, projectLibrary);
long startTime = System.currentTimeMillis();
try {
// 获取所有子类(基于常量类中的映射关系)
List<String> allSubCategories = AuditContent10PartyConductConstants.getAllSubCategories();
log.info("共发现 {} 个子类需要处理", allSubCategories.size());
// 异步并行处理每个子类
Map<String, CompletableFuture<JSONArray>> futures = processCategoriesAsync(
allSubCategories,
subCategory -> generateSubCategoryDataAsync(subCategory, kbIds, libraryKbIds, projectLibrary, userName, history, suggestion)
);
// 等待所有异步任务完成
CompletableFuture.allOf(futures.values().toArray(new CompletableFuture[0])).join();
// 合并所有子类的结果
JSONArray allData = mergeCategoryResults(allSubCategories, futures);
// 对结果进行排序(直接调用常量类的排序方法)
AuditContent10PartyConductConstants.sortPartyConductData(allData);
log.info("党风廉政建设责任制审计表生成成功 - 记录数: {}, 处理时间: {}ms", allData.size(), (System.currentTimeMillis() - startTime));
return buildSuccessResponse(allData, startTime, "party_conduct_audit");
} catch (Exception e) {
log.error("生成党风廉政建设责任制审计表失败", e);
return buildErrorResponse("生成党风廉政建设责任制审计表失败: " + e.getMessage());
}
}
/**
* 异步生成单个子类的数据
*/
@Async
public CompletableFuture<JSONArray> generateSubCategoryDataAsync(String subCategory, String kbIds, String libraryKbIds, String projectLibrary, String userName, String history, String suggestion) {
return CompletableFuture.supplyAsync(() -> {
try {
log.info("开始生成子类 {} 的数据", subCategory);
// 1. 为当前子类召回相关知识
Map<String, List<String>> knowledgeSources = retrieveKnowledgeForSubCategory(
subCategory, kbIds, libraryKbIds, projectLibrary
);
// 2. 构建完整的知识上下文(包含固定内容和动态内容)
String knowledgeContext = buildCompleteKnowledgeContext(
subCategory, knowledgeSources, history, suggestion
);
// 3. 调用工作流生成数据
JSONObject requestBody = buildWorkflowRequest(knowledgeContext, userName);
JSONArray subCategoryData = callWorkflow(DIFY_WORKFLOW_URL, DIFY_WORKFLOW_TOKEN, requestBody, "廉政情况-" + subCategory);
log.info("子类 {} 数据生成完成,生成 {} 条记录", subCategory, subCategoryData.size());
return subCategoryData;
} catch (Exception e) {
log.error("生成子类 {} 数据失败", subCategory, e);
return new JSONArray();
}
});
}
/**
* 为单个子类检索相关知识
*/
private Map<String, List<String>> retrieveKnowledgeForSubCategory(String subCategory, String kbIds, String libraryKbIds, String projectLibrary) {
Map<String, List<String>> knowledgeSources = new HashMap<>();
knowledgeSources.put("enterprise", new ArrayList<>());
knowledgeSources.put("regulation", new ArrayList<>());
knowledgeSources.put("auditCase", new ArrayList<>());
// 构建当前子类的查询词
List<String> subCategoryQueries = buildSubCategoryQueries(subCategory);
// 企业单位库检索
if (StrUtil.isNotBlank(kbIds)) {
Arrays.stream(kbIds.split(","))
.map(String::trim)
.filter(StrUtil::isNotBlank)
.forEach(kbId -> knowledgeSources.get("enterprise")
.addAll(queryKnowledgeBase(kbId, subCategoryQueries, 100)));
}
// 公共法律法规库检索
if (StrUtil.isNotBlank(libraryKbIds)) {
Arrays.stream(libraryKbIds.split(","))
.map(String::trim)
.filter(StrUtil::isNotBlank)
.forEach(libId -> knowledgeSources.get("regulation")
.addAll(queryKnowledgeBase(libId, subCategoryQueries, 80)));
}
// 审计案例库检索
if (StrUtil.isNotBlank(projectLibrary)) {
knowledgeSources.get("auditCase").addAll(
queryKnowledgeBase(projectLibrary, subCategoryQueries, 60));
}
// 智能去重和排序
knowledgeSources.forEach((key, list) -> {
List<String> processed = list.stream()
.distinct()
.sorted(this::partyConductComparator)
.limit(getLimitBySourceType(key))
.collect(Collectors.toList());
knowledgeSources.put(key, processed);
});
log.debug("子类 {} 知识检索完成 - 企业: {}条, 法规: {}条, 案例: {}条",
subCategory,
knowledgeSources.get("enterprise").size(),
knowledgeSources.get("regulation").size(),
knowledgeSources.get("auditCase").size());
return knowledgeSources;
}
/**
* 构建子类特定的查询词
*/
private List<String> buildSubCategoryQueries(String subCategory) {
List<String> queries = new ArrayList<>();
// 基础查询词
queries.add(subCategory);
queries.add(subCategory + " 制度规定");
queries.add(subCategory + " 执行情况");
// 根据子类类型添加特定查询词
if (subCategory.equals(AuditContent10PartyConductConstants.SUBCATEGORY_MAIN_RESPONSIBILITY)) {
queries.add("主体责任 监督责任 责任清单");
queries.add("党风廉政建设责任制 党组责任 纪检责任");
} else if (subCategory.equals(AuditContent10PartyConductConstants.SUBCATEGORY_EIGHT_REGULATIONS)) {
queries.add("中央八项规定 监督检查 问题线索");
queries.add("八项规定精神 违规问题 通报曝光");
} else if (subCategory.equals(AuditContent10PartyConductConstants.SUBCATEGORY_ANTI_CORRUPTION)) {
queries.add("群众身边腐败 四风问题 案件查处");
queries.add("基层腐败 专项治理 长效机制");
} else if (subCategory.equals(AuditContent10PartyConductConstants.SUBCATEGORY_DISCIPLINE_ENFORCEMENT)) {
queries.add("政治纪律 组织纪律 政令畅通");
queries.add("纪律执行 重大决策 转办督办");
} else if (subCategory.equals(AuditContent10PartyConductConstants.SUBCATEGORY_MONTHLY_REPORT) ||
subCategory.equals(AuditContent10PartyConductConstants.SUBCATEGORY_RECTIFICATION_TASK) ||
subCategory.equals(AuditContent10PartyConductConstants.SUBCATEGORY_RECTIFICATION_ACCOUNTABILITY)) {
queries.add("巡视整改 整改报告 整改措施");
queries.add("巡视反馈 整改方案 整改完成");
} else if (subCategory.equals(AuditContent10PartyConductConstants.SUBCATEGORY_THREE_TURNS) ||
subCategory.equals(AuditContent10PartyConductConstants.SUBCATEGORY_SYSTEM_CONSTRUCTION)) {
queries.add("纪律检查体制改革 三转工作 纪检体制改革");
queries.add("纪检制度建设 监督执纪问责");
}
return queries;
}
/**
* 构建完整的知识上下文 - 包含完整的子类示例数据
*/
private String buildCompleteKnowledgeContext(String subCategory, Map<String, List<String>> knowledgeSources, String history, String suggestion) {
StringBuilder context = new StringBuilder();
// 1. 获取当前子类的大类
String category = findCategoryBySubCategory(subCategory);
String categoryDesc = AuditContent10PartyConductConstants.CATEGORY_DESCRIPTIONS.getOrDefault(category, "");
String subCategoryDesc = AuditContent10PartyConductConstants.SUBCATEGORY_DESCRIPTIONS.getOrDefault(subCategory, "");
// 2. 党风廉政建设责任制审计要求
context.append("## 党风廉政建设责任制审计要求\n");
context.append("请基于以下知识生成").append(category).append("-").append(subCategory).append("相关的党风廉政建设责任制审计表数据:\n\n");
context.append("1. 严格按照廉政情况表的结构生成数据:大类、子类、小类、内容、执行情况、工作底稿索引\n");
context.append("2. **执行情况字段必须填写:详细情况内容说明,基于知识库证据判断,不能留空**\n");
context.append("3. 工作底稿索引必须填写实际存在的完整文件名,确保能在文件夹中搜索到\n");
context.append("4. 内容字段必须填写具体、可核查的检查点描述\n\n");
// 3. 数据结构说明
context.append("## 数据结构说明\n");
context.append("当前大类:").append(category).append(" - ").append(categoryDesc).append("\n");
context.append("当前子类:").append(subCategory).append(" - ").append(subCategoryDesc).append("\n");
// 获取当前子类的小类列表
List<String> detailCategories = AuditContent10PartyConductConstants.SUBCATEGORY_DETAIL_MAP.getOrDefault(subCategory, Collections.emptyList());
if (!detailCategories.isEmpty()) {
context.append("\n可用的子类包括\n");
for (String detailCategory : detailCategories) {
context.append("- ").append(detailCategory).append("\n");
}
}
context.append("\n可用的执行情况详细情况内容说明\n\n");
// 4. 完整的示例数据
context.append("## 示例数据(参考结构)\n");
String exampleDataJson = AuditContent10PartyConductConstants.getExampleDataJsonString(subCategory);
context.append("以下是相关审计内容的").append(subCategory).append("的完整示例数据,请参考这些内容的结构生成:\n\n");
context.append(exampleDataJson).append("\n\n");
// 5. 历史内容
if (StrUtil.isNotBlank(history)) {
context.append("## 历史生成内容\n");
context.append("以下是之前生成的内容,请基于此进行优化:\n");
context.append(history).append("\n\n");
}
// 6. 用户建议
if (StrUtil.isNotBlank(suggestion)) {
context.append("## 用户优化建议\n");
context.append("请根据以下建议对生成内容进行调整:\n");
context.append(suggestion).append("\n\n");
}
// 7. 企业单位知识
if (!knowledgeSources.get("enterprise").isEmpty()) {
context.append("## 企业单位知识\n");
knowledgeSources.get("enterprise").forEach(knowledge ->
context.append(knowledge).append("\n"));
context.append("\n");
}
// 8. 法律法规知识
if (!knowledgeSources.get("regulation").isEmpty()) {
context.append("## 法律法规知识\n");
knowledgeSources.get("regulation").forEach(knowledge ->
context.append(knowledge).append("\n"));
context.append("\n");
}
// 9. 审计案例知识
if (!knowledgeSources.get("auditCase").isEmpty()) {
context.append("## 审计案例知识\n");
knowledgeSources.get("auditCase").forEach(knowledge ->
context.append(knowledge).append("\n"));
context.append("\n");
}
return context.toString();
}
/**
* 根据子类查找对应的大类
*/
private String findCategoryBySubCategory(String subCategory) {
for (Map.Entry<String, List<String>> entry : AuditContent10PartyConductConstants.CATEGORY_SUBCATEGORY_MAP.entrySet()) {
if (entry.getValue().contains(subCategory)) {
return entry.getKey();
}
}
return AuditContent10PartyConductConstants.CATEGORY_TARGET_RESPONSIBILITY; // 默认返回第一个大类
}
/**
* 廉政情况相关性比较器
*/
private int partyConductComparator(String reg1, String reg2) {
int score1 = calculatePartyConductRelevanceScore(reg1);
int score2 = calculatePartyConductRelevanceScore(reg2);
return Integer.compare(score2, score1);
}
/**
* 计算廉政情况相关性分数
*/
private int calculatePartyConductRelevanceScore(String content) {
return AuditContent10PartyConductConstants.KEYWORD_WEIGHTS.entrySet().stream()
.filter(entry -> content.contains(entry.getKey()))
.mapToInt(Map.Entry::getValue)
.sum();
}
private int getLimitBySourceType(String sourceType) {
switch (sourceType) {
case "enterprise": return 100;
case "regulation": return 80;
case "auditCase": return 60;
default: return 50;
}
}
}