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.

109 lines
3.9 KiB

package service
import (
"github.com/shopspring/decimal"
"recook/internal/dbc"
"recook/internal/model/order"
"recook/internal/service/app/tree"
"strings"
"time"
)
func CDateTime(_asDateTime string) time.Time {
var TimeLocationShangHai, _ = time.LoadLocation("Asia/Shanghai")
sDateTime := strings.Replace(_asDateTime, "T", " ", -1)
sDateTime = strings.Replace(sDateTime, "/", "-", -1)
if !strings.Contains(sDateTime, " ") {
sDateTime += " 00:00:00"
}
if result, err := time.ParseInLocation("2006-01-02 15:04:05", sDateTime, TimeLocationShangHai); err == nil {
return result.In(TimeLocationShangHai)
}
return time.Time{}
}
//
//// 提成结算
//func CommissionBalanceMonth() {
// //fmt.Println("[提成统计开始]:", time.Now())
//
// //16点到17点15分
//
// //获取上个月的第一天
// var beginDate = comFunc.GetTheFirstDayOfMonth(time.Now().AddDate(0, -1, 0))
// //获取这个月的第一天
// var endDate = comFunc.GetTheFirstDayOfMonth(time.Now())
//
// //time.Time
// //var beginDate = CDateTime(time.Now().AddDate(0, 0, 0).Format("2006-01-02") + " 15:00:00")
// //var endDate = CDateTime(time.Now().AddDate(0, 0, 0).Format("2006-01-02") + " 17:40:00")
//
// var orderUserIds []uint
// // 根据上月的已支付的所有会员,获取日期内所有支付的订单
// dbc.DB.Model(&order.Information{}).Where("status = 4 and pay_time >= ? and pay_time < ?", beginDate, endDate).Pluck("user_id", &orderUserIds)
//
// // 选出这个周期内结算的用户的订单 用户,只有订单发生了,才有必要去计算
// // 找出支付所有上级
// superiorIds := tree.GetTheSuperiorUsers(orderUserIds)
//
// //fmt.Println(superiorIds)
//
// //循环出上级
// for _, userId := range superiorIds {
// //计算单用户自定义时间包括下级的销售额
// teamAmount := TeamAmountBetweenTimeZone(userId, beginDate, endDate)
// var userInfo user.Information
// dbc.DB.Find(&userInfo, userId)
// var ur = user_role.UserRole{RbacID: userInfo.RoleId}
// _ = ur.GetRoleInfoByID()
//
// //返回出提成比例
// performance := user_role.SwitchRolePerformance(ur.Info.RoleLevel)
//
// // 获取增长系数
// increaseNum := user_role.SwitchIncreaseNum(teamAmount, performance)
//
// // 团队提成=团队销售额*基础提成比例*增长系数
// teamRB := teamAmount.Mul(decimal.NewFromFloat(performance.BasePercent)).Mul(decimal.NewFromFloat(increaseNum))
//
// // 返还到瑞币
// var coinH user.CoinHistory
// coinH.UserID = userId
// coinH.CoinNum = teamRB
// coinH.CoinType = user.TeamTypeForCoinHistory
// if err := dbc.DB.Save(&coinH).Error; err != nil {
// errMsg := fmt.Sprintf("[panic][CommissionBalanceMonth 瑞币保存错误]: %s", err)
// comFunc.PrintErr(errMsg)
// }
//
// if err := coinH.UpdateWalletAfterCreate(dbc.DB, userId); err != nil {
// comFunc.PrintErr("CommissionBalanceMonth UpdateWalletAfterCreate save error:", err)
// }
//
// // 保存到历史记录
// var benefit user.RecookUserBenefit
// benefit.UserId = userId
// benefit.Percent = decimal.NewFromFloat(increaseNum).Mul(decimal.NewFromFloat(performance.BasePercent))
// benefit.Amount = teamAmount
// benefit.Income = teamRB
// benefit.Period = formatime.NewDateFrom(time.Now().AddDate(0, -1, 0))
// if err := dbc.DB.Save(&benefit).Error; err != nil {
// errMsg := fmt.Sprintf("[panic][CommissionBalanceMonth benefit 瑞币保存错误]: %s", err)
// comFunc.PrintErr(errMsg)
// }
//
// }
// fmt.Println("[提成统计完成]:", time.Now())
//}
// 计算单用户自定义时间包括下级的销售额
func TeamAmountBetweenTimeZone(userId uint, beginDate, endDate time.Time) decimal.Decimal {
// 获取所有下级用户
juniors := tree.GetTheJuniorUsers(userId)
var tempAmount []decimal.Decimal
dbc.DB.Model(&order.Information{}).Select("sum(goods_total_amount) as amount").Where(
"user_id in (?) and status = 4 and pay_time >= ? and pay_time < ? ",
juniors, beginDate, endDate).Pluck("amount", &tempAmount)
return tempAmount[0]
}