sync_staff_task.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. package HTtask
  2. import (
  3. "errors"
  4. "eta/eta_bridge/global"
  5. "eta/eta_bridge/models/ht/oa"
  6. "eta/eta_bridge/models/ht/wx_crm"
  7. "fmt"
  8. "github.com/robfig/cron/v3"
  9. )
  10. func StartCronJob() {
  11. // 创建一个新的 cron 实例
  12. c := cron.New(cron.WithSeconds())
  13. // 添加定时任务
  14. _, err := c.AddFunc("*/5 * * * * *", func() {
  15. syncCrmOAInfo()
  16. })
  17. if err != nil {
  18. fmt.Println("添加定时任务失败:", err)
  19. return
  20. }
  21. // 启动定时任务
  22. c.Start()
  23. // 在程序结束时停止定时任务
  24. go func() {
  25. <-make(chan struct{})
  26. c.Stop()
  27. }()
  28. }
  29. func SyncETA() {
  30. //list, err := oa.GetSubCompanyList()
  31. //if err != nil {
  32. // return
  33. //}
  34. //var SysDepartmentList []eta.SysDepartment
  35. //for _, item := range list {
  36. // sysDepartment := eta.SysDepartment{
  37. // DepartmentName: item.Subcompanyname,
  38. // OutID: item.Companyid,
  39. // }
  40. // SysDepartmentList = append(SysDepartmentList, sysDepartment)
  41. //}
  42. }
  43. func syncCrmOAInfo() {
  44. //先同步分公司列表
  45. subCompanylist, err := oa.GetSubCompanyList()
  46. if err != nil {
  47. global.FILE_LOG.Error("获取海通OA子公司数据失败:", err.Error())
  48. }
  49. var sysSubCompanyList []wx_crm.SysDepartment
  50. for _, item := range subCompanylist {
  51. sysDepartment := wx_crm.SysDepartment{
  52. SysDepartmentName: item.SUBCOMPANYNAME,
  53. Sort: item.SHOWORDEROFTREE,
  54. Level: item.TLEVEL,
  55. OutId: item.ID,
  56. Type: wx_crm.SubCompany,
  57. ParentId: item.SUPSUBCOMID,
  58. }
  59. sysSubCompanyList = append(sysSubCompanyList, sysDepartment)
  60. }
  61. err = wx_crm.BatchInsertOrUpdate(sysSubCompanyList)
  62. if err != nil {
  63. global.FILE_LOG.Error("同步海通OA子公司数据失败:", err.Error())
  64. return
  65. }
  66. //同步部门信息
  67. DepartmentList, err := oa.GetDepartMentList()
  68. if err != nil {
  69. global.FILE_LOG.Error("获取海通部门数据失败:", err.Error())
  70. }
  71. var sysDepartmentList []wx_crm.SysDepartment
  72. for _, item := range DepartmentList {
  73. sysDepartment := wx_crm.SysDepartment{
  74. SysDepartmentName: item.DEPARTMENTNAME,
  75. Sort: item.SHOWORDEROFTREE,
  76. Level: item.TLEVEL,
  77. OutId: item.ID,
  78. Type: wx_crm.Department,
  79. ParentId: item.SUPDEPID,
  80. }
  81. if sysDepartment.Level == 2 && sysDepartment.ParentId == 0 {
  82. sysDepartment.ParentId = item.SUBCOMPANYID1
  83. }
  84. sysDepartmentList = append(sysDepartmentList, sysDepartment)
  85. }
  86. err = wx_crm.BatchInsertOrUpdate(sysDepartmentList)
  87. if err != nil {
  88. global.FILE_LOG.Error("同步海通OA子公司数据失败:", err.Error())
  89. return
  90. }
  91. //同步员工信息
  92. staffList, err := oa.GetEmployeeList()
  93. if err != nil {
  94. global.FILE_LOG.Error("获取海通OA员工数据失败:", err.Error())
  95. }
  96. var Employee []wx_crm.SysUser
  97. for _, item := range staffList {
  98. idList, departmentErr := GetEmployeeDepartmentList(item.DEPARTMENTID)
  99. if departmentErr != nil {
  100. global.FILE_LOG.Error("获取员工部门组织架构失败:", departmentErr.Error(), "跳过同步员工", item.WORKCODE)
  101. continue
  102. }
  103. fillSize := 4 - len(idList)
  104. var departments []int
  105. if fillSize > 0 {
  106. for i := 0; i < fillSize; i++ {
  107. departments = append(departments, 0)
  108. }
  109. }
  110. sysUser := wx_crm.SysUser{
  111. SysUserName: item.LOGINID,
  112. SysRealName: item.LASTNAME,
  113. Email: item.EMAIL,
  114. Phone: item.MOBILE,
  115. AreaCode: "86",
  116. SysRoleId: 63,
  117. SysRoleName: "普通用户",
  118. SysDepartmentId: item.DEPARTMENTID,
  119. SysDepartmentId1: departments[3],
  120. SysDepartmentId2: departments[2],
  121. SysDepartmentId3: departments[1],
  122. SysDepartmentId4: departments[0],
  123. PositionCode: item.SECLEVEL,
  124. IsEnabled: true,
  125. }
  126. Employee = append(Employee, sysUser)
  127. }
  128. err = wx_crm.BatchInsertOrUpdateUser(Employee)
  129. if err != nil {
  130. global.FILE_LOG.Error("同步海通OA员工数据失败:", err.Error())
  131. return
  132. }
  133. }
  134. func GetEmployeeDepartmentList(departmentId int) (departmentIdList []int, err error) {
  135. departmentList, err := wx_crm.GetDepartmentList()
  136. if err != nil {
  137. global.FILE_LOG.Error("获取部门信息失败", err.Error())
  138. return
  139. }
  140. var currentDepartment wx_crm.SysDepartment
  141. found := false
  142. for _, item := range departmentList {
  143. if item.OutId == departmentId {
  144. currentDepartment = item
  145. found = true
  146. break
  147. }
  148. }
  149. if found {
  150. departmentIdList = append(departmentIdList, currentDepartment.OutId)
  151. subList := DepartmentList(currentDepartment.ParentId, departmentList, currentDepartment.Level-1)
  152. departmentIdList = append(departmentIdList, subList...)
  153. } else {
  154. err = errors.New("当前部门id不存在")
  155. }
  156. return
  157. }
  158. func DepartmentList(departmentId int, departmentList []wx_crm.SysDepartment, level int) (departmentIdList []int) {
  159. if level == 0 || departmentId == 0 {
  160. return
  161. }
  162. for _, item := range departmentList {
  163. if item.OutId == departmentId {
  164. if level > 1 && item.Type == wx_crm.SubCompany {
  165. continue
  166. }
  167. if level == 1 && item.Type == wx_crm.Department {
  168. continue
  169. }
  170. departmentIdList = append(departmentIdList, item.OutId)
  171. subSubDepartments := DepartmentList(item.ParentId, departmentList, item.Level-1)
  172. departmentIdList = append(departmentIdList, subSubDepartments...)
  173. }
  174. }
  175. return departmentIdList
  176. }