93bc1f10c3
fix(security): 规范安保工单事件日志,消除重复记录
...
Java CI with Maven / build (11) (push) Has been cancelled
Java CI with Maven / build (17) (push) Has been cancelled
Java CI with Maven / build (8) (push) Has been cancelled
修复前同一次派发产生 4 条 ORDER_DISPATCHED 日志的问题:
- 新增 ORDER_QUEUED 枚举,handleQueued 改用正确的 event_type
- handleArrived 改用 ORDER_ARRIVED(之前错用 ORDER_CONFIRM)
- 移除 onOrderCreated 中派单成功的重复日志(由状态监听统一记录)
- 移除 DispatchEngineImpl.dispatch 上的 @BusinessLog 注解(避免与
业务层 EventListener 日志重复)
- ORDER_DISPATCHED 描述改为"工单派发",ORDER_ARRIVED 改为"人员到达"
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-26 15:30:42 +08:00
bd70f3bc8a
fix(ops): 修复队列脏数据导致工单永远排队无法派发
...
问题:autoCompleteOrder 直接调用 orderStateMachine.forceTransition,
绕过责任链导致队列记录残留 WAITING,autoDispatchNext 反复命中脏数据
失败,人员状态永远 BUSY,新工单全部 ENQUEUE_ONLY 形成死循环。
修复:
1. SecurityOrderServiceImpl 所有状态操作统一走 OrderLifecycleManager,
移除对 OrderStateMachine 的直接依赖
2. autoDispatchNext 增加循环遍历 + 工单状态校验,跳过并清理非 QUEUED
的脏队列记录,增加 maxSkip=50 防护上限
3. forceComplete 返回值校验,失败时抛异常而非静默继续
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-26 15:30:02 +08:00
c0c9854e73
fix(security): sendCard 改为 DISPATCHED 状态变更时发送 + @EventListener
...
Java CI with Maven / build (11) (push) Has been cancelled
Java CI with Maven / build (17) (push) Has been cancelled
Java CI with Maven / build (8) (push) Has been cancelled
- 将 sendCard 从 onOrderCreated 移至 handleDispatched
- 使用 @EventListener 替代 @TransactionalEventListener(AFTER_COMMIT)
确保 autoDispatchNext 场景的 DISPATCHED 事件也能触发
- PAUSED → DISPATCHED 恢复场景跳过重发
- 参考保洁模块 CleanOrderEventListener 的实现模式
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-26 14:06:31 +08:00
394b644a4e
feat(security): 安保工单接入队列调度,支持入队等待和负载均衡
...
改造安保调度策略,接入 UserDispatchStatusService:
SecurityScheduleStrategy:
- 读 Redis 判断人员忙碌/空闲,决策 DIRECT_DISPATCH / PUSH_AND_ENQUEUE / ENQUEUE_ONLY
- PAUSED 状态视为忙碌,不给暂停中的人员推送新工单
- 替换原来的始终 DIRECT_DISPATCH 逻辑
SecurityAreaAssignStrategy:
- Pipeline 批量读 Redis 获取每人活跃工单数
- 选负载最轻的人员,同等负载取 sort 最小
SecurityOrderEventListener:
- 新增 QUEUED 分支,入队时写入 assignee 信息到扩展表
- 取消工单后自动派发下一个等待工单(兜底从 ops_order 表获取 assigneeId)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-25 15:46:19 +08:00
0dfc669488
feat(security): 安保派单补充处理人手机号,接口返回 phone 和 cameraName
...
- SecurityAreaAssignStrategy 注入 AdminUserApi,从用户表查询
nickname 和 mobile 替代冗余字段
- OpsOrderSecurityExtDO 新增 assignedUserPhone 字段
- SecurityOrderEventListener.handleDispatched 写入 assignedUserId、
assignedUserName、assignedUserPhone 到扩展表
- SecurityOrderExtQueryHandler 接口返回补充 assignedUserPhone 和
cameraName
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-25 14:26:54 +08:00
c7bdf7d773
refactor(security): 清理 security-biz 中旧的 vsp 文件,更新测试
...
- 删除 security-biz/integration/vsp/ 旧目录(已迁移至 ops-biz/infrastructure/vsp/)
- 更新 SecurityOrderEventListenerVspTest import 路径
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-25 11:30:24 +08:00
fbc88cd620
feat(security): 拆分 VSP 通知为独立监听器 SecurityOrderVspNotifyListener
...
将 VSP 企微通知逻辑从 SecurityOrderEventListener 抽取到独立的
SecurityOrderVspNotifyListener,遵循单一职责原则:
- SecurityOrderEventListener: 派单 + 时间戳 + 业务日志
- SecurityOrderVspNotifyListener: 企微卡片发送 + 状态同步
独立 @Async + @TransactionalEventListener 避免自调用导致 @Async 失效
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-25 11:29:59 +08:00
8ab5ce6d01
feat(security): 安保工单扩展表新增 cameraName 字段
...
VO/DTO/DO 全链路新增摄像头名称字段,告警系统创建工单时传入,
用于企微卡片通知展示。
SQL: ALTER TABLE ops_order_security_ext ADD COLUMN camera_name VARCHAR(128) DEFAULT NULL COMMENT '摄像头名称' AFTER camera_id;
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-25 11:29:17 +08:00
e44c1f6f4e
feat(ops): 新增 VSP 企微通知网关基础设施
...
- VspNotifyClient/Impl: HTTP 客户端,支持网络异常重试 + 线性退避
- VspNotifyProperties/Config: 配置属性与 RestTemplate Bean(JdkClientHttpRequestFactory)
- VspSendCardReqDTO/VspSyncStatusReqDTO/VspResponseDTO: 请求响应 DTO
- WechatUserIdResolver: 企微 userId 查询工具,通过 SocialUserApi 查询,供各业务线复用
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-25 11:28:53 +08:00
92a51adcea
fix(ops): 安保工单自动完单支持全状态处理
...
Java CI with Maven / build (11) (push) Has been cancelled
Java CI with Maven / build (17) (push) Has been cancelled
Java CI with Maven / build (8) (push) Has been cancelled
autoCompleteOrder 根据当前状态分支处理:
- PENDING → transition CANCELLED(未派单,告警已解除)
- DISPATCHED/CONFIRMED/ARRIVED/PAUSED → forceTransition COMPLETED
- 已终态 → 幂等跳过
falseAlarmOrder 复用 autoCompleteOrder 逻辑,额外更新扩展表误报标记。
移除 falseAlarmOrder 未使用的 operatorId 参数。
补充 4 个单元测试覆盖新增分支。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-18 22:25:44 +08:00
88533c9d69
refactor(ops): 安保工单图片预签名下沉至 SecurityOrderExtQueryHandler
...
Java CI with Maven / build (11) (push) Has been cancelled
Java CI with Maven / build (17) (push) Has been cancelled
Java CI with Maven / build (8) (push) Has been cancelled
将 OrderCenterController 中的 presignExtInfoImageUrls 方法移除,
预签名逻辑下沉至 SecurityOrderExtQueryHandler 数据组装阶段,
通过 OssPresignHelper 就地处理 imageUrl 和 resultImgUrls。
security-biz 新增 infra-api 依赖,RpcConfiguration 注册 FileApi。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-18 15:07:03 +08:00
4796009e95
fix(test): 移除 SecurityOrderServiceTest 中无效的 setLocation 调用
...
Java CI with Maven / build (11) (push) Has been cancelled
Java CI with Maven / build (17) (push) Has been cancelled
Java CI with Maven / build (8) (push) Has been cancelled
location 由 AreaPathBuilder.buildPath() 自动生成,DTO 中无此字段,修复编译错误。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-15 17:25:01 +08:00
f32315f790
feat(ops): 安保工单新增误报标记、完善确认/完单接口支持 open-api 场景
...
- 新增 falseAlarmOrder 方法,标记误报并完成工单
- confirmOrder/manualCompleteOrder 支持 operatorId 为 null(open-api 自动取已分配人员)
- 新增 resolveOperatorId 辅助方法,null 时记录 warn 日志
- createSecurityOrder 移除 location 透传,改用 AreaPathBuilder 自动拼接
- 消除 createSecurityOrder 中 area 重复查询(校验 + buildPath 共用同一 DO)
- OpsOrderSecurityExtDO 新增 falseAlarm 字段
- SecurityOrderCompleteReqDTO.operatorId 移除 @NotNull 约束
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-15 10:31:50 +08:00
4a7128321e
feat(ops): 安保模块构建配置与枚举扩展
...
- security-biz pom 新增 ops-biz、iot-api 依赖
- ops-server pom 引入 security-biz 模块
- 新增 SECURITY_GUARD 操作人类型、ALARM 来源类型
- 新增安保相关错误码
- dev/local 配置新增安保数据源
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 17:33:55 +08:00
0f2fb3c50e
test(ops): 新增安保模块单元测试
...
覆盖 SecurityOrderService、SecurityOrderEventListener、
SecurityAreaAssignStrategy、SecurityOrderExtQueryHandler、
OpsAreaSecurityUserService 的核心逻辑测试。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 17:33:28 +08:00
4d36bf5b1c
feat(ops): 新增安保工单事件监听器,覆盖全状态业务日志
...
监听工单创建后自动派单、状态变更记录扩展表时间点(派发/确认/
完成),统一记录业务日志,区分系统自动完单与人工完单。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 17:33:18 +08:00
784c2ed387
feat(ops): 新增安保工单核心服务与派单策略
...
包含安保工单 CRUD(创建/确认/完单)、区域人员绑定服务、
区域分配策略 SecurityAreaAssignStrategy、调度策略
SecurityScheduleStrategy,以及安保扩展查询处理器。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 17:33:09 +08:00
d53d1c4584
feat(ops): 新增安保模块数据模型与 Mapper
...
新增安保区域人员绑定表 ops_area_security_user 和安保工单扩展表
ops_order_security_ext,以及对应的 DO 和 Mapper 接口。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 17:32:56 +08:00
16f0b71ead
chore: ops模块构建(业务运营)- 主要实现 基础建设、保洁、安保、工程、客服 等功能
2025-12-31 16:49:44 +08:00