From 80c8e74c7428329f06d1aa3b70b95b46da732b0a Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期四, 27 六月 2024 20:09:03 +0800
Subject: [PATCH] 保存库存结算时间点重启定时任务

---
 main.go                      |    5 ++++-
 controllers/system_config.go |    6 ++++++
 task/tasklist.go             |   41 ++++++++++++++++++++++++++++++++---------
 3 files changed, 42 insertions(+), 10 deletions(-)

diff --git a/controllers/system_config.go b/controllers/system_config.go
index 60b2523..7c73191 100644
--- a/controllers/system_config.go
+++ b/controllers/system_config.go
@@ -9,6 +9,7 @@
 	"wms/pkg/structx"
 	"wms/request"
 	"wms/service"
+	"wms/task"
 )
 
 type SystemConfigController struct{}
@@ -54,6 +55,11 @@
 		}
 	}
 
+	if err := task.RestartDynamicTask(); err != nil {
+		util.ResponseFormat(c, code.SaveFail, "閲嶅惎瀹氭椂浠诲姟澶辫触")
+		return
+	}
+
 	util.ResponseFormat(c, code.Success, "淇濆瓨鎴愬姛")
 }
 
diff --git a/main.go b/main.go
index 99e764c..a2ea7c2 100644
--- a/main.go
+++ b/main.go
@@ -78,7 +78,10 @@
 	go service.InitHistoryReportData()
 
 	//瀹氭椂浠诲姟鍒濆鍖�
-	task.Init()
+	if err := task.Init(); err != nil {
+		logx.Errorf("task init error: %v", err.Error())
+		return
+	}
 
 	//閽夐拤鏈哄櫒浜哄垵濮嬪寲
 	dingtalkrobot.Init(conf.DingTalkConf.AlarmKey, conf.DingTalkConf.AlarmUrl)
diff --git a/task/tasklist.go b/task/tasklist.go
index e4ddd4b..ec6298b 100644
--- a/task/tasklist.go
+++ b/task/tasklist.go
@@ -4,19 +4,42 @@
 	"github.com/go-co-op/gocron"
 	"time"
 	"wms/pkg/logx"
+	"wms/service"
 )
 
-var s *gocron.Scheduler
+var dynamicScheduler *gocron.Scheduler
 
 func init() {
-	s = gocron.NewScheduler(time.Local)
+	dynamicScheduler = gocron.NewScheduler(time.Local)
 }
-func Init() {
-	_, err := s.Every(1).Month(1).Do(MonthStats) //姣忔湀鍒濇墽琛屼竴娆�
-	if err != nil {
-		logx.Errorf("init task err:%v", err)
-		panic(err)
-	}
+func Init() error {
+	return StartDynamicTask()
+}
 
-	s.StartAsync()
+func StartDynamicTask() (err error) {
+	sysCfgService := service.NewSystemConfigService()
+	day, timeStr, err := sysCfgService.GetInventoryCutOffPoint()
+	if err != nil {
+		return
+	}
+	if day != 0 && timeStr != "" {
+		_, err = dynamicScheduler.Every(1).Month(day).At(timeStr).Do(MonthStats) //姣忔湀鍒濇墽琛屼竴娆�
+		if err != nil {
+			logx.Errorf("init task err:%v", err)
+			return err
+		}
+	}
+	if dynamicScheduler.Len() == 0 {
+		return
+	}
+	dynamicScheduler.StartAsync()
+	return nil
+}
+
+func RestartDynamicTask() error {
+	if dynamicScheduler != nil {
+		dynamicScheduler.Stop()
+		dynamicScheduler.Clear()
+	}
+	return StartDynamicTask()
 }

--
Gitblit v1.8.0