This commit is contained in:
2026-04-20 16:58:33 +08:00
parent bdbd6ae7e9
commit a2fad4a095
3 changed files with 50 additions and 11 deletions

View File

@@ -50,7 +50,7 @@ Wxpay:
MchPublicKeyPath: "etc/merchant/wxpay/XXXXXXXXXXXX_XXXXXXXXXXXX_cert/pub_key.pem"
MchPlatformRAS: "xxxx"
NotifyUrl: "https://www.XXXXXXXXXXXXXX.com/api/v1/pay/wechat/callback"
RefundNotifyUrl: "https://www.XXXXXXXXXXXXXX.com/api/v1/wechat/refund_callback"
RefundNotifyUrl: "https://www.XXXXXXXXXXXXXX.com/api/v1/pay/wechat/refund_callback"
Applepay:
ProductionVerifyURL: "https://api.storekit.itunes.apple.com/inApps/v1/transactions/receipt"
SandboxVerifyURL: "https://api.storekit-sandbox.itunes.apple.com/inApps/v1/transactions/receipt"

View File

@@ -1,15 +1,17 @@
package admin_product
import (
"context"
"bdrp-server/app/main/api/internal/svc"
"bdrp-server/app/main/api/internal/types"
"bdrp-server/app/main/model"
"bdrp-server/common/xerr"
"context"
"database/sql"
"math"
"github.com/pkg/errors"
"github.com/zeromicro/go-zero/core/logx"
"github.com/zeromicro/go-zero/core/stores/sqlx"
)
type AdminCreateProductLogic struct {
@@ -27,7 +29,7 @@ func NewAdminCreateProductLogic(ctx context.Context, svcCtx *svc.ServiceContext)
}
func (l *AdminCreateProductLogic) AdminCreateProduct(req *types.AdminCreateProductReq) (resp *types.AdminCreateProductResp, err error) {
// 1. 数据转换
// 1. 构建产品数据
data := &model.Product{
ProductName: req.ProductName,
ProductEn: req.ProductEn,
@@ -37,14 +39,37 @@ func (l *AdminCreateProductLogic) AdminCreateProduct(req *types.AdminCreateProdu
SellPrice: req.SellPrice,
}
// 2. 数据库操作
result, err := l.svcCtx.ProductModel.Insert(l.ctx, nil, data)
// 2. 开启事务,确保产品与代理产品配置同步创建
var id int64
err = l.svcCtx.ProductModel.Trans(l.ctx, func(ctx context.Context, session sqlx.Session) error {
result, txErr := l.svcCtx.ProductModel.Insert(ctx, session, data)
if txErr != nil {
return txErr
}
productID, txErr := result.LastInsertId()
if txErr != nil {
return txErr
}
id = productID
priceRangeMax := math.Max(req.CostPrice, req.SellPrice)
agentConfig := &model.AgentProductConfig{
ProductId: productID,
CostPrice: req.CostPrice,
PriceRangeMin: req.CostPrice,
PriceRangeMax: priceRangeMax,
PricingStandard: priceRangeMax,
OverpricingRatio: 0.10,
}
_, txErr = l.svcCtx.AgentProductConfigModel.Insert(ctx, session, agentConfig)
return txErr
})
if err != nil {
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR),
"创建产品失败, err: %v, req: %+v", err, req)
"创建产品及代理产品配置失败, err: %v, req: %+v", err, req)
}
// 3. 返回结果
id, _ := result.LastInsertId()
return &types.AdminCreateProductResp{Id: id}, nil
}

View File

@@ -1,13 +1,15 @@
package admin_product
import (
"context"
"bdrp-server/app/main/api/internal/svc"
"bdrp-server/app/main/api/internal/types"
"bdrp-server/app/main/model"
"bdrp-server/common/xerr"
"context"
"github.com/pkg/errors"
"github.com/zeromicro/go-zero/core/logx"
"github.com/zeromicro/go-zero/core/stores/sqlx"
)
type AdminDeleteProductLogic struct {
@@ -25,15 +27,27 @@ func NewAdminDeleteProductLogic(ctx context.Context, svcCtx *svc.ServiceContext)
}
func (l *AdminDeleteProductLogic) AdminDeleteProduct(req *types.AdminDeleteProductReq) (resp *types.AdminDeleteProductResp, err error) {
// 1. 查询记录是否存在
// 1. 查询产品是否存在
record, err := l.svcCtx.ProductModel.FindOne(l.ctx, req.Id)
if err != nil {
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR),
"查找产品失败, err: %v, id: %d", err, req.Id)
}
// 2. 执行软删除
err = l.svcCtx.ProductModel.DeleteSoft(l.ctx, nil, record)
// 2. 事务内执行物理删除,保持 product 与 agent_product_config 同步
err = l.svcCtx.ProductModel.Trans(l.ctx, func(ctx context.Context, session sqlx.Session) error {
agentCfg, findErr := l.svcCtx.AgentProductConfigModel.FindOneByProductId(ctx, req.Id)
if findErr != nil && !errors.Is(findErr, model.ErrNotFound) {
return findErr
}
if findErr == nil {
if deleteCfgErr := l.svcCtx.AgentProductConfigModel.Delete(ctx, session, agentCfg.Id); deleteCfgErr != nil {
return deleteCfgErr
}
}
return l.svcCtx.ProductModel.Delete(ctx, session, record.Id)
})
if err != nil {
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR),
"删除产品失败, err: %v, id: %d", err, req.Id)