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
8406a80655
feat(ops): OrderLifecycleManager 支持 forceComplete 强制完成工单
...
新增 forced 字段到 OrderTransitionRequest,StateTransitionHandler 根据
该字段选择 transition 或 forceTransition,确保强制状态转换也走完整
责任链(队列同步 + 事件发布),避免绕过 QueueSyncHandler 产生脏数据。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-26 15:29:29 +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
68b6f45d53
fix(ops): 修复 prod 环境 alarm-system 签名校验失败
...
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
prod profile 启动时 application-prod.yaml 为空,主 application.yaml
缺少 viewsh.signature.apps.alarm-system 配置,导致告警系统调用
SecurityOrderOpenController.createOrder 时报错:
[appId(alarm-system)] 找不到对应的 appSecret
将签名配置添加到主 application.yaml 作为所有环境的兜底。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-25 16:48:09 +08:00
5c868c8003
chore(ops): 更新 vsp-notify 地址为 172.17.16.14
...
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
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-25 15:46:53 +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
9115e03878
feat(ops): 新增通用人员调度状态服务 UserDispatchStatusService
...
基于 Redis Hash 维护人员维度的调度状态,供安保/工程/客服业务线共用。
与保洁的 BadgeDeviceStatusService(设备维度)并行。
核心设计:
- Redis Key: ops:user:dispatch:{userId},存储 status/activeOrderCount/waitingTaskCount 等
- 所有写操作使用 Lua 脚本原子执行,保证多业务线并发安全
- 事件监听器 @EventListener(事务内同步)自动排除 CLEAN 类型
- Redis 丢数据时降级为 IDLE,下一次事件自动重建(自愈)
新增文件:
- UserDispatchStatusDTO (ops-api)
- UserDispatchStatusService 接口 (ops-biz)
- UserDispatchStatusServiceImpl - Lua 脚本实现 (ops-biz)
- UserDispatchStatusEventListener - 通用事件监听 (ops-biz)
- UserAssigneeStatusAdapter - AssigneeStatus 适配器 (ops-biz)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-25 15:44:42 +08:00
53f51e7336
feat(security): 安保扩展表新增 assigned_user_phone 字段及迁移脚本
...
建表 SQL 补充 camera_name 和 assigned_user_phone 列;
新增增量迁移脚本 ops_order_security_ext_migrate_v1.2.sql。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-25 14:27:04 +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
718d14e162
feat(ops): 派单链路全程传递 assigneeName 和 assigneePhone
...
AssigneeRecommendation、OrderDispatchContext、OrderTransitionRequest
新增 assigneePhone 字段;DispatchEngineImpl 在三条派单路径中传递
phone;EventPublishHandler 将 assigneeName 和 assigneePhone 写入
事件 payload,修复下游监听器取不到 assigneeName 的问题。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-25 14:26:40 +08:00
4c48f72c66
feat(security): 安保人员列表接口补充昵称和手机号
...
区域安保人员查询接口批量关联 AdminUserApi,
在响应中填充 nickname 和 mobile 字段
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-25 11:31:09 +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
55c6b0ea1c
feat(ops): 注册 SocialUserApi 并添加 vsp-notify 配置
...
- RpcConfiguration 新增 SocialUserApi Feign 客户端注册
- application.yaml 新增 viewsh.ops.vsp-notify 配置段
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-25 11:29:36 +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
40e46d3650
fix(ci): Maven 版本改为 3.9.14 — 阿里云镜像无 3.9.9
...
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
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-23 11:29:19 +08:00
5dabc4762b
fix(ci): 回退 BuildKit — Jenkins Docker 未安装 buildx,去掉无效参数
...
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
Jenkins 服务器 Docker 缺少 buildx 组件,DOCKER_BUILDKIT=1 导致构建报错。
回退为 legacy builder,同时移除无效的 BUILDKIT_INLINE_CACHE 参数。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-23 11:26:25 +08:00
4223c6b8da
fix(ci): Docker 构建优化 — 修复 Maven 安装超时、启用 BuildKit、优化层缓存
...
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
- Dockerfile.deps/template: 改用阿里云镜像手动安装 Maven,避免 apk maven
拉入冗余 openjdk25(600MB+)导致构建超时
- Jenkinsfile: 添加 DOCKER_BUILDKIT=1,使层缓存真正生效
- Dockerfile.deps: framework/dependencies 源码在 COPY . . 前单独复制并预编译,
提升缓存命中率;mvn install 去掉 || true,编译失败立即报错
- .dockerignore: 补充 .git/、docs/、sql/、scripts/ 等目录,构建上下文从
60MB 降至 ~5MB
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-23 11:23:44 +08:00
f393d242b7
merge: feature/cleaning-inspection 巡检模块完整功能合入 master
...
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
包含:
- 巡检模板 CRUD 及动态表单接口
- 巡检结果提交、记录分页、详情、统计接口
- 蓝牙位置校验前移至前端(信标配置下发)
- 巡检不合格自动创建整改工单(去重+优先级升级)
- iBeacon 三元组匹配(IoT 层)
- OssPresign 支持 List<String> 预签名
- 补齐 system_menu 巡检和安保权限记录
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-22 20:11:27 +08:00
a7b98e0e5f
feat(ops): 补齐巡检和安保模块的 system_menu 权限记录
...
新增 13 条权限菜单(5088-5100),对齐代码中 @PreAuthorize 声明:
- 巡检记录:ops:inspection:query/create(父:保洁巡检 5087)
- 巡检模板:ops:inspection-template:query/create/update/delete(父:巡检项配置 5085)
- 安保工单:ops:security-order:create/confirm/complete(父:工单中心 5043)
- 安保人员:ops:security-area-user:query/create/update/delete(父:安保配置 5084)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-22 20:08:55 +08:00
d3645e1a2f
chore: .gitignore 添加 .gstack/ 目录
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-22 15:00:44 +08:00
47c768ec6f
feat(ops): 整改工单去重 — 已有活跃工单时升级优先级而非重复创建
...
- InspectionRectificationServiceImpl 先查区域活跃保洁工单:
排队中(PENDING/QUEUED)→升级一级优先级;已派发/已到达→静默跳过
- OpsOrderMapper 新增 selectActiveCleanOrder,使用枚举替代硬编码终态
- InspectionAsyncHandler 清理归属判定注释代码,替换为 TODO 标记
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-22 15:00:25 +08:00
f213510b03
refactor(ops): 巡检接口重构 — 位置校验前移、列表/详情分离、表单聚合
...
接口变更:
- 删除 POST /verify-location,位置校验改为前端本地蓝牙信标匹配
- 新增 GET /record/get 巡检记录详情(含明细项、照片)
- GET /list-by-area 升级为返回完整巡检表单(区域+检查项+信标配置)
- GET /record/page 返回类型改为 VO,新增区域全路径名称和巡检员姓名
- 提交和表单接口增加 inspector 角色校验
代码质量(Code Review 修复):
- 提取 buildAreaFullName 至 OpsBusAreaMapper 消除两个 Service 的重复
- 新增 buildAreaFullNameMap 批量方法,修复分页场景 N+1 查询
- getRecordDetail 中 adminUserApi 改用 getUserMap + try-catch 降级
- InspectionTemplateServiceImpl 去掉 ObjectMapper 依赖,直接 Map 取值
- RSSI 阈值取最宽松值逻辑添加语义注释
- 巡检错误码从 1-020-003 迁移至 1-020-004,修复与安保模块的码段冲突
- InspectionRecordDetailRespVO.photos 使用 @OssPresignUrl 自动预签名
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-22 15:00:07 +08:00
e11d3e1b6e
feat(framework): OssPresignResponseBodyAdvice 支持 List<String> 字段预签名
...
- @OssPresignUrl 注解现在同时适用于 String 和 List<String> 字段
- 回填时防御不可变 List,自动降级为 ArrayList
- FileServiceImpl 预签名访问 URL 去除查询参数,保持持久化路径干净
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-22 14:59:34 +08:00
b02059a08a
feat(iot): 信标检测支持 iBeacon 三元组匹配(uuid+major+minor)
...
BeaconPresenceConfig 新增 beaconUuid/major/minor 字段;
RssiSlidingWindowDetector.extractTargetRssi 优先 MAC 匹配,
降级为 iBeacon 三元组匹配,兼容两种设备上报格式。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-22 14:59:15 +08:00
41e9cb4d4e
feat(ops): 巡检表结构新增检查项描述、照片字段并补齐 AUTO_INCREMENT
...
- ops_inspection_template 新增 item_description 字段(合格标准说明)
- ops_inspection_record 新增 photos 字段 varchar(4096),存储巡检照片 URL
- 三张巡检表 id 补 AUTO_INCREMENT
- 包含建表语句和增量 ALTER 语句
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-22 14:58:55 +08:00
f9d0562a49
refactor(ops): OpsOrderController 参数统一为 @RequestBody VO
...
将 acceptOrder、completeOrder、pauseOrder、resumeOrder 四个接口
从 @RequestParam 改为 @RequestBody VO,与其他 POST 接口风格保持一致。
新增 OpsOrderAcceptReqVO、OpsOrderCompleteReqVO、OpsOrderPauseReqVO、
OpsOrderResumeReqVO 四个 Controller 层 VO 类。
注意:此变更为破坏性 API 变更,前端调用方需同步更新请求方式。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-19 09:45:39 +08:00
4a105da46e
refactor(ops): 提取巡检结果和归属判定枚举,替换硬编码常量
...
新增 InspectionResultEnum(合格/不合格)和 InspectionAttributionEnum
(个人责任/突发状况/正常),替换 InspectionRecordServiceImpl 和
InspectionAttributionServiceImpl 中的 private static final int 硬编码常量。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-19 09:43:37 +08:00
a4ab24b29c
refactor(ops): 迁移 environment-biz DTO 至 service 层 dto 包
...
将 6 个保洁业务 DTO 从 dal.dataobject 包迁移至对应 service 层:
- cleanorder/dto/: ManualCompleteOrderReqDTO, UpgradePriorityReqDTO,
CleanOrderAutoCreateReqDTO, CleanOrderPauseReqDTO, CleanOrderResumeReqDTO
- badge/dto/: BadgeNotifyReqDTO
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-19 09:33:27 +08:00
55e9003142
refactor(ops): 迁移 ops-biz 公共层 DTO 至 service/order/dto 包
...
将 11 个工单 DTO 从 dal.dataobject.dto 包迁移至 service.order.dto 包,
DTO 属于业务契约而非数据库实体,放在 service 层更符合分层规范。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-19 09:31:59 +08:00
c20a42f68a
feat(ops): 巡检记录新增快捷标签字段
...
巡检主记录和明细项新增 tags 字段(JSON 数组),支持巡检员在提交时
选择预设的快捷标签(如"地面污渍"、"垃圾未清理"),便于后续统计分析。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-19 09:22:25 +08:00
5ce1561437
Merge branch 'master' of http://124.222.218.198:3000/XW-AIOT/aiot-platform-cloud into feature/cleaning-inspection
2026-03-18 23:03:44 +08:00
01e9a556ab
Merge branch 'master' of http://124.222.218.198:3000/XW-AIOT/aiot-platform-cloud into feature/cleaning-inspection
2026-03-18 23:01:09 +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
e8a8baf62f
feat(ops): 状态机新增 forceTransition 强制跳转方法
...
适用于系统自动结单等场景,允许跳过转换规则直接跳转到终态,
但仍校验终态不可再转换,且完整记录事件流。
重构:抽取 doTransition 公共方法,transition 和 forceTransition
通过 validate 参数区分,消除重复代码。新增 TERMINAL_STATES
显式终态集合替代隐式空 Set 判断。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-18 22:25:17 +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
78aba0d1ed
refactor(system): 用户头像预签名改为 @OssPresignUrl 声明式处理
...
在 AuthPermissionInfoRespVO、OAuth2UserInfoRespVO、UserProfileRespVO、
UserRespVO 的 avatar 字段添加 @OssPresignUrl 注解,移除
AuthController、OAuth2UserController、UserController、
UserProfileController 中手动调用 fileApi.presignGetUrl 的代码,
Controller 回归薄层职责。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-18 15:06:43 +08:00
ff153dd1a9
refactor(infra): 文件列表接口接入 @OssPresignUrl 自动预签名
...
FileRespVO.url 字段添加 @OssPresignUrl 注解,移除 Controller 中
手动调用 presignGetUrl 的逻辑,由框架层 ResponseBodyAdvice 统一处理。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-18 15:06:23 +08:00
807d44e398
feat(infra): 批量预签名 API 及单体/微服务双模式自动配置
...
新增 FileApi.presignGetUrls 批量签名接口(@NotEmpty + @Size(max=500)),
FileServiceImpl 实现带 null 守卫。
自动配置设计:
- 单体模式:ViewshFileAutoConfiguration 直连 FileService
- 微服务模式:OssPresignUrlApiAutoConfiguration 通过 Feign 代理
- 通过 @ConditionalOnMissingBean 互斥,保证同一 JVM 只有一个实现
新增 OssPresignHelper 工具类,供 Handler 层处理动态 Map 字段
(如 extInfo 中的图片 URL),提供静默降级的单个/批量/JSON数组签名方法。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-18 15:06:05 +08:00
f3299bd655
feat(framework): 新增 @OssPresignUrl 注解与 ResponseBodyAdvice 自动预签名框架
...
基于 ResponseBodyAdvice 拦截 CommonResult 响应体,通过反射递归扫描
VO 中标注 @OssPresignUrl 的 String 字段,去重后批量调用
OssPresignUrlApi 一次性完成预签名,再回填到对应字段。
核心设计:
- supports() 阶段通过泛型静态分析判断 VO 是否含注解字段,
无注解的接口零开销跳过(类似字典翻译注解思路)
- 三级缓存:FIELD_CACHE / ALL_FIELDS_CACHE / HAS_PRESIGN_CACHE
- 递归深度限制 MAX_SCAN_DEPTH=10 防止 StackOverflow
- 仅扫描 com.viewsh.* 包,规避 Java 17 模块系统限制
- 异常静默降级,保留原始 URL
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-18 15:05:42 +08:00
f792ee1678
refactor(system): 社交绑定列表逻辑下沉至 Service 层
...
将 SocialUserBindMapper 从 Controller 移除,数据组装逻辑移至
SocialUserService.getSocialUserBindList(),返回绑定时间字段;
修复 avatar 误用 getNickname() 的 bug
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-17 18:04:37 +08:00
064ccdac89
feat(system): 管理后台微信小程序一键登录接口
...
新增 /system/auth/weixin-mini-app-login 端点,通过微信手机号授权
匹配管理员账号并自动绑定,含绑定冲突检测:
- 同一微信已绑定其他管理员 → 拒绝
- 同一管理员已绑定其他微信 → 拒绝
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-17 18:01:53 +08:00
cde78989f0
feat(ops): 工单详情安保图片 URL 预签名支持
...
- OrderCenterController.getDetail 对 extInfo 中 imageUrl/resultImgUrls 生成预签名地址
- RPC 异常时降级返回原始 URL,避免接口整体失败
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-17 17:44:51 +08:00
d123057d73
feat(system): 用户头像 URL 预签名支持
...
- AuthController 登录权限接口返回预签名头像
- UserController 用户列表及详情返回预签名头像
- UserProfileController 个人中心预签名头像,保存时剥离签名参数
- OAuth2UserController 用户信息接口返回预签名头像
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-17 17:44:41 +08:00
a567c62ae2
feat(infra): 文件列表及详情接口增加私有桶预签名
...
- FileController.getFilePage/getFile 对私有桶文件 URL 生成预签名访问地址
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-17 17:44:28 +08:00
6a9aa82bac
feat(infra): S3 私有桶预签名核心能力
...
- S3FileClient.buildDomain() 修复 COS virtual-hosted-style 域名生成
- S3FileClient.presignGetUrl() 支持跨桶签名及 endpoint 校验
- FileApi.presignGetUrl() 修复 Feign nullable 参数注解
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-17 17:44:21 +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
b530912fe2
Merge pull request 'feat(ops): 安保工单模块完整实现' ( #1 ) from feat/security-work-order into master
...
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
Reviewed-on: #1
2026-03-15 16:44:14 +08:00