add and fix 一键解冻
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
package admin_agent
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
|
||||
"tydata-server/app/main/api/internal/svc"
|
||||
"tydata-server/app/main/api/internal/types"
|
||||
"tydata-server/app/main/model"
|
||||
"tydata-server/common/xerr"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
"github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||
)
|
||||
|
||||
type AdminUpdateAgentCommissionStatusLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewAdminUpdateAgentCommissionStatusLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminUpdateAgentCommissionStatusLogic {
|
||||
return &AdminUpdateAgentCommissionStatusLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *AdminUpdateAgentCommissionStatusLogic) AdminUpdateAgentCommissionStatus(req *types.AdminUpdateAgentCommissionStatusReq) (resp *types.AdminUpdateAgentCommissionStatusResp, err error) {
|
||||
// 验证状态值
|
||||
if req.Status != 0 && req.Status != 1 && req.Status != 2 {
|
||||
return nil, xerr.NewErrMsg("无效的状态值,状态必须为0(已结算)、1(冻结中)或2(已取消)")
|
||||
}
|
||||
|
||||
// 查询佣金记录
|
||||
commission, err := l.svcCtx.AgentCommissionModel.FindOne(l.ctx, req.Id)
|
||||
if err != nil {
|
||||
if errors.Is(err, model.ErrNotFound) {
|
||||
return nil, xerr.NewErrMsg("佣金记录不存在")
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 检查状态是否允许修改
|
||||
if commission.Status == 0 {
|
||||
return nil, xerr.NewErrMsg("已结算的佣金记录不能修改状态")
|
||||
}
|
||||
if commission.Status == 2 {
|
||||
return nil, xerr.NewErrMsg("已取消的佣金记录不能修改状态")
|
||||
}
|
||||
|
||||
// 开始事务
|
||||
err = l.svcCtx.AgentCommissionModel.Trans(l.ctx, func(ctx context.Context, session sqlx.Session) error {
|
||||
// 更新佣金状态
|
||||
commission.Status = req.Status
|
||||
err = l.svcCtx.AgentCommissionModel.UpdateWithVersion(ctx, session, commission)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 查询代理钱包
|
||||
wallet, err := l.svcCtx.AgentWalletModel.FindOneByAgentId(ctx, commission.AgentId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 根据状态更新钱包
|
||||
if req.Status == 0 {
|
||||
// 解冻操作(状态改为已结算):将金额添加到代理钱包余额
|
||||
wallet.Balance += commission.Amount
|
||||
wallet.FrozenBalance -= commission.Amount
|
||||
} else if req.Status == 2 {
|
||||
// 取消操作(状态改为已取消):只扣减冻结金额
|
||||
wallet.FrozenBalance -= commission.Amount
|
||||
}
|
||||
|
||||
err = l.svcCtx.AgentWalletModel.UpdateWithVersion(ctx, session, wallet)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
resp = &types.AdminUpdateAgentCommissionStatusResp{
|
||||
Success: true,
|
||||
}
|
||||
return
|
||||
}
|
||||
Reference in New Issue
Block a user