feat: profit

master
howell 3 years ago
parent 8e14ed2f92
commit c6022527e8

@ -142,3 +142,17 @@ func (o Proxy) ProfitShopList(c *gin.Context) {
back.Suc(c, "ok", data)
}
}
func (o Proxy) SaleCount(c *gin.Context) {
var args jyy.ArgsProfitCount
if err := tools.ParseParams(&args, c); err != nil {
back.Err(c, err.Error())
return
}
if data, err := jyy.Logic.ProfitCount(args); err != nil {
back.Fail(c, err.Error())
} else {
back.Suc(c, "ok", data)
}
}

@ -608,3 +608,39 @@ func (o logic) ProfitShopList(args ArgsProfitListReq) (res ProfitDetail, err err
return
}
type Profit struct {
Total decimal.Decimal `json:"total"`
Data []struct {
Name string `json:"name"`
Count int `json:"count"`
Amount decimal.Decimal `json:"amount"`
}
}
type ArgsProfitCount struct {
ArgsProfitListReq
Start string `json:"start"`
End string `json:"end"`
}
func (o logic) ProfitCount(args ArgsProfitCount) (res Profit, err error) {
query := mysql.Db.Where("user_id = ?", args.UserID).
Where("order_type = 2").
Where("status in (1, 4)").
Where("created_at > ?", args.Start).
Where("created_at < ?", args.End)
switch args.Kind {
case 1:
// 年为单位
query = query.Select("YEAR(created_at) as name, count(*) as count, SUM(actual_total_amount) as amount ").Group("YEAR(created_at)")
case 2:
// 月为单位
query = query.Select("DATE_FORMAT(created_at,'%Y-%m') as name, count(*) as count, SUM(actual_total_amount) as amount ").Group("DATE_FORMAT(created_at,'%Y-%m')")
case 3:
// 日
query = query.Select("DATE(created_at) as name, count(*) as count, SUM(actual_total_amount) as amount ").Group("DATE(created_at)")
}
query.Find(&res.Data)
return
}

@ -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"`

@ -262,6 +262,7 @@ func routerApp(appRouter *gin.RouterGroup) {
profitRouter.POST("sale", proxy.ProfitSaleList)
profitRouter.POST("sale/detail", proxy.ProfitSalePerson)
profitRouter.POST("shop", proxy.ProfitShopList)
profitRouter.PATCH("sale/count", proxy.SaleCount)
}
}
vipController := appRouter.Group("vip", authorize)

Loading…
Cancel
Save