|
|
@@ -0,0 +1,195 @@
|
|
|
+package logic
|
|
|
+
|
|
|
+import (
|
|
|
+ "context"
|
|
|
+ "fmt"
|
|
|
+ "strings"
|
|
|
+
|
|
|
+ "git.i2edu.net/i2/i2-bill-erp/internal/svc"
|
|
|
+ "git.i2edu.net/i2/i2-bill-erp/model"
|
|
|
+ "git.i2edu.net/i2/i2-bill-erp/transform"
|
|
|
+ "github.com/thoas/go-funk"
|
|
|
+
|
|
|
+ "git.i2edu.net/i2/go-zero/core/logx"
|
|
|
+)
|
|
|
+
|
|
|
+var roleMap = map[string]map[string]string{
|
|
|
+ // ##渠道一级
|
|
|
+ "one_level_channel": map[string]string{"市场": "1001", "网络": "1002", "老推": "1003", "品牌": "1004", "其他": "1005"},
|
|
|
+ // ##任务
|
|
|
+ // #目标计划
|
|
|
+ // 市场人员计划
|
|
|
+ "mkt_marketer_plan_target": map[string]string{"市场人员划分": "user", "校区划分": "os"}, //
|
|
|
+ // 校区市场计划
|
|
|
+ "mkt_sch_market_plan": map[string]string{"校区划分": "os"},
|
|
|
+ // 销售人员计划
|
|
|
+ "mkt_ec_user_targetplan": map[string]string{"销售人员划分": "user", "校区划分": "os"}, //
|
|
|
+ // 校区销售计划
|
|
|
+ "mkt_sch_targetsign_plan": map[string]string{"校区划分": "os"},
|
|
|
+ // 客服人员计划
|
|
|
+ "mkt_ta_target_plan": map[string]string{"客服人员划分": "user", "校区划分": "os"}, //
|
|
|
+ // 校区客服计划
|
|
|
+ "mkt_sch_ta_targetplan": map[string]string{"校区划分": "os"},
|
|
|
+ // 生日提醒
|
|
|
+ "remind_birthday": map[string]string{"跟进校区划分": "os", "班型客服划分": "ta"},
|
|
|
+ // ##营销
|
|
|
+ // #线索管理
|
|
|
+ // 线索学员
|
|
|
+ "mkt_resource": map[string]string{"资源销售划分": "ec", "资源收集人划分": "load_user", "资源收集校区划分": "os",
|
|
|
+ "网络渠道划分": "tmk", "市场渠道划分": "mkt", "品牌渠道划分": "prod", "老推渠道划分": "old", "其他渠道划分": "other",
|
|
|
+ "非网络渠道划分": "no_tmk", "分配tmk划分": "allot_tmk", "资源录入人划分": "create_by", "收集城市划分": "tmk_city",
|
|
|
+ "资源收集校区筛选": "load_sch", "资源跟进校区筛选": "stu_sch"},
|
|
|
+ // 市场活动管理
|
|
|
+ "mkt_activity": map[string]string{"活动创建人划分": "user", "活动校区划分": "os"},
|
|
|
+ // #潜在学员管理
|
|
|
+ // 潜在学员列表
|
|
|
+ "existing_students": map[string]string{"学员销售划分": "ec", "学员跟进校区划分": "os",
|
|
|
+ "网络渠道划分": "tmk", "市场渠道划分": "mkt", "品牌渠道划分": "prod", "老推渠道划分": "old", "其他渠道划分": "other",
|
|
|
+ "资源收集校区筛选": "load_sch", "资源跟进校区筛选": "stu_sch", "资源收集人划分": "load_user", "分配tmk划分": "allot_tmk"},
|
|
|
+ // 老推学员列表
|
|
|
+ "old_students": map[string]string{"资源收集人划分": "load_user", "学员跟进校区划分": "os"},
|
|
|
+ // 邀约上门学员列表
|
|
|
+ "mkt_invite_visit": map[string]string{"资源收集人划分": "load_user", "学员销售划分": "ec", "资源收集校区划分": "os"},
|
|
|
+ // 无效资源列表
|
|
|
+ "invalid_students": map[string]string{"学员销售划分": "ec", "学员跟进校区划分": "os"},
|
|
|
+ // #试听课管理
|
|
|
+ // 试听课列表
|
|
|
+ "mkt_trial_lesson": map[string]string{"试听课客服划分": "ta", "试听课教师划分": "tea", "试听课校区划分": "os"},
|
|
|
+ // 试听课学员列表
|
|
|
+ "mkt_trial_lesson_student": map[string]string{"学员销售划分": "ec", "试听课教师划分": "ta", "试听课校区划分": "os",
|
|
|
+ "网络渠道划分": "tmk", "市场渠道划分": "mkt", "品牌渠道划分": "prod", "老推渠道划分": "old", "其他渠道划分": "other",
|
|
|
+ "收集城市划分": "tmk_city", "分配tmk划分": "allot_tmk", "资源收集人划分": "load_user", "资源收集校区划分": "load_sch"},
|
|
|
+ // tmk待分配学员列表
|
|
|
+ "mkt_stu_unallot_tmk": map[string]string{"资源销售划分": "ec", "资源收集人划分": "load_user", "资源收集校区划分": "os",
|
|
|
+ "网络渠道划分": "tmk", "市场渠道划分": "mkt", "品牌渠道划分": "prod", "老推渠道划分": "old", "其他渠道划分": "other",
|
|
|
+ "非网络渠道划分": "no_tmk", "资源录入人划分": "create_by", "收集城市划分": "tmk_city"},
|
|
|
+ // tmk已分配学员列表
|
|
|
+ "mkt_stu_allot_tmk": map[string]string{"收集城市划分": "os", "资源收集人划分": "user", "分配tmk划分": "tmk_user",
|
|
|
+ "网络渠道划分": "tmk", "市场渠道划分": "mkt", "品牌渠道划分": "prod", "老推渠道划分": "old", "其他渠道划分": "other"},
|
|
|
+ // 学员回访列表
|
|
|
+ "mkt_student_visit": map[string]string{"学员销售划分": "ec", "学员跟进校区划分": "os"},
|
|
|
+ // ##教务
|
|
|
+ "stu_class": map[string]string{"班级客服划分": "kf", "学员跟进校区划分": "os"},
|
|
|
+ "edu_tea_leave_management": map[string]string{"教师所属校区划分": "sys_os", "教师权限校区划分": "os", "教师划分": "tea"},
|
|
|
+ "crm_complaints_repair_order": map[string]string{"校区划分": "os"},
|
|
|
+ "order_student_class_type": map[string]string{"学员销售划分": "ec", "班型客服划分": "ta", "签单校区划分": "of_os",
|
|
|
+ "学员跟进校区划分": "os"},
|
|
|
+ "order_deposit_in": map[string]string{"学员销售划分": "ec", "班型客服划分": "ta", "学员跟进校区划分": "os"},
|
|
|
+ "edu_sc_class_tea": map[string]string{"班级所在校区划分": "os", "班级客服划分": "ta"},
|
|
|
+ "stu_tea_class_schedule": map[string]string{"班级所在校区划分": "os", "班级客服划分": "ta"},
|
|
|
+ // ##财务
|
|
|
+ "order_form": map[string]string{"学员跟进校区划分": "os", "签单校区划分": "of_os", "学员销售划分": "ec", "分配tmk划分": "allot_tmk",
|
|
|
+ "网络渠道划分": "tmk", "市场渠道划分": "mkt", "品牌渠道划分": "prod", "老推渠道划分": "old", "其他渠道划分": "other",
|
|
|
+ "学员收集人划分": "load_user", "学员班型客服划分": "ta", "收集城市划分": "tmk_city", "资源收集校区划分": "load_sch"},
|
|
|
+ "order_tb_form": map[string]string{"学员跟进校区划分": "os", "签单校区划分": "of_os", "学员销售划分": "ec", "分配tmk划分": "allot_tmk",
|
|
|
+ "网络渠道划分": "tmk", "市场渠道划分": "mkt", "品牌渠道划分": "prod", "老推渠道划分": "old", "其他渠道划分": "other",
|
|
|
+ "学员收集人划分": "load_user", "学员班型客服划分": "ta", "收集城市划分": "tmk_city", "资源收集校区划分": "load_sch"},
|
|
|
+ "order_refund": map[string]string{"学员跟进校区划分": "os", "签单校区划分": "of_os", "学员销售划分": "ec",
|
|
|
+ "学员收集人划分": "load_user", "班型分配班级客服划分": "ta"},
|
|
|
+ "fin_temp_storage_cz": map[string]string{"学员销售划分": "ec", "班型客服划分": "ta", "学员跟进校区划分": "os"},
|
|
|
+ "fn_student_account": map[string]string{"学员销售划分": "ec", "班型客服划分": "ta", "学员跟进校区划分": "os"},
|
|
|
+ "fin_stu_account_flow": map[string]string{"学员销售划分": "ec", "班型客服划分": "ta", "学员跟进校区划分": "os"},
|
|
|
+ "fin_invoice": map[string]string{"学员销售划分": "ec", "班型客服划分": "ta", "签单校区划分": "os"},
|
|
|
+ "fin_stu_integral_flow": map[string]string{"学员跟进校区划分": "os"},
|
|
|
+ "fin_yb_pay_flowing": map[string]string{"支付校区划分": "os"},
|
|
|
+ "fin_yeepay_reconciliations_record": map[string]string{"流水支付校区划分": "os"},
|
|
|
+ "base_class_manage": map[string]string{"班级客服划分": "ta", "班级校区划分": "os"},
|
|
|
+ "student": map[string]string{"学员跟进校区划分": "os", "学员销售划分": "ec", "学员收集人划分": "load_user", "班型分配客服划分": "ta"},
|
|
|
+ "order_student_gift": map[string]string{"学员跟进校区划分": "os", "班级客服划分": "ta"},
|
|
|
+ "edu_stu_ct_renew_log": map[string]string{"班型客服划分": "ta", "学员跟进校区划分": "os"},
|
|
|
+ "attendance_list": map[string]string{"班级校区划分": "os", "教师划分": "tea", "班型客服划分": "ta"},
|
|
|
+ "role_trial_lesson": map[string]string{"班级校区划分": "os", "教师划分": "tea", "试听课销售划分": "ec"},
|
|
|
+ "sys_user": map[string]string{"所属校区划分": "sys_os", "权限校区划分": "base_os"},
|
|
|
+ // "base_on_sale": map[string]string{"校区划分": "os"},
|
|
|
+ "stu_class_type_textbook": map[string]string{"学员跟进校区划分": "os"},
|
|
|
+ "edu_class_schedule_student": map[string]string{"班级客服划分": "ta", "学员跟进校区划分": "os"},
|
|
|
+ "edu_class_schedule_student_absenceList": map[string]string{"班型客服划分": "ta", "学员跟进校区划分": "os"},
|
|
|
+ "base_organ_school": map[string]string{"权限校区划分": "os"},
|
|
|
+ "ecs_stu": map[string]string{"班型客服划分": "ecs_ta", "班级状态修改权限": "manage"},
|
|
|
+ "encode": map[string]string{"导出联系方式加密": "export_stu_phone", "显示联系方式不加密": "list_stu_phone"},
|
|
|
+ "order_exchange_gift_jfsc": map[string]string{"积分兑换记录用户权限校区": "os"},
|
|
|
+ "task_pg": map[string]string{"批改作业权限": "os"},
|
|
|
+ "cmp_plan": map[string]string{"权限校区划分": "os", "班级客服划分": "ta"},
|
|
|
+ "eschool_stu_study_report": map[string]string{"班级所在校区划分": "os", "班级客服划分": "ta"},
|
|
|
+ "order_sch_achievement_divide": map[string]string{"所属校区划分": "base_os", "权限校区划分": "sys_os"},
|
|
|
+ "user_city": map[string]string{"所属校区划分": "base_os", "权限校区划分": "sys_os", "学员跟进校区划分": "os"},
|
|
|
+ "rl_hour_list": map[string]string{"权限校区划分": "os"},
|
|
|
+ "eschool_class_schedule_unit_pick": map[string]string{"学员跟进校区划分": "os", "班型客服划分": "ta"},
|
|
|
+ "teacher_ft": map[string]string{"权限校区划分": "os"},
|
|
|
+ "teacher_oa": map[string]string{"权限校区划分": "os"},
|
|
|
+
|
|
|
+ "fin_pay_flowing": map[string]string{"权限校区划分": "os"},
|
|
|
+ "fin_reconciliations_record": map[string]string{"权限校区划分": "os"},
|
|
|
+
|
|
|
+ // 兼职人员的数据
|
|
|
+ "acquirer_student": map[string]string{"本人及所管兼职划分": "self_acquirer", "本人及所管兼职和专员划分": "self_acquirer_market", "所管兼职和市场划分": "acquirer_market_mgn"},
|
|
|
+}
|
|
|
+
|
|
|
+type GetDataPermissionLogic struct {
|
|
|
+ ctx context.Context
|
|
|
+ svcCtx *svc.ServiceContext
|
|
|
+ logx.Logger
|
|
|
+}
|
|
|
+
|
|
|
+func NewGetDataPermissionLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetDataPermissionLogic {
|
|
|
+ return &GetDataPermissionLogic{
|
|
|
+ ctx: ctx,
|
|
|
+ svcCtx: svcCtx,
|
|
|
+ Logger: logx.WithContext(ctx),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 获取数据权限
|
|
|
+func (l *GetDataPermissionLogic) GetDataPermission(in *transform.DataPermissionReq) (*transform.DataPermissionRes, error) {
|
|
|
+ rule_code, UserId, params := in.RuleCode, in.UserId, transform.DataPermissionRes{}
|
|
|
+ var channelMap = map[string]string{
|
|
|
+ "mkt": "1001", "tmk": "1002", "old": "1003", "other": "1005", "prod": "1004",
|
|
|
+ }
|
|
|
+ mainRoleCode := []string{"tmk", "mkt", "prod", "old", "other", "no_tmk"}
|
|
|
+ if roleM, ok := roleMap[rule_code]; ok {
|
|
|
+ var roleRules []model.SysRoleDataPermission
|
|
|
+ err := l.svcCtx.SqlConn.QueryRowsPartial(&roleRules, `SELECT
|
|
|
+ sys_data_permission_detail.*
|
|
|
+ FROM
|
|
|
+ sys_data_permission, sys_data_permission_detail,sys_user_role
|
|
|
+ WHERE
|
|
|
+ sys_data_permission.id = sys_data_permission_detail.data_permission_id
|
|
|
+ AND FIND_IN_SET(sys_user_role.role_id, sys_data_permission_detail.role_id)
|
|
|
+ AND sys_user_role.del_flag = 0
|
|
|
+ AND sys_data_permission_detail.del_flag = 0
|
|
|
+ AND sys_data_permission.code = ?
|
|
|
+ AND sys_user_role.user_id = ?`, rule_code, UserId)
|
|
|
+ if err == nil && len(roleRules) > 0 {
|
|
|
+ roles := funk.Get(roleRules, "Rule").([]string)
|
|
|
+ roleStr := strings.Join(roles, ",")
|
|
|
+ if rule_code == "one_level_channel" {
|
|
|
+ params.MapList["role_channel"] = roleStr
|
|
|
+ } else {
|
|
|
+ var role_channel []string
|
|
|
+ for _, code := range mainRoleCode {
|
|
|
+ if strings.Index(fmt.Sprintf(",%v,", roleStr), fmt.Sprintf(",%v,", code)) >= 0 {
|
|
|
+ if channel, ok := channelMap[code]; ok {
|
|
|
+ role_channel = append(role_channel, channel)
|
|
|
+ } else {
|
|
|
+ params.MapList[fmt.Sprintf("role_%v", code)] = "true"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if len(role_channel) > 0 {
|
|
|
+ params.MapList["role_channel"] = strings.Join(role_channel, ",")
|
|
|
+ }
|
|
|
+ // 并列权限,如果有了os的权限,其他的权限就不使用了,如果需要增加别的权限需要在此之前设置
|
|
|
+ if strings.Index(fmt.Sprintf(",%v,", roleStr), ",os,") >= 0 {
|
|
|
+ params.MapList["role_os"] = "true"
|
|
|
+ } else {
|
|
|
+ for _, v := range roleM {
|
|
|
+ if strings.Index(fmt.Sprintf(",%v,", roleStr), fmt.Sprintf(",%v,", v)) >= 0 {
|
|
|
+ params.MapList[fmt.Sprintf("role_%v", v)] = "true"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return ¶ms, nil
|
|
|
+}
|