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 }