chart_info.go 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774
  1. package line_equation
  2. import (
  3. "errors"
  4. "github.com/shopspring/decimal"
  5. "hongze/hongze_ETA_mobile_api/models/data_manage"
  6. "hongze/hongze_ETA_mobile_api/models/data_manage/line_equation/request"
  7. "hongze/hongze_ETA_mobile_api/services/data"
  8. "hongze/hongze_ETA_mobile_api/utils"
  9. "math"
  10. "time"
  11. )
  12. type LineEquationResp struct {
  13. AData LineEquationDataResp
  14. BData LineEquationDataResp
  15. R2Data LineEquationDataResp
  16. }
  17. type LineEquationDataResp struct {
  18. MaxData float64
  19. MinData float64
  20. LatestDate string `description:"真实数据的最后日期"`
  21. EdbInfoCategoryType int
  22. ChartColor string
  23. ChartStyle string
  24. PredictChartColor string
  25. ChartType int
  26. ChartWidth int
  27. EdbName string
  28. EdbNameEn string
  29. Unit string
  30. UnitEn string
  31. IsAxis int
  32. DataList []data_manage.EdbDataList
  33. }
  34. // GetChartEdbData 获取图表数据
  35. func GetChartEdbData(chartInfoId int, lineChartInfoConfig request.LineChartInfoReq, getAData, getBData, getR2Data bool) (edbList []*data_manage.ChartEdbInfoMapping, dataResp LineEquationResp, err error, errMsg string) {
  36. // 获取基本信息
  37. mappingList, startDate, endDate, err, errMsg := getConfigData(lineChartInfoConfig)
  38. if err != nil {
  39. return
  40. }
  41. xEdbInfoIdList := lineChartInfoConfig.XEdbInfoIdList
  42. yEdbInfoIdList := lineChartInfoConfig.YEdbInfoIdList
  43. aLineEquationDataResp := LineEquationDataResp{
  44. DataList: make([]data_manage.EdbDataList, 0),
  45. MaxData: 0,
  46. MinData: 0,
  47. ChartColor: "#00f",
  48. ChartStyle: `spline`,
  49. PredictChartColor: `#00f`,
  50. ChartType: 0,
  51. ChartWidth: 3,
  52. EdbName: `弹性系数`,
  53. EdbNameEn: `elastic coefficient`,
  54. IsAxis: 1,
  55. }
  56. bLineEquationDataResp := LineEquationDataResp{
  57. DataList: make([]data_manage.EdbDataList, 0),
  58. MaxData: 0,
  59. MinData: 0,
  60. ChartColor: "#00f",
  61. ChartStyle: `spline`,
  62. PredictChartColor: `#00f`,
  63. ChartType: 0,
  64. ChartWidth: 3,
  65. EdbName: `截距`,
  66. EdbNameEn: `intercept`,
  67. IsAxis: 1,
  68. }
  69. r2LineEquationDataResp := LineEquationDataResp{
  70. DataList: make([]data_manage.EdbDataList, 0),
  71. MaxData: 0,
  72. MinData: 0,
  73. ChartColor: "#00f",
  74. ChartStyle: `spline`,
  75. PredictChartColor: `#00f`,
  76. ChartType: 0,
  77. ChartWidth: 3,
  78. EdbName: `相关系数`,
  79. EdbNameEn: `coefficient of association`,
  80. IsAxis: 1,
  81. }
  82. edbList = make([]*data_manage.ChartEdbInfoMapping, 0)
  83. dataResp = LineEquationResp{
  84. AData: aLineEquationDataResp,
  85. BData: bLineEquationDataResp,
  86. R2Data: r2LineEquationDataResp,
  87. }
  88. var baseEdbInfo *data_manage.ChartEdbInfoMapping
  89. // 获取确定以哪个指标的日期作为基准日期
  90. {
  91. var xEdbInfo, yEdbInfo *data_manage.ChartEdbInfoMapping
  92. for _, v := range mappingList {
  93. if v.EdbInfoId == xEdbInfoIdList[0] {
  94. xEdbInfo = v
  95. }
  96. if v.EdbInfoId == yEdbInfoIdList[0] {
  97. yEdbInfo = v
  98. }
  99. }
  100. if xEdbInfo == nil {
  101. errMsg = `X轴第一个指标异常`
  102. err = errors.New(errMsg)
  103. return
  104. }
  105. if yEdbInfo == nil {
  106. errMsg = `Y轴第一个指标异常`
  107. err = errors.New(errMsg)
  108. return
  109. }
  110. // 时间截面规则:按照什么频率来取不同的截面的问题。原则是:按照X轴和Y轴所选择的第一个指标(X和Y分别有一个第一个指标),两个指标中,以低频的那个作为基准。如果X轴和Y轴是同频的,那以Y轴第一个指标的为准。
  111. frequencyIntMap := map[string]int{
  112. "日度": 1,
  113. "周度": 2,
  114. "旬度": 3,
  115. "月度": 4,
  116. "季度": 5,
  117. "年度": 6,
  118. }
  119. // 如果x是高频 或者 x与y是同频的,那么就是Y轴的第一个指标为主
  120. if frequencyIntMap[xEdbInfo.Frequency] <= frequencyIntMap[yEdbInfo.Frequency] {
  121. baseEdbInfo = yEdbInfo
  122. } else {
  123. // 否则是X轴的第一个指标是低频
  124. baseEdbInfo = xEdbInfo
  125. }
  126. }
  127. // 指标对应的所有数据
  128. chartType := 1 //1:普通图,2:季节性图
  129. calendar := "公历"
  130. edbDataListMap, edbList, err := data.GetEdbDataMapList(chartInfoId, chartType, calendar, startDate, endDate, mappingList)
  131. if err != nil {
  132. return
  133. }
  134. // 获取所有的日期
  135. dateList := make([]string, 0)
  136. for _, v := range edbDataListMap[baseEdbInfo.EdbInfoId] {
  137. dateList = append(dateList, v.DataTime)
  138. }
  139. // 数据整理
  140. // [日期][A指标id:值,B指标id:值]
  141. dateEdbMap, err := handleData(baseEdbInfo.EdbInfoId, edbDataListMap)
  142. if err != nil {
  143. return
  144. }
  145. lenX := len(xEdbInfoIdList)
  146. var isNotAFirst, isNotBFirst, isNotR2First bool
  147. for i, date := range dateList {
  148. coordinateData := make([]utils.Coordinate, 0)
  149. for k := 0; k < lenX; k++ {
  150. xVal, ok1 := dateEdbMap[date][xEdbInfoIdList[k]]
  151. yVal, ok2 := dateEdbMap[date][yEdbInfoIdList[k]]
  152. if !ok1 || !ok2 {
  153. continue
  154. }
  155. tmpCoordinate1 := utils.Coordinate{
  156. X: xVal,
  157. Y: yVal,
  158. }
  159. coordinateData = append(coordinateData, tmpCoordinate1)
  160. }
  161. dataTime, _ := time.ParseInLocation(utils.FormatDate, date, time.Local)
  162. timestamp := dataTime.UnixNano() / 1e6
  163. // 只有存在两个坐标点的时候,才能去计算线性方程和R平方
  164. if len(coordinateData) >= 2 {
  165. a, b := utils.GetLinearResult(coordinateData)
  166. if !math.IsNaN(a) && !math.IsNaN(b) && !math.IsInf(a, 0) && !math.IsInf(b, 0) {
  167. if getAData {
  168. a, _ = decimal.NewFromFloat(a).Round(4).Float64()
  169. dataResp.AData.DataList = append(dataResp.AData.DataList, data_manage.EdbDataList{
  170. EdbDataId: i,
  171. EdbInfoId: 0,
  172. DataTime: date,
  173. DataTimestamp: timestamp,
  174. Value: a,
  175. })
  176. if !isNotAFirst {
  177. dataResp.AData.MinData = a
  178. dataResp.AData.MaxData = a
  179. isNotAFirst = true
  180. }
  181. if dataResp.AData.MinData > a {
  182. dataResp.AData.MinData = a
  183. }
  184. if dataResp.AData.MaxData < a {
  185. dataResp.AData.MaxData = a
  186. }
  187. }
  188. if getBData {
  189. b, _ = decimal.NewFromFloat(b).Round(4).Float64()
  190. dataResp.BData.DataList = append(dataResp.BData.DataList, data_manage.EdbDataList{
  191. EdbDataId: i,
  192. EdbInfoId: 0,
  193. DataTime: date,
  194. DataTimestamp: timestamp,
  195. Value: b,
  196. })
  197. if !isNotBFirst {
  198. dataResp.BData.MinData = b
  199. dataResp.BData.MaxData = b
  200. isNotBFirst = true
  201. }
  202. if dataResp.BData.MinData > b {
  203. dataResp.BData.MinData = b
  204. }
  205. if dataResp.BData.MaxData < b {
  206. dataResp.BData.MaxData = b
  207. }
  208. }
  209. }
  210. // 计算R平方
  211. if getR2Data {
  212. tmpVal := utils.CalculationDecisive(coordinateData)
  213. if math.IsNaN(tmpVal) || math.IsInf(tmpVal, 0) {
  214. continue
  215. }
  216. tmpVal, _ = decimal.NewFromFloat(tmpVal).Round(4).Float64()
  217. dataResp.R2Data.DataList = append(dataResp.R2Data.DataList, data_manage.EdbDataList{
  218. EdbDataId: i,
  219. EdbInfoId: 0,
  220. DataTime: date,
  221. DataTimestamp: timestamp,
  222. Value: tmpVal,
  223. })
  224. if !isNotR2First {
  225. dataResp.R2Data.MinData = tmpVal
  226. dataResp.R2Data.MaxData = tmpVal
  227. isNotR2First = true
  228. }
  229. if dataResp.R2Data.MinData > tmpVal {
  230. dataResp.R2Data.MinData = tmpVal
  231. }
  232. if dataResp.R2Data.MaxData < tmpVal {
  233. dataResp.R2Data.MaxData = tmpVal
  234. }
  235. }
  236. }
  237. }
  238. dataResp.AData.LatestDate = baseEdbInfo.LatestDate
  239. dataResp.AData.EdbInfoCategoryType = baseEdbInfo.EdbInfoCategoryType
  240. dataResp.BData.LatestDate = baseEdbInfo.LatestDate
  241. dataResp.BData.EdbInfoCategoryType = baseEdbInfo.EdbInfoCategoryType
  242. dataResp.R2Data.LatestDate = baseEdbInfo.LatestDate
  243. dataResp.R2Data.EdbInfoCategoryType = baseEdbInfo.EdbInfoCategoryType
  244. return
  245. }
  246. // GetConfigData 获取配置数据
  247. //func GetConfigData(lineChartInfoConfig request.LineChartInfoReq) (mappingList []*data_manage.ChartEdbInfoMapping, startDate, endDate string, err error, errMsg string) {
  248. // return getConfigData(lineChartInfoConfig)
  249. //}
  250. // getConfigData 获取配置数据
  251. func getConfigData(lineChartInfoConfig request.LineChartInfoReq) (mappingList []*data_manage.ChartEdbInfoMapping, startDate, endDate string, err error, errMsg string) {
  252. dateType := lineChartInfoConfig.DateType
  253. switch dateType {
  254. case 1:
  255. startDate = "2000-01-01"
  256. case 2:
  257. startDate = "2010-01-01"
  258. case 3:
  259. startDate = "2015-01-01"
  260. case 4:
  261. //startDate = strconv.Itoa(time.Now().Year()) + "-01-01"
  262. startDate = "2021-01-01"
  263. case 5:
  264. startDate = lineChartInfoConfig.StartDate + "-01"
  265. endDate = lineChartInfoConfig.EndDate + "-01"
  266. case 6:
  267. startDate = lineChartInfoConfig.StartDate + "-01"
  268. case 7:
  269. startDate = "2018-01-01"
  270. case 8:
  271. startDate = "2019-01-01"
  272. case 9:
  273. startDate = "2020-01-01"
  274. case 11:
  275. startDate = "2022-01-01"
  276. }
  277. //指标数据
  278. edbInfoIdList := make([]int, 0)
  279. {
  280. edbInfoIdMap := make(map[int]int, 0)
  281. for _, edbInfoId := range lineChartInfoConfig.XEdbInfoIdList {
  282. edbInfoIdMap[edbInfoId] = edbInfoId
  283. }
  284. for _, edbInfoId := range lineChartInfoConfig.YEdbInfoIdList {
  285. edbInfoIdMap[edbInfoId] = edbInfoId
  286. }
  287. for _, edbInfoId := range edbInfoIdMap {
  288. edbInfoIdList = append(edbInfoIdList, edbInfoId)
  289. }
  290. }
  291. mappingList, err = data_manage.GetChartEdbMappingListByEdbInfoIdList(edbInfoIdList)
  292. if err != nil {
  293. errMsg = `获取失败`
  294. err = errors.New("获取图表,指标信息失败,Err:" + err.Error())
  295. return
  296. }
  297. return
  298. }
  299. // handleData 数据处理
  300. func handleData(baseEdbInfoId int, edbDataListMap map[int][]*data_manage.EdbDataList) (dateEdbMap map[string]map[int]float64, err error) {
  301. dateEdbMap = make(map[string]map[int]float64) // [日期][A指标id:值,B指标id:值]
  302. for edbInfoId, edbDataList := range edbDataListMap {
  303. if edbInfoId != baseEdbInfoId {
  304. // 用上期的数据补充当期的数据处理
  305. handleDataMap := make(map[string]float64)
  306. err = data_manage.HandleDataByPreviousData(edbDataList, handleDataMap)
  307. if err != nil {
  308. return
  309. }
  310. for date, val := range handleDataMap {
  311. item, ok := dateEdbMap[date]
  312. if ok {
  313. item[edbInfoId] = val
  314. } else {
  315. item = map[int]float64{
  316. edbInfoId: val,
  317. }
  318. }
  319. dateEdbMap[date] = item
  320. }
  321. } else {
  322. for _, edbData := range edbDataList {
  323. item, ok := dateEdbMap[edbData.DataTime]
  324. if ok {
  325. item[edbInfoId] = edbData.Value
  326. } else {
  327. item = map[int]float64{
  328. edbInfoId: edbData.Value,
  329. }
  330. }
  331. dateEdbMap[edbData.DataTime] = item
  332. }
  333. }
  334. }
  335. return
  336. }
  337. // BatchAddChartInfo 批量添加图表
  338. //func BatchAddChartInfo(batchAddChartReq []request.AddChart, lineChartInfoConfig request.LineChartInfoReq, sysUser *system.Admin) (batchAddChartList []line_equation.BatchAddChart, err error, errMsg string, isSendEmail bool) {
  339. // source := utils.CHART_SOURCE_LINE_EQUATION
  340. // // 获取需要
  341. // for k, v := range batchAddChartReq {
  342. // v.ChartName = strings.Trim(v.ChartName, " ")
  343. // batchAddChartReq[k] = v
  344. //
  345. // if v.ChartName == "" {
  346. // errMsg = "请填写图表名称!"
  347. // err = errors.New(errMsg)
  348. // isSendEmail = false
  349. // return
  350. // }
  351. // if v.ChartClassifyId <= 0 {
  352. // errMsg = "请填写图表名称!"
  353. // err = errors.New(errMsg)
  354. // isSendEmail = false
  355. // return
  356. // }
  357. //
  358. // chartClassify, tmpErr := data_manage.GetChartClassifyById(v.ChartClassifyId)
  359. // if tmpErr != nil {
  360. // if tmpErr.Error() == utils.ErrNoRow() {
  361. // errMsg = "分类不存在"
  362. // err = errors.New(errMsg)
  363. // isSendEmail = false
  364. // return
  365. // }
  366. // errMsg = "获取分类信息失败"
  367. // err = errors.New("获取分类信息失败,Err:" + tmpErr.Error())
  368. // return
  369. // }
  370. // if chartClassify == nil {
  371. // errMsg = "分类不存在"
  372. // err = errors.New(errMsg)
  373. // isSendEmail = false
  374. // return
  375. // }
  376. //
  377. // // 判断图表是否存在
  378. // var condition string
  379. // var pars []interface{}
  380. // condition += " AND chart_name=? AND source = ? "
  381. // pars = append(pars, v.ChartName, source)
  382. // count, tmpErr := data_manage.GetChartInfoCountByCondition(condition, pars)
  383. // if tmpErr != nil {
  384. // errMsg = "判断图表名称是否存在失败"
  385. // err = errors.New("判断图表名称是否存在失败,Err:" + tmpErr.Error())
  386. // return
  387. // }
  388. //
  389. // if count > 0 {
  390. // errMsg = "图表已存在,请重新填写"
  391. // err = errors.New(errMsg)
  392. // isSendEmail = false
  393. // return
  394. // }
  395. // }
  396. //
  397. // edbList, _, _, err, errMsg := getConfigData(lineChartInfoConfig)
  398. //
  399. // var edbInfoIdArr []int
  400. // for _, v := range edbList {
  401. // edbInfoIdArr = append(edbInfoIdArr, v.EdbInfoId)
  402. // }
  403. // disableVal := data.CheckIsDisableChart(edbInfoIdArr)
  404. //
  405. // sort.Ints(edbInfoIdArr)
  406. // var edbInfoIdArrStr []string
  407. // for _, v := range edbInfoIdArr {
  408. // edbInfoIdArrStr = append(edbInfoIdArrStr, strconv.Itoa(v))
  409. // }
  410. // edbInfoIdStr := strings.Join(edbInfoIdArrStr, ",")
  411. //
  412. // // 批量配置
  413. // lineChartInfoConfigByte, err := json.Marshal(lineChartInfoConfig)
  414. // if err != nil {
  415. // return
  416. // }
  417. // multipleGraphConfig := &data_manage.MultipleGraphConfig{
  418. // Curve: string(lineChartInfoConfigByte),
  419. // SysUserId: sysUser.AdminId,
  420. // SysUserRealName: sysUser.RealName,
  421. // ModifyTime: time.Now(),
  422. // CreateTime: time.Now(),
  423. // }
  424. //
  425. // // 多图
  426. // batchAddChartList = make([]line_equation.BatchAddChart, 0)
  427. // for _, v := range batchAddChartReq {
  428. // tmpLineChartInfoConfig := lineChartInfoConfig
  429. // tmpLineChartInfoConfig.Source = v.Source
  430. // tmpLineChartInfoConfigByte, tmpErr := json.Marshal(tmpLineChartInfoConfig)
  431. // if tmpErr != nil {
  432. // err = tmpErr
  433. // return
  434. // }
  435. //
  436. // chartInfo := &data_manage.ChartInfo{
  437. // ChartInfoId: 0,
  438. // ChartName: v.ChartName,
  439. // //ChartNameEn: v.ChartName,
  440. // ChartClassifyId: v.ChartClassifyId,
  441. // SysUserId: sysUser.AdminId,
  442. // SysUserRealName: sysUser.RealName,
  443. // UniqueCode: utils.MD5(utils.CHART_PREFIX + "_" + fmt.Sprint(v.Source) + "_" + strconv.FormatInt(time.Now().UnixNano(), 10)),
  444. // CreateTime: time.Now(),
  445. // ModifyTime: time.Now(),
  446. // DateType: lineChartInfoConfig.DateType,
  447. // StartDate: lineChartInfoConfig.StartDate,
  448. // EndDate: lineChartInfoConfig.EndDate,
  449. // IsSetName: 0,
  450. // EdbInfoIds: edbInfoIdStr,
  451. // ChartType: 1,
  452. // Calendar: "公历",
  453. // SeasonStartDate: "",
  454. // SeasonEndDate: "",
  455. // ChartImage: v.ChartImage,
  456. // Sort: 0,
  457. // LeftMin: v.LeftMin,
  458. // LeftMax: v.LeftMax,
  459. // RightMin: "",
  460. // RightMax: "",
  461. // Disabled: disableVal,
  462. // BarConfig: "",
  463. // Source: source,
  464. // ExtraConfig: string(tmpLineChartInfoConfigByte),
  465. // }
  466. //
  467. // // 指标信息
  468. // mapList := make([]*data_manage.ChartEdbMapping, 0)
  469. // for _, edbInfo := range edbList {
  470. // mapItem := new(data_manage.ChartEdbMapping)
  471. // mapItem.EdbInfoId = edbInfo.EdbInfoId
  472. // mapItem.CreateTime = time.Now()
  473. // mapItem.ModifyTime = time.Now()
  474. // timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
  475. //
  476. // mapItem.UniqueCode = utils.MD5(utils.CHART_PREFIX + "_" + fmt.Sprint(v.Source) + "_" + timestamp + "_" + strconv.Itoa(edbInfo.EdbInfoId))
  477. // mapItem.IsOrder = true
  478. // mapItem.IsAxis = 1
  479. // mapItem.EdbInfoType = 1
  480. // mapItem.Source = source
  481. // mapList = append(mapList, mapItem)
  482. // }
  483. //
  484. // // 批量的关系图
  485. // multipleGraphConfigChartMapping := &data_manage.MultipleGraphConfigChartMapping{
  486. // //Id: 0,
  487. // //MultipleGraphConfigId: 0,
  488. // //ChartInfoId: 0,
  489. // Source: v.Source,
  490. // ModifyTime: time.Now(),
  491. // CreateTime: time.Now(),
  492. // }
  493. //
  494. // batchAddChartList = append(batchAddChartList, line_equation.BatchAddChart{
  495. // ChartInfo: chartInfo,
  496. // EdbMappingList: mapList,
  497. // MultipleGraphConfigChartMapping: multipleGraphConfigChartMapping,
  498. // })
  499. // }
  500. //
  501. // // 批量创建
  502. // err = line_equation.CreateLineEquationChartAndEdb(multipleGraphConfig, batchAddChartList)
  503. //
  504. // // 更改es
  505. // for _, v := range batchAddChartList {
  506. // //添加es数据
  507. // go data.EsAddOrEditChartInfo(v.ChartInfo.ChartInfoId)
  508. // }
  509. //
  510. // return
  511. //}
  512. // BatchSaveChartInfo 批量添加编辑图表
  513. //func BatchSaveChartInfo(multipleGraphConfigId int, batchAddChartReq []request.AddChart, lineChartInfoConfig request.LineChartInfoReq, sysUser *system.Admin) (batchAddChartList []line_equation.BatchAddChart, err error, errMsg string, isSendEmail bool) {
  514. // // 获取统一配置
  515. // multipleGraphConfig, err := data_manage.GetMultipleGraphConfigById(multipleGraphConfigId)
  516. // if err != nil {
  517. // errMsg = `获取失败`
  518. // err = errors.New(`获取配置失败,ERR:` + err.Error())
  519. // return
  520. // }
  521. // // 获取已经关联的图表
  522. // chartMappingList, err := data_manage.GetMultipleGraphConfigChartMappingListById(multipleGraphConfig.MultipleGraphConfigId)
  523. // if err != nil {
  524. // errMsg = `获取失败`
  525. // err = errors.New(`获取关联图表配置失败,ERR:` + err.Error())
  526. // return
  527. // }
  528. //
  529. // // 已经存在关联的图表map
  530. // existSourceChartMap := make(map[int]*data_manage.MultipleGraphConfigChartMapping)
  531. // // 已经存在的图表map
  532. // existChartInfoMap := make(map[int]*data_manage.ChartInfo)
  533. // for _, v := range chartMappingList {
  534. // existSourceChartMap[v.Source] = v
  535. //
  536. // chartInfo, tmpErr := data_manage.GetChartInfoById(v.ChartInfoId)
  537. // if tmpErr != nil && tmpErr.Error() != utils.ErrNoRow() {
  538. // err = tmpErr
  539. // return
  540. // }
  541. // if chartInfo != nil {
  542. // existChartInfoMap[v.Source] = chartInfo
  543. // }
  544. // }
  545. //
  546. // source := utils.CHART_SOURCE_LINE_EQUATION
  547. // // 获取需要
  548. // for k, v := range batchAddChartReq {
  549. // v.ChartName = strings.Trim(v.ChartName, " ")
  550. // batchAddChartReq[k] = v
  551. //
  552. // if v.ChartName == "" {
  553. // errMsg = "请填写图表名称!"
  554. // err = errors.New(errMsg)
  555. // isSendEmail = false
  556. // return
  557. // }
  558. // if v.ChartClassifyId <= 0 {
  559. // errMsg = "请填写图表名称!"
  560. // err = errors.New(errMsg)
  561. // isSendEmail = false
  562. // return
  563. // }
  564. //
  565. // chartClassify, tmpErr := data_manage.GetChartClassifyById(v.ChartClassifyId)
  566. // if tmpErr != nil {
  567. // if tmpErr.Error() == utils.ErrNoRow() {
  568. // errMsg = "分类不存在"
  569. // err = errors.New(errMsg)
  570. // isSendEmail = false
  571. // return
  572. // }
  573. // errMsg = "获取分类信息失败"
  574. // err = errors.New("获取分类信息失败,Err:" + tmpErr.Error())
  575. // return
  576. // }
  577. // if chartClassify == nil {
  578. // errMsg = "分类不存在"
  579. // err = errors.New(errMsg)
  580. // isSendEmail = false
  581. // return
  582. // }
  583. //
  584. // // 判断图表是否存在
  585. // var condition string
  586. // var pars []interface{}
  587. // condition += " AND chart_name=? AND source = ? "
  588. // pars = append(pars, v.ChartName, source)
  589. //
  590. // // 已经创建了图表的类型
  591. // if sourceChart, ok := existChartInfoMap[v.Source]; ok {
  592. // condition += " AND chart_info_id != ? "
  593. // pars = append(pars, sourceChart.ChartInfoId)
  594. // }
  595. //
  596. // count, tmpErr := data_manage.GetChartInfoCountByCondition(condition, pars)
  597. // if tmpErr != nil {
  598. // errMsg = "判断图表名称是否存在失败"
  599. // err = errors.New("判断图表名称是否存在失败,Err:" + tmpErr.Error())
  600. // return
  601. // }
  602. //
  603. // if count > 0 {
  604. // errMsg = "图表已存在,请重新填写"
  605. // err = errors.New(errMsg)
  606. // isSendEmail = false
  607. // return
  608. // }
  609. // }
  610. //
  611. // edbList, _, _, err, errMsg := getConfigData(lineChartInfoConfig)
  612. //
  613. // var edbInfoIdArr []int
  614. // for _, v := range edbList {
  615. // edbInfoIdArr = append(edbInfoIdArr, v.EdbInfoId)
  616. // }
  617. // disableVal := data.CheckIsDisableChart(edbInfoIdArr)
  618. //
  619. // sort.Ints(edbInfoIdArr)
  620. // var edbInfoIdArrStr []string
  621. // for _, v := range edbInfoIdArr {
  622. // edbInfoIdArrStr = append(edbInfoIdArrStr, strconv.Itoa(v))
  623. // }
  624. // edbInfoIdStr := strings.Join(edbInfoIdArrStr, ",")
  625. //
  626. // // 批量配置
  627. // lineChartInfoConfigByte, err := json.Marshal(lineChartInfoConfig)
  628. // if err != nil {
  629. // return
  630. // }
  631. // multipleGraphConfig.Curve = string(lineChartInfoConfigByte)
  632. // multipleGraphConfig.ModifyTime = time.Now()
  633. // updateMultipleGraphConfigCols := []string{"Curve", "ModifyTime"}
  634. // updateChartCols := []string{"ChartName", "DateType", "StartDate", "EndDate", "EdbInfoIds", "LeftMin", "LeftMax", "Disabled", "ExtraConfig"}
  635. //
  636. // // 多图
  637. // batchAddChartList = make([]line_equation.BatchAddChart, 0)
  638. // for _, v := range batchAddChartReq {
  639. // tmpLineChartInfoConfig := lineChartInfoConfig
  640. // tmpLineChartInfoConfig.Source = v.Source
  641. // tmpLineChartInfoConfigByte, tmpErr := json.Marshal(tmpLineChartInfoConfig)
  642. // if tmpErr != nil {
  643. // err = tmpErr
  644. // return
  645. // }
  646. //
  647. // var multipleGraphConfigChartMapping *data_manage.MultipleGraphConfigChartMapping
  648. // // 已经创建了图表的类型
  649. // chartInfo, ok := existChartInfoMap[v.Source]
  650. // if ok {
  651. // chartInfo.ChartName = v.ChartName
  652. // chartInfo.DateType = lineChartInfoConfig.DateType
  653. // chartInfo.StartDate = lineChartInfoConfig.StartDate
  654. // chartInfo.EndDate = lineChartInfoConfig.EndDate
  655. // chartInfo.EdbInfoIds = edbInfoIdStr
  656. // chartInfo.LeftMin = v.LeftMin
  657. // chartInfo.LeftMax = v.LeftMax
  658. // chartInfo.Disabled = disableVal
  659. // chartInfo.ExtraConfig = string(tmpLineChartInfoConfigByte)
  660. // //updateChartInfoList
  661. //
  662. // tmpMultipleGraphConfigChartMapping, ok2 := existSourceChartMap[v.Source]
  663. // if !ok2 {
  664. // err = errors.New("找不到对应的统一配置关系")
  665. // return
  666. // }
  667. // multipleGraphConfigChartMapping = tmpMultipleGraphConfigChartMapping
  668. // } else {
  669. // chartInfo = &data_manage.ChartInfo{
  670. // ChartInfoId: 0,
  671. // ChartName: v.ChartName,
  672. // //ChartNameEn: v.ChartName,
  673. // ChartClassifyId: v.ChartClassifyId,
  674. // SysUserId: sysUser.AdminId,
  675. // SysUserRealName: sysUser.RealName,
  676. // UniqueCode: utils.MD5(utils.CHART_PREFIX + "_" + fmt.Sprint(v.Source) + "_" + strconv.FormatInt(time.Now().UnixNano(), 10)),
  677. // CreateTime: time.Now(),
  678. // ModifyTime: time.Now(),
  679. // DateType: lineChartInfoConfig.DateType,
  680. // StartDate: lineChartInfoConfig.StartDate,
  681. // EndDate: lineChartInfoConfig.EndDate,
  682. // IsSetName: 0,
  683. // EdbInfoIds: edbInfoIdStr,
  684. // ChartType: 1,
  685. // Calendar: "公历",
  686. // SeasonStartDate: "",
  687. // SeasonEndDate: "",
  688. // ChartImage: "",
  689. // Sort: 0,
  690. // LeftMin: v.LeftMin,
  691. // LeftMax: v.LeftMax,
  692. // RightMin: "",
  693. // RightMax: "",
  694. // Disabled: disableVal,
  695. // BarConfig: "",
  696. // Source: source,
  697. // ExtraConfig: string(tmpLineChartInfoConfigByte),
  698. // }
  699. //
  700. // // 批量配置的关系图
  701. // if tmpMultipleGraphConfigChartMapping, ok2 := existSourceChartMap[v.Source]; ok2 {
  702. // multipleGraphConfigChartMapping = tmpMultipleGraphConfigChartMapping
  703. // } else {
  704. // multipleGraphConfigChartMapping = &data_manage.MultipleGraphConfigChartMapping{
  705. // //Id: 0,
  706. // //MultipleGraphConfigId: 0,
  707. // //ChartInfoId: 0,
  708. // Source: v.Source,
  709. // ModifyTime: time.Now(),
  710. // CreateTime: time.Now(),
  711. // }
  712. // }
  713. //
  714. // }
  715. //
  716. // // 指标信息
  717. // mapList := make([]*data_manage.ChartEdbMapping, 0)
  718. // for _, edbInfo := range edbList {
  719. // mapItem := new(data_manage.ChartEdbMapping)
  720. // mapItem.EdbInfoId = edbInfo.EdbInfoId
  721. // mapItem.CreateTime = time.Now()
  722. // mapItem.ModifyTime = time.Now()
  723. // timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
  724. //
  725. // mapItem.UniqueCode = utils.MD5(utils.CHART_PREFIX + "_" + fmt.Sprint(v.Source) + "_" + timestamp + "_" + strconv.Itoa(edbInfo.EdbInfoId))
  726. // mapItem.IsOrder = true
  727. // mapItem.IsAxis = 1
  728. // mapItem.EdbInfoType = 1
  729. // mapItem.Source = source
  730. // mapList = append(mapList, mapItem)
  731. // }
  732. //
  733. // batchAddChartList = append(batchAddChartList, line_equation.BatchAddChart{
  734. // ChartInfo: chartInfo,
  735. // EdbMappingList: mapList,
  736. // MultipleGraphConfigChartMapping: multipleGraphConfigChartMapping,
  737. // })
  738. // }
  739. //
  740. // // 批量创建
  741. // err = line_equation.CreateAndEditLineEquationChartAndEdb(multipleGraphConfig, batchAddChartList, updateMultipleGraphConfigCols, updateChartCols)
  742. //
  743. // // 更改es
  744. // for _, v := range batchAddChartList {
  745. // //添加es数据
  746. // go data.EsAddOrEditChartInfo(v.ChartInfo.ChartInfoId)
  747. // }
  748. // return
  749. //}