From f65e06168eefba6c0ebda51159e0863cf7774c35 Mon Sep 17 00:00:00 2001 From: gazebo Date: Fri, 19 Jul 2019 15:10:56 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E9=87=8D=E6=9E=84=E4=BA=86=E4=B8=80?= =?UTF-8?q?=E4=B8=8Bmisc=E4=B8=AD=E5=AE=9A=E6=97=B6=E5=99=A8=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E7=9A=84=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/orderman_ext.go | 43 +++++++ business/jxstore/misc/misc.go | 121 ++++++------------- business/jxstore/misc/misc_test.go | 13 ++ controllers/jx_order.go | 2 +- 4 files changed, 95 insertions(+), 84 deletions(-) create mode 100644 business/jxstore/misc/misc_test.go diff --git a/business/jxcallback/orderman/orderman_ext.go b/business/jxcallback/orderman/orderman_ext.go index 6e165be14..b03c9d536 100644 --- a/business/jxcallback/orderman/orderman_ext.go +++ b/business/jxcallback/orderman/orderman_ext.go @@ -1088,3 +1088,46 @@ func (c *OrderManager) AmendMissingOrders(ctx *jxcontext.Context, vendorIDs []in } return hint, err } + +func (c *OrderManager) RefreshOrderFinancial(ctx *jxcontext.Context, fromTime, toTime time.Time, isAsync, isContinueWhenError bool) (hint string, err error) { + sql := ` + SELECT * + FROM goods_order + WHERE status = ? AND total_shop_money = 0 + ` + sqlParams := []interface{}{ + model.OrderStatusFinished, + } + if !utils.IsTimeZero(fromTime) { + sql += " AND order_created_at >= ?" + sqlParams = append(sqlParams, fromTime) + } + if !utils.IsTimeZero(toTime) { + sql += " AND order_created_at <= ?" + sqlParams = append(sqlParams, toTime) + } + var orderList []*model.GoodsOrder + db := dao.GetDB() + if err = dao.GetRows(db, &orderList, sql, sqlParams...); err == nil && len(orderList) > 0 { + task := tasksch.NewParallelTask("RefreshOrderFinancial", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, + func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + order := batchItemList[0].(*model.GoodsOrder) + handler := partner.GetPurchasePlatformFromVendorID(order.VendorID) + if handler != nil { + remoteOrder, err2 := handler.GetOrder(order.VendorOrderID) + if err = err2; err == nil { + order.TotalShopMoney = remoteOrder.TotalShopMoney + order.PmSubsidyMoney = remoteOrder.PmSubsidyMoney + err = partner.CurOrderManager.UpdateOrderFields(order, []string{"TotalShopMoney", "PmSubsidyMoney"}) + } + } + return nil, err + }, orderList) + tasksch.HandleTask(task, nil, true).Run() + hint = task.ID + if !isAsync { + _, err = task.GetResult(0) + } + } + return hint, err +} diff --git a/business/jxstore/misc/misc.go b/business/jxstore/misc/misc.go index 3fe7a9ff3..7f398c492 100644 --- a/business/jxstore/misc/misc.go +++ b/business/jxstore/misc/misc.go @@ -19,6 +19,9 @@ import ( ) var ( + dailyWorkTimeList = []string{ + "21:00:00", + } refreshPageActTimeList = []string{ "7:00:00", "8:00:00", @@ -35,14 +38,26 @@ var ( "19:00:00", "22:00:00", } + openRemoteStoreTimeList = []string{ + "06:00:00", + } ) func Init() { - StartRefreshEbaiRealMobile() - StartDailyWork() if globals.ReallyCallPlatformAPI { + ScheduleTimerFunc(doDailyWork, dailyWorkTimeList) + + ScheduleTimerFuncByInterval(func() { + RefreshRealMobile(jxcontext.AdminCtx, model.VendorIDEBAI, time.Now().Add(-24*time.Hour), utils.DefaultTimeValue, false, true) + }, 5*time.Second, 1*time.Hour) + ScheduleTimerFunc(func() { - cms.SaveAndSendAlarmVendorSnapshot(jxcontext.AdminCtx, nil, nil) + cms.EnableHaveRestStores(jxcontext.AdminCtx, false, true) + cms.OpenRemoteStoreByJxStatus(jxcontext.AdminCtx, nil, nil, false, false, true) + }, openRemoteStoreTimeList) + + ScheduleTimerFunc(func() { + cms.SaveAndSendAlarmVendorSnapshot(jxcontext.AdminCtx, nil, nil, false) }, cms.WatchVendorStoreTimeList) ScheduleTimerFunc(func() { @@ -51,22 +66,16 @@ func Init() { } } -func StartRefreshEbaiRealMobile() { - if globals.ReallyCallPlatformAPI { - utils.AfterFuncWithRecover(5*time.Second, func() { - RefreshEbaiRealMobile() - }) - } -} - -func RefreshEbaiRealMobile() { - RefreshRealMobile(jxcontext.AdminCtx, model.VendorIDEBAI, time.Now().Add(-24*time.Hour), utils.DefaultTimeValue, true, true) - utils.AfterFuncWithRecover(1*time.Hour, func() { - RefreshEbaiRealMobile() - }) +func doDailyWork() { + globals.SugarLogger.Debug("doDailyWork") + // cms.CurVendorSync.FullSyncStoresSkus(jxcontext.AdminCtx, dao.GetDB(), []int{model.VendorIDJD}, nil, true, true) + cms.CurVendorSync.SyncStoresSkus(jxcontext.AdminCtx, dao.GetDB(), []int{model.VendorIDJD, model.VendorIDEBAI, model.VendorIDMTWM}, nil, nil, false, true, true) + netprinter.RebindAllPrinters(jxcontext.AdminCtx, false, true) } func RefreshRealMobile(ctx *jxcontext.Context, vendorID int, fromTime, toTime time.Time, isAsync, isContinueWhenError bool) (hint string, err error) { + globals.SugarLogger.Debug("RefreshRealMobile") + handler := partner.GetPurchasePlatformFromVendorID(vendorID) if handler == nil { return "", fmt.Errorf("不合法的vendorID:%d", vendorID) @@ -114,73 +123,6 @@ func RefreshRealMobile(ctx *jxcontext.Context, vendorID int, fromTime, toTime ti return hint, err } -func RefreshOrderFinancial(ctx *jxcontext.Context, fromTime, toTime time.Time, isAsync, isContinueWhenError bool) (hint string, err error) { - sql := ` - SELECT * - FROM goods_order - WHERE status = ? AND total_shop_money = 0 - ` - sqlParams := []interface{}{ - model.OrderStatusFinished, - } - if !utils.IsTimeZero(fromTime) { - sql += " AND order_created_at >= ?" - sqlParams = append(sqlParams, fromTime) - } - if !utils.IsTimeZero(toTime) { - sql += " AND order_created_at <= ?" - sqlParams = append(sqlParams, toTime) - } - var orderList []*model.GoodsOrder - db := dao.GetDB() - if err = dao.GetRows(db, &orderList, sql, sqlParams...); err == nil && len(orderList) > 0 { - task := tasksch.NewParallelTask("misc RefreshOrderFinancial", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, - func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - order := batchItemList[0].(*model.GoodsOrder) - handler := partner.GetPurchasePlatformFromVendorID(order.VendorID) - if handler != nil { - remoteOrder, err2 := handler.GetOrder(order.VendorOrderID) - if err = err2; err == nil { - order.TotalShopMoney = remoteOrder.TotalShopMoney - order.PmSubsidyMoney = remoteOrder.PmSubsidyMoney - err = partner.CurOrderManager.UpdateOrderFields(order, []string{"TotalShopMoney", "PmSubsidyMoney"}) - } - } - return nil, err - }, orderList) - tasksch.HandleTask(task, nil, true).Run() - hint = task.ID - if !isAsync { - _, err = task.GetResult(0) - } - } - return hint, err -} - -func StartDailyWork() { - if globals.ReallyCallPlatformAPI { - now := time.Now() - runTime := time.Date(now.Year(), now.Month(), now.Day(), 21, 0, 0, 0, time.Local) // 凌晨00:25点开始执行 - waitDuration := runTime.Sub(now) - if waitDuration < 5*time.Second { - waitDuration += 24 * time.Hour - } - globals.SugarLogger.Debugf("dailyWork waitDuration:%d minutes", waitDuration/time.Minute) - utils.AfterFuncWithRecover(waitDuration, func() { - doDailyWork() - StartDailyWork() - }) - } -} - -func doDailyWork() { - globals.SugarLogger.Debug("doDailyWork") - cms.EnableHaveRestStores(jxcontext.AdminCtx, true, true) - // cms.CurVendorSync.FullSyncStoresSkus(jxcontext.AdminCtx, dao.GetDB(), []int{model.VendorIDJD}, nil, true, true) - cms.CurVendorSync.SyncStoresSkus(jxcontext.AdminCtx, dao.GetDB(), []int{model.VendorIDJD, model.VendorIDEBAI, model.VendorIDMTWM}, nil, nil, false, true, true) - netprinter.RebindAllPrinters(jxcontext.AdminCtx, false, true) -} - func ScheduleTimerFunc(handler func(), timeList []string) { now := time.Now() nextTime := jxutils.GetNextTimeFromList(now, timeList) @@ -191,3 +133,16 @@ func ScheduleTimerFunc(handler func(), timeList []string) { ScheduleTimerFunc(handler, timeList) }) } + +func ScheduleTimerFuncByInterval(handler func(), delay, inerval time.Duration) { + globals.SugarLogger.Debugf("ScheduleTimerFuncByInterval, delay:%v, inerval:%v", delay, inerval) + utils.AfterFuncWithRecover(delay, func() { + beginTime := time.Now() + handler() + delay = inerval - time.Now().Sub(beginTime) + if delay < time.Second { + delay = time.Second + } + ScheduleTimerFuncByInterval(handler, delay, inerval) + }) +} diff --git a/business/jxstore/misc/misc_test.go b/business/jxstore/misc/misc_test.go new file mode 100644 index 000000000..be9de50bc --- /dev/null +++ b/business/jxstore/misc/misc_test.go @@ -0,0 +1,13 @@ +package misc + +import ( + "testing" + "time" +) + +func TestScheduleTimerFuncByInterval(t *testing.T) { + ScheduleTimerFuncByInterval(func() { + t.Log(time.Now()) + }, time.Second, 7*time.Second) + time.Sleep(30 * time.Second) +} diff --git a/controllers/jx_order.go b/controllers/jx_order.go index c13bbbe3d..5f457a4cf 100644 --- a/controllers/jx_order.go +++ b/controllers/jx_order.go @@ -451,7 +451,7 @@ func (c *OrderController) RefreshOrderFinancial() { c.callRefreshOrderFinancial(func(params *tOrderRefreshOrderFinancialParams) (retVal interface{}, errCode string, err error) { timeList, err2 := jxutils.BatchStr2Time(params.FromTime, params.ToTime) if err = err2; err == nil { - retVal, err = misc.RefreshOrderFinancial(params.Ctx, timeList[0], timeList[1], params.IsAsync, params.IsContinueWhenError) + retVal, err = orderman.FixedOrderManager.RefreshOrderFinancial(params.Ctx, timeList[0], timeList[1], params.IsAsync, params.IsContinueWhenError) } return retVal, "", err })