system_service.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603
  1. package backend
  2. import (
  3. "context"
  4. "errors"
  5. "fmt"
  6. "kpt-tmr-group/model"
  7. "kpt-tmr-group/pkg/jwt"
  8. "kpt-tmr-group/pkg/tool"
  9. "kpt-tmr-group/pkg/xerr"
  10. operationPb "kpt-tmr-group/proto/go/backend/operation"
  11. "net/http"
  12. "strconv"
  13. "strings"
  14. "gorm.io/gorm"
  15. )
  16. // Auth 用户登录
  17. func (s *StoreEntry) Auth(ctx context.Context, auth *operationPb.UserAuthData) (*operationPb.SystemToken, error) {
  18. systemUser := &model.SystemUser{}
  19. if err := s.DB.Where("name = ?", auth.UserName).Find(systemUser).Error; err != nil {
  20. return nil, xerr.WithStack(err)
  21. }
  22. if systemUser.Password != auth.Password {
  23. return nil, xerr.Customf("密码错误,来自用户:%s", auth.UserName)
  24. }
  25. token, err := jwt.GenerateToken(systemUser.Name, systemUser.Password)
  26. if err != nil {
  27. return nil, xerr.WithStack(err)
  28. }
  29. if token == "" {
  30. return nil, xerr.Custom("获取token错误")
  31. }
  32. return &operationPb.SystemToken{
  33. Code: http.StatusOK,
  34. Msg: "ok",
  35. Data: &operationPb.TokenData{Token: token},
  36. }, nil
  37. }
  38. // GetUserInfo 获取用户信息
  39. func (s *StoreEntry) GetUserInfo(ctx context.Context, token string) (*operationPb.UserAuth, error) {
  40. systemUser := &model.SystemUser{}
  41. claims, err := jwt.ParseToken(token)
  42. if err != nil {
  43. return nil, xerr.WithStack(err)
  44. }
  45. if claims.Username == "" {
  46. return nil, xerr.Custom("token解析失败")
  47. }
  48. if err = s.DB.Where("name = ?", claims.Username).First(systemUser).Error; err != nil {
  49. return nil, xerr.WithStack(err)
  50. }
  51. systemRole := make([]*model.SystemRole, 0)
  52. roleIdStr := strings.Split(systemUser.RoleIds, ",")
  53. if len(roleIdStr) > 0 {
  54. roleIds := make([]int, 0)
  55. for _, v := range roleIdStr {
  56. roleId, _ := strconv.Atoi(v)
  57. roleIds = append(roleIds, roleId)
  58. }
  59. if err = s.DB.Find(&systemRole, roleIds).Error; err != nil {
  60. return nil, xerr.WithStack(err)
  61. }
  62. }
  63. return systemUser.SystemUserFormat(systemRole), nil
  64. }
  65. // CreateSystemUser 创建系统用户
  66. func (s *StoreEntry) CreateSystemUser(ctx context.Context, req *operationPb.AddSystemUser) error {
  67. systemUsers := &model.SystemUser{
  68. Name: req.Name,
  69. EmployeeName: req.EmployeeName,
  70. Phone: req.Phone,
  71. Password: tool.Md5String(model.InitManagerPassword),
  72. CreateUser: req.CreateUser,
  73. IsShow: operationPb.IsShow_OK,
  74. IsDelete: operationPb.IsShow_OK,
  75. }
  76. systemUsers.SystemUserRoleFormat(req)
  77. if err := s.DB.Create(systemUsers).Error; err != nil {
  78. return xerr.WithStack(err)
  79. }
  80. return nil
  81. }
  82. // SearchSystemUserList 查询系统用户
  83. func (s *StoreEntry) SearchSystemUserList(ctx context.Context, req *operationPb.SearchUserRequest) (*operationPb.SearchUserResponse, error) {
  84. systemUserList := make([]*model.SystemUser, 0)
  85. var count int64 = 0
  86. pref := s.DB.Model(new(model.SystemUser)).Where("is_delete = ?", operationPb.IsShow_OK)
  87. if req.Name != "" {
  88. pref.Where("name like ?", fmt.Sprintf("%s%s%s", "%", req.Name, "%"))
  89. }
  90. if req.EmployeeName != "" {
  91. pref.Where("employee_name like ?", fmt.Sprintf("%s%s%s", "%", req.EmployeeName, "%"))
  92. }
  93. if req.IsShow > 0 {
  94. pref.Where("is_show = ?", req.IsShow)
  95. }
  96. if req.CreatedStartTime > 0 && req.CreatedEndTime > 0 && req.CreatedStartTime <= req.CreatedEndTime {
  97. pref.Where("created_at BETWEEN ? AND ?", req.CreatedStartTime, req.CreatedEndTime)
  98. }
  99. if err := pref.Order("id desc").Count(&count).Limit(int(req.Pagination.PageSize)).Offset(int(req.Pagination.PageOffset)).
  100. Find(&systemUserList).Debug().Error; err != nil {
  101. return nil, xerr.WithStack(err)
  102. }
  103. roleList, err := s.SearchSystemRoleListByIds(ctx, []int64{})
  104. if err != nil {
  105. return nil, xerr.WithStack(err)
  106. }
  107. return &operationPb.SearchUserResponse{
  108. Code: http.StatusOK,
  109. Msg: "ok",
  110. Data: &operationPb.SearchUserData{
  111. Page: req.Pagination.Page,
  112. Total: int32(count),
  113. PageSize: req.Pagination.PageSize,
  114. List: model.SystemUserSlice(systemUserList).ToPB(roleList),
  115. },
  116. }, nil
  117. }
  118. // EditSystemUser 编辑用户
  119. func (s *StoreEntry) EditSystemUser(ctx context.Context, req *operationPb.AddSystemUser) error {
  120. systemUser := &model.SystemUser{Id: int64(req.Id)}
  121. if err := s.DB.First(systemUser).Error; err != nil {
  122. if errors.Is(err, gorm.ErrRecordNotFound) {
  123. return xerr.Custom("该数据不存在!")
  124. }
  125. return xerr.WithStack(err)
  126. }
  127. updateData := &model.SystemUser{
  128. Name: req.Name,
  129. EmployeeName: req.EmployeeName,
  130. Phone: req.Phone,
  131. CreateUser: req.CreateUser,
  132. }
  133. updateData.SystemUserRoleFormat(req)
  134. if err := s.DB.Model(new(model.SystemUser)).Omit("is_show", "password", "is_delete").
  135. Where("id = ?", systemUser.Id).
  136. Updates(updateData).Error; err != nil {
  137. return xerr.WithStack(err)
  138. }
  139. return nil
  140. }
  141. // DeleteSystemUser 删除系统用户
  142. func (s *StoreEntry) DeleteSystemUser(ctx context.Context, userId int64) error {
  143. systemUser := &model.SystemUser{
  144. Id: 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_delete", operationPb.IsShow_NO).Error; err != nil {
  153. return xerr.WithStack(err)
  154. }
  155. return nil
  156. }
  157. // ResetPasswordSystemUser 重置系统用户密码
  158. func (s *StoreEntry) ResetPasswordSystemUser(ctx context.Context, userId int64) error {
  159. systemUser := &model.SystemUser{
  160. Id: userId,
  161. }
  162. if err := s.DB.First(systemUser).Error; err != nil {
  163. if errors.Is(err, gorm.ErrRecordNotFound) {
  164. return xerr.Custom("该用户不存在")
  165. }
  166. return xerr.WithStack(err)
  167. }
  168. if err := s.DB.Model(systemUser).Update("password", tool.Md5String(model.InitManagerPassword)).Error; err != nil {
  169. return xerr.WithStack(err)
  170. }
  171. return nil
  172. }
  173. // DetailsSystemUser 系统用户详情
  174. func (s *StoreEntry) DetailsSystemUser(ctx context.Context, userId int64) (*operationPb.UserDetails, error) {
  175. systemUser := &model.SystemUser{
  176. Id: userId,
  177. }
  178. if err := s.DB.First(systemUser).Error; err != nil {
  179. if errors.Is(err, gorm.ErrRecordNotFound) {
  180. return nil, xerr.Custom("该用户不存在")
  181. }
  182. return nil, xerr.WithStack(err)
  183. }
  184. return &operationPb.UserDetails{
  185. Code: http.StatusOK,
  186. Msg: "ok",
  187. Data: systemUser.ToPb(),
  188. }, nil
  189. }
  190. // IsShowSystemUser 用户是否启用
  191. func (s *StoreEntry) IsShowSystemUser(ctx context.Context, req *operationPb.IsShowSystemUserRequest) error {
  192. systemUser := &model.SystemUser{
  193. Id: int64(req.UserId),
  194. }
  195. if err := s.DB.First(systemUser).Error; err != nil {
  196. if errors.Is(err, gorm.ErrRecordNotFound) {
  197. return xerr.Custom("该用户不存在")
  198. }
  199. return xerr.WithStack(err)
  200. }
  201. if err := s.DB.Model(systemUser).Update("is_show", req.IsShow).Error; err != nil {
  202. return xerr.WithStack(err)
  203. }
  204. return nil
  205. }
  206. // GetSystemUserPermissions 返回系统用户相关菜单权限
  207. func (s *StoreEntry) GetSystemUserPermissions(ctx context.Context, token string) (*operationPb.SystemUserMenuPermissions, error) {
  208. // 解析token
  209. claims, err := jwt.ParseToken(token)
  210. if err != nil {
  211. return nil, xerr.WithStack(err)
  212. }
  213. if err = claims.Valid(); err != nil {
  214. return nil, xerr.WithStack(err)
  215. }
  216. // 根据用户token获取用户数据
  217. systemUser := &model.SystemUser{Name: claims.Username}
  218. if err = s.DB.Where("name = ?", claims.Username).First(systemUser).Error; err != nil {
  219. if errors.Is(err, gorm.ErrRecordNotFound) {
  220. return nil, xerr.Custom("该用户数据不存在")
  221. }
  222. return nil, xerr.WithStack(err)
  223. }
  224. roleIds := systemUser.SystemUserRoleToSlice()
  225. // 获取用户角色数据
  226. systemRoles := make([]*model.SystemRole, 0)
  227. if err = s.DB.Where("is_show = ?", operationPb.IsShow_OK).Find(&systemRoles, roleIds).Error; err != nil {
  228. return nil, xerr.WithStack(err)
  229. }
  230. systemAllPermissionsList := &SystemAllPermissionsList{
  231. PastureList: make([]*model.SystemGroupPasturePermissions, 0),
  232. MenuList: make([]*model.SystemMenuPermissions, 0),
  233. MobileList: make([]*model.SystemMobilePermissions, 0),
  234. }
  235. for _, role := range systemRoles {
  236. item := s.GetSystemAllPermissionsList(ctx, role.Id)
  237. systemAllPermissionsList.PastureList = append(systemAllPermissionsList.PastureList, item.PastureList...)
  238. systemAllPermissionsList.MenuList = append(systemAllPermissionsList.MenuList, item.MenuList...)
  239. systemAllPermissionsList.MobileList = append(systemAllPermissionsList.MobileList, item.MobileList...)
  240. }
  241. systemAllPermissionsList.SystemUserMenuPermissionsUnDuplicate()
  242. groupPastureList, err := s.GetPastureList(ctx, systemAllPermissionsList.PastureList)
  243. if err != nil {
  244. return nil, xerr.WithStack(err)
  245. }
  246. menuList, err := s.GetMenuList(ctx, systemAllPermissionsList.MenuList)
  247. if err != nil {
  248. return nil, xerr.WithStack(err)
  249. }
  250. mobileList, err := s.GetMobileList(ctx, systemAllPermissionsList.MobileList)
  251. if err != nil {
  252. return nil, xerr.WithStack(err)
  253. }
  254. return s.SystemPermissionsFormatPb(groupPastureList, mobileList, menuList), nil
  255. }
  256. // CreateSystemRole 添加角色
  257. func (s *StoreEntry) CreateSystemRole(ctx context.Context, req *operationPb.AddRoleRequest) error {
  258. if err := s.DB.Transaction(func(tx *gorm.DB) error {
  259. // 创建角色数据
  260. role := model.NewSystemRole(req)
  261. if err := tx.Create(role).Error; err != nil {
  262. return xerr.WithStack(err)
  263. }
  264. // 创建角色菜单权限数据
  265. if len(req.MenuId) > 0 {
  266. menuPermissions := model.NewSystemMenuPermissions(role.Id, req.MenuId)
  267. if err := tx.Create(menuPermissions).Error; err != nil {
  268. return xerr.WithStack(err)
  269. }
  270. }
  271. // 创建角色移动端权限数据
  272. if len(req.MobileId) > 0 {
  273. mobilePermissions := model.NewSystemMobilePermissions(role.Id, req.MobileId)
  274. if err := tx.Create(mobilePermissions).Error; err != nil {
  275. return xerr.WithStack(err)
  276. }
  277. }
  278. // 创建角色牧场端权限数据
  279. if len(req.PastureId) > 0 {
  280. pasturePermissions := model.NewSystemGroupPasturePermissions(role.Id, req.PastureId)
  281. if err := tx.Create(pasturePermissions).Error; err != nil {
  282. return xerr.WithStack(err)
  283. }
  284. }
  285. return nil
  286. }); err != nil {
  287. return xerr.WithStack(err)
  288. }
  289. return nil
  290. }
  291. // EditSystemRole 编辑角色
  292. func (s *StoreEntry) EditSystemRole(ctx context.Context, req *operationPb.AddRoleRequest) error {
  293. role := &model.SystemRole{Id: int64(req.Id)}
  294. if err := s.DB.First(role).Error; err != nil {
  295. if errors.Is(err, gorm.ErrRecordNotFound) {
  296. return xerr.Custom("该数据不存在")
  297. }
  298. return xerr.WithStack(err)
  299. }
  300. if err := s.DB.Transaction(func(tx *gorm.DB) error {
  301. updateSystemRole := model.NewSystemRole(req)
  302. if err := tx.Omit("is_show").
  303. Where("id = ?", role.Id).
  304. Updates(updateSystemRole).Error; err != nil {
  305. return xerr.WithStack(err)
  306. }
  307. // 更新牧场权限关系表
  308. pastureIds := req.PastureId
  309. if err := tx.Model(new(model.SystemGroupPasturePermissions)).
  310. Where("role_id = ?", req.Id).Update("is_show", operationPb.IsShow_NO).Error; err != nil {
  311. return xerr.WithStack(err)
  312. }
  313. newSystemGroupPasturePermissions := model.NewSystemGroupPasturePermissions(int64(req.Id), pastureIds)
  314. if err := tx.Create(newSystemGroupPasturePermissions).Error; err != nil {
  315. return xerr.WithStack(err)
  316. }
  317. // 更新菜单权限关系表
  318. menuIds := req.MenuId
  319. if err := tx.Model(new(model.SystemMenuPermissions)).
  320. Where("role_id = ?", req.Id).Update("is_show", operationPb.IsShow_NO).Error; err != nil {
  321. return xerr.WithStack(err)
  322. }
  323. newSystemMenuPermissions := model.NewSystemMenuPermissions(int64(req.Id), menuIds)
  324. if err := tx.Create(newSystemMenuPermissions).Error; err != nil {
  325. return xerr.WithStack(err)
  326. }
  327. // 更新移动端权限关系表
  328. mobileIds := req.MobileId
  329. if err := tx.Model(new(model.SystemMobilePermissions)).
  330. Where("role_id = ?", req.Id).Update("is_show", operationPb.IsShow_NO).Error; err != nil {
  331. return xerr.WithStack(err)
  332. }
  333. newSystemMobilePermissions := model.NewSystemMobilePermissions(int64(req.Id), mobileIds)
  334. if err := tx.Create(newSystemMobilePermissions).Error; err != nil {
  335. return xerr.WithStack(err)
  336. }
  337. return nil
  338. }); err != nil {
  339. return xerr.WithStack(err)
  340. }
  341. return nil
  342. }
  343. // DeleteSystemRole 删除系统角色
  344. func (s *StoreEntry) DeleteSystemRole(ctx context.Context, roleId int64) error {
  345. systemRole := &model.SystemRole{
  346. Id: roleId,
  347. }
  348. if err := s.DB.First(systemRole).Error; err != nil {
  349. if errors.Is(err, gorm.ErrRecordNotFound) {
  350. return xerr.Custom("该数据不存在")
  351. }
  352. return xerr.WithStack(err)
  353. }
  354. if err := s.DB.Model(systemRole).Update("is_show", operationPb.IsShow_NO).Error; err != nil {
  355. return xerr.WithStack(err)
  356. }
  357. return nil
  358. }
  359. // SearchSystemRoleList 查询系统角色
  360. func (s *StoreEntry) SearchSystemRoleList(ctx context.Context, req *operationPb.SearchRoleRequest) (*operationPb.SearchRoleResponse, error) {
  361. systemRole := make([]*model.SystemRole, 0)
  362. var count int64 = 0
  363. pref := s.DB.Model(new(model.SystemRole)).Where("is_show = ?", operationPb.IsShow_OK)
  364. if req.Name != "" {
  365. pref.Where("name like ?", fmt.Sprintf("%s%s%s", "%", req.Name, "%"))
  366. }
  367. if err := pref.Order("id desc").Count(&count).Limit(int(req.Pagination.PageSize)).Offset(int(req.Pagination.PageOffset)).
  368. Find(&systemRole).Debug().Error; err != nil {
  369. return nil, xerr.WithStack(err)
  370. }
  371. return &operationPb.SearchRoleResponse{
  372. Code: http.StatusOK,
  373. Msg: "ok",
  374. Data: &operationPb.SearchRoleData{
  375. Page: req.Pagination.Page,
  376. Total: int32(count),
  377. PageSize: req.Pagination.PageSize,
  378. List: model.SystemRoleSlice(systemRole).ToPB(),
  379. },
  380. }, nil
  381. }
  382. // SearchSystemRoleListByIds 根据id查询角色列表
  383. func (s *StoreEntry) SearchSystemRoleListByIds(ctx context.Context, ids []int64) ([]*model.SystemRole, error) {
  384. systemRoleList := make([]*model.SystemRole, 0)
  385. if err := s.DB.Model(new(model.SystemRole)).Where("is_show = ?", operationPb.IsShow_OK).Find(&systemRoleList, ids).Error; err != nil {
  386. return nil, xerr.WithStack(err)
  387. }
  388. return systemRoleList, nil
  389. }
  390. // GetRolePermissions 查询系统角色权限
  391. func (s *StoreEntry) GetRolePermissions(ctx context.Context, roleId int64) (*operationPb.RolePermissionsList, error) {
  392. systemRole := &model.SystemRole{
  393. Id: roleId,
  394. }
  395. if err := s.DB.First(systemRole).Error; err != nil {
  396. if errors.Is(err, gorm.ErrRecordNotFound) {
  397. return nil, xerr.Custom("该数据不存在")
  398. }
  399. return nil, xerr.WithStack(err)
  400. }
  401. systemAllPermissionsList := &SystemAllPermissionsList{
  402. PastureList: make([]*model.SystemGroupPasturePermissions, 0),
  403. MenuList: make([]*model.SystemMenuPermissions, 0),
  404. MobileList: make([]*model.SystemMobilePermissions, 0),
  405. }
  406. item := s.GetSystemAllPermissionsList(ctx, systemRole.Id)
  407. systemAllPermissionsList.PastureList = append(systemAllPermissionsList.PastureList, item.PastureList...)
  408. systemAllPermissionsList.MenuList = append(systemAllPermissionsList.MenuList, item.MenuList...)
  409. systemAllPermissionsList.MobileList = append(systemAllPermissionsList.MobileList, item.MobileList...)
  410. return s.AllPermissionsListToRolePermissions(systemAllPermissionsList), nil
  411. }
  412. // CreateSystemMenu 添加系统菜单权限
  413. func (s *StoreEntry) CreateSystemMenu(ctx context.Context, req *operationPb.AddMenuRequest) error {
  414. systemMenu := model.NewSystemMenu(req)
  415. if err := s.DB.Create(systemMenu).Error; err != nil {
  416. return xerr.WithStack(err)
  417. }
  418. return nil
  419. }
  420. // EditSystemMenu 编辑系统菜单权限
  421. func (s *StoreEntry) EditSystemMenu(ctx context.Context, req *operationPb.AddMenuRequest) error {
  422. systemMenu := &model.SystemMenu{Id: int64(req.Id)}
  423. if err := s.DB.First(systemMenu).Error; err != nil {
  424. if errors.Is(err, gorm.ErrRecordNotFound) {
  425. return xerr.Custom("该数据不存在!")
  426. }
  427. return xerr.WithStack(err)
  428. }
  429. updateData := &model.SystemMenu{
  430. Name: req.Name,
  431. MenuType: req.MenuType,
  432. Title: req.Title,
  433. Path: req.Path,
  434. Component: req.Component,
  435. Icon: req.Icon,
  436. Sort: req.Sort,
  437. Redirect: req.Redirect,
  438. ParentId: int64(req.ParentId),
  439. }
  440. if err := s.DB.Model(new(model.SystemMenu)).Omit("is_show").
  441. Where("id = ?", systemMenu.Id).
  442. Updates(updateData).Error; err != nil {
  443. return xerr.WithStack(err)
  444. }
  445. return nil
  446. }
  447. // IsShowSystemMenu 菜单是否启用
  448. func (s *StoreEntry) IsShowSystemMenu(ctx context.Context, req *operationPb.IsShowSystemMenuRequest) error {
  449. systemMenu := &model.SystemMenu{Id: int64(req.MenuId)}
  450. if err := s.DB.First(systemMenu).Error; err != nil {
  451. if errors.Is(err, gorm.ErrRecordNotFound) {
  452. return xerr.Custom("该数据不存在")
  453. }
  454. return xerr.WithStack(err)
  455. }
  456. if err := s.DB.Model(systemMenu).Update("is_show", req.IsShow).Error; err != nil {
  457. return xerr.WithStack(err)
  458. }
  459. return nil
  460. }
  461. // SearchSystemMenuList 菜单列表查询
  462. func (s *StoreEntry) SearchSystemMenuList(ctx context.Context, req *operationPb.SearchMenuRequest) (*operationPb.SearchMenuResponse, error) {
  463. systemMenu := make([]*model.SystemMenu, 0)
  464. var count int64 = 0
  465. pref := s.DB.Model(new(model.SystemMenu)).Where("is_delete = ?", operationPb.IsShow_OK)
  466. if req.Name != "" {
  467. pref.Where("name like ?", fmt.Sprintf("%s%s%s", "%", req.Name, "%"))
  468. }
  469. if err := pref.Order("id desc").Count(&count).Limit(int(req.Pagination.PageSize)).Offset(int(req.Pagination.PageOffset)).
  470. Find(&systemMenu).Debug().Error; err != nil {
  471. return nil, xerr.WithStack(err)
  472. }
  473. return &operationPb.SearchMenuResponse{
  474. Code: http.StatusOK,
  475. Msg: "ok",
  476. Data: &operationPb.SearchMenuData{
  477. Page: req.Pagination.Page,
  478. Total: int32(count),
  479. List: model.SystemMenuSlice(systemMenu).ToPB(),
  480. },
  481. }, nil
  482. }
  483. // DeleteSystemMenu 删除系统菜单
  484. func (s *StoreEntry) DeleteSystemMenu(ctx context.Context, menuId int64) error {
  485. systemMenu := &model.SystemMenu{Id: menuId}
  486. if err := s.DB.First(systemMenu).Error; err != nil {
  487. if errors.Is(err, gorm.ErrRecordNotFound) {
  488. return xerr.Custom("该数据不存在")
  489. }
  490. return xerr.WithStack(err)
  491. }
  492. if err := s.DB.Model(systemMenu).Update("is_delete", operationPb.IsShow_NO).Error; err != nil {
  493. return xerr.WithStack(err)
  494. }
  495. return nil
  496. }
  497. // SearchMobileList 查询移动端角色
  498. func (s *StoreEntry) SearchMobileList(ctx context.Context, req *operationPb.SearchMobileRequest) (*operationPb.SearchMobileResponse, error) {
  499. systemMobile := make([]*model.SystemMobile, 0)
  500. var count int64 = 0
  501. pref := s.DB.Model(new(model.SystemMobile)).Where("is_show = ?", operationPb.IsShow_OK)
  502. if req.Name != "" {
  503. pref.Where("name like ?", fmt.Sprintf("%s%s%s", "%", req.Name, "%"))
  504. }
  505. if err := pref.Order("id desc").Count(&count).Limit(int(req.Pagination.PageSize)).Offset(int(req.Pagination.PageOffset)).
  506. Find(&systemMobile).Debug().Error; err != nil {
  507. return nil, xerr.WithStack(err)
  508. }
  509. return &operationPb.SearchMobileResponse{
  510. Code: http.StatusOK,
  511. Msg: "ok",
  512. Data: &operationPb.SearchMobileData{
  513. Page: req.Pagination.Page,
  514. Total: int32(count),
  515. PageSize: req.Pagination.PageSize,
  516. List: model.SystemMobileSlice(systemMobile).ToPB(),
  517. },
  518. }, nil
  519. }