فهرست منبع

新增基础指标刷新

longyu 3 سال پیش
والد
کامیت
a285076fa8

+ 0 - 5
controllers/base_from_edb.go

@@ -1,5 +0,0 @@
-package controllers
-
-type EdbController struct {
-	BaseAuthController
-}

+ 65 - 0
controllers/base_from_lt.go

@@ -0,0 +1,65 @@
+package controllers
+
+import (
+	"encoding/json"
+	"hongze/hongze_edb_lib/models"
+	"hongze/hongze_edb_lib/services"
+	"hongze/hongze_edb_lib/utils"
+	"strconv"
+	"time"
+)
+
+//路透社
+type LtController struct {
+	BaseAuthController
+}
+
+// @Title 新增路透指标接口
+// @Description  新增路透指标接口
+// @Success 200 {object} models.AddEdbInfoReq
+// @router /add [post]
+func (this *LtController) Add() {
+	br := new(models.BaseResponse).Init()
+	var cacheKey string
+	defer func() {
+		utils.Rc.Delete(cacheKey)
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	source := utils.DATA_SOURCE_LT
+	var req models.AddEdbInfoReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	if req.EdbCode == "" {
+		br.Msg = "请输入指标编码!"
+		br.ErrMsg = "请输入指标编码,指标编码为空"
+		return
+	}
+	cacheKey = "CACHE_EDB_DATA_ADD_" + strconv.Itoa(source) + "_" + req.EdbCode
+	if !utils.Rc.IsExist(cacheKey) {
+		utils.Rc.SetNX(cacheKey, 1, 1*time.Minute)
+		dataItem, err := services.GetEdbDataFromLt(req.EdbCode, utils.BASE_START_DATE, utils.BASE_END_DATE)
+		if err != nil {
+			br.Msg = "获取指标信息失败!"
+			br.ErrMsg = "获取指标信息失败 GetEdbDataFromWind,Err:" + err.Error()
+			return
+		}
+		err = models.AddEdbDataFromLt(req.EdbCode, dataItem)
+		if err != nil {
+			br.Msg = "获取指标信息失败!"
+			br.ErrMsg = "获取指标信息失败 AddEdbDataFromLt,Err:" + err.Error()
+			return
+		}
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "获取成功"
+	} else {
+		br.Ret = 501
+		br.Success = true
+		br.Msg = "系统处理中,请稍后重试"
+	}
+}

+ 58 - 0
controllers/base_from_lz.go

@@ -0,0 +1,58 @@
+package controllers
+
+import (
+	"encoding/json"
+	"hongze/hongze_edb_lib/models"
+	"hongze/hongze_edb_lib/utils"
+	"strconv"
+	"time"
+)
+
+//隆众
+type LzController struct {
+	BaseAuthController
+}
+
+// @Title 新增隆众指标接口
+// @Description 新增隆众指标接口
+// @Success 200 {object} models.AddEdbInfoReq
+// @router /add [post]
+func (this *LzController) Add() {
+	br := new(models.BaseResponse).Init()
+	var cacheKey string
+	defer func() {
+		utils.Rc.Delete(cacheKey)
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	source := utils.DATA_SOURCE_LZ
+	var req models.AddEdbInfoReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	if req.EdbCode == "" {
+		br.Msg = "请输入指标编码!"
+		br.ErrMsg = "请输入指标编码,指标编码为空"
+		return
+	}
+	cacheKey = "CACHE_EDB_DATA_ADD_" + strconv.Itoa(source) + "_" + req.EdbCode
+	if !utils.Rc.IsExist(cacheKey) {
+		utils.Rc.SetNX(cacheKey, 1, 1*time.Minute)
+		err = models.AddEdbDataFromLz(req.EdbCode)
+		if err != nil {
+			br.Msg = "获取指标信息失败!"
+			br.ErrMsg = "获取指标信息失败 AddEdbDataFromLz,Err:" + err.Error()
+			return
+		}
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "获取成功"
+	} else {
+		br.Ret = 501
+		br.Success = true
+		br.Msg = "系统处理中,请稍后重试"
+	}
+}

+ 58 - 0
controllers/base_from_manual.go

@@ -0,0 +1,58 @@
+package controllers
+
+import (
+	"encoding/json"
+	"hongze/hongze_edb_lib/models"
+	"hongze/hongze_edb_lib/utils"
+	"strconv"
+	"time"
+)
+
+//手工指标
+type ManualController struct {
+	BaseAuthController
+}
+
+// @Title 新增手工指标接口
+// @Description 新增手工指标接口
+// @Success 200 {object} models.AddEdbInfoReq
+// @router /add [post]
+func (this *ManualController) Add() {
+	br := new(models.BaseResponse).Init()
+	var cacheKey string
+	defer func() {
+		utils.Rc.Delete(cacheKey)
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	source := utils.DATA_SOURCE_MANUAL
+	var req models.AddEdbInfoReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	if req.EdbCode == "" {
+		br.Msg = "请输入指标编码!"
+		br.ErrMsg = "请输入指标编码,指标编码为空"
+		return
+	}
+	cacheKey = "CACHE_EDB_DATA_ADD_" + strconv.Itoa(source) + "_" + req.EdbCode
+	if !utils.Rc.IsExist(cacheKey) {
+		utils.Rc.SetNX(cacheKey, 1, 1*time.Minute)
+		err = models.AddEdbDataFromManual(req.EdbCode)
+		if err != nil {
+			br.Msg = "获取指标信息失败!"
+			br.ErrMsg = "获取指标信息失败 AddEdbDataFromManual,Err:" + err.Error()
+			return
+		}
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "获取成功"
+	} else {
+		br.Ret = 501
+		br.Success = true
+		br.Msg = "系统处理中,请稍后重试"
+	}
+}

+ 58 - 0
controllers/base_from_mysteel.go

@@ -0,0 +1,58 @@
+package controllers
+
+import (
+	"encoding/json"
+	"hongze/hongze_edb_lib/models"
+	"hongze/hongze_edb_lib/utils"
+	"strconv"
+	"time"
+)
+
+//钢联
+type MySteelController struct {
+	BaseAuthController
+}
+
+// @Title 新增钢联指标接口
+// @Description 新增钢联指标接口
+// @Success 200 {object} models.AddEdbInfoReq
+// @router /add [post]
+func (this *MySteelController) Add() {
+	br := new(models.BaseResponse).Init()
+	var cacheKey string
+	defer func() {
+		utils.Rc.Delete(cacheKey)
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	source := utils.DATA_SOURCE_GL
+	var req models.AddEdbInfoReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	if req.EdbCode == "" {
+		br.Msg = "请输入指标编码!"
+		br.ErrMsg = "请输入指标编码,指标编码为空"
+		return
+	}
+	cacheKey = "CACHE_EDB_DATA_ADD_" + strconv.Itoa(source) + "_" + req.EdbCode
+	if !utils.Rc.IsExist(cacheKey) {
+		utils.Rc.SetNX(cacheKey, 1, 1*time.Minute)
+		err = models.AddEdbDataFromMysteel(req.EdbCode)
+		if err != nil {
+			br.Msg = "获取指标信息失败!"
+			br.ErrMsg = "获取指标信息失败 AddEdbDataFromMysteel,Err:" + err.Error()
+			return
+		}
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "获取成功"
+	} else {
+		br.Ret = 501
+		br.Success = true
+		br.Msg = "系统处理中,请稍后重试"
+	}
+}

+ 4 - 4
controllers/base_from_pb.go

@@ -9,14 +9,14 @@ import (
 	"time"
 )
 
+//彭博
 type PbController struct {
 	BaseAuthController
 }
 
-// Add
-// @Title 编辑指标接口
-// @Description 编辑指标接口
-// @Success 200 {object} data_manage.EditEdbInfoReq
+// @Title 新增彭博指标接口
+// @Description 新增彭博指标接口
+// @Success 200 {object} models.AddEdbInfoReq
 // @router /add [post]
 func (this *PbController) Add() {
 	br := new(models.BaseResponse).Init()

+ 58 - 0
controllers/base_from_smm.go

@@ -0,0 +1,58 @@
+package controllers
+
+import (
+	"encoding/json"
+	"hongze/hongze_edb_lib/models"
+	"hongze/hongze_edb_lib/utils"
+	"strconv"
+	"time"
+)
+
+//有色
+type SmmController struct {
+	BaseAuthController
+}
+
+// @Title 新增有色指标接口
+// @Description 新增有色指标接口
+// @Success 200 {object} models.AddEdbInfoReq
+// @router /add [post]
+func (this *SmmController) Add() {
+	br := new(models.BaseResponse).Init()
+	var cacheKey string
+	defer func() {
+		utils.Rc.Delete(cacheKey)
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	source := utils.DATA_SOURCE_YS
+	var req models.AddEdbInfoReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	if req.EdbCode == "" {
+		br.Msg = "请输入指标编码!"
+		br.ErrMsg = "请输入指标编码,指标编码为空"
+		return
+	}
+	cacheKey = "CACHE_EDB_DATA_ADD_" + strconv.Itoa(source) + "_" + req.EdbCode
+	if !utils.Rc.IsExist(cacheKey) {
+		utils.Rc.SetNX(cacheKey, 1, 1*time.Minute)
+		err = models.AddEdbDataFromSmm(req.EdbCode)
+		if err != nil {
+			br.Msg = "获取指标信息失败!"
+			br.ErrMsg = "获取指标信息失败 AddEdbDataFromSmm,Err:" + err.Error()
+			return
+		}
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "获取成功"
+	} else {
+		br.Ret = 501
+		br.Success = true
+		br.Msg = "系统处理中,请稍后重试"
+	}
+}

+ 2 - 1
controllers/base_from_ths.go

@@ -9,13 +9,14 @@ import (
 	"time"
 )
 
+//同花顺
 type ThsController struct {
 	BaseAuthController
 }
 
 // @Title 新增同花顺指标接口
 // @Description 新增同花顺指标接口
-// @Success 200 {object} data_manage.EditEdbInfoReq
+// @Success 200 {object} models.AddEdbInfoReq
 // @router /add [post]
 func (this *ThsController) Add() {
 	br := new(models.BaseResponse).Init()

+ 4 - 4
controllers/base_from_wind.go

@@ -9,14 +9,14 @@ import (
 	"time"
 )
 
+//wind
 type WindController struct {
 	BaseAuthController
 }
 
-// Add
-// @Title 编辑指标接口
-// @Description 编辑指标接口
-// @Success 200 {object} data_manage.EditEdbInfoReq
+// @Title 新增wind指标接口
+// @Description  新增wind指标接口
+// @Success 200 {object} models.AddEdbInfoReq
 // @router /add [post]
 func (this *WindController) Add() {
 	br := new(models.BaseResponse).Init()

+ 1 - 0
go.mod

@@ -4,6 +4,7 @@ go 1.16
 
 require (
 	github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20211223021540-a6a1e1173105 // indirect
+	github.com/astaxie/beego v1.12.3
 	github.com/beego/bee/v2 v2.0.2
 	github.com/beego/beego/v2 v2.0.1
 	github.com/dgrijalva/jwt-go v3.2.0+incompatible

+ 1 - 1
go.sum

@@ -21,12 +21,12 @@ github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRF
 github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 github.com/alicebob/gopher-json v0.0.0-20180125190556-5a6b3ba71ee6/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc=
 github.com/alicebob/miniredis v2.5.0+incompatible/go.mod h1:8HZjEj4yU0dwhYHky+DxYx+6BMjkBbe5ONFIF1MXffk=
-github.com/antlr/antlr4 v0.0.0-20211223021540-a6a1e1173105 h1:+SwIuOsN5EJwXMomA0b1mgdLO6scoXowdxHI1alBrJA=
 github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20211223021540-a6a1e1173105 h1:80Iu0Rujat7jabX6Egx/dU/ijgsMp4WtDr9LAv3dMmo=
 github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20211223021540-a6a1e1173105/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY=
 github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
 github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
 github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
+github.com/astaxie/beego v1.12.3 h1:SAQkdD2ePye+v8Gn1r4X6IKZM1wd28EyUOVQ3PDSOOQ=
 github.com/astaxie/beego v1.12.3/go.mod h1:p3qIm0Ryx7zeBHLljmd7omloyca1s4yu1a8kM1FkpIA=
 github.com/beego/bee/v2 v2.0.2 h1:xWARyIqdnnbNMDBDUdb6Gvr9S/yGXC6Ni43kKdS1/eg=
 github.com/beego/bee/v2 v2.0.2/go.mod h1:rfZa899qLAF8SYBRvE7mWNPZTU7/qysOBhaCLmZrMX4=

+ 123 - 0
models/base_from_lt.go

@@ -1,4 +1,127 @@
 package models
 
+import (
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"hongze/hongze_edb_lib/utils"
+	"reflect"
+	"strconv"
+	"strings"
+	"time"
+)
+
 //路透
 
+//新增路透指标数据
+func AddEdbDataFromLt(edbCode string, ltDataList map[int64]interface{}) (err error) {
+	o := orm.NewOrm()
+	if len(ltDataList) > 0 {
+		var isAdd bool
+		addSql := ` INSERT INTO edb_data_lt(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
+		for timestampInt, edbValue := range ltDataList {
+			dataTime := time.Unix(timestampInt/1000, 0)
+
+			//校验数据类型对不对
+			valType := reflect.TypeOf(edbValue)
+			if valType == nil {
+				continue
+			}
+			if valType.String() != "float64" {
+				continue
+			}
+			sValue := edbValue.(float64)
+
+			eDate := dataTime.Format(utils.FormatDate)
+			if err != nil {
+				return err
+			}
+			timestamp := dataTime.UnixNano() / 1e6
+			timeStr := fmt.Sprintf("%d", timestamp)
+			addSql += GetAddSql("0", edbCode, eDate, timeStr, utils.SubFloatToString(sValue, 20))
+			isAdd = true
+		}
+		if isAdd {
+			addSql = strings.TrimRight(addSql, ",")
+			_, err = o.Raw(addSql).Exec()
+			if err != nil {
+				fmt.Println("RefreshAllEdbDataByPb add Err", err.Error())
+				return
+			}
+		}
+	}
+	return
+}
+
+//刷新路透指标数据
+func RefreshEdbDataFromLt(edbInfoId int, edbCode, startDate string, ltDataList map[int64]interface{}) (err error) {
+	source := utils.DATA_SOURCE_LT
+	o := orm.NewOrm()
+
+	var existCondition string
+	var existPars []interface{}
+
+	existCondition += " AND edb_info_id=? "
+	existPars = append(existPars, edbInfoId)
+	if startDate != "" {
+		existCondition += " AND data_time>=? "
+		existPars = append(existPars, startDate)
+	}
+
+	existList, err := GetEdbDataByCondition(source, existCondition, existPars)
+	if err != nil {
+		return err
+	}
+	existMap := make(map[string]*EdbInfoSearchData)
+	for _, v := range existList {
+		existMap[v.DataTime] = v
+	}
+
+	edbInfoIdStr := strconv.Itoa(edbInfoId)
+
+	addSql := ` INSERT INTO edb_data_lt(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
+	var isAdd bool
+
+	for timestampInt, edbValue := range ltDataList {
+		dataTime := time.Unix(timestampInt/1000, 0)
+
+		//校验数据类型对不对
+		valType := reflect.TypeOf(edbValue)
+		if valType == nil {
+			continue
+		}
+		if valType.String() != "float64" {
+			continue
+		}
+		sValue := edbValue.(float64)
+
+		eDate := dataTime.Format(utils.FormatDate)
+		if err != nil {
+			return err
+		}
+
+		saveValue := utils.SubFloatToString(sValue, 30)
+		if findItem, ok := existMap[eDate]; !ok {
+			timestamp := dataTime.UnixNano() / 1e6
+			timeStr := fmt.Sprintf("%d", timestamp)
+
+			addSql += GetAddSql(edbInfoIdStr, edbCode, eDate, timeStr, saveValue)
+			isAdd = true
+		} else {
+			if findItem != nil && utils.SubFloatToString(findItem.Value, 30) != saveValue {
+				err = ModifyEdbDataById(source, findItem.EdbDataId, saveValue)
+				if err != nil {
+					return err
+				}
+			}
+		}
+	}
+	if isAdd {
+		addSql = strings.TrimRight(addSql, ",")
+		_, err = o.Raw(addSql).Exec()
+		if err != nil {
+			fmt.Println("RefreshAllEdbDataByLt add Err", err.Error())
+			return
+		}
+	}
+	return
+}

+ 154 - 0
models/base_from_lz.go

@@ -1,3 +1,157 @@
 package models
 
+import (
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"hongze/hongze_edb_lib/utils"
+	"strconv"
+	"strings"
+	"time"
+)
+
 //隆众
+
+type lzSurveyData struct {
+	DataTime   string `orm:"column(data_time)" description:"日期"`
+	InputValue string `orm:"column(input_value)" description:"值"`
+}
+
+func GetLzSurveyDataFromLz(condition string, pars []interface{}) (item []*lzSurveyData, err error) {
+	sql := ` SELECT  a.* FROM longzhong_survey_data AS a
+				INNER JOIN longzhong_survey_product AS b ON a.survey_product_id=b.survey_product_id
+				WHERE 1=1 `
+	o := orm.NewOrmUsingDB("edb")
+	if condition != "" {
+		sql += condition
+	}
+	sql += ` ORDER BY a.data_time DESC `
+	_, err = o.Raw(sql, pars).QueryRows(&item)
+	return
+}
+
+//新增钢联指标数据
+func AddEdbDataFromLz(edbCode string) (err error) {
+	o := orm.NewOrm()
+
+	var condition string
+	var pars []interface{}
+
+	if edbCode != "" {
+		condition += " AND b.lz_code=? "
+		pars = append(pars, edbCode)
+	}
+
+	lzDataList, err := GetLzSurveyDataFromLz(condition, pars)
+	if err != nil {
+		return
+	}
+	dataLen := len(lzDataList)
+
+	if dataLen > 0 {
+		var isAdd bool
+		addSql := ` INSERT INTO edb_data_lz(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
+		for i := 0; i < dataLen; i++ {
+			item := lzDataList[i]
+			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 += GetAddSql("0", edbCode, eDate, timeStr, sValue)
+			isAdd = true
+		}
+		if isAdd {
+			addSql = strings.TrimRight(addSql, ",")
+			utils.FileLog.Info("addSql:" + addSql)
+			_, err = o.Raw(addSql).Exec()
+			if err != nil {
+				return err
+			}
+		}
+	}
+	return
+}
+
+//刷新隆众指标数据
+func RefreshEdbDataFromLz(edbInfoId int, edbCode, startDate string) (err error) {
+	source := utils.DATA_SOURCE_LZ
+	o := orm.NewOrm()
+
+	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)
+	}
+
+	lzDataList, err := GetLzSurveyDataFromLz(condition, pars)
+
+
+	var existCondition string
+	var existPars []interface{}
+
+	existCondition += " AND edb_info_id=? "
+	existPars = append(existPars, edbInfoId)
+	if startDate != "" {
+		existCondition += " AND data_time>=? "
+		existPars = append(existPars, startDate)
+	}
+
+	existList, err := GetEdbDataByCondition(source, existCondition, existPars)
+	if err != nil {
+		return err
+	}
+	existMap := make(map[string]*EdbInfoSearchData)
+	for _, v := range existList {
+		existMap[v.DataTime] = v
+	}
+	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
+
+		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)
+		saveValue := sValue
+
+		if findItem, ok := existMap[eDate]; !ok {
+			addSql += GetAddSql(edbInfoIdStr, edbCode, eDate, timeStr, saveValue)
+			isAdd = true
+		} else {
+			if findItem!=nil && utils.SubFloatToString(findItem.Value, 30) != saveValue {
+				err = ModifyEdbDataById(source, findItem.EdbDataId, saveValue)
+				if err != nil {
+					return err
+				}
+			}
+		}
+	}
+	if isAdd {
+		addSql = strings.TrimRight(addSql, ",")
+		_, err = o.Raw(addSql).Exec()
+		if err != nil {
+			return err
+		}
+	}
+	return
+}

+ 3 - 3
models/base_from_manual.go

@@ -18,7 +18,7 @@ type ManualEdbdata struct {
 	ModifyTime time.Time `orm:"column(modify_time)" description:"修改时间"`
 }
 
-func GetEdbdataManualByTradeCode(condition string, pars []interface{}) (item []*ManualEdbdata, err error) {
+func GetEdbdataManualByCondition(condition string, pars []interface{}) (item []*ManualEdbdata, err error) {
 	sql := ` SELECT  * FROM edbdata WHERE 1=1  `
 	if condition != "" {
 		sql += condition
@@ -41,7 +41,7 @@ func AddEdbDataFromManual(edbCode string) (err error) {
 		pars = append(pars, edbCode)
 	}
 
-	manualDataList, err := GetEdbdataManualByTradeCode(condition, pars)
+	manualDataList, err := GetEdbdataManualByCondition(condition, pars)
 	if err != nil {
 		return
 	}
@@ -96,7 +96,7 @@ func RefreshEdbDataFromManual(edbInfoId int, edbCode, startDate string) (err err
 		pars = append(pars, startDate)
 	}
 
-	manualDataList, err := GetEdbdataManualByTradeCode(condition, pars)
+	manualDataList, err := GetEdbdataManualByCondition(condition, pars)
 
 	var existCondition string
 	var existPars []interface{}

+ 171 - 0
models/base_from_mysteel.go

@@ -1,3 +1,174 @@
 package models
 
+import (
+	"fmt"
+	"hongze/hongze_edb_lib/utils"
+	"strconv"
+	"strings"
+	"time"
+
+	"github.com/beego/beego/v2/client/orm"
+)
+
 //钢联
+
+type GlData struct {
+	InputValue string `orm:"column(DATA_VALUE)" description:"日期"`
+	DataTime   string `orm:"column(DATA_DATE)" description:"值"`
+}
+
+func GetGlDataByCondition(condition string, pars []interface{}) (item []*GlData, err error) {
+	condition += " AND IS_DELETE=0 "
+	sql := ` SELECT * FROM mb_index_main_data WHERE 1=1 `
+	o := orm.NewOrmUsingDB("gl")
+	if condition != "" {
+		sql += condition
+	}
+	sql += ` ORDER BY PUBLISH_TIME DESC `
+	_, err = o.Raw(sql, pars).QueryRows(&item)
+	return
+}
+
+//新增钢联指标数据
+func AddEdbDataFromMysteel(edbCode string) (err error) {
+	o := orm.NewOrm()
+
+	var condition string
+	var pars []interface{}
+
+	if edbCode != "" {
+		condition += " AND INDEX_CODE=? "
+		pars = append(pars, edbCode)
+	}
+
+	glDataList, err := GetGlDataByCondition(condition, pars)
+	if err != nil {
+		return
+	}
+
+	dataLen := len(glDataList)
+
+	existMap := make(map[string]string)
+	if dataLen > 0 {
+		var isAdd bool
+		addSql := ` INSERT INTO edb_data_gl(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
+		for i := 0; i < dataLen; i++ {
+			item := glDataList[i]
+			eDate := item.DataTime
+			sValue := item.InputValue
+			if sValue != "" {
+				if _, ok := existMap[eDate]; !ok {
+					dataTime, err := time.Parse(utils.FormatDate, eDate)
+					if err != nil {
+						return err
+					}
+					timestamp := dataTime.UnixNano() / 1e6
+					timeStr := fmt.Sprintf("%d", timestamp)
+					addSql += GetAddSql("0", edbCode, eDate, timeStr, sValue)
+					isAdd = true
+				}
+			}
+			existMap[eDate] = eDate
+		}
+		if isAdd {
+			addSql = strings.TrimRight(addSql, ",")
+			utils.FileLog.Info("addSql:" + addSql)
+			_, err = o.Raw(addSql).Exec()
+			if err != nil {
+				return err
+			}
+		}
+	}
+	return
+}
+
+//刷新钢联指标数据
+func RefreshEdbDataFromMysteel(edbInfoId int, edbCode, startDate, endDate string) (err error) {
+	source := utils.DATA_SOURCE_GL
+	o := orm.NewOrm()
+	if err != nil {
+		return
+	}
+	edbInfoIdStr := strconv.Itoa(edbInfoId)
+	//计算数据
+	var condition string
+	var pars []interface{}
+
+	if edbCode != "" {
+		condition += " AND INDEX_CODE=? "
+		pars = append(pars, edbCode)
+	}
+
+	if startDate != "" {
+		condition += " AND DATA_DATE>=? "
+		pars = append(pars, startDate)
+	}
+
+	if endDate != "" {
+		condition += " AND DATA_DATE<=? "
+		pars = append(pars, endDate)
+	}
+
+	glDataList, err := GetGlDataByCondition(condition, pars)
+
+	var existCondition string
+	var existPars []interface{}
+
+	existCondition += " AND edb_info_id=? "
+	existPars = append(existPars, edbInfoId)
+	if startDate != "" {
+		existCondition += " AND data_time>=? "
+		existPars = append(existPars, startDate)
+	}
+	//获取指标所有数据
+	existList, err := GetEdbDataByCondition(source, existCondition, existPars)
+	if err != nil {
+		return err
+	}
+	existMap := make(map[string]*EdbInfoSearchData)
+	for _, v := range existList {
+		existMap[v.DataTime] = v
+	}
+
+	addSql := ` INSERT INTO edb_data_gl(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
+	var isAdd bool
+	addMap := make(map[string]string)
+	for _, v := range glDataList {
+		item := v
+		eDate := item.DataTime
+		sValue := item.InputValue
+
+		if findItem, ok := existMap[v.DataTime]; !ok {
+			if sValue != "" {
+				dataTime, err := time.Parse(utils.FormatDate, eDate)
+				if err != nil {
+					return err
+				}
+				timestamp := dataTime.UnixNano() / 1e6
+				timeStr := fmt.Sprintf("%d", timestamp)
+				saveValue := sValue
+
+				if _, addOk := addMap[eDate]; !addOk {
+					addSql += GetAddSql(edbInfoIdStr, edbCode, eDate, timeStr, saveValue)
+					isAdd = true
+				}
+			}
+		} else {
+			if findItem != nil && utils.SubFloatToString(findItem.Value, 30) != sValue {
+				err = ModifyEdbDataById(source, findItem.EdbDataId, sValue)
+				if err != nil {
+					return err
+				}
+			}
+		}
+		addMap[v.DataTime] = v.DataTime
+	}
+	if isAdd {
+		addSql = strings.TrimRight(addSql, ",")
+		_, err = o.Raw(addSql).Exec()
+		if err != nil {
+			return err
+		}
+	}
+	return
+}

+ 1 - 1
models/base_from_pb.go

@@ -55,7 +55,7 @@ func AddEdbDataFromPb(edbCode string, item *services.EdbDataFromPb) (err error)
 }
 
 //刷新彭博指标数据
-func RefreshAllEdbDataFromPb(edbInfoId int, edbCode, startDate string, item *services.EdbDataFromPb) (err error) {
+func RefreshEdbDataFromPb(edbInfoId int, edbCode, startDate string, item *services.EdbDataFromPb) (err error) {
 	o := orm.NewOrm()
 	source := utils.DATA_SOURCE_PB
 

+ 153 - 1
models/base_from_smm.go

@@ -1,3 +1,155 @@
 package models
 
-//有色网
+import (
+	"fmt"
+	"hongze/hongze_edb_lib/utils"
+	"strconv"
+	"strings"
+	"time"
+
+	"github.com/beego/beego/v2/client/orm"
+)
+
+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 GetBaseFromSmmDataByCondition(condition string, pars []interface{}) (list []*BaseFromSmmData, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM base_from_smm_data WHERE 1=1 `
+	if condition != "" {
+		sql += condition
+	}
+	_, err = o.Raw(sql, pars).QueryRows(&list)
+	return
+}
+
+//新增有色指标数据
+func AddEdbDataFromSmm(edbCode string) (err error) {
+	o := orm.NewOrm()
+
+	var condition string
+	var pars []interface{}
+	if edbCode != "" {
+		condition += " AND index_code=? "
+		pars = append(pars, edbCode)
+	}
+	smmBaseDataAll, err := GetBaseFromSmmDataByCondition(condition, pars)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return
+	}
+	var isAdd bool
+	addSql := ` INSERT INTO edb_data_ys(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
+	existMap := make(map[string]string)
+	for _, sv := range smmBaseDataAll {
+		eDate := sv.DataTime
+		dataTime, err := time.Parse(utils.FormatDate, eDate)
+		if err != nil {
+			return err
+		}
+		timestamp := dataTime.UnixNano() / 1e6
+		timeStr := fmt.Sprintf("%d", timestamp)
+		if _, ok := existMap[eDate]; !ok {
+			addSql += GetAddSql("0", edbCode, eDate, timeStr, sv.Value)
+			isAdd = true
+		}
+		existMap[eDate] = sv.Value
+	}
+	if isAdd {
+		addSql = strings.TrimRight(addSql, ",")
+		utils.FileLog.Info("addSql:" + addSql)
+		_, err = o.Raw(addSql).Exec()
+		if err != nil {
+			return err
+		}
+	}
+	return
+}
+
+//刷新有色指标数据
+func RefreshEdbDataFromSmm(edbInfoId int, edbCode, startDate string) (err error) {
+	source := utils.DATA_SOURCE_YS
+	o := orm.NewOrm()
+	if err != nil {
+		return
+	}
+	edbInfoIdStr := strconv.Itoa(edbInfoId)
+	//计算数据
+	var condition string
+	var pars []interface{}
+
+	if edbCode != "" {
+		condition += " AND index_code=? "
+		pars = append(pars, edbCode)
+	}
+
+	if startDate != "" {
+		condition += " AND data_time>=? "
+		pars = append(pars, startDate)
+	}
+
+	smmDataList, err := GetBaseFromSmmDataByCondition(condition, pars)
+
+	var existCondition string
+	var existPars []interface{}
+
+	existCondition += " AND edb_info_id=? "
+	existPars = append(existPars, edbInfoId)
+	if startDate != "" {
+		existCondition += " AND data_time>=? "
+		existPars = append(existPars, startDate)
+	}
+
+	existList, err := GetEdbDataByCondition(source, existCondition, existPars)
+	if err != nil {
+		return err
+	}
+	existMap := make(map[string]*EdbInfoSearchData)
+	for _, v := range existList {
+		existMap[v.DataTime] = v
+	}
+
+	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 _, v := range smmDataList {
+		item := v
+		if findItem, ok := existMap[v.DataTime]; !ok {
+			eDate := item.DataTime
+			sValue := item.Value
+
+			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 != nil && utils.SubFloatToString(findItem.Value, 30) != item.Value {
+				err = ModifyEdbDataById(source, findItem.EdbDataId, item.Value)
+				if err != nil {
+					return err
+				}
+			}
+		}
+	}
+
+	if isAdd {
+		addSql = strings.TrimRight(addSql, ",")
+		_, err = o.Raw(addSql).Exec()
+		if err != nil {
+			fmt.Println("RefreshEdbDataFromSmm add Err", err.Error())
+			return
+		}
+	}
+	return
+}

+ 45 - 0
routers/commentsRouter_controllers.go

@@ -25,6 +25,42 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_edb_lib/controllers:LtController"] = append(beego.GlobalControllerRouter["hongze/hongze_edb_lib/controllers:LtController"],
+        beego.ControllerComments{
+            Method: "Add",
+            Router: "/add",
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_edb_lib/controllers:LzController"] = append(beego.GlobalControllerRouter["hongze/hongze_edb_lib/controllers:LzController"],
+        beego.ControllerComments{
+            Method: "Add",
+            Router: "/add",
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_edb_lib/controllers:ManualController"] = append(beego.GlobalControllerRouter["hongze/hongze_edb_lib/controllers:ManualController"],
+        beego.ControllerComments{
+            Method: "Add",
+            Router: "/add",
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_edb_lib/controllers:MySteelController"] = append(beego.GlobalControllerRouter["hongze/hongze_edb_lib/controllers:MySteelController"],
+        beego.ControllerComments{
+            Method: "Add",
+            Router: "/add",
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_edb_lib/controllers:PbController"] = append(beego.GlobalControllerRouter["hongze/hongze_edb_lib/controllers:PbController"],
         beego.ControllerComments{
             Method: "Add",
@@ -34,6 +70,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_edb_lib/controllers:SmmController"] = append(beego.GlobalControllerRouter["hongze/hongze_edb_lib/controllers:SmmController"],
+        beego.ControllerComments{
+            Method: "Add",
+            Router: "/add",
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_edb_lib/controllers:ThsController"] = append(beego.GlobalControllerRouter["hongze/hongze_edb_lib/controllers:ThsController"],
         beego.ControllerComments{
             Method: "Add",

+ 25 - 0
routers/router.go

@@ -30,6 +30,31 @@ func init() {
 				&controllers.WindController{},
 			),
 		),
+		beego.NSNamespace("/lz",
+			beego.NSInclude(
+				&controllers.LzController{},
+			),
+		),
+		beego.NSNamespace("/lt",
+			beego.NSInclude(
+				&controllers.LtController{},
+			),
+		),
+		beego.NSNamespace("/smm",
+			beego.NSInclude(
+				&controllers.SmmController{},
+			),
+		),
+		beego.NSNamespace("/mysteel",
+			beego.NSInclude(
+				&controllers.MySteelController{},
+			),
+		),
+		beego.NSNamespace("/manual",
+			beego.NSInclude(
+				&controllers.ManualController{},
+			),
+		),
 		beego.NSNamespace("/calculate",
 			beego.NSInclude(
 				&controllers.CalculateController{},

+ 35 - 0
services/base_from_lt.go

@@ -0,0 +1,35 @@
+package services
+
+import (
+	"encoding/json"
+	"fmt"
+	"hongze/hongze_edb_lib/utils"
+
+	"github.com/rdlucklib/rdluck_tools/http"
+)
+
+type EdbDataFromLt struct {
+	Close map[int64]interface{} `json:"CLOSE"`
+}
+
+// GetEdbDataFromLt 获取路透数据
+func GetEdbDataFromLt(edbCode, startDate, endDate string) (dataList map[int64]interface{}, err error) {
+	dataList = make(map[int64]interface{})
+	ltUrl := utils.Hz_LT_Data_Url + `edbInfo/ek?EdbCode=%s&StartDate=%s&EndDate=%s`
+	ltUrl = fmt.Sprintf(ltUrl, edbCode, startDate, endDate)
+	utils.FileLog.Info("ltUrl:%s", ltUrl)
+	body, err := http.Get(ltUrl)
+	utils.FileLog.Info("lt result:%s", string(body))
+
+	if err != nil {
+		return
+	}
+	item := new(EdbDataFromLt)
+	err = json.Unmarshal(body, &item)
+
+	if err != nil {
+		return
+	}
+	dataList = item.Close
+	return
+}

+ 2 - 0
utils/constants.go

@@ -52,6 +52,7 @@ const (
 	DATA_SOURCE_CALCULATE_TIME_SHIFT            //时间移位->22
 	DATA_SOURCE_CALCULATE_ZJPJ                  //直接拼接->23
 	DATA_SOURCE_CALCULATE_LJZTBPJ               //累计值同比拼接->24
+	DATA_SOURCE_LT                              //路透->25
 )
 
 //基础数据初始化日期
@@ -64,6 +65,7 @@ var (
 	Hz_Ths_Data_Url  string                                   //同花顺,万得接口服务地址(阿里云windows服务器地址)
 	Hz_Wind_Data_Url = "http://datawind.hzinsights.com:8040/" //万得接口服务地址
 	Hz_Pb_Data_Url   = "http://datapb.hzinsights.com:8040/"   //彭博接口地址
+	Hz_LT_Data_Url   = "http://dataek.hzinsights.com:8040/"   //路透社接口地址
 	EDB_DATA_LIMIT   = 10
 )