Browse Source

ETA用户英文权限角色同步

hsun 1 year ago
parent
commit
b11c0a3d56

+ 2 - 0
init_serve/task.go

@@ -8,4 +8,6 @@ func InitTask() {
 	go services.ListenSyncAdmin()
 	go services.ListenSyncDepartment()
 	go services.ListenSyncGroup()
+
+	go services.ListenSyncUserEnRole()
 }

+ 6 - 0
models/crm/sys_role.go

@@ -32,6 +32,12 @@ func (m *SysRole) Update(cols []string) (err error) {
 	return
 }
 
+// GetItemsByCondition 获取角色
+func (m *SysRole) GetItemsByCondition(condition string, pars []interface{}) (items []*SysRole, err error) {
+	err = global.MYSQL["hz_crm"].Where(condition, pars...).Find(&items).Error
+	return
+}
+
 // GetSysRoleById 主键获取角色
 func GetSysRoleById(roleId int) (item *SysRole, err error) {
 	err = global.MYSQL["hz_crm"].Where("role_id = ?", roleId).First(&item).Error

+ 40 - 0
models/crm/sys_role_admin.go

@@ -0,0 +1,40 @@
+package crm
+
+import (
+	"hongze/hz_crm_eta/global"
+	"time"
+)
+
+// SysRoleAdmin 管理员和角色映射表
+type SysRoleAdmin struct {
+	Id         int       `gorm:"primaryKey;column:id;type:int(11);not null" json:"id"`
+	RoleId     int       `gorm:"column:role_id;type:int(11);not null" json:"role_id"`                                    // 角色Id
+	AdminId    int       `gorm:"column:admin_id;type:bigint(20);not null" json:"admin_id"`                               // 管理后台账号Id
+	CreateTime time.Time `gorm:"column:create_time;type:datetime;not null;default:CURRENT_TIMESTAMP" json:"create_time"` // 创建时间
+}
+
+func (m *SysRoleAdmin) TableName() string {
+	return "sys_role_admin"
+}
+
+func (m *SysRoleAdmin) DeleteAndCreate(adminId int, roleIds []int, items []*SysRoleAdmin) (err error) {
+	tx := global.MYSQL["hz_crm"].Begin()
+	defer func() {
+		if err != nil {
+			tx.Rollback()
+		} else {
+			tx.Commit()
+		}
+	}()
+
+	sql := `DELETE FROM sys_role_admin WHERE admin_id = ? AND role_id IN (?)`
+	tx.Exec(sql, adminId, roleIds)
+
+	if len(items) > 0 {
+		err = tx.CreateInBatches(items, len(items)).Error
+		if err != nil {
+			return
+		}
+	}
+	return
+}

+ 36 - 0
models/eta/crm_config.go

@@ -0,0 +1,36 @@
+package eta
+
+import (
+	"hongze/hz_crm_eta/global"
+	"time"
+)
+
+const (
+	ConfEnAuthRoleKey = "en_auth_role" // 英文权限角色配置Key
+)
+
+// CrmConfig CRM配置表
+type CrmConfig struct {
+	ConfigId    int       `gorm:"primaryKey;column:config_id;type:int(11);not null" json:"config_id"`
+	ConfigCode  string    `gorm:"column:config_code;type:varchar(50);default:''" json:"config_code"` // 配置编码
+	ConfigValue string    `gorm:"column:config_value;type:text" json:"config_value"`                 // 配置值
+	Remark      string    `gorm:"column:remark;type:varchar(255);default:''" json:"remark"`          // 备注信息
+	CreateTime  time.Time `gorm:"column:create_time;type:datetime" json:"create_time"`               // 创建时间
+}
+
+func (m *CrmConfig) TableName() string {
+	return "crm_config"
+}
+
+// GetCrmConfByCode code获取配置
+func GetCrmConfByCode(code string) (item *CrmConfig, err error) {
+	err = global.MYSQL["hz_eta"].Where("config_code = ?", code).First(&item).Error
+	return
+}
+
+// ConfEnAuthRole 配置-英文权限角色
+type ConfEnAuthRole struct {
+	RoleCode string `description:"角色编码"`
+	RoleName string `description:"角色名称"`
+	SyncCrm  bool   `description:"是否同步CRM"`
+}

+ 19 - 0
services/cache_queue.go

@@ -70,3 +70,22 @@ func ListenSyncGroup() {
 		})
 	}
 }
+
+// ListenSyncUserEnRole 同步用户英文权限角色
+func ListenSyncUserEnRole() {
+	defer func() {
+		if err := recover(); err != nil {
+			fmt.Println("[ListenSyncUserEnRole]", err)
+		}
+	}()
+	for {
+		global.Rc.Brpop(utils.CACHE_SYNC_USER_EN_ROLE, func(b []byte) {
+			var d SyncAdminEnRole
+			_ = json.Unmarshal(b, &d)
+			fmt.Println("读到了")
+			fmt.Println(d.AdminName)
+			fmt.Println(d.RoleCodes)
+			_ = HandleSyncUserEnRole(d)
+		})
+	}
+}

+ 88 - 0
services/sys_user_sync.go

@@ -579,3 +579,91 @@ func HandleSyncGroup(data SyncGroupData) (err error) {
 	}
 	return
 }
+
+// SyncAdminEnRole 同步用户英文权限角色
+type SyncAdminEnRole struct {
+	AdminName string   `description:"用户名"`
+	RoleCodes []string `description:"角色Codes"`
+}
+
+// HandleSyncUserEnRole 同步用户英文权限角色
+func HandleSyncUserEnRole(data SyncAdminEnRole) (err error) {
+	if data.AdminName == "" {
+		return
+	}
+	defer func() {
+		if err != nil {
+			j, _ := json.Marshal(data)
+			tips := fmt.Sprintf("ETA同步至CRM英文权限角色失败, errMsg: %s\ndata: %s", err.Error(), string(j))
+			go alarm_msg.SendAlarmMsg(tips, 3)
+		}
+	}()
+
+	crmAdmin, e := crm.GetSysUserByAdminName(data.AdminName)
+	if e != nil {
+		return
+	}
+
+	// 获取英文权限角色配置
+	confRoles := make([]eta.ConfEnAuthRole, 0)
+	conf, e := eta.GetCrmConfByCode(eta.ConfEnAuthRoleKey)
+	if e != nil {
+		err = fmt.Errorf("获取英文权限角色配置失败, Err: %s", e.Error())
+		return
+	}
+	if conf.ConfigValue == "" {
+		err = fmt.Errorf("英文权限角色配置为空")
+		return
+	}
+	if e := json.Unmarshal([]byte(conf.ConfigValue), &confRoles); e != nil {
+		err = fmt.Errorf("英文权限角色配置有误, Err: %s", e.Error())
+		return
+	}
+	roleCodes := make([]string, 0)
+	for _, v := range confRoles {
+		roleCodes = append(roleCodes, v.RoleCode)
+	}
+
+	// 获取CRM英文权限角色
+	roles := make([]*crm.SysRole, 0)
+	{
+		ob := new(crm.SysRole)
+		cond := ` role_type_code IN (?)`
+		pars := make([]interface{}, 0)
+		pars = append(pars, roleCodes)
+		rs, e := ob.GetItemsByCondition(cond, pars)
+		if e != nil {
+			err = fmt.Errorf("获取英文权限角色失败, Err: %s", e.Error())
+			return
+		}
+		roles = rs
+	}
+	if len(roles) == 0 {
+		err = fmt.Errorf("英文权限角色为空")
+		return
+	}
+	roleIds := make([]int, 0)
+	roleCodeId := make(map[string]int)
+	for _, v := range roles {
+		roleIds = append(roleIds, v.RoleId)
+		roleCodeId[v.RoleTypeCode] = v.RoleId
+	}
+
+	// 清空并新增
+	items := make([]*crm.SysRoleAdmin, 0)
+	for _, v := range data.RoleCodes {
+		if roleCodeId[v] > 0 {
+			items = append(items, &crm.SysRoleAdmin{
+				AdminId:    crmAdmin.AdminId,
+				RoleId:     roleCodeId[v],
+				CreateTime: time.Now().Local(),
+			})
+		}
+	}
+	relateOb := new(crm.SysRoleAdmin)
+	if e = relateOb.DeleteAndCreate(crmAdmin.AdminId, roleIds, items); e != nil {
+		err = fmt.Errorf("新增用户英文权限角色失败, Err: %s", e.Error())
+		return
+	}
+	return
+}

+ 5 - 4
utils/constants.go

@@ -81,8 +81,9 @@ const (
 
 // 同步角色和用户的缓存队列key
 const (
-	CACHE_SYNC_ADMIN      = "hz_crm_eta:sync_admin"
-	CACHE_SYNC_ROLE       = "hz_crm_eta:sync_role"
-	CACHE_SYNC_DEPARTMENT = "hz_crm_eta:sync_department"
-	CACHE_SYNC_GROUP      = "hz_crm_eta:sync_group"
+	CACHE_SYNC_ADMIN        = "hz_crm_eta:sync_admin"
+	CACHE_SYNC_ROLE         = "hz_crm_eta:sync_role"
+	CACHE_SYNC_DEPARTMENT   = "hz_crm_eta:sync_department"
+	CACHE_SYNC_GROUP        = "hz_crm_eta:sync_group"
+	CACHE_SYNC_USER_EN_ROLE = "hz_crm_eta:sync_user_en_role" // 同步用户英文权限角色缓存队列key
 )