diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index 055163fde..5cec26237 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -622,15 +622,14 @@ func (c *OrderManager) RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context, return "", errors.New(fmt.Sprintf("查询间隔时间不允许大于10天!时间范围:[%v] 至 [%v]", fromDate, toDate)) } // orderList, _ := dao.QueryOrders(db, vendorOrderID, vendorIDs, storeID, fromDateParam, toDateParam) - orderList, _ := dao.QueryOrdersFilterByAct(db, vendorOrderID, actIDs, vendorIDs, storeID, fromDateParam, toDateParam) + orderList, _ := dao.QueryOrders(db, vendorOrderID, actIDs, vendorIDs, storeID, fromDateParam, toDateParam) if len(orderList) <= 0 { return "", errors.New(fmt.Sprintf("未查询到订单!,vendorOrderID : %s, 时间范围:[%v] 至 [%v]", vendorOrderID, fromDate, toDate)) } task := tasksch.NewParallelTask("刷新历史订单结算价", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - v := batchItemList[0].(*model.GoodsOrder) + order := batchItemList[0].(*model.GoodsOrder) db := dao.GetDB() - order, _ := c.loadOrder(v.VendorOrderID, "", v.VendorID) updateSingleOrderEarningPrice(order, db) dao.Begin(db) defer func() { diff --git a/business/jxcallback/orderman/orderman_ext.go b/business/jxcallback/orderman/orderman_ext.go index cfeb4dd23..9bef94868 100644 --- a/business/jxcallback/orderman/orderman_ext.go +++ b/business/jxcallback/orderman/orderman_ext.go @@ -1169,7 +1169,7 @@ func (c *OrderManager) AmendMissingOrders(ctx *jxcontext.Context, vendorIDs []in if err = err2; err != nil && !isContinueWhenError { return "", err } - localOrders, err2 := dao.QueryOrders(db, "", vendorIDs, storeID, fromDate, toDate.Add(24*time.Hour-time.Second)) + localOrders, err2 := dao.QueryOrders(db, "", []int{}, vendorIDs, storeID, fromDate, toDate.Add(24*time.Hour-time.Second)) if err = err2; err != nil { return "", err } diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index b0b24c239..3d2b783c7 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -36,34 +36,132 @@ type OrderSkuWithActualPayPrice struct { PayPercentage int `json:"payPercentage"` } -func QueryOrders(db *DaoDB, vendorOrderID string, vendorIDs []int, storeID int, orderCreatedAtBegin, orderCreatedAtEnd time.Time) (orderList []*model.GoodsOrder, err error) { +type tGoodsAndOrder struct { + model.GoodsOrder + OrderSkuID int64 `orm:"column(order_sku_id)" json:"id"` + StoreSubID int `orm:"column(store_sub_id)" json:"storeSubID"` // 当前这个字段被当成结算活动ID用 + StoreSubName string `orm:"size(64)" json:"storeSubName"` // 当前这个字段被用作vendorActType + Count int `json:"count"` + VendorSkuID string `orm:"column(vendor_sku_id);size(48)" json:"vendorSkuID"` + SkuID int `orm:"column(sku_id)" json:"skuID"` // 外部系统里记录的 jxskuid + JxSkuID int `orm:"column(jx_sku_id)" json:"jxSkuID"` // 根据VendorSkuID在本地系统里查询出来的 jxskuid + SkuName string `orm:"size(255)" json:"skuName"` + SkuShopPrice int64 `json:"shopPrice"` // 京西价 + SkuVendorPrice int64 `json:"vendorPrice"` // 平台价 + SkuSalePrice int64 `json:"salePrice"` // 售卖价 + SkuEarningPrice int64 `json:"earningPrice"` // 活动商品设置,结算给门店老板的钱,如果结算活动ID为0,是按结算比例算的,否则就是结算表中的值 + Weight int `json:"weight"` // 单位为克 + SkuType int `json:"skuType"` // 当前如果为gift就为1,否则缺省为0 + PromotionType int `json:"promotionType"` // todo 当前是用于记录京东的PromotionType(生成jxorder用),没有做转换 +} + +func QueryOrders(db *DaoDB, vendorOrderID string, actIDs, vendorIDs []int, storeID int, fromDate, toDate time.Time) (orderList []*model.GoodsOrder, err error) { + sqlParams := []interface{}{} + var ( + orderNewList []*tGoodsAndOrder + orderNewMap map[string][]*model.OrderSku + ) sql := ` - SELECT t1.* - FROM goods_order t1 - WHERE t1.order_created_at >= ?` - sqlParams := []interface{}{ - orderCreatedAtBegin, + SELECT a.*,b.id order_sku_id, b.store_sub_id, b.store_sub_name, b.count, b.vendor_sku_id, b.sku_id, b.jx_sku_id, b.sku_name, b.shop_price sku_shop_price, 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 len(actIDs) > 0 { + sql += ` + JOIN (SELECT t1.begin_at,t1.end_at, t2.act_id,t2.store_id, t2.sku_id + FROM act t1 + JOIN act_store_sku t2 ON t2.act_id = t1.id + WHERE t1.status = 1 + AND t1.id IN (` + GenQuestionMarks(len(actIDs)) + `) + )s + ON s.store_id = a.store_id + AND s.sku_id = b.sku_id + AND a.order_created_at BETWEEN s.begin_at AND s.end_at + ` + sqlParams = append(sqlParams, actIDs) } + sql += ` + WHERE 1=1 + ` if vendorOrderID != "" { - sql += " AND t1.vendor_order_id = ?" + sql += " AND a.vendor_order_id = ?" sqlParams = append(sqlParams, vendorOrderID) } if len(vendorIDs) > 0 { - sql += " AND t1.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")" + sql += " AND a.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")" sqlParams = append(sqlParams, vendorIDs) } if storeID > 0 { - sql += " AND IF(t1.jx_store_id <> 0, t1.jx_store_id, t1.store_id) = ?" + sql += " AND IF(a.jx_store_id <> 0, a.jx_store_id, a.store_id) = ?" sqlParams = append(sqlParams, storeID) } - if !utils.IsTimeZero(orderCreatedAtEnd) { - sql += " AND t1.order_created_at <= ?" - sqlParams = append(sqlParams, orderCreatedAtEnd) + if !utils.IsTimeZero(fromDate) && !utils.IsTimeZero(toDate) { + sql += " AND a.order_created_at BETWEEN ? and ?" + sqlParams = append(sqlParams, fromDate, toDate) } - // sql += " ORDER BY t1.order_created_at DESC, t1.id DESC;" - return orderList, GetRows(db, &orderList, sql, sqlParams...) + err = GetRows(db, &orderNewList, sql, sqlParams...) + if len(orderNewList) > 0 { + orderNewMap = make(map[string][]*model.OrderSku) + for _, v := range orderNewList { + if orderNewMap[v.VendorOrderID] == nil { + orderList = append(orderList, &v.GoodsOrder) + } + orderNewMap[v.VendorOrderID] = append(orderNewMap[v.VendorOrderID], &model.OrderSku{ + ID: v.OrderSkuID, + VendorOrderID: v.VendorOrderID, + VendorID: v.VendorID, + StoreSubID: v.StoreSubID, + StoreSubName: v.StoreSubName, + Count: v.Count, + VendorSkuID: v.VendorSkuID, + SkuID: v.SkuID, + JxSkuID: v.JxSkuID, + SkuName: v.SkuName, + ShopPrice: v.SkuShopPrice, + VendorPrice: v.SkuVendorPrice, + SalePrice: v.SkuSalePrice, + EarningPrice: v.SkuEarningPrice, + Weight: v.Weight, + SkuType: v.SkuType, + PromotionType: v.PromotionType, + }) + } + for _, v := range orderList { + v.Skus = orderNewMap[v.VendorOrderID] + } + } + + return orderList, err } +// func QueryOrders(db *DaoDB, vendorOrderID string, vendorIDs []int, storeID int, orderCreatedAtBegin, orderCreatedAtEnd time.Time) (orderList []*model.GoodsOrder, err error) { +// sql := ` +// SELECT t1.* +// FROM goods_order t1 +// WHERE t1.order_created_at >= ?` +// sqlParams := []interface{}{ +// orderCreatedAtBegin, +// } +// if vendorOrderID != "" { +// sql += " AND t1.vendor_order_id = ?" +// sqlParams = append(sqlParams, vendorOrderID) +// } +// if len(vendorIDs) > 0 { +// sql += " AND t1.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")" +// sqlParams = append(sqlParams, vendorIDs) +// } +// if storeID > 0 { +// sql += " AND IF(t1.jx_store_id <> 0, t1.jx_store_id, t1.store_id) = ?" +// sqlParams = append(sqlParams, storeID) +// } +// if !utils.IsTimeZero(orderCreatedAtEnd) { +// sql += " AND t1.order_created_at <= ?" +// sqlParams = append(sqlParams, orderCreatedAtEnd) +// } +// // sql += " ORDER BY t1.order_created_at DESC, t1.id DESC;" +// return orderList, GetRows(db, &orderList, sql, sqlParams...) +// } + func GetStoreOrderAfterTime(db *DaoDB, storeID int, orderTime time.Time, lastOrderSeqID int64) (orderList []*model.GoodsOrderExt, err error) { sql := ` SELECT t1.*, @@ -593,47 +691,3 @@ func GetRiskOrderCount(db *DaoDB, dayNum int, includeToday bool) (storeOrderList return storeOrderList, GetRows(db, &storeOrderList, sql, sqlParams) } - -func QueryOrdersFilterByAct(db *DaoDB, vendorOrderID string, actIDs, vendorIDs []int, storeID int, fromDate, toDate time.Time) (orderList []*model.GoodsOrder, err error) { - sql := ` - SELECT a.vendor_order_id, a.vendor_id - FROM goods_order a - JOIN order_sku b ON a.vendor_order_id = b.vendor_order_id - JOIN (SELECT t1.begin_at,t1.end_at, t2.act_id,t2.store_id, t2.sku_id - FROM act t1 - JOIN act_store_sku t2 ON t2.act_id = t1.id - WHERE t1.status = 1 - ` - sqlParams := []interface{}{} - if len(actIDs) > 0 { - sql += " AND t1.id IN (" + GenQuestionMarks(len(actIDs)) + ")" - sqlParams = append(sqlParams, actIDs) - } - sql += ` - )s - ON s.store_id = a.store_id - AND s.sku_id = b.sku_id - AND a.order_created_at BETWEEN s.begin_at AND s.end_at - WHERE 1=1 - ` - if vendorOrderID != "" { - sql += " AND a.vendor_order_id = ?" - sqlParams = append(sqlParams, vendorOrderID) - } - if len(vendorIDs) > 0 { - sql += " AND a.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")" - sqlParams = append(sqlParams, vendorIDs) - } - if storeID > 0 { - sql += " AND IF(a.jx_store_id <> 0, a.jx_store_id, a.store_id) = ?" - sqlParams = append(sqlParams, storeID) - } - if !utils.IsTimeZero(fromDate) && !utils.IsTimeZero(toDate) { - sql += " AND a.order_created_at BETWEEN ? and ?" - sqlParams = append(sqlParams, fromDate, toDate) - } - sql += ` - GROUP BY 1,2 - ` - return orderList, GetRows(db, &orderList, sql, sqlParams...) -}