edb_collect.go 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366
  1. package data_manage
  2. import (
  3. "encoding/json"
  4. "eta_gn/eta_api/controllers"
  5. "eta_gn/eta_api/models"
  6. "eta_gn/eta_api/models/data_manage"
  7. "eta_gn/eta_api/services/data"
  8. "eta_gn/eta_api/utils"
  9. "fmt"
  10. "github.com/rdlucklib/rdluck_tools/paging"
  11. "strings"
  12. "time"
  13. )
  14. // EdbCollectController 指标收藏
  15. type EdbCollectController struct {
  16. controllers.BaseAuthController
  17. }
  18. // List
  19. // @Title 收藏列表-分页
  20. // @Description 收藏列表-分页
  21. // @Param PageSize query int false "每页数据量"
  22. // @Param CurrentIndex query int false "页码"
  23. // @Param ClassifyId query int false "分类ID"
  24. // @Param Keyword query string false "搜索关键词:指标ID/指标名称"
  25. // @Success Ret=200 保存成功
  26. // @router /edb_collect/list [get]
  27. func (this *EdbCollectController) List() {
  28. br := new(models.BaseResponse).Init()
  29. defer func() {
  30. if br.ErrMsg == "" {
  31. br.IsSendEmail = false
  32. }
  33. this.Data["json"] = br
  34. this.ServeJSON()
  35. }()
  36. sysUser := this.SysUser
  37. if sysUser == nil {
  38. br.Msg = "请登录"
  39. br.ErrMsg = "请登录,SysUser Is Empty"
  40. br.Ret = 408
  41. return
  42. }
  43. //resp := new(response.EdbInfoChartListResp)
  44. resp := new(data_manage.CollectEdbInfoListResp)
  45. resp.List = make([]*data_manage.CollectEdbInfoItem, 0)
  46. // 分页
  47. pageSize, _ := this.GetInt("PageSize")
  48. currentIndex, _ := this.GetInt("CurrentIndex")
  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. // 当前用户
  60. var cond string
  61. var pars []interface{}
  62. cond += ` AND a.sys_user_id = ?`
  63. pars = append(pars, sysUser.AdminId)
  64. // 分类筛选
  65. classifyId, _ := this.GetInt("ClassifyId")
  66. if classifyId > 0 {
  67. classifyIds, e := data.GetEdbCollectClassifyChildIds(classifyId, sysUser.AdminId, true)
  68. if e != nil {
  69. br.Msg = "获取失败"
  70. br.ErrMsg = fmt.Sprintf("获取子分类IDs失败, %v", e)
  71. return
  72. }
  73. if len(classifyIds) == 0 {
  74. resp.Paging = page
  75. br.Data = resp
  76. br.Ret = 200
  77. br.Success = true
  78. br.Msg = "获取成功"
  79. return
  80. }
  81. cond += fmt.Sprintf(` AND a.edb_collect_classify_id IN (%s) `, utils.GetOrmInReplace(len(classifyIds)))
  82. pars = append(pars, classifyIds)
  83. }
  84. // 获取当前账号的不可见指标
  85. {
  86. obj := data_manage.EdbInfoNoPermissionAdmin{}
  87. list, e := obj.GetAllListByAdminId(sysUser.AdminId)
  88. if e != nil {
  89. br.Msg = "获取失败"
  90. br.ErrMsg = "获取不可见指标配置数据失败,Err:" + e.Error()
  91. return
  92. }
  93. var edbIds []int
  94. for _, v := range list {
  95. edbIds = append(edbIds, v.EdbInfoId)
  96. }
  97. edbLen := len(edbIds)
  98. if edbLen > 0 {
  99. cond += fmt.Sprintf(` AND a.edb_info_id NOT IN (%s)`, utils.GetOrmInReplace(edbLen))
  100. pars = append(pars, edbIds)
  101. }
  102. }
  103. // 关键词搜索
  104. keywords := this.GetString("Keyword")
  105. keywords = strings.TrimSpace(keywords)
  106. if keywords != "" {
  107. kw := fmt.Sprint("%", keywords, "%")
  108. cond += fmt.Sprintf(` AND (b.edb_code LIKE ? OR b.edb_name LIKE ?)`)
  109. pars = append(pars, kw, kw)
  110. }
  111. // 获取指标列表
  112. dataCount, e := data_manage.GetCollectEdbInfoCount(cond, pars)
  113. if e != nil {
  114. br.Msg = "获取失败"
  115. br.ErrMsg = fmt.Sprintf("获取收藏指标总数失败, %v", e)
  116. return
  117. }
  118. if dataCount == 0 {
  119. resp.Paging = page
  120. br.Data = resp
  121. br.Ret = 200
  122. br.Success = true
  123. br.Msg = "获取成功"
  124. return
  125. }
  126. list, e := data_manage.GetCollectEdbInfoPageList(cond, pars, startSize, pageSize)
  127. if e != nil {
  128. br.Msg = "获取失败"
  129. br.ErrMsg = fmt.Sprintf("获取收藏指标列表失败, %v", e)
  130. return
  131. }
  132. for _, v := range list {
  133. resp.List = append(resp.List, data_manage.FormatEdbInfo2CollectItem(v))
  134. }
  135. page = paging.GetPaging(currentIndex, pageSize, int(dataCount))
  136. resp.Paging = page
  137. br.Data = resp
  138. br.Ret = 200
  139. br.Success = true
  140. br.Msg = "获取成功"
  141. }
  142. // Collect
  143. // @Title 新增收藏
  144. // @Description 新增收藏
  145. // @Param request body data_manage.EdbCollectReq true "type json string"
  146. // @Success Ret=200 保存成功
  147. // @router /edb_collect/collect [post]
  148. func (this *EdbCollectController) Collect() {
  149. br := new(models.BaseResponse).Init()
  150. defer func() {
  151. if br.ErrMsg == "" {
  152. br.IsSendEmail = false
  153. }
  154. this.Data["json"] = br
  155. this.ServeJSON()
  156. }()
  157. sysUser := this.SysUser
  158. if sysUser == nil {
  159. br.Msg = "请登录"
  160. br.ErrMsg = "请登录,SysUser Is Empty"
  161. br.Ret = 408
  162. return
  163. }
  164. var req data_manage.EdbCollectReq
  165. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  166. br.Msg = "参数解析异常"
  167. br.ErrMsg = fmt.Sprintf("参数解析异常: %v", e)
  168. return
  169. }
  170. if req.EdbInfoId <= 0 {
  171. br.Msg = "请选择指标"
  172. return
  173. }
  174. edbItem, e := data_manage.GetEdbInfoById(req.EdbInfoId)
  175. if e != nil {
  176. if utils.IsErrNoRow(e) {
  177. br.Msg = "指标不存在, 请刷新页面"
  178. return
  179. }
  180. br.Msg = "操作失败"
  181. br.ErrMsg = fmt.Sprintf("获取指标信息失败: %v", e)
  182. return
  183. }
  184. collectOb := new(data_manage.EdbCollect)
  185. // 待添加的分类配置
  186. addList := make([]*data_manage.EdbCollect, 0)
  187. for _, classifyId := range req.ClassifyIdList {
  188. addList = append(addList, &data_manage.EdbCollect{
  189. EdbCollectClassifyId: classifyId,
  190. EdbInfoId: req.EdbInfoId,
  191. EdbCode: edbItem.EdbCode,
  192. SysUserId: sysUser.AdminId,
  193. SysRealName: sysUser.RealName,
  194. CreateTime: time.Now().Local(),
  195. ModifyTime: time.Now().Local(),
  196. })
  197. }
  198. cond := fmt.Sprintf(" %s = ? AND %s = ?", collectOb.Cols().SysUserId, collectOb.Cols().EdbInfoId)
  199. pars := make([]interface{}, 0)
  200. pars = append(pars, sysUser.AdminId, req.EdbInfoId)
  201. // 清除原有保存收藏配置,并新增保存收藏
  202. e = collectOb.RemoveAndCreateMulti(cond, pars, addList)
  203. if e != nil {
  204. br.Msg = "操作失败"
  205. br.ErrMsg = fmt.Sprintf("新增指标收藏失败: %v", e)
  206. return
  207. }
  208. br.Ret = 200
  209. br.Success = true
  210. br.Msg = "操作成功"
  211. }
  212. // CancelCollect
  213. // @Title 取消收藏
  214. // @Description 取消收藏
  215. // @Param request body data_manage.EdbCollectReq true "type json string"
  216. // @Success Ret=200 保存成功
  217. // @router /edb_collect/cancel_collect [post]
  218. func (this *EdbCollectController) CancelCollect() {
  219. br := new(models.BaseResponse).Init()
  220. defer func() {
  221. if br.ErrMsg == "" {
  222. br.IsSendEmail = false
  223. }
  224. this.Data["json"] = br
  225. this.ServeJSON()
  226. }()
  227. sysUser := this.SysUser
  228. if sysUser == nil {
  229. br.Msg = "请登录"
  230. br.ErrMsg = "请登录,SysUser Is Empty"
  231. br.Ret = 408
  232. return
  233. }
  234. var req data_manage.EdbCollectReq
  235. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  236. br.Msg = "参数解析异常"
  237. br.ErrMsg = fmt.Sprintf("参数解析异常: %v", e)
  238. return
  239. }
  240. if req.EdbInfoId <= 0 {
  241. br.Msg = "请选择指标"
  242. return
  243. }
  244. if req.ClassifyId <= 0 {
  245. br.Msg = "请选择分类"
  246. return
  247. }
  248. // 取消收藏
  249. collectOb := new(data_manage.EdbCollect)
  250. cond := fmt.Sprintf("%s = ? AND %s = ? AND %s = ?", collectOb.Cols().SysUserId, collectOb.Cols().EdbCollectClassifyId, collectOb.Cols().EdbInfoId)
  251. pars := make([]interface{}, 0)
  252. pars = append(pars, sysUser.AdminId, req.ClassifyId, req.EdbInfoId)
  253. if e := collectOb.RemoveByCondition(cond, pars); e != nil {
  254. br.Msg = "操作失败"
  255. br.ErrMsg = fmt.Sprintf("取消收藏失败: %v", e)
  256. return
  257. }
  258. br.Ret = 200
  259. br.Success = true
  260. br.Msg = "操作成功"
  261. }
  262. // Move
  263. // @Title 移动收藏
  264. // @Description 移动收藏
  265. // @Success 200 {object} data_manage.EdbCollectMoveReq
  266. // @router /edb_collect/move [post]
  267. func (this *EdbCollectController) Move() {
  268. br := new(models.BaseResponse).Init()
  269. defer func() {
  270. if br.ErrMsg == "" {
  271. br.IsSendEmail = false
  272. }
  273. this.Data["json"] = br
  274. this.ServeJSON()
  275. }()
  276. sysUser := this.SysUser
  277. if sysUser == nil {
  278. br.Msg = "请登录"
  279. br.ErrMsg = "请登录,SysUser Is Empty"
  280. br.Ret = 408
  281. return
  282. }
  283. var req data_manage.EdbCollectMoveReq
  284. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  285. br.Msg = "参数解析异常!"
  286. br.ErrMsg = fmt.Sprintf("参数解析失败, %v", e)
  287. return
  288. }
  289. var newSort int
  290. if req.PrevEdbInfoId <= 0 {
  291. firstOne, err := data_manage.GetEdbCollectSort(sysUser.AdminId, req.ClassifyId, 0)
  292. if err != nil {
  293. br.Msg = "获取数据失败!"
  294. br.ErrMsg = "获取数据失败,GetMyChartClassifyMapping,Err:" + err.Error()
  295. return
  296. }
  297. newSort = firstOne.Sort - 1
  298. } else if req.NextEdbInfoId <= 0 {
  299. lastOne, err := data_manage.GetEdbCollectSort(sysUser.AdminId, req.ClassifyId, 1)
  300. if err != nil {
  301. br.Msg = "获取数据失败!"
  302. br.ErrMsg = "获取数据失败,GetMyChartClassifyMapping,Err:" + err.Error()
  303. return
  304. }
  305. newSort = lastOne.Sort + 1
  306. } else {
  307. preMapItem, err := data_manage.GetEdbCollectByEdbInfoId(sysUser.AdminId, req.PrevEdbInfoId, req.ClassifyId)
  308. if err != nil {
  309. br.Msg = "获取数据失败!"
  310. br.ErrMsg = "获取数据失败,GetMyChartClassifyMapping,Err:" + err.Error()
  311. return
  312. }
  313. nextMapItem, err := data_manage.GetEdbCollectByEdbInfoId(sysUser.AdminId, req.NextEdbInfoId, req.ClassifyId)
  314. if err != nil {
  315. br.Msg = "获取数据失败!"
  316. br.ErrMsg = "获取数据失败,GetMyChartClassifyMapping,Err:" + err.Error()
  317. return
  318. }
  319. newSort = (preMapItem.Sort + nextMapItem.Sort) / 2
  320. newSort = preMapItem.Sort + 1
  321. var updateSortStr string
  322. if preMapItem.Sort == nextMapItem.Sort {
  323. updateSortStr = `sort + 2`
  324. } else if nextMapItem.Sort-preMapItem.Sort == 1 {
  325. updateSortStr = `sort + 1`
  326. }
  327. if updateSortStr != `` {
  328. _ = data_manage.UpdateEdbCollectSortByClassifyId(req.ClassifyId, preMapItem.Sort, preMapItem.EdbCollectId, updateSortStr)
  329. }
  330. }
  331. if e := data_manage.UpdateEdbCollectMove(newSort, sysUser.AdminId, req.EdbInfoId, req.ClassifyId); e != nil {
  332. br.Msg = "操作失败"
  333. br.ErrMsg = fmt.Sprintf("更新指标收藏失败, %v", e)
  334. return
  335. }
  336. br.Ret = 200
  337. br.Success = true
  338. br.Msg = "操作成功"
  339. }