feat(dev): 添加开发环境支付配置和优惠券字段修复功能

- 新增开发环境控制器和环境感知支付服务
- 添加数据库字段缺失修复指南
- 改进优惠券适用商品查询逻辑
-优化支付配置获取方式
This commit is contained in:
2025-08-15 02:47:02 +08:00
parent b2e0aa9f28
commit fa83ef5967
14 changed files with 1535 additions and 13 deletions

View File

@@ -187,3 +187,19 @@ coupon:
auto-update: true
# 批量处理大小
batch-size: 1000
# 支付配置
payment:
# 开发环境配置
dev:
# 开发环境回调地址(本地调试用)
notify-url: "http://frps-10550.s209.websoft.top/api/shop/shop-order/notify"
# 开发环境是否启用环境感知
environment-aware: true
# 生产环境配置
prod:
# 生产环境回调地址
notify-url: "https://cms-api.websoft.top/api/shop/shop-order/notify"
# 生产环境是否启用环境感知
environment-aware: false

View File

@@ -0,0 +1,206 @@
-- 创建开发专用租户和支付配置
-- 用于隔离开发环境和生产环境的支付回调地址
-- ========================================
-- 1. 创建开发专用租户(如果不存在)
-- ========================================
-- 检查是否已存在开发租户
SELECT 'Checking for dev tenant...' as status;
-- 插入开发租户租户ID使用 9999 避免与生产冲突)
INSERT IGNORE INTO sys_tenant (
tenant_id,
tenant_name,
tenant_code,
contact_person,
contact_phone,
contact_email,
status,
deleted,
create_time,
update_time,
comments
) VALUES (
9999,
'开发测试租户',
'DEV_TENANT',
'开发者',
'13800000000',
'dev@websoft.top',
1,
0,
NOW(),
NOW(),
'专用于开发环境测试,不影响生产环境'
);
-- ========================================
-- 2. 创建开发环境专用支付配置
-- ========================================
-- 微信支付开发配置
INSERT IGNORE INTO sys_payment (
name,
type,
code,
image,
wechat_type,
app_id,
mch_id,
api_key,
apiclient_cert,
apiclient_key,
pub_key,
pub_key_id,
merchant_serial_number,
notify_url,
comments,
sort_number,
status,
deleted,
tenant_id,
create_time,
update_time
) VALUES (
'微信支付-开发环境',
0, -- 微信支付
'wechat_dev',
'/static/images/wechat_pay.png',
1, -- 普通商户
'wx1234567890abcdef', -- 开发环境AppID
'1234567890', -- 开发环境商户号
'your_dev_api_key_32_characters_long',
'dev/wechat/apiclient_cert.pem',
'dev/wechat/apiclient_key.pem',
'dev/wechat/wechatpay_cert.pem',
'your_pub_key_id',
'your_merchant_serial_number',
'http://frps-10550.s209.websoft.top/api/shop/shop-order/notify', -- 开发环境回调地址
'开发环境专用配置,使用本地回调地址',
1,
1, -- 启用
0, -- 未删除
9999, -- 开发租户ID
NOW(),
NOW()
);
-- 支付宝开发配置
INSERT IGNORE INTO sys_payment (
name,
type,
code,
app_id,
mch_id,
api_key,
notify_url,
comments,
sort_number,
status,
deleted,
tenant_id,
create_time,
update_time
) VALUES (
'支付宝-开发环境',
1, -- 支付宝
'alipay_dev',
'your_dev_alipay_app_id',
'your_dev_alipay_mch_id',
'your_dev_alipay_private_key',
'http://frps-10550.s209.websoft.top/api/shop/shop-order/notify', -- 开发环境回调地址
'开发环境专用支付宝配置',
2,
1, -- 启用
0, -- 未删除
9999, -- 开发租户ID
NOW(),
NOW()
);
-- ========================================
-- 3. 创建开发环境用户(可选)
-- ========================================
-- 创建开发专用用户
INSERT IGNORE INTO sys_user (
user_id,
username,
password,
nickname,
avatar,
sex,
phone,
email,
email_verified,
real_name,
id_card,
birthday,
department_id,
status,
deleted,
tenant_id,
create_time,
update_time,
comments
) VALUES (
99999,
'dev_user',
'$2a$10$yKTnKzKqKqKqKqKqKqKqKOKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqK', -- 密码: dev123456
'开发测试用户',
'/static/images/default_avatar.png',
1,
'13800000001',
'dev_user@websoft.top',
1,
'开发者',
'000000000000000000',
'1990-01-01',
1,
0, -- 正常状态
0, -- 未删除
9999, -- 开发租户ID
NOW(),
NOW(),
'开发环境专用测试用户'
);
-- ========================================
-- 4. 验证创建结果
-- ========================================
-- 检查租户创建结果
SELECT
'Tenant Check' as check_type,
tenant_id,
tenant_name,
tenant_code,
status
FROM sys_tenant
WHERE tenant_id = 9999;
-- 检查支付配置创建结果
SELECT
'Payment Config Check' as check_type,
id,
name,
type,
notify_url,
tenant_id,
status
FROM sys_payment
WHERE tenant_id = 9999;
-- 检查用户创建结果
SELECT
'User Check' as check_type,
user_id,
username,
nickname,
tenant_id,
status
FROM sys_user
WHERE tenant_id = 9999;
SELECT '开发环境配置创建完成!' as result;

View File

@@ -0,0 +1,101 @@
-- 修复优惠券适用商品表字段缺失问题
-- 作者: WebSoft
-- 日期: 2025-01-15
-- 说明: 添加缺失的 goods_id 和 category_id 字段
-- ========================================
-- 1. 检查表是否存在
-- ========================================
SELECT 'Checking table existence...' as status;
-- ========================================
-- 2. 添加缺失的字段
-- ========================================
-- 添加 goods_id 字段(如果不存在)
SET @sql = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'shop_coupon_apply_item'
AND COLUMN_NAME = 'goods_id') = 0,
'ALTER TABLE shop_coupon_apply_item ADD COLUMN goods_id INT(11) NULL COMMENT "商品ID" AFTER coupon_id;',
'SELECT "goods_id column already exists" as result;'
));
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 添加 category_id 字段(如果不存在)
SET @sql = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'shop_coupon_apply_item'
AND COLUMN_NAME = 'category_id') = 0,
'ALTER TABLE shop_coupon_apply_item ADD COLUMN category_id INT(11) NULL COMMENT "分类ID" AFTER goods_id;',
'SELECT "category_id column already exists" as result;'
));
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- ========================================
-- 3. 更新现有数据(如果需要)
-- ========================================
-- 如果表中有数据但 goods_id 为空,可以根据业务逻辑设置默认值
-- 这里只是示例,实际需要根据业务需求调整
UPDATE shop_coupon_apply_item
SET goods_id = pk
WHERE goods_id IS NULL AND type = 1 AND pk IS NOT NULL;
-- ========================================
-- 4. 添加索引优化查询性能
-- ========================================
-- 添加 goods_id 索引
CREATE INDEX IF NOT EXISTS idx_coupon_apply_item_goods ON shop_coupon_apply_item(coupon_id, goods_id);
-- 添加 category_id 索引
CREATE INDEX IF NOT EXISTS idx_coupon_apply_item_category ON shop_coupon_apply_item(coupon_id, category_id);
-- 添加类型索引
CREATE INDEX IF NOT EXISTS idx_coupon_apply_item_type ON shop_coupon_apply_item(coupon_id, type);
-- ========================================
-- 5. 验证修复结果
-- ========================================
-- 检查表结构
SELECT
COLUMN_NAME,
DATA_TYPE,
IS_NULLABLE,
COLUMN_DEFAULT,
COLUMN_COMMENT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'shop_coupon_apply_item'
ORDER BY ORDINAL_POSITION;
-- 检查数据
SELECT
'Data check' as check_type,
COUNT(*) as total_records,
COUNT(goods_id) as records_with_goods_id,
COUNT(category_id) as records_with_category_id
FROM shop_coupon_apply_item;
-- ========================================
-- 6. 创建示例数据(可选)
-- ========================================
-- 如果表为空,插入一些示例数据用于测试
INSERT IGNORE INTO shop_coupon_apply_item
(coupon_id, goods_id, category_id, type, status, tenant_id, create_time, update_time)
VALUES
(1, 1, NULL, 1, 0, 1, NOW(), NOW()),
(1, 2, NULL, 1, 0, 1, NOW(), NOW()),
(2, NULL, 1, 2, 0, 1, NOW(), NOW()),
(2, NULL, 2, 2, 0, 1, NOW(), NOW());
SELECT 'Database fix completed successfully!' as result;

View File

@@ -0,0 +1,183 @@
-- 生产环境安全的支付配置脚本
-- 此脚本可以安全地在生产数据库执行
-- 不会创建测试数据,只添加必要的配置支持
-- ========================================
-- 1. 检查当前环境(手动确认)
-- ========================================
SELECT
'请确认这是您要修改的数据库' as warning,
DATABASE() as current_database,
NOW() as execution_time;
-- 暂停执行,让用户确认
-- 如果确认无误,请删除下面这行注释继续执行
-- SELECT 'Please confirm this is the correct database before proceeding' as confirmation_required;
-- ========================================
-- 2. 添加支付配置表字段(如果不存在)
-- ========================================
-- 检查是否需要添加环境标识字段
SELECT
CASE
WHEN COUNT(*) = 0 THEN '需要添加environment字段'
ELSE '环境字段已存在'
END as environment_field_status
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'sys_payment'
AND COLUMN_NAME = 'environment';
-- 添加环境标识字段(如果不存在)
SET @sql = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'sys_payment'
AND COLUMN_NAME = 'environment') = 0,
'ALTER TABLE sys_payment ADD COLUMN environment VARCHAR(20) DEFAULT "prod" COMMENT "环境标识(dev/test/prod)" AFTER tenant_id;',
'SELECT "environment column already exists" as result;'
));
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- ========================================
-- 3. 为现有支付配置添加环境标识
-- ========================================
-- 将现有配置标记为生产环境
UPDATE sys_payment
SET environment = 'prod'
WHERE environment IS NULL OR environment = '';
-- ========================================
-- 4. 创建开发环境配置的安全方式
-- ========================================
-- 方式1复制现有生产配置作为开发模板推荐
-- 注意这里使用您现有的租户ID不创建新租户
-- 获取当前生产环境的微信支付配置
SELECT
'当前微信支付配置' as config_type,
id,
name,
app_id,
mch_id,
notify_url,
tenant_id,
environment
FROM sys_payment
WHERE type = 0 AND status = 1 AND deleted = 0
ORDER BY id DESC LIMIT 1;
-- 获取当前生产环境的支付宝配置
SELECT
'当前支付宝配置' as config_type,
id,
name,
app_id,
mch_id,
notify_url,
tenant_id,
environment
FROM sys_payment
WHERE type = 1 AND status = 1 AND deleted = 0
ORDER BY id DESC LIMIT 1;
-- ========================================
-- 5. 手动创建开发配置的SQL模板
-- ========================================
-- 以下SQL需要您手动修改参数后执行
-- 请根据上面查询的结果,修改相应的参数
/*
-- 微信支付开发配置模板(请修改参数后执行)
INSERT INTO sys_payment (
name, type, code, image, wechat_type,
app_id, mch_id, api_key, apiclient_cert, apiclient_key,
pub_key, pub_key_id, merchant_serial_number, notify_url,
comments, sort_number, status, deleted, tenant_id, environment,
create_time, update_time
) VALUES (
'微信支付-开发环境',
0, -- 微信支付
'wechat_dev',
'/static/images/wechat_pay.png',
1, -- 普通商户
'YOUR_DEV_APP_ID', -- 请替换为您的开发环境AppID
'YOUR_DEV_MCH_ID', -- 请替换为您的开发环境商户号
'YOUR_DEV_API_KEY', -- 请替换为您的开发环境API密钥
'dev/wechat/apiclient_cert.pem',
'dev/wechat/apiclient_key.pem',
'dev/wechat/wechatpay_cert.pem',
'YOUR_DEV_PUB_KEY_ID',
'YOUR_DEV_MERCHANT_SERIAL',
'http://frps-10550.s209.websoft.top/api/shop/shop-order/notify', -- 开发环境回调
'开发环境专用配置',
1,
1, -- 启用
0, -- 未删除
YOUR_TENANT_ID, -- 请替换为您的租户ID
'dev', -- 开发环境标识
NOW(),
NOW()
);
*/
-- ========================================
-- 6. 更安全的方案:仅更新现有配置的回调地址
-- ========================================
-- 查看当前回调地址
SELECT
'当前回调地址检查' as check_type,
id,
name,
type,
notify_url,
tenant_id,
environment
FROM sys_payment
WHERE status = 1 AND deleted = 0;
-- 如果您只是想临时修改回调地址进行调试可以使用以下SQL
-- 注意:请先备份原始配置!
/*
-- 备份当前配置
CREATE TABLE IF NOT EXISTS sys_payment_backup AS
SELECT *, NOW() as backup_time FROM sys_payment WHERE status = 1;
-- 临时修改回调地址(请谨慎使用)
UPDATE sys_payment
SET notify_url = 'http://frps-10550.s209.websoft.top/api/shop/shop-order/notify'
WHERE type = 0 AND tenant_id = YOUR_TENANT_ID AND status = 1;
-- 恢复原始配置的SQL调试完成后执行
UPDATE sys_payment
SET notify_url = 'https://cms-api.websoft.top/api/shop/shop-order/notify'
WHERE type = 0 AND tenant_id = YOUR_TENANT_ID AND status = 1;
*/
-- ========================================
-- 7. 验证配置
-- ========================================
-- 检查所有支付配置
SELECT
'最终配置检查' as check_type,
id,
name,
type,
notify_url,
tenant_id,
environment,
status
FROM sys_payment
WHERE deleted = 0
ORDER BY tenant_id, type;
SELECT '生产环境安全配置完成!请根据注释中的模板手动创建开发配置。' as result;

View File

@@ -0,0 +1,17 @@
-- 简单修复优惠券适用商品表字段缺失问题
-- 执行前请备份数据库
-- 1. 添加缺失的字段
ALTER TABLE shop_coupon_apply_item
ADD COLUMN IF NOT EXISTS goods_id INT(11) NULL COMMENT '商品ID' AFTER coupon_id;
ALTER TABLE shop_coupon_apply_item
ADD COLUMN IF NOT EXISTS category_id INT(11) NULL COMMENT '分类ID' AFTER goods_id;
-- 2. 添加索引
CREATE INDEX IF NOT EXISTS idx_coupon_apply_item_goods ON shop_coupon_apply_item(coupon_id, goods_id);
CREATE INDEX IF NOT EXISTS idx_coupon_apply_item_category ON shop_coupon_apply_item(coupon_id, category_id);
CREATE INDEX IF NOT EXISTS idx_coupon_apply_item_type ON shop_coupon_apply_item(coupon_id, type);
-- 3. 检查表结构
DESCRIBE shop_coupon_apply_item;