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.
129 lines
4.3 KiB
129 lines
4.3 KiB
6 months ago
|
package service
|
||
|
|
||
|
import (
|
||
|
"bkb-seller/global"
|
||
|
"bkb-seller/model"
|
||
|
"bkb-seller/model/request"
|
||
|
"errors"
|
||
|
"gorm.io/gorm"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
func getDtStatisticsOrderDB(info *request.Statistic) *gorm.DB {
|
||
|
db := global.MG_DB.Model(&model.DtStatisticOrder{}).Where("`type` = ?", info.T)
|
||
|
if len(info.Values) != 0 {
|
||
|
db = db.Where("`value` IN (?)", info.Values)
|
||
|
}
|
||
|
if info.Unit != "" {
|
||
|
db = db.Where("`unit` = ?", info.Unit)
|
||
|
}
|
||
|
if info.RelationId != "" {
|
||
|
db = db.Where("`relation_id` = ?", info.RelationId)
|
||
|
}
|
||
|
return db
|
||
|
}
|
||
|
|
||
|
func getStatisticOrderSum(info *request.Statistic, fields ...string) (model.Statistic, error) {
|
||
|
var (
|
||
|
err error
|
||
|
selectSql string
|
||
|
result model.Statistic
|
||
|
)
|
||
|
db := getDtStatisticsOrderDB(info)
|
||
|
for _, field := range fields {
|
||
|
switch field {
|
||
|
case "value":
|
||
|
if len(info.Values) == 1 {
|
||
|
selectSql += "`value`,"
|
||
|
}
|
||
|
case "relation_id":
|
||
|
selectSql += "relation_id,"
|
||
|
case "new_order_num":
|
||
|
selectSql += "SUM(new_order_num) as new_order_num,"
|
||
|
case "new_order_money":
|
||
|
selectSql += "SUM(new_order_money) as new_order_money,"
|
||
|
case "order_num":
|
||
|
selectSql += "SUM(order_num) as order_num,"
|
||
|
case "order_done_num":
|
||
|
selectSql += "SUM(order_done_num) as order_done_num,"
|
||
|
case "order_money":
|
||
|
selectSql += "SUM(order_money) as order_money,"
|
||
|
case "settle_reward":
|
||
|
selectSql += "SUM(settle_reward) as settle_reward,"
|
||
|
case "transit_reward":
|
||
|
selectSql += "SUM(transit_reward) as transit_reward,"
|
||
|
case "order_cancel_num":
|
||
|
selectSql += "SUM(order_cancel_num) as order_cancel_num,"
|
||
|
case "order_cancel_money":
|
||
|
selectSql += "SUM(order_cancel_money) as order_cancel_money,"
|
||
|
case "sale_volume":
|
||
|
selectSql += "SUM(sale_volume) as sale_volume,"
|
||
|
default:
|
||
|
selectSql = ""
|
||
|
break
|
||
|
}
|
||
|
}
|
||
|
if selectSql == "" {
|
||
|
return result, errors.New("fields is error")
|
||
|
} else {
|
||
|
if strings.HasSuffix(selectSql, ",") {
|
||
|
selectSql = strings.TrimRight(selectSql, ",")
|
||
|
}
|
||
|
}
|
||
|
err = db.Select(selectSql).Scan(&result).Error
|
||
|
if err != nil {
|
||
|
return result, err
|
||
|
}
|
||
|
//for _, field := range fields {
|
||
|
// switch field {
|
||
|
// case "value":
|
||
|
// if len(info.Values) == 1 {
|
||
|
// result["value"] = statistic.Value
|
||
|
// }
|
||
|
// case "relation_id":
|
||
|
// result["relation_id"] = statistic.RelationId
|
||
|
// case "new_order_num":
|
||
|
// result["new_order_num"] = fmt.Sprintf("%v", statistic.NewOrderNum)
|
||
|
// case "new_order_money":
|
||
|
// result["new_order_money"] = fmt.Sprintf("%.2f", statistic.NewOrderMoney)
|
||
|
// case "order_num":
|
||
|
// result["order_num"] = fmt.Sprintf("%v", statistic.OrderNum)
|
||
|
// case "order_done_num":
|
||
|
// result["order_done_num"] = fmt.Sprintf("%v", statistic.OrderDoneNum)
|
||
|
// case "order_money":
|
||
|
// result["order_money"] = fmt.Sprintf("%.2f", statistic.OrderMoney)
|
||
|
// case "settle_reward":
|
||
|
// result["settle_reward"] = fmt.Sprintf("%.2f", statistic.SettleReward)
|
||
|
// case "transit_reward":
|
||
|
// result["transit_reward"] = fmt.Sprintf("%.2f", statistic.TransitReward)
|
||
|
// case "order_cancel_num":
|
||
|
// result["order_cancel_num"] = fmt.Sprintf("%v", statistic.NewOrderNum)
|
||
|
// case "order_cancel_money":
|
||
|
// result["order_cancel_money"] = fmt.Sprintf("%.2f", statistic.OrderCancelMoney)
|
||
|
// case "sale_volume":
|
||
|
// result["sale_volume"] = fmt.Sprintf("%v", statistic.SaleVolume)
|
||
|
// }
|
||
|
//}
|
||
|
return result, err
|
||
|
}
|
||
|
|
||
|
func getStatisticsOrderSkus(skuNos []string, unit string, timeArea []string) (map[string]model.DtStatisticOrder, error) {
|
||
|
var (
|
||
|
err error
|
||
|
list []model.DtStatisticOrder
|
||
|
result = make(map[string]model.DtStatisticOrder)
|
||
|
)
|
||
|
db := global.MG_DB.Model(&model.DtStatisticOrder{}).Where("dt_statistic_order.`type` = 4 AND dt_statistic_order.relation_id IN (?) AND dt_statistic_order.`unit` = ?", skuNos, unit)
|
||
|
if len(timeArea) == 2 {
|
||
|
db = db.Where("dt_statistic_order.created_at >= ? AND dt_statistic_order.created_at < ?", timeArea[0], timeArea[1])
|
||
|
}
|
||
|
err = db.Select("dt_statistic_order.relation_id,SUM(order_num) as order_num,SUM(order_done_num) as order_done_num,SUM(order_money) as order_money,SUM(sale_volume) as sale_volume,SUM(settle_reward) as settle_reward,SUM(order_cancel_num) as order_cancel_num,SUM(order_cancel_money) as order_cancel_money").Group("dt_statistic_order.relation_id").Find(&list).Error
|
||
|
if err != nil {
|
||
|
return result, err
|
||
|
}
|
||
|
for _, statisticOrder := range list {
|
||
|
result[statisticOrder.RelationId] = statisticOrder
|
||
|
}
|
||
|
return result, nil
|
||
|
}
|