# 重庆机场安检分级质控系统 - 后端 ## 项目概述 重庆机场安检分级质控系统服务端,基于若依(RuoYi)框架二次开发的 Spring Boot 多模块 Maven 项目。提供考勤管理、查获物品、巡检管理、考试培训、大屏数据、绩效管理等 REST API。 - **GroupId**: com.sundot.airport - **版本**: 3.9.0 - **运行端口**: 8088 - **主类**: `com.sundot.airport.Application` ## 开发环境要求 - **Java**: 1.8 - **Maven**: 3.x - **MySQL**: 5.7(数据库名:`chongqing`) - **Redis**: 任意版本(默认 db 5) ## 启动配置 ### 数据库 ``` host: 127.0.0.1:3306 database: chongqing username: root password: Samsundot@123! ``` 数据库初始化脚本:`sql/chongqing-test.sql` ### Redis ``` host: 127.0.0.1 port: 6379 database: 5 password: Qwer+1234 ``` ### 构建运行 ```bash # 编译打包(在项目根目录) mvn clean package -DskipTests # 运行(airport-admin 模块为启动入口) java -jar airport-admin/target/airport-admin-3.9.0.jar ``` ## 模块结构 ``` chongqing-server/ ├── airport-admin/ # 启动模块 & 所有 Controller(Web 层入口) ├── airport-framework/ # 框架核心(Spring Security、AOP、数据源、过滤器等) ├── airport-system/ # 系统业务(用户、角色、菜单、部门、审批流程等) ├── airport-common/ # 公共工具(常量、工具类、基础域对象、异常处理) ├── airport-attendance/ # 考勤模块(考勤记录、班组、区域管理) ├── airport-check/ # 巡检模块(巡检任务、记录、纠错审批) ├── airport-item/ # 查获物品模块(查获记录、物品类别、绩效) ├── airport-exam/ # 考试培训模块(题库、试卷、日考、能力画像) ├── airport-quartz/ # 定时任务模块(Quartz 调度) ├── airport-generator/ # 代码生成模块 └── sql/ # 数据库脚本 └── chongqing-test.sql ``` ## 技术栈 | 技术 | 版本 | 用途 | |------|------|------| | Spring Boot | 2.5.15 | 基础框架 | | Spring Security | 5.7.12 | 安全认证 | | MyBatis | - | ORM(XML Mapper) | | MyBatis Plus | - | ORM 增强 | | PageHelper | 1.4.7 | 分页插件 | | Druid | 1.2.23 | 数据库连接池 | | Redis (Lettuce) | - | 缓存 | | JWT (jjwt 0.9.1) | - | Token 认证 | | Swagger 3 | 3.0.0 | API 文档(`/swagger-ui/`) | | Undertow | - | Web 服务器 | | Quartz | - | 定时任务 | | EasyExcel | 4.0.3 | Excel 导入导出 | | Apache POI | 4.1.2 | Excel 操作 | | Fastjson2 | 2.0.57 | JSON 序列化 | | Lombok | 1.18.30 | 代码简化 | | 阿里云 SMS | - | 短信登录 | ## Controller 层结构(airport-admin) 所有 Controller 位于 `airport-admin/src/main/java/com/sundot/airport/web/controller/`: | 包 | 说明 | |----|------| | `system/` | 用户、角色、菜单、部门、字典、岗位、配置、审批 | | `attendance/` | 考勤记录、班组、区域、考勤检查记录 | | `check/` | 巡检任务、记录、纠错、大屏数据 | | `item/` | 查获记录、物品类别、绩效维度、消息推送 | | `exam/` | 题库、试卷、日考、考试记录、弱项分析 | | `home/` | 首页统计、查获排名、考勤统计 | | `portrait/` | 用户能力画像、考勤统计、物品排名 | | `quality/` | 质量统计(物品分类、资质等级、简化考勤) | | `monitor/` | 系统监控(在线用户、操作日志、缓存、服务器) | | `daily/` | 日常任务配置、部门档案、站点档案 | | `approval/` | 审批流程管理 | | `common/` | 公共接口(验证码、文件上传、数据配置) | ## 数据库表分类 数据库名:`chongqing` | 前缀 | 模块 | 主要表 | |------|------|--------| | `sys_` | 系统 | 用户、角色、菜单、部门、字典、配置、日志 | | `attendance_` | 考勤 | 考勤记录、班组记录、岗位记录、例行检查记录 | | `base_` | 基础数据 | 岗位、项目、检查点、查获类别/物品、默认选项、附件 | | `check_` | 巡检 | 巡检任务、记录、项目项、检查员、纠错、文件 | | `edu_cs_` | 考试教育 | 题目、题目分类、试卷、考试记录、日考任务 | | `item_` | 查获物品 | 查获记录、物品、绩效指标/维度/度量 | | `approval_` | 审批 | 工作流定义、实例、任务、节点、历史、抄送 | | `performance_` | 绩效 | 绩效相关统计 | ## 开发约定 ### 分层架构 标准 MVC 分层(每个业务模块独立): ``` Controller → Service (Interface + Impl) → Mapper (Interface + XML) ``` - **Domain**: 实体类,继承 `BaseEntity`(含 createBy/createTime/updateBy/updateTime/remark) - **Mapper XML**: 位于各模块 `src/main/resources/mapper/` 下 - **DTO**: 用于入参封装,放在 `dto/` 包下 ### 接口规范 - 统一返回 `AjaxResult`(`{ code, msg, data }`) - 分页使用 `PageHelper.startPage()` + `TableDataInfo` 返回 - 权限注解:`@PreAuthorize("@ss.hasPermi('模块:功能:操作')")` - 操作日志:`@Log(title = "...", businessType = BusinessType.XXX)` - 数据权限:`@DataScope(deptAlias = "d", userAlias = "u")` ### 安全认证 - 登录接口:`POST /login`,返回 JWT Token - Token 放在请求头:`Authorization: Bearer ` - Token 有效期:30 分钟(Redis 缓存,支持自动续期) - 支持短信验证码登录(阿里云 SMS) - 密码最大错误 5 次,锁定 10 分钟 ### MyBatis 配置 - XML Mapper 路径:`classpath*:mapper/**/*Mapper.xml` - 类型别名包:`com.sundot.airport.**.domain` - 同时支持 MyBatis 和 MyBatis Plus(两者 Mapper 均有使用) ### Redis 使用 - 缓存 Token、验证码、字典数据、权限数据 - 工具类:`com.sundot.airport.common.core.redis.RedisCache` - 统计数据缓存:`StatisticsCacheController` 提供手动刷新接口 ### 日志 - 使用 Logback,配置文件:`airport-admin/src/main/resources/logback.xml` - 业务操作日志记录到数据库 `sys_oper_log` 表 - 登录日志记录到 `sys_logininfor` 表 ## API 文档 启动后访问:`http://localhost:8088/swagger-ui/index.html` Druid 监控:`http://localhost:8088/druid/index.html`(用户名 ruoyi,密码 123456) ## 业务模块说明 ### 考勤模块(airport-attendance) - 记录安检员的上下班打卡、班组排班、岗位分配 - 支持考勤区域管理和例行检查记录 - 提供考勤统计、趋势分析、画像指标 ### 巡检模块(airport-check) - 安检督导巡检任务的创建、分配、执行、记录 - 发现问题后的纠错流程(含审批) - 大屏数据:巡检计划、问题趋势、纠错统计 ### 查获物品模块(airport-item) - 安检查获违禁品的录入和分类统计 - 绩效维度/指标/度量配置(支持分级质控评分) - 大屏展示:查获排名、趋势、TOP 物品 ### 考试培训模块(airport-exam) - 题库管理(题目、分类、模块、选项) - 试卷管理(手动组卷、随机组卷) - 日考任务配置和作答记录 - "十八条" 专项考试逻辑 - 弱项分析、准确率分析 ### 审批流程(airport-system) - 自研轻量审批引擎(非 Activiti/Flowable) - 支持工作流定义、多节点审批、驳回、抄送 - 当前用于巡检纠错审批(`check_correction`) ### 大屏数据 - 综合大屏:考勤人数、查获统计、巡检执行情况 - 考勤大屏:实时在岗人数、区域分布 - 能力画像:个人考试成绩、考勤工时、绩效得分 - 考题统计:答题准确率、薄弱知识点分析 --- ## 重庆需求分析(2026-04-23) > 来源文件:`重庆需求资料/` 目录下的 Excel 需求文档,包括组织架构差异、需求要点整理、配分表分析、台账导入分析、系统功能一览,以及六大维度的台账及配分表。 --- ### 一、组织架构(四级,与其他机场不同) 重庆与成都(三级)、海口(四级但结构不同)存在差异,需重点适配: ``` 安检站(站长) └── 部门(部门经理,每部门约6个班组) └── 队室/班组(队长,含3个小组) └── 小组/通道(组长,14~18人) └── 员工(安检员,约1000人) 行政部门(并列于业务部门):安全中心 / 培训中心 / 服务中心 / 设备中心 ``` **影响**:组织架构树、数据权限、分值汇总逻辑均需支持四层业务层级 + 行政部门并列结构。 --- ### 二、六大维度评分体系 #### 总体规则 | 维度 | 权重 | 基础分 | 指标体系 | |------|------|--------|----------| | 安全防控能力 | 40% | 80 | 三级 | | 服务响应能力 | 20% | 80 | 三级 | | 业务实操能力 | 15% | 80 | 三级 | | 作风践行能力 | 10% | 80 | 三级 | | 群团协作能力 | 10% | 80 | **四级**(唯一)| | 身心调节能力 | 5% | 80 | 三级(探索中)| #### 等级与预警 | 等级 | 分值 | 字体颜色 | 预警动作 | |------|------|----------|----------| | 较差 | < 75 | 红色 | 启动预警,推送至管理人员 | | 良好 | 75~85 | 正常 | 无 | | 优秀 | > 85 | 绿色 | 无 | | 已推送 | — | 黄色 | 已推送标识,纳入重点关注 | #### 推送机制 - 每个维度可单独配置推送阈值(按部门调整) - 支持定向推送:将单/多个指标数据推送至指定管理人员 - 推送完成后对应数据字体变为**黄色** #### 附加分标签 - 特定岗位(部门教员、部门质控员、通道组长等)或突出表现可获专属标签 - 每个标签对应 **+1 附加分,不设上限** --- ### 三、六大维度配分表详细规则(共98条指标) #### 1. 安全防控能力(40%,基础分80) **减分项:** | NO | 二级指标 | 三级指标(细则) | 扣分 | 可叠加后果 | |----|----------|----------------|------|-----------| | 1 | 员工规范化操作【部门监察问题记录表】 | 站层级质控 | 1 | 返航/二次清舱-10、航班延误-8、旅客滞留-5、产生舆论-2、通报批评站-2/公司-3/局方-10、外部通报扭转-1 | | 2 | | 部门层级质控 | 0.8 | | | 3 | | 上级领导巡查发现问题 | 1.2 | | | 4 | 后台实时质控拦截【部门实时质控拦截情况记录表】 | 站层级 | 1 | | | 5 | | 部门层级 | 0.8 | | | 6 | 不安全事件【不安全事件】 | 未经安检旅客进隔离区/爆炸物/枪支弹药 | 10 | | | 7 | | 枪支零部件/管制器具 | 8 | | | 8 | | 危险液体固体气体/毒害品/放射性/仿真枪 | 5 | | | 9 | | 漏检证件/弹壳/烟花(D类除外) | 3 | | | 10 | | 禁带锐器/火种/锂电池等 | 2 | | | 11 | 安保测试未通过【安保测试记录表(部门)】 | 局方层级 | 0.5 | | | 12 | | 公司层级 | 0.5 | | | 13 | | 站层级 | 0.5 | | **加分项:** | NO | 二级指标 | 三级指标(细则) | 加分 | 可叠加 | |----|----------|----------------|------|--------| | 14 | 典型案例查获【小额奖励审批单】 | 一类 | 1 | 通报表扬站+1/公司+3/局方+5/讲评会+0.5 | | 15 | | 二类 | 0.5 | | | 16 | | 特殊物品(实时拦截数) | 0.15/个 | | | 17 | 风险隐患 | 发现安全隐患及时上报处置 | 1 | | | 18 | | 通过自愿报告系统上报采纳 | 1 | | | 19 | | 部门层级内部建议采纳 | 0.5 | | --- #### 2. 服务响应能力(20%,基础分80) **减分项:** | NO | 二级指标 | 三级指标 | 扣分 | 叠加 | |----|----------|----------|------|------| | 20 | 旅客服务投诉【投诉情况】(确认有责) | 未按服务质量手册执行 | 2 | 航班延误-10、旅客滞留-5、人员受伤-5、金额赔付-2、产生舆论-2、通报批评站-2/公司-3/局方-10 | | 21 | 服务监察【服务巡查】 | 航站楼及以上层级 | 1.2 | | | 22 | | 站层级 | 1 | | | 23 | | 部门层级 | 0.8 | | **加分项:** | NO | 二级指标 | 三级指标 | 加分 | |----|----------|----------|------| | 24 | 典型服务案例【航站楼加分】【锦旗及感谢信】 | 表扬信 | 0.7 | | 25 | | 帮扶类 | 0.5 | | 26 | | 锦旗 | 1 | | 27 | | 讲评会点名表扬 | 0.5 | | 28 | 风险隐患 | 发现服务隐患及时上报处置 | 1 | | 29 | | 自愿报告系统上报采纳 | 1 | | 30 | | 部门层级建议采纳 | 0.5 | --- #### 3. 业务实操能力(15%,基础分80) **减分项:** | NO | 二级指标 | 细则 | 扣分 | |----|----------|------|------| | 31 | 站层级及以上考核【成绩收集】 | 补考阶梯递增:第1次-2,第2次-4,第3次-6,后续每次再+2 | 累加 | | 32 | 队室及部门层级考核 | 未通过 | 1 | | 33 | 技能保持 | 未完成培训,每超1天 | 0.2 | | 34 | 岗位技能不匹配 | 中级证满3年未放开机 | 0.5 | | 35 | | 返岗员工未按期放单号位 | 0.5 | | 36 | | 新员工未按期放单号位 | 0.5 | **加分项:** | NO | 二级指标 | 细则 | 加/扣分 | |----|----------|------|---------| | 37 | 考试成绩【成绩收集】 | 季度理论考试≥98分 | +5 | | 38 | | 季度开机员考核≥98分 | +5 | | 39 | 导师带徒 | 初级(验证/人身):学员通过放单 | +1 | | 40 | | 初级:学员每次不通过 | -0.2 | | 41 | | 中级开机:学员通过放单 | +5 | | 42 | | 中级开机:学员每次不通过 | -0.2 | --- #### 4. 作风践行能力(10%,基础分80) **减分项:** | NO | 二级指标 | 三级指标 | 扣分 | |----|----------|----------|------| | 41 | 诚信记录 | 徇私舞弊/考试作弊被通报 | 10 | | 42 | 信息报送真实度 | 弄虚作假/迟报/瞒报/谎报 | 2(可叠加通报) | | 43 | 出勤情况 | 迟到/早退 | 1 | | 44 | | 中途离岗 | 5 | | 45 | | 旷工 | 10 | | 46 | 形象维护 | 私拿旅客物品 | 2 | | 47 | | 占用公司财务 | 5 | | 48 | | 着制服外出 | 1 | | 49 | | 纪委监察 | 2 | | 50 | | 打架斗殴 | 10 | | 51 | 勤务执行力 | 接通知10分钟内未到岗 | 2 | **加分项:** | NO | 二级指标 | 三级指标 | 加分 | |----|----------|----------|------| | 52 | 形象维护 | 正确处置旅客无理取闹(站内审批) | 2 | | 53 | | 经部门研究讨论认定 | 0.5 | | 54 | 全勤 | 季度内无迟到/早退/任何请假 | 5 | | 55 | 志愿者服务 | 参与安检站/航站楼志愿服务 | 0.5 | --- #### 5. 群团协作能力(10%,基础分80,纯加分,唯一四级体系) | NO | 二级 | 三级 | 四级 | 加分 | |----|------|------|------|------| | 56~58 | 活动参与度 | 部门/站/站及以上层级 | — | 0.5/1/2 | | 59~67 | 团队荣誉 | 部门/站/站及以上 | 一/二/三等奖 | 1~7 | | 68~76 | 个人荣誉 | 部门/站/站及以上 | 一/二/三等奖 | 2~8 | | 77~91 | 新闻 | 站(CQ安小检)/公司/局方层级 | 新闻发表/诗歌绘画/视频脚本/制作/参演 | 0.5~1 | | 92~95 | 自主活动筹备 | 部门/站层级 | 策划筹备/辅助推进 | 1~6 | --- #### 6. 身心调节能力(5%,基础分80,探索中) | NO | 二级指标 | 细则 | 处理 | |----|----------|------|------| | 96 | 病假 | 不做扣分处理 | 仅记录 | | 97 | 工作8小时外不良生活记录 | 酗酒/熬夜等影响勤务 | 仅记录推送管理人员 | | 98 | 活动打卡 | 休息日运动打卡(徒步/健身/爬山) | +0.5 | --- ### 四、台账体系与处理方式 **总计22个台账,对应12个细分指标;其余86项指标通过【配分事项录入页面】手动录入。** | NO | 台账名称 | 计分 | 导入 | 页面录入 | 说明 | |----|----------|:----:|:----:|:--------:|------| | 1 | 部门监察问题记录表 | ● | ● | | | | 2 | 队室三级质控巡查记录表 | | ● | | 暂未计分 | | 3 | 部门实时质控拦截情况记录表 | ● | ● | | 对应现有查获功能 | | 4 | 服务巡查 | ● | ● | | | | 5 | 投诉情况 | ● | ● | | | | 6 | 日常培训记录 | | ● | | **已实现(2026-05-10,Phase 5)** | | 7 | 安保测试记录表(部门) | ● | ● | | | | 8 | 旅检三部人员信息表 | | ● | | **已实现**(2026-04-22已导入测试环境)| | 9 | 通道过检率 | | ● | | 暂未计分 | | 10 | 不安全事件 | ● | ● | | | | 11 | 部门奖惩记录表 | ● | | ● | 字段简单,改为页面录入 | | 12 | 请、休假记录表(特殊) | ● | | ● | 同上 | | 13 | 锦旗及感谢信 | ● | | ● | 同上 | | 14 | 2026查获违规品统计 | | ● | | 暂未计分 | | 15 | 航站楼加分 | ● | ● | | | | 16 | 组长履职情况记录表 | | ● | | **已实现(2026-05-10,Phase 5)** | | 17 | 健康锐兵 | | ● | | **已实现(2026-05-10,Phase 5)** | | 18 | 宿舍消防安全专项自查表 | | ● | | **已实现(2026-05-10,Phase 5)** | | 19 | 成绩收集 | ● | ● | | | | 20 | 培训台账问题通报 | | ● | | **已实现(2026-05-10,Phase 5)** | | 21 | 小额奖励审批单 | ● | ● | | 通过钉钉OA接入(已简化为9字段版本)| | 22 | 考勤台账 | | | | **不涉及计分,暂不同步** | #### 台账导入规则(通用) - 按客户原始台账全量字段导入,暂不提供增删改(用户管理除外) - 绿色字段:列表页展示;灰色字段:详情页展示 - 导入时不做字段删减,保留客户多年运营的台账结构 #### 各台账关键字段 **部门监察问题记录表(25字段)** `时间 / 区域 / 工作点 / 岗位 / 责任人 / 问题描述 / 问题类型 / 整改措施 / 依据 / 问题层级 / 班组 / 队室质控员 / 质控推送队室负责人 / 附件 / 整改情况 / 佐证材料 / 本月内发生问题次数 / 上月质控问题超过三次人员 / 检查人员 / 分管质控经理 / 录入时间 / 部门培训教员 / 队室内勤 / 发送至相关人员 / 队室负责人` **部门实时质控拦截情况记录表(30字段)** `时间 / 区域 / 工作点 / 岗位 / 责任人 / 实时质控拦截物品 / 个数 / 问题类型 / 整改措施 / 问题层级 / 班组 / 附件 / 问题类别 / 个人复盘 / 队室复盘 / 队室质控员 / 质控推送队室负责人 / 开机年限 / 责任人开机年龄 / 发送至相关人员 / 本月内发生问题次数 / 上月发生次数 / 实时图像漏检难易度 / 检查人员 / 部门培训教员 / 分管质控经理 / 队室内勤 / 备注 / 队室负责人` **不安全事件(11字段)** `时间 / 事件描述 / 航班号 / 责任人 / 涉及班组 / 涉及物品 / 岗位 / 区域 / 通道号 / 图像 / 队室内勤` **安保测试记录表(部门)(19字段)** `开展时间 / 测试区域 / 测试通道 / 测试项目 / 被测试人员 / 被测试岗位 / 测试物品 / 图片或视频 / 是否通过 / 层级 / 整改措施 / 复查地点及时间 / 整改材料 / 班组 / 推送队室质控员 / 推送质控队长 / 队室内勤 / 推送按钮 / 队室负责人` **小额奖励审批单(简化版9字段,2026-04-21客户修改后)** `员工编码 / 姓名 / 查获(事件)时间 / 奖励类别 / 查获物品 / 类别(一类/二类) / 奖励事由(安全) / 人员类别 / 主要事由简述` **投诉情况(13字段)** `时间 / 航班号 / 旅客姓名 / 班组 / 责任人 / 投诉情况 / 旅客诉求 / 类别 / 渠道来源 / 是否有责 / 处理进度 / 责任队长 / 队室内勤` **服务巡查(22字段)** `时间 / 区域 / 工作点 / 岗位 / 责任人 / 问题描述 / 问题类型 / 整改措施 / 班组 / 问题层级 / 队室服务联络人 / 服务推送队室负责人 / 附件 / 整改情况 / 佐证材料 / 本月内发生问题次数 / 检查人员 / 分管服务经理 / 发送至相关人员 / 队室内勤 / 队室负责人` **成绩收集(9字段)** `类别 / 期数 / 考试人员 / 理论成绩 / 图像成绩 / 班组 / 分类 / 备注(补考分数)/ 队室教员` **航站楼加分(7字段)** `审核日期 / 姓名 / 班组 / 加分分数 / 队室内勤 / 总加分数 / 队室负责人` **配分事项录入页面(通用字段)** `一级指标 / 二级指标 / 三级指标 / 四级指标 / 时间 / 位置 / 责任人 / 分值(正/负)/ 事件描述 / 备注` --- ### 五、新增功能模块(开发任务) #### 优先级 Step1(首期上线) | 功能 | 类型 | 说明 | |------|------|------| | **台账一键导入主页面** | 新增页面 | 单页面实现20个台账的Excel导入(两列10行布局),每台账对应独立DB表 | | **各台账查询页面**(NO.1~5,7,9~15,19,21)| 新增页面×14 | 导入后查询,全字段显示,支持导出 | | **配分表体系维护** | 新增页面 | 6维度98项指标的增删改查,支持权重/分值/启停/备注配置 | | **配分事项录入页面** | 新增页面 | 针对个人手动录入加/扣分事项,含导入导出,覆盖86项无台账指标及叠加情况 | | **台账数据→配分事项同步** | 后台处理 | 台账导入时/定时将计分相关台账数据转换汇总为跑分原始记录 | | **配分表计算(跑分引擎)** | 后台处理 | 按98项规则计算员工各维度得分,预存结果供大屏快速展示 | | **大屏:六维度雷达图画像** | 改造大屏 | 员工→小组→队室→部门→站 四级汇总,含等级预警色标 | | **预警推送机制** | 后台+配置 | <75红色预警推送,>85绿色,已推送黄色,支持分维度阈值配置 | | **附加分标签系统** | 新增功能 | 为特定岗位/突出表现员工设置标签,每标签+1分不设上限 | #### 优先级 Step2(二期) | 功能 | 类型 | 说明 | |------|------|------| | 钉钉组织架构同步 | 集成 | 自动抓取钉钉组织架构数据 | | 钉钉考勤数据接入 | 集成 | 钉钉导出考勤台账接入系统 | | 钉钉OA审批流对接 | 集成 | 小额奖励审批单已在钉钉运行,对接接入 | | AI助手(13个场景) | 新增 | 员工画像/评价/人员筛选/排班辅助/知识库/风险分析等 | | 顾客投诉系统 | 新增 | 远期建设独立安检站客诉系统 | | 设备中心 | 新增 | 设备准入/运营管理(定检巡检保修)/退出报废 | | 薪酬接入 | 集成 | 远期接入人事薪酬系统,KPI自动计算 | --- ### 六、数据库新增表设计需求 ``` # 台账对应表(14个,按台账编号) ledger_supervision_problem -- 部门监察问题记录表 ledger_patrol_inspection -- 队室三级质控巡查记录表 ledger_realtime_interception -- 部门实时质控拦截情况记录表 ledger_service_patrol -- 服务巡查 ledger_complaint -- 投诉情况 ledger_security_test -- 安保测试记录表(部门) ledger_channel_pass_rate -- 通道过检率 ledger_unsafe_event -- 不安全事件 ledger_reward_penalty -- 部门奖惩记录表 ledger_leave_special -- 请、休假记录表(特殊) ledger_banner_letter -- 锦旗及感谢信 ledger_seizure_stats -- 2026查获违规品统计 ledger_terminal_bonus -- 航站楼加分 ledger_exam_score -- 成绩收集 ledger_reward_approval -- 小额奖励审批单 # 配分体系表 score_dimension -- 一级维度(6个维度+权重) score_indicator -- 二/三/四级指标(98条,含类型/分值/启停) # 跑分原始数据表 score_event -- 配分事项录入表(手动录入+台账同步) # 计算结果缓存表(可选) score_result -- 预计算结果(员工×维度×周期) ``` --- ### 七、AI助手需求场景(Step2,共13个) | NO | 场景 | 描述 | |----|------|------| | 1 | 员工画像 | 输入姓名生成综合画像(班组/岗位资质/开机年限/综合评分),支持通道批量查询,支持个性化标签 | | 2 | 员工评价 | 客观AI评价,多维度对比,快速锁定风险人员 | | 3 | 人员筛选 | 按近三月无违规/高查获率/零投诉/考核优秀等条件精准匹配 | | 4 | 考勤及薪酬 | 自动计算休假期间节假日加班 | | 5 | 培训提醒 | 危险品复训提醒、高级证书到期提醒 | | 6 | 漏检漏查 | 按人员/时间段查询漏检漏查情况 | | 7 | 制度法规知识库 | AI问答查找法规细则 | | 8 | 风险分析 | AI定位风险点,生成管控措施,支持分级管理 | | 9 | 智能排班 | 自动校验在岗状态/漏排错排,一键推送排班通知 | | 10 | 辅助排班 | 最大化人员分配,计算可开放最大通道数 | | 11 | 新建通道计算 | 利用休息人员快速计算可组建的新通道 | | 12 | 宏观数据比对 | 全国机场旅客吞吐量/Capes服务评测排名查询 | | 13 | 航班量预测 | 预测勤务运行效率,辅助通道开放决策 | --- ## Phase 1 实现记录(台账导入,2026-04-24) ### 新增模块 `airport-ledger` 位置:`airport-ledger/`,已注册到父 `pom.xml` 和 `airport-admin/pom.xml`。 **包结构**:`com.sundot.airport.ledger.{domain / mapper / service / service.impl}` #### Domain(15个实体类) | 类名 | 表名 | 类型 | |------|------|------| | `LedgerSupervisionProblem` | `ledger_supervision_problem` | 导入 | | `LedgerPatrolInspection` | `ledger_patrol_inspection` | 导入 | | `LedgerRealtimeInterception` | `ledger_realtime_interception` | 导入 | | `LedgerServicePatrol` | `ledger_service_patrol` | 导入 | | `LedgerComplaint` | `ledger_complaint` | 导入 | | `LedgerSecurityTest` | `ledger_security_test` | 导入 | | `LedgerChannelPassRate` | `ledger_channel_pass_rate` | 导入 | | `LedgerUnsafeEvent` | `ledger_unsafe_event` | 导入 | | `LedgerSeizureStats` | `ledger_seizure_stats` | 导入 | | `LedgerTerminalBonus` | `ledger_terminal_bonus` | 导入 | | `LedgerExamScore` | `ledger_exam_score` | 导入 | | `LedgerRewardApproval` | `ledger_reward_approval` | 导入 | | `LedgerRewardPenalty` | `ledger_reward_penalty` | **页面录入(含CRUD)** | | `LedgerLeaveSpecial` | `ledger_leave_special` | **页面录入(含CRUD)** | | `LedgerBannerLetter` | `ledger_banner_letter` | **页面录入(含CRUD)** | 所有实体类遵循现有约定:继承 `BaseEntity`、`@TableName`、`@TableId(type = IdType.AUTO)`、`@Excel` 注解、**手动 getter/setter(不用 Lombok)**。 #### Mapper / XML - 15 个 Mapper 接口(`extends BaseMapper`),含 `selectList(T query)` 自定义查询 - 15 个 XML 文件位于 `airport-ledger/src/main/resources/mapper/ledger/` - 路径符合 `classpath*:mapper/**/*Mapper.xml`,无需改配置 - 包路径符合 `@MapperScan("com.sundot.airport.**.mapper")`,无需改配置 #### Service / ServiceImpl - 12个导入类型服务含 `batchInsert(List)`(调用 MyBatis Plus `saveBatch`) - 3个页面录入服务仅含 `selectList`,CRUD 直接用 `IService` 的 `save/updateById/removeById` #### Controller(airport-admin) 位置:`airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/` | 文件 | 路由前缀 | 说明 | |------|----------|------| | `LedgerImportController` | `/ledger/import` | 12个导入接口,用 EasyExcel 读取 MultipartFile | | `LedgerSupervisionProblemController` | `/ledger/supervisionProblem` | list + export + getById | | `LedgerPatrolInspectionController` | `/ledger/patrolInspection` | 同上 | | `LedgerRealtimeInterceptionController` | `/ledger/realtimeInterception` | 同上 | | `LedgerServicePatrolController` | `/ledger/servicePatrol` | 同上 | | `LedgerComplaintController` | `/ledger/complaint` | 同上 | | `LedgerSecurityTestController` | `/ledger/securityTest` | 同上 | | `LedgerChannelPassRateController` | `/ledger/channelPassRate` | 同上 | | `LedgerUnsafeEventController` | `/ledger/unsafeEvent` | 同上 | | `LedgerSeizureStatsController` | `/ledger/seizureStats` | 同上 | | `LedgerTerminalBonusController` | `/ledger/terminalBonus` | 同上 | | `LedgerExamScoreController` | `/ledger/examScore` | 同上 | | `LedgerRewardApprovalController` | `/ledger/rewardApproval` | 同上 | | `LedgerRewardPenaltyController` | `/ledger/rewardPenalty` | **list + export + 增删改查** | | `LedgerLeaveSpecialController` | `/ledger/leaveSpecial` | **list + export + 增删改查** | | `LedgerBannerLetterController` | `/ledger/bannerLetter` | **list + export + 增删改查** | #### 权限标识规则 ``` ledger:import:{台账key} # 导入 ledger:{台账key}:list # 查询列表 ledger:{台账key}:export # 导出 ledger:{台账key}:add/edit/remove # 仅3个页面录入类 ``` #### SQL 脚本 `sql/ledger.sql`:15张台账表 + 1张 `ledger_import_log`(导入记录日志)。 **待执行**:在目标数据库运行该脚本后后端才可正常启动。 --- ## Phase 2 实现记录(配分体系,2026-04-24) ### 新增 SQL 脚本 `sql/score.sql`:4张表 + 6个维度初始数据 | 表名 | 说明 | |------|------| | `score_dimension` | 评分维度(6条初始数据:安全防控/服务响应/业务实操/作风践行/群团协作/身心调节) | | `score_indicator` | 评分指标(二/三/四级,parent_id=0为直属维度下的二级;dimension_id冗余到每行) | | `score_event` | 配分事项(手动录入+台账同步,含total_score=score_value+cascade_score) | | `score_push_config` | 推送配置(per维度per部门,warn_threshold默认75) | ### 新增 Java 文件(airport-ledger 模块) **Domain**(`com.sundot.airport.ledger.domain`): | 类名 | 说明 | |------|------| | `ScoreDimension` | 维度,含weight/baseScore/sortOrder/status | | `ScoreIndicator` | 指标,含parentId/level/type/scoreValue/cascadeRule,`children`字段 `@TableField(exist=false)` | | `ScoreEvent` | 配分事项,含level2/3/4Name冗余、scoreValue/cascadeScore/totalScore | | `ScorePushConfig` | 推送配置,含warnThreshold/pushUserIds/pushUserNames | **Mapper/XML/Service/Impl**:各4套,路径与Phase 1相同。 `IScoreIndicatorService.selectTree(dimensionId)` — 递归buildTree,返回嵌套children列表。 `IScoreEventService.batchInsert()` — 自动计算 totalScore = scoreValue + cascadeScore。 ### 新增 Controller(airport-admin) 位置:`airport-admin/src/main/java/com/sundot/airport/web/controller/score/` | 文件 | 路由 | 说明 | |------|------|------| | `ScoreDimensionController` | `/score/dimension` | CRUD + `/all`(不分页全量,供前端下拉) | | `ScoreIndicatorController` | `/score/indicator` | CRUD + `/tree?dimensionId=` 返回指标树 | | `ScoreEventController` | `/score/event` | CRUD + `/import`(EasyExcel导入) + `/export` | | `ScorePushConfigController` | `/score/pushConfig` | CRUD | #### 权限标识规则 ``` score:dimension:list/add/edit/remove/export score:indicator:list/add/edit/remove/export score:event:list/add/edit/remove/export/import score:pushConfig:list/add/edit/remove ``` --- ## Phase 5 实现记录(5个新台账导入、MySQL严格模式修复,2026-05-10) ### 新增5个台账全栈实现 原来标注"暂不做"的5个台账现已全部实现导入+查询页面。 #### 新增 Domain(airport-ledger) | 类名 | 表名 | 关键字段 | |------|------|----------| | `LedgerDailyTraining` | `ledger_daily_training` | recordDate / teamName / responsibleTeacher / responsibleLeader / hours / projectName / trainingContent / trainer / trainingLocation / participantCount / isCompleted / remark | | `LedgerLeaderDuty` | `ledger_leader_duty` | classComment / problemHandling / workTip / submitter / teamLeader / qualityOfficer | | `LedgerHealthSoldier` | `ledger_health_soldier` | submitter / submitTime / teamName / teamLeader / subHealthStatus(列表显示)+ 另外16个详情字段 | | `LedgerDormFireSafety` | `ledger_dorm_fire_safety` | checkDate / dormLocation / dormNo / checkItems / riskStatus / foundRisk / photos / rectifyPerson / rectifyTime / submitTime / submitter | | `LedgerTrainingIssue` | `ledger_training_issue` | recordDate / ledgerContent / specificProblem / handler / teamName / recheckProblem / isRectified | **特殊规则**:健康锐兵列表页只显示 B/R/S/T/U 列(submitter / submitTime / teamName / teamLeader / subHealthStatus),其余字段存库但仅在详情页展示。 #### 新增 Mapper / XML / Service / Controller - 5 个 Mapper XML,位于 `airport-ledger/src/main/resources/mapper/ledger/` - 5 个 Service + Impl,均继承 `ServiceImpl`,含 `selectList` 和 `batchInsert` - 5 个 Controller,位于 `airport-admin/.../controller/ledger/`: | 文件 | 路由前缀 | |------|----------| | `LedgerDailyTrainingController` | `/ledger/dailyTraining` | | `LedgerLeaderDutyController` | `/ledger/leaderDuty` | | `LedgerHealthSoldierController` | `/ledger/healthSoldier` | | `LedgerDormFireSafetyController` | `/ledger/dormFireSafety` | | `LedgerTrainingIssueController` | `/ledger/trainingIssue` | #### 修改 LedgerImportController 新增5个 `@PostMapping`(单类型导入端点,使用 EasyExcel `headRowNumber(2)` 处理双行表头): ``` POST /ledger/import/dailyTraining POST /ledger/import/leaderDuty POST /ledger/import/healthSoldier POST /ledger/import/dormFireSafety POST /ledger/import/trainingIssue ``` #### 修改 LedgerCombinedImportServiceImpl 新增5个 SHEET_ROUTE 入口 + 5个 `do*()` 列索引映射方法: | Sheet名(Excel中) | 方法 | 列范围 | |-------------------|------|--------| | 日常培训记录 | `doDailyTraining` | cols 0-11 | | 组长履职情况记录表 | `doLeaderDuty` | cols 0-5 | | 健康锐兵(2026_3) | `doHealthSoldier` | cols 0-20(21列) | | 宿舍消防安全专项自查表 | `doDormFireSafety` | cols 0-10 | | 培训台账问题通报 | `doTrainingIssue` | cols 0-6 | **注意**:所有5个Sheet均有双行表头(第1行为说明,第2行为列名),数据从第3行起。`dataRows(sheet, 2)` 方法负责跳过前2行。 #### 新增菜单 SQL `sql/menu_ledger_new5.sql`(已在数据库执行,2026-05-10): | menu_id | 说明 | |---------|------| | 2502-2504 | 日常培训记录菜单 + 导出/查询按钮 | | 2505-2507 | 组长履职情况记录菜单 + 导出/查询按钮 | | 2508-2510 | 健康锐兵菜单 + 导出/查询按钮 | | 2511-2513 | 宿舍消防安全自查菜单 + 导出/查询按钮 | | 2514-2516 | 培训台账问题通报菜单 + 导出/查询按钮 | | 2517-2521 | 台账一键导入页(parent 2301)下的5个导入按钮权限 | 执行菜单SQL后需清除 Redis 缓存(退出重登录或系统监控→缓存监控→清理全部),并执行: ```sql INSERT INTO sys_role_menu (role_id, menu_id) SELECT , menu_id FROM sys_menu WHERE menu_id BETWEEN 2502 AND 2521; ``` #### 新增建表 SQL `sql/ledger_new5.sql`:5张新台账表(`ledger_daily_training` / `ledger_leader_duty` / `ledger_health_soldier` / `ledger_dorm_fire_safety` / `ledger_training_issue`)。 --- ### Bug修复:AttendancePostRecordMapper.xml DATETIME 严格模式报错 **错误**:`Incorrect DATETIME value: ''`(MySQL error 1525) **位置**:`airport-attendance/src/main/resources/mapper/attendance/AttendancePostRecordMapper.xml` **根因**:MySQL 8 严格模式下,DATETIME 列不能与空字符串 `''` 做等值比较。XML 中有6处此类条件,出现在 `selectAttendancePostRecordList`、`selectLocationsByTimeAndChannelName`、`selectCheckOutTimeByShiftCodes`、`selectKezhangRecordCount`、`queryKeIds`、`selectTeamOnList` 查询中。 **修复**:将所有 `OR check_out_time = ''` 和 `AND check_out_time != ''` 删除,保留 `IS NULL` 和 `= '2000-01-01 00:00:00'` 两个有效判断条件(`check_out_time` 列只存 NULL 或有效日期值,空字符串条件永远不会命中任何行)。 --- ## Phase 6 实现记录(台账数据清理功能,2026-05-10) ### 功能概述 在台账一键导入页新增"按导入时间范围清理"功能,支持选择日期范围后删除20张台账表中对应时间段的数据,同时清除由台账同步生成的配分事项(`source_type='2'`),手动录入的配分事项不受影响。 ### 后端修改 **`ILedgerCombinedImportService`**(新增方法): ```java Map clearByCreateTime(String beginTime, String endTime); ``` **`LedgerCombinedImportServiceImpl`**: - 新增 `@Autowired IScoreEventService scoreEventService` - 新增 `clearByCreateTime` 实现:遍历20张台账表,每张调用 `clearOne` 私有方法,最后调用 `clearScoreEvents` 清理台账同步配分事项 - 私有方法 `clearOne(IService, begin, end)`:先 `count` 后 `remove`,使用原始类型 `QueryWrapper` 避免泛型问题 - **注意**:`new QueryWrapper()` 原始类型的链式方法返回 `Object`(泛型擦除),必须分两行写:先 `new QueryWrapper qw = new QueryWrapper()`,再单独调 `qw.between(...)` - 私有方法 `clearScoreEvents(begin, end)`:额外加 `.eq("source_type", "2")` 条件 **`LedgerImportController`**(新增端点): ``` DELETE /ledger/import/clear?beginTime=yyyy-MM-dd&endTime=yyyy-MM-dd 权限:ledger:clear:all 日志:台账数据清理 / BusinessType.CLEAN 返回:{ msg: "清理完成,共删除N条记录", data: { 表说明: 删除条数, ... } } ``` **`sql/truncate_ledger.sql`**:同步新增5张表(共20张),注释从"15张"改为"20张"。 ### 菜单权限 SQL(按需执行) ```sql -- 按钮权限节点(挂在台账一键导入页 2301 下) INSERT INTO `sys_menu` (`menu_id`,`menu_name`,`parent_id`,`order_num`,`path`,`component`,`query`,`route_name`,`is_frame`,`is_cache`,`menu_type`,`visible`,`status`,`perms`,`icon`,`create_by`,`create_time`,`update_by`,`update_time`,`remark`) VALUES (2522,'清理台账数据',2301,18,NULL,NULL,NULL,'',1,0,'F','0','0','ledger:clear:all','#','admin',NOW(),'',NULL,NULL); -- 分配给角色(admin 超管默认跳过权限校验,可不执行) INSERT INTO sys_role_menu (role_id, menu_id) SELECT 1, 2522; ``` > admin 账号登录时 RuoYi 跳过 `@PreAuthorize` 校验,无需执行菜单SQL即可使用。 ### 编译注意 `clearOne` 使用原始类型 `@SuppressWarnings({"unchecked", "rawtypes"})`,编译会有 unchecked 警告,属于预期行为,不影响运行。 --- ## Phase 7 实现记录(台账细节修复与查询增强,2026-05-11) ### 一、成绩收集双字段修复(ledger_exam_score) **问题**:原导入只读取了理论成绩(col 3),图像成绩(col 4)丢失;域对象只有单个 `score` 字段。 **修改文件**: | 文件 | 变更 | |------|------| | `LedgerExamScore.java` | `score` → 拆分为 `theoryScore`(理论成绩)+ `imageScore`(图像成绩),`@Excel` 注解对应更新 | | `LedgerExamScoreMapper.xml` | resultMap 和 selectVo 中 `score` → `theory_score, image_score` | | `LedgerCombinedImportServiceImpl.java` | `doExamScore`:新增 `o.setImageScore(decimal(c, 4))` | | `LedgerSyncServiceImpl.java` | `getScore()` → `getTheoryScore()` | | `examScore/index.vue`(前端) | 单列"成绩"→ 两列"理论成绩"、"图像成绩" | **DB 迁移 SQL**(需在目标库执行一次): ```sql ALTER TABLE ledger_exam_score CHANGE score theory_score DECIMAL(5,2) COMMENT '理论成绩'; ALTER TABLE ledger_exam_score ADD COLUMN image_score DECIMAL(5,2) COMMENT '图像成绩' AFTER theory_score; ``` --- ### 二、部门奖惩"分值变动"改为"罚款金额" **影响范围**: | 文件 | 变更 | |------|------| | `LedgerRewardPenalty.java` | `@Excel(name = "分值变动")` → `@Excel(name = "罚款金额")` | | `LedgerTemplateController.java` | rewardPenalty 列名 `"扣罚金额"` → `"罚款金额"` | | `rewardPenalty/index.vue`(前端) | 列表列头、表单标签均改为"罚款金额" | --- ### 三、8个台账页面追加人员查询条件 每个页面在查询表单中新增一个人员姓名输入框,后端 Mapper XML 对应新增模糊查询条件。 | 台账 | 新增查询字段 | 前端 prop | DB 列 | |------|------------|----------|-------| | 实时质控拦截 | 查获人 | `inspectorName` | `inspector_name` | | 服务巡查 | 被查人 | `inspectedName` | `inspected_name` | | 安保测试记录 | 被测人 | `testedName` | `tested_name` | | 不安全事件 | 责任人 | `responsibleName` | `responsible_name` | | 小额奖励审批单 | 姓名 | `personName` | `person_name` | | 部门奖惩 | 姓名 | `personName` | `person_name` | | 请休假记录 | 姓名 | `personName` | `person_name` | | 锦旗及感谢信 | 姓名 | `personName` | `person_name` | **后端涉及 Mapper XML**(各新增一行 `` 条件,位于 `teamName` 条件之后): `LedgerRealtimeInterceptionMapper.xml` / `LedgerServicePatrolMapper.xml` / `LedgerSecurityTestMapper.xml` / `LedgerUnsafeEventMapper.xml` / `LedgerRewardApprovalMapper.xml` / `LedgerRewardPenaltyMapper.xml` / `LedgerLeaveSpecialMapper.xml` / `LedgerBannerLetterMapper.xml` --- ### 四、模板下载功能(Phase 7 补充) 新增 `LedgerTemplateController.java`,提供 Excel 导入模板下载: ``` GET /ledger/template # 下载包含全部20个台账 Sheet 的合并模板 GET /ledger/template?type=xxx # 下载单台账模板 ``` - 使用 Apache POI `XSSFWorkbook` 生成,保留客户原始 Sheet 名和列名 - 双行表头台账(`headRows=2`):第1行为灰色合并标题行,第2行为浅蓝列头行 - 单行表头台账(`headRows=1`):仅 `rewardApproval`(小额奖励审批单) - 列宽自适应:`Math.min(Math.max(charLen + 4, 16), 50) * 256` **前端**(`import/index.vue`):每个台账卡片"下载模板"按钮 + 顶部"下载合并模板"按钮,使用 Blob 下载模式。 --- ## Phase 8 实现记录(员工画像接口增强与前端样式还原,2026-05-12) ### 一、后端:EmployeePortraitVO 字段扩充 **修改文件**:`airport-ledger/.../domain/vo/EmployeePortraitVO.java` 新增字段: | 字段 | 说明 | |------|------| | `birthday` | 出生日期,从18位身份证第7~14位提取(格式 yyyy-MM-dd) | | `major` | 专业(sys_user 新增列,需执行迁移 SQL) | | `roleNames` | 职务(来自 sys_role,逗号分隔) | | `postNames` | 岗位(来自 sys_post,逗号分隔) | | `qualityControlCount` | 查获违规品次数(来自 ledger_seizure_stats) | | `scoreDetails` | 配分明细列表(List<ScoreDetail>) | **内部类变更**: - `AwardRecord`:字段改为 `level2Name / level3Name / level4Name / score`(与 score_event 列名一致) - `ScoreDetail`(新增):`dimensionName / level2Name / level3Name / totalScore` **DB 迁移 SQL**(major 字段,按需执行): ```sql ALTER TABLE sys_user ADD COLUMN major VARCHAR(100) COMMENT '专业' AFTER schooling; ``` --- ### 二、后端:EmployeePortraitServiceImpl 逻辑增强 **修改文件**:`airport-ledger/.../service/impl/EmployeePortraitServiceImpl.java` 新增 Autowire:`SysRoleMapper`、`SysPostMapper`、`LedgerSeizureStatsMapper` | 方法 | 变更说明 | |------|----------| | `fillUserInfo` | 从身份证提取出生日期;调用 `selectRolesByUserName` 填充 roleNames;调用 `selectPostsByUserName` 填充 postNames | | `fillAwards` | 改为查询 `score_event WHERE dimension_id = 5`,精确匹配 person_name(支持逗号多人字段) | | `fillScoreDetails`(新增) | 查询员工时间范围内所有 score_event,构建加减分明细列表 | | `getPortrait` | 新增调用 `fillScoreDetails` 和 `ledgerSeizureStatsMapper.countByInspectorAndDateRange` | --- ### 三、后端:LedgerSeizureStatsMapper 新增查询方法 **修改文件**:`LedgerSeizureStatsMapper.java` + `LedgerSeizureStatsMapper.xml` ```java int countByInspectorAndDateRange(@Param("inspectorName") String inspectorName, @Param("beginTime") String beginTime, @Param("endTime") String endTime); ``` SQL:`SELECT count(*) FROM ledger_seizure_stats WHERE del_flag='0' AND inspector_name=#{inspectorName}` + 日期范围条件。 --- ### 四、前端:员工画像页面样式全面还原(employeeScreen 分支) **修改文件**:`src/views/portraitManagement/employeeProfile/index.vue`、`src/assets/styles/index.scss` 各区块 CSS 按设计稿原型图(51108~51142)精确还原: | 区块 | 关键 CSS | |------|----------| | ep-root | `background: linear-gradient(180deg, #C5DDFF 0%, #E4FBF0 100%)` | | basic-card | `flex:3; background:#eef7ff` | | score-card | `flex:1; background:rgb(239,246,254)` | | left-mid-card | `width:604px; background:rgb(243,250,252)` | | radar-card | `flex:1; background:rgb(242,249,253)` | | 姓名 / 标题 | `font-size:64px; YSBiaoTiHei-bold; color:rgba(31,135,232,1)` | | 综合评价数字框 | `320×126px; border-radius:30px; background:rgba(118,220,198,1); color:rgba(247,89,54,1); font-size:72px` | | 工作履历内容 | `background:rgba(236,220,220,1); border-radius:30px; font-size:20px; PingFang SC` | | 获奖记录区 | `background:rgba(169,209,250,1); border-radius:20px` | | 补充信息背景 | `background:rgba(254,233,232,1);数值背景:#FEE9E8` | | 业务岗位背景 | `background:rgba(254,233,232,1)` | | 培训情况背景 | `background:#CEF8E4;数值单元格背景:#CEF8E4` | | 质控情况背景 | `background:#D5E7FD` | 雷达图颜色规则:`< 75` 红色,`≥ 90` 绿色,其余黑色线条 + 黄色填充。 工作履历显示格式:`2020.1.1入职 | 司龄6年 | 开机年限5年 | 现任职班组长`,字段为空时显示 `0(暂无数据)`。 --- ### 五、注意事项 **score_event 直接 INSERT 时 del_flag 必须填 `'0'`**,不能是空字符串。ScoreEventMapper.xml 的查询条件为 `WHERE del_flag = '0'`,`del_flag = ''` 的记录查不出来。 修复已有问题数据: ```sql UPDATE score_event SET del_flag = '0' WHERE del_flag = '' AND dimension_id = 5; ```