|
|
|
|
@@ -861,12 +861,225 @@ func (c *OrderManager) GetOrdersFinancial(ctx *jxcontext.Context, fromDateStr, t
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (c *OrderManager) GetStoresOrderSaleInfo(ctx *jxcontext.Context, storeIDList []int, fromTime time.Time, toTime time.Time, statusList []int) (saleInfoList []*dao.StoresOrderSaleInfo, err error) {
|
|
|
|
|
// if globals.IsProductEnv() {
|
|
|
|
|
// return dao.GetStoresOrderSaleInfo(dao.GetDB(), storeIDList, fromTime, toTime, statusList)
|
|
|
|
|
// }
|
|
|
|
|
//if globals.IsProductEnv() {
|
|
|
|
|
// return dao.GetStoresOrderSaleInfo(dao.GetDB(), storeIDList, fromTime, toTime, statusList)
|
|
|
|
|
//}
|
|
|
|
|
return c.GetStoresOrderSaleInfoNew(ctx, storeIDList, fromTime, toTime, statusList)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (c *OrderManager) GetStoresOrderSaleInfo2(ctx *jxcontext.Context, fromTime time.Time, toTime time.Time, statusList []int) (map[string]interface{}, error) {
|
|
|
|
|
storeStatus, err := dao.StatisticsStoreInfo()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
orderStatus, err := c.GetOrderStatistics(ctx, nil, fromTime, toTime, statusList)
|
|
|
|
|
return map[string]interface{}{"storeStatus": storeStatus, "orderStatus": orderStatus}, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (c *OrderManager) GetOrderStatistics(ctx *jxcontext.Context, storeIDList []int, fromTime time.Time, toTime time.Time, statusList []int) (saleInfoList []*dao.StoresOrderSaleInfo, err error) {
|
|
|
|
|
db := dao.GetDB()
|
|
|
|
|
var isLongTime = false
|
|
|
|
|
if toTime.Sub(fromTime).Hours() > 24 {
|
|
|
|
|
isLongTime = true
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
orderIDMap := make(map[string]struct{})
|
|
|
|
|
var vendorOrderIDs []string
|
|
|
|
|
orderSkuList, err := dao.GetStoreOrderSkuList(db, storeIDList, fromTime, toTime, nil, true, 0) // 所有订单
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
for _, v := range orderSkuList {
|
|
|
|
|
orderIDMap[v.VendorOrderID] = struct{}{}
|
|
|
|
|
}
|
|
|
|
|
for k, _ := range orderIDMap {
|
|
|
|
|
vendorOrderIDs = append(vendorOrderIDs, k)
|
|
|
|
|
}
|
|
|
|
|
var afsSkuList []*model.OrderSkuFinancial
|
|
|
|
|
var orderSkuList4Afs []*dao.OrderSkuWithActualPayPrice
|
|
|
|
|
if len(vendorOrderIDs) > 0 {
|
|
|
|
|
afsSkuList, err = dao.GetStoreAfsOrderSkuList2(db, vendorOrderIDs)
|
|
|
|
|
orderSkuList4Afs, err = dao.GetStoreOrderSkuList4Afs2(db, vendorOrderIDs)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
orderSkuHandler := func(skuList []*dao.OrderSkuWithActualPayPrice) (orderMap map[string]*model.GoodsOrder, orderSkuMap map[string]*dao.OrderSkuWithActualPayPrice, saleInfoMap map[int64]*dao.StoresOrderSaleInfo) {
|
|
|
|
|
orderMap = make(map[string]*model.GoodsOrder)
|
|
|
|
|
orderSkuMap = make(map[string]*dao.OrderSkuWithActualPayPrice)
|
|
|
|
|
saleInfoMap = make(map[int64]*dao.StoresOrderSaleInfo)
|
|
|
|
|
var flagVendorOrderID string
|
|
|
|
|
if len(skuList) > 0 {
|
|
|
|
|
flagVendorOrderID = skuList[0].VendorOrderID
|
|
|
|
|
}
|
|
|
|
|
for k, v := range skuList {
|
|
|
|
|
storeDetail, _ := dao.GetStoreDetail(db, v.StoreID, v.VendorID, "")
|
|
|
|
|
if v.EarningPrice == 0 {
|
|
|
|
|
v.EarningPrice = jxutils.CaculateSkuEarningPrice(v.ShopPrice, v.SalePrice, v.PayPercentage)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
status := v.Status
|
|
|
|
|
if status < model.OrderStatusEndBegin {
|
|
|
|
|
status = 0
|
|
|
|
|
}
|
|
|
|
|
index := jxutils.Combine2Int(v.StoreID, v.VendorID)*1000 + int64(status)
|
|
|
|
|
saleInfo := saleInfoMap[index]
|
|
|
|
|
if saleInfo == nil {
|
|
|
|
|
saleInfo = &dao.StoresOrderSaleInfo{
|
|
|
|
|
StoreID: v.StoreID,
|
|
|
|
|
VendorID: v.VendorID,
|
|
|
|
|
Status: status,
|
|
|
|
|
}
|
|
|
|
|
saleInfoMap[index] = saleInfo
|
|
|
|
|
}
|
|
|
|
|
//成都菜市
|
|
|
|
|
if beego.BConfig.RunMode == "prod" || beego.BConfig.RunMode == "beta" {
|
|
|
|
|
if v.EarningType == model.EarningTypeQuote {
|
|
|
|
|
saleInfo.RealEarningPrice += v.EarningPrice * int64(v.Count)
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if v.OrderPayPercentage == 100 {
|
|
|
|
|
saleInfo.RealEarningPrice += v.ShopPrice * int64(v.Count)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
saleInfo.ShopPrice += v.ShopPrice * int64(v.Count)
|
|
|
|
|
saleInfo.VendorPrice += v.VendorPrice * int64(v.Count)
|
|
|
|
|
saleInfo.SalePrice += v.SalePrice * int64(v.Count)
|
|
|
|
|
// saleInfo.EarningPrice += v.EarningPrice * int64(v.Count)
|
|
|
|
|
if v.VendorOrderID == flagVendorOrderID {
|
|
|
|
|
if k == 0 {
|
|
|
|
|
saleInfo.EarningPrice = v.NewEarningPrice
|
|
|
|
|
if beego.BConfig.RunMode == "prod" || beego.BConfig.RunMode == "beta" {
|
|
|
|
|
if v.EarningType == model.EarningTypePoints {
|
|
|
|
|
if storeDetail.VendorPayPercentage != 0 && !isLongTime {
|
|
|
|
|
saleInfo.RealEarningPrice += 0
|
|
|
|
|
} else {
|
|
|
|
|
saleInfo.RealEarningPrice += v.NewEarningPrice
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if v.OrderPayPercentage < 100 {
|
|
|
|
|
saleInfo.RealEarningPrice += v.NewEarningPrice
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
flagVendorOrderID = v.VendorOrderID
|
|
|
|
|
saleInfo.EarningPrice += v.NewEarningPrice
|
|
|
|
|
if beego.BConfig.RunMode == "prod" || beego.BConfig.RunMode == "beta" {
|
|
|
|
|
if v.EarningType == model.EarningTypePoints {
|
|
|
|
|
if storeDetail.VendorPayPercentage != 0 && !isLongTime {
|
|
|
|
|
saleInfo.RealEarningPrice += 0
|
|
|
|
|
} else {
|
|
|
|
|
// && v.VendorID != model.VendorIDJD && v.CityCode != 510100
|
|
|
|
|
saleInfo.RealEarningPrice += v.NewEarningPrice
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if v.OrderPayPercentage < 100 {
|
|
|
|
|
saleInfo.RealEarningPrice += v.NewEarningPrice
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
universalOrderID := jxutils.ComposeUniversalOrderID(v.VendorOrderID, v.VendorID)
|
|
|
|
|
if orderMap[universalOrderID] == nil {
|
|
|
|
|
orderMap[universalOrderID] = &model.GoodsOrder{
|
|
|
|
|
StoreID: v.StoreID,
|
|
|
|
|
VendorID: v.VendorID,
|
|
|
|
|
ActualPayPrice: v.ActualPayPrice,
|
|
|
|
|
}
|
|
|
|
|
saleInfo.ActualPayPrice += v.ActualPayPrice
|
|
|
|
|
saleInfo.Count++
|
|
|
|
|
|
|
|
|
|
saleInfo.DistanceFreightMoney += v.DistanceFreightMoney
|
|
|
|
|
saleInfo.WaybillTipMoney += v.WaybillTipMoney
|
|
|
|
|
}
|
|
|
|
|
orderMap[universalOrderID].SkuCount += v.Count
|
|
|
|
|
|
|
|
|
|
universalOrderSkuID := universalOrderID + "/" + utils.Int2Str(jxutils.GetSkuIDFromOrderSku(&v.OrderSku))
|
|
|
|
|
if orderSkuMap[universalOrderSkuID] == nil {
|
|
|
|
|
orderSkuMap[universalOrderSkuID] = v
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return orderMap, orderSkuMap, saleInfoMap
|
|
|
|
|
}
|
|
|
|
|
_, _, saleInfoMap := orderSkuHandler(orderSkuList) // 所有订单的支付金额
|
|
|
|
|
orderMap, orderSkuMap, _ := orderSkuHandler(orderSkuList4Afs)
|
|
|
|
|
|
|
|
|
|
afsOrderMap := make(map[string]*model.GoodsOrder)
|
|
|
|
|
for _, v := range afsSkuList {
|
|
|
|
|
universalOrderID := jxutils.ComposeUniversalOrderID(v.VendorOrderID, v.VendorID)
|
|
|
|
|
universalOrderSkuID := universalOrderID + "/" + utils.Int2Str(jxutils.GetSkuIDFromOrderSkuFinancial(v))
|
|
|
|
|
order := afsOrderMap[universalOrderID]
|
|
|
|
|
if order == nil {
|
|
|
|
|
order = &model.GoodsOrder{
|
|
|
|
|
StoreID: v.JxStoreID,
|
|
|
|
|
VendorID: v.VendorID,
|
|
|
|
|
}
|
|
|
|
|
if order.StoreID == 0 {
|
|
|
|
|
order.StoreID = v.StoreID
|
|
|
|
|
}
|
|
|
|
|
if orderSku := orderSkuMap[universalOrderSkuID]; orderSku != nil {
|
|
|
|
|
order.ActualPayPrice = orderSku.ActualPayPrice
|
|
|
|
|
}
|
|
|
|
|
afsOrderMap[universalOrderID] = order
|
|
|
|
|
}
|
|
|
|
|
order.SkuCount += v.Count
|
|
|
|
|
|
|
|
|
|
if orderSku := orderSkuMap[universalOrderSkuID]; orderSku != nil {
|
|
|
|
|
order.ShopPrice += orderSku.ShopPrice * int64(v.Count)
|
|
|
|
|
order.VendorPrice += orderSku.VendorPrice * int64(v.Count)
|
|
|
|
|
order.SalePrice += orderSku.SalePrice * int64(v.Count)
|
|
|
|
|
order.EarningPrice += orderSku.EarningPrice * int64(v.Count)
|
|
|
|
|
} else {
|
|
|
|
|
// globals.SugarLogger.Debug(utils.Format4Output(v, true))
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
for universalOrderID, v := range afsOrderMap {
|
|
|
|
|
if orderMap[universalOrderID] != nil && orderMap[universalOrderID].SkuCount == v.SkuCount {
|
|
|
|
|
v.EarningPrice = orderMap[universalOrderID].ActualPayPrice
|
|
|
|
|
}
|
|
|
|
|
status := -1
|
|
|
|
|
index := jxutils.Combine2Int(v.StoreID, v.VendorID)*1000 + int64(status)
|
|
|
|
|
saleInfo := saleInfoMap[index]
|
|
|
|
|
if saleInfo == nil {
|
|
|
|
|
saleInfo = &dao.StoresOrderSaleInfo{
|
|
|
|
|
StoreID: v.StoreID,
|
|
|
|
|
VendorID: v.VendorID,
|
|
|
|
|
Status: status,
|
|
|
|
|
}
|
|
|
|
|
saleInfoMap[index] = saleInfo
|
|
|
|
|
}
|
|
|
|
|
saleInfo.ActualPayPrice += v.ActualPayPrice
|
|
|
|
|
saleInfo.ShopPrice += v.ShopPrice
|
|
|
|
|
saleInfo.VendorPrice += v.VendorPrice
|
|
|
|
|
saleInfo.SalePrice += v.SalePrice
|
|
|
|
|
saleInfo.EarningPrice += v.EarningPrice
|
|
|
|
|
saleInfo.Count++
|
|
|
|
|
}
|
|
|
|
|
for _, v := range saleInfoMap {
|
|
|
|
|
if v.Status == model.OrderStatusFinished {
|
|
|
|
|
// 计算平台计算
|
|
|
|
|
settle, _ := dao.GetPlatformSettlement(db, storeIDList, fromTime, toTime)
|
|
|
|
|
for _, s := range settle {
|
|
|
|
|
if v.VendorID == s.VendorID {
|
|
|
|
|
v.PlatformSettlement = s.TotalShopMoney
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 计算三方配送
|
|
|
|
|
fee, _ := dao.GetPlatformDesiredFee(db, storeIDList, fromTime, toTime)
|
|
|
|
|
for _, f := range fee {
|
|
|
|
|
if v.VendorID == f.VendorID {
|
|
|
|
|
v.ActualFee = f.ActualFee
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
saleInfoList = append(saleInfoList, v)
|
|
|
|
|
}
|
|
|
|
|
return saleInfoList, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (c *OrderManager) GetStoresOrderSaleInfoNew(ctx *jxcontext.Context, storeIDList []int, fromTime time.Time, toTime time.Time, statusList []int) (saleInfoList []*dao.StoresOrderSaleInfo, err error) {
|
|
|
|
|
db := dao.GetDB()
|
|
|
|
|
var isLongTime = false
|
|
|
|
|
|