chart_info.go 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586
  1. package cross_variety
  2. import (
  3. "encoding/json"
  4. "eta/eta_api/controllers"
  5. "eta/eta_api/models"
  6. "eta/eta_api/models/data_manage"
  7. "eta/eta_api/models/data_manage/cross_variety/request"
  8. "eta/eta_api/services/data"
  9. "eta/eta_api/services/data/cross_variety"
  10. "eta/eta_api/utils"
  11. "github.com/rdlucklib/rdluck_tools/paging"
  12. "strconv"
  13. "strings"
  14. "time"
  15. )
  16. // ChartInfoController
  17. // @Description: 跨品种分析图表
  18. type ChartInfoController struct {
  19. controllers.BaseAuthController
  20. }
  21. // List
  22. // @Title 跨品种分析图表列表接口
  23. // @Description 跨品种分析图表列表接口
  24. // @Param PageSize query int true "每页数据条数"
  25. // @Param CurrentIndex query int true "当前页页码,从1开始"
  26. // @Param ChartClassifyId query int true "分类id"
  27. // @Param Keyword query string true "搜索关键词"
  28. // @Param IsShowMe query bool true "是否只看我的,true、false"
  29. // @Param Source query int true "图表类型,10:跨品种分析
  30. // @Success 200 {object} data_manage.ChartListResp
  31. // @router /chart_info/list [get]
  32. func (c *ChartInfoController) List() {
  33. br := new(models.BaseResponse).Init()
  34. defer func() {
  35. c.Data["json"] = br
  36. c.ServeJSON()
  37. }()
  38. sysUser := c.SysUser
  39. if sysUser == nil {
  40. br.Msg = "请登录"
  41. br.ErrMsg = "请登录,SysUser Is Empty"
  42. br.Ret = 408
  43. return
  44. }
  45. chartClassifyId, _ := c.GetInt("ChartClassifyId")
  46. pageSize, _ := c.GetInt("PageSize")
  47. currentIndex, _ := c.GetInt("CurrentIndex")
  48. keyword := c.GetString("KeyWord")
  49. var total int
  50. page := paging.GetPaging(currentIndex, pageSize, total)
  51. var startSize int
  52. if pageSize <= 0 {
  53. pageSize = utils.PageSize20
  54. }
  55. if currentIndex <= 0 {
  56. currentIndex = 1
  57. }
  58. startSize = paging.StartIndex(currentIndex, pageSize)
  59. source, _ := c.GetInt("Source")
  60. if source <= 0 {
  61. source = utils.CHART_SOURCE_CROSS_HEDGING
  62. }
  63. var condition string
  64. var pars []interface{}
  65. // 普通图表
  66. condition += ` AND source = ? `
  67. pars = append(pars, source)
  68. if chartClassifyId > 0 {
  69. chartClassifyId, err := data_manage.GetChartClassify(chartClassifyId)
  70. if err != nil && err.Error() != utils.ErrNoRow() {
  71. br.Msg = "获取图表信息失败"
  72. br.ErrMsg = "获取信息失败,GetChartClassify,Err:" + err.Error()
  73. return
  74. }
  75. condition += " AND chart_classify_id IN(" + chartClassifyId + ") "
  76. }
  77. if keyword != "" {
  78. condition += ` AND ( chart_name LIKE '%` + keyword + `%' )`
  79. }
  80. //只看我的
  81. isShowMe, _ := c.GetBool("IsShowMe")
  82. if isShowMe {
  83. condition += ` AND sys_user_id = ? `
  84. pars = append(pars, sysUser.AdminId)
  85. }
  86. // 获取当前账号的不可见指标
  87. noPermissionChartIdList := make([]int, 0)
  88. {
  89. obj := data_manage.EdbInfoNoPermissionAdmin{}
  90. confList, err := obj.GetAllChartListByAdminId(c.SysUser.AdminId)
  91. if err != nil && err.Error() != utils.ErrNoRow() {
  92. br.Msg = "获取失败"
  93. br.ErrMsg = "获取不可见指标配置数据失败,Err:" + err.Error()
  94. return
  95. }
  96. for _, v := range confList {
  97. noPermissionChartIdList = append(noPermissionChartIdList, v.ChartInfoId)
  98. }
  99. }
  100. lenNoPermissionChartIdList := len(noPermissionChartIdList)
  101. if lenNoPermissionChartIdList > 0 {
  102. condition += ` AND chart_info_id not in (` + utils.GetOrmInReplace(lenNoPermissionChartIdList) + `) `
  103. pars = append(pars, noPermissionChartIdList)
  104. }
  105. //获取图表信息
  106. list, err := data_manage.GetChartListByCondition(condition, pars, startSize, pageSize)
  107. if err != nil && err.Error() != utils.ErrNoRow() {
  108. br.Success = true
  109. br.Msg = "获取图表信息失败"
  110. br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
  111. return
  112. }
  113. myChartList, err := data_manage.GetMyChartListByAdminId(sysUser.AdminId)
  114. if err != nil && err.Error() != utils.ErrNoRow() {
  115. br.Msg = "获取图表信息失败"
  116. br.ErrMsg = "获取我的图表信息失败,Err:" + err.Error()
  117. return
  118. }
  119. myChartMap := make(map[int]*data_manage.MyChartView)
  120. for _, v := range myChartList {
  121. myChartMap[v.ChartInfoId] = v
  122. }
  123. listLen := len(list)
  124. chartEdbMap := make(map[int][]*data_manage.ChartEdbInfoMapping)
  125. if listLen > 0 {
  126. chartInfoIds := ""
  127. for _, v := range list {
  128. chartInfoIds += strconv.Itoa(v.ChartInfoId) + ","
  129. }
  130. if chartInfoIds != "" {
  131. chartInfoIds = strings.Trim(chartInfoIds, ",")
  132. //判断是否需要展示英文标识
  133. edbList, e := data_manage.GetChartEdbMappingListByChartInfoIds(chartInfoIds)
  134. if e != nil {
  135. br.Msg = "获取失败"
  136. br.ErrMsg = "获取图表,指标信息失败,Err:" + e.Error()
  137. return
  138. }
  139. for _, v := range edbList {
  140. chartEdbMap[v.ChartInfoId] = append(chartEdbMap[v.ChartInfoId], v)
  141. }
  142. }
  143. }
  144. for i := 0; i < listLen; i++ {
  145. //判断是否需要展示英文标识
  146. if edbTmpList, ok := chartEdbMap[list[i].ChartInfoId]; ok {
  147. list[i].IsEnChart = data.CheckIsEnChart(list[i].ChartNameEn, edbTmpList, list[i].Source, list[i].ChartType)
  148. }
  149. if existItem, ok := myChartMap[list[i].ChartInfoId]; ok {
  150. list[i].IsAdd = true
  151. list[i].MyChartId = existItem.MyChartId
  152. list[i].MyChartClassifyId = existItem.MyChartClassifyId
  153. }
  154. }
  155. resp := new(data_manage.ChartListResp)
  156. if list == nil || len(list) <= 0 || (err != nil && err.Error() == utils.ErrNoRow()) {
  157. items := make([]*data_manage.ChartInfoView, 0)
  158. resp.Paging = page
  159. resp.List = items
  160. br.Ret = 200
  161. br.Success = true
  162. br.Msg = "获取成功"
  163. return
  164. }
  165. dataCount, err := data_manage.GetChartListCountByCondition(condition, pars)
  166. if err != nil && err.Error() != utils.ErrNoRow() {
  167. br.Msg = "获取指标信息失败"
  168. br.ErrMsg = "获取指标数据总数失败,Err:" + err.Error()
  169. return
  170. }
  171. page = paging.GetPaging(currentIndex, pageSize, dataCount)
  172. resp.Paging = page
  173. resp.List = list
  174. br.Ret = 200
  175. br.Success = true
  176. br.Msg = "获取成功"
  177. br.Data = resp
  178. }
  179. // Preview
  180. // @Title 跨品种分析图表-预览数据
  181. // @Description 跨品种分析图表-获取预览数据
  182. // // @Param request body request.ChartConfigReq true "type json string"
  183. // @Success 200 {object} data_manage.ChartEdbInfoDetailResp
  184. // @router /chart_info/preview [post]
  185. func (c *ChartInfoController) Preview() {
  186. br := new(models.BaseResponse).Init()
  187. defer func() {
  188. c.Data["json"] = br
  189. c.ServeJSON()
  190. }()
  191. sysUser := c.SysUser
  192. if sysUser == nil {
  193. br.Msg = "请登录"
  194. br.ErrMsg = "请登录,SysUser Is Empty"
  195. br.Ret = 408
  196. return
  197. }
  198. var req request.ChartConfigReq
  199. if err := json.Unmarshal(c.Ctx.Input.RequestBody, &req); err != nil {
  200. br.Msg = "参数解析异常!"
  201. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  202. return
  203. }
  204. if req.TagX <= 0 {
  205. br.Msg = "请选择X轴坐标的标签"
  206. br.IsSendEmail = false
  207. return
  208. }
  209. if req.TagY <= 0 {
  210. br.Msg = "请选择Y轴坐标的标签"
  211. br.IsSendEmail = false
  212. return
  213. }
  214. if req.CalculateValue <= 0 {
  215. br.Msg = "请设置时间长度"
  216. br.IsSendEmail = false
  217. return
  218. }
  219. if req.CalculateUnit == `` {
  220. br.Msg = "请设置时间频度"
  221. br.IsSendEmail = false
  222. return
  223. }
  224. // 品种配置
  225. varietyListList := len(req.VarietyList)
  226. if varietyListList < 0 {
  227. br.Msg = "请选择品种"
  228. br.IsSendEmail = false
  229. return
  230. }
  231. // 日期配置
  232. dateConfigList := len(req.DateConfigList)
  233. if dateConfigList < 0 {
  234. br.Msg = "请选择日期"
  235. br.IsSendEmail = false
  236. return
  237. }
  238. if dateConfigList > 5 {
  239. br.Msg = "日期数量已达上限!"
  240. br.IsSendEmail = false
  241. return
  242. }
  243. chartInfo := new(data_manage.ChartInfoView)
  244. chartInfo.ChartType = utils.CHART_SOURCE_CROSS_HEDGING
  245. // 获取图表x轴y轴
  246. _, dataResp, err, errMsg, isSendEmail := cross_variety.GetChartData(0, req)
  247. if err != nil {
  248. br.IsSendEmail = isSendEmail
  249. br.Msg = "获取失败"
  250. if errMsg != `` {
  251. br.Msg = errMsg
  252. }
  253. br.ErrMsg = "获取图表,指标信息失败,Err:" + err.Error()
  254. return
  255. }
  256. br.Data = dataResp
  257. br.Ret = 200
  258. br.Success = true
  259. br.Msg = "获取成功"
  260. }
  261. // Add
  262. // @Title 新增图表接口
  263. // @Description 新增图表接口
  264. // @Param request body request.AddChartInfoReq true "type json string"
  265. // @Success 200 {object} data_manage.AddChartInfoResp
  266. // @router /chart_info/add [post]
  267. func (c *ChartInfoController) Add() {
  268. br := new(models.BaseResponse).Init()
  269. defer func() {
  270. c.Data["json"] = br
  271. c.ServeJSON()
  272. }()
  273. sysUser := c.SysUser
  274. if sysUser == nil {
  275. br.Msg = "请登录"
  276. br.ErrMsg = "请登录,SysUser Is Empty"
  277. br.Ret = 408
  278. return
  279. }
  280. cacheKey := "CACHE_CHART_INFO_ADD_" + strconv.Itoa(sysUser.AdminId)
  281. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  282. br.Msg = "系统处理中,请稍后重试!"
  283. br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(c.Ctx.Input.RequestBody)
  284. return
  285. }
  286. defer func() {
  287. _ = utils.Rc.Delete(cacheKey)
  288. }()
  289. var req request.AddChartReq
  290. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  291. if err != nil {
  292. br.Msg = "参数解析异常!"
  293. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  294. return
  295. }
  296. // 添加图表
  297. chartInfo, err, errMsg, isSendEmail := cross_variety.AddChartInfo(req, utils.CHART_SOURCE_CROSS_HEDGING, sysUser)
  298. if err != nil {
  299. br.Msg = "保存失败"
  300. if errMsg != `` {
  301. br.Msg = errMsg
  302. }
  303. br.ErrMsg = err.Error()
  304. br.IsSendEmail = isSendEmail
  305. return
  306. }
  307. //新增操作日志
  308. {
  309. chartLog := new(data_manage.ChartInfoLog)
  310. chartLog.ChartInfoId = chartInfo.ChartInfoId
  311. chartLog.ChartName = req.ChartName
  312. chartLog.ChartClassifyId = chartInfo.ChartClassifyId
  313. chartLog.SysUserId = sysUser.AdminId
  314. chartLog.SysUserRealName = sysUser.RealName
  315. chartLog.UniqueCode = chartInfo.UniqueCode
  316. chartLog.CreateTime = time.Now()
  317. chartLog.Content = string(c.Ctx.Input.RequestBody)
  318. chartLog.Status = "新增跨品种分析图表"
  319. chartLog.Method = c.Ctx.Input.URI()
  320. go data_manage.AddChartInfoLog(chartLog)
  321. }
  322. resp := new(data_manage.AddChartInfoResp)
  323. resp.ChartInfoId = chartInfo.ChartInfoId
  324. resp.UniqueCode = chartInfo.UniqueCode
  325. resp.ChartType = chartInfo.ChartType
  326. br.Ret = 200
  327. br.Success = true
  328. br.Msg = "保存成功"
  329. br.Data = resp
  330. br.IsAddLog = true
  331. }
  332. // Edit
  333. // @Title 编辑图表接口
  334. // @Description 编辑图表接口
  335. // @Param request body request.EditChartInfoReq true "type json string"
  336. // @Success Ret=200 保存成功
  337. // @router /chart_info/edit [post]
  338. func (c *ChartInfoController) Edit() {
  339. br := new(models.BaseResponse).Init()
  340. defer func() {
  341. c.Data["json"] = br
  342. c.ServeJSON()
  343. }()
  344. sysUser := c.SysUser
  345. if sysUser == nil {
  346. br.Msg = "请登录"
  347. br.ErrMsg = "请登录,SysUser Is Empty"
  348. br.Ret = 408
  349. return
  350. }
  351. var req request.EditChartReq
  352. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  353. if err != nil {
  354. br.Msg = "参数解析异常!"
  355. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  356. return
  357. }
  358. chartItem, err, errMsg, isSendEmail := cross_variety.EditChartInfo(req, sysUser)
  359. if err != nil {
  360. br.Msg = "保存失败"
  361. if errMsg != `` {
  362. br.Msg = errMsg
  363. }
  364. br.ErrMsg = err.Error()
  365. br.IsSendEmail = isSendEmail
  366. return
  367. }
  368. resp := new(data_manage.AddChartInfoResp)
  369. resp.ChartInfoId = chartItem.ChartInfoId
  370. resp.UniqueCode = chartItem.UniqueCode
  371. //resp.ChartType = req.ChartType
  372. //新增操作日志
  373. {
  374. chartLog := new(data_manage.ChartInfoLog)
  375. chartLog.ChartName = chartItem.ChartName
  376. chartLog.ChartInfoId = req.ChartInfoId
  377. chartLog.ChartClassifyId = chartItem.ChartClassifyId
  378. chartLog.SysUserId = sysUser.AdminId
  379. chartLog.SysUserRealName = sysUser.RealName
  380. chartLog.UniqueCode = chartItem.UniqueCode
  381. chartLog.CreateTime = time.Now()
  382. chartLog.Content = string(c.Ctx.Input.RequestBody)
  383. chartLog.Status = "编辑跨品种分析图表"
  384. chartLog.Method = c.Ctx.Input.URL()
  385. go data_manage.AddChartInfoLog(chartLog)
  386. }
  387. br.Ret = 200
  388. br.Success = true
  389. br.Msg = "保存成功"
  390. br.Data = resp
  391. br.IsAddLog = true
  392. }
  393. // Detail
  394. // @Title 获取图表详情
  395. // @Description 获取图表详情接口
  396. // @Param ChartInfoId query int true "图表id"
  397. // @Success 200 {object} data_manage.ChartInfoDetailResp
  398. // @router /chart_info/detail [get]
  399. func (c *ChartInfoController) Detail() {
  400. br := new(models.BaseResponse).Init()
  401. defer func() {
  402. c.Data["json"] = br
  403. c.ServeJSON()
  404. }()
  405. sysUser := c.SysUser
  406. if sysUser == nil {
  407. br.Msg = "请登录"
  408. br.ErrMsg = "请登录,SysUser Is Empty"
  409. br.Ret = 408
  410. return
  411. }
  412. chartInfoId, _ := c.GetInt("ChartInfoId")
  413. if chartInfoId <= 0 {
  414. br.Msg = "参数有误"
  415. return
  416. }
  417. var err error
  418. chartInfo := new(data_manage.ChartInfoView)
  419. chartInfo, err = data_manage.GetChartInfoViewById(chartInfoId)
  420. if err != nil {
  421. if err.Error() == utils.ErrNoRow() {
  422. br.Msg = "图被删除,请刷新页面"
  423. br.ErrMsg = "图被删除,请刷新页面,Err:" + err.Error()
  424. return
  425. }
  426. br.Msg = "获取失败"
  427. br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
  428. return
  429. }
  430. if chartInfo.ExtraConfig == `` {
  431. br.Msg = "图表配置信息异常"
  432. br.ErrMsg = "图表配置信息异常"
  433. br.IsSendEmail = false
  434. return
  435. }
  436. var config request.ChartConfigReq
  437. err = json.Unmarshal([]byte(chartInfo.ExtraConfig), &config)
  438. if err != nil {
  439. br.Msg = "解析跨品种分析配置失败"
  440. br.ErrMsg = "解析跨品种分析配置失败,Err:" + err.Error()
  441. return
  442. }
  443. //mappingList, err := cross_varietyModel.GetChartVarietyMappingList(chartInfo.ChartInfoId)
  444. //if err != nil {
  445. // br.Msg = "获取品种失败"
  446. // br.ErrMsg = "获取品种失败,Err:" + err.Error()
  447. // return
  448. //}
  449. // 获取跨品种分析配置
  450. //chartInfoCrossVariety, err := cross_varietyModel.GetChartInfoCrossVarietyByChartInfoId(chartInfo.ChartInfoId)
  451. //if err != nil {
  452. // br.Msg = "获取跨品种分析配置失败"
  453. // br.ErrMsg = "获取跨品种分析配置失败,Err:" + err.Error()
  454. // return
  455. //}
  456. //
  457. //varietyIdList := make([]int,0)
  458. //for _,v:=range mappingList{
  459. // varietyIdList = append(varietyIdList,v.ChartVarietyId)
  460. //}
  461. //config := request.ChartConfigReq{
  462. // TagX: chartInfoCrossVariety.ChartXTagId,
  463. // TagY: chartInfoCrossVariety.ChartYTagId,
  464. // CalculateValue: chartInfoCrossVariety.CalculateValue,
  465. // CalculateUnit: chartInfoCrossVariety.CalculateUnit,
  466. // DateConfigList: config.DateConfigList,
  467. // VarietyList: varietyIdList,
  468. //}
  469. //config.TagX =
  470. // 获取图表x轴y轴
  471. _, dataResp, err, errMsg, isSendEmail := cross_variety.GetChartData(0, config)
  472. if err != nil {
  473. br.IsSendEmail = isSendEmail
  474. br.Msg = "获取失败"
  475. if errMsg != `` {
  476. br.Msg = errMsg
  477. }
  478. br.ErrMsg = "获取图表,指标信息失败,Err:" + err.Error()
  479. return
  480. }
  481. // 完善指标信息
  482. //edbList, e := correlationServ.GetChartEdbInfoFormat(chartInfo.ChartInfoId, edbInfoMappingA, edbInfoMappingB)
  483. //if e != nil {
  484. // br.Msg = "获取失败"
  485. // br.ErrMsg = "获取相关性图表, 完善指标信息失败, Err:" + e.Error()
  486. // return
  487. //}
  488. // 判断是否加入我的图库
  489. if chartInfoId > 0 && chartInfo != nil {
  490. {
  491. var myChartCondition string
  492. var myChartPars []interface{}
  493. myChartCondition += ` AND a.admin_id=? `
  494. myChartPars = append(myChartPars, sysUser.AdminId)
  495. myChartCondition += ` AND a.chart_info_id=? `
  496. myChartPars = append(myChartPars, chartInfo.ChartInfoId)
  497. myChartList, err := data_manage.GetMyChartByCondition(myChartCondition, myChartPars)
  498. if err != nil && err.Error() != utils.ErrNoRow() {
  499. br.Msg = "获取失败"
  500. br.ErrMsg = "获取我的图表信息失败,GetMyChartByCondition,Err:" + err.Error()
  501. return
  502. }
  503. if myChartList != nil && len(myChartList) > 0 {
  504. chartInfo.IsAdd = true
  505. chartInfo.MyChartId = myChartList[0].MyChartId
  506. chartInfo.MyChartClassifyId = myChartList[0].MyChartClassifyId
  507. }
  508. }
  509. }
  510. //图表操作权限
  511. chartInfo.IsEdit = data.CheckOpChartPermission(sysUser, chartInfo.SysUserId)
  512. ////判断是否需要展示英文标识
  513. //chartInfo.IsEnChart = data.CheckIsEnChart(chartInfo.ChartNameEn, edbList[0:1], chartInfo.Source, chartInfo.ChartType)
  514. //chartInfo.UnitEn = edbInfoMappingA.UnitEn
  515. isSaveAs := true
  516. if chartInfo.Source == utils.CHART_SOURCE_ROLLING_CORRELATION {
  517. isSaveAs = false
  518. }
  519. // 另存为
  520. chartInfo.Button = data_manage.ChartViewButton{
  521. IsEdit: chartInfo.IsEdit,
  522. IsEnChart: chartInfo.IsEnChart,
  523. IsAdd: chartInfo.IsAdd,
  524. IsCopy: isSaveAs,
  525. IsSetName: chartInfo.IsSetName,
  526. }
  527. resp := new(data_manage.ChartInfoDetailResp)
  528. resp.ChartInfo = chartInfo
  529. resp.DataResp = dataResp
  530. br.Ret = 200
  531. br.Success = true
  532. br.Msg = "获取成功"
  533. br.Data = resp
  534. }