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
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]
|
|
}
|