hsun 3 년 전
부모
커밋
d9209b9459

+ 47 - 47
controller/chart/chart_info.go

@@ -94,7 +94,7 @@ func GetChartInfoDetail(c *gin.Context)  {
 				response.Fail("图表不存在,请刷新页面", c)
 				return
 			}
-			response.Fail("获取图表信息失败, Err:" + err.Error(), c)
+			response.FailMsg("获取失败", "获取图表信息失败, Err:" + err.Error(), c)
 			return
 		}
 		chartType = chartInfo.ChartType
@@ -119,14 +119,14 @@ func GetChartInfoDetail(c *gin.Context)  {
 	if chartInfoId > 0 {
 		mappingList, err = chartEdbMappingModel.GetMappingListByChartInfoId(chartInfoId)
 		if err != nil {
-			response.Fail("获取图表指标信息失败, Err:" + err.Error(), c)
+			response.FailMsg("获取失败", "获取图表指标信息失败4001, Err:" + err.Error(), c)
 			return
 		}
 	} else {
 		if edbInfoId != "" {
 			mappingList, err = chartEdbMappingModel.GetMappingListByEdbInfoId(edbInfoId)
 			if err != nil {
-				response.Fail("获取图表指标信息失败, Err:" + err.Error(), c)
+				response.FailMsg("获取失败", "获取图表指标信息失败4002, Err:" + err.Error(), c)
 				return
 			}
 		}
@@ -214,7 +214,7 @@ func GetChartInfoDetail(c *gin.Context)  {
 		if calendar == "农历" {
 			newStartDateReal, err := time.Parse(utils.FormatDate, startDateReal)
 			if err != nil {
-				response.Fail("农历时间转换有误, Err:" + err.Error(), c)
+				response.FailMsg("获取失败", "农历时间转换有误4001, Err:" + err.Error(), c)
 				//fmt.Println("time.Parse:" + err.Error())
 				return
 			}
@@ -226,7 +226,7 @@ func GetChartInfoDetail(c *gin.Context)  {
 		//fmt.Println("chart:", v.Source, v.EdbInfoId, startDateReal, endDate)
 		dataList, err = edbDataModel.GetEdbDataList(v.Source, v.EdbInfoId, startDateReal, endDate)
 		if err != nil {
-			response.Fail("获取图表指标信息失败, Err:" + err.Error(), c)
+			response.FailMsg("获取失败", "获取图表指标信息失败4003, Err:" + err.Error(), c)
 			return
 		}
 		if diffSeconds != 0 && v.EdbInfoType == 0 {
@@ -244,7 +244,7 @@ func GetChartInfoDetail(c *gin.Context)  {
 				} else {
 					result, err := edbDataService.AddCalculateQuarter(dataList)
 					if err != nil {
-						response.Fail("获取农历数据失败, Err:" + err.Error(), c)
+						response.FailMsg("获取失败", "获取农历数据失败4002, Err:" + err.Error(), c)
 						return
 					}
 					if result.List[0].Year != calendarPreYear {
@@ -270,7 +270,7 @@ func GetChartInfoDetail(c *gin.Context)  {
 				for _, v := range dataList {
 					itemDate, err := time.Parse(utils.FormatDate, v.DataTime)
 					if err != nil {
-						response.Fail("季度指标日期转换失败, Err:" + err.Error() + ";DataTime:" + v.DataTime, c)
+						response.FailMsg("获取失败", "季度指标日期转换失败, Err:" + err.Error() + ";DataTime:" + v.DataTime, c)
 						return
 					}
 					year := itemDate.Year()
@@ -332,44 +332,44 @@ func GetChartInfoDetail(c *gin.Context)  {
 
 // RefreshChartInfo 刷新图表信息
 func RefreshChartInfo(c *gin.Context)  {
-	//// 参数校验
-	//reqChartInfoId := c.DefaultQuery("ChartInfoId", "")
-	//if reqChartInfoId == "" {
-	//	response.Fail("参数有误:图表ID", c)
-	//	return
-	//}
-	//chartInfoId, _ := strconv.Atoi(reqChartInfoId)
-	//
-	//// 刷新频率限制
-	////userInfo := user.GetInfoByClaims(c)
-	////cacheKey := utils.HZ_CHART_LIB_DETAIL + "YB_REFRESH_LIMIT_" + reqChartInfoId + "_" + strconv.Itoa(int(userInfo.UserID))
-	////countUserRefresh, _ := global.Redis.Get(context.TODO(), cacheKey).Int()
-	////if countUserRefresh > 2 {
-	////	response.Ok("刷新成功", c)
-	////	return
-	////}
-	////countUserRefresh += 1
-	////_ = global.Redis.SetEX(context.TODO(), cacheKey, 1, 1 *  time.Hour)
-	//
-	//// 图表信息校验
-	//chartInfo, err := chartInfoModel.GetChartInfoById(chartInfoId)
-	//if err != nil {
-	//	if err == utils.ErrNoRow {
-	//		response.Fail("图表已被删除,无需刷新", c)
-	//		return
-	//	}
-	//	response.Fail("刷新失败", c)
-	//	return
-	//}
-	//
-	//// 刷新图表
-	//err = chart.RefreshChartInfo(chartInfo.ChartInfoId)
-	//if err != nil {
-	//	response.Fail("刷新图表关联指标信息失败", c)
+	// 参数校验
+	reqChartInfoId := c.DefaultQuery("ChartInfoId", "")
+	if reqChartInfoId == "" {
+		response.Fail("参数有误:图表ID", c)
+		return
+	}
+	chartInfoId, _ := strconv.Atoi(reqChartInfoId)
+
+	// 刷新频率限制
+	//userInfo := user.GetInfoByClaims(c)
+	//cacheKey := utils.HZ_CHART_LIB_DETAIL + "YB_REFRESH_LIMIT_" + reqChartInfoId + "_" + strconv.Itoa(int(userInfo.UserID))
+	//countUserRefresh, _ := global.Redis.Get(context.TODO(), cacheKey).Int()
+	//if countUserRefresh > 2 {
+	//	response.Ok("刷新成功", c)
 	//	return
 	//}
-	//
-	//response.OkData("操作成功", "", c)
+	//countUserRefresh += 1
+	//_ = global.Redis.SetEX(context.TODO(), cacheKey, 1, 1 *  time.Hour)
+
+	// 图表信息校验
+	chartInfo, err := chartInfoModel.GetChartInfoById(chartInfoId)
+	if err != nil {
+		if err == utils.ErrNoRow {
+			response.Fail("图表已被删除,无需刷新", c)
+			return
+		}
+		response.FailMsg("刷新失败", "刷新失败, Err:" + err.Error(), c)
+		return
+	}
+
+	// 刷新图表
+	err = chart.RefreshChartInfo(chartInfo.ChartInfoId)
+	if err != nil {
+		response.FailMsg("刷新失败", "刷新图表关联指标信息失败, Err:" + err.Error(), c)
+		return
+	}
+
+	response.OkData("刷新成功", "", c)
 }
 
 // EditChartInfo 编辑图表信息
@@ -416,7 +416,7 @@ func EditChartInfo(c *gin.Context)  {
 			response.Fail("图表已被删除,请刷新页面!", c)
 			return
 		}
-		response.Fail("获取图表信息失败", c)
+		response.FailMsg("操作失败", "获取图表信息失败, Err:" + err.Error(), c)
 		return
 	}
 	if chartItem.ChartType == 2 && len(req.ChartEdbInfoList) > 1 {
@@ -435,14 +435,14 @@ func EditChartInfo(c *gin.Context)  {
 		edbInfo, err := edbInfoModel.GetEdbInfoById(v.EdbInfoId)
 		if err != nil {
 			if err == utils.ErrNoRow {
-				response.Fail("图表不存在,ChartInfoId:" + strconv.Itoa(v.EdbInfoId), c)
+				response.FailMsg("操作失败", "图表不存在,ChartInfoId:" + strconv.Itoa(v.EdbInfoId), c)
 				return
 			}
-			response.Fail("获取图表的指标信息失败,Err:" + err.Error(), c)
+			response.FailMsg("操作失败", "获取图表的指标信息失败,Err:" + err.Error(), c)
 			return
 		}
 		if edbInfo == nil {
-			response.Fail("指标不存在,ChartInfoId:" + strconv.Itoa(v.EdbInfoId), c)
+			response.FailMsg("操作失败", "指标不存在,ChartInfoId:" + strconv.Itoa(v.EdbInfoId), c)
 			return
 		}
 		edbInfoIdArr = append(edbInfoIdArr, v.EdbInfoId)

+ 17 - 18
controller/chart/my_chart.go

@@ -51,7 +51,6 @@ func GetMyChartChassify(c *gin.Context) {
 	response.OkData("获取成功", respData, c)
 }
 
-
 // GetMyChartList 获取图表列表
 // @Tags 图库模块
 // @Summary  获取图表列表
@@ -82,7 +81,7 @@ func GetMyChartList(c *gin.Context) {
 		privateCondition := make(map[string]interface{})
 		publicClassify, privateClassify, err := chart.GetUserChartClassifyListByCondition(userInfo, publicCondition, privateCondition)
 		if err != nil {
-			response.Fail("获取图表分类信息失败, Err:" + err.Error(), c)
+			response.FailMsg("获取失败", "获取图表分类信息失败, Err:" + err.Error(), c)
 			return
 		}
 		// 内部员工默认取自己的第一个分类
@@ -119,7 +118,7 @@ func GetMyChartList(c *gin.Context) {
 
 	list, err := myChartModel.GetMyChartListByCondition(condition, pars, page, limit)
 	if err != nil {
-		response.Fail("获取图库列表失败, Err:" + err.Error(), c)
+		response.FailMsg("获取失败", "获取图库列表失败, Err:" + err.Error(), c)
 		return
 	}
 
@@ -169,10 +168,10 @@ func MoveMyChart(c *gin.Context) {
 	myChassify, err := my_chart_classify.GetClassifyById(req.MyChartClassifyId)
 	if err != nil {
 		if err == utils.ErrNoRow {
-			response.Fail("该图表分类信息有误", c)
+			response.FailMsg("操作失败", "图表分类信息有误, Err:" + err.Error(), c)
 			return
 		}
-		response.Fail("获取图表信息失败", c)
+		response.FailMsg("操作失败", "获取图表分类信息失败, Err:" + err.Error(), c)
 		return
 	}
 	if myChassify.AdminID != adminId {
@@ -186,14 +185,14 @@ func MoveMyChart(c *gin.Context) {
 	if req.PrevMyChartId <= 0 {
 		firstMapItem, err := myChartClassifyMappingModel.GetMyChartSort(adminId, req.MyChartClassifyId, 0)
 		if err != nil {
-			response.Fail("获取图表排序失败4001", c)
+			response.FailMsg("操作失败", "获取图表排序失败4001, Err:" + err.Error(), c)
 			return
 		}
 		if firstMapItem.Sort <= 0 {
 			firstSort := step / float64(2)
 			err = myChartClassifyMappingModel.MyChartMove(firstSort, adminId, firstMapItem.MyChartId, firstMapItem.MyChartClassifyId)
 			if err != nil {
-				response.Fail("移动失败", c)
+				response.FailMsg("操作失败", "移动失败4001, Err:" + err.Error(), c)
 				return
 			}
 			newSort = step / float64(4)
@@ -203,14 +202,14 @@ func MoveMyChart(c *gin.Context) {
 	} else if req.NextMyChartId <= 0 {
 		latestMapItem, err := myChartClassifyMappingModel.GetMyChartSort(adminId, req.MyChartClassifyId, 1)
 		if err != nil {
-			response.Fail("获取图表排序失败4002", c)
+			response.FailMsg("操作失败", "获取图表排序失败4002, Err:" + err.Error(), c)
 			return
 		}
 		if latestMapItem.Sort <= 0 {
 			latestSort := step / float64(2)
 			err = myChartClassifyMappingModel.MyChartMove(latestSort, adminId, latestMapItem.MyChartId, latestMapItem.MyChartClassifyId)
 			if err != nil {
-				response.Fail("移动失败", c)
+				response.FailMsg("操作失败", "移动失败4002, Err:" + err.Error(), c)
 				return
 			}
 			newSort = step / float64(4)
@@ -220,12 +219,12 @@ func MoveMyChart(c *gin.Context) {
 	} else {
 		preMapItem, err := myChartClassifyMappingModel.GetMyChartClassifyMapping(adminId, req.PrevMyChartId, req.MyChartClassifyId)
 		if err != nil {
-			response.Fail("获取上级图表关联信息失败", c)
+			response.FailMsg("操作失败", "获取上级图表关联信息失败, Err:" + err.Error(), c)
 			return
 		}
 		nextMapItem, err := myChartClassifyMappingModel.GetMyChartClassifyMapping(adminId, req.NextMyChartId, req.MyChartClassifyId)
 		if err != nil {
-			response.Fail("获取下级图表关联信息失败", c)
+			response.FailMsg("操作失败", "获取下级图表关联信息失败, Err:" + err.Error(), c)
 			return
 		}
 		newSort = (preMapItem.Sort + nextMapItem.Sort) / 2
@@ -233,7 +232,7 @@ func MoveMyChart(c *gin.Context) {
 	if newSort >= 0 {
 		err = myChartClassifyMappingModel.MyChartMove(newSort, adminId, req.MyChartId, req.MyChartClassifyId)
 		if err != nil {
-			response.Fail("移动失败", c)
+			response.FailMsg("操作失败", "移动失败4003, Err:" + err.Error(), c)
 			return
 		}
 	}
@@ -297,10 +296,10 @@ func MoveMyChartClassify(c *gin.Context) {
 	myChassify, err := my_chart_classify.GetClassifyById(req.MyChartClassifyId)
 	if err != nil {
 		if err == utils.ErrNoRow {
-			response.Fail("该图表分类信息有误", c)
+			response.FailMsg("操作失败", "该图表分类信息有误, Err:", c)
 			return
 		}
-		response.Fail("获取图表信息失败", c)
+		response.FailMsg("操作失败", "获取图表信息失败" + err.Error(), c)
 		return
 	}
 	if myChassify.AdminID != adminId {
@@ -313,7 +312,7 @@ func MoveMyChartClassify(c *gin.Context) {
 	if req.PrevClassifyId > 0 {
 		prevClassify, err := my_chart_classify.GetClassifyByIdAndAdminId(adminId, req.PrevClassifyId)
 		if err != nil {
-			response.Fail("移动失败, 获取上一个兄弟节点分类信息失败", c)
+			response.FailMsg("操作失败", "移动失败, 获取上一个兄弟节点分类信息失败, Err:" + err.Error(), c)
 			return
 		}
 
@@ -322,7 +321,7 @@ func MoveMyChartClassify(c *gin.Context) {
 			// 下一个兄弟节点
 			nextClassify, err := my_chart_classify.GetClassifyByIdAndAdminId(adminId, req.NextClassifyId)
 			if err != nil {
-				response.Fail("移动失败, 获取下一个兄弟节点分类信息失败", c)
+				response.FailMsg("操作失败", "移动失败, 获取下一个兄弟节点分类信息失败, Err:" + err.Error(), c)
 				return
 			}
 			// 如果上一个兄弟与下一个兄弟的排序权重是一致的,那么需要将下一个兄弟(以及下个兄弟的同样排序权重)的排序权重+2,自己变成上一个兄弟的排序权重+1
@@ -346,7 +345,7 @@ func MoveMyChartClassify(c *gin.Context) {
 	} else {
 		firstClassify, err := my_chart_classify.GetFirstClassifyByAdminId(adminId)
 		if err != nil && err != utils.ErrNoRow {
-			response.Fail("移动失败, 获取获取当前账号下的排序第一条的分类信息失败", c)
+			response.FailMsg("操作失败", "移动失败, 获取获取当前账号下的排序第一条的分类信息失败, Err:" + err.Error(), c)
 			return
 		}
 
@@ -365,7 +364,7 @@ func MoveMyChartClassify(c *gin.Context) {
 	if len(updateCol) > 0 {
 		err = my_chart_classify.UpdateClassifySort(adminId, myChassify.MyChartClassifyId, myChassify.Sort, myChassify.ModifyTime)
 		if err != nil {
-			response.Fail("移动失败", c)
+			response.FailMsg("操作失败", "更新图表分类排序失败, Err:" + err.Error(), c)
 			return
 		}
 	}

+ 10 - 0
controller/response/base.go

@@ -141,3 +141,13 @@ func SpecificFail(data interface{}, message string, c *gin.Context) {
 	}
 	result(200, resultData, c)
 }
+
+// FailMsg 操作失败
+func FailMsg(msg, errMsg string, c *gin.Context) {
+	resultData := ResultData{
+		Code: FAIL_CODE,
+		Msg:  msg,
+		ErrMsg: errMsg,
+	}
+	result(200, resultData, c)
+}

+ 9 - 2
models/tables/edb_data/create.go

@@ -6,18 +6,25 @@ import (
 
 func AddEdbDataThsBySql(sqlStr string) (err error) {
 	err = global.MYSQL["data"].Exec(sqlStr).Error
-
 	return
 }
 
 func AddEdbDataWindBySql(sqlStr string) (err error) {
 	err = global.MYSQL["data"].Exec(sqlStr).Error
-
 	return
 }
 
 func AddEdbDataPb(items []*EdbDataPb) (err error) {
 	err = global.MYSQL["data"].Model(EdbDataPb{}).Create(items).Error
+	return
+}
+
+func AddBaseFromSmmIndex(item *BaseFromSmmIndex) (lastId int64, err error) {
+	err = global.MYSQL["data"].Model(BaseFromSmmIndex{}).Create(item).Error
+	return
+}
 
+func AddBaseFromSmmData(item *BaseFromSmmData) (lastId int64, err error) {
+	err = global.MYSQL["data"].Model(BaseFromSmmData{}).Create(item).Error
 	return
 }

+ 112 - 0
models/tables/edb_data/query.go

@@ -204,4 +204,116 @@ type EdbDataPb struct {
 	Ticker        string
 	Field         string
 	DataTimestamp int64
+}
+
+type BaseFromSmm struct {
+	BaseFromSmmId int `orm:"column(base_from_smm_id);pk"`
+	Aid           int
+	Name          string
+	Interface     string
+	ApiUpdate     int
+	ApiUpdateType string
+	ApiType       int
+	ApiTypeAll    string
+	Type1         string `orm:"column(type_1)"`
+	Type2         string `orm:"column(type_2)"`
+	Type3         string `orm:"column(type_3)"`
+	ApiStartTime  string
+	ApiUpdateTime string
+	StartTime     string
+	FinishTime    string
+	AuthModule    string
+	AuthLang      string
+	ApiLabel      string
+	Enable        string
+	EditPerson    string
+	EditTime      string
+	AuthDur       int
+	AuthDurType   string
+}
+
+type BaseFromSmmIndex struct {
+	BaseFromSmmIndexId int `orm:"column(base_from_smm_index_id);pk"`
+	Interface          string
+	Name               string
+	IndexCode          string
+	IndexName          string
+	Type1              string `orm:"column(type_1)"`
+	Type2              string `orm:"column(type_2)"`
+	Type3              string `orm:"column(type_3)"`
+	Frequency          string
+	Unit               string
+	ApiStartTime       string
+	ApiUpdateTime      string
+	StartTime          string
+	FinishTime         string
+	CreateTime         time.Time
+	ModifyTime         time.Time
+}
+
+type BaseFromSmmData struct {
+	SmmDataId          int `orm:"column(smm_data_id);pk"`
+	BaseFromSmmIndexId int
+	IndexCode          string
+	DataTime           string
+	Value              string
+	CreateTime         time.Time
+	ModifyTime         time.Time
+	DataTimestamp      int64
+}
+
+func GetBaseFromSmmBySmmCode(smmCode string) (item *BaseFromSmm, err error) {
+	sql := `SELECT * FROM base_from_smm WHERE interface = ?`
+	err = global.MYSQL["data"].Raw(sql, smmCode).Scan(&item).Error
+
+	return
+}
+
+func GetBaseFromSmmIndexBySmmCode(smmCode string) (list []*BaseFromSmmIndex, err error) {
+	sql := ` SELECT * FROM base_from_smm_index WHERE interface = ? `
+	err = global.MYSQL["data"].Raw(sql, smmCode).Scan(&list).Error
+
+	return
+}
+
+func GetBaseFromSmmDataAllByIndexCode(indexCode string) (list []*BaseFromSmmData, err error) {
+	sql := `SELECT * FROM base_from_smm_data WHERE index_code=? `
+	err = global.MYSQL["data"].Raw(sql, indexCode).Scan(&list).Error
+
+	return
+}
+
+func GetBaseFromSmmMaxOrMinDate(indexCode string) (min_date, max_date string, err error) {
+	//o := orm.NewOrm()
+	//o.Using("data")
+	sql := ` SELECT MIN(data_time) AS min_date,MAX(data_time) AS max_date FROM base_from_smm_data WHERE index_code=? `
+	//err = o.Raw(sql, indexCode).QueryRow(&min_date, &max_date)
+	err = global.MYSQL["data"].Raw(sql, indexCode).Scan(&min_date, &max_date).Error
+
+	return
+}
+
+type YsResult struct {
+	Code int64 `json:"Code"`
+	Data struct {
+		CompanyList []interface{} `json:"CompanyList"`
+		Content     [][]string    `json:"Content"`
+		Field       []struct {
+			ColIndex   int64  `json:"ColIndex"`
+			ColumnType string `json:"ColumnType"`
+			Info       string `json:"Info"`
+			IsDate     string `json:"IsDate"`
+			Name       string `json:"Name"`
+			Unit       string `json:"Unit"`
+			DBColName  string `json:"db_col_name"`
+		} `json:"Field"`
+		CountPage   int64  `json:"count_page"`
+		CurrentPage int64  `json:"current_page"`
+		Frequency   string `json:"frequency"`
+		Mindate     string `json:"mindate"`
+		PageNum     int64  `json:"page_num"`
+		Status      int64  `json:"status"`
+		TotalNum    int64  `json:"total_num"`
+	} `json:"Data"`
+	Msg string `json:"Msg"`
 }

+ 7 - 0
models/tables/edb_data/update.go

@@ -20,5 +20,12 @@ func ModifyEdbDataPb(edbInfoId int, dataTime string, value float64) (err error)
 	sql := ` UPDATE edb_data_pb SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
 	err = global.MYSQL["data"].Exec(sql, value, edbInfoId, dataTime).Error
 
+	return
+}
+
+func ModifyBaseFromSmmData(smmDataId int, value string) (err error) {
+	sql := `UPDATE base_from_smm_data SET value=?,modify_time=NOW() WHERE smm_data_id=? `
+	err = global.MYSQL["data"].Exec(sql, value, smmDataId).Error
+
 	return
 }

+ 2 - 3
services/chart/chart_info.go

@@ -228,8 +228,7 @@ func RefreshChartInfo(chartInfoId int) (err error) {
 			if err != nil {
 				errMsg = "RefreshEdbDataByLz Err:" + err.Error()
 			}
-		}
-		/*else if source == utils.DATA_SOURCE_YS {
+		} else if source == utils.DATA_SOURCE_YS {
 			endDate := time.Now().AddDate(utils.DATA_END_DATE_LIMIT, 0, 0).Format(utils.FormatDate)
 			err = RefreshAllEdbDataByYs(edbInfoId, source, edbCode, startDate, endDate)
 			if err != nil {
@@ -241,7 +240,7 @@ func RefreshChartInfo(chartInfoId int) (err error) {
 			if err != nil {
 				errMsg = "RefreshEdbDataByGl Err:" + err.Error()
 			}
-		}*/
+		}
 
 		/*maxAndMinItem, err := data_manage.GetEdbInfoMaxAndMinInfo(source, edbCode)
 		if err != nil {

+ 393 - 342
services/chart/edb_data.go

@@ -1,6 +1,8 @@
 package chart
 
 import (
+	"crypto/md5"
+	"encoding/hex"
 	"encoding/json"
 	"errors"
 	"fmt"
@@ -477,347 +479,396 @@ func RefreshEdbDataByLz(edbInfoId int, edbCode, startDate, endDate string) (err
 }
 
 //全部刷新有色数据
-//func RefreshAllEdbDataByYs(edbInfoId, source int, edbCode, startDate, endDate string) (err error) {
-//
-//	tx := global.MYSQL["data"].Begin()
-//	defer func() {
-//		if err != nil {
-//			tx.Rollback()
-//		} else {
-//			tx.Commit()
-//		}
-//	}()
-//
-//	if err != nil {
-//		return
-//	}
-//	edbInfoIdStr := strconv.Itoa(edbInfoId)
-//	//获取数据
-//	err = SyncSmmIndexDataBase(edbCode, startDate, endDate)
-//	if err != nil {
-//		err = errors.New("SyncSmmIndexDataBase Err:" + err.Error())
-//		return err
-//	}
-//	//获取已存在指标所有数据
-//	existDataList := make([]*EdbDataBase, 0)
-//	dataTableName := GetEdbDataTableName(source)
-//	sql := `SELECT * FROM %s WHERE edb_info_id=? `
-//	sql = fmt.Sprintf(sql, dataTableName)
-//	_, err = o.Raw(sql, edbInfoId).QueryRows(&existDataList)
-//	if err != nil {
-//		return err
-//	}
-//	existDataMap := make(map[string]string)
-//	for _, v := range existDataList {
-//		existDataMap[v.DataTime] = v.Value
-//	}
-//
-//	smmDateList := make([]*BaseFromSmmDataSimple, 0)
-//	smmSql := ` SELECT * FROM base_from_smm_data WHERE index_code=? AND data_time>=? `
-//	_, err = o.Raw(smmSql, edbCode, startDate).QueryRows(&smmDateList)
-//	if err != nil {
-//		return err
-//	}
-//
-//	addSql := ` INSERT INTO edb_data_ys(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
-//	var isAdd bool
-//	for _, sv := range smmDateList {
-//		if existVal, ok := existDataMap[sv.DataTime]; !ok {
-//			dataTime, err := time.Parse(utils.FormatDate, sv.DataTime)
-//			if err != nil {
-//				return err
-//			}
-//			timestamp := dataTime.UnixNano() / 1e6
-//			timeStr := fmt.Sprintf("%d", timestamp)
-//			addSql += GetAddSql(edbInfoIdStr, edbCode, sv.DataTime, timeStr, sv.Value)
-//			isAdd = true
-//		} else {
-//			if existVal != sv.Value {
-//				sql := ` UPDATE %s SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
-//				sql = fmt.Sprintf(sql, dataTableName)
-//				_, err = o.Raw(sql, sv.Value, edbInfoId, sv.DataTime).Exec()
-//				if err != nil {
-//					return err
-//				}
-//			}
-//		}
-//	}
-//	if isAdd {
-//		addSql = strings.TrimRight(addSql, ",")
-//		_, err = o.Raw(addSql).Exec()
-//		if err != nil {
-//			return err
-//		}
-//	}
-//	return
-//}
+func RefreshAllEdbDataByYs(edbInfoId, source int, edbCode, startDate, endDate string) (err error) {
+
+	tx := global.MYSQL["data"].Begin()
+	defer func() {
+		if err != nil {
+			tx.Rollback()
+		} else {
+			tx.Commit()
+		}
+	}()
+
+	if err != nil {
+		return
+	}
+	edbInfoIdStr := strconv.Itoa(edbInfoId)
+	//获取数据
+	err = SyncSmmIndexDataBase(edbCode, startDate, endDate)
+	if err != nil {
+		err = errors.New("SyncSmmIndexDataBase Err:" + err.Error())
+		return err
+	}
+	//获取已存在指标所有数据
+	existDataList := make([]*EdbDataBase, 0)
+	dataTableName := GetEdbDataTableName(source)
+	sql := `SELECT * FROM %s WHERE edb_info_id=? `
+	sql = fmt.Sprintf(sql, dataTableName)
+	_, err = o.Raw(sql, edbInfoId).QueryRows(&existDataList)
+	if err != nil {
+		return err
+	}
+	existDataMap := make(map[string]string)
+	for _, v := range existDataList {
+		existDataMap[v.DataTime] = v.Value
+	}
+
+	smmDateList := make([]*BaseFromSmmDataSimple, 0)
+	smmSql := ` SELECT * FROM base_from_smm_data WHERE index_code=? AND data_time>=? `
+	_, err = o.Raw(smmSql, edbCode, startDate).QueryRows(&smmDateList)
+	if err != nil {
+		return err
+	}
+
+	addSql := ` INSERT INTO edb_data_ys(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
+	var isAdd bool
+	for _, sv := range smmDateList {
+		if existVal, ok := existDataMap[sv.DataTime]; !ok {
+			dataTime, err := time.Parse(utils.FormatDate, sv.DataTime)
+			if err != nil {
+				return err
+			}
+			timestamp := dataTime.UnixNano() / 1e6
+			timeStr := fmt.Sprintf("%d", timestamp)
+			addSql += GetAddSql(edbInfoIdStr, edbCode, sv.DataTime, timeStr, sv.Value)
+			isAdd = true
+		} else {
+			if existVal != sv.Value {
+				sql := ` UPDATE %s SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
+				sql = fmt.Sprintf(sql, dataTableName)
+				_, err = o.Raw(sql, sv.Value, edbInfoId, sv.DataTime).Exec()
+				if err != nil {
+					return err
+				}
+			}
+		}
+	}
+	if isAdd {
+		addSql = strings.TrimRight(addSql, ",")
+		_, err = o.Raw(addSql).Exec()
+		if err != nil {
+			return err
+		}
+	}
+	return
+}
+
+const (
+	dataUrl = "https://dataapi.smm.cn/GetData/" //data url (中文)
+	//dataUrl = "https://dataapi.smm.cn/GetDataEn/" //data url (english edition)
+	authUrl = "https://platform.smm.cn/usercenter/auth" // auth url (for all)
+)
+
+type TokenResp struct {
+	Code int       `json:"Code"`
+	Msg  string    `json:"Msg"`
+	Data TokenData `json:"Data"`
+}
+
+type TokenData struct {
+	Token string `json:"Token"`
+}
 
 //获取token
-//func getToken(userName string, password string) (string, error) {
-//	encryptAuth := md5.New()
-//	encryptAuth.Write([]byte(password)) //encrypt password with md5
-//	newPassword := hex.EncodeToString(encryptAuth.Sum(nil))
-//
-//	resp, err := http.PostForm(authUrl, url.Values{"user_name": {userName}, "password": {newPassword}})
-//	if err != nil {
-//		return "", err
-//	}
-//
-//	defer resp.Body.Close()
-//
-//	body, err := ioutil.ReadAll(resp.Body)
-//	if err != nil {
-//		fmt.Println("reponse error", err)
-//		return "", err
-//	}
-//
-//	var bodyJsonContent TokenResp
-//
-//	if err = json.Unmarshal([]byte(body), &bodyJsonContent); err != nil {
-//		fmt.Println(err, "unmarsal failure")
-//		return "", err
-//	}
-//
-//	var token string
-//	if bodyJsonContent.Code == 0 {
-//		token = bodyJsonContent.Data.Token
-//	}
-//
-//	//print(token)
-//	return token, nil
-//}
-
-//func SyncSmmIndexDataBase(edbCode, startDate, endDate string) (err error) {
-//	//utils.FileLog.Info("start:" + time.Now().Format(utils.FormatDateTime))
-//
-//	var smmCode string
-//	if strings.Contains(edbCode, "#") {
-//		smmCode = strings.Split(edbCode, "#")[0]
-//	} else {
-//		smmCode = edbCode
-//	}
-//	token, err := getToken("pqian@hzinsights.com", "hz123456")
-//	if err != nil {
-//		fmt.Println(err)
-//		return
-//	}
-//	baseSmmItem, err := GetBaseFromSmmBySmmCode(smmCode)
-//	if err != nil {
-//		fmt.Println(err)
-//		return
-//	}
-//
-//	if baseSmmItem == nil {
-//		err = errors.New("GetBaseFromSmmBySmmCode Err:" + err.Error())
-//		return
-//	}
-//
-//	smmIndexAll, err := GetBaseFromSmmIndexBySmmCode(smmCode)
-//	if err != nil {
-//		fmt.Println("GetBaseFromSmmIndex Err:" + err.Error())
-//		return
-//	}
-//	existIndexMap := make(map[string]*BaseFromSmmIndex)
-//	for _, item := range smmIndexAll {
-//		existIndexMap[item.IndexCode] = item
-//	}
-//
-//	ysItem, err := getApiData(token, edbCode, startDate, endDate)
-//	if err != nil {
-//		fmt.Println(err)
-//		return
-//	}
-//	if ysItem != nil && ysItem.Code == 200 {
-//
-//		frequency := ysItem.Data.Frequency
-//
-//		indexMap := make(map[string]int)
-//		smmIndexIdMap := make(map[int]int)
-//		indexCodeMap := make(map[int]string)
-//
-//		indexKey := 0
-//		var isDateIndex int
-//		for fk, fv := range ysItem.Data.Field {
-//			if fv.IsDate == "1" {
-//				isDateIndex = fk
-//			} else {
-//				if !strings.Contains(fv.Name, "产品名称") &&
-//					!strings.Contains(fv.Name, "单位") &&
-//					!strings.Contains(fv.Name, "时间") &&
-//					!strings.Contains(fv.Name, "备注") {
-//
-//					indexMap[fv.DBColName] = fk
-//
-//					indexKey += 1
-//					indexCode := smmCode + "#" + strconv.Itoa(indexKey)
-//
-//					if findItem, ok := existIndexMap[indexCode]; !ok {
-//						ssmIndex := new(BaseFromSmmIndex)
-//						ssmIndex.Interface = smmCode
-//						ssmIndex.Name = baseSmmItem.Name
-//						ssmIndex.IndexCode = indexCode
-//						ssmIndex.IndexName = baseSmmItem.Name + "_" + fv.Name
-//						ssmIndex.Type1 = baseSmmItem.Type1
-//						ssmIndex.Type2 = baseSmmItem.Type2
-//						ssmIndex.Type3 = baseSmmItem.Type3
-//						ssmIndex.Frequency = frequency
-//						ssmIndex.Unit = fv.Unit
-//						ssmIndex.ApiStartTime = baseSmmItem.ApiStartTime
-//						ssmIndex.ApiUpdateTime = baseSmmItem.ApiUpdateTime
-//						ssmIndex.StartTime = baseSmmItem.StartTime
-//						ssmIndex.FinishTime = baseSmmItem.FinishTime
-//						ssmIndex.CreateTime = time.Now()
-//						ssmIndex.ModifyTime = time.Now()
-//						lastIndexId, err := AddBaseFromSmmIndex(ssmIndex)
-//						if err != nil {
-//							err = errors.New("AddBaseFromSmmIndex Err:" + err.Error())
-//							return err
-//						}
-//						smmIndexIdMap[fk] = int(lastIndexId)
-//						indexCodeMap[fk] = indexCode
-//					} else {
-//						smmIndexIdMap[fk] = findItem.BaseFromSmmIndexId
-//						indexCodeMap[fk] = findItem.IndexCode
-//					}
-//				}
-//			}
-//		}
-//
-//		existDataMap := make(map[string]*BaseFromSmmData)
-//		for _, mv := range indexCodeMap {
-//			indexCode := mv
-//			dataAllList, err := GetBaseFromSmmDataAllByIndexCode(indexCode)
-//			if err != nil {
-//				err = errors.New("GetBaseFromSmmData Err:" + err.Error())
-//				return err
-//			}
-//			for _, item := range dataAllList {
-//				key := item.IndexCode + item.DataTime
-//				existDataMap[key] = item
-//			}
-//		}
-//
-//		addExistDataMap := make(map[string]string)
-//
-//		for _, dv := range ysItem.Data.Content {
-//			var dataTime string
-//			dataTime = dv[isDateIndex]
-//			if strings.Contains(dataTime, "Q1") {
-//				dataTime = strings.Replace(dataTime, "Q1", "-01", -1)
-//				dataTime += "-31"
-//			}
-//			if strings.Contains(dataTime, "Q2") {
-//				dataTime = strings.Replace(dataTime, "Q2", "-06", -1)
-//				dataTime += "-30"
-//			}
-//			if strings.Contains(dataTime, "Q3") {
-//				dataTime = strings.Replace(dataTime, "Q3", "-09", -1)
-//				dataTime += "-30"
-//			}
-//			if strings.Contains(dataTime, "Q4") {
-//				dataTime = strings.Replace(dataTime, "Q4", "-12", -1)
-//				dataTime += "-31"
-//			}
-//
-//			if strings.Contains(dataTime, "H1") {
-//				dataTime = strings.Replace(dataTime, "H1", "-06", -1)
-//				dataTime += "-30"
-//			}
-//
-//			if strings.Contains(dataTime, "H2") {
-//				dataTime = strings.Replace(dataTime, "H2", "-12", -1)
-//				dataTime += "-31"
-//			}
-//
-//			if frequency == "月" {
-//				monthDate, err := time.Parse("2006-01", dataTime)
-//				if err != nil {
-//					fmt.Println("time.Parse:" + err.Error())
-//				}
-//				lastTime := monthDate.AddDate(0, 1, -1)
-//				lastYear, lastMonth, lastDay := lastTime.Date()
-//				var lastDate string
-//				if int(lastMonth) < 10 {
-//					lastDate = strconv.Itoa(lastYear) + "-" + "0" + strconv.Itoa(int(lastMonth)) + "-" + strconv.Itoa(lastDay)
-//				} else {
-//					lastDate = strconv.Itoa(lastYear) + "-" + strconv.Itoa(int(lastMonth)) + "-" + strconv.Itoa(lastDay)
-//				}
-//				dataTime = lastDate
-//			} else if frequency == "年" {
-//				dataTime = dataTime + "-12-31"
-//			}
-//			saveDataTime, err := time.Parse(utils.FormatDate, dataTime)
-//			if err != nil {
-//				err = errors.New("time.Parse Err:" + err.Error())
-//				return err
-//			}
-//			timestamp := saveDataTime.UnixNano() / 1e6
-//			//循环指标
-//			for _, v := range indexMap {
-//
-//				indexCode := indexCodeMap[v]
-//				smmIndexId := smmIndexIdMap[v]
-//				dataVal := dv[v]
-//
-//				if indexCode != "" {
-//
-//					key := indexCode + dataTime
-//					val := strings.Replace(dataVal, ",", "", -1)
-//					if findData, dataOk := existDataMap[key]; !dataOk {
-//						if _, addOK := addExistDataMap[key]; !addOK {
-//							if val != "" && val != "-" {
-//								dataItem := new(BaseFromSmmData)
-//								dataItem.BaseFromSmmIndexId = smmIndexId
-//								dataItem.IndexCode = indexCode
-//								dataItem.DataTime = dataTime
-//								dataItem.Value = val
-//								dataItem.CreateTime = time.Now()
-//								dataItem.ModifyTime = time.Now()
-//								dataItem.DataTimestamp = timestamp
-//								_, err = AddBaseFromSmmData(dataItem)
-//								if err != nil && !strings.Contains(err.Error(), "idx_index_code_date") {
-//									fmt.Println("AddBaseFromSmmData Err:" + err.Error())
-//									err = errors.New("AddBaseFromSmmData Err:" + err.Error())
-//									return err
-//								}
-//							}
-//						}
-//					} else {
-//						if findData != nil && findData.Value != val { //修改
-//							if _, addOK := addExistDataMap[key]; !addOK {
-//								if val != "" && val != "-" {
-//									err = ModifyBaseFromSmmData(findData.SmmDataId, val)
-//									if err != nil {
-//										err = errors.New("ModifyBaseFromSmmData Err:" + err.Error())
-//										return err
-//									}
-//								}
-//							}
-//						}
-//					}
-//					addExistDataMap[key] = key
-//				}
-//			}
-//		}
-//
-//		//修改数据开始,结束日期
-//		{
-//			indexList, err := GetBaseFromSmmIndexBySmmCode(smmCode)
-//			if err != nil {
-//				fmt.Println("GetBaseFromSmmIndexBySmmCode Err:" + err.Error())
-//			}
-//			for _, sv := range indexList {
-//				minDate, maxDate, err := GetBaseFromSmmMaxOrMinDate(sv.IndexCode)
-//				if err != nil {
-//					fmt.Println("GetEdbDataSmmMaxOrMinDate Err:" + err.Error())
-//				} else {
-//					err = ModifyBaseFromSmmMinDateAndMaxDate(sv.BaseFromSmmIndexId, minDate, maxDate)
-//					if err != nil {
-//						fmt.Println("ModifyBaseFromSmmMinDateAndMaxDate Err:" + err.Error())
-//					}
-//				}
-//			}
-//		}
-//	}
-//	return
-//}
+func getToken(userName string, password string) (string, error) {
+	encryptAuth := md5.New()
+	encryptAuth.Write([]byte(password)) //encrypt password with md5
+	newPassword := hex.EncodeToString(encryptAuth.Sum(nil))
+
+	resp, err := http.PostForm(authUrl, url.Values{"user_name": {userName}, "password": {newPassword}})
+	if err != nil {
+		return "", err
+	}
+
+	defer resp.Body.Close()
+
+	body, err := ioutil.ReadAll(resp.Body)
+	if err != nil {
+		fmt.Println("reponse error", err)
+		return "", err
+	}
+
+	var bodyJsonContent TokenResp
+
+	if err = json.Unmarshal([]byte(body), &bodyJsonContent); err != nil {
+		fmt.Println(err, "unmarsal failure")
+		return "", err
+	}
+
+	var token string
+	if bodyJsonContent.Code == 0 {
+		token = bodyJsonContent.Data.Token
+	}
+
+	//print(token)
+	return token, nil
+}
+
+func SyncSmmIndexDataBase(edbCode, startDate, endDate string) (err error) {
+	//utils.FileLog.Info("start:" + time.Now().Format(utils.FormatDateTime))
+
+	var smmCode string
+	if strings.Contains(edbCode, "#") {
+		smmCode = strings.Split(edbCode, "#")[0]
+	} else {
+		smmCode = edbCode
+	}
+	token, err := getToken("pqian@hzinsights.com", "hz123456")
+	if err != nil {
+		fmt.Println(err)
+		return
+	}
+	baseSmmItem, err := edbDataModel.GetBaseFromSmmBySmmCode(smmCode)
+	if err != nil {
+		fmt.Println(err)
+		return
+	}
+
+	if baseSmmItem == nil {
+		err = errors.New("GetBaseFromSmmBySmmCode Err:" + err.Error())
+		return
+	}
+
+	smmIndexAll, err := edbDataModel.GetBaseFromSmmIndexBySmmCode(smmCode)
+	if err != nil {
+		fmt.Println("GetBaseFromSmmIndex Err:" + err.Error())
+		return
+	}
+	existIndexMap := make(map[string]*edbDataModel.BaseFromSmmIndex)
+	for _, item := range smmIndexAll {
+		existIndexMap[item.IndexCode] = item
+	}
+
+	ysItem, err := getApiData(token, edbCode, startDate, endDate)
+	if err != nil {
+		fmt.Println(err)
+		return
+	}
+	if ysItem != nil && ysItem.Code == 200 {
+
+		frequency := ysItem.Data.Frequency
+
+		indexMap := make(map[string]int)
+		smmIndexIdMap := make(map[int]int)
+		indexCodeMap := make(map[int]string)
+
+		indexKey := 0
+		var isDateIndex int
+		for fk, fv := range ysItem.Data.Field {
+			if fv.IsDate == "1" {
+				isDateIndex = fk
+			} else {
+				if !strings.Contains(fv.Name, "产品名称") &&
+					!strings.Contains(fv.Name, "单位") &&
+					!strings.Contains(fv.Name, "时间") &&
+					!strings.Contains(fv.Name, "备注") {
+
+					indexMap[fv.DBColName] = fk
+
+					indexKey += 1
+					indexCode := smmCode + "#" + strconv.Itoa(indexKey)
+
+					if findItem, ok := existIndexMap[indexCode]; !ok {
+						ssmIndex := new(edbDataModel.BaseFromSmmIndex)
+						ssmIndex.Interface = smmCode
+						ssmIndex.Name = baseSmmItem.Name
+						ssmIndex.IndexCode = indexCode
+						ssmIndex.IndexName = baseSmmItem.Name + "_" + fv.Name
+						ssmIndex.Type1 = baseSmmItem.Type1
+						ssmIndex.Type2 = baseSmmItem.Type2
+						ssmIndex.Type3 = baseSmmItem.Type3
+						ssmIndex.Frequency = frequency
+						ssmIndex.Unit = fv.Unit
+						ssmIndex.ApiStartTime = baseSmmItem.ApiStartTime
+						ssmIndex.ApiUpdateTime = baseSmmItem.ApiUpdateTime
+						ssmIndex.StartTime = baseSmmItem.StartTime
+						ssmIndex.FinishTime = baseSmmItem.FinishTime
+						ssmIndex.CreateTime = time.Now()
+						ssmIndex.ModifyTime = time.Now()
+						lastIndexId, err := edbDataModel.AddBaseFromSmmIndex(ssmIndex)
+						if err != nil {
+							err = errors.New("AddBaseFromSmmIndex Err:" + err.Error())
+							return err
+						}
+						smmIndexIdMap[fk] = int(lastIndexId)
+						indexCodeMap[fk] = indexCode
+					} else {
+						smmIndexIdMap[fk] = findItem.BaseFromSmmIndexId
+						indexCodeMap[fk] = findItem.IndexCode
+					}
+				}
+			}
+		}
+
+		existDataMap := make(map[string]*edbDataModel.BaseFromSmmData)
+		for _, mv := range indexCodeMap {
+			indexCode := mv
+			dataAllList, err := edbDataModel.GetBaseFromSmmDataAllByIndexCode(indexCode)
+			if err != nil {
+				err = errors.New("GetBaseFromSmmData Err:" + err.Error())
+				return err
+			}
+			for _, item := range dataAllList {
+				key := item.IndexCode + item.DataTime
+				existDataMap[key] = item
+			}
+		}
+
+		addExistDataMap := make(map[string]string)
+
+		for _, dv := range ysItem.Data.Content {
+			var dataTime string
+			dataTime = dv[isDateIndex]
+			if strings.Contains(dataTime, "Q1") {
+				dataTime = strings.Replace(dataTime, "Q1", "-01", -1)
+				dataTime += "-31"
+			}
+			if strings.Contains(dataTime, "Q2") {
+				dataTime = strings.Replace(dataTime, "Q2", "-06", -1)
+				dataTime += "-30"
+			}
+			if strings.Contains(dataTime, "Q3") {
+				dataTime = strings.Replace(dataTime, "Q3", "-09", -1)
+				dataTime += "-30"
+			}
+			if strings.Contains(dataTime, "Q4") {
+				dataTime = strings.Replace(dataTime, "Q4", "-12", -1)
+				dataTime += "-31"
+			}
+
+			if strings.Contains(dataTime, "H1") {
+				dataTime = strings.Replace(dataTime, "H1", "-06", -1)
+				dataTime += "-30"
+			}
+
+			if strings.Contains(dataTime, "H2") {
+				dataTime = strings.Replace(dataTime, "H2", "-12", -1)
+				dataTime += "-31"
+			}
+
+			if frequency == "月" {
+				monthDate, err := time.Parse("2006-01", dataTime)
+				if err != nil {
+					fmt.Println("time.Parse:" + err.Error())
+				}
+				lastTime := monthDate.AddDate(0, 1, -1)
+				lastYear, lastMonth, lastDay := lastTime.Date()
+				var lastDate string
+				if int(lastMonth) < 10 {
+					lastDate = strconv.Itoa(lastYear) + "-" + "0" + strconv.Itoa(int(lastMonth)) + "-" + strconv.Itoa(lastDay)
+				} else {
+					lastDate = strconv.Itoa(lastYear) + "-" + strconv.Itoa(int(lastMonth)) + "-" + strconv.Itoa(lastDay)
+				}
+				dataTime = lastDate
+			} else if frequency == "年" {
+				dataTime = dataTime + "-12-31"
+			}
+			saveDataTime, err := time.Parse(utils.FormatDate, dataTime)
+			if err != nil {
+				err = errors.New("time.Parse Err:" + err.Error())
+				return err
+			}
+			timestamp := saveDataTime.UnixNano() / 1e6
+			//循环指标
+			for _, v := range indexMap {
+
+				indexCode := indexCodeMap[v]
+				smmIndexId := smmIndexIdMap[v]
+				dataVal := dv[v]
+
+				if indexCode != "" {
+
+					key := indexCode + dataTime
+					val := strings.Replace(dataVal, ",", "", -1)
+					if findData, dataOk := existDataMap[key]; !dataOk {
+						if _, addOK := addExistDataMap[key]; !addOK {
+							if val != "" && val != "-" {
+								dataItem := new(edbDataModel.BaseFromSmmData)
+								dataItem.BaseFromSmmIndexId = smmIndexId
+								dataItem.IndexCode = indexCode
+								dataItem.DataTime = dataTime
+								dataItem.Value = val
+								dataItem.CreateTime = time.Now()
+								dataItem.ModifyTime = time.Now()
+								dataItem.DataTimestamp = timestamp
+								_, err = edbDataModel.AddBaseFromSmmData(dataItem)
+								if err != nil && !strings.Contains(err.Error(), "idx_index_code_date") {
+									fmt.Println("AddBaseFromSmmData Err:" + err.Error())
+									err = errors.New("AddBaseFromSmmData Err:" + err.Error())
+									return err
+								}
+							}
+						}
+					} else {
+						if findData != nil && findData.Value != val { //修改
+							if _, addOK := addExistDataMap[key]; !addOK {
+								if val != "" && val != "-" {
+									err = edbDataModel.ModifyBaseFromSmmData(findData.SmmDataId, val)
+									if err != nil {
+										err = errors.New("ModifyBaseFromSmmData Err:" + err.Error())
+										return err
+									}
+								}
+							}
+						}
+					}
+					addExistDataMap[key] = key
+				}
+			}
+		}
+
+		//修改数据开始,结束日期
+		{
+			indexList, err := edbDataModel.GetBaseFromSmmIndexBySmmCode(smmCode)
+			if err != nil {
+				fmt.Println("GetBaseFromSmmIndexBySmmCode Err:" + err.Error())
+			}
+			for _, sv := range indexList {
+				minDate, maxDate, err := edbDataModel.GetBaseFromSmmMaxOrMinDate(sv.IndexCode)
+				if err != nil {
+					fmt.Println("GetEdbDataSmmMaxOrMinDate Err:" + err.Error())
+				} else {
+					err = edbDataModel.ModifyBaseFromSmmMinDateAndMaxDate(sv.BaseFromSmmIndexId, minDate, maxDate)
+					if err != nil {
+						fmt.Println("ModifyBaseFromSmmMinDateAndMaxDate Err:" + err.Error())
+					}
+				}
+			}
+		}
+	}
+	return
+}
+
+/*
+ * request data
+ * sdatetime,edatetime ==>format:yyyy-mm-dd,
+ * apiName ==> data.metal.com(for english)/data.smm.cn (for chinese)
+ */
+func getApiData(token string, apiName string, sdatetime string, edatetime string) (item *edbDataModel.YsResult, err error) {
+	reqUrl := dataUrl + apiName
+	resp, err := http.PostForm(reqUrl, url.Values{"token": {token}, "sdatetime": {sdatetime}, "edatetime": {edatetime}})
+	if err != nil {
+		return nil, err
+	}
+
+	defer resp.Body.Close()
+	body, err := ioutil.ReadAll(resp.Body)
+	if err != nil {
+		fmt.Println("response error")
+		return nil, err
+	}
+	//utils.FileLog.Info("ys result:" + string(body))
+	dataJsonContent := new(edbDataModel.YsResult)
+	if err = json.Unmarshal([]byte(body), &dataJsonContent); err != nil {
+		fmt.Println(err, "data unmarshal failure")
+		return nil, err
+	}
+
+	if dataJsonContent.Code == 200 && len(dataJsonContent.Data.Content) > 0 {
+		return dataJsonContent, nil
+	} else {
+		err = errors.New("code:" + strconv.Itoa(int(dataJsonContent.Code)) + "msg:" + dataJsonContent.Msg)
+	}
+	return nil, nil
+}