|
@@ -18,6 +18,7 @@ type (
|
|
|
DeptManager struct {
|
|
|
deptTree *DeptStruct
|
|
|
idDeptMapping map[int]*DeptStruct
|
|
|
+ userIdMapping map[int]*Saler
|
|
|
//deptSalerMapping map[int]
|
|
|
salers []*DeptStruct
|
|
|
lock *sync.RWMutex
|
|
@@ -33,9 +34,11 @@ type (
|
|
|
Salers []*Saler `json:"salers,omitempty"`
|
|
|
}
|
|
|
Saler struct {
|
|
|
- Id int `json:"id"`
|
|
|
- Name string `json:"name"`
|
|
|
- DeptId int `json:"deptId"`
|
|
|
+ Id int `json:"id"`
|
|
|
+ Name string `json:"name"`
|
|
|
+ DeptId int `json:"deptId"`
|
|
|
+ RoleId int `json:"roleId"` //角色Id
|
|
|
+ UserMail string `json:"userMail"`
|
|
|
}
|
|
|
)
|
|
|
|
|
@@ -112,55 +115,64 @@ func (mge *DeptManager) initAndUpdateDeptManager(ctx context.Context) {
|
|
|
|
|
|
//获取人员列表
|
|
|
salerRes, err := g.DB().Query(ctx, `SELECT
|
|
|
- d.name as deptName,
|
|
|
- d.id as deptId,
|
|
|
- u.id as entUserId,
|
|
|
- u.name as userName,
|
|
|
- u.phone as phone
|
|
|
- FROM
|
|
|
- jianyu.entniche_user u
|
|
|
- INNER JOIN jianyu.entniche_department_user e
|
|
|
- INNER JOIN jianyu.entniche_department d
|
|
|
- on
|
|
|
- ( u.id = e.user_id AND e.dept_id=d.id )
|
|
|
- WHERE
|
|
|
- u.ent_id = ?`, g.Cfg("global").MustGet(ctx, "powerEntId", 25917).Int64())
|
|
|
+ d.name as deptName,
|
|
|
+ u.mail as userMail,
|
|
|
+ d.id as deptId,
|
|
|
+ u.id as entUserId,
|
|
|
+ u.name as userName,
|
|
|
+ u.phone as phone,
|
|
|
+ eur.role_id,
|
|
|
+ COALESCE(eur.role_id, 0) as roleId
|
|
|
+ FROM
|
|
|
+ jianyu.entniche_user u
|
|
|
+ INNER JOIN jianyu.entniche_department_user e on u.id = e.user_id
|
|
|
+ INNER JOIN jianyu.entniche_department d on e.dept_id=d.id
|
|
|
+ LEFT JOIN jianyu.entniche_user_role eur ON u.id = eur.user_id
|
|
|
+ WHERE
|
|
|
+ u.ent_id =?`, g.Cfg("global").MustGet(ctx, "powerEntId", 25917).Int64())
|
|
|
if err != nil {
|
|
|
g.Log().Errorf(ctx, "获取企业人员异常")
|
|
|
}
|
|
|
deptIdUser := map[int][]*Saler{}
|
|
|
+ userIdMapping := map[int]*Saler{}
|
|
|
for _, m := range salerRes.List() {
|
|
|
var (
|
|
|
deptId = gconv.Int(m["deptId"])
|
|
|
)
|
|
|
uMsg := Saler{
|
|
|
- Id: gconv.Int(m["entUserId"]),
|
|
|
- Name: gconv.String(m["userName"]),
|
|
|
- DeptId: deptId,
|
|
|
+ Id: gconv.Int(m["entUserId"]),
|
|
|
+ Name: gconv.String(m["userName"]),
|
|
|
+ DeptId: deptId,
|
|
|
+ RoleId: gconv.Int(m["roleId"]),
|
|
|
+ UserMail: gconv.String(m["userMail"]),
|
|
|
}
|
|
|
if _, ok := deptIdUser[deptId]; !ok {
|
|
|
deptIdUser[deptId] = []*Saler{&uMsg}
|
|
|
} else {
|
|
|
deptIdUser[deptId] = append(deptIdUser[deptId], &uMsg)
|
|
|
}
|
|
|
+ userIdMapping[uMsg.Id] = &uMsg
|
|
|
}
|
|
|
for deptId, users := range deptIdUser {
|
|
|
idDeptMapping[deptId].Salers = users
|
|
|
}
|
|
|
-
|
|
|
+ //递归获取部门全名
|
|
|
+ for _, deptStruct := range idDeptMapping {
|
|
|
+ deptStruct.FullName = mge.getDeptFullName(deptStruct.Id)
|
|
|
+ }
|
|
|
mge.lock.Lock()
|
|
|
defer mge.lock.Unlock()
|
|
|
mge.deptTree = deptTree
|
|
|
mge.idDeptMapping = idDeptMapping
|
|
|
+ mge.userIdMapping = userIdMapping
|
|
|
mge.lastMd5 = md5Str
|
|
|
//g.Dump(deptTree)
|
|
|
- //递归获取部门全名
|
|
|
- for _, deptStruct := range idDeptMapping {
|
|
|
- deptStruct.FullName = mge.getDeptFullName(deptStruct.Id)
|
|
|
- }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
func (mge *DeptManager) getDeptFullName(deptId int) string {
|
|
|
+ mge.lock.RLock()
|
|
|
+ defer mge.lock.RUnlock()
|
|
|
node, ok := mge.idDeptMapping[deptId]
|
|
|
if !ok {
|
|
|
return ""
|
|
@@ -176,6 +188,8 @@ func (mge *DeptManager) getDeptFullName(deptId int) string {
|
|
|
}
|
|
|
|
|
|
func (mge *DeptManager) GetDeptNode(deptId int) *DeptStruct {
|
|
|
+ mge.lock.RLock()
|
|
|
+ defer mge.lock.RUnlock()
|
|
|
node, ok := mge.idDeptMapping[deptId]
|
|
|
if !ok {
|
|
|
return nil
|
|
@@ -184,6 +198,8 @@ func (mge *DeptManager) GetDeptNode(deptId int) *DeptStruct {
|
|
|
}
|
|
|
|
|
|
func (mge *DeptManager) GetDeptAllChildNode(deptId int) []*DeptStruct {
|
|
|
+ mge.lock.RLock()
|
|
|
+ defer mge.lock.RUnlock()
|
|
|
var rData []*DeptStruct
|
|
|
node, ok := mge.idDeptMapping[deptId]
|
|
|
if !ok || node == nil {
|
|
@@ -197,6 +213,8 @@ func (mge *DeptManager) GetDeptAllChildNode(deptId int) []*DeptStruct {
|
|
|
}
|
|
|
|
|
|
func (mge *DeptManager) GetDeptAllChildDeptId(deptId int) []int {
|
|
|
+ mge.lock.RLock()
|
|
|
+ defer mge.lock.RUnlock()
|
|
|
var rData = []int{deptId}
|
|
|
for _, node := range mge.GetDeptAllChildNode(deptId) {
|
|
|
rData = append(rData, node.Id)
|
|
@@ -206,6 +224,8 @@ func (mge *DeptManager) GetDeptAllChildDeptId(deptId int) []int {
|
|
|
|
|
|
// GetFullDeptName 通过部门id获取部门全名
|
|
|
func (mge *DeptManager) GetFullDeptName(deptId int) string {
|
|
|
+ mge.lock.RLock()
|
|
|
+ defer mge.lock.RUnlock()
|
|
|
dept, ok := mge.idDeptMapping[deptId]
|
|
|
if !ok {
|
|
|
return ""
|
|
@@ -235,7 +255,8 @@ func (mge *DeptManager) GetShowDeptTree(deptName ...string) (rData []interface{}
|
|
|
}
|
|
|
|
|
|
func (mge *DeptManager) GetShowDeptSalesTree(ctx context.Context, deptName ...string) []g.Map {
|
|
|
-
|
|
|
+ mge.lock.RLock()
|
|
|
+ defer mge.lock.RUnlock()
|
|
|
return nil
|
|
|
}
|
|
|
|
|
@@ -291,6 +312,25 @@ func (mge *DeptManager) GetDeptInfoByEntId(ctx context.Context, entUserId int) (
|
|
|
return
|
|
|
}
|
|
|
|
|
|
+func (mge *DeptManager) GetSalerByEntUserId(ctx context.Context, entUserId int) *Saler {
|
|
|
+ mge.lock.RLock()
|
|
|
+ defer mge.lock.RUnlock()
|
|
|
+ return mge.userIdMapping[entUserId]
|
|
|
+}
|
|
|
+
|
|
|
+func (mge *DeptManager) GetLeaderId(ctx context.Context, deptId int) []*Saler {
|
|
|
+ mge.lock.RLock()
|
|
|
+ defer mge.lock.RUnlock()
|
|
|
+ var results []*Saler
|
|
|
+ deptObj := mge.idDeptMapping[deptId]
|
|
|
+ for _, s := range deptObj.Salers {
|
|
|
+ if s.RoleId > 0 {
|
|
|
+ results = append(results, s)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return results
|
|
|
+}
|
|
|
+
|
|
|
// 获取本部门与子部门id
|
|
|
func DepId(entUserId int) []int {
|
|
|
res, _ := g.DB().GetOne(ctx, `SELECT
|