fix: 部门名称有中英文混合的情况&解决部门添加移除用户时用户信息未更新的问题 (#83)
This commit is contained in:
parent
1d0df89013
commit
efb2fd9872
|
@ -81,7 +81,7 @@ func CommonUpdateGroup(oldGroup, newGroup *model.Group) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// CommonAddUser 标准创建用户
|
// CommonAddUser 标准创建用户
|
||||||
func CommonAddUser(user *model.User, groupId []uint) error {
|
func CommonAddUser(user *model.User, groups []*model.Group) error {
|
||||||
if user.Departments == "" {
|
if user.Departments == "" {
|
||||||
user.Departments = "默认:研发中心"
|
user.Departments = "默认:研发中心"
|
||||||
}
|
}
|
||||||
|
@ -110,11 +110,8 @@ func CommonAddUser(user *model.User, groupId []uint) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return tools.NewLdapError(fmt.Errorf("AddUser向LDAP创建用户失败:" + err.Error()))
|
return tools.NewLdapError(fmt.Errorf("AddUser向LDAP创建用户失败:" + err.Error()))
|
||||||
}
|
}
|
||||||
// 获取用户将要添加的分组
|
|
||||||
groups, err := isql.Group.GetGroupByIds(groupId)
|
// 处理用户归属的组
|
||||||
if err != nil {
|
|
||||||
return tools.NewMySqlError(fmt.Errorf("根据部门ID获取部门信息失败" + err.Error()))
|
|
||||||
}
|
|
||||||
for _, group := range groups {
|
for _, group := range groups {
|
||||||
if group.GroupDN[:3] == "ou=" {
|
if group.GroupDN[:3] == "ou=" {
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -2,6 +2,7 @@ package logic
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/eryajf/go-ldap-admin/config"
|
"github.com/eryajf/go-ldap-admin/config"
|
||||||
"github.com/eryajf/go-ldap-admin/model"
|
"github.com/eryajf/go-ldap-admin/model"
|
||||||
|
@ -68,6 +69,7 @@ func (d DingTalkLogic) AddDepts(group *model.Group) error {
|
||||||
group.ParentId = parentGroup.ID
|
group.ParentId = parentGroup.ID
|
||||||
group.Source = config.Conf.DingTalk.Flag
|
group.Source = config.Conf.DingTalk.Flag
|
||||||
group.GroupDN = fmt.Sprintf("cn=%s,%s", group.GroupName, parentGroup.GroupDN)
|
group.GroupDN = fmt.Sprintf("cn=%s,%s", group.GroupName, parentGroup.GroupDN)
|
||||||
|
fmt.Println(group.GroupName, group.Remark, group.GroupDN)
|
||||||
|
|
||||||
err = CommonAddGroup(group)
|
err = CommonAddGroup(group)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -140,7 +142,17 @@ func (d DingTalkLogic) AddUsers(user *model.User) error {
|
||||||
user.Password = config.Conf.Ldap.UserInitPassword
|
user.Password = config.Conf.Ldap.UserInitPassword
|
||||||
user.Source = config.Conf.DingTalk.Flag
|
user.Source = config.Conf.DingTalk.Flag
|
||||||
user.UserDN = fmt.Sprintf("uid=%s,%s", user.Username, config.Conf.Ldap.UserDN)
|
user.UserDN = fmt.Sprintf("uid=%s,%s", user.Username, config.Conf.Ldap.UserDN)
|
||||||
err = CommonAddUser(user, tools.StringToSlice(user.DepartmentId, ","))
|
// 获取用户将要添加的分组
|
||||||
|
groups, err := isql.Group.GetGroupByIds(tools.StringToSlice(user.DepartmentId, ","))
|
||||||
|
if err != nil {
|
||||||
|
return tools.NewMySqlError(fmt.Errorf("根据部门ID获取部门信息失败" + err.Error()))
|
||||||
|
}
|
||||||
|
var deptTmp string
|
||||||
|
for _, group := range groups {
|
||||||
|
deptTmp = deptTmp + group.GroupName + ","
|
||||||
|
}
|
||||||
|
user.Departments = strings.TrimRight(deptTmp, ",")
|
||||||
|
err = CommonAddUser(user, groups)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package logic
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/eryajf/go-ldap-admin/config"
|
"github.com/eryajf/go-ldap-admin/config"
|
||||||
"github.com/eryajf/go-ldap-admin/model"
|
"github.com/eryajf/go-ldap-admin/model"
|
||||||
|
@ -140,7 +141,17 @@ func (d FeiShuLogic) AddUsers(user *model.User) error {
|
||||||
user.Password = config.Conf.Ldap.UserInitPassword
|
user.Password = config.Conf.Ldap.UserInitPassword
|
||||||
user.Source = config.Conf.FeiShu.Flag
|
user.Source = config.Conf.FeiShu.Flag
|
||||||
user.UserDN = fmt.Sprintf("uid=%s,%s", user.Username, config.Conf.Ldap.UserDN)
|
user.UserDN = fmt.Sprintf("uid=%s,%s", user.Username, config.Conf.Ldap.UserDN)
|
||||||
err = CommonAddUser(user, tools.StringToSlice(user.DepartmentId, ","))
|
// 获取用户将要添加的分组
|
||||||
|
groups, err := isql.Group.GetGroupByIds(tools.StringToSlice(user.DepartmentId, ","))
|
||||||
|
if err != nil {
|
||||||
|
return tools.NewMySqlError(fmt.Errorf("根据部门ID获取部门信息失败" + err.Error()))
|
||||||
|
}
|
||||||
|
var deptTmp string
|
||||||
|
for _, group := range groups {
|
||||||
|
deptTmp = deptTmp + group.GroupName + ","
|
||||||
|
}
|
||||||
|
user.Departments = strings.TrimRight(deptTmp, ",")
|
||||||
|
err = CommonAddUser(user, groups)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package logic
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/eryajf/go-ldap-admin/config"
|
"github.com/eryajf/go-ldap-admin/config"
|
||||||
|
@ -269,9 +270,33 @@ func (l GroupLogic) AddUser(c *gin.Context, req interface{}) (data interface{},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for _, user := range users {
|
||||||
|
oldData := new(model.User)
|
||||||
|
err = isql.User.Find(tools.H{"id": user.ID}, oldData)
|
||||||
|
if err != nil {
|
||||||
|
return nil, tools.NewMySqlError(err)
|
||||||
|
}
|
||||||
|
newData := oldData
|
||||||
|
// 添加新增的分组ID与部门
|
||||||
|
newData.DepartmentId = oldData.DepartmentId + "," + strconv.Itoa(int(r.GroupID))
|
||||||
|
newData.Departments = oldData.Departments + "," + group.GroupName
|
||||||
|
err = l.updataUser(newData)
|
||||||
|
if err != nil {
|
||||||
|
return nil, tools.NewOperationError(fmt.Errorf("处理用户的部门数据失败:" + err.Error()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (l GroupLogic) updataUser(newUser *model.User) error {
|
||||||
|
err := isql.User.Update(newUser)
|
||||||
|
if err != nil {
|
||||||
|
return tools.NewMySqlError(fmt.Errorf("在MySQL更新用户失败:" + err.Error()))
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// RemoveUser 移除用户
|
// RemoveUser 移除用户
|
||||||
func (l GroupLogic) RemoveUser(c *gin.Context, req interface{}) (data interface{}, rspError interface{}) {
|
func (l GroupLogic) RemoveUser(c *gin.Context, req interface{}) (data interface{}, rspError interface{}) {
|
||||||
r, ok := req.(*request.GroupRemoveUserReq)
|
r, ok := req.(*request.GroupRemoveUserReq)
|
||||||
|
@ -315,6 +340,37 @@ func (l GroupLogic) RemoveUser(c *gin.Context, req interface{}) (data interface{
|
||||||
return nil, tools.NewMySqlError(fmt.Errorf("将用户从MySQL移除失败: %s", err.Error()))
|
return nil, tools.NewMySqlError(fmt.Errorf("将用户从MySQL移除失败: %s", err.Error()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for _, user := range users {
|
||||||
|
oldData := new(model.User)
|
||||||
|
err = isql.User.Find(tools.H{"id": user.ID}, oldData)
|
||||||
|
if err != nil {
|
||||||
|
return nil, tools.NewMySqlError(err)
|
||||||
|
}
|
||||||
|
newData := oldData
|
||||||
|
|
||||||
|
var newDepts []string
|
||||||
|
var newDeptIds []string
|
||||||
|
// 删掉移除的分组名字
|
||||||
|
for _, v := range strings.Split(oldData.Departments, ",") {
|
||||||
|
if v != group.GroupName {
|
||||||
|
newDepts = append(newDepts, v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 删掉移除的分组id
|
||||||
|
for _, v := range strings.Split(oldData.DepartmentId, ",") {
|
||||||
|
if v != strconv.Itoa(int(r.GroupID)) {
|
||||||
|
newDeptIds = append(newDeptIds, v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
newData.Departments = strings.Join(newDepts, ",")
|
||||||
|
newData.DepartmentId = strings.Join(newDeptIds, ",")
|
||||||
|
err = l.updataUser(newData)
|
||||||
|
if err != nil {
|
||||||
|
return nil, tools.NewOperationError(fmt.Errorf("处理用户的部门数据失败:" + err.Error()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -105,8 +105,15 @@ func (l UserLogic) Add(c *gin.Context, req interface{}) (data interface{}, rspEr
|
||||||
if user.Source == "" {
|
if user.Source == "" {
|
||||||
user.Source = "platform"
|
user.Source = "platform"
|
||||||
}
|
}
|
||||||
|
// 获取用户将要添加的分组
|
||||||
err = CommonAddUser(&user, r.DepartmentId)
|
groups, err := isql.Group.GetGroupByIds(tools.StringToSlice(user.DepartmentId, ","))
|
||||||
|
if err != nil {
|
||||||
|
return nil, tools.NewMySqlError(fmt.Errorf("根据部门ID获取部门信息失败" + err.Error()))
|
||||||
|
}
|
||||||
|
for _, group := range groups {
|
||||||
|
user.Departments = user.Departments + group.GroupName
|
||||||
|
}
|
||||||
|
err = CommonAddUser(&user, groups)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, tools.NewOperationError(fmt.Errorf("添加用户失败" + err.Error()))
|
return nil, tools.NewOperationError(fmt.Errorf("添加用户失败" + err.Error()))
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package logic
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/eryajf/go-ldap-admin/config"
|
"github.com/eryajf/go-ldap-admin/config"
|
||||||
"github.com/eryajf/go-ldap-admin/model"
|
"github.com/eryajf/go-ldap-admin/model"
|
||||||
|
@ -155,7 +156,17 @@ func (d WeComLogic) AddUsers(user *model.User) error {
|
||||||
user.Password = config.Conf.Ldap.UserInitPassword
|
user.Password = config.Conf.Ldap.UserInitPassword
|
||||||
user.Source = config.Conf.WeCom.Flag
|
user.Source = config.Conf.WeCom.Flag
|
||||||
user.UserDN = fmt.Sprintf("uid=%s,%s", user.Username, config.Conf.Ldap.UserDN)
|
user.UserDN = fmt.Sprintf("uid=%s,%s", user.Username, config.Conf.Ldap.UserDN)
|
||||||
err = CommonAddUser(user, tools.StringToSlice(user.DepartmentId, ","))
|
// 获取用户将要添加的分组
|
||||||
|
groups, err := isql.Group.GetGroupByIds(tools.StringToSlice(user.DepartmentId, ","))
|
||||||
|
if err != nil {
|
||||||
|
return tools.NewMySqlError(fmt.Errorf("根据部门ID获取部门信息失败" + err.Error()))
|
||||||
|
}
|
||||||
|
var deptTmp string
|
||||||
|
for _, group := range groups {
|
||||||
|
deptTmp = deptTmp + group.GroupName + ","
|
||||||
|
}
|
||||||
|
user.Departments = strings.TrimRight(deptTmp, ",")
|
||||||
|
err = CommonAddUser(user, groups)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/eryajf/go-ldap-admin/config"
|
"github.com/eryajf/go-ldap-admin/config"
|
||||||
"github.com/mozillazg/go-pinyin"
|
"github.com/eryajf/go-ldap-admin/public/tools"
|
||||||
"github.com/zhaoyunxing92/dingtalk/v2/request"
|
"github.com/zhaoyunxing92/dingtalk/v2/request"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ func GetAllDepts() (ret []map[string]interface{}, err error) {
|
||||||
ele["id"] = dept.Id
|
ele["id"] = dept.Id
|
||||||
ele["name"] = dept.Name
|
ele["name"] = dept.Name
|
||||||
ele["parentid"] = dept.ParentId
|
ele["parentid"] = dept.ParentId
|
||||||
ele["custom_name_pinyin"] = strings.Join(pinyin.LazyConvert(dept.Name, nil), "")
|
ele["custom_name_pinyin"] = tools.ConvertToPinYin(dept.Name)
|
||||||
ret = append(ret, ele)
|
ret = append(ret, ele)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
@ -52,7 +52,7 @@ func GetAllUsers() (ret []map[string]interface{}, err error) {
|
||||||
ele := make(map[string]interface{})
|
ele := make(map[string]interface{})
|
||||||
ele["userid"] = user.UserId
|
ele["userid"] = user.UserId
|
||||||
ele["unionid"] = user.UnionId
|
ele["unionid"] = user.UnionId
|
||||||
ele["custom_name_pinyin"] = strings.Join(pinyin.LazyConvert(user.Name, nil), "")
|
ele["custom_name_pinyin"] = tools.ConvertToPinYin(user.Name)
|
||||||
ele["name"] = user.Name
|
ele["name"] = user.Name
|
||||||
ele["avatar"] = user.Avatar
|
ele["avatar"] = user.Avatar
|
||||||
ele["mobile"] = user.Mobile
|
ele["mobile"] = user.Mobile
|
||||||
|
|
|
@ -7,7 +7,7 @@ import (
|
||||||
|
|
||||||
"github.com/chyroc/lark"
|
"github.com/chyroc/lark"
|
||||||
"github.com/eryajf/go-ldap-admin/config"
|
"github.com/eryajf/go-ldap-admin/config"
|
||||||
"github.com/mozillazg/go-pinyin"
|
"github.com/eryajf/go-ldap-admin/public/tools"
|
||||||
)
|
)
|
||||||
|
|
||||||
// 官方文档: https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/department/children
|
// 官方文档: https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/department/children
|
||||||
|
@ -31,7 +31,7 @@ func GetAllDepts() (ret []map[string]interface{}, err error) {
|
||||||
for _, dept := range res.Items {
|
for _, dept := range res.Items {
|
||||||
ele := make(map[string]interface{})
|
ele := make(map[string]interface{})
|
||||||
ele["name"] = dept.Name
|
ele["name"] = dept.Name
|
||||||
ele["custom_name_pinyin"] = strings.Join(pinyin.LazyConvert(dept.Name, nil), "")
|
ele["custom_name_pinyin"] = tools.ConvertToPinYin(dept.Name)
|
||||||
ele["parent_department_id"] = dept.ParentDepartmentID
|
ele["parent_department_id"] = dept.ParentDepartmentID
|
||||||
ele["department_id"] = dept.DepartmentID
|
ele["department_id"] = dept.DepartmentID
|
||||||
ele["open_department_id"] = dept.OpenDepartmentID
|
ele["open_department_id"] = dept.OpenDepartmentID
|
||||||
|
@ -71,7 +71,7 @@ func GetAllUsers() (ret []map[string]interface{}, err error) {
|
||||||
for _, user := range res.Items {
|
for _, user := range res.Items {
|
||||||
ele := make(map[string]interface{})
|
ele := make(map[string]interface{})
|
||||||
ele["name"] = user.Name
|
ele["name"] = user.Name
|
||||||
ele["custom_name_pinyin"] = strings.Join(pinyin.LazyConvert(user.Name, nil), "")
|
ele["custom_name_pinyin"] = tools.ConvertToPinYin(user.Name)
|
||||||
ele["union_id"] = user.UnionID
|
ele["union_id"] = user.UnionID
|
||||||
ele["user_id"] = user.UserID
|
ele["user_id"] = user.UserID
|
||||||
ele["open_id"] = user.OpenID
|
ele["open_id"] = user.OpenID
|
||||||
|
|
|
@ -5,7 +5,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/eryajf/go-ldap-admin/config"
|
"github.com/eryajf/go-ldap-admin/config"
|
||||||
"github.com/mozillazg/go-pinyin"
|
"github.com/eryajf/go-ldap-admin/public/tools"
|
||||||
"github.com/wenerme/go-wecom/wecom"
|
"github.com/wenerme/go-wecom/wecom"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ func GetAllDepts() (ret []map[string]interface{}, err error) {
|
||||||
for _, dept := range depts.Department {
|
for _, dept := range depts.Department {
|
||||||
ele := make(map[string]interface{})
|
ele := make(map[string]interface{})
|
||||||
ele["name"] = dept.Name
|
ele["name"] = dept.Name
|
||||||
ele["custom_name_pinyin"] = strings.Join(pinyin.LazyConvert(dept.Name, nil), "")
|
ele["custom_name_pinyin"] = tools.ConvertToPinYin(dept.Name)
|
||||||
ele["id"] = dept.ID
|
ele["id"] = dept.ID
|
||||||
ele["name_en"] = dept.NameEn
|
ele["name_en"] = dept.NameEn
|
||||||
ele["parentid"] = dept.ParentID
|
ele["parentid"] = dept.ParentID
|
||||||
|
@ -50,7 +50,7 @@ func GetAllUsers() (ret []map[string]interface{}, err error) {
|
||||||
for _, user := range users.UserList {
|
for _, user := range users.UserList {
|
||||||
ele := make(map[string]interface{})
|
ele := make(map[string]interface{})
|
||||||
ele["name"] = user.Name
|
ele["name"] = user.Name
|
||||||
ele["custom_name_pinyin"] = strings.Join(pinyin.LazyConvert(user.Name, nil), "")
|
ele["custom_name_pinyin"] = tools.ConvertToPinYin(user.Name)
|
||||||
ele["userid"] = user.UserID
|
ele["userid"] = user.UserID
|
||||||
ele["mobile"] = user.Mobile
|
ele["mobile"] = user.Mobile
|
||||||
ele["position"] = user.Position
|
ele["position"] = user.Position
|
||||||
|
|
|
@ -1,4 +1,31 @@
|
||||||
package tools
|
package tools
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
"unicode"
|
||||||
|
|
||||||
|
"github.com/mozillazg/go-pinyin"
|
||||||
|
)
|
||||||
|
|
||||||
// H is a shortcut for map[string]interface{}
|
// H is a shortcut for map[string]interface{}
|
||||||
type H map[string]interface{}
|
type H map[string]interface{}
|
||||||
|
|
||||||
|
// 是否全为中文
|
||||||
|
func isChinese(s string) bool {
|
||||||
|
for _, r := range s {
|
||||||
|
if !unicode.Is(unicode.Han, r) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// 将中文内容转成拼音
|
||||||
|
func ConvertToPinYin(s string) (ret string) {
|
||||||
|
if isChinese(s) {
|
||||||
|
ret = strings.Join(pinyin.LazyConvert(s, nil), "")
|
||||||
|
} else {
|
||||||
|
ret = s
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue