diff --git a/_config/sql/iam_perm_menu.sql b/_config/sql/iam_perm_menu.sql index 8933b4da3..e69de29bb 100644 --- a/_config/sql/iam_perm_menu.sql +++ b/_config/sql/iam_perm_menu.sql @@ -1,193 +0,0 @@ -/* - Navicat Premium Data Transfer - - Source Server : 229本地服务 - Source Server Type : PostgreSQL - Source Server Version : 160014 (160014) - Source Host : 192.168.1.229:5432 - Source Catalog : daxpay-dev - Source Schema : public - - Target Server Type : PostgreSQL - Target Server Version : 160014 (160014) - File Encoding : 65001 - - Date: 22/07/2026 18:36:13 -*/ - - --- ---------------------------- --- Table structure for iam_perm_menu --- ---------------------------- -DROP TABLE IF EXISTS "public"."iam_perm_menu"; -CREATE TABLE "public"."iam_perm_menu" ( - "id" int8 NOT NULL, - "pid" int8, - "menu_code" varchar(100) COLLATE "pg_catalog"."default", - "client_code" varchar(100) COLLATE "pg_catalog"."default", - "name" varchar(200) COLLATE "pg_catalog"."default", - "i18n_key" varchar(200) COLLATE "pg_catalog"."default", - "icon" varchar(200) COLLATE "pg_catalog"."default", - "hidden" bool DEFAULT false, - "hide_children_menu" bool DEFAULT false, - "component" varchar(500) COLLATE "pg_catalog"."default", - "path" varchar(500) COLLATE "pg_catalog"."default", - "redirect" varchar(500) COLLATE "pg_catalog"."default", - "sort_no" float8, - "root" bool DEFAULT false, - "keep_alive" bool DEFAULT false, - "affix_tab" bool DEFAULT false, - "creator" int8, - "last_modifier" int8, - "version" int4 DEFAULT 0, - "deleted" bool DEFAULT false, - "menu_type" varchar(20) COLLATE "pg_catalog"."default", - "active_icon" varchar(100) COLLATE "pg_catalog"."default", - "badge" varchar(50) COLLATE "pg_catalog"."default", - "badge_type" varchar(20) COLLATE "pg_catalog"."default", - "badge_variants" varchar(50) COLLATE "pg_catalog"."default", - "iframe_src" varchar(500) COLLATE "pg_catalog"."default", - "link" varchar(500) COLLATE "pg_catalog"."default", - "create_time" timestamptz(6), - "last_modified_time" timestamptz(6) -) -; -COMMENT ON COLUMN "public"."iam_perm_menu"."id" IS '主键'; -COMMENT ON COLUMN "public"."iam_perm_menu"."pid" IS '父菜单ID,0表示根菜单'; -COMMENT ON COLUMN "public"."iam_perm_menu"."menu_code" IS '菜单编码'; -COMMENT ON COLUMN "public"."iam_perm_menu"."client_code" IS '关联终端code'; -COMMENT ON COLUMN "public"."iam_perm_menu"."name" IS '路由名称,建议唯一'; -COMMENT ON COLUMN "public"."iam_perm_menu"."i18n_key" IS '国际化key'; -COMMENT ON COLUMN "public"."iam_perm_menu"."icon" IS '菜单图标'; -COMMENT ON COLUMN "public"."iam_perm_menu"."hidden" IS '是否隐藏'; -COMMENT ON COLUMN "public"."iam_perm_menu"."hide_children_menu" IS '是否隐藏子菜单'; -COMMENT ON COLUMN "public"."iam_perm_menu"."component" IS '组件'; -COMMENT ON COLUMN "public"."iam_perm_menu"."path" IS '访问路径'; -COMMENT ON COLUMN "public"."iam_perm_menu"."redirect" IS '菜单跳转地址(重定向)'; -COMMENT ON COLUMN "public"."iam_perm_menu"."sort_no" IS '菜单排序'; -COMMENT ON COLUMN "public"."iam_perm_menu"."root" IS '是否是一级菜单'; -COMMENT ON COLUMN "public"."iam_perm_menu"."keep_alive" IS '是否开启页面缓存'; -COMMENT ON COLUMN "public"."iam_perm_menu"."affix_tab" IS '是否固定标签页'; -COMMENT ON COLUMN "public"."iam_perm_menu"."creator" IS '创建者ID'; -COMMENT ON COLUMN "public"."iam_perm_menu"."last_modifier" IS '最后修改ID'; -COMMENT ON COLUMN "public"."iam_perm_menu"."version" IS '版本号'; -COMMENT ON COLUMN "public"."iam_perm_menu"."deleted" IS '删除标志'; -COMMENT ON COLUMN "public"."iam_perm_menu"."menu_type" IS '菜单类型: catalog-目录, menu-菜单, subpage-子页面, subpage_group-子页面分组, embedded-内嵌, link-外链'; -COMMENT ON COLUMN "public"."iam_perm_menu"."active_icon" IS '激活状态图标'; -COMMENT ON COLUMN "public"."iam_perm_menu"."badge" IS '徽章显示文本'; -COMMENT ON COLUMN "public"."iam_perm_menu"."badge_type" IS '徽章类型: dot-圆点, normal-文本'; -COMMENT ON COLUMN "public"."iam_perm_menu"."badge_variants" IS '徽章样式变体'; -COMMENT ON COLUMN "public"."iam_perm_menu"."iframe_src" IS '内嵌页面URL地址'; -COMMENT ON COLUMN "public"."iam_perm_menu"."link" IS '外部链接URL地址'; -COMMENT ON TABLE "public"."iam_perm_menu" IS '菜单权限配置'; - --- ---------------------------- --- Records of iam_perm_menu --- ---------------------------- -INSERT INTO "public"."iam_perm_menu" VALUES (202, 2, NULL, 'admin', 'FileUploadDemo', 'menu.demos.fileUpload', 'lucide:upload', 'f', 'f', '/demos/file-upload/FileUploadDemo', '/demos/file-upload', NULL, 2, 'f', 't', 'f', 0, NULL, 0, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-04-09 16:00:00+00', '2026-04-09 16:00:00+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (307, 3, 'system:monitor', 'admin', 'SystemMonitor', 'menu.system.monitor', 'lucide:monitor', 'f', 'f', NULL, '/system/monitor', NULL, 50, 'f', 't', 'f', 1, 1, 1, 'f', 'catalog', NULL, NULL, NULL, NULL, NULL, NULL, '2026-04-10 16:00:00+00', '2026-04-12 12:53:45.790453+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (305, 3, 'iam:perm', 'admin', 'SystemPerm', 'menu.system.perm', 'lucide:shield', 'f', 'f', NULL, '/system/perm', NULL, 2, 'f', 't', 'f', 1, 1, 1, 'f', 'catalog', NULL, NULL, NULL, NULL, NULL, NULL, '2026-04-08 16:00:00+00', '2026-04-09 15:10:44.651238+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (302, 3, NULL, 'admin', 'SystemLog', 'menu.system.log', 'lucide:file-text', 'f', 'f', NULL, '/system/log', NULL, 99, 'f', 't', 'f', 0, 1, 1, 'f', 'catalog', NULL, NULL, NULL, NULL, NULL, NULL, '2026-03-20 03:11:13.134079+00', '2026-04-05 08:56:11.97756+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (304, 3, 'system:config', 'admin', 'SystemConfig', 'menu.system.config', 'lucide:settings-2', 'f', 'f', NULL, '/system/config', NULL, 10, 'f', 't', 'f', 0, 1, 1, 'f', 'catalog', NULL, NULL, NULL, NULL, NULL, NULL, '2026-04-04 16:00:00+00', '2026-04-09 15:11:00.840153+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (401, 4, 'payment:platform', 'admin', 'PaymentPlatform', 'menu.payment.platform', 'lucide:building', 'f', 'f', NULL, '/payment/platform', NULL, 1, 'f', 't', 'f', 0, 1, 3, 'f', 'catalog', NULL, NULL, NULL, NULL, NULL, NULL, '2026-04-05 16:00:00+00', '2026-05-28 06:25:42.880461+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (203, 2, 'demos:region', 'admin', 'RegionCascaderDemo', 'menu.demos.region', 'lucide:map-pin', 'f', 'f', '/demos/region/RegionCascaderDemo', '/demos/region', NULL, 3, 'f', 't', 'f', 0, NULL, 0, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-04-24 16:00:00+00', '2026-04-24 16:00:00+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (3, NULL, NULL, 'admin', 'System', 'menu.system', 'lucide:sliders-horizontal', 'f', 'f', NULL, '/system', NULL, 0, 'f', 't', 'f', 0, 1, 2, 'f', 'catalog', NULL, NULL, NULL, NULL, NULL, NULL, '2026-03-20 03:11:13.134079+00', '2026-06-25 02:00:30.22348+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (30102, 301, 'iam:menu', 'admin', 'SystemMenu', 'menu.system.perm.menu', 'lucide:panel-top', 'f', 'f', '/iam/perm/menu/MenuList', '/system/basic/menu', NULL, 0, 'f', 't', 'f', 0, 1, 3, 'f', 'menu', NULL, NULL, NULL, NULL, '', '', '2026-03-20 03:11:13.134079+00', '2026-06-27 10:29:51.371435+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (301, 3, NULL, 'admin', 'SystemBasic', 'menu.system.basic', 'lucide:boxes', 'f', 'f', NULL, '/system/basic', NULL, 1, 'f', 't', 'f', 0, NULL, 0, 'f', 'catalog', NULL, NULL, NULL, NULL, NULL, NULL, '2026-03-20 03:11:13.134079+00', '2026-06-25 02:00:30.236321+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (30101, 301, 'system:dict', 'admin', 'SystemDict', 'menu.system.basic.dict', 'lucide:book-open', 'f', 'f', '/system/basic/dict/DictList', '/system/basic/dict', NULL, 1, 'f', 't', 'f', 0, 1, 2, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-03-20 03:11:13.134079+00', '2026-06-25 02:00:30.243488+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (30601, 307, 'system:file', 'admin', 'StorageFile', 'menu.system.monitor.file', 'lucide:files', 'f', 'f', '/system/monitor/file/PlatformFileList', '/system/monitor/file', NULL, 2, 'f', 't', 'f', 1, 1, 0, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-04-09 16:00:00+00', '2026-06-25 02:43:43.71511+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (30501, 305, 'iam:user', 'admin', 'UserList', 'menu.system.perm.user', 'lucide:users-round', 'f', 'f', '/iam/user/UserList', '/iam/user', NULL, 10, 'f', 't', 'f', 1, 1, 4, 'f', 'menu', NULL, NULL, NULL, NULL, '', '', '2026-03-31 00:23:04.37507+00', '2026-07-13 02:15:41.494775+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (2, NULL, NULL, 'admin', 'Demos', 'menu.demos', 'lucide:blocks', 'f', 'f', NULL, '/demos', NULL, 1000, 'f', 't', 'f', 0, NULL, 0, 'f', 'catalog', NULL, NULL, NULL, NULL, NULL, NULL, '2026-03-20 03:11:13.134079+00', '2026-06-25 02:00:30.27727+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (1, NULL, NULL, 'admin', 'Dashboard', 'menu.dashboard', 'lucide:layout-dashboard', 'f', 'f', NULL, '/dashboard', '/workspace', -1, 'f', 'f', 'f', 0, NULL, 0, 'f', 'catalog', NULL, NULL, NULL, NULL, NULL, NULL, '2026-03-20 03:11:13.134079+00', '2026-06-27 13:46:52.151771+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (30202, 302, 'system:log:operate', 'admin', 'SystemOperateLog', 'menu.system.log.operate', 'lucide:activity', 'f', 'f', '/system/log/operate/OperateLogList', '/system/log/operate', NULL, 2, 'f', 't', 'f', 0, 1, 1, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-03-20 03:11:13.134079+00', '2026-03-30 15:24:57.076166+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (4, NULL, 'payment', 'admin', 'PaymentSystem', 'menu.platform', 'lucide:credit-card', 'f', 'f', NULL, '/payment', NULL, 3, 'f', 't', 'f', 0, 1, 1, 'f', 'catalog', NULL, NULL, NULL, NULL, NULL, NULL, '2026-04-05 16:00:00+00', '2026-07-13 13:02:20.694464+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (30401, 304, 'system:security-config', 'admin', 'SecurityManage', 'menu.system.security', 'lucide:shield-check', 'f', 'f', NULL, '/system/config/security', NULL, 2, 'f', 't', 'f', 1, 1, 1, 'f', 'catalog', NULL, NULL, NULL, NULL, NULL, NULL, '2026-04-05 02:00:00+00', '2026-07-16 07:31:19.436479+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (30201, 302, 'system:log:login', 'admin', 'SystemLoginLog', 'menu.system.log.login', 'lucide:log-in', 'f', 'f', '/system/log/login/LoginLogList', '/system/log/login', NULL, 1, 'f', 't', 'f', 0, 1, 1, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-03-20 03:11:13.134079+00', '2026-03-30 15:25:09.855555+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (102, 1, 'dashboard:workspace', 'admin', 'Workspace', 'menu.dashboard.workspace', 'lucide:panels-top-left', 'f', 'f', '/dashboard/workspace/index', '/workspace', NULL, 1, 'f', 'f', 't', 0, 1, 1, 'f', 'menu', NULL, NULL, NULL, NULL, '', '', '2026-03-20 03:11:13.134079+00', '2026-06-28 02:50:37.055128+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (101, 1, 'dashboard:analytics', 'admin', 'Analytics', 'menu.dashboard.analytics', 'lucide:area-chart', 'f', 'f', '/dashboard/analytics/index', '/analytics', NULL, 2, 'f', 'f', 'f', 0, 1, 1, 'f', 'menu', NULL, NULL, NULL, NULL, '', '', '2026-03-20 03:11:13.134079+00', '2026-06-28 02:50:43.072618+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (30103, 305, 'iam:role', 'admin', 'SystemRole', 'menu.system.perm.role', 'lucide:shield-user', 'f', 'f', '/iam/perm/role/RoleList', '/iam/perm/role', NULL, 3, 'f', 't', 'f', 0, 1, 2, 'f', 'menu', NULL, NULL, NULL, NULL, '', '', '2026-03-20 03:11:13.134079+00', '2026-06-25 02:00:30.246504+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (30701, 307, 'iam:online', 'admin', 'OnlineUser', 'menu.system.monitor.online', 'lucide:users', 'f', 'f', '/system/monitor/online/OnlineUserList', '/system/monitor/online', NULL, 1, 'f', 't', 'f', 1, 1, 0, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-04-11 16:00:00+00', '2026-04-11 16:00:00+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (6, NULL, 'trade', 'admin', 'TransactionManagement', 'menu.trade', 'lucide:arrow-left-right', 'f', 'f', NULL, '/trade', '/trade/pay-trade', 4, 'f', 't', 'f', 1, 1, 0, 'f', 'catalog', NULL, NULL, NULL, NULL, NULL, NULL, '2026-05-24 16:00:00+00', '2026-07-17 06:18:15.479497+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (40401, 404, 'merchant:info', 'admin', 'MerchantInfo', 'menu.payment.merchant.list', 'lucide:shopping-bag', 'f', 'f', '/payment/merchant/info/MerchantList', '/payment/merchant/info', NULL, 1, 'f', 't', 'f', 1, 1, 1, 'f', 'menu', NULL, NULL, NULL, NULL, '', '', '2026-04-13 16:00:00+00', '2026-06-25 02:00:30.290399+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (30402, 304, 'system:platform-config', 'admin', 'PlatformConfig', 'menu.system.config.platform', 'lucide:settings', 'f', 'f', '/system/config/platform/PlatformConfig', '/system/config/platform', NULL, 1, 'f', 't', 'f', 1, 1, 0, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-04-07 16:00:00+00', '2026-07-13 13:17:21.921261+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (40104, 401, 'payment:platform:capability', 'admin', 'PayCapabilityList', 'menu.payment.platform.capability', 'lucide:zap', 'f', 'f', '/payment/masterdata/capability/PayCapabilityList', '/payment/platform/pay-capability', NULL, 3, 'f', 't', 'f', 1, 1, 4, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-05-26 16:00:00+00', '2026-05-28 06:43:27.505831+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (4040102, 4040130, 'merchant:credential', 'admin', 'MerchantCredentialConfig', 'menu.payment.merchant.credential', NULL, 't', 'f', '/payment/merchant/manage/credential/MerchantCredentialConfig', '/payment/merchant/manage/credential', NULL, 3, 'f', 't', 'f', 1, 1, 0, 'f', 'subpage', NULL, NULL, NULL, NULL, NULL, NULL, '2026-05-01 16:00:00+00', '2026-07-13 10:13:20.809377+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (404, NULL, 'merchant', 'admin', 'PaymentMerchant', 'menu.merchant', 'lucide:store', 'f', 'f', NULL, '/payment/merchant', NULL, 3.5, 't', 't', 'f', 0, NULL, 0, 'f', 'catalog', NULL, NULL, NULL, NULL, NULL, NULL, '2026-04-05 16:00:00+00', '2026-07-13 13:12:49.514288+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (601, 610, 'trade:order', 'admin', 'NormalOrderList', 'menu.trade.normalPay', 'lucide:credit-card', 'f', 'f', '/payment/order/NormalOrderList', '/trade/pay-order/normal', NULL, 1, 'f', 'f', 'f', 1, 1, 0, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-05-24 16:00:00+00', '2026-07-17 06:18:15.466267+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (40101, 401, 'payment:platform:product', 'admin', 'ProductList', 'menu.payment.platform.product', 'lucide:package', 'f', 'f', '/payment/masterdata/product/PayProductList', '/payment/platform/product', NULL, 2, 'f', 't', 'f', 1, 1, 3, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-04-23 16:00:00+00', '2026-05-28 06:25:42.892396+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (4040101, 4040130, 'merchant:workbench', 'admin', 'MerchantManage', 'menu.payment.merchant.workbench', '', 't', 'f', '/payment/merchant/manage/workbench/MerchantManage', '/payment/merchant/manage', NULL, 2, 'f', 't', 'f', 1, 1, 0, 'f', 'subpage', NULL, NULL, NULL, NULL, NULL, NULL, '2026-04-13 16:00:00+00', '2026-07-11 03:37:15.424776+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (40103, 401, 'payment:platform:pay-channel', 'admin', 'PayChannelList', 'menu.payment.platform.channel', 'lucide:radio-tower', 'f', 'f', '/payment/masterdata/channel/PayChannelList', '/payment/platform/pay-channel', NULL, 0, 'f', 't', 'f', 1, 1, 0, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-05-28 16:00:00+00', '2026-06-27 13:01:24.315365+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (40102, 401, 'payment:platform:pay-method', 'admin', 'PayProviderList', 'menu.payment.platform.provider', 'lucide:list-tree', 'f', 'f', '/payment/masterdata/provider/PayMethodList', '/payment/platform/pay-method', NULL, 1, 'f', 't', 'f', 1, 1, 5, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-05-27 20:18:01.383008+00', '2026-05-30 08:21:19.464024+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (4040108, 4040130, 'merchant:user', 'admin', 'MerchantUser', 'menu.payment.merchant.user', '', 't', 'f', '/payment/merchant/user/MerchantUserList', '/payment/merchant/user', NULL, 8, 'f', 't', 'f', 1, 1, 0, 'f', 'subpage', NULL, NULL, NULL, NULL, NULL, NULL, '2026-05-04 16:00:00+00', '2026-07-11 03:37:15.424776+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (4040110, 4040130, 'merchant:app', 'admin', 'MchAppInfoList', 'menu.payment.merchant.app', NULL, 't', 'f', '/payment/merchant/app/MchAppInfoList', '/payment/merchant/app', NULL, 10, 'f', 't', 'f', 1, 1, 1, 'f', 'subpage', NULL, NULL, NULL, NULL, NULL, NULL, '2026-05-24 16:00:00+00', '2026-07-11 03:37:15.424776+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (4040114, 4040132, 'channel:app', 'admin', 'AlipayMchAppManage', 'menu.payment.merchant.channelMerchant.alipayApp', NULL, 't', 'f', '/payment/channel/alipay/manage/mch/app/AlipayMchAppManage', '/payment/global/channel-merchant/alipay-app-manage', NULL, 12, 'f', 't', 'f', 1, 1, 0, 'f', 'subpage', NULL, NULL, NULL, NULL, NULL, NULL, '2026-06-11 22:28:11.274785+00', '2026-07-11 03:37:15.430392+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (4040112, 4040131, 'channel:merchant:detail', 'admin', 'ChannelMerchantDetailDispatch', 'menu.payment.merchant.channelMerchant.detail', NULL, 't', 'f', '/payment/global/channel-merchant/detail/ChannelMerchantDetailDispatch', '/payment/global/channel-merchant/detail', NULL, 10, 'f', 't', 'f', 1, 1, 0, 'f', 'subpage', NULL, NULL, NULL, NULL, NULL, NULL, '2026-06-07 19:48:34.936565+00', '2026-07-11 03:37:15.428444+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (4040113, 4040132, 'channel:app', 'admin', 'WechatMchAppManage', 'menu.payment.merchant.channelMerchant.wechatApp', NULL, 't', 'f', '/payment/channel/wechat/manage/mch/app/WechatMchAppManage', '/payment/global/channel-merchant/wechat-app-manage', NULL, 11, 'f', 't', 'f', 1, 1, 0, 'f', 'subpage', NULL, NULL, NULL, NULL, NULL, NULL, '2026-06-07 23:57:13.620205+00', '2026-07-11 03:37:15.430392+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (4040111, 4040130, 'merchant:app:route', 'admin', 'PayRouteConfig', 'menu.payment.merchant.payRoute', NULL, 't', 'f', '/payment/route/PayRouteConfig', '/payment/route', NULL, 2, 'f', 't', 'f', 1, 1, 1, 'f', 'subpage', NULL, NULL, NULL, NULL, NULL, NULL, '2026-05-24 22:23:46.483985+00', '2026-07-13 10:13:20.790253+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (4040109, 4040131, 'channel:merchant:create', 'admin', 'ChannelMerchantCreate', 'menu.payment.merchant.channelMerchant.create', NULL, 't', 'f', '/payment/global/channel-merchant/ChannelMerchantCreate', '/payment/global/channel-merchant/create', NULL, 9, 'f', 't', 'f', 1, 1, 0, 'f', 'subpage', NULL, NULL, NULL, NULL, NULL, NULL, '2026-05-05 16:00:00+00', '2026-07-11 03:37:15.428444+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (4040117, 4040130, 'merchant:store', 'admin', 'MchStoreInfoList', 'menu.payment.merchant.store', NULL, 't', 'f', '/payment/merchant/store/MchStoreInfoList', '/payment/merchant/store', NULL, 15, 'f', 't', 'f', 1, 1, 0, 'f', 'subpage', NULL, NULL, NULL, NULL, NULL, NULL, '2026-06-24 16:00:00+00', '2026-07-11 03:37:15.424776+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (602, 6, 'trade:fund', 'admin', 'PayTradeList', 'menu.trade.payTrade', 'lucide:arrow-left-right', 'f', 'f', '/payment/order/PayTradeList', '/trade/pay-trade', NULL, 1, 'f', 't', 'f', NULL, NULL, 0, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-01 15:09:04.769906+00', '2026-07-17 06:18:15.474015+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (901, 4, 'device:qrcode', 'admin', 'DeviceQrCode', 'menu.device.qrcode', 'lucide:qr-code', 'f', 'f', '/payment/device/qrcode/DeviceQrCode', '/device/qrcode', NULL, 3, 'f', 't', 'f', 1, 1, 0, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-06-25 01:21:34.634639+00', '2026-07-21 06:30:00+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (8, NULL, 'develop', 'admin', 'Develop', 'menu.develop', 'lucide:wrench', 'f', 'f', NULL, '/develop', NULL, 5, 'f', 't', 'f', 1, 1, 0, 'f', 'catalog', NULL, NULL, NULL, NULL, NULL, NULL, '2026-06-23 16:00:00+00', '2026-06-23 16:00:00+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (9, NULL, 'device', 'admin', 'DeviceManagement', 'menu.device', 'lucide:qr-code', 'f', 'f', NULL, '/device', NULL, 4.2, 'f', 't', 'f', 1, 1, 1, 't', 'catalog', NULL, NULL, NULL, NULL, NULL, NULL, '2026-06-25 01:21:34.631155+00', '2026-07-21 06:30:00+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (204, 2, 'demos:artemis', 'admin', 'ArtemisDemo', 'menu.demos.artemis', 'lucide:send', 'f', 'f', '/demos/artemis/ArtemisDemo', '/demos/artemis', NULL, 4, 'f', 't', 'f', 0, NULL, 0, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-06-18 00:00:00+00', '2026-06-18 00:00:00+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (900001, 304, 'iam:social', 'admin', 'ThirdPlatform', 'menu.system.config.thirdPlatform', 'lucide:share-2', 'f', 'f', '/system/config/third-platform/ThirdPlatform', '/system/config/third-platform', NULL, 5, 'f', 't', 'f', 1, 1, 0, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-13 02:15:41.505142+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (4040103, 4040130, 'merchant:profile', 'admin', 'MchInfoManage', 'menu.payment.merchant.profile', NULL, 't', 'f', '/payment/merchant/manage/info/MchInfoManage', '/payment/merchant/manage/info', NULL, 1, 'f', 't', 'f', 1, 1, 0, 'f', 'subpage', NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-11 03:37:15.424776+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (801, 8, 'develop:trade', 'admin', 'DevelopTrade', 'menu.develop.trade', 'lucide:credit-card', 'f', 'f', '/payment/develop/trade/DevelopTrade', '/develop/trade', NULL, 1, 'f', 't', 'f', 1, 1, 0, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-06-23 16:00:00+00', '2026-06-23 16:00:00+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (802, 8, 'develop:sign', 'admin', 'DevelopSign', 'menu.develop.sign', 'lucide:file-signature', 'f', 'f', '/payment/develop/sign/DevelopSign', '/develop/sign', NULL, 2, 'f', 't', 'f', 1, 1, 0, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-06-23 16:00:00+00', '2026-06-23 16:00:00+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (4040106, 4040131, 'channel:merchant', 'admin', 'ChannelMerchant', 'menu.payment.merchant.channelMerchant', NULL, 't', 'f', '/payment/global/channel-merchant/ChannelMerchantList', '/payment/global/channel-merchant', NULL, 6, 'f', 't', 'f', 1, 1, 0, 'f', 'subpage', NULL, NULL, NULL, NULL, NULL, NULL, '2026-05-03 16:00:00+00', '2026-07-11 03:37:15.428444+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (4040115, 4040132, 'channel:app', 'admin', 'DouyinMchAppManage', 'menu.payment.merchant.channelMerchant.douyinApp', NULL, 't', 'f', '/payment/channel/douyin/manage/app/DouyinMchAppManage', '/payment/global/channel-merchant/douyin-app-manage', NULL, 13, 'f', 't', 'f', 1, 1, 0, 'f', 'subpage', NULL, NULL, NULL, NULL, NULL, NULL, '2026-06-15 16:00:00+00', '2026-07-11 03:37:15.430392+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (405, 4, 'payment:config', 'admin', 'PaymentConfig', 'menu.payment.config', 'lucide:settings-2', 't', 'f', NULL, '/payment/config', NULL, 2, 'f', 't', 'f', 1, 1, 0, 't', 'catalog', NULL, NULL, NULL, NULL, NULL, NULL, '2026-06-14 00:00:00+00', '2026-07-15 15:24:29.325656+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (40503, 40508, 'payment:isv', 'admin', 'WechatIsvAppManage', 'menu.payment.config.wechatApp', NULL, 't', 'f', '/payment/channel/wechat/manage/app/WechatIsvAppManage', '/payment/config/product/wechat-app-manage', NULL, 4, 'f', 't', 'f', 1, 1, 0, 'f', 'subpage', NULL, NULL, NULL, NULL, NULL, NULL, '2026-06-14 00:00:00+00', '2026-07-11 03:37:15.43231+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (40105, 4, 'payment:config:product-config', 'admin', 'ProductConfig', 'menu.payment.config.productConfig', 'lucide:layout-grid', 'f', 'f', '/payment/config/product/ProductConfig', '/payment/config/product', NULL, 2, 'f', 't', 'f', 1, 1, 0, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-06-13 00:00:00+00', '2026-07-13 13:02:20.703887+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (4040116, 401, 'payment:platform:provider', 'admin', 'PayProviderManage', 'menu.payment.platform.provider.manage', 'lucide:wallet', 'f', 'f', '/payment/masterdata/provider/PayProviderList', '/payment/platform/pay-provider', NULL, 0.5, 'f', 't', 'f', 1, 1, 0, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-06-17 10:00:31.640482+00', '2026-06-27 13:01:24.318649+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (603, 6, 'trade:refund', 'admin', 'RefundOrderList', 'menu.trade.refundOrder', 'lucide:rotate-ccw', 'f', 'f', '/payment/order/RefundOrderList', '/trade/refund-order', NULL, 2, 'f', 't', 'f', 1, 1, 0, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-03 16:00:00+00', '2026-07-17 06:18:15.476169+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (309, 308, 'system:notify:notice', 'admin', 'SystemNotify', 'menu.system.notify.notice', 'lucide:megaphone', 'f', 'f', '/system/notify/notice/NoticeList', '/system/notify/notice', NULL, 20, 'f', 't', 'f', 1, 1, 0, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, '2026-06-24 16:00:00+00', '2026-06-24 16:00:00+00', NULL); -INSERT INTO "public"."iam_perm_menu" VALUES (308, 3, 'system:notify', 'admin', 'SystemNotice', 'menu.system.notify', 'lucide:bell', 'f', 'f', NULL, '/system/notify', '/system/notify/notice', 20, 'f', 't', 'f', 1, 1, 0, 'f', 'catalog', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-01 07:16:30.927645+00', '2026-07-01 07:16:30.927645+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (40502, 40508, 'payment:isv', 'admin', 'AlipayIsvAppManage', 'menu.payment.config.alipayApp', NULL, 't', 'f', '/payment/channel/alipay/manage/app/AlipayIsvAppManage', '/payment/config/product/app-manage', NULL, 3, 'f', 't', 'f', 1, 1, 0, 'f', 'subpage', NULL, NULL, NULL, NULL, NULL, NULL, '2026-06-14 00:00:00+00', '2026-07-11 03:37:15.43231+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (4040119, 4040132, 'channel:app', 'admin', 'WechatIsvMchAppManage', 'menu.payment.merchant.channelMerchant.wechatIsvApp', NULL, 't', 'f', '/payment/channel/wechat/manage/mch/isv-app/WechatIsvMchAppManage', '/payment/global/channel-merchant/wechat-isv-mch-app-manage', NULL, 14, 'f', 't', 'f', 1, 1, 0, 'f', 'subpage', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-05 01:49:32.557374+00', '2026-07-11 03:37:15.430392+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (30403, 301, 'system:protocol', 'admin', 'UserProtocol', 'menu.system.basic.protocol', 'lucide:file-text', 'f', 'f', '/system/basic/protocol/UserProtocolList', '/system/basic/protocol', NULL, 2, 'f', 't', 'f', 1, 1, 1, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-06-24 10:32:13.183371+00', '2026-07-16 08:43:35.038937+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (803, 8, 'develop:auth', 'admin', 'ChannelAuth', 'menu.develop.auth', 'lucide:key-round', 'f', 'f', '/payment/develop/auth/ChannelAuth', '/develop/auth', NULL, 3, 'f', 't', 'f', 1, 1, 0, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-09 16:00:00+00', '2026-07-09 16:00:00+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (310, 308, 'system:notify:wechat-config', 'admin', 'WechatNotify', 'menu.system.notify.wechatConfig', 'lucide:message-circle', 'f', 'f', '/system/notify/wechat/index', '/system/notify/wechat', NULL, 30, 'f', 't', 'f', 1, 1, 0, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-09 00:00:00+00', '2026-07-09 00:00:00+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (4040121, 4040130, 'merchant:gateway-aggregate', 'admin', 'AggregateScanConfig', 'menu.payment.merchant.aggregateScan', NULL, 't', 'f', '/payment/merchant/aggregate/AggregateScanConfig', '/payment/merchant/aggregate', NULL, 3, 'f', 't', 'f', 1, 1, 1, 'f', 'subpage', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-11 03:00:13.374496+00', '2026-07-13 10:13:20.81126+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (4040130, 40401, NULL, 'admin', 'MchManageGroup', 'menu.payment.merchant.group.manage', 'lucide:settings-2', 't', 'f', NULL, NULL, NULL, 1, 'f', 'f', 'f', 1, 1, 0, 'f', 'subpage_group', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-11 03:37:15.421585+00', '2026-07-11 03:37:15.421585+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (4040131, 40401, NULL, 'admin', 'ChannelMerchantGroup', 'menu.payment.merchant.group.channelMerchant', 'lucide:repeat', 't', 'f', NULL, NULL, NULL, 2, 'f', 'f', 'f', 1, 1, 0, 'f', 'subpage_group', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-11 03:37:15.421585+00', '2026-07-11 03:37:15.421585+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (4040125, 4040130, 'merchant:gateway-code', 'admin', 'CodePayConfig', 'menu.payment.merchant.codePayConfig', NULL, 't', 'f', '/payment/merchant/code-config/CodePayConfig', '/payment/merchant/code-config', NULL, 4, 'f', 't', 'f', 1, 1, 0, 'f', 'subpage', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-15 09:03:23.606222+00', '2026-07-15 09:03:23.606222+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (3040101, 30401, 'system:security-config:system', 'admin', 'SystemSecurityConfig', 'menu.system.security.system', 'lucide:lock', 'f', 'f', '/system/config/security/SystemSecurityConfig', '/system/config/security/system', NULL, 1, 'f', 't', 'f', 1, 1, 0, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-16 07:31:19.446929+00', '2026-07-16 07:31:19.446929+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (4040120, 4040130, 'merchant:wx-verify', 'admin', 'MchWxDomainVerifyList', 'menu.payment.merchant.wxVerify', NULL, 't', 'f', '/payment/merchant/manage/wx-verify/MchWxDomainVerifyList', '/payment/merchant/manage/wx-verify', NULL, 20, 'f', 't', 'f', 1, 1, 0, 'f', 'subpage', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-09 16:00:00+00', '2026-07-11 03:37:15.424776+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (40501, 40105, 'payment:config:product-detail', 'admin', 'ProductDetailDispatch', 'menu.payment.config.detail', NULL, 't', 'f', '/payment/config/product/detail/ProductDetailDispatch', '/payment/product-detail', NULL, 2, 'f', 't', 'f', 1, 1, 0, 'f', 'subpage', NULL, NULL, NULL, NULL, NULL, NULL, '2026-06-14 00:00:00+00', '2026-06-27 13:01:24.321883+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (3040102, 30401, 'system:security-config:pay', 'admin', 'PaySecurityConfig', 'menu.system.security.pay', 'lucide:shield-alert', 'f', 'f', '/system/config/security/PaySecurityConfig', '/system/config/security/pay', NULL, 2, 'f', 't', 'f', 1, 1, 0, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-16 07:31:19.449836+00', '2026-07-16 07:31:19.449836+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (40504, 304, 'system:config:mobile-app', 'admin', 'MobileAppConfig', 'menu.system.config.mobileApp', 'lucide:smartphone', 'f', 'f', '/system/config/mobile-app/MobileAppConfig', '/system/config/mobile-app', NULL, 6, 'f', 't', 'f', 1, 1, 0, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-05 00:00:00+00', '2026-07-10 08:54:32.213917+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (40505, 40504, 'system:config:mobile-app-detail', 'admin', 'MobileAppDetail', 'menu.system.config.mobileAppDetail', NULL, 't', 'f', '/system/config/mobile-app/detail/MobileAppDetail', '/system/config/mobile-app/detail/:appType', NULL, 1, 'f', 't', 'f', 1, 1, 0, 'f', 'subpage', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-05 00:00:00+00', '2026-07-10 08:54:32.222476+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (4040123, 4040130, 'merchant:app:workbench', 'admin', 'MchAppWorkbench', 'menu.payment.merchant.appWorkbench', NULL, 't', 'f', '/payment/merchant/app/MchAppWorkbench', '/payment/merchant/app/manage', NULL, 11, 'f', 't', 'f', 1, 1, 1, 'f', 'subpage', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-11 08:00:00+00', '2026-07-11 08:00:00+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (40506, 40508, 'payment:isv', 'admin', 'LakalaManage', 'menu.payment.lakala.config', NULL, 't', 'f', '/payment/channel/lakala/manage/LakalaManage', '/payment/config/product/lakala-manage', NULL, 5, 'f', 't', 'f', 1, 1, 0, 'f', 'subpage', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-05 00:00:00+00', '2026-07-11 03:37:15.43231+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (4040132, 40401, NULL, 'admin', 'ChannelAppGroup', 'menu.payment.merchant.group.channelApp', 'lucide:layout-grid', 't', 'f', NULL, NULL, NULL, 3, 'f', 'f', 'f', 1, 1, 0, 'f', 'subpage_group', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-11 03:37:15.421585+00', '2026-07-13 10:13:20.804554+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (40508, 40105, NULL, 'admin', 'ChannelIsvConfigGroup', 'menu.payment.config.group.channelIsv', 'lucide:server', 't', 'f', NULL, NULL, NULL, 1, 'f', 'f', 'f', 1, 1, 0, 'f', 'subpage_group', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-11 03:37:15.421585+00', '2026-07-13 10:13:20.806797+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (4040122, 4040130, 'merchant:gateway-cashier', 'admin', 'CashierConfig', 'menu.payment.merchant.cashierConfig', NULL, 't', 'f', '/payment/merchant/cashier/CashierConfig', '/payment/merchant/cashier', NULL, 5, 'f', 't', 'f', 1, 1, 1, 'f', 'subpage', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-11 03:00:13.374496+00', '2026-07-15 09:03:23.614722+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (4040124, 4040130, 'merchant:easypay', 'admin', 'EasyPayConfig', 'menu.payment.merchant.easypay', NULL, 't', 'f', '/payment/merchant/easypay/EasyPayConfig', '/payment/merchant/easypay', NULL, 6, 'f', 't', 'f', 1, 1, 1, 'f', 'subpage', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-15 00:00:00+00', '2026-07-15 09:03:23.618+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (406, 4, 'payment:risk', 'admin', 'PaymentRisk', 'menu.payment.risk', 'lucide:shield-alert', 'f', 'f', NULL, '/payment/risk', NULL, 4, 'f', 't', 'f', 0, 1, 0, 'f', 'catalog', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-15 00:00:00+00', '2026-07-15 00:00:00+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (40601, 406, 'payment:risk:blacklist', 'admin', 'PayBlacklistList', 'menu.payment.risk.blacklist', 'lucide:ban', 'f', 'f', '/payment/risk/blacklist/PayBlacklistList', '/payment/risk/blacklist', NULL, 1, 'f', 't', 'f', 1, 1, 0, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-15 00:00:00+00', '2026-07-15 00:00:00+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (40602, 406, 'payment:risk:hit', 'admin', 'PayRiskHitList', 'menu.payment.risk.hit', 'lucide:triangle-alert', 'f', 'f', '/payment/risk/hit/PayRiskHitList', '/payment/risk/hit', NULL, 2, 'f', 't', 'f', 1, 1, 0, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-15 00:00:00+00', '2026-07-15 00:00:00+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (311, 3, 'system:sensitive', 'admin', 'SensitiveWord', 'menu.system.sensitive', 'lucide:shield-ban', 'f', 'f', NULL, '/system/sensitive', NULL, 15, 'f', 't', 'f', 1, 1, 0, 'f', 'catalog', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-16 00:40:06.501938+00', '2026-07-16 00:40:06.501938+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (31101, 311, 'system:sensitive-word', 'admin', 'SensitiveWordList', 'menu.system.sensitive.word', 'lucide:book-x', 'f', 'f', '/system/sensitive-word/SensitiveWordList', '/system/sensitive/word', NULL, 1, 'f', 't', 'f', 1, 1, 0, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-16 00:40:06.511319+00', '2026-07-16 00:40:06.511319+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (31102, 311, 'system:sensitive-word-hit', 'admin', 'SensitiveWordHitList', 'menu.system.sensitive.hit', 'lucide:scan-search', 'f', 'f', '/system/sensitive-word/SensitiveWordHitList', '/system/sensitive/hit', NULL, 2, 'f', 't', 'f', 1, 1, 0, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-16 00:40:06.51532+00', '2026-07-16 00:40:06.51532+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (40507, 405, 'payment:config:wx-verify', 'admin', 'PlatformWxDomainVerifyList', 'menu.payment.config.wxVerify', 'lucide:shield-check', 'f', 'f', '/payment/config/wx-verify/PlatformWxDomainVerifyList', '/payment/config/wx-verify', NULL, 3, 'f', 't', 'f', 1, 1, 1, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-09 16:00:00+00', '2026-07-16 08:43:35.047953+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (804, 8, 'develop:gateway', 'admin', 'DevelopGateway', 'menu.develop.gateway', 'lucide:store', 'f', 'f', '/payment/develop/gateway/DevelopGateway', '/develop/gateway', NULL, 4, 'f', 't', 'f', 1, 1, 0, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-16 16:00:00+00', '2026-07-16 16:00:00+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (40402, 404, 'channel:merchant', 'admin', 'ChannelMerchantGlobal', 'menu.payment.merchant.channelMerchant.global', 'lucide:repeat', 'f', 'f', '/payment/global/channel-merchant-global/ChannelMerchantGlobalList', '/payment/global/channel-merchants', NULL, 2, 'f', 't', 'f', 1, 1, 0, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-13 13:12:31.180398+00', '2026-07-13 13:12:31.180398+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (610, 6, 'trade:pay-order', 'admin', 'PayOrderCatalog', 'menu.trade.payOrder', 'lucide:receipt', 'f', 'f', NULL, '/trade/pay-order', '/trade/pay-order/normal', 3, 'f', 't', 'f', 1, 1, 0, 'f', 'catalog', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-17 06:18:15.454191+00', '2026-07-17 06:18:15.463823+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (604, 610, 'trade:gateway-order', 'admin', 'GatewayOrderList', 'menu.trade.gatewayOrder', 'lucide:store', 'f', 'f', '/payment/order/GatewayOrderList', '/trade/pay-order/gateway', NULL, 2, 'f', 't', 'f', 1, 1, 0, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-17 06:18:15.468829+00', '2026-07-17 06:18:15.47158+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (30203, 302, 'system:log:unipay', 'admin', 'SystemUnipayApiLog', 'menu.system.log.unipay', 'lucide:webhook', 'f', 'f', '/system/log/unipay/UnipayApiLogList', '/system/log/unipay', NULL, 3, 'f', 't', 'f', 0, 1, 1, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-17 00:00:00+00', '2026-07-17 00:00:00+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (905, 4040130, 'merchant:terminal', 'admin', 'SystemTerminalList', 'menu.payment.merchant.terminal', NULL, 't', 'f', '/payment/device/terminal/system/SystemTerminalList', '/payment/device/terminal/system', NULL, 16, 'f', 't', 'f', 1, 1, 0, 'f', 'subpage', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-17 00:00:00+00', '2026-07-17 00:00:00+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (607, NULL, 'trade:record', 'admin', 'TradeRecordCatalog', 'menu.trade.record', 'lucide:scroll-text', 'f', 'f', NULL, '/trade/record', '/trade/record/mch-notice', 4.5, 'f', 't', 'f', 1, 1, 0, 'f', 'catalog', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-21 06:30:00+00', '2026-07-21 06:45:00+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (605, 607, 'trade:mch-notice', 'admin', 'MchNoticeTaskList', 'menu.trade.mchNotice', 'lucide:bell-ring', 'f', 'f', '/payment/notice/MchNoticeTaskList', '/trade/record/mch-notice', NULL, 1, 'f', 't', 'f', 1, 1, 0, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-21 03:00:00+00', '2026-07-21 06:30:00+00'); -INSERT INTO "public"."iam_perm_menu" VALUES (606, 607, 'trade:callback-record', 'admin', 'PayCallbackRecordList', 'menu.trade.callbackRecord', 'lucide:inbox', 'f', 'f', '/payment/record/PayCallbackRecordList', '/trade/record/callback-record', NULL, 2, 'f', 't', 'f', 1, 1, 0, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-21 06:00:00+00', '2026-07-21 06:30:00+00'); - --- ---------------------------- --- Primary Key structure for table iam_perm_menu --- ---------------------------- -ALTER TABLE "public"."iam_perm_menu" ADD CONSTRAINT "iam_perm_menu_pkey" PRIMARY KEY ("id"); - --- 商户端仪表板(client_code=merchant) -INSERT INTO "public"."iam_perm_menu" VALUES (91001, NULL, NULL, 'merchant', 'Dashboard', 'menu.dashboard', 'lucide:layout-dashboard', 'f', 'f', NULL, '/dashboard', '/workspace', -1, 'f', 'f', 'f', 0, NULL, 0, 'f', 'catalog', NULL, NULL, NULL, NULL, NULL, NULL, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); -INSERT INTO "public"."iam_perm_menu" VALUES (91002, 91001, 'dashboard:workspace', 'merchant', 'Workspace', 'menu.dashboard.workspace', 'lucide:panels-top-left', 'f', 'f', '/dashboard/workspace/index', '/workspace', NULL, 1, 'f', 'f', 't', 0, 1, 1, 'f', 'menu', NULL, NULL, NULL, NULL, '', '', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); -INSERT INTO "public"."iam_perm_menu" VALUES (91003, 91001, 'dashboard:analytics', 'merchant', 'Analytics', 'menu.dashboard.analytics', 'lucide:area-chart', 'f', 'f', '/dashboard/analytics/index', '/analytics', NULL, 2, 'f', 'f', 'f', 0, 1, 1, 'f', 'menu', NULL, NULL, NULL, NULL, '', '', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); diff --git a/_config/sql/update-datas.sql b/_config/sql/update-datas.sql index 9d2fdfebb..e69de29bb 100644 --- a/_config/sql/update-datas.sql +++ b/_config/sql/update-datas.sql @@ -1,149 +0,0 @@ --- 增量数据脚本(PostgreSQL) --- 交易记录:提升为一级菜单(pid=NULL,紧挨交易管理之后) -INSERT INTO "public"."iam_perm_menu" VALUES (607, NULL, 'trade:record', 'admin', 'TradeRecordCatalog', 'menu.trade.record', 'lucide:scroll-text', 'f', 'f', NULL, '/trade/record', '/trade/record/mch-notice', 4.5, 'f', 't', 'f', 1, 1, 0, 'f', 'catalog', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-21 06:30:00+00', '2026-07-21 06:45:00+00') -ON CONFLICT ("id") DO UPDATE SET - "pid" = EXCLUDED."pid", - "menu_code" = EXCLUDED."menu_code", - "name" = EXCLUDED."name", - "i18n_key" = EXCLUDED."i18n_key", - "icon" = EXCLUDED."icon", - "path" = EXCLUDED."path", - "redirect" = EXCLUDED."redirect", - "sort_no" = EXCLUDED."sort_no", - "menu_type" = EXCLUDED."menu_type", - "deleted" = false, - "last_modified_time" = EXCLUDED."last_modified_time"; - --- 商户出站通知菜单(挂到交易记录目录) -INSERT INTO "public"."iam_perm_menu" VALUES (605, 607, 'trade:mch-notice', 'admin', 'MchNoticeTaskList', 'menu.trade.mchNotice', 'lucide:bell-ring', 'f', 'f', '/payment/notice/MchNoticeTaskList', '/trade/record/mch-notice', NULL, 1, 'f', 't', 'f', 1, 1, 0, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-21 03:00:00+00', '2026-07-21 06:30:00+00') -ON CONFLICT ("id") DO UPDATE SET - "pid" = EXCLUDED."pid", - "path" = EXCLUDED."path", - "sort_no" = EXCLUDED."sort_no", - "deleted" = false, - "last_modified_time" = EXCLUDED."last_modified_time"; - --- 通道入站回调记录菜单(挂到交易记录目录) -INSERT INTO "public"."iam_perm_menu" VALUES (606, 607, 'trade:callback-record', 'admin', 'PayCallbackRecordList', 'menu.trade.callbackRecord', 'lucide:inbox', 'f', 'f', '/payment/record/PayCallbackRecordList', '/trade/record/callback-record', NULL, 2, 'f', 't', 'f', 1, 1, 0, 'f', 'menu', NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-21 06:00:00+00', '2026-07-21 06:30:00+00') -ON CONFLICT ("id") DO UPDATE SET - "pid" = EXCLUDED."pid", - "path" = EXCLUDED."path", - "sort_no" = EXCLUDED."sort_no", - "deleted" = false, - "last_modified_time" = EXCLUDED."last_modified_time"; - --- 码牌管理迁入支付管理 -UPDATE "public"."iam_perm_menu" -SET "pid" = 4, - "sort_no" = 3, - "last_modified_time" = '2026-07-21 06:30:00+00' -WHERE "id" = 901; - --- 软删空壳设备管理目录,并清理角色菜单关联 -UPDATE "public"."iam_perm_menu" -SET "deleted" = true, - "last_modified_time" = '2026-07-21 06:30:00+00' -WHERE "id" = 9; - -DELETE FROM "public"."iam_role_menu" WHERE "menu_id" = 9; - --- ============================================================ --- Admin 前端路径结构治理:同步 iam_perm_menu.component / path --- (views 迁至 device/terminal/system、payment/route、payment/global/*、 --- system/config/mobile-app;已装库执行本段即可对齐菜单) --- ============================================================ - --- 系统终端 -UPDATE "public"."iam_perm_menu" -SET "component" = '/payment/device/terminal/system/SystemTerminalList', - "path" = '/payment/device/terminal/system', - "last_modified_time" = CURRENT_TIMESTAMP -WHERE "id" = 905; - --- 支付路由 -UPDATE "public"."iam_perm_menu" -SET "component" = '/payment/route/PayRouteConfig', - "path" = '/payment/route', - "last_modified_time" = CURRENT_TIMESTAMP -WHERE "id" = 4040111; - --- 通道商户列表(商户入口) -UPDATE "public"."iam_perm_menu" -SET "component" = '/payment/global/channel-merchant/ChannelMerchantList', - "path" = '/payment/global/channel-merchant', - "last_modified_time" = CURRENT_TIMESTAMP -WHERE "id" = 4040106; - --- 通道商户创建 -UPDATE "public"."iam_perm_menu" -SET "component" = '/payment/global/channel-merchant/ChannelMerchantCreate', - "path" = '/payment/global/channel-merchant/create', - "last_modified_time" = CURRENT_TIMESTAMP -WHERE "id" = 4040109; - --- 通道商户详情分发 -UPDATE "public"."iam_perm_menu" -SET "component" = '/payment/global/channel-merchant/detail/ChannelMerchantDetailDispatch', - "path" = '/payment/global/channel-merchant/detail', - "last_modified_time" = CURRENT_TIMESTAMP -WHERE "id" = 4040112; - --- 通道商户全局列表 -UPDATE "public"."iam_perm_menu" -SET "component" = '/payment/global/channel-merchant-global/ChannelMerchantGlobalList', - "path" = '/payment/global/channel-merchants', - "last_modified_time" = CURRENT_TIMESTAMP -WHERE "id" = 40402; - --- 通道应用子页:仅统一浏览器 path 前缀(component 仍指向 channel/{provider}) -UPDATE "public"."iam_perm_menu" -SET "path" = '/payment/global/channel-merchant/alipay-app-manage', - "last_modified_time" = CURRENT_TIMESTAMP -WHERE "id" = 4040114; - -UPDATE "public"."iam_perm_menu" -SET "path" = '/payment/global/channel-merchant/wechat-app-manage', - "last_modified_time" = CURRENT_TIMESTAMP -WHERE "id" = 4040113; - -UPDATE "public"."iam_perm_menu" -SET "path" = '/payment/global/channel-merchant/douyin-app-manage', - "last_modified_time" = CURRENT_TIMESTAMP -WHERE "id" = 4040115; - -UPDATE "public"."iam_perm_menu" -SET "path" = '/payment/global/channel-merchant/wechat-isv-mch-app-manage', - "last_modified_time" = CURRENT_TIMESTAMP -WHERE "id" = 4040119; - --- 移动端应用配置(目录 camelCase → kebab-case) -UPDATE "public"."iam_perm_menu" -SET "component" = '/system/config/mobile-app/MobileAppConfig', - "last_modified_time" = CURRENT_TIMESTAMP -WHERE "id" = 40504; - -UPDATE "public"."iam_perm_menu" -SET "component" = '/system/config/mobile-app/detail/MobileAppDetail', - "last_modified_time" = CURRENT_TIMESTAMP -WHERE "id" = 40505; - --- ========== 商户端仪表板菜单(client_code=merchant) ========== -INSERT INTO "public"."iam_perm_menu" VALUES (91001, NULL, NULL, 'merchant', 'Dashboard', 'menu.dashboard', 'lucide:layout-dashboard', 'f', 'f', NULL, '/dashboard', '/workspace', -1, 'f', 'f', 'f', 0, NULL, 0, 'f', 'catalog', NULL, NULL, NULL, NULL, NULL, NULL, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP) -ON CONFLICT ("id") DO NOTHING; -INSERT INTO "public"."iam_perm_menu" VALUES (91002, 91001, 'dashboard:workspace', 'merchant', 'Workspace', 'menu.dashboard.workspace', 'lucide:panels-top-left', 'f', 'f', '/dashboard/workspace/index', '/workspace', NULL, 1, 'f', 'f', 't', 0, 1, 1, 'f', 'menu', NULL, NULL, NULL, NULL, '', '', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP) -ON CONFLICT ("id") DO NOTHING; -INSERT INTO "public"."iam_perm_menu" VALUES (91003, 91001, 'dashboard:analytics', 'merchant', 'Analytics', 'menu.dashboard.analytics', 'lucide:area-chart', 'f', 'f', '/dashboard/analytics/index', '/analytics', NULL, 2, 'f', 'f', 'f', 0, 1, 1, 'f', 'menu', NULL, NULL, NULL, NULL, '', '', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP) -ON CONFLICT ("id") DO NOTHING; - --- 挂到所有 client_code=merchant 的角色(若尚无商户角色则无行;新建商户管理员角色时需勾选仪表板) -INSERT INTO "public"."iam_role_menu" ("id", "role_id", "menu_id") -SELECT ((EXTRACT(EPOCH FROM clock_timestamp()) * 1000)::bigint * 1000 + (row_number() OVER ())::bigint), - r."id", - m.menu_id -FROM "public"."iam_role" r -CROSS JOIN (VALUES (91001::bigint), (91002::bigint), (91003::bigint)) AS m(menu_id) -WHERE r."client_code" = 'merchant' - AND NOT EXISTS ( - SELECT 1 FROM "public"."iam_role_menu" rm - WHERE rm."role_id" = r."id" AND rm."menu_id" = m.menu_id - ); diff --git a/daxpay-payment/daxpay-payment-admin/pom.xml b/daxpay-payment/daxpay-payment-admin/pom.xml index 6c8730ee4..72431b523 100644 --- a/daxpay-payment/daxpay-payment-admin/pom.xml +++ b/daxpay-payment/daxpay-payment-admin/pom.xml @@ -34,7 +34,7 @@ service-notify ${project.version} - + org.mapstruct mapstruct diff --git a/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/controller/trade/NormalPayOrderAdminController.java b/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/controller/trade/NormalPayOrderAdminController.java index bf5cfbcb2..badaefac4 100644 --- a/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/controller/trade/NormalPayOrderAdminController.java +++ b/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/controller/trade/NormalPayOrderAdminController.java @@ -8,7 +8,7 @@ import cn.daxpay.open.platform.core.rest.result.PageResult; import cn.daxpay.open.platform.core.rest.result.Result; import cn.daxpay.open.payment.trade.order.param.NormalPayOrderQuery; import cn.daxpay.open.payment.trade.order.result.NormalPayOrderResult; -import cn.daxpay.open.payment.admin.service.trade.NormalPayOrderAdminService; +import cn.daxpay.open.payment.trade.order.service.NormalPayOrderService; import cn.daxpay.open.payment.unipay.result.trade.pay.NormalPaySyncResult; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -23,7 +23,7 @@ import org.springframework.web.bind.annotation.RestController; /// # 普通支付业务单(管理) /// -/// 面向运营/商户后台的业务订单(容器)管理: 分页查询、详情、状态同步、关闭/撤销 +/// 面向运营后台的业务订单(容器)管理。业务编排委托 core [NormalPayOrderService]。 @PermCode(menuCode = PermCodes.Trade.Order.MENU) @Validated @Tag(name = "普通支付业务单(管理)") @@ -32,13 +32,13 @@ import org.springframework.web.bind.annotation.RestController; @RequiredArgsConstructor public class NormalPayOrderAdminController { - private final NormalPayOrderAdminService normalPayOrderAdminService; + private final NormalPayOrderService normalPayOrderService; @PermCode(code = PermCodes.Action.VIEW) @Operation(summary = "普通支付业务单分页") @GetMapping("/page") public Result> page(PageParam pageParam, NormalPayOrderQuery query) { - return Res.ok(normalPayOrderAdminService.page(pageParam, query)); + return Res.ok(normalPayOrderService.page(pageParam, query)); } @PermCode(code = PermCodes.Action.VIEW) @@ -46,7 +46,7 @@ public class NormalPayOrderAdminController { @GetMapping("/get-by-id") public Result findById( @NotNull(message = "{validation.field.id.notNull}") Long id) { - return Res.ok(normalPayOrderAdminService.findById(id)); + return Res.ok(normalPayOrderService.findById(id)); } @PermCode(code = PermCodes.Action.MANAGE) @@ -54,7 +54,7 @@ public class NormalPayOrderAdminController { @PostMapping("/sync") public Result sync( @NotNull(message = "{validation.field.id.notNull}") Long id) { - return Res.ok(normalPayOrderAdminService.sync(id)); + return Res.ok(normalPayOrderService.sync(id)); } @PermCode(code = PermCodes.Action.MANAGE) @@ -63,7 +63,7 @@ public class NormalPayOrderAdminController { public Result close( @NotNull(message = "{validation.field.id.notNull}") Long id, @RequestParam(defaultValue = "false") boolean useCancel) { - normalPayOrderAdminService.close(id, useCancel); + normalPayOrderService.close(id, useCancel); return Res.ok(); } } diff --git a/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/controller/trade/PayTradeAdminController.java b/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/controller/trade/PayTradeAdminController.java index f12bea945..9ea84f57c 100644 --- a/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/controller/trade/PayTradeAdminController.java +++ b/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/controller/trade/PayTradeAdminController.java @@ -8,7 +8,7 @@ import cn.daxpay.open.platform.core.rest.result.PageResult; import cn.daxpay.open.platform.core.rest.result.Result; import cn.daxpay.open.payment.trade.order.param.PayTradeQuery; import cn.daxpay.open.payment.trade.order.result.PayTradeResult; -import cn.daxpay.open.payment.admin.service.trade.PayTradeAdminService; +import cn.daxpay.open.payment.trade.order.service.PayTradeService; import cn.daxpay.open.payment.unipay.result.trade.pay.NormalPaySyncResult; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -23,7 +23,8 @@ import org.springframework.web.bind.annotation.RestController; /// # 资金交易凭证(管理) /// -/// 面向运营/商户后台的资金交易(凭证)管理: 分页查询、详情、状态同步、关闭/撤销 +/// 面向运营后台的资金交易(凭证)管理: 分页查询、详情、状态同步、关闭/撤销。 +/// 业务编排委托 core [PayTradeService]。 @PermCode(menuCode = PermCodes.Trade.Fund.MENU) @Validated @Tag(name = "资金交易凭证(管理)") @@ -32,13 +33,13 @@ import org.springframework.web.bind.annotation.RestController; @RequiredArgsConstructor public class PayTradeAdminController { - private final PayTradeAdminService payTradeAdminService; + private final PayTradeService payTradeService; @PermCode(code = PermCodes.Action.VIEW) @Operation(summary = "资金交易凭证分页") @GetMapping("/page") public Result> page(PageParam pageParam, PayTradeQuery query) { - return Res.ok(payTradeAdminService.page(pageParam, query)); + return Res.ok(payTradeService.page(pageParam, query)); } @PermCode(code = PermCodes.Action.VIEW) @@ -46,7 +47,7 @@ public class PayTradeAdminController { @GetMapping("/get-by-id") public Result findById( @NotNull(message = "{validation.field.id.notNull}") Long id) { - return Res.ok(payTradeAdminService.findById(id)); + return Res.ok(payTradeService.findById(id)); } @PermCode(code = PermCodes.Action.MANAGE) @@ -54,7 +55,7 @@ public class PayTradeAdminController { @PostMapping("/sync") public Result sync( @NotNull(message = "{validation.field.id.notNull}") Long id) { - return Res.ok(payTradeAdminService.sync(id)); + return Res.ok(payTradeService.sync(id)); } @PermCode(code = PermCodes.Action.MANAGE) @@ -63,7 +64,7 @@ public class PayTradeAdminController { public Result close( @NotNull(message = "{validation.field.id.notNull}") Long id, @RequestParam(defaultValue = "false") boolean useCancel) { - payTradeAdminService.close(id, useCancel); + payTradeService.close(id, useCancel); return Res.ok(); } } diff --git a/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/controller/trade/RefundOrderAdminController.java b/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/controller/trade/RefundOrderAdminController.java index 3a73ef84e..cbd40af61 100644 --- a/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/controller/trade/RefundOrderAdminController.java +++ b/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/controller/trade/RefundOrderAdminController.java @@ -7,9 +7,9 @@ import cn.daxpay.open.platform.core.rest.param.PageParam; import cn.daxpay.open.platform.core.rest.result.PageResult; import cn.daxpay.open.platform.core.rest.result.Result; import cn.daxpay.open.payment.trade.order.param.RefundOrderQuery; -import cn.daxpay.open.payment.trade.runtime.param.RefundParam; import cn.daxpay.open.payment.trade.order.result.RefundOrderResult; -import cn.daxpay.open.payment.admin.service.trade.RefundOrderAdminService; +import cn.daxpay.open.payment.trade.order.service.RefundOrderService; +import cn.daxpay.open.payment.trade.runtime.param.RefundParam; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; @@ -24,7 +24,7 @@ import org.springframework.web.bind.annotation.RestController; /// # 退款订单(管理) /// -/// 面向运营/商户后台的退款订单管理: 分页查询、详情、发起退款、退款状态同步 +/// 面向运营后台的退款订单管理。业务编排委托 core [RefundOrderService]。 @PermCode(menuCode = PermCodes.Trade.Refund.MENU) @Validated @Tag(name = "退款订单(管理)") @@ -33,13 +33,13 @@ import org.springframework.web.bind.annotation.RestController; @RequiredArgsConstructor public class RefundOrderAdminController { - private final RefundOrderAdminService refundOrderAdminService; + private final RefundOrderService refundOrderService; @PermCode(code = PermCodes.Action.VIEW) @Operation(summary = "退款订单分页") @GetMapping("/page") public Result> page(PageParam pageParam, RefundOrderQuery query) { - return Res.ok(refundOrderAdminService.page(pageParam, query)); + return Res.ok(refundOrderService.page(pageParam, query)); } @PermCode(code = PermCodes.Action.VIEW) @@ -47,14 +47,14 @@ public class RefundOrderAdminController { @GetMapping("/get-by-id") public Result findById( @NotNull(message = "{validation.field.id.notNull}") Long id) { - return Res.ok(refundOrderAdminService.findById(id)); + return Res.ok(refundOrderService.findById(id)); } @PermCode(code = PermCodes.Action.MANAGE) @Operation(summary = "发起退款") @PostMapping("/refund") public Result refund(@Valid @RequestBody RefundParam param) { - return Res.ok(refundOrderAdminService.refund(param)); + return Res.ok(refundOrderService.refund(param)); } @PermCode(code = PermCodes.Action.MANAGE) @@ -62,6 +62,6 @@ public class RefundOrderAdminController { @PostMapping("/sync") public Result sync( @NotNull(message = "{validation.field.id.notNull}") Long id) { - return Res.ok(refundOrderAdminService.sync(id)); + return Res.ok(refundOrderService.sync(id)); } } diff --git a/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/convert/trade/PayTradeAdminConvert.java b/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/convert/trade/PayTradeAdminConvert.java deleted file mode 100644 index 2f0006824..000000000 --- a/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/convert/trade/PayTradeAdminConvert.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.daxpay.open.payment.admin.convert.trade; - -import cn.daxpay.open.payment.trade.order.entity.PayTrade; -import cn.daxpay.open.payment.trade.order.result.PayTradeResult; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; -import org.mapstruct.ReportingPolicy; - -/// # 资金交易凭证转换器(管理) -/// -/// 仅做凭证(PayTrade)到列表 Result 的映射; -/// 详情场景的容器(NormalPayOrder)字段由 Service 层手动补充, 避免多参数源同名字段歧义 -@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE) -public interface PayTradeAdminConvert { - - PayTradeAdminConvert CONVERT = Mappers.getMapper(PayTradeAdminConvert.class); - - /// PayTrade → Result (列表用, 不含容器字段) - PayTradeResult toResult(PayTrade entity); -} diff --git a/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/service/trade/GatewayPayOrderAdminService.java b/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/service/trade/GatewayPayOrderAdminService.java index 548103205..d1cd5a1c3 100644 --- a/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/service/trade/GatewayPayOrderAdminService.java +++ b/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/service/trade/GatewayPayOrderAdminService.java @@ -9,6 +9,7 @@ import cn.daxpay.open.payment.trade.order.entity.GatewayPayOrder; import cn.daxpay.open.payment.trade.order.entity.PayTrade; import cn.daxpay.open.payment.trade.order.param.GatewayPayOrderQuery; import cn.daxpay.open.payment.trade.order.result.GatewayPayOrderResult; +import cn.daxpay.open.payment.trade.order.service.TradeOrderDetailAssembler; import cn.daxpay.open.payment.trade.runtime.service.close.PayCloseService; import cn.daxpay.open.payment.trade.runtime.service.sync.PaySyncService; import cn.daxpay.open.payment.trade.runtime.service.pay.common.PayUniHandleService; diff --git a/daxpay-payment/daxpay-payment-core/src/main/java/cn/daxpay/open/payment/trade/order/convert/PayTradeResultConvert.java b/daxpay-payment/daxpay-payment-core/src/main/java/cn/daxpay/open/payment/trade/order/convert/PayTradeResultConvert.java new file mode 100644 index 000000000..a058eb5c6 --- /dev/null +++ b/daxpay-payment/daxpay-payment-core/src/main/java/cn/daxpay/open/payment/trade/order/convert/PayTradeResultConvert.java @@ -0,0 +1,20 @@ +package cn.daxpay.open.payment.trade.order.convert; + +import cn.daxpay.open.payment.trade.order.entity.PayTrade; +import cn.daxpay.open.payment.trade.order.result.PayTradeResult; +import org.mapstruct.Mapper; +import org.mapstruct.ReportingPolicy; +import org.mapstruct.factory.Mappers; + +/// # 资金交易凭证 → 管理端 Result 转换器 +/// +/// 仅做凭证(PayTrade)到列表 Result 的同名映射; +/// 详情场景的容器字段由 [TradeOrderDetailAssembler] 补充, 避免多参数源同名字段歧义 +@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE) +public interface PayTradeResultConvert { + + PayTradeResultConvert CONVERT = Mappers.getMapper(PayTradeResultConvert.class); + + /// PayTrade → Result (列表用, 不含容器字段) + PayTradeResult toResult(PayTrade entity); +} diff --git a/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/service/trade/NormalPayOrderAdminService.java b/daxpay-payment/daxpay-payment-core/src/main/java/cn/daxpay/open/payment/trade/order/service/NormalPayOrderService.java similarity index 76% rename from daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/service/trade/NormalPayOrderAdminService.java rename to daxpay-payment/daxpay-payment-core/src/main/java/cn/daxpay/open/payment/trade/order/service/NormalPayOrderService.java index 34a9d7c53..d9e322dfb 100644 --- a/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/service/trade/NormalPayOrderAdminService.java +++ b/daxpay-payment/daxpay-payment-core/src/main/java/cn/daxpay/open/payment/trade/order/service/NormalPayOrderService.java @@ -1,9 +1,11 @@ -package cn.daxpay.open.payment.admin.service.trade; +package cn.daxpay.open.payment.trade.order.service; import cn.daxpay.open.platform.common.translate.service.TransService; +import cn.daxpay.open.platform.core.enums.client.ClientEnum; import cn.daxpay.open.platform.core.exception.DataNotExistException; import cn.daxpay.open.platform.core.rest.param.PageParam; import cn.daxpay.open.platform.core.rest.result.PageResult; +import cn.daxpay.open.platform.iam.service.client.ClientCodeService; import cn.daxpay.open.payment.trade.enums.PayTradeTypeEnum; import cn.daxpay.open.payment.trade.order.convert.NormalPayOrderConvert; import cn.daxpay.open.payment.trade.order.dao.NormalPayOrderManager; @@ -20,14 +22,13 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -/// # 普通支付业务单管理服务(管理端) +/// # 普通支付业务单共享服务 /// -/// 提供业务订单(容器)的分页/详情查询, 以及状态同步、关闭/撤销管理操作。 -/// 详情场景由 [TradeOrderDetailAssembler] 联表资金凭证补充交易字段。 +/// 运营端 / 商户端共用。勿与 unipay 的 NormalPayOrderQueryService(对外开放查单)混淆。 @Slf4j @Service @RequiredArgsConstructor -public class NormalPayOrderAdminService { +public class NormalPayOrderService { private final NormalPayOrderManager normalPayOrderManager; private final PayTradeManager payTradeManager; @@ -35,9 +36,11 @@ public class NormalPayOrderAdminService { private final PayCloseService payCloseService; private final TransService transService; private final TradeOrderDetailAssembler tradeOrderDetailAssembler; + private final ClientCodeService clientCodeService; /// 分页查询 public PageResult page(PageParam pageParam, NormalPayOrderQuery query) { + sanitizeQuery(query); Page page = normalPayOrderManager.page(pageParam, query); var records = page.getRecords().stream() .map(NormalPayOrderConvert.CONVERT::toResult) @@ -47,8 +50,7 @@ public class NormalPayOrderAdminService { .setTotal(page.getTotal()) .setSize(page.getSize()) .setCurrent(page.getCurrent()); - // 翻译商户名称(mchNo -> mchName) - transService.translate(pageResult); + translateIfAdmin(pageResult); return pageResult; } @@ -58,8 +60,7 @@ public class NormalPayOrderAdminService { .orElseThrow(() -> new DataNotExistException("pay.error.payOrderNotExist")); NormalPayOrderResult result = NormalPayOrderConvert.CONVERT.toResult(entity); tradeOrderDetailAssembler.fillFundOnNormal(result, id); - // 翻译商户名称 - transService.translate(result); + translateIfAdmin(result); return result; } @@ -76,4 +77,20 @@ public class NormalPayOrderAdminService { .orElseThrow(() -> new DataNotExistException("pay.error.payOrderNotExist")); payCloseService.closeOrder(trade, useCancel); } + + private void sanitizeQuery(NormalPayOrderQuery query) { + if (query == null) { + return; + } + if (ClientEnum.MERCHANT.getCode().equals(clientCodeService.getClientCode())) { + query.setMchNo(null); + } + } + + private void translateIfAdmin(Object target) { + if (ClientEnum.ADMIN.getCode().equals(clientCodeService.getClientCode())) { + // 翻译商户名称(mchNo -> mchName) + transService.translate(target); + } + } } diff --git a/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/service/trade/PayTradeAdminService.java b/daxpay-payment/daxpay-payment-core/src/main/java/cn/daxpay/open/payment/trade/order/service/PayTradeService.java similarity index 66% rename from daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/service/trade/PayTradeAdminService.java rename to daxpay-payment/daxpay-payment-core/src/main/java/cn/daxpay/open/payment/trade/order/service/PayTradeService.java index 4d69b8418..e156fbcbe 100644 --- a/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/service/trade/PayTradeAdminService.java +++ b/daxpay-payment/daxpay-payment-core/src/main/java/cn/daxpay/open/payment/trade/order/service/PayTradeService.java @@ -1,10 +1,12 @@ -package cn.daxpay.open.payment.admin.service.trade; +package cn.daxpay.open.payment.trade.order.service; import cn.daxpay.open.platform.common.translate.service.TransService; +import cn.daxpay.open.platform.core.enums.client.ClientEnum; import cn.daxpay.open.platform.core.exception.DataNotExistException; import cn.daxpay.open.platform.core.rest.param.PageParam; import cn.daxpay.open.platform.core.rest.result.PageResult; -import cn.daxpay.open.payment.admin.convert.trade.PayTradeAdminConvert; +import cn.daxpay.open.platform.iam.service.client.ClientCodeService; +import cn.daxpay.open.payment.trade.order.convert.PayTradeResultConvert; import cn.daxpay.open.payment.trade.order.dao.PayTradeManager; import cn.daxpay.open.payment.trade.order.entity.PayTrade; import cn.daxpay.open.payment.trade.order.param.PayTradeQuery; @@ -17,34 +19,35 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -/// # 资金交易凭证管理服务(管理端) +/// # 资金交易凭证共享服务 /// -/// 提供资金交易(凭证)的分页/详情查询, 以及状态同步、关闭/撤销管理操作。 -/// 详情场景由 [TradeOrderDetailAssembler] 按 tradeType 联表容器补充业务字段。 +/// 运营端 / 商户端共用:分页、详情、同步、关闭。 +/// 商户端强制清空入参 mchNo(行级隔离依赖 TenantLine);运营端保留跨商户筛选并 translate mchName。 @Slf4j @Service @RequiredArgsConstructor -public class PayTradeAdminService { +public class PayTradeService { private final PayTradeManager payTradeManager; private final PaySyncService paySyncService; private final PayCloseService payCloseService; private final TransService transService; private final TradeOrderDetailAssembler tradeOrderDetailAssembler; + private final ClientCodeService clientCodeService; /// 分页查询 public PageResult page(PageParam pageParam, PayTradeQuery query) { + sanitizeQuery(query); Page page = payTradeManager.page(pageParam, query); var records = page.getRecords().stream() - .map(PayTradeAdminConvert.CONVERT::toResult) + .map(PayTradeResultConvert.CONVERT::toResult) .toList(); PageResult pageResult = new PageResult() .setRecords(records) .setTotal(page.getTotal()) .setSize(page.getSize()) .setCurrent(page.getCurrent()); - // 翻译商户名称(mchNo -> mchName) - transService.translate(pageResult); + translateIfAdmin(pageResult); return pageResult; } @@ -52,10 +55,9 @@ public class PayTradeAdminService { public PayTradeResult findById(Long id) { PayTrade entity = payTradeManager.findById(id) .orElseThrow(() -> new DataNotExistException("pay.error.payOrderNotExist")); - PayTradeResult result = PayTradeAdminConvert.CONVERT.toResult(entity); + PayTradeResult result = PayTradeResultConvert.CONVERT.toResult(entity); tradeOrderDetailAssembler.fillContainerOnTrade(result, entity); - // 翻译商户名称 - transService.translate(result); + translateIfAdmin(result); return result; } @@ -72,4 +74,21 @@ public class PayTradeAdminService { .orElseThrow(() -> new DataNotExistException("pay.error.payOrderNotExist")); payCloseService.closeOrder(trade, useCancel); } + + /// 商户端忽略入参 mchNo,避免越权指定他商户 + private void sanitizeQuery(PayTradeQuery query) { + if (query == null) { + return; + } + if (ClientEnum.MERCHANT.getCode().equals(clientCodeService.getClientCode())) { + query.setMchNo(null); + } + } + + private void translateIfAdmin(Object target) { + if (ClientEnum.ADMIN.getCode().equals(clientCodeService.getClientCode())) { + // 翻译商户名称(mchNo -> mchName) + transService.translate(target); + } + } } diff --git a/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/service/trade/RefundOrderAdminService.java b/daxpay-payment/daxpay-payment-core/src/main/java/cn/daxpay/open/payment/trade/order/service/RefundOrderService.java similarity index 71% rename from daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/service/trade/RefundOrderAdminService.java rename to daxpay-payment/daxpay-payment-core/src/main/java/cn/daxpay/open/payment/trade/order/service/RefundOrderService.java index 2a367bd80..c8ebe2cba 100644 --- a/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/service/trade/RefundOrderAdminService.java +++ b/daxpay-payment/daxpay-payment-core/src/main/java/cn/daxpay/open/payment/trade/order/service/RefundOrderService.java @@ -1,15 +1,17 @@ -package cn.daxpay.open.payment.admin.service.trade; +package cn.daxpay.open.payment.trade.order.service; import cn.daxpay.open.platform.common.translate.service.TransService; +import cn.daxpay.open.platform.core.enums.client.ClientEnum; import cn.daxpay.open.platform.core.exception.DataNotExistException; import cn.daxpay.open.platform.core.rest.param.PageParam; import cn.daxpay.open.platform.core.rest.result.PageResult; +import cn.daxpay.open.platform.iam.service.client.ClientCodeService; import cn.daxpay.open.payment.trade.order.convert.RefundOrderConvert; import cn.daxpay.open.payment.trade.order.dao.RefundOrderManager; import cn.daxpay.open.payment.trade.order.entity.RefundOrder; import cn.daxpay.open.payment.trade.order.param.RefundOrderQuery; -import cn.daxpay.open.payment.trade.runtime.param.RefundParam; import cn.daxpay.open.payment.trade.order.result.RefundOrderResult; +import cn.daxpay.open.payment.trade.runtime.param.RefundParam; import cn.daxpay.open.payment.trade.runtime.service.refund.RefundService; import cn.daxpay.open.payment.trade.runtime.service.refund.RefundSyncService; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -17,21 +19,23 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -/// # 退款订单管理服务(管理端) +/// # 退款订单共享服务(管理端查询/编排) /// -/// 提供退款订单的分页/详情查询, 以及发起退款、退款状态同步操作。 +/// 运营端 / 商户端共用。与 runtime [RefundService](退款引擎)职责不同。 @Slf4j @Service @RequiredArgsConstructor -public class RefundOrderAdminService { +public class RefundOrderService { private final RefundOrderManager refundOrderManager; private final RefundService refundService; private final RefundSyncService refundSyncService; private final TransService transService; + private final ClientCodeService clientCodeService; /// 分页查询 public PageResult page(PageParam pageParam, RefundOrderQuery query) { + sanitizeQuery(query); Page page = refundOrderManager.page(pageParam, query); var records = page.getRecords().stream() .map(RefundOrderConvert.CONVERT::toResult) @@ -41,8 +45,7 @@ public class RefundOrderAdminService { .setTotal(page.getTotal()) .setSize(page.getSize()) .setCurrent(page.getCurrent()); - // 翻译商户名称(mchNo -> mchName) - transService.translate(pageResult); + translateIfAdmin(pageResult); return pageResult; } @@ -51,8 +54,7 @@ public class RefundOrderAdminService { RefundOrder entity = refundOrderManager.findById(id) .orElseThrow(() -> new DataNotExistException("pay.error.refund.orderNotFound")); RefundOrderResult result = RefundOrderConvert.CONVERT.toResult(entity); - // 翻译商户名称 - transService.translate(result); + translateIfAdmin(result); return result; } @@ -60,8 +62,7 @@ public class RefundOrderAdminService { public RefundOrderResult refund(RefundParam param) { RefundOrder refundOrder = refundService.refund(param); RefundOrderResult result = RefundOrderConvert.CONVERT.toResult(refundOrder); - // 翻译商户名称 - transService.translate(result); + translateIfAdmin(result); return result; } @@ -69,8 +70,23 @@ public class RefundOrderAdminService { public RefundOrderResult sync(Long id) { RefundOrder refundOrder = refundSyncService.syncById(id); RefundOrderResult result = RefundOrderConvert.CONVERT.toResult(refundOrder); - // 翻译商户名称 - transService.translate(result); + translateIfAdmin(result); return result; } + + private void sanitizeQuery(RefundOrderQuery query) { + if (query == null) { + return; + } + if (ClientEnum.MERCHANT.getCode().equals(clientCodeService.getClientCode())) { + query.setMchNo(null); + } + } + + private void translateIfAdmin(Object target) { + if (ClientEnum.ADMIN.getCode().equals(clientCodeService.getClientCode())) { + // 翻译商户名称(mchNo -> mchName) + transService.translate(target); + } + } } diff --git a/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/service/trade/TradeOrderDetailAssembler.java b/daxpay-payment/daxpay-payment-core/src/main/java/cn/daxpay/open/payment/trade/order/service/TradeOrderDetailAssembler.java similarity index 97% rename from daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/service/trade/TradeOrderDetailAssembler.java rename to daxpay-payment/daxpay-payment-core/src/main/java/cn/daxpay/open/payment/trade/order/service/TradeOrderDetailAssembler.java index cf76d1496..088bf4606 100644 --- a/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/service/trade/TradeOrderDetailAssembler.java +++ b/daxpay-payment/daxpay-payment-core/src/main/java/cn/daxpay/open/payment/trade/order/service/TradeOrderDetailAssembler.java @@ -1,4 +1,4 @@ -package cn.daxpay.open.payment.admin.service.trade; +package cn.daxpay.open.payment.trade.order.service; import cn.daxpay.open.payment.trade.enums.PayTradeTypeEnum; import cn.daxpay.open.payment.trade.order.dao.GatewayPayOrderManager; @@ -17,9 +17,11 @@ import java.util.Objects; /// # 交易订单详情组装器 /// -/// 列表场景仅单表 Convert;详情场景在此按 tradeType 补对侧字段,避免 AdminService 重复手写 setter。 +/// 列表场景仅单表 Convert;详情场景在此按 tradeType 补对侧字段。 /// - 容器详情 → 补资金凭证字段 /// - 资金详情 → 按 [PayTrade#getTradeType] 加载容器补业务字段 +/// +/// 供运营端 / 商户端共享(下沉自 payment-admin) @Component @RequiredArgsConstructor public class TradeOrderDetailAssembler { diff --git a/daxpay-payment/daxpay-payment-merchant/src/main/java/cn/daxpay/open/payment/merchant/controller/trade/MchNormalPayOrderController.java b/daxpay-payment/daxpay-payment-merchant/src/main/java/cn/daxpay/open/payment/merchant/controller/trade/MchNormalPayOrderController.java new file mode 100644 index 000000000..2be01acf1 --- /dev/null +++ b/daxpay-payment/daxpay-payment-merchant/src/main/java/cn/daxpay/open/payment/merchant/controller/trade/MchNormalPayOrderController.java @@ -0,0 +1,69 @@ +package cn.daxpay.open.payment.merchant.controller.trade; + +import cn.daxpay.open.platform.core.annotation.PermCode; +import cn.daxpay.open.platform.core.code.PermCodes; +import cn.daxpay.open.platform.core.rest.Res; +import cn.daxpay.open.platform.core.rest.param.PageParam; +import cn.daxpay.open.platform.core.rest.result.PageResult; +import cn.daxpay.open.platform.core.rest.result.Result; +import cn.daxpay.open.payment.trade.order.param.NormalPayOrderQuery; +import cn.daxpay.open.payment.trade.order.result.NormalPayOrderResult; +import cn.daxpay.open.payment.trade.order.service.NormalPayOrderService; +import cn.daxpay.open.payment.unipay.result.trade.pay.NormalPaySyncResult; +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.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.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +/// # 普通支付业务单(商户端) +/// +/// 业务编排委托 core [NormalPayOrderService]。 +@PermCode(menuCode = PermCodes.Trade.Order.MENU) +@Validated +@Tag(name = "普通支付业务单(商户端)") +@RestController +@RequestMapping("/mch/order/normal-pay") +@RequiredArgsConstructor +public class MchNormalPayOrderController { + + private final NormalPayOrderService normalPayOrderService; + + @PermCode(code = PermCodes.Action.VIEW) + @Operation(summary = "普通支付业务单分页") + @GetMapping("/page") + public Result> page(PageParam pageParam, NormalPayOrderQuery query) { + return Res.ok(normalPayOrderService.page(pageParam, query)); + } + + @PermCode(code = PermCodes.Action.VIEW) + @Operation(summary = "根据ID查询普通支付业务单详情") + @GetMapping("/get-by-id") + public Result findById( + @NotNull(message = "{validation.field.id.notNull}") Long id) { + return Res.ok(normalPayOrderService.findById(id)); + } + + @PermCode(code = PermCodes.Action.MANAGE) + @Operation(summary = "同步支付状态") + @PostMapping("/sync") + public Result sync( + @NotNull(message = "{validation.field.id.notNull}") Long id) { + return Res.ok(normalPayOrderService.sync(id)); + } + + @PermCode(code = PermCodes.Action.MANAGE) + @Operation(summary = "关闭/撤销订单") + @PostMapping("/close") + public Result close( + @NotNull(message = "{validation.field.id.notNull}") Long id, + @RequestParam(defaultValue = "false") boolean useCancel) { + normalPayOrderService.close(id, useCancel); + return Res.ok(); + } +} diff --git a/daxpay-payment/daxpay-payment-merchant/src/main/java/cn/daxpay/open/payment/merchant/controller/trade/MchPayTradeController.java b/daxpay-payment/daxpay-payment-merchant/src/main/java/cn/daxpay/open/payment/merchant/controller/trade/MchPayTradeController.java index 0e00ca006..ecef9cd4c 100644 --- a/daxpay-payment/daxpay-payment-merchant/src/main/java/cn/daxpay/open/payment/merchant/controller/trade/MchPayTradeController.java +++ b/daxpay-payment/daxpay-payment-merchant/src/main/java/cn/daxpay/open/payment/merchant/controller/trade/MchPayTradeController.java @@ -1,23 +1,30 @@ package cn.daxpay.open.payment.merchant.controller.trade; +import cn.daxpay.open.platform.core.annotation.PermCode; +import cn.daxpay.open.platform.core.code.PermCodes; import cn.daxpay.open.platform.core.rest.Res; import cn.daxpay.open.platform.core.rest.param.PageParam; import cn.daxpay.open.platform.core.rest.result.PageResult; import cn.daxpay.open.platform.core.rest.result.Result; -import cn.daxpay.open.payment.merchant.service.trade.MchPayTradeService; import cn.daxpay.open.payment.trade.order.param.PayTradeQuery; import cn.daxpay.open.payment.trade.order.result.PayTradeResult; +import cn.daxpay.open.payment.trade.order.service.PayTradeService; +import cn.daxpay.open.payment.unipay.result.trade.pay.NormalPaySyncResult; 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.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.RequestParam; import org.springframework.web.bind.annotation.RestController; /// # 资金交易凭证(商户端) /// -/// 工作台「最近资金交易」等只读列表;完整订单管理页后续再挂菜单。 +/// 业务编排委托 core [PayTradeService];行级隔离依赖 TenantLine。 +@PermCode(menuCode = PermCodes.Trade.Fund.MENU) @Validated @Tag(name = "资金交易凭证(商户端)") @RestController @@ -25,11 +32,38 @@ import org.springframework.web.bind.annotation.RestController; @RequiredArgsConstructor public class MchPayTradeController { - private final MchPayTradeService mchPayTradeService; + private final PayTradeService payTradeService; + @PermCode(code = PermCodes.Action.VIEW) @Operation(summary = "资金交易凭证分页") @GetMapping("/page") public Result> page(PageParam pageParam, PayTradeQuery query) { - return Res.ok(mchPayTradeService.page(pageParam, query)); + return Res.ok(payTradeService.page(pageParam, query)); + } + + @PermCode(code = PermCodes.Action.VIEW) + @Operation(summary = "根据ID查询资金交易凭证详情") + @GetMapping("/get-by-id") + public Result findById( + @NotNull(message = "{validation.field.id.notNull}") Long id) { + return Res.ok(payTradeService.findById(id)); + } + + @PermCode(code = PermCodes.Action.MANAGE) + @Operation(summary = "同步支付状态") + @PostMapping("/sync") + public Result sync( + @NotNull(message = "{validation.field.id.notNull}") Long id) { + return Res.ok(payTradeService.sync(id)); + } + + @PermCode(code = PermCodes.Action.MANAGE) + @Operation(summary = "关闭/撤销订单") + @PostMapping("/close") + public Result close( + @NotNull(message = "{validation.field.id.notNull}") Long id, + @RequestParam(defaultValue = "false") boolean useCancel) { + payTradeService.close(id, useCancel); + return Res.ok(); } } diff --git a/daxpay-payment/daxpay-payment-merchant/src/main/java/cn/daxpay/open/payment/merchant/controller/trade/MchRefundOrderController.java b/daxpay-payment/daxpay-payment-merchant/src/main/java/cn/daxpay/open/payment/merchant/controller/trade/MchRefundOrderController.java new file mode 100644 index 000000000..3d13fe1a2 --- /dev/null +++ b/daxpay-payment/daxpay-payment-merchant/src/main/java/cn/daxpay/open/payment/merchant/controller/trade/MchRefundOrderController.java @@ -0,0 +1,67 @@ +package cn.daxpay.open.payment.merchant.controller.trade; + +import cn.daxpay.open.platform.core.annotation.PermCode; +import cn.daxpay.open.platform.core.code.PermCodes; +import cn.daxpay.open.platform.core.rest.Res; +import cn.daxpay.open.platform.core.rest.param.PageParam; +import cn.daxpay.open.platform.core.rest.result.PageResult; +import cn.daxpay.open.platform.core.rest.result.Result; +import cn.daxpay.open.payment.trade.order.param.RefundOrderQuery; +import cn.daxpay.open.payment.trade.order.result.RefundOrderResult; +import cn.daxpay.open.payment.trade.order.service.RefundOrderService; +import cn.daxpay.open.payment.trade.runtime.param.RefundParam; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +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.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/// # 退款订单(商户端) +/// +/// 业务编排委托 core [RefundOrderService]。 +@PermCode(menuCode = PermCodes.Trade.Refund.MENU) +@Validated +@Tag(name = "退款订单(商户端)") +@RestController +@RequestMapping("/mch/order/refund") +@RequiredArgsConstructor +public class MchRefundOrderController { + + private final RefundOrderService refundOrderService; + + @PermCode(code = PermCodes.Action.VIEW) + @Operation(summary = "退款订单分页") + @GetMapping("/page") + public Result> page(PageParam pageParam, RefundOrderQuery query) { + return Res.ok(refundOrderService.page(pageParam, query)); + } + + @PermCode(code = PermCodes.Action.VIEW) + @Operation(summary = "根据ID查询退款订单详情") + @GetMapping("/get-by-id") + public Result findById( + @NotNull(message = "{validation.field.id.notNull}") Long id) { + return Res.ok(refundOrderService.findById(id)); + } + + @PermCode(code = PermCodes.Action.MANAGE) + @Operation(summary = "发起退款") + @PostMapping("/refund") + public Result refund(@Valid @RequestBody RefundParam param) { + return Res.ok(refundOrderService.refund(param)); + } + + @PermCode(code = PermCodes.Action.MANAGE) + @Operation(summary = "同步退款状态") + @PostMapping("/sync") + public Result sync( + @NotNull(message = "{validation.field.id.notNull}") Long id) { + return Res.ok(refundOrderService.sync(id)); + } +} diff --git a/daxpay-payment/daxpay-payment-merchant/src/main/java/cn/daxpay/open/payment/merchant/convert/trade/MchPayTradeConvert.java b/daxpay-payment/daxpay-payment-merchant/src/main/java/cn/daxpay/open/payment/merchant/convert/trade/MchPayTradeConvert.java deleted file mode 100644 index e541afa74..000000000 --- a/daxpay-payment/daxpay-payment-merchant/src/main/java/cn/daxpay/open/payment/merchant/convert/trade/MchPayTradeConvert.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.daxpay.open.payment.merchant.convert.trade; - -import cn.daxpay.open.payment.trade.order.entity.PayTrade; -import cn.daxpay.open.payment.trade.order.result.PayTradeResult; -import org.mapstruct.Mapper; -import org.mapstruct.ReportingPolicy; -import org.mapstruct.factory.Mappers; - -/// # 资金交易凭证转换器(商户端) -/// -/// 列表页同名映射;详情联表由后续订单页再补 -@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE) -public interface MchPayTradeConvert { - - MchPayTradeConvert CONVERT = Mappers.getMapper(MchPayTradeConvert.class); - - /// PayTrade → Result(工作台最近交易列表) - PayTradeResult toResult(PayTrade entity); -} diff --git a/daxpay-payment/daxpay-payment-merchant/src/main/java/cn/daxpay/open/payment/merchant/service/trade/MchPayTradeService.java b/daxpay-payment/daxpay-payment-merchant/src/main/java/cn/daxpay/open/payment/merchant/service/trade/MchPayTradeService.java deleted file mode 100644 index 8c931fefb..000000000 --- a/daxpay-payment/daxpay-payment-merchant/src/main/java/cn/daxpay/open/payment/merchant/service/trade/MchPayTradeService.java +++ /dev/null @@ -1,42 +0,0 @@ -package cn.daxpay.open.payment.merchant.service.trade; - -import cn.daxpay.open.platform.core.rest.param.PageParam; -import cn.daxpay.open.platform.core.rest.result.PageResult; -import cn.daxpay.open.payment.merchant.convert.trade.MchPayTradeConvert; -import cn.daxpay.open.payment.trade.order.dao.PayTradeManager; -import cn.daxpay.open.payment.trade.order.entity.PayTrade; -import cn.daxpay.open.payment.trade.order.param.PayTradeQuery; -import cn.daxpay.open.payment.trade.order.result.PayTradeResult; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -/// # 资金交易凭证查询(商户端) -/// -/// 仅分页列表;行级隔离依赖 [MchBaseEntity] + 商户端 PaymentContext / TenantLine。 -/// 禁止信任请求体中的 mchNo(查询条件亦不作为跨商户入口)。 -@Slf4j -@Service -@RequiredArgsConstructor -public class MchPayTradeService { - - private final PayTradeManager payTradeManager; - - /// 分页查询本商户资金交易 - public PageResult page(PageParam pageParam, PayTradeQuery query) { - // 忽略入参 mchNo,避免越权指定他商户 - if (query != null) { - query.setMchNo(null); - } - Page page = payTradeManager.page(pageParam, query); - var records = page.getRecords().stream() - .map(MchPayTradeConvert.CONVERT::toResult) - .toList(); - return new PageResult() - .setRecords(records) - .setTotal(page.getTotal()) - .setSize(page.getSize()) - .setCurrent(page.getCurrent()); - } -}