Просмотр исходного кода

新增指标更新检测邮件

rdluck 3 лет назад
Родитель
Сommit
f0a3e202d5

+ 32 - 0
index.html

@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+</head>
+<body>
+<div>
+    日度指标,超过三天未更新:
+</div>
+<table border="1" style="border-collapse: collapse;">
+    <thead>
+    <tr>
+        <td>指标编码</td>
+        <td>指标名称</td>
+        <td>指标来源</td>
+        <td>指标数据最后日期</td>
+        <td>指标数据更新日期</td>
+    </tr>
+    </thead>
+    <tbody>
+    <tr>
+        <td></td>
+        <td></td>
+        <td></td>
+        <td></td>
+        <td></td>
+    </tr>
+    </tbody>
+</table>
+</body>
+</html>

+ 8 - 3
models/data_manage/edb_info.go

@@ -41,6 +41,7 @@ type EdbInfoList struct {
 	ClassifyId       int       `description:"分类id"`
 	UniqueCode       string    `description:"指标唯一编码"`
 	CalculateFormula string    `description:"计算公式"`
+	ModifyTime       string    `description:"更新时间"`
 }
 
 type EdbInfoSearchData struct {
@@ -48,14 +49,18 @@ type EdbInfoSearchData struct {
 	Value    float64 `description:"数据"`
 }
 
-func GetEdbInfoByCondition(condition string, pars []interface{}) (item []*EdbInfoList, err error) {
+func GetEdbInfoByCondition(condition string, pars []interface{}, order int) (item []*EdbInfoList, err error) {
 	o := orm.NewOrm()
 	o.Using("data")
 	sql := ` SELECT * FROM edb_info WHERE 1=1 `
 	if condition != "" {
 		sql += condition
 	}
-	sql += ` ORDER BY edb_info_id ASC `
+	if order == 1 {
+		sql += ` ORDER BY end_date ASC `
+	} else {
+		sql += ` ORDER BY edb_info_id ASC `
+	}
 	_, err = o.Raw(sql, pars).QueryRows(&item)
 	return
 }
@@ -134,4 +139,4 @@ func GetQuarterEdbInfo() (item []*EdbInfo, err error) {
 			ORDER BY b.edb_info_id ASC  `
 	_, err = o.Raw(sql).QueryRows(&item)
 	return
-}
+}

+ 31 - 3
models/data_manage/edb_info_calculate_nszydpjjs.go

@@ -47,7 +47,7 @@ func RefreshCalculateNszydpjjs(edbInfoId, source, formulaInt int, fromEdbInfo *E
 	var condition string
 	var pars []interface{}
 	condition += " AND edb_info_id=? "
-	pars = append(pars, edbInfoId)
+	pars = append(pars, fromEdbInfo.EdbInfoId)
 
 	dataList, err := GetEdbDataListAll(condition, pars, source, 0)
 	if err != nil {
@@ -129,8 +129,20 @@ func RefreshCalculateNszydpjjs(edbInfoId, source, formulaInt int, fromEdbInfo *E
 			timestamp := currentDate.UnixNano() / 1e6
 			timestampStr := fmt.Sprintf("%d", timestamp)
 			valStr := utils.SubFloatToString(val, 4)
-			addSql += GetAddSql(edbInfoIdStr, edbCode, av, timestampStr, valStr)
-			isAdd = true
+
+			count, err := GetEdbDataCalculateNszydpjjsByCodeAndDate(edbCode, av)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				return err
+			}
+			if count <= 0 {
+				addSql += GetAddSql(edbInfoIdStr, edbCode, av, timestampStr, valStr)
+				isAdd = true
+			} else {
+				err = ModifyEdbDataCalculateNszydpjjs(int64(edbInfoId), av, valStr)
+				if err != nil {
+					return err
+				}
+			}
 		}
 	}
 
@@ -181,3 +193,19 @@ func GetEdbInfoCalculateNszydpjjsDetail(edbInfoId int) (item *EdbInfoCalculateNs
 	err = o.Raw(sql, edbInfoId).QueryRow(&item)
 	return
 }
+
+func GetEdbDataCalculateNszydpjjsByCodeAndDate(edbCode string, startDate string) (count int, err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	sql := ` SELECT COUNT(1) AS count FROM edb_data_calculate_nszydpjjs WHERE edb_code=? AND data_time=? `
+	err = o.Raw(sql, edbCode, startDate).QueryRow(&count)
+	return
+}
+
+func ModifyEdbDataCalculateNszydpjjs(edbInfoId int64, dataTime, value string) (err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	sql := ` UPDATE edb_data_calculate_nszydpjjs SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
+	_, err = o.Raw(sql, value, edbInfoId, dataTime).Exec()
+	return
+}

+ 7 - 14
models/data_manage/edb_info_calculate_tbz.go

@@ -57,7 +57,7 @@ func RefreshCalculateTbz(edbInfoId int, fromEdbInfo *EdbInfo, edbCode, startDate
 	var condition string
 	var pars []interface{}
 	condition += " AND edb_info_id=? "
-	pars = append(pars, edbInfoId)
+	pars = append(pars, fromEdbInfo.EdbInfoId)
 
 	if startDate != "" {
 		condition += " AND data_time>=? "
@@ -195,17 +195,11 @@ func RefreshCalculateTbz(edbInfoId int, fromEdbInfo *EdbInfo, edbCode, startDate
 						break
 					}
 				} else {
-					nextDateDay := preDate.AddDate(0, 0, 1)
-					nextDateDayStr := nextDateDay.Format(utils.FormatDate)
-
-					preDateDay := preDate.AddDate(0, 0, -1)
-					preDateDayStr := preDateDay.Format(utils.FormatDate)
+					nextDateDay := preDate
+					preDateDay := preDate
 
 					for i := 0; i < 35; i++ {
-						if i >= 1 {
-							nextDateDay = nextDateDay.AddDate(0, 0, i)
-							nextDateDayStr = nextDateDay.Format(utils.FormatDate)
-						}
+						nextDateDayStr := nextDateDay.Format(utils.FormatDate)
 						if findItem, ok := dataMap[nextDateDayStr]; ok { //上一年同期->下一个月找到
 							timestamp := currentDate.UnixNano() / 1e6
 							timestampStr := fmt.Sprintf("%d", timestamp)
@@ -226,10 +220,7 @@ func RefreshCalculateTbz(edbInfoId int, fromEdbInfo *EdbInfo, edbCode, startDate
 							}
 							break
 						} else {
-							if i >= 1 {
-								preDateDay = preDate.AddDate(0, 0, -i)
-								preDateDayStr = nextDateDay.Format(utils.FormatDate)
-							}
+							preDateDayStr := preDateDay.Format(utils.FormatDate)
 							if findItem, ok := dataMap[preDateDayStr]; ok { //上一年同期->上一个月找到
 								timestamp := currentDate.UnixNano() / 1e6
 								timestampStr := fmt.Sprintf("%d", timestamp)
@@ -251,6 +242,8 @@ func RefreshCalculateTbz(edbInfoId int, fromEdbInfo *EdbInfo, edbCode, startDate
 							}
 							break
 						}
+						nextDateDay = nextDateDay.AddDate(0, 0, 1)
+						preDateDay = preDateDay.AddDate(0, 0, -1)
 					}
 				}
 			}

+ 14 - 21
models/data_manage/edb_info_calculate_tcz.go

@@ -25,7 +25,6 @@ type EdbInfoCalculateTcz struct {
 	ModifyTime            time.Time `description:"修改时间"`
 }
 
-
 func TczSub(a, b float64) string {
 	af := decimal.NewFromFloat(float64(a))
 	fmt.Println(af)
@@ -52,13 +51,13 @@ func RefreshCalculateTcz(edbInfoId int, fromEdbInfo *EdbInfo, edbCode, startDate
 		return
 	}
 	edbInfoIdStr := strconv.Itoa(edbInfoId)
-	//计算数据
 
+	fmt.Println(edbInfoId, fromEdbInfo.EdbInfoId)
 	//计算数据
 	var condition string
 	var pars []interface{}
 	condition += " AND edb_info_id=? "
-	pars = append(pars, edbInfoId)
+	pars = append(pars, fromEdbInfo.EdbInfoId)
 
 	if startDate != "" {
 		condition += " AND data_time>=? "
@@ -82,8 +81,7 @@ func RefreshCalculateTcz(edbInfoId int, fromEdbInfo *EdbInfo, edbCode, startDate
 
 	addSql := ` INSERT INTO edb_data_calculate_tcz(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
 	var isAdd bool
-	for ak, av := range dateArr {
-		fmt.Println(ak, av)
+	for _, av := range dateArr {
 		currentItem := dataMap[av]
 		if currentItem != nil {
 			//当前日期
@@ -196,17 +194,11 @@ func RefreshCalculateTcz(edbInfoId int, fromEdbInfo *EdbInfo, edbCode, startDate
 						break
 					}
 				} else {
-					nextDateDay := preDate.AddDate(0, 0, 1)
-					nextDateDayStr := nextDateDay.Format(utils.FormatDate)
-
-					preDateDay := preDate.AddDate(0, 0, -1)
-					preDateDayStr := preDateDay.Format(utils.FormatDate)
+					nextDateDay := preDate
+					preDateDay := preDate
 
 					for i := 0; i < 35; i++ {
-						if i >= 1 {
-							nextDateDay = nextDateDay.AddDate(0, 0, i)
-							nextDateDayStr = nextDateDay.Format(utils.FormatDate)
-						}
+						nextDateDayStr := nextDateDay.Format(utils.FormatDate)
 						if findItem, ok := dataMap[nextDateDayStr]; ok { //上一年同期->下一个月找到
 							timestamp := currentDate.UnixNano() / 1e6
 							timestampStr := fmt.Sprintf("%d", timestamp)
@@ -227,10 +219,7 @@ func RefreshCalculateTcz(edbInfoId int, fromEdbInfo *EdbInfo, edbCode, startDate
 							}
 							break
 						} else {
-							if i >= 1 {
-								preDateDay = preDate.AddDate(0, 0, -i)
-								preDateDayStr = nextDateDay.Format(utils.FormatDate)
-							}
+							preDateDayStr := preDateDay.Format(utils.FormatDate)
 							if findItem, ok := dataMap[preDateDayStr]; ok { //上一年同期->上一个月找到
 								timestamp := currentDate.UnixNano() / 1e6
 								timestampStr := fmt.Sprintf("%d", timestamp)
@@ -252,11 +241,15 @@ func RefreshCalculateTcz(edbInfoId int, fromEdbInfo *EdbInfo, edbCode, startDate
 							}
 							break
 						}
+						nextDateDay = nextDateDay.AddDate(0, 0, 1)
+						preDateDay = preDateDay.AddDate(0, 0, -1)
 					}
 				}
 			}
 		}
 	}
+	fmt.Println("isAdd:", isAdd)
+
 	if isAdd {
 		addSql = strings.TrimRight(addSql, ",")
 		_, err = o.Raw(addSql).Exec()
@@ -308,15 +301,15 @@ func GetEdbInfoCalculateTczDetail(edbInfoId int) (item *EdbInfoCalculateTczDetai
 func GetEdbDataCalculateTczByCodeAndDate(edbCode string, startDate string) (count int, err error) {
 	o := orm.NewOrm()
 	o.Using("data")
-	sql := ` SELECT COUNT(1) AS count FROM edb_info_calculate_tcz WHERE edb_code=? AND data_time=? `
+	sql := ` SELECT COUNT(1) AS count FROM edb_data_calculate_tcz WHERE edb_code=? AND data_time=? `
 	err = o.Raw(sql, edbCode, startDate).QueryRow(&count)
 	return
 }
 
-func ModifyEdbDataCalculateTcz(edbInfoId int64, dataTime,value string) (err error) {
+func ModifyEdbDataCalculateTcz(edbInfoId int64, dataTime, value string) (err error) {
 	o := orm.NewOrm()
 	o.Using("data")
-	sql := ` UPDATE edb_info_calculate_tcz SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
+	sql := ` UPDATE edb_data_calculate_tcz SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
 	_, err = o.Raw(sql, value, edbInfoId, dataTime).Exec()
 	return
 }

+ 0 - 1
services/data/data_calculate.go

@@ -84,7 +84,6 @@ func RefreshCalculate(edbInfoIdArr []*data_manage.EdbInfo, edbInfoId int, edbCod
 			if err != nil && err.Error() != utils.ErrNoRow() {
 				return err
 			}
-			fmt.Println("line 89:", edbCode, sk, count)
 			if count <= 0 { //需要存入的数据
 				dataTime, _ := time.Parse(utils.FormatDate, sk)
 				timestamp := dataTime.UnixNano() / 1e6

+ 14 - 37
services/data/edb_info.go

@@ -24,18 +24,13 @@ func RefreshDataFromThs(wg *sync.WaitGroup) (err error) {
 	var pars []interface{}
 	condition += " AND source=? "
 	pars = append(pars, utils.DATA_SOURCE_THS)
-	items, err := data_manage.GetEdbInfoByCondition(condition, pars)
+	items, err := data_manage.GetEdbInfoByCondition(condition, pars, 0)
 	if err != nil {
 		return errors.New("GetEdbInfoByCondition:" + err.Error())
 	}
 
-	now := time.Now()
 	var endDate string
-	if now.Hour() == 0 {
-		endDate = time.Now().AddDate(0, 0, -1).Format(utils.FormatDate)
-	} else {
-		endDate = time.Now().Format(utils.FormatDate)
-	}
+	endDate = time.Now().Format(utils.FormatDate)
 	for _, v := range items {
 		startDate := ""
 		if v.Frequency == "日度" {
@@ -91,18 +86,13 @@ func RefreshDataFromWind(wg *sync.WaitGroup) (err error) {
 	var pars []interface{}
 	condition += " AND source=? "
 	pars = append(pars, utils.DATA_SOURCE_WIND)
-	items, err := data_manage.GetEdbInfoByCondition(condition, pars)
+	items, err := data_manage.GetEdbInfoByCondition(condition, pars, 0)
 	if err != nil {
 		return err
 	}
 
-	now := time.Now()
 	var endDate string
-	if now.Hour() == 0 {
-		endDate = time.Now().AddDate(0, 0, -1).Format(utils.FormatDate)
-	} else {
-		endDate = time.Now().Format(utils.FormatDate)
-	}
+	endDate = time.Now().Format(utils.FormatDate)
 	for _, v := range items {
 		startDate := ""
 		if v.Frequency == "日度" {
@@ -150,18 +140,13 @@ func RefreshDataFromPb(wg *sync.WaitGroup) (err error) {
 	condition += " AND source=? "
 	pars = append(pars, utils.DATA_SOURCE_PB)
 
-	items, err := data_manage.GetEdbInfoByCondition(condition, pars)
+	items, err := data_manage.GetEdbInfoByCondition(condition, pars, 0)
 	if err != nil {
 		return errors.New("GetEdbInfoByCondition:" + err.Error())
 	}
 
-	now := time.Now()
 	var endDate string
-	if now.Hour() == 0 {
-		endDate = time.Now().AddDate(0, 0, -1).Format(utils.FormatDateUnSpace)
-	} else {
-		endDate = time.Now().Format(utils.FormatDateUnSpace)
-	}
+	endDate = time.Now().Format(utils.FormatDateUnSpace)
 	for _, v := range items {
 		startDate := ""
 		if v.Frequency == "日度" {
@@ -247,15 +232,17 @@ func RefreshDataFromCalculateAll() (err error) {
 	var pars []interface{}
 	condition += " AND edb_type=? "
 	pars = append(pars, 2)
+	//condition += " AND edb_info_id=? "
+	//pars = append(pars, 100344)
 
-	items, err := data_manage.GetEdbInfoByCondition(condition, pars)
+	items, err := data_manage.GetEdbInfoByCondition(condition, pars, 0)
 	if err != nil {
 		return err
 	}
 	for _, v := range items {
 		edbInfoId := v.EdbInfoId
 		edbCode := v.EdbCode
-
+		fmt.Println(v.EdbInfoId, v.EdbCode, v.EdbName, v.SourceName)
 		if v.Source == utils.DATA_SOURCE_CALCULATE {
 			startDate := ""
 			if v.Frequency == "日度" {
@@ -371,18 +358,13 @@ func RefreshDataFromManual(wg *sync.WaitGroup) (err error) {
 	var pars []interface{}
 	condition += " AND source=? "
 	pars = append(pars, utils.DATA_SOURCE_MANUAL)
-	items, err := data_manage.GetEdbInfoByCondition(condition, pars)
+	items, err := data_manage.GetEdbInfoByCondition(condition, pars, 0)
 	if err != nil {
 		return errors.New("GetEdbInfoByCondition:" + err.Error())
 	}
 
-	now := time.Now()
 	var endDate string
-	if now.Hour() == 0 {
-		endDate = time.Now().AddDate(0, 0, -1).Format(utils.FormatDate)
-	} else {
-		endDate = time.Now().Format(utils.FormatDate)
-	}
+	endDate = time.Now().Format(utils.FormatDate)
 	for _, v := range items {
 		startDate := ""
 		if v.Frequency == "日度" {
@@ -429,18 +411,13 @@ func RefreshDataFromLz(wg *sync.WaitGroup) (err error) {
 	var pars []interface{}
 	condition += " AND source=? "
 	pars = append(pars, utils.DATA_SOURCE_LZ)
-	items, err := data_manage.GetEdbInfoByCondition(condition, pars)
+	items, err := data_manage.GetEdbInfoByCondition(condition, pars, 0)
 	if err != nil {
 		return errors.New("GetEdbInfoByCondition:" + err.Error())
 	}
 
-	now := time.Now()
 	var endDate string
-	if now.Hour() == 0 {
-		endDate = time.Now().AddDate(0, 0, -1).Format(utils.FormatDateUnSpace)
-	} else {
-		endDate = time.Now().Format(utils.FormatDateUnSpace)
-	}
+	endDate = time.Now().Format(utils.FormatDateUnSpace)
 	for _, v := range items {
 		startDate := ""
 		if v.Frequency == "日度" {

+ 138 - 0
services/data/edb_info_notice.go

@@ -0,0 +1,138 @@
+package data
+
+import (
+	"errors"
+	"fmt"
+	"hongze/hongze_task/models/data_manage"
+	"hongze/hongze_task/utils"
+	"time"
+)
+
+//指标更新通知
+func RefreshNotice() (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println("RefreshNotice Err:" + err.Error())
+			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshNotice ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+		}
+	}()
+	var condition string
+	var pars []interface{}
+
+	items, err := data_manage.GetEdbInfoByCondition(condition, pars, 1)
+	if err != nil {
+		return errors.New("GetEdbInfoByCondition:" + err.Error())
+	}
+	//日度
+	dayDiv := `<div>日度指标,超过3天未更新:</div>`
+	dayTable := `<table border="1" style="border-collapse: collapse;">
+    <thead>
+    <tr>
+        <td>指标编码</td>
+        <td>指标名称</td>
+        <td>指标来源</td>
+		<td>频度</td>
+        <td>指标数据最后日期</td>
+        <td>指标数据更新日期</td>
+    </tr>
+    </thead>`
+	dayTableBody := `<tbody>`
+	dayDate := time.Now().AddDate(0, 0, -3)
+	for _, v := range items {
+		if v.Frequency == "日度" && v.EndDate.Before(dayDate) {
+			dayTableBody += getTableTr(v)
+		}
+	}
+	dayTable += dayTableBody
+	dayTable += ` </tbody></table>`
+	noticeSendBody := dayDiv + dayTable
+	noticeSendBody += `<br/>`
+	//周度
+	weekDiv := `<div>周度指标,超过7天未更新:</div>`
+	weekTable := `<table border="1" style="border-collapse: collapse;">
+    <thead>
+    <tr>
+        <td>指标编码</td>
+        <td>指标名称</td>
+        <td>指标来源</td>
+		<td>频度</td>
+        <td>指标数据最后日期</td>
+        <td>指标数据更新日期</td>
+    </tr>
+    </thead>`
+	weekTableBody := `<tbody>`
+	weekDate := time.Now().AddDate(0, 0, -7)
+	for _, v := range items {
+		if v.Frequency == "周度" && v.EndDate.Before(weekDate) {
+			weekTableBody += getTableTr(v)
+		}
+	}
+	weekTable += weekTableBody
+	weekTable += ` </tbody></table>`
+	noticeSendBody += weekDiv + weekTable
+	noticeSendBody += `<br/>`
+	//月度
+	monthDiv := `<div>月度指标,超过一个月未更新:</div>`
+	monthTable := `<table border="1" style="border-collapse: collapse;">
+    <thead>
+    <tr>
+        <td>指标编码</td>
+        <td>指标名称</td>
+        <td>指标来源</td>
+		<td>频度</td>
+        <td>指标数据最后日期</td>
+        <td>指标数据更新日期</td>
+    </tr>
+    </thead>`
+	monthTableBody := `<tbody>`
+	monthDate := time.Now().AddDate(0, -1, 0)
+	for _, v := range items {
+		if v.Frequency == "月度" && v.EndDate.Before(monthDate) {
+			monthTableBody += getTableTr(v)
+		}
+	}
+	monthTable += monthTableBody
+	monthTable += ` </tbody></table>`
+	noticeSendBody += monthDiv + monthTable
+	noticeSendBody += `<br/>`
+	//所有指标
+	allDiv := `<hr style="color: red">`
+	allDiv = `<div>当前所有指标,按数据日期升序排列:</div>`
+	allTable := `<table border="1" style="border-collapse: collapse;">
+    <thead>
+    <tr>
+        <td>指标编码</td>
+        <td>指标名称</td>
+        <td>指标来源</td>
+		<td>频度</td>
+        <td>指标数据最后日期</td>
+        <td>指标数据更新日期</td>
+    </tr>
+    </thead>`
+	allTableBody := `<tbody>`
+	for _, v := range items {
+		allTableBody += getTableTr(v)
+	}
+	allTable += allTableBody
+	allTable += ` </tbody></table>`
+	noticeSendBody += allDiv + allTable
+
+	utils.SendEmailByHongze("指标更新情况通知", noticeSendBody, utils.RefreshEdbInfoEmailSendToUsers, "", "")
+	return
+}
+
+func getTableTr(item *data_manage.EdbInfoList) string {
+	if item != nil {
+		trHtml := ` <tr>
+        <td>` + item.EdbCode + `</td>
+        <td>` + item.EdbName + `</td>
+        <td>` + item.SourceName + `</td>
+		<td>` + item.Frequency + `</td>
+        <td>` + item.EndDate.Format(utils.FormatDate) + `</td>
+        <td>` + item.ModifyTime + `</td>
+    </tr>`
+		return trHtml
+	} else {
+		return ""
+	}
+}

+ 4 - 3
services/task.go

@@ -8,6 +8,7 @@ import (
 	"hongze/hongze_task/services/data"
 	"hongze/hongze_task/utils"
 	"sync"
+	"time"
 )
 
 func Task() {
@@ -154,7 +155,9 @@ func RefreshData(cont context.Context) (err error) {
 	//隆众数据
 	go data.RefreshDataFromLz(&wg)
 	wg.Wait()
-	go data.RefreshDataFromCalculateAll()
+	data.RefreshDataFromCalculateAll()
+	time.Sleep(2 * time.Second)
+	data.RefreshNotice()
 	return
 }
 
@@ -181,5 +184,3 @@ endData:=time.Now().UnixNano()/1e6
 	dateTime:=time.Unix(endData/1000,0)
 	fmt.Println(dateTime)
 */
-
-

+ 4 - 4
utils/constants.go

@@ -20,9 +20,9 @@ const (
 )
 
 const (
-	APPNAME          = "弘则-task"
-	EmailSendToUsers = "317699326@qq.com;984198890@qq.com;512188925@qq.com"
-	EmailSendToMe    = "317699326@qq.com"
+	APPNAME                        = "弘则-task"
+	EmailSendToUsers               = "317699326@qq.com;984198890@qq.com;512188925@qq.com"
+	RefreshEdbInfoEmailSendToUsers = "317699326@qq.com;jhwang@hzinsights.com;lnyan@hzinsights.com"
 )
 
 //手机号,电子邮箱正则
@@ -85,4 +85,4 @@ const (
 //数据刷新频率
 const (
 	DATA_REFRESH = 7 //7个单位,日/周/月/季度/年
-)
+)