system_service.go 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366
  1. package backend
  2. import (
  3. "context"
  4. "errors"
  5. "fmt"
  6. "gorm.io/gorm"
  7. "kpt-tmr-group/model"
  8. "kpt-tmr-group/pkg/jwt"
  9. "kpt-tmr-group/pkg/tool"
  10. "kpt-tmr-group/pkg/xerr"
  11. operationPb "kpt-tmr-group/proto/go/backend/operation"
  12. "strconv"
  13. "strings"
  14. )
  15. // Auth 用户登录
  16. func (s *StoreEntry) Auth(ctx context.Context, auth *operationPb.UserAuth) (*operationPb.SystemToken, error) {
  17. systemUser := &model.SystemUser{}
  18. if err := s.DB.Where("name = ?", auth.UserName).Find(systemUser).Error; err != nil {
  19. return nil, xerr.WithStack(err)
  20. }
  21. if systemUser.Password != auth.Password {
  22. return nil, xerr.Customf("密码错误,来自用户:%s", auth.UserName)
  23. }
  24. token, err := jwt.GenerateToken(systemUser.Name, systemUser.Password)
  25. if err != nil {
  26. return nil, xerr.WithStack(err)
  27. }
  28. if token == "" {
  29. return nil, xerr.Custom("获取token错误")
  30. }
  31. return &operationPb.SystemToken{
  32. Token: token,
  33. }, nil
  34. }
  35. // GetUserInfo 获取用户信息
  36. func (s *StoreEntry) GetUserInfo(ctx context.Context, token string) (*operationPb.UserAuth, error) {
  37. systemUser := &model.SystemUser{}
  38. claims, err := jwt.ParseToken(token)
  39. if err != nil {
  40. return nil, xerr.WithStack(err)
  41. }
  42. if claims.Username == "" {
  43. return nil, xerr.Custom("token解析失败")
  44. }
  45. if err = s.DB.Where("name = ?", claims.Username).First(systemUser).Error; err != nil {
  46. return nil, xerr.WithStack(err)
  47. }
  48. systemRole := make([]*model.SystemRole, 0)
  49. roleIdStr := strings.Split(systemUser.RoleIds, ",")
  50. if len(roleIdStr) > 0 {
  51. roleIds := make([]int, 0)
  52. for _, v := range roleIdStr {
  53. roleId, _ := strconv.Atoi(v)
  54. roleIds = append(roleIds, roleId)
  55. }
  56. if err = s.DB.Find(&systemRole, roleIds).Error; err != nil {
  57. return nil, xerr.WithStack(err)
  58. }
  59. }
  60. return systemUser.SystemUserFormat(systemRole), nil
  61. }
  62. // CreateSystemUser 创建系统用户
  63. func (s *StoreEntry) CreateSystemUser(ctx context.Context, req *operationPb.AddSystemUser) error {
  64. systemUsers := &model.SystemUser{
  65. Name: req.Name,
  66. EmployeeName: req.EmployeeName,
  67. Phone: req.Phone,
  68. Password: tool.Md5String(model.InitManagerPassword),
  69. CreateUser: req.CreateUser,
  70. IsShow: req.IsShow,
  71. }
  72. systemUsers.SystemUserRoleFormat(req)
  73. if err := s.DB.Create(systemUsers).Error; err != nil {
  74. return xerr.WithStack(err)
  75. }
  76. return nil
  77. }
  78. // SearchSystemUserList 查询系统用户
  79. func (s *StoreEntry) SearchSystemUserList(ctx context.Context, req *operationPb.SearchUserRequest) (*model.SystemUserResponse, error) {
  80. systemUser := make([]*model.SystemUser, 0)
  81. var count int64 = 0
  82. pref := s.DB.Model(new(model.SystemUser)).Where("is_delete = ?", operationPb.IsShow_OK)
  83. if req.Name != "" {
  84. pref.Where("name like ?", fmt.Sprintf("%s%s%s", "%", req.Name, "%"))
  85. }
  86. if req.EmployeeName != "" {
  87. pref.Where("employee_name like ?", fmt.Sprintf("%s%s%s", "%", req.EmployeeName, "%"))
  88. }
  89. if req.IsShow > 0 {
  90. pref.Where("is_show = ?", req.IsShow)
  91. }
  92. if err := pref.Order("id desc").Count(&count).Limit(int(req.Pagination.PageSize)).Offset(int(req.Pagination.PageOffset)).
  93. Find(&systemUser).Debug().Error; err != nil {
  94. return nil, xerr.WithStack(err)
  95. }
  96. return &model.SystemUserResponse{
  97. Page: req.Pagination.Page,
  98. Total: int32(count),
  99. List: model.SystemUserSlice(systemUser).ToPB(),
  100. }, nil
  101. }
  102. // EditSystemUser 编辑用户
  103. func (s *StoreEntry) EditSystemUser(ctx context.Context, req *operationPb.AddSystemUser) error {
  104. systemUser := &model.SystemUser{Id: req.Id}
  105. if err := s.DB.First(systemUser).Error; err != nil {
  106. if errors.Is(err, gorm.ErrRecordNotFound) {
  107. return xerr.Custom("该数据不存在!")
  108. }
  109. return xerr.WithStack(err)
  110. }
  111. updateData := &model.SystemUser{
  112. Name: req.Name,
  113. EmployeeName: req.EmployeeName,
  114. Phone: req.Phone,
  115. CreateUser: req.CreateUser,
  116. }
  117. updateData.SystemUserRoleFormat(req)
  118. if err := s.DB.Model(new(model.SystemUser)).Omit("is_show", "password", "is_delete").
  119. Where("id = ?", systemUser.Id).
  120. Updates(updateData).Error; err != nil {
  121. return xerr.WithStack(err)
  122. }
  123. return nil
  124. }
  125. // DeleteSystemUser 删除系统用户
  126. func (s *StoreEntry) DeleteSystemUser(ctx context.Context, userId int64) error {
  127. systemUser := &model.SystemUser{
  128. Id: userId,
  129. }
  130. if err := s.DB.First(systemUser).Error; err != nil {
  131. if errors.Is(err, gorm.ErrRecordNotFound) {
  132. return xerr.Custom("该用户不存在")
  133. }
  134. return xerr.WithStack(err)
  135. }
  136. if err := s.DB.Model(systemUser).Update("is_delete", operationPb.IsShow_NO).Error; err != nil {
  137. return xerr.WithStack(err)
  138. }
  139. return nil
  140. }
  141. // IsShowSystemUser 用户是否启用
  142. func (s *StoreEntry) IsShowSystemUser(ctx context.Context, req *operationPb.IsShowSystemUserRequest) error {
  143. systemUser := &model.SystemUser{
  144. Id: req.UserId,
  145. }
  146. if err := s.DB.First(systemUser).Error; err != nil {
  147. if errors.Is(err, gorm.ErrRecordNotFound) {
  148. return xerr.Custom("该用户不存在")
  149. }
  150. return xerr.WithStack(err)
  151. }
  152. if err := s.DB.Model(systemUser).Update("is_show", req.IsShow).Error; err != nil {
  153. return xerr.WithStack(err)
  154. }
  155. return nil
  156. }
  157. // CreateSystemRole 添加角色
  158. func (s *StoreEntry) CreateSystemRole(ctx context.Context, req *operationPb.AddRoleRequest) error {
  159. role := model.NewSystemRole(req)
  160. if err := s.DB.Create(role).Debug().Error; err != nil {
  161. return xerr.WithStack(err)
  162. }
  163. return nil
  164. }
  165. // EditSystemRole 编辑角色
  166. func (s *StoreEntry) EditSystemRole(ctx context.Context, req *operationPb.AddRoleRequest) error {
  167. role := &model.SystemRole{Id: req.Id}
  168. if err := s.DB.First(role).Error; err != nil {
  169. if errors.Is(err, gorm.ErrRecordNotFound) {
  170. return xerr.Custom("该数据不存在")
  171. }
  172. return xerr.WithStack(err)
  173. }
  174. updateSystemUser := &model.SystemRole{
  175. Id: req.Id,
  176. Name: req.Name,
  177. Remarks: req.Remarks,
  178. CreateUser: req.CreateUser,
  179. }
  180. updateSystemUser.RolePermissionsFormat(req)
  181. if err := s.DB.Omit("is_show").
  182. Where("id = ?", role.Id).
  183. Updates(updateSystemUser).Error; err != nil {
  184. return xerr.WithStack(err)
  185. }
  186. return nil
  187. }
  188. // DeleteSystemRole 删除系统角色
  189. func (s *StoreEntry) DeleteSystemRole(ctx context.Context, roleId int64) error {
  190. systemRole := &model.SystemRole{
  191. Id: roleId,
  192. }
  193. if err := s.DB.First(systemRole).Error; err != nil {
  194. if errors.Is(err, gorm.ErrRecordNotFound) {
  195. return xerr.Custom("该数据不存在")
  196. }
  197. return xerr.WithStack(err)
  198. }
  199. if err := s.DB.Model(systemRole).Update("is_show", operationPb.IsShow_NO).Error; err != nil {
  200. return xerr.WithStack(err)
  201. }
  202. return nil
  203. }
  204. // SearchSystemRoleList 查询系统角色
  205. func (s *StoreEntry) SearchSystemRoleList(ctx context.Context, req *operationPb.SearchRoleRequest) (*model.SystemRoleResponse, error) {
  206. systemRole := make([]*model.SystemRole, 0)
  207. var count int64 = 0
  208. pref := s.DB.Model(new(model.SystemRole)).Where("is_show = ?", operationPb.IsShow_OK)
  209. if req.Name != "" {
  210. pref.Where("name like ?", fmt.Sprintf("%s%s%s", "%", req.Name, "%"))
  211. }
  212. if err := pref.Order("id desc").Count(&count).Limit(int(req.Pagination.PageSize)).Offset(int(req.Pagination.PageOffset)).
  213. Find(&systemRole).Debug().Error; err != nil {
  214. return nil, xerr.WithStack(err)
  215. }
  216. return &model.SystemRoleResponse{
  217. Page: req.Pagination.Page,
  218. Total: int32(count),
  219. List: model.SystemRoleSlice(systemRole).ToPB(),
  220. }, nil
  221. }
  222. // CreateSystemMenu 添加系统菜单权限
  223. func (s *StoreEntry) CreateSystemMenu(ctx context.Context, req *operationPb.AddMenuRequest) error {
  224. systemMenu := &model.SystemMenu{
  225. Name: req.Name,
  226. MenuType: req.MenuType,
  227. Title: req.Title,
  228. Path: req.Path,
  229. Component: req.Component,
  230. Icon: req.Icon,
  231. Sort: req.Sort,
  232. Redirect: req.Redirect,
  233. ParentId: req.ParentId,
  234. IsShow: operationPb.IsShow_OK,
  235. IsDelete: operationPb.IsShow_OK,
  236. }
  237. if err := s.DB.Create(systemMenu).Error; err != nil {
  238. return xerr.WithStack(err)
  239. }
  240. return nil
  241. }
  242. // EditSystemMenu 编辑系统菜单权限
  243. func (s *StoreEntry) EditSystemMenu(ctx context.Context, req *operationPb.AddMenuRequest) error {
  244. systemMenu := &model.SystemMenu{Id: req.Id}
  245. if err := s.DB.First(systemMenu).Error; err != nil {
  246. if errors.Is(err, gorm.ErrRecordNotFound) {
  247. return xerr.Custom("该数据不存在!")
  248. }
  249. return xerr.WithStack(err)
  250. }
  251. updateData := &model.SystemMenu{
  252. Name: req.Name,
  253. MenuType: req.MenuType,
  254. Title: req.Title,
  255. Path: req.Path,
  256. Component: req.Component,
  257. Icon: req.Icon,
  258. Sort: req.Sort,
  259. Redirect: req.Redirect,
  260. ParentId: req.ParentId,
  261. }
  262. if err := s.DB.Model(new(model.SystemMenu)).Omit("is_show").
  263. Where("id = ?", systemMenu.Id).
  264. Updates(updateData).Error; err != nil {
  265. return xerr.WithStack(err)
  266. }
  267. return nil
  268. }
  269. // IsShowSystemMenu 菜单是否启用
  270. func (s *StoreEntry) IsShowSystemMenu(ctx context.Context, req *operationPb.IsShowSystemMenuRequest) error {
  271. systemMenu := &model.SystemMenu{Id: req.MenuId}
  272. if err := s.DB.First(systemMenu).Error; err != nil {
  273. if errors.Is(err, gorm.ErrRecordNotFound) {
  274. return xerr.Custom("该数据不存在")
  275. }
  276. return xerr.WithStack(err)
  277. }
  278. if err := s.DB.Model(systemMenu).Update("is_show", req.IsShow).Error; err != nil {
  279. return xerr.WithStack(err)
  280. }
  281. return nil
  282. }
  283. // SearchSystemMenuList 菜单列表查询
  284. func (s *StoreEntry) SearchSystemMenuList(ctx context.Context, req *operationPb.SearchMenuRequest) (*model.SystemMenuResponse, error) {
  285. systemMenu := make([]*model.SystemMenu, 0)
  286. var count int64 = 0
  287. pref := s.DB.Model(new(model.SystemMenu)).Where("is_delete = ?", operationPb.IsShow_OK)
  288. if req.Name != "" {
  289. pref.Where("name like ?", fmt.Sprintf("%s%s%s", "%", req.Name, "%"))
  290. }
  291. if err := pref.Order("id desc").Count(&count).Limit(int(req.Pagination.PageSize)).Offset(int(req.Pagination.PageOffset)).
  292. Find(&systemMenu).Debug().Error; err != nil {
  293. return nil, xerr.WithStack(err)
  294. }
  295. return &model.SystemMenuResponse{
  296. Page: req.Pagination.Page,
  297. Total: int32(count),
  298. List: model.SystemMenuSlice(systemMenu).ToPB(),
  299. }, nil
  300. }
  301. // DeleteSystemMenu 删除系统菜单
  302. func (s *StoreEntry) DeleteSystemMenu(ctx context.Context, menuId int64) error {
  303. systemMenu := &model.SystemMenu{Id: menuId}
  304. if err := s.DB.First(systemMenu).Error; err != nil {
  305. if errors.Is(err, gorm.ErrRecordNotFound) {
  306. return xerr.Custom("该数据不存在")
  307. }
  308. return xerr.WithStack(err)
  309. }
  310. if err := s.DB.Model(systemMenu).Update("is_delete", operationPb.IsShow_NO).Error; err != nil {
  311. return xerr.WithStack(err)
  312. }
  313. return nil
  314. }