瀏覽代碼

同步角色用户

hsun 1 年之前
父節點
當前提交
edf9b92d17
共有 6 個文件被更改,包括 301 次插入22 次删除
  1. 6 8
      init_serve/task.go
  2. 19 0
      models/crm/admin.go
  3. 19 0
      models/eta/admin.go
  4. 10 4
      services/cache_queue.go
  5. 240 4
      services/sys_user_sync.go
  6. 7 6
      utils/constants.go

+ 6 - 8
init_serve/task.go

@@ -3,13 +3,11 @@ package init_serve
 import "hongze/hz_crm_eta/services"
 
 func InitTask() {
-	go func() {
-		// 监听角色同步
-		services.ListenSyncRoleFromCrm()
-		services.ListenSyncRoleFromEta()
+	// 监听角色同步
+	go services.ListenSyncRoleFromCrm()
+	go services.ListenSyncRoleFromEta()
 
-		// 监听用户同步
-		services.ListenSyncAdminFromCrm()
-		services.ListenSyncAdminFromEta()
-	}()
+	// 监听用户同步
+	go services.ListenSyncAdminFromCrm()
+	go services.ListenSyncAdminFromEta()
 }

+ 19 - 0
models/crm/admin.go

@@ -49,6 +49,18 @@ func (m *Admin) TableName() string {
 	return "admin"
 }
 
+// Create 新增角色
+func (m *Admin) Create() (err error) {
+	err = global.MYSQL["hz_crm"].Create(m).Error
+	return
+}
+
+// Update 更新角色
+func (m *Admin) Update(cols []string) (err error) {
+	err = global.MYSQL["hz_crm"].Model(m).Select(cols).Updates(m).Error
+	return
+}
+
 // GetSysUserById 主键获取系统用户
 func GetSysUserById(sysUserId int) (item *Admin, err error) {
 	err = global.MYSQL["hz_crm"].Where("admin_id = ?", sysUserId).First(&item).Error
@@ -60,3 +72,10 @@ func GetSysUserByAdminName(adminName string) (item *Admin, err error) {
 	err = global.MYSQL["hz_crm"].Where("admin_name = ?", adminName).First(&item).Error
 	return
 }
+
+// DeleteSysUserByName 根据用户名删除用户
+func DeleteSysUserByName(adminName string) (err error) {
+	sql := `DELETE FROM admin WHERE admin_name = ? LIMIT 1`
+	err = global.MYSQL["hz_crm"].Exec(sql, adminName).Error
+	return
+}

+ 19 - 0
models/eta/admin.go

@@ -49,6 +49,18 @@ func (m *Admin) TableName() string {
 	return "admin"
 }
 
+// Create 新增角色
+func (m *Admin) Create() (err error) {
+	err = global.MYSQL["hz_eta"].Create(m).Error
+	return
+}
+
+// Update 更新角色
+func (m *Admin) Update(cols []string) (err error) {
+	err = global.MYSQL["hz_eta"].Model(m).Select(cols).Updates(m).Error
+	return
+}
+
 // GetSysUserById 主键获取系统用户
 func GetSysUserById(sysUserId int) (item *Admin, err error) {
 	err = global.MYSQL["hz_eta"].Where("admin_id = ?", sysUserId).First(&item).Error
@@ -60,3 +72,10 @@ func GetSysUserByAdminName(adminName string) (item *Admin, err error) {
 	err = global.MYSQL["hz_eta"].Where("admin_name = ?", adminName).First(&item).Error
 	return
 }
+
+// DeleteSysUserByName 根据用户名删除用户
+func DeleteSysUserByName(adminName string) (err error) {
+	sql := `DELETE FROM admin WHERE admin_name = ? LIMIT 1`
+	err = global.MYSQL["hz_eta"].Exec(sql, adminName).Error
+	return
+}

+ 10 - 4
services/cache_queue.go

@@ -1,6 +1,7 @@
 package services
 
 import (
+	"encoding/json"
 	"fmt"
 	"hongze/hz_crm_eta/global"
 	"hongze/hz_crm_eta/utils"
@@ -15,7 +16,8 @@ func ListenSyncAdminFromCrm() {
 	}()
 	for {
 		global.Rc.Brpop(utils.CACHE_SYNC_SYS_USER_FROM_CRM, func(b []byte) {
-			adminName := string(b)
+			var adminName string
+			_ = json.Unmarshal(b, &adminName)
 			_ = HandleSyncAdminFromCrm(utils.SOURCE_CRM_FLAG, adminName)
 		})
 	}
@@ -30,7 +32,8 @@ func ListenSyncAdminFromEta() {
 	}()
 	for {
 		global.Rc.Brpop(utils.CACHE_SYNC_SYS_USER_FROM_ETA, func(b []byte) {
-			adminName := string(b)
+			var adminName string
+			_ = json.Unmarshal(b, &adminName)
 			_ = HandleSyncAdminFromCrm(utils.SOURCE_ETA_FLAG, adminName)
 		})
 	}
@@ -43,9 +46,11 @@ func ListenSyncRoleFromCrm() {
 			fmt.Println("[ListenSyncRoleFromCrm]", err)
 		}
 	}()
+	global.Rc.LPush(utils.CACHE_SYNC_SYS_ROLE_FROM_CRM, "同步角色")
 	for {
 		global.Rc.Brpop(utils.CACHE_SYNC_SYS_ROLE_FROM_CRM, func(b []byte) {
-			roleName := string(b)
+			var roleName string
+			_ = json.Unmarshal(b, &roleName)
 			_ = HandleSyncSysRole(utils.SOURCE_CRM_FLAG, roleName)
 		})
 	}
@@ -60,7 +65,8 @@ func ListenSyncRoleFromEta() {
 	}()
 	for {
 		global.Rc.Brpop(utils.CACHE_SYNC_SYS_ROLE_FROM_ETA, func(b []byte) {
-			roleName := string(b)
+			var roleName string
+			_ = json.Unmarshal(b, &roleName)
 			_ = HandleSyncSysRole(utils.SOURCE_ETA_FLAG, roleName)
 		})
 	}

+ 240 - 4
services/sys_user_sync.go

@@ -4,6 +4,7 @@ import (
 	"fmt"
 	"hongze/hz_crm_eta/models/crm"
 	"hongze/hz_crm_eta/models/eta"
+	"hongze/hz_crm_eta/services/alarm_msg"
 	"hongze/hz_crm_eta/utils"
 	"time"
 )
@@ -17,6 +18,13 @@ func HandleSyncSysRole(source int, roleName string) (err error) {
 	if source != utils.SOURCE_CRM_FLAG && source != utils.SOURCE_ETA_FLAG {
 		return
 	}
+	defer func() {
+		if err != nil {
+			tips := fmt.Sprintf("CRM-ETA同步系统角色失败, source: %d, roleName: %s, errMsg: %s", source, roleName, err.Error())
+			fmt.Println(tips)
+			go alarm_msg.SendAlarmMsg(tips, 3)
+		}
+	}()
 
 	// CRM
 	if source == utils.SOURCE_CRM_FLAG {
@@ -46,10 +54,11 @@ func HandleSyncSysRole(source int, roleName string) (err error) {
 			newRole.RoleLevel = crmRole.RoleLevel
 			newRole.CreateTime = time.Now().Local()
 			newRole.ModifyTime = time.Now().Local()
-			if e = newRole.Create(); e != nil {
+			e = newRole.Create()
+			if e != nil {
 				err = fmt.Errorf("新增ETA对应角色失败, Err: " + e.Error())
-				return
 			}
+			return
 		}
 		// 更新
 		etaRole.RoleName = crmRole.RoleName
@@ -90,10 +99,11 @@ func HandleSyncSysRole(source int, roleName string) (err error) {
 		newRole.RoleLevel = etaRole.RoleLevel
 		newRole.CreateTime = time.Now().Local()
 		newRole.ModifyTime = time.Now().Local()
-		if e = newRole.Create(); e != nil {
+		e = newRole.Create()
+		if e != nil {
 			err = fmt.Errorf("新增CRM对应角色失败, Err: " + e.Error())
-			return
 		}
+		return
 	}
 	// 更新
 	crmRole.RoleName = etaRole.RoleName
@@ -111,5 +121,231 @@ func HandleSyncSysRole(source int, roleName string) (err error) {
 
 // HandleSyncAdminFromCrm 同步系统用户
 func HandleSyncAdminFromCrm(source int, adminName string) (err error) {
+	if adminName == "" {
+		return
+	}
+	if source != utils.SOURCE_CRM_FLAG && source != utils.SOURCE_ETA_FLAG {
+		return
+	}
+	defer func() {
+		if err != nil {
+			tips := fmt.Sprintf("CRM-ETA同步系统用户失败, source: %d, adminName: %s, errMsg: %s", source, adminName, err.Error())
+			fmt.Println(tips)
+			go alarm_msg.SendAlarmMsg(tips, 3)
+		}
+	}()
+
+	// CRM
+	if source == utils.SOURCE_CRM_FLAG {
+		// 获取用户不存在, 则表示CRM删除了该用户, 需删除对应ETA用户
+		crmUser, e := crm.GetSysUserByAdminName(adminName)
+		if e != nil {
+			if e != utils.ErrNoRow {
+				err = fmt.Errorf("获取CRM用户信息失败, Err: " + e.Error())
+				return
+			}
+			_ = eta.DeleteSysUserByName(adminName)
+			return
+		}
+
+		// 获取ETA对应用户, 存在则更新, 否则新增
+		etaUser, e := eta.GetSysUserByAdminName(adminName)
+		if e != nil {
+			if e != utils.ErrNoRow {
+				err = fmt.Errorf("获取ETA对应用户信息失败, Err: " + e.Error())
+				return
+			}
+			// 新增
+			newUser := new(eta.Admin)
+			newUser.AdminName = crmUser.AdminName
+			newUser.AdminAvatar = crmUser.AdminAvatar
+			newUser.RealName = crmUser.RealName
+			newUser.Password = crmUser.Password
+			newUser.LastUpdatedPasswordTime = crmUser.LastUpdatedPasswordTime
+			newUser.Enabled = crmUser.Enabled
+			newUser.Email = crmUser.Email
+			newUser.LastLoginTime = crmUser.LastLoginTime
+			newUser.CreatedTime = time.Now().Local()
+			newUser.LastUpdatedTime = time.Now().Local()
+			newUser.Role = crmUser.Role
+			newUser.Mobile = crmUser.Mobile
+			newUser.RoleType = crmUser.RoleType
+			newUser.RoleId = crmUser.RoleId // 理论上角色也会同步ID应该也是一样
+			newUser.RoleName = crmUser.RoleName
+			newUser.RoleTypeCode = crmUser.RoleTypeCode
+			newUser.DepartmentId = crmUser.DepartmentId
+			newUser.DepartmentName = crmUser.DepartmentName
+			newUser.GroupId = crmUser.GroupId
+			newUser.GroupName = crmUser.GroupName
+			newUser.Authority = crmUser.Authority
+			newUser.Position = crmUser.Position
+			newUser.DirectorId = crmUser.DirectorId
+			newUser.DisableTime = crmUser.DisableTime
+			newUser.ChartPermission = crmUser.ChartPermission
+			newUser.EdbPermission = crmUser.EdbPermission
+			newUser.MysteelChemicalPermission = crmUser.MysteelChemicalPermission
+			newUser.OpenId = crmUser.OpenId
+			newUser.UnionId = crmUser.UnionId
+			newUser.PredictEdbPermission = crmUser.PredictEdbPermission
+			newUser.Province = crmUser.Province
+			newUser.ProvinceCode = crmUser.ProvinceCode
+			newUser.City = crmUser.City
+			newUser.CityCode = crmUser.CityCode
+			newUser.EmployeeId = crmUser.EmployeeId
+			e = newUser.Create()
+			if e != nil {
+				err = fmt.Errorf("新增ETA对应用户失败, Err: " + e.Error())
+			}
+			return
+		}
+		// 更新
+		etaUser.AdminName = crmUser.AdminName
+		etaUser.AdminAvatar = crmUser.AdminAvatar
+		etaUser.RealName = crmUser.RealName
+		etaUser.Enabled = crmUser.Enabled
+		etaUser.Email = crmUser.Email
+		etaUser.LastUpdatedTime = time.Now().Local()
+		etaUser.Role = crmUser.Role
+		etaUser.Mobile = crmUser.Mobile
+		etaUser.RoleType = crmUser.RoleType
+		etaUser.RoleId = crmUser.RoleId
+		etaUser.RoleName = crmUser.RoleName
+		etaUser.RoleTypeCode = crmUser.RoleTypeCode
+		etaUser.DepartmentId = crmUser.DepartmentId
+		etaUser.DepartmentName = crmUser.DepartmentName
+		etaUser.GroupId = crmUser.GroupId
+		etaUser.GroupName = crmUser.GroupName
+		etaUser.Authority = crmUser.Authority
+		etaUser.Position = crmUser.Position
+		etaUser.DirectorId = crmUser.DirectorId
+		etaUser.DisableTime = crmUser.DisableTime
+		etaUser.ChartPermission = crmUser.ChartPermission
+		etaUser.EdbPermission = crmUser.EdbPermission
+		etaUser.MysteelChemicalPermission = crmUser.MysteelChemicalPermission
+		etaUser.OpenId = crmUser.OpenId
+		etaUser.UnionId = crmUser.UnionId
+		etaUser.PredictEdbPermission = crmUser.PredictEdbPermission
+		etaUser.Province = crmUser.Province
+		etaUser.ProvinceCode = crmUser.ProvinceCode
+		etaUser.City = crmUser.City
+		etaUser.CityCode = crmUser.CityCode
+		etaUser.EmployeeId = crmUser.EmployeeId
+		cols := []string{
+			"AdminName", "AdminAvatar", "RealName", "Enabled", "Email", "LastUpdatedTime",
+			"Role", "Mobile", "RoleType", "RoleId", "RoleName", "RoleTypeCode", "DepartmentId", "DepartmentName", "GroupId", "GroupName",
+			"Authority", "Position", "DirectorId", "DisableTime", "ChartPermission", "EdbPermission", "MysteelChemicalPermission", "OpenId",
+			"UnionId", "PredictEdbPermission", "Province", "ProvinceCode", "City", "CityCode", "EmployeeId",
+		}
+		e = etaUser.Update(cols)
+		if e != nil {
+			err = fmt.Errorf("更新ETA对应用户失败, Err: " + e.Error())
+		}
+		return
+	}
+
+	// ETA
+	etaUser, e := crm.GetSysUserByAdminName(adminName)
+	if e != nil {
+		if e != utils.ErrNoRow {
+			err = fmt.Errorf("获取ETA用户信息失败, Err: " + e.Error())
+			return
+		}
+		_ = eta.DeleteSysUserByName(adminName)
+		return
+	}
+
+	crmUser, e := eta.GetSysUserByAdminName(adminName)
+	if e != nil {
+		if e != utils.ErrNoRow {
+			err = fmt.Errorf("获取ETA对应用户信息失败, Err: " + e.Error())
+			return
+		}
+		// 新增
+		newUser := new(eta.Admin)
+		newUser.AdminName = etaUser.AdminName
+		newUser.AdminAvatar = etaUser.AdminAvatar
+		newUser.RealName = etaUser.RealName
+		newUser.Password = etaUser.Password
+		newUser.LastUpdatedPasswordTime = etaUser.LastUpdatedPasswordTime
+		newUser.Enabled = etaUser.Enabled
+		newUser.Email = etaUser.Email
+		newUser.LastLoginTime = etaUser.LastLoginTime
+		newUser.CreatedTime = time.Now().Local()
+		newUser.LastUpdatedTime = time.Now().Local()
+		newUser.Role = etaUser.Role
+		newUser.Mobile = etaUser.Mobile
+		newUser.RoleType = etaUser.RoleType
+		newUser.RoleId = etaUser.RoleId
+		newUser.RoleName = etaUser.RoleName
+		newUser.RoleTypeCode = etaUser.RoleTypeCode
+		newUser.DepartmentId = etaUser.DepartmentId
+		newUser.DepartmentName = etaUser.DepartmentName
+		newUser.GroupId = etaUser.GroupId
+		newUser.GroupName = etaUser.GroupName
+		newUser.Authority = etaUser.Authority
+		newUser.Position = etaUser.Position
+		newUser.DirectorId = etaUser.DirectorId
+		newUser.DisableTime = etaUser.DisableTime
+		newUser.ChartPermission = etaUser.ChartPermission
+		newUser.EdbPermission = etaUser.EdbPermission
+		newUser.MysteelChemicalPermission = etaUser.MysteelChemicalPermission
+		newUser.OpenId = etaUser.OpenId
+		newUser.UnionId = etaUser.UnionId
+		newUser.PredictEdbPermission = etaUser.PredictEdbPermission
+		newUser.Province = etaUser.Province
+		newUser.ProvinceCode = etaUser.ProvinceCode
+		newUser.City = etaUser.City
+		newUser.CityCode = etaUser.CityCode
+		newUser.EmployeeId = etaUser.EmployeeId
+		e = newUser.Create()
+		if e != nil {
+			err = fmt.Errorf("新增ETA对应用户失败, Err: " + e.Error())
+		}
+		return
+	}
+	// 更新
+	crmUser.AdminName = etaUser.AdminName
+	crmUser.AdminAvatar = etaUser.AdminAvatar
+	crmUser.RealName = etaUser.RealName
+	crmUser.Password = etaUser.Password
+	crmUser.LastUpdatedPasswordTime = etaUser.LastUpdatedPasswordTime
+	crmUser.Enabled = etaUser.Enabled
+	crmUser.Email = etaUser.Email
+	crmUser.LastUpdatedTime = time.Now().Local()
+	crmUser.Role = etaUser.Role
+	crmUser.Mobile = etaUser.Mobile
+	crmUser.RoleType = etaUser.RoleType
+	crmUser.RoleId = etaUser.RoleId
+	crmUser.RoleName = etaUser.RoleName
+	crmUser.RoleTypeCode = etaUser.RoleTypeCode
+	crmUser.DepartmentId = etaUser.DepartmentId
+	crmUser.DepartmentName = etaUser.DepartmentName
+	crmUser.GroupId = etaUser.GroupId
+	crmUser.GroupName = etaUser.GroupName
+	crmUser.Authority = etaUser.Authority
+	crmUser.Position = etaUser.Position
+	crmUser.DirectorId = etaUser.DirectorId
+	crmUser.DisableTime = etaUser.DisableTime
+	crmUser.ChartPermission = etaUser.ChartPermission
+	crmUser.EdbPermission = etaUser.EdbPermission
+	crmUser.MysteelChemicalPermission = etaUser.MysteelChemicalPermission
+	crmUser.OpenId = etaUser.OpenId
+	crmUser.UnionId = etaUser.UnionId
+	crmUser.PredictEdbPermission = etaUser.PredictEdbPermission
+	crmUser.Province = etaUser.Province
+	crmUser.ProvinceCode = etaUser.ProvinceCode
+	crmUser.City = etaUser.City
+	crmUser.CityCode = etaUser.CityCode
+	crmUser.EmployeeId = etaUser.EmployeeId
+	cols := []string{
+		"AdminName", "AdminAvatar", "RealName", "Password", "LastUpdatedPasswordTime", "Enabled", "Email", "LastUpdatedTime",
+		"Role", "Mobile", "RoleType", "RoleId", "RoleName", "RoleTypeCode", "DepartmentId", "DepartmentName", "GroupId", "GroupName",
+		"Authority", "Position", "DirectorId", "DisableTime", "ChartPermission", "EdbPermission", "MysteelChemicalPermission", "OpenId",
+		"UnionId", "PredictEdbPermission", "Province", "ProvinceCode", "City", "CityCode", "EmployeeId",
+	}
+	e = crmUser.Update(cols)
+	if e != nil {
+		err = fmt.Errorf("更新CRM对应用户失败, Err: " + e.Error())
+	}
 	return
 }

+ 7 - 6
utils/constants.go

@@ -27,8 +27,8 @@ const (
 )
 
 const (
-	CACHE_CRM_AUTH_CODE_PREFIX = "hz_crm_eta:crm:auth_code:"
-	CACHE_ETA_AUTH_CODE_PREFIX = "hz_crm_eta:eta:auth_code:"
+	CACHE_CRM_AUTH_CODE_PREFIX = "hz_crm_eta:crm_auth_code_"
+	CACHE_ETA_AUTH_CODE_PREFIX = "hz_crm_eta:eta_auth_code_"
 )
 
 // 管理员,ficc管理员,ficc销售,权益管理员,权益销售。
@@ -79,9 +79,10 @@ const (
 	SOURCE_ETA_FLAG = 2
 )
 
+// 同步角色和用户的缓存队列key
 const (
-	CACHE_SYNC_SYS_USER_FROM_CRM = "hz_crm_eta:crm_admin_sync:list"
-	CACHE_SYNC_SYS_USER_FROM_ETA = "hz_crm_eta:eta_admin_sync:list"
-	CACHE_SYNC_SYS_ROLE_FROM_CRM = "hz_crm_eta:crm_role_sync:list"
-	CACHE_SYNC_SYS_ROLE_FROM_ETA = "hz_crm_eta:eta_role_sync:list"
+	CACHE_SYNC_SYS_USER_FROM_CRM = "hz_crm_eta:crm_admin_sync"
+	CACHE_SYNC_SYS_ROLE_FROM_CRM = "hz_crm_eta:crm_role_sync"
+	CACHE_SYNC_SYS_USER_FROM_ETA = "hz_crm_eta:eta_admin_sync"
+	CACHE_SYNC_SYS_ROLE_FROM_ETA = "hz_crm_eta:eta_role_sync"
 )