package s2s import ( "context" "joybuywork/internal/plugins/jsonm" "joybuywork/internal/repository/model" "joybuywork/internal/repository/mtype" "joybuywork/internal/repository/withdefault" "joybuywork/proto/go_proto/workerr" "fmt" "time" ) type LvApiResp struct { Code int32 `json:"code"` Msg string `json:"msg"` Data *LvApiRespData `json:"data"` } type LvApiRespData struct { List []string `json:"list"` // 用户绑定的标签 } type LvApi struct { S2S log *model.LvAPILog } func NewLvApi(ctx context.Context, conf *model.FissionConfig, opts ...Option) (*LvApi, error) { r := &LvApi{} err := r.init(ctx, conf.ProjectID, conf.LvURLID, opts...) if err != nil { return nil, err } return r, nil } func (s *LvApi) LvApi(cpn *model.FissionCampaign, userId, langMark, source string) (res *LvApiRespData, err error) { var resp, errMsg string var code int32 defer func() { s.after(code, resp, errMsg) }() m := s.GetDao().FissionUserLevel var marks = make([]string, 0) err = m.WithContext(s.Ctx).Where(m.ProjectID.Eq(cpn.ProjectID), m.DeletedAt.Eq(0)).Pluck(m.Mark, &marks) if err != nil { err = s.BE().MysqlError(err) return } req := mtype.LvApiLogReq{ UserId: userId, CampaignId: cpn.HashID, Title: cpn.Title, State: "get_user_type", TlSettingUserType: marks, } s.before(cpn.ID, userId, source, req) body, _ := jsonm.Marshal(req) resp, code, err = s.request(s.log.ID, body, langMark, prefixToken, NewCertToken) if err != nil { errMsg = fmt.Sprintf("请求处理失败: %v", err) err = workerr.S2SNotSuccessError return } var data = &LvApiResp{} err = jsonm.StrUnmarshal(resp, data) if err != nil { errMsg = fmt.Sprintf("无法解析的返回数据: %v", err) err = workerr.S2SUnableToParseError return } if data.Code != successCode { errMsg = "code返回的非200,请确认业务是否正确对接" if data.Msg != "" { errMsg = fmt.Sprintf("code返回的非200, 提供的信息为: %s", data.Msg) } err = workerr.S2SNotSuccessError return } res = data.Data return } func (s *LvApi) before(cpnId int64, userId, source string, req mtype.LvApiLogReq) { s.log = withdefault.LvApiLog(&model.LvAPILog{ CampaignID: cpnId, UserID: userId, Source: source, ReqURL: s.GetUrl(), }) s.log.SetReq(req) _ = s.GetDao().LvAPILog.WithContext(s.Ctx).Create(s.log) s.start = time.Now() } func (s *LvApi) after(code int32, resp, errMsg string) { s.log.RespCode = code s.log.Resp = resp s.log.ErrMsg = errMsg s.log.Token = s.GetToken() s.log.ReqHeader = s.GetHeader() s.log.ReqTime = time.Since(s.start).Milliseconds() _ = s.GetDao().LvAPILog.WithContext(s.Ctx).Save(s.log) }