123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 |
- package service
- import (
- "fmt"
- IC "bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyBXSubscribe/rpc/init"
- "log"
- util "app.yhyue.com/moapp/jybase/common"
- "github.com/zeromicro/go-zero/core/logx"
- )
- //用户基本信息
- type UserInfo struct {
- Entniche *Entniche
- SubSet map[string]interface{}
- }
- //
- type Entniche struct {
- EntId int //企业id
- EntName string //企业名称
- DeptId int //部门id
- DeptName string //部门名称
- DisId string //分发id
- UserId int
- }
- type MatchJob struct {
- }
- func (m *MatchJob) Start(entId, entUserId int) (map[string]interface{}, int) {
- defer util.Catch()
- defer ClearEnt()
- InitEnt(IC.MainMysql, &IC.Mgo, "qfw", entId, entUserId)
- users := m.LoadSubSet(entId)
- return FinalSub(entUserId, users), EntUserDept[entUserId].DeptId
- }
- func (m *MatchJob) LoadSubSet(entId int) map[*UserInfo]bool {
- defer util.Catch()
- Users := map[*UserInfo]bool{}
- sess := IC.Mgo.GetMgoConn()
- defer IC.Mgo.DestoryMongoConn(sess)
- it := sess.DB("qfw").C("entniche_rule").Find(map[string]interface{}{
- "i_entid": entId,
- }).Select(map[string]interface{}{
- "i_entid": 1,
- "i_deptid": 1,
- "i_userid": 1,
- "o_entniche": 1,
- "i_type": 1,
- }).Iter()
- log.Println("it", it)
- for _temp := make(map[string]interface{}); it.Next(&_temp); {
- func(temp map[string]interface{}) {
- log.Println("temp", temp)
- entId := util.IntAll(temp["i_entid"])
- deptId := util.IntAll(temp["i_deptid"])
- userId := util.IntAll(temp["i_userid"])
- if entId == 0 || (deptId == 0 && userId == 0) {
- return
- }
- entName := fmt.Sprint(entId)
- if deptId > 0 && EntDepts[deptId] == nil {
- logx.Info("没有找到该部门", entName, entId, deptId)
- return
- }
- deptName := ""
- if EntDepts[deptId] != nil {
- deptName = EntDepts[deptId].Name
- }
- subSet, _ := temp["o_entniche"].(map[string]interface{})
- if subSet == nil || len(subSet) == 0 {
- logx.Info("订阅设置为空,过滤掉", entName, entId, deptName, deptId, userId)
- return
- }
- subSet["i_type"] = temp["i_type"]
- //
- if deptId > 0 { //部门订阅
- if EntDepts[deptId].Subdis == 0 {
- logx.Info("该部门的订阅分发没有开启,过滤掉", entName, entId, deptName, deptId)
- return
- } else if EntDepts[deptId].Nodiff == 0 && EntDeptDis[deptId] == nil {
- logx.Info("该部门开启了订阅分发,没有开启全员无差别接收,但是没有分发规则,过滤掉", entName, entId, deptName, deptId)
- return
- }
- //如果我的上级部门打开了订阅分发,并且开启了全员无差别接收,本部门规则无效
- for _, dept := range EntParentDept[deptId] {
- if EntDepts[dept.Pid].Subdis == 1 && EntDepts[dept.Pid].Nodiff == 1 {
- logx.Info("我的上级部门", dept.Pid, "开启了订阅分发和全员无差别,过滤掉", entName, entId, deptName, deptId)
- return
- }
- }
- } else if userId > 0 { //个人订阅
- if EntUsers[userId] == nil {
- logx.Info("没有找到该用户,过滤掉", entName, entId, userId)
- return
- }
- }
- user := &UserInfo{
- Entniche: &Entniche{
- EntId: entId,
- EntName: entName,
- DeptId: deptId,
- DeptName: deptName,
- UserId: userId,
- },
- SubSet: subSet,
- }
- logx.Info("加载订阅设置", "entId", entId, "entName", entName, "deptId", deptId, "deptName", deptName, "userId", userId)
- Users[user] = true
- //分发规则
- itemMap := map[string]interface{}{}
- items, _ := subSet["a_items"].([]interface{})
- for _, v := range items {
- item, _ := v.(map[string]interface{})
- if item == nil {
- continue
- }
- item_name, _ := item["s_item"].(string)
- if item_name == "" {
- continue
- }
- itemMap[item_name] = item
- }
- for _, dis := range EntDeptDis[deptId] {
- child_items := []interface{}{}
- for _, item_name := range dis.Items {
- if itemMap[item_name] == nil {
- continue
- }
- child_items = append(child_items, itemMap[item_name])
- }
- child_subSet := map[string]interface{}{}
- if len(dis.Buyerclass) > 0 {
- child_subSet["a_buyerclass"] = dis.Buyerclass
- }
- if len(dis.Area) > 0 {
- child_subSet["o_area"] = dis.Area
- }
- if len(child_items) > 0 {
- child_subSet["a_items"] = child_items
- }
- if len(child_subSet) == 0 {
- continue
- }
- child_user := &UserInfo{
- Entniche: &Entniche{
- EntId: user.Entniche.EntId,
- EntName: user.Entniche.EntName,
- DeptId: user.Entniche.DeptId,
- DeptName: user.Entniche.DeptName,
- DisId: dis.Id,
- },
- SubSet: child_subSet,
- }
- Users[child_user] = true
- }
- }(_temp)
- _temp = make(map[string]interface{})
- }
- return Users
- }
- func FinalSub(entUserId int, users map[*UserInfo]bool) map[string]interface{} {
- for k, _ := range users {
- if k.Entniche.DeptId > 0 {
- k.Entniche.DeptName = EntDepts[k.Entniche.DeptId].Name
- staffIds := GetDeptUserIds(&UserInfo{
- Entniche: &Entniche{
- EntId: k.Entniche.EntId,
- EntName: k.Entniche.EntName,
- DeptId: k.Entniche.DeptId,
- DeptName: k.Entniche.DeptName,
- DisId: k.Entniche.DisId,
- },
- })
- if staffIds == nil {
- continue
- }
- if staffIds[entUserId] {
- return k.SubSet
- }
- } else if k.Entniche.UserId > 0 {
- return k.SubSet
- } else {
- continue
- }
- }
- return nil
- }
- func GetDeptUserIds(ui *UserInfo) map[int]bool {
- if EntDepts[ui.Entniche.DeptId].Subdis == 0 {
- logx.Info(ui.Entniche.EntName, ui.Entniche.EntId, ui.Entniche.DeptName, ui.Entniche.DeptId, "没有开启订阅分发,过滤掉")
- return nil
- } else if EntDepts[ui.Entniche.DeptId].Nodiff == 0 && ui.Entniche.DisId == "" {
- logx.Info(ui.Entniche.EntName, ui.Entniche.EntId, ui.Entniche.DeptName, ui.Entniche.DeptId, "没有开启全员无差别接收,并且没有分发规则,过滤掉")
- return nil
- }
- //对我的对着生效的用户
- myIds := map[int]bool{}
- //打开了全员无差别,下面所有员工都生效
- if EntDepts[ui.Entniche.DeptId].Nodiff == 1 {
- for _, v := range EntDeptUsers[ui.Entniche.DeptId] {
- myIds[v.UserId] = true
- }
- for _, v := range EntChildDept[ui.Entniche.DeptId] {
- for _, vv := range EntDeptUsers[v.Id] {
- myIds[vv.UserId] = true
- }
- }
- logx.Info(ui.Entniche.EntName, ui.Entniche.EntId, ui.Entniche.DeptName, ui.Entniche.DeptId, "该部门打开了全员无差别", len(myIds), "人接收")
- } else if ui.Entniche.DisId != "" {
- for _, v := range EntRuleUsers[ui.Entniche.DisId] {
- myIds[v.UserId] = true
- }
- logx.Info(ui.Entniche.EntName, ui.Entniche.EntId, ui.Entniche.DeptName, ui.Entniche.DeptId, "该规则开启了订阅分发", ui.Entniche.DisId, "规则分发了", len(myIds), "人")
- }
- //我的上级部门,过滤掉本部门的人
- for _, v := range EntParentDept[ui.Entniche.DeptId] {
- //看我的上级部门,有没有开启订阅分发
- if EntDepts[v.Pid].Subdis == 0 {
- continue
- }
- //看我的上级部门,有没有全员无差别接收
- if EntDepts[v.Pid].Nodiff == 1 {
- logx.Info(ui.Entniche.EntName, ui.Entniche.EntId, ui.Entniche.DeptName, ui.Entniche.DeptId, ui.Entniche.DisId, "上级部门", v.Pid, "打开了全员无差别开关,过滤掉")
- return nil
- }
- //看我的上级部门,有没有对我设置规则
- for _, vv := range EntDeptDis[v.Pid] {
- for _, vvv := range EntRuleUsers[vv.Id] {
- _, ok := myIds[vvv.UserId]
- if !ok {
- continue
- }
- delete(myIds, vvv.UserId)
- logx.Info(ui.Entniche.EntName, ui.Entniche.EntId, ui.Entniche.DeptName, ui.Entniche.DeptId, "上级部门", v.Pid, "对我设置的有", vvv.RuleId, "分发规则,此规则作废", vvv.UserId)
- }
- }
- }
- logx.Info(ui.Entniche.EntName, ui.Entniche.EntId, ui.Entniche.DeptName, ui.Entniche.DeptId, ui.Entniche.DisId, "该规则匹配到", len(myIds), "人")
- return myIds
- }
|