user.go 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388
  1. package xiangyu
  2. import (
  3. "errors"
  4. "eta/eta_bridge/global"
  5. "eta/eta_bridge/models/eta"
  6. "eta/eta_bridge/services/xiangyu"
  7. "fmt"
  8. "strings"
  9. "time"
  10. )
  11. // SyncUser
  12. // @Description: 全量同步用户
  13. // @author: Roc
  14. // @datetime 2024-01-22 10:28:39
  15. // @return err error
  16. func SyncUser() (err error) {
  17. if global.CONFIG.Xiangyu.DefaultRoleId <= 0 {
  18. err = errors.New("默认角色ID不能为空")
  19. return
  20. }
  21. // 指定的角色
  22. roleInfo, err := eta.GetSysRoleById(global.CONFIG.Xiangyu.DefaultRoleId)
  23. if err != nil {
  24. return
  25. }
  26. // 获取所有部门和分组
  27. departmentMap, groupMap, userMap, err := getAllDepartmentAndGroup()
  28. if err != nil {
  29. return
  30. }
  31. // 获取token
  32. tokenId, err := xiangyu.Login()
  33. if err != nil {
  34. return
  35. }
  36. //tokenId := `228f7024-1966-47bf-86b5-9ec61ac149ed`
  37. defer func() {
  38. // 获取用户列表
  39. tmpErr := xiangyu.Logout(tokenId)
  40. if tmpErr != nil {
  41. fmt.Println("退出失败:", tmpErr.Error())
  42. }
  43. }()
  44. for {
  45. // 获取用户列表
  46. userResp, tmpErr := xiangyu.SyncTask(tokenId)
  47. if tmpErr != nil {
  48. err = tmpErr
  49. return
  50. }
  51. // 没有数据了,那么结束同步了
  52. if userResp == nil || userResp.Out.ObjectCode == `` {
  53. return
  54. }
  55. // 是否同步成功
  56. var isSync bool
  57. var etaUserId, message string
  58. // 处理用户信息,将象屿用户与eta用户做关联
  59. tmpErr = handleUser(userResp.Out.Data, userResp.Out.Id, departmentMap, groupMap, userMap, roleInfo)
  60. if tmpErr == nil {
  61. isSync = true
  62. if etUserInfo, ok := userMap[userResp.Out.Data.Username]; ok {
  63. etaUserId = fmt.Sprint(etUserInfo.AdminId)
  64. }
  65. } else {
  66. message = tmpErr.Error()
  67. }
  68. // 结束单次同步
  69. err = xiangyu.SyncFinish(tokenId, userResp.Out.ObjectCode, userResp.Out.ObjectType, userResp.Out.Id, etaUserId, message, isSync)
  70. if err != nil {
  71. return
  72. }
  73. }
  74. return
  75. }
  76. // PullUser
  77. // @Description: 增量同步用户
  78. // @author: Roc
  79. // @datetime 2024-01-23 18:01:27
  80. // @return err error
  81. func PullUser() (err error) {
  82. if global.CONFIG.Xiangyu.DefaultRoleId <= 0 {
  83. err = errors.New("默认角色ID不能为空")
  84. return
  85. }
  86. defer func() {
  87. if err != nil {
  88. global.FILE_LOG.Info("同步增量用户失败:" + err.Error())
  89. }
  90. }()
  91. // 指定的角色
  92. roleInfo, err := eta.GetSysRoleById(global.CONFIG.Xiangyu.DefaultRoleId)
  93. if err != nil {
  94. return
  95. }
  96. // 获取所有部门和分组
  97. departmentMap, groupMap, userMap, err := getAllDepartmentAndGroup()
  98. if err != nil {
  99. return
  100. }
  101. // 获取token
  102. tokenId, err := xiangyu.Login()
  103. if err != nil {
  104. return
  105. }
  106. defer func() {
  107. // 获取用户列表
  108. tmpErr := xiangyu.Logout(tokenId)
  109. if tmpErr != nil {
  110. fmt.Println("退出失败:", tmpErr.Error())
  111. }
  112. }()
  113. for {
  114. // 获取增量用户列表
  115. userResp, tmpErr := xiangyu.PullTask(tokenId)
  116. if tmpErr != nil {
  117. err = tmpErr
  118. return
  119. }
  120. // 没有数据了,那么结束同步了
  121. if userResp == nil || userResp.Out.ObjectCode == `` {
  122. return
  123. }
  124. // 是否同步成功
  125. var isSync bool
  126. var etaUserId, message string
  127. // 处理用户信息,将象屿用户与eta用户做关联
  128. tmpErr = handleUser(userResp.Out.Data, userResp.Out.Id, departmentMap, groupMap, userMap, roleInfo)
  129. if tmpErr == nil {
  130. isSync = true
  131. if etUserInfo, ok := userMap[userResp.Out.Data.Username]; ok {
  132. etaUserId = fmt.Sprint(etUserInfo.AdminId)
  133. }
  134. } else {
  135. message = tmpErr.Error()
  136. }
  137. // 结束单次增量同步
  138. err = xiangyu.PullFinish(tokenId, userResp.Out.TaskId, etaUserId, message, isSync)
  139. if err != nil {
  140. return
  141. }
  142. }
  143. return
  144. }
  145. // TaskPullUser
  146. // @Description: 定时增量同步用户
  147. // @author: Roc
  148. // @datetime 2024-01-23 18:03:04
  149. func TaskPullUser() {
  150. PullUser()
  151. return
  152. }
  153. // getAllDepartmentAndGroup
  154. // @Description: 获取所有的部门和分组
  155. // @author: Roc
  156. // @datetime 2024-01-18 17:39:14
  157. // @return departmentMap map[string]*eta.SysDepartment
  158. // @return groupMap map[string]*eta.SysGroup
  159. // @return err error
  160. func getAllDepartmentAndGroup() (departmentMap map[string]*eta.SysDepartment, groupMap map[string]*eta.SysGroup, userMap map[string]*eta.Admin, err error) {
  161. // 获取所有的部门
  162. departmentList, err := eta.GetAllDepartment()
  163. if err != nil {
  164. return
  165. }
  166. // 部门信息
  167. departmentMap = make(map[string]*eta.SysDepartment)
  168. for _, department := range departmentList {
  169. departmentMap[department.OutID] = department
  170. }
  171. // 获取所有的分组
  172. groupList, err := eta.GetAllSysGroup()
  173. if err != nil {
  174. return
  175. }
  176. // 部门信息
  177. groupMap = make(map[string]*eta.SysGroup)
  178. for _, group := range groupList {
  179. groupMap[group.OutID] = group
  180. }
  181. // 获取所有的用户
  182. adminList, err := eta.GetAllSysUser()
  183. if err != nil {
  184. return
  185. }
  186. // 部门信息
  187. userMap = make(map[string]*eta.Admin)
  188. for _, admin := range adminList {
  189. userMap[admin.AdminName] = admin
  190. }
  191. return
  192. }
  193. // handleUser
  194. // @Description: 用户信息处理
  195. // @author: Roc
  196. // @datetime 2024-01-18 18:00:04
  197. // @param xyUserInfo xiangyu.UserData
  198. // @param departmentMap map[string]*eta.SysDepartment
  199. // @param groupMap map[string]*eta.SysGroup
  200. // @param userMap map[string]*eta.Admin
  201. // @return err error
  202. func handleUser(xyUserInfo xiangyu.UserData, xyUserId string, departmentMap map[string]*eta.SysDepartment, groupMap map[string]*eta.SysGroup, userMap map[string]*eta.Admin, roleInfo *eta.SysRole) (err error) {
  203. // 判断公司id是否存在,如果不存在,那么就去创建
  204. departmentInfo, ok := departmentMap[xyUserInfo.CompanyId]
  205. if !ok {
  206. departmentInfo = &eta.SysDepartment{
  207. DepartmentId: 0,
  208. DepartmentName: xyUserInfo.CompanyName,
  209. OutID: xyUserInfo.CompanyId,
  210. CreateTime: time.Now(),
  211. Sort: 0,
  212. }
  213. // 如果没有的话,那么就创建该部门
  214. err = departmentInfo.Create()
  215. if err != nil {
  216. return
  217. }
  218. departmentMap[xyUserInfo.CompanyId] = departmentInfo
  219. }
  220. // 判断部门id是否存在,如果不存在,那么就去创建
  221. groupInfo, ok := groupMap[xyUserInfo.DepartId]
  222. if !ok {
  223. groupInfo = &eta.SysGroup{
  224. GroupId: 0,
  225. DepartmentId: departmentInfo.DepartmentId,
  226. GroupName: xyUserInfo.DepartmentName,
  227. CreateTime: time.Now(),
  228. ParentId: 0,
  229. Sort: 0,
  230. OutID: xyUserInfo.DepartId,
  231. }
  232. // 如果没有的话,那么就创建该分组
  233. err = groupInfo.Create()
  234. if err != nil {
  235. return
  236. }
  237. groupMap[xyUserInfo.DepartId] = groupInfo
  238. }
  239. enabled := 1
  240. if xyUserInfo.IsDisabled {
  241. enabled = 0
  242. }
  243. // 判断用户是否存在,如果不存在,那么就去创建
  244. userInfo, ok := userMap[xyUserInfo.Username]
  245. if !ok {
  246. userInfo = &eta.Admin{
  247. AdminId: 0,
  248. AdminName: xyUserInfo.Username,
  249. AdminAvatar: "",
  250. RealName: xyUserInfo.FullName,
  251. Password: xyUserInfo.Password,
  252. //LastUpdatedPasswordTime: time.Time{},
  253. Enabled: enabled,
  254. Email: "",
  255. //LastLoginTime: time.Time{},
  256. CreatedTime: time.Now(),
  257. LastUpdatedTime: time.Now(),
  258. //Role: roleInfo.,
  259. Mobile: "",
  260. RoleType: 0,
  261. RoleId: roleInfo.RoleId,
  262. RoleName: roleInfo.RoleName,
  263. RoleTypeCode: roleInfo.RoleTypeCode,
  264. DepartmentId: departmentInfo.DepartmentId,
  265. DepartmentName: departmentInfo.DepartmentName,
  266. GroupId: groupInfo.GroupId,
  267. GroupName: groupInfo.GroupName,
  268. Authority: 0,
  269. Position: xyUserInfo.PositionName,
  270. //DisableTime: time.Time{},
  271. ChartPermission: 0,
  272. EdbPermission: 0,
  273. MysteelChemicalPermission: 0,
  274. OpenId: "",
  275. UnionId: "",
  276. PredictEdbPermission: 0,
  277. Province: "",
  278. ProvinceCode: "",
  279. City: "",
  280. CityCode: "",
  281. EmployeeId: xyUserInfo.EmployeeNo,
  282. TelAreaCode: "",
  283. OutID: xyUserId,
  284. }
  285. if strings.Contains(roleInfo.RoleTypeCode, "researcher") {
  286. userInfo.Role = "researcher"
  287. } else if strings.Contains(userInfo.RoleTypeCode, "seller") {
  288. userInfo.Role = "sales"
  289. } else {
  290. userInfo.Role = "admin"
  291. }
  292. // 如果没有的话,那么就创建该用户
  293. err = userInfo.Create()
  294. if err != nil {
  295. return
  296. }
  297. } else {
  298. updateColList := make([]string, 0)
  299. //状态
  300. if userInfo.Enabled != enabled {
  301. updateColList = append(updateColList, "Enabled")
  302. userInfo.Enabled = enabled
  303. }
  304. // 部门
  305. if userInfo.DepartmentId != departmentInfo.DepartmentId {
  306. updateColList = append(updateColList, "DepartmentId", "DepartmentName")
  307. userInfo.DepartmentId = departmentInfo.DepartmentId
  308. userInfo.DepartmentName = departmentInfo.DepartmentName
  309. }
  310. // 分组
  311. if userInfo.GroupId != groupInfo.GroupId {
  312. updateColList = append(updateColList, "GroupId", "GroupName")
  313. userInfo.GroupId = groupInfo.GroupId
  314. userInfo.GroupName = groupInfo.GroupName
  315. }
  316. // 职位
  317. if userInfo.Position != xyUserInfo.PositionName {
  318. updateColList = append(updateColList, "Position")
  319. userInfo.Position = xyUserInfo.PositionName
  320. }
  321. // 姓名
  322. if userInfo.RealName != xyUserInfo.FullName {
  323. updateColList = append(updateColList, "RealName")
  324. userInfo.RealName = xyUserInfo.FullName
  325. }
  326. if len(updateColList) > 0 {
  327. updateColList = append(updateColList, "LastUpdatedTime")
  328. userInfo.LastUpdatedTime = time.Now()
  329. err = userInfo.Update(updateColList)
  330. if err != nil {
  331. return
  332. }
  333. }
  334. }
  335. userMap[xyUserInfo.Username] = userInfo
  336. return
  337. }