This commit is contained in:
邹宗楠
2023-08-15 13:34:00 +08:00
parent 2967968c32
commit 5a0b2dae29
3 changed files with 64 additions and 211 deletions

View File

@@ -867,217 +867,35 @@ func (c *OrderManager) GetStoresOrderSaleInfo(ctx *jxcontext.Context, storeIDLis
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
func (c *OrderManager) GetStoresOrderSaleInfo2(ctx *jxcontext.Context, fromTime time.Time, toTime time.Time, storeId int) (map[string]interface{}, error) {
year, month, day := time.Now().Date()
if fromTime.IsZero() {
fromTime = time.Date(year, month, day, 0, 0, 0, 0, time.Local)
}
if toTime.IsZero() {
toTime = time.Date(year, month, day, 23, 59, 59, 0, time.Local)
}
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) // 所有订单
// 门店统计
storeStatus, err := dao.StatisticsStoreInfo(db)
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)
// 订单统计
orderStatus, err := dao.StatisticsOrderInfo(db, fromTime, toTime, storeId)
if err != nil {
return nil, err
}
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
// 售后单统计
afsOrderStatus, err := dao.StatisticsAfsOrderInfo(db, fromTime, toTime, storeId)
if err != nil {
return nil, err
}
_, _, 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
return map[string]interface{}{"storeStatus": storeStatus, "orderStatus": orderStatus, "afsOrderStatus": afsOrderStatus}, nil
}
func (c *OrderManager) GetStoresOrderSaleInfoNew(ctx *jxcontext.Context, storeIDList []int, fromTime time.Time, toTime time.Time, statusList []int) (saleInfoList []*dao.StoresOrderSaleInfo, err error) {

View File

@@ -1693,17 +1693,55 @@ func GetStoreBaseByVendorStoreID(vendorStoreID string, vendorID int) (storeDetai
}
type StatisticsStore struct {
Count int64 `json:"count"` // 条数
Status int `json:"status"` // 状态
Count int `json:"count"` // 条数
Status int `json:"status"` // 状态
}
// StatisticsStoreInfo 统计所有的门店信息
func StatisticsStoreInfo() ([]*StatisticsStore, error) {
func StatisticsStoreInfo(db *DaoDB) ([]*StatisticsStore, error) {
statistics := make([]*StatisticsStore, 0, 0)
sql := ` select count(s.status) , s.status from store s GROUP BY s.status `
if err := GetRows(GetDB(), &statistics, sql, nil); err != nil {
sql := ` SELECT count(s.status) count, s.status FROM store s GROUP BY s.status `
if err := GetRows(db, &statistics, sql, nil); err != nil {
return nil, err
}
return statistics, nil
}
type StatisticsOrder struct {
Count int `json:"count"` // 条数
Status int `json:"status"` // 状态
TotalShopMoney int `json:"total_shop_money"` // 订单金额
}
// StatisticsOrderInfo 统计订单信息
func StatisticsOrderInfo(db *DaoDB, startTime, endTime time.Time, storeId int) ([]*StatisticsOrder, error) {
sql := ` SELECT count(g.vendor_order_id) count,g.status status ,sum(g.total_shop_money) total_shop_money FROM goods_order g WHERE g.order_created_at >= ? AND g.order_created_at <= ? `
parma := []interface{}{startTime, endTime}
if storeId != model.NO {
sql += ` AND IF(g.store_id <> 0,g.store_id,g.jx_store_id) = ?`
parma = append(parma, storeId)
}
sql += ` GROUP BY g.status `
orderStatistics := make([]*StatisticsOrder, 0, 0)
if err := GetRows(GetDB(), &orderStatistics, sql, parma...); err != nil {
return nil, err
}
return orderStatistics, nil
}
// StatisticsAfsOrderInfo 售后单信息统计
func StatisticsAfsOrderInfo(db *DaoDB, startTime, endTime time.Time, storeId int) ([]*StatisticsOrder, error) {
sql := `SELECT count(a.vendor_order_id) count,a.status status ,sum(a.afs_total_shop_money) total_shop_money FROM afs_order a WHERE a.afs_created_at >= ? AND a.afs_created_at <= ? `
parma := []interface{}{startTime, endTime}
if storeId != model.NO {
sql += ` AND IF(a.store_id <> 0,a.store_id,a.jx_store_id) = 100743`
parma = append(parma, storeId)
}
sql += ` GROUP BY a.status`
orderStatistics := make([]*StatisticsOrder, 0, 0)
if err := GetRows(GetDB(), &orderStatistics, sql, parma...); err != nil {
return nil, err
}
return orderStatistics, nil
}

View File

@@ -484,7 +484,7 @@ func (c *OrderController) GetStoresOrderSaleInfo() {
// @Param token header string true "认证token"
// @Param fromTime query string true "起始时间"
// @Param toTime query string true "结束时间"
// @Param statuss query string false "订单状态列表[1,2,3],缺省不限制"
// @Param storeIDs query int false "门店id"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /StaleIndexInfo [get]
@@ -492,10 +492,7 @@ func (c *OrderController) StaleIndexInfo() {
c.callStaleIndexInfo(func(params *tOrderStaleIndexInfoParams) (retVal interface{}, code string, err error) {
timeList, err := jxutils.BatchStr2Time(params.FromTime, params.ToTime)
if err == nil {
var statusList []int
if err = jxutils.Strings2Objs(params.Statuss, &statusList); err == nil {
retVal, err = orderman.FixedOrderManager.GetStoresOrderSaleInfo2(params.Ctx, timeList[0], timeList[1], statusList)
}
retVal, err = orderman.FixedOrderManager.GetStoresOrderSaleInfo2(params.Ctx, timeList[0], timeList[1], params.StoreIDs)
}
return retVal, "", err
})