user_level.go 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "eta/eta_mini_crm/models"
  5. "eta/eta_mini_crm/models/request"
  6. "eta/eta_mini_crm/models/response"
  7. "eta/eta_mini_crm/utils"
  8. "fmt"
  9. "github.com/rdlucklib/rdluck_tools/paging"
  10. "strings"
  11. "time"
  12. )
  13. // UserLevelController 用户等级
  14. type UserLevelController struct {
  15. BaseAuthController
  16. }
  17. // Add
  18. // @Title 新增用户等级
  19. // @Description 新增用户等级
  20. // @Param request body request.UserLevelAddReq true "type json string"
  21. // @Success 200 Ret=200 操作成功
  22. // @router /level/add [post]
  23. func (this *UserLevelController) Add() {
  24. br := new(models.BaseResponse).Init()
  25. defer func() {
  26. if br.ErrMsg == "" {
  27. br.IsSendEmail = false
  28. }
  29. this.Data["json"] = br
  30. this.ServeJSON()
  31. }()
  32. sysUser := this.SysUser
  33. if sysUser == nil {
  34. br.Msg = "请登录"
  35. br.ErrMsg = "请登录,SysUser Is Empty"
  36. br.Ret = 408
  37. return
  38. }
  39. var req request.UserLevelAddReq
  40. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  41. br.Msg = "参数解析异常"
  42. br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
  43. return
  44. }
  45. if req.LevelRank <= 0 {
  46. br.Msg = "请输入正确的等级"
  47. return
  48. }
  49. req.LevelName = strings.TrimSpace(req.LevelName)
  50. if req.LevelName == "" {
  51. br.Msg = "请输入等级名称"
  52. return
  53. }
  54. if len(req.ClassifyIds) == 0 {
  55. br.Msg = "请选择阅读权限"
  56. return
  57. }
  58. // 校验等级名称是否重复
  59. levelOb := new(models.UserLevel)
  60. //{
  61. // cond := fmt.Sprintf(` AND %s = ?`, levelOb.Cols().LevelName)
  62. // pars := make([]interface{}, 0)
  63. // pars = append(pars, req.LevelName)
  64. // exist, e := levelOb.GetItemByCondition(cond, pars, "")
  65. // if e != nil && e.Error() != utils.ErrNoRow() {
  66. // br.Msg = "操作失败"
  67. // br.ErrMsg = fmt.Sprintf("获取同名用户等级失败, %v", e)
  68. // return
  69. // }
  70. // if exist != nil && exist.UserLevelId > 0 {
  71. // br.Msg = "等级名称已存在"
  72. // return
  73. // }
  74. //}
  75. levelOb.LevelRank = req.LevelRank
  76. levelOb.LevelName = req.LevelName
  77. levelOb.State = req.State
  78. levelOb.SysUserId = sysUser.SysUserId
  79. levelOb.SysUserRealName = sysUser.SysRealName
  80. levelOb.CreateTime = time.Now().Local()
  81. levelOb.ModifyTime = time.Now().Local()
  82. if e := levelOb.Create(); e != nil {
  83. br.Msg = "操作失败"
  84. br.ErrMsg = fmt.Sprintf("新增用户等级失败, %v", e)
  85. return
  86. }
  87. mappings := make([]*models.UserLevelMapping, 0)
  88. classifyIds := make([]int, 0)
  89. for _, v := range req.ClassifyIds {
  90. m := new(models.UserLevelMapping)
  91. m.ClassifyId = v
  92. m.UserLevelId = levelOb.UserLevelId
  93. m.CreateTime = time.Now().Local()
  94. mappings = append(mappings, m)
  95. classifyIds = append(classifyIds, m.ClassifyId)
  96. }
  97. mappingOb := new(models.UserLevelMapping)
  98. if e := mappingOb.CreateMulti(mappings); e != nil {
  99. br.Msg = "操作失败"
  100. br.ErrMsg = fmt.Sprintf("新增用户等级权限失败, %v", e)
  101. return
  102. }
  103. resp := levelOb.Format2Item()
  104. resp.ClassifyIds = classifyIds
  105. br.Data = resp
  106. br.Ret = 200
  107. br.Msg = "操作成功"
  108. br.Success = true
  109. }
  110. // Edit
  111. // @Title 编辑用户等级
  112. // @Description 编辑用户等级
  113. // @Param request body request.UserLevelEditReq true "type json string"
  114. // @Success 200 Ret=200 操作成功
  115. // @router /level/edit [post]
  116. func (this *UserLevelController) Edit() {
  117. br := new(models.BaseResponse).Init()
  118. defer func() {
  119. if br.ErrMsg == "" {
  120. br.IsSendEmail = false
  121. }
  122. this.Data["json"] = br
  123. this.ServeJSON()
  124. }()
  125. sysUser := this.SysUser
  126. if sysUser == nil {
  127. br.Msg = "请登录"
  128. br.ErrMsg = "请登录,SysUser Is Empty"
  129. br.Ret = 408
  130. return
  131. }
  132. var req request.UserLevelEditReq
  133. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  134. br.Msg = "参数解析异常"
  135. br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
  136. return
  137. }
  138. if req.UserLevelId <= 0 {
  139. br.Msg = "参数有误"
  140. return
  141. }
  142. if req.LevelRank <= 0 {
  143. br.Msg = "请输入正确的等级"
  144. return
  145. }
  146. req.LevelName = strings.TrimSpace(req.LevelName)
  147. if req.LevelName == "" {
  148. br.Msg = "请输入等级名称"
  149. return
  150. }
  151. if len(req.ClassifyIds) == 0 {
  152. br.Msg = "请选择阅读权限"
  153. return
  154. }
  155. // 校验是否已删除
  156. levelOb := new(models.UserLevel)
  157. levelItem, e := levelOb.GetItemById(req.UserLevelId)
  158. if e != nil {
  159. if e.Error() == utils.ErrNoRow() {
  160. br.Msg = "等级不存在,请刷新页面"
  161. return
  162. }
  163. br.Msg = "操作失败"
  164. br.ErrMsg = fmt.Sprintf("获取用户等级失败, %v", e)
  165. return
  166. }
  167. originName := levelItem.LevelName
  168. // 校验等级名称是否重复
  169. //{
  170. // cond := fmt.Sprintf(` AND %s <> ? AND %s = ?`, levelOb.Cols().PrimaryId, levelOb.Cols().LevelName)
  171. // pars := make([]interface{}, 0)
  172. // pars = append(pars, req.UserLevelId, req.LevelName)
  173. // exist, e := levelOb.GetItemByCondition(cond, pars, "")
  174. // if e != nil && e.Error() != utils.ErrNoRow() {
  175. // br.Msg = "操作失败"
  176. // br.ErrMsg = fmt.Sprintf("获取同名用户等级失败, %v", e)
  177. // return
  178. // }
  179. // if exist != nil && exist.UserLevelId > 0 {
  180. // br.Msg = "等级名称已存在"
  181. // return
  182. // }
  183. //}
  184. updateCols := []string{levelOb.Cols().LevelRank, levelOb.Cols().LevelName, levelOb.Cols().State, levelOb.Cols().ModifyTime}
  185. levelItem.LevelRank = req.LevelRank
  186. levelItem.LevelName = req.LevelName
  187. levelItem.State = req.State
  188. levelItem.ModifyTime = time.Now().Local()
  189. if e := levelItem.Update(updateCols); e != nil {
  190. br.Msg = "操作失败"
  191. br.ErrMsg = fmt.Sprintf("更新用户等级失败, %v", e)
  192. return
  193. }
  194. // 移除并新增权限
  195. mappingOb := new(models.UserLevelMapping)
  196. cond := fmt.Sprintf(`%s = ?`, mappingOb.Cols().UserLevelId)
  197. pars := make([]interface{}, 0)
  198. pars = append(pars, levelItem.UserLevelId)
  199. if e = mappingOb.RemoveByCondition(cond, pars); e != nil {
  200. br.Msg = "操作失败"
  201. br.ErrMsg = fmt.Sprintf("移除用户等级权限失败, %v", e)
  202. return
  203. }
  204. mappings := make([]*models.UserLevelMapping, 0)
  205. classifyIds := make([]int, 0)
  206. for _, v := range req.ClassifyIds {
  207. m := new(models.UserLevelMapping)
  208. m.ClassifyId = v
  209. m.UserLevelId = levelItem.UserLevelId
  210. m.CreateTime = time.Now().Local()
  211. mappings = append(mappings, m)
  212. classifyIds = append(classifyIds, m.ClassifyId)
  213. }
  214. if e = mappingOb.CreateMulti(mappings); e != nil {
  215. br.Msg = "操作失败"
  216. br.ErrMsg = fmt.Sprintf("新增用户等级权限失败, %v", e)
  217. return
  218. }
  219. // 如果名称有更改,更新冗余字段
  220. if originName != req.LevelName {
  221. go func() {
  222. usersOb := new(models.Users)
  223. if e = usersOb.UpdateUserLevelName(req.UserLevelId, req.LevelName); e != nil {
  224. utils.FileLog.Info("更新users表用户等级名称失败, %v", e)
  225. }
  226. companyOb := new(models.Company)
  227. if e = companyOb.UpdateUserLevelName(req.UserLevelId, req.LevelName); e != nil {
  228. utils.FileLog.Info("更新company表用户等级名称失败, %v", e)
  229. }
  230. }()
  231. }
  232. resp := levelItem.Format2Item()
  233. resp.ClassifyIds = classifyIds
  234. br.Data = resp
  235. br.Ret = 200
  236. br.Msg = "操作成功"
  237. br.Success = true
  238. }
  239. // Remove
  240. // @Title 删除用户等级
  241. // @Description 删除用户等级
  242. // @Param request body request.UserLevelRemoveReq true "type json string"
  243. // @Success 200 Ret=200 操作成功
  244. // @router /level/remove [post]
  245. func (this *UserLevelController) Remove() {
  246. br := new(models.BaseResponse).Init()
  247. defer func() {
  248. if br.ErrMsg == "" {
  249. br.IsSendEmail = false
  250. }
  251. this.Data["json"] = br
  252. this.ServeJSON()
  253. }()
  254. sysUser := this.SysUser
  255. if sysUser == nil {
  256. br.Msg = "请登录"
  257. br.ErrMsg = "请登录,SysUser Is Empty"
  258. br.Ret = 408
  259. return
  260. }
  261. var req request.UserLevelRemoveReq
  262. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  263. br.Msg = "参数解析异常"
  264. br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
  265. return
  266. }
  267. if req.UserLevelId <= 0 {
  268. br.Msg = "参数有误"
  269. br.ErrMsg = fmt.Sprintf("用户等级ID参数有误, UserId: %d", req.UserLevelId)
  270. return
  271. }
  272. levelOb := new(models.UserLevel)
  273. levelItem, e := levelOb.GetItemById(req.UserLevelId)
  274. if e != nil {
  275. if e.Error() == utils.ErrNoRow() {
  276. br.Msg = "等级不存在,请刷新页面"
  277. return
  278. }
  279. br.Msg = "操作失败"
  280. br.ErrMsg = fmt.Sprintf("获取用户等级失败, %v", e)
  281. return
  282. }
  283. // 是否关联用户/机构
  284. usersOb := new(models.Users)
  285. cond := fmt.Sprintf(` AND %s = ?`, usersOb.Cols().UserLevelId)
  286. pars := make([]interface{}, 0)
  287. pars = append(pars, req.UserLevelId)
  288. count, e := usersOb.GetCountByCondition(cond, pars)
  289. if e != nil {
  290. br.Msg = "操作失败"
  291. br.ErrMsg = fmt.Sprintf("获取等级关联用户失败, %v", e)
  292. return
  293. }
  294. if count > 0 {
  295. br.Msg = "该等级已关联用户,删除失败"
  296. return
  297. }
  298. companyOb := new(models.Company)
  299. count, e = companyOb.GetCountByCondition(cond, pars)
  300. if e != nil {
  301. br.Msg = "操作失败"
  302. br.ErrMsg = fmt.Sprintf("获取等级关联机构失败, %v", e)
  303. return
  304. }
  305. if count > 0 {
  306. br.Msg = "该等级已关联用户,删除失败"
  307. return
  308. }
  309. // 删除用户等级和权限
  310. if e = levelItem.Remove(); e != nil {
  311. br.Msg = "操作失败"
  312. br.ErrMsg = fmt.Sprintf("删除用户等级失败, %v", e)
  313. return
  314. }
  315. mappingOb := new(models.UserLevelMapping)
  316. cond = fmt.Sprintf(`%s = ?`, mappingOb.Cols().UserLevelId)
  317. pars = make([]interface{}, 0)
  318. pars = append(pars, levelItem.UserLevelId)
  319. if e = mappingOb.RemoveByCondition(cond, pars); e != nil {
  320. br.Msg = "操作失败"
  321. br.ErrMsg = fmt.Sprintf("移除用户等级权限失败, %v", e)
  322. return
  323. }
  324. br.Ret = 200
  325. br.Msg = "操作成功"
  326. br.Success = true
  327. }
  328. // Detail
  329. // @Title 用户等级详情
  330. // @Description 用户等级详情
  331. // @Param UserLevelId query int true "用户等级ID"
  332. // @Success 200 {object} models.UserLevelItem
  333. // @router /level/detail [get]
  334. func (this *UserLevelController) Detail() {
  335. br := new(models.BaseResponse).Init()
  336. defer func() {
  337. if br.ErrMsg == "" {
  338. br.IsSendEmail = false
  339. }
  340. this.Data["json"] = br
  341. this.ServeJSON()
  342. }()
  343. sysUser := this.SysUser
  344. if sysUser == nil {
  345. br.Msg = "请登录"
  346. br.ErrMsg = "请登录,SysUser Is Empty"
  347. br.Ret = 408
  348. return
  349. }
  350. userLevelId, _ := this.GetInt("UserLevelId")
  351. if userLevelId <= 0 {
  352. br.Msg = "参数有误"
  353. br.ErrMsg = fmt.Sprintf("参数有误, %d", userLevelId)
  354. return
  355. }
  356. levelOb := new(models.UserLevel)
  357. levelItem, e := levelOb.GetItemById(userLevelId)
  358. if e != nil {
  359. if e.Error() == utils.ErrNoRow() {
  360. br.Msg = "等级不存在,请刷新页面"
  361. return
  362. }
  363. br.Msg = "获取失败"
  364. br.ErrMsg = fmt.Sprintf("获取用户等级失败, %v", e)
  365. return
  366. }
  367. resp := levelItem.Format2Item()
  368. // 关联权限
  369. mappingOb := new(models.UserLevelMapping)
  370. cond := fmt.Sprintf(` AND %s = ?`, mappingOb.Cols().UserLevelId)
  371. pars := make([]interface{}, 0)
  372. pars = append(pars, levelItem.UserLevelId)
  373. mappings, e := mappingOb.GetItemsByCondition(cond, pars, []string{}, "")
  374. if e != nil {
  375. br.Msg = "获取失败"
  376. br.ErrMsg = fmt.Sprintf("获取用户等级关联权限失败, %v", e)
  377. return
  378. }
  379. for _, v := range mappings {
  380. resp.ClassifyIds = append(resp.ClassifyIds, v.ClassifyId)
  381. }
  382. br.Data = resp
  383. br.Ret = 200
  384. br.Msg = "获取成功"
  385. br.Success = true
  386. }
  387. // PageList
  388. // @Title 用户等级列表-分页
  389. // @Description 用户等级列表-分页
  390. // @Param request body request.UserLevelListForm true "type json string"
  391. // @Success 200 {object} response.UserLevelPageListResp
  392. // @router /level/page_list [get]
  393. func (this *UserLevelController) PageList() {
  394. br := new(models.BaseResponse).Init()
  395. defer func() {
  396. if br.ErrMsg == "" {
  397. br.IsSendEmail = false
  398. }
  399. this.Data["json"] = br
  400. this.ServeJSON()
  401. }()
  402. sysUser := this.SysUser
  403. if sysUser == nil {
  404. br.Msg = "请登录"
  405. br.ErrMsg = "请登录,SysUser Is Empty"
  406. br.Ret = 408
  407. return
  408. }
  409. params := new(request.UserLevelListForm)
  410. if e := this.ParseForm(params); e != nil {
  411. br.Msg = "参数解析异常"
  412. br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
  413. return
  414. }
  415. resp := new(response.UserLevelPageListResp)
  416. // 分页
  417. var startSize int
  418. if params.PageSize <= 0 {
  419. params.PageSize = utils.PageSize20
  420. }
  421. if params.CurrentIndex <= 0 {
  422. params.CurrentIndex = 1
  423. }
  424. startSize = utils.StartIndex(params.CurrentIndex, params.PageSize)
  425. // 查询列表
  426. levelOb := new(models.UserLevel)
  427. cond := ``
  428. pars := make([]interface{}, 0)
  429. if params.OnlyEnabled {
  430. cond += fmt.Sprintf(` AND %s = ?`, levelOb.Cols().State)
  431. pars = append(pars, models.UserLevelEnabled)
  432. }
  433. total, e := levelOb.GetCountByCondition(cond, pars)
  434. if e != nil {
  435. br.Msg = "获取失败"
  436. br.ErrMsg = fmt.Sprintf("获取用户等级列表总数失败, %v", e)
  437. return
  438. }
  439. orderRule := fmt.Sprintf(`%s ASC, %s DESC`, levelOb.Cols().LevelRank, levelOb.Cols().CreateTime)
  440. list, e := levelOb.GetPageItemsByCondition(cond, pars, []string{}, orderRule, startSize, params.PageSize)
  441. if e != nil {
  442. br.Msg = "获取失败"
  443. br.ErrMsg = fmt.Sprintf("获取用户等级列表失败, %v", e)
  444. return
  445. }
  446. respList := make([]*models.UserLevelItem, 0)
  447. for _, v := range list {
  448. respList = append(respList, v.Format2Item())
  449. }
  450. page := paging.GetPaging(params.CurrentIndex, params.PageSize, total)
  451. resp.Paging = page
  452. resp.List = respList
  453. br.Data = resp
  454. br.Ret = 200
  455. br.Msg = "获取成功"
  456. br.Success = true
  457. }
  458. // List
  459. // @Title 用户等级列表
  460. // @Description 用户等级列表
  461. // @Param request body request.UserLevelListForm true "type json string"
  462. // @Success 200 {object} response.UserLevelPageListResp
  463. // @router /level/list [get]
  464. func (this *UserLevelController) List() {
  465. br := new(models.BaseResponse).Init()
  466. defer func() {
  467. if br.ErrMsg == "" {
  468. br.IsSendEmail = false
  469. }
  470. this.Data["json"] = br
  471. this.ServeJSON()
  472. }()
  473. sysUser := this.SysUser
  474. if sysUser == nil {
  475. br.Msg = "请登录"
  476. br.ErrMsg = "请登录,SysUser Is Empty"
  477. br.Ret = 408
  478. return
  479. }
  480. params := new(request.UserLevelListForm)
  481. if e := this.ParseForm(params); e != nil {
  482. br.Msg = "参数解析异常"
  483. br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
  484. return
  485. }
  486. resp := make([]*models.UserLevelItem, 0)
  487. // 查询列表
  488. levelOb := new(models.UserLevel)
  489. cond := ``
  490. pars := make([]interface{}, 0)
  491. if params.OnlyEnabled {
  492. cond += fmt.Sprintf(` AND %s = ?`, levelOb.Cols().State)
  493. pars = append(pars, models.UserLevelEnabled)
  494. }
  495. orderRule := fmt.Sprintf(`%s ASC, %s DESC`, levelOb.Cols().LevelRank, levelOb.Cols().CreateTime)
  496. list, e := levelOb.GetItemsByCondition(cond, pars, []string{}, orderRule)
  497. if e != nil {
  498. br.Msg = "获取失败"
  499. br.ErrMsg = fmt.Sprintf("获取用户等级列表失败, %v", e)
  500. return
  501. }
  502. for _, v := range list {
  503. resp = append(resp, v.Format2Item())
  504. }
  505. br.Data = resp
  506. br.Ret = 200
  507. br.Msg = "获取成功"
  508. br.Success = true
  509. }