فهرست منبع

同步组织架构

kobe6258 8 ماه پیش
والد
کامیت
3f1f308dca
6فایلهای تغییر یافته به همراه164 افزوده شده و 28 حذف شده
  1. 12 0
      models/eta/admin.go
  2. 12 0
      models/eta/sys_department.go
  3. 11 0
      models/eta/sys_group.go
  4. 0 1
      models/ht/wx_crm/sys_department.go
  5. 21 0
      models/ht/wx_crm/sys_role.go
  6. 108 27
      task/htfutures/sync_staff_task.go

+ 12 - 0
models/eta/admin.go

@@ -3,6 +3,7 @@ package eta
 import (
 	"errors"
 	"eta/eta_bridge/global"
+	"gorm.io/gorm/clause"
 	"time"
 )
 
@@ -97,3 +98,14 @@ func GetSysUserByOutId(outId string) (item *Admin, err error) {
 	err = global.MYSQL["hz_eta"].Where("out_id = ?", outId).First(&item).Error
 	return
 }
+
+func BatchInsertOrUpdateAdmin(admins []Admin) (err error) {
+	db := global.MYSQL["hz_eta"]
+	OnConflictFunc := clause.OnConflict{
+		Columns:   []clause.Column{{Name: "admin_name"}, {Name: "enabled"}},
+		DoUpdates: clause.AssignmentColumns([]string{"real_name", "email", "mobile", "department_id", "department_name", "group_id", "group_name", "employee_id"}),
+	}
+	// 执行批量插入或更新操作
+	err = db.Clauses(OnConflictFunc).Create(&admins).Error
+	return
+}

+ 12 - 0
models/eta/sys_department.go

@@ -2,6 +2,7 @@ package eta
 
 import (
 	"eta/eta_bridge/global"
+	"gorm.io/gorm/clause"
 	"time"
 )
 
@@ -47,3 +48,14 @@ func DeleteDepartmentById(departmentId int) (err error) {
 	err = global.MYSQL["hz_eta"].Exec(sql, departmentId).Error
 	return
 }
+
+func BatchInsertOrUpdate(departments []SysDepartment) (err error) {
+	db := global.MYSQL["hz_eta"]
+	OnConflictFunc := clause.OnConflict{
+		Columns:   []clause.Column{{Name: "department_id"}},
+		DoUpdates: clause.AssignmentColumns([]string{"department_name", "sort"}),
+	}
+	// 执行批量插入或更新操作
+	err = db.Clauses(OnConflictFunc).Create(&departments).Error
+	return
+}

+ 11 - 0
models/eta/sys_group.go

@@ -2,6 +2,7 @@ package eta
 
 import (
 	"eta/eta_bridge/global"
+	"gorm.io/gorm/clause"
 	"time"
 )
 
@@ -55,3 +56,13 @@ func DeleteGroupByGroupId(groupId int) (err error) {
 	err = global.MYSQL["hz_eta"].Exec(sql, groupId).Error
 	return
 }
+func BatchInsertOrUpdateGroup(departments []SysGroup) (err error) {
+	db := global.MYSQL["hz_eta"]
+	OnConflictFunc := clause.OnConflict{
+		Columns:   []clause.Column{{Name: "group_id"}},
+		DoUpdates: clause.AssignmentColumns([]string{"department_id", "group_name", "parent_id", "sort"}),
+	}
+	// 执行批量插入或更新操作
+	err = db.Clauses(OnConflictFunc).Create(&departments).Error
+	return
+}

+ 0 - 1
models/ht/wx_crm/sys_department.go

@@ -25,7 +25,6 @@ type SysDepartment struct {
 func (m *SysDepartment) TableName() string {
 	return "sys_department"
 }
-
 func BatchInsertOrUpdate(departments []SysDepartment) (err error) {
 	db := global.MYSQL["ht_crm"]
 	OnConflictFunc := clause.OnConflict{

+ 21 - 0
models/ht/wx_crm/sys_role.go

@@ -0,0 +1,21 @@
+package wx_crm
+
+import (
+	"eta/eta_bridge/global"
+)
+
+// SysRole 角色表
+type SysRole struct {
+	SysRoleId   int    `gorm:"primaryKey;column:role_id;type:int(11);not null" json:"role_id"`
+	SysRoleName string `gorm:"column:role_name;type:varchar(100)" json:"role_name"`
+}
+
+func (m *SysRole) TableName() string {
+	return "sys_role"
+}
+
+// GetSysRoleById 主键获取角色
+func GetSysRoleById(roleId int) (item *SysRole, err error) {
+	err = global.MYSQL["ht_crm"].Where("role_id = ?", roleId).First(&item).Error
+	return
+}

+ 108 - 27
task/htfutures/sync_staff_task.go

@@ -3,6 +3,7 @@ package HTtask
 import (
 	"errors"
 	"eta/eta_bridge/global"
+	"eta/eta_bridge/models/eta"
 	"eta/eta_bridge/models/ht/oa"
 	"eta/eta_bridge/models/ht/wx_crm"
 	"fmt"
@@ -12,21 +13,18 @@ import (
 func StartCronJob() {
 	// 创建一个新的 cron 实例
 	c := cron.New(cron.WithSeconds())
-	seconds := global.CONFIG.HTFutures.SyncTask.SyncTaskInterval
-	if seconds == 0 {
-		seconds = 60
-	}
-	cornStr := fmt.Sprintf("*/%d * * * * *", seconds)
-	global.FILE_LOG.Info("cron表达式", cornStr)
+	//constr := "0 17 * * * *"
+	constr := "*/5 * * * * *"
 	// 添加定时任务
-	_, err := c.AddFunc(cornStr, func() {
-		syncCrmOAInfo()
+	_, err := c.AddFunc(constr, func() {
+
+		go syncCrmOAInfo()
+		go SyncETA()
 	})
 	if err != nil {
 		fmt.Println("添加定时任务失败:", err)
 		return
 	}
-
 	// 启动定时任务
 	c.Start()
 
@@ -38,21 +36,104 @@ func StartCronJob() {
 }
 
 func SyncETA() {
-	//list, err := oa.GetSubCompanyList()
-	//if err != nil {
-	//	return
-	//}
-	//var SysDepartmentList []eta.SysDepartment
-	//for _, item := range list {
-	//	sysDepartment := eta.SysDepartment{
-	//		DepartmentName: item.Subcompanyname,
-	//		OutID:          item.Companyid,
-	//	}
-	//	SysDepartmentList = append(SysDepartmentList, sysDepartment)
-	//}
+	roleId := global.CONFIG.HTFutures.SyncTask.SyncRoleId
+	role, err := eta.GetSysRoleById(roleId)
+	if err != nil {
+		global.FILE_LOG.Error("获取角色信息失败:", err.Error())
+		return
+	}
+	//先同步分公司列表
+	subCompanylist, err := oa.GetSubCompanyList()
+	if err != nil {
+		global.FILE_LOG.Error("获取海通OA子公司数据失败:", err.Error())
+	}
+	var sysSubCompanyList []eta.SysDepartment
+	for _, item := range subCompanylist {
+		sysDepartment := eta.SysDepartment{
+			DepartmentId:   item.ID,
+			DepartmentName: item.SUBCOMPANYNAME,
+			Sort:           item.SHOWORDEROFTREE,
+		}
+		sysSubCompanyList = append(sysSubCompanyList, sysDepartment)
+	}
+	err = eta.BatchInsertOrUpdate(sysSubCompanyList)
+	if err != nil {
+		global.FILE_LOG.Error("同步海通OA子公司数据失败:", err.Error())
+		return
+	}
+	//同步部门信息
+	DepartmentList, err := oa.GetDepartMentList()
+	if err != nil {
+		global.FILE_LOG.Error("获取海通部门数据失败:", err.Error())
+	}
+	var sysDepartmentList []eta.SysGroup
+	for _, item := range DepartmentList {
+		sysDepartment := eta.SysGroup{
+			GroupId:      item.ID,
+			DepartmentId: item.SUBCOMPANYID1,
+			GroupName:    item.DEPARTMENTNAME,
+			ParentId:     item.SUPDEPID,
+			Sort:         item.SHOWORDEROFTREE,
+		}
+		sysDepartmentList = append(sysDepartmentList, sysDepartment)
+	}
+	err = eta.BatchInsertOrUpdateGroup(sysDepartmentList)
+	if err != nil {
+		global.FILE_LOG.Error("同步海通部门数据数据失败:", err.Error())
+		return
+	}
+	//同步员工信息
+	staffList, err := oa.GetEmployeeList()
+	if err != nil {
+		global.FILE_LOG.Error("获取海通OA员工数据失败:", err.Error())
+	}
+	var Employee []eta.Admin
+	for _, item := range staffList {
+		var department *eta.SysDepartment
+		department, err = eta.GetDepartmentById(item.SUBCOMPANYID1)
+		if err != nil {
+			global.FILE_LOG.Error("获取员工子公司信息失败:", err.Error(), "跳过同步员工", item.WORKCODE)
+			continue
+		}
+		var group *eta.SysGroup
+		group, err = eta.GetSysGroupByGroupId(item.DEPARTMENTID)
+		if err != nil {
+			global.FILE_LOG.Error("获取员工部门组织架信息失败:", err.Error(), "跳过同步员工", item.WORKCODE)
+			continue
+		}
+		sysUser := eta.Admin{
+			AdminName:      item.LOGINID,
+			RealName:       item.LASTNAME,
+			Enabled:        1,
+			Email:          item.EMAIL,
+			Role:           "63",
+			Mobile:         item.MOBILE,
+			RoleType:       0,
+			RoleId:         role.RoleId,
+			RoleName:       role.RoleName,
+			RoleTypeCode:   role.RoleTypeCode,
+			DepartmentId:   item.SUBCOMPANYID1,
+			DepartmentName: department.DepartmentName,
+			GroupId:        item.DEPARTMENTID,
+			GroupName:      group.GroupName,
+			EmployeeId:     item.WORKCODE,
+		}
+		Employee = append(Employee, sysUser)
+	}
+	err = eta.BatchInsertOrUpdateAdmin(Employee)
+	if err != nil {
+		global.FILE_LOG.Error("同步海通OA员工数据失败:", err.Error())
+		return
+	}
 }
 
 func syncCrmOAInfo() {
+	roleId := global.CONFIG.HTFutures.SyncTask.SyncRoleId
+	role, err := wx_crm.GetSysRoleById(roleId)
+	if err != nil {
+		global.FILE_LOG.Error("获取角色信息失败:", err.Error())
+		return
+	}
 	//先同步分公司列表
 	subCompanylist, err := oa.GetSubCompanyList()
 	if err != nil {
@@ -97,7 +178,7 @@ func syncCrmOAInfo() {
 	}
 	err = wx_crm.BatchInsertOrUpdate(sysDepartmentList)
 	if err != nil {
-		global.FILE_LOG.Error("同步海通OA子公司数据失败:", err.Error())
+		global.FILE_LOG.Error("同步海通部门数据失败:", err.Error())
 		return
 	}
 	//同步员工信息
@@ -126,8 +207,8 @@ func syncCrmOAInfo() {
 			Email:            item.EMAIL,
 			Phone:            item.MOBILE,
 			AreaCode:         "86",
-			SysRoleId:        63,
-			SysRoleName:      "普通用户",
+			SysRoleId:        role.SysRoleId,
+			SysRoleName:      role.SysRoleName,
 			SysDepartmentId:  item.DEPARTMENTID,
 			SysDepartmentId1: departments[3],
 			SysDepartmentId2: departments[2],
@@ -162,7 +243,7 @@ func GetEmployeeDepartmentList(departmentId int) (departmentIdList []int, err er
 	}
 	if found {
 		departmentIdList = append(departmentIdList, currentDepartment.OutId)
-		subList := DepartmentList(currentDepartment.ParentId, departmentList, currentDepartment.Level-1)
+		subList := TraceDepartmentList(currentDepartment.ParentId, departmentList, currentDepartment.Level-1)
 		departmentIdList = append(departmentIdList, subList...)
 	} else {
 		err = errors.New("当前部门id不存在")
@@ -170,7 +251,7 @@ func GetEmployeeDepartmentList(departmentId int) (departmentIdList []int, err er
 	return
 }
 
-func DepartmentList(departmentId int, departmentList []wx_crm.SysDepartment, level int) (departmentIdList []int) {
+func TraceDepartmentList(departmentId int, departmentList []wx_crm.SysDepartment, level int) (departmentIdList []int) {
 	if level == 0 || departmentId == 0 {
 		return
 	}
@@ -183,7 +264,7 @@ func DepartmentList(departmentId int, departmentList []wx_crm.SysDepartment, lev
 				continue
 			}
 			departmentIdList = append(departmentIdList, item.OutId)
-			subSubDepartments := DepartmentList(item.ParentId, departmentList, item.Level-1)
+			subSubDepartments := TraceDepartmentList(item.ParentId, departmentList, item.Level-1)
 			departmentIdList = append(departmentIdList, subSubDepartments...)
 
 		}