company.go 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. package service
  2. import (
  3. "cold-delivery/common/actions"
  4. cDto "cold-delivery/common/dto"
  5. "cold-delivery/common/global"
  6. "errors"
  7. "gogs.baozhida.cn/zoie/OAuth-core/service"
  8. "gorm.io/gorm"
  9. "gorm.io/gorm/clause"
  10. "cold-delivery/app/admin/model"
  11. "cold-delivery/app/admin/service/dto"
  12. "gogs.baozhida.cn/zoie/OAuth-core/pkg"
  13. )
  14. type Company struct {
  15. service.Service
  16. }
  17. // GetPage 获取Address列表
  18. func (e *Company) GetPage(c *dto.CompanyGetPageReq, list *[]model.SysDept, count *int64) error {
  19. var err error
  20. var data model.SysDept
  21. err = e.Orm.Model(&data).
  22. Scopes(
  23. cDto.MakeCondition(c.GetNeedSearch()),
  24. cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
  25. ).
  26. Find(list).Limit(-1).Offset(-1).
  27. Count(count).Error
  28. if err != nil {
  29. e.Log.Errorf("db error: %s", err)
  30. return global.GetFailedErr
  31. }
  32. return nil
  33. }
  34. func CompanyIdScopes(id int) func(db *gorm.DB) *gorm.DB {
  35. return func(db *gorm.DB) *gorm.DB {
  36. if id == 0 {
  37. return db
  38. }
  39. return db.Where("id = ? ", id)
  40. }
  41. }
  42. func (e *Company) GetAll(c *dto.CompanyGetAllReq, list *[]model.SysDept, count *int64, p *actions.DataPermission) error {
  43. var err error
  44. var data model.SysDept
  45. err = e.Orm.Model(&data).
  46. Scopes(
  47. CompanyIdScopes(p.DeptId),
  48. cDto.MakeCondition(c.GetNeedSearch()),
  49. ).
  50. Find(list).Limit(-1).Offset(-1).
  51. Count(count).Error
  52. if err != nil {
  53. e.Log.Errorf("db error: %s", err)
  54. return global.GetFailedErr
  55. }
  56. return nil
  57. }
  58. // Get 获取SysDept对象
  59. func (e *Company) Get(d *dto.CompanyGetReq, deptModel *model.SysDept) error {
  60. err := e.Orm.
  61. First(deptModel, d.GetId()).Error
  62. if err != nil {
  63. e.Log.Errorf("db error: %s", err)
  64. if errors.Is(err, gorm.ErrRecordNotFound) {
  65. return global.GetNotFoundOrNoPermissionErr
  66. }
  67. return global.GetFailedErr
  68. }
  69. return nil
  70. }
  71. // Insert 创建SysDept对象
  72. func (e *Company) Insert(c *dto.CompanyInsertReq) error {
  73. var err error
  74. var data model.SysDept
  75. tx := e.Orm.Debug().Begin()
  76. defer func() {
  77. if err != nil {
  78. tx.Rollback()
  79. } else {
  80. tx.Commit()
  81. }
  82. }()
  83. var i int64
  84. err = e.Orm.Model(&data).Where("name = ?", c.Name).Count(&i).Error
  85. if err != nil {
  86. e.Log.Errorf("db error: %s", err)
  87. return global.CreateFailedErr
  88. }
  89. if i > 0 {
  90. err = errors.New("公司名称已存在!")
  91. e.Log.Errorf("db error: %s", err)
  92. return err
  93. }
  94. c.Generate(&data)
  95. err = tx.Create(&data).Error
  96. if err != nil {
  97. e.Log.Errorf("db error: %s", err)
  98. return global.CreateFailedErr
  99. }
  100. c.Id = data.Id
  101. deptPath := pkg.IntToString(data.Id) + "/"
  102. if data.ParentId != 0 {
  103. var deptP model.SysDept
  104. tx.First(&deptP, data.ParentId)
  105. deptPath = deptP.Path + deptPath
  106. } else {
  107. deptPath = "/0/" + deptPath
  108. }
  109. var mp = map[string]string{}
  110. mp["path"] = deptPath
  111. err = tx.Model(&data).Update("path", deptPath).Error
  112. if err != nil {
  113. e.Log.Errorf("db error: %s", err)
  114. return global.CreateFailedErr
  115. }
  116. return nil
  117. }
  118. // Update 修改SysDept对象
  119. func (e *Company) Update(c *dto.CompanyUpdateReq) error {
  120. var err error
  121. var deptModel = model.SysDept{}
  122. tx := e.Orm.Debug().Begin()
  123. defer func() {
  124. if err != nil {
  125. tx.Rollback()
  126. } else {
  127. tx.Commit()
  128. }
  129. }()
  130. err = tx.First(&deptModel, c.GetId()).Error
  131. if err != nil {
  132. e.Log.Errorf("db error: %s", err)
  133. if errors.Is(err, gorm.ErrRecordNotFound) {
  134. return global.UpdateNotFoundOrNoPermissionErr
  135. }
  136. return global.UpdateFailedErr
  137. }
  138. c.Generate(&deptModel)
  139. DeptPath := pkg.IntToString(deptModel.Id) + "/"
  140. if deptModel.ParentId != 0 {
  141. var DeptP model.SysDept
  142. tx.First(&DeptP, deptModel.ParentId)
  143. DeptPath = DeptP.Path + DeptPath
  144. } else {
  145. DeptPath = "/0/" + DeptPath
  146. }
  147. deptModel.Path = DeptPath
  148. db := tx.Save(&deptModel)
  149. if err = db.Error; err != nil {
  150. e.Log.Errorf("UpdateSysDept error: %s", err)
  151. return err
  152. }
  153. return nil
  154. }
  155. // Remove 删除SysDept
  156. // 删除部门 同时删除其子部门、部门下的用户
  157. func (e *Company) Remove(d *dto.CompanyDeleteReq, p *actions.DataPermission) error {
  158. var err error
  159. tx := e.Orm.Begin()
  160. defer func() {
  161. if err != nil {
  162. tx.Rollback()
  163. } else {
  164. tx.Commit()
  165. }
  166. }()
  167. var dept model.SysDept
  168. err = e.Orm.
  169. First(&dept, d.GetId()).Error
  170. if err != nil {
  171. e.Log.Errorf("db error: %s", err)
  172. if errors.Is(err, gorm.ErrRecordNotFound) {
  173. return global.GetNotFoundOrNoPermissionErr
  174. }
  175. return global.DeleteFailedErr
  176. }
  177. var deptList = make([]model.SysDept, 0)
  178. var deptIds = make([]int, 0)
  179. tx.Where("path like ?", dept.Path+"%").Find(&deptList)
  180. // 获取部门及其子部门下ID
  181. for _, v := range deptList {
  182. deptIds = append(deptIds, v.Id)
  183. }
  184. db := tx.Select(clause.Associations).Delete(&deptList)
  185. if err = db.Error; err != nil {
  186. e.Log.Errorf("Delete error: %s", err)
  187. return global.DeleteFailedErr
  188. }
  189. if db.RowsAffected == 0 {
  190. return global.DeleteNotFoundOrNoPermissionErr
  191. }
  192. // 删除部门下的用户
  193. dbUser := tx.Where("dept_id in (?)", deptIds).Delete(&model.SysUser{})
  194. if err = dbUser.Error; err != nil {
  195. e.Log.Errorf("Delete User error: %s", err)
  196. return global.DeleteFailedErr
  197. }
  198. return nil
  199. }