chart_info.go 45 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570
  1. package data_manage
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/rdlucklib/rdluck_tools/paging"
  6. "eta/eta_mobile/controllers"
  7. "eta/eta_mobile/models"
  8. "eta/eta_mobile/models/data_manage"
  9. "eta/eta_mobile/models/system"
  10. "eta/eta_mobile/services/data"
  11. "eta/eta_mobile/utils"
  12. "strconv"
  13. "strings"
  14. "time"
  15. )
  16. // 图表管理
  17. type ChartInfoController struct {
  18. controllers.BaseAuthController
  19. }
  20. func GetChartInfoDetailFromUniqueCode(chartInfo *data_manage.ChartInfoView, isCache bool, sysUser *system.Admin) (resp *data_manage.ChartInfoDetailFromUniqueCodeResp, isOk bool, msg, errMsg string) {
  21. resp = new(data_manage.ChartInfoDetailFromUniqueCodeResp)
  22. adminId := sysUser.AdminId
  23. //判断是否存在缓存,如果存在缓存,那么直接从缓存中获取
  24. key := data.GetChartInfoDataKey(chartInfo.ChartInfoId)
  25. if utils.Re == nil && isCache {
  26. if utils.Re == nil && utils.Rc.IsExist(key) {
  27. if data, err1 := utils.Rc.RedisBytes(key); err1 == nil {
  28. err := json.Unmarshal(data, &resp)
  29. if err == nil && resp != nil {
  30. // 这里跟当前用户相关的信息重新查询写入resp, 不使用缓存中的
  31. var myCond string
  32. var myPars []interface{}
  33. myCond += ` AND a.admin_id=? `
  34. myPars = append(myPars, adminId)
  35. myCond += ` AND a.chart_info_id=? `
  36. myPars = append(myPars, chartInfo.ChartInfoId)
  37. myList, err := data_manage.GetMyChartByCondition(myCond, myPars)
  38. if err != nil && err.Error() != utils.ErrNoRow() {
  39. msg = "获取失败"
  40. errMsg = "获取我的图表信息失败,GetMyChartByCondition,Err:" + err.Error()
  41. return
  42. }
  43. resp.ChartInfo.IsAdd = false
  44. resp.ChartInfo.MyChartId = 0
  45. resp.ChartInfo.MyChartClassifyId = ""
  46. if myList != nil && len(myList) > 0 {
  47. resp.ChartInfo.IsAdd = true
  48. resp.ChartInfo.MyChartId = myList[0].MyChartId
  49. resp.ChartInfo.MyChartClassifyId = myList[0].MyChartClassifyId
  50. }
  51. isOk = true
  52. fmt.Println("source redis")
  53. return
  54. }
  55. }
  56. }
  57. }
  58. chartInfoId := chartInfo.ChartInfoId
  59. dateType := chartInfo.DateType
  60. if dateType <= 0 {
  61. dateType = 3
  62. }
  63. startDate := chartInfo.StartDate
  64. endDate := chartInfo.EndDate
  65. seasonStartDate := chartInfo.SeasonStartDate
  66. seasonEndDate := chartInfo.SeasonEndDate
  67. calendar := chartInfo.Calendar
  68. chartType := chartInfo.ChartType
  69. if calendar == "" {
  70. calendar = "公历"
  71. }
  72. fmt.Println("a dateType:", dateType)
  73. switch dateType {
  74. case 1:
  75. startDate = "2000-01-01"
  76. endDate = ""
  77. case 2:
  78. startDate = "2010-01-01"
  79. endDate = ""
  80. case 3:
  81. startDate = "2015-01-01"
  82. endDate = ""
  83. case 4:
  84. //startDate = strconv.Itoa(time.Now().Year()) + "-01-01"
  85. startDate = "2021-01-01"
  86. endDate = ""
  87. case 5:
  88. startDate = startDate + "-01"
  89. endDate = endDate + "-01"
  90. case 6:
  91. //startDate = startDate + "-01"
  92. endDate = ""
  93. case 7:
  94. startDate = "2018-01-01"
  95. endDate = ""
  96. case 8:
  97. startDate = "2019-01-01"
  98. endDate = ""
  99. case 9:
  100. startDate = "2020-01-01"
  101. endDate = ""
  102. endDate = ""
  103. case 11:
  104. startDate = "2022-01-01"
  105. endDate = ""
  106. }
  107. // 兼容日期错误
  108. {
  109. if strings.Count(startDate, "-") == 1 {
  110. startDate = startDate + "-01"
  111. }
  112. if strings.Count(endDate, "-") == 1 {
  113. endDate = endDate + "-01"
  114. }
  115. }
  116. if chartType == 2 {
  117. if seasonStartDate != "" {
  118. startDate = seasonStartDate + "-01"
  119. } else {
  120. fivePre := time.Now().AddDate(-4, 0, 0).Year()
  121. startDate = strconv.Itoa(fivePre) + "-01-01"
  122. }
  123. if seasonEndDate != "" {
  124. seasonEndDateTime, tmpErr := time.ParseInLocation(utils.FormatDate, seasonEndDate+"-01", time.Local)
  125. if tmpErr != nil {
  126. msg = "获取失败"
  127. errMsg = "获取图表,指标信息失败,Err:" + tmpErr.Error()
  128. return
  129. }
  130. endDate = seasonEndDateTime.AddDate(0, 1, -1).Format(utils.FormatDate)
  131. } else {
  132. //endDate = time.Now().Format(utils.FormatDate)
  133. }
  134. }
  135. mappingList, err := data_manage.GetChartEdbMappingList(chartInfoId)
  136. if err != nil {
  137. msg = "获取失败"
  138. errMsg = "获取图表,指标信息失败,Err:" + err.Error()
  139. return
  140. }
  141. extraConfigStr := chartInfo.ExtraConfig //图表额外数据参数
  142. var barConfig data_manage.BarChartInfoReq
  143. // 柱方图的一些配置
  144. if chartInfo != nil && chartInfo.ChartType == 7 {
  145. if chartInfo.BarConfig == `` {
  146. msg = "柱方图未配置"
  147. errMsg = "柱方图未配置"
  148. return
  149. }
  150. err := json.Unmarshal([]byte(chartInfo.BarConfig), &barConfig)
  151. if err != nil {
  152. msg = "柱方图配置异常"
  153. errMsg = "柱方图配置异常"
  154. return
  155. }
  156. extraConfigStr = chartInfo.BarConfig
  157. }
  158. // 获取图表中的指标数据
  159. edbList, xEdbIdValue, yDataList, dataResp, err, errMsg := data.GetChartEdbData(chartInfoId, chartType, calendar, startDate, endDate, mappingList, extraConfigStr)
  160. if err != nil {
  161. msg = "获取失败"
  162. if errMsg != `` {
  163. msg = errMsg
  164. }
  165. errMsg = "获取图表,指标信息失败,Err:" + err.Error()
  166. return
  167. }
  168. warnEdbList := make([]string, 0)
  169. for _, v := range edbList {
  170. if v.IsNullData {
  171. warnEdbList = append(warnEdbList, v.EdbName+"("+v.EdbCode+")")
  172. }
  173. }
  174. if len(warnEdbList) > 0 {
  175. chartInfo.WarnMsg = `图表引用指标异常,异常指标:` + strings.Join(warnEdbList, ",")
  176. }
  177. /*
  178. ChartClassify []*ChartClassifyView
  179. */
  180. chartClassify, _ := data_manage.GetChartClassifyViewById(chartInfo.ChartClassifyId)
  181. if chartClassify != nil {
  182. chartClassifyParent, _ := data_manage.GetChartClassifyViewById(chartClassify.ParentId)
  183. chartInfo.ChartClassify = append(chartInfo.ChartClassify, chartClassifyParent)
  184. }
  185. chartInfo.ChartClassify = append(chartInfo.ChartClassify, chartClassify)
  186. resp.EdbInfoList = edbList
  187. //判断是否需要展示英文标识
  188. chartInfo.IsEnChart = data.CheckIsEnChart(chartInfo.ChartNameEn, edbList, chartInfo.Source, chartInfo.ChartType)
  189. //判断是否加入我的图库
  190. {
  191. var myChartCondition string
  192. var myChartPars []interface{}
  193. myChartCondition += ` AND a.admin_id=? `
  194. myChartPars = append(myChartPars, adminId)
  195. myChartCondition += ` AND a.chart_info_id=? `
  196. myChartPars = append(myChartPars, chartInfo.ChartInfoId)
  197. myChartList, err := data_manage.GetMyChartByCondition(myChartCondition, myChartPars)
  198. if err != nil && err.Error() != utils.ErrNoRow() {
  199. msg = "获取失败"
  200. errMsg = "获取我的图表信息失败,GetMyChartByCondition,Err:" + err.Error()
  201. return
  202. }
  203. if myChartList != nil && len(myChartList) > 0 {
  204. chartInfo.IsAdd = true
  205. chartInfo.MyChartId = myChartList[0].MyChartId
  206. chartInfo.MyChartClassifyId = myChartList[0].MyChartClassifyId
  207. }
  208. }
  209. // 单位
  210. if chartType == utils.CHART_TYPE_BAR && len(yDataList) > 0 {
  211. chartInfo.Unit = yDataList[0].Unit
  212. chartInfo.UnitEn = yDataList[0].UnitEn
  213. }
  214. //图表操作权限
  215. chartInfo.IsEdit = data.CheckOpChartPermission(sysUser, chartInfo.SysUserId)
  216. chartInfo.Button = data_manage.ChartViewButton{
  217. IsEdit: chartInfo.IsEdit,
  218. IsEnChart: chartInfo.IsEnChart,
  219. IsAdd: chartInfo.IsAdd,
  220. IsCopy: true,
  221. IsSetName: chartInfo.IsSetName,
  222. }
  223. resp.ChartInfo = chartInfo
  224. resp.XEdbIdValue = xEdbIdValue
  225. resp.YDataList = yDataList
  226. resp.Status = true
  227. resp.BarChartInfo = barConfig
  228. resp.DataResp = dataResp
  229. // 将数据加入缓存
  230. if utils.Re == nil {
  231. data, _ := json.Marshal(resp)
  232. utils.Rc.Put(key, data, 2*time.Hour)
  233. }
  234. isOk = true
  235. return
  236. }
  237. // @Title 编辑图表英文信息接口
  238. // @Description 编辑图表英文信息接口
  239. // @Param request body data_manage.EditChartEnInfoReq true "type json string"
  240. // @Success Ret=200 编辑成功
  241. // @router /chart_info/en/edit [post]
  242. func (this *ChartInfoController) ChartEnInfoEdit() {
  243. br := new(models.BaseResponse).Init()
  244. defer func() {
  245. this.Data["json"] = br
  246. this.ServeJSON()
  247. }()
  248. sysUser := this.SysUser
  249. if sysUser == nil {
  250. br.Msg = "请登录"
  251. br.ErrMsg = "请登录,SysUser Is Empty"
  252. br.Ret = 408
  253. return
  254. }
  255. var req data_manage.EditChartEnInfoReq
  256. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  257. if err != nil {
  258. br.Msg = "参数解析异常!"
  259. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  260. return
  261. }
  262. req.ChartNameEn = strings.Trim(req.ChartNameEn, " ")
  263. if req.ChartInfoId <= 0 {
  264. br.Msg = "请选择图表"
  265. return
  266. }
  267. //判断指标名称是否存在
  268. chartItem, err := data_manage.GetChartInfoById(req.ChartInfoId)
  269. if err != nil {
  270. if err.Error() == utils.ErrNoRow() {
  271. br.Msg = "图表已被删除,请刷新页面"
  272. br.ErrMsg = "图表已被删除,请刷新页面"
  273. return
  274. }
  275. br.Msg = "获取图表信息失败"
  276. br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
  277. return
  278. }
  279. // 判断是否有传入对应的指标配置
  280. noEdbInfoType := []int{10}
  281. if len(req.ChartEdbInfoList) <= 0 && !utils.InArrayByInt(noEdbInfoType, chartItem.ChartType) {
  282. br.Msg = "请选择指标!"
  283. return
  284. }
  285. var edbCondition string
  286. var edbPars []interface{}
  287. for _, v := range req.ChartEdbInfoList {
  288. edbInfoId := v.EdbInfoId
  289. edbInfo, err := data_manage.GetEdbInfoById(edbInfoId)
  290. if err != nil {
  291. if err.Error() == utils.ErrNoRow() {
  292. br.Msg = "图表不存在!"
  293. br.ErrMsg = "图表指标不存在,ChartInfoId:" + strconv.Itoa(edbInfoId)
  294. return
  295. } else {
  296. br.Msg = "获取图表信息失败!"
  297. br.ErrMsg = "获取图表的指标信息失败,Err:" + err.Error()
  298. return
  299. }
  300. }
  301. if edbInfo == nil {
  302. br.Msg = "指标不存在!"
  303. br.ErrMsg = "指标不存在,ChartInfoId:" + strconv.Itoa(edbInfoId)
  304. return
  305. }
  306. //判断指标名称是否重复
  307. if v.EdbNameEn != "" {
  308. edbCondition = ""
  309. edbPars = make([]interface{}, 0)
  310. edbCondition += " AND edb_info_id<>? "
  311. edbPars = append(edbPars, edbInfo.EdbInfoId)
  312. /*edbCondition += " AND source=? "
  313. edbPars = append(edbPars, edbInfo.Source)*/
  314. edbCondition += " AND edb_name_en=? "
  315. edbPars = append(edbPars, v.EdbNameEn)
  316. edbExist, err := data_manage.GetEdbInfoByCondition(edbCondition, edbPars)
  317. if err != nil {
  318. if err.Error() != utils.ErrNoRow() {
  319. br.Msg = "判断英文指标名称是否存在失败"
  320. br.ErrMsg = "判断英文指标名称是否存在失败,Err:" + err.Error()
  321. return
  322. }
  323. }
  324. if err == nil && edbExist.EdbInfoId > 0 {
  325. br.Msg = edbExist.EdbName + ":" + v.EdbNameEn + "指标名称已存在"
  326. br.ErrMsg = "英文指标名称已存在,请重新填写"
  327. br.IsSendEmail = false
  328. return
  329. }
  330. }
  331. }
  332. if req.ChartNameEn != "" || req.ExtraConfig != `` {
  333. var condition string
  334. var pars []interface{}
  335. condition += " AND chart_info_id<>? "
  336. pars = append(pars, req.ChartInfoId)
  337. /*condition += " AND chart_classify_id=? "
  338. pars = append(pars, chartItem.ChartClassifyId)*/
  339. condition += " AND chart_name_en=? "
  340. pars = append(pars, req.ChartNameEn)
  341. existItem, err := data_manage.GetChartInfoByCondition(condition, pars)
  342. if err != nil {
  343. if err.Error() != utils.ErrNoRow() {
  344. br.Msg = "判断英文图表名称是否存在失败"
  345. br.ErrMsg = "判断英文图表名称是否存在失败,Err:" + err.Error()
  346. return
  347. }
  348. }
  349. if err == nil && existItem.ChartInfoId > 0 {
  350. br.Msg = existItem.ChartName + ":" + req.ChartNameEn + "图表名称已存在"
  351. return
  352. }
  353. }
  354. err = data_manage.EditChartEnInfoAndEdbEnInfo(&req)
  355. if err != nil {
  356. br.Msg = "保存失败"
  357. br.ErrMsg = "保存失败,Err:" + err.Error()
  358. return
  359. }
  360. //添加es数据
  361. go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
  362. //修改my eta es数据
  363. go data.EsAddOrEditMyChartInfoByChartInfoId(chartItem.ChartInfoId)
  364. //edbinfo 修改es信息
  365. for _, v := range req.ChartEdbInfoList {
  366. edbInfoId := v.EdbInfoId
  367. edbInfo, err := data_manage.GetEdbInfoById(edbInfoId)
  368. if err != nil {
  369. if err.Error() == utils.ErrNoRow() {
  370. br.Msg = "图表不存在!"
  371. br.ErrMsg = "图表指标不存在,ChartInfoId:" + strconv.Itoa(edbInfoId)
  372. return
  373. } else {
  374. br.Msg = "获取图表信息失败!"
  375. br.ErrMsg = "获取图表的指标信息失败,Err:" + err.Error()
  376. return
  377. }
  378. }
  379. if edbInfo != nil {
  380. go data.AddOrEditEdbInfoToEs(edbInfoId)
  381. }
  382. }
  383. //新增操作日志
  384. {
  385. chartLog := new(data_manage.ChartInfoLog)
  386. chartLog.ChartName = chartItem.ChartName
  387. chartLog.ChartInfoId = req.ChartInfoId
  388. chartLog.ChartClassifyId = chartItem.ChartClassifyId
  389. chartLog.SysUserId = sysUser.AdminId
  390. chartLog.SysUserRealName = sysUser.RealName
  391. chartLog.UniqueCode = chartItem.UniqueCode
  392. chartLog.CreateTime = time.Now()
  393. chartLog.Content = string(this.Ctx.Input.RequestBody)
  394. chartLog.Status = "编辑图表英文信息"
  395. chartLog.Method = this.Ctx.Input.URL()
  396. go data_manage.AddChartInfoLog(chartLog)
  397. }
  398. //清除缓存
  399. if utils.Re == nil && utils.Rc != nil {
  400. utils.Rc.Delete(utils.HZ_CHART_LIB_DETAIL + chartItem.UniqueCode) //图表分享链接缓存
  401. utils.Rc.Delete(data.GetChartInfoDataKey(req.ChartInfoId))
  402. }
  403. br.Ret = 200
  404. br.Success = true
  405. br.Msg = "编辑成功"
  406. br.IsAddLog = true
  407. }
  408. // ChartInfoMove
  409. // @Title 移动图表接口
  410. // @Description 移动图表接口
  411. // @Success 200 {object} data_manage.MoveChartInfoReq
  412. // @router /chart_info/move [post]
  413. func (this *ChartInfoController) ChartInfoMove() {
  414. br := new(models.BaseResponse).Init()
  415. defer func() {
  416. this.Data["json"] = br
  417. this.ServeJSON()
  418. }()
  419. sysUser := this.SysUser
  420. if sysUser == nil {
  421. br.Msg = "请登录"
  422. br.ErrMsg = "请登录,SysUser Is Empty"
  423. br.Ret = 408
  424. return
  425. }
  426. var req data_manage.MoveChartInfoReq
  427. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  428. if err != nil {
  429. br.Msg = "参数解析异常!"
  430. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  431. return
  432. }
  433. if req.ChartInfoId <= 0 {
  434. br.Msg = "参数错误"
  435. br.ErrMsg = "图表id小于等于0"
  436. return
  437. }
  438. if req.ChartClassifyId <= 0 {
  439. br.Msg = "请选择分类"
  440. return
  441. }
  442. //判断分类是否存在
  443. count, _ := data_manage.GetChartClassifyCountById(req.ChartClassifyId)
  444. if count <= 0 {
  445. br.Msg = "分类已被删除,不可移动,请刷新页面"
  446. return
  447. }
  448. chartInfo, err := data_manage.GetChartInfoById(req.ChartInfoId)
  449. if err != nil {
  450. br.Msg = "移动失败"
  451. br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
  452. return
  453. }
  454. if chartInfo.Source != utils.CHART_SOURCE_DEFAULT {
  455. br.Msg = "图表异常"
  456. br.ErrMsg = "分类异常,不是ETA图库的图表"
  457. return
  458. }
  459. //如果改变了分类,那么移动该图表数据
  460. if chartInfo.ChartClassifyId != req.ChartClassifyId {
  461. //查询需要修改的分类下是否存在同一个图表名称
  462. tmpChartInfo, tmpErr := data_manage.GetChartInfoByClassifyIdAndName(req.ChartClassifyId, chartInfo.ChartName)
  463. if tmpErr != nil && tmpErr.Error() != utils.ErrNoRow() {
  464. br.Msg = "移动失败"
  465. br.ErrMsg = "移动失败,Err:" + tmpErr.Error()
  466. return
  467. }
  468. if tmpChartInfo != nil {
  469. br.Msg = "移动失败,同一个分类下图表名称不允许重复"
  470. br.ErrMsg = "移动失败,同一个分类下图表名称不允许重复"
  471. return
  472. }
  473. err = data_manage.MoveChartInfo(req.ChartInfoId, req.ChartClassifyId)
  474. if err != nil {
  475. br.Msg = "移动失败"
  476. br.ErrMsg = "移动失败,Err:" + err.Error()
  477. return
  478. }
  479. }
  480. //移动排序
  481. updateCol := make([]string, 0)
  482. //如果有传入 上一个兄弟节点分类id
  483. if req.PrevChartInfoId > 0 {
  484. prevChartInfo, err := data_manage.GetChartInfoById(req.PrevChartInfoId)
  485. if err != nil {
  486. br.Msg = "移动失败"
  487. br.ErrMsg = "获取上一个兄弟节点分类信息失败,Err:" + err.Error()
  488. return
  489. }
  490. //如果是移动在两个兄弟节点之间
  491. if req.NextChartInfoId > 0 {
  492. //下一个兄弟节点
  493. nextChartInfo, err := data_manage.GetChartInfoById(req.NextChartInfoId)
  494. if err != nil {
  495. br.Msg = "移动失败"
  496. br.ErrMsg = "获取下一个兄弟节点分类信息失败,Err:" + err.Error()
  497. return
  498. }
  499. //如果上一个兄弟与下一个兄弟的排序权重是一致的,那么需要将下一个兄弟(以及下个兄弟的同样排序权重)的排序权重+2,自己变成上一个兄弟的排序权重+1
  500. if prevChartInfo.Sort == nextChartInfo.Sort || prevChartInfo.Sort == chartInfo.Sort {
  501. //变更兄弟节点的排序
  502. updateSortStr := `sort + 2`
  503. _ = data_manage.UpdateChartInfoSortByClassifyId(prevChartInfo.ChartClassifyId, prevChartInfo.Sort, prevChartInfo.ChartInfoId, []int{chartInfo.Source}, updateSortStr)
  504. } else {
  505. //如果下一个兄弟的排序权重正好是上个兄弟节点的下一层,那么需要再加一层了
  506. if nextChartInfo.Sort-prevChartInfo.Sort == 1 {
  507. //变更兄弟节点的排序
  508. updateSortStr := `sort + 1`
  509. _ = data_manage.UpdateChartInfoSortByClassifyId(prevChartInfo.ChartClassifyId, prevChartInfo.Sort, prevChartInfo.ChartInfoId, []int{chartInfo.Source}, updateSortStr)
  510. }
  511. }
  512. }
  513. chartInfo.Sort = prevChartInfo.Sort + 1
  514. chartInfo.ModifyTime = time.Now()
  515. updateCol = append(updateCol, "Sort", "ModifyTime")
  516. } else {
  517. firstClassify, err := data_manage.GetFirstChartInfoByClassifyId(req.ChartClassifyId)
  518. if err != nil && err.Error() != utils.ErrNoRow() {
  519. br.Msg = "移动失败"
  520. br.ErrMsg = "获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + err.Error()
  521. return
  522. }
  523. //如果该分类下存在其他分类,且第一个其他分类的排序等于0,那么需要调整排序
  524. if firstClassify != nil && firstClassify.Sort == 0 {
  525. updateSortStr := ` sort + 1 `
  526. _ = data_manage.UpdateChartInfoSortByClassifyId(firstClassify.ChartClassifyId, 0, firstClassify.ChartInfoId-1, []int{chartInfo.Source}, updateSortStr)
  527. }
  528. chartInfo.Sort = 0 //那就是排在第一位
  529. chartInfo.ModifyTime = time.Now()
  530. updateCol = append(updateCol, "Sort", "ModifyTime")
  531. }
  532. //更新
  533. if len(updateCol) > 0 {
  534. err = chartInfo.Update(updateCol)
  535. if err != nil {
  536. br.Msg = "移动失败"
  537. br.ErrMsg = "修改失败,Err:" + err.Error()
  538. return
  539. }
  540. }
  541. if err != nil {
  542. br.Msg = "移动失败"
  543. br.ErrMsg = "修改失败,Err:" + err.Error()
  544. return
  545. }
  546. //添加es数据
  547. go data.EsAddOrEditChartInfo(req.ChartInfoId)
  548. //修改my eta es数据
  549. go data.EsAddOrEditMyChartInfoByChartInfoId(req.ChartInfoId)
  550. //新增操作日志
  551. {
  552. chartLog := new(data_manage.ChartInfoLog)
  553. chartLog.ChartName = chartInfo.ChartName
  554. chartLog.ChartInfoId = req.ChartInfoId
  555. chartLog.ChartClassifyId = chartInfo.ChartClassifyId
  556. chartLog.SysUserId = sysUser.AdminId
  557. chartLog.SysUserRealName = sysUser.RealName
  558. chartLog.UniqueCode = chartInfo.UniqueCode
  559. chartLog.CreateTime = time.Now()
  560. chartLog.Content = string(this.Ctx.Input.RequestBody)
  561. chartLog.Status = "移动图表"
  562. chartLog.Method = this.Ctx.Input.URL()
  563. go data_manage.AddChartInfoLog(chartLog)
  564. }
  565. br.Ret = 200
  566. br.Success = true
  567. br.Msg = "移动成功"
  568. }
  569. // ChartInfoDetail
  570. // @Title 获取图表详情
  571. // @Description 获取图表详情接口
  572. // @Param ChartInfoId query int true "图表id"
  573. // @Param DateType query int true "日期类型:1:00年至今,2:10年至今,3:15年至今,4:年初至今,5:自定义时间"
  574. // @Param StartDate query string true "自定义开始日期"
  575. // @Param EndDate query string true "自定义结束日期"
  576. // @Param Calendar query string true "公历/农历"
  577. // @Param SeasonStartDate query string true "季节性图开始日期"
  578. // @Param SeasonEndDate query string true "季节性图结束日期"
  579. // @Param EdbInfoId query string true "指标ID,多个用英文逗号隔开"
  580. // @Param ChartType query int true "生成样式:1:曲线图,2:季节性图"
  581. // @Success 200 {object} data_manage.ChartInfoDetailResp
  582. // @router /chart_info/detail [get]
  583. func (this *ChartInfoController) ChartInfoDetail() {
  584. br := new(models.BaseResponse).Init()
  585. defer func() {
  586. this.Data["json"] = br
  587. this.ServeJSON()
  588. }()
  589. sysUser := this.SysUser
  590. if sysUser == nil {
  591. br.Msg = "请登录"
  592. br.ErrMsg = "请登录,SysUser Is Empty"
  593. br.Ret = 408
  594. return
  595. }
  596. chartInfoId, _ := this.GetInt("ChartInfoId")
  597. dateType, _ := this.GetInt("DateType")
  598. fmt.Println("dateType:", dateType)
  599. if dateType <= 0 {
  600. dateType = 3
  601. }
  602. startDate := this.GetString("StartDate")
  603. endDate := this.GetString("EndDate")
  604. seasonStartDate := this.GetString("SeasonStartDate")
  605. seasonEndDate := this.GetString("SeasonEndDate")
  606. edbInfoId := this.GetString("EdbInfoId")
  607. chartType, _ := this.GetInt("ChartType")
  608. fmt.Println("seasonStartDate:", seasonStartDate)
  609. fmt.Println("seasonEndDate:", seasonEndDate)
  610. calendar := this.GetString("Calendar")
  611. if calendar == "" {
  612. calendar = "公历"
  613. }
  614. switch dateType {
  615. case 1:
  616. startDate = "2000-01-01"
  617. case 2:
  618. startDate = "2010-01-01"
  619. case 3:
  620. startDate = "2015-01-01"
  621. case 4:
  622. //startDate = strconv.Itoa(time.Now().Year()) + "-01-01"
  623. startDate = "2021-01-01"
  624. case 5:
  625. startDate = startDate + "-01"
  626. endDate = endDate + "-01"
  627. case 6:
  628. startDate = startDate + "-01"
  629. case 7:
  630. startDate = "2018-01-01"
  631. case 8:
  632. startDate = "2019-01-01"
  633. case 9:
  634. startDate = "2020-01-01"
  635. case 11:
  636. startDate = "2022-01-01"
  637. }
  638. var err error
  639. chartInfo := new(data_manage.ChartInfoView)
  640. if chartInfoId > 0 {
  641. chartInfo, err = data_manage.GetChartInfoViewById(chartInfoId)
  642. if err != nil {
  643. if err.Error() == utils.ErrNoRow() {
  644. br.Msg = "图被删除,请刷新页面"
  645. br.ErrMsg = "图被删除,请刷新页面,Err:" + err.Error()
  646. return
  647. }
  648. br.Msg = "获取失败"
  649. br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
  650. return
  651. }
  652. chartType = chartInfo.ChartType
  653. }
  654. if chartType == 2 {
  655. if seasonStartDate != "" {
  656. startDate = seasonStartDate + "-01"
  657. } else {
  658. fivePre := time.Now().AddDate(-4, 0, 0).Year()
  659. startDate = strconv.Itoa(fivePre) + "-01-01"
  660. }
  661. if seasonEndDate != "" {
  662. seasonEndDateTime, tmpErr := time.ParseInLocation(utils.FormatDate, seasonEndDate+"-01", time.Local)
  663. if tmpErr != nil {
  664. br.Msg = "获取失败"
  665. br.ErrMsg = "获取图表,指标信息失败,Err:" + tmpErr.Error()
  666. return
  667. }
  668. endDate = seasonEndDateTime.AddDate(0, 1, -1).Format(utils.FormatDate)
  669. } else {
  670. endDate = "" //time.Now().AddDate(2, 0, 0).Format(utils.FormatDate)
  671. }
  672. }
  673. mappingList := make([]*data_manage.ChartEdbInfoMapping, 0)
  674. if chartInfoId > 0 {
  675. mappingList, err = data_manage.GetChartEdbMappingList(chartInfoId)
  676. if err != nil {
  677. br.Msg = "获取失败"
  678. br.ErrMsg = "获取图表,指标信息失败,Err:" + err.Error()
  679. return
  680. }
  681. } else {
  682. if edbInfoId != "" {
  683. mappingList, err = data_manage.GetChartEdbMappingListByEdbInfoId(edbInfoId)
  684. if err != nil {
  685. br.Msg = "获取失败"
  686. br.ErrMsg = "获取图表,指标信息失败,Err:" + err.Error()
  687. return
  688. }
  689. }
  690. }
  691. // 图表额外数据参数
  692. extraConfigStr := chartInfo.ExtraConfig
  693. // 柱方图的一些配置
  694. var barConfig data_manage.BarChartInfoReq
  695. if chartInfo != nil && chartInfo.ChartType == 7 {
  696. if chartInfo.BarConfig == `` {
  697. br.Msg = "柱方图未配置"
  698. br.ErrMsg = "柱方图未配置"
  699. return
  700. }
  701. err := json.Unmarshal([]byte(chartInfo.BarConfig), &barConfig)
  702. if err != nil {
  703. br.Msg = "柱方图配置异常"
  704. br.ErrMsg = "柱方图配置异常"
  705. return
  706. }
  707. extraConfigStr = chartInfo.BarConfig
  708. }
  709. // 获取图表中的指标数据
  710. edbList, xEdbIdValue, yDataList, dataResp, err, errMsg := data.GetChartEdbData(chartInfoId, chartType, calendar, startDate, endDate, mappingList, extraConfigStr)
  711. if err != nil {
  712. br.Msg = "获取失败"
  713. if errMsg != `` {
  714. br.Msg = errMsg
  715. }
  716. br.ErrMsg = "获取图表,指标信息失败,Err:" + err.Error()
  717. return
  718. }
  719. warnEdbList := make([]string, 0)
  720. for _, v := range edbList {
  721. if v.IsNullData {
  722. warnEdbList = append(warnEdbList, v.EdbName+"("+v.EdbCode+")")
  723. }
  724. }
  725. if len(warnEdbList) > 0 {
  726. chartInfo.WarnMsg = `图表引用指标异常,异常指标:` + strings.Join(warnEdbList, ",")
  727. }
  728. if chartInfoId > 0 && chartInfo != nil {
  729. //判断是否加入我的图库
  730. {
  731. var myChartCondition string
  732. var myChartPars []interface{}
  733. myChartCondition += ` AND a.admin_id=? `
  734. myChartPars = append(myChartPars, sysUser.AdminId)
  735. myChartCondition += ` AND a.chart_info_id=? `
  736. myChartPars = append(myChartPars, chartInfo.ChartInfoId)
  737. myChartList, err := data_manage.GetMyChartByCondition(myChartCondition, myChartPars)
  738. if err != nil && err.Error() != utils.ErrNoRow() {
  739. br.Msg = "获取失败"
  740. br.ErrMsg = "获取我的图表信息失败,GetMyChartByCondition,Err:" + err.Error()
  741. return
  742. }
  743. if myChartList != nil && len(myChartList) > 0 {
  744. chartInfo.IsAdd = true
  745. chartInfo.MyChartId = myChartList[0].MyChartId
  746. chartInfo.MyChartClassifyId = myChartList[0].MyChartClassifyId
  747. }
  748. }
  749. }
  750. // 单位
  751. if chartType == utils.CHART_TYPE_BAR && len(yDataList) > 0 {
  752. chartInfo.Unit = yDataList[0].Unit
  753. chartInfo.UnitEn = yDataList[0].UnitEn
  754. }
  755. //图表操作权限
  756. chartInfo.IsEdit = data.CheckOpChartPermission(sysUser, chartInfo.SysUserId)
  757. //判断是否需要展示英文标识
  758. chartInfo.IsEnChart = data.CheckIsEnChart(chartInfo.ChartNameEn, edbList, chartInfo.Source, chartInfo.ChartType)
  759. chartInfo.Button = data_manage.ChartViewButton{
  760. IsEdit: chartInfo.IsEdit,
  761. IsEnChart: chartInfo.IsEnChart,
  762. IsAdd: chartInfo.IsAdd,
  763. IsCopy: true,
  764. IsSetName: chartInfo.IsSetName,
  765. }
  766. resp := new(data_manage.ChartInfoDetailResp)
  767. resp.ChartInfo = chartInfo
  768. resp.EdbInfoList = edbList
  769. resp.XEdbIdValue = xEdbIdValue
  770. resp.YDataList = yDataList
  771. resp.BarChartInfo = barConfig
  772. resp.DataResp = dataResp
  773. br.Ret = 200
  774. br.Success = true
  775. br.Msg = "获取成功"
  776. br.Data = resp
  777. }
  778. // ChartInfoEdbInfoDetail
  779. // @Title 图表-获取指标详情
  780. // @Description 图表-获取指标详情接口
  781. // @Param EdbInfoId query int true "指标ID"
  782. // @Param DateType query int true "日期类型:1:00年至今,2:10年至今,3:15年至今,4:年初至今,5:自定义时间,6:自定义起始时间至今,7:18年至今,8:19年至今,9:20年至今"
  783. // @Param StartDate query string true "自定义开始日期"
  784. // @Param EndDate query string true "自定义结束日期"
  785. // @Param EdbInfoType query int true "1:标准指标,0:领先指标,默认为标准指标"
  786. // @Param LeadValue query int true "领先值"
  787. // @Param LeadUnit query string true "领先单位:天,月,季,周"
  788. // @Success 200 {object} data_manage.ChartEdbInfoDetailResp
  789. // @router /chart_info/edb_info/detail [get]
  790. func (this *ChartInfoController) ChartInfoEdbInfoDetail() {
  791. br := new(models.BaseResponse).Init()
  792. defer func() {
  793. this.Data["json"] = br
  794. this.ServeJSON()
  795. }()
  796. sysUser := this.SysUser
  797. if sysUser == nil {
  798. br.Msg = "请登录"
  799. br.ErrMsg = "请登录,SysUser Is Empty"
  800. br.Ret = 408
  801. return
  802. }
  803. edbInfoId, _ := this.GetInt("EdbInfoId")
  804. if edbInfoId <= 0 {
  805. br.Msg = "参数错误"
  806. return
  807. }
  808. dateType, _ := this.GetInt("DateType")
  809. if dateType <= 0 {
  810. dateType = 3
  811. }
  812. edbInfoType, _ := this.GetInt("EdbInfoType")
  813. if edbInfoType < 0 {
  814. edbInfoType = 1
  815. }
  816. leadValue, _ := this.GetInt("LeadValue")
  817. if leadValue < 0 {
  818. leadValue = 0
  819. }
  820. leadUnit := this.GetString("LeadUnit")
  821. startDate := this.GetString("StartDate")
  822. endDate := this.GetString("EndDate")
  823. isTimeBetween := false //是否是时间区间
  824. switch dateType {
  825. case 1:
  826. startDate = "2000-01-01"
  827. endDate = ""
  828. case 2:
  829. startDate = "2010-01-01"
  830. endDate = ""
  831. case 3:
  832. startDate = "2015-01-01"
  833. endDate = ""
  834. case 4:
  835. //startDate = strconv.Itoa(time.Now().Year()) + "-01-01"
  836. startDate = "2021-01-01"
  837. endDate = ""
  838. case 5:
  839. startDate = startDate + "-01"
  840. endDate = endDate + "-01"
  841. isTimeBetween = true
  842. case 6:
  843. //startDate = startDate + "-01"
  844. endDate = ""
  845. case 7:
  846. startDate = "2018-01-01"
  847. endDate = ""
  848. case 8:
  849. startDate = "2019-01-01"
  850. endDate = ""
  851. case 9:
  852. startDate = "2020-01-01"
  853. endDate = ""
  854. case 11:
  855. startDate = "2022-01-01"
  856. endDate = ""
  857. default:
  858. startDate = startDate + "-01"
  859. endDate = endDate + "-01"
  860. }
  861. // 兼容日期错误
  862. {
  863. if strings.Count(startDate, "-") == 1 {
  864. startDate = startDate + "-01"
  865. }
  866. if strings.Count(endDate, "-") == 1 {
  867. endDate = endDate + "-01"
  868. }
  869. }
  870. if startDate == "" {
  871. br.Msg = "参数错误"
  872. br.Msg = "参数错误,无效的查询日期"
  873. return
  874. }
  875. var startDateReal string
  876. var diffSeconds int64
  877. if leadValue > 0 && leadUnit != "" {
  878. var startTimeRealTemp time.Time
  879. startDateParse, err := time.Parse(utils.FormatDate, startDate)
  880. if err != nil {
  881. br.Msg = "获取数据失败"
  882. br.ErrMsg = "获取数据失败,日期格式错误:startDate:" + startDate
  883. return
  884. }
  885. switch leadUnit {
  886. case "天":
  887. startTimeRealTemp = startDateParse.AddDate(0, 0, -leadValue)
  888. case "月":
  889. startTimeRealTemp = startDateParse.AddDate(0, -leadValue, 0)
  890. case "季":
  891. startTimeRealTemp = startDateParse.AddDate(0, -3*leadValue, 0)
  892. case "周":
  893. startTimeRealTemp = startDateParse.AddDate(0, 0, -7*leadValue)
  894. case "年":
  895. startTimeRealTemp = startDateParse.AddDate(-leadValue, 0, 0)
  896. }
  897. if startTimeRealTemp.Before(startDateParse) {
  898. startDateReal = startTimeRealTemp.Format(utils.FormatDate)
  899. diffSeconds = (int64(startTimeRealTemp.UnixNano()) - int64(startDateParse.UnixNano())) / 1e6
  900. } else {
  901. startDateReal = startDate
  902. diffSeconds = 0
  903. }
  904. } else {
  905. startDateReal = startDate
  906. }
  907. edbInfo, err := data_manage.GetEdbInfoById(edbInfoId)
  908. if err != nil {
  909. br.Msg = "获取失败"
  910. br.Msg = "获取失败,Err:" + err.Error()
  911. return
  912. }
  913. var dataList []*data_manage.EdbDataList
  914. var minData, maxData float64
  915. switch edbInfo.EdbInfoType {
  916. case 0: //普通源指标
  917. dataList, err = data_manage.GetEdbDataList(edbInfo.Source, edbInfoId, startDateReal, endDate)
  918. if err != nil {
  919. br.Msg = "获取失败"
  920. br.Msg = "获取失败,Err:" + err.Error()
  921. return
  922. }
  923. //查询区间内最大最小值
  924. minData, maxData, err = data_manage.GetEdbDataListMinAndMax(edbInfo.Source, edbInfoId, startDateReal, endDate)
  925. if err != nil {
  926. br.Msg = "获取失败"
  927. br.Msg = "获取指标最新的最大最小值失败,Err:" + err.Error()
  928. return
  929. }
  930. case 1: //预测指标
  931. tmpDataList, sourceEdbInfoItem, _, err, _ := data.GetPredictDataListByPredictEdbInfo(edbInfo, startDateReal, endDate, isTimeBetween)
  932. if err != nil {
  933. br.Msg = "获取失败"
  934. br.Msg = "获取失败,Err:" + err.Error()
  935. return
  936. }
  937. dataList = tmpDataList
  938. // 有预测数据,且为普通的预测指标
  939. if len(dataList) > 0 && edbInfo.EdbInfoType == 0 {
  940. //查询区间内最大最小值
  941. minData, maxData, err = data_manage.GetEdbDataListMinAndMax(sourceEdbInfoItem.Source, sourceEdbInfoItem.EdbInfoId, startDateReal, endDate)
  942. if err != nil {
  943. br.Msg = "获取失败"
  944. br.Msg = "获取指标最新的最大最小值失败,Err:" + err.Error()
  945. return
  946. }
  947. tmpValue := dataList[len(dataList)-1]
  948. // 如果最大值 小于 预测值,那么将预测值作为最大值数据返回
  949. if edbInfo.MaxValue < tmpValue.Value {
  950. maxData = tmpValue.Value
  951. }
  952. // 如果最小值 大于 预测值,那么将预测值作为最小值数据返回
  953. if edbInfo.MinValue > tmpValue.Value {
  954. minData = tmpValue.Value
  955. }
  956. }
  957. }
  958. if diffSeconds != 0 {
  959. dataListLen := len(dataList)
  960. for i := 0; i < dataListLen; i++ {
  961. dataList[i].DataTimestamp = dataList[i].DataTimestamp - diffSeconds
  962. }
  963. day, err := utils.GetDaysBetween2Date(utils.FormatDate, startDate, startDateReal)
  964. if err != nil {
  965. br.Msg = "获取失败"
  966. br.Msg = "获取领先滞后的的日期间隔失败,Err:" + err.Error()
  967. return
  968. }
  969. latestDateTime, err := time.ParseInLocation(utils.FormatDate, edbInfo.LatestDate, time.Local)
  970. if err != nil {
  971. br.Msg = "获取失败"
  972. br.Msg = "指标日期转换失败,Err:" + err.Error()
  973. return
  974. }
  975. edbInfo.LatestDate = latestDateTime.AddDate(0, 0, day).Format(utils.FormatDate)
  976. }
  977. mapping := new(data_manage.ChartEdbInfoMapping)
  978. mapping.EdbInfoId = edbInfo.EdbInfoId
  979. mapping.EdbInfoCategoryType = edbInfo.EdbInfoType
  980. mapping.SourceName = edbInfo.SourceName
  981. mapping.Source = edbInfo.Source
  982. mapping.EdbCode = edbInfo.EdbCode
  983. mapping.EdbName = edbInfo.EdbName
  984. mapping.EdbType = edbInfo.EdbType
  985. mapping.Frequency = edbInfo.Frequency
  986. mapping.Unit = edbInfo.Unit
  987. mapping.StartDate = edbInfo.StartDate
  988. mapping.EndDate = edbInfo.EndDate
  989. mapping.ChartEdbMappingId = 0
  990. mapping.ChartInfoId = 0
  991. mapping.MaxData = maxData
  992. mapping.MinData = minData
  993. mapping.IsOrder = false
  994. mapping.IsAxis = 1
  995. mapping.EdbInfoType = 1
  996. mapping.LeadValue = 0
  997. mapping.LeadUnit = ""
  998. mapping.LeadUnitEn = ""
  999. mapping.ChartStyle = ""
  1000. mapping.ChartColor = ""
  1001. mapping.PredictChartColor = ""
  1002. mapping.ChartWidth = 0
  1003. mapping.LatestDate = edbInfo.LatestDate
  1004. mapping.DataList = dataList
  1005. resp := new(data_manage.ChartEdbInfoDetailResp)
  1006. resp.EdbInfo = mapping
  1007. br.Ret = 200
  1008. br.Success = true
  1009. br.Msg = "获取成功"
  1010. br.Data = resp
  1011. }
  1012. // CopyChartInfo
  1013. // @Title 复制并新增图表接口
  1014. // @Description 新增图表接口
  1015. // @Param request body data_manage.CopyAddChartInfoReq true "type json string"
  1016. // @Success 200 {object} data_manage.AddChartInfoResp
  1017. // @router /chart_info/copy [post]
  1018. func (this *ChartInfoController) CopyChartInfo() {
  1019. br := new(models.BaseResponse).Init()
  1020. defer func() {
  1021. this.Data["json"] = br
  1022. this.ServeJSON()
  1023. }()
  1024. sysUser := this.SysUser
  1025. if sysUser == nil {
  1026. br.Msg = "请登录"
  1027. br.ErrMsg = "请登录,SysUser Is Empty"
  1028. br.Ret = 408
  1029. return
  1030. }
  1031. deleteCache := true
  1032. cacheKey := "CACHE_CHART_INFO_ADD_" + strconv.Itoa(sysUser.AdminId)
  1033. defer func() {
  1034. if deleteCache {
  1035. utils.Rc.Delete(cacheKey)
  1036. }
  1037. }()
  1038. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  1039. deleteCache = false
  1040. br.Msg = "系统处理中,请稍后重试!"
  1041. br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
  1042. return
  1043. }
  1044. var req data_manage.CopyAddChartInfoReq
  1045. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1046. if err != nil {
  1047. br.Msg = "参数解析异常!"
  1048. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1049. return
  1050. }
  1051. // 获取原图表信息
  1052. oldChartInfo, err := data_manage.GetChartInfoById(req.ChartInfoId)
  1053. if err != nil {
  1054. br.Msg = "获取原图表信息失败"
  1055. br.ErrMsg = "获取原图表信息失败,Err:" + err.Error()
  1056. return
  1057. }
  1058. //校验图表名称是否重复
  1059. req.ChartName = strings.Trim(req.ChartName, " ")
  1060. if req.ChartName == "" {
  1061. br.Msg = "请填写图表名称!"
  1062. return
  1063. }
  1064. if req.ChartClassifyId <= 0 {
  1065. br.Msg = "分类参数错误!"
  1066. return
  1067. }
  1068. chartClassify, err := data_manage.GetChartClassifyById(req.ChartClassifyId)
  1069. if err != nil {
  1070. if err.Error() == utils.ErrNoRow() {
  1071. br.Msg = "分类不存在"
  1072. br.ErrMsg = "分类不存在"
  1073. return
  1074. }
  1075. br.Msg = "获取分类信息失败"
  1076. br.ErrMsg = "获取分类信息失败,Err:" + err.Error()
  1077. return
  1078. }
  1079. if chartClassify == nil {
  1080. br.Msg = "分类不存在"
  1081. br.ErrMsg = "分类不存在"
  1082. return
  1083. }
  1084. //count, err := data_manage.ChartInfoExist("", edbInfoIdStr)
  1085. //if err != nil && err.Error() != utils.ErrNoRow() {
  1086. // br.Msg = "保存失败"
  1087. // br.ErrMsg = "判断图表名称是否存在失败,Err:" + err.Error()
  1088. // return
  1089. //}
  1090. //if count > 0 {
  1091. // br.Msg = "所选指标已存在相同指标"
  1092. // return
  1093. //}
  1094. //判断图表是否存在
  1095. var condition string
  1096. var pars []interface{}
  1097. condition += " AND chart_classify_id=? "
  1098. pars = append(pars, req.ChartClassifyId)
  1099. condition += " AND chart_name=? AND source = ? "
  1100. pars = append(pars, req.ChartName, utils.CHART_SOURCE_DEFAULT)
  1101. count, err := data_manage.GetChartInfoCountByCondition(condition, pars)
  1102. if err != nil {
  1103. br.Msg = "判断图表名称是否存在失败"
  1104. br.ErrMsg = "判断图表名称是否存在失败,Err:" + err.Error()
  1105. return
  1106. }
  1107. if count > 0 {
  1108. br.Msg = "图表已存在,请重新填写"
  1109. br.IsSendEmail = false
  1110. return
  1111. }
  1112. //获取原图表关联的指标信息列表
  1113. edbMappingList, err := data_manage.GetChartEdbMappingList(req.ChartInfoId)
  1114. if err != nil {
  1115. br.Msg = "获取图表关联的指标信息失败!"
  1116. return
  1117. }
  1118. //添加图表
  1119. timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
  1120. chartInfo := &data_manage.ChartInfo{
  1121. ChartInfoId: 0,
  1122. ChartName: req.ChartName,
  1123. ChartClassifyId: req.ChartClassifyId,
  1124. SysUserId: sysUser.AdminId,
  1125. SysUserRealName: sysUser.RealName,
  1126. UniqueCode: utils.MD5(utils.CHART_PREFIX + "_" + timestamp),
  1127. CreateTime: time.Now(),
  1128. ModifyTime: time.Now(),
  1129. DateType: oldChartInfo.DateType,
  1130. StartDate: oldChartInfo.StartDate,
  1131. EndDate: oldChartInfo.EndDate,
  1132. IsSetName: oldChartInfo.IsSetName,
  1133. EdbInfoIds: oldChartInfo.EdbInfoIds,
  1134. ChartType: oldChartInfo.ChartType,
  1135. Calendar: oldChartInfo.Calendar,
  1136. SeasonStartDate: oldChartInfo.SeasonStartDate,
  1137. SeasonEndDate: oldChartInfo.SeasonEndDate,
  1138. ChartImage: oldChartInfo.ChartImage,
  1139. BarConfig: oldChartInfo.BarConfig,
  1140. //Sort: sort,
  1141. LeftMin: oldChartInfo.LeftMin,
  1142. LeftMax: oldChartInfo.LeftMax,
  1143. RightMin: oldChartInfo.RightMin,
  1144. RightMax: oldChartInfo.RightMax,
  1145. Disabled: oldChartInfo.Disabled,
  1146. Source: oldChartInfo.Source,
  1147. ExtraConfig: oldChartInfo.ExtraConfig,
  1148. }
  1149. newId, err := data_manage.AddChartInfo(chartInfo)
  1150. if err != nil {
  1151. br.Msg = "保存失败"
  1152. br.ErrMsg = "保存失败,Err:" + err.Error()
  1153. return
  1154. }
  1155. chartInfo.ChartInfoId = int(newId)
  1156. // 添加图表与指标的关联关系
  1157. {
  1158. mapList := make([]*data_manage.ChartEdbMapping, 0)
  1159. for _, v := range edbMappingList {
  1160. timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
  1161. mapItem := &data_manage.ChartEdbMapping{
  1162. //ChartEdbMappingId: 0,
  1163. ChartInfoId: chartInfo.ChartInfoId,
  1164. EdbInfoId: v.EdbInfoId,
  1165. CreateTime: time.Now(),
  1166. ModifyTime: time.Now(),
  1167. UniqueCode: utils.MD5(utils.CHART_PREFIX + "_" + timestamp),
  1168. MaxData: v.MaxData,
  1169. MinData: v.MinData,
  1170. IsOrder: v.IsOrder,
  1171. IsAxis: v.IsAxis,
  1172. EdbInfoType: v.EdbInfoType,
  1173. LeadValue: v.LeadValue,
  1174. LeadUnit: v.LeadUnit,
  1175. ChartStyle: v.ChartStyle,
  1176. ChartColor: v.ChartColor,
  1177. ChartWidth: v.ChartWidth,
  1178. Source: v.Source,
  1179. }
  1180. mapList = append(mapList, mapItem)
  1181. }
  1182. err = data_manage.AddChartEdbMapping(mapList)
  1183. if err != nil {
  1184. br.Msg = "保存失败"
  1185. br.ErrMsg = "保存失败,Err:" + err.Error()
  1186. return
  1187. }
  1188. }
  1189. //添加es数据
  1190. go data.EsAddOrEditChartInfo(chartInfo.ChartInfoId)
  1191. //修改my eta es数据
  1192. go data.EsAddOrEditMyChartInfoByChartInfoId(chartInfo.ChartInfoId)
  1193. //新增操作日志
  1194. {
  1195. chartLog := new(data_manage.ChartInfoLog)
  1196. chartLog.ChartInfoId = chartInfo.ChartInfoId
  1197. chartLog.ChartName = req.ChartName
  1198. chartLog.ChartClassifyId = req.ChartClassifyId
  1199. chartLog.SysUserId = sysUser.AdminId
  1200. chartLog.SysUserRealName = sysUser.RealName
  1201. chartLog.UniqueCode = chartInfo.UniqueCode
  1202. chartLog.CreateTime = time.Now()
  1203. chartLog.Content = string(this.Ctx.Input.RequestBody)
  1204. chartLog.Status = "新增图表"
  1205. chartLog.Method = this.Ctx.Input.URI()
  1206. go data_manage.AddChartInfoLog(chartLog)
  1207. }
  1208. br.Ret = 200
  1209. br.Success = true
  1210. br.Msg = "保存成功"
  1211. br.Data = data_manage.AddChartInfoResp{
  1212. ChartInfoId: chartInfo.ChartInfoId,
  1213. UniqueCode: chartInfo.UniqueCode,
  1214. ChartType: chartInfo.ChartType,
  1215. }
  1216. br.IsAddLog = true
  1217. }
  1218. // ChartInfoSearchByEs
  1219. // @Title 图表模糊搜索(从es获取)
  1220. // @Description 图表模糊搜索(从es获取)
  1221. // @Param Keyword query string true "图表名称"
  1222. // @Param IsShowMe query bool true "是否只看我的,true、false"
  1223. // @Success 200 {object} data_manage.ChartInfo
  1224. // @router /chart_info/search_by_es [get]
  1225. func (this *ChartInfoController) ChartInfoSearchByEs() {
  1226. br := new(models.BaseResponse).Init()
  1227. defer func() {
  1228. this.Data["json"] = br
  1229. this.ServeJSON()
  1230. }()
  1231. sysUser := this.SysUser
  1232. if sysUser == nil {
  1233. br.Msg = "请登录"
  1234. br.ErrMsg = "请登录,SysUser Is Empty"
  1235. br.Ret = 408
  1236. return
  1237. }
  1238. pageSize, _ := this.GetInt("PageSize")
  1239. currentIndex, _ := this.GetInt("CurrentIndex")
  1240. var startSize int
  1241. if pageSize <= 0 {
  1242. pageSize = utils.PageSize20
  1243. }
  1244. if currentIndex <= 0 {
  1245. currentIndex = 1
  1246. }
  1247. startSize = paging.StartIndex(currentIndex, pageSize)
  1248. keyword := this.GetString("Keyword")
  1249. //只看我的
  1250. isShowMe, _ := this.GetBool("IsShowMe")
  1251. showSysId := 0
  1252. if isShowMe {
  1253. showSysId = sysUser.AdminId
  1254. }
  1255. var searchList []*data_manage.ChartInfo
  1256. var total int64
  1257. var err error
  1258. // 获取当前账号的不可见指标
  1259. noPermissionChartIdList := make([]int, 0)
  1260. {
  1261. obj := data_manage.EdbInfoNoPermissionAdmin{}
  1262. confList, err := obj.GetAllChartListByAdminId(this.SysUser.AdminId)
  1263. if err != nil && err.Error() != utils.ErrNoRow() {
  1264. br.Msg = "获取失败"
  1265. br.ErrMsg = "获取不可见指标配置数据失败,Err:" + err.Error()
  1266. return
  1267. }
  1268. for _, v := range confList {
  1269. noPermissionChartIdList = append(noPermissionChartIdList, v.ChartInfoId)
  1270. }
  1271. }
  1272. if keyword != "" {
  1273. searchList, total, err = data.EsSearchChartInfo(keyword, showSysId, []int{utils.CHART_SOURCE_DEFAULT}, noPermissionChartIdList, startSize, pageSize)
  1274. } else {
  1275. total, searchList, err = data_manage.ChartInfoSearchByEmptyKeyWord(showSysId, []int{utils.CHART_SOURCE_DEFAULT}, noPermissionChartIdList)
  1276. if err != nil && err.Error() != utils.ErrNoRow() {
  1277. br.Msg = "获取失败"
  1278. br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
  1279. return
  1280. }
  1281. }
  1282. finalList := make([]*data_manage.ChartInfoMore, 0)
  1283. if len(searchList) > 0 {
  1284. chartInfoIds := ""
  1285. chartEdbMap := make(map[int][]*data_manage.ChartEdbInfoMapping)
  1286. for _, v := range searchList {
  1287. chartInfoIds += strconv.Itoa(v.ChartInfoId) + ","
  1288. }
  1289. if chartInfoIds != "" {
  1290. chartInfoIds = strings.Trim(chartInfoIds, ",")
  1291. //判断是否需要展示英文标识
  1292. edbList, e := data_manage.GetChartEdbMappingListByChartInfoIds(chartInfoIds)
  1293. if e != nil {
  1294. br.Msg = "获取失败"
  1295. br.ErrMsg = "获取图表,指标信息失败,Err:" + e.Error()
  1296. return
  1297. }
  1298. for _, v := range edbList {
  1299. chartEdbMap[v.ChartInfoId] = append(chartEdbMap[v.ChartInfoId], v)
  1300. }
  1301. }
  1302. for _, v := range searchList {
  1303. tmp := new(data_manage.ChartInfoMore)
  1304. tmp.ChartInfo = *v
  1305. //判断是否需要展示英文标识
  1306. if edbTmpList, ok := chartEdbMap[v.ChartInfoId]; ok {
  1307. tmp.IsEnChart = data.CheckIsEnChart(v.ChartNameEn, edbTmpList, v.Source, v.ChartType)
  1308. }
  1309. finalList = append(finalList, tmp)
  1310. }
  1311. }
  1312. //新增搜索词记录
  1313. {
  1314. searchKeyword := new(data_manage.SearchKeyword)
  1315. searchKeyword.KeyWord = keyword
  1316. searchKeyword.CreateTime = time.Now()
  1317. go data_manage.AddSearchKeyword(searchKeyword)
  1318. }
  1319. page := paging.GetPaging(currentIndex, pageSize, int(total))
  1320. resp := data_manage.ChartInfoListByEsResp{
  1321. Paging: page,
  1322. List: finalList,
  1323. }
  1324. br.Ret = 200
  1325. br.Success = true
  1326. br.Msg = "获取成功"
  1327. br.Data = resp
  1328. }
  1329. // @Title 图表刷新接口
  1330. // @Description 图表刷新接口
  1331. // @Param ChartInfoId query int true "图表id"
  1332. // @Param UniqueCode query string true "唯一code"
  1333. // @Success Ret=200 刷新成功
  1334. // @router /chart_info/refresh [get]
  1335. func (this *ChartInfoController) ChartInfoRefresh() {
  1336. br := new(models.BaseResponse).Init()
  1337. defer func() {
  1338. this.Data["json"] = br
  1339. this.ServeJSON()
  1340. }()
  1341. sysUser := this.SysUser
  1342. if sysUser == nil {
  1343. br.Msg = "请登录"
  1344. br.ErrMsg = "请登录,SysUser Is Empty"
  1345. br.Ret = 408
  1346. return
  1347. }
  1348. chartInfoId, _ := this.GetInt("ChartInfoId")
  1349. uniqueCode := this.GetString("UniqueCode")
  1350. if chartInfoId <= 0 && uniqueCode == `` {
  1351. br.Msg = "参数错误"
  1352. br.ErrMsg = "参数错误:chartInfoId:" + strconv.Itoa(chartInfoId) + ",UniqueCode:" + uniqueCode
  1353. return
  1354. }
  1355. var chartInfo *data_manage.ChartInfo
  1356. var err error
  1357. if chartInfoId > 0 {
  1358. chartInfo, err = data_manage.GetChartInfoById(chartInfoId)
  1359. } else {
  1360. chartInfo, err = data_manage.GetChartInfoByUniqueCode(uniqueCode)
  1361. }
  1362. if err != nil {
  1363. if err.Error() == utils.ErrNoRow() {
  1364. br.Msg = "图表已被删除,无需刷新"
  1365. br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
  1366. return
  1367. }
  1368. br.Msg = "刷新失败"
  1369. br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
  1370. return
  1371. }
  1372. err = data.ChartInfoRefreshV2(chartInfo.ChartInfoId)
  1373. if err != nil {
  1374. br.Msg = "刷新失败"
  1375. br.ErrMsg = "刷新图表关联指标信息失败,Err:" + err.Error()
  1376. return
  1377. }
  1378. /*
  1379. //err = data.ChartInfoRefresh(chartInfo.ChartInfoId)
  1380. //if err != nil {
  1381. // br.Msg = "刷新失败"
  1382. // br.ErrMsg = "刷新图表关联指标信息失败,Err:" + err.Error()
  1383. // return
  1384. //}
  1385. */
  1386. //清除图表缓存
  1387. {
  1388. key := utils.HZ_CHART_LIB_DETAIL + chartInfo.UniqueCode
  1389. _ = utils.Rc.Delete(key)
  1390. }
  1391. br.Ret = 200
  1392. br.Success = true
  1393. br.Msg = "刷新成功"
  1394. }
  1395. // BatchChartInfoRefresh
  1396. // @Title 批量刷新图表接口
  1397. // @Description 批量刷新图表接口
  1398. // @Param request body data_manage.BatchChartRefreshReq true "type json string"
  1399. // @Success Ret=200 刷新成功
  1400. // @router /chart_info/batch_refresh [post]
  1401. func (this *ChartInfoController) BatchChartInfoRefresh() {
  1402. br := new(models.BaseResponse).Init()
  1403. defer func() {
  1404. this.Data["json"] = br
  1405. this.ServeJSON()
  1406. }()
  1407. sysUser := this.SysUser
  1408. if sysUser == nil {
  1409. br.Msg = "请登录"
  1410. br.ErrMsg = "请登录,SysUser Is Empty"
  1411. br.Ret = 408
  1412. return
  1413. }
  1414. var req data_manage.BatchChartRefreshReq
  1415. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1416. if err != nil {
  1417. br.Msg = "参数解析异常!"
  1418. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1419. return
  1420. }
  1421. //获取所有的图表列表
  1422. _, chartInfoList, err := data_manage.GetChartInfoListByUniqueCodeSlice(req.ChartInfoCode)
  1423. if len(chartInfoList) <= 0 {
  1424. br.Ret = 200
  1425. br.Success = true
  1426. br.Msg = "刷新成功"
  1427. return
  1428. }
  1429. err = data.BatchChartInfoRefreshV2(chartInfoList)
  1430. if err != nil {
  1431. br.Msg = "刷新失败"
  1432. br.ErrMsg = "刷新图表关联指标信息失败,Err:" + err.Error()
  1433. return
  1434. }
  1435. //清除图表缓存
  1436. for _, v := range chartInfoList {
  1437. key := utils.HZ_CHART_LIB_DETAIL + v.UniqueCode
  1438. _ = utils.Rc.Delete(key)
  1439. }
  1440. br.Ret = 200
  1441. br.Success = true
  1442. br.Msg = "刷新成功"
  1443. }