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.

1105 lines
46 KiB

package user
import (
"recook/internal/model/order"
"recook/internal/v2/model/recook/user"
"git.oa00.com/go/mysql"
"github.com/shopspring/decimal"
)
var IncomeLogic = &incomeLogic{}
type incomeLogic struct {
}
type MyIncome struct {
MonthExpect decimal.Decimal `json:"monthExpect"`
DayExpect decimal.Decimal `json:"dayExpect"`
LastMonthExpect decimal.Decimal `json:"lastMonthExpect"`
LastMonthIncome decimal.Decimal `json:"lastMonthIncome"`
}
type ProfitItem struct {
Count uint
Amount decimal.Decimal
}
type Profit struct {
ECount1 uint
EAmount1 decimal.Decimal
ECount2 uint
EAmount2 decimal.Decimal
ECount3 uint
EAmount3 decimal.Decimal
ECount4 uint
EAmount4 decimal.Decimal
Count1 uint
Amount1 decimal.Decimal
Count2 uint
Amount2 decimal.Decimal
Count3 uint
Amount3 decimal.Decimal
Count4 uint
Amount4 decimal.Decimal
Total decimal.Decimal
ETotal decimal.Decimal
}
type Person struct {
HeadImgUrl string
Nickname string
Phone string
WechatNo string
RemarkName string
Count int
Flag int
Amount decimal.Decimal
}
func (i *incomeLogic) Team(userID uint) (data []Person) {
if userID == 0 {
return
}
var self user.RecookUserInfoModel
mysql.Db.First(&self, "id = ?", userID)
if self.Level != 2{
return
}
var u1 []user.RecookUserInfoModel
mysql.Db.Preload("OrderList", "status = 4").Where("parent_id = ?", userID).Find(&u1)
for _, v := range u1 {
amount := decimal.Zero
for _, j := range v.OrderList {
amount = amount.Add(j.ActualTotalAmount)
}
data = append(data, Person{
HeadImgUrl: v.HeadImgUrl,
Nickname: v.Nickname,
Phone: v.Mobile,
WechatNo: v.WechatNo,
RemarkName: v.RemarkName,
Count: len(v.OrderList),
Amount: amount,
})
}
return
}
func (i *incomeLogic) Profit(userID uint) (res Profit) {
var pr []order.Profit
mysql.Db.Find(&pr, "user_id = ? and status <> 1 and base > 0 and income > 0", userID)
for _, v := range pr {
switch v.Status {
case 0:
switch v.Type {
case 1:
res.ECount1 += 1
res.EAmount1 = res.EAmount1.Add(v.Income)
case 2:
res.ECount2 += 1
res.EAmount2 = res.EAmount2.Add(v.Income)
case 3:
res.ECount3 += 1
res.EAmount3 = res.EAmount3.Add(v.Income)
case 4:
res.ECount4 += 1
res.EAmount4 = res.EAmount4.Add(v.Income)
}
res.ETotal = res.ETotal.Add(v.Income)
case 2:
switch v.Type {
case 1:
res.Count1 += 1
res.Amount1 = res.EAmount1.Add(v.Income)
case 2:
res.Count2 += 1
res.Amount2 = res.EAmount2.Add(v.Income)
case 3:
res.Count3 += 1
res.Amount3 = res.EAmount3.Add(v.Income)
case 4:
res.Count4 += 1
res.Amount4 = res.EAmount4.Add(v.Income)
}
res.Total = res.ETotal.Add(v.Income)
}
}
return
}
//
//// @Style 会员收益
////func (i *incomeLogic) Income(userId uint) MyIncome {
//// recookUserInfoModel := &user.RecookUserInfoModel{}
//// userInfo := recookUserInfoModel.FindById(userId)
////
//// recookUserRbacRoleModel := &user.RecookUserRbacRoleModel{}
//// roleInfo := recookUserRbacRoleModel.FindById(userInfo.RoleId)
//// now := time.Now()
//// month, _ := strconv.Atoi(now.Format("200601"))
//// day, _ := strconv.Atoi(now.Format("20060102"))
//// lastMonth, _ := strconv.Atoi(now.AddDate(0, -1, 0).Format("200601"))
//// return MyIncome{
//// MonthExpect: i.GetByMonth(userId, month).Truncate(2),
//// DayExpect: i.GetByDay(userId, day, roleInfo.RoleLevel).Truncate(2),
//// LastMonthExpect: i.GetByMonth(userId, lastMonth).Truncate(2),
//// LastMonthIncome: i.GetMonthIncome(userId, lastMonth).Truncate(2),
//// }
////}
//
//// @Style 获取月份预估收益
////func (i *incomeLogic) GetByMonth(userId uint, date int) decimal.Decimal {
//// recookUserTeamExpectIncomeModel := &user.RecookUserTeamExpectIncomeModel{}
//// expectInfo := recookUserTeamExpectIncomeModel.FindByUserIdAndDate(userId, date)
////
//// recookUserRbacRoleModel := &user.RecookUserRbacRoleModel{}
//// //roleInfo := recookUserRbacRoleModel.FindById(expectInfo.RoleId)
//// switch roleInfo.RoleLevel {
//// case user_role.DiamondLevel:
//// // 钻一团队销售额3% + 钻二团队销售额1% + 钻三团队销售额1%
//// recookUserTreeModel := &user.RecookUserTreeModel{}
////
//// // 钻二
//// twoUserIdsSql := recookUserTreeModel.GetByRootIdAndDepthSql(userId, 1)
//// // 获取所有钻二uid子查询
//// diamondTwoIdsSql := i.getRoleLevelUserIdsSql(user_role.DiamondLevelTwo, twoUserIdsSql)
//// // 统计钻二收益
//// twoSumInfo := recookUserTeamExpectIncomeModel.GetTeamAmoutSum("date = ? and user_id in (?)", date, diamondTwoIdsSql)
////
//// // 钻三
//// threeUserIdsSql := recookUserTreeModel.GetByRootIdAndDepthSql(userId, 2)
//// // 获取所有钻二uid子查询
//// diamondThreeIdsSql := i.getRoleLevelUserIdsSql(user_role.DiamondLevelThree, threeUserIdsSql)
//// // 统计钻二收益
//// threeSumInfo := recookUserTeamExpectIncomeModel.GetTeamAmoutSum("date = ? and user_id in (?)", date, diamondThreeIdsSql)
////
//// return expectInfo.PurchaseAmount.Add(expectInfo.GuideAmount).Add(expectInfo.Amount.Mul(decimal.NewFromFloat32(0.03))).Add(twoSumInfo.Amount.Mul(decimal.NewFromFloat32(0.01))).Add(threeSumInfo.Amount.Mul(decimal.NewFromFloat32(0.01)))
////
//// case user_role.DiamondLevelTwo:
//// // 钻二团队销售额3% + 钻三团队销售额1%
//// recookUserTreeModel := &user.RecookUserTreeModel{}
//// userIdsSql := recookUserTreeModel.GetByRootIdAndDepthSql(userId, 1)
////
//// // 获取所有钻三uid子查询
//// diamondThreeIdsSql := i.getRoleLevelUserIdsSql(user_role.DiamondLevelThree, userIdsSql)
////
//// // 统计钻三收益
//// sumInfo := recookUserTeamExpectIncomeModel.GetTeamAmoutSum("date = ? and user_id in (?)", date, diamondThreeIdsSql)
////
//// return expectInfo.PurchaseAmount.Add(expectInfo.GuideAmount).Add(expectInfo.Amount.Mul(decimal.NewFromFloat32(0.03))).Add(sumInfo.Amount.Mul(decimal.NewFromFloat32(0.01)))
//// case user_role.DiamondLevelThree:
//// // 钻三团队销售额3%
//// return expectInfo.PurchaseAmount.Add(expectInfo.GuideAmount).Add(expectInfo.Amount.Mul(decimal.NewFromFloat32(0.03)))
//// case user_role.GoldLevel:
//// // 白银团队销售额2%
//// return expectInfo.PurchaseAmount.Add(expectInfo.GuideAmount).Add(expectInfo.Amount.Mul(decimal.NewFromFloat32(0.02)))
//// case user_role.SilverLevel:
//// // 白银团队销售额1%
//// return expectInfo.PurchaseAmount.Add(expectInfo.GuideAmount).Add(expectInfo.Amount.Mul(decimal.NewFromFloat32(0.01)))
//// case user_role.MasterLevel:
//// // 店主拥有导购,自购收益
//// return expectInfo.PurchaseAmount.Add(expectInfo.GuideAmount)
//// default:
//// // 其他角色
//// return decimal.Zero
//// }
////}
////
////// @Style 获取日预估收益
////func (i *incomeLogic) GetByDay(userId uint, day, roleLevel int) decimal.Decimal {
//// recookUserDayExpectIncomeModel := &user.RecookUserDayExpectIncomeModel{}
//// expectInfo := recookUserDayExpectIncomeModel.FindByUserIdAndDate(userId, day)
//// switch roleLevel {
//// case user_role.DiamondLevel:
//// // 钻一团队销售额3% + 钻二团队销售额1% + 钻三团队销售额1%
//// recookUserTreeModel := &user.RecookUserTreeModel{}
////
//// // 钻二
//// twoUserIdsSql := recookUserTreeModel.GetByRootIdAndDepthSql(userId, 1)
//// // 获取所有钻二uid子查询
//// diamondTwoIdsSql := i.getRoleLevelUserIdsSql(user_role.DiamondLevelTwo, twoUserIdsSql)
//// // 统计钻二收益
//// twoSumInfo := recookUserDayExpectIncomeModel.GetTeamAmoutSum("day = ? and user_id in (?)", day, diamondTwoIdsSql)
////
//// // 钻三
//// threeUserIdsSql := recookUserTreeModel.GetByRootIdAndDepthSql(userId, 2)
//// // 获取所有钻二uid子查询
//// diamondThreeIdsSql := i.getRoleLevelUserIdsSql(user_role.DiamondLevelThree, threeUserIdsSql)
//// // 统计钻二收益
//// threeSumInfo := recookUserDayExpectIncomeModel.GetTeamAmoutSum("day = ? and user_id in (?)", day, diamondThreeIdsSql)
////
//// return expectInfo.PurchaseAmount.Add(expectInfo.GuideAmount).Add(expectInfo.Amount.Mul(decimal.NewFromFloat32(0.03))).Add(twoSumInfo.Amount.Mul(decimal.NewFromFloat32(0.01))).Add(threeSumInfo.Amount.Mul(decimal.NewFromFloat32(0.01)))
////
//// case user_role.DiamondLevelTwo:
//// // 钻二团队销售额3% + 钻三团队销售额1%
//// recookUserTreeModel := &user.RecookUserTreeModel{}
//// userIdsSql := recookUserTreeModel.GetByRootIdAndDepthSql(userId, 1)
////
//// // 获取所有钻三uid子查询
//// diamondThreeIdsSql := i.getRoleLevelUserIdsSql(user_role.DiamondLevelThree, userIdsSql)
////
//// // 统计钻三收益
//// sumInfo := recookUserDayExpectIncomeModel.GetTeamAmoutSum("day = ? and user_id in (?)", day, diamondThreeIdsSql)
////
//// return expectInfo.PurchaseAmount.Add(expectInfo.GuideAmount).Add(expectInfo.Amount.Mul(decimal.NewFromFloat32(0.03))).Add(sumInfo.Amount.Mul(decimal.NewFromFloat32(0.01)))
//// case user_role.DiamondLevelThree:
//// // 钻三团队销售额3%
//// return expectInfo.PurchaseAmount.Add(expectInfo.GuideAmount).Add(expectInfo.Amount.Mul(decimal.NewFromFloat32(0.03)))
//// case user_role.GoldLevel:
//// // 白银团队销售额2%
//// return expectInfo.PurchaseAmount.Add(expectInfo.GuideAmount).Add(expectInfo.Amount.Mul(decimal.NewFromFloat32(0.02)))
//// case user_role.SilverLevel:
//// // 白银团队销售额1%
//// return expectInfo.PurchaseAmount.Add(expectInfo.GuideAmount).Add(expectInfo.Amount.Mul(decimal.NewFromFloat32(0.01)))
//// case user_role.MasterLevel:
//// // 店主拥有导购,自购收益
//// return expectInfo.PurchaseAmount.Add(expectInfo.GuideAmount)
//// default:
//// // 其他角色
//// return decimal.Zero
//// }
////}
//
//// @Style 获取子查询
//func (i *incomeLogic) getRoleLevelUserIdsSql(roleLevel int, userIdsSql *gorm.SqlExpr) *gorm.SqlExpr {
// recookUserRbacRoleModel := &user.RecookUserRbacRoleModel{}
// recookUserInfoModel := user.RecookUserInfoModel{}
// return recookUserInfoModel.GetDb().Table(recookUserInfoModel.TableName()+" as userInfo").
// Select("userInfo.id").
// Joins(fmt.Sprintf("join %s as userRole on userInfo.role_id = userRole.id", recookUserRbacRoleModel.TableName())).
// Where("userRole.role_level = ? and userInfo.id in (?)", roleLevel, userIdsSql).
// SubQuery()
//}
//
//// @Style 获取月份结算收益
//func (i *incomeLogic) GetMonthIncome(userId uint, date int) decimal.Decimal {
// recookUserTeamIncomeModel := &user.RecookUserTeamIncomeModel{}
// incomeInfo := recookUserTeamIncomeModel.FindByUserIdAndDate(userId, date)
// if incomeInfo.IsSettlement == user.RecookUserTeamIncomeIsSettlementTrue {
// // 团队收益已结算 已结算收益=自购+导购+团队+推案+平台奖励
// return incomeInfo.PurchaseAmount.Add(incomeInfo.GuideAmount).Add(incomeInfo.TeamAmount).Add(incomeInfo.RecommendAmount).Add(incomeInfo.RewardAmount)
// }
// // 团队收益未结算 已结算收益=自购收益+导购收益
// return incomeInfo.PurchaseAmount.Add(incomeInfo.GuideAmount)
//}
//
//type Accumulate struct {
// PurchaseAmount decimal.Decimal `json:"purchaseAmount"`
// GuideAmount decimal.Decimal `json:"guideAmount"`
// TeamAmount decimal.Decimal `json:"teamAmount"`
// RecommendAmount decimal.Decimal `json:"recommendAmount"`
// RewardAmount decimal.Decimal `json:"rewardAmount"`
//}
// @Style 收益累计信息
//func (i *incomeLogic) Accumulate(userId uint) Accumulate {
// recookUserWalletModel := &user.RecookUserWalletModel{}
// userWalletInfo := recookUserWalletModel.FindByUserId(userId)
// return Accumulate{
// PurchaseAmount: userWalletInfo.PurchaseAmount,
// GuideAmount: userWalletInfo.GuideAmount,
// TeamAmount: userWalletInfo.TeamAmount,
// RecommendAmount: userWalletInfo.RecommendAmount,
// RewardAmount: userWalletInfo.RewardAmount,
// }
//}
//
type PurchaseAccumulate struct {
PurchaseAmount decimal.Decimal `json:"purchaseAmount"`
PurchaseSalesVolume decimal.Decimal `json:"purchaseSalesVolume"`
PurchaseCount decimal.Decimal `json:"purchaseCount"`
}
// @Style 累计自购
func (i *incomeLogic) PurchaseAccumulate(userId uint) PurchaseAccumulate {
recookUserWalletModel := &user.RecookUserWalletModel{}
userWalletInfo := recookUserWalletModel.FindByUserId(userId)
return PurchaseAccumulate{
PurchaseAmount: userWalletInfo.PurchaseAmount,
PurchaseCount: userWalletInfo.PurchaseCount,
PurchaseSalesVolume: userWalletInfo.PurchaseSalesVolume,
}
}
type GuideAccumulate struct {
GuideAmount decimal.Decimal `json:"guideAmount"`
GuideCount decimal.Decimal `json:"guideCount"`
GuideSalesVolume decimal.Decimal `json:"guideSalesVolume"`
}
// @Style 累计自购
func (i *incomeLogic) GuideAccumulate(userId uint) GuideAccumulate {
recookUserWalletModel := &user.RecookUserWalletModel{}
userWalletInfo := recookUserWalletModel.FindByUserId(userId)
return GuideAccumulate{
GuideAmount: userWalletInfo.GuideAmount,
GuideCount: userWalletInfo.GuideCount,
GuideSalesVolume: userWalletInfo.GuideSalesVolume,
}
}
//
// @Style 获取一年的月度收益列表
//func (i *incomeLogic) MonthIncome(userId uint, year int) []user.RecookUserTeamIncomeModel {
// recookUserTeamIncomeModel := &user.RecookUserTeamIncomeModel{}
// return recookUserTeamIncomeModel.FindByUserIdYear(userId, year)
//}
// @Style 获取当月的每日收益列表
func (i *incomeLogic) DayIncome(userId uint, month int) []user.RecookUserDayIncomeModel {
recookUserDayIncomeModel := &user.RecookUserDayIncomeModel{}
return recookUserDayIncomeModel.FindByUserIdMonth(userId, month)
}
//
//type TeamIncome struct {
// TeamCount int `json:"teamCount"`
// TeamAmount decimal.Decimal `json:"teamAmount"`
// TeamSalesVolume decimal.Decimal `json:"teamSalesVolume"`
//}
//
////
////// @Style 团队收益
////func (i *incomeLogic) TeamIncome(userId uint) (result TeamIncome) {
//// recookUserWalletModel := &user.RecookUserWalletModel{}
//// userWallet := recookUserWalletModel.FindByUserId(userId)
////
//// recookUserTreeModel := &user.RecookUserTreeModel{}
//// userSqls := recookUserTreeModel.GetByRootIdAndDepthSql(userId, 1)
////
//// recookUserRbacRoleModel := &user.RecookUserRbacRoleModel{}
//// roleSqls := recookUserRbacRoleModel.GetByRoleIdsSql([]uint{
//// user_role.DiamondLevelTwo,
//// user_role.DiamondLevelThree,
//// })
//// recookUserInfoModel := &user.RecookUserInfoModel{}
//// DiamondUsers := recookUserInfoModel.ListCount("id in ? and role_id in ?", userSqls, roleSqls)
////
//// count := recookUserTreeModel.UserCountWhere("root_id in (?)", DiamondUsers)
////
//// userCount := recookUserTreeModel.UserCount(userId)
////
//// result = TeamIncome{
//// TeamAmount: userWallet.TeamAmount,
//// TeamSalesVolume: userWallet.TeamSalesVolume,
//// TeamCount: userCount - count,
//// }
//// return
////}
//
//type RecommendIncome struct {
// RecommendCount int `json:"recommendCount"`
// RecommendAmount decimal.Decimal `json:"recommendAmount"`
// RecommendSalesVolume decimal.Decimal `json:"recommendSalesVolume"`
//}
//
////
////// @Style 推荐收益
////func (i *incomeLogic) RecommendIncome(userId uint) (result RecommendIncome) {
//// recookUserWalletModel := &user.RecookUserWalletModel{}
//// userWallet := recookUserWalletModel.FindByUserId(userId)
////
//// recookUserTreeModel := &user.RecookUserTreeModel{}
//// userSqls := recookUserTreeModel.GetByRootIdAndDepthSql(userId, 1)
////
//// recookUserRbacRoleModel := &user.RecookUserRbacRoleModel{}
//// roleSqls := recookUserRbacRoleModel.GetByRoleIdsSql([]uint{
//// user_role.DiamondLevelTwo,
//// user_role.DiamondLevelThree,
//// })
////
//// recookUserInfoModel := &user.RecookUserInfoModel{}
//// DiamondUsers := recookUserInfoModel.ListCount("id in ? and role_id in ?", userSqls, roleSqls)
////
//// count := recookUserTreeModel.UserCountWhere("root_id in (?)", DiamondUsers)
////
//// rewardUserSqls := recookUserTreeModel.GetByRootIdAndDepthSql(userId, 2)
//// rewardRoleSqls := recookUserRbacRoleModel.GetByRoleIdsSql([]uint{
//// user_role.DiamondLevelThree,
//// })
//// rewardUsers := recookUserInfoModel.ListCount("id in ? and role_id in ?", rewardUserSqls, rewardRoleSqls)
//// rewardCount := recookUserTreeModel.UserCountWhere("root_id in (?)", rewardUsers)
////
//// result = RecommendIncome{
//// RecommendAmount: userWallet.RecommendAmount,
//// RecommendSalesVolume: userWallet.RecommendSalesVolume,
//// RecommendCount: count - rewardCount,
//// }
//// return
////}
//
//type RewardIncome struct {
// RewardCount int `json:"rewardCount"`
// RewardAmount decimal.Decimal `json:"rewardAmount"`
// RewardSalesVolume decimal.Decimal `json:"rewardSalesVolume"`
//}
//
////
////// @Style 平台奖励收益
////func (i *incomeLogic) RewardIncome(userId uint) (result RewardIncome) {
//// recookUserWalletModel := &user.RecookUserWalletModel{}
//// userWallet := recookUserWalletModel.FindByUserId(userId)
////
//// recookUserTreeModel := &user.RecookUserTreeModel{}
//// userSqls := recookUserTreeModel.GetByRootIdAndDepthSql(userId, 2)
////
//// recookUserRbacRoleModel := &user.RecookUserRbacRoleModel{}
//// roleSqls := recookUserRbacRoleModel.GetByRoleIdsSql([]uint{
//// user_role.DiamondLevelThree,
//// })
////
//// recookUserInfoModel := &user.RecookUserInfoModel{}
//// DiamondUsers := recookUserInfoModel.ListCount("id in ? and role_id in ?", userSqls, roleSqls)
////
//// count := recookUserTreeModel.UserCountWhere("root_id in (?)", DiamondUsers)
//// result = RewardIncome{
//// RewardAmount: userWallet.RewardAmount,
//// RewardSalesVolume: userWallet.RewardSalesVolume,
//// RewardCount: count,
//// }
//// return
////}
//
//type UserIncome struct {
// UserId uint `json:"userId"`
// HeadImgUrl string `json:"headImgUrl"`
// Nickname string `json:"nickname"`
// Phone string `json:"phone"`
// WechatNo string `json:"wechatNo"`
// RemarkName string `json:"remarkName"`
// Count int `json:"count"`
// Amount decimal.Decimal `json:"amount"`
// RoleLevel uint `json:"roleLevel"`
// OrderCount uint `json:"order_count"`
//}
//
//type MonthIncome struct {
// UserIncome []UserIncome `json:"userIncome"`
// Amount decimal.Decimal `json:"amount"`
// SalesVolume decimal.Decimal `json:"salesVolume"`
// Ratio decimal.Decimal `json:"ratio"`
// Count decimal.Decimal `json:"count"`
// OrderCount int `json:"order_count"`
// IsSettlement int
//}
//
////
////// @Style 团队月收益
////func (i *incomeLogic) TeamMonthIncome(userId uint, month int) (result MonthIncome) {
//// recookUserTeamIncomeModel := &user.RecookUserTeamIncomeModel{}
//// teamIncome := recookUserTeamIncomeModel.FindByUserIdAndDate(userId, month)
//// if teamIncome.Id > 0 {
//// result.Amount = teamIncome.TeamAmount
//// result.SalesVolume = teamIncome.TeamSalesVolume
//// result.Count = teamIncome.TeamCount
//// result.IsSettlement = teamIncome.IsSettlement
//// result.OrderCount = teamIncome.OrderCount
//// recookUserRbacRoleModel := &user.RecookUserRbacRoleModel{}
////
//// roleInfo := recookUserRbacRoleModel.FindById(teamIncome.RoleId)
//// result.Ratio = roleInfo.TeamRatio
////
//// recookUserTreeModel := &user.RecookUserTreeModel{}
//// userSqls := recookUserTreeModel.GetByRootIdAndDepthSql(userId, 1, 0)
////
//// roleSqls := recookUserRbacRoleModel.GetByRoleIdsSql([]uint{
//// user_role.DiamondLevelTwo,
//// user_role.DiamondLevelThree,
//// })
////
//// recookUserInfoModel := &user.RecookUserInfoModel{}
//// recookUserInfoModel.GetDb().Table(recookUserInfoModel.TableName()+" userInfo").
//// Select([]string{
//// "userInfo.id as user_id,head_img_url,nickname,phone,wechat_no,remark_name",
//// "team_sales_volume as amount, team_count as `count`",
//// "role_level",
//// "team_count as order_count",
//// }).
//// Joins(fmt.Sprintf("join %s as teamIncome on userInfo.id = teamIncome.user_id and teamIncome.date = ?", recookUserTeamIncomeModel.TableName()), month).
//// Joins(fmt.Sprintf("join %s as userLevel on teamIncome.role_id = userLevel.id", recookUserRbacRoleModel.TableName())).
//// Where("userInfo.id in ? and teamIncome.role_id not in (?)", userSqls, roleSqls).
//// Find(&result.UserIncome)
//// }
//// return
////}
////
////// @Style 推荐月收益
////func (i *incomeLogic) RecommendMonthIncome(userId uint, month int) (result MonthIncome) {
//// recookUserTeamIncomeModel := &user.RecookUserTeamIncomeModel{}
//// teamIncome := recookUserTeamIncomeModel.FindByUserIdAndDate(userId, month)
//// if teamIncome.Id > 0 {
//// result.Amount = teamIncome.RecommendAmount
//// result.SalesVolume = teamIncome.RecommendSalesVolume
//// result.Count = teamIncome.RecommendCount
//// result.IsSettlement = teamIncome.IsSettlement
//// result.OrderCount = teamIncome.OrderCount
//// recookUserRbacRoleModel := &user.RecookUserRbacRoleModel{}
////
//// roleInfo := recookUserRbacRoleModel.FindById(teamIncome.RoleId)
//// result.Ratio = roleInfo.TeamRatio
////
//// recookUserTreeModel := &user.RecookUserTreeModel{}
//// userSqls := recookUserTreeModel.GetByRootIdAndDepthSql(userId, 1)
////
//// roleSqls := recookUserRbacRoleModel.GetByRoleIdsSql([]uint{
//// user_role.DiamondLevelTwo,
//// user_role.DiamondLevelThree,
//// })
////
//// recookUserInfoModel := &user.RecookUserInfoModel{}
//// recookUserInfoModel.GetDb().Table(recookUserInfoModel.TableName()+" userInfo").
//// Select([]string{
//// "userInfo.id as user_id,head_img_url,nickname,phone,wechat_no,remark_name",
//// "team_sales_volume as amount, team_count as `count`",
//// "role_level",
//// "recommend_count as order_count",
//// }).
//// Joins(fmt.Sprintf("join %s as teamIncome on userInfo.id = teamIncome.user_id and teamIncome.date = ?", recookUserTeamIncomeModel.TableName()), month).
//// Joins(fmt.Sprintf("join %s as userLevel on teamIncome.role_id = userLevel.id", recookUserRbacRoleModel.TableName())).
//// Where("userInfo.id in ? and teamIncome.role_id in (?)", userSqls, roleSqls).
//// Find(&result.UserIncome)
//// }
//// return
////}
////
////// @Style 团队月收益
////func (i *incomeLogic) RewardMonthIncome(userId uint, month int) (result MonthIncome) {
//// recookUserTeamIncomeModel := &user.RecookUserTeamIncomeModel{}
//// teamIncome := recookUserTeamIncomeModel.FindByUserIdAndDate(userId, month)
//// if teamIncome.Id > 0 {
//// result.Amount = teamIncome.RewardAmount
//// result.SalesVolume = teamIncome.RewardSalesVolume
//// result.Count = teamIncome.RewardCount
//// result.IsSettlement = teamIncome.IsSettlement
//// result.OrderCount = teamIncome.OrderCount
//// recookUserRbacRoleModel := &user.RecookUserRbacRoleModel{}
////
//// roleInfo := recookUserRbacRoleModel.FindById(teamIncome.RoleId)
//// result.Ratio = roleInfo.RewardRatio
////
//// recookUserTreeModel := &user.RecookUserTreeModel{}
//// userSqls := recookUserTreeModel.GetByRootIdAndDepthSql(userId, 2)
////
//// roleSqls := recookUserRbacRoleModel.GetByRoleIdsSql([]uint{
//// user_role.DiamondLevelThree,
//// })
////
//// recookUserInfoModel := &user.RecookUserInfoModel{}
//// recookUserInfoModel.GetDb().Table(recookUserInfoModel.TableName()+" userInfo").
//// Select([]string{
//// "userInfo.id as user_id,head_img_url,nickname,phone,wechat_no,remark_name",
//// "team_sales_volume as amount, team_count as `count`",
//// "role_level",
//// "reward_count as order_count",
//// }).
//// Joins(fmt.Sprintf("join %s as teamIncome on userInfo.id = teamIncome.user_id and teamIncome.date = ?", recookUserTeamIncomeModel.TableName()), month).
//// Joins(fmt.Sprintf("join %s as userLevel on teamIncome.role_id = userLevel.id", recookUserRbacRoleModel.TableName())).
//// Where("userInfo.id in ? and teamIncome.role_id in (?)", userSqls, roleSqls).
//// Find(&result.UserIncome)
//// }
//// return
////}
//
//type DayExpect struct {
// Count int `json:"count"`
// SalesVolume decimal.Decimal `json:"salesVolume"`
// Amount decimal.Decimal `json:"amount"`
//}
//
//type Expect struct {
// SalesVolume decimal.Decimal `json:"salesVolume"`
// Amount decimal.Decimal `json:"amount"`
// Ratio decimal.Decimal `json:"ratio"`
// Count int `json:"order_count"`
//}
//
//type DayIncomes struct {
// Purchase DayExpect `json:"purchase"`
// Guide DayExpect `json:"guide"`
// Team Expect `json:"team"`
// Recommend Expect `json:"recommend"`
// Reward Expect `json:"reward"`
//}
//
////// @Style 日收益信息
////func (i *incomeLogic) DayIncomes(userId uint, day int) (result DayIncomes) {
//// recookUserInfoModel := &user.RecookUserInfoModel{}
//// userInfo := recookUserInfoModel.FindById(userId)
////
//// recookUserRbacRoleModel := &user.RecookUserRbacRoleModel{}
//// roleInfo := recookUserRbacRoleModel.FindById(userInfo.RoleId)
////
//// recookUserDayExpectIncomeModel := &user.RecookUserDayExpectIncomeModel{}
//// dayInfo := recookUserDayExpectIncomeModel.FindByUserIdAndDate(userId, day)
////
//// result.Purchase.Count = dayInfo.PurchaseCount
//// result.Purchase.Amount = dayInfo.PurchaseAmount
//// result.Purchase.SalesVolume = dayInfo.PurchaseSalesVolume
//// result.Guide.Count = dayInfo.GuideCount
//// result.Guide.Amount = dayInfo.GuideAmount
//// result.Guide.SalesVolume = dayInfo.GuideSalesVolume
////
//// recookUserTreeModel := &user.RecookUserTreeModel{}
////
//// // 平台奖励收益
//// if !roleInfo.RewardRatio.IsZero() {
//// userSqls := recookUserTreeModel.GetByRootIdAndDepthSql(userId, 2)
//// roleSqls := recookUserRbacRoleModel.GetByRoleIdsSql([]uint{
//// user_role.DiamondLevelThree,
//// })
//// recookUserDayExpectIncomeModel.GetDb().
//// Table(recookUserDayExpectIncomeModel.TableName()+" dayIncome").
//// Select("sum(amount) as sales_volume").
//// Joins(fmt.Sprintf("join %s userInfo on userInfo.id = dayIncome.user_id and dayIncome.day = ?", recookUserInfoModel.TableName()), day).
//// Where("userInfo.id in ? and userInfo.role_id in ?", userSqls, roleSqls).
//// First(&result.Reward)
//// result.Reward.Ratio = roleInfo.RewardRatio
//// result.Reward.Amount = result.Reward.SalesVolume.Mul(result.Reward.Ratio).Div(decimal.NewFromInt(100)).Truncate(2)
//// }
////
//// // 推荐收益
//// if !roleInfo.RecommendRatio.IsZero() {
//// userSqls := recookUserTreeModel.GetByRootIdAndDepthSql(userId, 1)
//// roleSqls := recookUserRbacRoleModel.GetByRoleIdsSql([]uint{
//// user_role.DiamondLevelTwo,
//// user_role.DiamondLevelThree,
//// })
//// recookUserDayExpectIncomeModel.GetDb().
//// Table(recookUserDayExpectIncomeModel.TableName()+" dayIncome").
//// Select("sum(amount) as sales_volume").
//// Joins(fmt.Sprintf("join %s userInfo on userInfo.id = dayIncome.user_id and dayIncome.day = ?", recookUserInfoModel.TableName()), day).
//// Where("userInfo.id in ? and userInfo.role_id in ?", userSqls, roleSqls).
//// First(&result.Recommend)
//// result.Recommend.SalesVolume = result.Recommend.SalesVolume.Sub(result.Reward.SalesVolume)
//// result.Recommend.Ratio = roleInfo.RecommendRatio
//// result.Recommend.Amount = result.Recommend.SalesVolume.Mul(result.Recommend.Ratio).Div(decimal.NewFromInt(100)).Truncate(2)
//// }
////
//// // 团队收益
//// if !roleInfo.TeamRatio.IsZero() {
//// result.Team.SalesVolume = dayInfo.Amount.Sub(result.Recommend.SalesVolume).Sub(result.Reward.SalesVolume)
//// result.Team.Ratio = roleInfo.TeamRatio
//// result.Team.Amount = result.Team.SalesVolume.Mul(result.Team.Ratio).Div(decimal.NewFromInt(100)).Truncate(2)
//// }
//// return
////}
//
////// @Style 月收益信息
////func (i *incomeLogic) MonthIncomes(userId uint, month int) (result DayIncomes) {
//// recookUserTeamExpectIncomeModel := &user.RecookUserTeamExpectIncomeModel{}
//// monthInfo := recookUserTeamExpectIncomeModel.FindByUserIdAndDate(userId, month)
////
//// recookUserRbacRoleModel := &user.RecookUserRbacRoleModel{}
//// //roleInfo := recookUserRbacRoleModel.FindById(monthInfo.RoleId)
////
//// result.Purchase.Count = monthInfo.PurchaseCount
//// result.Purchase.Amount = monthInfo.PurchaseAmount
//// result.Purchase.SalesVolume = monthInfo.PurchaseSalesVolume
//// result.Guide.Count = monthInfo.GuideCount
//// result.Guide.Amount = monthInfo.GuideAmount
//// result.Guide.SalesVolume = monthInfo.GuideSalesVolume
////
//// recookUserTreeModel := &user.RecookUserTreeModel{}
////
//// recookUserInfoModel := &user.RecookUserInfoModel{}
//// // 平台奖励收益
//// if !roleInfo.RewardRatio.IsZero() {
//// userSqls := recookUserTreeModel.GetByRootIdAndDepthSql(userId, 2)
//// roleSqls := recookUserRbacRoleModel.GetByRoleIdsSql([]uint{
//// user_role.DiamondLevelThree,
//// })
//// recookUserTeamExpectIncomeModel.GetDb().
//// Table(recookUserTeamExpectIncomeModel.TableName()+" teamIncome").
//// Select("sum(amount) as sales_volume").
//// Joins(fmt.Sprintf("join %s userInfo on userInfo.id = teamIncome.user_id and teamIncome.date = ?", recookUserInfoModel.TableName()), month).
//// Where("userInfo.id in ? and teamIncome.role_id in ?", userSqls, roleSqls).
//// First(&result.Reward)
//// result.Reward.Ratio = roleInfo.RewardRatio
//// result.Reward.Amount = result.Reward.SalesVolume.Mul(result.Reward.Ratio).Div(decimal.NewFromInt(100)).Truncate(2)
//// }
////
//// // 推荐收益
//// if !roleInfo.RecommendRatio.IsZero() {
//// userSqls := recookUserTreeModel.GetByRootIdAndDepthSql(userId, 1)
//// roleSqls := recookUserRbacRoleModel.GetByRoleIdsSql([]uint{
//// user_role.DiamondLevelTwo,
//// user_role.DiamondLevelThree,
//// })
//// recookUserTeamExpectIncomeModel.GetDb().
//// Table(recookUserTeamExpectIncomeModel.TableName()+" teamIncome").
//// Select("sum(amount) as sales_volume").
//// Joins(fmt.Sprintf("join %s userInfo on userInfo.id = teamIncome.user_id and teamIncome.date = ?", recookUserInfoModel.TableName()), month).
//// Where("userInfo.id in ? and teamIncome.role_id in ?", userSqls, roleSqls).
//// First(&result.Recommend)
//// result.Recommend.SalesVolume = result.Recommend.SalesVolume.Sub(result.Reward.SalesVolume)
//// result.Recommend.Ratio = roleInfo.RecommendRatio
//// result.Recommend.Amount = result.Recommend.SalesVolume.Mul(result.Recommend.Ratio).Div(decimal.NewFromInt(100)).Truncate(2)
//// }
////
//// // 团队收益
//// if !roleInfo.TeamRatio.IsZero() {
//// result.Team.SalesVolume = monthInfo.Amount.Sub(result.Recommend.SalesVolume).Sub(result.Reward.SalesVolume)
//// result.Team.Ratio = roleInfo.TeamRatio
//// result.Team.Amount = result.Team.SalesVolume.Mul(result.Team.Ratio).Div(decimal.NewFromInt(100)).Truncate(2)
//// }
//// return
////}
//
//type DayExpects struct {
// Purchase DayExpect `json:"purchase"`
// Guide DayExpect `json:"guide"`
//}
//
//// @Style 日自购/导购预估收益
//func (i *incomeLogic) DayExpect(userId uint, day int) DayExpects {
// recookUserDayExpectIncomeModel := &user.RecookUserDayExpectIncomeModel{}
// dayExpectInfo := recookUserDayExpectIncomeModel.FindByUserIdAndDate(userId, day)
// return DayExpects{
// Purchase: DayExpect{
// Count: dayExpectInfo.PurchaseCount,
// SalesVolume: dayExpectInfo.PurchaseSalesVolume,
// Amount: dayExpectInfo.PurchaseAmount,
// },
// Guide: DayExpect{
// Count: dayExpectInfo.GuideCount,
// SalesVolume: dayExpectInfo.GuideSalesVolume,
// Amount: dayExpectInfo.GuideAmount,
// },
// }
//}
//
//type MonthExpects struct {
// Purchase DayExpect `json:"purchase"`
// Guide DayExpect `json:"guide"`
// PurchaseList []DayExpectItem `json:"purchaseList"`
// GuideList []DayExpectItem `json:"guideList"`
//}
//
//type DayExpectItem struct {
// Day int `json:"day"`
// DayExpect
//}
//
//// @Style 月自购/导购预估收益
//func (i *incomeLogic) MonthExpect(userId uint, month int) (result MonthExpects) {
// recookUserTeamExpectIncomeModel := &user.RecookUserTeamExpectIncomeModel{}
// monthExpectInfo := recookUserTeamExpectIncomeModel.FindByUserIdAndDate(userId, month)
//
// result = MonthExpects{
// Purchase: DayExpect{
// Count: monthExpectInfo.PurchaseCount,
// SalesVolume: monthExpectInfo.PurchaseSalesVolume,
// Amount: monthExpectInfo.PurchaseAmount,
// },
// Guide: DayExpect{
// Count: monthExpectInfo.GuideCount,
// SalesVolume: monthExpectInfo.GuideSalesVolume,
// Amount: monthExpectInfo.GuideAmount,
// },
// }
//
// recookUserDayExpectIncomeModel := &user.RecookUserDayExpectIncomeModel{}
// list := recookUserDayExpectIncomeModel.FindByUserIdInMonth(userId, month)
// for _, item := range list {
// result.PurchaseList = append(result.PurchaseList, DayExpectItem{
// Day: item.Day,
// DayExpect: DayExpect{
// Count: item.PurchaseCount,
// SalesVolume: item.PurchaseSalesVolume,
// Amount: item.PurchaseAmount,
// },
// })
// result.GuideList = append(result.GuideList, DayExpectItem{
// Day: item.Day,
// DayExpect: DayExpect{
// Count: item.GuideCount,
// SalesVolume: item.GuideSalesVolume,
// Amount: item.GuideAmount,
// },
// })
// }
// return
//}
//
//type ExpectTeam struct {
// Team Expect `json:"team"`
// Recommend Expect `json:"recommend"`
// Reward Expect `json:"reward"`
// TeamList []UserIncome `json:"teamList"`
// RecommendList []UserIncome `json:"recommendList"`
// RewardList []UserIncome `json:"rewardList"`
//}
//
//// @Style 日团队预估收益
//func (i *incomeLogic) DayExpectTeam(userId uint, day int) (result ExpectTeam) {
// recookUserInfoModel := &user.RecookUserInfoModel{}
// userInfo := recookUserInfoModel.FindById(userId)
//
// recookUserRbacRoleModel := &user.RecookUserRbacRoleModel{}
// roleInfo := recookUserRbacRoleModel.FindById(userInfo.RoleId)
//
// recookUserDayExpectIncomeModel := &user.RecookUserDayExpectIncomeModel{}
// recookUserTreeModel := &user.RecookUserTreeModel{}
//
// result.TeamList = make([]UserIncome, 0)
// result.RecommendList = make([]UserIncome, 0)
// result.RewardList = make([]UserIncome, 0)
//
// // 平台奖励收益
// if !roleInfo.RewardRatio.IsZero() {
// userSql := recookUserTreeModel.GetByRootIdAndDepthSql(userId, 2)
// roleSql := recookUserRbacRoleModel.GetByRoleIdsSql([]uint{
// user_role.DiamondLevelThree,
// })
// recookUserDayExpectIncomeModel.GetDb().
// Table(recookUserDayExpectIncomeModel.TableName()+" dayIncome").
// Select("sum(amount) as sales_volume,sum(purchase_count + guide_amount) as count").
// Joins(fmt.Sprintf("join %s userInfo on userInfo.id = dayIncome.user_id and dayIncome.day = ?", recookUserInfoModel.TableName()), day).
// Where("userInfo.id in ? and userInfo.role_id in ?", userSql, roleSql).
// First(&result.Reward)
// result.Reward.Ratio = roleInfo.RewardRatio
// result.Reward.Amount = result.Reward.SalesVolume.Mul(result.Reward.Ratio).Div(decimal.NewFromInt(100)).Truncate(2)
//
// recookUserInfoModel.GetDb().Table(recookUserInfoModel.TableName()+" userInfo").
// Select([]string{
// "userInfo.id as user_id,head_img_url,nickname,phone,wechat_no,remark_name",
// "amount",
// "role_level",
// "count(userTree.user_id) as `count`",
// "count(dayIncome.purchase_count + dayIncome.guide_count) as `order_count`",
// }).
// Joins(fmt.Sprintf("join %s as dayIncome on userInfo.id = dayIncome.user_id and dayIncome.day = ?", recookUserDayExpectIncomeModel.TableName()), day).
// Joins(fmt.Sprintf("join %s as userLevel on userInfo.role_id = userLevel.id", recookUserRbacRoleModel.TableName())).
// Joins(fmt.Sprintf("join %s as userTree on userTree.root_id = userInfo.id", recookUserTreeModel.TableName())).
// Where("userInfo.id in ? and userInfo.role_id in (?)", userSql, roleSql).
// Group("userInfo.id").
// Find(&result.RewardList)
// }
//
// // 推荐收益
// if !roleInfo.RecommendRatio.IsZero() {
// userSql := recookUserTreeModel.GetByRootIdAndDepthSql(userId, 1)
// roleSql := recookUserRbacRoleModel.GetByRoleIdsSql([]uint{
// user_role.DiamondLevelTwo,
// user_role.DiamondLevelThree,
// })
// recookUserDayExpectIncomeModel.GetDb().
// Table(recookUserDayExpectIncomeModel.TableName()+" dayIncome").
// Select("sum(amount) as sales_volume,sum(purchase_count + guide_amount) as count").
// Joins(fmt.Sprintf("join %s userInfo on userInfo.id = dayIncome.user_id and dayIncome.day = ?", recookUserInfoModel.TableName()), day).
// Where("userInfo.id in ? and userInfo.role_id in ?", userSql, roleSql).
// First(&result.Recommend)
// result.Recommend.SalesVolume = result.Recommend.SalesVolume.Sub(result.Reward.SalesVolume)
// result.Recommend.Ratio = roleInfo.RecommendRatio
// result.Recommend.Amount = result.Recommend.SalesVolume.Mul(result.Recommend.Ratio).Div(decimal.NewFromInt(100)).Truncate(2)
//
// recookUserInfoModel.GetDb().Table(recookUserInfoModel.TableName()+" userInfo").
// Select([]string{
// "userInfo.id as user_id,head_img_url,nickname,phone,wechat_no,remark_name",
// "amount",
// "role_level",
// "count(userTree.user_id) as `count`",
// "count(dayIncome.purchase_count + dayIncome.guide_count) as `order_count`",
// }).
// Joins(fmt.Sprintf("join %s as dayIncome on userInfo.id = dayIncome.user_id and dayIncome.day = ?", recookUserDayExpectIncomeModel.TableName()), day).
// Joins(fmt.Sprintf("join %s as userLevel on userInfo.role_id = userLevel.id", recookUserRbacRoleModel.TableName())).
// Joins(fmt.Sprintf("join %s as userTree on userTree.root_id = userInfo.id", recookUserTreeModel.TableName())).
// Where("userInfo.id in ? and userInfo.role_id in (?)", userSql, roleSql).
// Group("userInfo.id").
// Find(&result.RecommendList)
//
// if len(result.RecommendList) > 0 {
// rewardUserSqls := recookUserTreeModel.GetByRootIdAndDepthSql(userId, 2)
// rewardRoleSqls := recookUserRbacRoleModel.GetByRoleIdsSql([]uint{
// user_role.DiamondLevelThree,
// })
// res := make([]rewardInfo, 0)
// recookUserInfoModel.GetDb().Table(recookUserInfoModel.TableName()+" userInfo").
// Select([]string{
// "userTreeInfo.root_id",
// "count(userTree.user_id) as `count`",
// }).
// Joins(fmt.Sprintf("join %s as userLevel on userInfo.role_id = userLevel.id", recookUserRbacRoleModel.TableName())).
// Joins(fmt.Sprintf("join %s as userTreeInfo on userTreeInfo.user_id = userInfo.id and userTreeInfo.depth = 1", recookUserTreeModel.TableName())).
// Joins(fmt.Sprintf("join %s as userTree on userTree.root_id = userInfo.id", recookUserTreeModel.TableName())).
// Where("userInfo.id in ? and userInfo.role_id in (?) ", rewardUserSqls, rewardRoleSqls).
// Group("userInfo.id").
// Find(&res)
// mapReward := map[uint]int{}
// for _, item := range res {
// mapReward[item.RootId] += item.Count
// }
//
// for index, item := range result.RecommendList {
// result.RecommendList[index].Count = item.Count - mapReward[item.UserId]
// }
// }
// }
//
// // 团队收益
// if !roleInfo.TeamRatio.IsZero() {
// userSqls := recookUserTreeModel.GetByRootIdAndDepthSql(userId, 0, 1)
// roleSqls := recookUserRbacRoleModel.GetByRoleIdsSql([]uint{
// user_role.DiamondLevelTwo,
// user_role.DiamondLevelThree,
// })
// dayInfo := recookUserDayExpectIncomeModel.FindByUserIdAndDate(userId, day)
// if dayInfo.Amount.GreaterThan(decimal.NewFromInt(0)) {
// result.Team.SalesVolume = dayInfo.Amount.Sub(result.Recommend.SalesVolume).Sub(result.Reward.SalesVolume)
// result.Team.Ratio = roleInfo.TeamRatio
// result.Team.Amount = result.Team.SalesVolume.Mul(result.Team.Ratio).Div(decimal.NewFromInt(100)).Truncate(2)
// result.Team.Count = dayInfo.PurchaseCount + dayInfo.GuideCount
// recookUserInfoModel.GetDb().Table(recookUserInfoModel.TableName()+" userInfo").
// Select([]string{
// "userInfo.id as user_id,head_img_url,nickname,phone,wechat_no,remark_name",
// "amount",
// "role_level",
// "count(userTree.user_id) as `count`",
// "count(dayIncome.purchase_count + dayIncome.guide_count) as `order_count`",
// }).
// Joins(fmt.Sprintf("join %s as dayIncome on userInfo.id = dayIncome.user_id and dayIncome.day = ?", recookUserDayExpectIncomeModel.TableName()), day).
// Joins(fmt.Sprintf("join %s as userLevel on userInfo.role_id = userLevel.id", recookUserRbacRoleModel.TableName())).
// Joins(fmt.Sprintf("join %s as userTree on userTree.root_id = userInfo.id", recookUserTreeModel.TableName())).
// Where("userInfo.id in ? and userInfo.role_id not in (?)", userSqls, roleSqls).
// Group("userInfo.id").
// Find(&result.TeamList)
// }
// }
// return
//}
//
//// @Style 月团队预估收益
//func (i *incomeLogic) MonthExpectTeam(userId uint, month int) (result ExpectTeam) {
// recookUserInfoModel := &user.RecookUserInfoModel{}
// userInfo := recookUserInfoModel.FindById(userId)
//
// recookUserRbacRoleModel := &user.RecookUserRbacRoleModel{}
// roleInfo := recookUserRbacRoleModel.FindById(userInfo.RoleId)
//
// recookUserTeamExpectIncomeModel := &user.RecookUserTeamExpectIncomeModel{}
// recookUserTreeModel := &user.RecookUserTreeModel{}
//
// // 平台奖励收益
// if !roleInfo.RewardRatio.IsZero() {
// userSqls := recookUserTreeModel.GetByRootIdAndDepthSql(userId, 2)
// roleSqls := recookUserRbacRoleModel.GetByRoleIdsSql([]uint{
// user_role.DiamondLevelThree,
// })
// recookUserTeamExpectIncomeModel.GetDb().
// Table(recookUserTeamExpectIncomeModel.TableName()+" teamIncome").
// Select("sum(amount) as sales_volume").
// Joins(fmt.Sprintf("join %s userInfo on userInfo.id = teamIncome.user_id and teamIncome.date = ?", recookUserInfoModel.TableName()), month).
// Where("userInfo.id in ? and userInfo.role_id in ?", userSqls, roleSqls).
// First(&result.Reward)
// result.Reward.Ratio = roleInfo.RewardRatio
// result.Reward.Amount = result.Reward.SalesVolume.Mul(result.Reward.Ratio).Div(decimal.NewFromInt(100)).Truncate(2)
//
// recookUserInfoModel.GetDb().Table(recookUserInfoModel.TableName()+" userInfo").
// Select([]string{
// "userInfo.id as user_id,head_img_url,nickname,phone,wechat_no,remark_name",
// "amount",
// "role_level",
// "count(userTree.user_id) as `count`",
// }).
// Joins(fmt.Sprintf("join %s as teamIncome on userInfo.id = teamIncome.user_id and teamIncome.date = ?", recookUserTeamExpectIncomeModel.TableName()), month).
// Joins(fmt.Sprintf("join %s as userLevel on userInfo.role_id = userLevel.id", recookUserRbacRoleModel.TableName())).
// Joins(fmt.Sprintf("join %s as userTree on userTree.root_id = userInfo.id", recookUserTreeModel.TableName())).
// Where("userInfo.id in ? and userInfo.role_id in (?)", userSqls, roleSqls).
// Group("userInfo.id").
// Find(&result.RewardList)
// }
//
// // 推荐收益
// if !roleInfo.RecommendRatio.IsZero() {
// userSqls := recookUserTreeModel.GetByRootIdAndDepthSql(userId, 1)
// roleSqls := recookUserRbacRoleModel.GetByRoleIdsSql([]uint{
// user_role.DiamondLevelTwo,
// user_role.DiamondLevelThree,
// })
// recookUserTeamExpectIncomeModel.GetDb().
// Table(recookUserTeamExpectIncomeModel.TableName()+" teamIncome").
// Select("sum(amount) as sales_volume").
// Joins(fmt.Sprintf("join %s userInfo on userInfo.id = teamIncome.user_id and teamIncome.date = ?", recookUserInfoModel.TableName()), month).
// Where("userInfo.id in ? and userInfo.role_id in ?", userSqls, roleSqls).
// First(&result.Recommend)
// result.Recommend.SalesVolume = result.Recommend.SalesVolume.Sub(result.Reward.SalesVolume)
// result.Recommend.Ratio = roleInfo.RecommendRatio
// result.Recommend.Amount = result.Recommend.SalesVolume.Mul(result.Recommend.Ratio).Div(decimal.NewFromInt(100)).Truncate(2)
//
// recookUserInfoModel.GetDb().Table(recookUserInfoModel.TableName()+" userInfo").
// Select([]string{
// "userInfo.id as user_id,head_img_url,nickname,phone,wechat_no,remark_name",
// "amount",
// "role_level",
// "count(userTree.user_id) as `count`",
// }).
// Joins(fmt.Sprintf("join %s as teamIncome on userInfo.id = teamIncome.user_id and teamIncome.date = ?", recookUserTeamExpectIncomeModel.TableName()), month).
// Joins(fmt.Sprintf("join %s as userLevel on userInfo.role_id = userLevel.id", recookUserRbacRoleModel.TableName())).
// Joins(fmt.Sprintf("join %s as userTree on userTree.root_id = userInfo.id", recookUserTreeModel.TableName())).
// Where("userInfo.id in ? and userInfo.role_id in (?)", userSqls, roleSqls).
// Group("userInfo.id").
// Find(&result.RecommendList)
//
// if len(result.RecommendList) > 0 {
// rewardUserSqls := recookUserTreeModel.GetByRootIdAndDepthSql(userId, 2)
// rewardRoleSqls := recookUserRbacRoleModel.GetByRoleIdsSql([]uint{
// user_role.DiamondLevelThree,
// })
// res := []rewardInfo{}
// recookUserInfoModel.GetDb().Table(recookUserInfoModel.TableName()+" userInfo").
// Select([]string{
// "userTreeInfo.root_id",
// "count(userTree.user_id) as `count`",
// }).
// Joins(fmt.Sprintf("join %s as userLevel on userInfo.role_id = userLevel.id", recookUserRbacRoleModel.TableName())).
// Joins(fmt.Sprintf("join %s as userTreeInfo on userTreeInfo.user_id = userInfo.id and userTreeInfo.depth = 1", recookUserTreeModel.TableName())).
// Joins(fmt.Sprintf("join %s as userTree on userTree.root_id = userInfo.id", recookUserTreeModel.TableName())).
// Where("userInfo.id in ? and userInfo.role_id in (?) ", rewardUserSqls, rewardRoleSqls).
// Group("userInfo.id").
// Find(&res)
// mapReward := map[uint]int{}
// for _, item := range res {
// mapReward[item.RootId] += item.Count
// }
//
// for index, item := range result.RecommendList {
// result.RecommendList[index].Count = item.Count - mapReward[item.UserId]
// }
// }
// }
//
// // 团队收益
// if !roleInfo.TeamRatio.IsZero() {
// teamInfo := recookUserTeamExpectIncomeModel.FindByUserIdAndDate(userId, month)
//
// userSqls := recookUserTreeModel.GetByRootIdAndDepthSql(userId, 1)
// roleSqls := recookUserRbacRoleModel.GetByRoleIdsSql([]uint{
// user_role.DiamondLevelTwo,
// user_role.DiamondLevelThree,
// })
//
// result.Team.SalesVolume = teamInfo.Amount.Sub(result.Recommend.SalesVolume).Sub(result.Reward.SalesVolume)
// result.Team.Ratio = roleInfo.TeamRatio
// result.Team.Amount = result.Team.SalesVolume.Mul(result.Team.Ratio).Div(decimal.NewFromInt(100)).Truncate(2)
//
// recookUserInfoModel.GetDb().Table(recookUserInfoModel.TableName()+" userInfo").
// Select([]string{
// "userInfo.id as user_id,head_img_url,nickname,phone,wechat_no,remark_name",
// "amount",
// "role_level",
// "count(userTree.user_id) as `count`",
// }).
// Joins(fmt.Sprintf("join %s as teamIncome on userInfo.id = teamIncome.user_id and teamIncome.date = ?", recookUserTeamExpectIncomeModel.TableName()), month).
// Joins(fmt.Sprintf("join %s as userLevel on userInfo.role_id = userLevel.id", recookUserRbacRoleModel.TableName())).
// Joins(fmt.Sprintf("join %s as userTree on userTree.root_id = userInfo.id", recookUserTreeModel.TableName())).
// Where("userInfo.id in ? and userInfo.role_id not in (?)", userSqls, roleSqls).
// Group("userInfo.id").
// Find(&result.TeamList)
//
// }
// return
//}