123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439 |
- package xiangyu
- import (
- "errors"
- "eta/eta_bridge/global"
- "eta/eta_bridge/models/eta"
- "eta/eta_bridge/services/xiangyu"
- "fmt"
- "strings"
- "time"
- )
- func SyncUser() (err error) {
- if global.CONFIG.Xiangyu.DefaultRoleId <= 0 {
- err = errors.New("默认角色ID不能为空")
- return
- }
-
- roleInfo, err := eta.GetSysRoleById(global.CONFIG.Xiangyu.DefaultRoleId)
- if err != nil {
- return
- }
-
- departmentMap, departmentNameMap, groupMap, groupNameMap, userMap, err := getAllDepartmentAndGroup()
- if err != nil {
- return
- }
-
- tokenId, err := xiangyu.Login()
- if err != nil {
- return
- }
-
- defer func() {
-
- tmpErr := xiangyu.Logout(tokenId)
- if tmpErr != nil {
- fmt.Println("退出失败:", tmpErr.Error())
- }
- }()
- for {
-
- userResp, tmpErr := xiangyu.SyncTask(tokenId)
- if tmpErr != nil {
- err = tmpErr
- return
- }
-
- if userResp == nil || userResp.Out.ObjectCode == `` {
- return
- }
-
- var isSync bool
- var etaUserId, message string
-
- tmpErr = handleUser(userResp.Out.Data, userResp.Out.Id, departmentMap, departmentNameMap, groupMap, groupNameMap, userMap, roleInfo)
- if tmpErr == nil {
- isSync = true
- if etUserInfo, ok := userMap[userResp.Out.Data.Username]; ok {
- etaUserId = fmt.Sprint(etUserInfo.AdminId)
- }
- } else {
- message = tmpErr.Error()
- }
-
- err = xiangyu.SyncFinish(tokenId, userResp.Out.ObjectCode, userResp.Out.ObjectType, userResp.Out.Id, etaUserId, message, isSync)
- if err != nil {
- return
- }
- }
- return
- }
- func PullUser() (err error) {
- if global.CONFIG.Xiangyu.DefaultRoleId <= 0 {
- err = errors.New("默认角色ID不能为空")
- return
- }
- defer func() {
- if err != nil {
- global.FILE_LOG.Info("同步增量用户失败:" + err.Error())
- }
- }()
-
- roleInfo, err := eta.GetSysRoleById(global.CONFIG.Xiangyu.DefaultRoleId)
- if err != nil {
- return
- }
-
- departmentMap, departmentNameMap, groupMap, groupNameMap, userMap, err := getAllDepartmentAndGroup()
- if err != nil {
- return
- }
-
- tokenId, err := xiangyu.Login()
- if err != nil {
- return
- }
- defer func() {
-
- tmpErr := xiangyu.Logout(tokenId)
- if tmpErr != nil {
- fmt.Println("退出失败:", tmpErr.Error())
- }
- }()
- for {
-
- userResp, tmpErr := xiangyu.PullTask(tokenId)
- if tmpErr != nil {
- err = tmpErr
- return
- }
-
- if userResp == nil || userResp.Out.ObjectCode == `` {
- return
- }
-
- var isSync bool
- var etaUserId, message string
-
- tmpErr = handleUser(userResp.Out.Data, userResp.Out.Id, departmentMap, departmentNameMap, groupMap, groupNameMap, userMap, roleInfo)
- if tmpErr == nil {
- isSync = true
- if etUserInfo, ok := userMap[userResp.Out.Data.Username]; ok {
- etaUserId = fmt.Sprint(etUserInfo.AdminId)
- }
- } else {
- message = tmpErr.Error()
- }
-
- err = xiangyu.PullFinish(tokenId, userResp.Out.TaskId, etaUserId, message, isSync)
- if err != nil {
- return
- }
- }
- return
- }
- func TaskPullUser() {
- PullUser()
- return
- }
- func getAllDepartmentAndGroup() (departmentMap, departmentNameMap map[string]*eta.SysDepartment, groupMap, groupNameMap map[string]*eta.SysGroup, userMap map[string]*eta.Admin, err error) {
-
- departmentList, err := eta.GetAllDepartment()
- if err != nil {
- return
- }
-
- departmentMap = make(map[string]*eta.SysDepartment)
- departmentNameMap = make(map[string]*eta.SysDepartment)
- for _, department := range departmentList {
- if department.OutID == `` {
- departmentNameMap[department.DepartmentName] = department
- } else {
- departmentMap[department.OutID] = department
- }
- }
-
- groupList, err := eta.GetAllSysGroup()
- if err != nil {
- return
- }
-
- groupMap = make(map[string]*eta.SysGroup)
- groupNameMap = make(map[string]*eta.SysGroup)
- for _, group := range groupList {
- if group.OutID == `` {
- groupNameMap[fmt.Sprint(group.DepartmentId, "_", group.GroupName)] = group
- } else {
- groupMap[group.OutID] = group
- }
- }
-
- adminList, err := eta.GetAllSysUser()
- if err != nil {
- return
- }
-
- userMap = make(map[string]*eta.Admin)
- for _, admin := range adminList {
- userMap[admin.AdminName] = admin
- }
- return
- }
- func handleUser(xyUserInfo xiangyu.UserData, xyUserId string, departmentMap, departmentNameMap map[string]*eta.SysDepartment, groupMap, groupNameMap map[string]*eta.SysGroup, userMap map[string]*eta.Admin, roleInfo *eta.SysRole) (err error) {
-
- departmentInfo, ok := departmentMap[xyUserInfo.CompanyId]
- if !ok {
-
- departmentInfo, ok = departmentNameMap[xyUserInfo.CompanyName]
- if !ok {
-
- departmentInfo = &eta.SysDepartment{
- DepartmentId: 0,
- DepartmentName: xyUserInfo.CompanyName,
- OutID: xyUserInfo.CompanyId,
- CreateTime: time.Now(),
- Sort: 0,
- }
- err = departmentInfo.Create()
- if err != nil {
- return
- }
- } else {
-
- departmentInfo.OutID = xyUserInfo.CompanyId
- err = departmentInfo.Update([]string{"OutID"})
- if err != nil {
- return
- }
- delete(departmentNameMap, xyUserInfo.CompanyName)
- }
- departmentMap[xyUserInfo.CompanyId] = departmentInfo
- }
-
- groupInfo, ok := groupMap[xyUserInfo.DepartId]
- if !ok {
- groupInfo, ok = groupNameMap[fmt.Sprint(departmentInfo.DepartmentId, "_", xyUserInfo.DepartmentName)]
- if !ok {
-
- groupInfo = &eta.SysGroup{
- GroupId: 0,
- DepartmentId: departmentInfo.DepartmentId,
- GroupName: xyUserInfo.DepartmentName,
- CreateTime: time.Now(),
- ParentId: 0,
- Sort: 0,
- OutID: xyUserInfo.DepartId,
- }
-
- err = groupInfo.Create()
- if err != nil {
- return
- }
- } else {
-
- groupInfo.OutID = xyUserInfo.DepartId
- err = groupInfo.Update([]string{"OutID"})
- if err != nil {
- return
- }
- delete(groupNameMap, xyUserInfo.DepartmentName)
- }
- groupMap[xyUserInfo.DepartId] = groupInfo
- }
- enabled := 1
- if xyUserInfo.IsDisabled {
- enabled = 0
- }
-
- userInfo, ok := userMap[xyUserInfo.Username]
- if !ok {
- userInfo = &eta.Admin{
- AdminId: 0,
- AdminName: xyUserInfo.Username,
- AdminAvatar: "",
- RealName: xyUserInfo.FullName,
- Password: xyUserInfo.Password,
-
- Enabled: enabled,
- Email: "",
-
- CreatedTime: time.Now(),
- LastUpdatedTime: time.Now(),
-
- Mobile: xyUserInfo.Mobile,
- RoleType: 0,
- RoleId: roleInfo.RoleId,
- RoleName: roleInfo.RoleName,
- RoleTypeCode: roleInfo.RoleTypeCode,
- DepartmentId: departmentInfo.DepartmentId,
- DepartmentName: departmentInfo.DepartmentName,
- GroupId: groupInfo.GroupId,
- GroupName: groupInfo.GroupName,
- Authority: 0,
- Position: xyUserInfo.PositionName,
-
- ChartPermission: 0,
- EdbPermission: 0,
- MysteelChemicalPermission: 0,
- OpenId: "",
- UnionId: "",
- PredictEdbPermission: 0,
- Province: "",
- ProvinceCode: "",
- City: "",
- CityCode: "",
- EmployeeId: xyUserInfo.EmployeeNo,
- TelAreaCode: "",
- OutID: xyUserId,
- }
- if strings.Contains(roleInfo.RoleTypeCode, "researcher") {
- userInfo.Role = "researcher"
- } else if strings.Contains(userInfo.RoleTypeCode, "seller") {
- userInfo.Role = "sales"
- } else {
- userInfo.Role = "admin"
- }
-
- err = userInfo.Create()
- if err != nil {
- return
- }
- } else {
- updateColList := make([]string, 0)
-
- if userInfo.Enabled != enabled {
- updateColList = append(updateColList, "Enabled")
- userInfo.Enabled = enabled
- }
-
- if userInfo.DepartmentId != departmentInfo.DepartmentId {
- updateColList = append(updateColList, "DepartmentId", "DepartmentName")
- userInfo.DepartmentId = departmentInfo.DepartmentId
- userInfo.DepartmentName = departmentInfo.DepartmentName
- }
-
- if userInfo.GroupId != groupInfo.GroupId {
- updateColList = append(updateColList, "GroupId", "GroupName")
- userInfo.GroupId = groupInfo.GroupId
- userInfo.GroupName = groupInfo.GroupName
- }
-
- if userInfo.Position != xyUserInfo.PositionName {
- updateColList = append(updateColList, "Position")
- userInfo.Position = xyUserInfo.PositionName
- }
-
- if userInfo.RealName != xyUserInfo.FullName {
- updateColList = append(updateColList, "RealName")
- userInfo.RealName = xyUserInfo.FullName
- }
-
- if userInfo.Mobile != xyUserInfo.Mobile {
- updateColList = append(updateColList, "Mobile")
- userInfo.Mobile = xyUserInfo.Mobile
- }
-
- if userInfo.OutID == `` {
- updateColList = append(updateColList, "OutID")
- userInfo.OutID = xyUserId
- }
-
- if userInfo.EmployeeId != xyUserInfo.EmployeeNo {
- updateColList = append(updateColList, "EmployeeId")
- userInfo.OutID = xyUserInfo.EmployeeNo
- }
- if len(updateColList) > 0 {
- updateColList = append(updateColList, "LastUpdatedTime")
- userInfo.LastUpdatedTime = time.Now()
- err = userInfo.Update(updateColList)
- if err != nil {
- return
- }
- }
- }
- userMap[xyUserInfo.Username] = userInfo
- return
- }
|