diff --git a/app/user/cmd/api/desc/agent.api b/app/user/cmd/api/desc/agent.api new file mode 100644 index 0000000..1e61f20 --- /dev/null +++ b/app/user/cmd/api/desc/agent.api @@ -0,0 +1,29 @@ +syntax = "v1" + +info ( + title: "代理服务" + desc: "代理服务接口" + author: "Liangzai" + email: "2440983361@qq.com" + version: "v1" +) + +import ( + "agent/agent.api" +) + +@server ( + prefix: api/v1 + group: agent +) + +service main { + // 提交代理申请 + @handler ApplyForAgent + post /agent/apply (AgentApplyReq) returns (AgentApplyResp) + + // 查询代理申请状态 + @handler GetAgentAuditStatus + get /agent/audit/status (AgentAuditStatusReq) returns (AgentAuditStatusResp) +} + diff --git a/app/user/cmd/api/desc/agent/agent.api b/app/user/cmd/api/desc/agent/agent.api new file mode 100644 index 0000000..4216265 --- /dev/null +++ b/app/user/cmd/api/desc/agent/agent.api @@ -0,0 +1,34 @@ +syntax = "v1" + +info ( + title: "代理服务" + desc: "代理服务接口" + author: "Liangzai" + email: "2440983361@qq.com" + version: "v1" +) + +type ( + // 代理申请请求参数 + AgentApplyReq { + UserID int64 `json:"user_id"` + Region string `json:"region"` + Mobile string `json:"mobile"` + WechatID string `json:"wechat_id"` + } + // 代理申请响应 + AgentApplyResp { + Status string `json:"status"` + Message string `json:"message"` + } + // 查询代理申请状态请求参数 + AgentAuditStatusReq { + UserID int64 `json:"user_id"` + } + // 查询代理申请状态响应 + AgentAuditStatusResp { + Status int `json:"status"` // 0=待审核,1=审核通过,2=审核未通过 + AuditReason string `json:"audit_reason"` + } +) + diff --git a/app/user/cmd/api/desc/main.api b/app/user/cmd/api/desc/main.api index b735f1d..0832ccd 100644 --- a/app/user/cmd/api/desc/main.api +++ b/app/user/cmd/api/desc/main.api @@ -12,3 +12,4 @@ import "user.api" import "query.api" import "pay.api" import "product.api" +import "agent.api" diff --git a/app/user/cmd/api/desc/pay/pay.api b/app/user/cmd/api/desc/pay/pay.api index 2d80db1..782db10 100644 --- a/app/user/cmd/api/desc/pay/pay.api +++ b/app/user/cmd/api/desc/pay/pay.api @@ -14,14 +14,14 @@ type ( } PaymentResp { prepayData interface{} `json:"prepay_data"` - prepayId string `json:"prepay_id"` - OrderID int64 `json:"order_id"` + prepayId string `json:"prepay_id"` + OrderID int64 `json:"order_id"` } ) type ( IapCallbackReq { - OrderID int64 `json:"order_id" validate:"required"` + OrderID int64 `json:"order_id" validate:"required"` TransactionReceipt string `json:"transaction_receipt" validate:"required"` } ) diff --git a/app/user/cmd/api/desc/query.api b/app/user/cmd/api/desc/query.api index f61d12f..63b29e7 100644 --- a/app/user/cmd/api/desc/query.api +++ b/app/user/cmd/api/desc/query.api @@ -22,40 +22,6 @@ service main { @doc "query service" @handler queryService post /query/service/:product (QueryServiceReq) returns (QueryServiceResp) - - @doc "query marriage" - @handler marriage - post /query/marriage (QueryReq) returns (QueryResp) - - // 家政服务查询 - @doc "query home service" - @handler homeService - post /query/homeService (QueryReq) returns (QueryResp) - - // 风险评估查询 - @doc "query risk assessment" - @handler riskAssessment - post /query/riskAssessment (QueryReq) returns (QueryResp) - - // 企业信息查询 - @doc "query company info" - @handler companyInfo - post /query/companyInfo (QueryReq) returns (QueryResp) - - // 租赁信息查询 - @doc "query rental info" - @handler rentalInfo - post /query/rentalInfo (QueryReq) returns (QueryResp) - - // 贷前背景调查 - @doc "query pre-loan background check" - @handler preLoanBackgroundCheck - post /query/preLoanBackgroundCheck (QueryReq) returns (QueryResp) - - // 一般背景调查 - @doc "query general background check" - @handler backgroundCheck - post /query/backgroundCheck (QueryReq) returns (QueryResp) } @server ( diff --git a/app/user/cmd/api/internal/handler/query/rentalinfohandler.go b/app/user/cmd/api/internal/handler/agent/applyforagenthandler.go similarity index 66% rename from app/user/cmd/api/internal/handler/query/rentalinfohandler.go rename to app/user/cmd/api/internal/handler/agent/applyforagenthandler.go index a14ec19..4ec382f 100644 --- a/app/user/cmd/api/internal/handler/query/rentalinfohandler.go +++ b/app/user/cmd/api/internal/handler/agent/applyforagenthandler.go @@ -1,19 +1,19 @@ -package query +package agent import ( "net/http" "github.com/zeromicro/go-zero/rest/httpx" - "qnc-server/app/user/cmd/api/internal/logic/query" + "qnc-server/app/user/cmd/api/internal/logic/agent" "qnc-server/app/user/cmd/api/internal/svc" "qnc-server/app/user/cmd/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" ) -func RentalInfoHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { +func ApplyForAgentHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - var req types.QueryReq + var req types.AgentApplyReq if err := httpx.Parse(r, &req); err != nil { result.ParamErrorResult(r, w, err) return @@ -22,8 +22,8 @@ func RentalInfoHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { result.ParamValidateErrorResult(r, w, err) return } - l := query.NewRentalInfoLogic(r.Context(), svcCtx) - resp, err := l.RentalInfo(&req) + l := agent.NewApplyForAgentLogic(r.Context(), svcCtx) + resp, err := l.ApplyForAgent(&req) result.HttpResult(r, w, resp, err) } } diff --git a/app/user/cmd/api/internal/handler/query/backgroundcheckhandler.go b/app/user/cmd/api/internal/handler/agent/getagentauditstatushandler.go similarity index 64% rename from app/user/cmd/api/internal/handler/query/backgroundcheckhandler.go rename to app/user/cmd/api/internal/handler/agent/getagentauditstatushandler.go index 8c1c9bd..f2aa2ca 100644 --- a/app/user/cmd/api/internal/handler/query/backgroundcheckhandler.go +++ b/app/user/cmd/api/internal/handler/agent/getagentauditstatushandler.go @@ -1,19 +1,19 @@ -package query +package agent import ( "net/http" "github.com/zeromicro/go-zero/rest/httpx" - "qnc-server/app/user/cmd/api/internal/logic/query" + "qnc-server/app/user/cmd/api/internal/logic/agent" "qnc-server/app/user/cmd/api/internal/svc" "qnc-server/app/user/cmd/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" ) -func BackgroundCheckHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { +func GetAgentAuditStatusHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - var req types.QueryReq + var req types.AgentAuditStatusReq if err := httpx.Parse(r, &req); err != nil { result.ParamErrorResult(r, w, err) return @@ -22,8 +22,8 @@ func BackgroundCheckHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { result.ParamValidateErrorResult(r, w, err) return } - l := query.NewBackgroundCheckLogic(r.Context(), svcCtx) - resp, err := l.BackgroundCheck(&req) + l := agent.NewGetAgentAuditStatusLogic(r.Context(), svcCtx) + resp, err := l.GetAgentAuditStatus(&req) result.HttpResult(r, w, resp, err) } } diff --git a/app/user/cmd/api/internal/handler/query/companyinfohandler.go b/app/user/cmd/api/internal/handler/query/companyinfohandler.go deleted file mode 100644 index 8665ab7..0000000 --- a/app/user/cmd/api/internal/handler/query/companyinfohandler.go +++ /dev/null @@ -1,29 +0,0 @@ -package query - -import ( - "net/http" - - "github.com/zeromicro/go-zero/rest/httpx" - "qnc-server/app/user/cmd/api/internal/logic/query" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - "qnc-server/common/result" - "qnc-server/pkg/lzkit/validator" -) - -func CompanyInfoHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - var req types.QueryReq - 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 := query.NewCompanyInfoLogic(r.Context(), svcCtx) - resp, err := l.CompanyInfo(&req) - result.HttpResult(r, w, resp, err) - } -} diff --git a/app/user/cmd/api/internal/handler/query/homeservicehandler.go b/app/user/cmd/api/internal/handler/query/homeservicehandler.go deleted file mode 100644 index 37c58bb..0000000 --- a/app/user/cmd/api/internal/handler/query/homeservicehandler.go +++ /dev/null @@ -1,29 +0,0 @@ -package query - -import ( - "net/http" - - "github.com/zeromicro/go-zero/rest/httpx" - "qnc-server/app/user/cmd/api/internal/logic/query" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - "qnc-server/common/result" - "qnc-server/pkg/lzkit/validator" -) - -func HomeServiceHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - var req types.QueryReq - 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 := query.NewHomeServiceLogic(r.Context(), svcCtx) - resp, err := l.HomeService(&req) - result.HttpResult(r, w, resp, err) - } -} diff --git a/app/user/cmd/api/internal/handler/query/marriagehandler.go b/app/user/cmd/api/internal/handler/query/marriagehandler.go deleted file mode 100644 index c6077ed..0000000 --- a/app/user/cmd/api/internal/handler/query/marriagehandler.go +++ /dev/null @@ -1,29 +0,0 @@ -package query - -import ( - "net/http" - - "github.com/zeromicro/go-zero/rest/httpx" - "qnc-server/app/user/cmd/api/internal/logic/query" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - "qnc-server/common/result" - "qnc-server/pkg/lzkit/validator" -) - -func MarriageHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - var req types.QueryReq - 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 := query.NewMarriageLogic(r.Context(), svcCtx) - resp, err := l.Marriage(&req) - result.HttpResult(r, w, resp, err) - } -} diff --git a/app/user/cmd/api/internal/handler/query/preloanbackgroundcheckhandler.go b/app/user/cmd/api/internal/handler/query/preloanbackgroundcheckhandler.go deleted file mode 100644 index e73556e..0000000 --- a/app/user/cmd/api/internal/handler/query/preloanbackgroundcheckhandler.go +++ /dev/null @@ -1,29 +0,0 @@ -package query - -import ( - "net/http" - - "github.com/zeromicro/go-zero/rest/httpx" - "qnc-server/app/user/cmd/api/internal/logic/query" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - "qnc-server/common/result" - "qnc-server/pkg/lzkit/validator" -) - -func PreLoanBackgroundCheckHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - var req types.QueryReq - 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 := query.NewPreLoanBackgroundCheckLogic(r.Context(), svcCtx) - resp, err := l.PreLoanBackgroundCheck(&req) - result.HttpResult(r, w, resp, err) - } -} diff --git a/app/user/cmd/api/internal/handler/query/riskassessmenthandler.go b/app/user/cmd/api/internal/handler/query/riskassessmenthandler.go deleted file mode 100644 index df87e33..0000000 --- a/app/user/cmd/api/internal/handler/query/riskassessmenthandler.go +++ /dev/null @@ -1,29 +0,0 @@ -package query - -import ( - "net/http" - - "github.com/zeromicro/go-zero/rest/httpx" - "qnc-server/app/user/cmd/api/internal/logic/query" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - "qnc-server/common/result" - "qnc-server/pkg/lzkit/validator" -) - -func RiskAssessmentHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - var req types.QueryReq - 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 := query.NewRiskAssessmentLogic(r.Context(), svcCtx) - resp, err := l.RiskAssessment(&req) - result.HttpResult(r, w, resp, err) - } -} diff --git a/app/user/cmd/api/internal/handler/routes.go b/app/user/cmd/api/internal/handler/routes.go index 5f3ec88..865c58d 100644 --- a/app/user/cmd/api/internal/handler/routes.go +++ b/app/user/cmd/api/internal/handler/routes.go @@ -4,6 +4,7 @@ package handler import ( "net/http" + agent "qnc-server/app/user/cmd/api/internal/handler/agent" auth "qnc-server/app/user/cmd/api/internal/handler/auth" notification "qnc-server/app/user/cmd/api/internal/handler/notification" pay "qnc-server/app/user/cmd/api/internal/handler/pay" @@ -16,6 +17,22 @@ import ( ) func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { + server.AddRoutes( + []rest.Route{ + { + Method: http.MethodPost, + Path: "/agent/apply", + Handler: agent.ApplyForAgentHandler(serverCtx), + }, + { + Method: http.MethodGet, + Path: "/agent/audit/status", + Handler: agent.GetAgentAuditStatusHandler(serverCtx), + }, + }, + rest.WithPrefix("/api/v1"), + ) + server.AddRoutes( []rest.Route{ { @@ -114,48 +131,6 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { server.AddRoutes( []rest.Route{ - { - // query general background check - Method: http.MethodPost, - Path: "/query/backgroundCheck", - Handler: query.BackgroundCheckHandler(serverCtx), - }, - { - // query company info - Method: http.MethodPost, - Path: "/query/companyInfo", - Handler: query.CompanyInfoHandler(serverCtx), - }, - { - // query home service - Method: http.MethodPost, - Path: "/query/homeService", - Handler: query.HomeServiceHandler(serverCtx), - }, - { - // query marriage - Method: http.MethodPost, - Path: "/query/marriage", - Handler: query.MarriageHandler(serverCtx), - }, - { - // query pre-loan background check - Method: http.MethodPost, - Path: "/query/preLoanBackgroundCheck", - Handler: query.PreLoanBackgroundCheckHandler(serverCtx), - }, - { - // query rental info - Method: http.MethodPost, - Path: "/query/rentalInfo", - Handler: query.RentalInfoHandler(serverCtx), - }, - { - // query risk assessment - Method: http.MethodPost, - Path: "/query/riskAssessment", - Handler: query.RiskAssessmentHandler(serverCtx), - }, { // query service Method: http.MethodPost, diff --git a/app/user/cmd/api/internal/logic/agent/applyforagentlogic.go b/app/user/cmd/api/internal/logic/agent/applyforagentlogic.go new file mode 100644 index 0000000..8212729 --- /dev/null +++ b/app/user/cmd/api/internal/logic/agent/applyforagentlogic.go @@ -0,0 +1,52 @@ +package agent + +import ( + "context" + "github.com/pkg/errors" + "qnc-server/app/user/model" + "qnc-server/common/xerr" + "qnc-server/pkg/lzkit/lzUtils" + "time" + + "qnc-server/app/user/cmd/api/internal/svc" + "qnc-server/app/user/cmd/api/internal/types" + + "github.com/zeromicro/go-zero/core/logx" +) + +type ApplyForAgentLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewApplyForAgentLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ApplyForAgentLogic { + return &ApplyForAgentLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *ApplyForAgentLogic) ApplyForAgent(req *types.AgentApplyReq) (resp *types.AgentApplyResp, err error) { + var agentAudit model.AgentAudit + agentAudit.Mobile = req.Mobile + agentAudit.Region = req.Region + agentAudit.WechatId = lzUtils.StringToNullString(req.WechatID) + agentAudit.Status = 0 + agentAuditInsert, err := l.svcCtx.AgentAuditModel.Insert(l.ctx, nil, &agentAudit) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "代理申请, 保存代理信息失败: %+v", err) + } + + go func() { + // 延迟 10 秒 + <-time.After(10 * time.Second) + // 查找刚刚插入的数据 + agentAuditID, _ := agentAuditInsert.LastInsertId() + agentAuditRow, _ := l.svcCtx.AgentAuditModel.FindOne(l.ctx, agentAuditID) + + l.svcCtx.AgentAuditModel.UpdateWithVersion(l.ctx, nil, agentAuditRow) + }() + return nil, nil +} diff --git a/app/user/cmd/api/internal/logic/agent/getagentauditstatuslogic.go b/app/user/cmd/api/internal/logic/agent/getagentauditstatuslogic.go new file mode 100644 index 0000000..1cd0318 --- /dev/null +++ b/app/user/cmd/api/internal/logic/agent/getagentauditstatuslogic.go @@ -0,0 +1,30 @@ +package agent + +import ( + "context" + + "qnc-server/app/user/cmd/api/internal/svc" + "qnc-server/app/user/cmd/api/internal/types" + + "github.com/zeromicro/go-zero/core/logx" +) + +type GetAgentAuditStatusLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewGetAgentAuditStatusLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetAgentAuditStatusLogic { + return &GetAgentAuditStatusLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *GetAgentAuditStatusLogic) GetAgentAuditStatus(req *types.AgentAuditStatusReq) (resp *types.AgentAuditStatusResp, err error) { + // todo: add your logic here and delete this line + + return +} diff --git a/app/user/cmd/api/internal/logic/product/getproductbyenlogic.go b/app/user/cmd/api/internal/logic/product/getproductbyenlogic.go index 85576a4..5edbfe0 100644 --- a/app/user/cmd/api/internal/logic/product/getproductbyenlogic.go +++ b/app/user/cmd/api/internal/logic/product/getproductbyenlogic.go @@ -47,6 +47,7 @@ func (l *GetProductByEnLogic) GetProductByEn(req *types.GetProductByEnRequest) ( if err != nil { return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "用户信息, 用户信息结构体复制失败, %+v", err) } + mr.MapReduceVoid(func(source chan<- interface{}) { for _, productFeature := range productFeatureAll { source <- productFeature.FeatureId diff --git a/app/user/cmd/api/internal/logic/query/backgroundchecklogic.go b/app/user/cmd/api/internal/logic/query/backgroundchecklogic.go deleted file mode 100644 index 7520a08..0000000 --- a/app/user/cmd/api/internal/logic/query/backgroundchecklogic.go +++ /dev/null @@ -1,140 +0,0 @@ -package query - -import ( - "context" - "encoding/hex" - "encoding/json" - "fmt" - "github.com/pkg/errors" - "github.com/zeromicro/go-zero/core/stores/redis" - "qnc-server/app/user/cmd/api/internal/service" - "qnc-server/common/ctxdata" - "qnc-server/common/xerr" - "qnc-server/pkg/lzkit/crypto" - "qnc-server/pkg/lzkit/validator" - "time" - - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - - "github.com/zeromicro/go-zero/core/logx" -) - -type BackgroundCheckLogic struct { - logx.Logger - ctx context.Context - svcCtx *svc.ServiceContext -} - -func NewBackgroundCheckLogic(ctx context.Context, svcCtx *svc.ServiceContext) *BackgroundCheckLogic { - return &BackgroundCheckLogic{ - Logger: logx.WithContext(ctx), - ctx: ctx, - svcCtx: svcCtx, - } -} - -func (l *BackgroundCheckLogic) BackgroundCheck(req *types.QueryReq) (resp *types.QueryResp, err error) { - userID, getUidErr := ctxdata.GetUidFromCtx(l.ctx) - if getUidErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "人事背调, 获取用户信息失败, %+v", getUidErr) - } - // 1、AES解密 - secretKey := l.svcCtx.Config.Encrypt.SecretKey - key, decodeErr := hex.DecodeString(secretKey) - if decodeErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "人事背调, 密钥获取失败: %+v", decodeErr) - } - decryptData, aesDecryptErr := crypto.AesDecrypt(req.Data, key) - if aesDecryptErr != nil || len(decryptData) == 0 { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "人事背调, 解密失败: %+v", decodeErr) - } - - // 2、校验 - var data types.BackgroundCheckReq - if unmarshalErr := json.Unmarshal(decryptData, &data); unmarshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "人事背调, 解密后的数据格式不正确: %+v", unmarshalErr) - } - - if validatorErr := validator.Validate(data); validatorErr != nil { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "人事背调, 参数不正确: %+v", validatorErr) - } - if data.Name == "刘福思" && data.IDCard == "45262419980929047X" && data.Mobile == "17776203797" { - // 缓存 - queryCache := types.QueryCache{ - Name: data.Name, - IDCard: data.IDCard, - Mobile: data.Mobile, - Product: "backgroundcheck", - } - jsonData, marshalErr := json.Marshal(queryCache) - if marshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "婚恋评估, 序列化参数失败: %+v", marshalErr) - } - outTradeNo := l.svcCtx.WechatPayService.GenerateOutTradeNo() - redisKey := fmt.Sprintf("%d:%s", userID, outTradeNo) - cacheErr := l.svcCtx.Redis.SetexCtx(l.ctx, redisKey, string(jsonData), int(2*time.Hour)) - if cacheErr != nil { - return nil, cacheErr - } - - return &types.QueryResp{Id: outTradeNo}, nil - } - // 校验验证码 - codeRedisKey := fmt.Sprintf("%s:%s", "query", data.Mobile) - cacheCode, err := l.svcCtx.Redis.Get(codeRedisKey) - if err != nil { - if errors.Is(err, redis.Nil) { - return nil, errors.Wrapf(xerr.NewErrMsg("验证码已过期"), "人事背调, 验证码过期: %s", data.Mobile) - } - return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "人事背调, 读取验证码redis缓存失败, mobile: %s, err: %+v", data.Mobile, err) - } - if cacheCode != data.Code { - return nil, errors.Wrapf(xerr.NewErrMsg("验证码不正确"), "人事背调, 验证码不正确: %s", data.Mobile) - } - - // 3、二要素三要素核验 - //twoVerification := service.TwoFactorVerificationRequest{ - // Name: data.Name, - // IDCard: data.IDCard, - //} - //verification, err := l.svcCtx.VerificationService.TwoFactorVerification(twoVerification) - //if err != nil { - // return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "人事背调, 二要素验证失败: %+v", err) - //} - //if !verification.Passed { - // return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.SERVER_COMMON_ERROR, verification.Err.Error()), "人事背调, 二要素验证不通过: %+v", err) - //} - // 3、二要素三要素核验 - threeVerification := service.ThreeFactorVerificationRequest{ - Name: data.Name, - IDCard: data.IDCard, - Mobile: data.Mobile, - } - verification, err := l.svcCtx.VerificationService.ThreeFactorVerification(threeVerification) - if err != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "人事背调, 三要素验证失败: %+v", err) - } - if !verification.Passed { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.SERVER_COMMON_ERROR, verification.Err.Error()), "人事背调, 三要素验证不通过: %+v", err) - } - // 缓存 - queryCache := types.QueryCache{ - Name: data.Name, - IDCard: data.IDCard, - Mobile: data.Mobile, - Product: "backgroundcheck", - } - jsonData, marshalErr := json.Marshal(queryCache) - if marshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "人事背调, 序列化参数失败: %+v", marshalErr) - } - outTradeNo := l.svcCtx.WechatPayService.GenerateOutTradeNo() - redisKey := fmt.Sprintf("%d:%s", userID, outTradeNo) - cacheErr := l.svcCtx.Redis.SetexCtx(l.ctx, redisKey, string(jsonData), int(2*time.Hour)) - if cacheErr != nil { - return nil, cacheErr - } - - return &types.QueryResp{Id: outTradeNo}, nil -} diff --git a/app/user/cmd/api/internal/logic/query/companyinfologic.go b/app/user/cmd/api/internal/logic/query/companyinfologic.go deleted file mode 100644 index ac793c0..0000000 --- a/app/user/cmd/api/internal/logic/query/companyinfologic.go +++ /dev/null @@ -1,140 +0,0 @@ -package query - -import ( - "context" - "encoding/hex" - "encoding/json" - "fmt" - "github.com/pkg/errors" - "github.com/zeromicro/go-zero/core/stores/redis" - "qnc-server/app/user/cmd/api/internal/service" - "qnc-server/common/ctxdata" - "qnc-server/common/xerr" - "qnc-server/pkg/lzkit/crypto" - "qnc-server/pkg/lzkit/validator" - "time" - - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - - "github.com/zeromicro/go-zero/core/logx" -) - -type CompanyInfoLogic struct { - logx.Logger - ctx context.Context - svcCtx *svc.ServiceContext -} - -func NewCompanyInfoLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CompanyInfoLogic { - return &CompanyInfoLogic{ - Logger: logx.WithContext(ctx), - ctx: ctx, - svcCtx: svcCtx, - } -} - -func (l *CompanyInfoLogic) CompanyInfo(req *types.QueryReq) (resp *types.QueryResp, err error) { - userID, getUidErr := ctxdata.GetUidFromCtx(l.ctx) - if getUidErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "企业报告, 获取用户信息失败, %+v", getUidErr) - } - // 1、AES解密 - secretKey := l.svcCtx.Config.Encrypt.SecretKey - key, decodeErr := hex.DecodeString(secretKey) - if decodeErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "企业报告, 密钥获取失败: %+v", decodeErr) - } - decryptData, aesDecryptErr := crypto.AesDecrypt(req.Data, key) - if aesDecryptErr != nil || len(decryptData) == 0 { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "企业报告, 解密失败: %+v", decodeErr) - } - - // 2、校验 - var data types.CompanyInfoReq - if unmarshalErr := json.Unmarshal(decryptData, &data); unmarshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "企业报告, 解密后的数据格式不正确: %+v", unmarshalErr) - } - - if validatorErr := validator.Validate(data); validatorErr != nil { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "企业报告, 参数不正确: %+v", validatorErr) - } - if data.Name == "刘福思" && data.IDCard == "45262419980929047X" && data.Mobile == "17776203797" { - // 缓存 - queryCache := types.QueryCache{ - Name: data.Name, - IDCard: data.IDCard, - Mobile: data.Mobile, - Product: "companyinfo", - } - jsonData, marshalErr := json.Marshal(queryCache) - if marshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "婚恋评估, 序列化参数失败: %+v", marshalErr) - } - outTradeNo := l.svcCtx.WechatPayService.GenerateOutTradeNo() - redisKey := fmt.Sprintf("%d:%s", userID, outTradeNo) - cacheErr := l.svcCtx.Redis.SetexCtx(l.ctx, redisKey, string(jsonData), int(2*time.Hour)) - if cacheErr != nil { - return nil, cacheErr - } - - return &types.QueryResp{Id: outTradeNo}, nil - } - // 校验验证码 - codeRedisKey := fmt.Sprintf("%s:%s", "query", data.Mobile) - cacheCode, err := l.svcCtx.Redis.Get(codeRedisKey) - if err != nil { - if errors.Is(err, redis.Nil) { - return nil, errors.Wrapf(xerr.NewErrMsg("验证码已过期"), "企业报告, 验证码过期: %s", data.Mobile) - } - return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "企业报告, 读取验证码redis缓存失败, mobile: %s, err: %+v", data.Mobile, err) - } - if cacheCode != data.Code { - return nil, errors.Wrapf(xerr.NewErrMsg("验证码不正确"), "企业报告, 验证码不正确: %s", data.Mobile) - } - - // 3、二要素三要素核验 - //twoVerification := service.TwoFactorVerificationRequest{ - // Name: data.Name, - // IDCard: data.IDCard, - //} - //verification, err := l.svcCtx.VerificationService.TwoFactorVerification(twoVerification) - //if err != nil { - // return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "企业报告, 二要素验证失败: %+v", err) - //} - //if !verification.Passed { - // return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.SERVER_COMMON_ERROR, verification.Err.Error()), "企业报告, 二要素验证不通过: %+v", err) - //} - // 3、二要素三要素核验 - threeVerification := service.ThreeFactorVerificationRequest{ - Name: data.Name, - IDCard: data.IDCard, - Mobile: data.Mobile, - } - verification, err := l.svcCtx.VerificationService.ThreeFactorVerification(threeVerification) - if err != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "企业报告, 三要素验证失败: %+v", err) - } - if !verification.Passed { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.SERVER_COMMON_ERROR, verification.Err.Error()), "企业报告, 三要素验证不通过: %+v", err) - } - // 缓存 - queryCache := types.QueryCache{ - Name: data.Name, - IDCard: data.IDCard, - Mobile: data.Mobile, - Product: "companyinfo", - } - jsonData, marshalErr := json.Marshal(queryCache) - if marshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "企业报告, 序列化参数失败: %+v", marshalErr) - } - outTradeNo := l.svcCtx.WechatPayService.GenerateOutTradeNo() - redisKey := fmt.Sprintf("%d:%s", userID, outTradeNo) - cacheErr := l.svcCtx.Redis.SetexCtx(l.ctx, redisKey, string(jsonData), int(2*time.Hour)) - if cacheErr != nil { - return nil, cacheErr - } - - return &types.QueryResp{Id: outTradeNo}, nil -} diff --git a/app/user/cmd/api/internal/logic/query/homeservicelogic.go b/app/user/cmd/api/internal/logic/query/homeservicelogic.go deleted file mode 100644 index 8d7f934..0000000 --- a/app/user/cmd/api/internal/logic/query/homeservicelogic.go +++ /dev/null @@ -1,141 +0,0 @@ -package query - -import ( - "context" - "encoding/hex" - "encoding/json" - "fmt" - "github.com/pkg/errors" - "github.com/zeromicro/go-zero/core/stores/redis" - "qnc-server/app/user/cmd/api/internal/service" - "qnc-server/common/ctxdata" - "qnc-server/common/xerr" - "qnc-server/pkg/lzkit/crypto" - "qnc-server/pkg/lzkit/validator" - "time" - - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - - "github.com/zeromicro/go-zero/core/logx" -) - -type HomeServiceLogic struct { - logx.Logger - ctx context.Context - svcCtx *svc.ServiceContext -} - -func NewHomeServiceLogic(ctx context.Context, svcCtx *svc.ServiceContext) *HomeServiceLogic { - return &HomeServiceLogic{ - Logger: logx.WithContext(ctx), - ctx: ctx, - svcCtx: svcCtx, - } -} - -func (l *HomeServiceLogic) HomeService(req *types.QueryReq) (resp *types.QueryResp, err error) { - userID, getUidErr := ctxdata.GetUidFromCtx(l.ctx) - if getUidErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "家政服务, 获取用户信息失败, %+v", getUidErr) - } - // 1、AES解密 - secretKey := l.svcCtx.Config.Encrypt.SecretKey - key, decodeErr := hex.DecodeString(secretKey) - if decodeErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "家政服务, 密钥获取失败: %+v", decodeErr) - } - decryptData, aesDecryptErr := crypto.AesDecrypt(req.Data, key) - if aesDecryptErr != nil || len(decryptData) == 0 { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "家政服务, 解密失败: %+v", decodeErr) - } - - // 2、校验 - var data types.HomeServiceReq - if unmarshalErr := json.Unmarshal(decryptData, &data); unmarshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "家政服务, 解密后的数据格式不正确: %+v", unmarshalErr) - } - - if validatorErr := validator.Validate(data); validatorErr != nil { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "家政服务, 参数不正确: %+v", validatorErr) - } - if data.Name == "刘福思" && data.IDCard == "45262419980929047X" && data.Mobile == "17776203797" { - // 缓存 - queryCache := types.QueryCache{ - Name: data.Name, - IDCard: data.IDCard, - Mobile: data.Mobile, - Product: "homeservice", - } - jsonData, marshalErr := json.Marshal(queryCache) - if marshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "婚恋评估, 序列化参数失败: %+v", marshalErr) - } - outTradeNo := l.svcCtx.WechatPayService.GenerateOutTradeNo() - redisKey := fmt.Sprintf("%d:%s", userID, outTradeNo) - cacheErr := l.svcCtx.Redis.SetexCtx(l.ctx, redisKey, string(jsonData), int(2*time.Hour)) - if cacheErr != nil { - return nil, cacheErr - } - - return &types.QueryResp{Id: outTradeNo}, nil - } - // 校验验证码 - codeRedisKey := fmt.Sprintf("%s:%s", "query", data.Mobile) - cacheCode, err := l.svcCtx.Redis.Get(codeRedisKey) - if err != nil { - if errors.Is(err, redis.Nil) { - return nil, errors.Wrapf(xerr.NewErrMsg("验证码已过期"), "家政服务, 验证码过期: %s", data.Mobile) - } - return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "家政服务, 读取验证码redis缓存失败, mobile: %s, err: %+v", data.Mobile, err) - } - if cacheCode != data.Code { - return nil, errors.Wrapf(xerr.NewErrMsg("验证码不正确"), "家政服务, 验证码不正确: %s", data.Mobile) - } - - // 3、二要素三要素核验 - //twoVerification := service.TwoFactorVerificationRequest{ - // Name: data.Name, - // IDCard: data.IDCard, - //} - //verification, err := l.svcCtx.VerificationService.TwoFactorVerification(twoVerification) - //if err != nil { - // return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "家政服务, 二要素验证失败: %+v", err) - //} - //if !verification.Passed { - // return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.SERVER_COMMON_ERROR, verification.Err.Error()), "家政服务, 二要素验证不通过: %+v", err) - //} - // 3、二要素三要素核验 - threeVerification := service.ThreeFactorVerificationRequest{ - Name: data.Name, - IDCard: data.IDCard, - Mobile: data.Mobile, - } - verification, err := l.svcCtx.VerificationService.ThreeFactorVerification(threeVerification) - if err != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "家政服务, 三要素验证失败: %+v", err) - } - if !verification.Passed { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.SERVER_COMMON_ERROR, verification.Err.Error()), "家政服务, 三要素验证不通过: %+v", err) - } - - // 缓存 - queryCache := types.QueryCache{ - Name: data.Name, - IDCard: data.IDCard, - Mobile: data.Mobile, - Product: "homeservice", - } - jsonData, marshalErr := json.Marshal(queryCache) - if marshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "家政服务, 序列化参数失败: %+v", marshalErr) - } - outTradeNo := l.svcCtx.WechatPayService.GenerateOutTradeNo() - redisKey := fmt.Sprintf("%d:%s", userID, outTradeNo) - cacheErr := l.svcCtx.Redis.SetexCtx(l.ctx, redisKey, string(jsonData), int(2*time.Hour)) - if cacheErr != nil { - return nil, cacheErr - } - - return &types.QueryResp{Id: outTradeNo}, nil -} diff --git a/app/user/cmd/api/internal/logic/query/marriagelogic.go b/app/user/cmd/api/internal/logic/query/marriagelogic.go deleted file mode 100644 index 0e16231..0000000 --- a/app/user/cmd/api/internal/logic/query/marriagelogic.go +++ /dev/null @@ -1,142 +0,0 @@ -package query - -import ( - "context" - "encoding/hex" - "encoding/json" - "fmt" - "github.com/pkg/errors" - "github.com/zeromicro/go-zero/core/logx" - "github.com/zeromicro/go-zero/core/stores/redis" - "qnc-server/app/user/cmd/api/internal/service" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - "qnc-server/common/ctxdata" - "qnc-server/common/xerr" - "qnc-server/pkg/lzkit/crypto" - "qnc-server/pkg/lzkit/validator" - "time" -) - -type MarriageLogic struct { - logx.Logger - ctx context.Context - svcCtx *svc.ServiceContext -} - -func NewMarriageLogic(ctx context.Context, svcCtx *svc.ServiceContext) *MarriageLogic { - return &MarriageLogic{ - Logger: logx.WithContext(ctx), - ctx: ctx, - svcCtx: svcCtx, - } -} - -const MERRIAGE = "marriage" - -func (l *MarriageLogic) Marriage(req *types.QueryReq) (resp *types.QueryResp, err error) { - userID, getUidErr := ctxdata.GetUidFromCtx(l.ctx) - if getUidErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "婚恋评估, 获取用户信息失败, %+v", getUidErr) - } - // 1、AES解密 - secretKey := l.svcCtx.Config.Encrypt.SecretKey - key, decodeErr := hex.DecodeString(secretKey) - if decodeErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "婚恋评估, 密钥获取失败: %+v", decodeErr) - } - decryptData, aesDecryptErr := crypto.AesDecrypt(req.Data, key) - if aesDecryptErr != nil || len(decryptData) == 0 { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "婚恋评估, 解密失败: %+v", decodeErr) - } - - // 2、校验 - var data types.MarriageReq - if unmarshalErr := json.Unmarshal(decryptData, &data); unmarshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "婚恋评估, 解密后的数据格式不正确: %+v", unmarshalErr) - } - - if validatorErr := validator.Validate(data); validatorErr != nil { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "婚恋评估, 参数不正确: %+v", validatorErr) - } - - if data.Name == "刘福思" && data.IDCard == "45262419980929047X" && data.Mobile == "17776203797" { - // 缓存 - queryCache := types.QueryCache{ - Name: data.Name, - IDCard: data.IDCard, - Mobile: data.Mobile, - Product: MERRIAGE, - } - jsonData, marshalErr := json.Marshal(queryCache) - if marshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "婚恋评估, 序列化参数失败: %+v", marshalErr) - } - outTradeNo := l.svcCtx.WechatPayService.GenerateOutTradeNo() - redisKey := fmt.Sprintf("%d:%s", userID, outTradeNo) - cacheErr := l.svcCtx.Redis.SetexCtx(l.ctx, redisKey, string(jsonData), int(2*time.Hour)) - if cacheErr != nil { - return nil, cacheErr - } - - return &types.QueryResp{Id: outTradeNo}, nil - } - // 校验验证码 - codeRedisKey := fmt.Sprintf("%s:%s", "query", data.Mobile) - cacheCode, err := l.svcCtx.Redis.Get(codeRedisKey) - if err != nil { - if errors.Is(err, redis.Nil) { - return nil, errors.Wrapf(xerr.NewErrMsg("验证码已过期"), "婚恋评估, 验证码过期: %s", data.Mobile) - } - return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "婚恋评估, 读取验证码redis缓存失败, mobile: %s, err: %+v", data.Mobile, err) - } - if cacheCode != data.Code { - return nil, errors.Wrapf(xerr.NewErrMsg("验证码不正确"), "婚恋评估, 验证码不正确: %s", data.Mobile) - } - - //// 3、二要素核验 - //twoVerification := service.TwoFactorVerificationRequest{ - // Name: data.Name, - // IDCard: data.IDCard, - //} - //verification, err := l.svcCtx.VerificationService.TwoFactorVerification(twoVerification) - //if err != nil { - // return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "婚恋评估, 二要素验证失败: %+v", err) - //} - //if !verification.Passed { - // return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.SERVER_COMMON_ERROR, verification.Err.Error()), "婚恋评估, 二要素验证不通过: %+v", err) - //} - // 3、三要素核验 - threeVerification := service.ThreeFactorVerificationRequest{ - Name: data.Name, - IDCard: data.IDCard, - Mobile: data.Mobile, - } - verification, err := l.svcCtx.VerificationService.ThreeFactorVerification(threeVerification) - if err != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "婚恋评估, 三要素验证失败: %+v", err) - } - if !verification.Passed { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.SERVER_COMMON_ERROR, verification.Err.Error()), "婚恋评估, 三要素验证不通过: %+v", err) - } - - // 缓存 - queryCache := types.QueryCache{ - Name: data.Name, - IDCard: data.IDCard, - Mobile: data.Mobile, - Product: MERRIAGE, - } - jsonData, marshalErr := json.Marshal(queryCache) - if marshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "婚恋评估, 序列化参数失败: %+v", marshalErr) - } - outTradeNo := l.svcCtx.WechatPayService.GenerateOutTradeNo() - redisKey := fmt.Sprintf("%d:%s", userID, outTradeNo) - cacheErr := l.svcCtx.Redis.SetexCtx(l.ctx, redisKey, string(jsonData), int(2*time.Hour)) - if cacheErr != nil { - return nil, cacheErr - } - - return &types.QueryResp{Id: outTradeNo}, nil -} diff --git a/app/user/cmd/api/internal/logic/query/preloanbackgroundchecklogic.go b/app/user/cmd/api/internal/logic/query/preloanbackgroundchecklogic.go deleted file mode 100644 index cf2b721..0000000 --- a/app/user/cmd/api/internal/logic/query/preloanbackgroundchecklogic.go +++ /dev/null @@ -1,140 +0,0 @@ -package query - -import ( - "context" - "encoding/hex" - "encoding/json" - "fmt" - "github.com/pkg/errors" - "github.com/zeromicro/go-zero/core/stores/redis" - "qnc-server/app/user/cmd/api/internal/service" - "qnc-server/common/ctxdata" - "qnc-server/common/xerr" - "qnc-server/pkg/lzkit/crypto" - "qnc-server/pkg/lzkit/validator" - "time" - - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - - "github.com/zeromicro/go-zero/core/logx" -) - -type PreLoanBackgroundCheckLogic struct { - logx.Logger - ctx context.Context - svcCtx *svc.ServiceContext -} - -func NewPreLoanBackgroundCheckLogic(ctx context.Context, svcCtx *svc.ServiceContext) *PreLoanBackgroundCheckLogic { - return &PreLoanBackgroundCheckLogic{ - Logger: logx.WithContext(ctx), - ctx: ctx, - svcCtx: svcCtx, - } -} - -func (l *PreLoanBackgroundCheckLogic) PreLoanBackgroundCheck(req *types.QueryReq) (resp *types.QueryResp, err error) { - userID, getUidErr := ctxdata.GetUidFromCtx(l.ctx) - if getUidErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "贷前背调, 获取用户信息失败, %+v", getUidErr) - } - // 1、AES解密 - secretKey := l.svcCtx.Config.Encrypt.SecretKey - key, decodeErr := hex.DecodeString(secretKey) - if decodeErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "贷前背调, 密钥获取失败: %+v", decodeErr) - } - decryptData, aesDecryptErr := crypto.AesDecrypt(req.Data, key) - if aesDecryptErr != nil || len(decryptData) == 0 { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "贷前背调, 解密失败: %+v", decodeErr) - } - - // 2、校验 - var data types.PreLoanBackgroundCheckReq - if unmarshalErr := json.Unmarshal(decryptData, &data); unmarshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "贷前背调, 解密后的数据格式不正确: %+v", unmarshalErr) - } - - if validatorErr := validator.Validate(data); validatorErr != nil { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "贷前背调, 参数不正确: %+v", validatorErr) - } - if data.Name == "刘福思" && data.IDCard == "45262419980929047X" && data.Mobile == "17776203797" { - // 缓存 - queryCache := types.QueryCache{ - Name: data.Name, - IDCard: data.IDCard, - Mobile: data.Mobile, - Product: "preloanbackgroundcheck", - } - jsonData, marshalErr := json.Marshal(queryCache) - if marshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "婚恋评估, 序列化参数失败: %+v", marshalErr) - } - outTradeNo := l.svcCtx.WechatPayService.GenerateOutTradeNo() - redisKey := fmt.Sprintf("%d:%s", userID, outTradeNo) - cacheErr := l.svcCtx.Redis.SetexCtx(l.ctx, redisKey, string(jsonData), int(2*time.Hour)) - if cacheErr != nil { - return nil, cacheErr - } - - return &types.QueryResp{Id: outTradeNo}, nil - } - // 校验验证码 - codeRedisKey := fmt.Sprintf("%s:%s", "query", data.Mobile) - cacheCode, err := l.svcCtx.Redis.Get(codeRedisKey) - if err != nil { - if errors.Is(err, redis.Nil) { - return nil, errors.Wrapf(xerr.NewErrMsg("验证码已过期"), "贷前背调, 验证码过期: %s", data.Mobile) - } - return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "贷前背调, 读取验证码redis缓存失败, mobile: %s, err: %+v", data.Mobile, err) - } - if cacheCode != data.Code { - return nil, errors.Wrapf(xerr.NewErrMsg("验证码不正确"), "贷前背调, 验证码不正确: %s", data.Mobile) - } - - // 3、二要素三要素核验 - //twoVerification := service.TwoFactorVerificationRequest{ - // Name: data.Name, - // IDCard: data.IDCard, - //} - //verification, err := l.svcCtx.VerificationService.TwoFactorVerification(twoVerification) - //if err != nil { - // return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "贷前背调, 二要素验证失败: %+v", err) - //} - //if !verification.Passed { - // return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.SERVER_COMMON_ERROR, verification.Err.Error()), "贷前背调, 二要素验证不通过: %+v", err) - //} - // 3、二要素三要素核验 - threeVerification := service.ThreeFactorVerificationRequest{ - Name: data.Name, - IDCard: data.IDCard, - Mobile: data.Mobile, - } - verification, err := l.svcCtx.VerificationService.ThreeFactorVerification(threeVerification) - if err != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "贷前背调, 三要素验证失败: %+v", err) - } - if !verification.Passed { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.SERVER_COMMON_ERROR, verification.Err.Error()), "贷前背调, 三要素验证不通过: %+v", err) - } - // 缓存 - queryCache := types.QueryCache{ - Name: data.Name, - IDCard: data.IDCard, - Mobile: data.Mobile, - Product: "preloanbackgroundcheck", - } - jsonData, marshalErr := json.Marshal(queryCache) - if marshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "贷前背调, 序列化参数失败: %+v", marshalErr) - } - outTradeNo := l.svcCtx.WechatPayService.GenerateOutTradeNo() - redisKey := fmt.Sprintf("%d:%s", userID, outTradeNo) - cacheErr := l.svcCtx.Redis.SetexCtx(l.ctx, redisKey, string(jsonData), int(2*time.Hour)) - if cacheErr != nil { - return nil, cacheErr - } - - return &types.QueryResp{Id: outTradeNo}, nil -} diff --git a/app/user/cmd/api/internal/logic/query/queryexamplelogic.go b/app/user/cmd/api/internal/logic/query/queryexamplelogic.go index 8fc3ad4..ba7f422 100644 --- a/app/user/cmd/api/internal/logic/query/queryexamplelogic.go +++ b/app/user/cmd/api/internal/logic/query/queryexamplelogic.go @@ -60,7 +60,7 @@ func (l *QueryExampleLogic) QueryExample(req *types.QueryExampleReq) (resp *type case "toc_PersonalBadRecord": exampleID = 73 case "toc_ShareholderBusinessRelation": - exampleID = 16 + exampleID = 74 case "toc_PersonalLawsuit": exampleID = 75 case "toc_EnterpriseLawsuit": diff --git a/app/user/cmd/api/internal/logic/query/rentalinfologic.go b/app/user/cmd/api/internal/logic/query/rentalinfologic.go deleted file mode 100644 index 06ed893..0000000 --- a/app/user/cmd/api/internal/logic/query/rentalinfologic.go +++ /dev/null @@ -1,140 +0,0 @@ -package query - -import ( - "context" - "encoding/hex" - "encoding/json" - "fmt" - "github.com/pkg/errors" - "github.com/zeromicro/go-zero/core/stores/redis" - "qnc-server/app/user/cmd/api/internal/service" - "qnc-server/common/ctxdata" - "qnc-server/common/xerr" - "qnc-server/pkg/lzkit/crypto" - "qnc-server/pkg/lzkit/validator" - "time" - - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - - "github.com/zeromicro/go-zero/core/logx" -) - -type RentalInfoLogic struct { - logx.Logger - ctx context.Context - svcCtx *svc.ServiceContext -} - -func NewRentalInfoLogic(ctx context.Context, svcCtx *svc.ServiceContext) *RentalInfoLogic { - return &RentalInfoLogic{ - Logger: logx.WithContext(ctx), - ctx: ctx, - svcCtx: svcCtx, - } -} - -func (l *RentalInfoLogic) RentalInfo(req *types.QueryReq) (resp *types.QueryResp, err error) { - userID, getUidErr := ctxdata.GetUidFromCtx(l.ctx) - if getUidErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "租赁服务, 获取用户信息失败, %+v", getUidErr) - } - // 1、AES解密 - secretKey := l.svcCtx.Config.Encrypt.SecretKey - key, decodeErr := hex.DecodeString(secretKey) - if decodeErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "租赁服务, 密钥获取失败: %+v", decodeErr) - } - decryptData, aesDecryptErr := crypto.AesDecrypt(req.Data, key) - if aesDecryptErr != nil || len(decryptData) == 0 { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "租赁服务, 解密失败: %+v", decodeErr) - } - - // 2、校验 - var data types.RentalInfoReq - if unmarshalErr := json.Unmarshal(decryptData, &data); unmarshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "租赁服务, 解密后的数据格式不正确: %+v", unmarshalErr) - } - - if validatorErr := validator.Validate(data); validatorErr != nil { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "租赁服务, 参数不正确: %+v", validatorErr) - } - if data.Name == "刘福思" && data.IDCard == "45262419980929047X" && data.Mobile == "17776203797" { - // 缓存 - queryCache := types.QueryCache{ - Name: data.Name, - IDCard: data.IDCard, - Mobile: data.Mobile, - Product: "rentalinfo", - } - jsonData, marshalErr := json.Marshal(queryCache) - if marshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "婚恋评估, 序列化参数失败: %+v", marshalErr) - } - outTradeNo := l.svcCtx.WechatPayService.GenerateOutTradeNo() - redisKey := fmt.Sprintf("%d:%s", userID, outTradeNo) - cacheErr := l.svcCtx.Redis.SetexCtx(l.ctx, redisKey, string(jsonData), int(2*time.Hour)) - if cacheErr != nil { - return nil, cacheErr - } - - return &types.QueryResp{Id: outTradeNo}, nil - } - // 校验验证码 - codeRedisKey := fmt.Sprintf("%s:%s", "query", data.Mobile) - cacheCode, err := l.svcCtx.Redis.Get(codeRedisKey) - if err != nil { - if errors.Is(err, redis.Nil) { - return nil, errors.Wrapf(xerr.NewErrMsg("验证码已过期"), "租赁服务, 验证码过期: %s", data.Mobile) - } - return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "租赁服务, 读取验证码redis缓存失败, mobile: %s, err: %+v", data.Mobile, err) - } - if cacheCode != data.Code { - return nil, errors.Wrapf(xerr.NewErrMsg("验证码不正确"), "租赁服务, 验证码不正确: %s", data.Mobile) - } - - // 3、二要素三要素核验 - //twoVerification := service.TwoFactorVerificationRequest{ - // Name: data.Name, - // IDCard: data.IDCard, - //} - //verification, err := l.svcCtx.VerificationService.TwoFactorVerification(twoVerification) - //if err != nil { - // return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "租赁服务, 二要素验证失败: %+v", err) - //} - //if !verification.Passed { - // return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.SERVER_COMMON_ERROR, verification.Err.Error()), "租赁服务, 二要素验证不通过: %+v", err) - //} - // 3、二要素三要素核验 - threeVerification := service.ThreeFactorVerificationRequest{ - Name: data.Name, - IDCard: data.IDCard, - Mobile: data.Mobile, - } - verification, err := l.svcCtx.VerificationService.ThreeFactorVerification(threeVerification) - if err != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "租赁服务, 三要素验证失败: %+v", err) - } - if !verification.Passed { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.SERVER_COMMON_ERROR, verification.Err.Error()), "租赁服务, 三要素验证不通过: %+v", err) - } - // 缓存 - queryCache := types.QueryCache{ - Name: data.Name, - IDCard: data.IDCard, - Mobile: data.Mobile, - Product: "rentalinfo", - } - jsonData, marshalErr := json.Marshal(queryCache) - if marshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "租赁服务, 序列化参数失败: %+v", marshalErr) - } - outTradeNo := l.svcCtx.WechatPayService.GenerateOutTradeNo() - redisKey := fmt.Sprintf("%d:%s", userID, outTradeNo) - cacheErr := l.svcCtx.Redis.SetexCtx(l.ctx, redisKey, string(jsonData), int(2*time.Hour)) - if cacheErr != nil { - return nil, cacheErr - } - - return &types.QueryResp{Id: outTradeNo}, nil -} diff --git a/app/user/cmd/api/internal/logic/query/riskassessmentlogic.go b/app/user/cmd/api/internal/logic/query/riskassessmentlogic.go deleted file mode 100644 index b1a67db..0000000 --- a/app/user/cmd/api/internal/logic/query/riskassessmentlogic.go +++ /dev/null @@ -1,140 +0,0 @@ -package query - -import ( - "context" - "encoding/hex" - "encoding/json" - "fmt" - "github.com/pkg/errors" - "github.com/zeromicro/go-zero/core/stores/redis" - "qnc-server/app/user/cmd/api/internal/service" - "qnc-server/common/ctxdata" - "qnc-server/common/xerr" - "qnc-server/pkg/lzkit/crypto" - "qnc-server/pkg/lzkit/validator" - "time" - - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - - "github.com/zeromicro/go-zero/core/logx" -) - -type RiskAssessmentLogic struct { - logx.Logger - ctx context.Context - svcCtx *svc.ServiceContext -} - -func NewRiskAssessmentLogic(ctx context.Context, svcCtx *svc.ServiceContext) *RiskAssessmentLogic { - return &RiskAssessmentLogic{ - Logger: logx.WithContext(ctx), - ctx: ctx, - svcCtx: svcCtx, - } -} - -func (l *RiskAssessmentLogic) RiskAssessment(req *types.QueryReq) (resp *types.QueryResp, err error) { - userID, getUidErr := ctxdata.GetUidFromCtx(l.ctx) - if getUidErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "个人风险, 获取用户信息失败, %+v", getUidErr) - } - // 1、AES解密 - secretKey := l.svcCtx.Config.Encrypt.SecretKey - key, decodeErr := hex.DecodeString(secretKey) - if decodeErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "个人风险, 密钥获取失败: %+v", decodeErr) - } - decryptData, aesDecryptErr := crypto.AesDecrypt(req.Data, key) - if aesDecryptErr != nil || len(decryptData) == 0 { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "个人风险, 解密失败: %+v", decodeErr) - } - - // 2、校验 - var data types.RiskAssessmentReq - if unmarshalErr := json.Unmarshal(decryptData, &data); unmarshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "个人风险, 解密后的数据格式不正确: %+v", unmarshalErr) - } - - if validatorErr := validator.Validate(data); validatorErr != nil { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "个人风险, 参数不正确: %+v", validatorErr) - } - if data.Name == "刘福思" && data.IDCard == "45262419980929047X" && data.Mobile == "17776203797" { - // 缓存 - queryCache := types.QueryCache{ - Name: data.Name, - IDCard: data.IDCard, - Mobile: data.Mobile, - Product: "riskassessment", - } - jsonData, marshalErr := json.Marshal(queryCache) - if marshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "婚恋评估, 序列化参数失败: %+v", marshalErr) - } - outTradeNo := l.svcCtx.WechatPayService.GenerateOutTradeNo() - redisKey := fmt.Sprintf("%d:%s", userID, outTradeNo) - cacheErr := l.svcCtx.Redis.SetexCtx(l.ctx, redisKey, string(jsonData), int(2*time.Hour)) - if cacheErr != nil { - return nil, cacheErr - } - - return &types.QueryResp{Id: outTradeNo}, nil - } - // 校验验证码 - codeRedisKey := fmt.Sprintf("%s:%s", "query", data.Mobile) - cacheCode, err := l.svcCtx.Redis.Get(codeRedisKey) - if err != nil { - if errors.Is(err, redis.Nil) { - return nil, errors.Wrapf(xerr.NewErrMsg("验证码已过期"), "个人风险, 验证码过期: %s", data.Mobile) - } - return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "个人风险, 读取验证码redis缓存失败, mobile: %s, err: %+v", data.Mobile, err) - } - if cacheCode != data.Code { - return nil, errors.Wrapf(xerr.NewErrMsg("验证码不正确"), "个人风险, 验证码不正确: %s", data.Mobile) - } - - // 3、二要素三要素核验 - //twoVerification := service.TwoFactorVerificationRequest{ - // Name: data.Name, - // IDCard: data.IDCard, - //} - //verification, err := l.svcCtx.VerificationService.TwoFactorVerification(twoVerification) - //if err != nil { - // return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "个人风险, 二要素验证失败: %+v", err) - //} - //if !verification.Passed { - // return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.SERVER_COMMON_ERROR, verification.Err.Error()), "个人风险, 二要素验证不通过: %+v", err) - //} - // 3、二要素三要素核验 - threeVerification := service.ThreeFactorVerificationRequest{ - Name: data.Name, - IDCard: data.IDCard, - Mobile: data.Mobile, - } - verification, err := l.svcCtx.VerificationService.ThreeFactorVerification(threeVerification) - if err != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "个人风险, 三要素验证失败: %+v", err) - } - if !verification.Passed { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.SERVER_COMMON_ERROR, verification.Err.Error()), "个人风险, 三要素验证不通过: %+v", err) - } - // 缓存 - queryCache := types.QueryCache{ - Name: data.Name, - IDCard: data.IDCard, - Mobile: data.Mobile, - Product: "riskassessment", - } - jsonData, marshalErr := json.Marshal(queryCache) - if marshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "个人风险, 序列化参数失败: %+v", marshalErr) - } - outTradeNo := l.svcCtx.WechatPayService.GenerateOutTradeNo() - redisKey := fmt.Sprintf("%d:%s", userID, outTradeNo) - cacheErr := l.svcCtx.Redis.SetexCtx(l.ctx, redisKey, string(jsonData), int(2*time.Hour)) - if cacheErr != nil { - return nil, cacheErr - } - - return &types.QueryResp{Id: outTradeNo}, nil -} diff --git a/app/user/cmd/api/internal/service/apirequestService.go b/app/user/cmd/api/internal/service/apirequestService.go index 5235619..4bfb6e4 100644 --- a/app/user/cmd/api/internal/service/apirequestService.go +++ b/app/user/cmd/api/internal/service/apirequestService.go @@ -751,7 +751,7 @@ func (a *ApiRequestService) ProcessCAR074Request(params []byte) ([]byte, error) } resp, err := a.yushanService.request("CAR074", request) if err != nil { - return nil, fmt.Errorf("人车核验查询失败: %+v", err) + return nil, fmt.Errorf("车辆出险信息查询失败: %+v", err) } return resp, nil } diff --git a/app/user/cmd/api/internal/svc/servicecontext.go b/app/user/cmd/api/internal/svc/servicecontext.go index 951e175..8a5a08c 100644 --- a/app/user/cmd/api/internal/svc/servicecontext.go +++ b/app/user/cmd/api/internal/svc/servicecontext.go @@ -24,6 +24,11 @@ type ServiceContext struct { ProductRenderModel model.ProductRenderModel OrderModel model.OrderModel QueryModel model.QueryModel + AgentModel model.AgentModel + AgentAuditModel model.AgentAuditModel + AgentClosureModel model.AgentClosureModel + AgentCommissionModel model.AgentCommissionModel + AgentWalletModel model.AgentWalletModel GlobalNotificationsModel model.GlobalNotificationsModel AlipayService *service.AliPayService WechatPayService *service.WechatPayService @@ -78,6 +83,11 @@ func NewServiceContext(c config.Config) *ServiceContext { OrderModel: model.NewOrderModel(db, c.CacheRedis), QueryModel: model.NewQueryModel(db, c.CacheRedis), GlobalNotificationsModel: model.NewGlobalNotificationsModel(db, c.CacheRedis), + AgentModel: model.NewAgentModel(db, c.CacheRedis), + AgentAuditModel: model.NewAgentAuditModel(db, c.CacheRedis), + AgentCommissionModel: model.NewAgentCommissionModel(db, c.CacheRedis), + AgentWalletModel: model.NewAgentWalletModel(db, c.CacheRedis), + AgentClosureModel: model.NewAgentClosureModel(db, c.CacheRedis), FeatureModel: featureModel, ProductFeatureModel: productFeatureModel, } diff --git a/app/user/cmd/api/internal/types/types.go b/app/user/cmd/api/internal/types/types.go index 852328e..d7ab278 100644 --- a/app/user/cmd/api/internal/types/types.go +++ b/app/user/cmd/api/internal/types/types.go @@ -1,6 +1,27 @@ // Code generated by goctl. DO NOT EDIT. package types +type AgentApplyReq struct { + UserID int64 `json:"user_id"` + Region string `json:"region"` + Mobile string `json:"mobile"` + WechatID string `json:"wechat_id"` +} + +type AgentApplyResp struct { + Status string `json:"status"` + Message string `json:"message"` +} + +type AgentAuditStatusReq struct { + UserID int64 `json:"user_id"` +} + +type AgentAuditStatusResp struct { + Status int `json:"status"` // 0=待审核,1=审核通过,2=审核未通过 + AuditReason string `json:"audit_reason"` +} + type Feature struct { ID int64 `json:"id"` // 功能ID ApiID string `json:"api_id"` // API标识 diff --git a/app/user/model/agentAuditModel.go b/app/user/model/agentAuditModel.go new file mode 100644 index 0000000..80ddf43 --- /dev/null +++ b/app/user/model/agentAuditModel.go @@ -0,0 +1,27 @@ +package model + +import ( + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +var _ AgentAuditModel = (*customAgentAuditModel)(nil) + +type ( + // AgentAuditModel is an interface to be customized, add more methods here, + // and implement the added methods in customAgentAuditModel. + AgentAuditModel interface { + agentAuditModel + } + + customAgentAuditModel struct { + *defaultAgentAuditModel + } +) + +// NewAgentAuditModel returns a model for the database table. +func NewAgentAuditModel(conn sqlx.SqlConn, c cache.CacheConf) AgentAuditModel { + return &customAgentAuditModel{ + defaultAgentAuditModel: newAgentAuditModel(conn, c), + } +} diff --git a/app/user/model/agentAuditModel_gen.go b/app/user/model/agentAuditModel_gen.go new file mode 100644 index 0000000..be139ed --- /dev/null +++ b/app/user/model/agentAuditModel_gen.go @@ -0,0 +1,374 @@ +// Code generated by goctl. DO NOT EDIT! + +package model + +import ( + "context" + "database/sql" + "fmt" + "qnc-server/deploy/script/model" + "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" + "qnc-server/common/globalkey" +) + +var ( + agentAuditFieldNames = builder.RawFieldNames(&AgentAudit{}) + agentAuditRows = strings.Join(agentAuditFieldNames, ",") + agentAuditRowsExpectAutoSet = strings.Join(stringx.Remove(agentAuditFieldNames, "`id`", "`create_time`", "`update_time`"), ",") + agentAuditRowsWithPlaceHolder = strings.Join(stringx.Remove(agentAuditFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?" + + cacheQncAgentAuditIdPrefix = "cache:qnc:agentAudit:id:" +) + +type ( + agentAuditModel interface { + Insert(ctx context.Context, session sqlx.Session, data *AgentAudit) (sql.Result, error) + FindOne(ctx context.Context, id int64) (*AgentAudit, error) + Update(ctx context.Context, session sqlx.Session, data *AgentAudit) (sql.Result, error) + UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AgentAudit) 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 *AgentAudit) 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) ([]*AgentAudit, error) + FindPageListByPage(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentAudit, error) + FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentAudit, int64, error) + FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AgentAudit, error) + FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AgentAudit, error) + Delete(ctx context.Context, session sqlx.Session, id int64) error + } + + defaultAgentAuditModel struct { + sqlc.CachedConn + table string + } + + AgentAudit struct { + Id int64 `db:"id"` + UserId int64 `db:"user_id"` + Region string `db:"region"` + Mobile string `db:"mobile"` + WechatId sql.NullString `db:"wechat_id"` + Status int64 `db:"status"` + AuditReason sql.NullString `db:"audit_reason"` + CreateTime time.Time `db:"create_time"` + AuditTime sql.NullTime `db:"audit_time"` + UpdateTime time.Time `db:"update_time"` // 更新时间 + DeleteTime sql.NullTime `db:"delete_time"` // 删除时间 + DelState int64 `db:"del_state"` // 删除状态 + Version int64 `db:"version"` // 版本号 + } +) + +func newAgentAuditModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAgentAuditModel { + return &defaultAgentAuditModel{ + CachedConn: sqlc.NewConn(conn, c), + table: "`agent_audit`", + } +} + +func (m *defaultAgentAuditModel) Insert(ctx context.Context, session sqlx.Session, data *AgentAudit) (sql.Result, error) { + data.DelState = globalkey.DelStateNo + qncAgentAuditIdKey := fmt.Sprintf("%s%v", cacheQncAgentAuditIdPrefix, 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, agentAuditRowsExpectAutoSet) + if session != nil { + return session.ExecCtx(ctx, query, data.UserId, data.Region, data.Mobile, data.WechatId, data.Status, data.AuditReason, data.AuditTime, data.DeleteTime, data.DelState, data.Version) + } + return conn.ExecCtx(ctx, query, data.UserId, data.Region, data.Mobile, data.WechatId, data.Status, data.AuditReason, data.AuditTime, data.DeleteTime, data.DelState, data.Version) + }, qncAgentAuditIdKey) +} + +func (m *defaultAgentAuditModel) FindOne(ctx context.Context, id int64) (*AgentAudit, error) { + qncAgentAuditIdKey := fmt.Sprintf("%s%v", cacheQncAgentAuditIdPrefix, id) + var resp AgentAudit + err := m.QueryRowCtx(ctx, &resp, qncAgentAuditIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error { + query := fmt.Sprintf("SELECT %s FROM %s WHERE `id` = ? AND del_state = ? limit 1", agentAuditRows, m.table) + return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo) + }) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, model.ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAgentAuditModel) Update(ctx context.Context, session sqlx.Session, data *AgentAudit) (sql.Result, error) { + qncAgentAuditIdKey := fmt.Sprintf("%s%v", cacheQncAgentAuditIdPrefix, 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, agentAuditRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, data.UserId, data.Region, data.Mobile, data.WechatId, data.Status, data.AuditReason, data.AuditTime, data.DeleteTime, data.DelState, data.Version, data.Id) + } + return conn.ExecCtx(ctx, query, data.UserId, data.Region, data.Mobile, data.WechatId, data.Status, data.AuditReason, data.AuditTime, data.DeleteTime, data.DelState, data.Version, data.Id) + }, qncAgentAuditIdKey) +} + +func (m *defaultAgentAuditModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AgentAudit) error { + + oldVersion := data.Version + data.Version += 1 + + var sqlResult sql.Result + var err error + + qncAgentAuditIdKey := fmt.Sprintf("%s%v", cacheQncAgentAuditIdPrefix, 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, agentAuditRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, data.UserId, data.Region, data.Mobile, data.WechatId, data.Status, data.AuditReason, data.AuditTime, data.DeleteTime, data.DelState, data.Version, data.Id, oldVersion) + } + return conn.ExecCtx(ctx, query, data.UserId, data.Region, data.Mobile, data.WechatId, data.Status, data.AuditReason, data.AuditTime, data.DeleteTime, data.DelState, data.Version, data.Id, oldVersion) + }, qncAgentAuditIdKey) + if err != nil { + return err + } + updateCount, err := sqlResult.RowsAffected() + if err != nil { + return err + } + if updateCount == 0 { + return model.ErrNoRowsUpdate + } + + return nil +} + +func (m *defaultAgentAuditModel) DeleteSoft(ctx context.Context, session sqlx.Session, data *AgentAudit) 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 "), "AgentAuditModel delete err : %+v", err) + } + return nil +} + +func (m *defaultAgentAuditModel) 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 *defaultAgentAuditModel) 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 *defaultAgentAuditModel) FindAll(ctx context.Context, builder squirrel.SelectBuilder, orderBy string) ([]*AgentAudit, error) { + + builder = builder.Columns(agentAuditRows) + + 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 []*AgentAudit + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAgentAuditModel) FindPageListByPage(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentAudit, error) { + + builder = builder.Columns(agentAuditRows) + + 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 []*AgentAudit + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAgentAuditModel) FindPageListByPageWithTotal(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentAudit, int64, error) { + + total, err := m.FindCount(ctx, builder, "id") + if err != nil { + return nil, 0, err + } + + builder = builder.Columns(agentAuditRows) + + 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 []*AgentAudit + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, total, nil + default: + return nil, total, err + } +} + +func (m *defaultAgentAuditModel) FindPageListByIdDESC(ctx context.Context, builder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AgentAudit, error) { + + builder = builder.Columns(agentAuditRows) + + 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 []*AgentAudit + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAgentAuditModel) FindPageListByIdASC(ctx context.Context, builder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AgentAudit, error) { + + builder = builder.Columns(agentAuditRows) + + 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 []*AgentAudit + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAgentAuditModel) 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 *defaultAgentAuditModel) SelectBuilder() squirrel.SelectBuilder { + return squirrel.Select().From(m.table) +} +func (m *defaultAgentAuditModel) Delete(ctx context.Context, session sqlx.Session, id int64) error { + qncAgentAuditIdKey := fmt.Sprintf("%s%v", cacheQncAgentAuditIdPrefix, 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) + }, qncAgentAuditIdKey) + return err +} +func (m *defaultAgentAuditModel) formatPrimary(primary interface{}) string { + return fmt.Sprintf("%s%v", cacheQncAgentAuditIdPrefix, primary) +} +func (m *defaultAgentAuditModel) 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", agentAuditRows, m.table) + return conn.QueryRowCtx(ctx, v, query, primary, globalkey.DelStateNo) +} + +func (m *defaultAgentAuditModel) tableName() string { + return m.table +} diff --git a/app/user/model/agentClosureModel.go b/app/user/model/agentClosureModel.go new file mode 100644 index 0000000..dd92f74 --- /dev/null +++ b/app/user/model/agentClosureModel.go @@ -0,0 +1,27 @@ +package model + +import ( + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +var _ AgentClosureModel = (*customAgentClosureModel)(nil) + +type ( + // AgentClosureModel is an interface to be customized, add more methods here, + // and implement the added methods in customAgentClosureModel. + AgentClosureModel interface { + agentClosureModel + } + + customAgentClosureModel struct { + *defaultAgentClosureModel + } +) + +// NewAgentClosureModel returns a model for the database table. +func NewAgentClosureModel(conn sqlx.SqlConn, c cache.CacheConf) AgentClosureModel { + return &customAgentClosureModel{ + defaultAgentClosureModel: newAgentClosureModel(conn, c), + } +} diff --git a/app/user/model/agentClosureModel_gen.go b/app/user/model/agentClosureModel_gen.go new file mode 100644 index 0000000..e3db764 --- /dev/null +++ b/app/user/model/agentClosureModel_gen.go @@ -0,0 +1,409 @@ +// Code generated by goctl. DO NOT EDIT! + +package model + +import ( + "context" + "database/sql" + "fmt" + "qnc-server/deploy/script/model" + "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" + "qnc-server/common/globalkey" +) + +var ( + agentClosureFieldNames = builder.RawFieldNames(&AgentClosure{}) + agentClosureRows = strings.Join(agentClosureFieldNames, ",") + agentClosureRowsExpectAutoSet = strings.Join(stringx.Remove(agentClosureFieldNames, "`id`", "`create_time`", "`update_time`"), ",") + agentClosureRowsWithPlaceHolder = strings.Join(stringx.Remove(agentClosureFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?" + + cacheQncAgentClosureIdPrefix = "cache:qnc:agentClosure:id:" + cacheQncAgentClosureAncestorIdDescendantIdPrefix = "cache:qnc:agentClosure:ancestorId:descendantId:" +) + +type ( + agentClosureModel interface { + Insert(ctx context.Context, session sqlx.Session, data *AgentClosure) (sql.Result, error) + FindOne(ctx context.Context, id int64) (*AgentClosure, error) + FindOneByAncestorIdDescendantId(ctx context.Context, ancestorId int64, descendantId int64) (*AgentClosure, error) + Update(ctx context.Context, session sqlx.Session, data *AgentClosure) (sql.Result, error) + UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AgentClosure) 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 *AgentClosure) 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) ([]*AgentClosure, error) + FindPageListByPage(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentClosure, error) + FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentClosure, int64, error) + FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AgentClosure, error) + FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AgentClosure, error) + Delete(ctx context.Context, session sqlx.Session, id int64) error + } + + defaultAgentClosureModel struct { + sqlc.CachedConn + table string + } + + AgentClosure struct { + Id int64 `db:"id"` + AncestorId int64 `db:"ancestor_id"` + DescendantId int64 `db:"descendant_id"` + Depth int64 `db:"depth"` + 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 newAgentClosureModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAgentClosureModel { + return &defaultAgentClosureModel{ + CachedConn: sqlc.NewConn(conn, c), + table: "`agent_closure`", + } +} + +func (m *defaultAgentClosureModel) Insert(ctx context.Context, session sqlx.Session, data *AgentClosure) (sql.Result, error) { + data.DelState = globalkey.DelStateNo + qncAgentClosureAncestorIdDescendantIdKey := fmt.Sprintf("%s%v:%v", cacheQncAgentClosureAncestorIdDescendantIdPrefix, data.AncestorId, data.DescendantId) + qncAgentClosureIdKey := fmt.Sprintf("%s%v", cacheQncAgentClosureIdPrefix, 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, agentClosureRowsExpectAutoSet) + if session != nil { + return session.ExecCtx(ctx, query, data.AncestorId, data.DescendantId, data.Depth, data.DeleteTime, data.DelState, data.Version) + } + return conn.ExecCtx(ctx, query, data.AncestorId, data.DescendantId, data.Depth, data.DeleteTime, data.DelState, data.Version) + }, qncAgentClosureAncestorIdDescendantIdKey, qncAgentClosureIdKey) +} + +func (m *defaultAgentClosureModel) FindOne(ctx context.Context, id int64) (*AgentClosure, error) { + qncAgentClosureIdKey := fmt.Sprintf("%s%v", cacheQncAgentClosureIdPrefix, id) + var resp AgentClosure + err := m.QueryRowCtx(ctx, &resp, qncAgentClosureIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error { + query := fmt.Sprintf("SELECT %s FROM %s WHERE `id` = ? AND del_state = ? limit 1", agentClosureRows, m.table) + return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo) + }) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, model.ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAgentClosureModel) FindOneByAncestorIdDescendantId(ctx context.Context, ancestorId int64, descendantId int64) (*AgentClosure, error) { + qncAgentClosureAncestorIdDescendantIdKey := fmt.Sprintf("%s%v:%v", cacheQncAgentClosureAncestorIdDescendantIdPrefix, ancestorId, descendantId) + var resp AgentClosure + err := m.QueryRowIndexCtx(ctx, &resp, qncAgentClosureAncestorIdDescendantIdKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) { + query := fmt.Sprintf("SELECT %s FROM %s WHERE `ancestor_id` = ? AND `descendant_id` = ? AND del_state = ? limit 1", agentClosureRows, m.table) + if err := conn.QueryRowCtx(ctx, &resp, query, ancestorId, descendantId, globalkey.DelStateNo); err != nil { + return nil, err + } + return resp.Id, nil + }, m.queryPrimary) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, model.ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAgentClosureModel) Update(ctx context.Context, session sqlx.Session, newData *AgentClosure) (sql.Result, error) { + data, err := m.FindOne(ctx, newData.Id) + if err != nil { + return nil, err + } + qncAgentClosureAncestorIdDescendantIdKey := fmt.Sprintf("%s%v:%v", cacheQncAgentClosureAncestorIdDescendantIdPrefix, data.AncestorId, data.DescendantId) + qncAgentClosureIdKey := fmt.Sprintf("%s%v", cacheQncAgentClosureIdPrefix, 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, agentClosureRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, newData.AncestorId, newData.DescendantId, newData.Depth, newData.DeleteTime, newData.DelState, newData.Version, newData.Id) + } + return conn.ExecCtx(ctx, query, newData.AncestorId, newData.DescendantId, newData.Depth, newData.DeleteTime, newData.DelState, newData.Version, newData.Id) + }, qncAgentClosureAncestorIdDescendantIdKey, qncAgentClosureIdKey) +} + +func (m *defaultAgentClosureModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *AgentClosure) error { + + oldVersion := newData.Version + newData.Version += 1 + + var sqlResult sql.Result + var err error + + data, err := m.FindOne(ctx, newData.Id) + if err != nil { + return err + } + qncAgentClosureAncestorIdDescendantIdKey := fmt.Sprintf("%s%v:%v", cacheQncAgentClosureAncestorIdDescendantIdPrefix, data.AncestorId, data.DescendantId) + qncAgentClosureIdKey := fmt.Sprintf("%s%v", cacheQncAgentClosureIdPrefix, 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, agentClosureRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, newData.AncestorId, newData.DescendantId, newData.Depth, newData.DeleteTime, newData.DelState, newData.Version, newData.Id, oldVersion) + } + return conn.ExecCtx(ctx, query, newData.AncestorId, newData.DescendantId, newData.Depth, newData.DeleteTime, newData.DelState, newData.Version, newData.Id, oldVersion) + }, qncAgentClosureAncestorIdDescendantIdKey, qncAgentClosureIdKey) + if err != nil { + return err + } + updateCount, err := sqlResult.RowsAffected() + if err != nil { + return err + } + if updateCount == 0 { + return model.ErrNoRowsUpdate + } + + return nil +} + +func (m *defaultAgentClosureModel) DeleteSoft(ctx context.Context, session sqlx.Session, data *AgentClosure) 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 "), "AgentClosureModel delete err : %+v", err) + } + return nil +} + +func (m *defaultAgentClosureModel) 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 *defaultAgentClosureModel) 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 *defaultAgentClosureModel) FindAll(ctx context.Context, builder squirrel.SelectBuilder, orderBy string) ([]*AgentClosure, error) { + + builder = builder.Columns(agentClosureRows) + + 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 []*AgentClosure + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAgentClosureModel) FindPageListByPage(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentClosure, error) { + + builder = builder.Columns(agentClosureRows) + + 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 []*AgentClosure + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAgentClosureModel) FindPageListByPageWithTotal(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentClosure, int64, error) { + + total, err := m.FindCount(ctx, builder, "id") + if err != nil { + return nil, 0, err + } + + builder = builder.Columns(agentClosureRows) + + 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 []*AgentClosure + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, total, nil + default: + return nil, total, err + } +} + +func (m *defaultAgentClosureModel) FindPageListByIdDESC(ctx context.Context, builder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AgentClosure, error) { + + builder = builder.Columns(agentClosureRows) + + 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 []*AgentClosure + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAgentClosureModel) FindPageListByIdASC(ctx context.Context, builder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AgentClosure, error) { + + builder = builder.Columns(agentClosureRows) + + 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 []*AgentClosure + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAgentClosureModel) 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 *defaultAgentClosureModel) SelectBuilder() squirrel.SelectBuilder { + return squirrel.Select().From(m.table) +} +func (m *defaultAgentClosureModel) Delete(ctx context.Context, session sqlx.Session, id int64) error { + data, err := m.FindOne(ctx, id) + if err != nil { + return err + } + + qncAgentClosureAncestorIdDescendantIdKey := fmt.Sprintf("%s%v:%v", cacheQncAgentClosureAncestorIdDescendantIdPrefix, data.AncestorId, data.DescendantId) + qncAgentClosureIdKey := fmt.Sprintf("%s%v", cacheQncAgentClosureIdPrefix, 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) + }, qncAgentClosureAncestorIdDescendantIdKey, qncAgentClosureIdKey) + return err +} +func (m *defaultAgentClosureModel) formatPrimary(primary interface{}) string { + return fmt.Sprintf("%s%v", cacheQncAgentClosureIdPrefix, primary) +} +func (m *defaultAgentClosureModel) 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", agentClosureRows, m.table) + return conn.QueryRowCtx(ctx, v, query, primary, globalkey.DelStateNo) +} + +func (m *defaultAgentClosureModel) tableName() string { + return m.table +} diff --git a/app/user/model/agentCommissionModel.go b/app/user/model/agentCommissionModel.go new file mode 100644 index 0000000..1b9e614 --- /dev/null +++ b/app/user/model/agentCommissionModel.go @@ -0,0 +1,27 @@ +package model + +import ( + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +var _ AgentCommissionModel = (*customAgentCommissionModel)(nil) + +type ( + // AgentCommissionModel is an interface to be customized, add more methods here, + // and implement the added methods in customAgentCommissionModel. + AgentCommissionModel interface { + agentCommissionModel + } + + customAgentCommissionModel struct { + *defaultAgentCommissionModel + } +) + +// NewAgentCommissionModel returns a model for the database table. +func NewAgentCommissionModel(conn sqlx.SqlConn, c cache.CacheConf) AgentCommissionModel { + return &customAgentCommissionModel{ + defaultAgentCommissionModel: newAgentCommissionModel(conn, c), + } +} diff --git a/app/user/model/agentCommissionModel_gen.go b/app/user/model/agentCommissionModel_gen.go new file mode 100644 index 0000000..daa0744 --- /dev/null +++ b/app/user/model/agentCommissionModel_gen.go @@ -0,0 +1,371 @@ +// Code generated by goctl. DO NOT EDIT! + +package model + +import ( + "context" + "database/sql" + "fmt" + "qnc-server/deploy/script/model" + "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" + "qnc-server/common/globalkey" +) + +var ( + agentCommissionFieldNames = builder.RawFieldNames(&AgentCommission{}) + agentCommissionRows = strings.Join(agentCommissionFieldNames, ",") + agentCommissionRowsExpectAutoSet = strings.Join(stringx.Remove(agentCommissionFieldNames, "`id`", "`create_time`", "`update_time`"), ",") + agentCommissionRowsWithPlaceHolder = strings.Join(stringx.Remove(agentCommissionFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?" + + cacheQncAgentCommissionIdPrefix = "cache:qnc:agentCommission:id:" +) + +type ( + agentCommissionModel interface { + Insert(ctx context.Context, session sqlx.Session, data *AgentCommission) (sql.Result, error) + FindOne(ctx context.Context, id int64) (*AgentCommission, error) + Update(ctx context.Context, session sqlx.Session, data *AgentCommission) (sql.Result, error) + UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AgentCommission) 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 *AgentCommission) 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) ([]*AgentCommission, error) + FindPageListByPage(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentCommission, error) + FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentCommission, int64, error) + FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AgentCommission, error) + FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AgentCommission, error) + Delete(ctx context.Context, session sqlx.Session, id int64) error + } + + defaultAgentCommissionModel struct { + sqlc.CachedConn + table string + } + + AgentCommission struct { + Id int64 `db:"id"` + AgentId int64 `db:"agent_id"` + OrderId int64 `db:"order_id"` + CommissionAmount float64 `db:"commission_amount"` + 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 newAgentCommissionModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAgentCommissionModel { + return &defaultAgentCommissionModel{ + CachedConn: sqlc.NewConn(conn, c), + table: "`agent_commission`", + } +} + +func (m *defaultAgentCommissionModel) Insert(ctx context.Context, session sqlx.Session, data *AgentCommission) (sql.Result, error) { + data.DelState = globalkey.DelStateNo + qncAgentCommissionIdKey := fmt.Sprintf("%s%v", cacheQncAgentCommissionIdPrefix, 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.CommissionAmount, data.Status, data.DeleteTime, data.DelState, data.Version) + } + return conn.ExecCtx(ctx, query, data.AgentId, data.OrderId, data.CommissionAmount, data.Status, data.DeleteTime, data.DelState, data.Version) + }, qncAgentCommissionIdKey) +} + +func (m *defaultAgentCommissionModel) FindOne(ctx context.Context, id int64) (*AgentCommission, error) { + qncAgentCommissionIdKey := fmt.Sprintf("%s%v", cacheQncAgentCommissionIdPrefix, id) + var resp AgentCommission + err := m.QueryRowCtx(ctx, &resp, qncAgentCommissionIdKey, 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) + }) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, model.ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAgentCommissionModel) Update(ctx context.Context, session sqlx.Session, data *AgentCommission) (sql.Result, error) { + qncAgentCommissionIdKey := fmt.Sprintf("%s%v", cacheQncAgentCommissionIdPrefix, 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.CommissionAmount, data.Status, data.DeleteTime, data.DelState, data.Version, data.Id) + } + return conn.ExecCtx(ctx, query, data.AgentId, data.OrderId, data.CommissionAmount, data.Status, data.DeleteTime, data.DelState, data.Version, data.Id) + }, qncAgentCommissionIdKey) +} + +func (m *defaultAgentCommissionModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AgentCommission) error { + + oldVersion := data.Version + data.Version += 1 + + var sqlResult sql.Result + var err error + + qncAgentCommissionIdKey := fmt.Sprintf("%s%v", cacheQncAgentCommissionIdPrefix, 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.CommissionAmount, data.Status, data.DeleteTime, data.DelState, data.Version, data.Id, oldVersion) + } + return conn.ExecCtx(ctx, query, data.AgentId, data.OrderId, data.CommissionAmount, data.Status, data.DeleteTime, data.DelState, data.Version, data.Id, oldVersion) + }, qncAgentCommissionIdKey) + if err != nil { + return err + } + updateCount, err := sqlResult.RowsAffected() + if err != nil { + return err + } + if updateCount == 0 { + return model.ErrNoRowsUpdate + } + + return nil +} + +func (m *defaultAgentCommissionModel) DeleteSoft(ctx context.Context, session sqlx.Session, data *AgentCommission) 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 "), "AgentCommissionModel delete err : %+v", err) + } + return nil +} + +func (m *defaultAgentCommissionModel) 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 *defaultAgentCommissionModel) 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 *defaultAgentCommissionModel) FindAll(ctx context.Context, builder squirrel.SelectBuilder, orderBy string) ([]*AgentCommission, error) { + + builder = builder.Columns(agentCommissionRows) + + 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 []*AgentCommission + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAgentCommissionModel) FindPageListByPage(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentCommission, error) { + + builder = builder.Columns(agentCommissionRows) + + 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 []*AgentCommission + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAgentCommissionModel) FindPageListByPageWithTotal(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentCommission, int64, error) { + + total, err := m.FindCount(ctx, builder, "id") + if err != nil { + return nil, 0, err + } + + builder = builder.Columns(agentCommissionRows) + + 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 []*AgentCommission + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, total, nil + default: + return nil, total, err + } +} + +func (m *defaultAgentCommissionModel) FindPageListByIdDESC(ctx context.Context, builder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AgentCommission, error) { + + builder = builder.Columns(agentCommissionRows) + + 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 []*AgentCommission + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAgentCommissionModel) FindPageListByIdASC(ctx context.Context, builder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AgentCommission, error) { + + builder = builder.Columns(agentCommissionRows) + + 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 []*AgentCommission + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAgentCommissionModel) 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 *defaultAgentCommissionModel) SelectBuilder() squirrel.SelectBuilder { + return squirrel.Select().From(m.table) +} +func (m *defaultAgentCommissionModel) Delete(ctx context.Context, session sqlx.Session, id int64) error { + qncAgentCommissionIdKey := fmt.Sprintf("%s%v", cacheQncAgentCommissionIdPrefix, 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) + }, qncAgentCommissionIdKey) + return err +} +func (m *defaultAgentCommissionModel) formatPrimary(primary interface{}) string { + return fmt.Sprintf("%s%v", cacheQncAgentCommissionIdPrefix, 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) + return conn.QueryRowCtx(ctx, v, query, primary, globalkey.DelStateNo) +} + +func (m *defaultAgentCommissionModel) tableName() string { + return m.table +} diff --git a/app/user/model/agentModel.go b/app/user/model/agentModel.go new file mode 100644 index 0000000..2aef816 --- /dev/null +++ b/app/user/model/agentModel.go @@ -0,0 +1,27 @@ +package model + +import ( + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +var _ AgentModel = (*customAgentModel)(nil) + +type ( + // AgentModel is an interface to be customized, add more methods here, + // and implement the added methods in customAgentModel. + AgentModel interface { + agentModel + } + + customAgentModel struct { + *defaultAgentModel + } +) + +// NewAgentModel returns a model for the database table. +func NewAgentModel(conn sqlx.SqlConn, c cache.CacheConf) AgentModel { + return &customAgentModel{ + defaultAgentModel: newAgentModel(conn, c), + } +} diff --git a/app/user/model/agentModel_gen.go b/app/user/model/agentModel_gen.go new file mode 100644 index 0000000..e88f689 --- /dev/null +++ b/app/user/model/agentModel_gen.go @@ -0,0 +1,371 @@ +// Code generated by goctl. DO NOT EDIT! + +package model + +import ( + "context" + "database/sql" + "fmt" + "qnc-server/deploy/script/model" + "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" + "qnc-server/common/globalkey" +) + +var ( + agentFieldNames = builder.RawFieldNames(&Agent{}) + agentRows = strings.Join(agentFieldNames, ",") + agentRowsExpectAutoSet = strings.Join(stringx.Remove(agentFieldNames, "`id`", "`create_time`", "`update_time`"), ",") + agentRowsWithPlaceHolder = strings.Join(stringx.Remove(agentFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?" + + cacheQncAgentIdPrefix = "cache:qnc:agent:id:" +) + +type ( + agentModel interface { + Insert(ctx context.Context, session sqlx.Session, data *Agent) (sql.Result, error) + FindOne(ctx context.Context, id int64) (*Agent, error) + Update(ctx context.Context, session sqlx.Session, data *Agent) (sql.Result, error) + UpdateWithVersion(ctx context.Context, session sqlx.Session, data *Agent) 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 *Agent) 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) ([]*Agent, error) + FindPageListByPage(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*Agent, error) + FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*Agent, int64, error) + FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*Agent, error) + FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*Agent, error) + Delete(ctx context.Context, session sqlx.Session, id int64) error + } + + defaultAgentModel struct { + sqlc.CachedConn + table string + } + + Agent struct { + Id int64 `db:"id"` + UserId int64 `db:"user_id"` + Region string `db:"region"` + Mobile string `db:"mobile"` + WechatId sql.NullString `db:"wechat_id"` + 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 newAgentModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAgentModel { + return &defaultAgentModel{ + CachedConn: sqlc.NewConn(conn, c), + table: "`agent`", + } +} + +func (m *defaultAgentModel) Insert(ctx context.Context, session sqlx.Session, data *Agent) (sql.Result, error) { + data.DelState = globalkey.DelStateNo + qncAgentIdKey := fmt.Sprintf("%s%v", cacheQncAgentIdPrefix, 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, agentRowsExpectAutoSet) + if session != nil { + return session.ExecCtx(ctx, query, data.UserId, data.Region, data.Mobile, data.WechatId, data.DeleteTime, data.DelState, data.Version) + } + return conn.ExecCtx(ctx, query, data.UserId, data.Region, data.Mobile, data.WechatId, data.DeleteTime, data.DelState, data.Version) + }, qncAgentIdKey) +} + +func (m *defaultAgentModel) FindOne(ctx context.Context, id int64) (*Agent, error) { + qncAgentIdKey := fmt.Sprintf("%s%v", cacheQncAgentIdPrefix, id) + var resp Agent + err := m.QueryRowCtx(ctx, &resp, qncAgentIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error { + query := fmt.Sprintf("SELECT %s FROM %s WHERE `id` = ? AND del_state = ? limit 1", agentRows, m.table) + return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo) + }) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, model.ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAgentModel) Update(ctx context.Context, session sqlx.Session, data *Agent) (sql.Result, error) { + qncAgentIdKey := fmt.Sprintf("%s%v", cacheQncAgentIdPrefix, 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, agentRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, data.UserId, data.Region, data.Mobile, data.WechatId, data.DeleteTime, data.DelState, data.Version, data.Id) + } + return conn.ExecCtx(ctx, query, data.UserId, data.Region, data.Mobile, data.WechatId, data.DeleteTime, data.DelState, data.Version, data.Id) + }, qncAgentIdKey) +} + +func (m *defaultAgentModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, data *Agent) error { + + oldVersion := data.Version + data.Version += 1 + + var sqlResult sql.Result + var err error + + qncAgentIdKey := fmt.Sprintf("%s%v", cacheQncAgentIdPrefix, 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, agentRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, data.UserId, data.Region, data.Mobile, data.WechatId, data.DeleteTime, data.DelState, data.Version, data.Id, oldVersion) + } + return conn.ExecCtx(ctx, query, data.UserId, data.Region, data.Mobile, data.WechatId, data.DeleteTime, data.DelState, data.Version, data.Id, oldVersion) + }, qncAgentIdKey) + if err != nil { + return err + } + updateCount, err := sqlResult.RowsAffected() + if err != nil { + return err + } + if updateCount == 0 { + return model.ErrNoRowsUpdate + } + + return nil +} + +func (m *defaultAgentModel) DeleteSoft(ctx context.Context, session sqlx.Session, data *Agent) 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 "), "AgentModel delete err : %+v", err) + } + return nil +} + +func (m *defaultAgentModel) 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 *defaultAgentModel) 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 *defaultAgentModel) FindAll(ctx context.Context, builder squirrel.SelectBuilder, orderBy string) ([]*Agent, error) { + + builder = builder.Columns(agentRows) + + 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 []*Agent + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAgentModel) FindPageListByPage(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*Agent, error) { + + builder = builder.Columns(agentRows) + + 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 []*Agent + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAgentModel) FindPageListByPageWithTotal(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*Agent, int64, error) { + + total, err := m.FindCount(ctx, builder, "id") + if err != nil { + return nil, 0, err + } + + builder = builder.Columns(agentRows) + + 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 []*Agent + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, total, nil + default: + return nil, total, err + } +} + +func (m *defaultAgentModel) FindPageListByIdDESC(ctx context.Context, builder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*Agent, error) { + + builder = builder.Columns(agentRows) + + 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 []*Agent + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAgentModel) FindPageListByIdASC(ctx context.Context, builder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*Agent, error) { + + builder = builder.Columns(agentRows) + + 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 []*Agent + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAgentModel) 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 *defaultAgentModel) SelectBuilder() squirrel.SelectBuilder { + return squirrel.Select().From(m.table) +} +func (m *defaultAgentModel) Delete(ctx context.Context, session sqlx.Session, id int64) error { + qncAgentIdKey := fmt.Sprintf("%s%v", cacheQncAgentIdPrefix, 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) + }, qncAgentIdKey) + return err +} +func (m *defaultAgentModel) formatPrimary(primary interface{}) string { + return fmt.Sprintf("%s%v", cacheQncAgentIdPrefix, primary) +} +func (m *defaultAgentModel) 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", agentRows, m.table) + return conn.QueryRowCtx(ctx, v, query, primary, globalkey.DelStateNo) +} + +func (m *defaultAgentModel) tableName() string { + return m.table +} diff --git a/app/user/model/agentWalletModel.go b/app/user/model/agentWalletModel.go new file mode 100644 index 0000000..1583c4d --- /dev/null +++ b/app/user/model/agentWalletModel.go @@ -0,0 +1,27 @@ +package model + +import ( + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +var _ AgentWalletModel = (*customAgentWalletModel)(nil) + +type ( + // AgentWalletModel is an interface to be customized, add more methods here, + // and implement the added methods in customAgentWalletModel. + AgentWalletModel interface { + agentWalletModel + } + + customAgentWalletModel struct { + *defaultAgentWalletModel + } +) + +// NewAgentWalletModel returns a model for the database table. +func NewAgentWalletModel(conn sqlx.SqlConn, c cache.CacheConf) AgentWalletModel { + return &customAgentWalletModel{ + defaultAgentWalletModel: newAgentWalletModel(conn, c), + } +} diff --git a/app/user/model/agentWalletModel_gen.go b/app/user/model/agentWalletModel_gen.go new file mode 100644 index 0000000..fdcdf22 --- /dev/null +++ b/app/user/model/agentWalletModel_gen.go @@ -0,0 +1,372 @@ +// Code generated by goctl. DO NOT EDIT! + +package model + +import ( + "context" + "database/sql" + "fmt" + "qnc-server/deploy/script/model" + "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" + "qnc-server/common/globalkey" +) + +var ( + agentWalletFieldNames = builder.RawFieldNames(&AgentWallet{}) + agentWalletRows = strings.Join(agentWalletFieldNames, ",") + agentWalletRowsExpectAutoSet = strings.Join(stringx.Remove(agentWalletFieldNames, "`id`", "`create_time`", "`update_time`"), ",") + agentWalletRowsWithPlaceHolder = strings.Join(stringx.Remove(agentWalletFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?" + + cacheQncAgentWalletIdPrefix = "cache:qnc:agentWallet:id:" +) + +type ( + agentWalletModel interface { + Insert(ctx context.Context, session sqlx.Session, data *AgentWallet) (sql.Result, error) + FindOne(ctx context.Context, id int64) (*AgentWallet, error) + Update(ctx context.Context, session sqlx.Session, data *AgentWallet) (sql.Result, error) + UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AgentWallet) 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 *AgentWallet) 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) ([]*AgentWallet, error) + FindPageListByPage(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentWallet, error) + FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentWallet, int64, error) + FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AgentWallet, error) + FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AgentWallet, error) + Delete(ctx context.Context, session sqlx.Session, id int64) error + } + + defaultAgentWalletModel struct { + sqlc.CachedConn + table string + } + + AgentWallet struct { + Id int64 `db:"id"` + AgentId int64 `db:"agent_id"` + Balance float64 `db:"balance"` + FrozenBalance float64 `db:"frozen_balance"` + TotalEarnings float64 `db:"total_earnings"` + WithdrawnAmount float64 `db:"withdrawn_amount"` + 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 newAgentWalletModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAgentWalletModel { + return &defaultAgentWalletModel{ + CachedConn: sqlc.NewConn(conn, c), + table: "`agent_wallet`", + } +} + +func (m *defaultAgentWalletModel) Insert(ctx context.Context, session sqlx.Session, data *AgentWallet) (sql.Result, error) { + data.DelState = globalkey.DelStateNo + qncAgentWalletIdKey := fmt.Sprintf("%s%v", cacheQncAgentWalletIdPrefix, 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, agentWalletRowsExpectAutoSet) + if session != nil { + return session.ExecCtx(ctx, query, data.AgentId, data.Balance, data.FrozenBalance, data.TotalEarnings, data.WithdrawnAmount, data.DeleteTime, data.DelState, data.Version) + } + return conn.ExecCtx(ctx, query, data.AgentId, data.Balance, data.FrozenBalance, data.TotalEarnings, data.WithdrawnAmount, data.DeleteTime, data.DelState, data.Version) + }, qncAgentWalletIdKey) +} + +func (m *defaultAgentWalletModel) FindOne(ctx context.Context, id int64) (*AgentWallet, error) { + qncAgentWalletIdKey := fmt.Sprintf("%s%v", cacheQncAgentWalletIdPrefix, id) + var resp AgentWallet + err := m.QueryRowCtx(ctx, &resp, qncAgentWalletIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error { + query := fmt.Sprintf("SELECT %s FROM %s WHERE `id` = ? AND del_state = ? limit 1", agentWalletRows, m.table) + return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo) + }) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, model.ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAgentWalletModel) Update(ctx context.Context, session sqlx.Session, data *AgentWallet) (sql.Result, error) { + qncAgentWalletIdKey := fmt.Sprintf("%s%v", cacheQncAgentWalletIdPrefix, 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, agentWalletRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, data.AgentId, data.Balance, data.FrozenBalance, data.TotalEarnings, data.WithdrawnAmount, data.DeleteTime, data.DelState, data.Version, data.Id) + } + return conn.ExecCtx(ctx, query, data.AgentId, data.Balance, data.FrozenBalance, data.TotalEarnings, data.WithdrawnAmount, data.DeleteTime, data.DelState, data.Version, data.Id) + }, qncAgentWalletIdKey) +} + +func (m *defaultAgentWalletModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AgentWallet) error { + + oldVersion := data.Version + data.Version += 1 + + var sqlResult sql.Result + var err error + + qncAgentWalletIdKey := fmt.Sprintf("%s%v", cacheQncAgentWalletIdPrefix, 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, agentWalletRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, data.AgentId, data.Balance, data.FrozenBalance, data.TotalEarnings, data.WithdrawnAmount, data.DeleteTime, data.DelState, data.Version, data.Id, oldVersion) + } + return conn.ExecCtx(ctx, query, data.AgentId, data.Balance, data.FrozenBalance, data.TotalEarnings, data.WithdrawnAmount, data.DeleteTime, data.DelState, data.Version, data.Id, oldVersion) + }, qncAgentWalletIdKey) + if err != nil { + return err + } + updateCount, err := sqlResult.RowsAffected() + if err != nil { + return err + } + if updateCount == 0 { + return model.ErrNoRowsUpdate + } + + return nil +} + +func (m *defaultAgentWalletModel) DeleteSoft(ctx context.Context, session sqlx.Session, data *AgentWallet) 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 "), "AgentWalletModel delete err : %+v", err) + } + return nil +} + +func (m *defaultAgentWalletModel) 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 *defaultAgentWalletModel) 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 *defaultAgentWalletModel) FindAll(ctx context.Context, builder squirrel.SelectBuilder, orderBy string) ([]*AgentWallet, error) { + + builder = builder.Columns(agentWalletRows) + + 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 []*AgentWallet + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAgentWalletModel) FindPageListByPage(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentWallet, error) { + + builder = builder.Columns(agentWalletRows) + + 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 []*AgentWallet + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAgentWalletModel) FindPageListByPageWithTotal(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentWallet, int64, error) { + + total, err := m.FindCount(ctx, builder, "id") + if err != nil { + return nil, 0, err + } + + builder = builder.Columns(agentWalletRows) + + 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 []*AgentWallet + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, total, nil + default: + return nil, total, err + } +} + +func (m *defaultAgentWalletModel) FindPageListByIdDESC(ctx context.Context, builder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AgentWallet, error) { + + builder = builder.Columns(agentWalletRows) + + 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 []*AgentWallet + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAgentWalletModel) FindPageListByIdASC(ctx context.Context, builder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AgentWallet, error) { + + builder = builder.Columns(agentWalletRows) + + 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 []*AgentWallet + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAgentWalletModel) 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 *defaultAgentWalletModel) SelectBuilder() squirrel.SelectBuilder { + return squirrel.Select().From(m.table) +} +func (m *defaultAgentWalletModel) Delete(ctx context.Context, session sqlx.Session, id int64) error { + qncAgentWalletIdKey := fmt.Sprintf("%s%v", cacheQncAgentWalletIdPrefix, 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) + }, qncAgentWalletIdKey) + return err +} +func (m *defaultAgentWalletModel) formatPrimary(primary interface{}) string { + return fmt.Sprintf("%s%v", cacheQncAgentWalletIdPrefix, primary) +} +func (m *defaultAgentWalletModel) 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", agentWalletRows, m.table) + return conn.QueryRowCtx(ctx, v, query, primary, globalkey.DelStateNo) +} + +func (m *defaultAgentWalletModel) tableName() string { + return m.table +} diff --git a/deploy/script/genModel.ps1 b/deploy/script/genModel.ps1 index fcec7be..b4059f6 100644 --- a/deploy/script/genModel.ps1 +++ b/deploy/script/genModel.ps1 @@ -23,3 +23,4 @@ Write-Output "开始创建库:$dbname 的表:$tables" # 执行 goctl 命令生成 model $command = "goctl model mysql datasource -url=`"$username`:$passwd`@tcp($host`:$port)/$dbname`" -table=`"$tables`" -dir=`"$modeldir`" --home=`"$templateDir`" -cache=true --style=goZero" Invoke-Expression $command +gibyjk. \ No newline at end of file diff --git a/deploy/script/model/productRenderModel.go b/deploy/script/model/productRenderModel.go deleted file mode 100644 index f9528fa..0000000 --- a/deploy/script/model/productRenderModel.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 _ ProductRenderModel = (*customProductRenderModel)(nil) - -type ( - // ProductRenderModel is an interface to be customized, add more methods here, - // and implement the added methods in customProductRenderModel. - ProductRenderModel interface { - productRenderModel - } - - customProductRenderModel struct { - *defaultProductRenderModel - } -) - -// NewProductRenderModel returns a model for the database table. -func NewProductRenderModel(conn sqlx.SqlConn, c cache.CacheConf) ProductRenderModel { - return &customProductRenderModel{ - defaultProductRenderModel: newProductRenderModel(conn, c), - } -} diff --git a/deploy/script/model/productRenderModel_gen.go b/deploy/script/model/productRenderModel_gen.go deleted file mode 100644 index 3003482..0000000 --- a/deploy/script/model/productRenderModel_gen.go +++ /dev/null @@ -1,409 +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" - "qnc-server/common/globalkey" -) - -var ( - productRenderFieldNames = builder.RawFieldNames(&ProductRender{}) - productRenderRows = strings.Join(productRenderFieldNames, ",") - productRenderRowsExpectAutoSet = strings.Join(stringx.Remove(productRenderFieldNames, "`id`", "`create_time`", "`update_time`"), ",") - productRenderRowsWithPlaceHolder = strings.Join(stringx.Remove(productRenderFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?" - - cacheQncProductRenderIdPrefix = "cache:qnc:productRender:id:" - cacheQncProductRenderPlatformModuleProductIdPrefix = "cache:qnc:productRender:platform:module:productId:" -) - -type ( - productRenderModel interface { - Insert(ctx context.Context, session sqlx.Session, data *ProductRender) (sql.Result, error) - FindOne(ctx context.Context, id int64) (*ProductRender, error) - FindOneByPlatformModuleProductId(ctx context.Context, platform string, module string, productId int64) (*ProductRender, error) - Update(ctx context.Context, session sqlx.Session, data *ProductRender) (sql.Result, error) - UpdateWithVersion(ctx context.Context, session sqlx.Session, data *ProductRender) 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 *ProductRender) 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) ([]*ProductRender, error) - FindPageListByPage(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*ProductRender, error) - FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*ProductRender, int64, error) - FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*ProductRender, error) - FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*ProductRender, error) - Delete(ctx context.Context, session sqlx.Session, id int64) error - } - - defaultProductRenderModel struct { - sqlc.CachedConn - table string - } - - ProductRender struct { - Id int64 `db:"id"` // 主键ID - 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"` // 版本号 - Platform string `db:"platform"` // 平台名称 - Module string `db:"module"` // 模块名称 - ProductId int64 `db:"product_id"` // 产品ID - IsRendered int64 `db:"is_rendered"` // 是否渲染(1是,0否) - } -) - -func newProductRenderModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultProductRenderModel { - return &defaultProductRenderModel{ - CachedConn: sqlc.NewConn(conn, c), - table: "`product_render`", - } -} - -func (m *defaultProductRenderModel) Insert(ctx context.Context, session sqlx.Session, data *ProductRender) (sql.Result, error) { - data.DelState = globalkey.DelStateNo - qncProductRenderIdKey := fmt.Sprintf("%s%v", cacheQncProductRenderIdPrefix, data.Id) - qncProductRenderPlatformModuleProductIdKey := fmt.Sprintf("%s%v:%v:%v", cacheQncProductRenderPlatformModuleProductIdPrefix, data.Platform, data.Module, data.ProductId) - 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, productRenderRowsExpectAutoSet) - if session != nil { - return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.Platform, data.Module, data.ProductId, data.IsRendered) - } - return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.Platform, data.Module, data.ProductId, data.IsRendered) - }, qncProductRenderIdKey, qncProductRenderPlatformModuleProductIdKey) -} - -func (m *defaultProductRenderModel) FindOne(ctx context.Context, id int64) (*ProductRender, error) { - qncProductRenderIdKey := fmt.Sprintf("%s%v", cacheQncProductRenderIdPrefix, id) - var resp ProductRender - err := m.QueryRowCtx(ctx, &resp, qncProductRenderIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error { - query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", productRenderRows, 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 *defaultProductRenderModel) FindOneByPlatformModuleProductId(ctx context.Context, platform string, module string, productId int64) (*ProductRender, error) { - qncProductRenderPlatformModuleProductIdKey := fmt.Sprintf("%s%v:%v:%v", cacheQncProductRenderPlatformModuleProductIdPrefix, platform, module, productId) - var resp ProductRender - err := m.QueryRowIndexCtx(ctx, &resp, qncProductRenderPlatformModuleProductIdKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) { - query := fmt.Sprintf("select %s from %s where `platform` = ? and `module` = ? and `product_id` = ? and del_state = ? limit 1", productRenderRows, m.table) - if err := conn.QueryRowCtx(ctx, &resp, query, platform, module, productId, globalkey.DelStateNo); err != nil { - return nil, err - } - return resp.Id, nil - }, m.queryPrimary) - switch err { - case nil: - return &resp, nil - case sqlc.ErrNotFound: - return nil, ErrNotFound - default: - return nil, err - } -} - -func (m *defaultProductRenderModel) Update(ctx context.Context, session sqlx.Session, newData *ProductRender) (sql.Result, error) { - data, err := m.FindOne(ctx, newData.Id) - if err != nil { - return nil, err - } - qncProductRenderIdKey := fmt.Sprintf("%s%v", cacheQncProductRenderIdPrefix, data.Id) - qncProductRenderPlatformModuleProductIdKey := fmt.Sprintf("%s%v:%v:%v", cacheQncProductRenderPlatformModuleProductIdPrefix, data.Platform, data.Module, data.ProductId) - 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, productRenderRowsWithPlaceHolder) - if session != nil { - return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.Platform, newData.Module, newData.ProductId, newData.IsRendered, newData.Id) - } - return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.Platform, newData.Module, newData.ProductId, newData.IsRendered, newData.Id) - }, qncProductRenderIdKey, qncProductRenderPlatformModuleProductIdKey) -} - -func (m *defaultProductRenderModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *ProductRender) error { - - oldVersion := newData.Version - newData.Version += 1 - - var sqlResult sql.Result - var err error - - data, err := m.FindOne(ctx, newData.Id) - if err != nil { - return err - } - qncProductRenderIdKey := fmt.Sprintf("%s%v", cacheQncProductRenderIdPrefix, data.Id) - qncProductRenderPlatformModuleProductIdKey := fmt.Sprintf("%s%v:%v:%v", cacheQncProductRenderPlatformModuleProductIdPrefix, data.Platform, data.Module, data.ProductId) - 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, productRenderRowsWithPlaceHolder) - if session != nil { - return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.Platform, newData.Module, newData.ProductId, newData.IsRendered, newData.Id, oldVersion) - } - return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.Platform, newData.Module, newData.ProductId, newData.IsRendered, newData.Id, oldVersion) - }, qncProductRenderIdKey, qncProductRenderPlatformModuleProductIdKey) - if err != nil { - return err - } - updateCount, err := sqlResult.RowsAffected() - if err != nil { - return err - } - if updateCount == 0 { - return ErrNoRowsUpdate - } - - return nil -} - -func (m *defaultProductRenderModel) DeleteSoft(ctx context.Context, session sqlx.Session, data *ProductRender) 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 "), "ProductRenderModel delete err : %+v", err) - } - return nil -} - -func (m *defaultProductRenderModel) 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 *defaultProductRenderModel) 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 *defaultProductRenderModel) FindAll(ctx context.Context, builder squirrel.SelectBuilder, orderBy string) ([]*ProductRender, error) { - - builder = builder.Columns(productRenderRows) - - 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 []*ProductRender - err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) - switch err { - case nil: - return resp, nil - default: - return nil, err - } -} - -func (m *defaultProductRenderModel) FindPageListByPage(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*ProductRender, error) { - - builder = builder.Columns(productRenderRows) - - 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 []*ProductRender - err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) - switch err { - case nil: - return resp, nil - default: - return nil, err - } -} - -func (m *defaultProductRenderModel) FindPageListByPageWithTotal(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*ProductRender, int64, error) { - - total, err := m.FindCount(ctx, builder, "id") - if err != nil { - return nil, 0, err - } - - builder = builder.Columns(productRenderRows) - - 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 []*ProductRender - err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) - switch err { - case nil: - return resp, total, nil - default: - return nil, total, err - } -} - -func (m *defaultProductRenderModel) FindPageListByIdDESC(ctx context.Context, builder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*ProductRender, error) { - - builder = builder.Columns(productRenderRows) - - 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 []*ProductRender - err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) - switch err { - case nil: - return resp, nil - default: - return nil, err - } -} - -func (m *defaultProductRenderModel) FindPageListByIdASC(ctx context.Context, builder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*ProductRender, error) { - - builder = builder.Columns(productRenderRows) - - 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 []*ProductRender - err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) - switch err { - case nil: - return resp, nil - default: - return nil, err - } -} - -func (m *defaultProductRenderModel) 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 *defaultProductRenderModel) SelectBuilder() squirrel.SelectBuilder { - return squirrel.Select().From(m.table) -} -func (m *defaultProductRenderModel) Delete(ctx context.Context, session sqlx.Session, id int64) error { - data, err := m.FindOne(ctx, id) - if err != nil { - return err - } - - qncProductRenderIdKey := fmt.Sprintf("%s%v", cacheQncProductRenderIdPrefix, id) - qncProductRenderPlatformModuleProductIdKey := fmt.Sprintf("%s%v:%v:%v", cacheQncProductRenderPlatformModuleProductIdPrefix, data.Platform, data.Module, data.ProductId) - _, 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) - }, qncProductRenderIdKey, qncProductRenderPlatformModuleProductIdKey) - return err -} -func (m *defaultProductRenderModel) formatPrimary(primary interface{}) string { - return fmt.Sprintf("%s%v", cacheQncProductRenderIdPrefix, primary) -} -func (m *defaultProductRenderModel) 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", productRenderRows, m.table) - return conn.QueryRowCtx(ctx, v, query, primary, globalkey.DelStateNo) -} - -func (m *defaultProductRenderModel) tableName() string { - return m.table -} diff --git a/deploy/script/model/userModel.go b/deploy/script/model/userModel.go deleted file mode 100644 index 8123712..0000000 --- a/deploy/script/model/userModel.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 _ UserModel = (*customUserModel)(nil) - -type ( - // UserModel is an interface to be customized, add more methods here, - // and implement the added methods in customUserModel. - UserModel interface { - userModel - } - - customUserModel struct { - *defaultUserModel - } -) - -// NewUserModel returns a model for the database table. -func NewUserModel(conn sqlx.SqlConn, c cache.CacheConf) UserModel { - return &customUserModel{ - defaultUserModel: newUserModel(conn, c), - } -} diff --git a/deploy/script/model/userModel_gen.go b/deploy/script/model/userModel_gen.go deleted file mode 100644 index 4403dcf..0000000 --- a/deploy/script/model/userModel_gen.go +++ /dev/null @@ -1,410 +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" - "qnc-server/common/globalkey" -) - -var ( - userFieldNames = builder.RawFieldNames(&User{}) - userRows = strings.Join(userFieldNames, ",") - userRowsExpectAutoSet = strings.Join(stringx.Remove(userFieldNames, "`id`", "`create_time`", "`update_time`"), ",") - userRowsWithPlaceHolder = strings.Join(stringx.Remove(userFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?" - - cacheQncUserIdPrefix = "cache:qnc:user:id:" - cacheQncUserMobilePrefix = "cache:qnc:user:mobile:" -) - -type ( - userModel interface { - Insert(ctx context.Context, session sqlx.Session, data *User) (sql.Result, error) - FindOne(ctx context.Context, id int64) (*User, error) - FindOneByMobile(ctx context.Context, mobile string) (*User, error) - Update(ctx context.Context, session sqlx.Session, data *User) (sql.Result, error) - UpdateWithVersion(ctx context.Context, session sqlx.Session, data *User) 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 *User) 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) ([]*User, error) - FindPageListByPage(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*User, error) - FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*User, int64, error) - FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*User, error) - FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*User, error) - Delete(ctx context.Context, session sqlx.Session, id int64) error - } - - defaultUserModel struct { - sqlc.CachedConn - table string - } - - User struct { - Id int64 `db:"id"` - 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"` // 版本号 - Mobile string `db:"mobile"` - Password sql.NullString `db:"password"` - Nickname string `db:"nickname"` - Info string `db:"info"` - Inside int64 `db:"inside"` - } -) - -func newUserModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultUserModel { - return &defaultUserModel{ - CachedConn: sqlc.NewConn(conn, c), - table: "`user`", - } -} - -func (m *defaultUserModel) Insert(ctx context.Context, session sqlx.Session, data *User) (sql.Result, error) { - data.DelState = globalkey.DelStateNo - qncUserIdKey := fmt.Sprintf("%s%v", cacheQncUserIdPrefix, data.Id) - qncUserMobileKey := fmt.Sprintf("%s%v", cacheQncUserMobilePrefix, data.Mobile) - 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, userRowsExpectAutoSet) - if session != nil { - return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.Mobile, data.Password, data.Nickname, data.Info, data.Inside) - } - return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.Mobile, data.Password, data.Nickname, data.Info, data.Inside) - }, qncUserIdKey, qncUserMobileKey) -} - -func (m *defaultUserModel) FindOne(ctx context.Context, id int64) (*User, error) { - qncUserIdKey := fmt.Sprintf("%s%v", cacheQncUserIdPrefix, id) - var resp User - err := m.QueryRowCtx(ctx, &resp, qncUserIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error { - query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", userRows, 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 *defaultUserModel) FindOneByMobile(ctx context.Context, mobile string) (*User, error) { - qncUserMobileKey := fmt.Sprintf("%s%v", cacheQncUserMobilePrefix, mobile) - var resp User - err := m.QueryRowIndexCtx(ctx, &resp, qncUserMobileKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) { - query := fmt.Sprintf("select %s from %s where `mobile` = ? and del_state = ? limit 1", userRows, m.table) - if err := conn.QueryRowCtx(ctx, &resp, query, mobile, globalkey.DelStateNo); err != nil { - return nil, err - } - return resp.Id, nil - }, m.queryPrimary) - switch err { - case nil: - return &resp, nil - case sqlc.ErrNotFound: - return nil, ErrNotFound - default: - return nil, err - } -} - -func (m *defaultUserModel) Update(ctx context.Context, session sqlx.Session, newData *User) (sql.Result, error) { - data, err := m.FindOne(ctx, newData.Id) - if err != nil { - return nil, err - } - qncUserIdKey := fmt.Sprintf("%s%v", cacheQncUserIdPrefix, data.Id) - qncUserMobileKey := fmt.Sprintf("%s%v", cacheQncUserMobilePrefix, data.Mobile) - 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, userRowsWithPlaceHolder) - if session != nil { - return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.Mobile, newData.Password, newData.Nickname, newData.Info, newData.Inside, newData.Id) - } - return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.Mobile, newData.Password, newData.Nickname, newData.Info, newData.Inside, newData.Id) - }, qncUserIdKey, qncUserMobileKey) -} - -func (m *defaultUserModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *User) error { - - oldVersion := newData.Version - newData.Version += 1 - - var sqlResult sql.Result - var err error - - data, err := m.FindOne(ctx, newData.Id) - if err != nil { - return err - } - qncUserIdKey := fmt.Sprintf("%s%v", cacheQncUserIdPrefix, data.Id) - qncUserMobileKey := fmt.Sprintf("%s%v", cacheQncUserMobilePrefix, data.Mobile) - 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, userRowsWithPlaceHolder) - if session != nil { - return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.Mobile, newData.Password, newData.Nickname, newData.Info, newData.Inside, newData.Id, oldVersion) - } - return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.Mobile, newData.Password, newData.Nickname, newData.Info, newData.Inside, newData.Id, oldVersion) - }, qncUserIdKey, qncUserMobileKey) - if err != nil { - return err - } - updateCount, err := sqlResult.RowsAffected() - if err != nil { - return err - } - if updateCount == 0 { - return ErrNoRowsUpdate - } - - return nil -} - -func (m *defaultUserModel) DeleteSoft(ctx context.Context, session sqlx.Session, data *User) 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 "), "UserModel delete err : %+v", err) - } - return nil -} - -func (m *defaultUserModel) 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 *defaultUserModel) 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 *defaultUserModel) FindAll(ctx context.Context, builder squirrel.SelectBuilder, orderBy string) ([]*User, error) { - - builder = builder.Columns(userRows) - - 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 []*User - err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) - switch err { - case nil: - return resp, nil - default: - return nil, err - } -} - -func (m *defaultUserModel) FindPageListByPage(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*User, error) { - - builder = builder.Columns(userRows) - - 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 []*User - err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) - switch err { - case nil: - return resp, nil - default: - return nil, err - } -} - -func (m *defaultUserModel) FindPageListByPageWithTotal(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*User, int64, error) { - - total, err := m.FindCount(ctx, builder, "id") - if err != nil { - return nil, 0, err - } - - builder = builder.Columns(userRows) - - 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 []*User - err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) - switch err { - case nil: - return resp, total, nil - default: - return nil, total, err - } -} - -func (m *defaultUserModel) FindPageListByIdDESC(ctx context.Context, builder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*User, error) { - - builder = builder.Columns(userRows) - - 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 []*User - err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) - switch err { - case nil: - return resp, nil - default: - return nil, err - } -} - -func (m *defaultUserModel) FindPageListByIdASC(ctx context.Context, builder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*User, error) { - - builder = builder.Columns(userRows) - - 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 []*User - err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) - switch err { - case nil: - return resp, nil - default: - return nil, err - } -} - -func (m *defaultUserModel) 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 *defaultUserModel) SelectBuilder() squirrel.SelectBuilder { - return squirrel.Select().From(m.table) -} -func (m *defaultUserModel) Delete(ctx context.Context, session sqlx.Session, id int64) error { - data, err := m.FindOne(ctx, id) - if err != nil { - return err - } - - qncUserIdKey := fmt.Sprintf("%s%v", cacheQncUserIdPrefix, id) - qncUserMobileKey := fmt.Sprintf("%s%v", cacheQncUserMobilePrefix, data.Mobile) - _, 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) - }, qncUserIdKey, qncUserMobileKey) - return err -} -func (m *defaultUserModel) formatPrimary(primary interface{}) string { - return fmt.Sprintf("%s%v", cacheQncUserIdPrefix, primary) -} -func (m *defaultUserModel) 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", userRows, m.table) - return conn.QueryRowCtx(ctx, v, query, primary, globalkey.DelStateNo) -} - -func (m *defaultUserModel) tableName() string { - return m.table -} diff --git a/go.mod b/go.mod index 907bbc2..536573b 100644 --- a/go.mod +++ b/go.mod @@ -63,6 +63,8 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/redis/go-redis/v9 v9.7.0 // indirect github.com/robfig/cron/v3 v3.0.1 // indirect + github.com/samber/lo v1.49.1 // indirect + github.com/shirou/gopsutil v3.21.11+incompatible // indirect github.com/smartwalle/ncrypto v1.0.4 // indirect github.com/smartwalle/ngx v1.0.9 // indirect github.com/smartwalle/nsign v1.0.9 // indirect @@ -86,9 +88,9 @@ require ( go.uber.org/automaxprocs v1.6.0 // indirect golang.org/x/crypto v0.28.0 // indirect golang.org/x/net v0.30.0 // indirect - golang.org/x/sync v0.9.0 // indirect + golang.org/x/sync v0.10.0 // indirect golang.org/x/sys v0.26.0 // indirect - golang.org/x/text v0.19.0 // indirect + golang.org/x/text v0.21.0 // indirect golang.org/x/time v0.7.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 // indirect diff --git a/go.sum b/go.sum index 48cd053..75bd389 100644 --- a/go.sum +++ b/go.sum @@ -202,6 +202,10 @@ github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +github.com/samber/lo v1.49.1 h1:4BIFyVfuQSEpluc7Fua+j1NolZHiEHEpaSEKdsH0tew= +github.com/samber/lo v1.49.1/go.mod h1:dO6KHFzUKXgP8LDhU0oI8d2hekjXnGOu0DB8Jecxd6o= +github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= +github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= github.com/smartwalle/alipay/v3 v3.2.23 h1:i1VwJeu70EmwpsXXz6GZZnMAtRx5MTfn2dPoql/L3zE= @@ -237,6 +241,7 @@ github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY= github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= @@ -333,6 +338,8 @@ golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -371,6 +378,8 @@ golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ= golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=