diff --git a/api/v1/cmb_cpn.proto b/api/v1/cmb_cpn.proto index 4750102..041a897 100644 --- a/api/v1/cmb_cpn.proto +++ b/api/v1/cmb_cpn.proto @@ -68,6 +68,15 @@ message CmbOrderReply { string codeNo = 9 [json_name = "codeNo"]; } +message CmbQueryRequest { + // 业务参数 + // 外部合作方权益批次号 + string codeNo = 9 [json_name = "codeNo", (validate.rules).string = {min_len: 1,max_len: 32}]; +} +message CmbQueryReply { + +} + message CmbQueryProductRequest { // 业务参数 diff --git a/internal/biz/cmb.go b/internal/biz/cmb.go index d139fee..8fd460d 100644 --- a/internal/biz/cmb.go +++ b/internal/biz/cmb.go @@ -47,6 +47,20 @@ func (v *VoucherBiz) CmbOrder(ctx context.Context, req *bo.OrderCreateReqBo) (or return } +func (v *VoucherBiz) CmbQuery(ctx context.Context, orderNo string) (reps *v1.CmbQueryReply, err error) { + + c := vo.CmbQueryLockKey.BuildCache([]string{orderNo}) + + err = lock.NewMutex(v.rdb.Rdb, c.TTL).Lock(ctx, c.Key, func(ctx context.Context) error { + + reps = &v1.CmbQueryReply{} + + return nil + }) + + return +} + func (v *VoucherBiz) CmbProductQuery(ctx context.Context, productNo string) (reps *v1.CmbQueryProductReply, err error) { c := vo.CmbProductQueryLockKey.BuildCache([]string{productNo}) diff --git a/internal/biz/mixrepos/cmb.go b/internal/biz/mixrepos/cmb.go index 2c7a939..1ae69d9 100644 --- a/internal/biz/mixrepos/cmb.go +++ b/internal/biz/mixrepos/cmb.go @@ -9,6 +9,7 @@ import ( type CmbMixRepo interface { VerifyResponse(ctx context.Context, req *v1.CmbReply) (string, error) OrderVerify(ctx context.Context, req *v1.CmbRequest) (*v1.CmbOrderRequest, error) + QueryVerify(ctx context.Context, req *v1.CmbRequest) (*v1.CmbQueryRequest, error) ProductQueryVerify(ctx context.Context, req *v1.CmbRequest) (*v1.CmbQueryProductRequest, error) GetMockRequest(ctx context.Context, bizContent string) (*v1.CmbRequest, error) GetRequest(_ context.Context, reqBo *bo.CmbRequestBo) (*v1.CmbRequest, error) diff --git a/internal/biz/vo/cache.go b/internal/biz/vo/cache.go index 6e972e6..0fc89e6 100644 --- a/internal/biz/vo/cache.go +++ b/internal/biz/vo/cache.go @@ -9,6 +9,7 @@ type CacheKey string const ( CmbOrderLockKey CacheKey = "cmb_order" + CmbQueryLockKey CacheKey = "cmb_query" CmbProductQueryLockKey CacheKey = "cmb_product_query" WechatNotifyRegisterTagCacheKey CacheKey = "wechat_notify_register_tag" @@ -19,6 +20,7 @@ const ( var CacheKeyMap = map[CacheKey]time.Duration{ CmbOrderLockKey: 30 * time.Second, + CmbQueryLockKey: 30 * time.Second, CmbProductQueryLockKey: 30 * time.Second, WechatNotifyRegisterTagCacheKey: 86400 * time.Second, WechatNotifyRegisterTagCacheLockKey: 30 * time.Second, diff --git a/internal/data/mixrepoimpl/cmb.go b/internal/data/mixrepoimpl/cmb.go index b232e72..106c4fb 100644 --- a/internal/data/mixrepoimpl/cmb.go +++ b/internal/data/mixrepoimpl/cmb.go @@ -39,6 +39,20 @@ func (s *CmbMixRepoImpl) OrderVerify(ctx context.Context, req *v1.CmbRequest) (* return resp, nil } +func (s *CmbMixRepoImpl) QueryVerify(ctx context.Context, req *v1.CmbRequest) (*v1.CmbQueryRequest, error) { + bizStr, err := s.Verify(ctx, req) + if err != nil { + return nil, err + } + + var resp *v1.CmbQueryRequest + if err = json.Unmarshal([]byte(bizStr), &resp); err != nil { + return nil, err + } + + return resp, nil +} + func (s *CmbMixRepoImpl) ProductQueryVerify(ctx context.Context, req *v1.CmbRequest) (*v1.CmbQueryProductRequest, error) { bizStr, err := s.Verify(ctx, req) if err != nil { diff --git a/internal/server/http.go b/internal/server/http.go index c6495d2..13770e9 100644 --- a/internal/server/http.go +++ b/internal/server/http.go @@ -39,6 +39,9 @@ func NewHTTPServer( cmb.POST("/v1/orderMock", voucherService.CmbOrderMock) cmb.POST("/v1/order", voucherService.CmbOrder) + cmb.POST("/v1/queryMock", voucherService.CmbOrderMock) + cmb.POST("/v1/query", voucherService.CmbOrder) + cmb.POST("/v1/product/QueryMock", voucherService.CmbProductQueryMock) cmb.POST("/v1/product/query", voucherService.CmbProductQuery) diff --git a/internal/service/cmb.go b/internal/service/cmb.go index 2ed1c17..4f36a32 100644 --- a/internal/service/cmb.go +++ b/internal/service/cmb.go @@ -80,6 +80,53 @@ func (s *VoucherService) cmbOrder(ctx http.Context) (string, error) { return orderNo, nil } +func (s *VoucherService) CmbQuery(ctx http.Context) error { + + var ( + reply *v1.CmbReply + + bizReply *v1.CmbQueryReply + ) + + bizReply, err := s.cmbQuery(ctx) + if err != nil { + bizReply = &v1.CmbQueryReply{} + } + + replyBizContent, _ := json.Marshal(bizReply) + xx := &bo.CmbResponseBo{ + RespCode: vo.CmbResponseStatusSuccess.GetValue(), + RespMsg: "成功", + BizContent: string(replyBizContent), + } + + reply, err = s.CmbMixRepo.GetResponse(ctx, xx) + if err != nil { + log.Errorf("cmbProductQuery CmbMixRepo GetResponse error: %v", err) + } + + return ctx.JSON(200, reply) +} + +func (s *VoucherService) cmbQuery(ctx http.Context) (*v1.CmbQueryReply, error) { + + var req *v1.CmbRequest + if err := ctx.BindForm(&req); err != nil { + return nil, err + } + + if err := req.Validate(); err != nil { + return nil, err + } + + bizContent, err := s.CmbMixRepo.QueryVerify(ctx, req) + if err != nil { + return nil, err + } + + return s.VoucherBiz.CmbQuery(ctx, bizContent.CodeNo) +} + func (s *VoucherService) CmbProductQuery(ctx http.Context) error { var ( diff --git a/internal/service/cmb_mock.go b/internal/service/cmb_mock.go index e823151..904f32c 100644 --- a/internal/service/cmb_mock.go +++ b/internal/service/cmb_mock.go @@ -6,6 +6,26 @@ import ( v1 "voucher/api/v1" ) +func (s *VoucherService) CmbQueryMock(ctx http.Context) error { + + var req *v1.CmbQueryRequest + if err := ctx.BindForm(&req); err != nil { + return err + } + + bizJsonBytes, err := json.Marshal(req) + if err != nil { + return err + } + + reply, err := s.CmbMixRepo.GetMockRequest(ctx, string(bizJsonBytes)) + if err != nil { + return err + } + + return ctx.JSON(200, reply) +} + func (s *VoucherService) CmbOrderMock(ctx http.Context) error { var req *v1.CmbOrderRequest