对已审核通过的知识库文档,具有特定权限的用户可以对其进行违规处理:
del_flag='1'),audit_status 设为 10,不可恢复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='知识库违规处理记录表';
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;
ALTER TABLE work_knowledge_base_point_rule
ADD COLUMN is_deduction CHAR(1) DEFAULT '0' COMMENT '是否为扣分项标识(0否 1是)' AFTER point_max;
说明:
is_deduction字段用于在积分规则表中标记该规则是否为扣分类型,方便在积分详情信息中区分展示。
需要在系统菜单管理中添加权限标识:
| 字段 | 值 |
|---|---|
| 权限标识 | workKnowledgeBase:share:violationHandle |
| 菜单名称 | 违规处理 |
| 权限类型 | 按钮 |
| 父级菜单 | 知识库-文件信息管理 |
将 workKnowledgeBase:share:violationHandle 权限分配给需要拥有违规处理能力的角色(如质量管理员、管理员等)。
操作路径:系统管理 → 角色管理 → 编辑角色 → 勾选"违规处理"权限
| 文件路径 | 说明 |
|---|---|
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页面 |
| 文件路径 | 修改内容 |
|---|---|
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 字段 |
audit_status=5)的文件才能被违规处理invalid):audit_status 设为 10,文件逻辑删除,不可恢复。作废后不允许修改再上传,创建人如需重新提交请新增一条记录work_knowledge_base_point_detail,change_type=5,is_deduction='1'work_knowledge_base_violation_record问题:点击修改时,之前选择的主审专家没有展示出来。
原因:form 方法中 shareInfo 由Spring MVC从URL参数绑定(URL只有 id/treeNodeId/rootId),expertReviewerIds 不在URL中,始终为null,导致姓名反查逻辑永远不执行。
修复:编辑时先通过 shareService.get(shareInfo.getId()) 从DB加载完整实体获取 expertReviewerIds,再反查姓名设置到 shareInfo.setExpertReviewerNames()。
workKnowledgeBase:share:violationHandle