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

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
}