base_from_radish_research_classify.go 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518
  1. package data_manage
  2. import (
  3. "encoding/json"
  4. "eta/eta_api/models"
  5. "eta/eta_api/models/data_manage"
  6. "eta/eta_api/services/data"
  7. "eta/eta_api/utils"
  8. "fmt"
  9. "sort"
  10. "strconv"
  11. "strings"
  12. "time"
  13. )
  14. // ClassifyList
  15. // @Title 分类列表-含指标
  16. // @Description 分类列表-含指标
  17. // @Param ParentId query int false "父级ID"
  18. // @Success 200 {object} data_manage.RadishResearchSearchEdbResp
  19. // @router /radish_research/classify/list [get]
  20. func (this *BaseFromRadishResearchController) ClassifyList() {
  21. br := new(models.BaseResponse).Init()
  22. defer func() {
  23. if br.ErrMsg == "" {
  24. br.IsSendEmail = false
  25. }
  26. this.Data["json"] = br
  27. this.ServeJSON()
  28. }()
  29. sysUser := this.SysUser
  30. if sysUser == nil {
  31. br.Msg = "请登录"
  32. br.ErrMsg = "请登录,SysUser Is Empty"
  33. br.Ret = 408
  34. return
  35. }
  36. parentId, _ := this.GetInt("ParentId", -1)
  37. resp := make([]*data_manage.BaseFromRadishResearchClassifyListItem, 0)
  38. // 默认查询未分类及一级分类
  39. var classifyId int
  40. if parentId == -1 {
  41. resp = append(resp, &data_manage.BaseFromRadishResearchClassifyListItem{
  42. ClassifyName: "未分类",
  43. Level: 1,
  44. Sort: -100,
  45. UniqueCode: "unclassified",
  46. })
  47. }
  48. // 查询未分类下的指标
  49. if parentId == 0 {
  50. classifyId = -1
  51. }
  52. if parentId > 0 {
  53. classifyId = parentId
  54. }
  55. // 查询分类
  56. classifyOb := new(data_manage.BaseFromRadishResearchClassify)
  57. {
  58. cond := fmt.Sprintf(" AND %s = ?", classifyOb.Cols().ParentId)
  59. pars := make([]interface{}, 0)
  60. pars = append(pars, classifyId)
  61. list, e := classifyOb.GetItemsByCondition(cond, pars, []string{}, fmt.Sprintf("%s ASC", classifyOb.Cols().Sort))
  62. if e != nil {
  63. br.Msg = "获取失败"
  64. br.ErrMsg = fmt.Sprintf("获取子分类失败, %v", e)
  65. return
  66. }
  67. for _, v := range list {
  68. resp = append(resp, &data_manage.BaseFromRadishResearchClassifyListItem{
  69. ClassifyId: v.BaseFromRadishResearchClassifyId,
  70. ClassifyName: v.ClassifyName,
  71. ParentId: v.ParentId,
  72. Level: v.Level,
  73. Sort: v.Sort,
  74. UniqueCode: v.UniqueCode,
  75. })
  76. }
  77. }
  78. // 查询指标
  79. if parentId > -1 {
  80. indexOb := new(data_manage.BaseFromRadishResearchIndex)
  81. {
  82. cond := fmt.Sprintf(" AND %s = ?", indexOb.Cols().ClassifyId)
  83. pars := make([]interface{}, 0)
  84. pars = append(pars, parentId)
  85. list, e := indexOb.GetItemsByCondition(cond, pars, []string{}, fmt.Sprintf("%s ASC", indexOb.Cols().Sort))
  86. if e != nil {
  87. br.Msg = "获取失败"
  88. br.ErrMsg = fmt.Sprintf("获取分类下指标失败, %v", e)
  89. return
  90. }
  91. for _, v := range list {
  92. resp = append(resp, &data_manage.BaseFromRadishResearchClassifyListItem{
  93. NodeType: 1,
  94. IndexId: v.BaseFromRadishResearchIndexId,
  95. IndexCode: v.IndexCode,
  96. IndexName: v.IndexName,
  97. ParentId: parentId,
  98. Sort: v.Sort,
  99. UniqueCode: v.IndexCode,
  100. })
  101. }
  102. }
  103. }
  104. sort.Slice(resp, func(i, j int) bool {
  105. return resp[i].Sort < resp[j].Sort
  106. })
  107. br.Data = resp
  108. br.Ret = 200
  109. br.Success = true
  110. br.Msg = "获取成功"
  111. }
  112. // ClassifyTree
  113. // @Title 分类树
  114. // @Description 分类树
  115. // @Success 200 {object} data_manage.RadishResearchSearchEdbResp
  116. // @router /radish_research/classify/tree [get]
  117. func (this *BaseFromRadishResearchController) ClassifyTree() {
  118. br := new(models.BaseResponse).Init()
  119. defer func() {
  120. if br.ErrMsg == "" {
  121. br.IsSendEmail = false
  122. }
  123. this.Data["json"] = br
  124. this.ServeJSON()
  125. }()
  126. sysUser := this.SysUser
  127. if sysUser == nil {
  128. br.Msg = "请登录"
  129. br.ErrMsg = "请登录,SysUser Is Empty"
  130. br.Ret = 408
  131. return
  132. }
  133. // 获取所有分类
  134. classifyOb := new(data_manage.BaseFromRadishResearchClassify)
  135. list, e := classifyOb.GetItemsByCondition(``, make([]interface{}, 0), []string{}, fmt.Sprintf("%s ASC, %s ASC", classifyOb.Cols().ParentId, classifyOb.Cols().Sort))
  136. if e != nil {
  137. br.Msg = "获取失败"
  138. br.ErrMsg = fmt.Sprintf("获取分类列表失败, %v", e)
  139. return
  140. }
  141. items := make([]*data_manage.BaseFromRadishResearchClassifyItem, 0)
  142. for _, v := range list {
  143. items = append(items, v.Format2Item())
  144. }
  145. tree := data.GetRadishResearchClassifyTreeRecursive(items, 0)
  146. // 未分类置顶
  147. resp := make([]*data_manage.BaseFromRadishResearchClassifyItem, 0)
  148. resp = append(resp, &data_manage.BaseFromRadishResearchClassifyItem{
  149. ClassifyName: "未分类",
  150. Level: 1,
  151. Sort: -100,
  152. UniqueCode: "unclassified",
  153. })
  154. resp = append(resp, tree...)
  155. br.Data = resp
  156. br.Ret = 200
  157. br.Success = true
  158. br.Msg = "获取成功"
  159. }
  160. // ClassifyAdd
  161. // @Title 新增分类
  162. // @Description 新增分类
  163. // @Param request body data_manage.RadishResearchClassifyAddReq true "type json string"
  164. // @Success 200 string "操作成功"
  165. // @router /radish_research/classify/add [post]
  166. func (this *BaseFromRadishResearchController) ClassifyAdd() {
  167. br := new(models.BaseResponse).Init()
  168. defer func() {
  169. if br.ErrMsg == "" {
  170. br.IsSendEmail = false
  171. }
  172. this.Data["json"] = br
  173. this.ServeJSON()
  174. }()
  175. sysUser := this.SysUser
  176. if sysUser == nil {
  177. br.Msg = "请登录"
  178. br.ErrMsg = "请登录,SysUser Is Empty"
  179. br.Ret = 408
  180. return
  181. }
  182. var req data_manage.RadishResearchClassifyAddReq
  183. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  184. br.Msg = "参数解析异常"
  185. br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
  186. return
  187. }
  188. req.ClassifyName = strings.TrimSpace(req.ClassifyName)
  189. if req.ClassifyName == "" {
  190. br.Msg = "请输入分类名称"
  191. return
  192. }
  193. if req.ParentId < 0 {
  194. br.Msg = "请选择上级分类"
  195. return
  196. }
  197. if req.Level > 6 {
  198. br.Msg = "目前只支持6级目录"
  199. return
  200. }
  201. // 校验分类名称
  202. classifyOb := new(data_manage.BaseFromRadishResearchClassify)
  203. {
  204. cond := fmt.Sprintf(" AND %s = ? AND %s = ?", classifyOb.Cols().ParentId, classifyOb.Cols().ClassifyName)
  205. pars := make([]interface{}, 0)
  206. pars = append(pars, req.ParentId, req.ClassifyName)
  207. count, e := classifyOb.GetCountByCondition(cond, pars)
  208. if e != nil {
  209. br.Msg = "操作失败"
  210. br.ErrMsg = fmt.Sprintf("获取分类名称重复数失败, %v", e)
  211. return
  212. }
  213. if count > 0 {
  214. br.Msg = "分类名称已存在"
  215. return
  216. }
  217. }
  218. // 层级路径
  219. var levelPath string
  220. var rootId int
  221. if req.ParentId > 0 {
  222. parent, e := classifyOb.GetItemById(req.ParentId)
  223. if e != nil {
  224. br.Msg = "上级分类有误"
  225. br.ErrMsg = fmt.Sprintf("获取上级分类失败, %v", e)
  226. return
  227. }
  228. levelPath = parent.LevelPath
  229. rootId = parent.RootId
  230. }
  231. sortMax, e := classifyOb.GetSortMax(req.ParentId)
  232. if e != nil {
  233. br.Msg = "操作失败"
  234. br.ErrMsg = fmt.Sprintf("获取分类最大排序失败, %v", e)
  235. return
  236. }
  237. timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
  238. classifyOb.ParentId = req.ParentId
  239. classifyOb.ClassifyName = req.ClassifyName
  240. classifyOb.Level = req.Level + 1
  241. classifyOb.Sort = sortMax + 1
  242. classifyOb.SysUserId = sysUser.AdminId
  243. classifyOb.SysUserRealName = sysUser.RealName
  244. classifyOb.UniqueCode = utils.MD5(classifyOb.TableName() + "_" + timestamp)
  245. classifyOb.CreateTime = time.Now().Local()
  246. classifyOb.ModifyTime = time.Now().Local()
  247. if e = classifyOb.Create(); e != nil {
  248. br.Msg = "操作失败"
  249. br.ErrMsg = fmt.Sprintf("新增分类失败, %v", e)
  250. return
  251. }
  252. if req.ParentId > 0 {
  253. // 用英文逗号拼接方便查询
  254. classifyOb.LevelPath = fmt.Sprintf("%s,%d", levelPath, classifyOb.BaseFromRadishResearchClassifyId)
  255. classifyOb.RootId = rootId
  256. } else {
  257. classifyOb.LevelPath = fmt.Sprint(classifyOb.BaseFromRadishResearchClassifyId)
  258. classifyOb.RootId = classifyOb.BaseFromRadishResearchClassifyId
  259. }
  260. if e = classifyOb.Update([]string{classifyOb.Cols().LevelPath, classifyOb.Cols().RootId}); e != nil {
  261. br.Msg = "操作失败"
  262. br.ErrMsg = fmt.Sprintf("更新分类失败, %v", e)
  263. return
  264. }
  265. br.Data = classifyOb.BaseFromRadishResearchClassifyId
  266. br.Ret = 200
  267. br.Success = true
  268. br.Msg = "操作成功"
  269. }
  270. // ClassifyEdit
  271. // @Title 编辑分类
  272. // @Description 编辑分类
  273. // @Param request body data_manage.RadishResearchClassifyEditReq true "type json string"
  274. // @Success 200 string "操作成功"
  275. // @router /radish_research/classify/edit [post]
  276. func (this *BaseFromRadishResearchController) ClassifyEdit() {
  277. br := new(models.BaseResponse).Init()
  278. defer func() {
  279. if br.ErrMsg == "" {
  280. br.IsSendEmail = false
  281. }
  282. this.Data["json"] = br
  283. this.ServeJSON()
  284. }()
  285. sysUser := this.SysUser
  286. if sysUser == nil {
  287. br.Msg = "请登录"
  288. br.ErrMsg = "请登录,SysUser Is Empty"
  289. br.Ret = 408
  290. return
  291. }
  292. var req data_manage.RadishResearchClassifyEditReq
  293. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  294. br.Msg = "参数解析异常"
  295. br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
  296. return
  297. }
  298. if req.ClassifyId < 0 {
  299. br.Msg = "请选择分类"
  300. return
  301. }
  302. req.ClassifyName = strings.TrimSpace(req.ClassifyName)
  303. if req.ClassifyName == "" {
  304. br.Msg = "请输入分类名称"
  305. return
  306. }
  307. classifyOb := new(data_manage.BaseFromRadishResearchClassify)
  308. classifyItem, e := classifyOb.GetItemById(req.ClassifyId)
  309. if e != nil {
  310. if utils.IsErrNoRow(e) {
  311. br.Msg = "分类不存在, 请刷新页面"
  312. return
  313. }
  314. br.Msg = "操作失败"
  315. br.ErrMsg = fmt.Sprintf("获取分类失败, %v", e)
  316. return
  317. }
  318. if classifyItem != nil && classifyItem.BaseFromRadishResearchClassifyId <= 0 {
  319. br.Msg = "分类不存在, 请刷新页面"
  320. return
  321. }
  322. // 校验分类名称
  323. {
  324. cond := fmt.Sprintf(" AND %s <> ? AND %s = ?", classifyOb.Cols().PrimaryId, classifyOb.Cols().ClassifyName)
  325. pars := make([]interface{}, 0)
  326. pars = append(pars, req.ClassifyId, req.ClassifyName)
  327. count, e := classifyOb.GetCountByCondition(cond, pars)
  328. if e != nil {
  329. br.Msg = "操作失败"
  330. br.ErrMsg = fmt.Sprintf("获取分类名称重复数失败, %v", e)
  331. return
  332. }
  333. if count > 0 {
  334. br.Msg = "分类名称已存在"
  335. return
  336. }
  337. }
  338. classifyItem.ClassifyName = req.ClassifyName
  339. classifyItem.ModifyTime = time.Now().Local()
  340. updateCols := []string{classifyOb.Cols().ClassifyName, classifyOb.Cols().ModifyTime}
  341. if e = classifyItem.Update(updateCols); e != nil {
  342. br.Msg = "操作失败"
  343. br.ErrMsg = fmt.Sprintf("更新分类失败, %v", e)
  344. return
  345. }
  346. br.Ret = 200
  347. br.Success = true
  348. br.Msg = "操作成功"
  349. }
  350. // ClassifyRemove
  351. // @Title 删除分类
  352. // @Description 删除分类
  353. // @Param request body data_manage.RadishResearchClassifyRemoveReq true "type json string"
  354. // @Success 200 string "操作成功"
  355. // @router /radish_research/classify/remove [post]
  356. func (this *BaseFromRadishResearchController) ClassifyRemove() {
  357. br := new(models.BaseResponse).Init()
  358. defer func() {
  359. if br.ErrMsg == "" {
  360. br.IsSendEmail = false
  361. }
  362. this.Data["json"] = br
  363. this.ServeJSON()
  364. }()
  365. sysUser := this.SysUser
  366. if sysUser == nil {
  367. br.Msg = "请登录"
  368. br.ErrMsg = "请登录,SysUser Is Empty"
  369. br.Ret = 408
  370. return
  371. }
  372. var req data_manage.RadishResearchClassifyRemoveReq
  373. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  374. br.Msg = "参数解析异常"
  375. br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
  376. return
  377. }
  378. if req.ClassifyId < 0 {
  379. br.Msg = "请选择分类"
  380. return
  381. }
  382. classifyOb := new(data_manage.BaseFromRadishResearchClassify)
  383. classifyItem, e := classifyOb.GetItemById(req.ClassifyId)
  384. if e != nil {
  385. if utils.IsErrNoRow(e) {
  386. br.Ret = 200
  387. br.Success = true
  388. br.Msg = "操作成功"
  389. return
  390. }
  391. br.Msg = "操作失败"
  392. br.ErrMsg = fmt.Sprintf("获取分类失败, %v", e)
  393. return
  394. }
  395. if classifyItem != nil && classifyItem.BaseFromRadishResearchClassifyId <= 0 {
  396. br.Ret = 200
  397. br.Success = true
  398. br.Msg = "操作成功"
  399. return
  400. }
  401. // 查询子分类
  402. {
  403. cond := fmt.Sprintf(" AND %s = ?", classifyOb.Cols().ParentId)
  404. pars := make([]interface{}, 0)
  405. pars = append(pars, req.ClassifyId)
  406. count, e := classifyOb.GetCountByCondition(cond, pars)
  407. if e != nil {
  408. br.Msg = "操作失败"
  409. br.ErrMsg = fmt.Sprintf("获取子分类数失败, %v", e)
  410. return
  411. }
  412. if count > 0 {
  413. br.Msg = "该分类下含有子分类, 不允许删除"
  414. return
  415. }
  416. }
  417. // 查询指标
  418. indexOb := new(data_manage.BaseFromRadishResearchIndex)
  419. {
  420. cond := fmt.Sprintf(" AND %s = ?", indexOb.Cols().ClassifyId)
  421. pars := make([]interface{}, 0)
  422. pars = append(pars, req.ClassifyId)
  423. count, e := indexOb.GetCountByCondition(cond, pars)
  424. if e != nil {
  425. br.Msg = "操作失败"
  426. br.ErrMsg = fmt.Sprintf("获取分类下指标数失败, %v", e)
  427. return
  428. }
  429. if count > 0 {
  430. br.Msg = "该分类下含有指标, 不允许删除"
  431. return
  432. }
  433. }
  434. if e := classifyItem.Remove(); e != nil {
  435. br.Msg = "操作失败"
  436. br.ErrMsg = fmt.Sprintf("删除分类失败, %v", e)
  437. return
  438. }
  439. br.Ret = 200
  440. br.Success = true
  441. br.Msg = "操作成功"
  442. }
  443. // ClassifyMove
  444. // @Title 移动分类
  445. // @Description 移动分类
  446. // @Param request body data_manage.BaseFromRadishResearchClassifyMoveReq true "type json string"
  447. // @Success 200 string "操作成功"
  448. // @router /radish_research/classify/move [post]
  449. func (this *BaseFromRadishResearchController) ClassifyMove() {
  450. br := new(models.BaseResponse).Init()
  451. defer func() {
  452. if br.ErrMsg == "" {
  453. br.IsSendEmail = false
  454. }
  455. this.Data["json"] = br
  456. this.ServeJSON()
  457. }()
  458. sysUser := this.SysUser
  459. if sysUser == nil {
  460. br.Msg = "请登录"
  461. br.ErrMsg = "请登录,SysUser Is Empty"
  462. br.Ret = 408
  463. return
  464. }
  465. var req data_manage.BaseFromRadishResearchClassifyMoveReq
  466. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  467. br.Msg = "参数解析异常"
  468. br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
  469. return
  470. }
  471. if req.ClassifyId <= 0 && req.ItemId <= 0 {
  472. br.Msg = "请选择分类或指标"
  473. return
  474. }
  475. err, errMsg := data.RadishResearchMoveClassify(req, sysUser)
  476. if errMsg != `` {
  477. br.Msg = errMsg
  478. br.ErrMsg = errMsg
  479. if err != nil {
  480. br.ErrMsg = err.Error()
  481. } else {
  482. br.IsSendEmail = false
  483. }
  484. return
  485. }
  486. br.Ret = 200
  487. br.Success = true
  488. br.Msg = "操作成功"
  489. }