# 智慧清洁 SaaS 平台 - 业务需求全景文档 > 基于后端 xiaoqu-intellectual-web 和 xiaoqu-intellectual-task 两个项目的代码分析整理 --- ## 一、系统概述 智慧清洁 SaaS 平台面向物业/市政清洁行业,提供从计划排班、任务调度、打卡考勤、IoT设备管理到绩效分析的全链路数字化管理能力。 **系统架构**: - **Web 服务**(端口 8095):提供 REST API,支撑后台管理 SPA - **Task 服务**(端口 8097):定时任务调度 + MQTT 设备通信 + 消息推送 --- ## 二、业务模块清单 ### 模块 1:登录与认证 | 功能 | 端点 | 说明 | |------|------|------| | 短信验证码登录 | `POST /login` | 手机号+验证码登录,生成UUID(30天有效期) | | 用户退出 | `GET /logOut` | 清除Redis登录态 | | 发送验证码 | `GET /sms/sendCode` | 短信平台发送验证码 | **业务规则**: - 单点登录控制,防止多终端同时登录 - 请求签名机制:UUID + 时间戳 + 手机号 MD5签名 - 签名有效期10秒窗口 - 登录日志记录(IP、登录类型) --- ### 模块 2:权限管理 | 功能 | 端点 | 说明 | |------|------|------| | 设置权限组人员 | `POST /authority/setAuthorityUser` | 批量添加用户到权限组 | | 查询权限组成员 | `POST /authority/getAuthorityUserList` | 支持分页查询 | **动态权限体系**: - **字段级权限**:按权限组控制表格列的显示/隐藏 - **按钮级权限**:按权限组控制操作按钮的可见性 - 权限链路:权限组 → 用户 → 页面 → 字段/按钮 --- ### 模块 3:用户与组织管理 | 功能 | 端点 | 说明 | |------|------|------| | 用户分页查询 | `POST /userCenter/pageList` | 按服务区域、事项、技能、标签筛选 | | 新增/修改用户 | `POST /userCenter/addOrUpdateUser` | | | 删除用户 | `POST /userCenter/deleteUser` | | | 用户导出 | `POST /userCenter/export` | Excel导出 | | 用户菜单树 | `POST /userCenter/getUserMenuTree` | | | 用户下拉选择 | `POST /userCenter/selectUsers` | | **用户属性**: - 工作状态:作业(0) / 转场(1) / 空闲(2) / 休息(3) - 关联:班组、技能标签、事项标签、服务区域、考勤设置 --- ### 模块 4:班组管理 | 功能 | 端点 | 说明 | |------|------|------| | 班组分页查询 | `POST /workGroup/pageList` | | | 新增/修改班组 | `POST /workGroup/addOrUpdate` | | | 删除班组 | `POST /workGroup/deleteWorkGroup` | | | 班组导出 | `POST /workGroup/export` | | | 设置班组负责人 | `POST /workGroup/setWorkGroupPrincipal` | | | 设置班组成员 | `POST /workGroup/setWorkGroupMember` | | | 获取班组成员 | `POST /workGroup/getWorkGroupMember` | | --- ### 模块 5:标签与技能管理 | 功能 | 端点 | 说明 | |------|------|------| | 标签分页查询 | `POST /label/pageList` | | | 新增/修改标签 | `POST /label/addOrUpdate` | | | 删除标签 | `POST /label/delete` | | | 获取所有标签 | `POST /label/allLabels` | | | 技能分页查询 | `POST /skill/pageList` | | | 新增/修改技能 | `POST /skill/addOrUpdate` | | | 删除技能 | `POST /skill/delete` | | | 获取所有技能 | `POST /skill/allSkills` | | --- ### 模块 6:基础数据管理 #### 6.1 网格管理 | 功能 | 端点 | 说明 | |------|------|------| | 网格查询 | `POST /grid/pageList` | 建筑/楼层/多级网格 | | 新增/修改网格 | `POST /grid/addOrUpdateGrid` | | | 删除网格 | `POST /grid/deleteGrid` | | | 批量导入网格 | `POST /grid/importGrid` | | | 网格负责人列表 | `POST /grid/gridPrincipalList` | | **网格级别**:建筑(1) → 楼层(2) → 多级网格(3) #### 6.2 场景管理 | 功能 | 端点 | 说明 | |------|------|------| | 场景查询 | `POST /scenes/pageList` | 厕所、楼道等特定场景 | | 新增/修改场景 | `POST /scenes/addOrUpdateScenes` | | | 删除场景 | `POST /scenes/deleteScenes` | | | 批量导入场景 | `POST /scenes/batchInsertScenes` | | | 导入场景模板 | `POST /scenes/importScenes` | | **场景级别**:一级场景(1,如卫生间) → 二级场景(2,如楼层卫生间) #### 6.3 场景对象关联 | 功能 | 端点 | 说明 | |------|------|------| | 场景对象查询 | `POST /sceneObject/sceneObjectPageList` | | | 关联对象到场景 | `POST /sceneObject/addOrUpdateSceneObject` | | #### 6.4 对象管理 | 功能 | 端点 | 说明 | |------|------|------| | 对象分页查询 | `POST /object/objectPageList` | 支持树查询 | | 新增/修改对象 | `POST /object/addOrUpdateObject` | | | 删除对象 | `POST /object/deleteObject` | | | 批量导入对象 | `POST /object/importObject` | | #### 6.5 事项管理 | 功能 | 端点 | 说明 | |------|------|------| | 事项分页查询 | `POST /matter/matterPageList` | | | 批量添加事项 | `POST /matter/addMatter` | | | 修改事项 | `POST /matter/updateMatter` | | | 删除事项 | `POST /matter/deleteMatter` | | #### 6.6 作业管理 | 功能 | 端点 | 说明 | |------|------|------| | 作业分页查询 | `POST /operation/oprationPageList` | 含工具关联 | | 新增作业 | `POST /operation/addOperation` | | | 修改作业 | `POST /operation/updateOperation` | | | 删除作业 | `POST /operation/deleteOperation` | | | 作业导出 | `POST /operation/export` | | #### 6.7 工具管理 | 功能 | 端点 | 说明 | |------|------|------| | 工具分页查询 | `POST /tools/toolsPageList` | | | 新增/修改工具 | `POST /tools/addOrUpdateTools` | | | 删除工具 | `POST /tools/deleteTools` | | **层级关系**:对象(Object) → 事项(Matter) → 作业(Operation) + 工具(Tools) --- ### 模块 7:计划管理 | 功能 | 端点 | 说明 | |------|------|------| | 计划分页查询 | `POST /plan/planPageList` | 按场景、对象、作业筛选 | | 新增/修改计划 | `POST /plan/addOrUpdatePlan` | | | 删除计划 | `POST /plan/deletePlan` | | | 启用计划 | `POST /plan/enablePlan` | | | 禁用计划 | `POST /plan/disablePlan` | | | 计划导出 | `POST /plan/export` | 保洁/巡检/设备维护三类 | | 执行计划 | `POST /plan/executePlan` | 立即生成任务 | | 复制计划 | `POST /plan/copyPlan` | | | 计划选择列表 | `POST /plan/selectPlanList` | | | 计划详情 | `POST /plan/getPlanDetail` | | **计划类型**: - 保洁计划(appointment) - 巡检计划(inspect) - 设备维护计划(devOps) **周期规则**: - 周期类型:天(0) / 周(1,指定周几) / 月(2,指定日期) - 周期模式:不重复(0) / 周期重复(1) / 间隔重复(2) - 支持节假日跳过或强制执行 - 支持人次触发(按规定人数完成后自动生成下一轮) **计划关联**: - 计划对象(PlanObject)- 清洁对象清单 - 计划作业(PlanOperation)- 作业步骤 - 计划场景(PlanScenes)- 执行范围 - 计划用户(PlanUser)- 分配人员 - 计划班组(PlanWorkGroup)- 分配班组 --- ### 模块 8:任务管理 #### 8.1 清洁/保洁任务 | 功能 | 端点 | 说明 | |------|------|------| | 任务分页查询 | `POST /task/pageList` | 按网格/场景、状态、时间筛选 | | 任务明细导出 | `POST /task/export` | Excel | | 人工取消任务 | `POST /task/cancel` | | | 查看任务详情 | `POST /task/look` | 含对象、作业、进度、积分 | | 设置任务优先级 | `POST /task/setTaskTaskOrder` | | #### 8.2 巡检任务 | 功能 | 端点 | 说明 | |------|------|------| | 巡检任务列表 | `POST /taskInspect/pageList` | | | 巡检任务导出 | `POST /taskInspect/export` | | | 巡检任务详情 | `POST /taskInspect/look` | | | 上传巡检照片 | `POST /taskInspect/updateInspectPic` | | #### 8.3 用户上报任务 | 功能 | 端点 | 说明 | |------|------|------| | 上报任务列表 | `POST /taskUserUpload/pageList` | | | 上报任务详情 | `POST /taskUserUpload/look` | | | 人工设置时薪 | `POST /taskUserUpload/setWageByManual` | | **任务状态流转**: ``` 已生成(0) → 已匹配(1) → 待抢单(2) → 已接单(3) → 作业中(4) → 按时完成(5) / 超时完成(6) ↘ 人工取消(7) / 系统取消(8) / 未完成(9) ``` **任务类型**: - 0/1/2 = 保洁任务 - 3/4 = 用户上报任务 - 5 = 巡检任务 --- ### 模块 9:打卡与考勤 | 功能 | 端点 | 说明 | |------|------|------| | 打卡记录查询 | `POST /punchRecord/pageList` | 按网格/场景、时间筛选 | | 打卡记录导出 | `POST /punchRecord/export` | | | 考勤记录查询 | `POST /attendance/pageList` | | | 考勤记录导出 | `POST /attendance/export` | | | 日打卡统计查询 | `POST /punchRecordDayStatis/pageList` | 按用户分组 | | 日打卡统计导出 | `POST /punchRecordDayStatis/export` | | --- ### 模块 10:效率与绩效分析 | 功能 | 端点 | 说明 | |------|------|------| | 任务人效查询 | `POST /efficiency/taskEfficiencyPageList` | 按员工统计 | | 人效数据导出 | `POST /efficiency/export` | | | 时薪分页查询 | `POST /wage/wagePageList` | | | 新增/修改时薪 | `POST /wage/addOrUpdateWage` | | | 删除时薪 | `POST /wage/deleteWage` | | | 积分换算时薪 | `POST /wage/getAmount` | | **计价逻辑**:任务完成 → 获得积分(point) → 根据时薪表(Wage)换算金额 --- ### 模块 11:用户上报管理 | 功能 | 端点 | 说明 | |------|------|------| | 上报用户列表 | `POST /escalationUser/pageList` | | | 添加/修改上报用户 | `POST /escalationUser/addOrUpdate` | | | 导出 | `POST /escalationUser/export` | | --- ### 模块 12:系统参数配置 | 功能 | 端点 | 说明 | |------|------|------| | 站点参数查询 | `POST /taskDistrictParam/taskDistrictParamPageList` | | | 修改站点参数 | `POST /taskDistrictParam/updateTaskDistrictParam` | 紧急/特殊任务限制数 | --- ## 三、Task 服务 - 定时任务与后台处理 ### 模块 13:任务自动调度引擎(XXL-Job) | 任务 | 触发方式 | 说明 | |------|----------|------| | planCreateTask | XXL-Job 动态创建 | 根据计划规则自动生成清洁/巡检/维护任务 | | planDisableTask | XXL-Job 动态创建 | 按时间段禁用/启用任务生成 | | InitWatch | XXL-Job 调度 | 手表设备初始化(震动/语音/蓝牙参数) | | userRestStartTask | XXL-Job 调度 | 员工开始休息(记录、状态变更、蓝牙关闭) | | userRestEndTask | XXL-Job 调度 | 员工结束休息(恢复状态) | | restCountDown | XXL-Job 调度 | 休息倒计时监控,超时自动恢复 | ### 模块 14:任务处理队列(Spring @Scheduled) | 任务 | 频率 | 说明 | |------|------|------| | 任务人员派单 | 每秒 | 根据计划分配任务给清洁员 | | 任务过期处理 | 每秒 | 超时任务自动标记超期 | | 任务完成处理 | 每秒 | 完成后计算工资、评分 | | 任务重派发 | 每秒 | 失败/拒绝后重新分配 | | 巡检任务派单 | 每秒 | 巡检任务分配 | | 上报任务派单 | 每秒 | 用户上报维修任务分配 | | 设备维护自动完成 | 每秒 | 部分设备维护任务自动标记完成 | | 设备告警任务生成 | 每秒 | 监听设备告警,自动创建维护任务 | --- ### 模块 15:消息推送系统 | 任务 | 频率 | 说明 | |------|------|------| | 个推推送 | 每秒 | 通过个推SDK推送APP通知 | | MQTT任务状态推送 | 每2秒 | 推送任务状态变更到手机端 | | 任务动态消息生成 | 每2秒 | 生成任务动态并存储 | **推送类型**: - 新任务提醒(status=1) - 抢单池任务(status=2) - 已接单通知(status=3) - 任务取消通知(status=7/8) - 厕所保养提醒(status=-1) **推送方式**: - 在线推送:NotificationTemplate,立即推送 - 离线推送:TransmissionTemplate,24小时内推送,支持厂商通道 --- ### 模块 16:IoT 设备通信(MQTT) | 任务 | 频率 | 说明 | |------|------|------| | 手表连接状态监听 | 每秒 | 监测上下线,维护设备状态 | | 手表震动语音参数下发 | 每秒 | 实时调整手表配置 | | 手表参数初始化 | 每2秒 | 初始化手表配置 | | 手表绑定/解绑消息 | 每2秒 | 下发绑定/解绑指令 | | 手表任务消息推送 | 每2秒 | 下发新任务到手表 | | 任务-用户关联处理 | 每2秒 | 将任务消息转换为手表格式 | | 考勤状态消息 | 每秒 | 下班提醒,关闭手表蓝牙 | | 放大镜监控消息 | 每秒 | 实时位置追踪提醒 | | 心跳保活 | 每20秒/298秒 | 保持手表连接 | --- ### 模块 17:蓝牙定位与轨迹追踪 | 任务 | 频率 | 说明 | |------|------|------| | 蓝牙信标定位 | 每秒 | 根据RSSI信号强度计算员工位置 | | 下班定位关闭 | 每秒 | 结束进行中的轨迹记录 | **定位逻辑**: - 手表扫描周围蓝牙信标 → 上报信标MAC+RSSI → 服务端计算位置 - RSSI ≥ 阈值 → 进入信标范围 → 记录驻留时间 - 同一位置停留 ≥ 5秒保存轨迹 - 生成员工轨迹记录(UserTrajectory) --- ### 模块 18:员工休息管理 **完整流程**: 1. 员工点击休息 → 创建休息记录 → 更新状态为"休息中" 2. 存入Redis倒计时(默认60分钟) 3. 发送蓝牙关闭消息到手表 4. 倒计时结束 → 自动生成休息完成记录 → 恢复员工状态 --- ### 模块 19:节假日同步 | 任务 | 频率 | 说明 | |------|------|------| | 节假日同步 | 每年12月28日 06:06:06 | 调用外部API同步下一年节假日 | **节假日类型**:工作日(0) / 法定节假日(1) / 调休日(2) / 周末(3) --- ## 四、核心业务流程 ### 流程 1:清洁任务全生命周期 ``` 创建计划(Plan) ↓ 定义:对象 + 作业 + 场景范围 + 人员/班组 ↓ 启用计划 → XXL-Job 定时触发 planCreateTask ↓ 生成 TaskInfo → 推入 PlanTaskQueue ↓ TaskCorrelationSetTask 派单(匹配人员) ↓ 推送通知:个推(APP) + MQTT(手表) ↓ 员工接单 → 开始作业 → 完成作业 ↓ 核算积分 → 换算时薪 → 绩效统计 ``` ### 流程 2:设备告警 → 维护任务 ``` 设备传感器告警(如纸巾不足、空气质量异常) ↓ 告警推入 taskCommand 队列 ↓ TaskCreateQueue 处理:去重检查 + 创建 TaskInfo ↓ 分配维护员 → 推送通知 ↓ 维护员完成维护 → 标记完成 ``` ### 流程 3:员工实时定位 ``` 手表持续扫描蓝牙信标 ↓ 上报信标数据 → BleutoothLocationQueue ↓ 计算位置 → 保存 UserLocation ↓ 生成驻留轨迹 → UserTrajectory ↓ 支撑人效分析报表 ``` --- ## 五、核心数据模型 | 实体 | 说明 | 所属库 | |------|------|--------| | TaskInfo | 任务主表 | db2 | | Plan | 清洁/巡检/维护计划 | db2 | | PlanObject | 计划对象清单 | db2 | | PlanOperation | 计划作业 | db2 | | PlanScenes | 计划执行范围 | db2 | | TaskUser | 任务分配人员 | db2 | | TaskScenes | 任务场景 | db2 | | Operation | 作业定义 | db2 | | Object | 清洁对象 | db2 | | Matter | 事项 | db2 | | Tools | 工具 | db2 | | Wage | 时薪 | db2 | | Authority | 权限组 | db2 | | WorkGroup | 班组 | db2 | | PunchRecord | 打卡记录 | db2 | | AttendanceRecord | 考勤记录 | db2 | | UserLocation | 实时定位 | db2 | | UserTrajectory | 员工轨迹 | db2 | | Watch | 手表设备 | db1 | | WatchOffLog | 手表上下线日志 | db1 | | Hardware | 硬件设备 | db1 | | Beacon | 蓝牙信标 | db1 | | Holiday | 节假日 | db2 | | PushLog | 推送日志 | db2 | | TodayDynamic | 任务动态消息 | db2 | --- ## 六、关键 Redis 数据结构 | Key | 类型 | 用途 | |-----|------|------| | `PlanTaskQueue` | List | 待生成的计划任务队列 | | `taskCommand` | List | 设备告警命令队列 | | `taskPushQueue` | List | 待推送的通知消息队列 | | `IntellectualTaskIdList` | List | 待处理的任务ID队列 | | `MqttWatchTaskMessage` | List | 待推送给手表的任务消息 | | `WatchTaskUserList` | List | 待处理的任务-用户关联 | | `WatchConnectList` | List | 手表连接/断开事件 | | `BleutoothLocationQueue` | List | 蓝牙定位数据队列 | | `CleaningRestLastTime` | ZSet | 员工休息倒计时(score=截止时间戳) | | `MQTTTOPIC` | Set | 活跃手表设备集合 | | `Location:userId` | String | 员工最新位置 | | `Disable:d/t/p:id:taskTypeId` | String | 任务生成禁用标记 | --- ## 七、数据库详细分析 ### 7.1 数据库架构 系统使用 **两个 MySQL 数据库**,通过 MyBatis-Plus 多数据源配置: | 数据库 | 名称 | 说明 | |--------|------|------| | DB1 | xiaoqu_comples_d | 基础信息库:组织、用户、硬件、设备、定位数据 | | DB2 | xiaoqu_intellectual_d | 业务数据库:任务、计划、权限、考勤、日志 | **连接配置**:Druid 连接池,最大连接数100,初始10,最小空闲5 ### 7.2 DB1 实体表清单(51张) #### 组织架构 | 表名 | 实体 | 说明 | 关键字段 | |------|------|------|----------| | agent | Agent | 代理商 | name, type(0区域主管/1代理/2物业), level(0总部/1一级/2二级), channel_no, parents_id | | properyt | Properyt | 物业公司 | name, agent_id, serialnumber, district_on_count, hard_on_count, user_count | | district | District | 区域站/站点 | district_name, property_id, agent_id, address, buildCount, punch_flag, online_state | | building | Building | 一级网格(楼座) | name, district_id, longitude, latitude, grid_level, orderby | | floor | Floor | 二级网格(楼层) | name, building_id, man, woman, man_floorpic, woman_floorpic, grid_level | | multistage_grid | MultistageGrid | 多级网格 | 支持更细粒度的网格划分 | | grid_to_principal | GridToPrincipal | 网格-负责人关联 | grid_id, principal_id | | positions | Positions | 位置/岗位 | 厕所内具体位置(男厕、女厕等) | **组织层级**:Agent(代理) → Properyt(物业) → District(站点) → Building(楼座) → Floor(楼层) → MultistageGrid(多级网格) #### 用户管理 | 表名 | 实体 | 说明 | 关键字段 | |------|------|------|----------| | user | User | 用户表 | mobile, name, idcard, sex, role_type, work_status, work_at_status, district_id, property_id, agent_id, authority_id | | user_detail | UserDetail | 用户详情 | 扩展用户信息 | | user_proper | UserProper | 用户-物业关联 | user_id, proper_id | | user_toilet | UserToilet | 用户-卫生间关联 | user_id, toilet_id | | user_district_attendance | UserDistrictAttendance | 用户站点考勤 | user_id, district_id, status, workAtStatus | | user_rest | UserRest | 用户休息记录 | user_id, rest_time | | user_location | UserLocation | 用户实时位置 | user_id, longitude, latitude, beacon_mac, rssi | | user_trajectory | UserTrajectory | 用户轨迹 | user_id, location_id, stay_time, status | | user_menu_district | UserMenuDistrict | 用户菜单-站点 | user_id, menu_id, district_id | | proper_user_district | ProperUserDistrict | 物业用户-站点关联 | user_id, district_id | **User 核心字段**: - 工作状态:work_status, work_at_status(0作业/1转场/2空闲/3休息) - 组织关联:district_id, property_id, agent_id - 权限:role_id, authority_id, property_authority_id - 认证:weixin_openid, registration_id #### 硬件设备 | 表名 | 实体 | 说明 | 关键字段 | |------|------|------|----------| | hardware | Hardware | 硬件设备 | sn_code, type, status, district_id | | hardware_var | HardwareVar | 硬件变量 | hardware_id, var_name, var_value | | watch | Watch | 手表设备 | imei, user_id, bind_status, online_status, shock_state, voice_state | | watch_set_params | WatchSetParams | 手表参数设置 | watch_id, param_name, param_value | | watch_bind_log | WatchBindLog | 手表绑定日志 | watch_id, user_id, bind_time | | watch_off_log | WatchOffLog | 手表上下线日志 | watch_id, status(0离线/1在线), connected_at, disconnected_at | | watch_test_log | WatchTestLog | 手表测试日志 | 测试数据 | | toilet | Toilet | 卫生间/场景设备 | name, district_id, building_id, floor_id | | toilet_airquality | ToiletAirquality | 空气质量传感器 | sn_code, toilet_id | | heyi_dev | HeyiDev | 合一设备 | 第三方设备集成 | | heyi_group | HeyiGroup | 合一设备分组 | 设备分组管理 | | equipment_repair_recording | EquipmentRepairRecording | 设备维修记录 | equipment_id, repair_time, status | #### 蓝牙信标与定位 | 表名 | 实体 | 说明 | 关键字段 | |------|------|------|----------| | beacon | Beacon | 蓝牙信标 | mac, name, district_id, rssi_threshold | | beacon_log | BeaconLog | 信标日志 | beacon_id, event_type | | beacon_area_pic | BeaconAreaPic | 场景区域图 | area_id, pic_url | | beacon_area_position | BeaconAreaPosition | 图层管理 | area_id, position_x, position_y | | beacon_point_manage | BeaconPointManage | 点位管理 | beacon_id, point_name | | bluetooth_communication | BluetoothCommunication | 蓝牙通信日志 | 通信记录 | | bluetooth_connect | BluetoothConnect | 蓝牙连接数据 | 连接状态 | | bluetooth_location | BluetoothLocation | 蓝牙定位数据 | mac, rssi, user_id | | rfid_info | RfidInfo | RFID信息 | rfid标签数据 | #### 菜单与统计 | 表名 | 实体 | 说明 | |------|------|------| | app_menu | AppMenu | 物业APP菜单权限 | | my_menu | MyMenu | 自定义菜单 | | my_user_menu | MyUserMenu | 用户菜单 | | district_strategy | DistrictStrategy | 区域策略 | | monthly_statistics | MonthlyStatistics | 月度统计 | | statistics_month_log | StatisticsMonthLog | 月度统计日志 | | switch_day_data | SwitchDayData | 日数据统计 | | switch_hour_data | SwitchHourData | 小时数据统计 | | switch_month_data | SwitchMonthData | 月数据统计 | | switch_year_data | SwitchYearData | 年数据统计 | | airqualitylevelgrade | Airqualitylevelgrade | 分润管理明细 | | xinbiao_record | XinbiaoRecord | 新表记录 | ### 7.3 DB2 实体表清单(61张) #### 任务管理 | 表名 | 实体 | 说明 | 关键字段 | |------|------|------|----------| | task_info | TaskInfo | 任务主表 | name, no, task_type, status, plan_id, district_id, point, wage_hour | | task_type | TaskType | 任务类型 | name, code | | task_user | TaskUser | 任务-用户关联 | task_id, user_id, status | | task_accept_user | TaskAcceptUser | 接单人员 | task_id, user_id | | task_distributi_user | TaskDistributiUser | 派发人员 | task_id, user_id | | task_pic | TaskPic | 任务照片 | task_id, pic_url, type | | task_scenes | TaskScenes | 任务场景 | task_id, grid_level, scenes_level, building_id, floor_id | | task_task_scenes | TaskTaskScenes | 任务-场景关联 | task_id, scenes_id | | task_status_log | TaskStatusLog | 任务状态日志 | task_id, old_status, new_status, change_time | | task_district_param | TaskDistrictParam | 站点任务参数 | district_id, rest_time, beacon_no | **TaskInfo 核心字段**: - 状态流转:status(0已生成→1匹配→2待抢→3已接→4作业中→5按时完成/6超时/7人工取消/8系统取消/9未完成) - 时间跟踪:create_time, send_time, confirm_time, action_time, finish_time, expire_time - 时长统计:confirm_timing(响应), timing(作业), over_timing(超时), transfer_timing(转场) - 绩效:point(积分), wage_hour(工时), wage_id, salary - 巡检:should_inspect(应巡), actual_inspect(实巡), not_inspect(未巡) #### 计划管理 | 表名 | 实体 | 说明 | 关键字段 | |------|------|------|----------| | plan | Plan | 任务计划 | task_name, type(0例行/2指派/5巡检), circle_status, circle_type(0天/1周/2月), status | | plan_object | PlanObject | 计划-对象关联 | plan_id, object_id | | plan_operation | PlanOperation | 计划-作业关联 | plan_id, operation_id | | plan_scenes | PlanScenes | 计划-场景关联 | plan_id, building_id, floor_id, multistage_grid_id, scenes_id | | plan_user | PlanUser | 计划-用户关联 | plan_id, user_id | | plan_work_group | PlanWorkGroup | 计划-班组关联 | plan_id, work_group_id | | plan_logic_label | PlanLogicLabel | 计划-标签关联 | plan_id, label_id | **Plan 核心字段**: - 周期配置:circle_status(0不重复/1周期/2间隔), circle_type(0天/1周/2月), circle_no - 执行时段:action_start_time, action_end_time - 过期设置:expire_type(0不过期/1次日/2指定), expire_timing - 时长参数:working_timing(标准工时), transition_timing(转场), ready_timing(准备), redundance_timing(冗余) - 跳过配置:eliminate_type(0不跳/1节假日/2自定义) #### 考勤打卡 | 表名 | 实体 | 说明 | 关键字段 | |------|------|------|----------| | punch_record | PunchRecord | 打卡记录 | user_id, punch_time, longitude, latitude, address, punch_type, pic_url | | punch_record_day_statis | PunchRecordDayStatis | 打卡日统计 | user_id, date, punch_count | | rest_record | RestRecord | 休息记录 | user_id, punch_type(0休息/1恢复), rest_duration | | attendance_record | AttendanceRecord | 考勤记录 | user_id, date, status | #### 权限管理 | 表名 | 实体 | 说明 | 关键字段 | |------|------|------|----------| | authority | Authority | 权限组 | name, type | | webpage | Webpage | 页面 | name, url, parent_id | | webpage_authority | WebpageAuthority | 页面权限 | webpage_id, authority_id | | page_field | PageField | 页面字段 | webpage_id, field_name, field_label | | field_webpage_authority | FieldWebpageAuthority | 字段-权限关联 | field_id, webpage_id, authority_id | | button | Button | 按钮 | webpage_id, name, code | | button_field | ButtonField | 按钮字段 | button_id, field_name | | button_webpage_authority | ButtonWebpageAuthority | 按钮-权限关联 | button_id, webpage_id, authority_id | **权限链路**:Authority(权限组) → WebpageAuthority(页面) → FieldWebpageAuthority(字段) + ButtonWebpageAuthority(按钮) #### 基础数据 | 表名 | 实体 | 说明 | 关键字段 | |------|------|------|----------| | object | Object | 清洁对象 | name, parent_id, level, type | | object_type | ObjectType | 对象类型 | name | | matter | Matter | 事项 | object_id, name, type | | matter_type | MatterType | 事项类型 | name | | operation | Operation | 作业 | name, type, tool_ids | | tools | Tools | 工具 | name, district_id, status | | scene_object | SceneObject | 场景-对象关联 | scene_id, object_id | | inspect_scenes | InspectScenes | 巡检场景 | name, district_id | | inspect_pic | InspectPic | 巡检照片 | inspect_id, pic_url | #### 人员管理 | 表名 | 实体 | 说明 | 关键字段 | |------|------|------|----------| | work_group | WorkGroup | 班组 | work_group_name, district_id | | work_group_to_principal | WorkGroupToPrincipal | 班组-负责人 | work_group_id, principal_id | | skill_manage | SkillManage | 技能 | name | | user_to_skill | UserToSkill | 用户-技能 | user_id, skill_id | | label_manage | LabelManage | 标签 | name | | user_to_label | UserToLabel | 用户-标签 | user_id, label_id | | user_to_matter | UserToMatter | 用户-事项 | user_id, matter_id | | user_to_service_area | UserToServiceArea | 用户-服务区域 | user_id, area_id | | escalation_user | EscalationUser | 上报用户 | user_id | | escalation_service_area | EscalationServiceArea | 上报服务区域 | escalation_id, area_id | #### 绩效与薪资 | 表名 | 实体 | 说明 | 关键字段 | |------|------|------|----------| | wage | Wage | 时薪配置 | type, point, amount | | efficiency_recording | EfficiencyRecording | 人效录入 | user_id, date | | efficiency_detail | EfficiencyDetail | 人效详情 | recording_id, metric, value | #### 日志与通知 | 表名 | 实体 | 说明 | 关键字段 | |------|------|------|----------| | login_log | LoginLog | 登录日志 | user_id, login_time, ip, type(0登录/1退出) | | change_log | ChangeLog | 变更日志 | entity, operation, old_value, new_value | | modify_log | ModifyLog | 修改日志 | 记录数据修改历史 | | push_log | PushLog | 推送日志 | client_id, user_id, title, content, status | | sms_send_record | SmsSendRecord | 短信发送记录 | mobile, content, status | | user_push | UserPush | 用户推送映射 | user_id, client_id | | today_dynamic | TodayDynamic | 今日动态消息 | task_id, user_id, message, type | #### 其他 | 表名 | 实体 | 说明 | |------|------|------| | holiday | Holiday | 节假日(0工作日/1法定/2调休/3周末) | | app_version | AppVersion | APP版本管理 | | type_source | TypeSource | 类型来源 | ### 7.4 通用字段规范 所有实体均包含以下标准字段: - `id` (Long) - 自增主键 - `create_id` (Long) - 创建人ID - `create_time` (Date) - 创建时间 - `modify_id` (Long) - 修改人ID - `modify_time` (Date) - 修改时间 - `soft_delete` (Integer) - 软删除标记(0正常/1已删除) ### 7.5 核心关系映射 ``` 组织层级: Agent(代理) → Properyt(物业) → District(站点) → Building(楼座) → Floor(楼层) → MultistageGrid(多级网格) 用户关系: User ←→ Authority(权限组) User ←→ WorkGroup(班组) User ←→ SkillManage(技能) User ←→ LabelManage(标签) User ←→ District(站点) User ←→ Watch(手表) 任务流程: Plan(计划) → TaskInfo(任务) → TaskUser(执行人) Plan → PlanObject(对象) + PlanOperation(作业) + PlanScenes(场景) TaskInfo → TaskScenes(场景) + TaskPic(照片) + TaskStatusLog(状态日志) 基础数据: Object(对象) → Matter(事项) → Operation(作业) + Tools(工具) District → Beacon(信标) → UserLocation(定位) → UserTrajectory(轨迹) ``` --- ## 八、Redis 详细分析 ### 8.1 Redis 架构配置 | 配置项 | 值 | |--------|-----| | 连接驱动 | Lettuce (Spring Data Redis) | | 数据库数量 | 2 个独立 DB (DB4 和 DB5) | | 连接池最大连接数 | 200 | | 最大空闲连接 | 8 | | 最小空闲连接 | 1 | | 序列化方式 | StringRedisSerializer (Key + Value 均为字符串) | **数据库分工**: | 数据库 | 用途 | |--------|------| | DB 4 | 消息队列、状态标志、计数器、分布式锁 | | DB 5 | 实体缓存、设备命令队列、字典配置、时间序列 | ### 8.2 Redis 操作工具 **RedisService4 / RedisService5** - 封装以下数据类型操作: | 数据类型 | 操作方法 | |---------|---------| | String | set, get, remove, exists | | List | lPush, rPush, leftPop, rightPop, lRange, lRangeAll | | Set | add, setRemove, isMember, setMembers, setPop | | Hash | hmSet, hmGet | | ZSet | zAdd, zRemove, rangeByScore | **RedisDistributedLock** - 分布式锁: - 锁前缀:`redis_lock_` - 默认过期:30秒 - 自旋重试:最多10次,间隔50ms ### 8.3 DB4 Key 详细映射 #### 任务消息队列 | Key | 类型 | 内容 | 写入方 | 消费方 | |-----|------|------|--------|--------| | `taskUserQueue` | List | 保洁派单消息 (TaskPlanEntity JSON) | TaskCorrelationSetTask, TaskCreateQueue | TaskCorrelationSetTask | | `taskPushQueue` | List | APP推送消息 (TaskPushInfo JSON) | TaskCorrelationSetTask, TaskCreateQueue | TaskPushMessage | | `taskReportQueue` | List | 上报任务派单 (TaskPlanEntity JSON) | TaskCorrelationSetTask | TaskCorrelationSetTask | | `inspectTaskUserQueue` | List | 巡检任务派单 (TaskPlanEntity JSON) | TaskCorrelationSetTask | TaskCorrelationSetTask | | `IntellectualTaskIdList` | List | 待处理任务ID | TaskCorrelationSetTask | ScheduledTask | | `PlanTaskQueue` | List | 待生成的计划ID | PlanTimeTask | 任务处理系统 | #### 手表/MQTT 消息队列 | Key | 类型 | 内容 | 写入方 | 消费方 | |-----|------|------|--------|--------| | `WatchTaskUserList` | List | 手表任务-用户ID | TaskCorrelationSetTask | ScheduledTask | | `MqttWatchTaskMessage` | List | 手表任务消息 (JSON) | ScheduledTask | ScheduledTask (MQTT发送) | | `MqttTaskStateMessage` | List | 任务状态变更消息 (JSON) | ScheduledTask | ScheduledTask (MQTT发送) | | `AttendanceStatusMessage` | List | 考勤状态消息 (JSON) | UserRestTask | ScheduledTask | | `TaskMagnifierMessage` | List | 放大镜监控消息 (JSON) | 业务系统 | ScheduledTask | | `WatchConnectList` | List | 手表连接/断开事件 (JSON) | PushCallback | ScheduledTask | | `WatchShockAndVoiceMessage` | List | 手表震动/语音参数 (JSON) | 业务系统 | ScheduledTask | #### 蓝牙定位队列 | Key | 类型 | 内容 | 写入方 | 消费方 | |-----|------|------|--------|--------| | `BleutoothLocationQueue` | List | 蓝牙定位数据 (JSON) | 设备上报 | LocationTask | | `OffDutyBleutoothLocationQueue` | List | 下班定位数据 (JSON) | 设备上报 | LocationTask | #### 任务禁用/启用标志 | Key 模式 | 类型 | 值 | 说明 | |---------|------|-----|------| | `Disable:d::` | String | "0"/"1" | 站点级任务禁用 | | `Disable:t::` | String | "0"/"1" | 场景级任务禁用 | | `Disable:p::` | String | "0"/"1" | 位置级任务禁用 | | `DevTaskFlag:` | String | "0"/"1" | 设备维护任务开关 | | `workingTimeing:d::` | String | 数字 | 站点级工作时长 | | `workingTimeing:t::` | String | 数字 | 场景级工作时长 | | `workingTimeing:p::` | String | 数字 | 位置级工作时长 | #### 计划/计数器 | Key 模式 | 类型 | 值 | 说明 | |---------|------|-----|------| | `Plan::` | String | 任务ID | 计划关联的XXL-Job任务ID | | `UserCount:p:` | Set | 计划ID集合 | 位置级计划集合 | | `UserCount:p::` | String | 数字 | 人次触发剩余次数 | | `PoolOrderCount::` | String | 数字 | 订单计数 | #### MQTT 主题管理 | Key | 类型 | 值 | 说明 | |-----|------|-----|------| | `MQTTTOPIC` | Set | MQTT Topic 集合 | 活跃手表设备(旧) | | `MQTTTOPICNEW` | Set | MQTT Topic 集合 | 活跃手表设备(新) | #### 分布式锁 | Key 模式 | 类型 | TTL | 说明 | |---------|------|-----|------| | `redis_lock_` | String | 30秒 | 防重复提交 | | `HolidayLock` | String | 1800秒 | 节假日同步锁 | #### 其他 | Key 模式 | 类型 | 说明 | |---------|------|------| | `AuthorityWebpage:` | String | 权限页面缓存 | | `mobileLimit:` | String | 手机号限制标志 | | `ToiletToUser:` | String | 厕所-用户映射 | | `CleaningRestLastTime` | ZSet | 员工休息倒计时(score=截止时间戳) | ### 8.4 DB5 Key 详细映射 #### 设备命令队列 | Key | 类型 | 内容 | 写入方 | 消费方 | |-----|------|------|--------|--------| | `taskCommand` | List | 设备告警命令 (TaskCommandInfo JSON) | PlanTimeTask | TaskCreateQueue | | `taskFinishCommand` | List | 任务完成命令 (TaskCommandInfo JSON) | 业务系统 | TaskCorrelationSetTask | | `FinishTaskQueue` | List | 已完成任务ID | TaskCorrelationSetTask | TaskCorrelationSetTask | | `ConfirmTaskQueue` | List | 已确认任务ID | 业务系统 | TaskCorrelationSetTask | | `WatchSetParamsInit` | List | 手表初始化参数 (JSON) | 业务系统 | ScheduledTask | | `WatchShockSetParamsInit` | List | 手表震动初始化参数 (JSON) | 业务系统 | ScheduledTask | | `RepeatTaskQueue` | Set | 重派发任务集合 | TaskCorrelationSetTask | TaskCorrelationSetTask | | `DistrictBeaconNoChange` | List | 信标号更新队列 | 业务系统 | BeaconTask | #### 实体缓存 | Key 模式 | 类型 | 内容 | TTL | |---------|------|------|-----| | `entity:UserDistrictAttendance:_` | String | 用户站点考勤 JSON | 无 | | `entity:Hardware:` | String | 硬件设备信息 JSON | 无 | | `entity:ToiletAirQualityAirMac:` | String | 空气质量传感器 JSON | 无 | | `entity:TaskTypeNearFlag::` | String | 任务类型临期标志 | 无 | #### 名称缓存 | Key 模式 | 类型 | 内容 | |---------|------|------| | `name:Agent:` | String | 代理商名称 | | `name:Properyt:` | String | 物业名称 | | `name:District:` | String | 站点名称 | | `name:PropertyAuthority:` | String | 权限组名称 | #### 字典配置 (Hash) | Key | Hash 字段 | 值 | 说明 | |-----|----------|-----|------| | `Dictionary` | `UserAppointFlag` | "0"/"1" | 用户预约标志 | | `Dictionary` | `UserAreaFlag` | "0"/"1" | 用户服务区域标志 | | `Dictionary` | `UserDutyFlag` | "0"/"1" | 用户职责标志 | | `Dictionary` | `LogicFlag` | "0"/"1" | 逻辑标志 | | `Dictionary` | `TaskNearFlag` | "0"/"1" | 任务临期标志 | | `Dictionary` | `OperateAssignmentTypes` | 类型列表 | 操作分配类型 | | `Dictionary` | `AutoOffWorkTime` | 数字 | 自动下班时间 | | `Dictionary` | `ScenesType` | 场景类型列表 | 场景类型 | #### 定位与状态 | Key 模式 | 类型 | 内容 | |---------|------|------| | `Location:` | String | 最新位置(格式: 时间_场景_楼栋_楼层) | | `DistrictBeaconNo:` | String | 站点信标编号 | | `disinfect:p:` | String | 位置消毒状态("0"/"1") | | `CleaningUpWorkAtStatus:` | String | 员工原始工作状态 | #### 时间序列 | Key | 类型 | Score | 说明 | |-----|------|-------|------| | `ImpendingTime` | ZSet | 过期时间戳(ms) | 临期任务队列 | | `TaskExprieQueue` | ZSet | 过期时间戳(ms) | 任务过期队列 | ### 8.5 Redis 数据流转图 ``` [计划调度] PlanTimeTask → PlanTaskQueue(DB4) → 任务生成 PlanTimeTask → taskCommand(DB5) → TaskCreateQueue → taskPushQueue(DB4) [任务派单] TaskCorrelationSetTask ←→ taskUserQueue(DB4) TaskCorrelationSetTask ←→ inspectTaskUserQueue(DB4) TaskCorrelationSetTask ←→ taskReportQueue(DB4) TaskCorrelationSetTask → WatchTaskUserList(DB4) → ScheduledTask → MqttWatchTaskMessage(DB4) → MQTT [消息推送] taskPushQueue(DB4) → TaskPushMessage → 个推SDK → APP IntellectualTaskIdList(DB4) → ScheduledTask → MqttTaskStateMessage(DB4) → MQTT → 手机端 [设备通信] WatchConnectList(DB4) → ScheduledTask → 更新Watch表 BleutoothLocationQueue(DB4) → LocationTask → UserLocation/UserTrajectory [员工休息] UserRestTask → AttendanceStatusMessage(DB4) → ScheduledTask → MQTT CleaningRestLastTime(DB4, ZSet) → restCountDown → 自动恢复 ``` --- ## 九、统计汇总 | 维度 | 数量 | |------|------| | Controller 数量 | 27 个 | | REST API 端点 | 约 150+ 个 | | XXL-Job 定时任务 | 6 个 | | Spring @Scheduled 任务 | 20+ 个 | | 业务模块 | 19 个 | | DB1 数据表 | 51 张 | | DB2 数据表 | 61 张 | | 数据表总计 | 112 张 | | Redis DB4 Key 类型 | 30+ 种 | | Redis DB5 Key 类型 | 25+ 种 | | Redis 消息队列 | 15+ 个 |