package logic import ( "context" "strconv" "lone-services/pkg/modelbase" "lone-services/pkg/utils" "lone-services/pkg/validate" wecomuser "lone-services/pkg/wecom/user" wecom "lone-services/rpc/wecom/pb" "lone-services/services/wecom/internal/client" "lone-services/services/wecom/internal/dao" "lone-services/services/wecom/internal/model" "lone-services/services/wecom/internal/svc" "lone-services/services/wecom/validator" "github.com/zeromicro/go-zero/core/logx" ) type CreateUserLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewCreateUserLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CreateUserLogic { return &CreateUserLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } func (l *CreateUserLogic) CreateUser(in *wecom.CreateUserReq) (*wecom.Response, error) { var req validator.CreateUserValidator if msg := validate.ValidateFromProto(in, &req); msg != utils.StringEmpty { return outResponse(utils.ErrorParams, msg), nil } userStatus := resolveStatus(req.Status, dao.StatusEnabled) m := model.UserModel{}.Init() var existing dao.WecomUser if err := m.GetOne(modelbase.Params{ Eq: map[string]string{ "user_id": strconv.FormatInt(req.UserId, utils.NumberTen), "type": strconv.FormatUint(uint64(req.Type), utils.NumberTen), "status": strconv.Itoa(int(dao.StatusEnabled)), }, }, &existing); err != nil { l.Errorf("wecom create user check: %v", err) return failResponse(utils.Fail), nil } if existing.Id > utils.NumberZero { return failResponse(utils.ErrorDataIsExist), nil } encryptMobile, err := utils.EncryptPhone(req.Mobile) if err != nil { l.Errorf("wecom encrypt mobile: %v", err) return failResponse(utils.Fail), nil } wecomUserId := utils.RandString(16) if !utils.GetConfigBool("wecom.skip") { createReq := wecomuser.CreateRequest{ UserId: wecomUserId, Name: req.Name, Mobile: req.Mobile, Enable: statusEnable(userStatus), Department: []int{departmentID()}, } if req.Avatar != utils.StringEmpty { createReq.AvatarMediaID = req.Avatar } if err := client.NewContactClient().Create(l.ctx, createReq); err != nil { l.Errorf("wecom create user: %v", err) return failWecomHTTP(), nil } } agentsJSON, aErr := buildAgentsJSON(req.AgentIds) if aErr != nil { l.Errorf("wecom create agents: %v", aErr) return outResponse(utils.ErrorParams, aErr.Error()), nil } now := utils.Now() row := dao.WecomUser{ UserId: req.UserId, Type: uint8(req.Type), WecomUserId: wecomUserId, Name: req.Name, Mobile: encryptMobile, Avatar: req.Avatar, Status: userStatus, AgentIds: agentsJSON, CreatedAt: now, UpdatedAt: now, } if err := m.Create(&row); err != nil { l.Errorf("wecom create user db: %v", err) return failResponse(utils.Fail), nil } return okResponse(nil), nil }