user.go 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522
  1. package gn
  2. import (
  3. "eta_gn/eta_bridge/global"
  4. "eta_gn/eta_bridge/models/eta"
  5. "eta_gn/eta_bridge/models/gn"
  6. "eta_gn/eta_bridge/utils"
  7. "fmt"
  8. "time"
  9. )
  10. // SyncUser
  11. // @Description: 全量同步用户
  12. // @author: Roc
  13. // @datetime 2024-01-22 10:28:39
  14. // @return err error
  15. //func SyncUser() (err error) {
  16. // roleId := global.CONFIG.Gn.DefaultRoleId
  17. // if roleId <= 0 {
  18. // err = fmt.Errorf("默认角色ID不能为空")
  19. // return
  20. // }
  21. // if global.CONFIG.Gn.DefaultUserPass == "" {
  22. // err = fmt.Errorf("默认用户密码不能为空")
  23. // return
  24. // }
  25. //
  26. // // 指定的角色
  27. // roleInfo, e := eta.GetSysRoleById(roleId)
  28. // if e != nil {
  29. // err = fmt.Errorf("获取默认角色信息失败, %v", e)
  30. // return
  31. // }
  32. //
  33. // // 获取所有部门和分组
  34. // departmentMap, _, groupMap, _, userMap, e := getAllDepartmentAndGroup()
  35. // if e != nil {
  36. // err = fmt.Errorf("获取部门/分组/用户失败, %v", e)
  37. // return
  38. // }
  39. //
  40. // // 从公共库里面读取部门和用户
  41. // oaUser, e := gn.GetGnOaUser()
  42. // if e != nil {
  43. // err = fmt.Errorf("获取OA全量用户失败, %v", e)
  44. // return
  45. // }
  46. //
  47. // for _, v := range oaUser {
  48. // fmt.Printf("正在同步用户: %s\n", v.AddrName)
  49. // e = handleUser(v, departmentMap, groupMap, userMap, roleInfo)
  50. // if e != nil {
  51. // err = fmt.Errorf("同步OA用户失败, %v", e)
  52. // return
  53. // }
  54. // }
  55. // return
  56. //}
  57. // getAllDepartmentAndGroup
  58. // @Description: 获取所有的部门和分组
  59. // @author: Roc
  60. // @datetime 2024-01-18 17:39:14
  61. // @return departmentMap map[string]*eta.SysDepartment
  62. // @return groupMap map[string]*eta.SysGroup
  63. // @return err error
  64. //func getAllDepartmentAndGroup() (departmentMap, departmentNameMap map[string]*eta.SysDepartment, groupMap, groupNameMap map[string]*eta.SysGroup, userMap map[string]*eta.Admin, err error) {
  65. // // 获取所有的部门
  66. // departmentList, e := eta.GetAllDepartment()
  67. // if e != nil {
  68. // err = fmt.Errorf("获取所有部门失败, %v", e)
  69. // return
  70. // }
  71. // departmentMap = make(map[string]*eta.SysDepartment)
  72. // departmentNameMap = make(map[string]*eta.SysDepartment)
  73. // for _, department := range departmentList {
  74. // if department.OutID == `` {
  75. // //departmentNameMap[department.DepartmentName] = department
  76. // } else {
  77. // departmentMap[department.OutID] = department
  78. // }
  79. // }
  80. //
  81. // // 获取所有的分组
  82. // groupList, e := eta.GetAllSysGroup()
  83. // if e != nil {
  84. // err = fmt.Errorf("获取所有分组失败, %v", e)
  85. // return
  86. // }
  87. // groupMap = make(map[string]*eta.SysGroup)
  88. // groupNameMap = make(map[string]*eta.SysGroup)
  89. // for _, group := range groupList {
  90. // if group.OutID == `` {
  91. // //groupNameMap[fmt.Sprint(group.DepartmentId, "_", group.GroupName)] = group
  92. // } else {
  93. // groupMap[group.OutID] = group
  94. // }
  95. // }
  96. //
  97. // // 获取所有的用户
  98. // adminList, e := eta.GetAllSysUser()
  99. // if e != nil {
  100. // err = fmt.Errorf("获取所有用户失败, %v", e)
  101. // return
  102. // }
  103. // userMap = make(map[string]*eta.Admin)
  104. // for _, admin := range adminList {
  105. // userMap[admin.AdminName] = admin
  106. // }
  107. // return
  108. //}
  109. //func handleUser(oaUser *gn.OaUser, departmentMap map[string]*eta.SysDepartment, groupMap map[string]*eta.SysGroup, userMap map[string]*eta.Admin, roleInfo *eta.SysRole) (err error) {
  110. // if oaUser == nil {
  111. // err = fmt.Errorf("OA用户信息不存在")
  112. // return
  113. // }
  114. // // 从部门字段中拆分出部门和分组, 数据格式: 销售业务部/福建办事处/华南销售分公司, 层级不定, 目前最大3级
  115. // oaUser.AddrDepartmentFullName = strings.TrimSpace(oaUser.AddrDepartmentFullName)
  116. // departmentArr := strings.Split(oaUser.AddrDepartmentFullName, "/")
  117. // //var departmentId, groupId int
  118. // departmentLen := len(departmentArr)
  119. // departmentInfo := new(eta.SysDepartment)
  120. // groupInfo := new(eta.SysGroup)
  121. // if departmentLen > 0 {
  122. // // 部门是最后那个
  123. // departmentName := departmentArr[departmentLen-1]
  124. // depart, ok := departmentMap[departmentName]
  125. // if !ok {
  126. // // 如果没有的话,那么就创建该部门
  127. // depart = &eta.SysDepartment{
  128. // DepartmentName: departmentName,
  129. // OutID: departmentName, // 因为部门是从用户信息中取的, 没有ID这种字段, 所以部门全程作为out_id
  130. // CreateTime: time.Now(),
  131. // }
  132. // if err = depart.Create(); err != nil {
  133. // return
  134. // }
  135. //
  136. // departmentMap[departmentName] = depart
  137. // } else {
  138. // // TODO:是否更新outId
  139. // }
  140. // departmentInfo = depart
  141. //
  142. // // 分组信息
  143. // reversed := departmentArr
  144. // for i, j := 0, departmentLen-1; i < j; i, j = i+1, j-1 {
  145. // reversed[i], reversed[j] = reversed[j], reversed[i]
  146. // }
  147. // lastOutId := departmentName // 分组的out_id格式: 部门out_id_一级分组out_id_二级分组out_id...
  148. // for k, v := range reversed {
  149. // if k == 0 {
  150. // continue
  151. // }
  152. //
  153. // lastOutId = fmt.Sprintf("%s_%s", lastOutId, v)
  154. // group, ok := groupMap[lastOutId]
  155. // if !ok {
  156. // group = &eta.SysGroup{
  157. // DepartmentId: departmentInfo.DepartmentId,
  158. // GroupName: v,
  159. // CreateTime: time.Now(),
  160. // ParentId: groupInfo.GroupId,
  161. // OutID: lastOutId,
  162. // }
  163. // if err = group.Create(); err != nil {
  164. // return
  165. // }
  166. //
  167. // groupMap[lastOutId] = group
  168. // } else {
  169. // // TODO:是否更新outId
  170. // }
  171. // groupInfo = group
  172. // }
  173. // }
  174. //
  175. // // 同步用户
  176. // userInfo, ok := userMap[oaUser.AddrUserId]
  177. // if !ok {
  178. // userInfo = &eta.Admin{
  179. // AdminName: oaUser.AddrUserId,
  180. // RealName: oaUser.AddrName,
  181. // Password: utils.MD5(global.CONFIG.Gn.DefaultUserPass),
  182. // Enabled: 1,
  183. // Email: "",
  184. // CreatedTime: time.Now(),
  185. // LastUpdatedTime: time.Now(),
  186. // Mobile: oaUser.AddrMobilePhone,
  187. // RoleType: 0,
  188. // RoleId: roleInfo.RoleId,
  189. // RoleName: roleInfo.RoleName,
  190. // RoleTypeCode: roleInfo.RoleTypeCode,
  191. // DepartmentId: departmentInfo.DepartmentId,
  192. // DepartmentName: departmentInfo.DepartmentName,
  193. // GroupId: groupInfo.GroupId,
  194. // GroupName: groupInfo.GroupName,
  195. // Authority: 0,
  196. // Position: oaUser.AddrJobTitle,
  197. // ChartPermission: 0,
  198. // EdbPermission: 0,
  199. // MysteelChemicalPermission: 0,
  200. // OpenId: "",
  201. // UnionId: "",
  202. // PredictEdbPermission: 0,
  203. // Province: "",
  204. // ProvinceCode: "",
  205. // City: "",
  206. // CityCode: "",
  207. // EmployeeId: "",
  208. // TelAreaCode: "",
  209. // OutID: oaUser.AddrUserId,
  210. // }
  211. // if err = userInfo.Create(); err != nil {
  212. // return
  213. // }
  214. // userMap[oaUser.AddrUserId] = userInfo
  215. // } else {
  216. // updateColList := make([]string, 0)
  217. //
  218. // // 部门
  219. // if userInfo.DepartmentId != departmentInfo.DepartmentId {
  220. // updateColList = append(updateColList, "DepartmentId", "DepartmentName")
  221. // userInfo.DepartmentId = departmentInfo.DepartmentId
  222. // userInfo.DepartmentName = departmentInfo.DepartmentName
  223. // }
  224. //
  225. // // 分组
  226. // if userInfo.GroupId != groupInfo.GroupId {
  227. // updateColList = append(updateColList, "GroupId", "GroupName")
  228. // userInfo.GroupId = groupInfo.GroupId
  229. // userInfo.GroupName = groupInfo.GroupName
  230. // }
  231. //
  232. // // 职位
  233. // if userInfo.Position != oaUser.AddrJobTitle {
  234. // updateColList = append(updateColList, "Position")
  235. // userInfo.Position = oaUser.AddrJobTitle
  236. // }
  237. //
  238. // // 姓名
  239. // if userInfo.RealName != oaUser.AddrName {
  240. // updateColList = append(updateColList, "RealName")
  241. // userInfo.RealName = oaUser.AddrName
  242. // }
  243. //
  244. // // 手机号
  245. // if userInfo.Mobile != oaUser.AddrMobilePhone {
  246. // updateColList = append(updateColList, "Mobile")
  247. // userInfo.Mobile = oaUser.AddrMobilePhone
  248. // }
  249. //
  250. // // 外部id
  251. // if userInfo.OutID == `` {
  252. // updateColList = append(updateColList, "OutID")
  253. // userInfo.OutID = oaUser.AddrUserId
  254. // }
  255. //
  256. // if len(updateColList) > 0 {
  257. // updateColList = append(updateColList, "LastUpdatedTime")
  258. // userInfo.LastUpdatedTime = time.Now()
  259. // if err = userInfo.Update(updateColList); err != nil {
  260. // return
  261. // }
  262. // }
  263. // }
  264. // return
  265. //}
  266. // AddAccount 创建新账号
  267. func AddAccount(userReq gn.UserEntity) (errMsg string, err error) {
  268. adminName := *userReq.UserId
  269. // 校验是否存在, 若存在则更新信息, 否则新增
  270. userInfo, e := eta.GetSysUserByAdminName(adminName)
  271. if e != nil && !utils.IsErrNoRow(e) {
  272. errMsg = "用户不存在"
  273. err = fmt.Errorf("获取用户是否存在失败, %v", e)
  274. return
  275. }
  276. // 更新数据
  277. if userInfo != nil && userInfo.AdminId > 0 {
  278. if e = UpdateUser(userInfo, userReq); e != nil {
  279. errMsg = "操作失败"
  280. err = fmt.Errorf("更新用户数据失败, %v", e)
  281. return
  282. }
  283. return
  284. }
  285. // 新增数据
  286. newUser := new(eta.Admin)
  287. newUser.AdminName = adminName
  288. newUser.RealName = fmt.Sprint(*userReq.LastName, *userReq.FirstName)
  289. newUser.Password = utils.MD5(*userReq.Password)
  290. statsMap := map[string]int{gn.UserStatusActive: 1, gn.UserStatusDisable: 0}
  291. newUser.Enabled = statsMap[*userReq.UserStatus]
  292. newUser.Email = *userReq.Mail
  293. newUser.Mobile = *userReq.Mobile
  294. newUser.Position = *userReq.TitleName
  295. // 部门分组
  296. departmentId, groupId, departmentName, groupName, e := GetDepartmentGroupIdByMdmCode(*userReq.DepartmentNum)
  297. if e != nil {
  298. errMsg = "操作失败"
  299. err = fmt.Errorf("根据MDM编码获取ETA部门失败, %v", e)
  300. return
  301. }
  302. newUser.DepartmentId = departmentId
  303. newUser.DepartmentName = departmentName
  304. newUser.GroupId = groupId
  305. newUser.GroupName = groupName
  306. newUser.CreatedTime = time.Now()
  307. newUser.LastUpdatedTime = time.Now()
  308. newUser.OutID = *userReq.EmpNumber // 这里用工号
  309. // 默认角色
  310. if global.CONFIG.Gn.DefaultRoleId > 0 {
  311. roleInfo, tmpErr := eta.GetSysRoleById(global.CONFIG.Gn.DefaultRoleId)
  312. if tmpErr == nil {
  313. // 默认角色
  314. newUser.RoleId = roleInfo.RoleId
  315. newUser.RoleName = roleInfo.RoleName
  316. newUser.RoleTypeCode = roleInfo.RoleTypeCode
  317. //newUser.RoleType = roleInfo.RoleType
  318. }
  319. }
  320. if e = newUser.Create(); e != nil {
  321. errMsg = "操作失败"
  322. err = fmt.Errorf("新增用户失败, %v", e)
  323. return
  324. }
  325. return
  326. }
  327. // UpdateUser 更新用户非null字段
  328. func UpdateUser(originUser *eta.Admin, userReq gn.UserEntity) (err error) {
  329. if originUser == nil {
  330. err = fmt.Errorf("用户信息有误")
  331. return
  332. }
  333. updateCols := make([]string, 0)
  334. // 密码
  335. if userReq.Password != nil {
  336. originUser.Password = utils.MD5(*userReq.Password)
  337. updateCols = append(updateCols, "Password")
  338. }
  339. // 部门分组
  340. if userReq.DepartmentNum != nil {
  341. departmentId, groupId, departmentName, groupName, e := GetDepartmentGroupIdByMdmCode(*userReq.DepartmentNum)
  342. if e != nil {
  343. err = fmt.Errorf("根据MDM编码获取ETA部门失败, %v", e)
  344. return
  345. }
  346. originUser.DepartmentId = departmentId
  347. originUser.DepartmentName = departmentName
  348. originUser.GroupId = groupId
  349. originUser.GroupName = groupName
  350. updateCols = append(updateCols, "DepartmentId", "DepartmentName", "GroupId", "GroupName")
  351. }
  352. // 姓名
  353. if userReq.FirstName != nil && userReq.LastName != nil {
  354. originUser.RealName = fmt.Sprint(*userReq.LastName, *userReq.FirstName)
  355. updateCols = append(updateCols, "RealName")
  356. }
  357. // 状态
  358. if userReq.UserStatus != nil {
  359. statsMap := map[string]int{gn.UserStatusActive: 1, gn.UserStatusDisable: 0}
  360. originUser.Enabled = statsMap[*userReq.UserStatus]
  361. updateCols = append(updateCols, "Enabled")
  362. }
  363. // 联系方式
  364. if userReq.Mail != nil {
  365. originUser.Email = *userReq.Mail
  366. updateCols = append(updateCols, "Email")
  367. }
  368. if userReq.Mobile != nil {
  369. originUser.Mobile = *userReq.Mobile
  370. updateCols = append(updateCols, "Mobile")
  371. }
  372. // 职位
  373. if userReq.TitleName != nil {
  374. originUser.Position = *userReq.TitleName
  375. updateCols = append(updateCols, "Position")
  376. }
  377. // 更新数据
  378. originUser.LastUpdatedTime = time.Now()
  379. updateCols = append(updateCols, "LastUpdatedTime")
  380. if e := originUser.Update(updateCols); e != nil {
  381. err = fmt.Errorf("更新用户数据失败, %v", e)
  382. return
  383. }
  384. return
  385. }
  386. // ModifyAccount 修改账号
  387. func ModifyAccount(userReq gn.UserEntity) (errMsg string, err error) {
  388. adminName := *userReq.UserId
  389. // 校验是否存在, 不存在返回异常
  390. userInfo, e := eta.GetSysUserByAdminName(adminName)
  391. if e != nil {
  392. if utils.IsErrNoRow(e) {
  393. errMsg = "用户不存在"
  394. err = fmt.Errorf("用户不存在")
  395. return
  396. }
  397. errMsg = "操作失败"
  398. err = fmt.Errorf("获取用户是否存在失败, %v", e)
  399. return
  400. }
  401. // 更新数据
  402. if e = UpdateUser(userInfo, userReq); e != nil {
  403. errMsg = "操作失败"
  404. err = fmt.Errorf("更新用户数据失败, %v", e)
  405. return
  406. }
  407. return
  408. }
  409. // DeleteAccount 删除账号
  410. func DeleteAccount(userId string) (errMsg string, err error) {
  411. // 校验是否存在, 不存在返回成功
  412. _, e := eta.GetSysUserByAdminName(userId)
  413. if e != nil {
  414. if utils.IsErrNoRow(e) {
  415. return
  416. }
  417. errMsg = "操作失败"
  418. err = fmt.Errorf("获取用户是否存在失败, %v", e)
  419. return
  420. }
  421. // 删除用户
  422. if e = eta.DeleteSysUserByName(userId); e != nil {
  423. errMsg = "操作失败"
  424. err = fmt.Errorf("删除用户失败, %v", e)
  425. return
  426. }
  427. return
  428. }
  429. // SuspendAccount 停用账号
  430. func SuspendAccount(userId string) (errMsg string, err error) {
  431. // 校验是否存在, 不存在返回异常
  432. userInfo, e := eta.GetSysUserByAdminName(userId)
  433. if e != nil {
  434. if utils.IsErrNoRow(e) {
  435. errMsg = "用户不存在"
  436. err = fmt.Errorf("用户不存在")
  437. return
  438. }
  439. errMsg = "操作失败"
  440. err = fmt.Errorf("获取用户是否存在失败, %v", e)
  441. return
  442. }
  443. userInfo.Enabled = 0
  444. userInfo.LastUpdatedTime = time.Now()
  445. updateCols := []string{"Enabled", "LastUpdatedTime"}
  446. if e := userInfo.Update(updateCols); e != nil {
  447. errMsg = "操作失败"
  448. err = fmt.Errorf("禁用用户失败, %v", e)
  449. return
  450. }
  451. return
  452. }
  453. // RestoreAccount 启用账号
  454. func RestoreAccount(userId string) (errMsg string, err error) {
  455. // 校验是否存在, 不存在返回异常
  456. userInfo, e := eta.GetSysUserByAdminName(userId)
  457. if e != nil {
  458. if utils.IsErrNoRow(e) {
  459. errMsg = "用户不存在"
  460. err = fmt.Errorf("用户不存在")
  461. return
  462. }
  463. errMsg = "操作失败"
  464. err = fmt.Errorf("获取用户是否存在失败, %v", e)
  465. return
  466. }
  467. userInfo.Enabled = 1
  468. userInfo.LastUpdatedTime = time.Now()
  469. updateCols := []string{"Enabled", "LastUpdatedTime"}
  470. if e := userInfo.Update(updateCols); e != nil {
  471. errMsg = "操作失败"
  472. err = fmt.Errorf("启用用户失败, %v", e)
  473. return
  474. }
  475. return
  476. }
  477. // ChangePassword 修改密码
  478. func ChangePassword(userId, newPassword string) (errMsg string, err error) {
  479. // 校验是否存在, 不存在返回异常
  480. userInfo, e := eta.GetSysUserByAdminName(userId)
  481. if e != nil {
  482. if utils.IsErrNoRow(e) {
  483. errMsg = "用户不存在"
  484. err = fmt.Errorf("用户不存在")
  485. return
  486. }
  487. errMsg = "操作失败"
  488. err = fmt.Errorf("获取用户是否存在失败, %v", e)
  489. return
  490. }
  491. userInfo.Password = utils.MD5(newPassword)
  492. userInfo.LastUpdatedTime = time.Now()
  493. userInfo.LastUpdatedPasswordTime = time.Now()
  494. updateCols := []string{"Password", "LastUpdatedTime", "LastUpdatedPasswordTime"}
  495. if e := userInfo.Update(updateCols); e != nil {
  496. errMsg = "操作失败"
  497. err = fmt.Errorf("用户密码修改失败, %v", e)
  498. return
  499. }
  500. return
  501. }