# 知识库违规处理功能 - 数据库与配置调整文档 ## 一、功能概述 对已审核通过的知识库文档,具有特定权限的用户可以对其进行违规处理: - **作废**:逻辑删除文件(`del_flag='1'`),`audit_status` 设为 `10`,不可恢复 - **积分扣除**:按倍数扣除文件创建人的积分,支持不扣分(倍数=0)、扣1倍、2倍等,允许扣成负数 - 其他人因该文件的点赞、审核、阅读积分**不受影响** - 每次处理均记录处理原因、处理人、处理时间 - 作废后文件不允许修改再上传,创建人如需重新提交请新增一条记录 --- ## 二、数据库变更 ### 2.1 新建违规处理记录表 ```sql 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 积分明细表新增字段 ```sql 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 积分规则表新增字段 ```sql 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_INVALID` 和 `POINT_CHANGE_DEDUCTION` 常量 | | `WorkKnowledgeBaseShareController.java` | 新增 `violationHandleForm()`、`violationHandleSave()`、`getViolationRecords()` 接口 | | `workKnowledgeBaseShareList.jsp` | 添加违规处理按钮和 `openViolationHandleDialog()` JS函数;添加权限标识 `canViolationHandle` | | `WorkKnowledgeBasePointDetail.java` | 新增 `isDeduction`、`violationId` 字段 | | `WorkKnowledgeBasePointRule.java` | 新增 `isDeduction` 字段 | | `WorkKnowledgeBasePointDetailDao.xml` | columns SQL和insert语句新增 `is_deduction`、`violation_id` 字段 | | `WorkKnowledgeBasePointRuleDao.xml` | columns SQL、insert和update语句新增 `is_deduction` 字段 | --- ## 五、业务规则说明 1. **只有审核通过(`audit_status=5`)的文件才能被违规处理** 2. **作废(`invalid`)**:`audit_status` 设为 `10`,文件逻辑删除,不可恢复。作废后不允许修改再上传,创建人如需重新提交请新增一条记录 3. **积分扣除**: - 倍数=0:不扣分 - 倍数=1:扣除该文件给创建人带来的全部积分 - 倍数=2:扣除2倍积分(允许扣成负数) - 扣分记录写入 `work_knowledge_base_point_detail`,`change_type=5`,`is_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. 部署代码