DaxPay Dev
|
918437abc7
|
feat(menu): 工作台设为默认首页, 补充dashboard菜单编码占位与排序调整
- Dashboard 目录 redirect /analytics → /workspace
- 工作台(id=102) menu_code=dashboard:workspace, sort_no=1
- 分析页(id=101) menu_code=dashboard:analytics, sort_no=2
|
2026-06-27 22:22:43 +08:00 |
|
DaxPay Dev
|
da427ae44e
|
refactor(perm): 权限码体系重构, @PermCode 对齐菜单编码并改用下划线粗粒度命名
- menuCode 对齐 iam_perm_menu: 去除 payment:/starter: 旧前缀, 修正商户与通道商户撞码
- code 改用下划线粗粒度: 增删改统一为 manage, 特殊操作(publish/kickout/reset_password 等)独立保留
- 日志类 starter:log:* 改为 system:log:*; 字典/公告/安全配置等去除重复段
- 同一 menuCode 跨 Controller 的 nameCn/nameEn 统一, 避免权限码扫描同步冲突
- 新增 update-perm-codes.sql: 8 条菜单 menu_code 改名 + 清空 iam_perm_code 供扫描重建
|
2026-06-27 21:36:12 +08:00 |
|
DaxPay Dev
|
ca34c043a8
|
refactor(route): 清理通道路由死代码与冗余字段, 移除重付兼容分支
- RouteHit 精简为 (product, channelMchNo, capability), 删除 channel/method 等死字段
- PayRouteProductResolver 删除 resolve/resolveAndFill 等零调用死方法, 仅保留 productOfChannelMchNo
- 移除 inferSceneCapability 全链路(Controller/Facade/Service/Support)
- PayRouteStrategy 移除 provider 字段(改由支付方式解析)
- PayRouteSceneConfig 移除 provider/channel 冗余字段(由 method 派生), saveSceneBatch 改为从 method 派生 provider
- 移除 PayRouteService.resolve 兼容分支与 NormalPayService 重付复用分支
- update-tables.sql 同步清理 provider/channel 列
|
2026-06-27 11:29:02 +08:00 |
|
DaxPay Dev
|
64c1e7fb60
|
feat(develop): 支付调试页新增路由/传值模式切换, 传值模式由能力反推支付方式
- 调试页商户信息支持路由模式(商户+方式+应用动态匹配)与传值模式(通道商户+能力直接决定)切换
- 传值模式 capability 必填, method 由后端从(通道商户, 能力)反推回填, 下游透明
- ProductStrategySupport 新增 methodForCapability 反推; resolveDirect 重构去 inferCapability 派生
- 调试候选接口去 method 参数, 通道商户/能力候选不再依赖支付方式
|
2026-06-27 10:07:44 +08:00 |
|
DaxPay Dev
|
f092544c48
|
refactor(route): 通道路由场景模式重构为通道商户+支付能力定位
场景/基础模式配置以 channelMchNo 替代 product, 解决一商户多通道商户无法唯一定位; PayMethodEnum 加 provider 字段由支付方式直接解析, 移除从 product 反推; PayParam 新增 capability 支持路由回填与直定模式(指定 channelMchNo 跳过路由); 候选数据源改为商户实际开通的 ChannelMerchant, 修复原配置不考虑开通情况; 删除 dead code(PayRouteSceneRouteResolver/PayRouteCapabilityService) 并重建两表 DDL
|
2026-06-26 21:03:11 +08:00 |
|
DaxPay Dev
|
f09b8a4d6c
|
refactor(auth): 重构 capability-auth 与 service-iam 模块边界, 修复 i18n 不规范
- 认证 SPI: AbstractAuthentication → Authenticator 接口 + AuthenticationTemplate 编排
- 路由鉴权: 新增 AccessPolicy SPI, PasswordStatusCheck 改实现 AccessPolicy
- 认证挑战: 新增 PostAuthenticationChallenge SPI, 2FA 逻辑解耦到 TwoFactorAuthenticationChallenge
- 登录路由: adaptation 双键匹配(clientCode+loginType), 抽取 AbstractPasswordLoginHandler 消除重复
- 异常下沉: 6 个 IAM 业务异常从 capability-auth 移至 service-iam, 处理迁移到 IamAuthExceptionHandler
- 死代码清理: 删除 SecurityConfigService 及 3 个零引用异常
- i18n 修复: NotLoginException 双重前缀 / RouterCheckException+LoginRetryService 直传中文 / LoginFailureException 补 args 构造器
|
2026-06-26 19:03:59 +08:00 |
|
DaxPay Dev
|
d1c1b008d3
|
feat(device): 新增云打印设备管理, 镜像云音箱实现本地台账与绑定/解绑
|
2026-06-26 13:00:49 +08:00 |
|
DaxPay Dev
|
b8e7fa9567
|
fix(exception): SSE 场景返回无 body 响应, 避免 HttpMessageNotWritableException 二次异常
|
2026-06-26 10:18:01 +08:00 |
|
DaxPay Dev
|
36f1ec9b09
|
fix(mybatis): jsonb 类型处理器兼容空字符串, 避免写入报 invalid input syntax for type json
|
2026-06-26 09:15:57 +08:00 |
|
DaxPay Dev
|
c5a876de4a
|
chore(social): 移除 iam_social_config Flyway 迁移脚本
|
2026-06-25 23:07:46 +08:00 |
|
DaxPay Dev
|
fe27216386
|
refactor: ChannelConfigConvert 单例常量 INSTANCE → CONVERT 命名统一
与项目其他 MapStruct 转换器(DeviceSpeakerConvert/DeviceVendorConfigConvert)命名规范对齐
|
2026-06-25 23:07:46 +08:00 |
|
DaxPay Dev
|
f4bb434028
|
refactor(device): 设备实例类统一 Device 前缀, 新增厂商配置域与设备枚举, 术语统一云音箱
SpeakerDevice → DeviceSpeaker(entity/dao/param/result/convert/service/controller); 新增 device.vendor 域与 DeviceTypeEnum/DeviceVendorEnum; DeviceStatusEnum i18n key 解耦至 error.device.common; SQL 厂商配置提升设备管理顶层、清理 iot 残留、删除冗余厂商入口; 云音响 → 云音箱
|
2026-06-25 23:05:33 +08:00 |
|
DaxPay Dev
|
ceb7b76393
|
refactor(auth): 精简双因素认证配置, TOTP标准参数硬编码
固定 algorithm=SHA1 / digits=6 / period=30 / discrepancy=1 (RFC 6238 标准)
删除 algorithm/codeLength/timeStep/timeWindowOffset 可配置项
最终配置项仅保留: enabled / issuer / backupCodesCount
|
2026-06-25 23:01:23 +08:00 |
|
DaxPay Dev
|
4f9081d648
|
fix(auth): 修复双因素认证若干问题
- 预认证令牌改为先读取后删除, 允许验证码错误后重试
- 关闭/重置备用码支持备用码验证(TOTP不可用时不被锁死)
- lastVerifyTime 改用 OffsetDateTime, 走国际化时间格式化
- 修复 error.auth.* i18n 文件路径映射(auth.json 移至 error/ 下)
|
2026-06-25 22:43:34 +08:00 |
|
DaxPay Dev
|
d4c5d715b3
|
feat(auth): 新增双因素认证(TOTP绑定+备用恢复码+登录二次验证)
- TOTP: 基于 hutool 自研 RFC6238(零外部依赖), secret 用 AES-256-GCM 加密存储
- 备用恢复码: 8位字母数字, 仅存 SHA-256 哈希, 一次性展示强制确认
- 登录接入: 密码通过后抛 TwoFactorRequiredException(40101), Redis preAuthToken 5min, /token/second-verify 二次校验
- 绑定管理: status/setup/confirm/disable/regenerate-backup-codes
- i18n: zh-CN/en-US 双语
|
2026-06-25 21:57:18 +08:00 |
|
DaxPay Dev
|
2cb6533eaa
|
refactor(device): 云音响设备台账域从 iot 重命名为 device
|
2026-06-25 12:28:40 +08:00 |
|
DaxPay Dev
|
fe3e7ba396
|
fix(notify): SSE 改为单用户多连接, 修复多标签页互相顶替导致的重连死循环
|
2026-06-25 11:22:27 +08:00 |
|
DaxPay Dev
|
ef5a960142
|
chore: 同步数据库菜单/数据快照及杂项(i18n校验/social/pom清理)
|
2026-06-25 10:49:21 +08:00 |
|
DaxPay Dev
|
1c66bfed35
|
feat(iot): 新增云音响设备管理(建表/状态枚举/Controller/i18n)
|
2026-06-25 10:49:03 +08:00 |
|
DaxPay Dev
|
df2e2dceac
|
feat(merchant): 新增门店信息管理(建表/状态枚举/双Controller/i18n)
|
2026-06-25 10:47:15 +08:00 |
|
DaxPay Dev
|
e0124221da
|
fix(auth): 修复 SSE 异步连接 ASYNC 派发时 SaToken 上下文未初始化
SSE 端点(/notify/user/sse/connect)连接完成/超时/异常时, Servlet 容器做 ASYNC 重派发,
SaToken 上下文过滤器(OncePerRequestFilter, 仅 REQUEST 派发)不重新执行, 再次进入 SaInterceptor
抛 SaTokenContextException; 异常处理器对已锁定 text/event-stream 的响应写 JSON 又二次抛
HttpMessageNotWritableException.
- SaTokenConfigure: 包装 SaInterceptor, DispatcherType.ASYNC 时直接放行
- SaExceptionHandler: SaTokenException 命中 text/event-stream 时不写 body, 正常分支显式 JSON
|
2026-06-25 10:30:16 +08:00 |
|
DaxPay Dev
|
c3e6af56dc
|
feat(system): 新增用户协议版本管理(版本表/多语言/状态机)
|
2026-06-24 21:36:27 +08:00 |
|
DaxPay Dev
|
15ce168f45
|
fix(notify): 修复铃铛红点不消失(已忽略公告误计为未读)
unreadCount 的已读集合改用 findAllByUser(含已忽略), 与 list() 已读判定对齐, 避免已忽略公告被反复计为未读导致红点常亮
|
2026-06-24 18:48:14 +08:00 |
|
DaxPay Dev
|
4d619e4c28
|
feat(notify): 新增站内通知模块(公告管理 + 用户端铃铛 + SSE 实时推送)
- 新建 service-notify 模块: 公告广播(notify_notice)+已读表(notify_notice_read), 预留个人消息表(notify_message)
- 管理端: CRUD/发布/下线/详情/分页
- 用户端: 未读数/铃铛列表/标记已读/全部已读/忽略
- SSE 实时推送: 发布公告时推送给所有在线用户, 25s 心跳保活
- i18n(zh/en): 枚举与业务错误消息
- 菜单与权限码(system:notify:notice:add/publish/view)
|
2026-06-24 15:52:16 +08:00 |
|
DaxPay Dev
|
4a34a1a609
|
refactor(auth): 移除登录 remember 机制, 登录态统一为长效 cookie
|
2026-06-24 12:21:20 +08:00 |
|
DaxPay Dev
|
38a27c282a
|
feat(auth): 登录验证码与失败锁定配置生效, 修复密码失败计数不累加
|
2026-06-24 12:03:59 +08:00 |
|
DaxPay Dev
|
a53c6c227e
|
feat(payment): 支付调试参数新增通道商户号字段
|
2026-06-24 09:39:46 +08:00 |
|
DaxPay Dev
|
e1ad82aa43
|
refactor(payment): 删除旧版签名调试接口, 消除 DevelopSignController bean 冲突
|
2026-06-24 08:52:32 +08:00 |
|
DaxPay Dev
|
7f34c9db57
|
feat(payment): 新增开发调试接口与菜单
- 新增 develop 签名调试接口 /admin/develop/sign/{gen,verify}
- 新增 develop 支付调试接口 /admin/develop/trade/{sign,pay}
- 新增 DevelopParam/DevelopSignParam/DevelopVerifyParam 参数类
- 新增 DevelopSignResult/DevelopPayResult 结果类
- 新增 DevelopSignService/DevelopTradeService 服务
- iam_perm_menu 新增开发调试目录及支付/签名调试菜单
|
2026-06-23 23:49:32 +08:00 |
|
DaxPay Dev
|
e3fd2d65d7
|
chore(license): LICENSE 由 Apache 2.0 变更为 LGPL-3.0 并补充 pom licenses 声明
|
2026-06-23 22:28:10 +08:00 |
|
DaxPay Dev
|
659a03be27
|
refactor(payment): 常规支付服务 PayService 重命名为 NormalPayService
|
2026-06-23 21:29:59 +08:00 |
|
DaxPay Dev
|
e86c4b1e06
|
refactor(channel): 移除支付宝异步回调验签链路
删除 AlipayNotifyController/AlipayCallbackService/AlipayCallbackVerifyReq/Resp, AlipayChannelClient 去掉 callbackVerify 方法(仅保留 pay); AlipayDirectConfigAssembler 注释同步去掉回调引用。支付宝暂仅保留支付下单链路, 回调后续再补
|
2026-06-23 20:24:34 +08:00 |
|
DaxPay Dev
|
b74022878a
|
refactor(channel): 支付方式映射与配置组装下沉, 直连策略瘦身
mapMethod 由 AlipayDirectPayStrategy 移入 AlipayPayService; bizOrderNo 改用 order.getTradeNo() 透传(回调凭此反查 PayTrade); 直连配置组装委托 AlipayDirectConfigAssembler, AlipayDirectPayStrategy 不再直接持有 dao
|
2026-06-23 18:17:31 +08:00 |
|
DaxPay Dev
|
6a16af7b9b
|
refactor(demo): 移除通道连通性演示代码, 保留 artemis 消息队列演示
|
2026-06-23 18:08:45 +08:00 |
|
DaxPay Dev
|
27c08e6943
|
feat(channel): 接入支付宝异步回调验签链路并适配子应用专属入口
新增 AlipayNotifyController(/notify/alipay)接收支付宝异步通知, AlipayCallbackService 反查订单后委托子应用完成 RSA2 验签并填充回调上下文; AlipayChannelClient 新增 callbackVerify 方法直连子应用专属入口 /channel/alipay/callback/verify(配合子应用去除通用回调接口层), 并移除 Req 中冗余的 channel 字段; 复用 AlipayDirectConfigAssembler 组装验签所需的支付宝公钥等配置
仅提交回调链路相关文件, 其余既有未提交改动保留在工作区
|
2026-06-23 18:02:28 +08:00 |
|
DaxPay Dev
|
002688eeeb
|
feat(channel): 通道连通性 demo 链路, 含声明式通道客户端与 traceparent 透传
|
2026-06-23 13:56:27 +08:00 |
|
DaxPay Dev
|
ab70a099f6
|
docs(license): 新增 unibest 开源项目 License 并修正汇总标题笔误
|
2026-06-23 12:49:38 +08:00 |
|
DaxPay Dev
|
6e92703c8a
|
refactor(log): 重构 logback 配置, 分 profile 输出与磁盘/噪音治理
|
2026-06-23 11:42:55 +08:00 |
|
DaxPay Dev
|
78e993d5bb
|
feat(demo): 消息队列演示增加 traceId 贯穿展示
- DemoArtemisMessage 增加 producerTraceId 字段, 随消息体跨 MQ 传递
- DemoMessageResult 增加 producerTraceId/consumerTraceId/tracePropagated 字段
- Controller 发送时注入 MDC traceId 到消息体
- 3 个 Consumer 处理时读 MDC traceId 并与生产者对比
- 页面可直观看到 trace 是否贯穿(全程采样 1.0)
|
2026-06-23 10:09:55 +08:00 |
|
DaxPay Dev
|
253def06da
|
fix(artemis): 修复 Topic 消息链路追踪断裂
自定义的 topicJmsTemplate 和 topicListenerFactory 未注入 ObservationRegistry,
导致 Topic 消息不写入/提取 traceparent, trace 在 MQ 边界断裂(Queue/Delay 不受影响)。
修复后 Topic 场景 trace 与 Queue/Delay 一样贯穿, 同时修复业务侧缓存失效广播的 trace 断裂。
|
2026-06-23 10:09:54 +08:00 |
|
DaxPay Dev
|
596d2af830
|
feat(config): 拆分 dev/prod profile, 新增生产环境配置
- application.yml: 移除 management.endpoints/health 块下沉到各 profile; tracing sampling 默认 1.0
- application-dev.yml: 顶部新增 management 块(11 个排障端点 + show-details: always)
- application-prod.yml: 新建, Docker Compose 部署 + 凭证环境变量占位符 + 优雅停机 + liveness/readiness 探针分组
- channel: dev/prod 统一注释体系(one/two/three 编号规则与子应用分配), prod 用 \ 占位
- prod 安全收紧: 关闭 Swagger 与超管后门, actuator 仅 health/info/metrics, ignore-urls 移除 /**
|
2026-06-23 08:48:22 +08:00 |
|
DaxPay Dev
|
2bd199ecaa
|
fix(tracing): 关闭 OTLP 导出并修正 Spring Boot 4.1 失效属性键
- management.tracing.export.otlp.enabled: false (4.1 标准键,原 management.opentelemetry.tracing.export.otlp.enabled 从未存在)
- management.otlp.metrics.export.enabled: false (4.1 起前缀由 management.metrics.export.otlp.* 改为 management.otlp.metrics.export.*)
- 消除 otlp-metrics-publisher 周期性 ConnectException WARN
|
2026-06-22 21:25:17 +08:00 |
|
DaxPay Dev
|
8c3811eefa
|
refactor(build): 引入 daxpay-parent 统一版本与 compiler 治理
- 根 pom 继承 SB parent,集中所有版本属性与 maven-compiler-plugin 配置
- 6 个一级模块改为继承根 pom,删除重复的 properties 与 compiler 声明
- 清理冗余 wxjava/alipay 属性(daxpay-payment/daxpay-plugin/capability-wechat)
- mapstruct.version 声明处 6→1,maven-compiler-plugin 声明处 7→1,java.version 声明处 7→1
|
2026-06-22 21:14:38 +08:00 |
|
DaxPay Dev
|
be14689803
|
chore(upgrade): 升级 Spring Boot 4.0.6 → 4.1.0 及依赖版本治理
- Spring Boot parent 4.0.6 → 4.1.0 (6 pom)
- springdoc 3.0.2 → 3.0.3, aws-sdk 2.42.36 → 2.46.15, caffeine 3.2.3 → 3.2.4, ip2region 3.3.6 → 3.3.7
- 移除已停更的 lombok-mapstruct-binding (A方案验证通过)
- 构建命令 -DskipTests → -Dmaven.test.skip=true (适配 SB 4.1 AOT 变化)
|
2026-06-22 21:05:45 +08:00 |
|
DaxPay Dev
|
f0359ead55
|
feat: 引入 OpenTelemetry 实现主子应用全链路追踪
- daxpay-start 引入 actuator + opentelemetry 依赖
- application.yml 新增 tracing 配置(OTLP 关闭, 全采样), 修正 management 配置位置
- TraceIdFilter 简化为读取 MDC(OTel 注入) 并写入 ThreadLocal + 响应头
- RestClientConfiguration 改用注入 RestClient.Builder, 新增业务上下文透传拦截器
- logback pattern 补充 spanId
|
2026-06-22 18:14:26 +08:00 |
|
DaxPay Dev
|
675b2fd19e
|
feat: 用户管理新增三方账号绑定查看与解绑
- 新增 UserSocialController, 归属用户管理域(/user/admin/social)
- 直接注入 IamUserSocialBindStore, 与登录绑定流程完全分离
- SocialAuthMode 移至 enums 包, 清理废弃方法
- 社交登录记录登录日志(loginType=平台编码)
|
2026-06-22 17:09:10 +08:00 |
|
DaxPay Dev
|
354fcc932c
|
feat: 三方社交登录记录登录日志
- IamSocialLoginHandler 注入 LoginSuccessHandler, 登录成功后触发处理器链
- 构建 AuthInfoResult, loginType 使用平台编码(如 gitee/feishu)
- SocialLoginService 传递 source 参数
|
2026-06-22 16:40:05 +08:00 |
|
DaxPay Dev
|
41ef4c423e
|
refactor: 社交登录/绑定回调分离, 移除 Redis 状态缓存
- SocialLoginService 拆分为 exchangeForLogin/exchangeForBind, 提取 doExchange 公共逻辑
- SocialEndpoint: exchange-login(公开) 和 exchange-bind(需登录) 独立端点
- SocialConfigService.buildAuthConfig 接受完整 redirectUri 参数
- 移除 RedisSocialStateCache 和 SocialAuthContext (state 不再携带业务上下文)
|
2026-06-22 14:20:16 +08:00 |
|
DaxPay Dev
|
5dcf106518
|
feat: 个人设置后端支持与接口修复
- UserBaseInfoResult/Param 新增 email/phone 字段及校验
- UserInfoService 新增邮箱/手机号唯一性校验
- 新建 UpdatePasswordParam, updatePassword 改为 @RequestBody 接收
- PasswordStatusCheck 路由白名单 camelCase 改为 kebab-case
- 修复 zh-CN validation.json 结构错误(多余逗号导致 field 对象提前闭合)
- 补全 12 个缺失的 validation i18n key (zh-CN + en-US)
|
2026-06-22 11:46:42 +08:00 |
|
DaxPay Dev
|
6264bab4bc
|
refactor: SocialEndpoint 瘦控制器化, 编排逻辑下沉至 SocialLoginService
|
2026-06-21 22:20:01 +08:00 |
|