diff --git a/app/main/api/desc/admin/admin_agent.api b/app/main/api/desc/admin/admin_agent.api index 19553bf..16632f1 100644 --- a/app/main/api/desc/admin/admin_agent.api +++ b/app/main/api/desc/admin/admin_agent.api @@ -26,6 +26,14 @@ service main { @handler AdminGetAgentCommissionList 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 get /agent-reward/list (AdminGetAgentRewardListReq) returns (AdminGetAgentRewardListResp) @@ -169,6 +177,29 @@ type ( 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 { Page int64 `form:"page"` // 页码 diff --git a/app/main/api/internal/handler/admin_agent/adminbatchunfreezeagentcommissionhandler.go b/app/main/api/internal/handler/admin_agent/adminbatchunfreezeagentcommissionhandler.go new file mode 100644 index 0000000..df48f1d --- /dev/null +++ b/app/main/api/internal/handler/admin_agent/adminbatchunfreezeagentcommissionhandler.go @@ -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) + } +} diff --git a/app/main/api/internal/handler/admin_agent/adminupdateagentcommissionstatushandler.go b/app/main/api/internal/handler/admin_agent/adminupdateagentcommissionstatushandler.go new file mode 100644 index 0000000..285ff96 --- /dev/null +++ b/app/main/api/internal/handler/admin_agent/adminupdateagentcommissionstatushandler.go @@ -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) + } +} diff --git a/app/main/api/internal/handler/routes.go b/app/main/api/internal/handler/routes.go index 3b0d28c..6e0552e 100644 --- a/app/main/api/internal/handler/routes.go +++ b/app/main/api/internal/handler/routes.go @@ -42,11 +42,21 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { Path: "/agent-commission-deduction/list", Handler: admin_agent.AdminGetAgentCommissionDeductionListHandler(serverCtx), }, + { + Method: http.MethodPost, + Path: "/agent-commission/batch-unfreeze", + Handler: admin_agent.AdminBatchUnfreezeAgentCommissionHandler(serverCtx), + }, { Method: http.MethodGet, Path: "/agent-commission/list", Handler: admin_agent.AdminGetAgentCommissionListHandler(serverCtx), }, + { + Method: http.MethodPost, + Path: "/agent-commission/update-status", + Handler: admin_agent.AdminUpdateAgentCommissionStatusHandler(serverCtx), + }, { Method: http.MethodGet, Path: "/agent-link/list", diff --git a/app/main/api/internal/logic/admin_agent/adminbatchunfreezeagentcommissionlogic.go b/app/main/api/internal/logic/admin_agent/adminbatchunfreezeagentcommissionlogic.go new file mode 100644 index 0000000..74f9021 --- /dev/null +++ b/app/main/api/internal/logic/admin_agent/adminbatchunfreezeagentcommissionlogic.go @@ -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 +} diff --git a/app/main/api/internal/logic/admin_agent/adminupdateagentcommissionstatuslogic.go b/app/main/api/internal/logic/admin_agent/adminupdateagentcommissionstatuslogic.go new file mode 100644 index 0000000..485cb18 --- /dev/null +++ b/app/main/api/internal/logic/admin_agent/adminupdateagentcommissionstatuslogic.go @@ -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 +} diff --git a/app/main/api/internal/queue/unfreezeCommission.go b/app/main/api/internal/queue/unfreezeCommission.go index 2419b01..6fd562d 100644 --- a/app/main/api/internal/queue/unfreezeCommission.go +++ b/app/main/api/internal/queue/unfreezeCommission.go @@ -20,9 +20,6 @@ const ( CommissionStatusFrozen = 1 // 冻结佣金 ) -// UNFREEZE_COMMISSION_DELAY_DAYS 定义延迟解冻天数 -const UNFREEZE_COMMISSION_DELAY_DAYS = 3 // 三天后解冻 - type UnfreezeCommissionHandler struct { svcCtx *svc.ServiceContext } @@ -63,26 +60,8 @@ func (l *UnfreezeCommissionHandler) ProcessTask(ctx context.Context, t *asynq.Ta 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 { - // 更新佣金状态为已发放 - 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) if err != nil { @@ -104,6 +83,17 @@ func (l *UnfreezeCommissionHandler) ProcessTask(ctx context.Context, t *asynq.Ta 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,已将佣金金额从冻结余额转移到可用余额", commissionID, commission.AgentId, commissionAmount) return nil diff --git a/app/main/api/internal/service/agentService.go b/app/main/api/internal/service/agentService.go index 219b7e6..9e43024 100644 --- a/app/main/api/internal/service/agentService.go +++ b/app/main/api/internal/service/agentService.go @@ -200,7 +200,7 @@ func (l *AgentService) AgentProcess(ctx context.Context, order *model.Order) err if len(commissions) > 0 { // 为所有新创建的佣金记录触发解冻任务 for _, commission := range commissions { - // 发送解冻任务,将在3天后执行 + // 发送解冻任务,将在10小时后执行 sendTaskErr := l.AsynqService.SendUnfreezeCommissionTask(commission.Id) if sendTaskErr != nil { logx.Errorf("发送佣金解冻任务失败,佣金ID: %d, 错误: %v", commission.Id, sendTaskErr) diff --git a/app/main/api/internal/service/asynqService.go b/app/main/api/internal/service/asynqService.go index f617bf8..4d13ecd 100644 --- a/app/main/api/internal/service/asynqService.go +++ b/app/main/api/internal/service/asynqService.go @@ -4,6 +4,8 @@ package service import ( "encoding/json" + "time" + "tydata-server/app/main/api/internal/config" "tydata-server/app/main/api/internal/types" @@ -72,7 +74,8 @@ func (s *AsynqService) SendUnfreezeCommissionTask(commissionID int64) error { } options := []asynq.Option{ - asynq.MaxRetry(5), // 设置最大重试次数 + asynq.ProcessIn(10 * time.Hour), // 10小时后执行 + asynq.MaxRetry(5), // 设置最大重试次数 } task := asynq.NewTask(types.MsgUnfreezeCommission, payloadBytes, options...) diff --git a/app/main/api/internal/types/types.go b/app/main/api/internal/types/types.go index 3523825..de30fa4 100644 --- a/app/main/api/internal/types/types.go +++ b/app/main/api/internal/types/types.go @@ -36,6 +36,16 @@ type AdminAssignRoleApiResp struct { 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 { Ids []int64 `json:"ids"` Status int64 `json:"status"` @@ -784,6 +794,15 @@ type AdminRoleApiInfo struct { 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 { Id int64 `json:"id"` // 主键 LevelName string `json:"level_name"` // 会员级别名称 diff --git a/app/main/model/agentCommissionModel_gen.go b/app/main/model/agentCommissionModel_gen.go index 83ad858..fa368aa 100644 --- a/app/main/model/agentCommissionModel_gen.go +++ b/app/main/model/agentCommissionModel_gen.go @@ -27,7 +27,7 @@ var ( agentCommissionRowsExpectAutoSet = 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 ( @@ -60,7 +60,7 @@ type ( OrderId int64 `db:"order_id"` Amount float64 `db:"amount"` ProductId int64 `db:"product_id"` // 产品ID - Status int64 `db:"status"` + Status int64 `db:"status"` // 状态:0-已结算,1-冻结中,2-已取消 CreateTime time.Time `db:"create_time"` UpdateTime time.Time `db:"update_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) { 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) { query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?)", m.table, agentCommissionRowsExpectAutoSet) 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 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) { - hmAgentCommissionIdKey := fmt.Sprintf("%s%v", cacheHmAgentCommissionIdPrefix, id) + tydataAgentCommissionIdKey := fmt.Sprintf("%s%v", cacheTydataAgentCommissionIdPrefix, id) 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) 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) { - 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) { query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, agentCommissionRowsWithPlaceHolder) 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 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 { @@ -124,14 +124,14 @@ func (m *defaultAgentCommissionModel) UpdateWithVersion(ctx context.Context, ses var sqlResult sql.Result 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) { query := fmt.Sprintf("update %s set %s where `id` = ? and version = ? ", m.table, agentCommissionRowsWithPlaceHolder) 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 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 { return err } @@ -349,18 +349,18 @@ func (m *defaultAgentCommissionModel) SelectBuilder() squirrel.SelectBuilder { return squirrel.Select().From(m.table) } 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) { 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) - }, hmAgentCommissionIdKey) + }, tydataAgentCommissionIdKey) return err } 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 { query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", agentCommissionRows, m.table) diff --git a/deploy/script/gen_models.ps1 b/deploy/script/gen_models.ps1 index 9e10a74..8dfec08 100644 --- a/deploy/script/gen_models.ps1 +++ b/deploy/script/gen_models.ps1 @@ -11,8 +11,8 @@ $tables = @( # "agent_active_stat", # "agent_audit", # "agent_closure", - # "agent_commission", - "agent_commission_deduction" + "agent_commission" + # "agent_commission_deduction" # "agent_link", # "agent_membership_config", # "agent_membership_recharge_order" diff --git a/deploy/script/model/agentCommissionDeductionModel.go b/deploy/script/model/agentCommissionDeductionModel.go deleted file mode 100644 index 3318cf1..0000000 --- a/deploy/script/model/agentCommissionDeductionModel.go +++ /dev/null @@ -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), - } -} diff --git a/deploy/script/model/agentCommissionDeductionModel_gen.go b/deploy/script/model/agentCommissionDeductionModel_gen.go deleted file mode 100644 index 3bb86a8..0000000 --- a/deploy/script/model/agentCommissionDeductionModel_gen.go +++ /dev/null @@ -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 -}