123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- package data_manage
- import (
- "encoding/json"
- "eta/eta_api/models/data_manage/line_equation/request"
- "eta/eta_api/services/alarm_msg"
- "eta/eta_api/utils"
- "fmt"
- "github.com/beego/beego/v2/client/orm"
- "strconv"
- "strings"
- "time"
- )
- // MultipleGraphConfig 多图配置表
- type MultipleGraphConfig struct {
- MultipleGraphConfigId int `orm:"column(multiple_graph_config_id);pk"`
- EdbInfoIdA int `description:"指标A"`
- EdbInfoIdB int `description:"指标B"`
- Curve string `description:"曲线图配置"`
- Correlation string `description:"相关性配置"`
- RollingCorrelation string `description:"滚动相关性配置"`
- SysUserId int `description:"操作人id"`
- SysUserRealName string `description:"操作人真实姓名"`
- ModifyTime time.Time `description:"最近一次修改时间"`
- CreateTime time.Time `description:"添加时间"`
- }
- // AddMultipleGraphConfig 新增多图配置
- func AddMultipleGraphConfig(item *MultipleGraphConfig) (err error) {
- o := orm.NewOrmUsingDB("data")
- // 表格信息入库
- lastId, err := o.Insert(item)
- if err != nil {
- return
- }
- item.MultipleGraphConfigId = int(lastId)
- return
- }
- // Update 更新 基础信息
- func (item *MultipleGraphConfig) Update(cols []string) (err error) {
- o := orm.NewOrmUsingDB("data")
- _, err = o.Update(item, cols...)
- return
- }
- // GetMultipleGraphConfigById 根据配置id获取配置
- func GetMultipleGraphConfigById(id int) (item *MultipleGraphConfig, err error) {
- o := orm.NewOrmUsingDB("data")
- sql := `SELECT * FROM multiple_graph_config WHERE multiple_graph_config_id = ? `
- // 表格信息入库
- err = o.Raw(sql, id).QueryRow(&item)
- return
- }
- // CurveConfig 曲线图配置
- type CurveConfig struct {
- DateType int `description:"日期类型:1:00年至今,2:10年至今,3:15年至今,4:年初至今,5:自定义时间"`
- StartDate string `description:"自定义开始日期"`
- EndDate string `description:"自定义结束日期"`
- LeftMin float64 `description:"图表左侧最小值"`
- LeftMax float64 `description:"图表左侧最大值"`
- RightMin float64 `description:"图表右侧最小值"`
- RightMax float64 `description:"图表右侧最大值"`
- Right2Min float64 `description:"图表右侧最小值"`
- Right2Max float64 `description:"图表右侧最大值"`
- IsOrder bool `description:"true:正序,false:逆序"`
- EdbInfoType bool `description:"true:标准指标,false:领先指标"`
- LeadValue int `description:"领先值"`
- LeadUnit string `description:"领先单位"`
- StartYear int `description:"最近N年"`
- }
- // CorrelationConfig 相关性配置
- type CorrelationConfig struct {
- LeadValue int `description:"领先期数"`
- LeadUnit string `description:"频度"`
- CalculateValue int `description:"计算窗口"`
- CalculateUnit string `description:"计算频度"`
- }
- // RollingCorrelationConfig 滚动相关性配置
- type RollingCorrelationConfig struct {
- LeadValue int `description:"领先期数"`
- LeadUnit string `description:"频度"`
- CalculateValue int `description:"计算窗口"`
- CalculateUnit string `description:"计算频度"`
- }
- // ReplaceEdbInfoInLineEquationMultipleGraphConfig 获取拟合方程配置
- func ReplaceEdbInfoInLineEquationMultipleGraphConfig(oldEdbInfo, newEdbInfo *EdbInfo) (replaceConfigTotal int, err error) {
- var errmsg string
- logMsg := `` // 记录替换的日志
- o := orm.NewOrmUsingDB("data")
- to, err := o.Begin()
- if err != nil {
- return
- }
- defer func() {
- if err != nil {
- _ = to.Rollback()
- } else {
- _ = to.Commit()
- if logMsg != `` {
- utils.FileLog.Info(fmt.Sprintf("替换拟合方程中的指标记录 替换总数%d,旧的指标id:%d,新的指标id:%d;%s", replaceConfigTotal, oldEdbInfo.EdbInfoId, newEdbInfo.EdbInfoId, logMsg))
- }
- }
- if errmsg != "" {
- fmt.Println("errmsg:" + errmsg)
- }
- if err != nil && errmsg != "" {
- go alarm_msg.SendAlarmMsg("替换拟合方程中的指标记录失败提醒,errmsg:"+errmsg, 3)
- }
- }()
- //替换multiple_graph_config中的指标
- {
- multipleGraphConfigList := make([]*MultipleGraphConfig, 0)
- csql := `SELECT * FROM multiple_graph_config WHERE edb_info_id_a=0 AND edb_info_id_b=0 AND curve !=""`
- _, err = to.Raw(csql).QueryRows(&multipleGraphConfigList)
- if err != nil {
- errmsg = "获取指标关联图表配置信息失败:Err:" + err.Error()
- return
- }
- if len(multipleGraphConfigList) == 0 {
- return
- }
- updateList := make([]*MultipleGraphConfig, 0)
- configIds := make([]int, 0)
- configIdStr := make([]string, 0)
- for _, mv := range multipleGraphConfigList {
- if !strings.Contains(mv.Curve, strconv.Itoa(oldEdbInfo.EdbInfoId)) {
- continue
- }
- //解析curve内容
- var lineChartInfoConfig request.LineChartInfoReq
- if err = json.Unmarshal([]byte(mv.Curve), &lineChartInfoConfig); err != nil {
- errmsg = "获取跨品种分析配置信息失败:Err:" + err.Error()
- return
- }
- updateFlag := false
- // 遍历跨品种配置里的指标列表
- for k, edbInfoId := range lineChartInfoConfig.XEdbInfoIdList {
- if edbInfoId == oldEdbInfo.EdbInfoId {
- updateFlag = true
- lineChartInfoConfig.XEdbInfoIdList[k] = newEdbInfo.EdbInfoId
- }
- }
- for k, edbInfoId := range lineChartInfoConfig.YEdbInfoIdList {
- if edbInfoId == oldEdbInfo.EdbInfoId {
- updateFlag = true
- lineChartInfoConfig.YEdbInfoIdList[k] = newEdbInfo.EdbInfoId
- }
- }
- if !updateFlag {
- continue
- }
- newCurve, _ := json.Marshal(lineChartInfoConfig)
- mv.Curve = string(newCurve)
- //判断如果达到1000个数,则执行更新语句
- updateList = append(updateList, mv)
- configIds = append(configIds, mv.MultipleGraphConfigId)
- configIdStr = append(configIdStr, strconv.Itoa(mv.MultipleGraphConfigId))
- if len(configIds) >= 10 {
- numStr := utils.GetOrmInReplace(len(configIds))
- // 准备批量更新的 SQL 语句
- updateSQL := `UPDATE multiple_graph_config SET
- curve = CASE multiple_graph_config_id `
- for _, updateItem := range updateList {
- updateSQL += `WHEN ` + strconv.Itoa(updateItem.MultipleGraphConfigId) + ` THEN '` + updateItem.Curve + `' `
- }
- updateSQL += `END, modify_time = ? WHERE multiple_graph_config_id IN (` + numStr + `)`
- _, err = to.Raw(updateSQL, time.Now(), configIds).Exec()
- if err != nil {
- errmsg = "更新指标A关联图表配置信息失败:Err:" + err.Error()
- return
- }
- logMsg += `涉及到的配置id:` + strings.Join(configIdStr, ",") + ";"
- replaceConfigTotal += len(configIds)
- configIds = make([]int, 0)
- updateList = make([]*MultipleGraphConfig, 0)
- configIdStr = make([]string, 0)
- }
- }
- if len(configIds) > 0 {
- numStr := utils.GetOrmInReplace(len(configIds))
- // 准备批量更新的 SQL 语句
- updateSQL := `UPDATE multiple_graph_config SET
- curve = CASE multiple_graph_config_id `
- for _, updateItem := range updateList {
- updateSQL += `WHEN ` + strconv.Itoa(updateItem.MultipleGraphConfigId) + ` THEN '` + updateItem.Curve + `' `
- }
- updateSQL += `END, modify_time = ? WHERE multiple_graph_config_id IN (` + numStr + `)`
- _, err = to.Raw(updateSQL, time.Now(), configIds).Exec()
- if err != nil {
- errmsg = "更新指标A关联图表配置信息失败:Err:" + err.Error()
- return
- }
- logMsg += `涉及到的配置id:` + strings.Join(configIdStr, ",") + ";"
- replaceConfigTotal += len(configIds)
- configIds = make([]int, 0)
- updateList = make([]*MultipleGraphConfig, 0)
- configIdStr = make([]string, 0)
- }
- }
- return
- }
|