Commit Graph

55 Commits

Author SHA1 Message Date
DaxPay Dev
2b2d030165 refactor(pay): 业务单 orderNo 与资金 tradeNo 分离,收敛订单容器边界
- 独立生成 ORD/PAY 号,默认上送 orderNo,relationOrderNo 落 trade 作反查权威

- payBody 仅落容器,trade 去掉 payBody/expiredTime

- 容器新增 failed 态,失败与关单/超时区分;对外与管理端同时暴露双号
2026-07-14 18:47:27 +08:00
DaxPay Dev
43d8cb293d feat(pay): 付款码前缀识别、退款预占结算与订单入账/通道AppId
移除 aggregate_pay_barcode,按 authCode 前缀映射分钱包 method;退款引入预占与失败回滚并支持网关单;订单增加 posted_amount/channel_app_id,opAppId 统一为 channelAppId。
2026-07-14 18:38:51 +08:00
DaxPay Dev
db58674ab7 feat(notify): 站内通知表结构与 admin 模块依赖
补充 notify 相关升级 DDL,payment-admin 引入 service-notify 以支撑运营端铃铛/SSE。
2026-07-14 12:52:12 +08:00
DaxPay Dev
a243a510aa refactor(i18n): 全面 i18n 改造——删除 nameCn/nameEn/titleCn/titleEn 双列存储,统一为 i18nKey + 语言包翻译
后端:
- 删除菜单/字典/字典项/角色/权限码实体的 nameCn/nameEn/titleCn/titleEn 字段
- 新增 i18nKey 字段(菜单已有,字典/角色/权限码新增)
- 权限码 i18nKey 由 PermCodeScanService 自动推导: perm.{code}
- DictItemData record 简化为仅 i18nKey
- TransService 删除 resolveLocaleAwareField 双语 fallback 逻辑
- PermCode 注解删除 nameCn/nameEn,PermCodes 常量类删除 *_NAME_CN/EN
- 角色删除 existsByNameCn/En 方法和端点

SQL:
- update-tables.sql: 加 i18n_key 列(system_dict/system_dict_item/iam_role)+ DROP 旧列
- update-datas.sql: 批量回填 i18n_key(role.{code} / dict.{dictCode}.{itemCode})
- iam_perm_menu.sql: 删除 title_cn/title_en 列定义和 INSERT 数据
2026-07-14 10:48:26 +08:00
DaxPay Dev
f021a5d002 ref 支付交易相关内容调整 2026-07-12 15:48:51 +08:00
DaxPay Dev
25e4b4167f feat(gateway): 新增应用级收银台配置(H5 按场景 / WEB 扁平)
支持收银台支付项 CRUD、method/direct 解析模式、browser 场景与相关 i18n/DDL。
2026-07-11 15:56:56 +08:00
DaxPay Dev
ddbc3e959d fix(sql): 同步移动端应用菜单导出并补齐 app_name 删除
更新 iam_perm_menu 导出快照;在 update-tables 中补 DROP app_name,与平台移动端应用表结构对齐。
2026-07-11 10:57:04 +08:00
DaxPay Dev
cd2ad57891 fix(sql): 平台移动端应用表去掉 app_name 列
与 MobileApp 实体字段对齐。
2026-07-11 10:21:42 +08:00
DaxPay Dev
1516c46924 feat(payment): 聚合扫码配置三级深度与场景子表
支持 AUTO/METHOD/DIRECT 配置深度, 场景子表与路由解析; 同步菜单与 i18n。
2026-07-11 10:21:14 +08:00
DaxPay Dev
c9c9ffb614 refactor(payment): 开源版移除云音箱/云打印/厂商等硬件对接
硬件对接归商业版; 保留码牌收款能力。同步清理菜单种子与 i18n。
2026-07-11 10:15:50 +08:00
DaxPay Dev
f8bc2e204a refactor(payment): 移除 PayBizContainer 过度抽象, 路由参数冗余至 PayTrade
- PayTrade 新增 channelMchNo/capability/bizOrderNo/clientIp 四个冗余字段
- 删除 PayBizContainer 接口, NormalPayOrder/GatewayPayOrder 去掉 implements
- PayStrategyContext 删除 container 字段, 策略直接从 trade 读路由参数
- PaySyncService/PayCloseService/PayCallbackService 删除 loadContainer, 免查容器
- 30 个通道 Sync/Close 策略统一改写(消除 null 检查)
- AlipayCallbackService 回调凭证从 trade 读, 省掉 NormalPayOrder 查询
2026-07-11 09:18:50 +08:00
DaxPay Dev
a1f8979edb refactor(channel): 移除通道应用认证配置中的授权回调地址字段
OAuth 回调由平台网关统一生成,不再由微信/支付宝/抖音应用级配置。
2026-07-10 17:05:39 +08:00
DaxPay Dev
6f0622fca8 feat(device): 运营端支付码牌管理(批量生成/绑定商户/商户名翻译)
支持空白码库存与划拨绑定,分页翻译商户名称;绑定默认走商户默认应用。
补齐码牌菜单落地、batch_no 升级 SQL 与中英校验/错误文案。
2026-07-10 16:50:47 +08:00
DaxPay Dev
d5af60142f feat(mobile): 移动端应用配置加密存储与敏感字段脱敏
完善平台级移动端应用配置: app_config/notify_config 改 DataEncryptTypeHandler 加密入库, 返回脱敏, 保存时敏感键空值保留原值; 补建 pay_platform_mobile_app 表。
2026-07-09 21:44:54 +08:00
DaxPay Dev
4be249dd39 feat(notify): 微信消息通知模板配置迁入系统平台配置
凭据走三方平台 wechat_mp_auth,模板存 system_platform_config(wechat_notify);
发送记录落 service-notify 分层包,能力层仅保留纯发送。
2026-07-09 17:31:49 +08:00
DaxPay Dev
c8840f4065 refactor(social): 三方登录配置 SocialConfig 重命名为 SocialLoginConfig
为避免与新增的「三方平台管理」命名冲突, 全量迁移社交登录配置体系:

- 类(entity/param/result/mapper/manager/convert/service/controller): SocialConfig* -> SocialLoginConfig*
- 表: iam_social_config -> iam_social_login_config (update-tables.sql)
- API 路由: /social/config -> /social/login-config; 权限码: iam:social:config -> iam:social:login-config
- 菜单 iam_perm_menu(id=900001): name/path/component/i18n_key 同步更新
- SocialLoginService 引用同步; justauth 的 SocialAuthConfig 保持不变(语义为运行时授权配置)
2026-07-09 13:12:16 +08:00
DaxPay Dev
b7a89ab912 feat(payment): 新增微信域名验证文件管理(网关响应MP_verify/JSON上传/平台全局视图/租户穿透/编辑弹窗) 2026-07-09 12:39:17 +08:00
DaxPay Dev
c2f2a85eb3 dev 数据库脚本文件清空 2026-07-08 21:21:24 +08:00
DaxPay Dev
f778e6b553 feat(channel): 新增斗拱/富友/河马付/乐刷/易宝通道模块 + 拉卡拉重构(去isv分层) + 通道密钥配置字段扩展与配套SQL/枚举/i18n 2026-07-08 17:11:14 +08:00
DaxPay Dev
1c689f04df feat(payment): 通道商户名称修改接口+商户号生成工具, 支付与退款客户端IP兜底, 支付宝扫码能力码统一为ALIPAY_QR 2026-07-06 15:30:50 +08:00
DaxPay Dev
e313c49f2e feat(channel): 通道元数据字典全量刷新+菜单治理+微信回调验签解析底座
- 新增 pay_md 通道元数据字典全量(能力/通道/产品映射)与增量刷新脚本
- iam_perm_menu 菜单全量快照: 标题/i18n_key 归一, 新增移动端应用管理/微信服务商子商户
- update-tables 新增拉卡拉(2表)+银联商务(2表)建表, 均含 COMMENT ON
- ProductEnum 新增10个第三方聚合通道枚举(汇付/斗拱/海科/富友/盛付通/银盛/快钱/杉德/易宝/jeepay)
- i18n product/validation 中英文同步
- 微信回调验签解析能力: 主应用通过声明式HTTP客户端转发子应用验签(支付/退款回调)
2026-07-05 23:54:57 +08:00
DaxPay Dev
f7cc89d35f feat(douyin): 直连支付核心链路对接(下单/关单/退款/同步/回调) + 凭证下发 + 5张配置表 2026-07-05 21:34:53 +08:00
DaxPay Dev
b07bb91892 feat(payment): 移动端应用管理(平台级)后端: 建表+实体链路+Controller+i18n+菜单
- 新建 pay_platform_mobile_app 表(单表+jsonb, 按端类型+移动平台维度唯一)
- 实体链路 cn.daxpay.open.payment.app.mobile: MobileApp(entity/param/result/convert/mapper/manager/service)
- 枚举: MobileAppTypeEnum(merchant/admin/cashier) + MobilePlatformEnum(wx_h5/wx_mini/alipay_mini/dy_mini/android/ios)
- 运营端 Controller /admin/mobile-app: list/list-by-app-type/get/save/update-enabled, @PermCode(payment:config:mobile_app)
- i18n: error/mobile_app + enum/mobile_app_type + enum/mobile_platform (zh-CN/en-US)
- 权限菜单 iam_perm_menu: 卡片页(40504) + 详情页(40505), 父级=支付配置(405)
2026-07-05 12:36:11 +08:00
DaxPay Dev
3ce790ab99 feat(wechat): 微信服务商子商户应用功能 + 授权配置基类修复
- 新增微信服务商通道商户应用(WechatIsvMchApp)子商户自己的微信应用管理,
  含应用/能力绑定/授权配置三表及配套 controller/service/dao/convert/param/result
- 修复 WechatIsvAppAuthConfig 基类错误(MchBaseEntity→MpBaseEntity):
  服务商应用为平台级全局配置, 不挂商户维度, 移除冗余的 mchNo/channelMchNo 字段,
  修复 channel_mch_no / mch_no 列不存在的运行时异常
- 支付宝支付异步通知地址改用平台端点配置(backendBaseUrl)生成
- 微信直连凭证组装从通道商户绑定表取真实 wxMchId(channelMchNo 为系统雪花号)
- 支付方式枚举与 i18n 文案统一精简(去掉冗余'支付'后缀, 统一大小写)
- 校验消息 key 修正(wechatIsvAppId / wechatIsvMchAppId)
2026-07-05 11:00:11 +08:00
DaxPay Dev
9742e0fbfe feat(iam): 用户工作台快捷入口偏好(显隐+排序) + 建表 2026-07-04 17:02:46 +08:00
DaxPay Dev
05bbd58e92 refactor(payment): 清理 old 包,订单查询迁移至 core NormalPayOrder
- 删除整个 old 包死代码(notice/record/event/exception/旧版主流程 service 共67个文件)

- ChannelAuthService/ChannelBasicService 平移至 core/assist/

- UniQueryController/MiniMchOrderQuery 订单查询切到 core NormalPayOrder+PayTrade 双表

- NormalPayOrderManager 新增 findByBizOrderNo

- 新建 web/unipay 对外查询 convert+service

- 清空 update-tables.sql 升级脚本
2026-07-03 18:31:56 +08:00
DaxPay Dev
49d160b29e feat(payment): P0 alipay退款全链路 + 清理old包PayCloseRecord冲突
退款(channel-one → 主应用 → 策略 → 订单管理 → SQL):
- channel-one: alipay refund/refund-sync 端点 + DTO + service
- AlipayChannelClient 加 refund/refundSync, direct/isv 退款策略
- PayRefundOrder 实体 + Mapper/Manager/Convert/Result/Query
- PayRefundService(锁/校验/创建/调策略/回写) + PayRefundSyncService
- PayRefundOrderAdminController(/admin/order/refund)
- AbsRefundStrategy + AbsSyncRefundStrategy 抽象策略
- RefundOrderStatusEnum + i18n(zh/en)
- SQL: pay_refund_order 建表 + 退款菜单(payment:refund)

清理 old(修复 ConflictingBeanDefinitionException):
- 删除 old PayCloseRecord 链(8文件), core 版为唯一实现
- 删除 old PayCloseService/PaySyncService/PayOrderService/PaySyncResultBo
2026-07-03 12:24:07 +08:00
DaxPay Dev
4bb5efdc71 feat(channel): 微信/抖音直连商户应用支付能力绑定
- 微信直连(商户级)+服务商(全局级)能力绑定: entity/dao/convert/param/result/service/controller 全套

- 抖音直连(商户级)能力绑定: 同上(抖音仅直连模式)

- resolveApp: 显式配置 > appType推导 > 通道商户首个兜底

- 微信直连应用补全 appType 字段+枚举, 应用删除级联清理关联

- SQL: wechat_isv/wechat_direct/douyin_direct_app_capability 三表

- i18n: error/enum 中英文同步
2026-07-02 03:55:59 +08:00
DaxPay Dev
b28de59032 feat(alipay): 实现支付同步接口, 完整调用链路接入平台同步基础设施
- SQL: pay_normal_order 新增 channel_mch_no / capability 字段(同步时凭证解析)
- NormalPayOrder 实体加对应字段, PayAssistService 写入路由参数
- 主应用: AlipayDirectSyncStrategy extends AbsSyncPayOrderStrategy
- 主应用: AlipaySyncService 映射 trade_status → PayFundStatusEnum
- 主应用: AlipayChannelClient 加 sync() 方法
- 子应用: Controller 加 /sync 端点, Service 加 sync()(alipay.trade.query)
- 与商业版一致的同步状态映射: TRADE_NOT_EXIST→PROCESSING,
  TRADE_CLOSED+有付款时间→SUCCESS(全额退款), TRADE_CLOSED→CLOSE
2026-07-01 19:09:29 +08:00
DaxPay Dev
676012c5fb perm 异常处理优化 2026-07-01 10:22:05 +08:00
DaxPay Dev
43652bdc99 feat(alipay): 直连商户支付能力应用绑定 + 消除.last(limit 1)硬编码方言
- 新增 alipay_direct_app_capability 表与全套 CRUD(entity/mapper/manager/service/controller)
- AlipayDirectConfigAssembler 改为三级解析: 显式配置 > appType推导 > 兜底首个
- AlipayDirectPayStrategy 透传 channelMchNo + capability
- AlipayDirectAppService.delete 级联清理关联表
- BaseManager 新增 firstOpt(Consumer), 基于分页插件方言无关取首条
- DaxLambdaQueryChainWrapper 恢复原样(仅 one() 重写)
- MpInterceptorConfiguration 分页插件改为无参构造(自动检测方言)
- 5个Manager的.last(limit 1)改为firstOpt, UserPasswordHistoryManager改为selectPage
- 补充 zh-CN/en-US i18n(error/channel/alipay, validation)
2026-06-29 18:52:16 +08:00
DaxPay Dev
68684bde2e refactor(route): 删除冗余字段enable/name与废弃i18n, 优化能力候选批量接口
PayRouteStrategy 删除开源版不需要的 enable/name 字段(实体/param/result/convert/创建逻辑/运行时isEnable检查); 删除 strategyDisabled 及 18 个历次重构遗留废弃 i18n key; routeProductSupportsMethod 2参版降 private; listSceneCapabilityCandidatesBatch 预加载优化(删 mchNo 无用参数, 循环内零查库); PayRouteStrategyConvert 删重复 import; update-tables.sql 追加 DROP COLUMN。
2026-06-28 17:51:44 +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
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
d1c1b008d3 feat(device): 新增云打印设备管理, 镜像云音箱实现本地台账与绑定/解绑 2026-06-26 13:00:49 +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
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
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
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
c4c115052d refactor: 社交登录架构重构与端点配置功能
- capability-social 业务层(config/endpoint/cache/bind/login)迁移至 service-iam
- SPI 接口(SocialBindStore/SocialLoginHandler)合并到实现类, capability-social 精简为纯协议层
- service-system 配置模块拆分为 Oss/Security/Url 三个独立子模块
- 社交登录回调地址改由端点配置自动生成, 移除 redirectUri 手动配置
- 修复 exchange 阶段 redirect_uri 与 authorize 阶段不一致问题
2026-06-21 21:44:05 +08:00
DaxPay Dev
34da37061e feat: 第三方社交登录全栈实现
- 新建 capability-social 模块,实现 OAuth2 授权码模式社交登录
- 支持 GitHub / Gitee / QQ / 微信 / 企业微信 / 飞书 / 钉钉 / 抖音 8 个平台
- 前端回调模式:第三方 → 前端 /auth/oauth-callback → POST /social/exchange
- state 缓存至 Redis,exchange 时校验并恢复上下文
- 社交配置管理页面(卡片列表 + 抽屉表单)
- 用户社交绑定管理(个人中心绑定列表 / 解绑)
- 枚举国际化 SocialSourceEnum 实现 I18nSupport
- IamUserSocial 实体 + i18n 错误码 + SQL 迁移
- 清理死代码:scopes / frontendCallbackUrl / name / stateTimeout
2026-06-21 17:58:59 +08:00
DaxPay Dev
1e0be25105 refactor: 支付渠道/产品启停功能 + 表重命名 + 描述字段
- 表重命名: pay_* → pay_md_* (8张主数据表)
- 启停功能: PayProvider/PayProduct 增加 enabled 字段及 switch 接口
- PayProductConfig 移除 enabled 字段
- PayProvider 增加 description 字段
- SQL: update-tables.sql 完整迁移脚本
2026-06-17 18:54:14 +08:00
DaxPay Dev
da3749a09a feat: 支付产品配置增加 enabled 启停开关字段 2026-06-17 13:50:22 +08:00
DaxPay Dev
a7e42d421c feat: PayParam 新增订单商品明细列表(goodsDetail) 2026-06-16 23:02:09 +08:00
DaxPay Dev
36bb88f1c8 清理: 删除抖音表SQL, 清空菜单和更新SQL文件 2026-06-16 11:22:40 +08:00
DaxPay Dev
ccb9b611a1 feat: 抖音直连商户认证配置后端新增 appSecret 字段
- 实体/Param/Result 新增 appSecret 字段
- Result 字段标注 @SensitiveInfo 自动脱敏(保留前4后4)
- Service.save 通过 Convert IGNORE 策略处理 appSecret 更新
- update-tables.sql 新增 app_secret 列
2026-06-16 10:54:19 +08:00
DaxPay Dev
2a0441e3d2 feat: 抖音支付通道新增 entity/param/result/service/dao/controller 全套代码
- 新增抖音支付产品策略、直连支付策略
- Alipay 直连应用调整
- 新增抖音 SQL 建表脚本
2026-06-15 23:22:17 +08:00
DaxPay Dev
077c4024df chore: 国际化throw处统一添加模块前缀中文注释
- 统一所有 throw/orElseThrow 前注释风格为 // {模块}: {说明}
- 清理重复注释(PayService.java 重复行)
- 修复支付宝直连商户 appNotFound → mchAppNotFound
- 新增支付宝 i18n mchAppNotFound 翻译
- 更新 AGENTS.md 行内注释规则
2026-06-15 12:47:35 +08:00