|
@@ -4,6 +4,7 @@ import (
|
|
|
"encoding/json"
|
|
|
"fmt"
|
|
|
"hongze/hongze_ETA_mobile_api/controllers"
|
|
|
+ "hongze/hongze_ETA_mobile_api/models"
|
|
|
"hongze/hongze_ETA_mobile_api/models/data_manage"
|
|
|
"hongze/hongze_ETA_mobile_api/models/system"
|
|
|
"hongze/hongze_ETA_mobile_api/services/data"
|
|
@@ -236,3 +237,680 @@ func GetChartInfoDetailFromUniqueCode(chartInfo *data_manage.ChartInfoView, isCa
|
|
|
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
+// ChartInfoDetail
|
|
|
+// @Title 获取图表详情
|
|
|
+// @Description 获取图表详情接口
|
|
|
+// @Param ChartInfoId query int true "图表id"
|
|
|
+// @Param DateType query int true "日期类型:1:00年至今,2:10年至今,3:15年至今,4:年初至今,5:自定义时间"
|
|
|
+// @Param StartDate query string true "自定义开始日期"
|
|
|
+// @Param EndDate query string true "自定义结束日期"
|
|
|
+// @Param Calendar query string true "公历/农历"
|
|
|
+// @Param SeasonStartDate query string true "季节性图开始日期"
|
|
|
+// @Param SeasonEndDate query string true "季节性图结束日期"
|
|
|
+// @Param EdbInfoId query string true "指标ID,多个用英文逗号隔开"
|
|
|
+// @Param ChartType query int true "生成样式:1:曲线图,2:季节性图"
|
|
|
+// @Success 200 {object} data_manage.ChartInfoDetailResp
|
|
|
+// @router /chart_info/detail [get]
|
|
|
+func (this *ChartInfoController) ChartInfoDetail() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+ sysUser := this.SysUser
|
|
|
+ if sysUser == nil {
|
|
|
+ br.Msg = "请登录"
|
|
|
+ br.ErrMsg = "请登录,SysUser Is Empty"
|
|
|
+ br.Ret = 408
|
|
|
+ return
|
|
|
+ }
|
|
|
+ chartInfoId, _ := this.GetInt("ChartInfoId")
|
|
|
+
|
|
|
+ dateType, _ := this.GetInt("DateType")
|
|
|
+ fmt.Println("dateType:", dateType)
|
|
|
+ if dateType <= 0 {
|
|
|
+ dateType = 3
|
|
|
+ }
|
|
|
+
|
|
|
+ startDate := this.GetString("StartDate")
|
|
|
+ endDate := this.GetString("EndDate")
|
|
|
+ seasonStartDate := this.GetString("SeasonStartDate")
|
|
|
+ seasonEndDate := this.GetString("SeasonEndDate")
|
|
|
+
|
|
|
+ edbInfoId := this.GetString("EdbInfoId")
|
|
|
+ chartType, _ := this.GetInt("ChartType")
|
|
|
+
|
|
|
+ fmt.Println("seasonStartDate:", seasonStartDate)
|
|
|
+ fmt.Println("seasonEndDate:", seasonEndDate)
|
|
|
+
|
|
|
+ calendar := this.GetString("Calendar")
|
|
|
+ if calendar == "" {
|
|
|
+ calendar = "公历"
|
|
|
+ }
|
|
|
+ switch dateType {
|
|
|
+ case 1:
|
|
|
+ startDate = "2000-01-01"
|
|
|
+ case 2:
|
|
|
+ startDate = "2010-01-01"
|
|
|
+ case 3:
|
|
|
+ startDate = "2015-01-01"
|
|
|
+ case 4:
|
|
|
+ //startDate = strconv.Itoa(time.Now().Year()) + "-01-01"
|
|
|
+ startDate = "2021-01-01"
|
|
|
+ case 5:
|
|
|
+ startDate = startDate + "-01"
|
|
|
+ endDate = endDate + "-01"
|
|
|
+ case 6:
|
|
|
+ startDate = startDate + "-01"
|
|
|
+ case 7:
|
|
|
+ startDate = "2018-01-01"
|
|
|
+ case 8:
|
|
|
+ startDate = "2019-01-01"
|
|
|
+ case 9:
|
|
|
+ startDate = "2020-01-01"
|
|
|
+ case 11:
|
|
|
+ startDate = "2022-01-01"
|
|
|
+ }
|
|
|
+
|
|
|
+ var err error
|
|
|
+ chartInfo := new(data_manage.ChartInfoView)
|
|
|
+ if chartInfoId > 0 {
|
|
|
+ chartInfo, err = data_manage.GetChartInfoViewById(chartInfoId)
|
|
|
+ if err != nil {
|
|
|
+ if err.Error() == utils.ErrNoRow() {
|
|
|
+ br.Msg = "图被删除,请刷新页面"
|
|
|
+ br.ErrMsg = "图被删除,请刷新页面,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ chartType = chartInfo.ChartType
|
|
|
+ }
|
|
|
+
|
|
|
+ if chartType == 2 {
|
|
|
+ if seasonStartDate != "" {
|
|
|
+ startDate = seasonStartDate + "-01-01"
|
|
|
+ } else {
|
|
|
+ fivePre := time.Now().AddDate(-4, 0, 0).Year()
|
|
|
+ startDate = strconv.Itoa(fivePre) + "-01-01"
|
|
|
+ }
|
|
|
+ if seasonEndDate != "" {
|
|
|
+ endDate = seasonEndDate + "-12-31"
|
|
|
+ } else {
|
|
|
+ endDate = "" //time.Now().AddDate(2, 0, 0).Format(utils.FormatDate)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ mappingList := make([]*data_manage.ChartEdbInfoMapping, 0)
|
|
|
+ if chartInfoId > 0 {
|
|
|
+ mappingList, err = data_manage.GetChartEdbMappingList(chartInfoId)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = "获取图表,指标信息失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if edbInfoId != "" {
|
|
|
+ mappingList, err = data_manage.GetChartEdbMappingListByEdbInfoId(edbInfoId)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = "获取图表,指标信息失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 图表额外数据参数
|
|
|
+ extraConfigStr := chartInfo.ExtraConfig
|
|
|
+ // 柱方图的一些配置
|
|
|
+ var barConfig data_manage.BarChartInfoReq
|
|
|
+ if chartInfo != nil && chartInfo.ChartType == 7 {
|
|
|
+ if chartInfo.BarConfig == `` {
|
|
|
+ br.Msg = "柱方图未配置"
|
|
|
+ br.ErrMsg = "柱方图未配置"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ err := json.Unmarshal([]byte(chartInfo.BarConfig), &barConfig)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "柱方图配置异常"
|
|
|
+ br.ErrMsg = "柱方图配置异常"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ extraConfigStr = chartInfo.BarConfig
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取图表中的指标数据
|
|
|
+ edbList, xEdbIdValue, yDataList, dataResp, err, errMsg := data.GetChartEdbData(chartInfoId, chartType, calendar, startDate, endDate, mappingList, extraConfigStr)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ if errMsg != `` {
|
|
|
+ br.Msg = errMsg
|
|
|
+ }
|
|
|
+ br.ErrMsg = "获取图表,指标信息失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ warnEdbList := make([]string, 0)
|
|
|
+ for _, v := range edbList {
|
|
|
+ if v.IsNullData {
|
|
|
+ warnEdbList = append(warnEdbList, v.EdbName+"("+v.EdbCode+")")
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if len(warnEdbList) > 0 {
|
|
|
+ chartInfo.WarnMsg = `图表引用指标异常,异常指标:` + strings.Join(warnEdbList, ",")
|
|
|
+ }
|
|
|
+ if chartInfoId > 0 && chartInfo != nil {
|
|
|
+ //判断是否加入我的图库
|
|
|
+ {
|
|
|
+ var myChartCondition string
|
|
|
+ var myChartPars []interface{}
|
|
|
+ myChartCondition += ` AND a.admin_id=? `
|
|
|
+ myChartPars = append(myChartPars, sysUser.AdminId)
|
|
|
+ myChartCondition += ` AND a.chart_info_id=? `
|
|
|
+ myChartPars = append(myChartPars, chartInfo.ChartInfoId)
|
|
|
+
|
|
|
+ myChartList, err := data_manage.GetMyChartByCondition(myChartCondition, myChartPars)
|
|
|
+ if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = "获取我的图表信息失败,GetMyChartByCondition,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if myChartList != nil && len(myChartList) > 0 {
|
|
|
+ chartInfo.IsAdd = true
|
|
|
+ chartInfo.MyChartId = myChartList[0].MyChartId
|
|
|
+ chartInfo.MyChartClassifyId = myChartList[0].MyChartClassifyId
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //图表操作权限
|
|
|
+ chartInfo.IsEdit = data.CheckOpChartPermission(sysUser, chartInfo.SysUserId)
|
|
|
+ //判断是否需要展示英文标识
|
|
|
+ chartInfo.IsEnChart = data.CheckIsEnChart(chartInfo.ChartNameEn, edbList, chartInfo.Source, chartInfo.ChartType)
|
|
|
+
|
|
|
+ resp := new(data_manage.ChartInfoDetailResp)
|
|
|
+ resp.ChartInfo = chartInfo
|
|
|
+ resp.EdbInfoList = edbList
|
|
|
+ resp.XEdbIdValue = xEdbIdValue
|
|
|
+ resp.YDataList = yDataList
|
|
|
+ resp.BarChartInfo = barConfig
|
|
|
+ resp.DataResp = dataResp
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "获取成功"
|
|
|
+ br.Data = resp
|
|
|
+}
|
|
|
+
|
|
|
+// ChartInfoEdbInfoDetail
|
|
|
+// @Title 图表-获取指标详情
|
|
|
+// @Description 图表-获取指标详情接口
|
|
|
+// @Param EdbInfoId query int true "指标ID"
|
|
|
+// @Param DateType query int true "日期类型:1:00年至今,2:10年至今,3:15年至今,4:年初至今,5:自定义时间,6:自定义起始时间至今,7:18年至今,8:19年至今,9:20年至今"
|
|
|
+// @Param StartDate query string true "自定义开始日期"
|
|
|
+// @Param EndDate query string true "自定义结束日期"
|
|
|
+// @Param EdbInfoType query int true "1:标准指标,0:领先指标,默认为标准指标"
|
|
|
+// @Param LeadValue query int true "领先值"
|
|
|
+// @Param LeadUnit query string true "领先单位:天,月,季,周"
|
|
|
+// @Success 200 {object} data_manage.ChartEdbInfoDetailResp
|
|
|
+// @router /chart_info/edb_info/detail [get]
|
|
|
+func (this *ChartInfoController) ChartInfoEdbInfoDetail() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+ sysUser := this.SysUser
|
|
|
+ if sysUser == nil {
|
|
|
+ br.Msg = "请登录"
|
|
|
+ br.ErrMsg = "请登录,SysUser Is Empty"
|
|
|
+ br.Ret = 408
|
|
|
+ return
|
|
|
+ }
|
|
|
+ edbInfoId, _ := this.GetInt("EdbInfoId")
|
|
|
+ if edbInfoId <= 0 {
|
|
|
+ br.Msg = "参数错误"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ dateType, _ := this.GetInt("DateType")
|
|
|
+ if dateType <= 0 {
|
|
|
+ dateType = 3
|
|
|
+ }
|
|
|
+
|
|
|
+ edbInfoType, _ := this.GetInt("EdbInfoType")
|
|
|
+ if edbInfoType < 0 {
|
|
|
+ edbInfoType = 1
|
|
|
+ }
|
|
|
+
|
|
|
+ leadValue, _ := this.GetInt("LeadValue")
|
|
|
+ if leadValue < 0 {
|
|
|
+ leadValue = 0
|
|
|
+ }
|
|
|
+
|
|
|
+ leadUnit := this.GetString("LeadUnit")
|
|
|
+
|
|
|
+ startDate := this.GetString("StartDate")
|
|
|
+ endDate := this.GetString("EndDate")
|
|
|
+
|
|
|
+ isTimeBetween := false //是否是时间区间
|
|
|
+ switch dateType {
|
|
|
+ case 1:
|
|
|
+ startDate = "2000-01-01"
|
|
|
+ endDate = ""
|
|
|
+ case 2:
|
|
|
+ startDate = "2010-01-01"
|
|
|
+ endDate = ""
|
|
|
+ case 3:
|
|
|
+ startDate = "2015-01-01"
|
|
|
+ endDate = ""
|
|
|
+ case 4:
|
|
|
+ //startDate = strconv.Itoa(time.Now().Year()) + "-01-01"
|
|
|
+ startDate = "2021-01-01"
|
|
|
+ endDate = ""
|
|
|
+ case 5:
|
|
|
+ startDate = startDate + "-01"
|
|
|
+ endDate = endDate + "-01"
|
|
|
+ isTimeBetween = true
|
|
|
+ case 6:
|
|
|
+ //startDate = startDate + "-01"
|
|
|
+ endDate = ""
|
|
|
+ case 7:
|
|
|
+ startDate = "2018-01-01"
|
|
|
+ endDate = ""
|
|
|
+ case 8:
|
|
|
+ startDate = "2019-01-01"
|
|
|
+ endDate = ""
|
|
|
+ case 9:
|
|
|
+ startDate = "2020-01-01"
|
|
|
+ endDate = ""
|
|
|
+ case 11:
|
|
|
+ startDate = "2022-01-01"
|
|
|
+ endDate = ""
|
|
|
+ default:
|
|
|
+ startDate = startDate + "-01"
|
|
|
+ endDate = endDate + "-01"
|
|
|
+ }
|
|
|
+
|
|
|
+ // 兼容日期错误
|
|
|
+ {
|
|
|
+ if strings.Count(startDate, "-") == 1 {
|
|
|
+ startDate = startDate + "-01"
|
|
|
+ }
|
|
|
+ if strings.Count(endDate, "-") == 1 {
|
|
|
+ endDate = endDate + "-01"
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if startDate == "" {
|
|
|
+ br.Msg = "参数错误"
|
|
|
+ br.Msg = "参数错误,无效的查询日期"
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ var startDateReal string
|
|
|
+ var diffSeconds int64
|
|
|
+ if leadValue > 0 && leadUnit != "" {
|
|
|
+ var startTimeRealTemp time.Time
|
|
|
+ startDateParse, err := time.Parse(utils.FormatDate, startDate)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取数据失败"
|
|
|
+ br.ErrMsg = "获取数据失败,日期格式错误:startDate:" + startDate
|
|
|
+ return
|
|
|
+ }
|
|
|
+ switch leadUnit {
|
|
|
+ case "天":
|
|
|
+ startTimeRealTemp = startDateParse.AddDate(0, 0, -leadValue)
|
|
|
+ case "月":
|
|
|
+ startTimeRealTemp = startDateParse.AddDate(0, -leadValue, 0)
|
|
|
+ case "季":
|
|
|
+ startTimeRealTemp = startDateParse.AddDate(0, -3*leadValue, 0)
|
|
|
+ case "周":
|
|
|
+ startTimeRealTemp = startDateParse.AddDate(0, 0, -7*leadValue)
|
|
|
+ case "年":
|
|
|
+ startTimeRealTemp = startDateParse.AddDate(-leadValue, 0, 0)
|
|
|
+ }
|
|
|
+
|
|
|
+ if startTimeRealTemp.Before(startDateParse) {
|
|
|
+ startDateReal = startTimeRealTemp.Format(utils.FormatDate)
|
|
|
+ diffSeconds = (int64(startTimeRealTemp.UnixNano()) - int64(startDateParse.UnixNano())) / 1e6
|
|
|
+ } else {
|
|
|
+ startDateReal = startDate
|
|
|
+ diffSeconds = 0
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ startDateReal = startDate
|
|
|
+ }
|
|
|
+
|
|
|
+ edbInfo, err := data_manage.GetEdbInfoById(edbInfoId)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.Msg = "获取失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ var dataList []*data_manage.EdbDataList
|
|
|
+ var minData, maxData float64
|
|
|
+
|
|
|
+ switch edbInfo.EdbInfoType {
|
|
|
+ case 0: //普通源指标
|
|
|
+ dataList, err = data_manage.GetEdbDataList(edbInfo.Source, edbInfoId, startDateReal, endDate)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.Msg = "获取失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ //查询区间内最大最小值
|
|
|
+ minData, maxData, err = data_manage.GetEdbDataListMinAndMax(edbInfo.Source, edbInfoId, startDateReal, endDate)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.Msg = "获取指标最新的最大最小值失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ case 1: //预测指标
|
|
|
+ tmpDataList, sourceEdbInfoItem, _, err, _ := data.GetPredictDataListByPredictEdbInfo(edbInfo, startDateReal, endDate, isTimeBetween)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.Msg = "获取失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ dataList = tmpDataList
|
|
|
+ // 有预测数据,且为普通的预测指标
|
|
|
+ if len(dataList) > 0 && edbInfo.EdbInfoType == 0 {
|
|
|
+ //查询区间内最大最小值
|
|
|
+ minData, maxData, err = data_manage.GetEdbDataListMinAndMax(sourceEdbInfoItem.Source, sourceEdbInfoItem.EdbInfoId, startDateReal, endDate)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.Msg = "获取指标最新的最大最小值失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ tmpValue := dataList[len(dataList)-1]
|
|
|
+
|
|
|
+ // 如果最大值 小于 预测值,那么将预测值作为最大值数据返回
|
|
|
+ if edbInfo.MaxValue < tmpValue.Value {
|
|
|
+ maxData = tmpValue.Value
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果最小值 大于 预测值,那么将预测值作为最小值数据返回
|
|
|
+ if edbInfo.MinValue > tmpValue.Value {
|
|
|
+ minData = tmpValue.Value
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if diffSeconds != 0 {
|
|
|
+ dataListLen := len(dataList)
|
|
|
+ for i := 0; i < dataListLen; i++ {
|
|
|
+ dataList[i].DataTimestamp = dataList[i].DataTimestamp - diffSeconds
|
|
|
+ }
|
|
|
+
|
|
|
+ day, err := utils.GetDaysBetween2Date(utils.FormatDate, startDate, startDateReal)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.Msg = "获取领先滞后的的日期间隔失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ latestDateTime, err := time.ParseInLocation(utils.FormatDate, edbInfo.LatestDate, time.Local)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.Msg = "指标日期转换失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ edbInfo.LatestDate = latestDateTime.AddDate(0, 0, day).Format(utils.FormatDate)
|
|
|
+ }
|
|
|
+ mapping := new(data_manage.ChartEdbInfoMapping)
|
|
|
+ mapping.EdbInfoId = edbInfo.EdbInfoId
|
|
|
+ mapping.EdbInfoCategoryType = edbInfo.EdbInfoType
|
|
|
+ mapping.SourceName = edbInfo.SourceName
|
|
|
+ mapping.Source = edbInfo.Source
|
|
|
+ mapping.EdbCode = edbInfo.EdbCode
|
|
|
+ mapping.EdbName = edbInfo.EdbName
|
|
|
+ mapping.EdbType = edbInfo.EdbType
|
|
|
+ mapping.Frequency = edbInfo.Frequency
|
|
|
+ mapping.Unit = edbInfo.Unit
|
|
|
+ mapping.StartDate = edbInfo.StartDate
|
|
|
+ mapping.EndDate = edbInfo.EndDate
|
|
|
+ mapping.ChartEdbMappingId = 0
|
|
|
+ mapping.ChartInfoId = 0
|
|
|
+ mapping.MaxData = maxData
|
|
|
+ mapping.MinData = minData
|
|
|
+ mapping.IsOrder = false
|
|
|
+ mapping.IsAxis = 1
|
|
|
+ mapping.EdbInfoType = 1
|
|
|
+ mapping.LeadValue = 0
|
|
|
+ mapping.LeadUnit = ""
|
|
|
+ mapping.LeadUnitEn = ""
|
|
|
+ mapping.ChartStyle = ""
|
|
|
+ mapping.ChartColor = ""
|
|
|
+ mapping.PredictChartColor = ""
|
|
|
+ mapping.ChartWidth = 0
|
|
|
+ mapping.LatestDate = edbInfo.LatestDate
|
|
|
+ mapping.DataList = dataList
|
|
|
+
|
|
|
+ resp := new(data_manage.ChartEdbInfoDetailResp)
|
|
|
+ resp.EdbInfo = mapping
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "获取成功"
|
|
|
+ br.Data = resp
|
|
|
+}
|
|
|
+
|
|
|
+// CopyChartInfo
|
|
|
+// @Title 复制并新增图表接口
|
|
|
+// @Description 新增图表接口
|
|
|
+// @Param request body data_manage.CopyAddChartInfoReq true "type json string"
|
|
|
+// @Success 200 {object} data_manage.AddChartInfoResp
|
|
|
+// @router /chart_info/copy [post]
|
|
|
+func (this *ChartInfoController) CopyChartInfo() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+
|
|
|
+ sysUser := this.SysUser
|
|
|
+ if sysUser == nil {
|
|
|
+ br.Msg = "请登录"
|
|
|
+ br.ErrMsg = "请登录,SysUser Is Empty"
|
|
|
+ br.Ret = 408
|
|
|
+ return
|
|
|
+ }
|
|
|
+ deleteCache := true
|
|
|
+ cacheKey := "CACHE_CHART_INFO_ADD_" + strconv.Itoa(sysUser.AdminId)
|
|
|
+ defer func() {
|
|
|
+ if deleteCache {
|
|
|
+ utils.Rc.Delete(cacheKey)
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
|
|
|
+ deleteCache = false
|
|
|
+ br.Msg = "系统处理中,请稍后重试!"
|
|
|
+ br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ var req data_manage.CopyAddChartInfoReq
|
|
|
+ err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "参数解析异常!"
|
|
|
+ br.ErrMsg = "参数解析失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取原图表信息
|
|
|
+ oldChartInfo, err := data_manage.GetChartInfoById(req.ChartInfoId)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取原图表信息失败"
|
|
|
+ br.ErrMsg = "获取原图表信息失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ //校验图表名称是否重复
|
|
|
+ req.ChartName = strings.Trim(req.ChartName, " ")
|
|
|
+ if req.ChartName == "" {
|
|
|
+ br.Msg = "请填写图表名称!"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if req.ChartClassifyId <= 0 {
|
|
|
+ br.Msg = "分类参数错误!"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ chartClassify, err := data_manage.GetChartClassifyById(req.ChartClassifyId)
|
|
|
+ if err != nil {
|
|
|
+ if err.Error() == utils.ErrNoRow() {
|
|
|
+ br.Msg = "分类不存在"
|
|
|
+ br.ErrMsg = "分类不存在"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ br.Msg = "获取分类信息失败"
|
|
|
+ br.ErrMsg = "获取分类信息失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if chartClassify == nil {
|
|
|
+ br.Msg = "分类不存在"
|
|
|
+ br.ErrMsg = "分类不存在"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ //count, err := data_manage.ChartInfoExist("", edbInfoIdStr)
|
|
|
+ //if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
+ // br.Msg = "保存失败"
|
|
|
+ // br.ErrMsg = "判断图表名称是否存在失败,Err:" + err.Error()
|
|
|
+ // return
|
|
|
+ //}
|
|
|
+ //if count > 0 {
|
|
|
+ // br.Msg = "所选指标已存在相同指标"
|
|
|
+ // return
|
|
|
+ //}
|
|
|
+ //判断图表是否存在
|
|
|
+ var condition string
|
|
|
+ var pars []interface{}
|
|
|
+ condition += " AND chart_classify_id=? "
|
|
|
+ pars = append(pars, req.ChartClassifyId)
|
|
|
+
|
|
|
+ condition += " AND chart_name=? AND source = ? "
|
|
|
+ pars = append(pars, req.ChartName, utils.CHART_SOURCE_DEFAULT)
|
|
|
+
|
|
|
+ count, err := data_manage.GetChartInfoCountByCondition(condition, pars)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "判断图表名称是否存在失败"
|
|
|
+ br.ErrMsg = "判断图表名称是否存在失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if count > 0 {
|
|
|
+ br.Msg = "图表已存在,请重新填写"
|
|
|
+ br.IsSendEmail = false
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取原图表关联的指标信息列表
|
|
|
+ edbMappingList, err := data_manage.GetChartEdbMappingList(req.ChartInfoId)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取图表关联的指标信息失败!"
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ //添加图表
|
|
|
+ timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
|
|
|
+ chartInfo := &data_manage.ChartInfo{
|
|
|
+ ChartInfoId: 0,
|
|
|
+ ChartName: req.ChartName,
|
|
|
+ ChartClassifyId: req.ChartClassifyId,
|
|
|
+ SysUserId: sysUser.AdminId,
|
|
|
+ SysUserRealName: sysUser.RealName,
|
|
|
+ UniqueCode: utils.MD5(utils.CHART_PREFIX + "_" + timestamp),
|
|
|
+ CreateTime: time.Now(),
|
|
|
+ ModifyTime: time.Now(),
|
|
|
+ DateType: oldChartInfo.DateType,
|
|
|
+ StartDate: oldChartInfo.StartDate,
|
|
|
+ EndDate: oldChartInfo.EndDate,
|
|
|
+ IsSetName: oldChartInfo.IsSetName,
|
|
|
+ EdbInfoIds: oldChartInfo.EdbInfoIds,
|
|
|
+ ChartType: oldChartInfo.ChartType,
|
|
|
+ Calendar: oldChartInfo.Calendar,
|
|
|
+ SeasonStartDate: oldChartInfo.SeasonStartDate,
|
|
|
+ SeasonEndDate: oldChartInfo.SeasonEndDate,
|
|
|
+ ChartImage: oldChartInfo.ChartImage,
|
|
|
+ BarConfig: oldChartInfo.BarConfig,
|
|
|
+ //Sort: sort,
|
|
|
+ LeftMin: oldChartInfo.LeftMin,
|
|
|
+ LeftMax: oldChartInfo.LeftMax,
|
|
|
+ RightMin: oldChartInfo.RightMin,
|
|
|
+ RightMax: oldChartInfo.RightMax,
|
|
|
+ Disabled: oldChartInfo.Disabled,
|
|
|
+ Source: oldChartInfo.Source,
|
|
|
+ ExtraConfig: oldChartInfo.ExtraConfig,
|
|
|
+ }
|
|
|
+ newId, err := data_manage.AddChartInfo(chartInfo)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "保存失败"
|
|
|
+ br.ErrMsg = "保存失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ chartInfo.ChartInfoId = int(newId)
|
|
|
+
|
|
|
+ // 添加图表与指标的关联关系
|
|
|
+ {
|
|
|
+ mapList := make([]*data_manage.ChartEdbMapping, 0)
|
|
|
+ for _, v := range edbMappingList {
|
|
|
+ timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
|
|
|
+ mapItem := &data_manage.ChartEdbMapping{
|
|
|
+ //ChartEdbMappingId: 0,
|
|
|
+ ChartInfoId: chartInfo.ChartInfoId,
|
|
|
+ EdbInfoId: v.EdbInfoId,
|
|
|
+ CreateTime: time.Now(),
|
|
|
+ ModifyTime: time.Now(),
|
|
|
+ UniqueCode: utils.MD5(utils.CHART_PREFIX + "_" + timestamp),
|
|
|
+ MaxData: v.MaxData,
|
|
|
+ MinData: v.MinData,
|
|
|
+ IsOrder: v.IsOrder,
|
|
|
+ IsAxis: v.IsAxis,
|
|
|
+ EdbInfoType: v.EdbInfoType,
|
|
|
+ LeadValue: v.LeadValue,
|
|
|
+ LeadUnit: v.LeadUnit,
|
|
|
+ ChartStyle: v.ChartStyle,
|
|
|
+ ChartColor: v.ChartColor,
|
|
|
+ ChartWidth: v.ChartWidth,
|
|
|
+ Source: v.Source,
|
|
|
+ }
|
|
|
+ mapList = append(mapList, mapItem)
|
|
|
+ }
|
|
|
+ err = data_manage.AddChartEdbMapping(mapList)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "保存失败"
|
|
|
+ br.ErrMsg = "保存失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //添加es数据
|
|
|
+ go data.EsAddOrEditChartInfo(chartInfo.ChartInfoId)
|
|
|
+ //修改my eta es数据
|
|
|
+ go data.EsAddOrEditMyChartInfoByChartInfoId(chartInfo.ChartInfoId)
|
|
|
+
|
|
|
+ //新增操作日志
|
|
|
+ {
|
|
|
+ chartLog := new(data_manage.ChartInfoLog)
|
|
|
+ chartLog.ChartInfoId = chartInfo.ChartInfoId
|
|
|
+ chartLog.ChartName = req.ChartName
|
|
|
+ chartLog.ChartClassifyId = req.ChartClassifyId
|
|
|
+ chartLog.SysUserId = sysUser.AdminId
|
|
|
+ chartLog.SysUserRealName = sysUser.RealName
|
|
|
+ chartLog.UniqueCode = chartInfo.UniqueCode
|
|
|
+ chartLog.CreateTime = time.Now()
|
|
|
+ chartLog.Content = string(this.Ctx.Input.RequestBody)
|
|
|
+ chartLog.Status = "新增图表"
|
|
|
+ chartLog.Method = this.Ctx.Input.URI()
|
|
|
+ go data_manage.AddChartInfoLog(chartLog)
|
|
|
+ }
|
|
|
+
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "保存成功"
|
|
|
+ br.Data = data_manage.AddChartInfoResp{
|
|
|
+ ChartInfoId: chartInfo.ChartInfoId,
|
|
|
+ UniqueCode: chartInfo.UniqueCode,
|
|
|
+ ChartType: chartInfo.ChartType,
|
|
|
+ }
|
|
|
+ br.IsAddLog = true
|
|
|
+}
|