Browse Source

add: 编辑图表

hsun 3 years ago
parent
commit
f40cdb4915

+ 126 - 2
controller/chart/chart_info.go

@@ -1,15 +1,24 @@
 package chart
 
 import (
+	"context"
 	"github.com/gin-gonic/gin"
 	"hongze/hongze_yb/controller/response"
+	"hongze/hongze_yb/global"
 	"hongze/hongze_yb/models/response/chart_info"
 	chartEdbMappingModel "hongze/hongze_yb/models/tables/chart_edb_mapping"
 	chartInfoModel "hongze/hongze_yb/models/tables/chart_info"
+	"hongze/hongze_yb/models/tables/chart_info_log"
 	edbDataModel "hongze/hongze_yb/models/tables/edb_data"
+	edbInfoModel "hongze/hongze_yb/models/tables/edb_info"
+	"hongze/hongze_yb/services/chart"
 	edbDataService "hongze/hongze_yb/services/edb_data"
+	"hongze/hongze_yb/services/user"
 	"hongze/hongze_yb/utils"
+	"io/ioutil"
+	"sort"
 	"strconv"
+	"strings"
 	"time"
 )
 
@@ -23,9 +32,9 @@ import (
 // @Product json
 // @Param DateType query string false "时间段:1-00年至今; 2-10年至今; 3-15年至今; 4-21年至今; 5-指定区间; 6-指定年月至今; 7-18年至今; 8-19年至今; 9-20年至今
 // @Param ClassifyId query string false "图表分类ID"
-// @Success 200 {object} []my_chart.MyChartList
+// @Success 200 {object} chart_info.ChartInfoDetailResp
 // @failure 400 {string} string "图表详情获取失败"
-// @Router /chart/GetChartInfoDetail [get]
+// @Router /chart/getChartInfoDetail [get]
 func GetChartInfoDetail(c *gin.Context)  {
 	// 图表ID
 	reqChartInfoId := c.DefaultQuery("ChartInfoId", "")
@@ -123,6 +132,7 @@ func GetChartInfoDetail(c *gin.Context)  {
 		}
 	}
 
+	// 指标列表
 	edbList := make([]*chartEdbMappingModel.ChartEdbInfoMapping, 0)
 	for _, v := range mappingList {
 		item := new(chartEdbMappingModel.ChartEdbInfoMapping)
@@ -322,10 +332,124 @@ func GetChartInfoDetail(c *gin.Context)  {
 
 // RefreshChartInfo 刷新图表信息
 func RefreshChartInfo(c *gin.Context)  {
+	// 参数校验
+
+	// 刷新频率校验
+
+	// 刷新图表
 
 }
 
 // EditChartInfo 编辑图表信息
+// @Tags 图库模块
+// @Summary  编辑图表信息
+// @Description 编辑图表信息
+// @Security ApiKeyAuth
+// @Param Authorization	header string true "Bearer 31a165baebe6dec616b1f8f3207b4273"
+// @Accept  json
+// @Product json
+// @Param data body chartInfoModel.SaveChartInfoReq true "请求参数"
+// @Success 200 {string} string "操作成功"
+// @failure 400 {string} string "操作失败"
+// @Router /chart/editChartInfo [post]
 func EditChartInfo(c *gin.Context)  {
+	// 参数校验
+	var req chartInfoModel.SaveChartInfoReq
+	if c.ShouldBind(&req) != nil {
+		response.Fail("参数异常", c)
+		return
+	}
+
+	if req.ChartInfoId > 0 && len(req.ChartEdbInfoList) <= 0 {
+		response.Fail("参数异常", c)
+		return
+	}
+
+	// 操作权限校验
+	userInfo := user.GetInfoByClaims(c)
+	ok, adminInfo, err := user.GetAdminByUserInfo(userInfo)
+	if err != nil {
+		response.Fail("操作人信息有误", c)
+		return
+	}
+	if !ok {
+		response.Fail("非内部人员无权进行操作", c)
+		return
+	}
+
+	// 图表信息校验
+	chartItem, err := chartInfoModel.GetChartInfoById(req.ChartInfoId)
+	if err != nil {
+		if err == utils.ErrNoRow {
+			response.Fail("图表已被删除,请刷新页面!", c)
+			return
+		}
+		response.Fail("获取图表信息失败", c)
+		return
+	}
+	if chartItem.ChartType == 2 && len(req.ChartEdbInfoList) > 1 {
+		response.Fail("您选择的图表样式为季节性图表,只支持单指标画图!", c)
+		return
+	}
+	if req.Calendar == "" {
+		req.Calendar = "公历"
+	}
+
+	// 指标信息
+	var edbInfoIdArr []int
+	edbList := make([]*edbInfoModel.EdbInfo, 0)
+
+	for _, v := range req.ChartEdbInfoList {
+		edbInfo, err := edbInfoModel.GetEdbInfoById(v.EdbInfoId)
+		if err != nil {
+			if err == utils.ErrNoRow {
+				response.Fail("图表不存在,ChartInfoId:" + strconv.Itoa(v.EdbInfoId), c)
+				return
+			}
+			response.Fail("获取图表的指标信息失败,Err:" + err.Error(), c)
+			return
+		}
+		if edbInfo == nil {
+			response.Fail("指标不存在,ChartInfoId:" + strconv.Itoa(v.EdbInfoId), c)
+			return
+		}
+		edbInfoIdArr = append(edbInfoIdArr, v.EdbInfoId)
+		edbInfo.EdbNameSource = edbInfo.EdbName
+		edbList = append(edbList, edbInfo)
+	}
+	sort.Ints(edbInfoIdArr)
+	var edbInfoIdArrStr []string
+	for _, v := range edbInfoIdArr {
+		edbInfoIdArrStr = append(edbInfoIdArrStr, strconv.Itoa(v))
+	}
+	edbInfoIdStr := strings.Join(edbInfoIdArrStr, ",")
+
+	err = chart.ModifyChartInfoAndMapping(edbInfoIdStr, &req, chartItem.ChartType)
+	if err != nil {
+		response.Fail("图表保存失败, Err:" + err.Error(), c)
+		return
+	}
+
+	// 清除图表缓存
+	cacheKey := utils.HZ_CHART_LIB_DETAIL + chartItem.UniqueCode
+	_ = global.Redis.Del(context.TODO(), cacheKey)
+
+	// 新增操作日志
+	{
+		chartLog := new(chart_info_log.ChartInfoLog)
+		chartLog.ChartName = chartItem.ChartName
+		chartLog.ChartInfoId = req.ChartInfoId
+		chartLog.ChartClassifyId = chartItem.ChartClassifyId
+		chartLog.SysUserId = int(adminInfo.AdminID)
+		chartLog.SysUserRealName = adminInfo.RealName
+		chartLog.UniqueCode = chartItem.UniqueCode
+		chartLog.CreateTime = time.Now()
+		bodyBytes, _ := ioutil.ReadAll(c.Request.Body)
+		chartLog.Content = string(bodyBytes)
+		chartLog.Status = "修改配置项"
+		chartLog.Method = c.Request.URL.String()
+		go chartLog.Create()
+	}
 
+	response.OkData("操作成功", "", c)
 }

+ 6 - 6
models/tables/chart_edb_mapping/chart_edb_mapping.go

@@ -4,17 +4,17 @@ import "time"
 
 // ChartEdbMapping 图表指标映射表
 type ChartEdbMapping struct {
-	ChartEdbMappingID int       `gorm:"primaryKey;column:chart_edb_mapping_id;type:int(11);not null" json:"-"`
-	ChartInfoID       int       `gorm:"uniqueIndex:idx_chart_edb;column:chart_info_id;type:int(11);default:0" json:"chartInfoId"` // 图表id
-	EdbInfoID         int       `gorm:"uniqueIndex:idx_chart_edb;column:edb_info_id;type:int(11);default:0" json:"edbInfoId"`     // 指标id
+	ChartEdbMappingId int       `gorm:"primaryKey;column:chart_edb_mapping_id;type:int(11);not null" json:"chartEdbMappingId"`
+	ChartInfoId       int       `gorm:"uniqueIndex:idx_chart_edb;column:chart_info_id;type:int(11);default:0" json:"chartInfoId"` // 图表id
+	EdbInfoId         int       `gorm:"uniqueIndex:idx_chart_edb;column:edb_info_id;type:int(11);default:0" json:"edbInfoId"`     // 指标id
 	CreateTime        time.Time `gorm:"column:create_time;type:datetime" json:"createTime"`                                       // 创建时间
 	ModifyTime        time.Time `gorm:"column:modify_time;type:datetime" json:"modifyTime"`                                       // 修改时间
 	UniqueCode        string    `gorm:"unique;column:unique_code;type:varchar(50);default:''" json:"uniqueCode"`                  // 唯一编码
 	MaxData           float64   `gorm:"column:max_data;type:double;default:0" json:"maxData"`                                     // 上限
 	MinData           float64   `gorm:"column:min_data;type:double;default:0" json:"minData"`                                     // 下限
-	IsOrder           int8      `gorm:"column:is_order;type:tinyint(4);default:1" json:"isOrder"`                                 // 1:正序,0:逆序
-	IsAxis            int8      `gorm:"column:is_axis;type:tinyint(4);default:1" json:"isAxis"`                                   // 1:左轴,0:右轴
-	EdbInfoType       int8      `gorm:"column:edb_info_type;type:tinyint(4);default:1" json:"edbInfoType"`                        // 1:标准指标,0:领先指标
+	IsOrder           int       `gorm:"column:is_order;type:tinyint(4);default:1" json:"isOrder"`                                 // 1:正序,0:逆序
+	IsAxis            int       `gorm:"column:is_axis;type:tinyint(4);default:1" json:"isAxis"`                                   // 1:左轴,0:右轴
+	EdbInfoType       int       `gorm:"column:edb_info_type;type:tinyint(4);default:1" json:"edbInfoType"`                        // 1:标准指标,0:领先指标
 	LeadValue         int       `gorm:"column:lead_value;type:int(11);default:0" json:"leadValue"`                                // 领先值
 	LeadUnit          string    `gorm:"column:lead_unit;type:varchar(10);default:''" json:"leadUnit"`                             // 领先单位
 	ChartStyle        string    `gorm:"column:chart_style;type:varchar(20);default:''" json:"chartStyle"`                         // 图表类型

+ 5 - 5
models/tables/chart_info/chart_info.go

@@ -6,20 +6,20 @@ import (
 
 // ChartInfo 图表信息表
 type ChartInfo struct {
-	ChartInfoID     int       `gorm:"primaryKey;column:chart_info_id;type:int(11);not null" json:"-"`
+	ChartInfoId     int       `gorm:"primaryKey;column:chart_info_id;type:int(11);not null" json:"chartInfoId"`
 	ChartName       string    `gorm:"uniqueIndex:idx_chart_name;column:chart_name;type:varchar(500);default:''" json:"chartName"`        // 图表名称
 	UniqueCode      string    `gorm:"unique;column:unique_code;type:varchar(50);default:''" json:"uniqueCode"`                           // 唯一编码
-	ChartClassifyID int       `gorm:"uniqueIndex:idx_chart_name;column:chart_classify_id;type:int(11);default:0" json:"chartClassifyId"` // 分类id
-	SysUserID       int       `gorm:"column:sys_user_id;type:int(11);default:0" json:"sysUserId"`                                        // 创建人id
+	ChartClassifyId int       `gorm:"uniqueIndex:idx_chart_name;column:chart_classify_id;type:int(11);default:0" json:"chartClassifyId"` // 分类id
+	SysUserId       int       `gorm:"column:sys_user_id;type:int(11);default:0" json:"sysUserId"`                                        // 创建人id
 	SysUserRealName string    `gorm:"column:sys_user_real_name;type:varchar(100);default:''" json:"sysUserRealName"`                     // 创建人姓名
 	CreateTime      time.Time `gorm:"column:create_time;type:datetime" json:"createTime"`
 	ModifyTime      time.Time `gorm:"column:modify_time;type:datetime" json:"modifyTime"`
 	DateType        int       `gorm:"column:date_type;type:int(11);default:0" json:"dateType"`                     // 日期类型:1:00年至今,2:10年至今,3:15年至今,4:年初至今,5:自定义时间,6:起始日期至今
 	StartDate       string    `gorm:"column:start_date;type:varchar(30);default:''" json:"startDate"`              // 自定义开始日期
 	EndDate         string    `gorm:"column:end_date;type:varchar(30);default:''" json:"endDate"`                  // 自定义结束日期
-	IsSetName       int8      `gorm:"column:is_set_name;type:tinyint(4);default:0" json:"isSetName"`               // 0:未修改,1:已修改
+	IsSetName       int       `gorm:"column:is_set_name;type:tinyint(4);default:0" json:"isSetName"`               // 0:未修改,1:已修改
 	EdbInfoIDs      string    `gorm:"column:edb_info_ids;type:varchar(100);default:''" json:"edbInfoIds"`          // 指标id
-	ChartType       int8      `gorm:"column:chart_type;type:tinyint(4);default:1" json:"chartType"`                // 生成样式:1:曲线图,2:季节性图
+	ChartType       int       `gorm:"column:chart_type;type:tinyint(4);default:1" json:"chartType"`                // 生成样式:1:曲线图,2:季节性图
 	Calendar        string    `gorm:"column:calendar;type:varchar(10);default:''" json:"calendar"`                 // 公历/农历
 	SeasonStartDate string    `gorm:"column:season_start_date;type:varchar(30);default:''" json:"seasonStartDate"` // 季节开始日期
 	SeasonEndDate   string    `gorm:"column:season_end_date;type:varchar(30);default:''" json:"seasonEndDate"`     // 季节结束日期

+ 36 - 1
models/tables/chart_info/query.go

@@ -38,8 +38,43 @@ type ChartInfoView struct {
 	ChartClassify     []*chart_classify.ChartClassifyView
 }
 
-// 通过Id获取图表信息
+type SaveChartInfoReq struct {
+	ChartEdbInfoList []*ChartSaveItem `description:"指标及配置信息"`
+	ChartInfoId      int              `description:"图表id,新增时传0"`
+	DateType         int              `description:"日期类型:1:00年至今,2:10年至今,3:15年至今,4:年初至今,5:自定义时间,6:起始日期至今"`
+	StartDate        string           `description:"自定义开始日期"`
+	EndDate          string           `description:"自定义结束日期"`
+	Calendar         string           `description:"公历/农历"`
+	SeasonStartDate  string           `description:"季节性图开始日期"`
+	SeasonEndDate    string           `description:"季节性图开始日期"`
+	LeftMin          string           `description:"图表左侧最小值"`
+	LeftMax          string           `description:"图表左侧最大值"`
+	RightMin         string           `description:"图表右侧最小值"`
+	RightMax         string           `description:"图表右侧最大值"`
+}
+
+type ChartSaveItem struct {
+	EdbInfoId   int     `description:"指标id"`
+	MaxData     float64 `description:"上限"`
+	MinData     float64 `description:"下限"`
+	IsOrder     bool    `description:"true:正序,false:逆序"`
+	IsAxis      int     `description:"1:左轴,0:右轴"`
+	EdbInfoType int     `description:"1:标准指标,0:领先指标"`
+	LeadValue   int     `description:"领先值"`
+	LeadUnit    string  `description:"领先单位"`
+	ChartStyle  string  `description:"图表类型"`
+	ChartColor  string  `description:"颜色"`
+	ChartWidth  float64 `description:"线条大小"`
+}
+
+// GetChartInfoViewById 通过Id获取图表展示信息
 func GetChartInfoViewById(chartInfoId int) (item *ChartInfoView, err error) {
 	err = global.MYSQL["data"].Where("chart_info_id = ?", chartInfoId).First(&item).Error
 	return
+}
+
+// GetChartInfoViewById 通过ID获取图表数据库信息
+func GetChartInfoById(chartInfoId int) (item *ChartInfo, err error) {
+	err = global.MYSQL["data"].Where("chart_info_id = ?", chartInfoId).First(&item).Error
+	return
 }

+ 4 - 4
models/tables/chart_info_log/chart_info_log.go

@@ -4,12 +4,12 @@ import "time"
 
 // ChartInfoLog 图表操作日志表
 type ChartInfoLog struct {
-	ChartInfoLogID  int       `gorm:"primaryKey;column:chart_info_log_id;type:int(11);not null" json:"-"`
-	ChartInfoID     int       `gorm:"index:idx_chart_info_id;column:chart_info_id;type:int(11);default:0" json:"chartInfoId"`
+	ChartInfoLogId  int       `gorm:"primaryKey;column:chart_info_log_id;type:int(11);not null" json:"-"`
+	ChartInfoId     int       `gorm:"index:idx_chart_info_id;column:chart_info_id;type:int(11);default:0" json:"chartInfoId"`
 	ChartName       string    `gorm:"column:chart_name;type:varchar(500);default:''" json:"chartName"`               // 图表名称
 	UniqueCode      string    `gorm:"column:unique_code;type:varchar(50);default:''" json:"uniqueCode"`              // 唯一编码
-	ChartClassifyID int       `gorm:"column:chart_classify_id;type:int(11);default:0" json:"chartClassifyId"`        // 分类id
-	SysUserID       int       `gorm:"column:sys_user_id;type:int(11);default:0" json:"sysUserId"`                    // 创建人id
+	ChartClassifyId int       `gorm:"column:chart_classify_id;type:int(11);default:0" json:"chartClassifyId"`        // 分类id
+	SysUserId       int       `gorm:"column:sys_user_id;type:int(11);default:0" json:"sysUserId"`                    // 创建人id
 	SysUserRealName string    `gorm:"column:sys_user_real_name;type:varchar(100);default:''" json:"sysUserRealName"` // 创建人姓名
 	CreateTime      time.Time `gorm:"column:create_time;type:datetime" json:"createTime"`
 	Content         string    `gorm:"column:content;type:text" json:"content"`

+ 9 - 0
models/tables/chart_info_log/create.go

@@ -0,0 +1,9 @@
+package chart_info_log
+
+import "hongze/hongze_yb/global"
+
+func (chartInfo *ChartInfoLog) Create() (chartInfoLogId int, err error) {
+	err = global.MYSQL["data"].Create(chartInfo).Error
+	chartInfoLogId = chartInfo.ChartInfoLogId
+	return
+}

+ 95 - 0
models/tables/edb_info/edb_info.go

@@ -0,0 +1,95 @@
+package edb_info
+
+import "time"
+
+// EdbInfo 指标信息表
+type EdbInfo struct {
+	EdbInfoID        int       `gorm:"primaryKey;column:edb_info_id;type:int(11);not null" json:"edbInfoId"`							 // 指标id
+	SourceName       string    `gorm:"column:source_name;type:varchar(100)" json:"sourceName"`                                           // 来源名称
+	Source           int8      `gorm:"uniqueIndex:idx_code_source;uniqueIndex:idx_edb_name;column:source;type:tinyint(4)" json:"source"` // 来源:1:同花顺,2:wind,3:彭博,4:指标运算,5:累计值转月,6:同比值,7:同差值,8:N数值移动平均计算,9:手工指标,10:隆众,11:有色,12:环比值,13:环差值,14:变频,15:钢联
+	EdbCode          string    `gorm:"uniqueIndex:idx_code_source;unique;column:edb_code;type:varchar(255);default:''" json:"edbCode"`   // 指标编码
+	EdbName          string    `gorm:"uniqueIndex:idx_edb_name;column:edb_name;type:varchar(255);default:''" json:"edbName"`             // 指标名称
+	EdbNameSource    string    `gorm:"column:edb_name_source;type:varchar(255);default:''" json:"edbNameSource"`                         // 指标名称_来源
+	Frequency        string    `gorm:"column:frequency;type:varchar(20);default:''" json:"frequency"`                                    // 频度
+	Unit             string    `gorm:"column:unit;type:varchar(20);default:''" json:"unit"`                                              // 单位
+	StartDate        time.Time `gorm:"column:start_date;type:date" json:"startDate"`                                                     // 更新开始日期
+	EndDate          time.Time `gorm:"column:end_date;type:date" json:"endDate"`                                                         // 更新结束日期
+	ClassifyID       int       `gorm:"index:idx_classify_id;column:classify_id;type:int(11)" json:"classifyId"`                          // 分类id
+	SysUserID        int       `gorm:"column:sys_user_id;type:int(11)" json:"sysUserId"`                                                 // 创建人
+	SysUserRealName  string    `gorm:"column:sys_user_real_name;type:varchar(100)" json:"sysUserRealName"`                               // 创建人姓名
+	CreateTime       time.Time `gorm:"column:create_time;type:datetime" json:"createTime"`                                               // 创建时间
+	ModifyTime       time.Time `gorm:"column:modify_time;type:datetime" json:"modifyTime"`                                               // 修改时间
+	UniqueCode       string    `gorm:"unique;column:unique_code;type:varchar(50);default:''" json:"uniqueCode"`                          // 唯一编码
+	MinValue         float64   `gorm:"column:min_value;type:double;default:0" json:"minValue"`                                           // 最小值
+	MaxValue         float64   `gorm:"column:max_value;type:double;default:0" json:"maxValue"`                                           // 最大值
+	CalculateFormula string    `gorm:"column:calculate_formula;type:varchar(255);default:''" json:"calculateFormula"`                    // 计算公式,N数值移动
+	EdbType          int8      `gorm:"column:edb_type;type:tinyint(4);default:1" json:"edbType"`                                         // 指标类型:1:基础指标,2:计算指标
+	IsUpdate         int8      `gorm:"column:is_update;type:tinyint(4);default:1" json:"isUpdate"`                                       // 当天是否已更新,1:未更新,2:已更新
+	Sort             int       `gorm:"column:sort;type:int(9);default:0" json:"sort"`                                                    // 排序字段
+	LatestDate       time.Time `gorm:"column:latest_date;type:date" json:"latestDate"`                                                   // 数据最新日期
+	LatestValue      float64   `gorm:"column:latest_value;type:double" json:"latestValue"`                                               // 数据最新值
+	MoveType         int8      `gorm:"column:move_type;type:tinyint(4);default:1" json:"moveType"`                                       // 移动方式:1:领先(默认),2:滞后
+	MoveFrequency    string    `gorm:"column:move_frequency;type:varchar(20);default:''" json:"moveFrequency"`                           // 移动频度
+}
+
+// TableName get sql table name.获取数据库表名
+func (m *EdbInfo) TableName() string {
+	return "edb_info"
+}
+
+// EdbInfoColumns get sql column name.获取数据库列名
+var EdbInfoColumns = struct {
+	EdbInfoID        string
+	SourceName       string
+	Source           string
+	EdbCode          string
+	EdbName          string
+	EdbNameSource    string
+	Frequency        string
+	Unit             string
+	StartDate        string
+	EndDate          string
+	ClassifyID       string
+	SysUserID        string
+	SysUserRealName  string
+	CreateTime       string
+	ModifyTime       string
+	UniqueCode       string
+	MinValue         string
+	MaxValue         string
+	CalculateFormula string
+	EdbType          string
+	IsUpdate         string
+	Sort             string
+	LatestDate       string
+	LatestValue      string
+	MoveType         string
+	MoveFrequency    string
+}{
+	EdbInfoID:        "edb_info_id",
+	SourceName:       "source_name",
+	Source:           "source",
+	EdbCode:          "edb_code",
+	EdbName:          "edb_name",
+	EdbNameSource:    "edb_name_source",
+	Frequency:        "frequency",
+	Unit:             "unit",
+	StartDate:        "start_date",
+	EndDate:          "end_date",
+	ClassifyID:       "classify_id",
+	SysUserID:        "sys_user_id",
+	SysUserRealName:  "sys_user_real_name",
+	CreateTime:       "create_time",
+	ModifyTime:       "modify_time",
+	UniqueCode:       "unique_code",
+	MinValue:         "min_value",
+	MaxValue:         "max_value",
+	CalculateFormula: "calculate_formula",
+	EdbType:          "edb_type",
+	IsUpdate:         "is_update",
+	Sort:             "sort",
+	LatestDate:       "latest_date",
+	LatestValue:      "latest_value",
+	MoveType:         "move_type",
+	MoveFrequency:    "move_frequency",
+}

+ 10 - 0
models/tables/edb_info/query.go

@@ -0,0 +1,10 @@
+package edb_info
+
+import "hongze/hongze_yb/global"
+
+// GetEdbInfoById 主键获取指标信息
+func GetEdbInfoById(edbInfoId int) (item *EdbInfo, err error) {
+	err = global.MYSQL["data"].Where("edb_info_id = ? ", edbInfoId).First(&item).Error
+
+	return
+}

+ 1 - 0
routers/chart.go

@@ -12,5 +12,6 @@ func InitChart(r *gin.Engine) {
 		rGroup.GET("/getChartChassify", chart.GetMyChartChassify)
 		rGroup.GET("/getChartList", chart.GetMyChartList)
 		rGroup.GET("/getChartDetail", chart.GetChartInfoDetail)
+		rGroup.GET("/editChartInfo", chart.EditChartInfo)
 	}
 }

+ 142 - 0
services/chart/chart_info.go

@@ -0,0 +1,142 @@
+package chart
+
+import (
+	"fmt"
+	"hongze/hongze_yb/global"
+	chartEdbMappingModel "hongze/hongze_yb/models/tables/chart_edb_mapping"
+	chartInfoModel "hongze/hongze_yb/models/tables/chart_info"
+	"hongze/hongze_yb/utils"
+	"strconv"
+	"strings"
+	"time"
+)
+
+// ModifyChartInfoAndMapping 修改图表信息
+func ModifyChartInfoAndMapping(edbInfoIdStr string, req *chartInfoModel.SaveChartInfoReq, chartType int) (err error) {
+	// 开启事务
+	tx := global.MYSQL["data"].Begin()
+	defer func() {
+		if err != nil {
+			tx.Rollback()
+		} else {
+			tx.Commit()
+		}
+	}()
+
+	// 更新图表信息
+	if chartType == 1 {
+		sql := ` UPDATE chart_info
+			SET
+            	edb_info_ids = ?,
+				modify_time = NOW(),
+            	date_type = ?,
+				start_date = ?,
+				end_date = ?,
+ 				left_min = ?,
+				left_max = ?,
+				right_min = ?,
+				right_max = ?
+			WHERE chart_info_id = ?`
+		err = tx.Exec(sql, edbInfoIdStr, req.DateType, req.StartDate, req.EndDate, req.LeftMin, req.LeftMax, req.RightMin, req.RightMax, req.ChartInfoId).Error
+	} else {
+		sql := ` UPDATE chart_info
+			SET
+            	edb_info_ids = ?,
+				modify_time = NOW(),
+				calendar = ?,
+				season_start_date = ?,
+				season_end_date = ?,
+				left_min = ?,
+				left_max = ?,
+				right_min = ?,
+				right_max = ?
+			WHERE chart_info_id = ?`
+		err = tx.Exec(sql, edbInfoIdStr, req.Calendar, req.SeasonStartDate, req.SeasonEndDate, req.LeftMin, req.LeftMax, req.RightMin, req.RightMax, req.ChartInfoId).Error
+	}
+	if err != nil {
+		fmt.Println("UPDATE chart_info Err:", err.Error())
+		return
+	}
+
+	var edbInfoIdArr []string
+	mapList := make([]*chartEdbMappingModel.ChartEdbMapping, 0)
+	for _, v := range req.ChartEdbInfoList {
+		edbInfoIdArr = append(edbInfoIdArr, strconv.Itoa(v.EdbInfoId))
+		var count int
+		csql := `SELECT COUNT(1) AS count FROM chart_edb_mapping WHERE chart_info_id=? AND edb_info_id=? `
+		err = tx.Exec(csql, req.ChartInfoId, v.EdbInfoId).Scan(&count).Error
+		if err != nil {
+			fmt.Println("QueryRow Err:", err.Error())
+			return err
+		}
+		if count > 0 {
+			// 更新指标
+			msql := `UPDATE chart_edb_mapping
+				SET
+                 	modify_time = NOW(),
+				 	max_data = ?,
+				 	min_data = ?,
+				 	is_order = ?,
+				 	is_axis = ?,
+				 	edb_info_type = ?,
+				 	lead_value = ?,
+				 	lead_unit = ?,
+				 	chart_style = ?,
+				 	chart_color = ?,
+				 	chart_width = ? 
+				WHERE chart_info_id =? AND edb_info_id=? `
+
+			err = tx.Exec(msql, v.MaxData, v.MinData, v.IsOrder, v.IsAxis, v.EdbInfoType, v.LeadValue, v.LeadUnit, v.ChartStyle, v.ChartColor, v.ChartWidth, req.ChartInfoId, v.EdbInfoId).Error
+			if err != nil {
+				fmt.Println("chart_edb_mapping Err:" + err.Error())
+				return err
+			}
+		} else {
+			mapItem := new(chartEdbMappingModel.ChartEdbMapping)
+			mapItem.ChartInfoId = req.ChartInfoId
+			mapItem.EdbInfoId = v.EdbInfoId
+			mapItem.CreateTime = time.Now()
+			mapItem.ModifyTime = time.Now()
+			timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
+			mapItem.UniqueCode = utils.MD5(utils.CHART_PREFIX + "_" + timestamp)
+			mapItem.MaxData = v.MaxData
+			mapItem.MinData = v.MinData
+			mapItem.IsOrder = 0
+			if v.IsOrder {
+				mapItem.IsOrder = 1
+			}
+			mapItem.IsAxis = v.IsAxis
+			mapItem.EdbInfoType = v.EdbInfoType
+			mapItem.LeadValue = v.LeadValue
+			mapItem.LeadUnit = v.LeadUnit
+			mapItem.ChartStyle = v.ChartStyle
+			mapItem.ChartColor = v.ChartColor
+			mapItem.ChartWidth = v.ChartWidth
+			mapList = append(mapList, mapItem)
+		}
+	}
+
+	// 批量新增指标
+	if len(mapList) > 0 {
+		err = tx.Create(mapList).Error
+		if err != nil {
+			fmt.Println("AddChartEdbMapping Err:" + err.Error())
+			return err
+		}
+	}
+
+	// 清除原图表指标
+	if len(edbInfoIdArr) > 0 {
+		edbInfoIdStr := strings.Join(edbInfoIdArr, ",")
+		if edbInfoIdStr != "" {
+			dsql := `DELETE FROM chart_edb_mapping WHERE chart_info_id=? AND edb_info_id NOT IN(` + edbInfoIdStr + `)`
+			err = tx.Exec(dsql, req.ChartInfoId).Error
+			if err != nil {
+				fmt.Println("delete err:" + err.Error())
+				return err
+			}
+		}
+	}
+
+	return
+}

+ 9 - 0
utils/constants.go

@@ -69,4 +69,13 @@ const (
 	DATA_SOURCE_CALCULATE_LJZTBPJ               //累计值同比拼接->24
 	DATA_SOURCE_LT                              //路透->25
 
+)
+
+const (
+	HZ_CHART_LIB_DETAIL = "HZ_CHART_LIB_DETAIL_"
+)
+
+const (
+	DATA_PREFIX  = "hz_data"
+	CHART_PREFIX = "hz_chart"
 )