75 lines
3.5 KiB
Go
75 lines
3.5 KiB
Go
package dao
|
||
|
||
import (
|
||
"strconv"
|
||
"time"
|
||
|
||
"git.rosy.net.cn/baseapi/utils"
|
||
"git.rosy.net.cn/jx-callback/business/model"
|
||
)
|
||
|
||
type StatisticsReportForOrdersList struct {
|
||
StoreID int `orm:"column(storeID)" json:"storeID"`
|
||
OrderCounts int `orm:"column(orderCounts)" json:"orderCounts"` //定单数
|
||
SalePrice int `orm:"column(salePrice)" json:"salePrice"` //GMV(售卖价)
|
||
ActualPayPrice int `orm:"column(actualPayPrice)" json:"actualPayPrice"` //实付
|
||
ShopPrice int `orm:"column(shopPrice)" json:"shopPrice"` //京西
|
||
DiscountMoney int `orm:"column(discountMoney)" json:"discountMoney"` //优惠
|
||
DesiredFee int `orm:"column(desiredFee)" json:"desiredFee"` //配送费
|
||
DistanceFreightMoney int `orm:"column(distanceFreightMoney)" json:"distanceFreightMoney"` //远距离
|
||
WaybillTipMoney int `orm:"column(waybillTipMoney)" json:"waybillTipMoney"` //
|
||
TotalShopMoney int `orm:"column(totalShopMoney)" json:"totalShopMoney"`
|
||
PmSubsidyMoney int `orm:"column(pmSubsidyMoney)" json:"pmSubsidyMoney"`
|
||
EarningPrice int `orm:"column(earningPrice)" json:"earningPrice"`
|
||
TotalGrossProfit int `orm:"column(totalGrossProfit)" json:"totalGrossProfit"`
|
||
ComGrossProfit float32 `orm:"column(comGrossProfit)" json:"comGrossProfit"`
|
||
CityManagerGrossProfit float32 `orm:"column(cityManagerGrossProfit)" json:"cityManagerGrossProfit"`
|
||
}
|
||
|
||
func GetStatisticsReportForOrders(db *DaoDB, storeIDs []int, fromDate time.Time, toDate time.Time) (statisticsReportForOrdersList []*StatisticsReportForOrdersList, err error) {
|
||
//排除已取消的订单
|
||
status := strconv.Itoa(model.OrderStatusCanceled)
|
||
sql := `
|
||
SELECT s.*,
|
||
if(c.jx_brand_fee_factor = 0 AND c.market_add_fee_factor = 0,totalGrossProfit,(totalGrossProfit*c.jx_brand_fee_factor)/(c.jx_brand_fee_factor+market_add_fee_factor)) comGrossProfit,
|
||
if(c.jx_brand_fee_factor = 0 AND c.market_add_fee_factor = 0,0,(totalGrossProfit*c.market_add_fee_factor)/(c.jx_brand_fee_factor+market_add_fee_factor)) cityManagerGrossProfit
|
||
FROM store c,(
|
||
SELECT
|
||
a.store_id storeID,
|
||
count(*) orderCounts,
|
||
sum(sale_price) salePrice,
|
||
sum(actual_pay_price) actualPayPrice,
|
||
sum(shop_price) shopPrice,
|
||
sum(discount_money) discountMoney,
|
||
sum(desired_fee) desiredFee,
|
||
sum(distance_freight_money) distanceFreightMoney,
|
||
sum(waybill_tip_money) waybillTipMoney,
|
||
sum(total_shop_money) totalShopMoney,
|
||
sum(pm_subsidy_money) pmSubsidyMoney,
|
||
sum(earning_price) EarningPrice,
|
||
sum(total_shop_money-earning_price-desired_fee-distance_freight_money-waybill_tip_money-80) totalGrossProfit
|
||
FROM goods_order a LEFT JOIN waybill b on if(a.waybill_vendor_id = -1,a.vendor_order_id,a.vendor_waybill_id) = b.vendor_waybill_id
|
||
WHERE a.status != ` + status + `
|
||
`
|
||
sqlParams := []interface{}{}
|
||
if !utils.IsTimeZero(fromDate) && !utils.IsTimeZero(toDate) {
|
||
sql += `AND a.order_created_at BETWEEN ? and ?
|
||
`
|
||
sqlParams = append(sqlParams, fromDate, toDate)
|
||
}
|
||
if len(storeIDs) > 0 {
|
||
sql += `AND a.store_id in(` + GenQuestionMarks(len(storeIDs)) + `)
|
||
`
|
||
sqlParams = append(sqlParams, storeIDs)
|
||
}
|
||
sql += `
|
||
GROUP BY a.store_id
|
||
)s
|
||
WHERE s.storeID = c.id
|
||
`
|
||
if err = GetRows(db, &statisticsReportForOrdersList, sql, sqlParams...); err == nil {
|
||
return statisticsReportForOrdersList, nil
|
||
}
|
||
return nil, err
|
||
}
|