将原有的单选最佳答案功能升级为多选最佳答案功能,支持以下特性:
文件: alter_work_knowledge_base_add_best_answers.sql
CREATE TABLE IF NOT EXISTS work_knowledge_base_best_answer (
id VARCHAR(64) NOT NULL COMMENT '主键ID',
question_id VARCHAR(64) NOT NULL COMMENT '问题ID',
answer_id VARCHAR(64) NOT NULL COMMENT '答案ID',
sort_order INT DEFAULT 0 COMMENT '排序号',
create_by VARCHAR(64) COMMENT '创建人ID',
create_date DATETIME COMMENT '创建时间',
del_flag CHAR(1) DEFAULT '0' COMMENT '删除标记',
PRIMARY KEY (id),
KEY idx_question_id (question_id),
KEY idx_answer_id (answer_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='问答最佳答案关联表';
说明:
work_knowledge_base_share_info表中的answer_id字段保留但不再使用位置: src/main/java/com/jeeplus/modules/WorkKnowledgeBase/entity/WorkKnowledgeBaseBestAnswer.java
主要字段:
questionId: 问题IDanswerId: 答案IDsortOrder: 排序号answerContent: 回答内容(关联查询)answerUserName: 回答人姓名(关联查询)answerUserId: 回答人ID(关联查询)位置: src/main/java/com/jeeplus/modules/WorkKnowledgeBase/dao/WorkKnowledgeBaseBestAnswerDao.java
主要方法:
findByQuestionId(): 根据问题ID查询最佳答案列表countByQuestionId(): 统计问题的最佳答案数量isBestAnswer(): 检查答案是否已被设为最佳答案batchInsert(): 批量插入最佳答案deleteByQuestionId(): 删除问题的所有最佳答案位置: src/main/resources/mappings/modules/WorkKnowledgeBase/WorkKnowledgeBaseBestAnswerDao.xml
关键SQL:
confirmMultipleBestAnswers(String questionId, List answerIds)
/**
* 确认多个最佳答案(最多5条)
* @param questionId 问题ID
* @param answerIds 答案ID列表
* @return 返回所有回答人ID列表(不重复)
*/
核心逻辑:
findBestAnswers(String questionId)
isBestAnswer(String questionId, String answerId)
grantQaPointsToMultipleUsers(String questionId, List answerUserIds)
/**
* 给问答参与人员发放积分(支持多个回答人)
* @param questionId 问题ID
* @param answerUserIds 所有回答人ID列表(不重复)
*/
核心逻辑:
confirmMultipleBestAnswers()
@RequestMapping(value = "confirmMultipleBestAnswers")
@ResponseBody
public Map<String, Object> confirmMultipleBestAnswers(
@RequestParam String questionId,
@RequestParam List<String> answerIds)
处理流程:
新增确认区域:
<div id="confirmBestAnswersArea" style="display:none;">
<div style="text-align:right;">
<span>已选择 <strong id="selectedCount">0</strong>/5 条</span>
<button id="batchConfirmBtn" disabled>确认选择的答案</button>
</div>
</div>
回答项变更:
<input type="checkbox" class="best-answer-checkbox">新增变量:
var hasConfirmedAnswers = false; // 是否已确认答案
新增函数:
bindCheckboxEvents()
batchConfirmBestAnswers()
修改函数:
renderAnswers()
hasConfirmedAnswers全局变量renderAnswerItem()
hasConfirmedAnswers替代hasBestAnswer确认答案按钮:
openDetailDialogWithRead() - 只读模式openQaDetailDialogWithRead() - 带确认功能的只读模式1. 问题发起人
2. 回答人
场景1: 5条最佳答案来自5个不同的人
场景2: 5条最佳答案全部来自同一个人
场景3: 3条最佳答案,其中2条来自A,1条来自B
HashSet收集回答人ID@Transactional(readOnly = false)确保原子性<foreach>标签实现批量插入on('change'))绑定动态元素基本功能
积分发放
边界情况
数据库迁移
兼容性
answer_id字段日志记录
权限控制
@RequiresPermissions注解保护WorkKnowledgeBaseBestAnswer.java - 实体类WorkKnowledgeBaseBestAnswerDao.java - DAO接口WorkKnowledgeBaseBestAnswerDao.xml - MyBatis映射WorkKnowledgeBaseShareService.java - Service层(修改)WorkKnowledgeBaseShareController.java - Controller层(修改)workKnowledgeBaseShareDetail.jsp - 详情页(修改)workKnowledgeBaseShareList.jsp - 列表页(修改)alter_work_knowledge_base_add_best_answers.sql - 建表脚本完成日期: 2026-01-16
版本: v1.0
作者: AI Assistant