123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359 |
- package gn
- import (
- "eta_gn/eta_bridge/global"
- "eta_gn/eta_bridge/models/eta"
- "eta_gn/eta_bridge/models/gn"
- "eta_gn/eta_bridge/utils"
- "fmt"
- "strings"
- "time"
- )
- // SyncUser
- // @Description: 全量同步用户
- // @author: Roc
- // @datetime 2024-01-22 10:28:39
- // @return err error
- func SyncUser() (err error) {
- roleId := global.CONFIG.Gn.DefaultRoleId
- if roleId <= 0 {
- err = fmt.Errorf("默认角色ID不能为空")
- return
- }
- if global.CONFIG.Gn.DefaultUserPass == "" {
- err = fmt.Errorf("默认用户密码不能为空")
- return
- }
- // 指定的角色
- roleInfo, e := eta.GetSysRoleById(roleId)
- if e != nil {
- err = fmt.Errorf("获取默认角色信息失败, %v", e)
- return
- }
- // 获取所有部门和分组
- departmentMap, _, groupMap, _, userMap, e := getAllDepartmentAndGroup()
- if e != nil {
- err = fmt.Errorf("获取部门/分组/用户失败, %v", e)
- return
- }
- // 从公共库里面读取部门和用户
- oaUser, e := gn.GetGnOaUser()
- if e != nil {
- err = fmt.Errorf("获取OA全量用户失败, %v", e)
- return
- }
- for _, v := range oaUser {
- e = handleUser(v, departmentMap, groupMap, userMap, roleInfo)
- if e != nil {
- err = fmt.Errorf("同步OA用户失败, %v", e)
- return
- }
- }
- return
- }
- // PullUser
- // @Description: 增量同步用户
- // @author: Roc
- // @datetime 2024-01-23 18:01:27
- // @return err error
- //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
- // }
- //
- // // 获取token
- // 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
- //
- // // 处理用户信息,将象屿用户与eta用户做关联
- // 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
- //}
- // TaskPullUser
- // @Description: 定时增量同步用户
- // @author: Roc
- // @datetime 2024-01-23 18:03:04
- //func TaskPullUser() {
- // PullUser()
- // return
- //}
- // getAllDepartmentAndGroup
- // @Description: 获取所有的部门和分组
- // @author: Roc
- // @datetime 2024-01-18 17:39:14
- // @return departmentMap map[string]*eta.SysDepartment
- // @return groupMap map[string]*eta.SysGroup
- // @return err error
- func getAllDepartmentAndGroup() (departmentMap, departmentNameMap map[string]*eta.SysDepartment, groupMap, groupNameMap map[string]*eta.SysGroup, userMap map[string]*eta.Admin, err error) {
- // 获取所有的部门
- departmentList, e := eta.GetAllDepartment()
- if e != nil {
- err = fmt.Errorf("获取所有部门失败, %v", e)
- 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, e := eta.GetAllSysGroup()
- if e != nil {
- err = fmt.Errorf("获取所有分组失败, %v", e)
- 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, e := eta.GetAllSysUser()
- if e != nil {
- err = fmt.Errorf("获取所有用户失败, %v", e)
- return
- }
- userMap = make(map[string]*eta.Admin)
- for _, admin := range adminList {
- userMap[admin.AdminName] = admin
- }
- return
- }
- 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) {
- if oaUser == nil {
- err = fmt.Errorf("OA用户信息不存在")
- return
- }
- // 从部门字段中拆分出部门和分组, 数据格式: 销售业务部/福建办事处/华南销售分公司, 层级不定, 目前最大3级
- oaUser.AddrDepartmentFullName = strings.TrimSpace(oaUser.AddrDepartmentFullName)
- departmentArr := strings.Split(oaUser.AddrDepartmentFullName, "/")
- //var departmentId, groupId int
- departmentLen := len(departmentArr)
- departmentInfo := new(eta.SysDepartment)
- groupInfo := new(eta.SysGroup)
- if departmentLen > 0 {
- // 部门是最后那个
- departmentName := departmentArr[departmentLen-1]
- depart, ok := departmentMap[departmentName]
- if !ok {
- // 如果没有的话,那么就创建该部门
- depart = &eta.SysDepartment{
- DepartmentName: departmentName,
- OutID: departmentName, // 因为部门是从用户信息中取的, 没有ID这种字段, 所以部门全程作为out_id
- CreateTime: time.Now(),
- }
- if err = depart.Create(); err != nil {
- return
- }
- departmentMap[departmentName] = depart
- } else {
- // TODO:是否更新outId
- }
- departmentInfo = depart
- // 分组信息
- reversed := make([]string, 0)
- for i, str := range departmentArr {
- reversed[departmentLen-i-1] = str
- }
- lastOutId := departmentName // 分组的out_id格式: 部门out_id_一级分组out_id_二级分组out_id...
- for k, v := range reversed {
- if k == 0 {
- continue
- }
- lastOutId = fmt.Sprintf("%s_%s", lastOutId, v)
- group, ok := groupMap[lastOutId]
- if !ok {
- group = &eta.SysGroup{
- DepartmentId: departmentInfo.DepartmentId,
- GroupName: v,
- CreateTime: time.Now(),
- ParentId: group.GroupId,
- OutID: lastOutId,
- }
- if err = group.Create(); err != nil {
- return
- }
- groupMap[lastOutId] = group
- } else {
- // TODO:是否更新outId
- }
- groupInfo = group
- }
- }
- // 同步用户
- userInfo, ok := userMap[oaUser.AddrUserId]
- if !ok {
- userInfo = &eta.Admin{
- AdminName: oaUser.AddrUserId,
- RealName: oaUser.AddrName,
- Password: utils.MD5(global.CONFIG.Gn.DefaultUserPass),
- Enabled: 1,
- Email: "",
- CreatedTime: time.Now(),
- LastUpdatedTime: time.Now(),
- Mobile: oaUser.AddrMobilePhone,
- 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: oaUser.AddrJobTitle,
- ChartPermission: 0,
- EdbPermission: 0,
- MysteelChemicalPermission: 0,
- OpenId: "",
- UnionId: "",
- PredictEdbPermission: 0,
- Province: "",
- ProvinceCode: "",
- City: "",
- CityCode: "",
- EmployeeId: "",
- TelAreaCode: "",
- OutID: oaUser.AddrUserId,
- }
- if err = userInfo.Create(); err != nil {
- return
- }
- userMap[oaUser.AddrUserId] = userInfo
- } else {
- updateColList := make([]string, 0)
- // 部门
- 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 != oaUser.AddrJobTitle {
- updateColList = append(updateColList, "Position")
- userInfo.Position = oaUser.AddrJobTitle
- }
- // 姓名
- if userInfo.RealName != oaUser.AddrName {
- updateColList = append(updateColList, "RealName")
- userInfo.RealName = oaUser.AddrName
- }
- // 手机号
- if userInfo.Mobile != oaUser.AddrMobilePhone {
- updateColList = append(updateColList, "Mobile")
- userInfo.Mobile = oaUser.AddrMobilePhone
- }
- // 外部id
- if userInfo.OutID == `` {
- updateColList = append(updateColList, "OutID")
- userInfo.OutID = oaUser.AddrUserId
- }
- if len(updateColList) > 0 {
- updateColList = append(updateColList, "LastUpdatedTime")
- userInfo.LastUpdatedTime = time.Now()
- if err = userInfo.Update(updateColList); err != nil {
- return
- }
- }
- }
- return
- }
|