package service import ( "cold-delivery/common/actions" cDto "cold-delivery/common/dto" "cold-delivery/common/global" "errors" "gogs.baozhida.cn/zoie/OAuth-core/service" "gorm.io/gorm" "gorm.io/gorm/clause" "cold-delivery/app/admin/model" "cold-delivery/app/admin/service/dto" "gogs.baozhida.cn/zoie/OAuth-core/pkg" ) type Company struct { service.Service } // GetPage 获取Address列表 func (e *Company) GetPage(c *dto.CompanyGetPageReq, list *[]model.SysDept, count *int64) error { var err error var data model.SysDept err = e.Orm.Model(&data). Scopes( cDto.MakeCondition(c.GetNeedSearch()), cDto.Paginate(c.GetPageSize(), c.GetPageIndex()), ). Find(list).Limit(-1).Offset(-1). Count(count).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.GetFailedErr } return nil } func CompanyIdScopes(id int) func(db *gorm.DB) *gorm.DB { return func(db *gorm.DB) *gorm.DB { if id == 0 { return db } return db.Where("id = ? ", id) } } func (e *Company) GetAll(c *dto.CompanyGetAllReq, list *[]model.SysDept, count *int64, p *actions.DataPermission) error { var err error var data model.SysDept err = e.Orm.Model(&data). Scopes( CompanyIdScopes(p.DeptId), cDto.MakeCondition(c.GetNeedSearch()), ). Find(list).Limit(-1).Offset(-1). Count(count).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.GetFailedErr } return nil } // Get 获取SysDept对象 func (e *Company) Get(d *dto.CompanyGetReq, deptModel *model.SysDept) error { err := e.Orm. First(deptModel, d.GetId()).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return global.GetNotFoundOrNoPermissionErr } return global.GetFailedErr } return nil } // Insert 创建SysDept对象 func (e *Company) Insert(c *dto.CompanyInsertReq) error { var err error var data model.SysDept tx := e.Orm.Debug().Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() var i int64 err = e.Orm.Model(&data).Where("name = ?", c.Name).Count(&i).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } if i > 0 { err = errors.New("公司名称已存在!") e.Log.Errorf("db error: %s", err) return err } c.Generate(&data) err = tx.Create(&data).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } c.Id = data.Id deptPath := pkg.IntToString(data.Id) + "/" if data.ParentId != 0 { var deptP model.SysDept tx.First(&deptP, data.ParentId) deptPath = deptP.Path + deptPath } else { deptPath = "/0/" + deptPath } var mp = map[string]string{} mp["path"] = deptPath err = tx.Model(&data).Update("path", deptPath).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } return nil } // Update 修改SysDept对象 func (e *Company) Update(c *dto.CompanyUpdateReq) error { var err error var deptModel = model.SysDept{} tx := e.Orm.Debug().Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() err = tx.First(&deptModel, c.GetId()).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return global.UpdateNotFoundOrNoPermissionErr } return global.UpdateFailedErr } c.Generate(&deptModel) DeptPath := pkg.IntToString(deptModel.Id) + "/" if deptModel.ParentId != 0 { var DeptP model.SysDept tx.First(&DeptP, deptModel.ParentId) DeptPath = DeptP.Path + DeptPath } else { DeptPath = "/0/" + DeptPath } deptModel.Path = DeptPath db := tx.Save(&deptModel) if err = db.Error; err != nil { e.Log.Errorf("UpdateSysDept error: %s", err) return err } return nil } // Remove 删除SysDept // 删除部门 同时删除其子部门、部门下的用户 func (e *Company) Remove(d *dto.CompanyDeleteReq, p *actions.DataPermission) error { var err error tx := e.Orm.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() var dept model.SysDept err = e.Orm. First(&dept, d.GetId()).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return global.GetNotFoundOrNoPermissionErr } return global.DeleteFailedErr } var deptList = make([]model.SysDept, 0) var deptIds = make([]int, 0) tx.Where("path like ?", dept.Path+"%").Find(&deptList) // 获取部门及其子部门下ID for _, v := range deptList { deptIds = append(deptIds, v.Id) } db := tx.Select(clause.Associations).Delete(&deptList) if err = db.Error; err != nil { e.Log.Errorf("Delete error: %s", err) return global.DeleteFailedErr } if db.RowsAffected == 0 { return global.DeleteNotFoundOrNoPermissionErr } // 删除部门下的用户 dbUser := tx.Where("dept_id in (?)", deptIds).Delete(&model.SysUser{}) if err = dbUser.Error; err != nil { e.Log.Errorf("Delete User error: %s", err) return global.DeleteFailedErr } return nil }