package logic import ( "context" "lone-services/pkg/modelbase" "lone-services/pkg/utils" admin "lone-services/rpc/admin/pb" "lone-services/services/admin/internal/dao" "lone-services/services/admin/internal/model" "lone-services/services/admin/internal/svc" "lone-services/services/admin/validator" "strconv" "strings" "github.com/zeromicro/go-zero/core/logx" ) type AdminEditLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger BaseLogic } func NewAdminEditLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminEditLogic { return &AdminEditLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } func (l *AdminEditLogic) AdminEdit(in *admin.AdminEditRequest) (*admin.Response, error) { var v validator.AdminEditValidator if fail := l.checkParams(in, &v); fail != nil { return fail, nil } adminInfo := utils.GetUserFromCtx(l.ctx) if adminInfo.ID < utils.NumberOne { return l.fail(utils.ErrorNoLoginInfo) } encryPhone, cErr := utils.EncryptPhone(in.Phone) if cErr != nil { l.Logger.Error(cErr) return l.fail(utils.ErrorEncryptAesError) } info, check := l.checkPhone(encryPhone) if !check { return l.fail(utils.ErrorEncryptAesError) } modelObj := model.AdminModel{}.Init() var action utils.ActionAdd if in.Id > utils.NumberZero && info.Id < utils.NumberOne { w := modelbase.Params{Eq: map[string]string{"id": strconv.Itoa(int(in.Id))}} info = dao.Admin{} err := modelObj.GetOne(w, &info) if err != nil { l.Logger.Error(cErr) return l.fail(utils.Fail) } if info.Id < utils.NumberZero { return l.fail(utils.ErrorNotFund) } } //编辑 if in.Id > utils.NumberZero { if info.Id < utils.NumberOne { return l.fail(utils.ErrorNotFund) } if info.Id != in.Id { return l.fail(utils.ErrorExistUser) } } else { if len(in.Password) < utils.NumberOne { return l.out(utils.ErrorParams, "密码不能为空") } if info.Id > utils.NumberZero { return l.fail(utils.ErrorExistUser) } } action.Type = utils.LogActionTypeEdit action.OldContent = info info.AdminId = int(adminInfo.ID) info.AdminName = adminInfo.Name var roles []string if len(in.Roles) > utils.NumberZero { for _, role := range in.Roles { roles = append(roles, strconv.Itoa(int(role))) } } info.Name = in.Name info.Phone = encryPhone info.Roles = strings.Join(roles, utils.DecollatorComma) info.Email = in.Email info.Avatar = in.Avatar var err error var row int64 if info.Id > utils.NumberZero { w := modelbase.Params{Eq: map[string]string{"id": strconv.Itoa(int(info.Id))}} row, err = modelObj.Edit(w, info) } else { salt := utils.GetRandstring(utils.NumberFive) pwd := utils.GetSaltPassword(salt, in.Password) pwd, _ = utils.EncryptPassword(pwd) info.Password = pwd info.Salt = salt err = modelObj.Init().Create(&info) row = info.Id action.Type = utils.LogActionTypeAdd } if err != nil { l.Logger.Error(err) return l.fail(utils.Fail) } if row > utils.NumberZero { action.NewContent = info action.ModuleName = utils.LogActionModuleAdmin utils.SetActionLog(adminInfo, action) } return l.ok(info.Id) } func (l *AdminEditLogic) checkPhone(phone string) (dao.Admin, bool) { w := modelbase.Params{Eq: map[string]string{"phone": phone}} info := dao.Admin{} err := model.AdminModel{}.Init().GetOne(w, &info) if err != nil { l.Logger.Error(err) return info, false } return info, true }