From 1edba57a6028ed9ed42b1677886c7e9cafc64bfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Thu, 7 Nov 2019 08:14:36 +0800 Subject: [PATCH 01/12] =?UTF-8?q?=E5=AF=B9=E6=AF=94=E5=B7=AE=E5=BC=82?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku_check.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/business/jxstore/cms/store_sku_check.go b/business/jxstore/cms/store_sku_check.go index c93deca67..5231cd9d1 100644 --- a/business/jxstore/cms/store_sku_check.go +++ b/business/jxstore/cms/store_sku_check.go @@ -537,6 +537,8 @@ func CheckSkuDiffBetweenJxAndVendor(ctx *jxcontext.Context, vendorIDList []int, } else { filterStoreList := GetFilterStoreList(jxStoreInfoList.Stores, vendorMap, storeIDMap) diffData.InitData() + jxSkuInfoDataSingle := &StoreSkuNamesInfo{} + jxSkuInfoDataMulti := &StoreSkuNamesInfo{} taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { jxStoreInfoListValue := batchItemList[0].(*StoreExt) storeID := jxStoreInfoListValue.ID @@ -549,8 +551,6 @@ func CheckSkuDiffBetweenJxAndVendor(ctx *jxcontext.Context, vendorIDList []int, vendorID := int(utils.MustInterface2Int64(vendorListValue["vendorID"])) //京西的门店商品只取一次 flag := false - jxSkuInfoDataSingle := &StoreSkuNamesInfo{} - jxSkuInfoDataMulti := &StoreSkuNamesInfo{} if partner.IsMultiStore(vendorID) { if flag == false { jxSkuInfoDataMulti, _ = GetStoreSkus(ctx, storeID, filterJxDepotUnSaleSkuIds, true, "", true, false, map[string]interface{}{}, 0, -1) From 8634f34ac5f5b89359a3fee19088ac3ae525b86a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Thu, 7 Nov 2019 08:55:37 +0800 Subject: [PATCH 02/12] =?UTF-8?q?=E5=AF=B9=E6=AF=94=E5=B7=AE=E5=BC=82?= =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku_check.go | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/business/jxstore/cms/store_sku_check.go b/business/jxstore/cms/store_sku_check.go index 5231cd9d1..819750b0a 100644 --- a/business/jxstore/cms/store_sku_check.go +++ b/business/jxstore/cms/store_sku_check.go @@ -537,8 +537,6 @@ func CheckSkuDiffBetweenJxAndVendor(ctx *jxcontext.Context, vendorIDList []int, } else { filterStoreList := GetFilterStoreList(jxStoreInfoList.Stores, vendorMap, storeIDMap) diffData.InitData() - jxSkuInfoDataSingle := &StoreSkuNamesInfo{} - jxSkuInfoDataMulti := &StoreSkuNamesInfo{} taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { jxStoreInfoListValue := batchItemList[0].(*StoreExt) storeID := jxStoreInfoListValue.ID @@ -549,20 +547,14 @@ func CheckSkuDiffBetweenJxAndVendor(ctx *jxcontext.Context, vendorIDList []int, var filterJxSkuInfoMapMulti map[int]*StoreSkuNameExt for _, vendorListValue := range jxStoreInfoListValue.StoreMaps { vendorID := int(utils.MustInterface2Int64(vendorListValue["vendorID"])) - //京西的门店商品只取一次 - flag := false + jxSkuInfoDataSingle := &StoreSkuNamesInfo{} + jxSkuInfoDataMulti := &StoreSkuNamesInfo{} if partner.IsMultiStore(vendorID) { - if flag == false { - jxSkuInfoDataMulti, _ = GetStoreSkus(ctx, storeID, filterJxDepotUnSaleSkuIds, true, "", true, false, map[string]interface{}{}, 0, -1) - filterJxSkuInfoMapMulti = GetFilterJxSkuInfoMap(jxSkuInfoDataMulti.SkuNames) //map[京西商品ID:StoreSkuNameExt] - flag = true - } + jxSkuInfoDataMulti, _ = GetStoreSkus(ctx, storeID, filterJxDepotUnSaleSkuIds, true, "", true, false, map[string]interface{}{}, 0, -1) + filterJxSkuInfoMapMulti = GetFilterJxSkuInfoMap(jxSkuInfoDataMulti.SkuNames) //map[京西商品ID:StoreSkuNameExt] } else { - if flag == false { - jxSkuInfoDataSingle, _ = GetStoreSkus(ctx, storeID, []int{}, true, "", true, false, map[string]interface{}{}, 0, -1) - filterJxSkuInfoMapSingle = GetFilterJxSkuInfoMap(jxSkuInfoDataSingle.SkuNames) //map[京西商品ID:StoreSkuNameExt] - flag = true - } + jxSkuInfoDataSingle, _ = GetStoreSkus(ctx, storeID, []int{}, true, "", true, false, map[string]interface{}{}, 0, -1) + filterJxSkuInfoMapSingle = GetFilterJxSkuInfoMap(jxSkuInfoDataSingle.SkuNames) //map[京西商品ID:StoreSkuNameExt] } vendorStoreID := utils.Interface2String(vendorListValue["vendorStoreID"]) From ba2d403c739485b4a44fd1391dabe86604150c37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Thu, 7 Nov 2019 09:14:56 +0800 Subject: [PATCH 03/12] =?UTF-8?q?=E5=AF=B9=E6=AF=94=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku_check.go | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/business/jxstore/cms/store_sku_check.go b/business/jxstore/cms/store_sku_check.go index 819750b0a..9ef91776c 100644 --- a/business/jxstore/cms/store_sku_check.go +++ b/business/jxstore/cms/store_sku_check.go @@ -542,19 +542,26 @@ func CheckSkuDiffBetweenJxAndVendor(ctx *jxcontext.Context, vendorIDList []int, storeID := jxStoreInfoListValue.ID storeIDStr := utils.Int2Str(storeID) storeName := jxStoreInfoListValue.Name + jxSkuInfoDataSingle := &StoreSkuNamesInfo{} + jxSkuInfoDataMulti := &StoreSkuNamesInfo{} if jxStoreInfoListValue.StoreMaps != nil { var filterJxSkuInfoMapSingle map[int]*StoreSkuNameExt var filterJxSkuInfoMapMulti map[int]*StoreSkuNameExt for _, vendorListValue := range jxStoreInfoListValue.StoreMaps { vendorID := int(utils.MustInterface2Int64(vendorListValue["vendorID"])) - jxSkuInfoDataSingle := &StoreSkuNamesInfo{} - jxSkuInfoDataMulti := &StoreSkuNamesInfo{} + var flag = false if partner.IsMultiStore(vendorID) { - jxSkuInfoDataMulti, _ = GetStoreSkus(ctx, storeID, filterJxDepotUnSaleSkuIds, true, "", true, false, map[string]interface{}{}, 0, -1) - filterJxSkuInfoMapMulti = GetFilterJxSkuInfoMap(jxSkuInfoDataMulti.SkuNames) //map[京西商品ID:StoreSkuNameExt] + if flag == false { + jxSkuInfoDataMulti, _ = GetStoreSkus(ctx, storeID, filterJxDepotUnSaleSkuIds, true, "", true, false, map[string]interface{}{}, 0, -1) + filterJxSkuInfoMapMulti = GetFilterJxSkuInfoMap(jxSkuInfoDataMulti.SkuNames) //map[京西商品ID:StoreSkuNameExt] + flag = true + } } else { - jxSkuInfoDataSingle, _ = GetStoreSkus(ctx, storeID, []int{}, true, "", true, false, map[string]interface{}{}, 0, -1) - filterJxSkuInfoMapSingle = GetFilterJxSkuInfoMap(jxSkuInfoDataSingle.SkuNames) //map[京西商品ID:StoreSkuNameExt] + if flag == false { + jxSkuInfoDataSingle, _ = GetStoreSkus(ctx, storeID, []int{}, true, "", true, false, map[string]interface{}{}, 0, -1) + filterJxSkuInfoMapSingle = GetFilterJxSkuInfoMap(jxSkuInfoDataSingle.SkuNames) //map[京西商品ID:StoreSkuNameExt] + flag = true + } } vendorStoreID := utils.Interface2String(vendorListValue["vendorStoreID"]) From 9c5c28273586d04e2cca8d6ab43be24264b50d78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Thu, 7 Nov 2019 10:55:26 +0800 Subject: [PATCH 04/12] =?UTF-8?q?=E5=88=B7=E6=96=B0=E5=8E=86=E5=8F=B2?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/order.go | 5 +-- business/model/dao/dao_order.go | 44 +++++++++++++++++++++++++++ controllers/jx_order.go | 9 +++--- 3 files changed, 52 insertions(+), 6 deletions(-) diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index 36d4abbde..ab109290f 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -613,7 +613,7 @@ func (c *OrderManager) UpdateOrderFields(order *model.GoodsOrder, fieldList []st return err } -func (c *OrderManager) RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context, vendorOrderID string, vendorIDs []int, storeID int, fromDate string, toDate string, isAsync, isContinueWhenError bool) (hint string, err error) { +func (c *OrderManager) RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context, vendorOrderID string, actIDs []int, vendorIDs []int, storeID int, fromDate string, toDate string, isAsync, isContinueWhenError bool) (hint string, err error) { db := dao.GetDB() fromDateParam := utils.Str2Time(fromDate) toDateParam := utils.Str2Time(toDate) @@ -621,7 +621,8 @@ 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, vendorIDs, storeID, fromDateParam, toDateParam) + orderList, _ := dao.QueryOrdersFilterByAct(db, vendorOrderID, actIDs, vendorIDs, storeID, fromDateParam, toDateParam) if len(orderList) <= 0 { return "", errors.New(fmt.Sprintf("未查询到订单!,vendorOrderID : %s, 时间范围:[%v] 至 [%v]", vendorOrderID, fromDate, toDate)) } diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index d0b247ea2..f9b2945e2 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -593,3 +593,47 @@ 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.GoodsOrderExt, 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...) +} diff --git a/controllers/jx_order.go b/controllers/jx_order.go index cc0be95db..ec3aac94a 100644 --- a/controllers/jx_order.go +++ b/controllers/jx_order.go @@ -748,17 +748,18 @@ func (c *OrderController) AmendMissingOrders() { // @Param toTime formData string true "订单结束时间 (yyyy-mm-dd hh:ms:ss)" // @Param vendorOrderID formData string false "订单号" // @Param vendorIDs formData string false "平台ID列表[0,1,3]" +// @Param actIDs formData string false "活动ID列表[0,1,3]" // @Param storeID formData int false "门店ID" -// @Param isAsync formData bool true "是否异步操作" +// @Param isAsync formData bool false "是否异步操作" // @Param isContinueWhenError formData bool false "单个失败是否继续,缺省true" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult // @router /RefreshHistoryOrdersEarningPrice [post] func (c *OrderController) RefreshHistoryOrdersEarningPrice() { c.callRefreshHistoryOrdersEarningPrice(func(params *tOrderRefreshHistoryOrdersEarningPriceParams) (retVal interface{}, errCode string, err error) { - var vendorIDList []int - if err = jxutils.Strings2Objs(params.VendorIDs, &vendorIDList); err == nil { - retVal, err = orderman.FixedOrderManager.RefreshHistoryOrdersEarningPrice(params.Ctx, params.VendorOrderID, vendorIDList, params.StoreID, params.FromTime, params.ToTime, params.IsAsync, params.IsContinueWhenError) + var vendorIDList, actIDList []int + if err = jxutils.Strings2Objs(params.VendorIDs, &vendorIDList, params.ActIDs, &actIDList); err == nil { + retVal, err = orderman.FixedOrderManager.RefreshHistoryOrdersEarningPrice(params.Ctx, params.VendorOrderID, actIDList, vendorIDList, params.StoreID, params.FromTime, params.ToTime, params.IsAsync, params.IsContinueWhenError) } return retVal, "", err }) From 98c1279ffe72de742884e402f3ffb135351c8e24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Thu, 7 Nov 2019 11:17:01 +0800 Subject: [PATCH 05/12] =?UTF-8?q?=E5=88=B7=E6=96=B0=E5=8E=86=E5=8F=B2?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=BB=93=E7=AE=97=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/model/dao/dao_order.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index f9b2945e2..b0b24c239 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -594,7 +594,7 @@ 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.GoodsOrderExt, err error) { +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 From 241878c79a852a6fc5e854515a4864eb2aaecfe5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Thu, 7 Nov 2019 11:26:20 +0800 Subject: [PATCH 06/12] =?UTF-8?q?=E5=88=B7=E6=96=B0=E5=8E=86=E5=8F=B2?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=BB=93=E7=AE=97=E4=BB=B7=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/order.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index ab109290f..055163fde 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -613,7 +613,7 @@ func (c *OrderManager) UpdateOrderFields(order *model.GoodsOrder, fieldList []st return err } -func (c *OrderManager) RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context, vendorOrderID string, actIDs []int, vendorIDs []int, storeID int, fromDate string, toDate string, isAsync, isContinueWhenError bool) (hint string, err error) { +func (c *OrderManager) RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context, vendorOrderID string, actIDs, vendorIDs []int, storeID int, fromDate, toDate string, isAsync, isContinueWhenError bool) (hint string, err error) { db := dao.GetDB() fromDateParam := utils.Str2Time(fromDate) toDateParam := utils.Str2Time(toDate) From c5e468449292fc45e352a63fee08d5cf46dd552c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Thu, 7 Nov 2019 16:54:51 +0800 Subject: [PATCH 07/12] =?UTF-8?q?=E5=88=B7=E6=96=B0=E5=8E=86=E5=8F=B2?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=BB=93=E7=AE=97=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/order.go | 5 +- business/jxcallback/orderman/orderman_ext.go | 2 +- business/model/dao/dao_order.go | 170 ++++++++++++------- 3 files changed, 115 insertions(+), 62 deletions(-) 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...) -} From 406c3e56e44de0622939dee0d1c860bcd16f4e9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Thu, 7 Nov 2019 18:03:13 +0800 Subject: [PATCH 08/12] =?UTF-8?q?=E5=88=B7=E6=96=B0=E5=8E=86=E5=8F=B2?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=BB=93=E7=AE=97=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/model/dao/dao_order.go | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index 3d2b783c7..f5395e136 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -65,22 +65,6 @@ func QueryOrders(db *DaoDB, vendorOrderID string, actIDs, vendorIDs []int, store 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 != "" { @@ -99,6 +83,21 @@ func QueryOrders(db *DaoDB, vendorOrderID string, actIDs, vendorIDs []int, store sql += " AND a.order_created_at BETWEEN ? and ?" sqlParams = append(sqlParams, fromDate, toDate) } + if len(actIDs) > 0 { + sql += ` + AND a.vendor_order_id IN + (SELECT b.vendor_order_id + FROM act t1 + JOIN act_store_sku t2 ON t2.act_id = t1.id + JOIN order_sku b ON b.sku_id = t2.sku_id + WHERE t1.status = 1 + AND t1.id IN (` + GenQuestionMarks(len(actIDs)) + `) + AND t2.store_id = a.store_id + AND a.order_created_at BETWEEN t1.begin_at AND t1.end_at + ) + ` + sqlParams = append(sqlParams, actIDs) + } err = GetRows(db, &orderNewList, sql, sqlParams...) if len(orderNewList) > 0 { orderNewMap = make(map[string][]*model.OrderSku) From 0854c131cb0ffee7efca6056a31be4be3060656d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 8 Nov 2019 11:54:06 +0800 Subject: [PATCH 09/12] =?UTF-8?q?=E5=88=B7=E6=96=B0=E5=8E=86=E5=8F=B2?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=BB=93=E7=AE=97=E4=BB=B7=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/order.go | 36 +++++++++++++++----- business/jxcallback/orderman/orderman_ext.go | 2 +- business/jxstore/act/act.go | 2 +- business/model/dao/dao_order.go | 28 +++++++++------ controllers/jx_order.go | 12 +++---- 5 files changed, 52 insertions(+), 28 deletions(-) diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index 5cec26237..2be8b30a2 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -613,18 +613,36 @@ func (c *OrderManager) UpdateOrderFields(order *model.GoodsOrder, fieldList []st return err } -func (c *OrderManager) RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context, vendorOrderID string, actIDs, vendorIDs []int, storeID int, fromDate, toDate string, isAsync, isContinueWhenError bool) (hint string, err error) { +func (c *OrderManager) RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context, vendorOrderID string, actID int, vendorIDs []int, storeID int, fromDate, toDate string, isAsync, isContinueWhenError bool) (hint string, err error) { + var ( + orderList []*model.GoodsOrder + fromDateParam time.Time + toDateParam time.Time + ) db := dao.GetDB() - fromDateParam := utils.Str2Time(fromDate) - toDateParam := utils.Str2Time(toDate) - //若时间间隔大于10天则不允许查询 - if math.Ceil(toDateParam.Sub(fromDateParam).Hours()/24) > 10 { - return "", errors.New(fmt.Sprintf("查询间隔时间不允许大于10天!时间范围:[%v] 至 [%v]", fromDate, toDate)) + 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) + } else { + return "", errors.New(fmt.Sprintf("未查询到相关结算活动,活动ID:[%d]", actID)) + } + } else { + if fromDate != "" && toDate != "" { + fromDateParam = utils.Str2Time(fromDate) + toDateParam = utils.Str2Time(toDate) + //若未传入活动ID,且时间间隔大于10天则不允许查询 + 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)) + } } - // orderList, _ := dao.QueryOrders(db, vendorOrderID, 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)) + return "", errors.New(fmt.Sprintf("未查询到订单!,vendorOrderID : %s, actID : %d, 时间范围:[%v] 至 [%v]", vendorOrderID, actID, fromDate, toDate)) } task := tasksch.NewParallelTask("刷新历史订单结算价", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { diff --git a/business/jxcallback/orderman/orderman_ext.go b/business/jxcallback/orderman/orderman_ext.go index 9bef94868..b41cef313 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, "", []int{}, vendorIDs, storeID, fromDate, toDate.Add(24*time.Hour-time.Second)) + localOrders, err2 := dao.QueryOrders(db, "", 0, vendorIDs, storeID, fromDate, toDate.Add(24*time.Hour-time.Second)) if err = err2; err != nil { return "", err } diff --git a/business/jxstore/act/act.go b/business/jxstore/act/act.go index 85c1d6e6f..f0b127d25 100644 --- a/business/jxstore/act/act.go +++ b/business/jxstore/act/act.go @@ -104,7 +104,7 @@ func ActStoreSkuParam2Model(ctx *jxcontext.Context, db *dao.DaoDB, act *model.Ac } } - storeSkuList, err2 := dao.GetStoresSkusInfo(db, storeIDs, skuIDs) + storeSkuList, err2 := dao.GetStoresSkusInfo(db, storeIDs, skuIDs, false) if err = err2; err != nil { return nil, nil, nil, err } diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index f5395e136..59a065a16 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -38,7 +38,7 @@ type OrderSkuWithActualPayPrice struct { type tGoodsAndOrder struct { model.GoodsOrder - OrderSkuID int64 `orm:"column(order_sku_id)" json:"id"` + OrderSkuID int64 `orm:"column(order_sku_id)" json:"orderSkuID"` StoreSubID int `orm:"column(store_sub_id)" json:"storeSubID"` // 当前这个字段被当成结算活动ID用 StoreSubName string `orm:"size(64)" json:"storeSubName"` // 当前这个字段被用作vendorActType Count int `json:"count"` @@ -55,14 +55,17 @@ type tGoodsAndOrder struct { 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) { +//actID指结算活动的id +func QueryOrders(db *DaoDB, vendorOrderID string, actID int, 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 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 + 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 WHERE 1=1 @@ -83,20 +86,23 @@ func QueryOrders(db *DaoDB, vendorOrderID string, actIDs, vendorIDs []int, store sql += " AND a.order_created_at BETWEEN ? and ?" sqlParams = append(sqlParams, fromDate, toDate) } - if len(actIDs) > 0 { + if actID > 0 { sql += ` - AND a.vendor_order_id IN - (SELECT b.vendor_order_id + 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 b ON b.sku_id = t2.sku_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.id IN (` + GenQuestionMarks(len(actIDs)) + `) - AND t2.store_id = a.store_id - AND a.order_created_at BETWEEN t1.begin_at AND t1.end_at + AND t1.type = ? + AND t1.id = ? ) ` - sqlParams = append(sqlParams, actIDs) + sqlParams = append(sqlParams, model.ActSkuFake, actID) } err = GetRows(db, &orderNewList, sql, sqlParams...) if len(orderNewList) > 0 { diff --git a/controllers/jx_order.go b/controllers/jx_order.go index ec3aac94a..4fe21002f 100644 --- a/controllers/jx_order.go +++ b/controllers/jx_order.go @@ -744,11 +744,11 @@ func (c *OrderController) AmendMissingOrders() { // @Title 同步刷新历史订单的结算价按订单 // @Description 同步刷新历史订单的结算价按订单 // @Param token header string true "认证token" -// @Param fromTime formData string true "订单起始时间 (yyyy-mm-dd hh:ms:ss)" -// @Param toTime formData string true "订单结束时间 (yyyy-mm-dd hh:ms:ss)" +// @Param fromTime formData string false "订单起始时间 (yyyy-mm-dd hh:ms:ss)" +// @Param toTime formData string false "订单结束时间 (yyyy-mm-dd hh:ms:ss)" // @Param vendorOrderID formData string false "订单号" // @Param vendorIDs formData string false "平台ID列表[0,1,3]" -// @Param actIDs formData string false "活动ID列表[0,1,3]" +// @Param actID formData int false "活动ID" // @Param storeID formData int false "门店ID" // @Param isAsync formData bool false "是否异步操作" // @Param isContinueWhenError formData bool false "单个失败是否继续,缺省true" @@ -757,9 +757,9 @@ func (c *OrderController) AmendMissingOrders() { // @router /RefreshHistoryOrdersEarningPrice [post] func (c *OrderController) RefreshHistoryOrdersEarningPrice() { c.callRefreshHistoryOrdersEarningPrice(func(params *tOrderRefreshHistoryOrdersEarningPriceParams) (retVal interface{}, errCode string, err error) { - var vendorIDList, actIDList []int - if err = jxutils.Strings2Objs(params.VendorIDs, &vendorIDList, params.ActIDs, &actIDList); err == nil { - retVal, err = orderman.FixedOrderManager.RefreshHistoryOrdersEarningPrice(params.Ctx, params.VendorOrderID, actIDList, vendorIDList, params.StoreID, params.FromTime, params.ToTime, params.IsAsync, params.IsContinueWhenError) + var vendorIDList []int + if err = jxutils.Strings2Objs(params.VendorIDs, &vendorIDList); err == nil { + retVal, err = orderman.FixedOrderManager.RefreshHistoryOrdersEarningPrice(params.Ctx, params.VendorOrderID, params.ActID, vendorIDList, params.StoreID, params.FromTime, params.ToTime, params.IsAsync, params.IsContinueWhenError) } return retVal, "", err }) From 622d53cb4e041707f1594f480900eb2b525437f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 8 Nov 2019 12:02:11 +0800 Subject: [PATCH 10/12] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/act/act.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/business/jxstore/act/act.go b/business/jxstore/act/act.go index 3f359bb3e..7f62439dd 100644 --- a/business/jxstore/act/act.go +++ b/business/jxstore/act/act.go @@ -116,7 +116,7 @@ func ActStoreSkuParam2Model(ctx *jxcontext.Context, db *dao.DaoDB, act *model.Ac } } - storeSkuList, err2 := dao.GetStoresSkusInfo(db, storeIDs, skuIDs, false) + storeSkuList, err2 := dao.GetStoresSkusInfo(db, storeIDs, skuIDs) if err = err2; err != nil { return nil, nil, nil, err } From b44f41d9d0365d4ecf6f47965e7c9c0c2f777486 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 8 Nov 2019 15:23:18 +0800 Subject: [PATCH 11/12] =?UTF-8?q?=E5=88=B7=E6=96=B0=E5=8E=86=E5=8F=B2?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=BB=93=E7=AE=97=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/order.go | 47 ++++++++++++++++++++++++--- business/model/dao/dao_order.go | 38 ++++++++++++---------- 2 files changed, 62 insertions(+), 23 deletions(-) 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) From 68afef6a79936696a7e218d6cf65bb41add440d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 8 Nov 2019 15:28:26 +0800 Subject: [PATCH 12/12] =?UTF-8?q?=E5=88=B7=E6=96=B0=E5=8E=86=E5=8F=B2?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=BB=93=E7=AE=97=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/order.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index ef4278517..3eb74d840 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -663,7 +663,7 @@ func (c *OrderManager) RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context, return "", errors.New(fmt.Sprintf("未查询到相关结算活动,活动ID:[%d]", actID)) } } else { - return "", errors.New(fmt.Sprintf("若不按活动查询则间隔时间必须完整!时间范围:[%v] 至 [%v]", fromDate, toDate)) + return "", errors.New(fmt.Sprintf("间隔时间必须完整!时间范围:[%v] 至 [%v]", fromDate, toDate)) } } else { if fromDate != "" && toDate != "" {