sys_org.go 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306
  1. package service
  2. import (
  3. "IotAdmin/app/system/models"
  4. "IotAdmin/common/permission"
  5. "errors"
  6. log "IotAdmin/core/logger"
  7. "IotAdmin/core/sdk/pkg"
  8. "gorm.io/gorm"
  9. "IotAdmin/app/system/service/dto"
  10. cDto "IotAdmin/common/dto"
  11. "IotAdmin/core/sdk/service"
  12. )
  13. type SysOrgService struct {
  14. service.Service
  15. }
  16. // GetPage 获取SysDept列表
  17. //func (e *SysOrgService) GetPage(c *dto.SysOrgGetPageReq, list *[]models.SysOrgService) error {
  18. // var err error
  19. // var data models.SysOrgService
  20. //
  21. // err = e.Orm.Model(&data).
  22. // Scopes(
  23. // cDto.MakeCondition(c.GetNeedSearch()),
  24. // ).
  25. // Find(list).Error
  26. // if err != nil {
  27. // e.Log.Errorf("db error:%s", err)
  28. // return err
  29. // }
  30. // return nil
  31. //}
  32. // Get 获取SysOrg对象
  33. func (e *SysOrgService) Get(d *dto.SysOrgGetReq, model *models.SysOrg) error {
  34. var err error
  35. var data models.SysOrg
  36. db := e.Orm.Model(&data).
  37. First(model, d.GetId())
  38. err = db.Error
  39. if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
  40. err = errors.New("查看对象不存在或无权查看")
  41. e.Log.Errorf("db error:%s", err)
  42. return err
  43. }
  44. if err = db.Error; err != nil {
  45. e.Log.Errorf("db error:%s", err)
  46. return err
  47. }
  48. return nil
  49. }
  50. // Insert 创建SysOrg对象
  51. func (e *SysOrgService) Insert(c *dto.SysOrgInsertReq) error {
  52. var err error
  53. var data models.SysOrg
  54. c.Generate(&data)
  55. tx := e.Orm.Debug().Begin()
  56. defer func() {
  57. if err != nil {
  58. tx.Rollback()
  59. } else {
  60. tx.Commit()
  61. }
  62. }()
  63. err = tx.Create(&data).Error
  64. if err != nil {
  65. e.Log.Errorf("db error:%s", err)
  66. return err
  67. }
  68. orgPath := pkg.IntToString(data.OrgId) + "/"
  69. if data.ParentId != 0 {
  70. var orgP models.SysOrg
  71. tx.First(&orgP, data.ParentId)
  72. orgPath = orgP.OrgPath + orgPath
  73. } else {
  74. orgPath = "/0/" + orgPath
  75. }
  76. var mp = map[string]string{}
  77. mp["org_path"] = orgPath
  78. if err := tx.Model(&data).Update("org_path", orgPath).Error; err != nil {
  79. e.Log.Errorf("db error:%s", err)
  80. return err
  81. }
  82. return nil
  83. }
  84. // Update 修改SysOrg对象
  85. func (e *SysOrgService) Update(c *dto.SysOrgUpdateReq) error {
  86. var err error
  87. var model = models.SysOrg{}
  88. tx := e.Orm.Debug().Begin()
  89. defer func() {
  90. if err != nil {
  91. tx.Rollback()
  92. } else {
  93. tx.Commit()
  94. }
  95. }()
  96. tx.First(&model, c.GetId())
  97. c.Generate(&model)
  98. orgPath := pkg.IntToString(model.OrgId) + "/"
  99. if model.ParentId != 0 {
  100. var orgP models.SysOrg
  101. tx.First(&orgP, model.ParentId)
  102. orgPath = orgP.OrgPath + orgPath
  103. } else {
  104. orgPath = "/0/" + orgPath
  105. }
  106. model.OrgPath = orgPath
  107. db := tx.Save(&model)
  108. if err = db.Error; err != nil {
  109. e.Log.Errorf("UpdateSysOrg error:%s", err)
  110. return err
  111. }
  112. if db.RowsAffected == 0 {
  113. return errors.New("无权更新该数据")
  114. }
  115. return nil
  116. }
  117. // Remove 删除SysOrg
  118. func (e *SysOrgService) Remove(d *dto.SysOrgDeleteReq) error {
  119. var err error
  120. var data models.SysOrg
  121. db := e.Orm.Model(&data).Delete(&data, d.GetId())
  122. if err = db.Error; err != nil {
  123. err = db.Error
  124. e.Log.Errorf("Delete error: %s", err)
  125. return err
  126. }
  127. if db.RowsAffected == 0 {
  128. err = errors.New("无权删除该数据")
  129. return err
  130. }
  131. return nil
  132. }
  133. // getList 获取组织数据
  134. func (e *SysOrgService) getList(c *dto.SysOrgGetPageReq, list *[]models.SysOrg, p *permission.DataPermission) error {
  135. var err error
  136. var data models.SysOrg
  137. err = e.Orm.Model(&data).
  138. Scopes(
  139. cDto.MakeCondition(c.GetNeedSearch()),
  140. permission.Permission(data.TableName(), p),
  141. ).
  142. Find(list).Error
  143. if err != nil {
  144. e.Log.Errorf("db error:%s", err)
  145. return err
  146. }
  147. return nil
  148. }
  149. // SetOrgTree 设置组织数据
  150. func (e *SysOrgService) SetOrgTree(c *dto.SysOrgGetReq, p *permission.DataPermission) (m []dto.OrgLabel, err error) {
  151. var list []models.SysOrg
  152. var data models.SysOrg
  153. err = e.Orm.Model(&data).Scopes(
  154. permission.Permission(data.TableName(), p),
  155. ).Where("status = ?", 2).Where("org_id = ? or parent_id = ? ", c.GetId(), c.GetId()).Find(&list).Error
  156. if err != nil {
  157. e.Log.Errorf("db error:%s", err)
  158. return
  159. }
  160. m = make([]dto.OrgLabel, 0)
  161. for i := 0; i < len(list); i++ {
  162. if list[i].ParentId != 0 {
  163. continue
  164. }
  165. e := dto.OrgLabel{}
  166. e.Id = list[i].OrgId
  167. e.Label = list[i].OrgName
  168. orgInfo := orgTreeCall(&list, e)
  169. m = append(m, orgInfo)
  170. }
  171. return
  172. }
  173. // Call 递归构造组织数据
  174. func orgTreeCall(orgList *[]models.SysOrg, org dto.OrgLabel) dto.OrgLabel {
  175. list := *orgList
  176. labels := make([]dto.OrgLabel, 0)
  177. for j := 0; j < len(list); j++ {
  178. if org.Id != list[j].ParentId {
  179. continue
  180. }
  181. mi := dto.OrgLabel{Id: list[j].OrgId, Label: list[j].OrgName, Children: []dto.OrgLabel{}}
  182. ms := orgTreeCall(orgList, mi)
  183. labels = append(labels, ms)
  184. }
  185. org.Children = labels
  186. return org
  187. }
  188. // SetOrgPage 设置org页面数据
  189. func (e *SysOrgService) SetOrgPage(c *dto.SysOrgGetPageReq, p *permission.DataPermission) (m []models.SysOrg, err error) {
  190. var list []models.SysOrg
  191. err = e.getList(c, &list, p)
  192. for i := 0; i < len(list); i++ {
  193. if list[i].ParentId != 0 {
  194. continue
  195. }
  196. info := e.orgPageCall(&list, list[i])
  197. m = append(m, info)
  198. }
  199. return
  200. }
  201. func (e *SysOrgService) orgPageCall(orgList *[]models.SysOrg, menu models.SysOrg) models.SysOrg {
  202. list := *orgList
  203. orgArr := make([]models.SysOrg, 0)
  204. for j := 0; j < len(list); j++ {
  205. if menu.OrgId != list[j].ParentId {
  206. continue
  207. }
  208. mi := models.SysOrg{}
  209. mi.OrgId = list[j].OrgId
  210. mi.ParentId = list[j].ParentId
  211. mi.OrgPath = list[j].OrgPath
  212. mi.OrgName = list[j].OrgName
  213. mi.Sort = list[j].Sort
  214. mi.Leader = list[j].Leader
  215. mi.Phone = list[j].Phone
  216. mi.Email = list[j].Email
  217. mi.Status = list[j].Status
  218. mi.CreatedAt = list[j].CreatedAt
  219. mi.Children = []models.SysOrg{}
  220. ms := e.orgPageCall(orgList, mi)
  221. orgArr = append(orgArr, ms)
  222. }
  223. menu.Children = orgArr
  224. return menu
  225. }
  226. // GetWithRoleId 获取角色的部门ID集合
  227. func (e *SysOrgService) GetWithRoleId(roleId int) ([]int, error) {
  228. orgIds := make([]int, 0)
  229. orgList := make([]dto.OrgIdList, 0)
  230. if err := e.Orm.Table("sys_role_org").
  231. Select("sys_role_org.org_id").
  232. Joins("LEFT JOIN sys_org on sys_org.org_id=sys_role_org.org_id").
  233. Where("role_id = ? ", roleId).
  234. Where(" sys_role_org.org_id not in(select sys_org.parent_id from sys_role_org LEFT JOIN sys_org on sys_org.org_id=sys_role_org.org_id where role_id =? )", roleId).
  235. Find(&orgList).Error; err != nil {
  236. return nil, err
  237. }
  238. for i := 0; i < len(orgList); i++ {
  239. orgIds = append(orgIds, orgList[i].OrgId)
  240. }
  241. return orgIds, nil
  242. }
  243. func (e *SysOrgService) SetOrgLabel(p *permission.DataPermission) (m []dto.OrgLabel, err error) {
  244. list := make([]models.SysOrg, 0)
  245. err = e.Orm.Scopes(
  246. permission.Permission((&models.SysOrg{}).TableName(), p),
  247. ).Find(&list).Error
  248. if err != nil {
  249. log.Errorf("find org list error, %s", err.Error())
  250. return
  251. }
  252. m = make([]dto.OrgLabel, 0)
  253. var item dto.OrgLabel
  254. for i := range list {
  255. if list[i].ParentId != 0 {
  256. continue
  257. }
  258. item = dto.OrgLabel{}
  259. item.Id = list[i].OrgId
  260. item.Label = list[i].OrgName
  261. orgInfo := orgLabelCall(&list, item)
  262. m = append(m, orgInfo)
  263. }
  264. return
  265. }
  266. // orgLabelCall
  267. func orgLabelCall(orgList *[]models.SysOrg, org dto.OrgLabel) dto.OrgLabel {
  268. list := *orgList
  269. var mi dto.OrgLabel
  270. labels := make([]dto.OrgLabel, 0)
  271. for j := 0; j < len(list); j++ {
  272. if org.Id != list[j].ParentId {
  273. continue
  274. }
  275. mi = dto.OrgLabel{Id: list[j].OrgId, Label: list[j].OrgName, Children: []dto.OrgLabel{}}
  276. ms := orgLabelCall(orgList, mi)
  277. labels = append(labels, ms)
  278. }
  279. org.Children = labels
  280. return org
  281. }