group.go 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. package service
  2. import (
  3. "IotAdmin/core/sdk/pkg"
  4. "errors"
  5. "strings"
  6. "IotAdmin/core/sdk/service"
  7. "gorm.io/gorm"
  8. "IotAdmin/app/iot/models"
  9. "IotAdmin/app/iot/service/dto"
  10. cDto "IotAdmin/common/dto"
  11. "IotAdmin/common/permission"
  12. )
  13. // IotGroupService 分组服务
  14. type IotGroupService struct {
  15. service.Service
  16. }
  17. // GetPage 获取分组列表
  18. func (e *IotGroupService) GetPage(c *dto.IotGroupGetPageReq, p *permission.DataPermission, list *[]models.IotGroup) error {
  19. var err error
  20. var data models.IotGroup
  21. var groups = make([]models.IotGroup, 0)
  22. err = e.Orm.Model(&data).Scopes(
  23. cDto.MakeCondition(c.GetNeedSearch()),
  24. permission.Permission(data.TableName(), p),
  25. ).Find(&groups).Error
  26. if err != nil {
  27. e.Log.Errorf("IotGroupService GetPage error:%s \r\n", err)
  28. return err
  29. }
  30. for _, v := range groups {
  31. if v.ParentId != 0 {
  32. continue
  33. }
  34. g := groupCall(&groups, v)
  35. *list = append(*list, g)
  36. }
  37. return nil
  38. }
  39. func groupCall(groupList *[]models.IotGroup, group models.IotGroup) models.IotGroup {
  40. list := *groupList
  41. groups := make([]models.IotGroup, 0)
  42. for _, v := range list {
  43. if v.ParentId != group.Id {
  44. continue
  45. }
  46. g := &models.IotGroup{
  47. ParentId: v.ParentId,
  48. Name: v.Name,
  49. Path: v.Path,
  50. Description: v.Description,
  51. Children: make([]models.IotGroup, 0),
  52. }
  53. g.Id = v.Id
  54. gc := groupCall(groupList, *g)
  55. groups = append(groups, gc)
  56. }
  57. group.Children = groups
  58. return group
  59. }
  60. // Get 获取分组对象
  61. func (e *IotGroupService) Get(d *dto.IotGroupGetReq, p *permission.DataPermission, model *models.IotGroup) error {
  62. var data models.IotGroup
  63. err := e.Orm.Model(&data).
  64. Scopes(
  65. permission.Permission(data.TableName(), p),
  66. ).
  67. First(model, d.GetId()).Error
  68. if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
  69. err = errors.New("查看对象不存在或无权查看")
  70. e.Log.Errorf("Service GetIotGroup error:%s \r\n", err)
  71. return err
  72. }
  73. if err != nil {
  74. e.Log.Errorf("db error:%s", err)
  75. return err
  76. }
  77. return nil
  78. }
  79. // Insert 添加分组对象
  80. func (e *IotGroupService) Insert(c *dto.IotGroupInsertReq) error {
  81. var err error
  82. var data models.IotGroup
  83. c.Generate(&data)
  84. tx := e.Orm.Debug().Begin()
  85. defer func() {
  86. if err != nil {
  87. tx.Rollback()
  88. } else {
  89. tx.Commit()
  90. }
  91. }()
  92. err = e.Orm.Create(&data).Error
  93. if err != nil {
  94. e.Log.Errorf("IotGroupService Insert error:%s \r\n", err)
  95. return err
  96. }
  97. err = inIitPaths(e.Orm, &data)
  98. return err
  99. }
  100. func inIitPaths(tx *gorm.DB, group *models.IotGroup) error {
  101. var err error
  102. var data models.IotGroup
  103. parentGroup := &models.IotGroup{}
  104. if group.ParentId != 0 {
  105. err = tx.Model(&data).First(parentGroup, group.ParentId).Error
  106. if err != nil {
  107. return err
  108. }
  109. if parentGroup.Path == "" {
  110. err = errors.New("父级paths异常,请尝试对当前节点父级分组进行更新操作!")
  111. return err
  112. }
  113. group.Path = parentGroup.Path + "/" + pkg.IntToString(group.Id)
  114. } else {
  115. group.Path = "/0/" + pkg.IntToString(group.Id)
  116. }
  117. err = tx.Model(&data).Where("id = ?", group.Id).Update("path", group.Path).Error
  118. return err
  119. }
  120. // Update 修改分组对象
  121. func (e *IotGroupService) Update(c *dto.IotGroupUpdateReq, p *permission.DataPermission) error {
  122. var err error
  123. var data = models.IotGroup{}
  124. e.Orm.Scopes(
  125. permission.Permission(data.TableName(), p),
  126. ).First(&data, c.GetId())
  127. c.Generate(&data)
  128. tx := e.Orm.Debug().Begin()
  129. defer func() {
  130. if err != nil {
  131. tx.Rollback()
  132. } else {
  133. tx.Commit()
  134. }
  135. }()
  136. db := e.Orm.Save(&data)
  137. if err = db.Error; err != nil {
  138. e.Log.Errorf("IotGroupService Save error:%s \r\n", err)
  139. return err
  140. }
  141. oldPath := data.Path
  142. if db.RowsAffected == 0 {
  143. return errors.New("无权更新该数据")
  144. }
  145. var groupList []models.IotGroup
  146. tx.Where("path like ?", oldPath+"%").Find(&groupList)
  147. for _, v := range groupList {
  148. v.Path = strings.Replace(v.Path, oldPath, data.Path, 1)
  149. tx.Model(&v).Update("path", v.Path)
  150. }
  151. return nil
  152. }
  153. // Remove 删除分组
  154. func (e *IotGroupService) Remove(d *dto.IotGroupDeleteReq, p *permission.DataPermission) error {
  155. var data models.IotGroup
  156. db := e.Orm.Model(&data).
  157. Scopes(
  158. permission.Permission(data.TableName(), p),
  159. ).Delete(&data, d.GetId())
  160. if err := db.Error; err != nil {
  161. e.Log.Errorf("Service RemoveIotGroup error:%s \r\n", err)
  162. return err
  163. }
  164. if db.RowsAffected == 0 {
  165. return errors.New("无权删除该数据")
  166. }
  167. return nil
  168. }