classify.go 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "eta/eta_api/models"
  5. "eta/eta_api/models/report_approve"
  6. "eta/eta_api/services"
  7. "eta/eta_api/utils"
  8. "fmt"
  9. )
  10. // 分类
  11. type ClassifyController struct {
  12. BaseAuthController
  13. }
  14. // @Title 新增分类接口
  15. // @Description 新增分类
  16. // @Param request body models.ClassifyAddReq true "type json string"
  17. // @Success 200 新增成功
  18. // @router /add [post]
  19. func (this *ClassifyController) Add() {
  20. br := new(models.BaseResponse).Init()
  21. defer func() {
  22. this.Data["json"] = br
  23. this.ServeJSON()
  24. }()
  25. var req models.ClassifyAddReq
  26. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  27. if err != nil {
  28. br.Msg = "参数解析异常!"
  29. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  30. return
  31. }
  32. // 获取系统菜单, 如果没有对应的字段的特殊处理项, 则忽略必填
  33. /*menus, e := system.GetSysMenuItemsByCondition(` AND hidden = 0`, make([]interface{}, 0), []string{}, ``)
  34. if e != nil {
  35. br.Msg = "保存失败"
  36. br.ErrMsg = "获取菜单列表失败, Err: " + e.Error()
  37. return
  38. }
  39. menuMap := make(map[string]bool)
  40. for _, m := range menus {
  41. if m.ButtonCode != "" {
  42. menuMap[m.ButtonCode] = true
  43. }
  44. }*/
  45. if req.ClassifyName == "" {
  46. br.Msg = "分类名称不可为空"
  47. return
  48. }
  49. // 新增分类
  50. err, errMsg, isSentEmail := services.AddReportClassify(req.ClassifyName, req.ParentId, req.ChartPermissionIdList)
  51. if err != nil {
  52. br.Msg = "添加失败"
  53. if errMsg != "" {
  54. br.Msg = errMsg
  55. }
  56. br.ErrMsg = "添加失败,Err:" + err.Error()
  57. br.IsSendEmail = isSentEmail
  58. return
  59. }
  60. br.Ret = 200
  61. br.Success = true
  62. br.Msg = "新增成功"
  63. }
  64. // @Title 删除分类-检测接口
  65. // @Description 删除分类-信息检测,是否符合删除条件
  66. // @Param ClassifyId query int true "分类ID"
  67. // @Success 200 {object} models.CheckDeleteClassifyResp
  68. // @router /checkDeleteClassify [get]
  69. func (this *ClassifyController) CheckDeleteClassify() {
  70. br := new(models.BaseResponse).Init()
  71. defer func() {
  72. this.Data["json"] = br
  73. this.ServeJSON()
  74. }()
  75. classifyId, err := this.GetInt("ClassifyId")
  76. if classifyId <= 0 {
  77. br.Msg = "参数错误"
  78. return
  79. }
  80. classify, err := models.GetClassifyById(classifyId)
  81. if err != nil {
  82. br.Msg = "获取信息失败"
  83. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  84. return
  85. }
  86. resp := new(models.CheckDeleteClassifyResp)
  87. if classify == nil {
  88. br.Msg = "分类不存在"
  89. resp.Code = 1
  90. resp.Msg = "分类不存在"
  91. br.Data = resp
  92. br.Ret = 200
  93. br.Success = true
  94. return
  95. }
  96. //判断分类是否关联了报告
  97. if classify.ParentId > 0 {
  98. count, err := models.GetReportCountByClassifyId(classifyId)
  99. if err != nil {
  100. br.Msg = "获取信息失败"
  101. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  102. return
  103. }
  104. if count > 0 {
  105. resp.Code = 2
  106. resp.Msg = "该分类有关联报告,不允许删除"
  107. br.Data = resp
  108. br.Ret = 200
  109. br.Msg = "该分类有关联报告,不允许删除"
  110. br.Success = true
  111. return
  112. }
  113. } else {
  114. subCount, err := models.GetClassifySubCountByClassifyId(classifyId)
  115. if err != nil {
  116. br.Msg = "获取信息失败"
  117. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  118. return
  119. }
  120. if subCount > 0 {
  121. resp.Code = 3
  122. resp.Msg = "二级分类有关联报告,不允许删除"
  123. br.Data = resp
  124. br.Ret = 200
  125. br.Msg = "二级分类有关联报告,不允许删除"
  126. br.Success = true
  127. return
  128. }
  129. subTotal, err := models.GetClassifySubCountByParentId(classifyId)
  130. if err != nil {
  131. br.Msg = "获取信息失败"
  132. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  133. return
  134. }
  135. if subTotal > 0 {
  136. resp.Code = 4
  137. resp.Msg = "请先删除该分类下关联分类"
  138. br.Data = resp
  139. br.Ret = 200
  140. br.Msg = "请先删除该分类下关联分类"
  141. br.Success = true
  142. return
  143. }
  144. }
  145. // 查询该分类是否关联了审批流
  146. flowOb := new(report_approve.ReportApproveFlow)
  147. flowCond := fmt.Sprintf(` AND (%s = ? OR %s = ?) AND (%s = ? OR %s = ?)`, report_approve.ReportApproveFlowCols.ReportType, report_approve.ReportApproveFlowCols.ReportType, report_approve.ReportApproveFlowCols.ClassifyFirstId, report_approve.ReportApproveFlowCols.ClassifySecondId)
  148. flowPars := make([]interface{}, 0)
  149. flowPars = append(flowPars, report_approve.FlowReportTypeChinese, report_approve.FlowReportTypeSmart, classifyId, classifyId)
  150. flowCount, e := flowOb.GetCountByCondition(flowCond, flowPars)
  151. if e != nil {
  152. br.Msg = "检测失败"
  153. br.ErrMsg = "获取关联审批流失败, Err: " + e.Error()
  154. return
  155. }
  156. if flowCount > 0 {
  157. resp.Code = 5
  158. resp.Msg = "该分类关联审批流,不允许删除"
  159. br.Data = resp
  160. br.Ret = 200
  161. br.Msg = resp.Msg
  162. br.Success = true
  163. return
  164. }
  165. resp.Code = 0
  166. resp.Msg = "检测完成,可进行删除操作"
  167. br.Ret = 200
  168. br.Data = resp
  169. br.Success = true
  170. br.Msg = "检测成功"
  171. }
  172. // @Title 删除分类接口
  173. // @Description 删除分类
  174. // @Param request body models.DeleteClassifyReq true "type json string"
  175. // @Success 200 Ret=200,删除成功
  176. // @router /delete [post]
  177. func (this *ClassifyController) Delete() {
  178. br := new(models.BaseResponse).Init()
  179. defer func() {
  180. this.Data["json"] = br
  181. this.ServeJSON()
  182. }()
  183. var req models.DeleteClassifyReq
  184. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  185. if err != nil {
  186. br.Msg = "参数解析异常!"
  187. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  188. return
  189. }
  190. if req.ClassifyId <= 0 {
  191. br.Msg = "参数错误"
  192. return
  193. }
  194. br.Msg = "报告分类不允许删除"
  195. br.IsSendEmail = false
  196. return
  197. item, err := models.GetClassifyById(req.ClassifyId)
  198. if err != nil {
  199. br.Msg = "获取信息失败"
  200. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  201. return
  202. }
  203. if item == nil {
  204. br.Msg = "分类不存在"
  205. return
  206. }
  207. err = models.DeleteClassify(req.ClassifyId)
  208. if err != nil {
  209. br.Msg = "删除失败"
  210. br.ErrMsg = "删除失败,Err:" + err.Error()
  211. return
  212. }
  213. // 被删除是二级分类且关联电话会时, 同步FICC活动分类
  214. //if item.ParentId > 0 && item.RelateTel == 1 {
  215. // go func() {
  216. // _ = yb.SyncClassifyAndFiccActivityType()
  217. // }()
  218. //}
  219. br.Ret = 200
  220. br.Success = true
  221. br.Msg = "删除成功"
  222. }
  223. // @Title 修改分类接口
  224. // @Description 修改分类
  225. // @Param request body models.EditClassifyReq true "type json string"
  226. // @Success 200 Ret=200,修改成功
  227. // @router /edit [post]
  228. func (this *ClassifyController) Edit() {
  229. br := new(models.BaseResponse).Init()
  230. defer func() {
  231. this.Data["json"] = br
  232. this.ServeJSON()
  233. }()
  234. var req models.EditClassifyReq
  235. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  236. if err != nil {
  237. br.Msg = "参数解析异常!"
  238. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  239. return
  240. }
  241. if req.ClassifyId <= 0 {
  242. br.Msg = "参数错误"
  243. return
  244. }
  245. if req.ClassifyName == "" {
  246. br.Msg = "分类名称不可为空"
  247. return
  248. }
  249. // 修改分类
  250. err, errMsg, isSentEmail := services.EditReportClassify(req.ClassifyId, req.ClassifyName, req.ChartPermissionIdList)
  251. if err != nil {
  252. br.Msg = "修改失败"
  253. if errMsg != "" {
  254. br.Msg = errMsg
  255. }
  256. br.ErrMsg = "修改失败,Err:" + err.Error()
  257. br.IsSendEmail = isSentEmail
  258. return
  259. }
  260. br.Ret = 200
  261. br.Success = true
  262. br.Msg = "修改成功"
  263. }
  264. // ParentClassify
  265. // @Title 获取父级分类接口
  266. // @Description 获取父级分类
  267. // @Success 200 {object} models.Classify
  268. // @router /parent [get]
  269. func (this *ClassifyController) ParentClassify() {
  270. br := new(models.BaseResponse).Init()
  271. defer func() {
  272. this.Data["json"] = br
  273. this.ServeJSON()
  274. }()
  275. items, err := models.GetAllClassify()
  276. if err != nil {
  277. br.Msg = "获取失败"
  278. br.ErrMsg = "获取失败,Err:" + err.Error()
  279. return
  280. }
  281. classifyIds := make([]int, 0)
  282. for i := range items {
  283. classifyIds = append(classifyIds, items[i].Id)
  284. }
  285. classifyLen := len(classifyIds)
  286. if classifyLen == 0 {
  287. br.Ret = 200
  288. br.Success = true
  289. br.Msg = "获取成功"
  290. return
  291. }
  292. // 获取一级分类-子目录列表
  293. menuListMap := make(map[int][]*models.ClassifyMenu, 0)
  294. var menuCond string
  295. var menuPars []interface{}
  296. menuCond += ` AND classify_id IN (` + utils.GetOrmInReplace(classifyLen) + `)`
  297. menuPars = append(menuPars, classifyIds)
  298. parentMenus, e := models.GetClassifyMenuList(menuCond, menuPars)
  299. if e != nil {
  300. br.Msg = "获取失败"
  301. br.ErrMsg = "获取一级分类子目录列表失败"
  302. return
  303. }
  304. for i := range parentMenus {
  305. if menuListMap[parentMenus[i].ClassifyId] == nil {
  306. menuListMap[parentMenus[i].ClassifyId] = make([]*models.ClassifyMenu, 0)
  307. }
  308. menuListMap[parentMenus[i].ClassifyId] = append(menuListMap[parentMenus[i].ClassifyId], parentMenus[i])
  309. }
  310. resp := make([]*models.ClassifyItem, 0)
  311. for i := range items {
  312. resp = append(resp, &models.ClassifyItem{
  313. Classify: *items[i],
  314. ClassifyMenuList: menuListMap[items[i].Id],
  315. })
  316. }
  317. resp = services.GetClassifyTreeRecursive(resp, 0)
  318. br.Data = resp
  319. br.Ret = 200
  320. br.Success = true
  321. br.Msg = "获取成功"
  322. }
  323. // @Title 根据id获取分类详情接口
  324. // @Description 根据id获取分类详情
  325. // @Param request body models.FindByIdClassifyReq true "type json string"
  326. // @Success 200 {object} models.Classify
  327. // @router /findById [get]
  328. func (this *ClassifyController) FindByIdClassify() {
  329. br := new(models.BaseResponse).Init()
  330. defer func() {
  331. this.Data["json"] = br
  332. this.ServeJSON()
  333. }()
  334. var req models.FindByIdClassifyReq
  335. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  336. if err != nil {
  337. br.Msg = "参数解析异常!"
  338. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  339. return
  340. }
  341. items, err := models.FindByIdClassify(req.ClassifyId)
  342. if err != nil {
  343. br.Msg = "获取失败"
  344. br.ErrMsg = "获取失败,Err:" + err.Error()
  345. return
  346. }
  347. br.Data = items
  348. br.Ret = 200
  349. br.Success = true
  350. br.Msg = "获取成功"
  351. }
  352. // @Title 获取分类列表
  353. // @Description 获取分类列表
  354. // @Param KeyWord query string true "检索关键词"
  355. // @Param CompanyType query string false "产品类型,枚举值:'ficc','权益';不传默认返回全部"
  356. // @Param HideDayWeek query int false "是否隐藏晨周报"
  357. // @Success 200 {object} models.Classify
  358. // @router /list [get]
  359. func (this *ClassifyController) ListClassify() {
  360. br := new(models.BaseResponse).Init()
  361. defer func() {
  362. this.Data["json"] = br
  363. this.ServeJSON()
  364. }()
  365. keyWord := this.GetString("KeyWord")
  366. companyType := this.GetString("CompanyType")
  367. hideDayWeek, _ := this.GetInt("HideDayWeek")
  368. reqEnabled, _ := this.GetInt("Enabled", -1)
  369. // 商家不隐藏晨周报
  370. if utils.BusinessCode != utils.BusinessCodeRelease {
  371. hideDayWeek = 0
  372. }
  373. enabled := -1
  374. if reqEnabled == 1 {
  375. enabled = reqEnabled
  376. }
  377. list, err := models.GetClassifyList(keyWord, companyType, hideDayWeek, enabled)
  378. if err != nil {
  379. br.Msg = "获取失败"
  380. br.ErrMsg = "获取失败,Err:" + err.Error()
  381. return
  382. }
  383. parentIds := make([]int, 0)
  384. for i := range list {
  385. parentIds = append(parentIds, list[i].Id)
  386. }
  387. parentIdLen := len(parentIds)
  388. if parentIdLen == 0 {
  389. resp := &models.ClassifyListResp{
  390. List: list,
  391. }
  392. br.Data = resp
  393. br.Ret = 200
  394. br.Success = true
  395. br.Msg = "获取成功"
  396. return
  397. }
  398. // 获取一级分类-子目录列表
  399. menuListMap := make(map[int][]*models.ClassifyMenu, 0)
  400. var menuCond string
  401. var menuPars []interface{}
  402. menuCond += ` AND classify_id IN (` + utils.GetOrmInReplace(parentIdLen) + `)`
  403. menuPars = append(menuPars, parentIds)
  404. parentMenus, e := models.GetClassifyMenuList(menuCond, menuPars)
  405. if e != nil {
  406. br.Msg = "获取失败"
  407. br.ErrMsg = "获取一级分类子目录列表失败"
  408. return
  409. }
  410. for i := range parentMenus {
  411. if menuListMap[parentMenus[i].ClassifyId] == nil {
  412. menuListMap[parentMenus[i].ClassifyId] = make([]*models.ClassifyMenu, 0)
  413. }
  414. menuListMap[parentMenus[i].ClassifyId] = append(menuListMap[parentMenus[i].ClassifyId], parentMenus[i])
  415. }
  416. // 获取子分类
  417. children, e := models.GetClassifyChildByParentIds(parentIds, keyWord, enabled)
  418. if e != nil {
  419. br.Msg = "获取失败"
  420. br.ErrMsg = "获取子分类失败"
  421. return
  422. }
  423. childrenIds := make([]int, 0)
  424. for i := range children {
  425. childrenIds = append(childrenIds, children[i].Id)
  426. }
  427. childrenIdsLen := len(childrenIds)
  428. // 获取二级分类-子目录关联
  429. relateMap := make(map[int]int, 0)
  430. if childrenIdsLen > 0 {
  431. var relateCond string
  432. var relatePars []interface{}
  433. relateCond += ` AND classify_id IN (` + utils.GetOrmInReplace(childrenIdsLen) + `)`
  434. relatePars = append(relatePars, childrenIds)
  435. relates, e := models.GetClassifyMenuRelationList(relateCond, relatePars)
  436. if e != nil {
  437. br.Msg = "获取失败"
  438. br.ErrMsg = "获取二级分类子目录关联失败, Err: " + e.Error()
  439. return
  440. }
  441. for i := range relates {
  442. relateMap[relates[i].ClassifyId] = relates[i].MenuId
  443. }
  444. }
  445. // 查询分类绑定的权限
  446. permissionList, _ := models.GetAllPermissionMapping()
  447. classifyPermissionMap := make(map[int][]int, 0)
  448. if len(permissionList) > 0 {
  449. for _, v := range permissionList {
  450. classifyPermissionMap[v.ClassifyId] = append(classifyPermissionMap[v.ClassifyId], v.ChartPermissionId)
  451. }
  452. }
  453. // 二级分类
  454. childrenMap := make(map[int][]*models.ClassifyItem, 0)
  455. for i := range children {
  456. if childrenMap[children[i].ParentId] == nil {
  457. childrenMap[children[i].ParentId] = make([]*models.ClassifyItem, 0)
  458. }
  459. tmp := &models.ClassifyItem{
  460. Classify: *children[i],
  461. ClassifyMenuId: relateMap[children[i].Id],
  462. }
  463. if permissionIds, ok := classifyPermissionMap[children[i].Id]; ok {
  464. tmp.ChartPermissionIdList = permissionIds
  465. }
  466. childrenMap[children[i].ParentId] = append(childrenMap[children[i].ParentId], tmp)
  467. }
  468. // 一级分类
  469. for i := range list {
  470. list[i].ClassifyMenuList = menuListMap[list[i].Id]
  471. list[i].Child = childrenMap[list[i].Id]
  472. }
  473. resp := new(models.ClassifyListResp)
  474. resp.List = list
  475. br.Data = resp
  476. br.Ret = 200
  477. br.Success = true
  478. br.Msg = "获取成功"
  479. }
  480. // ClassifyPermission
  481. // @Title 获取分类权限列表
  482. // @Description 获取分类权限列表
  483. // @Param ClassifyId query int true "分类id"
  484. // @Success 200 {object} []models.ChartPermissionSearchKeyWordMapping
  485. // @router /permission_list [get]
  486. func (this *ClassifyController) ClassifyPermission() {
  487. br := new(models.BaseResponse).Init()
  488. defer func() {
  489. this.Data["json"] = br
  490. this.ServeJSON()
  491. }()
  492. classifyId, _ := this.GetInt("ClassifyId")
  493. if classifyId <= 0 {
  494. br.Msg = "参数错误"
  495. return
  496. }
  497. //获取报告分类详情
  498. classifyInfo, err := models.GetClassifyById(classifyId)
  499. if err != nil {
  500. br.Msg = "获取分类信息失败"
  501. br.ErrMsg = "获取失败,Err:" + err.Error()
  502. return
  503. }
  504. //获取报告分类权限列表
  505. list, err := models.GetPermission(classifyInfo.Id)
  506. if err != nil {
  507. br.Msg = "获取分类信息失败"
  508. br.ErrMsg = "获取失败,Err:" + err.Error()
  509. return
  510. }
  511. br.Data = list
  512. br.Ret = 200
  513. br.Success = true
  514. br.Msg = "获取成功"
  515. }
  516. // EditClassifyPermission
  517. // @Title 编辑分类权限
  518. // @Description 编辑分类权限
  519. // @Param ClassifyId query int true "分类id"
  520. // @Success 200 {object} models.EditClassifyPermissionReq
  521. // @router /permission/edit [post]
  522. func (this *ClassifyController) EditClassifyPermission() {
  523. br := new(models.BaseResponse).Init()
  524. defer func() {
  525. this.Data["json"] = br
  526. this.ServeJSON()
  527. }()
  528. var req models.EditClassifyPermissionReq
  529. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  530. if err != nil {
  531. br.Msg = "参数解析异常!"
  532. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  533. return
  534. }
  535. if req.ClassifyId <= 0 {
  536. br.Msg = "参数错误"
  537. return
  538. }
  539. if len(req.ChartPermissionIdList) <= 0 {
  540. br.Msg = "请选择权限"
  541. return
  542. }
  543. //获取报告分类详情
  544. classifyInfo, err := models.GetClassifyById(req.ClassifyId)
  545. if err != nil {
  546. br.Msg = "获取分类信息失败"
  547. br.ErrMsg = "获取失败,Err:" + err.Error()
  548. return
  549. }
  550. //获取报告分类权限列表
  551. err = models.EditChartPermissionSearchKeyWordMappingMulti(classifyInfo.ClassifyName, req.ChartPermissionIdList, req.ClassifyId)
  552. if err != nil {
  553. br.Msg = "修改分类权限失败"
  554. br.ErrMsg = "修改分类权限失败,Err:" + err.Error()
  555. return
  556. }
  557. go func() {
  558. _ = services.EditClassifyChartPermissionSync(classifyInfo.ClassifyName, req.ClassifyId)
  559. }()
  560. // 是关联电话会二级分类修改了权限, 同步关联报告电话会的分类
  561. //if classifyInfo.ParentId > 0 && classifyInfo.RelateTel == 1 {
  562. // go func() {
  563. // _ = yb.SyncClassifyAndFiccActivityType()
  564. // }()
  565. //}
  566. br.Ret = 200
  567. br.Success = true
  568. br.Msg = "修改成功"
  569. }
  570. // @Title 含电话会分类列表
  571. // @Description 含电话会分类列表
  572. // @Success 200 {object} models.Classify
  573. // @router /tel_list [get]
  574. func (this *ClassifyController) TelListClassify() {
  575. br := new(models.BaseResponse).Init()
  576. defer func() {
  577. this.Data["json"] = br
  578. this.ServeJSON()
  579. }()
  580. resp := make([]*models.SimpleClassifyList, 0)
  581. var condition, orderRule string
  582. var pars []interface{}
  583. if utils.BusinessCode == utils.BusinessCodeRelease || utils.BusinessCode == utils.BusinessCodeSandbox {
  584. condition += ` AND classify_name <> '晨报' AND classify_name <> '周报' `
  585. }
  586. telList, e := models.GetClassifyByCondition(condition, orderRule, pars)
  587. if e != nil {
  588. return
  589. }
  590. firstList := make([]*models.SimpleClassifyList, 0)
  591. secondList := make([]*models.SimpleClassifyList, 0)
  592. secondMap := make(map[int][]*models.SimpleClassifyList, 0)
  593. for i := range telList {
  594. if telList[i].ParentId == 0 {
  595. firstList = append(firstList, telList[i])
  596. } else {
  597. secondList = append(secondList, telList[i])
  598. secondMap[telList[i].ParentId] = append(secondMap[telList[i].ParentId], telList[i])
  599. }
  600. }
  601. for i := range firstList {
  602. firstList[i].Child = secondMap[firstList[i].Id]
  603. }
  604. resp = firstList
  605. br.Data = resp
  606. br.Ret = 200
  607. br.Success = true
  608. br.Msg = "获取成功"
  609. }
  610. // Move
  611. // @Title 移动分类接口
  612. // @Description 移动分类
  613. // @Param request body models.ClassifyMoveReq true "type json string"
  614. // @Success 200 新增成功
  615. // @router /move [post]
  616. func (this *ClassifyController) Move() {
  617. br := new(models.BaseResponse).Init()
  618. defer func() {
  619. this.Data["json"] = br
  620. this.ServeJSON()
  621. }()
  622. var req models.ClassifyMoveReq
  623. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  624. if err != nil {
  625. br.Msg = "参数解析异常!"
  626. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  627. return
  628. }
  629. if req.ClassifyId <= 0 {
  630. br.Msg = "请选择分类"
  631. return
  632. }
  633. e, msg := services.MoveReportClassify(req)
  634. if e != nil {
  635. br.Msg = msg
  636. br.ErrMsg = "移动分类失败, Err: " + e.Error()
  637. return
  638. }
  639. br.Ret = 200
  640. br.Success = true
  641. br.Msg = "操作成功"
  642. }
  643. // SetEnabled
  644. // @Title 启用/禁用分类接口
  645. // @Description 启用/禁用分类
  646. // @Param request body models.ClassifyMoveReq true "type json string"
  647. // @Success 200 新增成功
  648. // @router /enabled/set [post]
  649. func (this *ClassifyController) SetEnabled() {
  650. br := new(models.BaseResponse).Init()
  651. defer func() {
  652. this.Data["json"] = br
  653. this.ServeJSON()
  654. }()
  655. var req models.ClassifySetEnabledReq
  656. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  657. if err != nil {
  658. br.Msg = "参数解析异常!"
  659. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  660. return
  661. }
  662. if req.ClassifyId <= 0 {
  663. br.Msg = "请选择分类"
  664. return
  665. }
  666. if req.Enabled != 0 && req.Enabled != 1 {
  667. br.Msg = "请选择正确的启用禁用状态"
  668. return
  669. }
  670. item, err := models.GetClassifyById(req.ClassifyId)
  671. if err != nil {
  672. if err.Error() == utils.ErrNoRow() {
  673. br.Msg = "分类不存在"
  674. return
  675. }
  676. br.Msg = "获取信息失败"
  677. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  678. return
  679. }
  680. if item == nil {
  681. br.Msg = "分类不存在"
  682. return
  683. }
  684. ob := new(models.Classify)
  685. //设置分类启用、禁用状态
  686. err = ob.SetEnabled(req.ClassifyId, req.Enabled)
  687. if err != nil {
  688. br.Msg = "操作失败"
  689. br.ErrMsg = "操作失败,Err:" + err.Error()
  690. return
  691. }
  692. br.Ret = 200
  693. br.Success = true
  694. br.Msg = "操作成功"
  695. }
  696. // ClassifyPermissionV2
  697. // @Title 获取权限设置基础信息
  698. // @Description 获取权限设置基础信息接口
  699. // @Param CompanyType query string true "客户类型:传空字符串或者不传为全部,'ficc','权益'"
  700. // @Param NoUpgrade query bool false "是否不展示升级权限,默认为 false"
  701. // @Success 200 {object} company.PermissionSetResp
  702. // @router /permission/list [get]
  703. func (this *ClassifyController) ClassifyPermissionV2() {
  704. br := new(models.BaseResponse).Init()
  705. defer func() {
  706. this.Data["json"] = br
  707. this.ServeJSON()
  708. }()
  709. sysUser := this.SysUser
  710. if sysUser == nil {
  711. br.Msg = "请登录"
  712. br.ErrMsg = "请登录,SysUser Is Empty"
  713. br.Ret = 408
  714. return
  715. }
  716. classifyId, _ := this.GetInt("ClassifyId")
  717. if classifyId <= 0 {
  718. br.Msg = "参数错误"
  719. return
  720. }
  721. resp := make([]*models.ChartPermissionItem, 0)
  722. // 拥有的品种ID列表
  723. permissionIdMap := make(map[int]bool)
  724. {
  725. //获取报告分类详情
  726. classifyInfo, err := models.GetClassifyById(classifyId)
  727. if err != nil {
  728. br.Msg = "获取分类信息失败"
  729. br.ErrMsg = "获取失败,Err:" + err.Error()
  730. return
  731. }
  732. //获取报告分类权限列表
  733. list, err := models.GetPermission(classifyInfo.Id)
  734. if err != nil {
  735. br.Msg = "获取分类信息失败"
  736. br.ErrMsg = "获取失败,Err:" + err.Error()
  737. return
  738. }
  739. for _, v := range list {
  740. permissionIdMap[v.ChartPermissionId] = true
  741. }
  742. }
  743. // 没有关联品种时,直接返回
  744. num := len(permissionIdMap)
  745. if num <= 0 {
  746. br.Ret = 200
  747. br.Success = true
  748. br.Msg = "获取成功"
  749. br.Data = resp
  750. return
  751. }
  752. cond := ` and product_id = ?`
  753. pars := make([]interface{}, 0)
  754. pars = append(pars, 1)
  755. list, e := services.GetChartPermissionList(cond, pars)
  756. if e != nil {
  757. br.Msg = "获取失败"
  758. br.ErrMsg = "获取品种列表失败, Err: " + e.Error()
  759. return
  760. }
  761. // 品种树
  762. childMap := make(map[int][]*models.ChartPermissionItem)
  763. tmpResp := make([]*models.ChartPermissionItem, 0)
  764. for _, v := range list {
  765. t := new(models.ChartPermissionItem)
  766. t.PermissionId = v.ChartPermissionId
  767. t.PermissionName = v.PermissionName
  768. t.ParentId = v.ParentId
  769. t.IsPublic = v.IsPublic
  770. t.Enabled = v.Enabled
  771. t.Sort = v.Sort
  772. t.CreateTime = v.CreatedTime.Format(utils.FormatDateTime)
  773. t.Child = make([]*models.ChartPermissionItem, 0)
  774. if v.ParentId == 0 {
  775. tmpResp = append(tmpResp, t)
  776. continue
  777. }
  778. if v.ParentId > 0 {
  779. if _, ok := permissionIdMap[v.ChartPermissionId]; ok {
  780. if childMap[v.ParentId] == nil {
  781. childMap[v.ParentId] = make([]*models.ChartPermissionItem, 0)
  782. }
  783. childMap[v.ParentId] = append(childMap[v.ParentId], t)
  784. }
  785. }
  786. }
  787. for _, r := range tmpResp {
  788. childList, ok := childMap[r.PermissionId]
  789. if !ok {
  790. continue
  791. }
  792. r.Child = childList
  793. resp = append(resp, r)
  794. }
  795. br.Ret = 200
  796. br.Success = true
  797. br.Msg = "获取成功"
  798. br.Data = resp
  799. }