|
|
package users
|
|
|
|
|
|
import (
|
|
|
"encoding/json"
|
|
|
"fmt"
|
|
|
"recook/internal/back"
|
|
|
"recook/internal/cache"
|
|
|
"recook/internal/dbc"
|
|
|
"recook/internal/model/aftersales"
|
|
|
"recook/internal/model/coupon"
|
|
|
"recook/internal/model/goods"
|
|
|
"recook/internal/model/order"
|
|
|
"recook/internal/model/user"
|
|
|
"recook/internal/service/app/orders"
|
|
|
"recook/internal/service/app/tree"
|
|
|
"recook/internal/service/comFunc"
|
|
|
"recook/internal/v2/model/company"
|
|
|
"recook/internal/v2/model/jyy"
|
|
|
manage "recook/internal/v2/model/recook/order"
|
|
|
"recook/tools"
|
|
|
"time"
|
|
|
|
|
|
"github.com/astaxie/beego"
|
|
|
"github.com/golangkit/formatime"
|
|
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
"github.com/jinzhu/gorm"
|
|
|
"github.com/shopspring/decimal"
|
|
|
)
|
|
|
|
|
|
type MyInfoReq struct {
|
|
|
UserID uint `json:"userId" validate:"numeric"`
|
|
|
}
|
|
|
|
|
|
type MyInfoResp struct {
|
|
|
Balance decimal.Decimal `json:"balance"` // 余额
|
|
|
Notify Notify `json:"notify"` // 通知
|
|
|
RoleLevel int `json:"roleLevel"` // 角色
|
|
|
MyAssets MyAssets `json:"myAssets"`
|
|
|
MyShopping MyShopping `json:"myShopping"`
|
|
|
ShareIncome ShareIncome `json:"shareIncome"`
|
|
|
TeamIncome TeamIncome `json:"teamIncome"`
|
|
|
OrderCenter OrderCenter `json:"orderCenter"`
|
|
|
Identifier string `json:"identifier"` //编号
|
|
|
Secret uint `json:"secret"`
|
|
|
Level int `json:"level"`
|
|
|
IsOffline bool `json:"is_offline"`
|
|
|
Start *time.Time `json:"start"`
|
|
|
End *time.Time `json:"end"`
|
|
|
Deposit decimal.Decimal `json:"deposit"`
|
|
|
IsEnterprise bool `json:"is_enterprise"`
|
|
|
AllDeposit decimal.Decimal `json:"all_deposit"`
|
|
|
Tax string `json:"tax"`
|
|
|
}
|
|
|
|
|
|
type Notify struct {
|
|
|
IsNotify bool `json:"isNotify"`
|
|
|
NotifyType string `json:"notifyType"`
|
|
|
NotifyContent string `json:"notifyContent"`
|
|
|
}
|
|
|
|
|
|
type MyAssets struct {
|
|
|
CouponNum int `json:"couponNum"`
|
|
|
CoinNum decimal.Decimal `json:"coinNum"`
|
|
|
Cards int `json:"cards"`
|
|
|
}
|
|
|
|
|
|
type MyShopping struct {
|
|
|
OrderNum uint `json:"orderNum"`
|
|
|
Amount decimal.Decimal `json:"amount"`
|
|
|
HistoryIncome decimal.Decimal `json:"historyIncome"`
|
|
|
}
|
|
|
|
|
|
type ShareIncome struct {
|
|
|
OrderNum uint `json:"orderNum"`
|
|
|
Amount decimal.Decimal `json:"amount"`
|
|
|
HistoryIncome decimal.Decimal `json:"historyIncome"`
|
|
|
}
|
|
|
|
|
|
type TeamIncome struct {
|
|
|
OrderNum decimal.Decimal `json:"orderNum"` // 团队销售额
|
|
|
Amount decimal.Decimal `json:"amount"` // 累计收益
|
|
|
HistoryIncome int `json:"historyIncome"` // 团队成员
|
|
|
}
|
|
|
|
|
|
type OrderCenter struct {
|
|
|
WaitPay int `json:"waitPay"`
|
|
|
WaitSend int `json:"waitSend"`
|
|
|
WaitRecv int `json:"waitRecv"`
|
|
|
AfterSales int `json:"afterSales"`
|
|
|
EvaNum int `json:"eva_num"`
|
|
|
AfterNum int `json:"after_num"`
|
|
|
CollectionNum int `json:"collection_num"`
|
|
|
SaleWaitDeal int `json:"sale_wait_deal"`
|
|
|
SaleWaitPay int `json:"sale_wait_pay"`
|
|
|
SaleWaitSend int `json:"sale_wait_send"`
|
|
|
SaleWaitRecv int `json:"sale_wait_recv"`
|
|
|
}
|
|
|
|
|
|
//计算总金额用的
|
|
|
type tempAcount struct {
|
|
|
Amount decimal.Decimal `json:"amount"`
|
|
|
}
|
|
|
|
|
|
// MyInfo 我的 首页
|
|
|
func MyInfo(c *gin.Context) {
|
|
|
var p MyInfoReq
|
|
|
err := tools.ParseParams(&p, c)
|
|
|
if err != nil {
|
|
|
back.Fail(c, err.Error())
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// -- 特殊操作
|
|
|
if p.UserID == 0 {
|
|
|
back.Suc(c, "操作成功", nil)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var userInfo user.Information
|
|
|
if err := dbc.DB.First(&userInfo, p.UserID).Error; err != nil {
|
|
|
back.Fail(c, "用户错误1"+err.Error())
|
|
|
return
|
|
|
}
|
|
|
|
|
|
//var ur = user_role.UserRole{RbacID: userInfo.RoleId}
|
|
|
//_ = ur.GetRoleInfoByID()
|
|
|
|
|
|
var uWallet user.Wallet
|
|
|
if err := dbc.DB.Where("user_id = ?", p.UserID).First(&uWallet).Error; err != nil {
|
|
|
back.Fail(c, "用户错误"+err.Error())
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var uWallet2 jyy.UserWallet
|
|
|
dbc.DB.Where("user_id = ?", p.UserID).First(&uWallet2)
|
|
|
|
|
|
allDeposit := make([]decimal.Decimal, 0)
|
|
|
dbc.DB.Table((&jyy.UserWalletApply{}).TableName()).Select("IFNULL(SUM(amount), 0) as total").
|
|
|
Where("user_id = ?", p.UserID).
|
|
|
Where("state = 2").
|
|
|
Pluck("total", &allDeposit)
|
|
|
|
|
|
// 优惠券是 未使用和未过期的
|
|
|
var couponNum int
|
|
|
dbc.DB.Model(&coupon.ReceiverMid{}).Where("user_id = ? and status = 0 and end_time > ?", p.UserID, time.Now()).Count(&couponNum)
|
|
|
|
|
|
var cards int
|
|
|
dbc.DB.Model(&user.IntroHistory{}).Where("intro_code = ? and up_code_used = ?", userInfo.IntroCode, user.TheCodeNotUsed).Count(&cards)
|
|
|
|
|
|
// ------- 自购收益
|
|
|
var msData = myShoppingData(p.UserID)
|
|
|
cache.SetTmpData(p.UserID, cache.TmpSelfType, msData)
|
|
|
|
|
|
juniors := tree.GetTheJuniorUsers(p.UserID)
|
|
|
|
|
|
// ---- ShareIncome 分享收益
|
|
|
var siData = shareIncomeData(p.UserID)
|
|
|
cache.SetTmpData(p.UserID, cache.TmpShareType, siData)
|
|
|
|
|
|
// ---- TeamIncome 团队收益
|
|
|
var tiData = teamIncomeData(p.UserID, juniors)
|
|
|
cache.SetTmpData(p.UserID, cache.TmpTeamType, siData)
|
|
|
|
|
|
//dbc.DB.Model(&order.Information{}).Select("sum(goods_total_amount) as amount").Where("user_id in (?) and status = 4", juniors).Scan(&tiData)
|
|
|
//
|
|
|
//dbc.DB.Model(&user.CoinHistory{}).Select("count(*) order_num, sum(coin_num) as history_income").Where("user_id in (?) and coin_type = ?", juniors, user.RoleTypeForCoinHistory).Scan(&tiData)
|
|
|
|
|
|
// ---- OrderCenter
|
|
|
var waitPay, waitSend, waitRecv, afterSalesCount = orders.Center(p.UserID)
|
|
|
var waitPay1, waitSend1, waitRecv1, waitDeal1 = orders.SaleCenter(p.UserID)
|
|
|
//评价数量
|
|
|
var evaNum int64
|
|
|
//dbc.DB.Table((&goods.Evaluation{}).TableName()).Where("user_id=?", userInfo.ID).Count(&evaNum)
|
|
|
dbc.DB.Table((&manage.RecookOrderGoodsDetailModel{}).TableName()).Where("user_id=?", userInfo.ID).
|
|
|
Where("evaluated_id=0").Where("pay_status=1").Where("express_status=2").Count(&evaNum)
|
|
|
//// 通知
|
|
|
//isNotify, content := cache.UpNotify(int(p.UserID))
|
|
|
//if isNotify == true {
|
|
|
// if len(content) == 0 {
|
|
|
// content = user_role.CongratulationWord(ur.Info.RoleLevel)
|
|
|
// }
|
|
|
//}
|
|
|
//售后中数量
|
|
|
var afterNum int64
|
|
|
dbc.DB.Table((&aftersales.Goods{}).TableName()).Where("user_id=?", p.UserID).Where("return_status<>5").Count(&afterNum)
|
|
|
|
|
|
//收藏数量
|
|
|
var collectNum int64
|
|
|
dbc.DB.Table((&goods.Favorites{}).TableName()).Where("user_id=?", p.UserID).Count(&collectNum)
|
|
|
|
|
|
var company company.Info
|
|
|
dbc.DB.First(&company, "user_id = ?", userInfo.ID)
|
|
|
// 组装返回
|
|
|
var res = MyInfoResp{
|
|
|
Balance: uWallet.Balance,
|
|
|
Deposit: uWallet2.Deposit,
|
|
|
AllDeposit: allDeposit[0],
|
|
|
Notify: Notify{
|
|
|
IsNotify: false,
|
|
|
NotifyType: "up", // 暂时只有升级类型,估计以后会加需求,保级之类的预留
|
|
|
NotifyContent: "",
|
|
|
},
|
|
|
RoleLevel: 0,
|
|
|
MyAssets: MyAssets{
|
|
|
CouponNum: couponNum,
|
|
|
CoinNum: uWallet.Coin,
|
|
|
Cards: cards,
|
|
|
},
|
|
|
MyShopping: MyShopping{
|
|
|
OrderNum: msData.OrderNum,
|
|
|
Amount: msData.Amount,
|
|
|
HistoryIncome: msData.HistoryIncome,
|
|
|
},
|
|
|
ShareIncome: ShareIncome{
|
|
|
OrderNum: siData.OrderNum,
|
|
|
Amount: siData.Amount,
|
|
|
HistoryIncome: siData.HistoryIncome,
|
|
|
},
|
|
|
TeamIncome: TeamIncome{
|
|
|
OrderNum: tiData.Amount,
|
|
|
Amount: tiData.OrderNum,
|
|
|
HistoryIncome: tiData.HistoryIncome,
|
|
|
},
|
|
|
OrderCenter: OrderCenter{
|
|
|
WaitPay: waitPay,
|
|
|
WaitSend: waitSend,
|
|
|
WaitRecv: waitRecv,
|
|
|
AfterSales: afterSalesCount,
|
|
|
EvaNum: int(evaNum),
|
|
|
AfterNum: int(afterNum),
|
|
|
CollectionNum: int(collectNum),
|
|
|
SaleWaitDeal: waitDeal1,
|
|
|
SaleWaitPay: waitPay1,
|
|
|
SaleWaitSend: waitSend1,
|
|
|
SaleWaitRecv: waitRecv1,
|
|
|
},
|
|
|
Identifier: userInfo.Identifier[:len(userInfo.Identifier)-2],
|
|
|
Secret: userInfo.Secret,
|
|
|
Level: userInfo.Level,
|
|
|
IsOffline: userInfo.IsOffline,
|
|
|
Start: &userInfo.VipUpgradeStart.Time,
|
|
|
End: &userInfo.VipUpgradeEnd.Time,
|
|
|
IsEnterprise: userInfo.IsEnterprise,
|
|
|
Tax: company.TaxType,
|
|
|
}
|
|
|
back.Suc(c, "操作成功", &res)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
func myShoppingData(userId uint) (msData MyShopping) {
|
|
|
var shopCoin []user.CoinHistory
|
|
|
dbc.DB.Select("coin_num, order_id").Where("user_id = ? and coin_type = ?", userId,
|
|
|
user.SelfShoppingTypeForCoinHistory).Find(&shopCoin)
|
|
|
msData.OrderNum = uint(len(shopCoin))
|
|
|
var shopOrderIds []uint
|
|
|
for _, val := range shopCoin {
|
|
|
msData.HistoryIncome = msData.HistoryIncome.Add(val.CoinNum)
|
|
|
shopOrderIds = append(shopOrderIds, val.OrderId)
|
|
|
}
|
|
|
if msData.OrderNum > 0 {
|
|
|
dbc.DB.Model(&order.GoodsDetail{}).Select("sum(goods_amount) as amount").Where(" order_id in (?) and ass_type=0 ", shopOrderIds).Scan(&msData)
|
|
|
|
|
|
//dbc.DB.Model(&order.Information{}).Select("sum(goods_total_amount) as amount").Where("id in (?)", shopOrderIds).Scan(&msData)
|
|
|
}
|
|
|
return
|
|
|
}
|
|
|
|
|
|
func shareIncomeData(userId uint) (siData ShareIncome) {
|
|
|
var shareCoin []user.CoinHistory
|
|
|
dbc.DB.Select("coin_num, order_id").Where("user_id = ? and coin_type = ?", userId, user.RoleTypeForCoinHistory).Find(&shareCoin)
|
|
|
siData.OrderNum = uint(len(shareCoin))
|
|
|
var shareOrderIds []uint
|
|
|
for _, val := range shareCoin {
|
|
|
siData.HistoryIncome = siData.HistoryIncome.Add(val.CoinNum)
|
|
|
shareOrderIds = append(shareOrderIds, val.OrderId)
|
|
|
}
|
|
|
if siData.OrderNum > 0 {
|
|
|
dbc.DB.Model(&order.GoodsDetail{}).Select("sum(goods_amount) as amount").Where(" order_id in (?) and ass_type=0 ", shareOrderIds).Scan(&siData)
|
|
|
|
|
|
}
|
|
|
return
|
|
|
}
|
|
|
|
|
|
func teamIncomeData(userId uint, juniors []uint) (tiData TeamIncome) {
|
|
|
var coinHistory []user.CoinHistory
|
|
|
dbc.DB.Where("user_id = ? and coin_type = ?", userId, user.TeamTypeForCoinHistory).Find(&coinHistory)
|
|
|
tiData.HistoryIncome = len(juniors)
|
|
|
var orderIds = make([]uint, len(coinHistory))
|
|
|
for _, val := range coinHistory {
|
|
|
orderIds = append(orderIds, val.OrderId)
|
|
|
tiData.OrderNum = tiData.OrderNum.Add(val.CoinNum)
|
|
|
}
|
|
|
|
|
|
if len(orderIds) > 0 {
|
|
|
|
|
|
dbc.DB.Model(&order.Information{}).Select("SUM(actual_total_amount + coin_total_amount) as amount").
|
|
|
Where("status=4 and user_id IN (?) ", juniors).Scan(&tiData)
|
|
|
|
|
|
//dbc.DB.Model(&order.GoodsDetail{}).Select("sum(goods_amount) as amount").Where(" order_id in (?) and ass_type=0 ", orderIds).Scan(&tiData)
|
|
|
|
|
|
}
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// IncomeFromSelfReq 自购二级页面
|
|
|
type IncomeFromSelfReq struct {
|
|
|
UserID uint `json:"userId" validate:"numeric"`
|
|
|
Date string `json:"date" validate:"omitempty,len=7"`
|
|
|
OrderBy string `json:"orderBy"`
|
|
|
}
|
|
|
|
|
|
type IncomeFromSelfResp struct {
|
|
|
MyShopping MyShopping `json:"myShopping"`
|
|
|
Date string `json:"date"`
|
|
|
CoinNum decimal.Decimal `json:"coinNum"`
|
|
|
List []MyShoppingWithTime `json:"list"`
|
|
|
}
|
|
|
|
|
|
type MyShoppingWithTime struct {
|
|
|
Time formatime.Date `json:"time"`
|
|
|
MyShopping
|
|
|
}
|
|
|
|
|
|
func IncomeFromSelf(c *gin.Context) {
|
|
|
var p IncomeFromSelfReq
|
|
|
err := tools.ParseParams(&p, c)
|
|
|
if err != nil {
|
|
|
back.Fail(c, err.Error())
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var beginDate, endDate time.Time
|
|
|
if len(p.Date) != 7 {
|
|
|
beginDate = comFunc.GetTheFirstDayOfMonth(time.Now())
|
|
|
endDate = comFunc.GetTheFirstDayOfMonth(time.Now().AddDate(0, 1, 0))
|
|
|
} else {
|
|
|
beginDate, err = time.Parse("2006-01", p.Date)
|
|
|
if err != nil {
|
|
|
back.Fail(c, "date error:"+err.Error())
|
|
|
return
|
|
|
}
|
|
|
if beginDate.After(time.Now()) {
|
|
|
back.Fail(c, "时间超出范围")
|
|
|
return
|
|
|
}
|
|
|
endDate = beginDate.AddDate(0, 1, 0)
|
|
|
}
|
|
|
|
|
|
var msData MyShopping
|
|
|
// if res, ok := cache.GetTmpData(p.UserID, cache.TMP_SELF_TYPE); !ok {
|
|
|
// msData = myShoppingData(p.UserID)
|
|
|
// } else {
|
|
|
// err := json.Unmarshal([]byte(res), &msData)
|
|
|
// if err != nil {
|
|
|
// comFunc.PrintErr("IncomeFromSelf json error:", err)
|
|
|
msData = myShoppingData(p.UserID)
|
|
|
// }
|
|
|
// }
|
|
|
|
|
|
// var uWallet user.Wallet
|
|
|
// if err := dbc.DB.Where("user_id = ?", p.UserID).First(&uWallet).Error; err != nil {
|
|
|
// http.Fail(c, "用户错误"+err.Error())
|
|
|
// return
|
|
|
// }
|
|
|
type CoinTotalHistory struct {
|
|
|
CoinTotal decimal.Decimal
|
|
|
}
|
|
|
var coinHistoryTotal CoinTotalHistory
|
|
|
if err := dbc.DB.Model(&user.CoinHistory{}).Select("sum(coin_num) as coin_total").Where("user_id = ? and coin_type = 3", p.UserID).Scan(&coinHistoryTotal).Error; err != nil {
|
|
|
back.Fail(c, "用户错误"+err.Error())
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var coinTotalHistory decimal.Decimal
|
|
|
|
|
|
var cHistory []user.CoinHistory
|
|
|
dbc.DB.Where("user_id = ? and coin_type = ? and created_at between ? and ?", p.UserID, user.SelfShoppingTypeForCoinHistory, beginDate, endDate).Find(&cHistory)
|
|
|
// 组装数据
|
|
|
var list []MyShoppingWithTime
|
|
|
var myTempAcount tempAcount
|
|
|
for start := beginDate; endDate.After(start); start = start.AddDate(0, 0, 1) {
|
|
|
var tmpData MyShoppingWithTime
|
|
|
tmpData.Time = formatime.NewDateFrom(start)
|
|
|
for _, val := range cHistory {
|
|
|
if val.CreatedAt.Time.Day() == start.Day() {
|
|
|
tmpData.OrderNum++
|
|
|
//这边将退款的商品的金额排除,recook_coin_history,order_id
|
|
|
dbc.DB.Model(&order.GoodsDetail{}).Select("sum(goods_amount) as amount").Where(" order_id in (?) and ass_type=0 ", val.OrderId).Scan(&myTempAcount)
|
|
|
|
|
|
tmpData.Amount = tmpData.Amount.Add(myTempAcount.Amount)
|
|
|
tmpData.HistoryIncome = tmpData.HistoryIncome.Add(val.CoinNum)
|
|
|
coinTotalHistory = coinTotalHistory.Add(val.CoinNum)
|
|
|
fmt.Println(tmpData.HistoryIncome, val.CoinNum)
|
|
|
}
|
|
|
}
|
|
|
list = append(list, tmpData)
|
|
|
if start.AddDate(0, 0, 1).After(time.Now()) {
|
|
|
break
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//如果是倒序
|
|
|
if p.OrderBy == "desc" {
|
|
|
length := len(list)
|
|
|
for i := 0; i < length/2; i++ {
|
|
|
temp := list[length-1-i]
|
|
|
list[length-1-i] = list[i]
|
|
|
list[i] = temp
|
|
|
}
|
|
|
}
|
|
|
|
|
|
bs, _ := json.Marshal(IncomeFromSelfResp{
|
|
|
MyShopping: msData,
|
|
|
Date: beginDate.Format("2006-01"),
|
|
|
CoinNum: coinTotalHistory,
|
|
|
List: list,
|
|
|
})
|
|
|
beego.Info(string(bs))
|
|
|
|
|
|
msData.HistoryIncome = coinHistoryTotal.CoinTotal
|
|
|
|
|
|
back.Suc(c, "操作成功", IncomeFromSelfResp{
|
|
|
MyShopping: msData,
|
|
|
Date: beginDate.Format("2006-01"),
|
|
|
CoinNum: coinTotalHistory,
|
|
|
List: list,
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
// IncomeFromShareReq 分享二级页面
|
|
|
type IncomeFromShareReq struct {
|
|
|
UserID uint `json:"userId" validate:"numeric"`
|
|
|
Date string `json:"date" validate:"omitempty,len=7"`
|
|
|
OrderBy string `json:"orderBy"`
|
|
|
}
|
|
|
|
|
|
type IncomeFromShareResp struct {
|
|
|
ShareIncome ShareIncome `json:"myShopping"`
|
|
|
Date string `json:"date"`
|
|
|
CoinNum decimal.Decimal `json:"coinNum"`
|
|
|
List []ShareIncomeWithTime `json:"list"`
|
|
|
}
|
|
|
|
|
|
type ShareIncomeWithTime struct {
|
|
|
Time formatime.Date `json:"time"`
|
|
|
ShareIncome
|
|
|
}
|
|
|
|
|
|
func IncomeFromShare(c *gin.Context) {
|
|
|
var p IncomeFromShareReq
|
|
|
err := tools.ParseParams(&p, c)
|
|
|
if err != nil {
|
|
|
back.Fail(c, err.Error())
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var beginDate, endDate time.Time
|
|
|
if len(p.Date) != 7 {
|
|
|
beginDate = comFunc.GetTheFirstDayOfMonth(time.Now())
|
|
|
endDate = comFunc.GetTheFirstDayOfMonth(time.Now().AddDate(0, 1, 0))
|
|
|
} else {
|
|
|
beginDate, err = time.Parse("2006-01", p.Date)
|
|
|
if err != nil {
|
|
|
back.Fail(c, "date error:"+err.Error())
|
|
|
return
|
|
|
}
|
|
|
if beginDate.After(time.Now()) {
|
|
|
back.Fail(c, "时间超出范围")
|
|
|
return
|
|
|
}
|
|
|
endDate = beginDate.AddDate(0, 1, 0)
|
|
|
}
|
|
|
|
|
|
var siData ShareIncome
|
|
|
// if res, ok := cache.GetTmpData(p.UserID, cache.TMP_SELF_TYPE); !ok {
|
|
|
// siData = shareIncomeData(p.UserID)
|
|
|
// } else {
|
|
|
// err := json.Unmarshal([]byte(res), &siData)
|
|
|
// if err != nil {
|
|
|
// comFunc.PrintErr("IncomeFromSelf json error:", err)
|
|
|
siData = shareIncomeData(p.UserID)
|
|
|
// }
|
|
|
// }
|
|
|
|
|
|
var totalCoin decimal.Decimal
|
|
|
|
|
|
// type CoinTotalHistory struct {
|
|
|
// CoinTotal decimal.Decimal
|
|
|
// }
|
|
|
// var coinHistoryTotal CoinTotalHistory
|
|
|
// if err := dbc.DB.Model(&user.CoinHistory{}).Select("sum(coin_num) as coin_total").Where("user_id = ? and coin_type = ?", p.UserID, user.ShareTypeForCoinHistory).Scan(&coinHistoryTotal).Error; err != nil {
|
|
|
// http.Fail(c, "用户错误"+err.Error())
|
|
|
// return
|
|
|
// }
|
|
|
|
|
|
var cHistory []user.CoinHistory
|
|
|
dbc.DB.Where("user_id = ? and coin_type = ? and created_at between ? and ?", p.UserID, user.ShareTypeForCoinHistory, beginDate, endDate).Find(&cHistory)
|
|
|
// 组装数据
|
|
|
var list []ShareIncomeWithTime
|
|
|
for start := beginDate; endDate.After(start); start = start.AddDate(0, 0, 1) {
|
|
|
var tmpData ShareIncomeWithTime
|
|
|
tmpData.Time = formatime.NewDateFrom(start)
|
|
|
var myTempAcount tempAcount
|
|
|
|
|
|
for _, val := range cHistory {
|
|
|
if val.CreatedAt.Time.Day() == start.Day() {
|
|
|
tmpData.OrderNum++
|
|
|
dbc.DB.Model(&order.GoodsDetail{}).Select("sum(goods_amount) as amount").Where(" order_id in (?) and ass_type=0 ", val.OrderId).Scan(&myTempAcount)
|
|
|
|
|
|
tmpData.Amount = tmpData.Amount.Add(myTempAcount.Amount)
|
|
|
tmpData.HistoryIncome = tmpData.HistoryIncome.Add(val.CoinNum)
|
|
|
totalCoin = totalCoin.Add(val.CoinNum)
|
|
|
}
|
|
|
}
|
|
|
list = append(list, tmpData)
|
|
|
if start.AddDate(0, 0, 1).After(time.Now()) {
|
|
|
break
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//如果是倒序
|
|
|
if p.OrderBy == "desc" {
|
|
|
length := len(list)
|
|
|
for i := 0; i < length/2; i++ {
|
|
|
temp := list[length-1-i]
|
|
|
list[length-1-i] = list[i]
|
|
|
list[i] = temp
|
|
|
}
|
|
|
}
|
|
|
|
|
|
bs, _ := json.Marshal(IncomeFromShareResp{
|
|
|
ShareIncome: siData,
|
|
|
Date: beginDate.Format("2006-01"),
|
|
|
CoinNum: totalCoin,
|
|
|
List: list,
|
|
|
})
|
|
|
beego.Info(string(bs))
|
|
|
|
|
|
back.Suc(c, "操作成功", IncomeFromShareResp{
|
|
|
ShareIncome: siData,
|
|
|
Date: beginDate.Format("2006-01"),
|
|
|
CoinNum: totalCoin,
|
|
|
List: list,
|
|
|
})
|
|
|
}
|
|
|
|
|
|
// IncomeFromTeamReq 团队收益 二级页面
|
|
|
type IncomeFromTeamReq struct {
|
|
|
UserID uint `json:"userId" validate:"numeric"`
|
|
|
Date string `json:"date" validate:"len=7"`
|
|
|
OrderBy string `json:"orderBy" validate:"omitempty,oneof=asc desc"`
|
|
|
}
|
|
|
|
|
|
type IncomeFromTeamResp struct {
|
|
|
TeamIncomeSub TeamIncomeSub `json:"teamIncome"`
|
|
|
Date string `json:"date"`
|
|
|
IncomeDetail user.RecookUserBenefit `json:"incomeDetail"`
|
|
|
Billboard []billboard `json:"billboard"`
|
|
|
}
|
|
|
|
|
|
type TeamIncomeSub struct {
|
|
|
TeamAmount decimal.Decimal `json:"teamAmount"` // 团队销售额
|
|
|
HistoryIncome decimal.Decimal `json:"historyIncome"` // 累计收益
|
|
|
MemberNum int `json:"memberNum"` // 团队成员
|
|
|
}
|
|
|
|
|
|
type billboard struct {
|
|
|
UserId uint `json:"userId"`
|
|
|
HeadImgUrl string `json:"headImgUrl"`
|
|
|
Username string `json:"username"`
|
|
|
Mobile string `json:"mobile"`
|
|
|
RoleLevel int `json:"roleLevel"`
|
|
|
Amount decimal.Decimal `json:"amount"`
|
|
|
}
|
|
|
|
|
|
func IncomeFromTeam(c *gin.Context) {
|
|
|
var p IncomeFromTeamReq
|
|
|
err := tools.ParseParams(&p, c)
|
|
|
if err != nil {
|
|
|
back.Fail(c, err.Error())
|
|
|
return
|
|
|
}
|
|
|
|
|
|
//p.UserID = 13
|
|
|
|
|
|
var beginDate, endDate time.Time
|
|
|
if len(p.Date) != 7 {
|
|
|
beginDate = comFunc.GetTheFirstDayOfMonth(time.Now().AddDate(0, -1, 0))
|
|
|
endDate = comFunc.GetTheFirstDayOfMonth(time.Now())
|
|
|
} else {
|
|
|
beginDate, err = time.Parse("2006-01", p.Date)
|
|
|
if err != nil {
|
|
|
back.Fail(c, "date error:"+err.Error())
|
|
|
return
|
|
|
}
|
|
|
if beginDate.After(time.Now().AddDate(0, -1, 0)) {
|
|
|
back.Fail(c, "未到结算时间")
|
|
|
return
|
|
|
}
|
|
|
endDate = beginDate.AddDate(0, 1, 0)
|
|
|
}
|
|
|
|
|
|
juniors := tree.GetTheJuniorUsers(p.UserID)
|
|
|
|
|
|
var tiData TeamIncomeSub
|
|
|
var tiDataTmp TeamIncome
|
|
|
if res, ok := cache.GetTmpData(p.UserID, cache.TmpTeamType); !ok {
|
|
|
tiDataTmp = teamIncomeData(p.UserID, juniors)
|
|
|
tiData.HistoryIncome = tiDataTmp.OrderNum //这个是销售额
|
|
|
tiData.TeamAmount = tiDataTmp.Amount //这个是累计收益
|
|
|
tiData.MemberNum = tiDataTmp.HistoryIncome //这个是团队成员
|
|
|
} else {
|
|
|
err := json.Unmarshal([]byte(res), &tiDataTmp)
|
|
|
if err != nil {
|
|
|
comFunc.PrintErr("IncomeFromSelf json error:", err)
|
|
|
tiDataTmp = teamIncomeData(p.UserID, juniors)
|
|
|
}
|
|
|
tiData.HistoryIncome = tiDataTmp.OrderNum
|
|
|
tiData.TeamAmount = tiDataTmp.Amount
|
|
|
tiData.MemberNum = tiDataTmp.HistoryIncome
|
|
|
}
|
|
|
|
|
|
var userBenefit user.RecookUserBenefit
|
|
|
err = dbc.DB.Where("user_id = ? and period between ? and ?", p.UserID, beginDate, endDate).Find(&userBenefit).Error
|
|
|
|
|
|
ret := IncomeFromTeamResp{
|
|
|
TeamIncomeSub: tiData,
|
|
|
Date: beginDate.Format("2006-01"),
|
|
|
IncomeDetail: userBenefit,
|
|
|
}
|
|
|
if gin.Mode() == "debug" {
|
|
|
err = nil
|
|
|
}
|
|
|
if err == nil {
|
|
|
var bbd []billboard
|
|
|
if len(p.OrderBy) <= 0 {
|
|
|
p.OrderBy = "ASC"
|
|
|
} else {
|
|
|
|
|
|
}
|
|
|
|
|
|
dbc.DB.Model(&order.Information{}).
|
|
|
Select("`recook_user_info`.mobile, `recook_user_info`.nickname as username, `recook_user_info`.head_img_url as head_img_url, `recook_user_info`.id as user_id, SUM(actual_total_amount + coin_total_amount) as amount").
|
|
|
Where("status=4 and user_id IN (?) and pay_time >= ? and pay_time < ? ", juniors, beginDate, endDate).
|
|
|
Joins("left join `recook_user_info` on `recook_user_info`.id = `recook_order_info`.user_id").
|
|
|
Joins("left join `recook_user_rbac_role` on `recook_user_info`.role_id = `recook_user_rbac_role`.id").
|
|
|
Group("`recook_order_info`.user_id").Order("amount " + p.OrderBy).Limit(50).Scan(&bbd)
|
|
|
ret.Billboard = bbd
|
|
|
} else if err == gorm.ErrRecordNotFound {
|
|
|
|
|
|
} else {
|
|
|
back.Fail(c, "操作失败")
|
|
|
return
|
|
|
}
|
|
|
ret.IncomeDetail.Percent = ret.IncomeDetail.Percent.Mul(decimal.NewFromInt(100))
|
|
|
back.Suc(c, "操作成功", &ret)
|
|
|
|
|
|
}
|