sys_org.go 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  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) (m []dto.OrgLabel, err error) {
  151. var list []models.SysOrg
  152. var data models.SysOrg
  153. err = e.Orm.Model(&data).Where("org_id = ? or parent_id = ? ", c.GetId(), c.GetId()).Find(&list).Error
  154. if err != nil {
  155. e.Log.Errorf("db error:%s", err)
  156. return
  157. }
  158. m = make([]dto.OrgLabel, 0)
  159. for i := 0; i < len(list); i++ {
  160. //if list[i].ParentId != 0 {
  161. // continue
  162. //}
  163. e := dto.OrgLabel{}
  164. e.Id = list[i].OrgId
  165. e.Label = list[i].OrgName
  166. orgInfo := orgTreeCall(&list, e)
  167. m = append(m, orgInfo)
  168. }
  169. return
  170. }
  171. // Call 递归构造组织数据
  172. func orgTreeCall(orgList *[]models.SysOrg, org dto.OrgLabel) dto.OrgLabel {
  173. list := *orgList
  174. labels := make([]dto.OrgLabel, 0)
  175. for j := 0; j < len(list); j++ {
  176. if org.Id != list[j].ParentId {
  177. continue
  178. }
  179. mi := dto.OrgLabel{Id: list[j].OrgId, Label: list[j].OrgName, Children: []dto.OrgLabel{}}
  180. ms := orgTreeCall(orgList, mi)
  181. labels = append(labels, ms)
  182. }
  183. org.Children = labels
  184. return org
  185. }
  186. // SetOrgPage 设置org页面数据
  187. func (e *SysOrgService) SetOrgPage(c *dto.SysOrgGetPageReq, p *permission.DataPermission) (m []models.SysOrg, err error) {
  188. var list []models.SysOrg
  189. err = e.getList(c, &list, p)
  190. for i := 0; i < len(list); i++ {
  191. if list[i].ParentId != 0 {
  192. continue
  193. }
  194. info := e.orgPageCall(&list, list[i])
  195. m = append(m, info)
  196. }
  197. return
  198. }
  199. func (e *SysOrgService) orgPageCall(orgList *[]models.SysOrg, menu models.SysOrg) models.SysOrg {
  200. list := *orgList
  201. orgArr := make([]models.SysOrg, 0)
  202. for j := 0; j < len(list); j++ {
  203. if menu.OrgId != list[j].ParentId {
  204. continue
  205. }
  206. mi := models.SysOrg{}
  207. mi.OrgId = list[j].OrgId
  208. mi.ParentId = list[j].ParentId
  209. mi.OrgPath = list[j].OrgPath
  210. mi.OrgName = list[j].OrgName
  211. mi.Sort = list[j].Sort
  212. mi.Leader = list[j].Leader
  213. mi.Phone = list[j].Phone
  214. mi.Email = list[j].Email
  215. mi.Status = list[j].Status
  216. mi.CreatedAt = list[j].CreatedAt
  217. mi.Children = []models.SysOrg{}
  218. ms := e.orgPageCall(orgList, mi)
  219. orgArr = append(orgArr, ms)
  220. }
  221. menu.Children = orgArr
  222. return menu
  223. }
  224. // GetWithRoleId 获取角色的部门ID集合
  225. func (e *SysOrgService) GetWithRoleId(roleId int) ([]int, error) {
  226. orgIds := make([]int, 0)
  227. orgList := make([]dto.OrgIdList, 0)
  228. if err := e.Orm.Table("sys_role_org").
  229. Select("sys_role_org.org_id").
  230. Joins("LEFT JOIN sys_org on sys_org.org_id=sys_role_org.org_id").
  231. Where("role_id = ? ", roleId).
  232. 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).
  233. Find(&orgList).Error; err != nil {
  234. return nil, err
  235. }
  236. for i := 0; i < len(orgList); i++ {
  237. orgIds = append(orgIds, orgList[i].OrgId)
  238. }
  239. return orgIds, nil
  240. }
  241. func (e *SysOrgService) SetOrgLabel(p *permission.DataPermission) (m []dto.OrgLabel, err error) {
  242. list := make([]models.SysOrg, 0)
  243. err = e.Orm.Scopes(
  244. permission.Permission((&models.SysOrg{}).TableName(), p),
  245. ).Find(&list).Error
  246. if err != nil {
  247. log.Error("find org list error, %s", err.Error())
  248. return
  249. }
  250. m = make([]dto.OrgLabel, 0)
  251. var item dto.OrgLabel
  252. for i := range list {
  253. if list[i].ParentId != 0 {
  254. continue
  255. }
  256. item = dto.OrgLabel{}
  257. item.Id = list[i].OrgId
  258. item.Label = list[i].OrgName
  259. orgInfo := orgLabelCall(&list, item)
  260. m = append(m, orgInfo)
  261. }
  262. return
  263. }
  264. // orgLabelCall
  265. func orgLabelCall(orgList *[]models.SysOrg, org dto.OrgLabel) dto.OrgLabel {
  266. list := *orgList
  267. var mi dto.OrgLabel
  268. labels := make([]dto.OrgLabel, 0)
  269. for j := 0; j < len(list); j++ {
  270. if org.Id != list[j].ParentId {
  271. continue
  272. }
  273. mi = dto.OrgLabel{Id: list[j].OrgId, Label: list[j].OrgName, Children: []dto.OrgLabel{}}
  274. ms := orgLabelCall(orgList, mi)
  275. labels = append(labels, ms)
  276. }
  277. org.Children = labels
  278. return org
  279. }