classify.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421
  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/services/data"
  8. "eta/eta_api/utils"
  9. "time"
  10. )
  11. // ClassifyController
  12. // @Description: 跨品种分析分类
  13. type ClassifyController struct {
  14. controllers.BaseAuthController
  15. }
  16. // List
  17. // @Title 跨品种分析分类列表
  18. // @Description 跨品种分析分类列表接口
  19. // @Param IsShowMe query bool true "是否只看我的,true、false"
  20. // @Param Source query int true "图表类型,3:跨品种分析,4:滚动跨品种分析"
  21. // @Success 200 {object} data_manage.ChartClassifyListResp
  22. // @router /classify/list [get]
  23. func (c *ClassifyController) List() {
  24. br := new(models.BaseResponse).Init()
  25. defer func() {
  26. c.Data["json"] = br
  27. c.ServeJSON()
  28. }()
  29. resp := new(data_manage.ChartClassifyListResp)
  30. // 获取当前账号的不可见指标
  31. noPermissionChartIdMap := make(map[int]bool)
  32. {
  33. obj := data_manage.EdbInfoNoPermissionAdmin{}
  34. confList, err := obj.GetAllChartListByAdminId(c.SysUser.AdminId)
  35. if err != nil && err.Error() != utils.ErrNoRow() {
  36. br.Msg = "获取失败"
  37. br.ErrMsg = "获取不可见指标配置数据失败,Err:" + err.Error()
  38. return
  39. }
  40. for _, v := range confList {
  41. noPermissionChartIdMap[v.ChartInfoId] = true
  42. }
  43. }
  44. isShowMe, _ := c.GetBool("IsShowMe")
  45. source, _ := c.GetInt("Source")
  46. if source <= 0 {
  47. source = utils.CHART_SOURCE_CROSS_HEDGING
  48. }
  49. rootList, err := data_manage.GetChartClassifyByParentId(0, utils.CHART_SOURCE_CROSS_HEDGING)
  50. if err != nil && err.Error() != utils.ErrNoRow() {
  51. br.Msg = "获取失败"
  52. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  53. return
  54. }
  55. allChartInfo, err := data_manage.GetChartInfoAll([]int{source})
  56. if err != nil && err.Error() != utils.ErrNoRow() {
  57. br.Msg = "获取失败"
  58. br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
  59. return
  60. }
  61. chartInfoMap := make(map[int][]*data_manage.ChartClassifyItems)
  62. for _, v := range allChartInfo {
  63. if !isShowMe {
  64. chartInfoMap[v.ChartClassifyId] = append(chartInfoMap[v.ChartClassifyId], v)
  65. continue
  66. }
  67. if v.SysUserId != c.SysUser.AdminId {
  68. continue
  69. }
  70. chartInfoMap[v.ChartClassifyId] = append(chartInfoMap[v.ChartClassifyId], v)
  71. }
  72. rootChildMap := make(map[int][]*data_manage.ChartClassifyItems)
  73. // 移除没有图表的分类
  74. allNodes := make([]*data_manage.ChartClassifyItems, 0)
  75. for _, v := range rootList {
  76. rootChildMap[v.ParentId] = append(rootChildMap[v.ParentId], v)
  77. if existItems, ok := chartInfoMap[v.ChartClassifyId]; ok {
  78. v.Children = existItems
  79. allNodes = append(allNodes, v)
  80. }
  81. }
  82. // 移除没有权限的图表
  83. allNodes = data.HandleNoPermissionChart(allNodes, noPermissionChartIdMap)
  84. resp.AllNodes = allNodes
  85. br.Ret = 200
  86. br.Success = true
  87. br.Msg = "获取成功"
  88. br.Data = resp
  89. }
  90. // EditChartClassify
  91. // @Title 修改跨品种分析图表分类
  92. // @Description 修改跨品种分析图表分类接口
  93. // @Param request body data_manage.EditChartClassifyReq true "type json string"
  94. // @Success 200 Ret=200 修改成功
  95. // @router /classify/edit [post]
  96. func (c *ClassifyController) EditChartClassify() {
  97. br := new(models.BaseResponse).Init()
  98. defer func() {
  99. c.Data["json"] = br
  100. c.ServeJSON()
  101. }()
  102. var req data_manage.EditChartClassifyReq
  103. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  104. if err != nil {
  105. br.Msg = "参数解析异常!"
  106. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  107. return
  108. }
  109. if req.ChartClassifyName == "" {
  110. br.Msg = "请输入分类名称"
  111. br.IsSendEmail = false
  112. return
  113. }
  114. if req.ChartClassifyId <= 0 {
  115. br.Msg = "参数错误"
  116. br.IsSendEmail = false
  117. return
  118. }
  119. item, err := data_manage.GetChartClassifyById(req.ChartClassifyId)
  120. if err != nil {
  121. br.Msg = "保存失败"
  122. br.Msg = "获取分类信息失败,Err:" + err.Error()
  123. return
  124. }
  125. source := utils.CHART_SOURCE_CROSS_HEDGING
  126. if item.ChartClassifyName != req.ChartClassifyName {
  127. count, err := data_manage.GetChartClassifyCount(req.ChartClassifyName, item.ParentId, source)
  128. if err != nil {
  129. br.Msg = "判断名称是否已存在失败"
  130. br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
  131. return
  132. }
  133. if count > 0 {
  134. br.Msg = "分类名称已存在,请重新输入"
  135. br.IsSendEmail = false
  136. return
  137. }
  138. err = data_manage.EditChartClassify(req.ChartClassifyId, source, req.ChartClassifyName)
  139. if err != nil {
  140. br.Msg = "保存失败"
  141. br.ErrMsg = "保存失败,Err:" + err.Error()
  142. return
  143. }
  144. }
  145. br.Ret = 200
  146. br.Msg = "修改成功"
  147. br.Success = true
  148. br.IsAddLog = true
  149. }
  150. // DeleteChartClassifyCheck
  151. // @Title 删除图表检测接口
  152. // @Description 删除图表检测接口
  153. // @Param request body data_manage.ChartClassifyDeleteCheckResp true "type json string"
  154. // @Success 200 Ret=200 检测成功
  155. // @router /classify/delete/check [post]
  156. func (c *ClassifyController) DeleteChartClassifyCheck() {
  157. br := new(models.BaseResponse).Init()
  158. defer func() {
  159. c.Data["json"] = br
  160. c.ServeJSON()
  161. }()
  162. var req data_manage.ChartClassifyDeleteCheckReq
  163. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  164. if err != nil {
  165. br.Msg = "参数解析异常!"
  166. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  167. return
  168. }
  169. if req.ChartClassifyId < 0 && req.ChartInfoId <= 0 {
  170. br.Msg = "参数错误"
  171. br.IsSendEmail = false
  172. return
  173. }
  174. var deleteStatus int
  175. var tipsMsg string
  176. //删除分类
  177. if req.ChartClassifyId > 0 && req.ChartInfoId == 0 {
  178. //判断跨品种分析图表分类下,是否含有图表
  179. count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
  180. if err != nil {
  181. br.Msg = "删除失败"
  182. br.ErrMsg = "分类下是否含有图表失败,Err:" + err.Error()
  183. return
  184. }
  185. if count > 0 {
  186. deleteStatus = 1
  187. tipsMsg = "该分类下关联图表不可删除"
  188. }
  189. }
  190. if deleteStatus != 1 && req.ChartInfoId == 0 {
  191. classifyCount, err := data_manage.GetChartClassifyCountByClassifyId(req.ChartClassifyId)
  192. if err != nil && err.Error() != utils.ErrNoRow() {
  193. br.Msg = "删除失败"
  194. br.ErrMsg = "分类下是否含有图表失败,Err:" + err.Error()
  195. return
  196. }
  197. if classifyCount > 0 {
  198. deleteStatus = 2
  199. tipsMsg = "确认删除当前目录及包含的子目录吗"
  200. }
  201. }
  202. if deleteStatus == 0 {
  203. tipsMsg = "可删除,进行删除操作"
  204. }
  205. resp := new(data_manage.ChartClassifyDeleteCheckResp)
  206. resp.DeleteStatus = deleteStatus
  207. resp.TipsMsg = tipsMsg
  208. br.Ret = 200
  209. br.Msg = "检测成功"
  210. br.Success = true
  211. br.Data = resp
  212. }
  213. // DeleteChartClassify
  214. // @Title 删除跨品种分析图表分类/图表
  215. // @Description 删除跨品种分析图表分类/图表接口
  216. // @Param request body data_manage.DeleteChartClassifyReq true "type json string"
  217. // @Success 200 Ret=200 删除成功
  218. // @router /classify/delete [post]
  219. func (c *ClassifyController) DeleteChartClassify() {
  220. br := new(models.BaseResponse).Init()
  221. defer func() {
  222. c.Data["json"] = br
  223. c.ServeJSON()
  224. }()
  225. sysUser := c.SysUser
  226. if sysUser == nil {
  227. br.Msg = "请登录"
  228. br.ErrMsg = "请登录,SysUser Is Empty"
  229. br.Ret = 408
  230. return
  231. }
  232. var req data_manage.DeleteChartClassifyReq
  233. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  234. if err != nil {
  235. br.Msg = "参数解析异常!"
  236. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  237. return
  238. }
  239. if req.ChartClassifyId < 0 && req.ChartInfoId <= 0 {
  240. br.Msg = "参数错误"
  241. br.IsSendEmail = false
  242. return
  243. }
  244. //删除分类
  245. if req.ChartClassifyId > 0 && req.ChartInfoId == 0 {
  246. //判断是否含有指标
  247. count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
  248. if err != nil && err.Error() != utils.ErrNoRow() {
  249. br.Msg = "删除失败"
  250. br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
  251. return
  252. }
  253. if count > 0 {
  254. br.Msg = "该目录下存在关联指标,不可删除"
  255. br.IsSendEmail = false
  256. return
  257. }
  258. err = data_manage.DeleteChartClassify(req.ChartClassifyId)
  259. if err != nil {
  260. br.Msg = "删除失败"
  261. br.ErrMsg = "删除失败,Err:" + err.Error()
  262. return
  263. }
  264. }
  265. resp := new(data_manage.AddChartInfoResp)
  266. //删除图表
  267. if req.ChartInfoId > 0 {
  268. chartInfo, err := data_manage.GetChartInfoById(req.ChartInfoId)
  269. if err != nil {
  270. if err.Error() == utils.ErrNoRow() {
  271. br.Msg = "图表已删除,请刷新页面"
  272. br.ErrMsg = "指标不存在,Err:" + err.Error()
  273. return
  274. } else {
  275. br.Msg = "删除失败"
  276. br.ErrMsg = "删除失败,获取指标信息失败,Err:" + err.Error()
  277. return
  278. }
  279. }
  280. if chartInfo == nil {
  281. br.Msg = "图表已删除,请刷新页面"
  282. return
  283. }
  284. //图表操作权限
  285. ok := data.CheckOpChartPermission(sysUser, chartInfo.SysUserId)
  286. if !ok {
  287. br.Msg = "没有该图表的操作权限"
  288. br.ErrMsg = "没有该图表的操作权限"
  289. return
  290. }
  291. // 获取引用该图表的MyCharts, 用于ES删除
  292. var myCond string
  293. var myPars []interface{}
  294. myCond += ` AND a.chart_info_id = ? `
  295. myPars = append(myPars, chartInfo.ChartInfoId)
  296. myCharts, e := data_manage.GetMyChartListGroupByCharyInfoIdAndAdminIdByCondition(myCond, myPars)
  297. if e != nil {
  298. br.Msg = "删除失败"
  299. br.ErrMsg = "获取引用图表的MyChats失败, Err: " + e.Error()
  300. return
  301. }
  302. myIds := make([]int, 0)
  303. for _, m := range myCharts {
  304. myIds = append(myIds, m.MyChartId)
  305. }
  306. source := chartInfo.Source // 跨品种分析图表(滚动跨品种分析)
  307. //删除图表及关联指标
  308. err = data_manage.DeleteChartInfoAndData(chartInfo.ChartInfoId)
  309. if err != nil {
  310. br.Msg = "删除失败"
  311. br.ErrMsg = "删除失败,Err:" + err.Error()
  312. return
  313. }
  314. //删除ES
  315. {
  316. go data.EsDeleteChartInfo(chartInfo.ChartInfoId)
  317. // 删除MY ETA 图表 es数据
  318. //go data.EsDeleteMyChartInfoByChartInfoId(chartInfo.ChartInfoId)
  319. go data.EsDeleteMyChartInfoByMyChartIds(myIds)
  320. }
  321. var condition string
  322. var pars []interface{}
  323. condition += " AND chart_classify_id=? AND source = ? "
  324. pars = append(pars, chartInfo.ChartClassifyId, source)
  325. condition += " AND chart_info_id>? ORDER BY create_time ASC LIMIT 1 "
  326. pars = append(pars, req.ChartInfoId)
  327. nextItem, err := data_manage.GetChartInfoByCondition(condition, pars)
  328. if err != nil && err.Error() != utils.ErrNoRow() {
  329. br.Msg = "删除失败"
  330. br.ErrMsg = "获取下一级图库信息失败,Err:" + err.Error()
  331. return
  332. }
  333. if nextItem != nil {
  334. resp.UniqueCode = nextItem.UniqueCode
  335. resp.ChartInfoId = nextItem.ChartInfoId
  336. } else {
  337. var condition string
  338. var pars []interface{}
  339. condition += " AND level=1 "
  340. //pars = append(pars, chartInfo.ChartClassifyId)
  341. condition += " AND chart_classify_id>? ORDER BY chart_classify_id ASC LIMIT 1 "
  342. pars = append(pars, chartInfo.ChartClassifyId)
  343. classifyItem, err := data_manage.GetChartClassifyByCondition(condition, pars)
  344. if err != nil && err.Error() != utils.ErrNoRow() {
  345. br.Msg = "删除失败"
  346. br.ErrMsg = "获取下一级图库分类信息失败,Err:" + err.Error()
  347. return
  348. }
  349. if classifyItem != nil {
  350. nextItem, err = data_manage.GetNextChartInfo(chartInfo.ChartClassifyId)
  351. if err != nil && err.Error() != utils.ErrNoRow() {
  352. br.Msg = "删除失败"
  353. br.ErrMsg = "获取下一级图库信息失败,Err:" + err.Error()
  354. return
  355. }
  356. if nextItem != nil {
  357. resp.UniqueCode = nextItem.UniqueCode
  358. resp.ChartInfoId = nextItem.ChartInfoId
  359. }
  360. }
  361. }
  362. //新增操作日志
  363. {
  364. chartLog := new(data_manage.ChartInfoLog)
  365. chartLog.ChartName = chartInfo.ChartName
  366. chartLog.ChartInfoId = req.ChartInfoId
  367. chartLog.ChartClassifyId = chartInfo.ChartClassifyId
  368. chartLog.SysUserId = sysUser.AdminId
  369. chartLog.SysUserRealName = sysUser.RealName
  370. chartLog.UniqueCode = chartInfo.UniqueCode
  371. chartLog.CreateTime = time.Now()
  372. chartLog.Content = string(c.Ctx.Input.RequestBody)
  373. chartLog.Status = "删除图表"
  374. chartLog.Method = c.Ctx.Input.URI()
  375. go data_manage.AddChartInfoLog(chartLog)
  376. }
  377. }
  378. br.Ret = 200
  379. br.Msg = "删除成功"
  380. br.Success = true
  381. br.Data = resp
  382. br.IsAddLog = true
  383. }