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得到的认证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 }) } // @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 }) }