user_dao.go 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. package dao
  2. import (
  3. "github.com/druidcaesa/gotool"
  4. "time"
  5. "ulink-admin/frame"
  6. "ulink-admin/modules/system/models/model"
  7. "ulink-admin/modules/system/models/req"
  8. "ulink-admin/modules/system/models/response"
  9. "ulink-admin/pkg/base"
  10. "ulink-admin/pkg/page"
  11. "xorm.io/xorm"
  12. )
  13. type UserDao struct {
  14. base.BaseDao
  15. }
  16. // 查询公共sql
  17. func (d UserDao) querySql() *xorm.Session {
  18. return base.GetSession().Session.Table([]string{"sys_user", "u"})
  19. //.Join("LEFT", []string{"sys_dept", "d"}, "u.dept_id = d.id")
  20. //Join("LEFT", []string{"sys_user_role", "ur"}, "u.id = ur.user_id").
  21. //Join("LEFT", []string{"sys_role", "r"}, "r.id = ur.role_id")
  22. }
  23. // Find 查询用户集合
  24. func (d UserDao) Page(query *req.UserQuery) ([]*response.UserResponse, int64) {
  25. resp := make([]*response.UserResponse, 0)
  26. sql := d.querySql()
  27. if !gotool.StrUtils.HasEmpty(query.UserName) {
  28. sql.And("u.user_name like concat('%',?,'%')", query.UserName)
  29. }
  30. if !gotool.StrUtils.HasEmpty(query.Status) {
  31. sql.And("u.status = ?", query.Status)
  32. }
  33. if !gotool.StrUtils.HasEmpty(query.PhoneNumber) {
  34. sql.And("u.phone_number like concat('%',?,'%')", query.PhoneNumber)
  35. }
  36. if !gotool.StrUtils.HasEmpty(query.BeginTime) {
  37. sql.And("date_format(u.create_time,'%y%m%d') >= date_format(?,'%y%m%d')", query.BeginTime)
  38. }
  39. if !gotool.StrUtils.HasEmpty(query.EndTime) {
  40. sql.And("date_format(u.create_time,'%y%m%d') <= date_format(?,'%y%m%d')", query.EndTime)
  41. }
  42. if query.Id > 0 {
  43. sql.And("u.dept_id = ? OR u.dept_id in ( SELECT t.id FROM sys_dept t WHERE find_in_set(?, ancestors))", query.Id, query.Id)
  44. }
  45. if !gotool.StrUtils.HasEmpty(query.UserType) {
  46. sql.And("u.user_type = ?", query.UserType)
  47. }
  48. if !base.GetCurUser().IsAdmin {
  49. sql.And("u.company_id = ?", base.GetCurUser().ComponyId)
  50. }
  51. total, err := sql.Limit(query.PageSize, page.StartSize(query.PageNum, query.PageSize)).FindAndCount(&resp)
  52. if err != nil {
  53. gotool.Logs.ErrorLog().Println(err)
  54. return nil, 0
  55. }
  56. return resp, total
  57. }
  58. // Find 查询用户集合
  59. func (d UserDao) List(query *req.UserQuery, list *[]model.SysUser) {
  60. sql := d.querySql()
  61. if !gotool.StrUtils.HasEmpty(query.UserName) {
  62. sql.And("u.user_name like concat('%',?,'%')", query.UserName)
  63. }
  64. if !gotool.StrUtils.HasEmpty(query.Status) {
  65. sql.And("u.status = ?", query.Status)
  66. }
  67. if !gotool.StrUtils.HasEmpty(query.PhoneNumber) {
  68. sql.And("u.phone_number like concat('%',?,'%')", query.PhoneNumber)
  69. }
  70. if !gotool.StrUtils.HasEmpty(query.BeginTime) {
  71. sql.And("date_format(u.create_time,'%y%m%d') >= date_format(?,'%y%m%d')", query.BeginTime)
  72. }
  73. if !gotool.StrUtils.HasEmpty(query.EndTime) {
  74. sql.And("date_format(u.create_time,'%y%m%d') <= date_format(?,'%y%m%d')", query.EndTime)
  75. }
  76. if query.Id > 0 {
  77. sql.And("u.dept_id = ? OR u.dept_id in ( SELECT t.id FROM sys_dept t WHERE find_in_set(?, ancestors))", query.Id, query.Id)
  78. }
  79. if !gotool.StrUtils.HasEmpty(query.UserType) {
  80. sql.And("u.user_type = ?", query.UserType)
  81. }
  82. if !base.GetCurUser().IsAdmin {
  83. sql.And("u.company_id = ?", base.GetCurUser().ComponyId)
  84. }
  85. err := sql.Find(list)
  86. if err != nil {
  87. frame.Throw(frame.SQL_CODE, err.Error())
  88. }
  89. }
  90. // GetUserByUserName 根据用户名查询用户数据
  91. func (d UserDao) GetUserByUserName(user model.SysUser) *model.SysUser {
  92. i, err := base.SqlDB.Get(&user)
  93. if err != nil {
  94. gotool.Logs.ErrorLog().Println(err)
  95. return nil
  96. }
  97. if i {
  98. return &user
  99. }
  100. return nil
  101. }
  102. // CheckEmailUnique 校验邮箱是否存在
  103. func (d UserDao) CheckEmailUnique(user *req.UserBody) *model.SysUser {
  104. if gotool.StrUtils.HasEmpty(user.Email) {
  105. return nil
  106. }
  107. sysUser := model.SysUser{}
  108. session := base.GetSession().Session.Table("sys_user")
  109. session.Cols("id", "email")
  110. session.Where("email = ?", user.Email)
  111. if user.Id > 0 {
  112. session.And("id != ?", user.Id)
  113. }
  114. get, _ := session.Limit(1).Get(&sysUser)
  115. if !get {
  116. return nil
  117. }
  118. return &sysUser
  119. }
  120. // CheckPhoneNumUnique 校验手机号是否存在
  121. func (d UserDao) CheckPhoneNumUnique(body *req.UserBody) *model.SysUser {
  122. if gotool.StrUtils.HasEmpty(body.PhoneNumber) {
  123. return nil
  124. }
  125. sysUser := model.SysUser{}
  126. session := base.GetSession().Session.Table("sys_user")
  127. session.Cols("id", "phone_number")
  128. session.Where("phone_number = ?", body.PhoneNumber)
  129. if body.Id > 0 {
  130. session.And("id != ?", body.Id)
  131. }
  132. get, _ := session.Limit(1).Get(&sysUser)
  133. if !get {
  134. return nil
  135. }
  136. return &sysUser
  137. }
  138. // ResetPwd 修改用户密码数据库操作
  139. func (d UserDao) ResetPwd(body *req.UserBody) int64 {
  140. user := model.SysUser{
  141. Id: body.Id,
  142. Password: body.Password,
  143. }
  144. session := base.GetSession().Session
  145. _ = session.Begin()
  146. _, err := session.Where("id = ?", user.Id).Cols("password").Update(&user)
  147. if err != nil {
  148. gotool.Logs.ErrorLog().Println(err)
  149. _ = session.Rollback()
  150. return 0
  151. }
  152. _ = session.Commit()
  153. return 1
  154. }
  155. // GetAllocatedList 查询未分配用户角色列表
  156. func (d UserDao) GetAllocatedList(query *req.UserQuery) ([]*response.UserResponse, int64) {
  157. resp := make([]*response.UserResponse, 0)
  158. session := base.GetSession().Session
  159. session.Table([]string{"sys_user", "u"}).Distinct("u.id", "u.user_name", "u.nick_name", "u.email", "u.phone_number", "u.status", "u.create_time").
  160. //Join("LEFT", []string{"sys_dept", "d"}, "u.dept_id = d.id").
  161. Join("LEFT", []string{"sys_user_role", "ur"}, "u.id = ur.user_id").
  162. Join("LEFT", []string{"sys_role", "r"}, "r.id = ur.role_id").Where("u.del_flag = '0'").And("r.id = ?", query.Id)
  163. if gotool.StrUtils.HasNotEmpty(query.UserName) {
  164. session.And("u.user_name like concat('%', ?, '%')", query.UserName)
  165. }
  166. if gotool.StrUtils.HasNotEmpty(query.PhoneNumber) {
  167. session.And("u.phone_number like concat('%', ?, '%')", query.PhoneNumber)
  168. }
  169. total, err := session.Limit(query.PageSize, page.StartSize(query.PageNum, query.PageSize)).FindAndCount(&resp)
  170. if err != nil {
  171. gotool.Logs.ErrorLog().Println(err)
  172. return nil, 0
  173. }
  174. return resp, total
  175. }
  176. // GetUnallocatedList 查询未分配用户角色列表
  177. func (d UserDao) GetUnallocatedList(query *req.UserQuery) ([]*response.UserResponse, int64) {
  178. resp := make([]*response.UserResponse, 0)
  179. session := base.GetSession().Session
  180. session.Table([]string{"sys_user", "u"}).Distinct("u.id", "u.user_name", "u.nick_name", "u.email", "u.phone_number", "u.status", "u.create_time").
  181. //Join("LEFT", []string{"sys_dept", "d"}, "u.dept_id = d.id").
  182. Join("LEFT", []string{"sys_user_role", "ur"}, "u.id = ur.user_id").
  183. Join("LEFT", []string{"sys_role", "r"}, "r.id = ur.role_id").Where("u.del_flag = '0'").And("r.id = ? or r.id IS NULL", query.Id).
  184. And("u.id not in (select u.id from sys_user u inner join sys_user_role ur on u.id = ur.user_id and ur.role_id = ?)", query.Id)
  185. if gotool.StrUtils.HasNotEmpty(query.UserName) {
  186. session.And("u.user_name like concat('%', ?, '%')", query.UserName)
  187. }
  188. if gotool.StrUtils.HasNotEmpty(query.PhoneNumber) {
  189. session.And("u.phone_number like concat('%', ?, '%')", query.PhoneNumber)
  190. }
  191. total, err := session.Limit(query.PageSize, page.StartSize(query.PageNum, query.PageSize)).FindAndCount(&resp)
  192. if err != nil {
  193. gotool.Logs.ErrorLog().Println(err)
  194. return nil, 0
  195. }
  196. return resp, total
  197. }
  198. // UpdatePwd 修改密码
  199. func (d UserDao) UpdatePwd(id int64, hash string) {
  200. user := model.SysUser{}
  201. user.Id = id
  202. user.Password = hash
  203. session := base.GetSession().Session
  204. _ = session.Begin()
  205. _, err := session.Cols("password").Where("id = ?", id).Update(&user)
  206. if err != nil {
  207. _ = session.Rollback()
  208. frame.Throw(frame.SQL_CODE, "更新密码错误:"+err.Error())
  209. }
  210. _ = session.Commit()
  211. }
  212. // UpdateAvatar 修改头像
  213. func (d UserDao) UpdateAvatar(info *model.SysUser) {
  214. user := model.SysUser{
  215. Avatar: info.Avatar,
  216. Id: info.Id,
  217. UpdateBy: info.UserName,
  218. UpdateTime: time.Now(),
  219. }
  220. session := base.GetSession().Session
  221. _ = session.Begin()
  222. _, err := session.Cols("avatar", "update_by", "update_time").Where("id = ?", user.Id).Update(&user)
  223. if err != nil {
  224. _ = session.Rollback()
  225. frame.Throw(frame.SQL_CODE, "更新个人信息错误:"+err.Error())
  226. }
  227. _ = session.Commit()
  228. }
  229. func (d UserDao) UpdateStatus(id int64, status string) {
  230. user := model.SysUser{}
  231. user.Id = id
  232. user.Status = status
  233. session := base.GetSession().Session
  234. _ = session.Begin()
  235. _, err := session.Cols("status").Where("id = ?", id).Update(&user)
  236. if err != nil {
  237. _ = session.Rollback()
  238. frame.Throw(frame.SQL_CODE, "更新状态错误:"+err.Error())
  239. }
  240. _ = session.Commit()
  241. }