add and fix 一键解冻
This commit is contained in:
@@ -26,6 +26,14 @@ service main {
|
|||||||
@handler AdminGetAgentCommissionList
|
@handler AdminGetAgentCommissionList
|
||||||
get /agent-commission/list (AdminGetAgentCommissionListReq) returns (AdminGetAgentCommissionListResp)
|
get /agent-commission/list (AdminGetAgentCommissionListReq) returns (AdminGetAgentCommissionListResp)
|
||||||
|
|
||||||
|
// 代理佣金状态更新
|
||||||
|
@handler AdminUpdateAgentCommissionStatus
|
||||||
|
post /agent-commission/update-status (AdminUpdateAgentCommissionStatusReq) returns (AdminUpdateAgentCommissionStatusResp)
|
||||||
|
|
||||||
|
// 批量解冻代理佣金
|
||||||
|
@handler AdminBatchUnfreezeAgentCommission
|
||||||
|
post /agent-commission/batch-unfreeze (AdminBatchUnfreezeAgentCommissionReq) returns (AdminBatchUnfreezeAgentCommissionResp)
|
||||||
|
|
||||||
// 代理奖励分页查询
|
// 代理奖励分页查询
|
||||||
@handler AdminGetAgentRewardList
|
@handler AdminGetAgentRewardList
|
||||||
get /agent-reward/list (AdminGetAgentRewardListReq) returns (AdminGetAgentRewardListResp)
|
get /agent-reward/list (AdminGetAgentRewardListReq) returns (AdminGetAgentRewardListResp)
|
||||||
@@ -169,6 +177,29 @@ type (
|
|||||||
Items []AgentCommissionListItem `json:"items"` // 列表数据
|
Items []AgentCommissionListItem `json:"items"` // 列表数据
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 代理佣金状态更新请求
|
||||||
|
AdminUpdateAgentCommissionStatusReq {
|
||||||
|
Id int64 `json:"id"` // 佣金记录ID
|
||||||
|
Status int64 `json:"status"` // 状态:0-已结算,1-冻结中,2-已取消
|
||||||
|
}
|
||||||
|
|
||||||
|
// 代理佣金状态更新响应
|
||||||
|
AdminUpdateAgentCommissionStatusResp {
|
||||||
|
Success bool `json:"success"` // 是否成功
|
||||||
|
}
|
||||||
|
|
||||||
|
// 批量解冻代理佣金请求
|
||||||
|
AdminBatchUnfreezeAgentCommissionReq {
|
||||||
|
AgentId *int64 `json:"agent_id,optional"` // 代理ID,可选。如果不传则解冻所有冻结中的佣金
|
||||||
|
}
|
||||||
|
|
||||||
|
// 批量解冻代理佣金响应
|
||||||
|
AdminBatchUnfreezeAgentCommissionResp {
|
||||||
|
Success bool `json:"success"` // 是否成功
|
||||||
|
Count int64 `json:"count"` // 解冻的数量
|
||||||
|
Amount float64 `json:"amount"` // 解冻的总金额
|
||||||
|
}
|
||||||
|
|
||||||
// 代理奖励分页查询请求
|
// 代理奖励分页查询请求
|
||||||
AdminGetAgentRewardListReq {
|
AdminGetAgentRewardListReq {
|
||||||
Page int64 `form:"page"` // 页码
|
Page int64 `form:"page"` // 页码
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
package admin_agent
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/zeromicro/go-zero/rest/httpx"
|
||||||
|
"tydata-server/app/main/api/internal/logic/admin_agent"
|
||||||
|
"tydata-server/app/main/api/internal/svc"
|
||||||
|
"tydata-server/app/main/api/internal/types"
|
||||||
|
"tydata-server/common/result"
|
||||||
|
"tydata-server/pkg/lzkit/validator"
|
||||||
|
)
|
||||||
|
|
||||||
|
func AdminBatchUnfreezeAgentCommissionHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||||
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
var req types.AdminBatchUnfreezeAgentCommissionReq
|
||||||
|
if err := httpx.Parse(r, &req); err != nil {
|
||||||
|
result.ParamErrorResult(r, w, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := validator.Validate(req); err != nil {
|
||||||
|
result.ParamValidateErrorResult(r, w, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
l := admin_agent.NewAdminBatchUnfreezeAgentCommissionLogic(r.Context(), svcCtx)
|
||||||
|
resp, err := l.AdminBatchUnfreezeAgentCommission(&req)
|
||||||
|
result.HttpResult(r, w, resp, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
package admin_agent
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"tydata-server/app/main/api/internal/logic/admin_agent"
|
||||||
|
"tydata-server/app/main/api/internal/svc"
|
||||||
|
"tydata-server/app/main/api/internal/types"
|
||||||
|
"tydata-server/common/result"
|
||||||
|
"tydata-server/pkg/lzkit/validator"
|
||||||
|
|
||||||
|
"github.com/zeromicro/go-zero/rest/httpx"
|
||||||
|
)
|
||||||
|
|
||||||
|
func AdminUpdateAgentCommissionStatusHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||||
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
var req types.AdminUpdateAgentCommissionStatusReq
|
||||||
|
if err := httpx.Parse(r, &req); err != nil {
|
||||||
|
result.ParamErrorResult(r, w, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := validator.Validate(req); err != nil {
|
||||||
|
result.ParamValidateErrorResult(r, w, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
l := admin_agent.NewAdminUpdateAgentCommissionStatusLogic(r.Context(), svcCtx)
|
||||||
|
resp, err := l.AdminUpdateAgentCommissionStatus(&req)
|
||||||
|
result.HttpResult(r, w, resp, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -42,11 +42,21 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
|
|||||||
Path: "/agent-commission-deduction/list",
|
Path: "/agent-commission-deduction/list",
|
||||||
Handler: admin_agent.AdminGetAgentCommissionDeductionListHandler(serverCtx),
|
Handler: admin_agent.AdminGetAgentCommissionDeductionListHandler(serverCtx),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Method: http.MethodPost,
|
||||||
|
Path: "/agent-commission/batch-unfreeze",
|
||||||
|
Handler: admin_agent.AdminBatchUnfreezeAgentCommissionHandler(serverCtx),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
Method: http.MethodGet,
|
Method: http.MethodGet,
|
||||||
Path: "/agent-commission/list",
|
Path: "/agent-commission/list",
|
||||||
Handler: admin_agent.AdminGetAgentCommissionListHandler(serverCtx),
|
Handler: admin_agent.AdminGetAgentCommissionListHandler(serverCtx),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Method: http.MethodPost,
|
||||||
|
Path: "/agent-commission/update-status",
|
||||||
|
Handler: admin_agent.AdminUpdateAgentCommissionStatusHandler(serverCtx),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
Method: http.MethodGet,
|
Method: http.MethodGet,
|
||||||
Path: "/agent-link/list",
|
Path: "/agent-link/list",
|
||||||
|
|||||||
@@ -0,0 +1,112 @@
|
|||||||
|
package admin_agent
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"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/Masterminds/squirrel"
|
||||||
|
"github.com/zeromicro/go-zero/core/logx"
|
||||||
|
"github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||||
|
)
|
||||||
|
|
||||||
|
type AdminBatchUnfreezeAgentCommissionLogic struct {
|
||||||
|
logx.Logger
|
||||||
|
ctx context.Context
|
||||||
|
svcCtx *svc.ServiceContext
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewAdminBatchUnfreezeAgentCommissionLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminBatchUnfreezeAgentCommissionLogic {
|
||||||
|
return &AdminBatchUnfreezeAgentCommissionLogic{
|
||||||
|
Logger: logx.WithContext(ctx),
|
||||||
|
ctx: ctx,
|
||||||
|
svcCtx: svcCtx,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *AdminBatchUnfreezeAgentCommissionLogic) AdminBatchUnfreezeAgentCommission(req *types.AdminBatchUnfreezeAgentCommissionReq) (resp *types.AdminBatchUnfreezeAgentCommissionResp, err error) {
|
||||||
|
// 构建查询条件:状态为1(冻结中)
|
||||||
|
builder := l.svcCtx.AgentCommissionModel.SelectBuilder().Where(squirrel.Eq{"status": 1})
|
||||||
|
|
||||||
|
// 如果指定了代理商ID,则只查询该代理商的冻结佣金
|
||||||
|
if req.AgentId != nil && *req.AgentId > 0 {
|
||||||
|
builder = builder.Where(squirrel.Eq{"agent_id": *req.AgentId})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询所有冻结中的佣金记录
|
||||||
|
commissions, err := l.svcCtx.AgentCommissionModel.FindAll(l.ctx, builder, "")
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果没有冻结的佣金,直接返回
|
||||||
|
if len(commissions) == 0 {
|
||||||
|
resp = &types.AdminBatchUnfreezeAgentCommissionResp{
|
||||||
|
Success: true,
|
||||||
|
Count: 0,
|
||||||
|
Amount: 0,
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 计算总金额
|
||||||
|
var totalAmount float64
|
||||||
|
for _, commission := range commissions {
|
||||||
|
totalAmount += commission.Amount
|
||||||
|
}
|
||||||
|
|
||||||
|
// 开始事务
|
||||||
|
err = l.svcCtx.AgentCommissionModel.Trans(l.ctx, func(ctx context.Context, session sqlx.Session) error {
|
||||||
|
// 按代理商分组更新钱包余额
|
||||||
|
agentWalletMap := make(map[int64]*model.AgentWallet)
|
||||||
|
|
||||||
|
// 遍历所有冻结的佣金,更新状态
|
||||||
|
for _, commission := range commissions {
|
||||||
|
// 更新佣金状态为已结算
|
||||||
|
commission.Status = 0
|
||||||
|
err := l.svcCtx.AgentCommissionModel.UpdateWithVersion(ctx, session, commission)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 累加到对应代理商的钱包数据
|
||||||
|
if wallet, exists := agentWalletMap[commission.AgentId]; exists {
|
||||||
|
wallet.Balance += commission.Amount
|
||||||
|
wallet.FrozenBalance -= commission.Amount
|
||||||
|
} else {
|
||||||
|
// 查询该代理商的钱包
|
||||||
|
wallet, err := l.svcCtx.AgentWalletModel.FindOneByAgentId(ctx, commission.AgentId)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
wallet.Balance += commission.Amount
|
||||||
|
wallet.FrozenBalance -= commission.Amount
|
||||||
|
agentWalletMap[commission.AgentId] = wallet
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新所有受影响代理商的钱包
|
||||||
|
for _, wallet := range agentWalletMap {
|
||||||
|
err := l.svcCtx.AgentWalletModel.UpdateWithVersion(ctx, session, wallet)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, xerr.NewErrMsg("批量解冻失败: " + err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
resp = &types.AdminBatchUnfreezeAgentCommissionResp{
|
||||||
|
Success: true,
|
||||||
|
Count: int64(len(commissions)),
|
||||||
|
Amount: totalAmount,
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
}
|
||||||
@@ -20,9 +20,6 @@ const (
|
|||||||
CommissionStatusFrozen = 1 // 冻结佣金
|
CommissionStatusFrozen = 1 // 冻结佣金
|
||||||
)
|
)
|
||||||
|
|
||||||
// UNFREEZE_COMMISSION_DELAY_DAYS 定义延迟解冻天数
|
|
||||||
const UNFREEZE_COMMISSION_DELAY_DAYS = 3 // 三天后解冻
|
|
||||||
|
|
||||||
type UnfreezeCommissionHandler struct {
|
type UnfreezeCommissionHandler struct {
|
||||||
svcCtx *svc.ServiceContext
|
svcCtx *svc.ServiceContext
|
||||||
}
|
}
|
||||||
@@ -63,26 +60,8 @@ func (l *UnfreezeCommissionHandler) ProcessTask(ctx context.Context, t *asynq.Ta
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检查是否已到达解冻时间(3天后)
|
|
||||||
unfreezeTime := commission.UpdateTime.AddDate(0, 0, UNFREEZE_COMMISSION_DELAY_DAYS)
|
|
||||||
if now.Before(unfreezeTime) {
|
|
||||||
logx.Infof("佣金记录ID %d 尚未到达解冻时间,解冻时间: %s", commissionID, unfreezeTime.Format("2006-01-02 15:04:05"))
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// 使用事务处理解冻操作
|
// 使用事务处理解冻操作
|
||||||
err = l.svcCtx.AgentCommissionModel.Trans(ctx, func(ctx context.Context, session sqlx.Session) error {
|
err = l.svcCtx.AgentCommissionModel.Trans(ctx, func(ctx context.Context, session sqlx.Session) error {
|
||||||
// 更新佣金状态为已发放
|
|
||||||
commission.Status = CommissionStatusReleased
|
|
||||||
commission.UpdateTime = now
|
|
||||||
|
|
||||||
// 更新佣金数据库
|
|
||||||
_, err := l.svcCtx.AgentCommissionModel.Update(ctx, session, commission)
|
|
||||||
if err != nil {
|
|
||||||
logx.Errorf("更新佣金记录ID %d 失败: %v", commissionID, err)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取代理钱包记录
|
// 获取代理钱包记录
|
||||||
agentWallet, err := l.svcCtx.AgentWalletModel.FindOneByAgentId(ctx, commission.AgentId)
|
agentWallet, err := l.svcCtx.AgentWalletModel.FindOneByAgentId(ctx, commission.AgentId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -104,6 +83,17 @@ func (l *UnfreezeCommissionHandler) ProcessTask(ctx context.Context, t *asynq.Ta
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 钱包更新成功后,再更新佣金状态为已发放
|
||||||
|
commission.Status = CommissionStatusReleased
|
||||||
|
commission.UpdateTime = now
|
||||||
|
|
||||||
|
// 更新佣金数据库(使用 UpdateWithVersion 保持乐观锁)
|
||||||
|
err = l.svcCtx.AgentCommissionModel.UpdateWithVersion(ctx, session, commission)
|
||||||
|
if err != nil {
|
||||||
|
logx.Errorf("更新佣金记录ID %d 失败: %v", commissionID, err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
logx.Infof("成功解冻佣金记录ID %d,代理ID %d,佣金金额 %.2f,已将佣金金额从冻结余额转移到可用余额",
|
logx.Infof("成功解冻佣金记录ID %d,代理ID %d,佣金金额 %.2f,已将佣金金额从冻结余额转移到可用余额",
|
||||||
commissionID, commission.AgentId, commissionAmount)
|
commissionID, commission.AgentId, commissionAmount)
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@@ -200,7 +200,7 @@ func (l *AgentService) AgentProcess(ctx context.Context, order *model.Order) err
|
|||||||
if len(commissions) > 0 {
|
if len(commissions) > 0 {
|
||||||
// 为所有新创建的佣金记录触发解冻任务
|
// 为所有新创建的佣金记录触发解冻任务
|
||||||
for _, commission := range commissions {
|
for _, commission := range commissions {
|
||||||
// 发送解冻任务,将在3天后执行
|
// 发送解冻任务,将在10小时后执行
|
||||||
sendTaskErr := l.AsynqService.SendUnfreezeCommissionTask(commission.Id)
|
sendTaskErr := l.AsynqService.SendUnfreezeCommissionTask(commission.Id)
|
||||||
if sendTaskErr != nil {
|
if sendTaskErr != nil {
|
||||||
logx.Errorf("发送佣金解冻任务失败,佣金ID: %d, 错误: %v", commission.Id, sendTaskErr)
|
logx.Errorf("发送佣金解冻任务失败,佣金ID: %d, 错误: %v", commission.Id, sendTaskErr)
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ package service
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"time"
|
||||||
|
|
||||||
"tydata-server/app/main/api/internal/config"
|
"tydata-server/app/main/api/internal/config"
|
||||||
"tydata-server/app/main/api/internal/types"
|
"tydata-server/app/main/api/internal/types"
|
||||||
|
|
||||||
@@ -72,6 +74,7 @@ func (s *AsynqService) SendUnfreezeCommissionTask(commissionID int64) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
options := []asynq.Option{
|
options := []asynq.Option{
|
||||||
|
asynq.ProcessIn(10 * time.Hour), // 10小时后执行
|
||||||
asynq.MaxRetry(5), // 设置最大重试次数
|
asynq.MaxRetry(5), // 设置最大重试次数
|
||||||
}
|
}
|
||||||
task := asynq.NewTask(types.MsgUnfreezeCommission, payloadBytes, options...)
|
task := asynq.NewTask(types.MsgUnfreezeCommission, payloadBytes, options...)
|
||||||
|
|||||||
@@ -36,6 +36,16 @@ type AdminAssignRoleApiResp struct {
|
|||||||
Success bool `json:"success"`
|
Success bool `json:"success"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type AdminBatchUnfreezeAgentCommissionReq struct {
|
||||||
|
AgentId *int64 `json:"agent_id,optional"` // 代理ID,可选。如果不传则解冻所有冻结中的佣金
|
||||||
|
}
|
||||||
|
|
||||||
|
type AdminBatchUnfreezeAgentCommissionResp struct {
|
||||||
|
Success bool `json:"success"` // 是否成功
|
||||||
|
Count int64 `json:"count"` // 解冻的数量
|
||||||
|
Amount float64 `json:"amount"` // 解冻的总金额
|
||||||
|
}
|
||||||
|
|
||||||
type AdminBatchUpdateApiStatusReq struct {
|
type AdminBatchUpdateApiStatusReq struct {
|
||||||
Ids []int64 `json:"ids"`
|
Ids []int64 `json:"ids"`
|
||||||
Status int64 `json:"status"`
|
Status int64 `json:"status"`
|
||||||
@@ -784,6 +794,15 @@ type AdminRoleApiInfo struct {
|
|||||||
Description string `json:"description"`
|
Description string `json:"description"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type AdminUpdateAgentCommissionStatusReq struct {
|
||||||
|
Id int64 `json:"id"` // 佣金记录ID
|
||||||
|
Status int64 `json:"status"` // 状态:0-已结算,1-冻结中,2-已取消
|
||||||
|
}
|
||||||
|
|
||||||
|
type AdminUpdateAgentCommissionStatusResp struct {
|
||||||
|
Success bool `json:"success"` // 是否成功
|
||||||
|
}
|
||||||
|
|
||||||
type AdminUpdateAgentMembershipConfigReq struct {
|
type AdminUpdateAgentMembershipConfigReq struct {
|
||||||
Id int64 `json:"id"` // 主键
|
Id int64 `json:"id"` // 主键
|
||||||
LevelName string `json:"level_name"` // 会员级别名称
|
LevelName string `json:"level_name"` // 会员级别名称
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ var (
|
|||||||
agentCommissionRowsExpectAutoSet = strings.Join(stringx.Remove(agentCommissionFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
|
agentCommissionRowsExpectAutoSet = strings.Join(stringx.Remove(agentCommissionFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
|
||||||
agentCommissionRowsWithPlaceHolder = strings.Join(stringx.Remove(agentCommissionFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
|
agentCommissionRowsWithPlaceHolder = strings.Join(stringx.Remove(agentCommissionFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
|
||||||
|
|
||||||
cacheHmAgentCommissionIdPrefix = "cache:tydata:agentCommission:id:"
|
cacheTydataAgentCommissionIdPrefix = "cache:tydata:agentCommission:id:"
|
||||||
)
|
)
|
||||||
|
|
||||||
type (
|
type (
|
||||||
@@ -60,7 +60,7 @@ type (
|
|||||||
OrderId int64 `db:"order_id"`
|
OrderId int64 `db:"order_id"`
|
||||||
Amount float64 `db:"amount"`
|
Amount float64 `db:"amount"`
|
||||||
ProductId int64 `db:"product_id"` // 产品ID
|
ProductId int64 `db:"product_id"` // 产品ID
|
||||||
Status int64 `db:"status"`
|
Status int64 `db:"status"` // 状态:0-已结算,1-冻结中,2-已取消
|
||||||
CreateTime time.Time `db:"create_time"`
|
CreateTime time.Time `db:"create_time"`
|
||||||
UpdateTime time.Time `db:"update_time"` // 更新时间
|
UpdateTime time.Time `db:"update_time"` // 更新时间
|
||||||
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
|
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
|
||||||
@@ -78,20 +78,20 @@ func newAgentCommissionModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAgent
|
|||||||
|
|
||||||
func (m *defaultAgentCommissionModel) Insert(ctx context.Context, session sqlx.Session, data *AgentCommission) (sql.Result, error) {
|
func (m *defaultAgentCommissionModel) Insert(ctx context.Context, session sqlx.Session, data *AgentCommission) (sql.Result, error) {
|
||||||
data.DelState = globalkey.DelStateNo
|
data.DelState = globalkey.DelStateNo
|
||||||
hmAgentCommissionIdKey := fmt.Sprintf("%s%v", cacheHmAgentCommissionIdPrefix, data.Id)
|
tydataAgentCommissionIdKey := fmt.Sprintf("%s%v", cacheTydataAgentCommissionIdPrefix, data.Id)
|
||||||
return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
|
return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
|
||||||
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?)", m.table, agentCommissionRowsExpectAutoSet)
|
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?)", m.table, agentCommissionRowsExpectAutoSet)
|
||||||
if session != nil {
|
if session != nil {
|
||||||
return session.ExecCtx(ctx, query, data.AgentId, data.OrderId, data.Amount, data.ProductId, data.Status, data.DeleteTime, data.DelState, data.Version)
|
return session.ExecCtx(ctx, query, data.AgentId, data.OrderId, data.Amount, data.ProductId, data.Status, data.DeleteTime, data.DelState, data.Version)
|
||||||
}
|
}
|
||||||
return conn.ExecCtx(ctx, query, data.AgentId, data.OrderId, data.Amount, data.ProductId, data.Status, data.DeleteTime, data.DelState, data.Version)
|
return conn.ExecCtx(ctx, query, data.AgentId, data.OrderId, data.Amount, data.ProductId, data.Status, data.DeleteTime, data.DelState, data.Version)
|
||||||
}, hmAgentCommissionIdKey)
|
}, tydataAgentCommissionIdKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *defaultAgentCommissionModel) FindOne(ctx context.Context, id int64) (*AgentCommission, error) {
|
func (m *defaultAgentCommissionModel) FindOne(ctx context.Context, id int64) (*AgentCommission, error) {
|
||||||
hmAgentCommissionIdKey := fmt.Sprintf("%s%v", cacheHmAgentCommissionIdPrefix, id)
|
tydataAgentCommissionIdKey := fmt.Sprintf("%s%v", cacheTydataAgentCommissionIdPrefix, id)
|
||||||
var resp AgentCommission
|
var resp AgentCommission
|
||||||
err := m.QueryRowCtx(ctx, &resp, hmAgentCommissionIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
|
err := m.QueryRowCtx(ctx, &resp, tydataAgentCommissionIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
|
||||||
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", agentCommissionRows, m.table)
|
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", agentCommissionRows, m.table)
|
||||||
return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo)
|
return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo)
|
||||||
})
|
})
|
||||||
@@ -106,14 +106,14 @@ func (m *defaultAgentCommissionModel) FindOne(ctx context.Context, id int64) (*A
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m *defaultAgentCommissionModel) Update(ctx context.Context, session sqlx.Session, data *AgentCommission) (sql.Result, error) {
|
func (m *defaultAgentCommissionModel) Update(ctx context.Context, session sqlx.Session, data *AgentCommission) (sql.Result, error) {
|
||||||
hmAgentCommissionIdKey := fmt.Sprintf("%s%v", cacheHmAgentCommissionIdPrefix, data.Id)
|
tydataAgentCommissionIdKey := fmt.Sprintf("%s%v", cacheTydataAgentCommissionIdPrefix, data.Id)
|
||||||
return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
|
return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
|
||||||
query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, agentCommissionRowsWithPlaceHolder)
|
query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, agentCommissionRowsWithPlaceHolder)
|
||||||
if session != nil {
|
if session != nil {
|
||||||
return session.ExecCtx(ctx, query, data.AgentId, data.OrderId, data.Amount, data.ProductId, data.Status, data.DeleteTime, data.DelState, data.Version, data.Id)
|
return session.ExecCtx(ctx, query, data.AgentId, data.OrderId, data.Amount, data.ProductId, data.Status, data.DeleteTime, data.DelState, data.Version, data.Id)
|
||||||
}
|
}
|
||||||
return conn.ExecCtx(ctx, query, data.AgentId, data.OrderId, data.Amount, data.ProductId, data.Status, data.DeleteTime, data.DelState, data.Version, data.Id)
|
return conn.ExecCtx(ctx, query, data.AgentId, data.OrderId, data.Amount, data.ProductId, data.Status, data.DeleteTime, data.DelState, data.Version, data.Id)
|
||||||
}, hmAgentCommissionIdKey)
|
}, tydataAgentCommissionIdKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *defaultAgentCommissionModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AgentCommission) error {
|
func (m *defaultAgentCommissionModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AgentCommission) error {
|
||||||
@@ -124,14 +124,14 @@ func (m *defaultAgentCommissionModel) UpdateWithVersion(ctx context.Context, ses
|
|||||||
var sqlResult sql.Result
|
var sqlResult sql.Result
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
hmAgentCommissionIdKey := fmt.Sprintf("%s%v", cacheHmAgentCommissionIdPrefix, data.Id)
|
tydataAgentCommissionIdKey := fmt.Sprintf("%s%v", cacheTydataAgentCommissionIdPrefix, data.Id)
|
||||||
sqlResult, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
|
sqlResult, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
|
||||||
query := fmt.Sprintf("update %s set %s where `id` = ? and version = ? ", m.table, agentCommissionRowsWithPlaceHolder)
|
query := fmt.Sprintf("update %s set %s where `id` = ? and version = ? ", m.table, agentCommissionRowsWithPlaceHolder)
|
||||||
if session != nil {
|
if session != nil {
|
||||||
return session.ExecCtx(ctx, query, data.AgentId, data.OrderId, data.Amount, data.ProductId, data.Status, data.DeleteTime, data.DelState, data.Version, data.Id, oldVersion)
|
return session.ExecCtx(ctx, query, data.AgentId, data.OrderId, data.Amount, data.ProductId, data.Status, data.DeleteTime, data.DelState, data.Version, data.Id, oldVersion)
|
||||||
}
|
}
|
||||||
return conn.ExecCtx(ctx, query, data.AgentId, data.OrderId, data.Amount, data.ProductId, data.Status, data.DeleteTime, data.DelState, data.Version, data.Id, oldVersion)
|
return conn.ExecCtx(ctx, query, data.AgentId, data.OrderId, data.Amount, data.ProductId, data.Status, data.DeleteTime, data.DelState, data.Version, data.Id, oldVersion)
|
||||||
}, hmAgentCommissionIdKey)
|
}, tydataAgentCommissionIdKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -349,18 +349,18 @@ func (m *defaultAgentCommissionModel) SelectBuilder() squirrel.SelectBuilder {
|
|||||||
return squirrel.Select().From(m.table)
|
return squirrel.Select().From(m.table)
|
||||||
}
|
}
|
||||||
func (m *defaultAgentCommissionModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
|
func (m *defaultAgentCommissionModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
|
||||||
hmAgentCommissionIdKey := fmt.Sprintf("%s%v", cacheHmAgentCommissionIdPrefix, id)
|
tydataAgentCommissionIdKey := fmt.Sprintf("%s%v", cacheTydataAgentCommissionIdPrefix, id)
|
||||||
_, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
|
_, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
|
||||||
query := fmt.Sprintf("delete from %s where `id` = ?", m.table)
|
query := fmt.Sprintf("delete from %s where `id` = ?", m.table)
|
||||||
if session != nil {
|
if session != nil {
|
||||||
return session.ExecCtx(ctx, query, id)
|
return session.ExecCtx(ctx, query, id)
|
||||||
}
|
}
|
||||||
return conn.ExecCtx(ctx, query, id)
|
return conn.ExecCtx(ctx, query, id)
|
||||||
}, hmAgentCommissionIdKey)
|
}, tydataAgentCommissionIdKey)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
func (m *defaultAgentCommissionModel) formatPrimary(primary interface{}) string {
|
func (m *defaultAgentCommissionModel) formatPrimary(primary interface{}) string {
|
||||||
return fmt.Sprintf("%s%v", cacheHmAgentCommissionIdPrefix, primary)
|
return fmt.Sprintf("%s%v", cacheTydataAgentCommissionIdPrefix, primary)
|
||||||
}
|
}
|
||||||
func (m *defaultAgentCommissionModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error {
|
func (m *defaultAgentCommissionModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error {
|
||||||
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", agentCommissionRows, m.table)
|
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", agentCommissionRows, m.table)
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ $tables = @(
|
|||||||
# "agent_active_stat",
|
# "agent_active_stat",
|
||||||
# "agent_audit",
|
# "agent_audit",
|
||||||
# "agent_closure",
|
# "agent_closure",
|
||||||
# "agent_commission",
|
"agent_commission"
|
||||||
"agent_commission_deduction"
|
# "agent_commission_deduction"
|
||||||
# "agent_link",
|
# "agent_link",
|
||||||
# "agent_membership_config",
|
# "agent_membership_config",
|
||||||
# "agent_membership_recharge_order"
|
# "agent_membership_recharge_order"
|
||||||
|
|||||||
@@ -1,27 +0,0 @@
|
|||||||
package model
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/zeromicro/go-zero/core/stores/cache"
|
|
||||||
"github.com/zeromicro/go-zero/core/stores/sqlx"
|
|
||||||
)
|
|
||||||
|
|
||||||
var _ AgentCommissionDeductionModel = (*customAgentCommissionDeductionModel)(nil)
|
|
||||||
|
|
||||||
type (
|
|
||||||
// AgentCommissionDeductionModel is an interface to be customized, add more methods here,
|
|
||||||
// and implement the added methods in customAgentCommissionDeductionModel.
|
|
||||||
AgentCommissionDeductionModel interface {
|
|
||||||
agentCommissionDeductionModel
|
|
||||||
}
|
|
||||||
|
|
||||||
customAgentCommissionDeductionModel struct {
|
|
||||||
*defaultAgentCommissionDeductionModel
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
// NewAgentCommissionDeductionModel returns a model for the database table.
|
|
||||||
func NewAgentCommissionDeductionModel(conn sqlx.SqlConn, c cache.CacheConf) AgentCommissionDeductionModel {
|
|
||||||
return &customAgentCommissionDeductionModel{
|
|
||||||
defaultAgentCommissionDeductionModel: newAgentCommissionDeductionModel(conn, c),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,373 +0,0 @@
|
|||||||
// Code generated by goctl. DO NOT EDIT!
|
|
||||||
|
|
||||||
package model
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"database/sql"
|
|
||||||
"fmt"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/Masterminds/squirrel"
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
"github.com/zeromicro/go-zero/core/stores/builder"
|
|
||||||
"github.com/zeromicro/go-zero/core/stores/cache"
|
|
||||||
"github.com/zeromicro/go-zero/core/stores/sqlc"
|
|
||||||
"github.com/zeromicro/go-zero/core/stores/sqlx"
|
|
||||||
"github.com/zeromicro/go-zero/core/stringx"
|
|
||||||
"tydata-server/common/globalkey"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
agentCommissionDeductionFieldNames = builder.RawFieldNames(&AgentCommissionDeduction{})
|
|
||||||
agentCommissionDeductionRows = strings.Join(agentCommissionDeductionFieldNames, ",")
|
|
||||||
agentCommissionDeductionRowsExpectAutoSet = strings.Join(stringx.Remove(agentCommissionDeductionFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
|
|
||||||
agentCommissionDeductionRowsWithPlaceHolder = strings.Join(stringx.Remove(agentCommissionDeductionFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
|
|
||||||
|
|
||||||
cacheTydataAgentCommissionDeductionIdPrefix = "cache:tydata:agentCommissionDeduction:id:"
|
|
||||||
)
|
|
||||||
|
|
||||||
type (
|
|
||||||
agentCommissionDeductionModel interface {
|
|
||||||
Insert(ctx context.Context, session sqlx.Session, data *AgentCommissionDeduction) (sql.Result, error)
|
|
||||||
FindOne(ctx context.Context, id int64) (*AgentCommissionDeduction, error)
|
|
||||||
Update(ctx context.Context, session sqlx.Session, data *AgentCommissionDeduction) (sql.Result, error)
|
|
||||||
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AgentCommissionDeduction) error
|
|
||||||
Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error
|
|
||||||
SelectBuilder() squirrel.SelectBuilder
|
|
||||||
DeleteSoft(ctx context.Context, session sqlx.Session, data *AgentCommissionDeduction) error
|
|
||||||
FindSum(ctx context.Context, sumBuilder squirrel.SelectBuilder, field string) (float64, error)
|
|
||||||
FindCount(ctx context.Context, countBuilder squirrel.SelectBuilder, field string) (int64, error)
|
|
||||||
FindAll(ctx context.Context, rowBuilder squirrel.SelectBuilder, orderBy string) ([]*AgentCommissionDeduction, error)
|
|
||||||
FindPageListByPage(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentCommissionDeduction, error)
|
|
||||||
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentCommissionDeduction, int64, error)
|
|
||||||
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AgentCommissionDeduction, error)
|
|
||||||
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AgentCommissionDeduction, error)
|
|
||||||
Delete(ctx context.Context, session sqlx.Session, id int64) error
|
|
||||||
}
|
|
||||||
|
|
||||||
defaultAgentCommissionDeductionModel struct {
|
|
||||||
sqlc.CachedConn
|
|
||||||
table string
|
|
||||||
}
|
|
||||||
|
|
||||||
AgentCommissionDeduction struct {
|
|
||||||
Id int64 `db:"id"`
|
|
||||||
AgentId int64 `db:"agent_id"`
|
|
||||||
DeductedAgentId int64 `db:"deducted_agent_id"` // 被抽佣代理ID
|
|
||||||
Amount float64 `db:"amount"`
|
|
||||||
ProductId int64 `db:"product_id"` // 产品ID
|
|
||||||
OrderId sql.NullInt64 `db:"order_id"` // 关联订单ID
|
|
||||||
Type string `db:"type"`
|
|
||||||
Status int64 `db:"status"` // 状态
|
|
||||||
CreateTime time.Time `db:"create_time"`
|
|
||||||
UpdateTime time.Time `db:"update_time"` // 更新时间
|
|
||||||
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
|
|
||||||
DelState int64 `db:"del_state"` // 删除状态
|
|
||||||
Version int64 `db:"version"` // 版本号
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
func newAgentCommissionDeductionModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAgentCommissionDeductionModel {
|
|
||||||
return &defaultAgentCommissionDeductionModel{
|
|
||||||
CachedConn: sqlc.NewConn(conn, c),
|
|
||||||
table: "`agent_commission_deduction`",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *defaultAgentCommissionDeductionModel) Insert(ctx context.Context, session sqlx.Session, data *AgentCommissionDeduction) (sql.Result, error) {
|
|
||||||
data.DelState = globalkey.DelStateNo
|
|
||||||
tydataAgentCommissionDeductionIdKey := fmt.Sprintf("%s%v", cacheTydataAgentCommissionDeductionIdPrefix, data.Id)
|
|
||||||
return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
|
|
||||||
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, agentCommissionDeductionRowsExpectAutoSet)
|
|
||||||
if session != nil {
|
|
||||||
return session.ExecCtx(ctx, query, data.AgentId, data.DeductedAgentId, data.Amount, data.ProductId, data.OrderId, data.Type, data.Status, data.DeleteTime, data.DelState, data.Version)
|
|
||||||
}
|
|
||||||
return conn.ExecCtx(ctx, query, data.AgentId, data.DeductedAgentId, data.Amount, data.ProductId, data.OrderId, data.Type, data.Status, data.DeleteTime, data.DelState, data.Version)
|
|
||||||
}, tydataAgentCommissionDeductionIdKey)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *defaultAgentCommissionDeductionModel) FindOne(ctx context.Context, id int64) (*AgentCommissionDeduction, error) {
|
|
||||||
tydataAgentCommissionDeductionIdKey := fmt.Sprintf("%s%v", cacheTydataAgentCommissionDeductionIdPrefix, id)
|
|
||||||
var resp AgentCommissionDeduction
|
|
||||||
err := m.QueryRowCtx(ctx, &resp, tydataAgentCommissionDeductionIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
|
|
||||||
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", agentCommissionDeductionRows, m.table)
|
|
||||||
return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo)
|
|
||||||
})
|
|
||||||
switch err {
|
|
||||||
case nil:
|
|
||||||
return &resp, nil
|
|
||||||
case sqlc.ErrNotFound:
|
|
||||||
return nil, ErrNotFound
|
|
||||||
default:
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *defaultAgentCommissionDeductionModel) Update(ctx context.Context, session sqlx.Session, data *AgentCommissionDeduction) (sql.Result, error) {
|
|
||||||
tydataAgentCommissionDeductionIdKey := fmt.Sprintf("%s%v", cacheTydataAgentCommissionDeductionIdPrefix, data.Id)
|
|
||||||
return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
|
|
||||||
query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, agentCommissionDeductionRowsWithPlaceHolder)
|
|
||||||
if session != nil {
|
|
||||||
return session.ExecCtx(ctx, query, data.AgentId, data.DeductedAgentId, data.Amount, data.ProductId, data.OrderId, data.Type, data.Status, data.DeleteTime, data.DelState, data.Version, data.Id)
|
|
||||||
}
|
|
||||||
return conn.ExecCtx(ctx, query, data.AgentId, data.DeductedAgentId, data.Amount, data.ProductId, data.OrderId, data.Type, data.Status, data.DeleteTime, data.DelState, data.Version, data.Id)
|
|
||||||
}, tydataAgentCommissionDeductionIdKey)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *defaultAgentCommissionDeductionModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AgentCommissionDeduction) error {
|
|
||||||
|
|
||||||
oldVersion := data.Version
|
|
||||||
data.Version += 1
|
|
||||||
|
|
||||||
var sqlResult sql.Result
|
|
||||||
var err error
|
|
||||||
|
|
||||||
tydataAgentCommissionDeductionIdKey := fmt.Sprintf("%s%v", cacheTydataAgentCommissionDeductionIdPrefix, data.Id)
|
|
||||||
sqlResult, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
|
|
||||||
query := fmt.Sprintf("update %s set %s where `id` = ? and version = ? ", m.table, agentCommissionDeductionRowsWithPlaceHolder)
|
|
||||||
if session != nil {
|
|
||||||
return session.ExecCtx(ctx, query, data.AgentId, data.DeductedAgentId, data.Amount, data.ProductId, data.OrderId, data.Type, data.Status, data.DeleteTime, data.DelState, data.Version, data.Id, oldVersion)
|
|
||||||
}
|
|
||||||
return conn.ExecCtx(ctx, query, data.AgentId, data.DeductedAgentId, data.Amount, data.ProductId, data.OrderId, data.Type, data.Status, data.DeleteTime, data.DelState, data.Version, data.Id, oldVersion)
|
|
||||||
}, tydataAgentCommissionDeductionIdKey)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
updateCount, err := sqlResult.RowsAffected()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if updateCount == 0 {
|
|
||||||
return ErrNoRowsUpdate
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *defaultAgentCommissionDeductionModel) DeleteSoft(ctx context.Context, session sqlx.Session, data *AgentCommissionDeduction) error {
|
|
||||||
data.DelState = globalkey.DelStateYes
|
|
||||||
data.DeleteTime = sql.NullTime{Time: time.Now(), Valid: true}
|
|
||||||
if err := m.UpdateWithVersion(ctx, session, data); err != nil {
|
|
||||||
return errors.Wrapf(errors.New("delete soft failed "), "AgentCommissionDeductionModel delete err : %+v", err)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *defaultAgentCommissionDeductionModel) FindSum(ctx context.Context, builder squirrel.SelectBuilder, field string) (float64, error) {
|
|
||||||
|
|
||||||
if len(field) == 0 {
|
|
||||||
return 0, errors.Wrapf(errors.New("FindSum Least One Field"), "FindSum Least One Field")
|
|
||||||
}
|
|
||||||
|
|
||||||
builder = builder.Columns("IFNULL(SUM(" + field + "),0)")
|
|
||||||
|
|
||||||
query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql()
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
|
|
||||||
var resp float64
|
|
||||||
err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...)
|
|
||||||
switch err {
|
|
||||||
case nil:
|
|
||||||
return resp, nil
|
|
||||||
default:
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *defaultAgentCommissionDeductionModel) FindCount(ctx context.Context, builder squirrel.SelectBuilder, field string) (int64, error) {
|
|
||||||
|
|
||||||
if len(field) == 0 {
|
|
||||||
return 0, errors.Wrapf(errors.New("FindCount Least One Field"), "FindCount Least One Field")
|
|
||||||
}
|
|
||||||
|
|
||||||
builder = builder.Columns("COUNT(" + field + ")")
|
|
||||||
|
|
||||||
query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql()
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
|
|
||||||
var resp int64
|
|
||||||
err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...)
|
|
||||||
switch err {
|
|
||||||
case nil:
|
|
||||||
return resp, nil
|
|
||||||
default:
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *defaultAgentCommissionDeductionModel) FindAll(ctx context.Context, builder squirrel.SelectBuilder, orderBy string) ([]*AgentCommissionDeduction, error) {
|
|
||||||
|
|
||||||
builder = builder.Columns(agentCommissionDeductionRows)
|
|
||||||
|
|
||||||
if orderBy == "" {
|
|
||||||
builder = builder.OrderBy("id DESC")
|
|
||||||
} else {
|
|
||||||
builder = builder.OrderBy(orderBy)
|
|
||||||
}
|
|
||||||
|
|
||||||
query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
var resp []*AgentCommissionDeduction
|
|
||||||
err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...)
|
|
||||||
switch err {
|
|
||||||
case nil:
|
|
||||||
return resp, nil
|
|
||||||
default:
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *defaultAgentCommissionDeductionModel) FindPageListByPage(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentCommissionDeduction, error) {
|
|
||||||
|
|
||||||
builder = builder.Columns(agentCommissionDeductionRows)
|
|
||||||
|
|
||||||
if orderBy == "" {
|
|
||||||
builder = builder.OrderBy("id DESC")
|
|
||||||
} else {
|
|
||||||
builder = builder.OrderBy(orderBy)
|
|
||||||
}
|
|
||||||
|
|
||||||
if page < 1 {
|
|
||||||
page = 1
|
|
||||||
}
|
|
||||||
offset := (page - 1) * pageSize
|
|
||||||
|
|
||||||
query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
var resp []*AgentCommissionDeduction
|
|
||||||
err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...)
|
|
||||||
switch err {
|
|
||||||
case nil:
|
|
||||||
return resp, nil
|
|
||||||
default:
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *defaultAgentCommissionDeductionModel) FindPageListByPageWithTotal(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentCommissionDeduction, int64, error) {
|
|
||||||
|
|
||||||
total, err := m.FindCount(ctx, builder, "id")
|
|
||||||
if err != nil {
|
|
||||||
return nil, 0, err
|
|
||||||
}
|
|
||||||
|
|
||||||
builder = builder.Columns(agentCommissionDeductionRows)
|
|
||||||
|
|
||||||
if orderBy == "" {
|
|
||||||
builder = builder.OrderBy("id DESC")
|
|
||||||
} else {
|
|
||||||
builder = builder.OrderBy(orderBy)
|
|
||||||
}
|
|
||||||
|
|
||||||
if page < 1 {
|
|
||||||
page = 1
|
|
||||||
}
|
|
||||||
offset := (page - 1) * pageSize
|
|
||||||
|
|
||||||
query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql()
|
|
||||||
if err != nil {
|
|
||||||
return nil, total, err
|
|
||||||
}
|
|
||||||
|
|
||||||
var resp []*AgentCommissionDeduction
|
|
||||||
err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...)
|
|
||||||
switch err {
|
|
||||||
case nil:
|
|
||||||
return resp, total, nil
|
|
||||||
default:
|
|
||||||
return nil, total, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *defaultAgentCommissionDeductionModel) FindPageListByIdDESC(ctx context.Context, builder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AgentCommissionDeduction, error) {
|
|
||||||
|
|
||||||
builder = builder.Columns(agentCommissionDeductionRows)
|
|
||||||
|
|
||||||
if preMinId > 0 {
|
|
||||||
builder = builder.Where(" id < ? ", preMinId)
|
|
||||||
}
|
|
||||||
|
|
||||||
query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id DESC").Limit(uint64(pageSize)).ToSql()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
var resp []*AgentCommissionDeduction
|
|
||||||
err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...)
|
|
||||||
switch err {
|
|
||||||
case nil:
|
|
||||||
return resp, nil
|
|
||||||
default:
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *defaultAgentCommissionDeductionModel) FindPageListByIdASC(ctx context.Context, builder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AgentCommissionDeduction, error) {
|
|
||||||
|
|
||||||
builder = builder.Columns(agentCommissionDeductionRows)
|
|
||||||
|
|
||||||
if preMaxId > 0 {
|
|
||||||
builder = builder.Where(" id > ? ", preMaxId)
|
|
||||||
}
|
|
||||||
|
|
||||||
query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id ASC").Limit(uint64(pageSize)).ToSql()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
var resp []*AgentCommissionDeduction
|
|
||||||
err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...)
|
|
||||||
switch err {
|
|
||||||
case nil:
|
|
||||||
return resp, nil
|
|
||||||
default:
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *defaultAgentCommissionDeductionModel) Trans(ctx context.Context, fn func(ctx context.Context, session sqlx.Session) error) error {
|
|
||||||
|
|
||||||
return m.TransactCtx(ctx, func(ctx context.Context, session sqlx.Session) error {
|
|
||||||
return fn(ctx, session)
|
|
||||||
})
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *defaultAgentCommissionDeductionModel) SelectBuilder() squirrel.SelectBuilder {
|
|
||||||
return squirrel.Select().From(m.table)
|
|
||||||
}
|
|
||||||
func (m *defaultAgentCommissionDeductionModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
|
|
||||||
tydataAgentCommissionDeductionIdKey := fmt.Sprintf("%s%v", cacheTydataAgentCommissionDeductionIdPrefix, id)
|
|
||||||
_, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
|
|
||||||
query := fmt.Sprintf("delete from %s where `id` = ?", m.table)
|
|
||||||
if session != nil {
|
|
||||||
return session.ExecCtx(ctx, query, id)
|
|
||||||
}
|
|
||||||
return conn.ExecCtx(ctx, query, id)
|
|
||||||
}, tydataAgentCommissionDeductionIdKey)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
func (m *defaultAgentCommissionDeductionModel) formatPrimary(primary interface{}) string {
|
|
||||||
return fmt.Sprintf("%s%v", cacheTydataAgentCommissionDeductionIdPrefix, primary)
|
|
||||||
}
|
|
||||||
func (m *defaultAgentCommissionDeductionModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error {
|
|
||||||
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", agentCommissionDeductionRows, m.table)
|
|
||||||
return conn.QueryRowCtx(ctx, v, query, primary, globalkey.DelStateNo)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *defaultAgentCommissionDeductionModel) tableName() string {
|
|
||||||
return m.table
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user