package service import ( "encoding/json" "github.com/go-kratos/kratos/v2/errors" "github.com/go-kratos/kratos/v2/log" "github.com/go-kratos/kratos/v2/transport/http" "io" err2 "voucher/api/err" v1 "voucher/api/v1" "voucher/internal/biz/bo" "voucher/internal/biz/vo" ) func (s *VoucherService) CmbOrder(ctx http.Context) error { var ( reply *v1.CmbReply bizReply *v1.CmbOrderReply ) voucherNo, err := s.cmbOrder(ctx) if err != nil { se := errors.FromError(err) if len(se.Reason) == 0 { se.Reason = err2.CmbErr_CMB_UNKNOWN.String() } bizReply = &v1.CmbOrderReply{ RespCode: vo.CmbResponseStatusFail.GetValue(), RespMsg: se.Message, CodeNo: "", ThirdErrCode: se.Reason, } log.Errorf("cmbOrder error: %v", err) } else { bizReply = &v1.CmbOrderReply{ RespCode: vo.CmbResponseStatusSuccess.GetValue(), RespMsg: "成功", CodeNo: voucherNo, } } 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("CmbOrder GetResponse error: %v", err) return ctx.JSON(400, err) } replyBytes, _ := json.Marshal(reply) log.Warnf("cmbOrder reply: %v", string(replyBytes)) return ctx.JSON(200, reply) } func (s *VoucherService) cmbOrder(ctx http.Context) (string, error) { bodyBytes, err := io.ReadAll(ctx.Request().Body) if err != nil { return "", err2.ErrorCmbParamFail(err.Error()) } log.Warnf("cmbOrder req: %v", string(bodyBytes)) var req *v1.CmbRequest if err = json.Unmarshal(bodyBytes, &req); err != nil { return "", err2.ErrorCmbParamFail(err.Error()) } if err = req.Validate(); err != nil { return "", err2.ErrorCmbParamFail(err.Error()) } bizContent, err := s.CmbMixRepo.OrderVerify(ctx, req) if err != nil { return "", err } boReq := &bo.OrderCreateReqBo{ OutBizNo: bizContent.TransactionId, ProductNo: bizContent.ActivityId, Account: bizContent.CmbUid, AppID: bizContent.AppId, Attach: bizContent.Attach, AccountType: vo.OrderAccountTypeOpenId, Type: vo.OrderTypeCmb, } voucherNo, err := s.VoucherBiz.CmbOrder(ctx, boReq) if err != nil { return "", err } return voucherNo, nil } func (s *VoucherService) CmbQuery(ctx http.Context) error { var ( reply *v1.CmbReply req = &bo.CmbResponseBo{} ) bizReply, err := s.cmbQuery(ctx) if err != nil { req.RespCode = vo.CmbResponseStatusFail.GetValue() req.RespMsg = err.Error() req.BizContent = "" log.Errorf("CmbQuery error: %v", err) } else { replyBizContentBytes, _ := json.Marshal(bizReply) req.RespCode = vo.CmbResponseStatusSuccess.GetValue() req.RespMsg = "成功" req.BizContent = string(replyBizContentBytes) } reply, err = s.CmbMixRepo.GetResponse(ctx, req) if err != nil { log.Errorf("cmbProductQuery GetResponse error: %v", err) return ctx.JSON(400, err) } replyBytes, _ := json.Marshal(reply) log.Warnf("cmbQuery reply: %v", string(replyBytes)) return ctx.JSON(200, reply) } func (s *VoucherService) cmbQuery(ctx http.Context) (*v1.CmbQueryReply, error) { bodyBytes, err := io.ReadAll(ctx.Request().Body) if err != nil { return nil, err } log.Warnf("cmbQuery req: %s", string(bodyBytes)) var req *v1.CmbRequest if err = json.Unmarshal(bodyBytes, &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 ( reply *v1.CmbReply bizReply *v1.CmbQueryProductReply ) bizReply, err := s.cmbProductQuery(ctx) if err != nil { se := errors.FromError(err) bizReply = &v1.CmbQueryProductReply{ RespCode: vo.CmbResponseStatusFail.GetValue(), RespMsg: err.Error(), ThirdErrCode: se.Reason, } log.Errorf("cmbProductQuery error: %v", err) } 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 GetResponse error: %v", err) return ctx.JSON(400, err) } return ctx.JSON(200, reply) } func (s *VoucherService) cmbProductQuery(ctx http.Context) (*v1.CmbQueryProductReply, error) { bodyBytes, err := io.ReadAll(ctx.Request().Body) if err != nil { return nil, err } var req *v1.CmbRequest if err = json.Unmarshal(bodyBytes, &req); err != nil { return nil, err } if err = req.Validate(); err != nil { return nil, err } bizContent, err := s.CmbMixRepo.ProductQueryVerify(ctx, req) if err != nil { return nil, err } return s.VoucherBiz.CmbProductQuery(ctx, bizContent.ActivityId) }