diff --git a/business/enterprise_session/create_session.go b/business/enterprise_session/create_session.go new file mode 100644 index 000000000..79c7a2b91 --- /dev/null +++ b/business/enterprise_session/create_session.go @@ -0,0 +1,165 @@ +package enterprise_session + +import ( + "errors" + "fmt" + enterprise "git.rosy.net.cn/baseapi/platformapi/enterprise_wechat" + "git.rosy.net.cn/jx-callback/business/auth2" + "git.rosy.net.cn/jx-callback/business/authz" + "git.rosy.net.cn/jx-callback/business/authz/autils" + "git.rosy.net.cn/jx-callback/business/jxstore/cms" + "git.rosy.net.cn/jx-callback/business/model" + "git.rosy.net.cn/jx-callback/business/model/dao" + "git.rosy.net.cn/jx-callback/globals" + "git.rosy.net.cn/jx-callback/globals/api" + "strconv" + "strings" +) + +type CreateSession struct { +} + +// 创建老板的业务群 +func (c *CreateSession) CreateBossToStaffAndCreateSession(token string, storeId int) (map[string]interface{}, error) { + // 获取老本的电话和门店信息 + authInfo, err := auth2.GetTokenInfo(token) + if err != nil { + return nil, err + } + + store, err := dao.GetStoreDetail2(dao.GetDB(), storeId, "", 0) + if err != nil { + return nil, err + } + if store.Tel1 != authInfo.Mobile || store.Tel1 == "" { + return nil, errors.New("不是门店老板,不创建群聊") + } + + // 检测用户是否存在 + if _, err := CheckUserExist(store); err != nil { + return nil, err + } + + // 获取创建群聊所需基础人员id + enterpriseIdList, err := CheckBoosGroupChat(store) + if err != nil { + return nil, err + } + + result := make(map[string]interface{}, 0) + result["enterpriseIdList"] = enterpriseIdList + result["chatName"] = "京西菜市" + store.Name + "群" + return result, nil +} + +// 检测用户是否存在 +func CheckUserExist(store *dao.StoreDetail2) (string, error) { + enterpriseUserId, err := api.EnterpriseChatHeadApi.GetUserIdByMobile(store.Tel1) + if strings.Contains(fmt.Sprintf("%v", err), "user no exist") || strings.Contains(fmt.Sprintf("%v", err), "46004") { + boss := &enterprise.CreateBoos2JXStaffReq{ + Userid: store.Tel1 + "_" + strconv.Itoa(store.ID), + Name: store.LicenceOwnerName, + Alias: "", + Mobile: store.Tel1, + Department: nil, // 四川省 + Order: nil, + Gender: "1", + Email: "", + IsLeaderInDept: nil, + Enable: 0, + AvatarMediaid: "", + Telephone: "", + Address: store.Address, + Extattr: enterprise.Extattr{}, + MainDepartment: 0, + ToInvite: true, + ExternalPosition: "", + ExternalProfile: enterprise.ExternalProfile{}, + } + if boss.Name == "" { + boss.Name = store.Name + "(老板名称不存在)" + } + + // 查询本门店所属省code + parentCityName := "" + for { + place, err := dao.GetPlaceByCode(dao.GetDB(), store.CityCode) + if err != nil { + return "", err + } + if place.Level != model.YES && place.ParentCode != 0 { + continue + } + parentCityName = place.Name + break + } + // 查询企业微信所有省份部门分类 + departmentList, err := api.EnterpriseChatHeadApi.GetAllDepartmentList() + if err != nil { + return "", err + } + for _, v := range departmentList { + if !strings.Contains(v.Name, parentCityName[:6]) { + continue + } + boss.Department = []int{v.ID} + break + } + + // 创建老板为京西员工,并存放在对应的省份里面 + if err := api.EnterpriseChatHeadApi.CreateBoss2JxStaff(boss); err != nil { + return "", err + } + enterpriseUserId = boss.Userid + } + + return enterpriseUserId, err +} + +// 获取当前门店企业内部人员信息 +func CheckBoosGroupChat(store *dao.StoreDetail2) ([]string, error) { + // 获取门店角色 + roleNames := []string{"StoreBoss"} + storeIDs := []int{store.ID} + var roleList []*authz.RoleInfo + for _, roleName := range roleNames { + if roleName == authz.StoreRoleBoss { + for _, storeID := range storeIDs { + roleList = append(roleList, autils.NewRole(roleName, storeID)) + } + } else { + roleList = append(roleList, autils.NewRole(roleName, 0)) + } + } + retVal, err := cms.GetRolesUserList(nil, roleList) + if err != nil { + return nil, err + } + + // 获取角色系统userId + systemUserId := make([]string, 0, 0) + for _, v := range retVal { + if len(v) == 0 { + return nil, errors.New("门店负责人为空,数据异常.联系管理员") + } + systemUserId = append(systemUserId, v...) + } + + // 根据userId获取系统用户电话号码 + userList, _, err := dao.GetUsers(dao.GetDB(), 0, "", systemUserId, nil, nil, 0, 50) + if err != nil { + return nil, err + } + + enterpriseList := make([]string, 0, 0) + // 获取用户企业微信用户id + for _, v := range userList { + enterpriseId, err := api.EnterpriseChatHeadApi.GetUserIdByMobile(*v.Mobile) + if err != nil { + globals.SugarLogger.Debug("Get enterpriseId err ,maybe system mobile different with enterprise", err) + continue + } + enterpriseList = append(enterpriseList, enterpriseId) + } + return enterpriseList, nil +} diff --git a/controllers/enterprise_session.go b/controllers/enterprise_session.go new file mode 100644 index 000000000..c6392daeb --- /dev/null +++ b/controllers/enterprise_session.go @@ -0,0 +1,27 @@ +package controllers + +import ( + "git.rosy.net.cn/jx-callback/business/enterprise_session" + "github.com/astaxie/beego/server/web" +) + +type SessionController struct { + web.Controller +} + +// 创建门店老板的会话群 +// @Title 创建门店老板的会话群 +// @Description 创建门店老板的会话群 +// @Param token header string true "认证token" +// @Param storeId formData int true "门店id" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /CreateBossSession [post] +func (c *SessionController) CreateBossSession() { + c.callCreateBossSession(func(params *tSessionCreateBossSessionParams) (interface{}, string, error) { + session := enterprise_session.CreateSession{} + result, err := session.CreateBossToStaffAndCreateSession(params.Token, params.StoreId) + return result, "", err + }) + +} diff --git a/globals/api/api.go b/globals/api/api.go index a9bc5accd..dcb70038f 100644 --- a/globals/api/api.go +++ b/globals/api/api.go @@ -1,6 +1,7 @@ package api import ( + enterprise "git.rosy.net.cn/baseapi/platformapi/enterprise_wechat" gomei "git.rosy.net.cn/baseapi/platformapi/gome_live_show" "git.rosy.net.cn/baseapi/platformapi/jxprintapi" "git.rosy.net.cn/baseapi/platformapi/qywxapi" @@ -111,8 +112,11 @@ var ( Cacher cache.ICacher SMSClient *aliyunsmsclient.SmsClient - TiktokApi *tiktok.API - GuoMeiApi *gomei.API + TiktokApi *tiktok.API // 抖音api + GuoMeiApi *gomei.API // 国美api + + EnterpriseChatHeadApi *enterprise.API // 企业微信api + EnterpriseChatMin *enterprise.API // 企业微信小程序api ) func init() { @@ -299,5 +303,6 @@ func Init() { TiktokApi = tiktok.New(beego.AppConfig.DefaultString("tiktokAppSecret", ""), beego.AppConfig.DefaultString("tiktokAppKey", "")) // 国美aip GuoMeiApi = gomei.New(beego.AppConfig.DefaultString("gomeiAppKey", ""), beego.AppConfig.DefaultString("gomeiAppSecret", ""), "") - + EnterpriseChatHeadApi = enterprise.New("ww9a156bfa070e1857", "0jBdCjSmoFiOoHIXyeCK9VbGQ82fVNJZ8uMl6JNN7X4") // 通讯录 + EnterpriseChatMin = enterprise.NewMin("ww9a156bfa070e1857", "JQsEmSTltHhNgdPIT320YJFphiYmRs-YZa-rCBwplss") // 小程序 } diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index b788aea77..a3b601397 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -4025,6 +4025,15 @@ func init() { Filters: nil, Params: nil}) + // 创建会话,客户群 + web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SessionController"] = append(web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SessionController"], + web.ControllerComments{ + Method: "CreateBossSession", + Router: `/CreateBossSession`, + AllowHTTPMethods: []string{"post"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) //web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:FnController"] = append(web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:FnController"], // web.ControllerComments{ // Method: "FnStore", diff --git a/routers/router.go b/routers/router.go index 0fb7583e2..347e4ea1e 100644 --- a/routers/router.go +++ b/routers/router.go @@ -156,6 +156,11 @@ func init() { &controllers.BiddingController{}, ), ), + web.NSNamespace("/session", + web.NSInclude( + &controllers.SessionController{}, + ), + ), ) web.AddNamespace(ns)