@ -3,6 +3,7 @@ package user
import (
"recook/internal/model/order"
"recook/internal/v2/model/recook/user"
"time"
"git.oa00.com/go/mysql"
"github.com/shopspring/decimal"
@ -62,6 +63,12 @@ type Profit struct {
Total decimal . Decimal // 全部到账金额
ETotal decimal . Decimal // 全部未到账金额
YearSale decimal . Decimal
MonthSale decimal . Decimal
YearCount int
MonthCount int
TotalSale decimal . Decimal
}
type Person struct {
@ -115,6 +122,29 @@ func (i *incomeLogic) Team(userID uint, key string) (data []Person) {
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 )
var ods [ ] order . Information
mysql . Db . Where ( "status in (1,4)" ) . Where ( "order_type = 2" ) . Where ( "user_id = ?" , userID ) . Find ( & ods )
now := time . Now ( )
yearStart := time . Date ( now . Year ( ) , 1 , 1 , 0 , 0 , 0 , 0 , time . Local )
yearEnd := yearStart . AddDate ( 1 , 0 , 0 )
monthStart := time . Date ( now . Year ( ) , now . Month ( ) , 1 , 0 , 0 , 0 , 0 , time . Local )
monthEnd := monthStart . AddDate ( 0 , 1 , 0 )
for _ , v := range ods {
res . TotalSale = res . TotalSale . Add ( v . ActualTotalAmount )
if v . CreatedAt . Time . Before ( monthEnd ) && v . CreatedAt . Time . After ( monthStart ) {
res . MonthCount += 1
res . MonthSale = res . MonthSale . Add ( v . ActualTotalAmount )
}
if v . CreatedAt . Time . Before ( yearEnd ) && v . CreatedAt . Time . After ( yearStart ) {
res . YearCount += 1
res . YearSale = res . YearSale . Add ( v . ActualTotalAmount )
}
}
for _ , v := range pr {
switch v . Status {
case 0 :
@ -179,183 +209,6 @@ func (i *incomeLogic) Profit(userID uint) (res Profit) {
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" `