Merge branch 'su'

This commit is contained in:
苏尹岚
2019-10-31 13:34:52 +08:00
3 changed files with 127 additions and 33 deletions

View File

@@ -1,12 +1,71 @@
package report package report
import ( import (
"errors"
"fmt"
"math"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
"git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/business/model/dao"
) )
var (
storeIDsExist []int
storeIDsNotExist []int
StatisticsForOrdersExists *dao.StatisticsForOrdersExists
StatisticsForOrdersExistsStore *dao.StatisticsForOrdersExists
)
func GetStatisticsReportForOrders(ctx *jxcontext.Context, storeIDs []int, fromDate string, toDate string) (statisticsReportForOrdersList []*dao.StatisticsReportForOrdersList, err error) { func GetStatisticsReportForOrders(ctx *jxcontext.Context, storeIDs []int, fromDate string, toDate string) (statisticsReportForOrdersList []*dao.StatisticsReportForOrdersList, err error) {
storeIDsExist = storeIDsExist[0:0]
storeIDsNotExist = storeIDsNotExist[0:0]
db := dao.GetDB() db := dao.GetDB()
statisticsReportForOrdersList, err = dao.GetStatisticsReportForOrders(db, storeIDs, fromDate, toDate) fromDateParm := utils.Str2Time(fromDate)
toDateParm := utils.Str2Time(toDate)
//若时间间隔大于3个月则不允许查询
if math.Ceil(toDateParm.Sub(fromDateParm).Hours()/24) > 92 {
return nil, errors.New(fmt.Sprintf("查询间隔时间不允许大于3个月: 时间范围:[%v] 至 [%v]", fromDate, toDate))
}
//若入参中不存在的店则不显示存在的店但无订单的显示0
for _, id := range storeIDs {
StatisticsForOrdersExistsStore, err = dao.IsStoreExist(db, id)
if StatisticsForOrdersExistsStore == nil {
continue
}
StatisticsForOrdersExists, err = dao.GetStatisticsForOrdersExist(db, id)
//若该门店存在此查询条件范围内的订单
if StatisticsForOrdersExists != nil {
storeIDsExist = append(storeIDsExist, id)
} else {
storeIDsNotExist = append(storeIDsNotExist, id)
}
}
statisticsReportForOrdersList, err = dao.GetStatisticsReportForOrders(db, storeIDsExist, fromDateParm, toDateParm)
if storeIDsNotExist != nil {
for _, v := range storeIDsNotExist {
tempStruct1 := &dao.StatisticsForOrdersExists{
StoreID: v,
}
tempStruct2 := &dao.StatisticsReportForOrdersList{
StatisticsForOrdersExists: *tempStruct1,
OrderCounts: 0,
SalePrice: 0,
ActualPayPrice: 0,
ShopPrice: 0,
DiscountMoney: 0,
DesiredFee: 0,
DistanceFreightMoney: 0,
WaybillTipMoney: 0,
TotalShopMoney: 0,
PmSubsidyMoney: 0,
EarningPrice: 0,
TotalGrossProfit: 0,
ComGrossProfit: 0,
CityManagerGrossProfit: 0,
}
statisticsReportForOrdersList = append(statisticsReportForOrdersList, tempStruct2)
}
}
return statisticsReportForOrdersList, err return statisticsReportForOrdersList, err
} }

View File

@@ -1,38 +1,76 @@
package dao package dao
import ( import (
"fmt"
"strconv" "strconv"
"time"
"git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model"
) )
type StatisticsReportForOrdersList struct { type StatisticsForOrdersExists struct {
StoreID int StoreID int `orm:"column(storeID)" json:"storeID"`
orderCounts int
salePrice int64
actualPayPrice int64
shopPrice int64
discountMoney int64
desiredFee int64
distanceFreightMoney int64
waybillTipMoney int64
totalShopMoney int64
pmSubsidyMoney int64
EarningPrice int64
totalGrossProfit int64
comGrossProfit float32
cityManagerGrossProfit float32
} }
func GetStatisticsReportForOrders(db *DaoDB, storeIDs []int, fromDate string, toDate string) (statisticsReportForOrdersList []*StatisticsReportForOrdersList, err error) { type StatisticsReportForOrdersList struct {
StatisticsForOrdersExists
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 IsStoreExist(db *DaoDB, storeID int) (StatisticsForOrdersExists *StatisticsForOrdersExists, err error) {
sql := `
SELECT *
FROM store
WHERE id = ?
`
sqlParams := []interface{}{}
sqlParams = append(sqlParams, storeID)
if err = GetRow(db, &StatisticsForOrdersExists, sql, sqlParams...); err == nil {
return StatisticsForOrdersExists, nil
}
return nil, err
}
//查询条件内是否存在订单
func GetStatisticsForOrdersExist(db *DaoDB, storeID int) (StatisticsForOrdersExists *StatisticsForOrdersExists, err error) {
sql := `
SELECT store_id
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.store_id = ?
GROUP BY a.store_id
`
sqlParams := []interface{}{}
sqlParams = append(sqlParams, storeID)
if err = GetRow(db, &StatisticsForOrdersExists, sql, sqlParams...); err == nil {
return StatisticsForOrdersExists, nil
}
return nil, err
}
//查询统计订单信息
func GetStatisticsReportForOrders(db *DaoDB, storeIDs []int, fromDate time.Time, toDate time.Time) (statisticsReportForOrdersList []*StatisticsReportForOrdersList, err error) {
//排除已取消的订单 //排除已取消的订单
status := strconv.Itoa(model.OrderStatusCanceled) status := strconv.Itoa(model.OrderStatusCanceled)
sql := ` sql := `
SELECT s.*, SELECT s.*,
(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,totalGrossProfit,(totalGrossProfit*c.jx_brand_fee_factor)/(c.jx_brand_fee_factor+market_add_fee_factor)) comGrossProfit,
(totalGrossProfit*c.market_add_fee_factor)/(c.jx_brand_fee_factor+market_add_fee_factor) cityManagerGrossProfit 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,( FROM store c,(
SELECT SELECT
a.store_id storeID, a.store_id storeID,
@@ -52,16 +90,14 @@ func GetStatisticsReportForOrders(db *DaoDB, storeIDs []int, fromDate string, to
WHERE a.status != ` + status + ` WHERE a.status != ` + status + `
` `
sqlParams := []interface{}{} sqlParams := []interface{}{}
if fromDate != "" { if !utils.IsTimeZero(fromDate) && !utils.IsTimeZero(toDate) {
sql += "AND a.order_created_at >= date_format(?,'YYYY-MM-DD HH:MM:SS')" sql += `AND a.order_created_at BETWEEN ? and ?
sqlParams = append(sqlParams, utils.Str2Time(fromDate)) `
} sqlParams = append(sqlParams, fromDate, toDate)
if toDate != "" {
sql += "AND a.order_created_at <= date_format(?,'YYYY-MM-DD HH:MM:SS')"
sqlParams = append(sqlParams, utils.Str2Time(toDate))
} }
if len(storeIDs) > 0 { if len(storeIDs) > 0 {
sql += "AND a.store_id in(" + GenQuestionMarks(len(storeIDs)) + ")" sql += `AND a.store_id in(` + GenQuestionMarks(len(storeIDs)) + `)
`
sqlParams = append(sqlParams, storeIDs) sqlParams = append(sqlParams, storeIDs)
} }
sql += ` sql += `
@@ -69,7 +105,6 @@ func GetStatisticsReportForOrders(db *DaoDB, storeIDs []int, fromDate string, to
)s )s
WHERE s.storeID = c.id WHERE s.storeID = c.id
` `
fmt.Println(sql)
if err = GetRows(db, &statisticsReportForOrdersList, sql, sqlParams...); err == nil { if err = GetRows(db, &statisticsReportForOrdersList, sql, sqlParams...); err == nil {
return statisticsReportForOrdersList, nil return statisticsReportForOrdersList, nil
} }

View File

@@ -13,10 +13,10 @@ type ReportController struct {
// @Title 查询订单统计信息 // @Title 查询订单统计信息
// @Description 根据门店idlist和时间范围查询 // @Description 根据门店idlist和时间范围查询
// @Param token header string true "认证token" // @Param token header string true "认证token"
// @Param storeIDs formData string true "京西门店ID列表[1,2,3]" // @Param storeIDs formData string true "京西门店ID列表[1,2,3]"
// @Param FromDate formData string false "开始日期包含格式2006-01-02 00:00:00)" // @Param fromDate formData string true "开始日期包含格式2006-01-02 00:00:00)"
// @Param ToDate formData string false "结束日期包含格式2006-01-02 00:00:00)" // @Param toDate formData string true "结束日期包含格式2006-01-02 00:00:00)"
// @Success 200 {object} controllers.CallResult // @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult
// @router /StatisticsReportForOrders [post] // @router /StatisticsReportForOrders [post]