主审专家选择功能实现说明.md 5.5 KB

主审专家选择功能实现说明

功能概述

在知识库文件上传表单中,对于需要专家审核的类型(典型案例(原创)、技术总结、培训心得),允许创建人选择1-2位专家组成员作为主审人。

实现内容

1. Tag 标签文件

文件路径: src/main/webapp/WEB-INF/tags/sys/selectExpert.tag

创建了新的 tag 文件 selectExpert.tag,用于选择专家组成员:

  • 支持多选(复选框模式)
  • 限制最多选择2位专家(可通过 maxSelect 参数自定义)
  • 调用 /sys/office/treeDataAll?type=3&isExpert=1 接口获取专家列表
  • 前端验证:至少选择1位,最多选择2位
  • 显示格式:专家姓名用逗号分隔

使用示例:

<sys:selectExpert id="expertReviewer" name="expertReviewerIds" 
                  value="${entity.expertReviewerIds}" 
                  labelName="expertReviewerNames" 
                  labelValue="${entity.expertReviewerNames}"
                  title="专家" 
                  cssClass="form-control judgment layui-input" 
                  allowClear="true" 
                  maxSelect="2"/>

2. 后端接口修改

2.1 OfficeController.java

文件路径: src/main/java/com/jeeplus/modules/sys/web/OfficeController.java

修改内容:

  1. 注入 WorkKnowledgeExpertService
  2. treeDataAll 方法中添加 isExpert 参数
  3. type=3isExpert=1 时,过滤只返回专家用户所在的部门

核心逻辑:

if("3".equals(type) && "1".equals(isExpert)){
    // 获取所有启用的专家
    List<WorkKnowledgeExpert> expertList = expertService.findEnabledList();
    // 过滤mapList,只保留有专家的部门
    ...
}

3. 实体类修改

3.1 WorkKnowledgeBaseShareInfo.java

文件路径: src/main/java/com/jeeplus/modules/WorkKnowledgeBase/entity/WorkKnowledgeBaseShareInfo.java

新增字段:

/** 主审专家ID列表(多个用逗号分隔) */
private String expertReviewerIds;

/** 主审专家姓名列表(多个用逗号分隔,非数据库字段,用于展示) */
private String expertReviewerNames;

包含 getter/setter 方法。

4. 表单页面修改

文件路径: src/main/webapp/webpage/modules/WorkKnowledgeBase/workKnowledgeBaseShareForm.jsp

修改内容:

  1. 在 Controller 的 form 方法中添加 treeName 传递
  2. 在表单中添加主审专家选择器,条件显示:
    • 非问答答疑分类
    • 且(技术总结 或 培训心得 或 典型案例+原创)

显示条件:

<c:if test="${isQaCategory == false && (treeName == '技术总结' || treeName == '培训心得' || (treeName == '典型案例' && entity.contentAttribute == '0'))}">

UI 提示:

<span class="help-inline" style="color: #999; font-size: 12px;">可选可不选,最多选择2位专家</span>

5. MyBatis Mapper 修改

文件路径: src/main/resources/mappings/modules/WorkKnowledgeBase/WorkKnowledgeBaseShareInfoDao.xml

修改内容:

  1. shareColumns SQL 片段添加 expert_reviewer_ids 字段映射
  2. findDynamicList SELECT 子句添加字段
  3. findDynamicList GROUP BY 子句添加字段
  4. insert 语句添加字段
  5. update 语句添加字段

6. 数据库迁移脚本

文件路径: src/main/resources/mysqlDateBase/alter_work_knowledge_base_share_info_expert_reviewer.sql

SQL 内容:

ALTER TABLE work_knowledge_base_share_info 
ADD COLUMN expert_reviewer_ids VARCHAR(500) COMMENT '主审专家ID列表(多个用逗号分隔)' AFTER manual_score_time;

执行说明: 需要在数据库中手动执行此脚本以添加新字段。

数据流程

  1. 前端展示: 用户打开表单 → Controller 查询 treeName → JSP 根据条件显示主审专家选择器
  2. 选择专家: 点击搜索按钮 → 调用 /sys/office/treeDataAll?type=3&isExpert=1 → 返回专家所在部门列表 → 用户勾选专家
  3. 提交保存: 表单提交 → expertReviewerIds 字段保存到数据库(格式:id1,id2
  4. 编辑回显: 从数据库读取 expertReviewerIds → 通过 UserUtils 获取专家姓名 → 填充到 expertReviewerNames

注意事项

  1. 专家定义: 专家是在 work_knowledge_expert 表中配置且状态为启用的用户
  2. 可选性: 主审专家是可选的,不强制要求选择
  3. 数量限制: 最多选择2位专家,前端和 tag 文件中都有验证
  4. 数据存储: 只存储专家ID列表(逗号分隔),姓名为动态获取(非持久化字段)
  5. 权限控制: 只有启用的专家才会出现在选择列表中

相关文件清单

文件 类型 说明
selectExpert.tag 新建 专家选择器 tag
OfficeController.java 修改 添加 isExpert 参数支持
WorkKnowledgeBaseShareInfo.java 修改 添加主审专家字段
WorkKnowledgeBaseShareController.java 修改 form 方法添加 treeName
workKnowledgeBaseShareForm.jsp 修改 添加主审专家选择器 UI
WorkKnowledgeBaseShareInfoDao.xml 修改 添加字段映射
alter_work_knowledge_base_share_info_expert_reviewer.sql 新建 数据库迁移脚本

测试建议

  1. 测试不同分类下主审专家选择器的显示/隐藏逻辑
  2. 测试选择1位、2位专家的正常保存
  3. 测试选择超过2位专家的拦截提示
  4. 测试编辑时的回显功能
  5. 测试清空主审专家的功能
  6. 测试数据库中 expert_reviewer_ids 字段的正确存储