Browse Source

Merge branch 'pool_353' into debug

# Conflicts:
#	services/task.go
ziwen 2 years ago
parent
commit
cc2ed8db21

+ 15 - 0
models/db.go

@@ -84,6 +84,9 @@ func init() {
 
 	// 注册商品期货 相关数据表
 	initFutureGoodEdbDataTable()
+
+	//注册持仓分析 数据表
+	initTradePositionTop()
 }
 
 // initCompany 注册客户信息 数据表
@@ -181,3 +184,15 @@ func initFutureGoodEdbDataTable() {
 		new(future_good.FutureGoodEdbInfo),
 	)
 }
+
+// initTradePositionTop 注册持仓分析 数据表
+func initTradePositionTop() {
+	//注册对象
+	orm.RegisterModel(
+		new(data_manage.TradePositionDalianTop),
+		new(data_manage.TradePositionZhengzhouTop),
+		new(data_manage.TradePositionShanghaiTop),
+		new(data_manage.TradePositionIneTop),
+		new(data_manage.TradePositionCffexTop),
+	)
+}

+ 41 - 0
models/eta_trial.go

@@ -0,0 +1,41 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"hongze/hongze_task/utils"
+)
+
+type ETATrialListRespItem struct {
+	EtaTrialId     int    `orm:"column(eta_trial_id);pk" description:"eta试用客户id"`
+	UserName       string `description:"客户名称"`
+	CompanyName    string `description:"客户公司姓名"`
+	Position       string `description:"职位"`
+	Mobile         string `description:"手机号"`
+	ActiveTime     string `description:"累计活跃时长"`
+	LastLoginTime  string `description:"最后一次登陆时间"`
+	SellerId       int    `description:"销售id"`
+	Seller         string `description:"销售员名称"`
+	InterestModule string `description:"感兴趣模块"`
+	Expiration     int    `description:"账号到期时长"`
+	Enabled        int    `description:"1:有效,0:禁用"`
+	IndexNum       int    `description:"累计添加指标"`
+	ChartNum       int    `description:"累计添加图表"`
+	Password       string
+	Account        string
+	CreateTime     string
+	ModifyTime     string
+}
+
+func GetETATrialDisableList(endDate string) (items []*ETATrialListRespItem, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM eta_trial WHERE modify_time < ? AND enabled = 1 `
+	_, err = o.Raw(sql, endDate).QueryRows(&items)
+	return
+}
+
+func UpdateETATrialDisable(disableIds []int) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE eta_trial SET enabled = 0 WHERE eta_trial_id IN (` + utils.GetOrmInReplace(len(disableIds)) + `) `
+	_, err = o.Raw(sql, disableIds).Exec()
+	return
+}

+ 8 - 0
services/data/base_edb_lib.go

@@ -105,6 +105,14 @@ func RefreshEdbData(edbInfoId, source int, edbCode, startDate string) (resp *mod
 		urlStr = "mysteel_chemical/refresh"
 	case utils.DATA_SOURCE_EIA_STEO:
 		urlStr = "eia_steo/refresh"
+	case utils.DATA_SOURCE_PREDICT:
+		urlStr = "predict/refresh"
+	case utils.DATA_SOURCE_COM_TRADE:
+		urlStr = "com_trade/refresh"
+	case utils.DATA_SOURCE_SCI:
+		urlStr = "sci/refresh"
+	case utils.DATA_SOURCE_BAIINFO:
+		urlStr = "baiinfo/refresh"
 	}
 	if urlStr == "" {
 		err = fmt.Errorf(fmt.Sprint("source:", source, ";未实现该指标的刷新接口,请联系管理员"))

+ 92 - 0
services/data/edb_info.go

@@ -1857,3 +1857,95 @@ func RefreshDataFromEiaSteo(wg *sync.WaitGroup) (err error) {
 	}
 	return err
 }
+
+// RefreshDataFromComTrade 刷新 UN 数据
+func RefreshDataFromComTrade(wg *sync.WaitGroup) (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println("RefreshDataFromComTrade Err:" + err.Error())
+			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromGl ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			go alarm_msg.SendAlarmMsg("RefreshDataFromComTrade ErrMsg:"+err.Error(), 3)
+		}
+		//wg.Done()
+	}()
+	var condition string
+	var pars []interface{}
+	condition += " AND source=? "
+	pars = append(pars, utils.DATA_SOURCE_COM_TRADE)
+	items, err := data_manage.GetEdbInfoByCondition(condition, pars, 0)
+	if err != nil {
+		return errors.New("GetEdbInfoByCondition:" + err.Error())
+	}
+
+	for _, v := range items {
+		startDate := ""
+		if v.Frequency == "日度" {
+			startDate = v.EndDate.AddDate(0, 0, -utils.DATA_REFRESH).Format(utils.FormatDate)
+		} else if v.Frequency == "周度" {
+			startDate = v.EndDate.AddDate(0, 0, -(utils.DATA_REFRESH * 7)).Format(utils.FormatDate)
+		} else if v.Frequency == "月度" {
+			startDate = v.EndDate.AddDate(0, -utils.DATA_REFRESH, 0).Format(utils.FormatDate)
+		} else if v.Frequency == "季度" {
+			startDate = v.EndDate.AddDate(0, -utils.DATA_REFRESH*3, 0).Format(utils.FormatDate)
+		} else if v.Frequency == "年度" {
+			startDate = v.EndDate.AddDate(-utils.DATA_REFRESH, 0, 0).Format(utils.FormatDate)
+		} else {
+			startDate = v.EndDate.AddDate(0, 0, -utils.DATA_REFRESH).Format(utils.FormatDate)
+		}
+
+		resp, err := RefreshEdbData(v.EdbInfoId, v.Source, v.EdbCode, startDate)
+		if err != nil {
+			return errors.New("RefreshDataFromComTrade Err:" + err.Error())
+		}
+		if resp.Ret != 200 {
+			return errors.New("RefreshDataFromComTrade Err:" + resp.Msg + ";ErrMsg:" + resp.ErrMsg)
+		}
+	}
+	return err
+}
+
+// RefreshDataFromSci 刷新 卓创 数据
+func RefreshDataFromSci(wg *sync.WaitGroup) (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println("RefreshDataFromSci Err:" + err.Error())
+			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromGl ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			go alarm_msg.SendAlarmMsg("RefreshDataFromSci ErrMsg:"+err.Error(), 3)
+		}
+		//wg.Done()
+	}()
+	var condition string
+	var pars []interface{}
+	condition += " AND source=? "
+	pars = append(pars, utils.DATA_SOURCE_SCI)
+	items, err := data_manage.GetEdbInfoByCondition(condition, pars, 0)
+	if err != nil {
+		return errors.New("GetEdbInfoByCondition:" + err.Error())
+	}
+
+	for _, v := range items {
+		startDate := ""
+		if v.Frequency == "日度" {
+			startDate = v.EndDate.AddDate(0, 0, -utils.DATA_REFRESH).Format(utils.FormatDate)
+		} else if v.Frequency == "周度" {
+			startDate = v.EndDate.AddDate(0, 0, -(utils.DATA_REFRESH * 7)).Format(utils.FormatDate)
+		} else if v.Frequency == "月度" {
+			startDate = v.EndDate.AddDate(0, -utils.DATA_REFRESH, 0).Format(utils.FormatDate)
+		} else if v.Frequency == "季度" {
+			startDate = v.EndDate.AddDate(0, -utils.DATA_REFRESH*3, 0).Format(utils.FormatDate)
+		} else if v.Frequency == "年度" {
+			startDate = v.EndDate.AddDate(-utils.DATA_REFRESH, 0, 0).Format(utils.FormatDate)
+		} else {
+			startDate = v.EndDate.AddDate(0, 0, -utils.DATA_REFRESH).Format(utils.FormatDate)
+		}
+
+		resp, err := RefreshEdbData(v.EdbInfoId, v.Source, v.EdbCode, startDate)
+		if err != nil {
+			return errors.New("RefreshDataFromSci Err:" + err.Error())
+		}
+		if resp.Ret != 200 {
+			return errors.New("RefreshDataFromSci Err:" + resp.Msg + ";ErrMsg:" + resp.ErrMsg)
+		}
+	}
+	return err
+}

+ 47 - 47
services/data/trade_position_analysis.go

@@ -53,12 +53,12 @@ func InitTradePosition(exchange, startDate, endDate string) (err error, errMsg s
 		errMsg = "新增原始数据失败,MultiInsertTradeBaseDataToTop() Err: "
 		return
 	}
-	originList, err :=data_manage.GetTradePositionTopByExchangeDataTime(exchange, startDate, endDate)
+	originList, err := data_manage.GetTradePositionTopByExchangeDataTime(exchange, startDate, endDate)
 	if err != nil {
 		errMsg = "查询原始数据失败, GetTradePositionTopByExchangeDataTime() Err: "
 		return
 	}
-	if len(originList) <=0 {
+	if len(originList) <= 0 {
 		err = fmt.Errorf("原始数据没有值")
 		return
 	}
@@ -89,7 +89,7 @@ func InitTradePosition(exchange, startDate, endDate string) (err error, errMsg s
 			list = make([]*data_manage.TradePositionTop, 0)
 		}
 	}
-	if len(list) > 0  {
+	if len(list) > 0 {
 		err = data_manage.InsertMultiTradePositionTop(exchange, list)
 		if err != nil {
 			errMsg = "批量新增昨日数据失败,InsertMultiTradePositionTop() Err: "
@@ -103,20 +103,20 @@ func InitTradePosition(exchange, startDate, endDate string) (err error, errMsg s
 		_, ok2 := onlyEmptyMap[k+"_2"]
 		var dealType int
 		if ok1 && !ok2 {
-			dealType =2  //只有买单没有卖单
-		}else if !ok1 && ok2 {
+			dealType = 2 //只有买单没有卖单
+		} else if !ok1 && ok2 {
 			dealType = 1 //只有卖单没有买单的情况
-		}else{
+		} else {
 			continue
 		}
 		if dealType > 0 {
-			str := v.ClassifyName+"_"+v.ClassifyType+"_"+v.DataTime+"_"+strconv.Itoa(dealType)
+			str := v.ClassifyName + "_" + v.ClassifyType + "_" + v.DataTime + "_" + strconv.Itoa(dealType)
 			dealValue := 0
 			if lastVal, ok := topLastMap[str]; ok {
-				dealValue = int(float64(lastVal) * 0.7+0.5)
+				dealValue = int(float64(lastVal)*0.7 + 0.5)
 			}
 
-			tmp :=&data_manage.TradePositionTop{
+			tmp := &data_manage.TradePositionTop{
 				ClassifyName:  v.ClassifyName,
 				ClassifyType:  v.ClassifyType,
 				DealShortName: v.DealShortName,
@@ -164,7 +164,7 @@ func InitTradePosition(exchange, startDate, endDate string) (err error, errMsg s
 
 func dealTradeOriginData(dataTimeMap map[string]*data_manage.TradePositionTop, onlyEmptyMap map[string]bool, onlyEmptyNameMap map[string]*data_manage.TradePositionTop, currentItem *data_manage.TradePositionTop, topLastMap map[string]int, topLastRankMap map[string]int, startDate string, now time.Time) (tmp0 *data_manage.TradePositionTop, err error) {
 	classifyName := currentItem.ClassifyName
-	classifyType :=currentItem.ClassifyType
+	classifyType := currentItem.ClassifyType
 	dealShortName := currentItem.DealShortName
 	dealValue := currentItem.DealValue
 	dealChange := currentItem.DealChange
@@ -196,7 +196,7 @@ func dealTradeOriginData(dataTimeMap map[string]*data_manage.TradePositionTop, o
 			if ok1 {
 				yesterdayChange = yesterdayVal - beforeYesterdayItem.DealValue
 			}
-			tmp0 =&data_manage.TradePositionTop{
+			tmp0 = &data_manage.TradePositionTop{
 				ClassifyName:  classifyName,
 				ClassifyType:  classifyType,
 				DealShortName: dealShortName,
@@ -223,7 +223,7 @@ func DealYesterdayData(exchange, startDate string) (err error) {
 	if err != nil {
 		return
 	}
-	if startDate == firstItem.DataTime {  //如果当前是起始日,则无需统计修改前一天的数据
+	if startDate == firstItem.DataTime { //如果当前是起始日,则无需统计修改前一天的数据
 		return
 	}
 
@@ -237,7 +237,7 @@ func DealYesterdayData(exchange, startDate string) (err error) {
 		return
 	}
 	// 先查出T日最原始的数据
-	originList, err :=data_manage.GetTradePositionTopByExchangeDataTime(exchange, startDate, startDate)
+	originList, err := data_manage.GetTradePositionTopByExchangeDataTime(exchange, startDate, startDate)
 	if err != nil {
 		return
 	}
@@ -247,10 +247,10 @@ func DealYesterdayData(exchange, startDate string) (err error) {
 		if v.SourceType != 0 {
 			continue
 		}
-		str := v.ClassifyName+"_"+v.ClassifyType+"_"+v.DealShortName
+		str := v.ClassifyName + "_" + v.ClassifyType + "_" + v.DealShortName
 		if v.DealType == 1 {
 			originBuyMap[str] = v
-		}else if v.DealType == 2 {
+		} else if v.DealType == 2 {
 			originSoldMap[str] = v
 		}
 	}
@@ -260,7 +260,7 @@ func DealYesterdayData(exchange, startDate string) (err error) {
 	if err != nil {
 		return
 	}
-	if len(changeList) <=0 {
+	if len(changeList) <= 0 {
 		//err = fmt.Errorf("前天的数据无需修改")
 		return
 	}
@@ -276,10 +276,10 @@ func DealYesterdayData(exchange, startDate string) (err error) {
 			if v.SourceType == 2 {
 				continue
 			}
-			str := v.ClassifyName+"_"+v.ClassifyType+"_"+v.DealShortName
+			str := v.ClassifyName + "_" + v.ClassifyType + "_" + v.DealShortName
 			if v.DealType == 1 {
 				beforeYesterdayMap1[str] = v.DealValue
-			}else if v.DealType == 2 {
+			} else if v.DealType == 2 {
 				beforeYesterdayMap2[str] = v.DealValue
 			}
 		}
@@ -289,17 +289,17 @@ func DealYesterdayData(exchange, startDate string) (err error) {
 	// 批量更新到分析表中,
 	var updateAnalysisData []data_manage.UpdateDealValueChange
 	for _, v := range changeList {
-		str := v.ClassifyName+"_"+v.ClassifyType+"_"+v.DealShortName
+		str := v.ClassifyName + "_" + v.ClassifyType + "_" + v.DealShortName
 		dealValue := 0
 		dealChange := 0
 		if v.DealType == 1 {
 			if n, ok := originBuyMap[str]; ok {
-				dealValue =  n.DealValue - n.DealChange
+				dealValue = n.DealValue - n.DealChange
 				if beforeVal, ok1 := beforeYesterdayMap1[str]; ok1 {
 					dealChange = dealValue - beforeVal
 				}
 				tmp := data_manage.UpdateDealValueChange{
-					Id: v.Id,
+					Id:         v.Id,
 					DealValue:  dealValue,
 					DealChange: dealChange,
 					SourceType: 1,
@@ -307,14 +307,14 @@ func DealYesterdayData(exchange, startDate string) (err error) {
 				}
 				updateAnalysisData = append(updateAnalysisData, tmp)
 			}
-		}else if v.DealType == 2 {
+		} else if v.DealType == 2 {
 			if n, ok := originSoldMap[str]; ok {
-				dealValue =  n.DealValue - n.DealChange
+				dealValue = n.DealValue - n.DealChange
 				if beforeVal, ok1 := beforeYesterdayMap2[str]; ok1 {
 					dealChange = dealValue - beforeVal
 				}
 				tmp := data_manage.UpdateDealValueChange{
-					Id: v.Id,
+					Id:         v.Id,
 					DealValue:  dealValue,
 					DealChange: dealChange,
 					SourceType: 1,
@@ -356,8 +356,8 @@ func createAnalysisCleanTop(exchange, startDate, endDate string) (err error) {
 	now := time.Now()
 	var subDataList data_manage.TradePositionSubList
 
-	subChangeMap1 := make(map[string]int)  //净多单map
-	subChangeMap2 := make(map[string]int)  //净空单map
+	subChangeMap1 := make(map[string]int) //净多单map
+	subChangeMap2 := make(map[string]int) //净空单map
 	//查询所有差值数据,
 	yesterday, err := getYesterdayDate(startDate)
 	if err != nil {
@@ -370,7 +370,7 @@ func createAnalysisCleanTop(exchange, startDate, endDate string) (err error) {
 	}
 	if len(yesterdayTopList1) > 0 {
 		for _, v := range yesterdayTopList1 {
-			nameStr := v.ClassifyName+"_"+v.ClassifyType+"_"+v.DataTime+"_"+v.DealShortName
+			nameStr := v.ClassifyName + "_" + v.ClassifyType + "_" + v.DataTime + "_" + v.DealShortName
 			subChangeMap1[nameStr] = v.DealValue
 		}
 	}
@@ -382,7 +382,7 @@ func createAnalysisCleanTop(exchange, startDate, endDate string) (err error) {
 	}
 	if len(yesterdayTopList2) > 0 {
 		for _, v := range yesterdayTopList2 {
-			nameStr := v.ClassifyName+"_"+v.ClassifyType+"_"+v.DataTime+"_"+v.DealShortName
+			nameStr := v.ClassifyName + "_" + v.ClassifyType + "_" + v.DataTime + "_" + v.DealShortName
 			subChangeMap2[nameStr] = v.DealValue
 		}
 	}
@@ -393,17 +393,17 @@ func createAnalysisCleanTop(exchange, startDate, endDate string) (err error) {
 	}
 	buyDataMap := make(map[string]int)
 	for _, v := range originDataList {
-		str := v.ClassifyName+"_"+v.ClassifyType+"_"+v.DataTime+"_"+v.DealShortName
+		str := v.ClassifyName + "_" + v.ClassifyType + "_" + v.DataTime + "_" + v.DealShortName
 		if v.DealType == 1 {
 			buyDataMap[str] = v.DealValue
-		}else if v.DealType == 2 {
+		} else if v.DealType == 2 {
 			subValue := 0
 			dealType := 0
 			if buy, ok := buyDataMap[str]; ok {
 				subValue = buy - v.DealValue
-				if subValue >=0 {
+				if subValue >= 0 {
 					dealType = 3
-				}else{
+				} else {
 					subValue = -subValue
 					dealType = 4
 				}
@@ -426,22 +426,22 @@ func createAnalysisCleanTop(exchange, startDate, endDate string) (err error) {
 	rankMap := make(map[string]int)
 	for _, v := range subDataList {
 		subValue := v.SubValue
-		nameStr := v.ClassifyName+"_"+v.ClassifyType+"_"+v.DataTime+"_"+v.DealShortName
+		nameStr := v.ClassifyName + "_" + v.ClassifyType + "_" + v.DataTime + "_" + v.DealShortName
 		if v.DealType == 3 {
 			subChangeMap1[nameStr] = subValue
 			dealType = 3
-			if _, ok :=rankMap[v.ClassifyName+"_"+v.ClassifyType+"_"+v.DataTime+"_3"]; !ok {
+			if _, ok := rankMap[v.ClassifyName+"_"+v.ClassifyType+"_"+v.DataTime+"_3"]; !ok {
 				rankMap[v.ClassifyName+"_"+v.ClassifyType+"_"+v.DataTime+"_3"] = 1
-			}else{
-				rankMap[v.ClassifyName+"_"+v.ClassifyType+"_"+v.DataTime+"_3"] ++
+			} else {
+				rankMap[v.ClassifyName+"_"+v.ClassifyType+"_"+v.DataTime+"_3"]++
 			}
-		}else if v.DealType == 4 {
+		} else if v.DealType == 4 {
 			subChangeMap2[nameStr] = subValue
 			dealType = 4
-			if _, ok :=rankMap[v.ClassifyName+"_"+v.ClassifyType+"_"+v.DataTime+"_4"]; !ok {
+			if _, ok := rankMap[v.ClassifyName+"_"+v.ClassifyType+"_"+v.DataTime+"_4"]; !ok {
 				rankMap[v.ClassifyName+"_"+v.ClassifyType+"_"+v.DataTime+"_4"] = 1
-			}else{
-				rankMap[v.ClassifyName+"_"+v.ClassifyType+"_"+v.DataTime+"_4"] ++
+			} else {
+				rankMap[v.ClassifyName+"_"+v.ClassifyType+"_"+v.DataTime+"_4"]++
 			}
 		}
 		//和T-1日比较差值
@@ -450,13 +450,13 @@ func createAnalysisCleanTop(exchange, startDate, endDate string) (err error) {
 		if err != nil {
 			return
 		}
-		yesterdayStr := v.ClassifyName+"_"+v.ClassifyType+"_"+tmpTimeStr+"_"+v.DealShortName
+		yesterdayStr := v.ClassifyName + "_" + v.ClassifyType + "_" + tmpTimeStr + "_" + v.DealShortName
 		dealChange := 0
 		if dealType == 3 {
 			if c, ok := subChangeMap1[yesterdayStr]; ok {
 				dealChange = subValue - c
 			}
-		}else if dealType == 4 {
+		} else if dealType == 4 {
 			if c, ok := subChangeMap2[yesterdayStr]; ok {
 				dealChange = subValue - c
 			}
@@ -498,14 +498,14 @@ func getYesterdayDate(today string) (yesterday string, err error) {
 	if err != nil {
 		return
 	}
-	tmpTimeDate := tmpTime.AddDate(0,0,-i)
+	tmpTimeDate := tmpTime.AddDate(0, 0, -i)
 	weekStr := tmpTimeDate.Weekday().String()
 	if weekStr == "Sunday" {
-		i +=2
+		i += 2
 	} else if weekStr == "Saturday" {
-		i +=1
+		i += 1
 	}
-	tmpTimeDate = tmpTime.AddDate(0,0,-i)
+	tmpTimeDate = tmpTime.AddDate(0, 0, -i)
 	yesterday = tmpTimeDate.Format(utils.FormatDate)
 	return
-}
+}

+ 42 - 0
services/eta_trial.go

@@ -0,0 +1,42 @@
+package services
+
+import (
+	"context"
+	"fmt"
+	"hongze/hongze_task/models"
+	"hongze/hongze_task/utils"
+	"time"
+)
+
+//ETA试用客户 启用->禁用
+func ETATrialDisabled(cont context.Context) (err error) {
+	defer func() {
+		if err != nil {
+			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "ETA试用客户 启用->禁用 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+		}
+	}()
+
+	expiredTime := time.Now().AddDate(0, 0, -14).Format(utils.FormatDate)
+
+	items, err := models.GetETATrialDisableList(expiredTime)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		fmt.Println("GetETATrialDisableList Err:" + err.Error())
+		utils.FileLog.Info("GetETATrialDisableList Err:%s" + err.Error())
+		return
+	}
+	disableIds := make([]int, 0)
+	for _, v := range items {
+		fmt.Println(v.Mobile)
+		disableIds = append(disableIds, v.EtaTrialId)
+	}
+
+	if len(disableIds) > 0 {
+		err = models.UpdateETATrialDisable(disableIds)
+		if err != nil {
+			return err
+		}
+	}
+
+
+	return
+}

+ 10 - 2
services/task.go

@@ -126,7 +126,7 @@ func Task() {
 	task.AddTask("定时生成本周研究汇总", cygxResearchSummary)
 
 	// 定时生成上周纪要汇总
-	cygxLastWeekSummary := task.NewTask("CygxLastWeekSummary", "0 0 8 * * 2", CygxLastWeekSummary)
+	cygxLastWeekSummary := task.NewTask("CygxLastWeekSummary", "0 0 10 * * 2", CygxLastWeekSummary)
 	task.AddTask("定时生成上周纪要汇总", cygxLastWeekSummary)
 	//CygxResearchSummary()
 	//CygxLastWeekSummary()
@@ -135,6 +135,10 @@ func Task() {
 	checkBusinessTripApply := task.NewTask("checkBusinessTripApply", "0 */30 * * * *", CheckBusinessTripApply)
 	task.AddTask("checkBusinessTripApply", checkBusinessTripApply)
 
+	//ETA试用客户 启用->禁用
+	eTATrialDisabled := task.NewTask("companyFreeze", "0 15 2 * * *", ETATrialDisabled)
+	task.AddTask("ETA试用客户 启用->禁用", eTATrialDisabled)
+
 	task.StartTask()
 
 	fmt.Println("task end")
@@ -250,7 +254,7 @@ func OneMinute(cont context.Context) (err error) {
 
 func RefreshData(cont context.Context) (err error) {
 	wg := sync.WaitGroup{}
-	wg.Add(13)
+	wg.Add(15)
 	//hour := time.Now().Hour()
 	//if hour != 0 {
 	//}
@@ -279,6 +283,10 @@ func RefreshData(cont context.Context) (err error) {
 	go data.RefreshDataFromMysteelChemical(&wg)
 	//eia steo报告指标
 	go data.RefreshDataFromEiaSteo(&wg)
+	//UN报告指标
+	go data.RefreshDataFromComTrade(&wg)
+	//卓创报告指标
+	go data.RefreshDataFromSci(&wg)
 
 	wg.Wait()
 	////计算指标

+ 15 - 91
utils/common.go

@@ -7,7 +7,6 @@ import (
 	"encoding/base64"
 	"encoding/hex"
 	"encoding/json"
-	"errors"
 	"fmt"
 	"image"
 	"image/png"
@@ -722,96 +721,6 @@ func GetNowYearLastDay() time.Time {
 	return nowYearLastDay
 }
 
-// CalculationDate 计算两个日期之间相差n年m月y天
-func CalculationDate(startDate, endDate time.Time) (beetweenDay string, err error) {
-	//startDate := time.Date(2021, 3, 28, 0, 0, 0, 0, time.Now().Location())
-	//endDate := time.Date(2022, 3, 31, 0, 0, 0, 0, time.Now().Location())
-	numYear := endDate.Year() - startDate.Year()
-
-	numMonth := int(endDate.Month()) - int(startDate.Month())
-
-	numDay := 0
-	//获取截止月的总天数
-	endDateDays := getMonthDay(endDate.Year(), int(endDate.Month()))
-
-	//获取截止月的前一个月
-	endDatePrevMonthDate := endDate.AddDate(0, -1, 0)
-	//获取截止日期的上一个月的总天数
-	endDatePrevMonthDays := getMonthDay(endDatePrevMonthDate.Year(), int(endDatePrevMonthDate.Month()))
-	//获取开始日期的的月份总天数
-	startDateMonthDays := getMonthDay(startDate.Year(), int(startDate.Month()))
-
-	//判断,截止月是否完全被选中,如果相等,那么代表截止月份全部天数被选择
-	if endDate.Day() == endDateDays {
-		numDay = startDateMonthDays - startDate.Day() + 1
-
-		//如果剩余天数正好与开始日期的天数是一致的,那么月份加1
-		if numDay == startDateMonthDays {
-			numMonth++
-			numDay = 0
-			//超过月份了,那么年份加1
-			if numMonth == 12 {
-				numYear++
-				numMonth = 0
-			}
-		}
-	} else {
-		numDay = endDate.Day() - startDate.Day() + 1
-	}
-
-	//天数小于0,那么向月份借一位
-	if numDay < 0 {
-		//向上一个月借一个月的天数
-		numDay += endDatePrevMonthDays
-
-		//总月份减去一个月
-		numMonth = numMonth - 1
-	}
-
-	//月份小于0,那么向年份借一位
-	if numMonth < 0 {
-		//向上一个年借12个月
-		numMonth += 12
-
-		//总年份减去一年
-		numYear = numYear - 1
-	}
-	if numYear < 0 {
-		err = errors.New("日期异常")
-		return
-	}
-
-	if numYear > 0 {
-		beetweenDay += fmt.Sprint(numYear, "年")
-	}
-	if numMonth > 0 {
-		beetweenDay += fmt.Sprint(numMonth, "个月")
-	}
-	if numDay > 0 {
-		beetweenDay += fmt.Sprint(numDay, "天")
-	}
-	return
-}
-
-// getMonthDay 获取某年某月有多少天
-func getMonthDay(year, month int) (days int) {
-	if month != 2 {
-		if month == 4 || month == 6 || month == 9 || month == 11 {
-			days = 30
-
-		} else {
-			days = 31
-		}
-	} else {
-		if ((year%4) == 0 && (year%100) != 0) || (year%400) == 0 {
-			days = 29
-		} else {
-			days = 28
-		}
-	}
-	return
-}
-
 // SubStr 截取字符串(中文)
 func SubStr(str string, subLen int) string {
 	strRune := []rune(str)
@@ -880,3 +789,18 @@ func GetOrmInReplace(num int) string {
 	}
 	return strings.Join(template, ",")
 }
+
+func GetDaysBetween2Date(format, date1Str, date2Str string) (int, error) {
+	// 将字符串转化为Time格式
+	date1, err := time.ParseInLocation(format, date1Str, time.Local)
+	if err != nil {
+		return 0, err
+	}
+	// 将字符串转化为Time格式
+	date2, err := time.ParseInLocation(format, date2Str, time.Local)
+	if err != nil {
+		return 0, err
+	}
+	//计算相差天数
+	return int(date1.Sub(date2).Hours() / 24), nil
+}

+ 57 - 51
utils/constants.go

@@ -64,57 +64,63 @@ const (
 
 //数据来源渠道
 const (
-	DATA_SOURCE_THS                   = iota + 1 //同花顺
-	DATA_SOURCE_WIND                             //wind
-	DATA_SOURCE_PB                               //彭博
-	DATA_SOURCE_CALCULATE                        //计算指标
-	DATA_SOURCE_CALCULATE_LJZZY                  //累计值转月
-	DATA_SOURCE_CALCULATE_TBZ                    //同比值
-	DATA_SOURCE_CALCULATE_TCZ                    //同差值
-	DATA_SOURCE_CALCULATE_NSZYDPJJS              //N数值移动平均计算
-	DATA_SOURCE_MANUAL                           //手工指标
-	DATA_SOURCE_LZ                               //隆众
-	DATA_SOURCE_YS                               //有色
-	DATA_SOURCE_CALCULATE_HBZ                    //环比值->12
-	DATA_SOURCE_CALCULATE_HCZ                    //环差值->13
-	DATA_SOURCE_CALCULATE_BP                     //变频->14
-	DATA_SOURCE_GL                               //钢联->15
-	DATA_SOURCE_ZZ                               //郑商所->16
-	DATA_SOURCE_DL                               //大商所->17
-	DATA_SOURCE_SH                               //上期所->18
-	DATA_SOURCE_CFFEX                            //中金所->19
-	DATA_SOURCE_SHFE                             //上期能源->20
-	DATA_SOURCE_GIE                              //欧洲天然气->21
-	DATA_SOURCE_CALCULATE_TIME_SHIFT             //时间移位->22
-	DATA_SOURCE_CALCULATE_ZJPJ                   //直接拼接->23
-	DATA_SOURCE_CALCULATE_LJZTBPJ                //累计值同比拼接->24
-	DATA_SOURCE_LT                               //路透->25
-	DATA_SOURCE_COAL                             //煤炭网->26
-	DATA_SOURCE_PYTHON                           //python代码->27
-	DATA_SOURCE_PB_FINANCE                       //彭博财务数据->28
-	DATA_SOURCE_GOOGLE_TRAVEL                    //谷歌出行->29
-	DATA_SOURCE_PREDICT                          //普通预测指标->30
-	DATA_SOURCE_PREDICT_CALCULATE                //预测指标运算->31
-	DATA_SOURCE_PREDICT_CALCULATE_TBZ            //预测指标同比值->32
-	DATA_SOURCE_PREDICT_CALCULATE_TCZ            //预测指标同差值->33
-	DATA_SOURCE_MYSTEEL_CHEMICAL                 //钢联化工->34
-	DATA_SOURCE_CALCULATE_CJJX                   //超季节性->35
-	DATA_SOURCE_EIA_STEO                         //eia steo报告->36
-	DATA_SOURCE_CALCULATE_NHCC                         //计算指标(拟合残差)->37
-	DATA_SOURCE_COM_TRADE                              //联合国商品贸易数据->38
-	DATA_SOURCE_PREDICT_CALCULATE_NSZYDPJJS            //预测指标 - N数值移动平均计算 -> 39
-	DATA_SOURCE_CALCULATE_ADJUST                       //数据调整->40
-	DATA_SOURCE_SCI                                    //卓创数据(红桃三)->41
-	DATA_SOURCE_PREDICT_CALCULATE_LJZZY                //预测指标 - 累计值转月->42
-	DATA_SOURCE_PREDICT_CALCULATE_HBZ                  //预测指标 - 环比值->43
-	DATA_SOURCE_PREDICT_CALCULATE_HCZ                  //预测指标 - 环差值->44
-	DATA_SOURCE_PREDICT_CALCULATE_BP                   //预测指标 - 变频->45
-	DATA_SOURCE_PREDICT_CALCULATE_TIME_SHIFT           //预测指标 - 时间移位->46
-	DATA_SOURCE_PREDICT_CALCULATE_ZJPJ                 //预测指标 - 直接拼接->47
-	DATA_SOURCE_PREDICT_CALCULATE_LJZTBPJ              //预测指标 - 累计值同比拼接->48
-	DATA_SOURCE_PREDICT_CALCULATE_CJJX                 //预测指标 - 超季节性->49
-	DATA_SOURCE_PREDICT_CALCULATE_NHCC                 //预测指标 - 计算指标(拟合残差)->50
-	DATA_SOURCE_CALCULATE_JP                           //变频->51
+	DATA_SOURCE_THS                          = iota + 1 //同花顺
+	DATA_SOURCE_WIND                                    //wind->2
+	DATA_SOURCE_PB                                      //彭博->3
+	DATA_SOURCE_CALCULATE                               //指标运算->4
+	DATA_SOURCE_CALCULATE_LJZZY                         //累计值转月->5
+	DATA_SOURCE_CALCULATE_TBZ                           //同比值->6
+	DATA_SOURCE_CALCULATE_TCZ                           //同差值->7
+	DATA_SOURCE_CALCULATE_NSZYDPJJS                     //N数值移动平均计算->8
+	DATA_SOURCE_MANUAL                                  //手工指标->9
+	DATA_SOURCE_LZ                                      //隆众->10
+	DATA_SOURCE_YS                                      //有色->11
+	DATA_SOURCE_CALCULATE_HBZ                           //环比值->12
+	DATA_SOURCE_CALCULATE_HCZ                           //环差值->13
+	DATA_SOURCE_CALCULATE_BP                            //变频->14
+	DATA_SOURCE_GL                                      //钢联->15
+	DATA_SOURCE_ZZ                                      //郑商所->16
+	DATA_SOURCE_DL                                      //大商所->17
+	DATA_SOURCE_SH                                      //上期所->18
+	DATA_SOURCE_CFFEX                                   //中金所->19
+	DATA_SOURCE_SHFE                                    //上期能源->20
+	DATA_SOURCE_GIE                                     //欧洲天然气->21
+	DATA_SOURCE_CALCULATE_TIME_SHIFT                    //时间移位->22
+	DATA_SOURCE_CALCULATE_ZJPJ                          //直接拼接->23
+	DATA_SOURCE_CALCULATE_LJZTBPJ                       //累计值同比拼接->24
+	DATA_SOURCE_LT                                      //路透->25
+	DATA_SOURCE_COAL                                    //中国煤炭网->26
+	DATA_SOURCE_PYTHON                                  //python代码->27
+	DATA_SOURCE_PB_FINANCE                              //彭博财务数据->28
+	DATA_SOURCE_GOOGLE_TRAVEL                           //谷歌出行->29
+	DATA_SOURCE_PREDICT                                 //普通预测指标->30
+	DATA_SOURCE_PREDICT_CALCULATE                       //预测指标运算->31
+	DATA_SOURCE_PREDICT_CALCULATE_TBZ                   //预测同比值->32
+	DATA_SOURCE_PREDICT_CALCULATE_TCZ                   //预测同差值->33
+	DATA_SOURCE_MYSTEEL_CHEMICAL                        //钢联化工->34
+	DATA_SOURCE_CALCULATE_CJJX                          //超季节性->35
+	DATA_SOURCE_EIA_STEO                                //eia steo报告->36
+	DATA_SOURCE_CALCULATE_NHCC                          //计算指标(拟合残差)->37
+	DATA_SOURCE_COM_TRADE                               //联合国商品贸易数据->38
+	DATA_SOURCE_PREDICT_CALCULATE_NSZYDPJJS             //预测指标 - N数值移动平均计算 -> 39
+	DATA_SOURCE_CALCULATE_ADJUST                        //数据调整->40
+	DATA_SOURCE_SCI                                     //卓创数据(红桃三)->41
+	DATA_SOURCE_PREDICT_CALCULATE_LJZZY                 //预测指标 - 累计值转月->42
+	DATA_SOURCE_PREDICT_CALCULATE_HBZ                   //预测指标 - 环比值->43
+	DATA_SOURCE_PREDICT_CALCULATE_HCZ                   //预测指标 - 环差值->44
+	DATA_SOURCE_PREDICT_CALCULATE_BP                    //预测指标 - 变频->45
+	DATA_SOURCE_PREDICT_CALCULATE_TIME_SHIFT            //预测指标 - 时间移位->46
+	DATA_SOURCE_PREDICT_CALCULATE_ZJPJ                  //预测指标 - 直接拼接->47
+	DATA_SOURCE_PREDICT_CALCULATE_LJZTBPJ               //预测指标 - 累计值同比拼接->48
+	DATA_SOURCE_PREDICT_CALCULATE_CJJX                  //预测指标 - 超季节性->49
+	DATA_SOURCE_PREDICT_CALCULATE_NHCC                  //预测指标 - 计算指标(拟合残差)->50
+	DATA_SOURCE_CALCULATE_JP                            //变频->51
+	DATA_SOURCE_CALCULATE_NH                            //年化->52
+	DATA_SOURCE_CALCULATE_KSZS                          //扩散指数->53
+	DATA_SOURCE_PREDICT_CALCULATE_JP                    //预测指标 - 计算指标(降频)->54
+	DATA_SOURCE_PREDICT_CALCULATE_NH                    //预测指标 - 计算指标(年化)->55
+	DATA_SOURCE_PREDICT_CALCULATE_KSZS                  //预测指标 - 计算指标(扩散指数)->56
+	DATA_SOURCE_BAIINFO                                 //百川盈孚 ->57
 )
 
 //http://datawind.hzinsights.com:8040/hz_server