|
@@ -4,14 +4,7 @@ import com.jeeplus.common.persistence.Page;
|
|
|
import com.jeeplus.common.service.CrudService;
|
|
import com.jeeplus.common.service.CrudService;
|
|
|
import com.jeeplus.common.utils.IdGen;
|
|
import com.jeeplus.common.utils.IdGen;
|
|
|
import com.jeeplus.common.utils.StringUtils;
|
|
import com.jeeplus.common.utils.StringUtils;
|
|
|
-import com.jeeplus.modules.WorkKnowledgeBase.dao.WorkKnowledgeBaseAuditRecordDao;
|
|
|
|
|
-import com.jeeplus.modules.WorkKnowledgeBase.dao.WorkKnowledgeBaseDynamicInfoDao;
|
|
|
|
|
-import com.jeeplus.modules.WorkKnowledgeBase.dao.WorkKnowledgeBaseDynamicValueInfoDao;
|
|
|
|
|
-import com.jeeplus.modules.WorkKnowledgeBase.dao.WorkKnowledgeBasePointDetailDao;
|
|
|
|
|
-import com.jeeplus.modules.WorkKnowledgeBase.dao.WorkKnowledgeBasePointRuleDao;
|
|
|
|
|
-import com.jeeplus.modules.WorkKnowledgeBase.dao.WorkKnowledgeBaseShareInfoDao;
|
|
|
|
|
-import com.jeeplus.modules.WorkKnowledgeBase.dao.WorkKnowledgeBaseTreeInfoDao;
|
|
|
|
|
-import com.jeeplus.modules.WorkKnowledgeBase.dao.WorkKnowledgeExpertDao;
|
|
|
|
|
|
|
+import com.jeeplus.modules.WorkKnowledgeBase.dao.*;
|
|
|
import com.jeeplus.modules.WorkKnowledgeBase.entity.*;
|
|
import com.jeeplus.modules.WorkKnowledgeBase.entity.*;
|
|
|
import com.jeeplus.modules.sys.entity.User;
|
|
import com.jeeplus.modules.sys.entity.User;
|
|
|
import com.jeeplus.modules.sys.entity.Workattachment;
|
|
import com.jeeplus.modules.sys.entity.Workattachment;
|
|
@@ -51,6 +44,13 @@ public class WorkKnowledgeBaseShareService extends CrudService<WorkKnowledgeBase
|
|
|
public static final String AUDIT_STATUS_REJECTED = "4";
|
|
public static final String AUDIT_STATUS_REJECTED = "4";
|
|
|
/** 审核状态常量:审核通过 */
|
|
/** 审核状态常量:审核通过 */
|
|
|
public static final String AUDIT_STATUS_PASSED = "5";
|
|
public static final String AUDIT_STATUS_PASSED = "5";
|
|
|
|
|
+
|
|
|
|
|
+ /** 问答状态常量:待回答(问答专用) */
|
|
|
|
|
+ public static final String QA_STATUS_WAITING = "6";
|
|
|
|
|
+ /** 问答状态常量:回答中(问答专用,有人回答但未确认) */
|
|
|
|
|
+ public static final String QA_STATUS_ANSWERING = "7";
|
|
|
|
|
+ /** 问答状态常量:已结束(问答专用,已确认最佳答案) */
|
|
|
|
|
+ public static final String QA_STATUS_CLOSED = "8";
|
|
|
|
|
|
|
|
/** 审核通过所需人数 */
|
|
/** 审核通过所需人数 */
|
|
|
public static final int AUDIT_PASS_REQUIRED = 3;
|
|
public static final int AUDIT_PASS_REQUIRED = 3;
|
|
@@ -63,6 +63,10 @@ public class WorkKnowledgeBaseShareService extends CrudService<WorkKnowledgeBase
|
|
|
private static final Integer POINT_CHANGE_CREATE = 1;
|
|
private static final Integer POINT_CHANGE_CREATE = 1;
|
|
|
/** 积分明细变动类型:审核加分 */
|
|
/** 积分明细变动类型:审核加分 */
|
|
|
private static final Integer POINT_CHANGE_AUDIT = 2;
|
|
private static final Integer POINT_CHANGE_AUDIT = 2;
|
|
|
|
|
+ /** 问答积分规则类型:提问积分 */
|
|
|
|
|
+ private static final String QA_RULE_TYPE_QUESTION = "1";
|
|
|
|
|
+ /** 问答积分规则类型:回答积分 */
|
|
|
|
|
+ private static final String QA_RULE_TYPE_ANSWER = "2";
|
|
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
|
private WorkKnowledgeBaseDynamicInfoDao dynamicInfoDao;
|
|
private WorkKnowledgeBaseDynamicInfoDao dynamicInfoDao;
|
|
@@ -89,7 +93,10 @@ public class WorkKnowledgeBaseShareService extends CrudService<WorkKnowledgeBase
|
|
|
private WorkKnowledgeExpertDao expertDao;
|
|
private WorkKnowledgeExpertDao expertDao;
|
|
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
|
- private com.jeeplus.modules.WorkKnowledgeBase.dao.WorkKnowledgePointCategoryDao categoryDao;
|
|
|
|
|
|
|
+ private WorkKnowledgePointCategoryDao categoryDao;
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private WorkKnowledgeBaseQaAnswerDao qaAnswerDao;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 根据文件id加载附件列表(编辑表单回显用)
|
|
* 根据文件id加载附件列表(编辑表单回显用)
|
|
@@ -236,36 +243,56 @@ public class WorkKnowledgeBaseShareService extends CrudService<WorkKnowledgeBase
|
|
|
// ========== 审核状态自动判定逻辑 ==========
|
|
// ========== 审核状态自动判定逻辑 ==========
|
|
|
// 根据附件有无自动赋值 audit_status:无文件->草稿0,有文件->未审核 1
|
|
// 根据附件有无自动赋值 audit_status:无文件->草稿0,有文件->未审核 1
|
|
|
// 审核未通过重新编辑保存时也按此规则处理
|
|
// 审核未通过重新编辑保存时也按此规则处理
|
|
|
|
|
+
|
|
|
|
|
+ // 判断是否为问答答疑分类
|
|
|
|
|
+ boolean isQaCategory = false;
|
|
|
|
|
+ if (StringUtils.isNotBlank(shareInfo.getTreeNodeId())) {
|
|
|
|
|
+ WorkKnowledgeBaseTreeInfo treeInfo = getTreeInfoById(shareInfo.getTreeNodeId());
|
|
|
|
|
+ if (treeInfo != null && "问答答疑".equals(treeInfo.getTreeName())) {
|
|
|
|
|
+ isQaCategory = true;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
boolean hasValidAttachment = hasValidAttachment(attachments);
|
|
boolean hasValidAttachment = hasValidAttachment(attachments);
|
|
|
// 编辑时,若前端未提交附件列表(用户未更换文件),回查DB已有附件进行判定
|
|
// 编辑时,若前端未提交附件列表(用户未更换文件),回查DB已有附件进行判定
|
|
|
if (!isNew && (attachments == null || attachments.isEmpty()) && StringUtils.isNotBlank(shareInfo.getId())) {
|
|
if (!isNew && (attachments == null || attachments.isEmpty()) && StringUtils.isNotBlank(shareInfo.getId())) {
|
|
|
List<Workattachment> existingAttachments = findAttachmentsByFileId(shareInfo.getId());
|
|
List<Workattachment> existingAttachments = findAttachmentsByFileId(shareInfo.getId());
|
|
|
hasValidAttachment = hasValidAttachment(existingAttachments);
|
|
hasValidAttachment = hasValidAttachment(existingAttachments);
|
|
|
}
|
|
}
|
|
|
- if (isNew) {
|
|
|
|
|
- // 新增:无文件草稿0,有文件未审核 1
|
|
|
|
|
- shareInfo.setAuditStatus(hasValidAttachment ? AUDIT_STATUS_PENDING : AUDIT_STATUS_DRAFT);
|
|
|
|
|
|
|
+
|
|
|
|
|
+ if (isQaCategory) {
|
|
|
|
|
+ // ========== 问答答疑分类:无需审核,设置为待回答状态 ==========
|
|
|
|
|
+ shareInfo.setAuditStatus(QA_STATUS_WAITING);
|
|
|
shareInfo.setAuditPassCount(0);
|
|
shareInfo.setAuditPassCount(0);
|
|
|
shareInfo.setAuditRejectCount(0);
|
|
shareInfo.setAuditRejectCount(0);
|
|
|
- // 有附件时记录提交审核人为当前登录人,同时初始化本轮审核起始时间
|
|
|
|
|
- if (hasValidAttachment) {
|
|
|
|
|
- shareInfo.setSubmitAuditUserId(UserUtils.getUser().getId());
|
|
|
|
|
- shareInfo.setAuditStartDate(new Date());
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ // 问答分类不需要设置submitAuditUserId和auditStartDate
|
|
|
} else {
|
|
} else {
|
|
|
- // 编辑:仅当状态为草稿(0)或审核未通过(4)时允许重新判定
|
|
|
|
|
- String currentStatus = shareInfo.getAuditStatus();
|
|
|
|
|
- if (currentStatus != null && (currentStatus.equals(AUDIT_STATUS_DRAFT) || currentStatus.equals(AUDIT_STATUS_REJECTED))) {
|
|
|
|
|
|
|
+ // ========== 非问答分类:走原有审核流程 ==========
|
|
|
|
|
+ if (isNew) {
|
|
|
|
|
+ // 新增:无文件草稿0,有文件未审核 1
|
|
|
shareInfo.setAuditStatus(hasValidAttachment ? AUDIT_STATUS_PENDING : AUDIT_STATUS_DRAFT);
|
|
shareInfo.setAuditStatus(hasValidAttachment ? AUDIT_STATUS_PENDING : AUDIT_STATUS_DRAFT);
|
|
|
shareInfo.setAuditPassCount(0);
|
|
shareInfo.setAuditPassCount(0);
|
|
|
shareInfo.setAuditRejectCount(0);
|
|
shareInfo.setAuditRejectCount(0);
|
|
|
- // 重新提交时更新提交审核人为当前登录人,并刷新本轮审核起始时间(历史审核记录依靠该时间隔离)
|
|
|
|
|
|
|
+ // 有附件时记录提交审核人为当前登录人,同时初始化本轮审核起始时间
|
|
|
if (hasValidAttachment) {
|
|
if (hasValidAttachment) {
|
|
|
shareInfo.setSubmitAuditUserId(UserUtils.getUser().getId());
|
|
shareInfo.setSubmitAuditUserId(UserUtils.getUser().getId());
|
|
|
shareInfo.setAuditStartDate(new Date());
|
|
shareInfo.setAuditStartDate(new Date());
|
|
|
}
|
|
}
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 编辑:仅当状态为草稿(0)或审核未通过(4)时允许重新判定
|
|
|
|
|
+ String currentStatus = shareInfo.getAuditStatus();
|
|
|
|
|
+ if (currentStatus != null && (currentStatus.equals(AUDIT_STATUS_DRAFT) || currentStatus.equals(AUDIT_STATUS_REJECTED))) {
|
|
|
|
|
+ shareInfo.setAuditStatus(hasValidAttachment ? AUDIT_STATUS_PENDING : AUDIT_STATUS_DRAFT);
|
|
|
|
|
+ shareInfo.setAuditPassCount(0);
|
|
|
|
|
+ shareInfo.setAuditRejectCount(0);
|
|
|
|
|
+ // 重新提交时更新提交审核人为当前登录人,并刷新本轮审核起始时间(历史审核记录依靠该时间隔离)
|
|
|
|
|
+ if (hasValidAttachment) {
|
|
|
|
|
+ shareInfo.setSubmitAuditUserId(UserUtils.getUser().getId());
|
|
|
|
|
+ shareInfo.setAuditStartDate(new Date());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // 审核中(2)和审核通过(5)不允许编辑,由Controller层校验
|
|
|
}
|
|
}
|
|
|
- // 审核中(2)和审核通过(5)不允许编辑,由Controller层校验
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (isNew) {
|
|
if (isNew) {
|
|
@@ -724,6 +751,74 @@ public class WorkKnowledgeBaseShareService extends CrudService<WorkKnowledgeBase
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
|
|
+ * 问答答疑确认最佳答案后发放积分
|
|
|
|
|
+ * @param questionId 问题ID
|
|
|
|
|
+ * @param answerUserId 回答人ID
|
|
|
|
|
+ */
|
|
|
|
|
+ @Transactional(readOnly = false)
|
|
|
|
|
+ public void grantQaPoints(String questionId, String answerUserId) {
|
|
|
|
|
+ // 1. 查询“问答答疑”分类
|
|
|
|
|
+ List<WorkKnowledgePointCategory> categories = findCategoriesByName("问答答疑");
|
|
|
|
|
+ if (categories == null || categories.isEmpty()) {
|
|
|
|
|
+ // 没有配置问答答疑分类,不发放积分
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 取第一个匹配的分类
|
|
|
|
|
+ WorkKnowledgePointCategory qaCategory = categories.get(0);
|
|
|
|
|
+ String categoryId = qaCategory.getId();
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 查询提问积分规则(rule_type=1)
|
|
|
|
|
+ WorkKnowledgeBasePointRule questionRule = pointRuleDao.findByCategoryIdAndRuleType(categoryId, QA_RULE_TYPE_QUESTION);
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 查询回答积分规则(rule_type=2)
|
|
|
|
|
+ WorkKnowledgeBasePointRule answerRule = pointRuleDao.findByCategoryIdAndRuleType(categoryId, QA_RULE_TYPE_ANSWER);
|
|
|
|
|
+
|
|
|
|
|
+ // 4. 给问题发起人发放积分(使用固定分值)
|
|
|
|
|
+ WorkKnowledgeBaseShareInfo question = dao.get(questionId);
|
|
|
|
|
+ if (question != null && StringUtils.isNotBlank(question.getSubmitAuditUserId())) {
|
|
|
|
|
+ if (questionRule != null && StringUtils.isNotBlank(questionRule.getPointValue())) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ Integer questionPoint = Integer.parseInt(questionRule.getPointValue());
|
|
|
|
|
+ if (questionPoint > 0) {
|
|
|
|
|
+ insertPointDetail(
|
|
|
|
|
+ question.getSubmitAuditUserId(), // 问题发起人ID
|
|
|
|
|
+ questionId, // 问题ID
|
|
|
|
|
+ POINT_CHANGE_CREATE, // 变动类型:创建加分
|
|
|
|
|
+ categoryId, // 分类ID
|
|
|
|
|
+ questionRule.getId(), // 规则ID
|
|
|
|
|
+ questionPoint // 积分值
|
|
|
|
|
+ );
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (NumberFormatException e) {
|
|
|
|
|
+ // 积分值格式错误,跳过
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 5. 给回答人发放积分(使用固定分值)
|
|
|
|
|
+ if (StringUtils.isNotBlank(answerUserId)) {
|
|
|
|
|
+ if (answerRule != null && StringUtils.isNotBlank(answerRule.getPointValue())) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ Integer answerPoint = Integer.parseInt(answerRule.getPointValue());
|
|
|
|
|
+ if (answerPoint > 0) {
|
|
|
|
|
+ insertPointDetail(
|
|
|
|
|
+ answerUserId, // 回答人ID
|
|
|
|
|
+ questionId, // 问题ID
|
|
|
|
|
+ POINT_CHANGE_AUDIT, // 变动类型:审核加分(复用)
|
|
|
|
|
+ categoryId, // 分类ID
|
|
|
|
|
+ answerRule.getId(), // 规则ID
|
|
|
|
|
+ answerPoint // 积分值
|
|
|
|
|
+ );
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (NumberFormatException e) {
|
|
|
|
|
+ // 积分值格式错误,跳过
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
* 逻辑删除文件(含动态字段值)
|
|
* 逻辑删除文件(含动态字段值)
|
|
|
*/
|
|
*/
|
|
|
@Transactional(readOnly = false)
|
|
@Transactional(readOnly = false)
|
|
@@ -854,4 +949,148 @@ public class WorkKnowledgeBaseShareService extends CrudService<WorkKnowledgeBase
|
|
|
valueInfo.preInsert();
|
|
valueInfo.preInsert();
|
|
|
dynamicValueInfoDao.insert(valueInfo);
|
|
dynamicValueInfoDao.insert(valueInfo);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ // ==================== 问答答疑相关方法 ====================
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 查询问题的回答列表(时间倒序)
|
|
|
|
|
+ * @param questionId 问题ID
|
|
|
|
|
+ * @return 回答列表
|
|
|
|
|
+ */
|
|
|
|
|
+ public List<WorkKnowledgeBaseQaAnswer> findQuestionAnswers(String questionId) {
|
|
|
|
|
+ if (StringUtils.isBlank(questionId)) {
|
|
|
|
|
+ return new ArrayList<>();
|
|
|
|
|
+ }
|
|
|
|
|
+ return qaAnswerDao.findAnswersByQuestionId(questionId);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 统计问题的回答数量
|
|
|
|
|
+ * @param questionId 问题ID
|
|
|
|
|
+ * @return 回答数量
|
|
|
|
|
+ */
|
|
|
|
|
+ public int countQuestionAnswers(String questionId) {
|
|
|
|
|
+ if (StringUtils.isBlank(questionId)) {
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+ return qaAnswerDao.countAnswersByQuestionId(questionId);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 提交回答
|
|
|
|
|
+ * @param answer 回答对象
|
|
|
|
|
+ */
|
|
|
|
|
+ @Transactional(readOnly = false)
|
|
|
|
|
+ public void submitAnswer(WorkKnowledgeBaseQaAnswer answer) {
|
|
|
|
|
+ // 验证问题是否存在且未确认答案
|
|
|
|
|
+ WorkKnowledgeBaseShareInfo question = dao.get(answer.getQuestionId());
|
|
|
|
|
+ if (question == null) {
|
|
|
|
|
+ throw new RuntimeException("问题不存在");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 检查是否为问答分类
|
|
|
|
|
+ boolean isQaCategory = false;
|
|
|
|
|
+ if (StringUtils.isNotBlank(question.getTreeNodeId())) {
|
|
|
|
|
+ WorkKnowledgeBaseTreeInfo treeInfo = getTreeInfoById(question.getTreeNodeId());
|
|
|
|
|
+ if (treeInfo != null && "问答答疑".equals(treeInfo.getTreeName())) {
|
|
|
|
|
+ isQaCategory = true;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (!isQaCategory) {
|
|
|
|
|
+ throw new RuntimeException("该分类不支持问答功能");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 检查问题状态:待回答(6)或已回答(7)都可以继续回答,已结束(8)不可回答
|
|
|
|
|
+ if (QA_STATUS_CLOSED.equals(question.getAuditStatus())) {
|
|
|
|
|
+ throw new RuntimeException("该问题已被确认答案,无法继续回答");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 保存回答
|
|
|
|
|
+ answer.setId(IdGen.uuid());
|
|
|
|
|
+ answer.preInsert();
|
|
|
|
|
+ qaAnswerDao.insertAnswer(answer);
|
|
|
|
|
+
|
|
|
|
|
+ // 更新问题状态:待回答(6) -> 回答中(7)
|
|
|
|
|
+ if (QA_STATUS_WAITING.equals(question.getAuditStatus())) {
|
|
|
|
|
+ question.setAuditStatus(QA_STATUS_ANSWERING);
|
|
|
|
|
+ question.preUpdate();
|
|
|
|
|
+ dao.update(question);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 确认最佳答案
|
|
|
|
|
+ * @param questionId 问题ID
|
|
|
|
|
+ * @param answerId 答案ID
|
|
|
|
|
+ * @return 返回回答人ID(用于发放积分)
|
|
|
|
|
+ */
|
|
|
|
|
+ @Transactional(readOnly = false)
|
|
|
|
|
+ public String confirmBestAnswer(String questionId, String answerId) {
|
|
|
|
|
+ // 检查问题状态
|
|
|
|
|
+ WorkKnowledgeBaseShareInfo question = dao.get(questionId);
|
|
|
|
|
+ if (question == null) {
|
|
|
|
|
+ throw new RuntimeException("问题不存在");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 检查是否为问答分类
|
|
|
|
|
+ boolean isQaCategory = false;
|
|
|
|
|
+ if (StringUtils.isNotBlank(question.getTreeNodeId())) {
|
|
|
|
|
+ WorkKnowledgeBaseTreeInfo treeInfo = getTreeInfoById(question.getTreeNodeId());
|
|
|
|
|
+ if (treeInfo != null && "问答答疑".equals(treeInfo.getTreeName())) {
|
|
|
|
|
+ isQaCategory = true;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (!isQaCategory) {
|
|
|
|
|
+ throw new RuntimeException("该分类不支持问答功能");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 检查问题是否已结束
|
|
|
|
|
+ if (QA_STATUS_CLOSED.equals(question.getAuditStatus())) {
|
|
|
|
|
+ throw new RuntimeException("该问题已被确认答案,无法重复确认");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 验证答案是否属于该问题
|
|
|
|
|
+ WorkKnowledgeBaseQaAnswer answer = qaAnswerDao.get(answerId);
|
|
|
|
|
+ if (answer == null || !questionId.equals(answer.getQuestionId())) {
|
|
|
|
|
+ throw new RuntimeException("答案不存在或不属于该问题");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 更新问题状态为已结束(8),记录最佳答案ID和确认时间
|
|
|
|
|
+ question.setAuditStatus(QA_STATUS_CLOSED);
|
|
|
|
|
+ question.setAnswerId(answerId);
|
|
|
|
|
+ question.setConfirmDate(new Date());
|
|
|
|
|
+ question.preUpdate();
|
|
|
|
|
+ dao.update(question);
|
|
|
|
|
+
|
|
|
|
|
+ // 返回回答人ID,用于后续积分发放
|
|
|
|
|
+ return answer.getCreateBy().getId();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 检查是否为问题发起人
|
|
|
|
|
+ * @param questionId 问题ID
|
|
|
|
|
+ * @param userId 用户ID
|
|
|
|
|
+ * @return true-是发起人,false-不是发起人
|
|
|
|
|
+ */
|
|
|
|
|
+ public boolean isQuestionCreator(String questionId, String userId) {
|
|
|
|
|
+ WorkKnowledgeBaseShareInfo question = dao.get(questionId);
|
|
|
|
|
+ return question != null && userId.equals(question.getCreateBy().getId());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 检查问题是否可以回答
|
|
|
|
|
+ * @param questionId 问题ID
|
|
|
|
|
+ * @return true-可以回答,false-已确认答案不可回答
|
|
|
|
|
+ */
|
|
|
|
|
+ public boolean canAnswer(String questionId) {
|
|
|
|
|
+ WorkKnowledgeBaseShareInfo question = dao.get(questionId);
|
|
|
|
|
+ if (question == null) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ // 待回答(6)或回答中(7)可以继续回答,已结束(8)不可回答
|
|
|
|
|
+ return QA_STATUS_WAITING.equals(question.getAuditStatus())
|
|
|
|
|
+ || QA_STATUS_ANSWERING.equals(question.getAuditStatus());
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|