Browse Source

Merge branch 'needs/855'

hsun 1 year ago
parent
commit
c901bc2377

+ 240 - 37
controllers/english_report/english_auth.go

@@ -4,20 +4,18 @@ import (
 	"encoding/json"
 	"eta/eta_api/controllers"
 	"eta/eta_api/models"
+	"eta/eta_api/models/company"
 	"eta/eta_api/models/system"
 	"eta/eta_api/models/system/request"
 	"eta/eta_api/models/system/response"
 	"eta/eta_api/utils"
+	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"strconv"
 	"strings"
 	"time"
 )
 
-var EnglishAuthRoles = []string{
-	system.EnglishAuthCompanyRole, system.EnglishAuthReportRole, system.EnglishAuthPPTRole, system.EnglishAuthDayNewRole,
-}
-
 // EnglishAuthController 英文销售权限
 type EnglishAuthController struct {
 	controllers.BaseAuthController
@@ -31,6 +29,9 @@ type EnglishAuthController struct {
 func (this *EnglishAuthController) List() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
@@ -53,11 +54,35 @@ func (this *EnglishAuthController) List() {
 	}
 	startSize = paging.StartIndex(currentIndex, pageSize)
 
+	// 获取英文角色配置
+	confRoles := make([]company.ConfEnAuthRole, 0)
+	authKey := company.ConfEnAuthRoleKey
+	confAuth, e := company.GetConfigDetailByCode(authKey)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取英文权限角色配置失败, Err: " + e.Error()
+		return
+	}
+	if confAuth.ConfigValue == "" {
+		br.Msg = "获取失败"
+		br.ErrMsg = "英文权限角色配置为空"
+		return
+	}
+	if e := json.Unmarshal([]byte(confAuth.ConfigValue), &confRoles); e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "英文权限角色配置有误"
+		return
+	}
+	roleCodes := make([]string, 0)
+	for _, v := range confRoles {
+		roleCodes = append(roleCodes, v.RoleCode)
+	}
+
 	// 获取权限列表
 	var cond string
 	var pars []interface{}
-	cond += ` AND r.role_type_code IN (` + utils.GetOrmInReplace(len(EnglishAuthRoles)) + `)`
-	pars = append(pars, EnglishAuthRoles)
+	cond += ` AND r.role_type_code IN (` + utils.GetOrmInReplace(len(roleCodes)) + `)`
+	pars = append(pars, roleCodes)
 	total, adminList, err := system.GetEnglishAuthRoleAdminList(cond, pars, startSize, pageSize)
 	if err != nil {
 		br.Msg = "获取管理账号列表失败!"
@@ -166,10 +191,12 @@ func (this *EnglishAuthController) List() {
 func (this *EnglishAuthController) BatchAdd() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
-
 	sysUser := this.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
@@ -177,6 +204,13 @@ func (this *EnglishAuthController) BatchAdd() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
+
 	var req request.AddEnglishAuthRoleAdminReq
 	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
 	if err != nil {
@@ -210,14 +244,38 @@ func (this *EnglishAuthController) BatchAdd() {
 		return
 	}
 
-	// 获取英文权限角色IDs
-	roleIds, e := system.GetEnglishAuthRoleIds(EnglishAuthRoles)
+	// 获取英文角色配置
+	confRoles := make([]company.ConfEnAuthRole, 0)
+	authKey := company.ConfEnAuthRoleKey
+	confAuth, e := company.GetConfigDetailByCode(authKey)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取英文权限角色配置失败, Err: " + e.Error()
+		return
+	}
+	if confAuth.ConfigValue == "" {
+		br.Msg = "获取失败"
+		br.ErrMsg = "英文权限角色配置为空"
+		return
+	}
+	if e := json.Unmarshal([]byte(confAuth.ConfigValue), &confRoles); e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "英文权限角色配置有误"
+		return
+	}
+	roleCodes := make([]string, 0)
+	for _, v := range confRoles {
+		roleCodes = append(roleCodes, v.RoleCode)
+	}
+
+	// 获取英文权限角色
+	roleItems, e := system.GetEnglishAuthRoleItems(roleCodes)
 	if e != nil {
 		br.Msg = "新增失败"
 		br.ErrMsg = "获取英文权限角色IDs失败, Err: " + e.Error()
 		return
 	}
-	if len(roleIds) == 0 || len(roleIds) != len(EnglishAuthRoles) {
+	if len(roleItems) == 0 || len(roleItems) != len(roleCodes) {
 		br.Msg = "英文权限角色信息有误"
 		return
 	}
@@ -225,7 +283,7 @@ func (this *EnglishAuthController) BatchAdd() {
 	// 查询已绑定的管理员账号
 	var noBindIds []int
 	bindMap := make(map[int]bool)
-	hasBindList, e := system.CheckEnglishAuthRoleAdminByAdminIds(adminIds, EnglishAuthRoles)
+	hasBindList, e := system.CheckEnglishAuthRoleAdminByAdminIds(adminIds, roleCodes)
 	if e != nil {
 		br.Msg = "新增失败"
 		br.ErrMsg = "查询已绑定英文权限的账号失败, Err:" + e.Error()
@@ -245,24 +303,50 @@ func (this *EnglishAuthController) BatchAdd() {
 		return
 	}
 
+	// 获取未绑定的用户列表
+	unboundAdmins := make([]*system.Admin, 0)
+	{
+		cond := fmt.Sprintf(` AND admin_id IN (%s)`, utils.GetOrmInReplace(len(noBindIds)))
+		pars := make([]interface{}, 0)
+		pars = append(pars, noBindIds)
+		admins, e := system.GetSysAdminList(cond, pars, []string{}, "")
+		if e != nil {
+			br.Msg = "操作失败"
+			br.ErrMsg = "获取未绑定的用户列表失败, Err: " + e.Error()
+			return
+		}
+		unboundAdmins = admins
+	}
+
 	// 新增绑定关系
+	var syncRoles []system.SyncAdminEnRole
 	nowTime := time.Now().Local()
-	newBinds := make([]*system.SysRoleAdmin, 0)
-	for i := range noBindIds {
-		for r := range roleIds {
+	newBounds := make([]*system.SysRoleAdmin, 0)
+	for _, a := range unboundAdmins {
+		var d system.SyncAdminEnRole
+		d.AdminName = a.AdminName
+		for r := range roleItems {
 			v := &system.SysRoleAdmin{
-				AdminId:    noBindIds[i],
-				RoleId:     roleIds[r],
+				AdminId:    a.AdminId,
+				RoleId:     roleItems[r].RoleId,
 				CreateTime: nowTime,
 			}
-			newBinds = append(newBinds, v)
+			newBounds = append(newBounds, v)
+			d.RoleCodes = append(d.RoleCodes, roleItems[r].RoleTypeCode)
 		}
+		syncRoles = append(syncRoles, d)
 	}
-	if e = system.AddRoleAdminBatch(newBinds); e != nil {
+	if e = system.AddRoleAdminBatch(newBounds); e != nil {
 		br.Msg = "新增失败"
 		br.ErrMsg = "新增英文权限绑定关系失败, Err:" + e.Error()
 		return
 	}
+
+	// 写入同步缓存
+	for _, v := range syncRoles {
+		_ = utils.Rc.LPush(utils.CACHE_SYNC_USER_EN_ROLE, v)
+	}
+
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "操作成功"
@@ -277,6 +361,9 @@ func (this *EnglishAuthController) BatchAdd() {
 func (this *EnglishAuthController) Detail() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
@@ -293,8 +380,32 @@ func (this *EnglishAuthController) Detail() {
 		return
 	}
 
+	// 获取英文角色配置
+	confRoles := make([]company.ConfEnAuthRole, 0)
+	authKey := company.ConfEnAuthRoleKey
+	confAuth, e := company.GetConfigDetailByCode(authKey)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取英文权限角色配置失败, Err: " + e.Error()
+		return
+	}
+	if confAuth.ConfigValue == "" {
+		br.Msg = "获取失败"
+		br.ErrMsg = "英文权限角色配置为空"
+		return
+	}
+	if e := json.Unmarshal([]byte(confAuth.ConfigValue), &confRoles); e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "英文权限角色配置有误"
+		return
+	}
+	roleCodes := make([]string, 0)
+	for _, v := range confRoles {
+		roleCodes = append(roleCodes, v.RoleCode)
+	}
+
 	resp := make([]*response.EnglishAuthRoleDetailResp, 0)
-	authList, e := system.GetAdminEnglishAuthRoleDetail(adminId, EnglishAuthRoles)
+	authList, e := system.GetAdminEnglishAuthRoleDetail(adminId, roleCodes)
 	if e != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取管理员英文权限详情失败, Err:" + e.Error()
@@ -305,18 +416,12 @@ func (this *EnglishAuthController) Detail() {
 		authMap[authList[i].RoleTypeCode] = true
 	}
 
-	var englishAuthRolesMap = map[string]string{
-		system.EnglishAuthCompanyRole: "英文客户列表",
-		system.EnglishAuthReportRole:  "英文研报",
-		system.EnglishAuthPPTRole:     "英文PPT",
-		system.EnglishAuthDayNewRole:  "每日资讯",
-	}
-	for i, v := range englishAuthRolesMap {
+	for _, v := range confRoles {
 		resp = append(resp, &response.EnglishAuthRoleDetailResp{
 			AdminId:      adminId,
-			AuthName:     v,
-			RoleTypeCode: i,
-			AuthOk:       authMap[i],
+			AuthName:     v.RoleName,
+			RoleTypeCode: v.RoleCode,
+			AuthOk:       authMap[v.RoleCode],
 		})
 	}
 	br.Ret = 200
@@ -334,6 +439,9 @@ func (this *EnglishAuthController) Detail() {
 func (this *EnglishAuthController) Edit() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
@@ -344,6 +452,12 @@ func (this *EnglishAuthController) Edit() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
 	var req request.EditEnglishAuthRoleAdminReq
 	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
 	if err != nil {
@@ -364,15 +478,49 @@ func (this *EnglishAuthController) Edit() {
 		br.Msg = "请选择权限"
 		return
 	}
+
+	// 若用户不存在, 则忽略
+	admin, e := system.GetSysAdminById(req.AdminId)
+	if e != nil {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
+
+	// 获取英文角色配置
+	confRoles := make([]company.ConfEnAuthRole, 0)
+	authKey := company.ConfEnAuthRoleKey
+	confAuth, e := company.GetConfigDetailByCode(authKey)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取英文权限角色配置失败, Err: " + e.Error()
+		return
+	}
+	if confAuth.ConfigValue == "" {
+		br.Msg = "获取失败"
+		br.ErrMsg = "英文权限角色配置为空"
+		return
+	}
+	if e := json.Unmarshal([]byte(confAuth.ConfigValue), &confRoles); e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "英文权限角色配置有误"
+		return
+	}
+	roleCodes := make([]string, 0)
+	for _, v := range confRoles {
+		roleCodes = append(roleCodes, v.RoleCode)
+	}
+
 	for i := range roleArr {
-		if !utils.InArrayByStr(EnglishAuthRoles, roleArr[i]) {
+		if !utils.InArrayByStr(roleCodes, roleArr[i]) {
 			br.Msg = "权限信息有误"
 			return
 		}
 	}
 
 	// 获取英文权限角色IDs
-	roleIds, e := system.GetEnglishAuthRoleIds(EnglishAuthRoles)
+	roleIds, e := system.GetEnglishAuthRoleIds(roleCodes)
 	if e != nil {
 		br.Msg = "新增失败"
 		br.ErrMsg = "获取英文权限角色IDs失败, Err: " + e.Error()
@@ -384,27 +532,32 @@ func (this *EnglishAuthController) Edit() {
 	}
 
 	// 获取编辑的权限角色IDs
-	editRoleIds, e := system.GetEnglishAuthRoleIds(roleArr)
+	editRoles, e := system.GetEnglishAuthRoleItems(roleArr)
 	if e != nil {
 		br.Msg = "新增失败"
 		br.ErrMsg = "获取编辑英文权限角色IDs失败, Err: " + e.Error()
 		return
 	}
-	if len(editRoleIds) != len(roleArr) {
+	if len(editRoles) != len(roleArr) {
 		br.Msg = "权限角色信息有误"
 		return
 	}
 
+	// 同步缓存
+	var syncData system.SyncAdminEnRole
+	syncData.AdminName = admin.AdminName
+
 	// 编辑权限
 	nowTime := time.Now().Local()
 	newBinds := make([]*system.SysRoleAdmin, 0)
-	for r := range editRoleIds {
+	for _, r := range editRoles {
 		v := &system.SysRoleAdmin{
 			AdminId:    req.AdminId,
-			RoleId:     editRoleIds[r],
+			RoleId:     r.RoleId,
 			CreateTime: nowTime,
 		}
 		newBinds = append(newBinds, v)
+		syncData.RoleCodes = append(syncData.RoleCodes, r.RoleTypeCode)
 	}
 	if e = system.EditEnglishAuthRoleAdmin(req.AdminId, roleIds, newBinds); e != nil {
 		br.Msg = "编辑失败"
@@ -412,6 +565,9 @@ func (this *EnglishAuthController) Edit() {
 		return
 	}
 
+	// 写入同步缓存
+	_ = utils.Rc.LPush(utils.CACHE_SYNC_USER_EN_ROLE, syncData)
+
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "操作成功"
@@ -426,10 +582,12 @@ func (this *EnglishAuthController) Edit() {
 func (this *EnglishAuthController) Del() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
-
 	sysUser := this.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
@@ -437,6 +595,12 @@ func (this *EnglishAuthController) Del() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
 	var req request.DelEnglishAuthRoleAdminReq
 	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
 	if err != nil {
@@ -449,8 +613,41 @@ func (this *EnglishAuthController) Del() {
 		return
 	}
 
+	// 若用户不存在, 则忽略
+	admin, e := system.GetSysAdminById(req.AdminId)
+	if e != nil {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
+
+	// 获取英文角色配置
+	confRoles := make([]company.ConfEnAuthRole, 0)
+	authKey := company.ConfEnAuthRoleKey
+	confAuth, e := company.GetConfigDetailByCode(authKey)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取英文权限角色配置失败, Err: " + e.Error()
+		return
+	}
+	if confAuth.ConfigValue == "" {
+		br.Msg = "获取失败"
+		br.ErrMsg = "英文权限角色配置为空"
+		return
+	}
+	if e := json.Unmarshal([]byte(confAuth.ConfigValue), &confRoles); e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "英文权限角色配置有误"
+		return
+	}
+	roleCodes := make([]string, 0)
+	for _, v := range confRoles {
+		roleCodes = append(roleCodes, v.RoleCode)
+	}
+
 	// 获取英文权限角色IDs
-	roleIds, e := system.GetEnglishAuthRoleIds(EnglishAuthRoles)
+	roleIds, e := system.GetEnglishAuthRoleIds(roleCodes)
 	if e != nil {
 		br.Msg = "删除失败"
 		br.ErrMsg = "获取英文权限角色IDs失败, Err: " + e.Error()
@@ -468,6 +665,12 @@ func (this *EnglishAuthController) Del() {
 		br.ErrMsg = "解除英文权限角色绑定关系失败, Err:" + e.Error()
 		return
 	}
+
+	// 写入同步缓存
+	var syncData system.SyncAdminEnRole
+	syncData.AdminName = admin.AdminName
+	_ = utils.Rc.LPush(utils.CACHE_SYNC_USER_EN_ROLE, syncData)
+
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "操作成功"

+ 8 - 0
models/company/company_config.go

@@ -6,6 +6,7 @@ import (
 
 const (
 	ConfAreaCodeListKey = "area_code_list" // 手机号区号列表
+	ConfEnAuthRoleKey   = "en_auth_role"   // 英文权限角色配置Key
 )
 
 type CrmConfig struct {
@@ -33,3 +34,10 @@ func GetConfigDetailByCode(configCode string) (item CrmConfig, err error) {
 	err = o.Raw(sql, configCode).QueryRow(&item)
 	return
 }
+
+// ConfEnAuthRole 配置-英文权限角色
+type ConfEnAuthRole struct {
+	RoleCode string `description:"角色编码"`
+	RoleName string `description:"角色名称"`
+	SyncCrm  bool   `description:"是否同步CRM"`
+}

+ 11 - 7
models/system/sys_role.go

@@ -7,13 +7,6 @@ import (
 	"time"
 )
 
-const (
-	EnglishAuthCompanyRole = "english_company_admin"
-	EnglishAuthReportRole  = "english_report_admin"
-	EnglishAuthPPTRole     = "english_ppt_admin"
-	EnglishAuthDayNewRole  = "english_day_new_admin"
-)
-
 type SysRoleAddReq struct {
 	RoleName string `description:"角色名称"`
 	RoleType string `description:"角色类型"`
@@ -251,3 +244,14 @@ func GetSysRoleMenuByRoleId(roleId int) (items []*SysRoleMenu, err error) {
 	_, err = orm.NewOrm().Raw(sql, roleId).QueryRows(&items)
 	return
 }
+
+// GetEnglishAuthRoleItems 获取英文权限角色
+func GetEnglishAuthRoleItems(roleCodes []string) (items []*SysRole, err error) {
+	if len(roleCodes) == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	sql := `SELECT * FROM sys_role WHERE role_type_code IN (` + utils.GetOrmInReplace(len(roleCodes)) + `)`
+	_, err = o.Raw(sql, roleCodes).QueryRows(&items)
+	return
+}

+ 6 - 0
models/system/sys_role_admin.go

@@ -248,3 +248,9 @@ func EditEnglishAuthRoleAdmin(adminId int, englishRoleIds []int, roleAdmins []*S
 	_, err = o.InsertMulti(len(roleAdmins), roleAdmins)
 	return
 }
+
+// SyncAdminEnRole 同步用户英文角色
+type SyncAdminEnRole struct {
+	AdminName string   `description:"用户名"`
+	RoleCodes []string `description:"角色Codes"`
+}

+ 5 - 4
utils/constants.go

@@ -203,10 +203,11 @@ const (
 	CACHE_KEY_DAYNEW_TRANSLATE        = "admin:day_new:translate"             //每日资讯中翻英
 	CACHE_KEY_ADMIN_OPERATE_RECORD    = "HZ_ADMIN_CACHE_ADMIN_OPERATE_RECORD" //系统用户操作日志队列
 
-	CACHE_SYNC_ADMIN      = "hz_crm_eta:sync_admin"      // 同步用户的缓存队列key
-	CACHE_SYNC_ROLE       = "hz_crm_eta:sync_role"       // 同步角色的缓存队列key
-	CACHE_SYNC_DEPARTMENT = "hz_crm_eta:sync_department" // 同步部门的缓存队列key
-	CACHE_SYNC_GROUP      = "hz_crm_eta:sync_group"      // 同步分组的缓存队列key
+	CACHE_SYNC_ADMIN        = "hz_crm_eta:sync_admin"        // 同步用户的缓存队列key
+	CACHE_SYNC_ROLE         = "hz_crm_eta:sync_role"         // 同步角色的缓存队列key
+	CACHE_SYNC_DEPARTMENT   = "hz_crm_eta:sync_department"   // 同步部门的缓存队列key
+	CACHE_SYNC_GROUP        = "hz_crm_eta:sync_group"        // 同步分组的缓存队列key
+	CACHE_SYNC_USER_EN_ROLE = "hz_crm_eta:sync_user_en_role" // 同步用户英文权限角色缓存队列key
 )
 
 // 模板消息推送类型