知识库违规处理功能说明.md 6.6 KB

知识库违规处理功能 - 数据库与配置调整文档

一、功能概述

对已审核通过的知识库文档,具有特定权限的用户可以对其进行违规处理:

  • 作废:逻辑删除文件(del_flag='1'),audit_status 设为 10,不可恢复
  • 积分扣除:按倍数扣除文件创建人的积分,支持不扣分(倍数=0)、扣1倍、2倍等,允许扣成负数
  • 其他人因该文件的点赞、审核、阅读积分不受影响
  • 每次处理均记录处理原因、处理人、处理时间
  • 作废后文件不允许修改再上传,创建人如需重新提交请新增一条记录

二、数据库变更

2.1 新建违规处理记录表

CREATE TABLE work_knowledge_base_violation_record (
    id                  VARCHAR(64)     NOT NULL    COMMENT '主键ID',
    file_id             VARCHAR(64)     NOT NULL    COMMENT '关联文件ID(work_knowledge_base_share_info.id)',
    target_user_id      VARCHAR(64)     NOT NULL    COMMENT '被处罚用户ID(文件创建人)',
    handle_type         VARCHAR(20)     NOT NULL    COMMENT '处理方式:invalid=作废',
    original_points     INT             DEFAULT 0   COMMENT '原获得积分数',
    point_multiplier    DECIMAL(3,1)    DEFAULT 0   COMMENT '扣积分倍数(0=不扣分,1=1倍,2=2倍)',
    deducted_points     INT             DEFAULT 0   COMMENT '实际扣除积分数(负数)',
    handle_reason       TEXT                            COMMENT '处理原因',
    handle_user_id      VARCHAR(64)                     COMMENT '处理人ID',
    handle_time         DATETIME                        COMMENT '处理时间',
    original_audit_status VARCHAR(20)                   COMMENT '文件原始审核状态(处理前)',
    create_by           VARCHAR(64)                     COMMENT '创建者ID',
    create_date         DATETIME                        COMMENT '创建时间',
    update_by           VARCHAR(64)                     COMMENT '更新者ID',
    update_date         DATETIME                        COMMENT '更新时间',
    remarks             VARCHAR(500)                    COMMENT '备注',
    del_flag            CHAR(1)         DEFAULT '0'    COMMENT '删除标记(0正常 1删除)',
    PRIMARY KEY (id),
    INDEX idx_file_id (file_id),
    INDEX idx_target_user_id (target_user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='知识库违规处理记录表';

2.2 积分明细表新增字段

ALTER TABLE work_knowledge_base_point_detail
    ADD COLUMN is_deduction  CHAR(1)      DEFAULT '0'  COMMENT '是否为违规扣分记录(0否 1是)' AFTER manual_score_time,
    ADD COLUMN violation_id  VARCHAR(64)  DEFAULT NULL  COMMENT '关联违规处理记录ID' AFTER is_deduction;

2.3 积分规则表新增字段

ALTER TABLE work_knowledge_base_point_rule
    ADD COLUMN is_deduction  CHAR(1)      DEFAULT '0'  COMMENT '是否为扣分项标识(0否 1是)' AFTER point_max;

说明is_deduction 字段用于在积分规则表中标记该规则是否为扣分类型,方便在积分详情信息中区分展示。


三、权限配置

3.1 新增菜单权限

需要在系统菜单管理中添加权限标识:

字段
权限标识 workKnowledgeBase:share:violationHandle
菜单名称 违规处理
权限类型 按钮
父级菜单 知识库-文件信息管理

3.2 角色分配

workKnowledgeBase:share:violationHandle 权限分配给需要拥有违规处理能力的角色(如质量管理员、管理员等)。

操作路径:系统管理 → 角色管理 → 编辑角色 → 勾选"违规处理"权限


四、新增/修改文件清单

4.1 新增文件

文件路径 说明
src/main/java/.../entity/WorkKnowledgeBaseViolationRecord.java 违规处理记录实体类
src/main/java/.../dao/WorkKnowledgeBaseViolationRecordDao.java 违规处理DAO接口
src/main/resources/mappings/.../WorkKnowledgeBaseViolationRecordDao.xml MyBatis映射XML
src/main/webapp/.../workKnowledgeBaseViolationHandle.jsp 违规处理表单JSP页面

4.2 修改文件

文件路径 修改内容
WorkKnowledgeBaseShareService.java 新增 handleViolation()getViolationRecords()hasBeenHandled()getPointDetailList() 方法;新增 AUDIT_STATUS_INVALIDPOINT_CHANGE_DEDUCTION 常量
WorkKnowledgeBaseShareController.java 新增 violationHandleForm()violationHandleSave()getViolationRecords() 接口
workKnowledgeBaseShareList.jsp 添加违规处理按钮和 openViolationHandleDialog() JS函数;添加权限标识 canViolationHandle
WorkKnowledgeBasePointDetail.java 新增 isDeductionviolationId 字段
WorkKnowledgeBasePointRule.java 新增 isDeduction 字段
WorkKnowledgeBasePointDetailDao.xml columns SQL和insert语句新增 is_deductionviolation_id 字段
WorkKnowledgeBasePointRuleDao.xml columns SQL、insert和update语句新增 is_deduction 字段

五、业务规则说明

  1. 只有审核通过(audit_status=5)的文件才能被违规处理
  2. 作废(invalidaudit_status 设为 10,文件逻辑删除,不可恢复。作废后不允许修改再上传,创建人如需重新提交请新增一条记录
  3. 积分扣除
    • 倍数=0:不扣分
    • 倍数=1:扣除该文件给创建人带来的全部积分
    • 倍数=2:扣除2倍积分(允许扣成负数)
    • 扣分记录写入 work_knowledge_base_point_detailchange_type=5is_deduction='1'
  4. 其他人积分不受影响:点赞、审核、阅读积分不做处理
  5. 每次处理都会记录:处理原因、处理人、处理时间存入 work_knowledge_base_violation_record

六、其他修复

6.1 主审专家编辑时不回显问题修复

问题:点击修改时,之前选择的主审专家没有展示出来。

原因form 方法中 shareInfo 由Spring MVC从URL参数绑定(URL只有 id/treeNodeId/rootId),expertReviewerIds 不在URL中,始终为null,导致姓名反查逻辑永远不执行。

修复:编辑时先通过 shareService.get(shareInfo.getId()) 从DB加载完整实体获取 expertReviewerIds,再反查姓名设置到 shareInfo.setExpertReviewerNames()


七、执行顺序

  1. 执行 2.1 建表SQL
  2. 执行 2.2 积分明细表ALTER SQL
  3. 执行 2.3 积分规则表ALTER SQL
  4. 在系统菜单中添加权限 workKnowledgeBase:share:violationHandle
  5. 将权限分配给对应角色
  6. 部署代码