diff --git a/README.md b/README.md
index f8fb90510..e338b9134 100644
--- a/README.md
+++ b/README.md
@@ -21,7 +21,7 @@
## 🍈项目介绍
> DaxPay是一套开源支付网关系统,已经对接支付宝、微信支付、云闪付相关的接口。可以独立部署,提供接口供业务系统进行调用,不对原有系统产生影响。
-> 同时与商业版使用同样的底层代码,可以方便的升级为商业版。
+> 同时与商业版使用同样的底层代码,保证统一接口尽量兼容,可以方便的升级为商业版。
## 🧭 特色功能
- 封装各类支付通道的接口为统一的接口,方便业务系统进行调用,简化对接多种支付方式的复杂度
@@ -53,7 +53,7 @@
### 开源版:
> 注:演示账号部分功能权限未开放。
-地址:https://single.web.daxpay.cn
+地址:https://admin.web.daxpay.cn
账号:daxpay
diff --git a/_config/postgresql/dax-pay.sql b/_config/postgresql/dax-pay.sql
index 27b36d74a..439fcfd1e 100644
--- a/_config/postgresql/dax-pay.sql
+++ b/_config/postgresql/dax-pay.sql
@@ -1,4 +1,5 @@
+
-- ----------------------------
-- Table structure for base_area
-- ----------------------------
@@ -629,14 +630,12 @@ INSERT INTO "public"."iam_perm_menu" VALUES (1822975425229004800, 18113656158154
INSERT INTO "public"."iam_perm_menu" VALUES (1813456708833087488, 1811365615815487488, '2024-07-17 14:12:26.440633', 1811365615815487488, '2024-09-20 11:05:46.469139', 4, 'f', 1812113823376666624, 'dax-pay-admin', '基础配置', '', '', 'f', 'f', 'Layout', '/pay/config/basic', '', -1, 'f', 't', 'f', 'f', NULL);
INSERT INTO "public"."iam_perm_menu" VALUES (1822975777026252800, 1811365615815487488, '2024-08-12 20:37:49.152472', 1811365615815487488, '2024-08-12 20:37:49.154031', 0, 'f', 1822975425229004800, 'dax-pay-admin', '存储平台', 'FilePlatformList', '', 'f', 'f', '/baseapi/file/platform/FilePlatformList', '/system/file/platform', '', 0, 'f', 't', 'f', 'f', NULL);
INSERT INTO "public"."iam_perm_menu" VALUES (1822975970266226688, 1811365615815487488, '2024-08-12 20:38:35.224183', 1811365615815487488, '2024-08-12 20:38:35.226288', 0, 'f', 1822975425229004800, 'dax-pay-admin', '文件管理', 'FileUploadList', '', 'f', 'f', '/baseapi/file/upload/FileUploadList', '/system/file/info', '', 0, 'f', 't', 'f', 'f', NULL);
-INSERT INTO "public"."iam_perm_menu" VALUES (1812114959231938560, 1811365615815487488, '2024-07-13 21:20:48.405236', 1811365615815487488, '2025-01-04 15:43:45.730211', 1, 'f', NULL, 'dax-pay-admin', '对账管理', 'Reconcile', 'ant-design:arrows-alt-outlined', 'f', 'f', 'Layout', '/pay/reconcile', '', 80, 't', 't', 'f', 'f', NULL);
-INSERT INTO "public"."iam_perm_menu" VALUES (1812114725651148800, 1811365615815487488, '2024-07-13 21:19:52.715548', 1811365615815487488, '2025-01-04 15:43:51.978676', 2, 'f', NULL, 'dax-pay-admin', '分账管理', 'Allocation', 'ant-design:sliders-twotone', 't', 'f', 'Layout', '/pay/allocation', '', 70, 't', 't', 'f', 'f', NULL);
-INSERT INTO "public"."iam_perm_menu" VALUES (1824779660136001536, 1811365615815487488, '2024-08-17 20:05:48.400494', 1811365615815487488, '2024-08-17 20:05:48.402062', 0, 'f', 1812114725651148800, 'dax-pay-admin', '分账接收者', '', '', 'f', 'f', '', '/pay/allocation', '', 0, 'f', 't', 'f', 'f', NULL);
-INSERT INTO "public"."iam_perm_menu" VALUES (1824779695900831744, 1811365615815487488, '2024-08-17 20:05:56.927619', 1811365615815487488, '2024-08-17 20:05:56.928667', 0, 'f', 1812114725651148800, 'dax-pay-admin', '分账组', '', '', 'f', 'f', '', '/pay/allocation', '', 0, 'f', 't', 'f', 'f', NULL);
INSERT INTO "public"."iam_perm_menu" VALUES (1828321321655308288, 1811365615815487488, '2024-08-27 14:39:06.307149', 1811365615815487488, '2024-08-27 14:39:06.309784', 0, 'f', NULL, 'dax-pay-merchant', '系统管理', 'System', 'ant-design:setting-outlined', 'f', 'f', 'Layout', '/system', '', 0, 't', 't', 'f', 'f', NULL);
INSERT INTO "public"."iam_perm_menu" VALUES (1828329559561965568, 1811365615815487488, '2024-08-27 15:11:50.377235', 1811365615815487488, '2024-08-27 15:11:50.378788', 0, 'f', NULL, 'dax-pay-merchant', '支付配置', 'PayConfig', 'ant-design:property-safety-twotone', 'f', 'f', 'Layout', '/pay/config', '', 0, 't', 't', 'f', 'f', NULL);
INSERT INTO "public"."iam_perm_menu" VALUES (1828329734523162624, 1811365615815487488, '2024-08-27 15:12:32.091286', 1811365615815487488, '2024-08-27 15:12:32.093374', 0, 'f', NULL, 'dax-pay-merchant', '订单管理', 'PayOrder', 'ant-design:wallet-outlined', 'f', 'f', 'Layout', '/pay/order', '', 0, 't', 't', 'f', 'f', NULL);
INSERT INTO "public"."iam_perm_menu" VALUES (1828329876961726464, 1811365615815487488, '2024-08-27 15:13:06.051401', 1811365615815487488, '2024-08-27 15:13:06.053461', 0, 'f', NULL, 'dax-pay-merchant', '交易记录', 'PayRecord', 'ant-design:container-outlined', 'f', 'f', 'Layout', '/pay/record', '', 0, 't', 't', 'f', 'f', NULL);
+INSERT INTO "public"."iam_perm_menu" VALUES (1824779660136001536, 1811365615815487488, '2024-08-17 20:05:48.400494', 1811365615815487488, '2025-05-07 08:54:32.042177', 0, 't', 1812114725651148800, 'dax-pay-admin', '分账接收者', '', '', 'f', 'f', '', '/pay/allocation', '', 0, 'f', 't', 'f', 'f', NULL);
+INSERT INTO "public"."iam_perm_menu" VALUES (1812114959231938560, 1811365615815487488, '2024-07-13 21:20:48.405236', 1811365615815487488, '2025-05-07 08:54:49.424734', 1, 't', NULL, 'dax-pay-admin', '对账管理', 'Reconcile', 'ant-design:arrows-alt-outlined', 'f', 'f', 'Layout', '/pay/reconcile', '', 80, 't', 't', 'f', 'f', NULL);
INSERT INTO "public"."iam_perm_menu" VALUES (1828330011066208256, 1811365615815487488, '2024-08-27 15:13:38.024196', 1811365615815487488, '2024-08-27 15:13:38.026907', 0, 'f', NULL, 'dax-pay-merchant', '商户通知', 'PayNotic', 'ant-design:notification-twotone', 'f', 'f', 'Layout', '/pay/notice', '', 0, 't', 't', 'f', 'f', NULL);
INSERT INTO "public"."iam_perm_menu" VALUES (1828341845420773376, 1811365615815487488, '2024-08-27 16:00:39.554398', 1811365615815487488, '2024-08-27 16:00:39.557168', 0, 'f', 1828321321655308288, 'dax-pay-merchant', '请求权限', 'PermPathList', '', 'f', 'f', 'iam/perm/path/PermPathList', '/system/path', '', 0, 'f', 't', 'f', 'f', NULL);
INSERT INTO "public"."iam_perm_menu" VALUES (1828329089900580864, 1811365615815487488, '2024-08-27 15:09:58.401939', 1811365615815487488, '2024-08-27 16:01:05.442085', 1, 'f', 1828321321655308288, 'dax-pay-merchant', '角色管理', 'RoleList', '', 'f', 'f', 'iam/role/RoleList.vue', '/system/role', '', 0, 'f', 't', 'f', 'f', NULL);
@@ -649,8 +648,6 @@ INSERT INTO "public"."iam_perm_menu" VALUES (1828345482972860416, 18113656158154
INSERT INTO "public"."iam_perm_menu" VALUES (1828345770836332544, 1811365615815487488, '2024-08-27 16:16:15.446234', 1811365615815487488, '2024-08-27 16:16:15.448516', 0, 'f', 1828343958704066560, 'dax-pay-merchant', '订阅通知', 'NotifyConstList', '', 'f', 'f', '/daxpay/common/constant/notify/NotifyConstList', '/pay/config/base/notify', '', 0, 'f', 't', 'f', 'f', NULL);
INSERT INTO "public"."iam_perm_menu" VALUES (1816064593371066368, 1811365615815487488, '2024-07-24 18:55:14.565671', 1811365615815487488, '2024-08-27 19:11:47.317719', 4, 'f', 1812114347454951424, 'dax-pay-admin', '关闭记录(支付)', 'PayCloseRecordList', '', 'f', 'f', '/daxpay/common/record/close/PayCloseRecordList', '/pay/record/close', '', 0, 'f', 't', 'f', 'f', NULL);
INSERT INTO "public"."iam_perm_menu" VALUES (1824779945365450752, 1811365615815487488, '2024-08-17 20:06:56.404481', 1811365615815487488, '2024-08-27 19:11:51.292144', 2, 'f', 1812114347454951424, 'dax-pay-admin', '同步记录', 'TradeSyncRecordList', '', 'f', 'f', '/daxpay/common/record/sync/TradeSyncRecordList', '/pay/record/sync', '', 0, 'f', 't', 'f', 'f', NULL);
-INSERT INTO "public"."iam_perm_menu" VALUES (1820468413097746432, 1811365615815487488, '2024-08-05 22:34:27.007057', 1811365615815487488, '2024-08-27 19:12:34.654805', 2, 'f', 1812114959231938560, 'dax-pay-admin', '差异记录', 'ReconcileDiscrepancyList', '', 'f', 'f', '/daxpay/common/reconcile/discrepancy/ReconcileDiscrepancyList', '/pay/reconcile/discrepancy', '', 0, 'f', 't', 'f', 'f', NULL);
-INSERT INTO "public"."iam_perm_menu" VALUES (1820467934552825856, 1811365615815487488, '2024-08-05 22:32:32.913035', 1811365615815487488, '2024-08-27 19:12:40.133331', 2, 'f', 1812114959231938560, 'dax-pay-admin', '对账单', 'ReconcileStatementList', '', 'f', 'f', '/daxpay/common/reconcile/statement/ReconcileStatementList', '/pay/reconcile/statement', '', 0, 'f', 't', 'f', 'f', NULL);
INSERT INTO "public"."iam_perm_menu" VALUES (1828391238714904576, 1811365615815487488, '2024-08-27 19:16:55.833768', 1811365615815487488, '2024-08-27 19:16:55.835858', 0, 'f', 1828329734523162624, 'dax-pay-merchant', '支付订单', 'PayOrderList', '', 'f', 'f', '/daxpay/common/order/pay/PayOrderList', '/pay/order/pay', '', 0, 'f', 't', 'f', 'f', NULL);
INSERT INTO "public"."iam_perm_menu" VALUES (1828391326023536640, 1811365615815487488, '2024-08-27 19:17:16.649616', 1811365615815487488, '2024-08-27 19:17:16.652853', 0, 'f', 1828329734523162624, 'dax-pay-merchant', '退款订单', 'RefundOrderList', '', 'f', 'f', '/daxpay/common/order/refund/RefundOrderList', '/pay/order/refund', '', 0, 'f', 't', 'f', 'f', NULL);
INSERT INTO "public"."iam_perm_menu" VALUES (1828391418604408832, 1811365615815487488, '2024-08-27 19:17:38.723375', 1811365615815487488, '2024-08-27 19:17:38.726373', 0, 'f', 1828329734523162624, 'dax-pay-merchant', '转账订单', 'TransferOrderList', '', 'f', 'f', '/daxpay/common/order/transfer/TransferOrderList', '/pay/order/transfer', '', 0, 'f', 't', 'f', 'f', NULL);
@@ -675,6 +672,8 @@ INSERT INTO "public"."iam_perm_menu" VALUES (1836248839544733696, 18113656158154
INSERT INTO "public"."iam_perm_menu" VALUES (1838832057238274048, 1811365615815487488, '2024-09-25 14:45:00.952476', 1811365615815487488, '2024-09-25 14:46:49.48474', 1, 'f', 1812115119471128576, 'dax-pay-admin', '认证调试', 'ChannelAuth', '', 'f', 'f', '/daxpay/common/develop/auth/ChannelAuth', '/pay/demo/channelAuth', '', 0, 'f', 't', 'f', 'f', NULL);
INSERT INTO "public"."iam_perm_menu" VALUES (1856162201900429312, 1811365615815487488, '2024-11-12 10:28:49.417797', 1811365615815487488, '2024-11-12 10:28:49.419797', 0, 'f', 1810910433264762880, 'dax-pay-admin', '行政区划', 'ChinaRegion', '', 'f', 'f', '/baseapi/region/ChinaRegion', '/system/config/region', '', 0, 'f', 't', 'f', 'f', NULL);
INSERT INTO "public"."iam_perm_menu" VALUES (1824779750208679936, 1811365615815487488, '2024-08-17 20:06:09.875297', 1811365615815487488, '2024-12-21 11:55:37.943795', 2, 'f', 1812114224679284736, 'dax-pay-admin', '分账单', 'AllocOrderList', '', 'f', 'f', '/daxpay/common/allocation/order/AllocOrderList', '/pay/order/allocation', '', 0, 'f', 't', 'f', 'f', NULL);
+INSERT INTO "public"."iam_perm_menu" VALUES (1820468413097746432, 1811365615815487488, '2024-08-05 22:34:27.007057', 1811365615815487488, '2025-05-07 08:54:40.919178', 2, 't', 1812114959231938560, 'dax-pay-admin', '差异记录', 'ReconcileDiscrepancyList', '', 'f', 'f', '/daxpay/common/reconcile/discrepancy/ReconcileDiscrepancyList', '/pay/reconcile/discrepancy', '', 0, 'f', 't', 'f', 'f', NULL);
+INSERT INTO "public"."iam_perm_menu" VALUES (1820467934552825856, 1811365615815487488, '2024-08-05 22:32:32.913035', 1811365615815487488, '2025-05-07 08:54:45.843714', 2, 't', 1812114959231938560, 'dax-pay-admin', '对账单', 'ReconcileStatementList', '', 'f', 'f', '/daxpay/common/reconcile/statement/ReconcileStatementList', '/pay/reconcile/statement', '', 0, 'f', 't', 'f', 'f', NULL);
INSERT INTO "public"."iam_perm_menu" VALUES (1812115119471128576, 1811365615815487488, '2024-07-13 21:21:26.609834', 1811365615815487488, '2025-01-04 15:43:37.546388', 4, 'f', NULL, 'dax-pay-admin', '演示模块', 'Demo', 'ant-design:appstore-twotone', 'f', 'f', 'Layout', '/pay/demo', '', 98, 't', 't', 'f', 'f', NULL);
INSERT INTO "public"."iam_perm_menu" VALUES (1883149346789183488, 1811365615815487488, '2025-01-25 21:46:06.154587', 1811365615815487488, '2025-01-25 21:46:06.154587', 0, 'f', 1883148939727785984, 'dax-pay-admin', '微信', '', '', 'f', 'f', 'Layout', '/pay/channel/wechat', '', 0, 'f', 't', 'f', 'f', NULL);
INSERT INTO "public"."iam_perm_menu" VALUES (1883149275196608512, 1811365615815487488, '2025-01-25 21:45:49.086541', 1811365615815487488, '2025-01-25 21:46:24.127782', 1, 'f', 1883148939727785984, 'dax-pay-admin', '支付宝', '', '', 'f', 'f', 'Layout', '/pay/channel/alipay', '', 0, 'f', 't', 'f', 'f', NULL);
@@ -685,7 +684,6 @@ INSERT INTO "public"."iam_perm_menu" VALUES (1812118635229016064, 18113656158154
INSERT INTO "public"."iam_perm_menu" VALUES (1883722667859677184, 1811365615815487488, '2025-01-27 11:44:16.551262', 1811365615815487488, '2025-02-17 20:40:18.405954', 1, 'f', 1883149275196608512, 'dax-pay-admin', '分账接收方管理', 'AlipayReceiverBindList', '', 'f', 'f', '/daxpay/common/channel/alipay/receiver/bind/AlipayReceiverBindList', '/pay/channel/alipay/alloc/receiver', '', 0, 'f', 't', 'f', 'f', NULL);
INSERT INTO "public"."iam_perm_menu" VALUES (1883149475705311232, 1811365615815487488, '2025-01-25 21:46:36.890326', 1811365615815487488, '2025-02-19 19:07:13.981572', 1, 'f', 1883148939727785984, 'dax-pay-admin', '云闪付', '', '', 't', 'f', 'Layout', '/pay/channel/union', '', 0, 'f', 't', 'f', 'f', NULL);
INSERT INTO "public"."iam_perm_menu" VALUES (1883722723325153280, 1811365615815487488, '2025-01-27 11:44:29.7731', 1811365615815487488, '2025-02-19 19:08:03.568342', 1, 'f', 1883149346789183488, 'dax-pay-admin', '分账接收方管理', 'WechatReceiverBindList', '', 'f', 'f', '/daxpay/common/channel/wechat/receiver/bind/WechatReceiverBindList', '/pay/channel/wechat/alloc/receiver', '', 0, 'f', 't', 'f', 'f', NULL);
-INSERT INTO "public"."iam_perm_menu" VALUES (1899771948020867072, 1811365615815487488, '2025-03-12 18:38:23.121945', 1811365615815487488, '2025-03-12 18:38:23.121945', 0, 'f', 1812116779807338496, 'dax-pay-admin', '终端报送类型', 'TerminalConstList', '', 'f', 'f', '/daxpay/common/constant/terminal/TerminalConstList', '/pay/config/base/terminal', '', 0, 'f', 't', 'f', 'f', NULL);
INSERT INTO "public"."iam_perm_menu" VALUES (1907420295485571072, 1811365615815487488, '2025-04-02 21:10:11.259186', 1811365615815487488, '2025-04-02 21:10:11.259186', 0, 'f', 1828392717093818368, 'dax-pay-merchant', '交易调试', 'DevelopTrade', '', 'f', 'f', '/daxpay/common/develop/trade/DevelopTrade', '/pay/demo/develop', '', 0, 'f', 't', 'f', 'f', NULL);
INSERT INTO "public"."iam_perm_menu" VALUES (1907421058936979456, 1811365615815487488, '2025-04-02 21:13:13.277956', 1811365615815487488, '2025-04-02 21:13:13.277956', 0, 'f', 1828392717093818368, 'dax-pay-merchant', '认证调试', 'ChannelAuth', '', 'f', 'f', '/daxpay/common/develop/auth/ChannelAuth', '/pay/demo/channelAuth', '', 0, 'f', 't', 'f', 'f', NULL);
INSERT INTO "public"."iam_perm_menu" VALUES (1911706396408745984, 1811365615815487488, '2025-04-14 17:01:37.348397', 1811365615815487488, '2025-04-14 17:01:37.348397', 0, 'f', 1828343958704066560, 'dax-pay-merchant', '终端报送类型', 'TerminalConstList', '', 'f', 'f', '/daxpay/common/constant/terminal/TerminalConstList', '/pay/config/base/terminal', '', 0, 'f', 't', 'f', 'f', NULL);
@@ -702,10 +700,14 @@ INSERT INTO "public"."iam_perm_menu" VALUES (1911720890363088896, 18113656158154
INSERT INTO "public"."iam_perm_menu" VALUES (1911720990229467136, 1811365615815487488, '2025-04-14 17:59:36.786069', 1811365615815487488, '2025-04-14 17:59:36.786069', 0, 'f', 1911714157901189120, 'dax-pay-merchant', '分账接收方管理', 'WechatReceiverBindList', '', 'f', 'f', '/daxpay/common/channel/wechat/receiver/bind/WechatReceiverBindList', '/pay/channel/wechat/alloc/receiver', '', 0, 'f', 't', 'f', 'f', NULL);
INSERT INTO "public"."iam_perm_menu" VALUES (1911721140293275648, 1811365615815487488, '2025-04-14 18:00:12.564897', 1811365615815487488, '2025-04-14 18:00:12.564897', 0, 'f', 1911714477968527360, 'dax-pay-merchant', '分账接收方管理', 'LeshuaReceiverBindList', '', 'f', 'f', '/daxpay/common/channel/leshua/receiver/bind/LeshuaReceiverBindList', '/pay/channel/leshua/alloc/receiver/bind', '', 0, 'f', 't', 'f', 'f', NULL);
INSERT INTO "public"."iam_perm_menu" VALUES (1911721245096349696, 1811365615815487488, '2025-04-14 18:00:37.551624', 1811365615815487488, '2025-04-14 18:00:37.551624', 0, 'f', 1911714643085692928, 'dax-pay-merchant', '分账接收方管理', '', '', 'f', 'f', '', '/pay/channel/vbill/alloc/receiver', '', 0, 'f', 't', 'f', 'f', NULL);
+INSERT INTO "public"."iam_perm_menu" VALUES (1899771948020867072, 1811365615815487488, '2025-03-12 18:38:23.121945', 1811365615815487488, '2025-05-07 14:39:35.226925', 0, 't', 1812116779807338496, 'dax-pay-admin', '终端报送类型', 'TerminalConstList', '', 'f', 'f', '/daxpay/common/constant/terminal/TerminalConstList', '/pay/config/base/terminal', '', 0, 'f', 't', 'f', 'f', NULL);
INSERT INTO "public"."iam_perm_menu" VALUES (1911721379628650496, 1811365615815487488, '2025-04-14 18:01:09.626762', 1811365615815487488, '2025-04-14 18:01:09.626762', 0, 'f', 1911714710303608832, 'dax-pay-merchant', '分账接收方(个人)', 'AdapayAllocPersonReceiverList', '', 'f', 'f', '/daxpay/common/channel/adapay/receiver/perso/AdapayAllocPersonReceiverList', '/pay/channel/adapay/alloc/receiver/person', '', 0, 'f', 't', 'f', 'f', NULL);
INSERT INTO "public"."iam_perm_menu" VALUES (1911721480505856000, 1811365615815487488, '2025-04-14 18:01:33.677943', 1811365615815487488, '2025-04-14 18:01:47.51821', 1, 'f', 1911714710303608832, 'dax-pay-merchant', '分账接收方(企业)', 'AdaPayAllocCorpReceiverList', '', 'f', 'f', '/daxpay/common/channel/adapay/receiver/corp/AdapayAllocCorpReceiverList', '/pay/channel/adapay/alloc/receiver/corp', '', 0, 'f', 't', 'f', 'f', NULL);
INSERT INTO "public"."iam_perm_menu" VALUES (1911721663163600896, 1811365615815487488, '2025-04-14 18:02:17.226079', 1811365615815487488, '2025-04-14 18:02:17.226079', 0, 'f', 1911714710303608832, 'dax-pay-merchant', '分账结算账户', 'AdapaySettleAccountList', '', 'f', 'f', '/daxpay/common/channel/adapay/settle/AdapaySettleAccountList', '/pay/channel/adapay/alloc/settle', '', 0, 'f', 't', 'f', 'f', NULL);
INSERT INTO "public"."iam_perm_menu" VALUES (1911708592894447616, 1811365615815487488, '2025-04-14 17:10:21.031024', 1811365615815487488, '2025-04-14 18:03:16.596981', 1, 'f', NULL, 'dax-pay-merchant', '支付通道', 'Channel', 'ant-design:transaction-outlined', 'f', 'f', 'Layout', '/pay/channel', '', 0, 't', 't', 'f', 'f', NULL);
+INSERT INTO "public"."iam_perm_menu" VALUES (1824779695900831744, 1811365615815487488, '2024-08-17 20:05:56.927619', 1811365615815487488, '2025-05-07 08:54:27.399456', 0, 't', 1812114725651148800, 'dax-pay-admin', '分账组', '', '', 'f', 'f', '', '/pay/allocation', '', 0, 'f', 't', 'f', 'f', NULL);
+INSERT INTO "public"."iam_perm_menu" VALUES (1812114725651148800, 1811365615815487488, '2024-07-13 21:19:52.715548', 1811365615815487488, '2025-05-07 08:54:36.157514', 2, 't', NULL, 'dax-pay-admin', '分账管理', 'Allocation', 'ant-design:sliders-twotone', 't', 'f', 'Layout', '/pay/allocation', '', 70, 't', 't', 'f', 'f', NULL);
+INSERT INTO "public"."iam_perm_menu" VALUES (1917045943678099456, 1811365615815487488, '2025-04-29 10:39:04.623467', 1811365615815487488, '2025-04-29 10:39:04.624466', 0, 'f', 1810910433264762880, 'dax-pay-admin', '缓存管理', 'CacheClear', '', 'f', 'f', '/baseapi/cache/CacheClear', '/system/config/cache', '', 0, 'f', 't', 'f', 'f', NULL);
-- ----------------------------
-- Table structure for iam_perm_path
@@ -1716,55 +1718,6 @@ COMMENT ON TABLE "public"."pay_channel_reconcile_trade" IS '通道对账交易
-- Records of pay_channel_reconcile_trade
-- ----------------------------
--- ----------------------------
--- Table structure for pay_channel_terminal
--- ----------------------------
-DROP TABLE IF EXISTS "public"."pay_channel_terminal";
-CREATE TABLE "public"."pay_channel_terminal" (
- "id" int8 NOT NULL,
- "creator" int8,
- "create_time" timestamp(6),
- "last_modifier" int8,
- "last_modified_time" timestamp(6),
- "version" int4 NOT NULL,
- "deleted" bool NOT NULL,
- "mch_no" varchar(32) COLLATE "pg_catalog"."default",
- "app_id" varchar(32) COLLATE "pg_catalog"."default",
- "name" varchar(64) COLLATE "pg_catalog"."default",
- "terminal_id" int8,
- "terminal_no" varchar(64) COLLATE "pg_catalog"."default",
- "channel" varchar(32) COLLATE "pg_catalog"."default",
- "status" varchar(32) COLLATE "pg_catalog"."default",
- "out_terminal_no" varchar(64) COLLATE "pg_catalog"."default",
- "error_msg" varchar(500) COLLATE "pg_catalog"."default",
- "extra" varchar(5000) COLLATE "pg_catalog"."default",
- "type" varchar(32) COLLATE "pg_catalog"."default"
-)
-;
-COMMENT ON COLUMN "public"."pay_channel_terminal"."id" IS '主键';
-COMMENT ON COLUMN "public"."pay_channel_terminal"."creator" IS '创建者ID';
-COMMENT ON COLUMN "public"."pay_channel_terminal"."create_time" IS '创建时间';
-COMMENT ON COLUMN "public"."pay_channel_terminal"."last_modifier" IS '最后修者ID';
-COMMENT ON COLUMN "public"."pay_channel_terminal"."last_modified_time" IS '最后修改时间';
-COMMENT ON COLUMN "public"."pay_channel_terminal"."version" IS '乐观锁';
-COMMENT ON COLUMN "public"."pay_channel_terminal"."deleted" IS '删除标志';
-COMMENT ON COLUMN "public"."pay_channel_terminal"."mch_no" IS '商户号';
-COMMENT ON COLUMN "public"."pay_channel_terminal"."app_id" IS '应用号';
-COMMENT ON COLUMN "public"."pay_channel_terminal"."name" IS '终端名称';
-COMMENT ON COLUMN "public"."pay_channel_terminal"."terminal_id" IS '终端ID';
-COMMENT ON COLUMN "public"."pay_channel_terminal"."terminal_no" IS '终端编码';
-COMMENT ON COLUMN "public"."pay_channel_terminal"."channel" IS '通道';
-COMMENT ON COLUMN "public"."pay_channel_terminal"."status" IS '状态';
-COMMENT ON COLUMN "public"."pay_channel_terminal"."out_terminal_no" IS '通道终端号';
-COMMENT ON COLUMN "public"."pay_channel_terminal"."error_msg" IS '错误信息';
-COMMENT ON COLUMN "public"."pay_channel_terminal"."extra" IS '扩展信息';
-COMMENT ON COLUMN "public"."pay_channel_terminal"."type" IS '报送类型';
-COMMENT ON TABLE "public"."pay_channel_terminal" IS '通道终端设备上报记录';
-
--- ----------------------------
--- Records of pay_channel_terminal
--- ----------------------------
-
-- ----------------------------
-- Table structure for pay_close_record
-- ----------------------------
@@ -2368,143 +2321,6 @@ COMMENT ON TABLE "public"."pay_platform_config" IS '管理平台配置';
-- ----------------------------
-- Records of pay_platform_config
-- ----------------------------
-INSERT INTO "public"."pay_platform_config" VALUES (1, 1811365615815487488, '2025-04-27 19:35:43.283482', 1811365615815487488, '2025-04-27 19:35:43.283482', 0, 'f', 'http://127.0.0.1:19999', NULL, 'http://127.0.0.1:9100', NULL, 200.00);
-
--- ----------------------------
--- Records of pay_platform_config
--- ----------------------------
-
--- ----------------------------
--- Table structure for pay_reconcile_discrepancy
--- ----------------------------
-DROP TABLE IF EXISTS "public"."pay_reconcile_discrepancy";
-CREATE TABLE "public"."pay_reconcile_discrepancy" (
- "id" int8 NOT NULL,
- "creator" int8,
- "create_time" timestamp(6),
- "mch_no" varchar(32) COLLATE "pg_catalog"."default",
- "app_id" varchar(32) COLLATE "pg_catalog"."default",
- "reconcile_id" int8,
- "reconcile_no" varchar(32) COLLATE "pg_catalog"."default",
- "reconcile_date" date,
- "channel" varchar(20) COLLATE "pg_catalog"."default",
- "discrepancy_type" varchar(20) COLLATE "pg_catalog"."default",
- "trade_no" varchar(32) COLLATE "pg_catalog"."default",
- "biz_trade_no" varchar(100) COLLATE "pg_catalog"."default",
- "trade_type" varchar(100) COLLATE "pg_catalog"."default",
- "trade_amount" numeric(13,2),
- "trade_status" varchar(32) COLLATE "pg_catalog"."default",
- "trade_time" timestamp(0),
- "channel_trade_no" varchar COLLATE "pg_catalog"."default",
- "channel_trade_type" varchar(32) COLLATE "pg_catalog"."default",
- "channel_trade_amount" numeric(13,2),
- "channel_trade_status" varchar(32) COLLATE "pg_catalog"."default",
- "channel_trade_time" timestamp(6),
- "out_trade_no" varchar(100) COLLATE "pg_catalog"."default",
- "channel_out_trade_no" varchar(100) COLLATE "pg_catalog"."default",
- "isv_no" varchar(64) COLLATE "pg_catalog"."default"
-)
-;
-COMMENT ON COLUMN "public"."pay_reconcile_discrepancy"."id" IS '主键';
-COMMENT ON COLUMN "public"."pay_reconcile_discrepancy"."creator" IS '创建者ID';
-COMMENT ON COLUMN "public"."pay_reconcile_discrepancy"."create_time" IS '创建时间';
-COMMENT ON COLUMN "public"."pay_reconcile_discrepancy"."mch_no" IS '商户号';
-COMMENT ON COLUMN "public"."pay_reconcile_discrepancy"."app_id" IS '应用号';
-COMMENT ON COLUMN "public"."pay_reconcile_discrepancy"."reconcile_id" IS '对账单ID';
-COMMENT ON COLUMN "public"."pay_reconcile_discrepancy"."reconcile_no" IS '对账号';
-COMMENT ON COLUMN "public"."pay_reconcile_discrepancy"."reconcile_date" IS '对账日期';
-COMMENT ON COLUMN "public"."pay_reconcile_discrepancy"."channel" IS '支付通道';
-COMMENT ON COLUMN "public"."pay_reconcile_discrepancy"."discrepancy_type" IS '差异类型';
-COMMENT ON COLUMN "public"."pay_reconcile_discrepancy"."trade_no" IS '平台交易号';
-COMMENT ON COLUMN "public"."pay_reconcile_discrepancy"."biz_trade_no" IS '商户订单号';
-COMMENT ON COLUMN "public"."pay_reconcile_discrepancy"."trade_type" IS '交易类型';
-COMMENT ON COLUMN "public"."pay_reconcile_discrepancy"."trade_amount" IS '交易金额';
-COMMENT ON COLUMN "public"."pay_reconcile_discrepancy"."trade_status" IS '交易状态';
-COMMENT ON COLUMN "public"."pay_reconcile_discrepancy"."trade_time" IS '交易时间';
-COMMENT ON COLUMN "public"."pay_reconcile_discrepancy"."channel_trade_no" IS '通道交易号';
-COMMENT ON COLUMN "public"."pay_reconcile_discrepancy"."channel_trade_type" IS '通道交易类型';
-COMMENT ON COLUMN "public"."pay_reconcile_discrepancy"."channel_trade_amount" IS '通道交易金额';
-COMMENT ON COLUMN "public"."pay_reconcile_discrepancy"."channel_trade_status" IS '通道交易状态';
-COMMENT ON COLUMN "public"."pay_reconcile_discrepancy"."channel_trade_time" IS '通道交易时间';
-COMMENT ON COLUMN "public"."pay_reconcile_discrepancy"."out_trade_no" IS '平台订单关联通道订单号';
-COMMENT ON COLUMN "public"."pay_reconcile_discrepancy"."channel_out_trade_no" IS '通道关联订单号';
-COMMENT ON COLUMN "public"."pay_reconcile_discrepancy"."isv_no" IS '所属服务商';
-COMMENT ON TABLE "public"."pay_reconcile_discrepancy" IS '对账差异记录';
-
--- ----------------------------
--- Records of pay_reconcile_discrepancy
--- ----------------------------
-
--- ----------------------------
--- Table structure for pay_reconcile_statement
--- ----------------------------
-DROP TABLE IF EXISTS "public"."pay_reconcile_statement";
-CREATE TABLE "public"."pay_reconcile_statement" (
- "creator" int8,
- "create_time" timestamp(6),
- "last_modifier" int8,
- "last_modified_time" timestamp(6),
- "version" int4 NOT NULL,
- "deleted" bool NOT NULL,
- "mch_no" varchar(32) COLLATE "pg_catalog"."default",
- "app_id" varchar(32) COLLATE "pg_catalog"."default",
- "name" varchar(255) COLLATE "pg_catalog"."default",
- "reconcile_no" varchar(32) COLLATE "pg_catalog"."default",
- "date" date,
- "channel" varchar(32) COLLATE "pg_catalog"."default",
- "down_or_upload" bool,
- "compare" bool,
- "order_count" varchar(8) COLLATE "pg_catalog"."default",
- "order_amount" numeric(13,2),
- "refund_count" varchar(8) COLLATE "pg_catalog"."default",
- "refund_amount" numeric(13,2),
- "channel_order_count" varchar(8) COLLATE "pg_catalog"."default",
- "channel_order_amount" numeric(13,2),
- "channel_refund_count" varchar(8) COLLATE "pg_catalog"."default",
- "channel_refund_amount" numeric(13,2),
- "result" varchar(32) COLLATE "pg_catalog"."default",
- "channel_file_url" varchar(500) COLLATE "pg_catalog"."default",
- "platform_file_url" varchar(500) COLLATE "pg_catalog"."default",
- "error_code" varchar(100) COLLATE "pg_catalog"."default",
- "error_msg" varchar(500) COLLATE "pg_catalog"."default",
- "id" int8 NOT NULL,
- "isv_no" varchar(64) COLLATE "pg_catalog"."default"
-)
-;
-COMMENT ON COLUMN "public"."pay_reconcile_statement"."creator" IS '创建者ID';
-COMMENT ON COLUMN "public"."pay_reconcile_statement"."create_time" IS '创建时间';
-COMMENT ON COLUMN "public"."pay_reconcile_statement"."last_modifier" IS '最后修改ID';
-COMMENT ON COLUMN "public"."pay_reconcile_statement"."last_modified_time" IS '最后修改时间';
-COMMENT ON COLUMN "public"."pay_reconcile_statement"."version" IS '版本号';
-COMMENT ON COLUMN "public"."pay_reconcile_statement"."deleted" IS '删除标志';
-COMMENT ON COLUMN "public"."pay_reconcile_statement"."mch_no" IS '商户号';
-COMMENT ON COLUMN "public"."pay_reconcile_statement"."app_id" IS '应用号';
-COMMENT ON COLUMN "public"."pay_reconcile_statement"."name" IS '名称';
-COMMENT ON COLUMN "public"."pay_reconcile_statement"."reconcile_no" IS '对账号';
-COMMENT ON COLUMN "public"."pay_reconcile_statement"."date" IS '日期';
-COMMENT ON COLUMN "public"."pay_reconcile_statement"."channel" IS '通道';
-COMMENT ON COLUMN "public"."pay_reconcile_statement"."down_or_upload" IS '交易对账文件是否下载或上传成功';
-COMMENT ON COLUMN "public"."pay_reconcile_statement"."compare" IS '交易对账文件是否比对完成';
-COMMENT ON COLUMN "public"."pay_reconcile_statement"."order_count" IS '支付订单数';
-COMMENT ON COLUMN "public"."pay_reconcile_statement"."order_amount" IS '支付交易金额';
-COMMENT ON COLUMN "public"."pay_reconcile_statement"."refund_count" IS '退款订单数';
-COMMENT ON COLUMN "public"."pay_reconcile_statement"."refund_amount" IS '退款交易金额';
-COMMENT ON COLUMN "public"."pay_reconcile_statement"."channel_order_count" IS '通道支付订单数';
-COMMENT ON COLUMN "public"."pay_reconcile_statement"."channel_order_amount" IS '通道支付交易金额';
-COMMENT ON COLUMN "public"."pay_reconcile_statement"."channel_refund_count" IS '通道退款订单数';
-COMMENT ON COLUMN "public"."pay_reconcile_statement"."channel_refund_amount" IS '通道退款交易金额';
-COMMENT ON COLUMN "public"."pay_reconcile_statement"."result" IS '交易对账结果';
-COMMENT ON COLUMN "public"."pay_reconcile_statement"."channel_file_url" IS '原始通道对账单文件url';
-COMMENT ON COLUMN "public"."pay_reconcile_statement"."platform_file_url" IS '生成平台对账单文件url';
-COMMENT ON COLUMN "public"."pay_reconcile_statement"."error_code" IS '错误码';
-COMMENT ON COLUMN "public"."pay_reconcile_statement"."error_msg" IS '错误信息';
-COMMENT ON COLUMN "public"."pay_reconcile_statement"."id" IS '主键';
-COMMENT ON COLUMN "public"."pay_reconcile_statement"."isv_no" IS '所属服务商';
-COMMENT ON TABLE "public"."pay_reconcile_statement" IS '对账报告';
-
--- ----------------------------
--- Records of pay_reconcile_statement
--- ----------------------------
-- ----------------------------
-- Table structure for pay_refund_order
@@ -2581,31 +2397,6 @@ COMMENT ON TABLE "public"."pay_refund_order" IS '退款订单';
-- Records of pay_refund_order
-- ----------------------------
--- ----------------------------
--- Table structure for pay_terminal_const
--- ----------------------------
-DROP TABLE IF EXISTS "public"."pay_terminal_const";
-CREATE TABLE "public"."pay_terminal_const" (
- "id" int8 NOT NULL,
- "channel" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
- "type" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
- "name" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
- "enable" bool NOT NULL,
- "remark" varchar(200) COLLATE "pg_catalog"."default"
-)
-;
-COMMENT ON COLUMN "public"."pay_terminal_const"."id" IS '主键';
-COMMENT ON COLUMN "public"."pay_terminal_const"."channel" IS '通道编码';
-COMMENT ON COLUMN "public"."pay_terminal_const"."type" IS '终端报送类型';
-COMMENT ON COLUMN "public"."pay_terminal_const"."name" IS '终端报送名称';
-COMMENT ON COLUMN "public"."pay_terminal_const"."enable" IS '是否启用';
-COMMENT ON COLUMN "public"."pay_terminal_const"."remark" IS '备注';
-COMMENT ON TABLE "public"."pay_terminal_const" IS '通道终端报送类型';
-
--- ----------------------------
--- Records of pay_terminal_const
--- ----------------------------
-
-- ----------------------------
-- Table structure for pay_terminal_device
-- ----------------------------
@@ -3298,11 +3089,6 @@ ALTER TABLE "public"."pay_channel_const" ADD CONSTRAINT "pay_channel_const_pkey"
-- ----------------------------
ALTER TABLE "public"."pay_channel_reconcile_trade" ADD CONSTRAINT "pay_channel_reconcile_trade_pkey" PRIMARY KEY ("id");
--- ----------------------------
--- Primary Key structure for table pay_channel_terminal
--- ----------------------------
-ALTER TABLE "public"."pay_channel_terminal" ADD CONSTRAINT "pay_channel_terminal_pkey" PRIMARY KEY ("id");
-
-- ----------------------------
-- Indexes structure for table pay_close_record
-- ----------------------------
@@ -3393,16 +3179,6 @@ ALTER TABLE "public"."pay_order" ADD CONSTRAINT "pay_order_pkey" PRIMARY KEY ("i
-- ----------------------------
ALTER TABLE "public"."pay_platform_config" ADD CONSTRAINT "pay_platform_config_pkey" PRIMARY KEY ("id");
--- ----------------------------
--- Primary Key structure for table pay_reconcile_discrepancy
--- ----------------------------
-ALTER TABLE "public"."pay_reconcile_discrepancy" ADD CONSTRAINT "pay_reconcile_discrepancy_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table pay_reconcile_statement
--- ----------------------------
-ALTER TABLE "public"."pay_reconcile_statement" ADD CONSTRAINT "pay_reconcile_statement_pkey" PRIMARY KEY ("id");
-
-- ----------------------------
-- Indexes structure for table pay_refund_order
-- ----------------------------
@@ -3440,11 +3216,6 @@ COMMENT ON INDEX "public"."refund_refund_no" IS '退款号索引';
-- ----------------------------
ALTER TABLE "public"."pay_refund_order" ADD CONSTRAINT "pay_refund_order_pkey" PRIMARY KEY ("id");
--- ----------------------------
--- Primary Key structure for table pay_terminal_const
--- ----------------------------
-ALTER TABLE "public"."pay_terminal_const" ADD CONSTRAINT "pay_terminal_type_const_pkey" PRIMARY KEY ("id");
-
-- ----------------------------
-- Primary Key structure for table pay_terminal_device
-- ----------------------------
diff --git a/bootx-platform/bootx-platform-common/common-config/pom.xml b/bootx-platform/bootx-platform-common/common-config/pom.xml
index 4d5fc6d4d..8c3a317c4 100644
--- a/bootx-platform/bootx-platform-common/common-config/pom.xml
+++ b/bootx-platform/bootx-platform-common/common-config/pom.xml
@@ -13,5 +13,4 @@
项目配置
-
diff --git a/bootx-platform/bootx-platform-core/src/main/java/cn/bootx/platform/core/exception/BizException.java b/bootx-platform/bootx-platform-core/src/main/java/cn/bootx/platform/core/exception/BizException.java
index f881b00e1..d854aeacd 100644
--- a/bootx-platform/bootx-platform-core/src/main/java/cn/bootx/platform/core/exception/BizException.java
+++ b/bootx-platform/bootx-platform-core/src/main/java/cn/bootx/platform/core/exception/BizException.java
@@ -8,7 +8,7 @@ import lombok.Getter;
* 业务异常基类
* @see BizErrorException 致命异常 error级别警告
* @see BizWarnException 业务异常 warn级别
- * @see BizInfoException 哦月异常 info级别
+ * @see BizInfoException 业务异常 info级别
*/
@Getter
public class BizException extends RuntimeException {
diff --git a/bootx-platform/bootx-platform-service/service-iam/src/main/java/cn/bootx/platform/iam/service/permission/PermPathSyncService.java b/bootx-platform/bootx-platform-service/service-iam/src/main/java/cn/bootx/platform/iam/service/permission/PermPathSyncService.java
index f5463b59b..c96d552b5 100644
--- a/bootx-platform/bootx-platform-service/service-iam/src/main/java/cn/bootx/platform/iam/service/permission/PermPathSyncService.java
+++ b/bootx-platform/bootx-platform-service/service-iam/src/main/java/cn/bootx/platform/iam/service/permission/PermPathSyncService.java
@@ -12,6 +12,7 @@ import cn.bootx.platform.iam.entity.permission.PermPath;
import cn.bootx.platform.iam.service.client.ClientCodeService;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
+import cn.hutool.crypto.SecureUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.annotation.CacheEvict;
@@ -23,6 +24,7 @@ import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
import java.lang.reflect.Method;
+import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -106,15 +108,18 @@ public class PermPathSyncService {
// 重建树结构 删除指定终端的非子节点
permPathManager.deleteNotChild(clientCode);
// 生成模块信息
- var moduleMap = this.builderModule(requestPathBos);
+ var moduleList = this.builderModule(requestPathBos);
// 生成分组信息
- var groupMap = this.builderGroup(requestPathBos);
+ var groupList = this.builderGroup(requestPathBos);
// 合并进行保存
ArrayList list = new ArrayList<>();
- list.addAll(moduleMap);
- list.addAll(groupMap);
+ list.addAll(moduleList);
+ list.addAll(groupList);
// 设置终端编码
list.forEach(o -> o.setClientCode(clientCode));
+ // 根据编码生成ID, 保证每次同步时的模块和分组ID不变
+ list.forEach(o -> o.setId(this.genPathId(o.getParentCode()+o.getClientCode()+o.getCode())));
+ // 保存
permPathManager.saveAll(list);
}
@@ -297,4 +302,19 @@ public class PermPathSyncService {
.collect(toList());
}
+ /**
+ * 给分组和模块生成ID, 防止每次更新ID都会发生变化
+ */
+ private long genPathId(String str) {
+ String s = SecureUtil.sha256(str);
+ byte[] hashBytes = s.getBytes(StandardCharsets.UTF_8);
+ // 将前8个字节转换为 long
+ long result = 0;
+ for (int i = 0; i < 8; i++) {
+ result = (result << 8) | (hashBytes[i] & 0xFF);
+ }
+ // 取绝对值,避免负数
+ return Math.abs(result);
+ }
+
}
diff --git a/bootx-platform/bootx-platform-starter/starter-auth/src/main/java/cn/bootx/platform/starter/auth/configuration/AuthProperties.java b/bootx-platform/bootx-platform-starter/starter-auth/src/main/java/cn/bootx/platform/starter/auth/configuration/AuthProperties.java
index 04a645617..58bf45a90 100644
--- a/bootx-platform/bootx-platform-starter/starter-auth/src/main/java/cn/bootx/platform/starter/auth/configuration/AuthProperties.java
+++ b/bootx-platform/bootx-platform-starter/starter-auth/src/main/java/cn/bootx/platform/starter/auth/configuration/AuthProperties.java
@@ -21,13 +21,10 @@ public class AuthProperties {
/** 不进行鉴权的路径 */
private List ignoreUrls = new ArrayList<>();
- /** 盐值 */
- private String salt = "salt";
-
- /** 开启超级管理员(生产模式推荐关闭) */
+ /** 开启超级管理员(生产模式请关闭) */
private boolean enableAdmin = true;
- /** 用户管理列表中是否显示 */
+ /** 用户管理列表中是否显示超级管理员用户 */
private boolean adminInList = true;
}
diff --git a/bootx-platform/bootx-platform-starter/starter-auth/src/main/java/cn/bootx/platform/starter/auth/endpoint/TokenEndpoint.java b/bootx-platform/bootx-platform-starter/starter-auth/src/main/java/cn/bootx/platform/starter/auth/endpoint/TokenEndpoint.java
index 3306e1c65..59c9bc856 100644
--- a/bootx-platform/bootx-platform-starter/starter-auth/src/main/java/cn/bootx/platform/starter/auth/endpoint/TokenEndpoint.java
+++ b/bootx-platform/bootx-platform-starter/starter-auth/src/main/java/cn/bootx/platform/starter/auth/endpoint/TokenEndpoint.java
@@ -37,6 +37,7 @@ public class TokenEndpoint {
@Operation(summary = "退出")
@PostMapping("/logout")
public Result logout() {
+
tokenService.logout();
return Res.ok();
}
diff --git a/bootx-platform/bootx-platform-starter/starter-cache/src/main/java/cn/bootx/platform/starter/cache/controller/CacheClearController.java b/bootx-platform/bootx-platform-starter/starter-cache/src/main/java/cn/bootx/platform/starter/cache/controller/CacheClearController.java
index 9c442d258..570be77e2 100644
--- a/bootx-platform/bootx-platform-starter/starter-cache/src/main/java/cn/bootx/platform/starter/cache/controller/CacheClearController.java
+++ b/bootx-platform/bootx-platform-starter/starter-cache/src/main/java/cn/bootx/platform/starter/cache/controller/CacheClearController.java
@@ -9,10 +9,7 @@ import cn.bootx.platform.starter.cache.service.CacheClearService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
import java.util.List;
@@ -30,7 +27,6 @@ public class CacheClearController {
private final CacheClearProcessor cacheClearProcessor;
private final CacheClearService cacheClearService;
-
@RequestPath("查询所有缓存前缀")
@Operation(summary = "查询所有缓存前缀")
@GetMapping("/getCachePrefix")
@@ -41,7 +37,7 @@ public class CacheClearController {
@RequestPath("清除指定前缀的缓存")
@Operation(summary = "清除指定前缀的缓存")
@PostMapping("/prefix")
- public Result clearCacheByPrefix(List prefix) {
+ public Result clearCacheByPrefix(@RequestBody List prefix) {
cacheClearService.clearCacheByPrefix(prefix);
return Res.ok();
}
diff --git a/bootx-platform/bootx-platform-starter/starter-cache/src/main/java/cn/bootx/platform/starter/cache/service/CacheClearService.java b/bootx-platform/bootx-platform-starter/starter-cache/src/main/java/cn/bootx/platform/starter/cache/service/CacheClearService.java
index 64c0f354f..786b039a2 100644
--- a/bootx-platform/bootx-platform-starter/starter-cache/src/main/java/cn/bootx/platform/starter/cache/service/CacheClearService.java
+++ b/bootx-platform/bootx-platform-starter/starter-cache/src/main/java/cn/bootx/platform/starter/cache/service/CacheClearService.java
@@ -2,9 +2,12 @@ package cn.bootx.platform.starter.cache.service;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.data.redis.core.Cursor;
import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.ScanOptions;
import org.springframework.stereotype.Service;
+import java.util.ArrayList;
import java.util.List;
/**
@@ -22,6 +25,37 @@ public class CacheClearService {
* 根据前缀清除缓存
*/
public void clearCacheByPrefix(List prefixes){
- prefixes.forEach(prefix->redisTemplate.delete(redisTemplate.keys(prefix + "*")));
+
+ prefixes.forEach(prefix->{
+ deleteStringKeysWithPrefix(prefix,500);
+ });
+ }
+
+ /**
+ * 扫描删除前缀的缓存
+ */
+ private void deleteStringKeysWithPrefix(String prefix, int batchSize) {
+ ScanOptions options = ScanOptions.scanOptions()
+ .match(prefix + "*")
+ .count(batchSize)
+ .build();
+
+ List deleteKeys;
+ try (Cursor cursor = redisTemplate.scan(options)) {
+ deleteKeys = new ArrayList<>();
+ while (cursor.hasNext()) {
+ deleteKeys.add(cursor.next());
+ //
+ if (deleteKeys.size() >= batchSize) {
+ redisTemplate.delete(deleteKeys);
+ deleteKeys.clear();
+ }
+ }
+ }
+ // 删除剩余的 key
+ if (!deleteKeys.isEmpty()) {
+ redisTemplate.delete(deleteKeys);
+ deleteKeys.clear();
+ }
}
}
diff --git a/bootx-platform/bootx-platform-starter/starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/controller/QuartzJobController.java b/bootx-platform/bootx-platform-starter/starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/controller/QuartzJobController.java
index 6b8840e4a..cdc348967 100644
--- a/bootx-platform/bootx-platform-starter/starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/controller/QuartzJobController.java
+++ b/bootx-platform/bootx-platform-starter/starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/controller/QuartzJobController.java
@@ -4,19 +4,15 @@ import cn.bootx.platform.core.rest.Res;
import cn.bootx.platform.core.rest.param.PageParam;
import cn.bootx.platform.core.rest.result.PageResult;
import cn.bootx.platform.core.rest.result.Result;
-import cn.bootx.platform.starter.quartz.param.QuartzJobParam;
import cn.bootx.platform.starter.quartz.result.QuartzJobResult;
+import cn.bootx.platform.starter.quartz.param.QuartzJobParam;
import cn.bootx.platform.starter.quartz.service.QuartzJobService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.parameters.RequestBody;
import io.swagger.v3.oas.annotations.tags.Tag;
-import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
/**
* 定时任务
diff --git a/daxpay-open-channel/pom.xml b/daxpay-open-channel/pom.xml
index 380e7bfe3..6b80c2024 100644
--- a/daxpay-open-channel/pom.xml
+++ b/daxpay-open-channel/pom.xml
@@ -15,7 +15,7 @@
3.0.0.beta5
pom
4.0.0
- 多商户支付通道功能实现
+ 开源版支付通道功能实现
daxpay-open-channel-alipay
diff --git a/daxpay-open-server/src/main/resources/application-dev.yml b/daxpay-open-server/src/main/resources/application-dev.yml
index 4501baeb6..75c940150 100644
--- a/daxpay-open-server/src/main/resources/application-dev.yml
+++ b/daxpay-open-server/src/main/resources/application-dev.yml
@@ -36,8 +36,8 @@ bootx-platform:
# swagger相关配置
swagger:
author: DaxPay
- title: DaxPay支付平台-融合端
- description: DaxPay支付平台-多商户版-融合端
+ title: DaxPay支付平台
+ description: DaxPay支付平台-开源版
version: 0.0.1
base-packages:
"[BootxPlatform接口]":
@@ -47,7 +47,6 @@ bootx-platform:
- cn.bootx.platform.baseapi
- cn.bootx.platform.notice
"[支付平台接口]":
- - org.dromara.daxpay.union
- org.dromara.daxpay.controller
"[支付通道接口]":
- org.dromara.daxpay.channel
diff --git a/daxpay-open-server/src/main/resources/application-test.yml b/daxpay-open-server/src/main/resources/application-test.yml
index e306f40dc..23579ea9c 100644
--- a/daxpay-open-server/src/main/resources/application-test.yml
+++ b/daxpay-open-server/src/main/resources/application-test.yml
@@ -6,7 +6,7 @@ spring:
master:
# Postgresql连接
driver-class-name: org.postgresql.Driver
- url: jdbc:postgresql://${DB_HOST}:${DB_PORT}/dax-pay-plus-test?serverTimezone=Asia/Shanghai&autoReconnect=true&reWriteBatchedInserts=true
+ url: ${DB_URL}
username: ${DB_USER}
password: ${DB_PASSWORD}
hikari:
@@ -30,14 +30,20 @@ logging:
springdoc:
# 默认展开对象类型的属性, 主要用在get类型的参数中
default-flat-param-object: true
+knife4j:
+ # 开启接口文档增强特性
+ enable: true
+ # 是否为生产环境, 为true关闭swagger接口
+ production: ${KNIFE4J_PRODUCTION:false}
+# 基础脚手架配置
# 基础脚手架配置
bootx-platform:
common:
# swagger相关配置
swagger:
author: DaxPay
- title: DaxPay支付平台-融合端
- description: DaxPay支付平台-多商户版-融合端
+ title: DaxPay支付平台
+ description: DaxPay支付平台-开源版
version: 0.0.1
base-packages:
"[BootxPlatform接口]":
@@ -47,13 +53,15 @@ bootx-platform:
- cn.bootx.platform.baseapi
- cn.bootx.platform.notice
"[支付平台接口]":
- - org.dromara.daxpay.union
- org.dromara.daxpay.controller
"[支付通道接口]":
- org.dromara.daxpay.channel
starter:
auth:
- enable-admin: true
+ # 是否启用超级管理员登录
+ enable-admin: ${DAXPAY_ENABLE_ADMIN:true}
+ # 用户管理列表中是否显示超级管理员
+ admin-in-list: ${DAXPAY_ADMIN_IN_LIST:true}
ignore-urls:
- '/actuator/**'
- '/v3/api-docs/**'
@@ -80,13 +88,10 @@ dax-pay:
dromara:
# 注意, 不要设置 domain 访问路径, 自行进行拼接访问路径, 来保证可迁移性
x-file-storage:
- default-platform: tencent-cos-1
- tencent-cos:
- - platform: tencent-cos-1 # 存储平台标识
- enable-storage: true # 启用存储
- secret-id: ${OSS_SECRET_ID}
- secret-key: ${OSS_SECRET_KEY}
- region: ${OSS_REGION} #存仓库所在地域
- bucket-name: ${OSS_BUCKET}
- domain: ${OSS_DOMAIN} # 访问域名,注意“/”结尾,例如:https://abc.cos.ap-nanjing.myqcloud.com/
- base-path: dax-pay/
+ default-platform: local
+ # 使用Nginx映射到存储路径, 然后将nginx的地址设置到 bootx-platform.starter.file-upload.file-server-url参数
+ local-plus:
+ - platform: local
+ enable-storage: true
+ base-path: /file/ # 基础路径
+ storage-path: /data/files # 存储路径
diff --git a/daxpay-open-server/src/main/resources/application.yml b/daxpay-open-server/src/main/resources/application.yml
index 4ab9ed40b..743d17629 100644
--- a/daxpay-open-server/src/main/resources/application.yml
+++ b/daxpay-open-server/src/main/resources/application.yml
@@ -2,7 +2,7 @@ server:
port: 9999
spring:
application:
- name: dax-pay-union
+ name: dax-pay-admin
profiles:
active: dev
task:
@@ -45,4 +45,3 @@ bootx-platform:
deploy-mode: fusion
client-codes:
- dax-pay-admin
- - dax-pay-merchant
diff --git a/daxpay-open-server/src/main/resources/banner.txt b/daxpay-open-server/src/main/resources/banner.txt
index c4ecfe63e..fa1762643 100644
--- a/daxpay-open-server/src/main/resources/banner.txt
+++ b/daxpay-open-server/src/main/resources/banner.txt
@@ -10,6 +10,6 @@ ______ ______
|___/
${AnsiColor.MAGENTA}
-Service: DaxPay 多商户版本-融合端
+Service: DaxPay 开源版
Spring Boot Version: ${spring-boot.version}
${AnsiColor.BLACK}
diff --git a/daxpay-open/daxpay-open-controller/src/main/java/org/dromara/daxpay/controller/assist/TerminalDeviceController.java b/daxpay-open/daxpay-open-controller/src/main/java/org/dromara/daxpay/controller/assist/TerminalDeviceController.java
new file mode 100644
index 000000000..7ef0747b5
--- /dev/null
+++ b/daxpay-open/daxpay-open-controller/src/main/java/org/dromara/daxpay/controller/assist/TerminalDeviceController.java
@@ -0,0 +1,85 @@
+package org.dromara.daxpay.controller.assist;
+
+import cn.bootx.platform.core.annotation.RequestGroup;
+import cn.bootx.platform.core.annotation.RequestPath;
+import cn.bootx.platform.core.rest.Res;
+import cn.bootx.platform.core.rest.dto.LabelValue;
+import cn.bootx.platform.core.rest.param.PageParam;
+import cn.bootx.platform.core.rest.result.PageResult;
+import cn.bootx.platform.core.rest.result.Result;
+import cn.bootx.platform.core.validation.ValidationGroup;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.constraints.NotNull;
+import lombok.RequiredArgsConstructor;
+import org.dromara.core.trans.anno.TransMethodResult;
+import org.dromara.daxpay.service.param.termina.TerminalDeviceParam;
+import org.dromara.daxpay.service.param.termina.TerminalDeviceQuery;
+import org.dromara.daxpay.service.result.termina.TerminalDeviceResult;
+import org.dromara.daxpay.service.service.assist.TerminalDeviceService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 支付终端设备
+ * @author xxm
+ * @since 2025/3/9
+ */
+@Validated
+@Tag(name = "支付终端设备管理")
+@RestController
+@RequestMapping("/terminal/device")
+@RequestGroup(groupCode = "TerminalDevice", groupName = "支付终端设备管理", moduleCode = "PayConfig")
+@RequiredArgsConstructor
+public class TerminalDeviceController {
+ private final TerminalDeviceService terminalDeviceService;
+
+ @TransMethodResult
+ @RequestPath("分页查询")
+ @Operation(summary = "分页查询")
+ @GetMapping("/page")
+ public Result> page(PageParam pageParam, TerminalDeviceQuery query){
+ return Res.ok(terminalDeviceService.page(pageParam, query));
+ }
+
+ @TransMethodResult
+ @RequestPath("根据ID查询")
+ @Operation(summary = "根据ID查询")
+ @GetMapping("/findById")
+ public Result findById(@NotNull(message = "支付终端设备id不能为空") Long id){
+ return Res.ok(terminalDeviceService.findById(id));
+ }
+
+ @RequestPath("新增")
+ @Operation(summary = "新增")
+ @PostMapping("/add")
+ public Result add(@RequestBody @Validated(ValidationGroup.add.class) TerminalDeviceParam param){
+ terminalDeviceService.add(param);
+ return Res.ok();
+ }
+
+ @RequestPath("修改")
+ @Operation(summary = "修改")
+ @PostMapping("/edit")
+ public Result edit(@RequestBody @Validated(ValidationGroup.edit.class) TerminalDeviceParam param){
+ terminalDeviceService.edit(param);
+ return Res.ok();
+ }
+
+ @RequestPath("删除")
+ @Operation(summary = "删除")
+ @PostMapping("/delete")
+ public Result delete(@NotNull(message = "支付终端设备id不能为空") Long id){
+ terminalDeviceService.delete(id);
+ return Res.ok();
+ }
+
+ @RequestPath("根据应用号查询下拉列表")
+ @Operation(summary = "根据应用号查询下拉列表")
+ @GetMapping("/dropdown")
+ public Result> dropdown(String appId){
+ return Res.ok(terminalDeviceService.dropdown(appId));
+ }
+}
diff --git a/daxpay-open/daxpay-open-controller/src/main/java/org/dromara/daxpay/controller/common/TestController.java b/daxpay-open/daxpay-open-controller/src/main/java/org/dromara/daxpay/controller/common/TestController.java
index e1bc27e0a..2ccd377e3 100644
--- a/daxpay-open/daxpay-open-controller/src/main/java/org/dromara/daxpay/controller/common/TestController.java
+++ b/daxpay-open/daxpay-open-controller/src/main/java/org/dromara/daxpay/controller/common/TestController.java
@@ -1,37 +1,28 @@
package org.dromara.daxpay.controller.common;
-import cn.bootx.platform.core.annotation.DataPermScope;
import cn.bootx.platform.core.annotation.IgnoreAuth;
+import cn.bootx.platform.core.annotation.RequestPath;
import cn.bootx.platform.core.rest.Res;
import cn.bootx.platform.core.rest.result.Result;
-import cn.bootx.platform.starter.redis.delay.annotation.DelayEventListener;
-import cn.bootx.platform.starter.redis.delay.annotation.DelayJobEvent;
-import cn.bootx.platform.starter.redis.delay.bean.DelayJob;
-import cn.bootx.platform.starter.redis.delay.service.DelayJobService;
-import org.dromara.daxpay.core.result.assist.AuthResult;
-import org.dromara.daxpay.service.entity.order.pay.PayOrder;
-import cn.hutool.core.util.RandomUtil;
+import cn.bootx.platform.starter.cache.handler.CacheClearProcessor;
+import cn.bootx.platform.starter.cache.service.CacheClearService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
-import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
-import java.time.LocalDateTime;
-import java.util.concurrent.TimeUnit;
+import java.util.List;
/**
*
* @author xxm
* @since 2024/7/4
*/
-@DataPermScope("123")
@Validated
@IgnoreAuth
@Slf4j
@@ -40,49 +31,22 @@ import java.util.concurrent.TimeUnit;
@RequestMapping("/test")
@RequiredArgsConstructor
public class TestController {
-
- private final RedisTemplate objectRedisTemplate;
-
- private final DelayJobService delayJobService;
+ private final CacheClearProcessor cacheClearProcessor;
+ private final CacheClearService cacheClearService;
- @Operation(summary = "测试redis")
- @GetMapping("/redis")
- public Result