|
@@ -0,0 +1,823 @@
|
|
|
|
+package chart
|
|
|
|
+
|
|
|
|
+import (
|
|
|
|
+ "encoding/json"
|
|
|
|
+ "errors"
|
|
|
|
+ "fmt"
|
|
|
|
+ "hongze/hongze_yb/global"
|
|
|
|
+ edbDataModel "hongze/hongze_yb/models/tables/edb_data"
|
|
|
|
+ "hongze/hongze_yb/utils"
|
|
|
|
+ "io/ioutil"
|
|
|
|
+ "net/http"
|
|
|
|
+ "net/url"
|
|
|
|
+ "strconv"
|
|
|
|
+ "strings"
|
|
|
|
+ "time"
|
|
|
|
+)
|
|
|
|
+
|
|
|
|
+type EdbDataFromThs struct {
|
|
|
|
+ DataVol int64 `json:"dataVol"`
|
|
|
|
+ Errmsg string `json:"errmsg"`
|
|
|
|
+ Errorcode int64 `json:"errorcode"`
|
|
|
|
+ Perf interface{} `json:"perf"`
|
|
|
|
+ Tables []struct {
|
|
|
|
+ ID []string `json:"id"`
|
|
|
|
+ Time []string `json:"time"`
|
|
|
|
+ Value []float64 `json:"value"`
|
|
|
|
+ } `json:"tables"`
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func RefreshEdbDataByThs(edbInfoId int, edbCode, startDate, endDate string) (err error) {
|
|
|
|
+ HzServerDataUrl := ""
|
|
|
|
+ if global.CONFIG.Serve.RunMode == "release" {
|
|
|
|
+ HzServerDataUrl = "http://172.19.173.231:7000/"
|
|
|
|
+ } else {
|
|
|
|
+ HzServerDataUrl = "http://139.196.136.213:7000/"
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ thsUrl := HzServerDataUrl + `edbInfo/ths?EdbCode=%s&StartDate=%s&EndDate=%s`
|
|
|
|
+ thsUrl = fmt.Sprintf(thsUrl, edbCode, startDate, endDate)
|
|
|
|
+ //utils.FileLog.Info("thsUrl:%s", thsUrl)
|
|
|
|
+
|
|
|
|
+ reqRes, err := http.Get(thsUrl)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ defer reqRes.Body.Close()
|
|
|
|
+ body, err := ioutil.ReadAll(reqRes.Body)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ fmt.Println("GetEdbDataByThs body:")
|
|
|
|
+ fmt.Println(string(body))
|
|
|
|
+
|
|
|
|
+ item := new(EdbDataFromThs)
|
|
|
|
+ err = json.Unmarshal(body, &item)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ if item.Errorcode != 0 {
|
|
|
|
+ err = errors.New(string(body))
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ if len(item.Tables) > 0 {
|
|
|
|
+ table := item.Tables[0]
|
|
|
|
+ dataLen := len(table.Time)
|
|
|
|
+ addSql := ` INSERT INTO edb_data_ths(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
|
|
|
|
+ nowStr := time.Now().Format(utils.FormatDateTime)
|
|
|
|
+ var isAdd bool
|
|
|
|
+ for i := 0; i < dataLen; i++ {
|
|
|
|
+ eDate := table.Time[i]
|
|
|
|
+ sValue := table.Value[i]
|
|
|
|
+
|
|
|
|
+ count, err := edbDataModel.GetEdbDataThsByCodeAndDate(edbCode, eDate)
|
|
|
|
+ if err != nil && err != utils.ErrNoRow {
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+ if count <= 0 {
|
|
|
|
+ dataTime, err := time.Parse(utils.FormatDate, eDate)
|
|
|
|
+ if err != nil {
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ timestamp := dataTime.UnixNano() / 1e6
|
|
|
|
+ timeStr := fmt.Sprintf("%d", timestamp)
|
|
|
|
+
|
|
|
|
+ addSql += "("
|
|
|
|
+ addSql += strconv.Itoa(edbInfoId) + "," + "'" + edbCode + "'" + "," + "'" + eDate + "'" + "," + utils.SubFloatToString(sValue, 30) + "," + "'" + nowStr + "'" +
|
|
|
|
+ "," + "'" + nowStr + "'" + "," + "1"
|
|
|
|
+ addSql += "," + "'" + timeStr + "'"
|
|
|
|
+ addSql += "),"
|
|
|
|
+ isAdd = true
|
|
|
|
+ } else {
|
|
|
|
+ err = edbDataModel.ModifyEdbDataThs(int64(edbInfoId), eDate, sValue)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if isAdd {
|
|
|
|
+ addSql = strings.TrimRight(addSql, ",")
|
|
|
|
+ err = edbDataModel.AddEdbDataThsBySql(addSql)
|
|
|
|
+ if err != nil {
|
|
|
|
+ fmt.Println("AddEdbDataThs Err", err.Error())
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+type EdbDataFromWind struct {
|
|
|
|
+ Close map[string]float64 `json:"CLOSE"`
|
|
|
|
+ Dt map[string]int64 `json:"DT"`
|
|
|
|
+ ErrMsg string
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func RefreshEdbDataByWind(edbInfoId int, edbCode, startDate, endDate string) (err error) {
|
|
|
|
+ defer func() {
|
|
|
|
+ if err != nil {
|
|
|
|
+ fmt.Println("GetEdbDataByWind Err:" + err.Error())
|
|
|
|
+ }
|
|
|
|
+ }()
|
|
|
|
+
|
|
|
|
+ fmt.Println("startDate,endDate:",startDate,endDate)
|
|
|
|
+
|
|
|
|
+ thsUrl := utils.Hz_Data_Url + `edbInfo/wind?EdbCode=%s&StartDate=%s&EndDate=%s`
|
|
|
|
+ thsUrl = fmt.Sprintf(thsUrl, edbCode, startDate, endDate)
|
|
|
|
+ //utils.FileLog.Info("thsUrl:%s", thsUrl)
|
|
|
|
+
|
|
|
|
+ reqRes, err := http.Get(thsUrl)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ defer reqRes.Body.Close()
|
|
|
|
+ body, err := ioutil.ReadAll(reqRes.Body)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ fmt.Println("GetEdbDataByThs body:")
|
|
|
|
+ fmt.Println(string(body))
|
|
|
|
+ //utils.FileLog.Info("wind result:"+string(body))
|
|
|
|
+
|
|
|
|
+ item := new(EdbDataFromWind)
|
|
|
|
+ err = json.Unmarshal(body, &item)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ addSql := ` INSERT INTO edb_data_wind(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
|
|
|
|
+ nowStr := time.Now().Format(utils.FormatDateTime)
|
|
|
|
+ var isAdd bool
|
|
|
|
+ for k, v := range item.Dt {
|
|
|
|
+ timeStr := fmt.Sprintf("%d", v)
|
|
|
|
+
|
|
|
|
+ v = v / 1000
|
|
|
|
+ t := time.Unix(v, 0)
|
|
|
|
+ dateTime := t.Format(utils.FormatDate)
|
|
|
|
+ val := item.Close[k]
|
|
|
|
+
|
|
|
|
+ count, err := edbDataModel.GetEdbDataWindByCodeAndDate(edbCode, dateTime)
|
|
|
|
+ if err != nil && err != utils.ErrNoRow {
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+ if count <= 0 {
|
|
|
|
+ isAdd = true
|
|
|
|
+ fmt.Println(dateTime)
|
|
|
|
+ addSql += "("
|
|
|
|
+ addSql += strconv.Itoa(edbInfoId) + "," + "'" + edbCode + "'" + "," + "'" + dateTime + "'" + "," + utils.SubFloatToString(val, 30) + "," + "'" + nowStr + "'" +
|
|
|
|
+ "," + "'" + nowStr + "'" + "," + "1"
|
|
|
|
+ addSql += "," + "'" + timeStr + "'"
|
|
|
|
+ addSql += "),"
|
|
|
|
+ } else {
|
|
|
|
+ err = edbDataModel.ModifyEdbDataWind(int64(edbInfoId), dateTime, val)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if isAdd {
|
|
|
|
+ addSql = strings.TrimRight(addSql, ",")
|
|
|
|
+ err = edbDataModel.AddEdbDataWindBySql(addSql)
|
|
|
|
+ if err != nil {
|
|
|
|
+ fmt.Println("AddEdbDataWind Err", err.Error())
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+type EdbDataFromPb struct {
|
|
|
|
+ Date map[string]int64 `json:"date"`
|
|
|
|
+ Ticker map[string]string `json:"ticker"`
|
|
|
|
+ Field map[string]string `json:"field"`
|
|
|
|
+ Value map[string]float64 `json:"value"`
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func RefreshEdbDataByPb(edbInfoId int, edbCode, startDate, endDate string) (err error) {
|
|
|
|
+ refreshEdbCode := edbCode
|
|
|
|
+ edbCode = url.QueryEscape(edbCode)
|
|
|
|
+ bpUrl := utils.Hz_Data_PB_Url + `edbInfo/pb?EdbCode=%s&StartDate=%s&EndDate=%s`
|
|
|
|
+ bpUrl = fmt.Sprintf(bpUrl, edbCode, startDate, endDate)
|
|
|
|
+ //utils.FileLog.Info("bpUrl+" + bpUrl)
|
|
|
|
+
|
|
|
|
+ reqRes, err := http.Get(bpUrl)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ defer reqRes.Body.Close()
|
|
|
|
+ body, err := ioutil.ReadAll(reqRes.Body)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ fmt.Println("RefreshEdbDataByPb body:")
|
|
|
|
+ fmt.Println(string(body))
|
|
|
|
+ //utils.FileLog.Info("RefreshEdbDataByPb:" + string(body))
|
|
|
|
+
|
|
|
|
+ item := new(EdbDataFromPb)
|
|
|
|
+ err = json.Unmarshal(body, &item)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ if len(item.Date) > 0 {
|
|
|
|
+ dateMap := item.Date
|
|
|
|
+ pbList := make([]*edbDataModel.EdbDataPb, 0)
|
|
|
|
+ for k, v := range dateMap {
|
|
|
|
+ timestamp := v
|
|
|
|
+ v = v / 1000
|
|
|
|
+ t := time.Unix(v, 0)
|
|
|
|
+ dateTime := t.Format(utils.FormatDate)
|
|
|
|
+
|
|
|
|
+ val := item.Value[k]
|
|
|
|
+ field := item.Field[k]
|
|
|
|
+ ticker := item.Ticker[k]
|
|
|
|
+ if field == "PX_LAST" {
|
|
|
|
+ //判断数据是否已经存在
|
|
|
|
+ count, err := edbDataModel.GetEdbDataPbByCodeAndDate(refreshEdbCode, dateTime)
|
|
|
|
+ if err != nil && err != utils.ErrNoRow {
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+ fmt.Println("field:", field)
|
|
|
|
+ if count <= 0 {
|
|
|
|
+ item := new(edbDataModel.EdbDataPb)
|
|
|
|
+ item.EdbCode, _ = url.QueryUnescape(edbCode)
|
|
|
|
+ item.EdbInfoId = edbInfoId
|
|
|
|
+ item.CreateTime = time.Now()
|
|
|
|
+ item.ModifyTime = time.Now()
|
|
|
|
+ item.DataTime = dateTime
|
|
|
|
+ item.Value = val
|
|
|
|
+ item.Status = 1
|
|
|
|
+ item.Field = field
|
|
|
|
+ item.Ticker = ticker
|
|
|
|
+ item.DataTimestamp = timestamp
|
|
|
|
+ pbList = append(pbList, item)
|
|
|
|
+ } else {
|
|
|
|
+ err = edbDataModel.ModifyEdbDataPb(edbInfoId, dateTime, val)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if len(pbList) > 0 {
|
|
|
|
+ err = edbDataModel.AddEdbDataPb(pbList)
|
|
|
|
+ if err != nil {
|
|
|
|
+ fmt.Println("AddEdbDataPb Err", err.Error())
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//刷新手工指标数据
|
|
|
|
+func RefreshAllEdbDataByManual(edbInfoId, source int, edbCode 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)
|
|
|
|
+ //计算数据
|
|
|
|
+ var condition string
|
|
|
|
+ var pars []interface{}
|
|
|
|
+
|
|
|
|
+ if edbCode != "" {
|
|
|
|
+ condition += " AND TRADE_CODE=? "
|
|
|
|
+ pars = append(pars, edbCode)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ manualDataList, err := edbDataModel.GetEdbdataManualByTradeCode(condition, pars)
|
|
|
|
+ //获取指标所有数据
|
|
|
|
+ existDataList := make([]*edbDataModel.EdbDataBase, 0)
|
|
|
|
+ dataTableName := edbDataModel.GetEdbDataTableName(source)
|
|
|
|
+ sql := `SELECT * FROM %s WHERE edb_info_id=? `
|
|
|
|
+ sql = fmt.Sprintf(sql, dataTableName)
|
|
|
|
+ err = global.MYSQL["data"].Raw(sql, edbInfoId).Scan(&existDataList).Error
|
|
|
|
+ //_, err = o.Raw(sql, edbInfoId).QueryRows(&existDataList)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ existDataMap := make(map[string]*edbDataModel.EdbDataBase)
|
|
|
|
+ for _, v := range existDataList {
|
|
|
|
+ existDataMap[v.DataTime] = v
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ addSql := ` INSERT INTO edb_data_manual(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
|
|
|
|
+ var isAdd bool
|
|
|
|
+ manualMap := make(map[string]*edbDataModel.ManualEdbdata)
|
|
|
|
+ for _, v := range manualDataList {
|
|
|
|
+ item := v
|
|
|
|
+ if findItem, ok := existDataMap[v.Dt]; !ok {
|
|
|
|
+ eDate := item.Dt
|
|
|
|
+ sValue := item.Close
|
|
|
|
+
|
|
|
|
+ dataTime, err := time.Parse(utils.FormatDate, eDate)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+ timestamp := dataTime.UnixNano() / 1e6
|
|
|
|
+ timeStr := fmt.Sprintf("%d", timestamp)
|
|
|
|
+
|
|
|
|
+ addSql += GetAddSql(edbInfoIdStr, edbCode, eDate, timeStr, sValue)
|
|
|
|
+ isAdd = true
|
|
|
|
+ } else {
|
|
|
|
+ if findItem.Value != item.Close {
|
|
|
|
+ sql := ` UPDATE %s SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
|
|
|
|
+ sql = fmt.Sprintf(sql, dataTableName)
|
|
|
|
+ err = tx.Exec(sql, item.Close, edbInfoId, item.Dt).Error
|
|
|
|
+ //err = global.MYSQL["data"].Exec(sql, item.Close, edbInfoId, item.Dt).Error
|
|
|
|
+ //_, err = o.Raw(sql, item.Close, edbInfoId, item.Dt).Exec()
|
|
|
|
+ if err != nil {
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ manualMap[v.Dt] = v
|
|
|
|
+ }
|
|
|
|
+ for _, v := range existDataList {
|
|
|
|
+ if _, ok := manualMap[v.DataTime]; !ok {
|
|
|
|
+ go func() {
|
|
|
|
+ sql := ` DELETE FROM %s WHERE edb_data_id=? `
|
|
|
|
+ tableName := edbDataModel.GetEdbDataTableName(utils.DATA_SOURCE_MANUAL)
|
|
|
|
+ sql = fmt.Sprintf(sql, tableName)
|
|
|
|
+ err = tx.Exec(sql, v.EdbInfoId).Error
|
|
|
|
+ //err = global.MYSQL["data"].Exec(sql, edbDataId).Error
|
|
|
|
+ }()
|
|
|
|
+ //go DeleteEdbDataByIdAndSource(v.EdbDataId, utils.DATA_SOURCE_MANUAL)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if isAdd {
|
|
|
|
+ addSql = strings.TrimRight(addSql, ",")
|
|
|
|
+ err = tx.Exec(addSql).Error
|
|
|
|
+ //_, err = o.Raw(addSql).Exec()
|
|
|
|
+ if err != nil {
|
|
|
|
+ fmt.Println("RefreshAllEdbDataByManual add Err", err.Error())
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func DeleteEdbDataByIdAndSource(edbDataId, source int) (err error) {
|
|
|
|
+ sql := ` DELETE FROM %s WHERE edb_data_id=? `
|
|
|
|
+ tableName := edbDataModel.GetEdbDataTableName(source)
|
|
|
|
+ sql = fmt.Sprintf(sql, tableName)
|
|
|
|
+ err = global.MYSQL["data"].Exec(sql, edbDataId).Error
|
|
|
|
+
|
|
|
|
+ return
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func GetAddSql(edbInfoId, edbCode, dataTime, timestampStr string, value string) (addSql string) {
|
|
|
|
+ nowStr := time.Now().Format(utils.FormatDateTime)
|
|
|
|
+ addSql += "("
|
|
|
|
+ addSql += edbInfoId + "," + "'" + edbCode + "'" + "," + "'" + dataTime + "'" + "," + value + "," + "'" + nowStr + "'" +
|
|
|
|
+ "," + "'" + nowStr + "'" + "," + "1"
|
|
|
|
+ addSql += "," + "'" + timestampStr + "'"
|
|
|
|
+ addSql += "),"
|
|
|
|
+ return
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//刷新隆众指标数据
|
|
|
|
+func RefreshEdbDataByLz(edbInfoId 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)
|
|
|
|
+ //计算数据
|
|
|
|
+ var condition string
|
|
|
|
+ var pars []interface{}
|
|
|
|
+
|
|
|
|
+ if edbCode != "" {
|
|
|
|
+ condition += " AND b.lz_code=? "
|
|
|
|
+ pars = append(pars, edbCode)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if startDate != "" {
|
|
|
|
+ condition += " AND a.data_time>=? "
|
|
|
|
+ pars = append(pars, startDate)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if endDate != "" {
|
|
|
|
+ condition += " AND a.data_time<=? "
|
|
|
|
+ pars = append(pars, endDate)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ lzDataList, err := edbDataModel.GetLzSurveyDataByTradeCode(condition, pars)
|
|
|
|
+
|
|
|
|
+ addSql := ` INSERT INTO edb_data_lz(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
|
|
|
|
+ var isAdd bool
|
|
|
|
+ for _, v := range lzDataList {
|
|
|
|
+ item := v
|
|
|
|
+ count, err := edbDataModel.GetEdbDataLzByCodeAndDate(edbCode, v.DataTime)
|
|
|
|
+ if err != nil && err != utils.ErrNoRow {
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+ if count <= 0 {
|
|
|
|
+ nowStr := time.Now().Format(utils.FormatDateTime)
|
|
|
|
+ eDate := item.DataTime
|
|
|
|
+ sValue := item.InputValue
|
|
|
|
+ dataTime, err := time.Parse(utils.FormatDate, eDate)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+ timestamp := dataTime.UnixNano() / 1e6
|
|
|
|
+ timeStr := fmt.Sprintf("%d", timestamp)
|
|
|
|
+ addSql += "("
|
|
|
|
+ addSql += edbInfoIdStr + "," + "'" + edbCode + "'" + "," + "'" + eDate + "'" + "," + sValue + "," + "'" + nowStr + "'" +
|
|
|
|
+ "," + "'" + nowStr + "'" + "," + "1" + "," + "'" + timeStr + "'"
|
|
|
|
+ addSql += "),"
|
|
|
|
+ isAdd = true
|
|
|
|
+ } else {
|
|
|
|
+ //edbInfoId int64, dataTime, value string
|
|
|
|
+ //o := orm.NewOrm()
|
|
|
|
+ //o.Using("data")
|
|
|
|
+ sql := ` UPDATE edb_data_lz SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
|
|
|
|
+ err = tx.Exec(sql, v.InputValue, int64(edbInfoId), v.DataTime).Error
|
|
|
|
+ //_, err = o.Raw(sql, value, edbInfoId, dataTime).Exec()
|
|
|
|
+
|
|
|
|
+ //err = ModifyEdbDataLz(int64(edbInfoId), v.DataTime, v.InputValue)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if isAdd {
|
|
|
|
+ addSql = strings.TrimRight(addSql, ",")
|
|
|
|
+ err = tx.Exec(addSql).Error
|
|
|
|
+ //_, 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
|
|
|
|
+//}
|
|
|
|
+
|
|
|
|
+//获取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
|
|
|
|
+//}
|