408 lines
17 KiB
Go
408 lines
17 KiB
Go
package controllers
|
||
|
||
import (
|
||
"fmt"
|
||
|
||
"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得到的认证TOKEN(mobileVerifyCode与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 "是否是默认(0:否,1:是)"
|
||
// @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
|
||
})
|
||
}
|
||
|
||
type UserInfoWithWeixin struct {
|
||
*weixinapi.MiniUserInfo
|
||
IsExist bool `json:"isExist"`
|
||
}
|
||
|
||
// @Title 根据小程序jsCode查询用户信息
|
||
// @Description 根据小程序jsCode查询用户信息
|
||
// @Param token header string false "认证token"
|
||
// @Param data query string true "加密数据"
|
||
// @Param iv query string true "iv"
|
||
// @Param jsCode query string false "小程序jsCode"
|
||
// @Success 200 {object} controllers.CallResult
|
||
// @Failure 200 {object} controllers.CallResult
|
||
// @router /GetUserByMiniInfo [get]
|
||
func (c *User2Controller) GetUserByMiniInfo() {
|
||
c.callGetUserByMiniInfo(func(params *tUser2GetUserByMiniInfoParams) (retVal interface{}, errCode string, err error) {
|
||
authInfo := &auth2.AuthInfo{}
|
||
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 {
|
||
fmt.Println("1111", utils.Format4Output(userInfo, false))
|
||
var result *UserInfoWithWeixin
|
||
if err = utils.UnmarshalUseNumber(utils.MustMarshal(userInfo), &result); err == nil {
|
||
if userInfo.PhoneNumber != "" {
|
||
if user, err := dao.GetUserByID(dao.GetDB(), "mobile", userInfo.PhoneNumber); err == nil {
|
||
if user != nil {
|
||
result.IsExist = true
|
||
} else {
|
||
result.IsExist = false
|
||
}
|
||
fmt.Println("22222", utils.Format4Output(result, false))
|
||
retVal = result
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
fmt.Println("33333", utils.Format4Output(retVal, false))
|
||
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
|
||
})
|
||
}
|