Ver código fonte

update

master
shenjiachi 5 dias atrás
pai
commit
c11464788f
2 arquivos alterados com 171 adições e 176 exclusões
  1. +137
    -148
      app/hdl/member_center/hdl_user_management.go
  2. +34
    -28
      app/md/institutional_management/member_center/md_user_management.go

+ 137
- 148
app/hdl/member_center/hdl_user_management.go Ver arquivo

@@ -8,13 +8,14 @@ import (
"applet/app/utils"
"code.fnuoos.com/EggPlanet/egg_models.git/src/implement"
"code.fnuoos.com/EggPlanet/egg_models.git/src/model"
"errors"
"fmt"
"github.com/gin-gonic/gin"
"strings"
)

// UserManagementGetUserList
// @Summary 制度中心-会员中心-用户信息管理(获取)
// @Summary 制度中心-会员中心-用户管理-用户信息管理(获取)
// @Tags 会员中心
// @Description 用户信息管理(获取)
// @Accept json
@@ -85,7 +86,7 @@ func UserManagementGetUserList(c *gin.Context) {
Nickname: user.Nickname,
Phone: user.Phone,
IsRealName: user.IsRealName,
Level: levelsMap[user.Level],
LevelName: levelsMap[user.Level],
InviteCode: user.SystemInviteCode,
ParentID: user.ParentUid,
ParentInviteCode: user.ParentSystemInviteCode,
@@ -109,7 +110,7 @@ func UserManagementGetUserList(c *gin.Context) {
}

// UserManagementUpdateUserInfo
// @Summary 制度中心-会员中心-用户信息管理(更新)
// @Summary 制度中心-会员中心-用户管理-用户信息管理(更新)
// @Tags 会员中心
// @Description 用户信息管理(更新)
// @Accept json
@@ -125,67 +126,92 @@ func UserManagementUpdateUserInfo(c *gin.Context) {
e.OutErr(c, e.ERR_INVALID_ARGS, err.Error())
return
}

session := db.Db.NewSession()
defer session.Close()
session.Begin()
userDb := implement.NewUserDb(db.Db)

var affected int64
var err1 error
forceColumns := make([]string, 0)
user := model.User{
Id: req.UID,
Id: req.UID,
Phone: req.Phone,
UnionId: req.UnionId,
Nickname: req.Nickname,
Avatar: req.Avatar,
LastLoginIp: req.LastLoginIp,
Memo: req.Memo,
}
if req.Memo != "" {
user.Memo = req.Memo
forceColumns = append(forceColumns, "memo")
if req.Level != "" {
user.Level = utils.StrToInt(req.Level)
}
if req.Disable != false {
user.State = 2
forceColumns = append(forceColumns, "state")
if req.State != "" {
user.State = utils.StrToInt(req.State)
}
if req.LastLoginIp != "" {
user.LastLoginIp = req.LastLoginIp
forceColumns = append(forceColumns, "last_login_ip")
if req.Sex != "" {
user.Sex = utils.StrToInt(req.Sex)
}
if req.Avatar != "" {
user.Avatar = req.Avatar
forceColumns = append(forceColumns, "avatar")
if req.ParentUid != "" {
user.ParentUid = utils.StrToInt64(req.ParentUid)
} else {
user.ParentUid = 0
}
if len(forceColumns) > 0 {
affected, err1 = userDb.UserUpdate(req.UID, &user)
if err1 != nil {
e.OutErr(c, e.ERR_DB_ORM, err1.Error())
return
}

forceColumns = []string{"sex", "parent_uid"}
affected, err1 = userDb.UserUpdateBySession(session, req.UID, &user, forceColumns...)
if err1 != nil {
session.Rollback()
e.OutErr(c, e.ERR_DB_ORM, err1.Error())
return
}

relateDb := implement.NewUserRelateDb(db.Db)
relateForceColumns := []string{"sex", "parent_uid"}
relate := &model.UserRelate{
ParentUid: user.ParentUid,
}
affected, err1 = relateDb.UpdateUserRelateBySession(session, req.UID, relate, relateForceColumns...)
if err1 != nil {
session.Rollback()
e.OutErr(c, e.ERR_DB_ORM, err1.Error())
return
}

var err2 error
if req.Tag != 0 {
if req.Tag != "" {
record := model.UserTagRecords{
TagId: req.Tag,
TagId: utils.StrToInt(req.Tag),
}
recordsDb := implement.NewUserTagRecordsDb(db.Db)
affected, err2 = recordsDb.UserTagRecordsUpdate(req.UID, &record, "tag_id")
affected, err2 = recordsDb.UserTagRecordsUpdateBySession(session, req.UID, &record, "tag_id")
if err2 != nil {
session.Rollback()
e.OutErr(c, e.ERR_DB_ORM, err2.Error())
return
}

}
err3 := session.Commit()
if err3 != nil {
session.Rollback()
e.OutErr(c, e.ERR_DB_ORM, err3.Error())
return
}

e.OutSuc(c, affected, nil)
}

// UserManagementGetOneBasic
// @Summary 制度中心-会员中心-会员明细概况(获取)
// @Summary 制度中心-会员中心-用户管理-会员明细概况(获取)
// @Tags 会员中心
// @Description 会员明细概况(获取)
// @Accept json
// @Produce json
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Param uid query int true "用户 ID"
// @Param uid query string true "用户 ID"
// @Success 200 {object} md.UserManagementGetOneBasicResp "会员明细概况具体数据"
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/memberCenter/userManagement/getOneBasicInfo [get]
// @Router /api/memberCenter/userManagement/userData [get]
func UserManagementGetOneBasic(c *gin.Context) {
uid := c.Query("uid")
userDb := implement.NewUserDb(db.Db)
@@ -232,24 +258,7 @@ func UserManagementGetOneBasic(c *gin.Context) {
tagsMap[tag.Id] = tag.TagName
}

//3. 查询货币列表
coinDb := implement.NewVirtualCoinDb(db.Db)
coins, err3 := coinDb.VirtualCoinFindAll()
if err3 != nil {
e.OutErr(c, e.ERR_DB_ORM, err3.Error())
return
}
coinsList := make([]map[string]interface{}, 0)
coinsMap := make(map[int]string)
for _, coin := range coins {
coinsList = append(coinsList, map[string]interface{}{
"id": coin.Id,
"name": coin.Name,
})
coinsMap[coin.Id] = coin.Name
}

//4. 查询父用户信息
//3. 查询父用户信息
parent, err := userDb.UserGetOneByParams(map[string]interface{}{
"key": "id",
"value": user.ParentUid,
@@ -259,87 +268,60 @@ func UserManagementGetOneBasic(c *gin.Context) {
return
}

//5. 查询用户标签
//4. 查询用户标签
recordsDb := implement.NewUserTagRecordsDb(db.Db)
userTagRecord, err := recordsDb.UserTagRecordsGetOneByParams(map[string]interface{}{
"key": "uid",
"value": uid,
})
if err != nil {
return
}

//6. 查询用户虚拟钱包
amountDb := implement.NewUserVirtualAmountDb(db.Db)
virtualWallets, err := amountDb.GetUserVirtualAllWallets(utils.AnyToInt64(uid))
if err != nil {
e.OutErr(c, e.ERR_DB_ORM, err.Error())
return
}
virtualAmountList := make([]md.VirtualAmountInfoNode, 0)
for _, virtualWallet := range *virtualWallets {
virtualAmountList = append(virtualAmountList, md.VirtualAmountInfoNode{
CoinName: coinsMap[virtualWallet.CoinId],
Amount: virtualWallet.Amount,
})
}

//7. 查询用户钱包余额
userWalletDb := implement.NewUserWalletDb(db.Db)
wallet, err := userWalletDb.GetUserVirtualWallet(utils.StrToInt64(uid))
if err != nil {
e.OutErr(c, e.ERR_DB_ORM, err.Error())
return
}

resp := md.UserManagementGetOneBasicResp{
TagsList: tagsList,
LevelsList: levelsList,
CoinsList: coinsList,
VirtualAmountInfo: virtualAmountList,
TagsList: tagsList,
LevelsList: levelsList,
BasicInfo: md.BasicInfoNode{
Avatar: user.Avatar,
Sex: user.Sex,
Nickname: user.Nickname,
TagID: userTagRecord.TagId,
Phone: user.Phone,
UnionId: user.UnionId,
Password: user.Password,
Passcode: user.Passcode,
State: user.State,
Memo: user.Memo,
ParentUid: parent.Id,
ParentName: parent.Nickname,
ParentPhone: parent.Phone,
SystemInviteCode: user.SystemInviteCode,
CustomInviteCode: user.CustomInviteCode,
Level: levelsMap[user.Level],
},
WalletInfo: md.WalletNode{
Amount: wallet.Amount,
Avatar: user.Avatar,
Sex: user.Sex,
Nickname: user.Nickname,
LevelName: levelsMap[user.Level],
Phone: user.Phone,
UnionId: user.UnionId,
Password: user.Password,
State: user.State,
Memo: user.Memo,
},
OtherInfo: md.OtherNode{
LastLoginIp: user.LastLoginIp,
LastLoginAt: user.UpdateAt,
CreateAt: user.CreateAt,
RegisterType: user.RegisterType,
LastLoginIp: user.LastLoginIp,
LastLoginAt: user.UpdateAt,
CreateAt: user.CreateAt,
},
}
if userTagRecord != nil {
resp.BasicInfo.TagName = tagsMap[userTagRecord.TagId]
}
if parent != nil {
resp.BasicInfo.ParentUid = parent.Id
resp.BasicInfo.ParentName = parent.Nickname
resp.BasicInfo.ParentPhone = parent.Phone
}

e.OutSuc(c, resp, nil)
}

// UserManagementGetFans
// @Summary 制度中心-会员中心-会员明细粉丝情况(获取)
// @Summary 制度中心-会员中心-用户管理-会员明细粉丝情况(获取)
// @Tags 会员中心
// @Description 会员明细粉丝情况(获取)
// @Accept json
// @Produce json
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Param uid query int true "用户 ID"
// @Param type query int true "粉丝类型(1.全部 2.直推 3.二代 4.二代以后)"
// @Param limit query int true "每页大小"
// @Param page query int true "页数"
// @Param uid query string true "用户 ID"
// @Param type query string true "粉丝类型(1.全部 2.直推 3.二代 4.二代以后)"
// @Param limit query string true "每页大小"
// @Param page query string true "页数"
// @Success 200 {object} md.UserManagementGetFansResp "具体数据"
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/memberCenter/userManagement/getFans [get]
@@ -387,7 +369,7 @@ func UserManagementGetFans(c *gin.Context) {
levelTotalMap[levelTotal.Uid] = levelTotal.LevelTotal
}

//3. 查询可现余额
//3. 查询可现余额
walletDb := implement.NewUserWalletDb(db.Db)
wallets, err := walletDb.FindUserWalletByParams(map[string]interface{}{
"key": uid,
@@ -403,19 +385,21 @@ func UserManagementGetFans(c *gin.Context) {
}

//4. 查询累计收益
userIDStrs := make([]string, len(*relates))
for i, id := range userIDs {
userIDStrs[i] = utils.Int64ToStr(id)
}
sql := "SELECT SUM(amount) as total, uid FORM `user_wallet_flow` WHERE uid in (%s) AND direction = 1 Group BY uid"
results, err := db.QueryNativeString(db.Db, fmt.Sprintf(sql, strings.Join(userIDStrs, ",")))
if err != nil {
e.OutErr(c, e.ERR_DB_ORM, err.Error())
return
}
var incomeMap = map[int64]string{}
for _, res := range results {
incomeMap[utils.StrToInt64(res["uid"])] = res["total"]
if len(*relates) > 0 {
userIDStrs := make([]string, len(*relates))
for i, id := range userIDs {
userIDStrs[i] = utils.Int64ToStr(id)
}
sql := "SELECT SUM(amount) as total, uid FROM `user_wallet_flow` WHERE uid in (%s) AND direction = 1 Group BY uid"
results, err := db.QueryNativeString(db.Db, fmt.Sprintf(sql, strings.Join(userIDStrs, ",")))
if err != nil {
e.OutErr(c, e.ERR_DB_ORM, err.Error())
return
}
for _, res := range results {
incomeMap[utils.StrToInt64(res["uid"])] = res["total"]
}
}

//5. 查询用户信息
@@ -432,13 +416,16 @@ func UserManagementGetFans(c *gin.Context) {
list := make([]md.FansNode, len(users))
for i, user := range users {
list[i] = md.FansNode{
ID: user.Id,
Nickname: user.Nickname,
Phone: user.Phone,
LevelTotal: levelTotalMap[user.Id],
Amount: walletMap[user.Id],
TotalIncome: incomeMap[user.Id],
RegisterAt: user.CreateAt,
ID: user.Id,
Nickname: user.Nickname,
Phone: user.Phone,
LevelTotal: levelTotalMap[user.Id],
Amount: walletMap[user.Id],
RegisterAt: user.CreateAt,
}
val, ok := incomeMap[user.Id]
if ok {
list[i].TotalIncome = val
}
}

@@ -455,22 +442,22 @@ func UserManagementGetFans(c *gin.Context) {
}

// UserManagementGetBalanceDetail
// @Summary 制度中心-会员中心-会员明细余额(获取)
// @Summary 制度中心-会员中心-用户管理-会员明细(余额获取)
// @Tags 会员中心
// @Description 会员明细余额(获取)
// @Description 会员明细(余额获取)
// @Accept json
// @Produce json
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Param uid query int true "用户 ID"
// @Param limit query int true "每页大小"
// @Param page query int true "页数"
// @Param uid query string true "用户 ID"
// @Param limit query string true "每页大小"
// @Param page query string true "页数"
// @Success 200 {object} md.UserManagementGetBalanceDetailResp "具体数据"
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/memberCenter/userManagement/balanceDetail [get]
func UserManagementGetBalanceDetail(c *gin.Context) {
uid := c.Query("uid")
page := c.Query("page")
limit := c.Query("limit")
page := c.DefaultQuery("page", "1")
limit := c.DefaultQuery("limit", "10")

walletFlowDb := implement.NewUserWalletFlowDb(db.Db)
walletFlows, total, err := walletFlowDb.UserWalletFlowFindByParams(map[string]interface{}{
@@ -482,16 +469,6 @@ func UserManagementGetBalanceDetail(c *gin.Context) {
return
}

userDb := implement.NewUserDb(db.Db)
user, err := userDb.UserGetOneByParams(map[string]interface{}{
"key": "uid",
"value": uid,
})
if err != nil {
e.OutErr(c, e.ERR_DB_ORM, err.Error())
return
}

kindMap := map[int]string{
1: "管理员操作增加余额",
2: "管理员操作扣除余额",
@@ -503,17 +480,12 @@ func UserManagementGetBalanceDetail(c *gin.Context) {
for i, flow := range *walletFlows {
list[i] = md.BalanceDetailNode{
ID: flow.Id,
Uid: user.Id,
Nickname: user.Nickname,
Phone: user.Phone,
Amount: flow.Amount,
AfterAmount: flow.AfterAmount,
Kind: kindMap[flow.Kind],
OrdID: flow.OrdId,
CreateAt: flow.CreateAt,
}
}
// todo增加总数、支出总数

resp := md.UserManagementGetBalanceDetailResp{
List: list,
@@ -526,10 +498,23 @@ func UserManagementGetBalanceDetail(c *gin.Context) {
e.OutSuc(c, resp, nil)
}

// UserManagementGetVirtualCoinDetail todo 补充s wag 注释
// UserManagementGetVirtualCoinDetail
// @Summary 制度中心-会员中心-用户管理-会员明细(积分明细获取)
// @Tags 会员中心
// @Description 会员明细(积分明细获取)
// @Accept json
// @Produce json
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Param uid query string true "用户 ID"
// @Param coinId query string true "货币 ID"
// @Param limit query string true "每页大小"
// @Param page query string true "页数"
// @Success 200 {object} md.UserManagementGetVirtualCoinDetailResp "具体数据"
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/memberCenter/userManagement/getVirtualCoinDetail [get]
func UserManagementGetVirtualCoinDetail(c *gin.Context) {
page := c.Query("page")
limit := c.Query("limit")
page := c.DefaultQuery("page", "1")
limit := c.DefaultQuery("limit", "10")
uid := c.Query("uid")
coinID := c.Query("coinId")
coinDb := implement.NewVirtualCoinDb(db.Db)
@@ -538,6 +523,10 @@ func UserManagementGetVirtualCoinDetail(c *gin.Context) {
e.OutErr(c, e.ERR_DB_ORM, err.Error())
return
}
if coins == nil {
e.OutErr(c, e.ERR_NO_DATA, errors.New("未初始化货币"))
return
}

coinsList := make([]map[string]interface{}, len(coins))
coinsMap := map[int]string{}


+ 34
- 28
app/md/institutional_management/member_center/md_user_management.go Ver arquivo

@@ -2,7 +2,6 @@ package md

import (
"code.fnuoos.com/EggPlanet/egg_models.git/src/model"
"time"
)

type UserManagementGetUserListReq struct {
@@ -37,19 +36,19 @@ type Paginate struct {
}

type UserManagementGetUserListNode struct {
ID int64 `json:"id"` // 会员 ID
Tag string `json:"tag_name"` // 会员标签
Avatar string `json:"avatar"` // 头像
Nickname string `json:"nickname"` // 昵称
Phone string `json:"phone"` // 手机号
IsRealName int `json:"is_real_name"` // 是否实名 0.未实名,1.已实名
Level string `json:"level_name"` // 会员等级
InviteCode string `json:"invite_code" example:"会员邀请码"`
ParentID int64 `json:"parent_id"` // 推荐人 ID
ParentInviteCode string `json:"parent_invite_code" example:"推荐人邀请码"`
ParentPhone string `json:"parent_phone" example:"推荐人手机号"`
RegisterTime time.Time `json:"register_time"` // 注册时间
Memo string `json:"memo"` // 备注
ID int64 `json:"id"` // 会员 ID
Tag string `json:"tag_name"` // 会员标签
Avatar string `json:"avatar"` // 头像
Nickname string `json:"nickname"` // 昵称
Phone string `json:"phone"` // 手机号
IsRealName int `json:"is_real_name"` // 是否实名 0.未实名,1.已实名
LevelName string `json:"level_name"` // 会员等级
InviteCode string `json:"invite_code" example:"会员邀请码"`
ParentID int64 `json:"parent_id"` // 推荐人 ID
ParentInviteCode string `json:"parent_invite_code" example:"推荐人邀请码"`
ParentPhone string `json:"parent_phone" example:"推荐人手机号"`
RegisterTime string `json:"register_time"` // 注册时间
Memo string `json:"memo"` // 备注
model.User
}

@@ -77,16 +76,23 @@ type UserManagementUpdateUserInfoReq struct {
UID int64 `json:"uid,required"`
Memo string `json:"memo" example:"备注"`
Disable bool `json:"disable"` // 是否禁用用户
Tag int `json:"tag"` // 用户标签 ID
Tag string `json:"tag"` // 用户标签 ID
LastLoginIp string `json:"last_login_ip"` // 用户最后登录 IP
Avatar string `json:"avatar"` // 头像
Phone string `json:"phone"` // 手机号
UnionId string `json:"union_id"` // 微信号
Nickname string `json:"nickname"` // 用户昵称
Level string `json:"level"` // 用户等级 ID
State string `json:"state"` // 用户状态 1正常,2冻结
Sex string `json:"sex"` // 用户性别 性别(0:未知 1:男 2:女)
ParentUid string `json:"parent_uid"` // 用户父级 ID
}

type BasicInfoNode struct {
Avatar string `json:"avatar"` // 头像
Sex int `json:"sex"` // 性别
Nickname string `json:"nickname"` // 会员名称
TagID int `json:"tag_id"` // 标签 ID
TagName string `json:"tag_name"` // 标签名称
Phone string `json:"phone"` // 手机号
UnionId string `json:"union_id"` // 微信号
Password string `json:"password"` // 登录密码
@@ -98,14 +104,14 @@ type BasicInfoNode struct {
ParentPhone string `json:"parent_phone"` // 推荐人手机号
SystemInviteCode string `json:"system_invite_code"` // 系统邀请码
CustomInviteCode string `json:"custom_invite_code"` // 自定义邀请码
Level string `json:"level"` // 等级名称
LevelName string `json:"level_name"` // 等级名称
}

type OtherNode struct {
LastLoginIp string `json:"last_login_ip" ` // 最后登录 IP
LastLoginAt time.Time `json:"last_login_at" ` // 最近登录时间
CreateAt time.Time `json:"create_at" ` // 注册时间
RegisterType int `json:"register_at" ` // 注册类型(0.未知, 1.免验证码手机号注册,2.微信授权)
LastLoginIp string `json:"last_login_ip" ` // 最后登录 IP
LastLoginAt string `json:"last_login_at" ` // 最近登录时间
CreateAt string `json:"create_at" ` // 注册时间
RegisterType int `json:"register_at" ` // 注册类型(0.未知, 1.免验证码手机号注册,2.微信授权)
}

type WalletNode struct {
@@ -128,13 +134,13 @@ type UserManagementGetOneBasicResp struct {
}

type FansNode struct {
ID int64 `json:"id"` // 用户ID
Nickname string `json:"nickname" example:"用户昵称"`
Phone string `json:"phone" example:"手机号"`
LevelTotal int `json:"level_total"` // 所属代数
Amount string `json:"amount"` // 可提现余额
TotalIncome string `json:"total_income"` // 累计收益
RegisterAt time.Time `json:"register_at"` // 注册时间
ID int64 `json:"id"` // 用户ID
Nickname string `json:"nickname" example:"用户昵称"`
Phone string `json:"phone" example:"手机号"`
LevelTotal int `json:"level_total"` // 所属代数
Amount string `json:"amount"` // 可提现余额
TotalIncome string `json:"total_income"` // 累计收益
RegisterAt string `json:"register_at"` // 注册时间
}

type UserManagementGetFansResp struct {


Carregando…
Cancelar
Salvar