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

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
}