get_data_permission_logic.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. package logic
  2. import (
  3. "context"
  4. "fmt"
  5. "strings"
  6. "git.i2edu.net/i2/i2-bill-erp/internal/svc"
  7. "git.i2edu.net/i2/i2-bill-erp/model"
  8. "git.i2edu.net/i2/i2-bill-erp/transform"
  9. "github.com/thoas/go-funk"
  10. "git.i2edu.net/i2/go-zero/core/logx"
  11. )
  12. var roleMap = map[string]map[string]string{
  13. // ##渠道一级
  14. "one_level_channel": map[string]string{"市场": "1001", "网络": "1002", "老推": "1003", "品牌": "1004", "其他": "1005"},
  15. // ##任务
  16. // #目标计划
  17. // 市场人员计划
  18. "mkt_marketer_plan_target": map[string]string{"市场人员划分": "user", "校区划分": "os"}, //
  19. // 校区市场计划
  20. "mkt_sch_market_plan": map[string]string{"校区划分": "os"},
  21. // 销售人员计划
  22. "mkt_ec_user_targetplan": map[string]string{"销售人员划分": "user", "校区划分": "os"}, //
  23. // 校区销售计划
  24. "mkt_sch_targetsign_plan": map[string]string{"校区划分": "os"},
  25. // 客服人员计划
  26. "mkt_ta_target_plan": map[string]string{"客服人员划分": "user", "校区划分": "os"}, //
  27. // 校区客服计划
  28. "mkt_sch_ta_targetplan": map[string]string{"校区划分": "os"},
  29. // 生日提醒
  30. "remind_birthday": map[string]string{"跟进校区划分": "os", "班型客服划分": "ta"},
  31. // ##营销
  32. // #线索管理
  33. // 线索学员
  34. "mkt_resource": map[string]string{"资源销售划分": "ec", "资源收集人划分": "load_user", "资源收集校区划分": "os",
  35. "网络渠道划分": "tmk", "市场渠道划分": "mkt", "品牌渠道划分": "prod", "老推渠道划分": "old", "其他渠道划分": "other",
  36. "非网络渠道划分": "no_tmk", "分配tmk划分": "allot_tmk", "资源录入人划分": "create_by", "收集城市划分": "tmk_city",
  37. "资源收集校区筛选": "load_sch", "资源跟进校区筛选": "stu_sch"},
  38. // 市场活动管理
  39. "mkt_activity": map[string]string{"活动创建人划分": "user", "活动校区划分": "os"},
  40. // #潜在学员管理
  41. // 潜在学员列表
  42. "existing_students": map[string]string{"学员销售划分": "ec", "学员跟进校区划分": "os",
  43. "网络渠道划分": "tmk", "市场渠道划分": "mkt", "品牌渠道划分": "prod", "老推渠道划分": "old", "其他渠道划分": "other",
  44. "资源收集校区筛选": "load_sch", "资源跟进校区筛选": "stu_sch", "资源收集人划分": "load_user", "分配tmk划分": "allot_tmk"},
  45. // 老推学员列表
  46. "old_students": map[string]string{"资源收集人划分": "load_user", "学员跟进校区划分": "os"},
  47. // 邀约上门学员列表
  48. "mkt_invite_visit": map[string]string{"资源收集人划分": "load_user", "学员销售划分": "ec", "资源收集校区划分": "os"},
  49. // 无效资源列表
  50. "invalid_students": map[string]string{"学员销售划分": "ec", "学员跟进校区划分": "os"},
  51. // #试听课管理
  52. // 试听课列表
  53. "mkt_trial_lesson": map[string]string{"试听课客服划分": "ta", "试听课教师划分": "tea", "试听课校区划分": "os"},
  54. // 试听课学员列表
  55. "mkt_trial_lesson_student": map[string]string{"学员销售划分": "ec", "试听课教师划分": "ta", "试听课校区划分": "os",
  56. "网络渠道划分": "tmk", "市场渠道划分": "mkt", "品牌渠道划分": "prod", "老推渠道划分": "old", "其他渠道划分": "other",
  57. "收集城市划分": "tmk_city", "分配tmk划分": "allot_tmk", "资源收集人划分": "load_user", "资源收集校区划分": "load_sch"},
  58. // tmk待分配学员列表
  59. "mkt_stu_unallot_tmk": map[string]string{"资源销售划分": "ec", "资源收集人划分": "load_user", "资源收集校区划分": "os",
  60. "网络渠道划分": "tmk", "市场渠道划分": "mkt", "品牌渠道划分": "prod", "老推渠道划分": "old", "其他渠道划分": "other",
  61. "非网络渠道划分": "no_tmk", "资源录入人划分": "create_by", "收集城市划分": "tmk_city"},
  62. // tmk已分配学员列表
  63. "mkt_stu_allot_tmk": map[string]string{"收集城市划分": "os", "资源收集人划分": "user", "分配tmk划分": "tmk_user",
  64. "网络渠道划分": "tmk", "市场渠道划分": "mkt", "品牌渠道划分": "prod", "老推渠道划分": "old", "其他渠道划分": "other"},
  65. // 学员回访列表
  66. "mkt_student_visit": map[string]string{"学员销售划分": "ec", "学员跟进校区划分": "os"},
  67. // ##教务
  68. "stu_class": map[string]string{"班级客服划分": "kf", "学员跟进校区划分": "os"},
  69. "edu_tea_leave_management": map[string]string{"教师所属校区划分": "sys_os", "教师权限校区划分": "os", "教师划分": "tea"},
  70. "crm_complaints_repair_order": map[string]string{"校区划分": "os"},
  71. "order_student_class_type": map[string]string{"学员销售划分": "ec", "班型客服划分": "ta", "签单校区划分": "of_os",
  72. "学员跟进校区划分": "os"},
  73. "order_deposit_in": map[string]string{"学员销售划分": "ec", "班型客服划分": "ta", "学员跟进校区划分": "os"},
  74. "edu_sc_class_tea": map[string]string{"班级所在校区划分": "os", "班级客服划分": "ta"},
  75. "stu_tea_class_schedule": map[string]string{"班级所在校区划分": "os", "班级客服划分": "ta"},
  76. // ##财务
  77. "order_form": map[string]string{"学员跟进校区划分": "os", "签单校区划分": "of_os", "学员销售划分": "ec", "分配tmk划分": "allot_tmk",
  78. "网络渠道划分": "tmk", "市场渠道划分": "mkt", "品牌渠道划分": "prod", "老推渠道划分": "old", "其他渠道划分": "other",
  79. "学员收集人划分": "load_user", "学员班型客服划分": "ta", "收集城市划分": "tmk_city", "资源收集校区划分": "load_sch"},
  80. "order_tb_form": map[string]string{"学员跟进校区划分": "os", "签单校区划分": "of_os", "学员销售划分": "ec", "分配tmk划分": "allot_tmk",
  81. "网络渠道划分": "tmk", "市场渠道划分": "mkt", "品牌渠道划分": "prod", "老推渠道划分": "old", "其他渠道划分": "other",
  82. "学员收集人划分": "load_user", "学员班型客服划分": "ta", "收集城市划分": "tmk_city", "资源收集校区划分": "load_sch"},
  83. "order_refund": map[string]string{"学员跟进校区划分": "os", "签单校区划分": "of_os", "学员销售划分": "ec",
  84. "学员收集人划分": "load_user", "班型分配班级客服划分": "ta"},
  85. "fin_temp_storage_cz": map[string]string{"学员销售划分": "ec", "班型客服划分": "ta", "学员跟进校区划分": "os"},
  86. "fn_student_account": map[string]string{"学员销售划分": "ec", "班型客服划分": "ta", "学员跟进校区划分": "os"},
  87. "fin_stu_account_flow": map[string]string{"学员销售划分": "ec", "班型客服划分": "ta", "学员跟进校区划分": "os"},
  88. "fin_invoice": map[string]string{"学员销售划分": "ec", "班型客服划分": "ta", "签单校区划分": "os"},
  89. "fin_stu_integral_flow": map[string]string{"学员跟进校区划分": "os"},
  90. "fin_yb_pay_flowing": map[string]string{"支付校区划分": "os"},
  91. "fin_yeepay_reconciliations_record": map[string]string{"流水支付校区划分": "os"},
  92. "base_class_manage": map[string]string{"班级客服划分": "ta", "班级校区划分": "os"},
  93. "student": map[string]string{"学员跟进校区划分": "os", "学员销售划分": "ec", "学员收集人划分": "load_user", "班型分配客服划分": "ta"},
  94. "order_student_gift": map[string]string{"学员跟进校区划分": "os", "班级客服划分": "ta"},
  95. "edu_stu_ct_renew_log": map[string]string{"班型客服划分": "ta", "学员跟进校区划分": "os"},
  96. "attendance_list": map[string]string{"班级校区划分": "os", "教师划分": "tea", "班型客服划分": "ta"},
  97. "role_trial_lesson": map[string]string{"班级校区划分": "os", "教师划分": "tea", "试听课销售划分": "ec"},
  98. "sys_user": map[string]string{"所属校区划分": "sys_os", "权限校区划分": "base_os"},
  99. // "base_on_sale": map[string]string{"校区划分": "os"},
  100. "stu_class_type_textbook": map[string]string{"学员跟进校区划分": "os"},
  101. "edu_class_schedule_student": map[string]string{"班级客服划分": "ta", "学员跟进校区划分": "os"},
  102. "edu_class_schedule_student_absenceList": map[string]string{"班型客服划分": "ta", "学员跟进校区划分": "os"},
  103. "base_organ_school": map[string]string{"权限校区划分": "os"},
  104. "ecs_stu": map[string]string{"班型客服划分": "ecs_ta", "班级状态修改权限": "manage"},
  105. "encode": map[string]string{"导出联系方式加密": "export_stu_phone", "显示联系方式不加密": "list_stu_phone"},
  106. "order_exchange_gift_jfsc": map[string]string{"积分兑换记录用户权限校区": "os"},
  107. "task_pg": map[string]string{"批改作业权限": "os"},
  108. "cmp_plan": map[string]string{"权限校区划分": "os", "班级客服划分": "ta"},
  109. "eschool_stu_study_report": map[string]string{"班级所在校区划分": "os", "班级客服划分": "ta"},
  110. "order_sch_achievement_divide": map[string]string{"所属校区划分": "base_os", "权限校区划分": "sys_os"},
  111. "user_city": map[string]string{"所属校区划分": "base_os", "权限校区划分": "sys_os", "学员跟进校区划分": "os"},
  112. "rl_hour_list": map[string]string{"权限校区划分": "os"},
  113. "eschool_class_schedule_unit_pick": map[string]string{"学员跟进校区划分": "os", "班型客服划分": "ta"},
  114. "teacher_ft": map[string]string{"权限校区划分": "os"},
  115. "teacher_oa": map[string]string{"权限校区划分": "os"},
  116. "fin_pay_flowing": map[string]string{"权限校区划分": "os"},
  117. "fin_reconciliations_record": map[string]string{"权限校区划分": "os"},
  118. // 收单的数据
  119. "acquirer_student": map[string]string{"本人及所管兼职划分": "self_acquirer", "本人及所管兼职和专员划分": "self_acquirer_market", "所管兼职和市场划分": "acquirer_market_mgn"},
  120. // 兼职人员的数据
  121. "part_time_user": map[string]string{"所有数据": "all", "所管兼职": "self_part_time", "mk归属校区": "mk_sch"},
  122. }
  123. type GetDataPermissionLogic struct {
  124. ctx context.Context
  125. svcCtx *svc.ServiceContext
  126. logx.Logger
  127. }
  128. func NewGetDataPermissionLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetDataPermissionLogic {
  129. return &GetDataPermissionLogic{
  130. ctx: ctx,
  131. svcCtx: svcCtx,
  132. Logger: logx.WithContext(ctx),
  133. }
  134. }
  135. // 获取数据权限
  136. func (l *GetDataPermissionLogic) GetDataPermission(in *transform.DataPermissionReq) (*transform.DataPermissionRes, error) {
  137. rule_code, UserId, params := in.RuleCode, in.UserId, transform.DataPermissionRes{MapList: map[string]string{}}
  138. var channelMap = map[string]string{
  139. "mkt": "1001", "tmk": "1002", "old": "1003", "other": "1005", "prod": "1004",
  140. }
  141. mainRoleCode := []string{"tmk", "mkt", "prod", "old", "other", "no_tmk"}
  142. if roleM, ok := roleMap[rule_code]; ok {
  143. var roleRules []model.SysDataPermissionDetail
  144. err := l.svcCtx.SqlConn.QueryRowsPartial(&roleRules, `SELECT
  145. sys_data_permission_detail.*
  146. FROM
  147. sys_data_permission, sys_data_permission_detail,sys_user_role
  148. WHERE
  149. sys_data_permission.id = sys_data_permission_detail.data_permission_id
  150. AND FIND_IN_SET(sys_user_role.role_id, sys_data_permission_detail.role_id)
  151. AND sys_user_role.del_flag = 0
  152. AND sys_data_permission_detail.del_flag = 0
  153. AND sys_data_permission.code = ?
  154. AND sys_user_role.user_id = ?`, rule_code, UserId)
  155. if err == nil && len(roleRules) > 0 {
  156. roles := funk.Get(roleRules, "Rule").([]string)
  157. roleStr := strings.Join(roles, ",")
  158. if rule_code == "one_level_channel" {
  159. params.MapList["role_channel"] = roleStr
  160. } else {
  161. var role_channel []string
  162. for _, code := range mainRoleCode {
  163. if strings.Index(fmt.Sprintf(",%v,", roleStr), fmt.Sprintf(",%v,", code)) >= 0 {
  164. if channel, ok := channelMap[code]; ok {
  165. role_channel = append(role_channel, channel)
  166. } else {
  167. params.MapList[fmt.Sprintf("role_%v", code)] = "true"
  168. }
  169. }
  170. }
  171. if len(role_channel) > 0 {
  172. params.MapList["role_channel"] = strings.Join(role_channel, ",")
  173. }
  174. // 并列权限,如果有了os的权限,其他的权限就不使用了,如果需要增加别的权限需要在此之前设置
  175. if strings.Index(fmt.Sprintf(",%v,", roleStr), ",os,") >= 0 {
  176. params.MapList["role_os"] = "true"
  177. } else {
  178. for _, v := range roleM {
  179. if strings.Index(fmt.Sprintf(",%v,", roleStr), fmt.Sprintf(",%v,", v)) >= 0 {
  180. params.MapList[fmt.Sprintf("role_%v", v)] = "true"
  181. }
  182. }
  183. }
  184. }
  185. }
  186. }
  187. return &params, nil
  188. }