浏览代码

Merge branch 'fix/2022-05-31' into debug

Roc 2 年之前
父节点
当前提交
19cf742125

+ 5 - 3
main.go

@@ -5,12 +5,13 @@ import (
 	"github.com/beego/beego/v2/server/web"
 	_ "hongze/hongze_task/routers"
 	"hongze/hongze_task/services"
+	"hongze/hongze_task/services/alarm_msg"
 	"hongze/hongze_task/utils"
 	"runtime"
 	"time"
 
-	"github.com/beego/beego/v2/server/web/context"
 	"github.com/beego/beego/v2/adapter/logs"
+	"github.com/beego/beego/v2/server/web/context"
 )
 
 func main() {
@@ -50,7 +51,8 @@ func Recover(ctx *context.Context, conf *web.Config) {
 			logs.Critical(fmt.Sprintf("%s:%d", file, line))
 			stack = stack + fmt.Sprintln(fmt.Sprintf("%s:%d</br>", file, line))
 		}
-		go utils.SendEmail(utils.APPNAME+"崩了"+time.Now().Format("2006-01-02 15:04:05"), stack, utils.EmailSendToUsers)
+		//go utils.SendEmail(utils.APPNAME+"崩了"+time.Now().Format("2006-01-02 15:04:05"), stack, utils.EmailSendToUsers)
+		go alarm_msg.SendAlarmMsg(utils.APPNAME+"崩了"+time.Now().Format("2006-01-02 15:04:05")+"\n"+stack, 3)
 	}
 	return
-}
+}

+ 5 - 3
models/company_product.go

@@ -200,12 +200,14 @@ type Sellers struct {
 
 func GetSellers() (items []*Sellers, err error) {
 	o := orm.NewOrm()
-	sql := `SELECT a.real_name,a.email,b.open_id,a.mobile,b.mobile,a.role_type_code,a.admin_id
+	sql := `SELECT a.real_name,a.email,c.open_id,a.mobile,b.mobile,a.role_type_code,a.admin_id
            FROM admin AS a
 			LEFT JOIN wx_user AS b ON a.mobile=b.mobile
 			LEFT JOIN user_record AS c ON b.user_id=c.user_id
-			WHERE role_type_code IN('ficc_seller','ficc_admin','rai_seller','rai_admin')
-			AND c.open_id<>'' and c.create_platform=1`
+			WHERE role_type_code IN('ficc_seller','ficc_group','ficc_team','rai_seller','rai_group')
+			and (
+				(a.email != "") or ( c.open_id<>'' and c.create_platform=1)
+			)`
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }

+ 2 - 0
models/data_manage/edb_data_base.go

@@ -61,6 +61,8 @@ func GetEdbDataTableName(source int) (tableName string) {
 		tableName = "edb_data_calculate_ljztbpj"
 	case utils.DATA_SOURCE_LT:
 		tableName = "edb_data_lt"
+	case utils.DATA_SOURCE_COAL:
+		tableName = "edb_data_coal"
 	default:
 		tableName = ""
 		errors.New("无效的渠道:" + strconv.Itoa(source))

+ 7 - 0
models/data_source_longzhong.go

@@ -635,3 +635,10 @@ func ModifyLzSurveyData(inputValue string, surveyDataId int) (err error) {
 	_, err = o.Raw(sql, inputValue, surveyDataId).Exec()
 	return
 }
+
+func ModifyLzSurveyDataV1(inputValue string, quotaSampleId int,shouldDateTimeStr string) (err error) {
+	o := orm.NewOrmUsingDB("edb")
+	sql := ` UPDATE longzhong_survey_data SET input_value=? WHERE quota_sample_id=? AND data_time=? `
+	_, err = o.Raw(sql, inputValue, quotaSampleId,shouldDateTimeStr).Exec()
+	return
+}

+ 56 - 23
models/db.go

@@ -50,54 +50,87 @@ func init() {
 	gl, _ := orm.GetDB("gl")
 	gl.SetConnMaxLifetime(10 * time.Minute)
 
+	orm.Debug = true
+	orm.DebugLog = orm.NewLog(utils.Binlog)
+
 	//注册对象
 	orm.RegisterModel(
 		new(EdbinfoSendMsgRecord),
+		new(StackCompanyStatistic),
+		new(company_contract.CompanyContract),
+		new(company_contract.CompanyContractPermission),
+		new(company_approval.CompanyApproval),
+		new(Classify),
+		new(ReportSendThsDetail),
+		new(Report),
+		new(UserViewStatistics),
+		new(roadshow.RsReportRecord), //路演记录
+		new(CompanyReportRecord),
+	)
+
+	// 注册客户信息 数据表
+	initCompany()
+
+	// 注册Edb指标 数据表
+	initEdbDataTable()
+
+	// 注册ETA表格 数据表
+	initYbTable()
+}
+
+// initCompany 注册客户信息 数据表
+func initCompany() {
+	//注册对象
+	orm.RegisterModel(
 		new(Company),
 		new(CompanyReportPermission),
 		new(CompanyReportPermissionLog),
+		new(CompanyOperationRecord),
+		new(CompanyProduct),
+		new(CompanyPermissionLog),
+		new(CompanyEndDate),
+		new(CompanyProductUpdateLog), //客户产品状态变更表
+		new(CompanyViewStatistics),
+	)
+}
+
+// initEdbDataTable 注册Edb指标 数据表
+func initEdbDataTable() {
+	//注册对象
+	orm.RegisterModel(
 		new(DataSourceLongzhong),
 		new(Longzhonginfo),
 		new(Longzhongdata),
 		new(EdbdataClassify),
 		new(Longzhongpriceinfo),
 		new(Longzhongpricedata),
-		new(CompanyOperationRecord),
-		new(CompanyProduct),
-		new(StackCompanyStatistic),
-		new(CompanyPermissionLog),
-		new(company_contract.CompanyContract),
-		new(company_contract.CompanyContractPermission),
-		new(company_approval.CompanyApproval),
+		new(LongzhongSurveyProduct),
+		new(LongzhongSurveyData),
 		new(data_manage.EdbDataWind),
 		new(data_manage.EdbDataThs),
 		new(data_manage.EdbDataPb),
-		new(LongzhongSurveyProduct),
-		new(LongzhongSurveyData),
-		new(Classify),
-		new(ReportSendThsDetail),
-		new(Report),
-		new(CompanyEndDate),
 		new(data_manage.BaseFromSmm),
 		new(data_manage.BaseFromSmmIndex),
 		new(data_manage.BaseFromSmmData),
 		new(data_manage.EdbDataYs),
 		new(Edbdata),
 		new(data_manage.EdbInfoCalculateMapping),
-		new(UserViewStatistics),
 		new(data_manage.EdbInfo),                 //hz_data库的edb_info表
 		new(data_manage.EdbDataCalculateZjpj),    //直接拼接
 		new(data_manage.EdbDataCalculateLjztbpj), //累计同比值拼接
-		new(yb.Activity),                         // 研报活动表
-		new(yb.ActivityType),                     //研报活动分类表
-		new(yb.ActivityVoice),                    //研报活动语音表
-		new(yb.ActivityRegister),                 //研报活动报名表
-		new(yb.Speaker),                          //研报主持人表
 		new(data_manage.EdbDataLt),               //路透指标数据表
-		new(CompanyProductUpdateLog),             //客户产品状态变更表
-		new(roadshow.RsReportRecord),             //路演记录
-		new(CompanyReportRecord),
-		new(CompanyViewStatistics),
+	)
+}
+
+// initYbTable 注册ETA表格 数据表
+func initYbTable() {
+	//注册对象
+	orm.RegisterModel(
+		new(yb.Activity),         // 研报活动表
+		new(yb.ActivityType),     //研报活动分类表
+		new(yb.ActivityVoice),    //研报活动语音表
+		new(yb.ActivityRegister), //研报活动报名表
+		new(yb.Speaker),          //研报主持人表
 	)
 }
 

+ 5 - 2
services/activity.go

@@ -5,6 +5,7 @@ import (
 	"fmt"
 	"hongze/hongze_task/models"
 	"hongze/hongze_task/models/yb"
+	"hongze/hongze_task/services/alarm_msg"
 	"hongze/hongze_task/utils"
 	"time"
 )
@@ -14,7 +15,8 @@ func YbTelRemind(cont context.Context) (err error) {
 	defer func() {
 		if err != nil {
 			//fmt.Println(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "发送消息至同花顺失败 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
-			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "发送电话会提醒失败 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "发送电话会提醒失败 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			go alarm_msg.SendAlarmMsg("发送电话会提醒失败 ErrMsg:"+err.Error(), 3)
 		}
 	}()
 
@@ -42,7 +44,8 @@ func YbSalonRemind(cont context.Context) (err error) {
 	defer func() {
 		if err != nil {
 			//fmt.Println(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "发送消息至同花顺失败 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
-			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "发送电话会提醒失败 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "发送电话会提醒失败 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			go alarm_msg.SendAlarmMsg("发送研报沙龙提醒失败 ErrMsg:"+err.Error(), 3)
 		}
 	}()
 

+ 3 - 1
services/company_contract/company_contract.go

@@ -8,6 +8,7 @@ import (
 	"hongze/hongze_task/models/company"
 	"hongze/hongze_task/models/company_approval"
 	"hongze/hongze_task/models/company_contract"
+	"hongze/hongze_task/services/alarm_msg"
 	"hongze/hongze_task/utils"
 	"strings"
 	"time"
@@ -18,7 +19,8 @@ func HandleCompanyContract(cont context.Context) (err error) {
 	defer func() {
 		if err != nil {
 			//fmt.Println("合同处理 ErrMsg:"+err.Error())
-			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "合同处理 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "合同处理 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			go alarm_msg.SendAlarmMsg("合同处理 ErrMsg:"+err.Error(), 3)
 		}
 	}()
 	today := utils.GetToday(utils.FormatDate)

+ 4 - 0
services/data/base_edb_lib.go

@@ -44,6 +44,8 @@ func AddEdbData(source int, edbCode string) (resp *models.BaseResponse, err erro
 		urlStr = "/gie/add"
 	case utils.DATA_SOURCE_LT:
 		urlStr = "/lt/add"
+	case utils.DATA_SOURCE_COAL:
+		urlStr = "/coal/add"
 	default:
 	}
 	if urlStr == "" {
@@ -90,6 +92,8 @@ func RefreshEdbData(edbInfoId, source int, edbCode, startDate string) (resp *mod
 		urlStr = "/gie/refresh"
 	case utils.DATA_SOURCE_LT:
 		urlStr = "/lt/refresh"
+	case utils.DATA_SOURCE_COAL:
+		urlStr = "/coal/refresh"
 	}
 	if urlStr == "" {
 		err = fmt.Errorf(fmt.Sprint("source:", source, ";未实现该指标的刷新接口,请联系管理员"))

+ 44 - 12
services/data/base_from_smm.go

@@ -12,6 +12,7 @@ import (
 	"errors"
 	"fmt"
 	"hongze/hongze_task/models/data_manage"
+	"hongze/hongze_task/services/alarm_msg"
 	"hongze/hongze_task/utils"
 	"io/ioutil"
 	"net/http"
@@ -251,6 +252,7 @@ func GetSmmIndexData() {
 							monthDate, err := time.Parse("2006-01", dataTime)
 							if err != nil {
 								fmt.Println("time.Parse:" + err.Error())
+								continue
 							}
 							lastTime := monthDate.AddDate(0, 1, -1)
 							lastYear, lastMonth, lastDay := lastTime.Date()
@@ -270,7 +272,7 @@ func GetSmmIndexData() {
 
 							saveDataTime, err := time.Parse(utils.FormatDate, dataTime)
 							if err != nil {
-
+								continue
 							}
 							timestamp := saveDataTime.UnixNano() / 1e6
 							var smmIndexId int64
@@ -334,8 +336,18 @@ func GetSmmIndexData() {
 	}
 }
 
-//有色基础指标同步
+// SyncSmmIndexDataBase 有色基础指标同步
 func SyncSmmIndexDataBase() {
+	errMsgList := make([]string, 0)
+	defer func() {
+		//fmt.Println(errMsgList)
+		//如果错误信息大于0条,那么邮件提醒吧
+		if len(errMsgList) > 0 {
+			msg := fmt.Sprint("有色基础指标同步失败,err:", strings.Join(errMsgList, "\n"))
+			go alarm_msg.SendAlarmMsg(msg, 3)
+		}
+
+	}()
 	utils.FileLog.Info("start:" + time.Now().Format(utils.FormatDateTime))
 	list, err := data_manage.GetBaseFromSmmList()
 	if err != nil {
@@ -347,7 +359,7 @@ func SyncSmmIndexDataBase() {
 		fmt.Println(err)
 		return
 	}
-	endDate := time.Now().AddDate(utils.DATA_END_DATE_LIMIT,0,0).Format(utils.FormatDate)
+	endDate := time.Now().AddDate(utils.DATA_END_DATE_LIMIT, 0, 0).Format(utils.FormatDate)
 	smmIndexAll, err := data_manage.GetBaseFromSmmIndex()
 	if err != nil {
 		fmt.Println("GetBaseFromSmmIndex Err:" + err.Error())
@@ -489,7 +501,10 @@ func SyncSmmIndexDataBase() {
 				if frequency == "月" {
 					monthDate, err := time.Parse("2006-01", dataTime)
 					if err != nil {
-						fmt.Println("time.Parse:" + err.Error())
+						errMsg := "monthDate parse err:" + err.Error() + " dataTime:" + dataTime
+						fmt.Println(errMsg)
+						errMsgList = append(errMsgList, errMsg)
+						continue
 					}
 					lastTime := monthDate.AddDate(0, 1, -1)
 					lastYear, lastMonth, lastDay := lastTime.Date()
@@ -503,10 +518,17 @@ func SyncSmmIndexDataBase() {
 				} else if frequency == "年" {
 					dataTime = dataTime + "-12-31"
 				}
-				saveDataTime, err := time.Parse(utils.FormatDate, dataTime)
+				var saveDataTime time.Time
+				if strings.Contains(dataTime, "00:00:00") {
+					saveDataTime, err = time.Parse(utils.FormatDateTime, dataTime)
+				} else {
+					saveDataTime, err = time.Parse(utils.FormatDate, dataTime)
+				}
 				if err != nil {
-					fmt.Println("saveDataTime parse err:" + err.Error() + " dataTime:" + dataTime)
-					panic(err)
+					errMsg := "saveDataTime parse err:" + err.Error() + " dataTime:" + dataTime
+					fmt.Println(errMsg)
+					errMsgList = append(errMsgList, errMsg)
+					continue
 				}
 				timestamp := saveDataTime.UnixNano() / 1e6
 				//循环指标
@@ -533,7 +555,9 @@ func SyncSmmIndexDataBase() {
 									dataItem.DataTimestamp = timestamp
 									_, err = data_manage.AddBaseFromSmmData(dataItem)
 									if err != nil && !strings.Contains(err.Error(), "idx_index_code_date") {
-										fmt.Println("AddBaseFromSmmData Err:" + err.Error())
+										errMsg := "AddBaseFromSmmData Err:" + err.Error()
+										fmt.Println(errMsg)
+										errMsgList = append(errMsgList, errMsg)
 										return
 									}
 								}
@@ -544,7 +568,9 @@ func SyncSmmIndexDataBase() {
 									if val != "" && val != "-" {
 										err = data_manage.ModifyBaseFromSmmData(findData.SmmDataId, val)
 										if err != nil {
-											fmt.Println("ModifyBaseFromSmmData Err:" + err.Error())
+											errMsg := "ModifyBaseFromSmmData Err:" + err.Error()
+											fmt.Println(errMsg)
+											errMsgList = append(errMsgList, errMsg)
 											return
 										}
 									}
@@ -560,16 +586,22 @@ func SyncSmmIndexDataBase() {
 			{
 				indexList, err := data_manage.GetBaseFromSmmIndexByCode(v.Interface)
 				if err != nil {
-					fmt.Println("GetBaseFromSmmIndexByCode Err:" + err.Error())
+					errMsg := "GetBaseFromSmmIndexByCode Err:" + err.Error()
+					fmt.Println(errMsg)
+					errMsgList = append(errMsgList, errMsg)
 				}
 				for _, sv := range indexList {
 					minDate, maxDate, err := data_manage.GetBaseFromSmmMaxOrMinDate(sv.IndexCode)
 					if err != nil {
-						fmt.Println("GetEdbDataSmmMaxOrMinDate Err:" + err.Error())
+						errMsg := "GetEdbDataSmmMaxOrMinDate Err:" + err.Error()
+						fmt.Println(errMsg)
+						errMsgList = append(errMsgList, errMsg)
 					} else {
 						err = data_manage.ModifyBaseFromSmmMinDateAndMaxDate(sv.BaseFromSmmIndexId, v.BaseFromSmmId, minDate, maxDate)
 						if err != nil {
-							fmt.Println("ModifyBaseFromSmmMinDateAndMaxDate Err:" + err.Error())
+							errMsg := "ModifyBaseFromSmmMinDateAndMaxDate Err:" + err.Error()
+							fmt.Println(errMsg)
+							errMsgList = append(errMsgList, errMsg)
 						}
 					}
 				}

+ 131 - 14
services/data/edb_info.go

@@ -16,7 +16,8 @@ func RefreshDataFromThs(wg *sync.WaitGroup) (err error) {
 	defer func() {
 		if err != nil {
 			fmt.Println("RefreshDataFromThs Err:" + err.Error())
-			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromThs ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromThs ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			go alarm_msg.SendAlarmMsg("RefreshDataFromThs ErrMsg:"+err.Error(), 3)
 		}
 		wg.Done()
 	}()
@@ -81,7 +82,8 @@ func RefreshDataFromWind(wg *sync.WaitGroup) (err error) {
 	defer func() {
 		if err != nil {
 			fmt.Println("RefreshDataFromWind Err:" + err.Error())
-			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromWind ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromWind ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			go alarm_msg.SendAlarmMsg("RefreshDataFromWind ErrMsg:"+err.Error(), 3)
 		}
 		wg.Done()
 	}()
@@ -143,7 +145,8 @@ func RefreshDataFromPb(wg *sync.WaitGroup) (err error) {
 	defer func() {
 		if err != nil {
 			fmt.Println("RefreshDataFromPb Err:" + err.Error())
-			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromPb ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromPb ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			go alarm_msg.SendAlarmMsg("RefreshDataFromPb ErrMsg:"+err.Error(), 3)
 		}
 		wg.Done()
 	}()
@@ -551,7 +554,8 @@ func RefreshDataFromCalculateAll() (err error) {
 	defer func() {
 		if err != nil {
 			utils.FileLog.Info("RefreshDataFromCalculateAll Err:" + err.Error())
-			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromCalculateAll ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromCalculateAll ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			go alarm_msg.SendAlarmMsg("RefreshDataFromCalculateAll ErrMsg:"+err.Error(), 3)
 		}
 	}()
 	var condition string
@@ -825,7 +829,8 @@ func RefreshDataFromManual(wg *sync.WaitGroup) (err error) {
 	defer func() {
 		if err != nil {
 			fmt.Println("RefreshDataFromManual Err:" + err.Error())
-			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromManual ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromManual ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			go alarm_msg.SendAlarmMsg("RefreshDataFromManual ErrMsg:"+err.Error(), 3)
 		}
 		wg.Done()
 	}()
@@ -876,7 +881,8 @@ func RefreshDataFromLz(wg *sync.WaitGroup) (err error) {
 	defer func() {
 		if err != nil {
 			fmt.Println("RefreshDataFromLz Err:" + err.Error())
-			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromLz ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromLz ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			go alarm_msg.SendAlarmMsg("RefreshDataFromLz ErrMsg:"+err.Error(), 3)
 		}
 		wg.Done()
 	}()
@@ -938,7 +944,8 @@ func RefreshDataFromYs(wg *sync.WaitGroup) (err error) {
 	defer func() {
 		if err != nil {
 			fmt.Println("RefreshDataFromYs Err:" + err.Error())
-			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromYs ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromYs ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			go alarm_msg.SendAlarmMsg("RefreshDataFromYs ErrMsg:"+err.Error(), 3)
 		}
 		wg.Done()
 	}()
@@ -1000,7 +1007,8 @@ func RefreshDataFromGl(wg *sync.WaitGroup) (err error) {
 	defer func() {
 		if err != nil {
 			fmt.Println("RefreshDataFromGl Err:" + err.Error())
-			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromYs ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromGl ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			go alarm_msg.SendAlarmMsg("RefreshDataFromGl ErrMsg:"+err.Error(), 3)
 		}
 		wg.Done()
 	}()
@@ -1061,7 +1069,8 @@ func RefreshDataFromSh(wg *sync.WaitGroup) (err error) {
 	defer func() {
 		if err != nil {
 			fmt.Println("RefreshDataFromSh Err:" + err.Error())
-			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromSh ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromSh ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			go alarm_msg.SendAlarmMsg("RefreshDataFromSh ErrMsg:"+err.Error(), 3)
 		}
 		wg.Done()
 	}()
@@ -1122,7 +1131,8 @@ func RefreshDataFromDl(wg *sync.WaitGroup) (err error) {
 	defer func() {
 		if err != nil {
 			fmt.Println("RefreshDataFromDl Err:" + err.Error())
-			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromDl ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromDl ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			go alarm_msg.SendAlarmMsg("RefreshDataFromDl ErrMsg:"+err.Error(), 3)
 		}
 		wg.Done()
 	}()
@@ -1183,7 +1193,8 @@ func RefreshDataFromShfe(wg *sync.WaitGroup) (err error) {
 	defer func() {
 		if err != nil {
 			fmt.Println("RefreshDataFromShfe Err:" + err.Error())
-			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromShfe ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromShfe ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			go alarm_msg.SendAlarmMsg("RefreshDataFromShfe ErrMsg:"+err.Error(), 3)
 		}
 		wg.Done()
 	}()
@@ -1244,7 +1255,8 @@ func RefreshDataFromCffex(wg *sync.WaitGroup) (err error) {
 	defer func() {
 		if err != nil {
 			fmt.Println("RefreshDataFromCffex Err:" + err.Error())
-			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromCffex ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromCffex ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			go alarm_msg.SendAlarmMsg("RefreshDataFromCffex ErrMsg:"+err.Error(), 3)
 		}
 		wg.Done()
 	}()
@@ -1305,7 +1317,8 @@ func RefreshDataFromZz(wg *sync.WaitGroup) (err error) {
 	defer func() {
 		if err != nil {
 			fmt.Println("RefreshDataFromZz Err:" + err.Error())
-			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromZz ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromZz ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			go alarm_msg.SendAlarmMsg("RefreshDataFromZz ErrMsg:"+err.Error(), 3)
 		}
 		wg.Done()
 	}()
@@ -1366,7 +1379,8 @@ func RefreshDataFromLt(wg *sync.WaitGroup) (err error) {
 	defer func() {
 		if err != nil {
 			fmt.Println("RefreshDataFromLt Err:" + err.Error())
-			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromLt ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromLt ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			go alarm_msg.SendAlarmMsg("RefreshDataFromLt ErrMsg:"+err.Error(), 3)
 		}
 		wg.Done()
 	}()
@@ -1412,3 +1426,106 @@ func ResetEdbInfoIsUpdate(cont context.Context) (err error) {
 	go data_manage.ResetEdbInfoIsUpdate()
 	return nil
 }
+
+// CheckWindDataInterface 检测wind数据服务器
+func CheckWindDataInterface(cont context.Context) (err error) {
+	for _, hzDataWindUrl := range utils.Hz_Data_WIND_Url_List {
+		go func(urlStr string) {
+			checkUrl := utils.Hz_Data_WIND_Url + `hz_server`
+			body, err := http.Get(checkUrl)
+			if err != nil {
+				msg := fmt.Sprintf("检测%s失败:CheckWindDataInterface ErrMsg:%s", urlStr, err.Error())
+				//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"检测数据接口:失败提醒", "检测路透数据服务器失败:CheckLtDataInterface ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+				go alarm_msg.SendAlarmMsg(msg, 3)
+			} else {
+				result := string(body)
+				if result != `"wind true"` {
+					//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"检测数据接口:失败提醒", "检测路透数据服务器失败:CheckLtDataInterface ErrMsg:"+string(body), utils.EmailSendToUsers)
+					//msg := "检测Wind数据服务器2失败:CheckWindDataInterface ErrMsg:" + string(body)
+					msg := fmt.Sprintf("检测%s失败:CheckWindDataInterface ErrMsg:%s", urlStr, string(body))
+					go alarm_msg.SendAlarmMsg(msg, 3)
+				}
+			}
+		}(hzDataWindUrl)
+	}
+
+	go func() {
+		checkUrl := utils.Hz_Data_WIND_Url + `hz_server`
+		body, err := http.Get(checkUrl)
+		if err != nil {
+			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"检测数据接口:失败提醒", "检测路透数据服务器失败:CheckLtDataInterface ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			msg := "检测Wind数据服务器2失败:CheckWindDataInterface ErrMsg:" + err.Error()
+			go alarm_msg.SendAlarmMsg(msg, 3)
+		} else {
+			result := string(body)
+			if result != `"wind true"` {
+				//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"检测数据接口:失败提醒", "检测路透数据服务器失败:CheckLtDataInterface ErrMsg:"+string(body), utils.EmailSendToUsers)
+				msg := "检测Wind数据服务器2失败:CheckWindDataInterface ErrMsg:" + string(body)
+				go alarm_msg.SendAlarmMsg(msg, 3)
+			}
+		}
+	}()
+	return
+}
+
+// RefreshDataFromCoal 刷新煤炭网数据
+func RefreshDataFromCoal(wg *sync.WaitGroup) (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println("RefreshDataFromCoal Err:" + err.Error())
+			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromCoal ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			go alarm_msg.SendAlarmMsg("RefreshDataFromCoal ErrMsg:"+err.Error(), 3)
+		}
+		wg.Done()
+	}()
+	var condition string
+	var pars []interface{}
+	condition += " AND source=? "
+	pars = append(pars, utils.DATA_SOURCE_COAL)
+	items, err := data_manage.GetEdbInfoByCondition(condition, pars, 0)
+	if err != nil {
+		return errors.New("GetEdbInfoByCondition:" + err.Error())
+	}
+
+	//var endDate string
+	//endDate = time.Now().AddDate(utils.DATA_END_DATE_LIMIT, 0, 0).Format(utils.FormatDateUnSpace)
+	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)
+		}
+		//fmt.Println(startDate, endDate)
+		//err = data_manage.RefreshEdbDataByZz(v.EdbInfoId, v.EdbCode, startDate, endDate)
+		//if err != nil {
+		//	return errors.New("RefreshEdbDataByZz:" + err.Error())
+		//}
+		resp, err := RefreshEdbData(v.EdbInfoId, v.Source, v.EdbCode, startDate)
+		if err != nil {
+			return errors.New("RefreshEdbData Err:" + err.Error())
+		}
+		if resp.Ret != 200 {
+			return errors.New("RefreshEdbData Err:" + resp.Msg + ";ErrMsg:" + resp.ErrMsg)
+		}
+		item, err := data_manage.GetEdbInfoMaxAndMinInfo(v.Source, v.EdbCode)
+		if err != nil {
+			return err
+		}
+		if item != nil {
+			err = data_manage.ModifyEdbInfoMaxAndMinInfo(v.EdbInfoId, item)
+			if err != nil {
+				return err
+			}
+		}
+	}
+	return err
+}

+ 65 - 16
services/data_source_longzhong.go

@@ -7,7 +7,6 @@ import (
 	"fmt"
 	"github.com/tealeg/xlsx"
 	"hongze/hongze_task/models"
-	"hongze/hongze_task/models/data_manage"
 	"hongze/hongze_task/utils"
 	"net/url"
 	"os"
@@ -1093,12 +1092,13 @@ func GetLzSurveyProductData(cont context.Context) (err error) {
 	endDate := time.Now().AddDate(utils.DATA_END_DATE_LIMIT, 0, 0).UnixNano() / 1e6
 
 	for k, v := range priceInfoList {
-		existList, err := data_manage.GetLzSurveyDataExistByTradeCode(v.SurveyProductId)
-		existMap := make(map[string]*data_manage.LongzhongSurveyData)
-		for _, v := range existList {
-			existMap[v.DataTime] = v
-		}
-		fmt.Println(existMap)
+		//existList, err := data_manage.GetLzSurveyDataExistByTradeCode(v.SurveyProductId)
+		//existMap := make(map[string]*data_manage.LongzhongSurveyData)
+		//for _, v := range existList {
+		//	key := strconv.Itoa(int(v.QuotaSampleId)) + v.DataTime
+		//	existMap[key] = v
+		//}
+		//fmt.Println(existMap)
 		pageIndex := 1
 		//if v.EndDate != "" {
 		//	endDateTime, _ := time.Parse(utils.FormatDate, v.EndDate)
@@ -1156,12 +1156,14 @@ func GetLzSurveyProductData(cont context.Context) (err error) {
 					shouldDateTimeStr := shouldDateTime.Format(utils.FormatDate)
 
 					//fmt.Println("QuotaSampleID:", n.QuotaSampleID, "taskActualFinishTime:", dateTimeStr, "taskShouldFinishTime:", shouldDateTimeStr)
-					//count, err := models.GetLzSurveyDataCount(v.SurveyProductId, int(v.QuotaSampleId), shouldDateTimeStr)
-					//if err != nil {
-					//	msg = "获取隆众调研指标数据失败:err " + err.Error()
-					//	return err
-					//}
-					if findItem, ok := existMap[shouldDateTimeStr]; !ok && n.InputValue != "0" {
+					count, err := models.GetLzSurveyDataCount(v.SurveyProductId, int(v.QuotaSampleId), shouldDateTimeStr)
+					if err != nil {
+						msg = "获取隆众调研指标数据失败:err " + err.Error()
+						return err
+					}
+					key := strconv.Itoa(int(v.QuotaSampleId)) + shouldDateTimeStr
+					if count <= 0 {
+						fmt.Println("not exist:" + key)
 						item := new(models.LongzhongSurveyData)
 						item.SurveyProductId = v.SurveyProductId
 						item.ProjectQuotaId = n.ProjectQuotaID
@@ -1199,11 +1201,58 @@ func GetLzSurveyProductData(cont context.Context) (err error) {
 							return err
 						}
 					} else {
-						if findItem != nil && findItem.InputValue != n.InputValue && n.InputValue != "0" {
-							models.ModifyLzSurveyData(n.InputValue, findItem.SurveyDataId)
+						fmt.Println("exist:" + key)
+						err = models.ModifyLzSurveyDataV1(n.InputValue, int(n.QuotaSampleID), shouldDateTimeStr)
+						if err != nil {
+							fmt.Println("ModifyLzSurveyDataV1 Err:" + err.Error())
 						}
-						fmt.Println("exist:", shouldDateTimeStr)
 					}
+					//key:=strconv.Itoa(int(v.QuotaSampleId))+shouldDateTimeStr
+					//if findItem, ok := existMap[key]; !ok && n.InputValue != "0" {
+					//	fmt.Println("not exist:"+key)
+					//	item := new(models.LongzhongSurveyData)
+					//	item.SurveyProductId = v.SurveyProductId
+					//	item.ProjectQuotaId = n.ProjectQuotaID
+					//	item.BreedId = n.BreedID
+					//	item.BreedName = n.BreedName
+					//	item.QuotaId = n.QuotaID
+					//	item.QuotaName = n.QuotaName
+					//	item.UnitId = n.UnitID
+					//	item.UnitName = n.UnitName
+					//	item.SampleType = n.SampleType
+					//	item.SampleId = n.SampleID
+					//	item.SampleName = n.SampleName
+					//	item.DeviceId = n.DeviceID
+					//	item.Device = n.Device
+					//	item.ProductCraftId = n.ProductCraftID
+					//	item.ProductCraft = n.ProductCraft
+					//	item.ProductLine = n.ProductLine
+					//	item.InputMode = n.InputMode
+					//	item.Frequency = n.Frequency
+					//	item.InputValue = n.InputValue
+					//	item.TaskShouldFinishTime = n.TaskShouldFinishTime
+					//	item.CustomId = n.CustomID
+					//	item.CustomType = n.CustomType
+					//	item.Custom = n.Custom
+					//	item.QuotaSampleId = n.QuotaSampleID
+					//	item.TaskActualFinishTime = n.TaskActualFinishTime
+					//	//item.AreaName = n.AreaName.(string)
+					//	//item.ProvinceName = n.ProvinceName.(string)
+					//	item.ResearchStartData = n.ResearchStartDate
+					//	item.ResearchStopData = n.ResearchStopDate
+					//	item.DataTime = shouldDateTimeStr
+					//	err = models.AddLongzhongSurveyData(item)
+					//	if err != nil {
+					//		msg = "新增调研指标数据失败:err " + err.Error()
+					//		return err
+					//	}
+					//} else {
+					//	fmt.Println("exist:"+key)
+					//	if findItem != nil && findItem.InputValue != n.InputValue && n.InputValue != "0" {
+					//		models.ModifyLzSurveyData(n.InputValue, findItem.SurveyDataId)
+					//	}
+					//	fmt.Println("exist:", shouldDateTimeStr)
+					//}
 				}
 				pageIndex = pageIndex + 1
 				totalPage := utils.PageCount(int(dataList.Response.Total), 100)

+ 14 - 8
services/report_push.go

@@ -7,6 +7,7 @@ import (
 	"fmt"
 	"github.com/wenzhenxi/gorsa"
 	"hongze/hongze_task/models"
+	"hongze/hongze_task/services/alarm_msg"
 	"hongze/hongze_task/utils"
 	"io/ioutil"
 	"net/http"
@@ -25,7 +26,8 @@ func SendWaitReport(cont context.Context) (err error) {
 	defer func() {
 		if err != nil {
 			//fmt.Println(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "发送消息至同花顺失败 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
-			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "延时任务发送报告至同花顺失败 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "延时任务发送报告至同花顺失败 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			go alarm_msg.SendAlarmMsg("延时任务发送报告至同花顺失败 ErrMsg:"+err.Error(), 3)
 		}
 	}()
 	list, err := models.GetWaitReportSendThsDetailList()
@@ -181,7 +183,8 @@ func SendReportToThs(reportId int) (err error) {
 	defer func() {
 		if err != nil {
 			//fmt.Println(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "发送消息至同花顺失败 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
-			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "发送报告至同花顺失败 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "发送报告至同花顺失败 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			go alarm_msg.SendAlarmMsg("发送报告至同花顺失败 ErrMsg:"+err.Error(), 3)
 		}
 	}()
 
@@ -253,7 +256,8 @@ func SendThs(title, labelStr, abstract, jumpBaseUrl, logoUrl, dataType string) (
 	defer func() {
 		if err != nil {
 			//fmt.Println(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "发送消息至同花顺失败 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
-			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "发送报告至同花顺失败 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "发送消息至同花顺失败 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			go alarm_msg.SendAlarmMsg("发送消息至同花顺失败 ErrMsg:"+err.Error(), 3)
 		}
 	}()
 	pubKey := utils.THS_PubKey
@@ -307,7 +311,7 @@ func SendThs(title, labelStr, abstract, jumpBaseUrl, logoUrl, dataType string) (
 	form.Add("icon", picUrl)
 	form.Add("dataType", dataTypeEncript)
 
-	utils.FileLog.Info("SendThs parms:%s", form.Encode())
+	utils.FileLog.Info(fmt.Sprintf("SendThs parms:%s", form.Encode()))
 	resp, err := client.PostForm(sendUrl, form)
 	if err != nil {
 		return
@@ -317,7 +321,7 @@ func SendThs(title, labelStr, abstract, jumpBaseUrl, logoUrl, dataType string) (
 	body, _ := ioutil.ReadAll(resp.Body)
 
 	//fmt.Println(string(body))
-	utils.FileLog.Info("ThsResult parms:%s", string(body))
+	utils.FileLog.Info(fmt.Sprintf("ThsResult parms:%s", string(body)))
 
 	//同花顺接口返回数据
 	var tshResult TshResult
@@ -338,7 +342,8 @@ func SyncWxGroup(openCompanyCode, deadline string) (err error) {
 	defer func() {
 		if err != nil {
 			//fmt.Println(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "同步同花顺微信群信息失败 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
-			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "同步同花顺微信群信息失败 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "同步同花顺微信群信息失败 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			go alarm_msg.SendAlarmMsg("同步同花顺微信群信息失败 ErrMsg:"+err.Error(), 3)
 		}
 	}()
 	pubKey := utils.THS_PubKey
@@ -398,7 +403,8 @@ func SendReportMiniToThs(reportId int) (err error) {
 	defer func() {
 		if err != nil {
 			//fmt.Println(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "发送消息至同花顺失败 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
-			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "SendReportMiniToThs延时任务发送报告至同花顺失败, ReportId:" + strconv.Itoa(reportId) + ", ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "SendReportMiniToThs延时任务发送报告至同花顺失败, ReportId:"+strconv.Itoa(reportId)+", ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			go alarm_msg.SendAlarmMsg("SendReportMiniToThs延时任务发送报告至同花顺失败, ReportId:"+strconv.Itoa(reportId)+", ErrMsg:"+err.Error(), 3)
 		}
 	}()
 
@@ -453,4 +459,4 @@ func SendReportMiniToThs(reportId int) (err error) {
 	err = SendThs(report.Title, permissionStr, report.Abstract, jumpUrl, logoUrl, "2")
 
 	return
-}
+}

+ 11 - 2
services/task.go

@@ -123,7 +123,7 @@ func releaseTask() {
 	getLzSurveyProduct := task.NewTask("getLzSurveyProduct", "0 5 08-19/1 * * * ", GetLzSurveyProduct)
 	task.AddTask("getLzSurveyProduct", getLzSurveyProduct)
 	//隆众调研指标数据获取
-	getLzSurveyProductData := task.NewTask("getLzSurveyProductData", "0 10 08-19/1 * * * ", GetLzSurveyProductData)
+	getLzSurveyProductData := task.NewTask("getLzSurveyProductData", "0 10 08-20/1 * * * ", GetLzSurveyProductData)
 	task.AddTask("getLzSurveyProductData", getLzSurveyProductData)
 
 	//发送邮件
@@ -177,6 +177,10 @@ func releaseTask() {
 	checkLtDataInterface := task.NewTask("checkLtDataInterface", "0 */2 * * * * ", data.CheckLtDataInterface)
 	task.AddTask("checkLtDataInterface", checkLtDataInterface)
 
+	//检测wind新服务器
+	checkWindDataInterface := task.NewTask("checkWindDataInterface", "0 */2 * * * * ", data.CheckWindDataInterface)
+	task.AddTask("checkWindDataInterface", checkWindDataInterface)
+
 	//初始化指标更新状态
 	resetEdbInfoIsUpdate := task.NewTask("resetEdbInfoIsUpdate", "0 0 0 * * *", data.ResetEdbInfoIsUpdate)
 	task.AddTask("resetEdbInfoIsUpdate", resetEdbInfoIsUpdate)
@@ -213,7 +217,10 @@ func OneMinute(cont context.Context) (err error) {
 
 func RefreshData(cont context.Context) (err error) {
 	wg := sync.WaitGroup{}
-	wg.Add(8)
+	wg.Add(9)
+	//hour := time.Now().Hour()
+	//if hour != 0 {
+	//}
 	go data.RefreshDataFromWind(&wg)
 	//同花顺
 	go data.RefreshDataFromThs(&wg)
@@ -229,6 +236,8 @@ func RefreshData(cont context.Context) (err error) {
 	go data.RefreshDataFromGl(&wg)
 	//路透
 	go data.RefreshDataFromLt(&wg)
+	//煤炭
+	go data.RefreshDataFromCoal(&wg)
 
 	wg.Wait()
 	////计算指标

+ 10 - 6
utils/constants.go

@@ -20,8 +20,8 @@ const (
 )
 
 const (
-	APPNAME                        = "弘则-task"
-	EmailSendToUsers               = "317699326@qq.com;984198890@qq.com;512188925@qq.com"
+	APPNAME          = "弘则-task"
+	EmailSendToUsers = "317699326@qq.com;984198890@qq.com;512188925@qq.com"
 	//RefreshEdbInfoEmailSendToUsers = "317699326@qq.com;984198890@qq.com;jhwang@hzinsights.com;lnyan@hzinsights.com;vwang@hzinsights.com"
 	RefreshEdbInfoEmailSendToUsers = "317699326@qq.com;984198890@qq.com;jhwang@hzinsights.com;lnyan@hzinsights.com"
 )
@@ -89,16 +89,20 @@ const (
 	DATA_SOURCE_CALCULATE_ZJPJ                  //直接拼接->23
 	DATA_SOURCE_CALCULATE_LJZTBPJ               //累计值同比拼接->24
 	DATA_SOURCE_LT                              //路透->25
+	DATA_SOURCE_COAL                            //煤炭网->26
 )
 
 //http://datawind.hzinsights.com:8040/hz_server
 
 const (
-	Hz_Data_Url    = "http://datawind.hzinsights.com:8040/" //同花顺,万得接口服务地址
-	Hz_Data_PB_Url = "http://datapb.hzinsights.com:8040/"   //彭博接口地址
-	Hz_Data_LT_Url = "http://dataek.hzinsights.com:8040/"   //路透社接口地址
+	Hz_Data_Url      = "http://datawind.hzinsights.com:8040/"  //同花顺,万得接口服务地址
+	Hz_Data_PB_Url   = "http://datapb.hzinsights.com:8040/"    //彭博接口地址
+	Hz_Data_LT_Url   = "http://dataek.hzinsights.com:8040/"    //路透社接口地址
+	Hz_Data_WIND_Url = "http://datawind2.hzinsights.com:8040/" //路透社接口地址
 )
 
+var Hz_Data_WIND_Url_List = []string{"http://datawind2.hzinsights.com:8040/", "http://datawind3.hzinsights.com:8040/"}
+
 //数据刷新频率
 const (
 	DATA_REFRESH        = 7 //7个单位,日/周/月/季度/年
@@ -122,4 +126,4 @@ var (
 	REPORT_TYPE_TWO_WEEK = "two_week"
 	REPORT_TYPE_MONTH    = "month"
 	REPORT_TYPE_OTHER    = "other"
-)
+)

+ 45 - 0
utils/logs.go

@@ -1,11 +1,14 @@
 package utils
 
 import (
+	"encoding/json"
 	"github.com/beego/beego/v2/adapter/logs"
+	"os"
 )
 
 var FileLog *logs.BeeLogger
 var FileLogLz *logs.BeeLogger
+var Binlog *logs.BeeLogger
 
 func init() {
 	FileLog = logs.NewLogger(1000000)
@@ -13,4 +16,46 @@ func init() {
 
 	FileLogLz = logs.NewLogger(1000000)
 	FileLogLz.SetLogger(logs.AdapterFile, `{"filename":"./rdlucklog/hongze_task_lz.log"}`)
+
+	//初始化binlog日志
+	initBinlog()
+}
+
+func initBinlog() {
+	//binlog日志
+	binLogDir := `./binlog`
+	os.MkdirAll(binLogDir, os.ModePerm)
+	Binlog = logs.NewLogger(1000000)
+	logConfig := getDefaultLogConfig()
+	logConfig.FileName = "./binlog/binlog.log"
+	logConfig.MaxLines = 10000000
+	logConfig.Rotate = true
+	b, _ := json.Marshal(logConfig)
+	Binlog.SetLogger(logs.AdapterFile, string(b))
+	Binlog.EnableFuncCallDepth(true)
+}
+
+type logConfig struct {
+	FileName string `json:"filename" description:"保存的文件名"`
+	MaxLines int    `json:"maxlines"  description:"每个文件保存的最大行数,默认值 1000000"`
+	MaxSize  int    `json:"maxsize" description:"每个文件保存的最大尺寸,默认值是 1 << 28, //256 MB"`
+	Daily    bool   `json:"daily" description:"是否按照每天 logrotate,默认是 true"`
+	MaxDays  int    `json:"maxdays" description:"文件最多保存多少天,默认保存 7 天"`
+	Rotate   bool   `json:"rotate" description:"是否开启 logrotate,默认是 true"`
+	Level    int    `json:"level" description:"日志保存的时候的级别,默认是 Trace 级别"`
+	Color    bool   `json:"color" description:"日志是否输出颜色"`
+	//Perm     string `json:"perm" description:"日志文件权限"`
+}
+
+func getDefaultLogConfig() logConfig {
+	return logConfig{
+		FileName: "",
+		MaxLines: 0,
+		MaxSize:  1 << 28,
+		Daily:    true,
+		MaxDays:  31, //我就是喜欢31天,咋滴,不喜欢你就自己改-_-!
+		Rotate:   true,
+		Level:    logs.LevelTrace,
+		//Perm:     "",
+	}
 }