sys_admin.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423
  1. package system
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "github.com/go-playground/validator/v10"
  5. "hongze/hrms_api/controller/resp"
  6. "hongze/hrms_api/global"
  7. "hongze/hrms_api/models/base"
  8. "hongze/hrms_api/models/system"
  9. systemService "hongze/hrms_api/services/system"
  10. "hongze/hrms_api/utils"
  11. "time"
  12. )
  13. type SysAdminController struct {
  14. }
  15. func (a *SysAdminController) Add(c *gin.Context) {
  16. req := new(system.SysAdminAddReq)
  17. err := c.ShouldBind(&req)
  18. if err != nil {
  19. errs, ok := err.(validator.ValidationErrors)
  20. if !ok {
  21. resp.FailData("参数解析失败", "Err:"+err.Error(), c)
  22. return
  23. }
  24. resp.FailData("参数解析失败", errs.Translate(global.Trans), c)
  25. return
  26. }
  27. // 判断账号名是否已存在
  28. item := new(system.SysAdmin)
  29. _, err = item.GetAdminByAdminName(req.AdminName)
  30. if err != nil && err != utils.ErrNoRow {
  31. resp.FailMsg("查询管理员信息失败", "查询管理员信息失败,Err:"+err.Error(), c)
  32. return
  33. }
  34. if err == nil {
  35. resp.Fail("用户名重复,请重新设置", c)
  36. return
  37. }
  38. // 判断手机号是否已存在
  39. _, err = item.GetAdminByMobile(req.Mobile)
  40. if err != nil && err != utils.ErrNoRow {
  41. resp.FailMsg("查询管理员信息失败", "查询管理员信息失败,Err:"+err.Error(), c)
  42. return
  43. }
  44. if err == nil {
  45. resp.Fail("手机号已被其他账号绑定,请重新设置", c)
  46. return
  47. }
  48. //todo 验证部门信息
  49. //todo 验证角色信息
  50. // 新增账号
  51. item = &system.SysAdmin{
  52. AdminName: req.AdminName,
  53. RealName: req.RealName,
  54. Password: req.Password,
  55. Enabled: req.Enabled,
  56. Email: req.Email,
  57. Mobile: req.Mobile,
  58. DeptId: req.DeptId,
  59. RoleId: req.RoleId,
  60. Position: req.Position,
  61. Remark: req.Remark,
  62. }
  63. if req.Enabled == 0 {
  64. item.DisableTime = time.Now()
  65. }
  66. err = item.Add()
  67. if err != nil {
  68. resp.FailMsg("保存失败", "保存失败,Err:"+err.Error(), c)
  69. return
  70. }
  71. resp.Ok("保存成功", c)
  72. }
  73. // List 部门列表
  74. func (a *SysAdminController) List(c *gin.Context) {
  75. req := new(system.SysAdminListReq)
  76. err := c.BindQuery(&req)
  77. if err != nil {
  78. errs, ok := err.(validator.ValidationErrors)
  79. if !ok {
  80. resp.FailData("参数解析失败", "Err:"+err.Error(), c)
  81. return
  82. }
  83. resp.FailData("参数解析失败", errs.Translate(global.Trans), c)
  84. return
  85. }
  86. page := new(base.Page)
  87. page.SetPageSize(req.PageSize)
  88. page.SetCurrent(req.Current)
  89. item := new(system.SysAdmin)
  90. condition := "1=1"
  91. var pars []interface{}
  92. var total int64
  93. var tmpList []system.SysAdminListTmpItem
  94. var list []*system.SysAdminListItem
  95. if req.DeptId > 0 {
  96. deptIdMap, err, errMsg := systemService.GetChildDeptIds(0)
  97. if err != nil {
  98. resp.FailMsg(errMsg, err.Error(), c)
  99. return
  100. }
  101. if deptIds, ok := deptIdMap[req.DeptId]; ok {
  102. condition += " and sys_admin.dept_id IN (?)"
  103. pars = append(pars, deptIds)
  104. }else{
  105. page.SetTotal(total)
  106. baseData := new(base.BaseData)
  107. baseData.SetPage(page)
  108. baseData.SetList(list)
  109. resp.OkData("获取成功", baseData, c)
  110. }
  111. }
  112. if req.KeyWord != "" {
  113. keyLike := `%` + req.KeyWord + `%`
  114. condition += " AND (sys_admin.real_name LIKE ? OR sys_admin.mobile LIKE ? OR sys_admin.admin_name LIKE ?) "
  115. pars = append(pars, keyLike, keyLike, keyLike)
  116. }
  117. if req.Enabled != "" {
  118. condition += " AND sys_admin.enabled = ? "
  119. pars = append(pars, req.Enabled)
  120. }
  121. page.AddOrderItem(base.OrderItem{Column: "sys_admin.create_time", Asc: false})
  122. total, tmpList, err = item.SelectPage(page, condition, pars)
  123. if err != nil {
  124. resp.FailData("获取失败", "获取失败,Err:"+err.Error(), c)
  125. return
  126. }
  127. if len(tmpList) > 0 {
  128. deptNameMap, err, errMsg := systemService.GetChildDeptNames()
  129. if err != nil {
  130. resp.FailMsg(errMsg, err.Error(), c)
  131. return
  132. }
  133. for _, v := range tmpList {
  134. tmp := &system.SysAdminListItem{
  135. AdminId: v.AdminId,
  136. AdminName: v.AdminName,
  137. RealName: v.RealName,
  138. Enabled: v.Enabled,
  139. Email: v.Email,
  140. Mobile: v.Mobile,
  141. DeptId: v.DeptId,
  142. RoleId: v.RoleId,
  143. RoleName: v.RoleName,
  144. Position: v.Position,
  145. Remark: v.Remark,
  146. CreateTime: utils.TimeTransferString(utils.FormatDateTime, v.CreateTime),
  147. ModifyTime: utils.TimeTransferString(utils.FormatDateTime, v.ModifyTime),
  148. }
  149. if name, ok :=deptNameMap[v.DeptId]; ok {
  150. tmp.DeptFullName = name
  151. }
  152. list = append(list, tmp)
  153. }
  154. }
  155. page.SetTotal(total)
  156. baseData := new(base.BaseData)
  157. baseData.SetPage(page)
  158. baseData.SetList(list)
  159. resp.OkData("获取成功", baseData, c)
  160. }
  161. // @Title 修改密码
  162. // @Description 修改密码
  163. // @Param request body models.ModifyPwdReq true "type json string"
  164. // @Success 200 {object} models.LoginResp
  165. // @router /modify/pwd [post]
  166. func (a *SysAdminController) ModifyPwd(c *gin.Context) {
  167. req := new(system.ModifyPwdReq)
  168. err := c.ShouldBind(&req)
  169. if err != nil {
  170. errs, ok := err.(validator.ValidationErrors)
  171. if !ok {
  172. resp.FailData("参数解析失败", "Err:"+err.Error(), c)
  173. return
  174. }
  175. resp.FailData("参数解析失败", errs.Translate(global.Trans), c)
  176. return
  177. }
  178. //获取jwt数据失败
  179. var adminInfo *system.SysAdmin
  180. // 判断账号名是否已存在
  181. admin := new(system.SysAdmin)
  182. //查询账号是否存在
  183. adminInfo, err = admin.GetAdminByAdminId(req.AdminId)
  184. if err != nil {
  185. if err == utils.ErrNoRow {
  186. resp.Fail("账号不存在", c)
  187. return
  188. }
  189. resp.FailMsg("查询管理员信息失败", "查询管理员信息失败,Err:"+err.Error(), c)
  190. return
  191. }
  192. if req.Pwd != req.ConfirmPwd {
  193. resp.Fail("新密码两次输入不一致,请核对", c)
  194. return
  195. }
  196. if adminInfo.Password == req.Pwd {
  197. resp.Fail("新密码不能与旧密码一致,请重试", c)
  198. return
  199. }
  200. adminInfo.Password = req.Pwd
  201. err = adminInfo.Update([]string{"password"})
  202. if err != nil {
  203. resp.FailData("密码更新失败", "Err:"+err.Error(), c)
  204. return
  205. }
  206. resp.Ok("修改成功", c)
  207. return
  208. }
  209. // @Title 修改密码
  210. // @Description 修改密码
  211. // @Param request body models.ModifyPwdReq true "type json string"
  212. // @Success 200 {object} models.LoginResp
  213. // @router /modify/my/pwd [post]
  214. func (a *SysAdminController) ModifyMyPwd(c *gin.Context) {
  215. req := new(system.ModifyMyPwdReq)
  216. err := c.ShouldBind(&req)
  217. if err != nil {
  218. errs, ok := err.(validator.ValidationErrors)
  219. if !ok {
  220. resp.FailData("参数解析失败", "Err:"+err.Error(), c)
  221. return
  222. }
  223. resp.FailData("参数解析失败", errs.Translate(global.Trans), c)
  224. return
  225. }
  226. claims, _ := c.Get("adminInfo")
  227. adminInfo := claims.(*system.SysAdmin)
  228. if req.NewPwd != req.ConfirmPwd {
  229. resp.Fail("新密码两次输入不一致,请核对", c)
  230. return
  231. }
  232. if adminInfo.Password != req.OldPwd {
  233. resp.Fail("旧密码错误,请重新输入", c)
  234. return
  235. }
  236. if adminInfo.Password == req.NewPwd {
  237. resp.Fail("新密码不能与旧密码一致,请重试", c)
  238. return
  239. }
  240. adminInfo.Password = req.NewPwd
  241. err = adminInfo.Update([]string{"password"})
  242. if err != nil {
  243. resp.FailData("密码更新失败", "Err:"+err.Error(), c)
  244. return
  245. }
  246. resp.Ok("修改成功", c)
  247. return
  248. }
  249. // @Title 修改初始密码
  250. // @Description 修改初始密码
  251. // @Param request body models.ModifyPwdReq true "type json string"
  252. // @Success 200 {object} models.LoginResp
  253. // @router /modify/my/init_pwd [post]
  254. func (a *SysAdminController) ModifyMyInitPwd(c *gin.Context) {
  255. req := new(system.ModifyMyInitPwdReq)
  256. err := c.ShouldBind(&req)
  257. if err != nil {
  258. errs, ok := err.(validator.ValidationErrors)
  259. if !ok {
  260. resp.FailData("参数解析失败", "Err:"+err.Error(), c)
  261. return
  262. }
  263. resp.FailData("参数解析失败", errs.Translate(global.Trans), c)
  264. return
  265. }
  266. claims, _ := c.Get("adminInfo")
  267. adminInfo := claims.(*system.SysAdmin)
  268. if req.NewPwd != req.ConfirmPwd {
  269. resp.Fail("新密码两次输入不一致,请核对", c)
  270. return
  271. }
  272. if adminInfo.Password == req.NewPwd {
  273. resp.Fail("新密码不能与旧密码一致,请重试", c)
  274. return
  275. }
  276. adminInfo.Password = req.NewPwd
  277. err = adminInfo.Update([]string{"password"})
  278. if err != nil {
  279. resp.FailData("密码更新失败", "Err:"+err.Error(), c)
  280. return
  281. }
  282. resp.Ok("修改成功", c)
  283. return
  284. }
  285. // Delete 删除用户
  286. func (a *SysAdminController) Delete(c *gin.Context) {
  287. req := new(system.SysAdminReq)
  288. err := c.ShouldBind(&req)
  289. if err != nil {
  290. resp.FailData("参数解析失败", "Err:"+err.Error(), c)
  291. return
  292. }
  293. item := new(system.SysAdmin)
  294. item.AdminId = req.AdminId
  295. err = item.Delete()
  296. if err != nil {
  297. resp.FailData("删除失败", "删除失败,Err:"+err.Error(), c)
  298. return
  299. }
  300. resp.Ok("删除成功", c)
  301. }
  302. // Edit 编辑用户
  303. func (a *SysAdminController) Edit(c *gin.Context) {
  304. req := new(system.SysAdminEditReq)
  305. err := c.ShouldBind(&req)
  306. if err != nil {
  307. errs, ok := err.(validator.ValidationErrors)
  308. if !ok {
  309. resp.FailData("参数解析失败", "Err:"+err.Error(), c)
  310. return
  311. }
  312. resp.FailData("参数解析失败", errs.Translate(global.Trans), c)
  313. return
  314. }
  315. // 判断账号名是否已存在
  316. admin := new(system.SysAdmin)
  317. //查询账号是否存在
  318. item, err := admin.GetAdminByAdminId(req.AdminId)
  319. if err != nil {
  320. if err == utils.ErrNoRow {
  321. resp.Fail("账号不存在", c)
  322. return
  323. }
  324. resp.FailData("查询管理员信息失败", "查询管理员信息失败,Err:"+err.Error(), c)
  325. return
  326. }
  327. if item.AdminName != req.AdminName {
  328. _, err = item.GetAdminByAdminName(req.AdminName)
  329. if err != nil && err != utils.ErrNoRow {
  330. resp.FailData("查询管理员信息失败", "查询管理员信息失败,Err:"+err.Error(), c)
  331. return
  332. }
  333. if err == nil {
  334. resp.Fail("用户名重复,请重新设置", c)
  335. return
  336. }
  337. }
  338. if item.Mobile != req.Mobile {
  339. // 判断手机号是否已存在
  340. _, err = item.GetAdminByMobile(req.Mobile)
  341. if err != nil && err != utils.ErrNoRow {
  342. resp.FailData("查询管理员信息失败", "查询管理员信息失败,Err:"+err.Error(), c)
  343. return
  344. }
  345. if err == nil {
  346. resp.Fail("手机号已被其他账号绑定,请重新设置", c)
  347. return
  348. }
  349. }
  350. //todo 验证部门信息
  351. //todo 验证角色信息
  352. // 更新账号
  353. updateStr := []string{"admin_name","real_name", "enabled", "email", "mobile", "dept_id", "role_id","position", "remark"}
  354. item.AdminName = req.AdminName
  355. item.RealName = req.RealName
  356. item.Enabled = req.Enabled
  357. item.Email = req.Email
  358. item.Mobile = req.Mobile
  359. item.DeptId = req.DeptId
  360. item.RoleId = req.RoleId
  361. item.Position = req.Position
  362. item.Remark = req.Remark
  363. if req.Enabled == 0 {
  364. item.DisableTime = time.Now()
  365. }
  366. err = item.Update(updateStr)
  367. if err != nil {
  368. resp.FailData("保存失败", "保存失败,Err:"+err.Error(), c)
  369. return
  370. }
  371. resp.Ok("修改成功", c)
  372. return
  373. }
  374. // @Title 修改管理员状态
  375. // @Description 修改管理员状态
  376. // @Param request body models.ModifyPwdReq true "type json string"
  377. // @Success 200 {object} models.LoginResp
  378. // @router /modify/enabled [post]
  379. func (a *SysAdminController) ModifyEnabled(c *gin.Context) {
  380. req := new(system.SysAdminModifyEnabledReq)
  381. err := c.ShouldBind(&req)
  382. if err != nil {
  383. errs, ok := err.(validator.ValidationErrors)
  384. if !ok {
  385. resp.FailData("参数解析失败", "Err:"+err.Error(), c)
  386. return
  387. }
  388. resp.FailData("参数解析失败", errs.Translate(global.Trans), c)
  389. return
  390. }
  391. admin := new(system.SysAdmin)
  392. admin.AdminId = req.AdminId
  393. admin.Enabled = req.Enabled
  394. err = admin.Update([]string{"enabled"})
  395. if err != nil {
  396. resp.FailData("更新失败", "Err:"+err.Error(), c)
  397. return
  398. }
  399. resp.Ok("修改成功", c)
  400. return
  401. }