Files
jx-callback/controllers/user2_controller.go
2020-11-13 09:53:21 +08:00

361 lines
15 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package controllers
import (
"git.rosy.net.cn/baseapi/platformapi/weixinapi"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/auth2"
"git.rosy.net.cn/jx-callback/business/auth2/authprovider/weixin"
"git.rosy.net.cn/jx-callback/business/jxstore/cms"
"git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/business/jxutils/jsonerr"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/model/dao"
"git.rosy.net.cn/jx-callback/globals"
"github.com/astaxie/beego"
)
type User2Controller struct {
beego.Controller
}
// @Title 用户注册
// @Description 用户注册
// @Param token header string false "管理员token"
// @Param payload formData string true "json数据User对象(手机号必填)"
// @Param mobileVerifyCode formData string false "手机验证码通过auth2.SendVerifyCode获得mobileVerifyCode与authToken不能同时为空"
// @Param authToken formData string false "之前通过login得到的认证TOKENmobileVerifyCode与authToken不能同时为空"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /RegisterUser [post]
func (c *User2Controller) RegisterUser() {
c.callRegisterUser(func(params *tUser2RegisterUserParams) (retVal interface{}, errCode string, err error) {
var (
user model.User
inAuthInfo, manTokenInfo *auth2.AuthInfo
)
if params.AuthToken != "" {
inAuthInfo, err = auth2.GetTokenInfo(params.AuthToken)
} else if params.Token != "" {
manTokenInfo, err = auth2.GetTokenInfo(params.Token)
}
if err == nil {
if err = jxutils.Strings2Objs(params.Payload, &user); err == nil {
user.Type = 0
retVal, err = cms.RegisterUserWithMobile(params.Ctx, &user, params.MobileVerifyCode, inAuthInfo, manTokenInfo)
}
}
return retVal, errCode, err
})
}
// @Title 得到用户已经成功绑定的认证信息
// @Description 得到用户已经成功绑定的认证信息
// @Param token header string true "认证token"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetBindAuthInfo [get]
func (c *User2Controller) GetBindAuthInfo() {
c.callGetBindAuthInfo(func(params *tUser2GetBindAuthInfoParams) (retVal interface{}, errCode string, err error) {
retVal, err = cms.GetUserBindAuthInfo(params.Ctx)
return retVal, "", err
})
}
// @Title 得到用户列表
// @Description 得到用户列表
// @Param token header string true "认证token"
// @Param userType query int true "用户类型0表示全部"
// @Param keyword query string false "关键字,可以部分匹配"
// @Param userIDs query string false "用户id列表"
// @Param userID2 query string false "用户id2必须全匹配外部唯一标识"
// @Param mobile query string false "用户手机,必须全匹配"
// @Param offset query int false "门店列表起始序号以0开始缺省为0"
// @Param pageSize query int false "门店列表页大小缺省为50-1表示全部"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetUsers [get]
func (c *User2Controller) GetUsers() {
c.callGetUsers(func(params *tUser2GetUsersParams) (retVal interface{}, errCode string, err error) {
var userIDs []string
if err = jxutils.Strings2Objs(params.UserIDs, &userIDs); err == nil {
retVal, err = cms.GetUsers(params.Ctx, params.UserType, params.Keyword, userIDs, params.UserID2, params.Mobile, params.Offset, params.PageSize)
}
return retVal, "", err
})
}
// @Title 得到用户
// @Description 得到用户
// @Param token header string true "认证token"
// @Param userID query string true "用户id"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetUser [get]
func (c *User2Controller) GetUser() {
c.callGetUser(func(params *tUser2GetUserParams) (retVal interface{}, errCode string, err error) {
retVal, err = cms.GetUser(params.Ctx, params.UserID)
return retVal, "", err
})
}
// @Title 用户自己增加配送地址
// @Description 用户自己增加配送地址
// @Param token header string true "认证token"
// @Param consigneeName formData string true "收货人"
// @Param consigneeMobile formData string true "收货人手机"
// @Param address formData string false "地址(区县以下,门牌号以上的地址信息)"
// @Param detailAddress formData string false "门牌号"
// @Param lng formData float64 true "经度"
// @Param lat formData float64 true "纬度"
// @Param tag formData string false "标签"
// @Param remark formData string false "备注"
// @Param isDefault formData int false "是否是默认"
// @Param type formData int false "1为寄件人2为取件人收货人"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /AddMyDeliveryAddress [post]
func (c *User2Controller) AddMyDeliveryAddress() {
c.callAddMyDeliveryAddress(func(params *tUser2AddMyDeliveryAddressParams) (retVal interface{}, errCode string, err error) {
// var address *model.UserDeliveryAddress
// if err = utils.Map2StructByJson(params.MapData, &address, true); err == nil {
// retVal, err = cms.AddMyDeliveryAddress(params.Ctx, address)
// }
address := &model.UserDeliveryAddress{
ConsigneeName: params.ConsigneeName,
ConsigneeMobile: params.ConsigneeMobile,
Address: params.Address,
DetailAddress: params.DetailAddress,
Lng: params.Lng,
Lat: params.Lat,
Tag: params.Tag,
Remark: params.Remark,
IsDefault: int8(params.IsDefault),
Type: params.Type,
}
retVal, err = cms.AddMyDeliveryAddress(params.Ctx, address)
return retVal, "", err
})
}
// @Title 用户自己删除配送地址
// @Description 用户自己删除送地址
// @Param token header string true "认证token"
// @Param id query int true "地址ID"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /DeleteMyDeliveryAddress [delete]
func (c *User2Controller) DeleteMyDeliveryAddress() {
c.callDeleteMyDeliveryAddress(func(params *tUser2DeleteMyDeliveryAddressParams) (retVal interface{}, errCode string, err error) {
err = cms.DeleteMyDeliveryAddress(params.Ctx, params.Id)
return retVal, "", err
})
}
// @Title 用户自己修改配送地址
// @Description 用户自己修改配送地址
// @Param token header string true "认证token"
// @Param id formData int true "地址ID"
// @Param consigneeName formData string false "收货人"
// @Param consigneeMobile formData string false "收货人手机"
// @Param address formData string false "地址(区县以下,门牌号以上的地址信息)"
// @Param detailAddress formData string false "门牌号"
// @Param lng formData float64 false "经度"
// @Param lat formData float64 false "纬度"
// @Param tag formData string false "标签"
// @Param remark formData string false "备注"
// @Param isDefault formData int false "是否是默认01"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /UpdateMyDeliveryAddress [put]
func (c *User2Controller) UpdateMyDeliveryAddress() {
c.callUpdateMyDeliveryAddress(func(params *tUser2UpdateMyDeliveryAddressParams) (retVal interface{}, errCode string, err error) {
err = cms.UpdateMyDeliveryAddress(params.Ctx, params.Id, params.MapData)
return retVal, "", err
})
}
// @Title 用户查询自己的配送地址
// @Description 用户查询自己的配送地址
// @Param token header string true "认证token"
// @Param type query int false "地址类型1是寄件人2是收货人"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /QueryMyDeliveryAddress [get]
func (c *User2Controller) QueryMyDeliveryAddress() {
c.callQueryMyDeliveryAddress(func(params *tUser2QueryMyDeliveryAddressParams) (retVal interface{}, errCode string, err error) {
retVal, err = cms.QueryMyDeliveryAddress(params.Ctx, params.Type)
return retVal, "", err
})
}
// @Title 得到用户指定门店的购物车信息
// @Description 得到用户指定门店的购物车信息
// @Param token header string true "认证token"
// @Param storeIDs query string true "门店ID"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /LoadMyCart [get]
func (c *User2Controller) LoadMyCart() {
c.callLoadMyCart(func(params *tUser2LoadMyCartParams) (retVal interface{}, errCode string, err error) {
_, userID := params.Ctx.GetMobileAndUserID()
var storeIDs []int
if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDs); err == nil {
retVal, err = cms.LoadUserCart(params.Ctx, userID, storeIDs)
}
return retVal, "", err
})
}
// @Title 存储用户指定门店的购物车信息
// @Description 存储用户指定门店的购物车信息
// @Param token header string true "认证token"
// @Param storeID formData int true "门店ID"
// @Param payload formData string false "完整的购物车商品列表"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /SaveMyCart [post]
func (c *User2Controller) SaveMyCart() {
c.callSaveMyCart(func(params *tUser2SaveMyCartParams) (retVal interface{}, errCode string, err error) {
var cartItems []*model.UserCartItem
_, userID := params.Ctx.GetMobileAndUserID()
if err = jxutils.Strings2Objs(params.Payload, &cartItems); err == nil {
err = cms.SaveUserCart(params.Ctx, userID, params.StoreID, cartItems)
}
return retVal, "", err
})
}
// @Title 得到用户自己的信息
// @Description 得到用户自己的信息
// @Param token header string true "认证token"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetSelfInfo [get]
func (c *User2Controller) GetSelfInfo() {
c.callGetSelfInfo(func(params *tUser2GetSelfInfoParams) (retVal interface{}, errCode string, err error) {
retVal, err = cms.GetSelfInfo(params.Ctx)
return retVal, "", err
})
}
// @Title 根据小程序jsCode修改用户信息
// @Description 根据小程序jsCode修改用户信息
// @Param token header string true "认证token"
// @Param data formData string true "加密数据"
// @Param iv formData string true "iv"
// @Param jsCode formData string false "小程序jsCode"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /UpdateUserByMiniInfo [post]
func (c *User2Controller) UpdateUserByMiniInfo() {
c.callUpdateUserByMiniInfo(func(params *tUser2UpdateUserByMiniInfoParams) (retVal interface{}, errCode string, err error) {
authInfo, err := params.Ctx.GetV2AuthInfo()
if err == nil {
decryptedDataBase64, err2 := weixin.AutherObjMini.DecryptData(authInfo, GetComposedCode(&c.Controller, params.JsCode), params.Data, params.Iv)
if err = err2; err == nil {
var userInfo *weixinapi.MiniUserInfo
if err = utils.UnmarshalUseNumber([]byte(decryptedDataBase64), &userInfo); err == nil {
retVal = userInfo
if user := params.Ctx.GetFullUser(); user != nil {
if userInfo.AvatarURL != "" {
user.Avatar = userInfo.AvatarURL
}
if userInfo.PurePhoneNumber != "" {
user.Mobile = utils.String2Pointer(userInfo.PurePhoneNumber)
}
if userInfo.NickName != "" {
user.Name = userInfo.NickName
}
globals.SugarLogger.Debugf("UpdateUserByMiniInfo", utils.Format4Output(userInfo, false))
_, err = dao.UpdateEntity(dao.GetDB(), user)
if err != nil && dao.IsDuplicateError(err) {
if mobileAuth, err2 := auth2.LoginInternal(params.Ctx.Context, auth2.AuthTypeMobile, userInfo.PurePhoneNumber, auth2.UserIDMobile, auth2.InternalAuthSecret); err2 == nil {
err = jsonerr.New(mobileAuth, model.ErrCodeJsonUserAlreadyExist)
}
} else if err == nil && userInfo.PurePhoneNumber != "" {
if tokenInfo, err := auth2.GetTokenInfo(params.Token); err == nil {
tokenInfo.Mobile = userInfo.PurePhoneNumber
auth2.SetUserInfo(params.Token, tokenInfo, auth2.DefTokenDuration)
}
}
}
}
}
}
return retVal, "", err
})
}
// @Title 会员充值
// @Description 会员充值
// @Param token header string true "认证token"
// @Param memberID formData int true "会员ID"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /InvestMember [post]
func (c *User2Controller) InvestMember() {
c.callInvestMember(func(params *tUser2InvestMemberParams) (retVal interface{}, errCode string, err error) {
errCode, err = cms.InvestMember(params.Ctx, params.MemberID)
return retVal, errCode, err
})
}
// @Title 修改用户信息
// @Description 修改用户信息
// @Param token header string true "认证token"
// @Param payload formData string true "user payload"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /UpdateUser [put]
func (c *User2Controller) UpdateUser() {
c.callUpdateUser(func(params *tUser2UpdateUserParams) (retVal interface{}, errCode string, err error) {
payload := make(map[string]interface{})
if err = jxutils.Strings2Objs(params.Payload, &payload); err == nil {
err = cms.UpdateUser(params.Ctx, payload)
}
return retVal, "", err
})
}
// @Title 获取用户管理城市
// @Description 获取用户管理城市
// @Param token header string true "认证token"
// @Param userID query string false "userID"
// @Param cityCode query int false "cityCode"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetUserCityManager [get]
func (c *User2Controller) GetUserCityManager() {
c.callGetUserCityManager(func(params *tUser2GetUserCityManagerParams) (retVal interface{}, errCode string, err error) {
return retVal, "", err
})
}
// @Title 增加用户管理城市
// @Description 增加用户管理城市
// @Param token header string true "认证token"
// @Param userID formData string true "userID"
// @Param cityCode formData int true "cityCode"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /AddUserCityManager [post]
func (c *User2Controller) AddUserCityManager() {
c.callAddUserCityManager(func(params *tUser2AddUserCityManagerParams) (retVal interface{}, errCode string, err error) {
return retVal, "", err
})
}
// @Title 删除用户管理城市
// @Description 删除用户管理城市
// @Param token header string true "认证token"
// @Param userID formData string true "userID"
// @Param cityCode formData int true "cityCode"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /DeleteUserCityManager [post]
func (c *User2Controller) DeleteUserCityManager() {
c.callDeleteUserCityManager(func(params *tUser2DeleteUserCityManagerParams) (retVal interface{}, errCode string, err error) {
return retVal, "", err
})
}