# 寝室检查扣分条例生产执行说明(2026-10-20) ## 目标 按宿管《扣分条例10月15日》,把寝室卫生检查可选扣分项切换为新条例(共 **60** 项)。 系统加载规则:寝室检查调用 `listByAreaType?areaType=1`,只显示 `xskh_discipline_type` 中 **区域类型=宿舍区(1)** 且 **状态=正常(0)** 的违纪类型。 **不需要发版**,只改生产库数据。 --- ## 交付文件 | 文件 | 说明 | |------|------| | `backend/script/sql/update/update_20261020_dorm_hygiene_deduction_types.sql` | 备份 → 停用旧宿舍区类型 → 插入新条例 | | 本文档 | 生产执行步骤与验收 | --- ## 执行前确认 1. 已与宿管确认《扣分条例10月15日》为现行标准。 2. **「吸毒、贩毒」** 原文无分值,脚本暂按 **2–12** 录入(见该条 `remark`),确认后可改。 3. 有生产库备份权限;建议低峰执行。 4. 准备好可回滚窗口(约 10–15 分钟)。 --- ## 推荐执行步骤 ### 第 1 步:全库备份(运维) 按现有规范做一次生产库逻辑备份 / 快照(至少包含 `xskh_discipline_type`)。 ### 第 2 步:在测试库先跑一遍(强烈建议) ```bash # 示例:在测试库执行整份脚本 mysql -h<测试主机> -u<用户> -p <库名> < backend/script/sql/update/update_20261020_dorm_hygiene_deduction_types.sql ``` 核对输出: - `bak_dorm_type_count` > 0(若原先没有宿舍区类型,可为 0) - `new_active_dorm_types` = **60** - 「仍启用的旧宿舍区类型」查询结果为 **空** 测试环境打开:寝室卫生检查 → 新建检查 → 扣分项列表应为新 60 项。 ### 第 3 步:生产执行 1. 登录生产库(只读账号先跑「步骤1核对」SELECT,确认现状)。 2. 用有写权限账号**整文件执行**: ```bash mysql -h<生产主机> -u<用户> -p <生产库名> < backend/script/sql/update/update_20261020_dorm_hygiene_deduction_types.sql ``` 或在 Navicat / DBeaver 中打开该 SQL,**按步骤分段执行**(0→1→2→3→4→5),每步看结果再继续。 3. 确认: ```sql SELECT COUNT(*) AS new_active_dorm_types FROM xskh_discipline_type WHERE area_type = '1' AND deleted = 0 AND status = '0' AND type_code LIKE 'sskf202610_%'; -- 期望:60 ``` ### 第 4 步:业务验收 1. Web:**学生考核 → 违纪类型**,筛「宿舍区」,应看到 60 条新类型(编码 `sskf202610_*`)。 2. Web / 移动端:**寝室卫生检查** 新建一条,扣分项下拉为新条例;选一项默认分为最低分,可在区间内改。 3. 旧历史检查记录仍可打开(旧类型已停用但未删)。 ### 第 5 步:通知宿管 告知:从即日起检查按新条例扣分;若某项分值需调整,在「违纪类型」里改最低/最高分即可,不必再跑脚本。 --- ## 脚本做了什么(摘要) 1. **备份**当前宿舍区类型 → `xskh_discipline_type_bak_20261020` 2. **停用**旧宿舍区启用类型(`status=1`,不删) 3. **删除**未被子检查引用的本批次旧插入(便于重跑) 4. **插入** 60 条新类型(`area_type=1`,`type_category=1`,`status=0`) 5. **核对**查询 教学区违纪(`area_type=2`)**不动**。 --- ## 回滚(出问题才用) ```sql -- 1. 去掉本次新数据(若尚未被检查引用) DELETE FROM xskh_discipline_type WHERE type_code LIKE 'sskf202610_%'; -- 2. 按备份恢复旧宿舍区类型状态 UPDATE xskh_discipline_type t INNER JOIN xskh_discipline_type_bak_20261020 b ON b.id = t.id SET t.status = b.status, t.remark = b.remark, t.update_time = NOW() WHERE t.area_type = '1'; ``` 若新类型已被检查使用,不要 DELETE,改为把新类型 `status` 置停用,再恢复旧类型。 --- ## 分类与条数 | 分类 | 编码前缀 | 条数 | |------|----------|------| | 卫生方面 | `sskf202610_ws_*` | 21 | | 纪律方面 | `sskf202610_jl_*` | 16 | | 重大违纪 | `sskf202610_zd_*` | 23 | | **合计** | | **60** | --- ## 常见问题 **Q:执行后检查页还是旧项?** 刷新页面或重新进入检查;确认接口 `listByAreaType?areaType=1` 返回新数据。 **Q:能否只改几条、不全量切换?** 可以,改在后台「违纪类型」手工增删改;本脚本适合一次性对齐条例。 **Q:历史扣分记录会变吗?** 不会。历史明细仍引用旧 `discipline_type_id`,只是旧类型被停用,新检查不再可选。