package users import ( "github.com/gin-gonic/gin" "github.com/golangkit/formatime" "github.com/jinzhu/gorm" "recook/internal/back" "recook/internal/dbc" "recook/internal/model/user" "recook/tools" "regexp" "strconv" "strings" "time" "unicode/utf8" ) type updateHeadParam struct { UserID uint `json:"userId" validate:"required"` HeadURL string `json:"headUrl" validate:"required"` } type updateNicknameParam struct { UserID uint `json:"userId" validate:"required"` Nickname string `json:"nickname" validate:"required"` } type updateGenderParam struct { UserID uint `json:"userId" validate:"required"` Gender uint `json:"gender" validate:"required"` } type updateBirthdayParam struct { UserID uint `json:"userId" validate:"required"` Birthday string `json:"birthday" validate:"required"` } type bindingRealInfoParam struct { UserID uint `json:"userId" validate:"required"` IdCardName string `json:"idCardName" validate:"required"` IdCardNo string `json:"idCardNo" validate:"required"` BankNo string `json:"bankNo" validate:"required"` } func UpdateUserHeadPic(c *gin.Context) { var p updateHeadParam err := tools.ParseParams(&p, c) if err != nil { back.Fail(c, err.Error()) return } var u user.Information err = dbc.DB.Select("id").First(&u, p.UserID).Error if err != nil { back.Err(c, err.Error()) return } err = dbc.DB.Model(&u).Updates(user.Information{ HeadImgUrl: p.HeadURL, }).Error if err != nil { back.Err(c, err.Error()) return } back.Suc(c, "", nil) } func UpdateUserNickname(c *gin.Context) { var p updateNicknameParam err := tools.ParseParams(&p, c) if err != nil { back.Fail(c, err.Error()) return } name := strings.Replace(p.Nickname, " ", "", -1) if utf8.RuneCountInString(name) > 10 { back.Fail(c, "昵称最多10个字符") return } if utf8.RuneCountInString(name) < 1 { back.Fail(c, "昵称至少1个字符") return } var u user.Information err = dbc.DB.Select("id").First(&u, p.UserID).Error if err != nil { back.Err(c, err.Error()) return } err = dbc.DB.Model(&u).Updates(user.Information{ Nickname: name, }).Error if err != nil { back.Err(c, err.Error()) return } back.Suc(c, "", nil) } func UpdateUserGender(c *gin.Context) { var p updateGenderParam err := tools.ParseParams(&p, c) if err != nil { back.Fail(c, err.Error()) return } var u user.Information err = dbc.DB.Select("id").First(&u, p.UserID).Error if err != nil { back.Err(c, err.Error()) return } err = dbc.DB.Model(&u).Updates(user.Information{ Gender: p.Gender, }).Error if err != nil { back.Err(c, err.Error()) return } back.Suc(c, "", nil) } func UpdateUserBirthday(c *gin.Context) { var p updateBirthdayParam err := tools.ParseParams(&p, c) if err != nil { back.Fail(c, err.Error()) return } var u user.Information err = dbc.DB.Select("id").First(&u, p.UserID).Error if err != nil { back.Err(c, err.Error()) return } t, _ := time.ParseInLocation("20060102", p.Birthday, time.Local) err = dbc.DB.Model(&u).Updates(user.Information{ Birthday: formatime.NewSecondFrom(t), }).Error if err != nil { back.Err(c, err.Error()) return } back.Suc(c, "", nil) } func BindingRealInfo(c *gin.Context) { var p bindingRealInfoParam err := tools.ParseParams(&p, c) if err != nil { back.Fail(c, err.Error()) return } var u user.RealInfo err = dbc.DB.First(&u, user.RealInfo{UserID: p.UserID}).Error if err != nil && !gorm.IsRecordNotFoundError(err) { back.Err(c, err.Error()) return } if u.ID > 0 { back.Err(c, "您已认证过") return } u = user.RealInfo{ UserID: p.UserID, IdCardName: p.IdCardName, IdCardNo: p.IdCardNo, BankNo: p.BankNo, } err = dbc.DB.Create(&u).Error if err != nil { back.Err(c, err.Error()) return } back.Suc(c, "", nil) } type userAddrParam struct { UserID uint `json:"userId" validate:"required,numeric"` Address string `json:"address" validate:"required,max=300"` } // 更新用户填写的地址。默认为空 func UpdateUserAddress(c *gin.Context) { var p userAddrParam err := tools.ParseParams(&p, c) if err != nil { back.Fail(c, "参数错误:"+err.Error()) return } var u user.Information dbc.DB.Find(&u, p.UserID) if u.ID <= 0 { back.Fail(c, "用户不存在") return } // 添加店主无法修改地址的逻辑 //if u.Role == 1 { // http.Fail(c, "店主不允许更改地址用") // return //} tx := dbc.DB.Begin() { if err = dbc.DB.Model(&u).Update("address", p.Address).Error; err != nil { tx.Rollback() back.Fail(c, "更新失败:"+err.Error()) return } // 实体店修改地址后,他的所有下级店主的地址相应修改 //if u.Role == 2 { // var userIDs []struct{ UserID uint } // // 找出所有的该实体店下面的店主 // dbc.DB.Model(&user.Tree{}).Select("user_id").Where("root_id=? and depth=1", u.ID).Scan(&userIDs) // var ids = make([]uint, len(userIDs)) // // 组装ids // for index, userID := range userIDs { // ids[index] = userID.UserID // } // // 更新所有该下级店主的地址 // if err = dbc.DB.Model(&user.Information{}).Where("id in (?)", ids).Create("address", p.Address).Error; err != nil { // tx.Rollback() // http.Fail(c, "更新失败") // return // } //} } tx.Commit() back.Suc(c, "操作成功", nil) return } type userPhoneParam struct { UserID uint `json:"userId" validate:"required,numeric"` Phone string `json:"phone" validate:"required,max=20"` } // 更新用户填写的手机或者电话。默认为空 func UpdateUserPhone(c *gin.Context) { var p userPhoneParam err := tools.ParseParams(&p, c) if err != nil { back.Fail(c, err.Error()) return } reg := regexp.MustCompile(`^\d*-?\d*$`) if !reg.MatchString(p.Phone) { back.Fail(c, "请填写正规手机号") return } var u user.Information dbc.DB.Find(&u, p.UserID) if u.ID <= 0 { back.Fail(c, "用户不存在") return } if err = dbc.DB.Model(&u).Update("phone", p.Phone).Error; err != nil { back.Fail(c, "更新失败:"+err.Error()) return } back.Suc(c, "操作成功", nil) return } type userWechatNo struct { UserID uint `json:"userId" validate:"required,numeric"` WechatNo string `json:"wechatNo" validate:"required,max=32"` } // 更新用户填写的微信号。默认为空 func UpdateUserWechatNo(c *gin.Context) { var p userWechatNo err := tools.ParseParams(&p, c) if err != nil { back.Fail(c, err.Error()) return } var u user.Information dbc.DB.Find(&u, p.UserID) if u.ID <= 0 { back.Fail(c, "用户不存在") return } if err = dbc.DB.Model(&u).Update("wechat_no", p.WechatNo).Error; err != nil { back.Fail(c, "更新失败:"+err.Error()) return } back.Suc(c, "操作成功", nil) return } type UserDestroyPem struct { UserId uint `json:"user_id"` } //写一个注销的方法 func UserDestroy(c *gin.Context) { id, err := strconv.Atoi(c.Request.Header.Get("X-Recook-ID")) //根据id获取userid var auth user.Login dbc.DB.First(&auth, "id=?", id) var p UserDestroyPem err = tools.ParseParams(&p, c) if err != nil { back.Fail(c, err.Error()) return } if p.UserId <= 0 { back.Fail(c, "参数有误!") return } if p.UserId != auth.UserID { back.Fail(c, "参数有误!") return } var userInfo user.Information dbc.DB.First(&userInfo, p.UserId) if err = dbc.DB.Model(&userInfo).Updates(user.Information{ Phone: "2" + userInfo.Phone, Mobile: "2" + userInfo.Mobile, WxUnionId: "--", }).Error; err != nil { back.Fail(c, "更新失败:"+err.Error()) return } back.Suc(c, "操作成功", nil) return }