| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- package service
- import (
- "IotAdmin/core/sdk/pkg"
- "errors"
- "strings"
- "IotAdmin/core/sdk/service"
- "gorm.io/gorm"
- "IotAdmin/app/iot/models"
- "IotAdmin/app/iot/service/dto"
- cDto "IotAdmin/common/dto"
- "IotAdmin/common/permission"
- )
- // IotGroupService 分组服务
- type IotGroupService struct {
- service.Service
- }
- // GetPage 获取分组列表
- func (e *IotGroupService) GetPage(c *dto.IotGroupGetPageReq, p *permission.DataPermission, list *[]models.IotGroup) error {
- var err error
- var data models.IotGroup
- var groups = make([]models.IotGroup, 0)
- err = e.Orm.Model(&data).Scopes(
- cDto.MakeCondition(c.GetNeedSearch()),
- permission.Permission(data.TableName(), p),
- ).Find(&groups).Error
- if err != nil {
- e.Log.Errorf("IotGroupService GetPage error:%s \r\n", err)
- return err
- }
- for _, v := range groups {
- if v.ParentId != 0 {
- continue
- }
- g := groupCall(&groups, v)
- *list = append(*list, g)
- }
- return nil
- }
- func groupCall(groupList *[]models.IotGroup, group models.IotGroup) models.IotGroup {
- list := *groupList
- groups := make([]models.IotGroup, 0)
- for _, v := range list {
- if v.ParentId != group.Id {
- continue
- }
- g := &models.IotGroup{
- ParentId: v.ParentId,
- Name: v.Name,
- Path: v.Path,
- Description: v.Description,
- Children: make([]models.IotGroup, 0),
- }
- g.Id = v.Id
- gc := groupCall(groupList, *g)
- groups = append(groups, gc)
- }
- group.Children = groups
- return group
- }
- // Get 获取分组对象
- func (e *IotGroupService) Get(d *dto.IotGroupGetReq, p *permission.DataPermission, model *models.IotGroup) error {
- var data models.IotGroup
- err := e.Orm.Model(&data).
- Scopes(
- permission.Permission(data.TableName(), p),
- ).
- First(model, d.GetId()).Error
- if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
- err = errors.New("查看对象不存在或无权查看")
- e.Log.Errorf("Service GetIotGroup error:%s \r\n", err)
- return err
- }
- if err != nil {
- e.Log.Errorf("db error:%s", err)
- return err
- }
- return nil
- }
- // Insert 添加分组对象
- func (e *IotGroupService) Insert(c *dto.IotGroupInsertReq) error {
- var err error
- var data models.IotGroup
- c.Generate(&data)
- tx := e.Orm.Debug().Begin()
- defer func() {
- if err != nil {
- tx.Rollback()
- } else {
- tx.Commit()
- }
- }()
- err = e.Orm.Create(&data).Error
- if err != nil {
- e.Log.Errorf("IotGroupService Insert error:%s \r\n", err)
- return err
- }
- err = inIitPaths(e.Orm, &data)
- return err
- }
- func inIitPaths(tx *gorm.DB, group *models.IotGroup) error {
- var err error
- var data models.IotGroup
- parentGroup := &models.IotGroup{}
- if group.ParentId != 0 {
- err = tx.Model(&data).First(parentGroup, group.ParentId).Error
- if err != nil {
- return err
- }
- if parentGroup.Path == "" {
- err = errors.New("父级paths异常,请尝试对当前节点父级分组进行更新操作!")
- return err
- }
- group.Path = parentGroup.Path + "/" + pkg.IntToString(group.Id)
- } else {
- group.Path = "/0/" + pkg.IntToString(group.Id)
- }
- err = tx.Model(&data).Where("id = ?", group.Id).Update("path", group.Path).Error
- return err
- }
- // Update 修改分组对象
- func (e *IotGroupService) Update(c *dto.IotGroupUpdateReq, p *permission.DataPermission) error {
- var err error
- var data = models.IotGroup{}
- e.Orm.Scopes(
- permission.Permission(data.TableName(), p),
- ).First(&data, c.GetId())
- c.Generate(&data)
- tx := e.Orm.Debug().Begin()
- defer func() {
- if err != nil {
- tx.Rollback()
- } else {
- tx.Commit()
- }
- }()
- db := e.Orm.Save(&data)
- if err = db.Error; err != nil {
- e.Log.Errorf("IotGroupService Save error:%s \r\n", err)
- return err
- }
- oldPath := data.Path
- if db.RowsAffected == 0 {
- return errors.New("无权更新该数据")
- }
- var groupList []models.IotGroup
- tx.Where("path like ?", oldPath+"%").Find(&groupList)
- for _, v := range groupList {
- v.Path = strings.Replace(v.Path, oldPath, data.Path, 1)
- tx.Model(&v).Update("path", v.Path)
- }
- return nil
- }
- // Remove 删除分组
- func (e *IotGroupService) Remove(d *dto.IotGroupDeleteReq, p *permission.DataPermission) error {
- var data models.IotGroup
- db := e.Orm.Model(&data).
- Scopes(
- permission.Permission(data.TableName(), p),
- ).Delete(&data, d.GetId())
- if err := db.Error; err != nil {
- e.Log.Errorf("Service RemoveIotGroup error:%s \r\n", err)
- return err
- }
- if db.RowsAffected == 0 {
- return errors.New("无权删除该数据")
- }
- return nil
- }
|