multiple_graph_config.go 57 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791
  1. package data_manage
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "hongze/hz_eta_api/models"
  6. "hongze/hz_eta_api/models/data_manage"
  7. "hongze/hz_eta_api/models/data_manage/request"
  8. "hongze/hz_eta_api/models/data_manage/response"
  9. "hongze/hz_eta_api/models/system"
  10. "hongze/hz_eta_api/services/data"
  11. correlationServ "hongze/hz_eta_api/services/data/correlation"
  12. "hongze/hz_eta_api/utils"
  13. "math"
  14. "strconv"
  15. "strings"
  16. "time"
  17. )
  18. //多图配置
  19. // MultipleGraphConfigSave
  20. // @Title 保存配置接口
  21. // @Description 保存配置接口
  22. // @Param request body request.SaveMultipleGraphConfigReq true "type json string"
  23. // @Success Ret=200 返回图表id
  24. // @router /multiple_graph/config/save [post]
  25. func (this *ChartInfoController) MultipleGraphConfigSave() {
  26. br := new(models.BaseResponse).Init()
  27. defer func() {
  28. this.Data["json"] = br
  29. this.ServeJSON()
  30. }()
  31. sysUser := this.SysUser
  32. if sysUser == nil {
  33. br.Msg = "请登录"
  34. br.ErrMsg = "请登录,SysUser Is Empty"
  35. br.Ret = 408
  36. return
  37. }
  38. var req request.SaveMultipleGraphConfigReq
  39. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  40. if err != nil {
  41. br.Msg = "参数解析异常!"
  42. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  43. return
  44. }
  45. if req.EdbInfoIdA <= 0 {
  46. br.Msg = "指标A未选择"
  47. br.IsSendEmail = false
  48. return
  49. }
  50. _, err = data_manage.GetEdbInfoById(req.EdbInfoIdA)
  51. if err != nil {
  52. br.Msg = "指标A异常"
  53. br.ErrMsg = "指标A异常,err:" + err.Error()
  54. if err.Error() == utils.ErrNoRow() {
  55. br.Msg = `指标A不存在`
  56. br.IsSendEmail = false
  57. }
  58. return
  59. }
  60. if req.EdbInfoIdB <= 0 {
  61. br.Msg = "指标B未选择"
  62. br.IsSendEmail = false
  63. return
  64. }
  65. _, err = data_manage.GetEdbInfoById(req.EdbInfoIdB)
  66. if err != nil {
  67. br.Msg = "指标B异常"
  68. br.ErrMsg = "指标B异常,err:" + err.Error()
  69. if err.Error() == utils.ErrNoRow() {
  70. br.Msg = `指标B不存在`
  71. br.IsSendEmail = false
  72. }
  73. return
  74. }
  75. curveStrByte, err := json.Marshal(req.Curve)
  76. if err != nil {
  77. br.Msg = `曲线图配置异常`
  78. br.ErrMsg = `曲线图配置异常,ERR:` + err.Error()
  79. return
  80. }
  81. if req.Correlation.LeadValue <= 0 {
  82. br.Msg = `分析周期不允许设置为负数或0`
  83. br.IsSendEmail = false
  84. return
  85. }
  86. correlationStrByte, err := json.Marshal(req.Correlation)
  87. if err != nil {
  88. br.Msg = `相关性配置异常`
  89. br.ErrMsg = `相关性配置异常,ERR:` + err.Error()
  90. return
  91. }
  92. rollingCorrelationStrByte, err := json.Marshal(req.RollingCorrelation)
  93. if err != nil {
  94. br.Msg = `滚动相关性配置异常`
  95. br.ErrMsg = `滚动相关性配置异常,ERR:` + err.Error()
  96. return
  97. }
  98. var multipleGraphConfig *data_manage.MultipleGraphConfig
  99. if req.MultipleGraphConfigId > 0 {
  100. multipleGraphConfig, err = data_manage.GetMultipleGraphConfigById(req.MultipleGraphConfigId)
  101. if err != nil {
  102. br.Msg = `不存在该配置`
  103. br.ErrMsg = `不存在该配置`
  104. return
  105. }
  106. multipleGraphConfig.EdbInfoIdA = req.EdbInfoIdA
  107. multipleGraphConfig.EdbInfoIdB = req.EdbInfoIdB
  108. multipleGraphConfig.Curve = string(curveStrByte)
  109. multipleGraphConfig.Correlation = string(correlationStrByte)
  110. multipleGraphConfig.RollingCorrelation = string(rollingCorrelationStrByte)
  111. multipleGraphConfig.ModifyTime = time.Now()
  112. err = multipleGraphConfig.Update([]string{"EdbInfoIdA", "EdbInfoIdB", "Curve", "Correlation", "RollingCorrelation", "ModifyTime"})
  113. } else {
  114. multipleGraphConfig = &data_manage.MultipleGraphConfig{
  115. //MultipleGraphConfigId: 0,
  116. EdbInfoIdA: req.EdbInfoIdA,
  117. EdbInfoIdB: req.EdbInfoIdB,
  118. Curve: string(curveStrByte),
  119. Correlation: string(correlationStrByte),
  120. RollingCorrelation: string(rollingCorrelationStrByte),
  121. SysUserId: this.SysUser.AdminId,
  122. SysUserRealName: this.SysUser.RealName,
  123. ModifyTime: time.Now(),
  124. CreateTime: time.Now(),
  125. }
  126. err = data_manage.AddMultipleGraphConfig(multipleGraphConfig)
  127. }
  128. if err != nil {
  129. br.Msg = `保存失败`
  130. br.ErrMsg = `保存失败,Err:` + err.Error()
  131. return
  132. }
  133. br.Ret = 200
  134. br.Success = true
  135. br.Msg = "保存成功"
  136. br.Data = multipleGraphConfig
  137. br.IsAddLog = true
  138. }
  139. // MultipleGraphPreview
  140. // @Title 批量添加图表的预览接口
  141. // @Description 批量添加图表的预览接口
  142. // @Param request body request.SaveMultipleGraphConfigReq true "type json string"
  143. // @Success Ret=200 返回图表id
  144. // @router /multiple_graph/preview [post]
  145. func (this *ChartInfoController) MultipleGraphPreview() {
  146. br := new(models.BaseResponse).Init()
  147. defer func() {
  148. this.Data["json"] = br
  149. this.ServeJSON()
  150. }()
  151. sysUser := this.SysUser
  152. if sysUser == nil {
  153. br.Msg = "请登录"
  154. br.ErrMsg = "请登录,SysUser Is Empty"
  155. br.Ret = 408
  156. return
  157. }
  158. var req request.SaveMultipleGraphConfigReq
  159. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  160. if err != nil {
  161. br.Msg = "参数解析异常!"
  162. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  163. return
  164. }
  165. mappingList, err := data_manage.GetChartEdbMappingListByEdbInfoIdList([]int{req.EdbInfoIdA, req.EdbInfoIdB})
  166. if err != nil {
  167. br.Msg = "获取失败"
  168. br.ErrMsg = "获取图表,指标信息失败,Err:" + err.Error()
  169. return
  170. }
  171. var edbInfoMappingA, edbInfoMappingB *data_manage.ChartEdbInfoMapping
  172. for _, v := range mappingList {
  173. if v.EdbInfoId == req.EdbInfoIdA {
  174. edbInfoMappingA = v
  175. }
  176. if v.EdbInfoId == req.EdbInfoIdB {
  177. edbInfoMappingB = v
  178. }
  179. }
  180. if edbInfoMappingA == nil {
  181. br.Msg = "指标A不存在"
  182. br.IsSendEmail = false
  183. return
  184. }
  185. if edbInfoMappingB == nil {
  186. br.Msg = "指标B不存在"
  187. br.IsSendEmail = false
  188. return
  189. }
  190. resp := response.PreviewMultipleGraphConfigResp{}
  191. chartInfo := new(data_manage.ChartInfoView)
  192. chartInfo.Calendar = `公历`
  193. chartInfo.ChartName = edbInfoMappingA.EdbName + "与" + edbInfoMappingB.EdbName
  194. // 曲线图表信息
  195. {
  196. tmpChartInfo := *chartInfo
  197. curveConf := req.Curve
  198. startDate, endDate := utils.GetDateByDateType(curveConf.DateType, curveConf.StartDate, curveConf.EndDate)
  199. edbInfoType := 0
  200. if curveConf.EdbInfoType {
  201. edbInfoType = 1
  202. }
  203. for _, v := range mappingList {
  204. v.EdbInfoType = 1
  205. v.IsOrder = false
  206. if v.EdbInfoId == req.EdbInfoIdB {
  207. v.LeadValue = curveConf.LeadValue
  208. v.LeadUnit = curveConf.LeadUnit
  209. v.EdbInfoType = edbInfoType
  210. v.IsOrder = curveConf.IsOrder
  211. }
  212. }
  213. // 获取图表中的指标数据
  214. edbList, _, _, _, err, errMsg := data.GetChartEdbData(tmpChartInfo.ChartInfoId, tmpChartInfo.ChartType, tmpChartInfo.Calendar, startDate, endDate, mappingList, tmpChartInfo.ExtraConfig)
  215. if err != nil {
  216. br.Msg = "获取失败"
  217. if errMsg != `` {
  218. br.Msg = errMsg
  219. }
  220. br.ErrMsg = "获取图表,指标信息失败,Err:" + err.Error()
  221. return
  222. }
  223. warnEdbList := make([]string, 0)
  224. tmpEdbList := make([]data_manage.ChartEdbInfoMapping, 0)
  225. for _, v := range edbList {
  226. if v.IsNullData {
  227. warnEdbList = append(warnEdbList, v.EdbName+"("+v.EdbCode+")")
  228. }
  229. chartEdbInfoMapping := *v
  230. chartEdbInfoMapping.IsOrder = false
  231. if v.EdbInfoId == req.EdbInfoIdA {
  232. chartEdbInfoMapping.IsAxis = 1
  233. chartEdbInfoMapping.MinData = curveConf.LeftMin
  234. chartEdbInfoMapping.MaxData = curveConf.LeftMax
  235. chartEdbInfoMapping.ChartColor = `#00F`
  236. chartEdbInfoMapping.LeadValue = curveConf.LeadValue
  237. chartEdbInfoMapping.LeadUnit = curveConf.LeadUnit
  238. chartEdbInfoMapping.ChartWidth = 3
  239. chartEdbInfoMapping.EdbInfoType = edbInfoType
  240. } else {
  241. chartEdbInfoMapping.IsAxis = 0
  242. chartEdbInfoMapping.MinData = curveConf.RightMin
  243. chartEdbInfoMapping.MaxData = curveConf.RightMax
  244. chartEdbInfoMapping.ChartColor = `#F00`
  245. chartEdbInfoMapping.LeadValue = curveConf.LeadValue
  246. chartEdbInfoMapping.LeadUnit = curveConf.LeadUnit
  247. chartEdbInfoMapping.ChartWidth = 1
  248. chartEdbInfoMapping.IsOrder = curveConf.IsOrder
  249. chartEdbInfoMapping.EdbInfoType = edbInfoType
  250. }
  251. tmpEdbList = append(tmpEdbList, chartEdbInfoMapping)
  252. }
  253. if len(warnEdbList) > 0 {
  254. tmpChartInfo.WarnMsg = `图表引用指标异常,异常指标:` + strings.Join(warnEdbList, ",")
  255. }
  256. tmpChartInfo.Source = utils.CHART_SOURCE_DEFAULT
  257. tmpChartInfo.DateType = curveConf.DateType
  258. tmpChartInfo.StartDate = startDate
  259. tmpChartInfo.EndDate = endDate
  260. tmpChartInfo.ChartType = utils.CHART_TYPE_CURVE
  261. resp.CurveData = response.CurveResp{
  262. ChartInfo: tmpChartInfo,
  263. EdbInfoList: tmpEdbList,
  264. }
  265. }
  266. // 相关性图表信息
  267. {
  268. correlationConf := req.Correlation
  269. // 配置了数据才有返回
  270. if correlationConf.LeadValue > 0 {
  271. tmpChartInfo := *chartInfo
  272. moveUnitDays, ok := utils.FrequencyDaysMap[correlationConf.CalculateUnit]
  273. if !ok {
  274. br.Msg = "错误的分析周期"
  275. br.IsSendEmail = false
  276. return
  277. }
  278. startDate := time.Now().AddDate(0, 0, -correlationConf.CalculateValue*moveUnitDays).Format(utils.FormatDate)
  279. endDate := time.Now().Format(utils.FormatDate)
  280. xEdbIdValue, yDataList, e := correlationServ.GetChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB, correlationConf.LeadValue, correlationConf.LeadUnit, startDate, endDate)
  281. if e != nil {
  282. br.Msg = "获取失败"
  283. br.ErrMsg = "获取相关性图表, 图表计算值失败, Err:" + e.Error()
  284. return
  285. }
  286. tmpChartInfo.ChartName += fmt.Sprint(`(`, correlationConf.CalculateValue, correlationConf.CalculateUnit, `)`)
  287. tmpChartInfo.Source = utils.CHART_SOURCE_CORRELATION
  288. resp.CorrelationData = response.CorrelationResp{
  289. ChartInfo: tmpChartInfo,
  290. EdbInfoList: mappingList,
  291. XEdbIdValue: xEdbIdValue,
  292. YDataList: yDataList,
  293. CorrelationChartInfo: data_manage.CorrelationInfo{
  294. LeadValue: correlationConf.LeadValue,
  295. LeadUnit: correlationConf.LeadUnit,
  296. StartDate: startDate,
  297. EndDate: endDate,
  298. EdbInfoIdFirst: edbInfoMappingA.EdbInfoId,
  299. EdbInfoIdSecond: edbInfoMappingB.EdbInfoId,
  300. },
  301. }
  302. }
  303. }
  304. // 滚动相关性图表信息
  305. {
  306. correlationConf := req.Correlation
  307. rollingCorrelationConfList := req.RollingCorrelation
  308. // 配置了数据才有返回
  309. if correlationConf.LeadValue > 0 {
  310. //moveUnitDays, ok := utils.FrequencyDaysMap[correlationConf.CalculateUnit]
  311. //if !ok {
  312. // br.Msg = "错误的分析周期"
  313. // br.IsSendEmail = false
  314. // return
  315. //}
  316. //startDate := time.Now().AddDate(0, 0, -correlationConf.CalculateValue*moveUnitDays).Format(utils.FormatDate)
  317. //endDate := time.Now().Format(utils.FormatDate)
  318. // 数据的开始/结束日期
  319. curveConf := req.Curve
  320. startDate, endDate := utils.GetDateByDateType(curveConf.DateType, curveConf.StartDate, curveConf.EndDate)
  321. rollingCorrelationData := make([]interface{}, 0)
  322. for _, rollingCorrelationConf := range rollingCorrelationConfList {
  323. if rollingCorrelationConf.CalculateValue > 0 && rollingCorrelationConf.CalculateUnit != `` {
  324. xDateTimeValue, yDataList, e := correlationServ.GetRollingCorrelationChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB, rollingCorrelationConf.LeadValue, rollingCorrelationConf.LeadUnit, rollingCorrelationConf.CalculateValue, rollingCorrelationConf.CalculateUnit, startDate, endDate)
  325. if e != nil {
  326. br.Msg = "获取失败"
  327. br.ErrMsg = "获取滚动相关性图表, 图表计算值失败, Err:" + e.Error()
  328. return
  329. }
  330. tmpChartInfo := *chartInfo
  331. tmpChartInfo.Source = utils.CHART_SOURCE_ROLLING_CORRELATION
  332. // ”指标A名称“+”指标B名称“+"滚动相关性"+”滚动相关性计算窗口值“+”滚动相关性计算窗口单位“
  333. // 若滚动相关性的计算周期为30天
  334. // 1、B即不领先也不滞后时:“指标A名称”与“指标B名称"30天滚动相关性;
  335. // 2、B有领先时:“指标A名称”与“指标B名称(领先15天)"30天滚动相关性;
  336. // 3、B滞后时:“指标A名称”与“指标B名称(滞后15天)"30天滚动相关性
  337. if rollingCorrelationConf.LeadValue == 0 {
  338. tmpChartInfo.ChartName = fmt.Sprintf(`%s与%s%d%s滚动相关性`, edbInfoMappingA.EdbName, edbInfoMappingB.EdbName, rollingCorrelationConf.CalculateValue, rollingCorrelationConf.CalculateUnit)
  339. } else if rollingCorrelationConf.LeadValue < 0 {
  340. tmpChartInfo.ChartName = fmt.Sprintf(`%s与%s(滞后%d%s)%d%s滚动相关性`, edbInfoMappingA.EdbName, edbInfoMappingB.EdbName, int(math.Abs(float64(rollingCorrelationConf.LeadValue))), rollingCorrelationConf.LeadUnit, rollingCorrelationConf.CalculateValue, rollingCorrelationConf.CalculateUnit)
  341. } else {
  342. tmpChartInfo.ChartName = fmt.Sprintf(`%s与%s(领先%d%s)%d%s滚动相关性`, edbInfoMappingA.EdbName, edbInfoMappingB.EdbName, int(math.Abs(float64(rollingCorrelationConf.LeadValue))), rollingCorrelationConf.LeadUnit, rollingCorrelationConf.CalculateValue, rollingCorrelationConf.CalculateUnit)
  343. }
  344. rollingCorrelationData = append(rollingCorrelationData, response.RollingCorrelationResp{
  345. ChartInfo: tmpChartInfo,
  346. EdbInfoList: mappingList,
  347. XDateTimeValue: xDateTimeValue,
  348. YDataList: yDataList,
  349. CorrelationChartInfo: data_manage.CorrelationInfo{
  350. LeadValue: rollingCorrelationConf.LeadValue,
  351. LeadUnit: rollingCorrelationConf.LeadUnit,
  352. CalculateValue: rollingCorrelationConf.CalculateValue,
  353. CalculateUnit: rollingCorrelationConf.CalculateUnit,
  354. StartDate: startDate,
  355. EndDate: endDate,
  356. EdbInfoIdFirst: edbInfoMappingA.EdbInfoId,
  357. EdbInfoIdSecond: edbInfoMappingB.EdbInfoId,
  358. },
  359. })
  360. } else {
  361. rollingCorrelationData = append(rollingCorrelationData, nil)
  362. }
  363. }
  364. resp.RollingCorrelationData = rollingCorrelationData
  365. } else {
  366. resp.RollingCorrelationData = []interface{}{nil, nil}
  367. }
  368. }
  369. br.Ret = 200
  370. br.Success = true
  371. br.Msg = "获取成功"
  372. br.Data = resp
  373. }
  374. // MultipleGraphPreviewCurve
  375. // @Title 批量添加图表的预览曲线图接口(只返回曲线图的数据)
  376. // @Description 批量添加图表的预览曲线图接口
  377. // @Param request body request.SaveMultipleGraphConfigReq true "type json string"
  378. // @Success Ret=200 返回图表id
  379. // @router /multiple_graph/preview_cure [post]
  380. func (this *ChartInfoController) MultipleGraphPreviewCurve() {
  381. br := new(models.BaseResponse).Init()
  382. defer func() {
  383. this.Data["json"] = br
  384. this.ServeJSON()
  385. }()
  386. sysUser := this.SysUser
  387. if sysUser == nil {
  388. br.Msg = "请登录"
  389. br.ErrMsg = "请登录,SysUser Is Empty"
  390. br.Ret = 408
  391. return
  392. }
  393. var req request.SaveMultipleGraphConfigReq
  394. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  395. if err != nil {
  396. br.Msg = "参数解析异常!"
  397. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  398. return
  399. }
  400. mappingList, err := data_manage.GetChartEdbMappingListByEdbInfoIdList([]int{req.EdbInfoIdA, req.EdbInfoIdB})
  401. if err != nil {
  402. br.Msg = "获取失败"
  403. br.ErrMsg = "获取图表,指标信息失败,Err:" + err.Error()
  404. return
  405. }
  406. var edbInfoMappingA, edbInfoMappingB *data_manage.ChartEdbInfoMapping
  407. for _, v := range mappingList {
  408. if v.EdbInfoId == req.EdbInfoIdA {
  409. edbInfoMappingA = v
  410. }
  411. if v.EdbInfoId == req.EdbInfoIdB {
  412. edbInfoMappingB = v
  413. }
  414. }
  415. if edbInfoMappingA == nil {
  416. br.Msg = "指标A不存在"
  417. br.IsSendEmail = false
  418. return
  419. }
  420. if edbInfoMappingB == nil {
  421. br.Msg = "指标B不存在"
  422. br.IsSendEmail = false
  423. return
  424. }
  425. resp := response.PreviewMultipleGraphConfigResp{}
  426. chartInfo := new(data_manage.ChartInfoView)
  427. chartInfo.Calendar = `公历`
  428. chartInfo.ChartName = edbInfoMappingA.EdbName + "与" + edbInfoMappingB.EdbName
  429. // 曲线图表信息
  430. {
  431. tmpChartInfo := *chartInfo
  432. curveConf := req.Curve
  433. startDate := curveConf.StartDate
  434. endDate := curveConf.EndDate
  435. switch curveConf.DateType {
  436. case 1:
  437. startDate = "2000-01-01"
  438. case 2:
  439. startDate = "2010-01-01"
  440. case 3:
  441. startDate = "2015-01-01"
  442. case 4:
  443. //startDate = strconv.Itoa(time.Now().Year()) + "-01-01"
  444. startDate = "2021-01-01"
  445. case 5:
  446. startDate = startDate + "-01"
  447. endDate = endDate + "-01"
  448. case 6:
  449. startDate = startDate + "-01"
  450. case 7:
  451. startDate = "2018-01-01"
  452. case 8:
  453. startDate = "2019-01-01"
  454. case 9:
  455. startDate = "2020-01-01"
  456. case 11:
  457. startDate = "2022-01-01"
  458. }
  459. edbInfoType := 0
  460. if curveConf.EdbInfoType {
  461. edbInfoType = 1
  462. }
  463. for _, v := range mappingList {
  464. v.EdbInfoType = 1
  465. v.IsOrder = false
  466. if v.EdbInfoId == req.EdbInfoIdB {
  467. v.LeadValue = curveConf.LeadValue
  468. v.LeadUnit = curveConf.LeadUnit
  469. v.EdbInfoType = edbInfoType
  470. v.IsOrder = curveConf.IsOrder
  471. }
  472. }
  473. // 获取图表中的指标数据
  474. edbList, _, _, _, err, errMsg := data.GetChartEdbData(tmpChartInfo.ChartInfoId, tmpChartInfo.ChartType, tmpChartInfo.Calendar, startDate, endDate, mappingList, tmpChartInfo.ExtraConfig)
  475. if err != nil {
  476. br.Msg = "获取失败"
  477. if errMsg != `` {
  478. br.Msg = errMsg
  479. }
  480. br.ErrMsg = "获取图表,指标信息失败,Err:" + err.Error()
  481. return
  482. }
  483. warnEdbList := make([]string, 0)
  484. tmpEdbList := make([]data_manage.ChartEdbInfoMapping, 0)
  485. for _, v := range edbList {
  486. if v.IsNullData {
  487. warnEdbList = append(warnEdbList, v.EdbName+"("+v.EdbCode+")")
  488. }
  489. chartEdbInfoMapping := *v
  490. chartEdbInfoMapping.IsOrder = false
  491. chartEdbInfoMapping.EdbInfoType = 1
  492. if v.EdbInfoId == req.EdbInfoIdA {
  493. chartEdbInfoMapping.IsAxis = 1
  494. chartEdbInfoMapping.MinData = curveConf.LeftMin
  495. chartEdbInfoMapping.MaxData = curveConf.LeftMax
  496. chartEdbInfoMapping.ChartColor = `#00F`
  497. //chartEdbInfoMapping.LeadValue = curveConf.LeadValue
  498. //chartEdbInfoMapping.LeadUnit = curveConf.LeadUnit
  499. chartEdbInfoMapping.ChartWidth = 3
  500. } else {
  501. chartEdbInfoMapping.IsAxis = 0
  502. chartEdbInfoMapping.MinData = curveConf.RightMin
  503. chartEdbInfoMapping.MaxData = curveConf.RightMax
  504. chartEdbInfoMapping.ChartColor = `#F00`
  505. chartEdbInfoMapping.LeadValue = curveConf.LeadValue
  506. chartEdbInfoMapping.LeadUnit = curveConf.LeadUnit
  507. chartEdbInfoMapping.ChartWidth = 1
  508. chartEdbInfoMapping.IsOrder = curveConf.IsOrder
  509. chartEdbInfoMapping.EdbInfoType = edbInfoType
  510. }
  511. tmpEdbList = append(tmpEdbList, chartEdbInfoMapping)
  512. }
  513. if len(warnEdbList) > 0 {
  514. tmpChartInfo.WarnMsg = `图表引用指标异常,异常指标:` + strings.Join(warnEdbList, ",")
  515. }
  516. tmpChartInfo.Source = utils.CHART_SOURCE_DEFAULT
  517. tmpChartInfo.DateType = curveConf.DateType
  518. tmpChartInfo.StartDate = startDate
  519. tmpChartInfo.EndDate = endDate
  520. tmpChartInfo.ChartType = utils.CHART_TYPE_CURVE
  521. resp.CurveData = response.CurveResp{
  522. ChartInfo: tmpChartInfo,
  523. EdbInfoList: tmpEdbList,
  524. }
  525. }
  526. br.Ret = 200
  527. br.Success = true
  528. br.Msg = "获取成功"
  529. br.Data = resp
  530. }
  531. // MultipleGraphConfigSaveChart
  532. // @Title 保存图表接口
  533. // @Description 保存图表接口
  534. // @Param request body request.SaveMultipleGraphChartReq true "type json string"
  535. // @Success Ret=200 返回图表id
  536. // @router /multiple_graph/chart/save [post]
  537. func (this *ChartInfoController) MultipleGraphConfigSaveChart() {
  538. br := new(models.BaseResponse).Init()
  539. defer func() {
  540. this.Data["json"] = br
  541. this.ServeJSON()
  542. }()
  543. sysUser := this.SysUser
  544. if sysUser == nil {
  545. br.Msg = "请登录"
  546. br.ErrMsg = "请登录,SysUser Is Empty"
  547. br.Ret = 408
  548. return
  549. }
  550. var req request.SaveMultipleGraphChartReq
  551. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  552. if err != nil {
  553. br.Msg = "参数解析异常!"
  554. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  555. return
  556. }
  557. cacheKey := "CACHE_CHART_INFO_ADD_" + strconv.Itoa(sysUser.AdminId)
  558. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  559. br.Msg = "系统处理中,请稍后重试!"
  560. br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
  561. return
  562. }
  563. defer func() {
  564. _ = utils.Rc.Delete(cacheKey)
  565. }()
  566. if req.IsSaveAs {
  567. CopyMultipleGraphConfigSaveChart(req, this, br, sysUser)
  568. return
  569. }
  570. mappingList, err := data_manage.GetChartEdbMappingListByEdbInfoIdList([]int{req.EdbInfoIdA, req.EdbInfoIdB})
  571. if err != nil {
  572. br.Msg = "获取失败"
  573. br.ErrMsg = "获取图表,指标信息失败,Err:" + err.Error()
  574. return
  575. }
  576. var edbInfoMappingA, edbInfoMappingB *data_manage.ChartEdbInfoMapping
  577. for _, v := range mappingList {
  578. if v.EdbInfoId == req.EdbInfoIdA {
  579. edbInfoMappingA = v
  580. }
  581. if v.EdbInfoId == req.EdbInfoIdB {
  582. edbInfoMappingB = v
  583. }
  584. }
  585. if edbInfoMappingA == nil {
  586. br.Msg = "指标A不存在"
  587. br.IsSendEmail = false
  588. return
  589. }
  590. if edbInfoMappingB == nil {
  591. br.Msg = "指标B不存在"
  592. br.IsSendEmail = false
  593. return
  594. }
  595. multipleGraphConfigChartMapping, err := data_manage.GetMultipleGraphConfigChartMappingByIdAndSource(req.MultipleGraphConfigId, req.Source)
  596. if err != nil && err.Error() != utils.ErrNoRow() {
  597. br.Msg = `保存失败`
  598. br.ErrMsg = "获取配置与图表的关联关系失败,ERR:" + err.Error()
  599. return
  600. }
  601. err = nil
  602. var isAdd bool
  603. var chartInfoId int
  604. if multipleGraphConfigChartMapping == nil {
  605. isAdd = true
  606. } else {
  607. chartInfo, err := data_manage.GetChartInfoById(multipleGraphConfigChartMapping.ChartInfoId)
  608. if err != nil && err.Error() != utils.ErrNoRow() {
  609. br.Msg = `保存失败`
  610. br.ErrMsg = "获取图表信息失败,ERR:" + err.Error()
  611. return
  612. }
  613. // 说明图还在,没有被删除
  614. if chartInfo != nil {
  615. chartInfoId = multipleGraphConfigChartMapping.ChartInfoId
  616. req.ChartName = chartInfo.ChartName
  617. req.ClassifyId = chartInfo.ChartClassifyId
  618. }
  619. }
  620. var chartInfo *data_manage.ChartInfo
  621. var errMsg string
  622. isSendEmail := true
  623. switch req.Source {
  624. case 1: // 曲线图
  625. curveConf := req.Curve
  626. edbInfoType := 1 //1:标准指标,0:领先指标
  627. if !curveConf.EdbInfoType {
  628. edbInfoType = 0
  629. }
  630. chartSaveItemList := []*data_manage.ChartSaveItem{
  631. {
  632. EdbInfoId: edbInfoMappingA.EdbInfoId,
  633. MaxData: curveConf.LeftMax,
  634. MinData: curveConf.LeftMin,
  635. IsOrder: false,
  636. IsAxis: 1,
  637. EdbInfoType: 1,
  638. //LeadValue: curveConf.LeadValue,
  639. //LeadUnit: curveConf.LeadUnit,
  640. ChartStyle: "spline",
  641. ChartColor: `#00F`,
  642. PredictChartColor: "",
  643. ChartWidth: 3,
  644. Source: utils.CHART_SOURCE_DEFAULT,
  645. }, {
  646. EdbInfoId: edbInfoMappingB.EdbInfoId,
  647. MaxData: curveConf.RightMax,
  648. MinData: curveConf.RightMin,
  649. IsOrder: curveConf.IsOrder,
  650. IsAxis: 0,
  651. EdbInfoType: edbInfoType,
  652. LeadValue: curveConf.LeadValue,
  653. LeadUnit: curveConf.LeadUnit,
  654. ChartStyle: "spline",
  655. ChartColor: `#F00`,
  656. PredictChartColor: "",
  657. ChartWidth: 1,
  658. Source: utils.CHART_SOURCE_DEFAULT,
  659. },
  660. }
  661. if chartInfoId <= 0 {
  662. addChartReq := data_manage.AddChartInfoReq{
  663. ChartEdbInfoList: chartSaveItemList,
  664. ChartClassifyId: req.ClassifyId,
  665. ChartName: req.ChartName,
  666. ChartType: utils.CHART_TYPE_CURVE,
  667. DateType: curveConf.DateType,
  668. StartDate: curveConf.StartDate,
  669. EndDate: curveConf.EndDate,
  670. Calendar: "公历",
  671. SeasonStartDate: curveConf.StartDate,
  672. SeasonEndDate: curveConf.EndDate,
  673. LeftMin: fmt.Sprint(curveConf.LeftMin),
  674. LeftMax: fmt.Sprint(curveConf.LeftMax),
  675. RightMin: fmt.Sprint(curveConf.RightMin),
  676. RightMax: fmt.Sprint(curveConf.RightMax),
  677. }
  678. chartInfo, err, errMsg, isSendEmail = data.AddChartInfo(addChartReq, sysUser.AdminId, sysUser.RealName)
  679. } else {
  680. editChartReq := data_manage.EditChartInfoReq{
  681. ChartInfoId: multipleGraphConfigChartMapping.ChartInfoId,
  682. ChartName: req.ChartName,
  683. ChartClassifyId: req.ClassifyId,
  684. ChartEdbInfoList: chartSaveItemList,
  685. ChartType: utils.CHART_TYPE_CURVE,
  686. DateType: curveConf.DateType,
  687. StartDate: curveConf.StartDate,
  688. EndDate: curveConf.EndDate,
  689. Calendar: "公历",
  690. SeasonStartDate: curveConf.StartDate,
  691. SeasonEndDate: curveConf.EndDate,
  692. LeftMin: fmt.Sprint(curveConf.LeftMin),
  693. LeftMax: fmt.Sprint(curveConf.LeftMax),
  694. RightMin: fmt.Sprint(curveConf.RightMin),
  695. RightMax: fmt.Sprint(curveConf.RightMax),
  696. }
  697. chartInfo, err, errMsg, isSendEmail = data.EditChartInfo(editChartReq, sysUser)
  698. if err != nil {
  699. br.Msg = "保存失败"
  700. if errMsg != `` {
  701. br.Msg = errMsg
  702. }
  703. br.ErrMsg = err.Error()
  704. br.IsSendEmail = isSendEmail
  705. return
  706. }
  707. }
  708. case 2, 3, 4: // 相关性图(滚动相关性)
  709. correlationConf := req.Correlation
  710. // 配置了数据才有返回
  711. if correlationConf.LeadValue > 0 {
  712. leadValue := correlationConf.LeadValue
  713. leadUnit := correlationConf.LeadUnit
  714. baseCalculateValue := correlationConf.CalculateValue
  715. baseCalculateUnit := correlationConf.CalculateUnit
  716. calculateValue := baseCalculateValue
  717. calculateUnit := baseCalculateUnit
  718. chartSource := utils.CHART_SOURCE_CORRELATION // 默认是相关性图
  719. moveUnitDays, ok := utils.FrequencyDaysMap[calculateUnit]
  720. if !ok {
  721. br.Msg = "错误的分析周期"
  722. br.IsSendEmail = false
  723. return
  724. }
  725. startDate := time.Now().AddDate(0, 0, -correlationConf.CalculateValue*moveUnitDays).Format(utils.FormatDate)
  726. endDate := time.Now().Format(utils.FormatDate)
  727. // 日期类型
  728. var dateType int
  729. if req.Source != 2 {
  730. chartSource = utils.CHART_SOURCE_ROLLING_CORRELATION
  731. var rollingCorrelation data_manage.RollingCorrelationConfig
  732. if req.Source == 3 {
  733. rollingCorrelation = req.RollingCorrelation[0]
  734. } else {
  735. rollingCorrelation = req.RollingCorrelation[1]
  736. }
  737. leadValue = rollingCorrelation.LeadValue
  738. leadUnit = rollingCorrelation.LeadUnit
  739. calculateValue = rollingCorrelation.CalculateValue
  740. calculateUnit = rollingCorrelation.CalculateUnit
  741. // 开始日期,结束日期
  742. dateType = req.Curve.DateType
  743. startDate, endDate = utils.GetDateByDateType(req.Curve.DateType, req.Curve.StartDate, req.Curve.EndDate)
  744. }
  745. correlationChartInfoReq := data_manage.CorrelationChartInfoReq{
  746. LeadValue: leadValue,
  747. LeadUnit: leadUnit,
  748. CalculateValue: calculateValue,
  749. CalculateUnit: calculateUnit,
  750. BaseCalculateValue: baseCalculateValue,
  751. BaseCalculateUnit: baseCalculateUnit,
  752. DateType: dateType,
  753. StartDate: startDate,
  754. EndDate: endDate,
  755. EdbInfoIdList: []data_manage.CorrelationChartInfoEdbItemReq{
  756. {
  757. EdbInfoId: edbInfoMappingA.EdbInfoId,
  758. Name: "",
  759. NameEn: "",
  760. }, {
  761. EdbInfoId: edbInfoMappingB.EdbInfoId,
  762. Name: "",
  763. NameEn: "",
  764. },
  765. },
  766. }
  767. if chartInfoId <= 0 {
  768. addChartReq := data_manage.AddChartInfoReq{
  769. ChartClassifyId: req.ClassifyId,
  770. ChartName: req.ChartName,
  771. ChartType: utils.CHART_TYPE_CURVE,
  772. Calendar: "公历",
  773. CorrelationChartInfo: correlationChartInfoReq,
  774. }
  775. chartInfo, err, errMsg, isSendEmail = correlationServ.AddChartInfo(addChartReq, chartSource, sysUser)
  776. } else {
  777. editChartReq := data_manage.EditChartInfoReq{
  778. ChartInfoId: multipleGraphConfigChartMapping.ChartInfoId,
  779. ChartName: req.ChartName,
  780. ChartClassifyId: req.ClassifyId,
  781. ChartType: utils.CHART_TYPE_CURVE,
  782. Calendar: "公历",
  783. CorrelationChartInfo: correlationChartInfoReq,
  784. }
  785. chartInfo, err, errMsg, isSendEmail = correlationServ.EditChartInfo(editChartReq, sysUser)
  786. if err != nil {
  787. br.Msg = "保存失败"
  788. if errMsg != `` {
  789. br.Msg = errMsg
  790. }
  791. br.ErrMsg = err.Error()
  792. br.IsSendEmail = isSendEmail
  793. return
  794. }
  795. }
  796. }
  797. default:
  798. br.Msg = "错误的来源"
  799. br.ErrMsg = "错误的来源,source:" + strconv.Itoa(req.Source)
  800. br.IsSendEmail = false
  801. return
  802. }
  803. if err != nil {
  804. br.Msg = "保存失败"
  805. if errMsg != `` {
  806. br.Msg = errMsg
  807. }
  808. br.ErrMsg = err.Error()
  809. br.IsSendEmail = isSendEmail
  810. return
  811. }
  812. // 如果图没有建立关联关系,那么就需要添加关系
  813. if isAdd {
  814. multipleGraphConfigChartMapping = &data_manage.MultipleGraphConfigChartMapping{
  815. //Id: 0,
  816. MultipleGraphConfigId: req.MultipleGraphConfigId,
  817. ChartInfoId: chartInfo.ChartInfoId,
  818. Source: req.Source,
  819. ModifyTime: time.Now(),
  820. CreateTime: time.Now(),
  821. }
  822. err = data_manage.AddMultipleGraphConfigChartMapping(multipleGraphConfigChartMapping)
  823. if err != nil {
  824. br.Msg = "保存失败"
  825. br.ErrMsg = "保存配置与图表的关联关系失败,ERR:" + err.Error()
  826. return
  827. }
  828. } else if multipleGraphConfigChartMapping != nil {
  829. multipleGraphConfigChartMapping.ChartInfoId = chartInfo.ChartInfoId
  830. multipleGraphConfigChartMapping.ModifyTime = time.Now()
  831. err = multipleGraphConfigChartMapping.Update([]string{"ChartInfoId", "ModifyTime"})
  832. if err != nil {
  833. br.Msg = "保存失败"
  834. br.ErrMsg = "保存配置与图表的关联关系失败,ERR:" + err.Error()
  835. return
  836. }
  837. }
  838. //新增操作日志
  839. {
  840. chartLog := new(data_manage.ChartInfoLog)
  841. chartLog.ChartInfoId = chartInfo.ChartInfoId
  842. chartLog.ChartName = req.ChartName
  843. chartLog.ChartClassifyId = req.ClassifyId
  844. chartLog.SysUserId = sysUser.AdminId
  845. chartLog.SysUserRealName = sysUser.RealName
  846. chartLog.UniqueCode = chartInfo.UniqueCode
  847. chartLog.CreateTime = time.Now()
  848. chartLog.Content = string(this.Ctx.Input.RequestBody)
  849. chartLog.Status = "多图配置保存图表"
  850. chartLog.Method = this.Ctx.Input.URI()
  851. go data_manage.AddChartInfoLog(chartLog)
  852. }
  853. resp := new(data_manage.AddChartInfoResp)
  854. resp.ChartInfoId = chartInfo.ChartInfoId
  855. resp.UniqueCode = chartInfo.UniqueCode
  856. resp.ChartType = chartInfo.ChartType
  857. br.Ret = 200
  858. br.Success = true
  859. br.Msg = "保存成功"
  860. br.Data = resp
  861. br.IsAddLog = true
  862. }
  863. // CopyMultipleGraphConfigSaveChart 图表另存为
  864. func CopyMultipleGraphConfigSaveChart(req request.SaveMultipleGraphChartReq, this *ChartInfoController, br *models.BaseResponse, sysUser *system.Admin) {
  865. mappingList, err := data_manage.GetChartEdbMappingListByEdbInfoIdList([]int{req.EdbInfoIdA, req.EdbInfoIdB})
  866. if err != nil {
  867. br.Msg = "获取失败"
  868. br.ErrMsg = "获取图表,指标信息失败,Err:" + err.Error()
  869. return
  870. }
  871. var edbInfoMappingA, edbInfoMappingB *data_manage.ChartEdbInfoMapping
  872. for _, v := range mappingList {
  873. if v.EdbInfoId == req.EdbInfoIdA {
  874. edbInfoMappingA = v
  875. }
  876. if v.EdbInfoId == req.EdbInfoIdB {
  877. edbInfoMappingB = v
  878. }
  879. }
  880. if edbInfoMappingA == nil {
  881. br.Msg = "指标A不存在"
  882. br.IsSendEmail = false
  883. return
  884. }
  885. if edbInfoMappingB == nil {
  886. br.Msg = "指标B不存在"
  887. br.IsSendEmail = false
  888. return
  889. }
  890. multipleGraphConfigChartMapping, err := data_manage.GetMultipleGraphConfigChartMappingByIdAndSource(req.MultipleGraphConfigId, req.Source)
  891. if err != nil && err.Error() != utils.ErrNoRow() {
  892. br.Msg = `保存失败`
  893. br.ErrMsg = "获取配置与图表的关联关系失败,ERR:" + err.Error()
  894. return
  895. }
  896. // 原图
  897. oldChartInfo, err := data_manage.GetChartInfoById(multipleGraphConfigChartMapping.ChartInfoId)
  898. if err != nil && err.Error() != utils.ErrNoRow() {
  899. br.Msg = `保存失败`
  900. br.ErrMsg = "获取图表信息失败,ERR:" + err.Error()
  901. return
  902. }
  903. // 说明图还在,没有被删除
  904. if oldChartInfo == nil {
  905. br.Msg = "原图不存在"
  906. br.IsSendEmail = false
  907. }
  908. var chartInfo *data_manage.ChartInfo
  909. var errMsg string
  910. isSendEmail := true
  911. switch req.Source {
  912. case 1: // 曲线图
  913. curveConf := req.Curve
  914. edbInfoType := 1 //1:标准指标,0:领先指标
  915. if !curveConf.EdbInfoType {
  916. edbInfoType = 0
  917. }
  918. chartSaveItemList := []*data_manage.ChartSaveItem{
  919. {
  920. EdbInfoId: edbInfoMappingA.EdbInfoId,
  921. MaxData: curveConf.LeftMax,
  922. MinData: curveConf.LeftMin,
  923. IsOrder: false,
  924. IsAxis: 1,
  925. EdbInfoType: 1,
  926. //LeadValue: curveConf.LeadValue,
  927. //LeadUnit: curveConf.LeadUnit,
  928. ChartStyle: "spline",
  929. ChartColor: `#00F`,
  930. PredictChartColor: "",
  931. ChartWidth: 3,
  932. Source: utils.CHART_SOURCE_DEFAULT,
  933. }, {
  934. EdbInfoId: edbInfoMappingB.EdbInfoId,
  935. MaxData: curveConf.RightMax,
  936. MinData: curveConf.RightMin,
  937. IsOrder: curveConf.IsOrder,
  938. IsAxis: 0,
  939. EdbInfoType: edbInfoType,
  940. LeadValue: curveConf.LeadValue,
  941. LeadUnit: curveConf.LeadUnit,
  942. ChartStyle: "spline",
  943. ChartColor: `#F00`,
  944. PredictChartColor: "",
  945. ChartWidth: 1,
  946. Source: utils.CHART_SOURCE_DEFAULT,
  947. },
  948. }
  949. addChartReq := data_manage.AddChartInfoReq{
  950. ChartEdbInfoList: chartSaveItemList,
  951. ChartClassifyId: req.ClassifyId,
  952. ChartName: req.ChartName,
  953. ChartType: utils.CHART_TYPE_CURVE,
  954. DateType: curveConf.DateType,
  955. StartDate: curveConf.StartDate,
  956. EndDate: curveConf.EndDate,
  957. Calendar: "公历",
  958. SeasonStartDate: curveConf.StartDate,
  959. SeasonEndDate: curveConf.EndDate,
  960. LeftMin: fmt.Sprint(curveConf.LeftMin),
  961. LeftMax: fmt.Sprint(curveConf.LeftMax),
  962. RightMin: fmt.Sprint(curveConf.RightMin),
  963. RightMax: fmt.Sprint(curveConf.RightMax),
  964. }
  965. chartInfo, err, errMsg, isSendEmail = data.AddChartInfo(addChartReq, sysUser.AdminId, sysUser.RealName)
  966. case 2: // 相关性图
  967. correlationConf := req.Correlation
  968. // 配置了数据才有返回
  969. if correlationConf.LeadValue > 0 {
  970. leadValue := correlationConf.LeadValue
  971. leadUnit := correlationConf.LeadUnit
  972. calculateValue := correlationConf.CalculateValue
  973. calculateUnit := correlationConf.CalculateUnit
  974. moveUnitDays, ok := utils.FrequencyDaysMap[calculateUnit]
  975. if !ok {
  976. br.Msg = "错误的分析周期"
  977. br.IsSendEmail = false
  978. return
  979. }
  980. startDate := time.Now().AddDate(0, 0, -correlationConf.CalculateValue*moveUnitDays).Format(utils.FormatDate)
  981. endDate := time.Now().Format(utils.FormatDate)
  982. correlationChartInfoReq := data_manage.CorrelationChartInfoReq{
  983. LeadValue: leadValue,
  984. LeadUnit: leadUnit,
  985. CalculateValue: calculateValue,
  986. CalculateUnit: calculateUnit,
  987. StartDate: startDate,
  988. EndDate: endDate,
  989. EdbInfoIdList: []data_manage.CorrelationChartInfoEdbItemReq{
  990. {
  991. EdbInfoId: edbInfoMappingA.EdbInfoId,
  992. Name: "",
  993. NameEn: "",
  994. }, {
  995. EdbInfoId: edbInfoMappingB.EdbInfoId,
  996. Name: "",
  997. NameEn: "",
  998. },
  999. },
  1000. }
  1001. chartInfo, err, errMsg, isSendEmail = correlationServ.CopyChartInfo(multipleGraphConfigChartMapping.MultipleGraphConfigId, req.ClassifyId, req.ChartName, correlationChartInfoReq, sysUser)
  1002. }
  1003. default:
  1004. br.Msg = "错误的来源"
  1005. br.ErrMsg = "错误的来源,source:" + strconv.Itoa(req.Source)
  1006. br.IsSendEmail = false
  1007. return
  1008. }
  1009. if err != nil {
  1010. br.Msg = "保存失败"
  1011. if errMsg != `` {
  1012. br.Msg = errMsg
  1013. }
  1014. br.ErrMsg = err.Error()
  1015. br.IsSendEmail = isSendEmail
  1016. return
  1017. }
  1018. //新增操作日志
  1019. {
  1020. chartLog := new(data_manage.ChartInfoLog)
  1021. chartLog.ChartInfoId = chartInfo.ChartInfoId
  1022. chartLog.ChartName = req.ChartName
  1023. chartLog.ChartClassifyId = req.ClassifyId
  1024. chartLog.SysUserId = sysUser.AdminId
  1025. chartLog.SysUserRealName = sysUser.RealName
  1026. chartLog.UniqueCode = chartInfo.UniqueCode
  1027. chartLog.CreateTime = time.Now()
  1028. chartLog.Content = string(this.Ctx.Input.RequestBody)
  1029. chartLog.Status = "多图配置另存为图表"
  1030. chartLog.Method = this.Ctx.Input.URI()
  1031. go data_manage.AddChartInfoLog(chartLog)
  1032. }
  1033. resp := new(data_manage.AddChartInfoResp)
  1034. resp.ChartInfoId = chartInfo.ChartInfoId
  1035. resp.UniqueCode = chartInfo.UniqueCode
  1036. resp.ChartType = chartInfo.ChartType
  1037. br.Ret = 200
  1038. br.Success = true
  1039. br.Msg = "保存成功"
  1040. br.Data = resp
  1041. br.IsAddLog = true
  1042. }
  1043. // MultipleGraphConfigSaveEdb
  1044. // @Title 保存指标接口
  1045. // @Description 保存指标接口
  1046. // @Param request body request.SaveMultipleGraphEdbReq true "type json string"
  1047. // @Success Ret=200 返回指标id
  1048. // @router /multiple_graph/edb/save [post]
  1049. func (this *ChartInfoController) MultipleGraphConfigSaveEdb() {
  1050. br := new(models.BaseResponse).Init()
  1051. defer func() {
  1052. this.Data["json"] = br
  1053. this.ServeJSON()
  1054. }()
  1055. sysUser := this.SysUser
  1056. if sysUser == nil {
  1057. br.Msg = "请登录"
  1058. br.ErrMsg = "请登录,SysUser Is Empty"
  1059. br.Ret = 408
  1060. return
  1061. }
  1062. var req request.SaveMultipleGraphEdbReq
  1063. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1064. if err != nil {
  1065. br.Msg = "参数解析异常!"
  1066. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1067. return
  1068. }
  1069. cacheKey := "CACHE_CHART_EDB_INFO_ADD_" + strconv.Itoa(sysUser.AdminId)
  1070. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  1071. br.Msg = "系统处理中,请稍后重试!"
  1072. br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
  1073. return
  1074. }
  1075. defer func() {
  1076. _ = utils.Rc.Delete(cacheKey)
  1077. }()
  1078. mappingList, err := data_manage.GetChartEdbMappingListByEdbInfoIdList([]int{req.EdbInfoIdA, req.EdbInfoIdB})
  1079. if err != nil {
  1080. br.Msg = "获取失败"
  1081. br.ErrMsg = "获取图表,指标信息失败,Err:" + err.Error()
  1082. return
  1083. }
  1084. var edbInfoMappingA, edbInfoMappingB *data_manage.ChartEdbInfoMapping
  1085. for _, v := range mappingList {
  1086. if v.EdbInfoId == req.EdbInfoIdA {
  1087. edbInfoMappingA = v
  1088. }
  1089. if v.EdbInfoId == req.EdbInfoIdB {
  1090. edbInfoMappingB = v
  1091. }
  1092. }
  1093. if edbInfoMappingA == nil {
  1094. br.Msg = "指标A不存在"
  1095. br.IsSendEmail = false
  1096. return
  1097. }
  1098. if edbInfoMappingB == nil {
  1099. br.Msg = "指标B不存在"
  1100. br.IsSendEmail = false
  1101. return
  1102. }
  1103. correlationConf := req.Correlation
  1104. // 配置了数据才有返回
  1105. if correlationConf.LeadValue <= 0 {
  1106. br.Msg = "相关性计算窗口必须大于0"
  1107. br.IsSendEmail = false
  1108. return
  1109. }
  1110. // 滚动相关性配置
  1111. var rollingCorrelation data_manage.RollingCorrelationConfig
  1112. switch req.Source {
  1113. case 3:
  1114. rollingCorrelation = req.RollingCorrelation[0]
  1115. case 4:
  1116. rollingCorrelation = req.RollingCorrelation[1]
  1117. default:
  1118. br.Msg = "错误的来源"
  1119. br.ErrMsg = "错误的来源,source:" + strconv.Itoa(req.Source)
  1120. br.IsSendEmail = false
  1121. return
  1122. }
  1123. // 配置了数据才有返回
  1124. if rollingCorrelation.CalculateValue <= 0 {
  1125. br.Msg = "滚动相关性计算窗口必须大于0"
  1126. br.IsSendEmail = false
  1127. return
  1128. }
  1129. multipleGraphConfigEdbMapping, err := data_manage.GetMultipleGraphConfigEdbMappingByIdAndSource(req.MultipleGraphConfigId, req.Source)
  1130. if err != nil && err.Error() != utils.ErrNoRow() {
  1131. br.Msg = `保存失败`
  1132. br.ErrMsg = "获取配置与图表的关联关系失败,ERR:" + err.Error()
  1133. return
  1134. }
  1135. err = nil
  1136. var isAdd bool
  1137. var edbInfoId int
  1138. if multipleGraphConfigEdbMapping == nil {
  1139. isAdd = true
  1140. } else {
  1141. edbInfo, err := data_manage.GetEdbInfoById(multipleGraphConfigEdbMapping.EdbInfoId)
  1142. if err != nil && err.Error() != utils.ErrNoRow() {
  1143. br.Msg = `保存失败`
  1144. br.ErrMsg = "获取图表信息失败,ERR:" + err.Error()
  1145. return
  1146. }
  1147. // 说明指标还在,没有被删除
  1148. if edbInfo != nil && !req.IsSaveAs {
  1149. edbInfoId = multipleGraphConfigEdbMapping.EdbInfoId
  1150. req.EdbName = edbInfo.EdbName
  1151. req.ClassifyId = edbInfo.ClassifyId
  1152. req.Frequency = edbInfo.Frequency
  1153. req.Unit = edbInfo.Unit
  1154. }
  1155. }
  1156. // 关联指标
  1157. edbInfoIdArr := []data_manage.EdbInfoFromTag{
  1158. {
  1159. EdbInfoId: edbInfoMappingA.EdbInfoId,
  1160. FromTag: "A",
  1161. MoveValue: 0,
  1162. }, {
  1163. EdbInfoId: edbInfoMappingB.EdbInfoId,
  1164. FromTag: "B",
  1165. MoveValue: 0,
  1166. },
  1167. }
  1168. calculateFormula := request.EdbCalculateFormula{
  1169. BaseCalculateValue: correlationConf.CalculateValue,
  1170. BaseCalculateUnit: correlationConf.CalculateUnit,
  1171. LeadValue: rollingCorrelation.LeadValue,
  1172. LeadUnit: rollingCorrelation.LeadUnit,
  1173. CalculateValue: rollingCorrelation.CalculateValue,
  1174. CalculateUnit: rollingCorrelation.CalculateUnit,
  1175. }
  1176. calculateFormulaByte, err := json.Marshal(calculateFormula)
  1177. if err != nil {
  1178. br.Msg = "参数解析异常!"
  1179. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1180. return
  1181. }
  1182. var respItem *data.AddPredictEdbDataResponse
  1183. if edbInfoId <= 0 || req.IsSaveAs {
  1184. req2 := &data_manage.EdbInfoCalculateBatchSaveReqByEdbLib{
  1185. AdminId: sysUser.AdminId,
  1186. AdminName: sysUser.RealName,
  1187. EdbName: req.EdbName,
  1188. Frequency: req.Frequency,
  1189. Unit: req.Unit,
  1190. ClassifyId: req.ClassifyId,
  1191. Formula: string(calculateFormulaByte),
  1192. Source: utils.DATA_SOURCE_CALCULATE_CORRELATION,
  1193. EdbInfoIdArr: edbInfoIdArr,
  1194. Calendar: `公历`,
  1195. }
  1196. // 调用指标库去添加
  1197. reqJson, err := json.Marshal(req2)
  1198. if err != nil {
  1199. br.Msg = "参数解析异常!"
  1200. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1201. return
  1202. }
  1203. respItem, err = data.BatchSaveEdbCalculateData(string(reqJson))
  1204. if err != nil {
  1205. br.Msg = "新增失败"
  1206. br.ErrMsg = "新增失败,Err:" + err.Error()
  1207. return
  1208. }
  1209. } else {
  1210. req2 := &data_manage.EdbInfoCalculateBatchEditReqByEdbLib{
  1211. EdbInfoId: edbInfoId,
  1212. EdbName: req.EdbName,
  1213. Frequency: req.Frequency,
  1214. Unit: req.Unit,
  1215. ClassifyId: req.ClassifyId,
  1216. Formula: string(calculateFormulaByte),
  1217. Source: utils.DATA_SOURCE_CALCULATE_CORRELATION,
  1218. EdbInfoIdArr: edbInfoIdArr,
  1219. Calendar: `公历`,
  1220. }
  1221. // 调用指标库去更新
  1222. reqJson, err := json.Marshal(req2)
  1223. if err != nil {
  1224. br.Msg = "参数解析异常!"
  1225. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1226. return
  1227. }
  1228. respItem, err = data.BatchEditEdbCalculateData(string(reqJson))
  1229. if err != nil {
  1230. br.Msg = "编辑失败"
  1231. br.ErrMsg = "编辑失败,Err:" + err.Error()
  1232. return
  1233. }
  1234. }
  1235. if respItem == nil {
  1236. br.Msg = "保存失败"
  1237. br.ErrMsg = "保存失败"
  1238. return
  1239. }
  1240. if respItem.Ret != 200 {
  1241. br.Msg = respItem.Msg
  1242. br.ErrMsg = respItem.ErrMsg
  1243. return
  1244. }
  1245. resp := respItem.Data
  1246. //添加es
  1247. data.AddOrEditEdbInfoToEs(resp.EdbInfoId)
  1248. // 如果不是另存为的话,那么需要建立配置与指标的关系
  1249. if !req.IsSaveAs {
  1250. // 如果指标没有建立关联关系,那么就需要添加关系
  1251. if isAdd {
  1252. multipleGraphConfigEdbMapping = &data_manage.MultipleGraphConfigEdbMapping{
  1253. //Id: 0,
  1254. MultipleGraphConfigId: req.MultipleGraphConfigId,
  1255. EdbInfoId: resp.EdbInfoId,
  1256. Source: req.Source,
  1257. ModifyTime: time.Now(),
  1258. CreateTime: time.Now(),
  1259. }
  1260. err = data_manage.AddMultipleGraphConfigEdbMapping(multipleGraphConfigEdbMapping)
  1261. if err != nil {
  1262. br.Msg = "保存失败"
  1263. br.ErrMsg = "保存配置与指标的关联关系失败,ERR:" + err.Error()
  1264. return
  1265. }
  1266. } else if multipleGraphConfigEdbMapping != nil {
  1267. multipleGraphConfigEdbMapping.EdbInfoId = resp.EdbInfoId
  1268. multipleGraphConfigEdbMapping.ModifyTime = time.Now()
  1269. err = multipleGraphConfigEdbMapping.Update([]string{"EdbInfoId", "ModifyTime"})
  1270. if err != nil {
  1271. br.Msg = "保存失败"
  1272. br.ErrMsg = "保存配置与指标的关联关系失败,ERR:" + err.Error()
  1273. return
  1274. }
  1275. }
  1276. }
  1277. //新增操作日志
  1278. //{
  1279. // edbLog := new(data_manage.EdbInfoLog)
  1280. // edbLog.EdbInfoId = resp.EdbInfoId
  1281. // edbLog.SourceName = edbInfo.SourceName
  1282. // edbLog.Source = edbInfo.Source
  1283. // edbLog.EdbCode = edbInfo.EdbCode
  1284. // edbLog.EdbName = req2.EdbName
  1285. // edbLog.ClassifyId = req2.ClassifyId
  1286. // edbLog.SysUserId = sysUser.AdminId
  1287. // edbLog.SysUserRealName = sysUser.RealName
  1288. // edbLog.CreateTime = time.Now()
  1289. // edbLog.Content = string(this.Ctx.Input.RequestBody)
  1290. // edbLog.Status = "多图配置保存指标"
  1291. // edbLog.Method = this.Ctx.Input.URI()
  1292. // go data_manage.AddEdbInfoLog(edbLog)
  1293. //}
  1294. br.Ret = 200
  1295. br.Success = true
  1296. br.Msg = "保存成功"
  1297. br.Data = resp
  1298. br.IsAddLog = true
  1299. }
  1300. // GetMultipleGraphConfig
  1301. // @Title 保存配置接口
  1302. // @Description 保存配置接口
  1303. // @Param UniqueCode query int true "图表唯一编码,如果是管理后台访问,传固定字符串:7c69b590249049942070ae9dcd5bf6dc"
  1304. // @Success Ret=200 返回图表id
  1305. // @router /multiple_graph/config/detail [get]
  1306. func (this *ChartInfoController) GetMultipleGraphConfig() {
  1307. br := new(models.BaseResponse).Init()
  1308. defer func() {
  1309. this.Data["json"] = br
  1310. this.ServeJSON()
  1311. }()
  1312. sysUser := this.SysUser
  1313. if sysUser == nil {
  1314. br.Msg = "请登录"
  1315. br.ErrMsg = "请登录,SysUser Is Empty"
  1316. br.Ret = 408
  1317. return
  1318. }
  1319. uniqueCode := this.GetString("UniqueCode")
  1320. if uniqueCode == "" {
  1321. br.Msg = "参数错误"
  1322. br.ErrMsg = "参数错误,uniqueCode is empty"
  1323. return
  1324. }
  1325. chartInfo, err := data_manage.GetChartInfoViewByUniqueCode(uniqueCode)
  1326. if err != nil {
  1327. br.Msg = "获取失败"
  1328. br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
  1329. return
  1330. }
  1331. if chartInfo == nil {
  1332. br.Msg = "获取失败"
  1333. br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
  1334. return
  1335. }
  1336. multipleGraphConfigChartMapping, err := data_manage.GetMultipleGraphConfigChartMappingByChartId(chartInfo.ChartInfoId)
  1337. if err != nil {
  1338. br.Msg = "获取失败"
  1339. br.ErrMsg = "获取滚动相关性图表的配置信息失败,Err:" + err.Error()
  1340. return
  1341. }
  1342. multipleGraphConfig, err := data_manage.GetMultipleGraphConfigById(multipleGraphConfigChartMapping.MultipleGraphConfigId)
  1343. if err != nil {
  1344. br.Msg = `获取失败`
  1345. br.ErrMsg = `获取配置失败,ERR:` + err.Error()
  1346. return
  1347. }
  1348. // 生成的图表
  1349. multipleGraphConfigChartMappingList := make([]response.MultipleGraphConfigChartMapping, 0)
  1350. {
  1351. chartMappingList, err := data_manage.GetMultipleGraphConfigChartMappingListById(multipleGraphConfigChartMapping.MultipleGraphConfigId)
  1352. if err != nil {
  1353. br.Msg = `获取失败`
  1354. br.ErrMsg = `获取关联图表配置失败,ERR:` + err.Error()
  1355. return
  1356. }
  1357. chartInfoIdList := make([]int, 0)
  1358. chartMappingMap := make(map[int]*data_manage.MultipleGraphConfigChartMapping)
  1359. for _, v := range chartMappingList {
  1360. chartInfoIdList = append(chartInfoIdList, v.ChartInfoId)
  1361. chartMappingMap[v.ChartInfoId] = v
  1362. }
  1363. chartList, err := data_manage.GetChartInfoByIdList(chartInfoIdList)
  1364. if err != nil {
  1365. br.Msg = `获取失败`
  1366. br.ErrMsg = `获取关联图表列表失败,ERR:` + err.Error()
  1367. return
  1368. }
  1369. for _, v := range chartList {
  1370. if tmpInfo, ok := chartMappingMap[v.ChartInfoId]; ok {
  1371. multipleGraphConfigChartMappingList = append(multipleGraphConfigChartMappingList, response.MultipleGraphConfigChartMapping{
  1372. ChartInfoId: tmpInfo.ChartInfoId,
  1373. Source: tmpInfo.Source,
  1374. MultipleLocationSource: tmpInfo.Source,
  1375. })
  1376. }
  1377. }
  1378. }
  1379. // 生成的指标
  1380. multipleGraphConfigEdbMappingList := make([]response.MultipleGraphConfigEdbMapping, 0)
  1381. {
  1382. edbMappingList, err := data_manage.GetMultipleGraphConfigEdbMappingListById(multipleGraphConfigChartMapping.MultipleGraphConfigId)
  1383. if err != nil {
  1384. br.Msg = `获取失败`
  1385. br.ErrMsg = `获取关联指标配置失败,ERR:` + err.Error()
  1386. return
  1387. }
  1388. edbInfoIdList := make([]int, 0)
  1389. edbMappingMap := make(map[int]*data_manage.MultipleGraphConfigEdbMapping)
  1390. for _, v := range edbMappingList {
  1391. edbInfoIdList = append(edbInfoIdList, v.EdbInfoId)
  1392. edbMappingMap[v.EdbInfoId] = v
  1393. }
  1394. edbList, err := data_manage.GetEdbInfoByIdList(edbInfoIdList)
  1395. if err != nil {
  1396. br.Msg = `获取失败`
  1397. br.ErrMsg = `获取关联图表列表失败,ERR:` + err.Error()
  1398. return
  1399. }
  1400. for _, v := range edbList {
  1401. if tmpInfo, ok := edbMappingMap[v.EdbInfoId]; ok {
  1402. multipleGraphConfigEdbMappingList = append(multipleGraphConfigEdbMappingList, response.MultipleGraphConfigEdbMapping{
  1403. EdbInfoId: tmpInfo.EdbInfoId,
  1404. Source: tmpInfo.Source,
  1405. MultipleLocationSource: tmpInfo.Source,
  1406. })
  1407. }
  1408. }
  1409. }
  1410. // 关联指标
  1411. mappingList, err := data_manage.GetChartEdbMappingListByEdbInfoIdList([]int{multipleGraphConfig.EdbInfoIdA, multipleGraphConfig.EdbInfoIdB})
  1412. if err != nil {
  1413. br.Msg = "获取失败"
  1414. br.ErrMsg = "获取图表,指标信息失败,Err:" + err.Error()
  1415. return
  1416. }
  1417. resp := response.MultipleGraphConfigDetailResp{
  1418. EdbInfoList: mappingList,
  1419. MultipleGraphConfig: *multipleGraphConfig,
  1420. ChartMappingList: multipleGraphConfigChartMappingList,
  1421. EdbMappingList: multipleGraphConfigEdbMappingList,
  1422. }
  1423. br.Ret = 200
  1424. br.Success = true
  1425. br.Msg = "保存成功"
  1426. br.Data = resp
  1427. br.IsAddLog = true
  1428. }
  1429. // func init() {
  1430. // //correlationChart := new(data_manage.ChartInfoCorrelation)
  1431. //
  1432. // condition := ` AND source = 3 `
  1433. // list, err := data_manage.GetChartListByCondition(condition, []interface{}{}, 0, 1000)
  1434. // if err != nil {
  1435. // fmt.Println("err:", err)
  1436. // return
  1437. // }
  1438. // timeNowFormat := time.Now().Format(utils.FormatDate)
  1439. // for _, v := range list {
  1440. // item, tmpErr := data_manage.GetMultipleGraphConfigChartMappingByChartIdAndSource(v.ChartInfoId)
  1441. // if tmpErr != nil && tmpErr.Error() != utils.ErrNoRow() {
  1442. // fmt.Println("tmpErr:", tmpErr)
  1443. // continue
  1444. // }
  1445. // if item == nil {
  1446. // correlationChart := new(data_manage.ChartInfoCorrelation)
  1447. // e := correlationChart.GetItemById(v.ChartInfoId)
  1448. // if e != nil {
  1449. // fmt.Println("获取历史配置失败:", e)
  1450. // continue
  1451. // }
  1452. // day, _ := utils.GetDaysBetween2Date(utils.FormatDate, timeNowFormat, correlationChart.StartDate.Format(utils.FormatDate))
  1453. // req := request.SaveMultipleGraphConfigReq{
  1454. // MultipleGraphConfigId: 0,
  1455. // EdbInfoIdA: correlationChart.EdbInfoIdFirst,
  1456. // EdbInfoIdB: correlationChart.EdbInfoIdSecond,
  1457. // Curve: data_manage.CurveConfig{},
  1458. // Correlation: data_manage.CorrelationConfig{
  1459. // LeadValue: correlationChart.LeadValue,
  1460. // LeadUnit: correlationChart.LeadUnit,
  1461. // CalculateValue: day,
  1462. // CalculateUnit: "天",
  1463. // },
  1464. // RollingCorrelation: []data_manage.RollingCorrelationConfig{
  1465. // {}, {},
  1466. // },
  1467. // }
  1468. // curveStrByte, _ := json.Marshal(req.Curve)
  1469. // correlationStrByte, _ := json.Marshal(req.Correlation)
  1470. // rollingCorrelationStrByte, _ := json.Marshal(req.RollingCorrelation)
  1471. //
  1472. // multipleGraphConfig := &data_manage.MultipleGraphConfig{
  1473. // //MultipleGraphConfigId: 0,
  1474. // EdbInfoIdA: req.EdbInfoIdA,
  1475. // EdbInfoIdB: req.EdbInfoIdB,
  1476. // Curve: string(curveStrByte),
  1477. // Correlation: string(correlationStrByte),
  1478. // RollingCorrelation: string(rollingCorrelationStrByte),
  1479. // SysUserId: v.SysUserId,
  1480. // SysUserRealName: v.SysUserRealName,
  1481. // ModifyTime: v.ModifyTime,
  1482. // CreateTime: v.CreateTime,
  1483. // }
  1484. // err = data_manage.AddMultipleGraphConfig(multipleGraphConfig)
  1485. //
  1486. // if err != nil {
  1487. // fmt.Println(v.ChartInfoId, "创建配置失败:", err)
  1488. // continue
  1489. // }
  1490. //
  1491. // multipleGraphConfigChartMapping := &data_manage.MultipleGraphConfigChartMapping{
  1492. // //Id: 0,
  1493. // MultipleGraphConfigId: multipleGraphConfig.MultipleGraphConfigId,
  1494. // ChartInfoId: v.ChartInfoId,
  1495. // Source: 2,
  1496. // ModifyTime: time.Now(),
  1497. // CreateTime: time.Now(),
  1498. // }
  1499. // err = data_manage.AddMultipleGraphConfigChartMapping(multipleGraphConfigChartMapping)
  1500. // if err != nil {
  1501. // fmt.Println(v.ChartInfoId, "保存配置与图表的关联关系失败:", err)
  1502. // }
  1503. //
  1504. // correlationChart.CalculateUnit = "天"
  1505. // correlationChart.CalculateValue = day
  1506. // err = correlationChart.Update([]string{"CalculateUnit", "CalculateValue"})
  1507. // if err != nil {
  1508. // fmt.Println(v.ChartInfoId, "修复历史数据失败:", err)
  1509. // }
  1510. // }
  1511. // }
  1512. // }
  1513. // 修复相关性图表与滚动相关性图表的强关联关系
  1514. //func init() {
  1515. // condition := ` AND source = ? `
  1516. // pars := []interface{}{utils.CHART_SOURCE_ROLLING_CORRELATION}
  1517. // list, err := data_manage.GetChartListByCondition(condition, pars, 0, 1000)
  1518. // if err != nil {
  1519. // fmt.Println("err:", err)
  1520. // return
  1521. // }
  1522. // for _, chartInfo := range list {
  1523. // multipleGraphConfigChartMapping, e := data_manage.GetMultipleGraphConfigChartMappingByChartId(chartInfo.ChartInfoId)
  1524. // if e != nil {
  1525. // fmt.Println(chartInfo.ChartInfoId, ";获取滚动相关性图表的配置信息失败, Err:"+e.Error())
  1526. // continue
  1527. // }
  1528. // baseChartMultipleGraphConfigChartMapping, e := data_manage.GetMultipleGraphConfigChartMappingByIdAndSource(multipleGraphConfigChartMapping.MultipleGraphConfigId, 2)
  1529. // if e != nil {
  1530. // fmt.Println(chartInfo.ChartInfoId, ";获取相关性图表的配置信息失败, Err:"+e.Error())
  1531. // continue
  1532. // }
  1533. // baseChartCorrelationChart := new(data_manage.ChartInfoCorrelation)
  1534. // if e := baseChartCorrelationChart.GetItemById(baseChartMultipleGraphConfigChartMapping.ChartInfoId); e != nil {
  1535. // fmt.Println(chartInfo.ChartInfoId, ";获取基础相关性图表信息失败, Err:"+e.Error())
  1536. // continue
  1537. // }
  1538. //
  1539. // // 自己的配置
  1540. // selfChartCorrelationChart := new(data_manage.ChartInfoCorrelation)
  1541. // if e := selfChartCorrelationChart.GetItemById(chartInfo.ChartInfoId); e != nil {
  1542. // fmt.Println(chartInfo.ChartInfoId, ";获取自己的相关性图表信息失败, Err:"+e.Error())
  1543. // continue
  1544. // }
  1545. //
  1546. // selfChartCorrelationChart.BaseCalculateUnit = baseChartCorrelationChart.CalculateUnit
  1547. // selfChartCorrelationChart.BaseCalculateValue = baseChartCorrelationChart.CalculateValue
  1548. // err = selfChartCorrelationChart.Update([]string{"BaseCalculateUnit", "BaseCalculateValue"})
  1549. // if err != nil {
  1550. // fmt.Println(chartInfo.ChartInfoId, ";更新相关性图表信息失败, Err:"+err.Error())
  1551. // continue
  1552. // }
  1553. // }
  1554. //
  1555. //}
  1556. // 修复相关性图表与滚动相关性图表的强关联关系
  1557. //func init() {
  1558. // {
  1559. // condition := ` AND source = ? `
  1560. // pars := []interface{}{utils.CHART_SOURCE_ROLLING_CORRELATION}
  1561. // list, err := data_manage.GetChartListByCondition(condition, pars, 0, 1000)
  1562. // if err != nil {
  1563. // fmt.Println("err:", err)
  1564. // return
  1565. // }
  1566. // for _, chartInfo := range list {
  1567. // multipleGraphConfigChartMapping, e := data_manage.GetMultipleGraphConfigChartMappingByChartId(chartInfo.ChartInfoId)
  1568. // if e != nil {
  1569. // fmt.Println(chartInfo.ChartInfoId, ";获取滚动相关性图表的配置信息失败, Err:"+e.Error())
  1570. // continue
  1571. // }
  1572. // multipleGraphConfig, e := data_manage.GetMultipleGraphConfigById(multipleGraphConfigChartMapping.MultipleGraphConfigId)
  1573. // if e != nil {
  1574. // fmt.Println(chartInfo.ChartInfoId, ";获取相关性图表的配置信息失败, Err:"+e.Error())
  1575. // continue
  1576. // }
  1577. // var curveConf data_manage.CurveConfig
  1578. // e = json.Unmarshal([]byte(multipleGraphConfig.Curve), &curveConf)
  1579. // if e != nil {
  1580. // fmt.Println(chartInfo.ChartInfoId, ";格式化曲线图数据失败, Err:"+e.Error())
  1581. // continue
  1582. // }
  1583. //
  1584. // // 自己的配置
  1585. // selfChartCorrelationChart := new(data_manage.ChartInfoCorrelation)
  1586. // if e := selfChartCorrelationChart.GetItemById(chartInfo.ChartInfoId); e != nil {
  1587. // fmt.Println(chartInfo.ChartInfoId, ";获取自己的相关性图表信息失败, Err:"+e.Error())
  1588. // continue
  1589. // }
  1590. //
  1591. // selfChartCorrelationChart.DateType = curveConf.DateType
  1592. //
  1593. // startDate, endDate := utils.GetDateByDateType(curveConf.DateType, curveConf.StartDate, curveConf.EndDate)
  1594. // if startDate != `` {
  1595. // startDateTime, e := time.ParseInLocation(utils.FormatDate, startDate, time.Local)
  1596. // if e != nil {
  1597. // fmt.Println(chartInfo.ChartInfoId, ";开始日期格式化失败,开始日期:", startDate, ", Err:"+e.Error())
  1598. // continue
  1599. // }
  1600. // selfChartCorrelationChart.StartDate = startDateTime
  1601. // }
  1602. // if endDate != `` {
  1603. // endDateTime, e := time.ParseInLocation(utils.FormatDate, endDate, time.Local)
  1604. // if e != nil {
  1605. // fmt.Println(chartInfo.ChartInfoId, ";开始日期格式化失败,开始日期:", startDate, ", Err:"+e.Error())
  1606. // continue
  1607. // }
  1608. // selfChartCorrelationChart.EndDate = endDateTime
  1609. // }
  1610. // err = selfChartCorrelationChart.Update([]string{"DateType", "StartDate", "EndDate"})
  1611. // if err != nil {
  1612. // fmt.Println(chartInfo.ChartInfoId, ";更新相关性图表信息失败, Err:"+err.Error())
  1613. // continue
  1614. // }
  1615. // }
  1616. //
  1617. // fmt.Println("图表更新完成")
  1618. // }
  1619. //
  1620. // {
  1621. // // 更新指标
  1622. // condition := ` AND source = ? `
  1623. // pars := []interface{}{utils.DATA_SOURCE_CALCULATE_CORRELATION}
  1624. // list, err := data_manage.GetEdbInfoListV2ByCondition(condition, pars, 0, 10000)
  1625. // if err != nil {
  1626. // fmt.Println("err:", err)
  1627. // return
  1628. // }
  1629. // for _, edbInfo := range list {
  1630. // multipleGraphConfigEdbMappingInfo, e := data_manage.GetMultipleGraphConfigEdbMappingByEdbInfoId(edbInfo.EdbInfoId)
  1631. // if e != nil {
  1632. // fmt.Println(edbInfo.EdbInfoId, ";获取滚动相关性指标的配置信息失败, Err:"+e.Error())
  1633. // continue
  1634. // }
  1635. // multipleGraphConfig, e := data_manage.GetMultipleGraphConfigById(multipleGraphConfigEdbMappingInfo.MultipleGraphConfigId)
  1636. // if e != nil {
  1637. // fmt.Println(edbInfo.EdbInfoId, ";获取相关性图表的配置信息失败, Err:"+e.Error())
  1638. // continue
  1639. // }
  1640. //
  1641. // // 曲线图配置
  1642. // var curveConf data_manage.CurveConfig
  1643. // e = json.Unmarshal([]byte(multipleGraphConfig.Curve), &curveConf)
  1644. // if e != nil {
  1645. // fmt.Println(edbInfo.EdbInfoId, ";格式化曲线图数据失败, Err:"+e.Error())
  1646. // continue
  1647. // }
  1648. //
  1649. // var formulaConf request.EdbCalculateFormula
  1650. // e = json.Unmarshal([]byte(edbInfo.CalculateFormula), &formulaConf)
  1651. // if e != nil {
  1652. // fmt.Println(edbInfo.EdbInfoId, ";格式化指标计算配置数据失败, Err:"+e.Error())
  1653. // continue
  1654. // }
  1655. // formulaConf.DateType = curveConf.DateType
  1656. // formulaConf.StartDate = curveConf.StartDate
  1657. // formulaConf.EndDate = curveConf.EndDate
  1658. // calculateFormulaByte, err := json.Marshal(formulaConf)
  1659. // edbInfo.CalculateFormula = string(calculateFormulaByte)
  1660. // err = edbInfo.Update([]string{"CalculateFormula"})
  1661. // if err != nil {
  1662. // fmt.Println(edbInfo.EdbInfoId, ";更新指标信息失败, Err:"+err.Error())
  1663. // continue
  1664. // }
  1665. // }
  1666. //
  1667. // fmt.Println("指标更新完成")
  1668. // }
  1669. //}