sync_staff_task.go 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. package HTtask
  2. import (
  3. "errors"
  4. "eta/eta_bridge/global"
  5. "eta/eta_bridge/models/eta"
  6. "eta/eta_bridge/models/ht/oa"
  7. "eta/eta_bridge/models/ht/wx_crm"
  8. "fmt"
  9. "github.com/robfig/cron/v3"
  10. )
  11. func StartCronJob() {
  12. // 创建一个新的 cron 实例
  13. c := cron.New(cron.WithSeconds())
  14. //constr := "0 17 * * * *"
  15. //constr := "*/5 * * * * *"
  16. var constr string
  17. if global.CONFIG.HTFutures.SyncTask.SyncTaskInterval == "" {
  18. constr = "0 0 0 * * *"
  19. } else {
  20. constr = global.CONFIG.HTFutures.SyncTask.SyncTaskInterval
  21. }
  22. //constr := "0 0 0 * * *"
  23. // 添加定时任务
  24. _, err := c.AddFunc(constr, func() {
  25. go syncCrmOAInfo()
  26. go SyncETA()
  27. })
  28. if err != nil {
  29. fmt.Println("添加定时任务失败:", err)
  30. return
  31. }
  32. // 启动定时任务
  33. c.Start()
  34. // 在程序结束时停止定时任务
  35. go func() {
  36. <-make(chan struct{})
  37. c.Stop()
  38. }()
  39. }
  40. func SyncETA() {
  41. roleId := global.CONFIG.HTFutures.SyncTask.SyncRoleId
  42. role, err := eta.GetSysRoleById(roleId)
  43. if err != nil {
  44. global.FILE_LOG.Error("获取角色信息失败:", err.Error())
  45. return
  46. }
  47. //先同步分公司列表
  48. subCompanylist, err := oa.GetSubCompanyList()
  49. if err != nil {
  50. global.FILE_LOG.Error("获取海通OA子公司数据失败:", err.Error())
  51. }
  52. var sysSubCompanyList []eta.SysDepartment
  53. for _, item := range subCompanylist {
  54. sysDepartment := eta.SysDepartment{
  55. DepartmentId: item.ID,
  56. DepartmentName: item.SUBCOMPANYNAME,
  57. Sort: item.SHOWORDEROFTREE,
  58. }
  59. sysSubCompanyList = append(sysSubCompanyList, sysDepartment)
  60. }
  61. err = eta.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 []eta.SysGroup
  72. for _, item := range DepartmentList {
  73. sysDepartment := eta.SysGroup{
  74. GroupId: item.ID,
  75. DepartmentId: item.SUBCOMPANYID1,
  76. GroupName: item.DEPARTMENTNAME,
  77. ParentId: item.SUPDEPID,
  78. Sort: item.SHOWORDEROFTREE,
  79. }
  80. sysDepartmentList = append(sysDepartmentList, sysDepartment)
  81. }
  82. err = eta.BatchInsertOrUpdateGroup(sysDepartmentList)
  83. if err != nil {
  84. global.FILE_LOG.Error("同步海通部门数据数据失败:", err.Error())
  85. return
  86. }
  87. //同步员工信息
  88. staffList, err := oa.GetEmployeeList()
  89. if err != nil {
  90. global.FILE_LOG.Error("获取海通OA员工数据失败:", err.Error())
  91. }
  92. var Employee []eta.Admin
  93. for _, item := range staffList {
  94. if item.LOGINID == "" {
  95. continue
  96. }
  97. var department *eta.SysDepartment
  98. department, err = eta.GetDepartmentById(item.SUBCOMPANYID1)
  99. if err != nil {
  100. global.FILE_LOG.Error("获取员工子公司信息失败:", err.Error(), "跳过同步员工", item.WORKCODE)
  101. continue
  102. }
  103. var group *eta.SysGroup
  104. group, err = eta.GetSysGroupByGroupId(item.DEPARTMENTID)
  105. if err != nil {
  106. global.FILE_LOG.Error("获取员工部门组织架信息失败:", err.Error(), "跳过同步员工", item.WORKCODE)
  107. continue
  108. }
  109. sysUser := eta.Admin{
  110. AdminName: item.LOGINID,
  111. RealName: item.LASTNAME,
  112. Enabled: 1,
  113. Email: item.EMAIL,
  114. //Role: role.RoleName,
  115. Mobile: item.MOBILE,
  116. RoleType: 0,
  117. RoleId: role.RoleId,
  118. RoleName: role.RoleName,
  119. RoleTypeCode: role.RoleTypeCode,
  120. DepartmentId: item.SUBCOMPANYID1,
  121. DepartmentName: department.DepartmentName,
  122. GroupId: item.DEPARTMENTID,
  123. GroupName: group.GroupName,
  124. EmployeeId: item.WORKCODE,
  125. }
  126. Employee = append(Employee, sysUser)
  127. }
  128. err = eta.BatchInsertOrUpdateAdmin(Employee)
  129. if err != nil {
  130. global.FILE_LOG.Error("同步海通OA员工数据失败:", err.Error())
  131. return
  132. }
  133. }
  134. func syncCrmOAInfo() {
  135. roleId := global.CONFIG.HTFutures.SyncTask.SyncRoleId
  136. role, err := wx_crm.GetSysRoleById(roleId)
  137. if err != nil {
  138. global.FILE_LOG.Error("获取角色信息失败:", err.Error())
  139. return
  140. }
  141. //先同步分公司列表
  142. subCompanylist, err := oa.GetSubCompanyList()
  143. if err != nil {
  144. global.FILE_LOG.Error("获取海通OA子公司数据失败:", err.Error())
  145. }
  146. var sysSubCompanyList []wx_crm.SysDepartment
  147. for _, item := range subCompanylist {
  148. sysDepartment := wx_crm.SysDepartment{
  149. SysDepartmentName: item.SUBCOMPANYNAME,
  150. Sort: item.SHOWORDEROFTREE,
  151. Level: item.TLEVEL,
  152. OutId: item.ID,
  153. Type: wx_crm.SubCompany,
  154. ParentId: item.SUPSUBCOMID,
  155. }
  156. sysSubCompanyList = append(sysSubCompanyList, sysDepartment)
  157. }
  158. err = wx_crm.BatchInsertOrUpdate(sysSubCompanyList)
  159. if err != nil {
  160. global.FILE_LOG.Error("同步海通OA子公司数据失败:", err.Error())
  161. return
  162. }
  163. //同步部门信息
  164. DepartmentList, err := oa.GetDepartMentList()
  165. if err != nil {
  166. global.FILE_LOG.Error("获取海通部门数据失败:", err.Error())
  167. }
  168. var sysDepartmentList []wx_crm.SysDepartment
  169. for _, item := range DepartmentList {
  170. sysDepartment := wx_crm.SysDepartment{
  171. SysDepartmentName: item.DEPARTMENTNAME,
  172. Sort: item.SHOWORDEROFTREE,
  173. Level: item.TLEVEL,
  174. OutId: item.ID,
  175. Type: wx_crm.Department,
  176. ParentId: item.SUPDEPID,
  177. }
  178. if sysDepartment.Level == 2 && sysDepartment.ParentId == 0 {
  179. sysDepartment.ParentId = item.SUBCOMPANYID1
  180. }
  181. sysDepartmentList = append(sysDepartmentList, sysDepartment)
  182. }
  183. err = wx_crm.BatchInsertOrUpdate(sysDepartmentList)
  184. if err != nil {
  185. global.FILE_LOG.Error("同步海通部门数据失败:", err.Error())
  186. return
  187. }
  188. //同步员工信息
  189. staffList, err := oa.GetEmployeeList()
  190. if err != nil {
  191. global.FILE_LOG.Error("获取海通OA员工数据失败:", err.Error())
  192. }
  193. var Employee []wx_crm.SysUser
  194. for _, item := range staffList {
  195. if item.LOGINID == "" {
  196. continue
  197. }
  198. idList, departmentErr := GetEmployeeDepartmentList(item.DEPARTMENTID)
  199. if departmentErr != nil {
  200. global.FILE_LOG.Error("获取员工部门组织架构失败:", departmentErr.Error(), "跳过同步员工", item.WORKCODE)
  201. continue
  202. }
  203. fillSize := 4 - len(idList)
  204. var departments []int
  205. departments = append(departments, idList...)
  206. if fillSize > 0 {
  207. for i := 0; i < fillSize; i++ {
  208. departments = append([]int{0}, departments...)
  209. }
  210. }
  211. sysUser := wx_crm.SysUser{
  212. SysUserName: item.LOGINID,
  213. SysRealName: item.LASTNAME,
  214. Email: item.EMAIL,
  215. Phone: item.MOBILE,
  216. AreaCode: "86",
  217. SysRoleId: role.SysRoleId,
  218. SysRoleName: role.SysRoleName,
  219. SysDepartmentId: item.DEPARTMENTID,
  220. SysDepartmentId1: departments[3],
  221. SysDepartmentId2: departments[2],
  222. SysDepartmentId3: departments[1],
  223. SysDepartmentId4: departments[0],
  224. PositionCode: item.SECLEVEL,
  225. IsEnabled: true,
  226. }
  227. Employee = append(Employee, sysUser)
  228. }
  229. err = wx_crm.BatchInsertOrUpdateUser(Employee)
  230. if err != nil {
  231. global.FILE_LOG.Error("同步海通OA员工数据失败:", err.Error())
  232. return
  233. }
  234. }
  235. func GetEmployeeDepartmentList(departmentId int) (departmentIdList []int, err error) {
  236. departmentList, err := wx_crm.GetDepartmentList()
  237. if err != nil {
  238. global.FILE_LOG.Error("获取部门信息失败", err.Error())
  239. return
  240. }
  241. var currentDepartment wx_crm.SysDepartment
  242. found := false
  243. for _, item := range departmentList {
  244. if item.OutId == departmentId {
  245. currentDepartment = item
  246. found = true
  247. break
  248. }
  249. }
  250. if found {
  251. departmentIdList = append(departmentIdList, currentDepartment.OutId)
  252. subList := TraceDepartmentList(currentDepartment.ParentId, departmentList, currentDepartment.Level-1)
  253. departmentIdList = append(departmentIdList, subList...)
  254. } else {
  255. err = errors.New("当前部门id不存在")
  256. }
  257. return
  258. }
  259. func TraceDepartmentList(departmentId int, departmentList []wx_crm.SysDepartment, level int) (departmentIdList []int) {
  260. if level == 0 || departmentId == 0 {
  261. return
  262. }
  263. for _, item := range departmentList {
  264. if item.OutId == departmentId {
  265. if level > 1 && item.Type == wx_crm.SubCompany {
  266. continue
  267. }
  268. if level == 1 && item.Type == wx_crm.Department {
  269. continue
  270. }
  271. departmentIdList = append(departmentIdList, item.OutId)
  272. subSubDepartments := TraceDepartmentList(item.ParentId, departmentList, item.Level-1)
  273. departmentIdList = append(departmentIdList, subSubDepartments...)
  274. }
  275. }
  276. return departmentIdList
  277. }