+ GetStoresOrderSaleInfoNew
This commit is contained in:
@@ -775,7 +775,105 @@ 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) {
|
func (c *OrderManager) GetStoresOrderSaleInfo(ctx *jxcontext.Context, storeIDList []int, fromTime time.Time, toTime time.Time, statusList []int) (saleInfoList []*dao.StoresOrderSaleInfo, err error) {
|
||||||
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) GetStoresOrderSaleInfoNew(ctx *jxcontext.Context, storeIDList []int, fromTime time.Time, toTime time.Time, statusList []int) (saleInfoList []*dao.StoresOrderSaleInfo, err error) {
|
||||||
|
db := dao.GetDB()
|
||||||
|
orderSkuList, err := dao.GetStoreOrderSkuList(db, storeIDList, fromTime, toTime, statusList)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
afsSkuList, err := dao.GetStoreAfsOrderSkuList(db, storeIDList, fromTime, toTime, []int{model.AfsOrderStatusFinished})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
orderMap := make(map[string]*model.GoodsOrder)
|
||||||
|
orderSkuMap := make(map[string]*dao.OrderSkuWithActualPayPrice)
|
||||||
|
saleInfoMap := make(map[int64]*dao.StoresOrderSaleInfo)
|
||||||
|
for _, v := range orderSkuList {
|
||||||
|
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{}
|
||||||
|
saleInfoMap[index] = saleInfo
|
||||||
|
}
|
||||||
|
saleInfo.ShopPrice += v.ShopPrice
|
||||||
|
saleInfo.VendorPrice += v.VendorPrice
|
||||||
|
saleInfo.SalePrice += v.SalePrice
|
||||||
|
saleInfo.EarningPrice += v.EarningPrice
|
||||||
|
|
||||||
|
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++
|
||||||
|
}
|
||||||
|
orderMap[universalOrderID].SkuCount += v.Count
|
||||||
|
|
||||||
|
universalOrderSkuID := universalOrderID + "/" + utils.Int2Str(jxutils.GetSkuIDFromOrderSku(&v.OrderSku))
|
||||||
|
if orderSkuMap[universalOrderSkuID] == nil {
|
||||||
|
orderSkuMap[universalOrderSkuID] = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
afsOrderMap := make(map[string]*model.GoodsOrder)
|
||||||
|
for _, v := range afsSkuList {
|
||||||
|
universalOrderID := jxutils.ComposeUniversalOrderID(v.VendorOrderID, v.VendorID)
|
||||||
|
order := afsOrderMap[universalOrderID]
|
||||||
|
if order == nil {
|
||||||
|
order = &model.GoodsOrder{
|
||||||
|
StoreID: v.JxStoreID,
|
||||||
|
VendorID: v.VendorID,
|
||||||
|
}
|
||||||
|
if order.StoreID == 0 {
|
||||||
|
order.StoreID = v.StoreID
|
||||||
|
}
|
||||||
|
afsOrderMap[universalOrderID] = order
|
||||||
|
}
|
||||||
|
order.SkuCount += v.Count
|
||||||
|
|
||||||
|
universalOrderSkuID := universalOrderID + "/" + utils.Int2Str(jxutils.GetSkuIDFromOrderSkuFinancial(v))
|
||||||
|
if orderSku := orderSkuMap[universalOrderSkuID]; orderSku != nil {
|
||||||
|
order.EarningPrice += orderSku.EarningPrice
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for universalOrderID, v := range afsOrderMap {
|
||||||
|
if orderMap[universalOrderID] != nil {
|
||||||
|
if orderMap[universalOrderID].SkuCount == v.SkuCount {
|
||||||
|
v.EarningPrice = orderMap[universalOrderID].ActualPayPrice
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
index := jxutils.Combine2Int(v.StoreID, v.VendorID)*1000 + -1
|
||||||
|
saleInfo := saleInfoMap[index]
|
||||||
|
if saleInfo == nil {
|
||||||
|
saleInfo = &dao.StoresOrderSaleInfo{}
|
||||||
|
saleInfoMap[index] = saleInfo
|
||||||
|
}
|
||||||
|
saleInfo.ActualPayPrice += v.ActualPayPrice
|
||||||
|
saleInfo.Count += v.SkuCount
|
||||||
|
}
|
||||||
|
for _, v := range saleInfoMap {
|
||||||
|
saleInfoList = append(saleInfoList, v)
|
||||||
|
}
|
||||||
|
return saleInfoList, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *OrderManager) GetAfsOrders(ctx *jxcontext.Context, keyword, afsOrderID, vendorOrderID string, vendorIDList, appealTypeList, storeIDList, statusList []int, fromTime, toTime time.Time, offset, pageSize int) (pagedInfo *model.PagedInfo, err error) {
|
func (c *OrderManager) GetAfsOrders(ctx *jxcontext.Context, keyword, afsOrderID, vendorOrderID string, vendorIDList, appealTypeList, storeIDList, statusList []int, fromTime, toTime time.Time, offset, pageSize int) (pagedInfo *model.PagedInfo, err error) {
|
||||||
|
|||||||
@@ -25,6 +25,17 @@ type StoresOrderSaleInfo struct {
|
|||||||
EarningPrice int64 `json:"earningPrice"` // 预估结算给门店老板的钱
|
EarningPrice int64 `json:"earningPrice"` // 预估结算给门店老板的钱
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type OrderSkuWithActualPayPrice struct {
|
||||||
|
model.OrderSku
|
||||||
|
|
||||||
|
ActualPayPrice int64 `json:"actualPayPrice"` // 单位为分 顾客实际支付
|
||||||
|
|
||||||
|
StoreID int `orm:"column(store_id)" json:"storeID"` // 外部系统里记录的 jxstoreid
|
||||||
|
Status int `json:"status"` // 参见OrderStatus*相关的常量定义
|
||||||
|
|
||||||
|
PayPercentage int `json:"payPercentage"`
|
||||||
|
}
|
||||||
|
|
||||||
func QueryOrders(db *DaoDB, vendorIDs []int, storeID int, orderCreatedAtBegin, orderCreatedAtEnd time.Time) (orderList []*model.GoodsOrder, err error) {
|
func QueryOrders(db *DaoDB, vendorIDs []int, storeID int, orderCreatedAtBegin, orderCreatedAtEnd time.Time) (orderList []*model.GoodsOrder, err error) {
|
||||||
sql := `
|
sql := `
|
||||||
SELECT t1.*
|
SELECT t1.*
|
||||||
@@ -214,3 +225,45 @@ func GetAfsOrderSkuInfo(db *DaoDB, vendorOrderID, afsOrderID string, vendorID in
|
|||||||
err = GetRows(db, &skus, sql, sqlParams...)
|
err = GetRows(db, &skus, sql, sqlParams...)
|
||||||
return skus, err
|
return skus, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetStoreOrderSkuList(db *DaoDB, storeIDs []int, finishedAtBegin, finishedAtEnd time.Time, statusList []int) (skuList []*OrderSkuWithActualPayPrice, err error) {
|
||||||
|
sql := `
|
||||||
|
SELECT t1.*,
|
||||||
|
t2.actual_pay_price, t2.status, IF(t2.jx_store_id > 0, t2.jx_store_id, t2.store_id) store_id,
|
||||||
|
t3.pay_percentage
|
||||||
|
FROM order_sku t1
|
||||||
|
JOIN goods_order t2 ON t2.vendor_order_id = t1.vendor_order_id AND t2.vendor_id = t1.vendor_id
|
||||||
|
LEFT JOIN store t3 ON t3.id = IF(t2.jx_store_id > 0, t2.jx_store_id, t2.store_id)
|
||||||
|
WHERE IF(t2.jx_store_id > 0, t2.jx_store_id, t2.store_id) IN (` + GenQuestionMarks(len(storeIDs)) + `) AND t2.order_finished_at >= ? AND t2.order_finished_at <= ?`
|
||||||
|
sqlParams := []interface{}{
|
||||||
|
storeIDs,
|
||||||
|
finishedAtBegin,
|
||||||
|
finishedAtEnd,
|
||||||
|
}
|
||||||
|
if len(statusList) > 0 {
|
||||||
|
sql += " AND t2.status IN (" + GenQuestionMarks(len(statusList)) + ")"
|
||||||
|
sqlParams = append(sqlParams, statusList)
|
||||||
|
}
|
||||||
|
err = GetRows(db, &skuList, sql, sqlParams...)
|
||||||
|
return skuList, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetStoreAfsOrderSkuList(db *DaoDB, storeIDs []int, finishedAtBegin, finishedAtEnd time.Time, statusList []int) (afsSkuList []*model.OrderSkuFinancial, err error) {
|
||||||
|
sql := `
|
||||||
|
SELECT t1.*
|
||||||
|
FROM order_sku_financial t1
|
||||||
|
JOIN afs_order t2 ON t2.vendor_order_id = t1.vendor_order_id AND t2.vendor_id = t1.vendor_id
|
||||||
|
WHERE t1.is_afs_order = 1
|
||||||
|
AND IF(t2.jx_store_id > 0, t2.jx_store_id, t2.store_id) IN (` + GenQuestionMarks(len(storeIDs)) + `) AND t2.afs_finished_at >= ? AND t2.afs_finished_at <= ?`
|
||||||
|
sqlParams := []interface{}{
|
||||||
|
storeIDs,
|
||||||
|
finishedAtBegin,
|
||||||
|
finishedAtEnd,
|
||||||
|
}
|
||||||
|
if len(statusList) > 0 {
|
||||||
|
sql += " AND t2.status IN (" + GenQuestionMarks(len(statusList)) + ")"
|
||||||
|
sqlParams = append(sqlParams, statusList)
|
||||||
|
}
|
||||||
|
err = GetRows(db, &afsSkuList, sql, sqlParams...)
|
||||||
|
return afsSkuList, err
|
||||||
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package dao
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
"git.rosy.net.cn/jx-callback/globals"
|
"git.rosy.net.cn/jx-callback/globals"
|
||||||
@@ -23,3 +24,18 @@ func TestGetAfsOrderSkuInfo(t *testing.T) {
|
|||||||
}
|
}
|
||||||
globals.SugarLogger.Debug(utils.Format4Output(afsSkus, false))
|
globals.SugarLogger.Debug(utils.Format4Output(afsSkus, false))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGetStoreOrderSkuList(t *testing.T) {
|
||||||
|
skuList, err := GetStoreOrderSkuList(GetDB(), []int{100118}, time.Now().Add(-30*time.Hour), time.Now(), nil)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
t.Log(utils.Format4Output(skuList, false))
|
||||||
|
|
||||||
|
afsSkuList, err := GetStoreOrderSkuList(GetDB(), []int{100118}, time.Now().Add(-30*time.Hour), time.Now(), nil)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
t.Log(utils.Format4Output(afsSkuList, false))
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user