diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index 2be8b30a2..ef4278517 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -618,14 +618,52 @@ func (c *OrderManager) RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context, orderList []*model.GoodsOrder fromDateParam time.Time toDateParam time.Time + beginAt time.Time + endAt time.Time ) db := dao.GetDB() if actID > 0 { - actList, _ := dao.QueryActs(db, actID, 0, math.MaxInt32, 0, "", 0, nil, nil, nil, 0, 0, 0, time.Time{}, time.Time{}, time.Time{}, time.Time{}) - if len(actList.Data) > 0 { - orderList, _ = dao.QueryOrders(db, vendorOrderID, actID, vendorIDs, storeID, actList.Data[0].BeginAt, actList.Data[0].EndAt) + if fromDate != "" && toDate != "" { + fromDateParam = utils.Str2Time(fromDate) + toDateParam = utils.Str2Time(toDate) + actList, _ := dao.QueryActs(db, actID, 0, math.MaxInt32, 0, "", 0, nil, nil, nil, 0, 0, 0, time.Time{}, time.Time{}, time.Time{}, time.Time{}) + if len(actList.Data) > 0 { + actBeginAt := actList.Data[0].BeginAt + actEndAt := actList.Data[0].EndAt + if fromDateParam.Sub(actBeginAt) > 0 && fromDateParam.Sub(actEndAt) > 0 { + return "", errors.New(fmt.Sprintf("结算活动有效时间范围与订单创建时间范围不一致!,活动时间范围:[%v] 至 [%v] ,订单创建时间范围 :[%v] 至 [%v]", actBeginAt, actEndAt, fromDateParam, toDateParam)) + } + if actBeginAt.Sub(toDateParam) > 0 && actEndAt.Sub(toDateParam) > 0 { + return "", errors.New(fmt.Sprintf("结算活动有效时间范围与订单创建时间范围不一致!,活动时间范围:[%v] 至 [%v] ,订单创建时间范围 :[%v] 至 [%v]", actBeginAt, actEndAt, fromDateParam, toDateParam)) + } + if fromDateParam.Sub(actBeginAt) > 0 { + beginAt = fromDateParam + if toDateParam.Sub(actEndAt) > 0 { + endAt = actEndAt + } else { + endAt = toDateParam + } + } else { + beginAt = actBeginAt + if toDateParam.Sub(actEndAt) > 0 { + endAt = actEndAt + } else { + endAt = toDateParam + } + } + orderList, _ = dao.QueryOrders(db, vendorOrderID, actID, vendorIDs, storeID, beginAt, endAt) + } else { + return "", errors.New(fmt.Sprintf("未查询到相关结算活动,活动ID:[%d]", actID)) + } + } else if fromDate == "" && toDate == "" { + actList, _ := dao.QueryActs(db, actID, 0, math.MaxInt32, 0, "", 0, nil, nil, nil, 0, 0, 0, time.Time{}, time.Time{}, time.Time{}, time.Time{}) + if len(actList.Data) > 0 { + orderList, _ = dao.QueryOrders(db, vendorOrderID, actID, vendorIDs, storeID, actList.Data[0].BeginAt, actList.Data[0].EndAt) + } else { + return "", errors.New(fmt.Sprintf("未查询到相关结算活动,活动ID:[%d]", actID)) + } } else { - return "", errors.New(fmt.Sprintf("未查询到相关结算活动,活动ID:[%d]", actID)) + return "", errors.New(fmt.Sprintf("若不按活动查询则间隔时间必须完整!时间范围:[%v] 至 [%v]", fromDate, toDate)) } } else { if fromDate != "" && toDate != "" { @@ -635,7 +673,6 @@ func (c *OrderManager) RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context, if math.Ceil(toDateParam.Sub(fromDateParam).Hours()/24) > 10 { return "", errors.New(fmt.Sprintf("查询间隔时间不允许大于10天!时间范围:[%v] 至 [%v]", fromDate, toDate)) } - // orderList, _ := dao.QueryOrders(db, vendorOrderID, vendorIDs, storeID, fromDateParam, toDateParam) orderList, _ = dao.QueryOrders(db, vendorOrderID, actID, vendorIDs, storeID, fromDateParam, toDateParam) } else { return "", errors.New(fmt.Sprintf("若不按活动查询则间隔时间必须完整!时间范围:[%v] 至 [%v]", fromDate, toDate)) diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index 59a065a16..fd7e3e7ad 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -68,6 +68,26 @@ func QueryOrders(db *DaoDB, vendorOrderID string, actID int, vendorIDs []int, st b.vendor_price sku_vendor_price, b.sale_price sku_sale_price, b.earning_price sku_earning_price, b.weight, b.sku_type, b.promotion_type FROM goods_order a JOIN order_sku b ON a.vendor_order_id = b.vendor_order_id + ` + if actID > 0 { + sql += ` + JOIN ( SELECT t4.vendor_order_id, t4.vendor_id + FROM act t1 + JOIN act_store_sku t2 ON t2.act_id = t1.id + JOIN order_sku t3 ON t3.sku_id = t2.sku_id + JOIN goods_order t4 ON t4.vendor_order_id = t3.vendor_order_id + AND t4.vendor_id = t3.vendor_id + AND t2.store_id = IF(t4.jx_store_id <> 0, t4.jx_store_id, t4.store_id) + AND t4.order_created_at BETWEEN t1.begin_at AND t1.end_at + WHERE t1.status = 1 + AND t1.type = ? + AND t1.id = ? + GROUP BY 1,2 + )s ON s.vendor_order_id = a.vendor_order_id AND s.vendor_id = a.vendor_id + ` + sqlParams = append(sqlParams, model.ActSkuFake, actID) + } + sql += ` WHERE 1=1 ` if vendorOrderID != "" { @@ -86,24 +106,6 @@ func QueryOrders(db *DaoDB, vendorOrderID string, actID int, vendorIDs []int, st sql += " AND a.order_created_at BETWEEN ? and ?" sqlParams = append(sqlParams, fromDate, toDate) } - if actID > 0 { - sql += ` - AND a.vendor_order_id IN - ( SELECT DISTINCT t4.vendor_order_id - FROM act t1 - JOIN act_store_sku t2 ON t2.act_id = t1.id - JOIN order_sku t3 ON t3.sku_id = t2.sku_id - JOIN goods_order t4 ON t4.vendor_order_id = t3.vendor_order_id - AND t4.vendor_id = t3.vendor_id - AND t2.store_id = IF(t4.jx_store_id <> 0, t4.jx_store_id, t4.store_id) - AND t4.order_created_at BETWEEN t1.begin_at AND t1.end_at - WHERE t1.status = 1 - AND t1.type = ? - AND t1.id = ? - ) - ` - sqlParams = append(sqlParams, model.ActSkuFake, actID) - } err = GetRows(db, &orderNewList, sql, sqlParams...) if len(orderNewList) > 0 { orderNewMap = make(map[string][]*model.OrderSku)