瀏覽代碼

Merge branch 'master' into feature/pool255_future_good

xyxie 4 月之前
父節點
當前提交
5e7cb7d467
共有 12 個文件被更改,包括 357 次插入17 次删除
  1. 1 0
      .gitignore
  2. 1 0
      go.mod
  3. 2 0
      go.sum
  4. 70 1
      models/data_manage/base_from_eia_steo.go
  5. 12 1
      models/db.go
  6. 1 1
      services/data/chart_info.go
  7. 53 0
      services/data/edb_info.go
  8. 166 1
      services/eia_steo.go
  9. 6 1
      services/sync_hz_data.go
  10. 27 5
      services/task.go
  11. 17 7
      utils/config.go
  12. 1 0
      utils/constants.go

+ 1 - 0
.gitignore

@@ -15,3 +15,4 @@ eta_task
 /README.md
 /eta_task.exe~
 /*.mod
+/test/

+ 1 - 0
go.mod

@@ -14,6 +14,7 @@ require (
 	github.com/olivere/elastic/v7 v7.0.32
 	github.com/rdlucklib/rdluck_tools v1.0.3
 	github.com/shopspring/decimal v1.3.1
+	github.com/tealeg/xlsx v1.0.5
 	golang.org/x/net v0.21.0
 	gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
 )

+ 2 - 0
go.sum

@@ -191,6 +191,8 @@ github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKs
 github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
 github.com/syndtr/goleveldb v0.0.0-20160425020131-cfa635847112/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0=
 github.com/syndtr/goleveldb v0.0.0-20181127023241-353a9fca669c/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0=
+github.com/tealeg/xlsx v1.0.5 h1:+f8oFmvY8Gw1iUXzPk+kz+4GpbDZPK1FhPiQRd+ypgE=
+github.com/tealeg/xlsx v1.0.5/go.mod h1:btRS8dz54TDnvKNosuAqxrM1QgN1udgk9O34bDCnORM=
 github.com/ugorji/go v0.0.0-20171122102828-84cb69a8af83/go.mod h1:hnLbHMwcvSihnDhEfx2/BzKp2xb0Y+ErdfYcrs9tkJQ=
 github.com/wendal/errors v0.0.0-20130201093226-f66c77a7882b/go.mod h1:Q12BUT7DqIlHRmgv3RskH+UCM/4eqVMgI0EMmlSpAXc=
 github.com/ylywyn/jpush-api-go-client v0.0.0-20190906031852-8c4466c6e369/go.mod h1:Nv7wKD2/bCdKUFNKcJRa99a+1+aSLlCRJFriFYdjz/I=

+ 70 - 1
models/data_manage/base_from_eia_steo.go

@@ -1,8 +1,11 @@
 package data_manage
 
 import (
-	"github.com/beego/beego/v2/client/orm"
+	"eta/eta_task/utils"
+
 	"time"
+
+	"github.com/beego/beego/v2/client/orm"
 )
 
 // BaseFromEiaSteoIndex EiaSteo指标
@@ -56,6 +59,13 @@ func GetBaseFromEiaSteoIndexAll(dateStr string) (list []*BaseFromEiaSteoIndex, e
 	return
 }
 
+func GetBaseFromEiaSteoIndexCodeListByDate(dateStr string) (list []string, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT index_code FROM base_from_eia_steo_index WHERE modify_time>=?`
+	_, err = o.Raw(sql, dateStr).QueryRows(&list)
+	return
+}
+
 // Update 更新作者基础信息
 func (item *BaseFromEiaSteoIndex) Update(cols []string) (err error) {
 	o := orm.NewOrm()
@@ -68,6 +78,8 @@ type BaseFromEiaSteoClassify struct {
 	BaseFromEiaSteoClassifyId int       `orm:"column(base_from_eia_steo_classify_id);pk"`
 	ClassifyName              string    `description:"分类名称(中文名称)"`
 	ClassifyNameOriginal      string    `description:"分类名称(原始名称)"`
+	ParentId                  int       `description:"父级id"`
+	Level                     int       `description:"层级"`
 	ModifyTime                time.Time `description:"最新更新时间"`
 	CreateTime                time.Time `description:"创建时间"`
 }
@@ -94,6 +106,12 @@ type BaseFromEiaSteoData struct {
 	CreateTime             time.Time `description:"创建时间"`
 }
 
+func (b *BaseFromEiaSteoData) Update(cols []string) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Update(b, cols...)
+	return
+}
+
 func AddBaseFromEiaSteoData(item *BaseFromEiaSteoData) (lastId int64, err error) {
 	o := orm.NewOrm()
 	lastId, err = o.Insert(item)
@@ -108,6 +126,28 @@ func GetBaseFromEiaSteoClassifyAll() (list []*BaseFromEiaSteoClassify, err error
 	return
 }
 
+func AddBaseEiaSteoClassify(item *BaseFromEiaSteoClassify) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}
+
+func (item *BaseFromEiaSteoClassify) Update(cols []string) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Update(item, cols...)
+	return
+}
+
+func BatchDeleteBaseFromEiaSteoClassify(id []int) (err error) {
+	if len(id) == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	sql := `DELETE FROM base_from_eia_steo_classify WHERE base_from_eia_steo_classify_id IN (` + utils.GetOrmInReplace(len(id)) + `)`
+	_, err = o.Raw(sql, id).Exec()
+	return
+}
+
 type EiaSteoIndexResp struct {
 	Ret     int
 	Msg     string
@@ -124,6 +164,14 @@ type EiaSteoIndexDataResp struct {
 	Data    []*BaseFromEiaSteoData
 }
 
+type EiaSteoClassifyDataResp struct {
+	Ret     int
+	Msg     string
+	ErrMsg  string
+	ErrCode string
+	Data    []*BaseFromEiaSteoClassify
+}
+
 func GetBaseFromEiaSteoIndexDataAll(dateStr string) (list []*BaseFromEiaSteoData, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT * FROM base_from_eia_steo_data WHERE create_time>=?`
@@ -131,9 +179,30 @@ func GetBaseFromEiaSteoIndexDataAll(dateStr string) (list []*BaseFromEiaSteoData
 	return
 }
 
+func GetBaseFromEiaSteoIndexDataByIndexCode(indexCode, dateStr string) (list []*BaseFromEiaSteoData, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM base_from_eia_steo_data WHERE index_code=? AND modify_time>=?`
+	_, err = o.Raw(sql, indexCode, dateStr).QueryRows(&list)
+	return
+}
+
+func GetBaseFromEiaSteoIndexDataByDate(dateStr string) (list []*BaseFromEiaSteoData, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM base_from_eia_steo_data WHERE modify_time>=?`
+	_, err = o.Raw(sql, dateStr).QueryRows(&list)
+	return
+}
+
 func GetBaseFromEiaSteoIndexMaxDate() (max_date time.Time, err error) {
 	o := orm.NewOrm()
 	sql := ` SELECT max(a.data_time)as max_date FROM base_from_eia_steo_data as a `
 	err = o.Raw(sql).QueryRow(&max_date)
 	return
 }
+
+func GetBaseFromEiaSteoIndexMaxCreateDate() (max_date time.Time, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT max(a.create_time)as max_date FROM base_from_eia_steo_index as a `
+	err = o.Raw(sql).QueryRow(&max_date)
+	return
+}

+ 12 - 1
models/db.go

@@ -6,9 +6,10 @@ import (
 	"eta/eta_task/models/data_manage/future_good"
 	"eta/eta_task/models/report"
 	"eta/eta_task/utils"
-	_ "github.com/go-sql-driver/mysql"
 	"time"
 
+	_ "github.com/go-sql-driver/mysql"
+
 	"github.com/beego/beego/v2/client/orm"
 )
 
@@ -66,6 +67,15 @@ func init() {
 		etaDb, _ := orm.GetDB("eta")
 		etaDb.SetConnMaxLifetime(10 * time.Minute)
 	}
+	// 用户主库
+	if utils.MYSQL_WEEKLY_URL != `` && (utils.BusinessCode == utils.BusinessCodeRelease || utils.BusinessCode == utils.BusinessCodeSandbox || utils.BusinessCode == utils.BusinessCodeDebug) {
+		_ = orm.RegisterDataBase("weekly", "mysql", utils.MYSQL_WEEKLY_URL)
+		orm.SetMaxIdleConns("weekly", 50)
+		orm.SetMaxOpenConns("weekly", 100)
+
+		weeklyDb, _ := orm.GetDB("weekly")
+		weeklyDb.SetConnMaxLifetime(10 * time.Minute)
+	}
 
 	orm.Debug = true
 	orm.DebugLog = orm.NewLog(utils.Binlog)
@@ -114,6 +124,7 @@ func initEdbDataTable() {
 		new(data_manage.BaseFromTradeIneIndex),
 		new(data_manage.BaseFromChangesVisitorsCovid),
 		new(data_manage.BaseFromEiaSteoIndex),
+		new(data_manage.BaseFromEiaSteoClassify),
 		new(data_manage.BaseFromEiaSteoData),
 		new(data_manage.ComTradeIndex),           // 联合国指标表
 		new(data_manage.ComTradeCodeMapping),     // 联合国指标关系表

+ 1 - 1
services/data/chart_info.go

@@ -5,7 +5,7 @@ import (
 	"fmt"
 )
 
-//设置图表中,指标的最新日期
+// SetChartEdbEndDate 设置图表中,指标的最新日期
 func SetChartEdbEndDate() {
 	var err error
 	defer func() {

+ 53 - 0
services/data/edb_info.go

@@ -154,12 +154,20 @@ func RefreshDataFromPb(wg *sync.WaitGroup) (err error) {
 		return errors.New("GetEdbInfoByCondition:" + err.Error())
 	}
 
+	nowDate := time.Now().Format(utils.FormatDate)
+	sunDay := int(time.Now().Weekday())
 	for _, v := range items {
 		startDate := ""
 		if v.Frequency == "日度" {
 			startDate = v.EndDate.AddDate(0, 0, -utils.DATA_REFRESH).Format(utils.FormatDate)
+			if v.EndDate.Format(utils.FormatDate) == nowDate {
+				continue
+			}
 		} else if v.Frequency == "周度" {
 			startDate = v.EndDate.AddDate(0, 0, -(utils.DATA_REFRESH * 7)).Format(utils.FormatDate)
+			if sunDay != 0 {
+				continue
+			}
 		} else if v.Frequency == "月度" {
 			startDate = v.EndDate.AddDate(0, -utils.DATA_REFRESH, 0).Format(utils.FormatDate)
 		} else if v.Frequency == "季度" {
@@ -1322,3 +1330,48 @@ func RefreshBaseDataFromSource(wg *sync.WaitGroup, source int) (err error) {
 	}
 	return err
 }
+
+// RefreshDataFromTradeAnalysis 刷新持仓分析指标
+func RefreshDataFromTradeAnalysis(wg *sync.WaitGroup) (err error) {
+	utils.FileLog.Info(fmt.Sprintf("持仓分析指标刷新开始: %s", time.Now().Format(utils.FormatDateTime)))
+	errMsgList := make([]string, 0)
+	defer func() {
+		if err != nil {
+			tips := fmt.Sprintf("RefreshDataFromTradeAnalysis err: %v", err)
+			utils.FileLog.Info(tips)
+			go alarm_msg.SendAlarmMsg(tips, 3)
+		}
+		if len(errMsgList) > 0 {
+			tips := fmt.Sprintf("RefreshDataFromTradeAnalysis ErrMsg: %s", strings.Join(errMsgList, "\n"))
+			utils.FileLog.Info(tips)
+			go alarm_msg.SendAlarmMsg(tips, 3)
+		}
+		wg.Done()
+	}()
+
+	var condition string
+	var pars []interface{}
+	condition += ` AND source = ? AND no_update = 0 `
+	pars = append(pars, utils.DATA_SOURCE_TRADE_ANALYSIS)
+	items, e := data_manage.GetEdbInfoByCondition(condition, pars, 0)
+	if e != nil {
+		err = fmt.Errorf("获取持仓分析指标失败, %v", e)
+		return
+	}
+
+	for _, v := range items {
+		// 持仓分析指标只有日度
+		startDate := v.EndDate.AddDate(0, 0, -utils.DATA_REFRESH).Format(utils.FormatDate)
+		resp, e := RefreshEdbData(v.EdbInfoId, v.Source, v.SubSource, v.EdbCode, startDate)
+		if e != nil {
+			errMsgList = append(errMsgList, fmt.Sprintf("EdbCode: %s, RefreshEdbData err: %v", v.EdbCode, e))
+			continue
+		}
+		if resp.Ret != 200 {
+			errMsgList = append(errMsgList, fmt.Sprintf("EdbCode: %s, RefreshEdbData err: %v, errMsg: %s", v.EdbCode, e, resp.ErrMsg))
+			continue
+		}
+	}
+	utils.FileLog.Info(fmt.Sprintf("持仓分析指标刷新结束: %s", time.Now().Format(utils.FormatDateTime)))
+	return err
+}

+ 166 - 1
services/eia_steo.go

@@ -11,7 +11,7 @@ import (
 // SyncEiaSteoIndex EIA STEO报告 指标
 func SyncEiaSteoIndex() (err error) {
 	var startDate string
-	maxDate, err := data_manage.GetBaseFromEiaSteoIndexMaxDate()
+	maxDate, err := data_manage.GetBaseFromEiaSteoIndexMaxCreateDate()
 	if err != nil || maxDate.IsZero() {
 		startDate = time.Now().AddDate(0, 0, -1).Format(utils.FormatDate) + " 00:00:00"
 	} else {
@@ -24,6 +24,11 @@ func SyncEiaSteoIndex() (err error) {
 	data["StartDate"] = startDate
 	//data["EndDate"] = endDate
 	result, err := HttpPost("SyncEiaSteoIndex", method, data)
+	if err != nil {
+		fmt.Println("HttpPost err:", err)
+		utils.FileLog.Info("HttpPost err:", err)
+		return
+	}
 	utils.FileLog.Info(result)
 	fmt.Println(result)
 
@@ -47,6 +52,9 @@ func SyncEiaSteoIndex() (err error) {
 
 	for _, zv := range respObj.Data {
 		//if _, ok := existIndexMap[zv.IndexCode]; !ok {
+		if zv.BaseFromEiaSteoIndexId <= 0 {
+			continue
+		}
 		newID, err := data_manage.InsertOrUpdateBaseFromEiaSteoIndex(zv)
 		if err != nil {
 			fmt.Println("InsertOrUpdateBaseFromEiaSteoIndex error:", err)
@@ -78,6 +86,11 @@ func SyncEiaSteoIndexData() (err error) {
 
 		var result string
 		result, err = HttpPost("SyncEiaSteoIndexData", method, data)
+		if err != nil {
+			fmt.Println("HttpPost err:", err)
+			utils.FileLog.Info("HttpPost err:", err)
+			return
+		}
 		utils.FileLog.Info(result)
 		fmt.Println(result)
 
@@ -110,3 +123,155 @@ func SyncEiaSteoIndexData() (err error) {
 	}
 	return err
 }
+
+// EIA STEO报告-分类
+func SyncEiaSteoClassify() (err error) {
+	data := make(map[string]interface{})
+	data["Source"] = utils.DATA_SOURCE_EIA_STEO
+	method := `classify/list`
+	result, err := HttpPost("SyncEiaSteoClassify", method, data)
+	if err != nil {
+		fmt.Println("SyncEiaSteoClassify HttpPost Err:", err.Error())
+		return err
+	}
+	utils.FileLog.Info("SyncEiaSteoClassify:" + result)
+	fmt.Println("SyncEiaSteoClassify result:", result)
+
+	respObj := new(data_manage.EiaSteoClassifyDataResp)
+	err = json.Unmarshal([]byte(result), &respObj)
+	if err != nil {
+		return err
+	}
+	//获取所有指标信息  某一天的
+	allClassify, err := data_manage.GetBaseFromEiaSteoClassifyAll()
+	if err != nil {
+		return
+	}
+
+	existClassifyMap := make(map[int]*data_manage.BaseFromEiaSteoClassify)
+	for _, v := range allClassify {
+		existClassifyMap[v.BaseFromEiaSteoClassifyId] = v
+	}
+
+	for _, item := range respObj.Data {
+		if oldClassify, ok := existClassifyMap[item.BaseFromEiaSteoClassifyId]; !ok {
+			newID, err := data_manage.AddBaseEiaSteoClassify(item)
+			if err != nil {
+				fmt.Println("InsertOrUpdateBaseEiaSteoClassify error:", err)
+			}
+			fmt.Println("InsertOrUpdateBaseEiaSteoClassify new indexID:", newID)
+		} else {
+			var upDateCols []string
+			if oldClassify.ClassifyName != item.ClassifyName {
+				oldClassify.ClassifyName = item.ClassifyName
+				upDateCols = append(upDateCols, "ClassifyName")
+			}
+			if oldClassify.ClassifyNameOriginal != item.ClassifyNameOriginal {
+				oldClassify.ClassifyNameOriginal = item.ClassifyNameOriginal
+				upDateCols = append(upDateCols, "ClassifyNameOriginal")
+			}
+			if oldClassify.ParentId != item.ParentId {
+				oldClassify.ParentId = item.ParentId
+				upDateCols = append(upDateCols, "ParentId")
+			}
+			if oldClassify.Level != item.Level {
+				oldClassify.Level = item.Level
+				upDateCols = append(upDateCols, "Level")
+			}
+			if len(upDateCols) > 0 {
+				oldClassify.ModifyTime = time.Now()
+				upDateCols = append(upDateCols, "ModifyTime")
+				err := oldClassify.Update(upDateCols)
+				if err != nil {
+					fmt.Println("UpdateBaseFromEiaSteoClassify error:", err)
+				}
+			}
+			delete(existClassifyMap, oldClassify.BaseFromEiaSteoClassifyId)
+		}
+	}
+	var deleteId []int
+	for k, _ := range existClassifyMap {
+		deleteId = append(deleteId, k)
+	}
+	err = data_manage.BatchDeleteBaseFromEiaSteoClassify(deleteId)
+	if err != nil {
+		fmt.Println("BatchDeleteBaseFromEiaSteoClassify error:", err)
+	}
+	return err
+}
+
+func SyncEiaSteoIndexDataV2() (err error) {
+	startDate := time.Now().AddDate(0, 0, -1).Format(utils.FormatDate) + " 00:00:00"
+
+	method := `index/data/list`
+
+	//获取所有指标信息  某一天的
+	allIndexCode, err := data_manage.GetBaseFromEiaSteoIndexCodeListByDate(startDate)
+	if err != nil {
+		fmt.Println("get GetBaseFromEiaSteoIndexAll err:" + err.Error())
+		utils.FileLog.Info("get GetBaseFromEiaSteoIndexCodeList err:", err)
+		return
+	}
+
+	for _, indexCode := range allIndexCode {
+		data := make(map[string]interface{})
+		data["Source"] = utils.DATA_SOURCE_EIA_STEO
+		data["StartDate"] = startDate
+		data["IndexCode"] = indexCode
+
+		var result string
+		result, err = HttpPost("SyncEiaSteoIndexData", method, data)
+		if err != nil {
+			fmt.Println("HttpPost err:", err)
+			utils.FileLog.Info("HttpPost err:", err)
+			return
+		}
+		utils.FileLog.Info(result)
+		fmt.Println(result)
+
+		respObj := new(data_manage.EiaSteoIndexDataResp)
+		err = json.Unmarshal([]byte(result), &respObj)
+		if err != nil {
+			fmt.Println("json.Unmarshal err:" + err.Error())
+			return err
+		}
+
+		existDataMap := make(map[int]*data_manage.BaseFromEiaSteoData)
+		allData, err1 := data_manage.GetBaseFromEiaSteoIndexDataByIndexCode(indexCode, startDate)
+		if err1 != nil {
+			utils.FileLog.Error("get GetBaseFromEiaSteoIndexDataByDate err:", err1.Error())
+			return
+		}
+		for _, dv := range allData {
+			existDataMap[dv.BaseFromEiaSteoDataId] = dv
+		}
+
+		for _, dv := range respObj.Data {
+			if v, ok := existDataMap[dv.BaseFromEiaSteoDataId]; !ok {
+				newID, err := data_manage.AddBaseFromEiaSteoData(dv)
+				if err != nil {
+					utils.FileLog.Error("add error:", err)
+				}
+				fmt.Println("insert new indexID:", newID)
+			} else {
+				upDateCols := make([]string, 0)
+				if !v.DataTime.Equal(dv.DataTime) {
+					v.DataTime = dv.DataTime
+					upDateCols = append(upDateCols, "data_time")
+				}
+				if v.Value != dv.Value {
+					v.Value = dv.Value
+					v.ModifyTime = dv.ModifyTime
+					upDateCols = append(upDateCols, []string{"value", "modify_time"}...)
+				}
+				if len(upDateCols) > 0 {
+					err = v.Update(upDateCols)
+					if err != nil {
+						utils.FileLog.Error("update error:", err)
+					}
+				}
+			}
+		}
+	}
+	return err
+}

+ 6 - 1
services/sync_hz_data.go

@@ -60,6 +60,11 @@ func SyncHzDataIndex(cont context.Context) (err error) {
 	}
 
 	// EiaSteo
+	err = SyncEiaSteoClassify()
+	if err != nil {
+		fmt.Println("SyncEiaSteoClassify Err:" + err.Error())
+		return
+	}
 	err = SyncEiaSteoIndex()
 	if err != nil {
 		fmt.Println("SyncEiaSteoIndex Err:" + err.Error())
@@ -140,7 +145,7 @@ func SyncHzDataIndex(cont context.Context) (err error) {
 func SyncHzDataIndexData() {
 	var err error
 	//EiaSteo
-	err = SyncEiaSteoIndexData()
+	err = SyncEiaSteoIndexDataV2()
 	if err != nil {
 		fmt.Println("SyncEiaSteoIndexData Err:" + err.Error())
 		return

+ 27 - 5
services/task.go

@@ -15,6 +15,7 @@ import (
 
 func Task() {
 	fmt.Println("task start")
+	
 	//如果是生产环境,才需要走这些任务
 	if utils.RunMode == "release" {
 		releaseTask()
@@ -33,11 +34,11 @@ func Task() {
 
 	XyTask()
 
-	// TODO:测试-刷新同花顺高频, 上线前删除
-	if utils.RunMode == "debug" {
-		refreshThsHfBase := task.NewTask("refreshThsHfBase", "0 30 12 * * *", data.RefreshBaseFromThsHfIndex)
-		task.AddTask("refreshThsHfBase", refreshThsHfBase)
-	}
+	// 测试-刷新同花顺高频, 上线前删除
+	//if utils.RunMode == "debug" {
+	//	refreshThsHfBase := task.NewTask("refreshThsHfBase", "0 30 12 * * *", data.RefreshBaseFromThsHfIndex)
+	//	task.AddTask("refreshThsHfBase", refreshThsHfBase)
+	//}
 
 	task.StartTask()
 	fmt.Println("task end")
@@ -65,6 +66,14 @@ func releaseTask() {
 	configRefreshData := task.NewTask("syncBaseDataExt", "0 */30 * * * * ", ConfigRefreshData)
 	task.AddTask("configRefreshData", configRefreshData)
 
+	// 定时刷新计算指标-默认每天的7:05,8:05分刷新计算指标
+	refreshCalculateEdbTaskTime := utils.RefreshCalculateEdbTaskTime
+	if refreshCalculateEdbTaskTime == "" {
+		refreshCalculateEdbTaskTime = "0 5 7,8 * * *"
+	}
+	refreshAllCalculateEdbData := task.NewTask("refreshAllCalculateEdbData", refreshCalculateEdbTaskTime, RefreshAllCalculateEdbData)
+	task.AddTask("refreshAllCalculateEdbData", refreshAllCalculateEdbData)
+
 	// 定时禁用钢联化工和wind指标的刷新状态
 	disableEdbRefresh := task.NewTask("disableEdbRefresh", "0 0 10 * * *", DisableEdbRefresh)
 	task.AddTask("disableEdbRefresh", disableEdbRefresh)
@@ -189,6 +198,12 @@ func RefreshData(cont context.Context) (err error) {
 		_ = data.RefreshDataFromCCF(&wg)
 	}()
 
+	// 持仓分析
+	go func() {
+		wg.Add(1)
+		_ = data.RefreshDataFromTradeAnalysis(&wg)
+	}()
+
 	wg.Wait()
 	////计算指标
 	data.RefreshDataFromCalculateAll()
@@ -215,6 +230,13 @@ func RefreshData(cont context.Context) (err error) {
 	return
 }
 
+// 刷新所有计算指标数据
+func RefreshAllCalculateEdbData(cont context.Context) (err error) {
+	////计算指标
+	err = data.RefreshDataFromCalculateAll()
+	return
+}
+
 // SyncBaseData 刷新基础数据
 func SyncBaseData(cont context.Context) (err error) {
 	now := time.Now()

+ 17 - 7
utils/config.go

@@ -8,13 +8,14 @@ import (
 )
 
 var (
-	RunMode        string //运行模式
-	MYSQL_URL      string //数据库连接
-	MYSQL_URL_RDDP string //数据库连接
-	MYSQL_URL_EDB  string
-	MYSQL_URL_DATA string
-	MYSQL_URL_GL   string
-	MYSQL_URL_ETA  string
+	RunMode          string //运行模式
+	MYSQL_URL        string //数据库连接
+	MYSQL_URL_RDDP   string //数据库连接
+	MYSQL_URL_EDB    string
+	MYSQL_URL_DATA   string
+	MYSQL_URL_GL     string
+	MYSQL_URL_ETA    string
+	MYSQL_WEEKLY_URL string //用户主库
 
 	REDIS_CACHE string //缓存地址
 	//Rc          *cache.Cache //redis缓存
@@ -148,6 +149,10 @@ var (
 )
 var HzDataApi string
 
+var (
+	RefreshCalculateEdbTaskTime string // 刷新计算指标的任务时间
+)
+
 func init() {
 	tmpRunMode, err := web.AppConfig.String("run_mode")
 	if err != nil {
@@ -182,6 +187,8 @@ func init() {
 	MYSQL_URL_DATA = config["mysql_url_data"]
 	MYSQL_URL_GL = config["mysql_url_gl"]
 	MYSQL_URL_ETA = config["mysql_url_eta"]
+	// 用户主库
+	MYSQL_WEEKLY_URL = config["mysql_url_weekly"]
 
 	REDIS_CACHE = config["beego_cache"]
 	if len(REDIS_CACHE) <= 0 {
@@ -321,4 +328,7 @@ func init() {
 	PbRefreshFrequency = config["pb_refresh_frequency"]
 	// 彭博刷新开关
 	PbRefreshOpen = config["pb_refresh_open"]
+
+	//任务刷新时间
+	RefreshCalculateEdbTaskTime = config["refresh_calculate_edb_task_time"]
 }

+ 1 - 0
utils/constants.go

@@ -106,6 +106,7 @@ const (
 	DATA_SOURCE_BLOOMBERG                            = 83       // bloomberg彭博数据
 	DATA_SOURCE_BUSINESS                             = 84       // 来源于自有数据
 	DATA_SOURCE_CCF                                  = 86       // CCF化纤信息
+	DATA_SOURCE_TRADE_ANALYSIS                       = 92       // 持仓分析
 )
 
 // 数据刷新频率