You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
355 lines
7.5 KiB
355 lines
7.5 KiB
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
|
|
}
|