package group_r import ( "encoding/json" "git.hilo.cn/hilo-common/domain" "git.hilo.cn/hilo-common/mycontext" "git.hilo.cn/hilo-common/resource/mysql" "git.hilo.cn/hilo-common/utils" "github.com/gin-gonic/gin" "gorm.io/gorm" "hilo-group/_const/enum/diamond_e" "hilo-group/_const/enum/group_e" "hilo-group/_const/enum/task_e" "hilo-group/cv/diamond_cv" "hilo-group/cv/group_cv" "hilo-group/cv/mic_cv" "hilo-group/domain/cache/mic_c" "hilo-group/domain/model/diamond_m" "hilo-group/domain/model/group_m" "hilo-group/domain/model/res_m" "hilo-group/domain/model/task_m" "hilo-group/domain/service/group_mic_s" "hilo-group/myerr" "hilo-group/myerr/bizerr" "hilo-group/req" "hilo-group/resp" "strconv" "time" ) // @Tags 群组 // @Summary 麦位所有信息(支持高频获取,前端可以高频获取,进行校正), v2.5.0_2_211025 版本之前,只能获取5个麦位,兼容于旧版本数据 // @Param token header string true "token" // @Param nonce header string true "随机数字" // @Param groupUuid query string true "groupUuid" // @Success 200 {object} group_cv.CvMic // @Router /v1/imGroup/mic/all [get] func GroupMicAllInfoFive(c *gin.Context) (*mycontext.MyContext, error) { myContext := mycontext.CreateMyContext(c.Keys) groupUuid := c.Query("groupUuid") userId, extendId, err := req.GetUserIdAndExtId(c, myContext) if err != nil { return myContext, err } model := domain.CreateModelContext(myContext) groupUuid, err = group_m.ToImGroupId(model, groupUuid) if err != nil { return myContext, err } group_m.UpdateMicExpire(model, groupUuid, extendId) //加入房间 || 更新房间内有人信息 //group_m.RoomLivingIn(model, groupUuid, userId) //降低频率 group_m.RoomLivingExpire(model, groupUuid, userId) mics, micUsers, err := group_m.GetAllMic(groupUuid, group_e.FiveMicNumType) if err != nil { return myContext, err } cvMics, err := group_cv.GetGroupMicAll(mics, micUsers) if err != nil { return myContext, err } resp.ResponseOk(c, cvMics) return myContext, nil } // @Tags 群组 // @Summary 麦位所有信息(支持高频获取,前端可以高频获取,进行校正)(v2.5.0_2_211025 版本之后,根据类型返回5或者10个麦位信息,数量决定了类型) // @Param token header string true "token" // @Param nonce header string true "随机数字" // @Param groupUuid query string true "groupUuid" // @Success 200 {object} group_cv.CvMic // @Router /v1/imGroup/mic/all/type [get] func GroupMicAllInfoTen(c *gin.Context) (*mycontext.MyContext, error) { myContext := mycontext.CreateMyContext(c.Keys) groupUuid := c.Query("groupUuid") userId, extendId, err := req.GetUserIdAndExtId(c, myContext) if err != nil { return myContext, err } model := domain.CreateModelContext(myContext) groupUuid, err = group_m.ToImGroupId(model, groupUuid) if err != nil { return myContext, err } group_m.UpdateMicExpire(model, groupUuid, extendId) //加入房间 || 更新房间内有人信息 //group_m.RoomLivingIn(model, groupUuid, userId) //降低频率 group_m.RoomLivingExpire(model, groupUuid, userId) micNumType, err := group_m.GetMicNumType(model, groupUuid) if err != nil { return myContext, err } //兼容于旧版本 n := group_m.GetMicNum(micNumType) if n >= 10 { micNumType = group_e.TenMicNumType } else { micNumType = group_e.FiveMicNumType } mics := []group_m.Mic{} micUsers := []group_m.MicUser{} mics, micUsers, err = group_m.GetAllMic(groupUuid, micNumType) if err != nil { return myContext, err } cvMics, err := group_cv.GetGroupMicAll(mics, micUsers) if err != nil { return myContext, err } resp.ResponseOk(c, cvMics) return myContext, nil } // @Tags 群组 // @Summary 麦位所有信息(支持高频获取,前端可以高频获取,进行校正)(v2.5.0_2_211025 版本之后,根据类型返回5或者10个麦位信息,数量决定了类型) // @Param token header string true "token" // @Param nonce header string true "随机数字" // @Param groupUuid query string true "groupUuid" // @Success 200 {object} group_cv.CvMic // @Router /v1/imGroup/mic/all/type/new [get] func GroupMicAllInfoType(c *gin.Context) (*mycontext.MyContext, error) { myContext := mycontext.CreateMyContext(c.Keys) groupUuid := c.Query("groupUuid") userId, extendId, err := req.GetUserIdAndExtId(c, myContext) if err != nil { return myContext, err } model := domain.CreateModelContext(myContext) groupUuid, err = group_m.ToImGroupId(model, groupUuid) if err != nil { return myContext, err } group_m.UpdateMicExpire(model, groupUuid, extendId) //加入房间 || 更新房间内有人信息 //group_m.RoomLivingIn(model, groupUuid, userId) //降低频率 group_m.RoomLivingExpire(model, groupUuid, userId) micNumType, err := group_m.GetMicNumType(model, groupUuid) if err != nil { return myContext, err } var mics []group_m.Mic var micUsers []group_m.MicUser mics, micUsers, err = group_m.GetAllMic(groupUuid, micNumType) if err != nil { return myContext, err } cvMics, err := group_cv.GetGroupMicAll(mics, micUsers) if err != nil { return myContext, err } resp.ResponseOk(c, cvMics) return myContext, nil } // @Tags 群组 // @Summary 修改麦位数量 // @Accept application/x-www-form-urlencoded // @Param token header string true "token" // @Param nonce header string true "随机数字" // @Param groupId formData string true "群ID" // @Param micNumType formData int true "麦位数量类型 1:5个麦位 2:10个麦位, 当:micOn=fales, micNumType值不采纳,传的是0" //当:micOn=fales, micNumType值不采纳:这是前端要求的 // @Param micOn formData bool true "是否打开麦位" // @Success 200 // @Router /v1/imGroup/mic/num [put] func GroupMicNumChange(c *gin.Context) (*mycontext.MyContext, error) { myContext := mycontext.CreateMyContext(c.Keys) userId, err := req.GetUserId(c) if err != nil { return myContext, nil } groupId := c.PostForm("groupId") if groupId == "" { return myContext, myerr.NewSysError("参数micNumType 不能为空") } model := domain.CreateModelContext(myContext) groupId, err = group_m.ToImGroupId(model, groupId) if err != nil { return myContext, err } micNumType, err := strconv.ParseUint(c.PostForm("micNumType"), 10, 8) if err != nil { return myContext, myerr.NewSysError("参数groupId 不能为空") } micOn, err := strconv.ParseBool(c.PostForm("micOn")) if err != nil { return myContext, myerr.NewSysError("参数micOn 有误") } if err := group_mic_s.NewGroupPowerService(myContext).GroupMicNumChange(groupId, userId, group_e.GroupMicNumType(micNumType), micOn); err != nil { return myContext, err } resp.ResponseOk(c, nil) return myContext, nil } // @Tags 群组 // @Summary 查询麦位数量。返回的是枚举。 // @Param token header string true "token" // @Param nonce header string true "随机数字" // @Param groupId query string true "群ID" // @Success 200 // @Router /v1/imGroup/mic/num [get] func GroupMicNum(c *gin.Context) (*mycontext.MyContext, error) { myContext := mycontext.CreateMyContext(c.Keys) txGroupId := c.Query("groupId") groupInfo, err := group_m.GetInfoByTxGroupId(domain.CreateModelContext(myContext), txGroupId) if err != nil { return myContext, err } resp.ResponseOk(c, groupInfo.MicNumType) return myContext, nil } // @Tags 群组 // @Summary 麦上表情信令 // @Accept application/x-www-form-urlencoded // @Param token header string true "token" // @Param nonce header string true "随机数字" // @Param groupId formData string true "群ID" // @Param micEmojiId formData int true "麦上表情ID" // @Success 200 // @Router /v1/imGroup/mic/emoji/msg [post] func GroupSendMicSystemMsg(c *gin.Context) (*mycontext.MyContext, error) { myContext := mycontext.CreateMyContext(c.Keys) _, externalId, err := req.GetUserIdAndExtId(c, myContext) if err != nil { return myContext, nil } txGroupId := c.PostForm("groupId") if txGroupId == "" { return myContext, myerr.NewSysError("参数groupId 不能为空") } micEmojiId, err := strconv.ParseUint(c.PostForm("micEmojiId"), 10, 64) if err != nil { return myContext, myerr.WrapErr(err) } // resMicEmoji := res_m.ResMicEmoji{} if err := mysql.Db.Model(&res_m.ResMicEmoji{}).First(&resMicEmoji, micEmojiId).Error; err != nil { return myContext, myerr.WrapErr(err) } if resMicEmoji.Status == mysql.NOUSER { return myContext, myerr.NewSysError("表情已下架") } buf, err := json.Marshal(mic_cv.CvMicEmoji{ Id: resMicEmoji.ID, Name: resMicEmoji.Name, IconUrl: resMicEmoji.IconUrl, SvagUrl: resMicEmoji.SvagUrl, }) if err != nil { return myContext, myerr.WrapErr(err) } // model := domain.CreateModelContext(myContext) if err := group_m.MicRPush(model, txGroupId, group_m.GroupSystemMsg{ MsgId: group_e.GroupMicEmoji, Source: externalId, Content: string(buf), }); err != nil { return myContext, err } resp.ResponseOk(c, nil) return myContext, nil } type ReturnFlag struct { Flag bool `json:"flag"` //1:邀请上麦 2:未完成任务上麦任务 Type uint `json:"type"` //钻石数量(2:未完成任务上麦任务才有值) DiamondNum uint32 `json:"diamondNum"` } // @Tags 群组 // @Summary 邀请上麦校验弹窗 // @Accept application/x-www-form-urlencoded // @Param token header string true "token" // @Param nonce header string true "随机数字" // @Param groupId formData string true "群ID" // @Success 200 {object} ReturnFlag // @Router /v1/imGroup/mic/in/invite/dialog [post] func GroupMicInInviteDialog(c *gin.Context) (*mycontext.MyContext, error) { myContext := mycontext.CreateMyContext(c.Keys) _, externalId, err := req.GetUserIdAndExtId(c, myContext) if err != nil { return myContext, nil } groupId := c.PostForm("groupId") if len(groupId) <= 0 { return myContext, bizerr.InvalidParameter } model := domain.CreateModelContext(myContext) groupInfo, err := group_m.GetInfoByTxGroupId(model, groupId) if err != nil { return nil, err } groupId = groupInfo.ImGroupId mics, micUsers, err := group_m.GetAllMic(groupId, groupInfo.MicNumType) if err != nil { return myContext, err } cvMics, err := group_cv.GetGroupMicAll(mics, micUsers) //用户没有上麦 micInFlag := false //群组麦上有人 micHasUserFlag := false //有空余麦位 micSpareFlag := false for _, r := range cvMics { //用户在麦上 if r.ExternalId != nil && *(r.ExternalId) == externalId { micInFlag = true } //麦上有人 if r.ExternalId != nil && *(r.ExternalId) != externalId { micHasUserFlag = true } if r.ExternalId == nil && r.Lock == false { micSpareFlag = true } } if micInFlag == false && micHasUserFlag == true && micSpareFlag == true { resp.ResponseOk(c, ReturnFlag{Flag: true}) return myContext, nil } else { resp.ResponseOk(c, ReturnFlag{ Flag: false, Type: 1, DiamondNum: 0, }) return myContext, nil } } // @Tags 群组 // @Summary 邀请上麦钻石校验弹窗 // @Accept application/x-www-form-urlencoded // @Param token header string true "token" // @Param nonce header string true "随机数字" // @Param groupId formData string true "群ID" // @Success 200 {object} ReturnFlag // @Router /v1/imGroup/mic/task/invite/dialog [post] func GroupMicTaskInviteDialog(c *gin.Context) (*mycontext.MyContext, error) { myContext := mycontext.CreateMyContext(c.Keys) userId, externalId, err := req.GetUserIdAndExtId(c, myContext) if err != nil { return myContext, nil } groupId := c.PostForm("groupId") if groupId == "" { return myContext, myerr.NewSysError("参数groupId 不能为空") } model := domain.CreateModelContext(myContext) groupInfo, err := group_m.GetInfoByTxGroupId(model, groupId) if err != nil { return myContext, err } if groupInfo == nil { return myContext, bizerr.GroupNotFound } groupId = groupInfo.ImGroupId mics, micUsers, err := group_m.GetAllMic(groupId, groupInfo.MicNumType) if err != nil { return myContext, err } cvMics, err := group_cv.GetGroupMicAll(mics, micUsers) //用户没有上麦 micInFlag := false //群组麦上有人 micHasUserFlag := false //有空余麦位 micSpareFlag := false for _, r := range cvMics { //用户在麦上 if r.ExternalId != nil && *(r.ExternalId) == externalId { micInFlag = true } //麦上有人 if r.ExternalId != nil && *(r.ExternalId) != externalId { micHasUserFlag = true } if r.ExternalId == nil && r.Lock == false { micSpareFlag = true } } if micInFlag == false && micHasUserFlag == true && micSpareFlag == true { // 今天展示过了 if show, _ := mic_c.IsMicDayInviteDialogShowToday(model, userId); show { resp.ResponseOk(c, ReturnFlag{ Flag: false, }) return myContext, nil } //产品说:同是否能领取了每日钻石关联起来 beginTime := utils.GetZeroTime(time.Now()) endTime := beginTime.AddDate(0, 0, 1) var n int64 if err := mysql.Db.Model(&diamond_m.DiamondAccountDetail{}).Where(&diamond_m.DiamondAccountDetail{ UserId: userId, AddReduce: mysql.ADD, }).Where("Created_Time <= ? and Created_Time >= ?", endTime, beginTime).Where("(Operate_Type = ? or Operate_Type = ?)", diamond_e.DailyInAppVip, diamond_e.DailyInAppCommon).Count(&n).Error; err != nil { if err != nil { return myContext, nil } } if n > 0 { //判断是否完成上麦任务 taskConfig := task_m.TaskConfig{} if err := mysql.Db.Model(&task_m.TaskConfig{}).Where(&task_m.TaskConfig{ Type: task_e.MicIn, }).First(&taskConfig).Error; err != nil { if err == gorm.ErrRecordNotFound { } else { return myContext, myerr.WrapErr(err) } } //任务还存在 if taskConfig.ID != 0 { var n int64 if err := mysql.Db.Model(&task_m.TaskUser{}).Where(&task_m.TaskUser{ TaskConfigId: taskConfig.ID, UserId: userId, DayStr: time.Now().Format(utils.COMPACT_DATE_FORMAT), HasFinish: mysql.YES, }).Count(&n).Error; err != nil { return myContext, myerr.WrapErr(err) } //存在还没完成 if n == 0 { resp.ResponseOk(c, ReturnFlag{ Flag: true, Type: 2, DiamondNum: taskConfig.Diamond, }) return myContext, nil } } } resp.ResponseOk(c, ReturnFlag{ Flag: true, Type: 1, }) return myContext, nil } else { resp.ResponseOk(c, ReturnFlag{ Flag: false, Type: 1, DiamondNum: 0, }) return myContext, nil } } // @Tags 群组 // @Summary 上麦 // @Accept application/x-www-form-urlencoded // @Param token header string true "token" // @Param nonce header string true "随机数字" // @Param groupUuid formData string true "groupUuid" // @Param i formData string false "麦序, 空字符串,代表有麦位就上" // @Success 200 // @Router /v1/imGroup/mic/in [post] func GroupMicIn(c *gin.Context) (*mycontext.MyContext, error) { myContext := mycontext.CreateMyContext(c.Keys) groupUuid := c.PostForm("groupUuid") nonce := c.GetHeader("nonce") userId, externalId, err := req.GetUserIdAndExtId(c, myContext) if err != nil { return myContext, err } model := domain.CreateModelContext(myContext) groupInfo, err := group_m.GetInfoByTxGroupId(model, groupUuid) if err != nil { return myContext, err } if groupInfo == nil { return myContext, bizerr.GroupNotFound } groupUuid = groupInfo.ImGroupId // 游客,且设置了游客不能上麦,则失败 // nonce = hilo,服务端内部调用,机器人 if groupInfo.TouristMic != 1 && nonce != "hilo" { role, err := GetGroupRoleById(model, groupInfo.ImGroupId, userId) if err != nil { return myContext, err } if role == group_e.GROUP_VISITOR { // 旧版本(2.32.0以下),提示升级 _, major, minor, _, err := req.GetAppVersion(c) if err != nil { return myContext, err } if major <= 2 && minor < 32 { return myContext, bizerr.UpgradeRequired } return myContext, bizerr.GroupMicBanTourist } } iStr := c.PostForm("i") micIndex := -1 // 用户已经在麦上,必须先下麦! micUser, err := group_m.GetMicUserByExternalId(model, externalId) if err != nil { return myContext, err } if micUser != nil { if iStr == "" { // 非切麦操作 return myContext, bizerr.GroupMicUserHasIn } // 切换麦位,先下麦 if err := group_mic_s.NewGroupPowerService(myContext).GroupMicLeave(groupUuid, micUser.I, userId, externalId); err != nil { return myContext, err } } if iStr == "" { //判断群组设置上的麦 是否被关闭 if groupInfo.MicOn == false { return myContext, bizerr.GroupInfoMicClosed } //micNum := 5 //if groupInfo.MicNumType == group_enum.TenMicNumType { // micNum = 10 //} micNum := group_m.GetMicNum(groupInfo.MicNumType) for i := 1; i <= micNum; i++ { if err := group_mic_s.NewGroupPowerService(myContext).GroupMicIn(groupUuid, i, userId, externalId); err != nil { if i == micNum { //最后一次了,依旧错误,则 return myContext, bizerr.GroupMicInByInviteFail } } else { //成功则跳出 micIndex = i break } } } else { i, err := strconv.Atoi(iStr) if err != nil { return myContext, err } if err := group_mic_s.NewGroupPowerService(myContext).GroupMicIn(groupUuid, i, userId, externalId); err != nil { return myContext, err } micIndex = i } data := map[string]interface{}{ "micIndex": micIndex, } if nonce == "hilo" { resp.ResponseOk(c, data) } else { resp.ResponseOk(c, nil) } // check cp 麦位置 go group_mic_s.NewGroupPowerService(myContext).CheckCpOnMic(groupUuid) return myContext, nil } func GetGroupRoleById(model *domain.Model, imGroupId string, userId uint64) (role group_e.GroupRoleType, err error) { role = group_e.GROUP_VISITOR roles, _, err := group_m.GetRolesInGroup(model, imGroupId) if err != nil { return } for u, r := range roles { if u == userId { role = r return } } isGroupMember, err := group_m.IsGroupMember(model.Db, imGroupId, userId) if err != nil { return } if isGroupMember { role = group_e.GROUP_MEMBER } return } // @Tags 群组 // @Summary 邀请上麦 // @Accept application/x-www-form-urlencoded // @Param token header string true "token" // @Param nonce header string true "随机数字" // @Param groupUuid formData string true "groupUuid" // @Param beInvitedExternalId formData string false "被邀请人的ExternalId" // @Success 200 // @Router /v1/imGroup/mic/invite [post] func GroupMicInvite(c *gin.Context) (*mycontext.MyContext, error) { myContext := mycontext.CreateMyContext(c.Keys) groupUuid := c.PostForm("groupUuid") userId, err := req.GetUserId(c) if err != nil { return myContext, err } model := domain.CreateModelContext(myContext) groupUuid, err = group_m.ToImGroupId(model, groupUuid) if err != nil { return myContext, err } beInvitedExternalId := c.PostForm("beInvitedExternalId") if err := group_mic_s.NewGroupPowerService(myContext).GroupMicInvite(groupUuid, userId, beInvitedExternalId); err != nil { return myContext, err } resp.ResponseOk(c, nil) return myContext, nil } // @Tags 群组 // @Summary 自己离开麦位, 管理人让他下麦 // @Accept application/x-www-form-urlencoded // @Param token header string true "token" // @Param nonce header string true "随机数字" // @Param groupUuid formData string true "groupUuid" // @Param i formData string true "麦序" // @Success 200 // @Router /v1/imGroup/mic/leave [post] func GroupMicLeave(c *gin.Context) (*mycontext.MyContext, error) { myContext := mycontext.CreateMyContext(c.Keys) groupId := c.PostForm("groupUuid") i, err := strconv.Atoi(c.PostForm("i")) if err != nil { return myContext, err } userId, externalId, err := req.GetUserIdAndExtId(c, myContext) if err != nil { return myContext, err } _, lang, err := req.GetUserIdLang(c, myContext) if err != nil { return myContext, err } model := domain.CreateModelContext(myContext) groupId, err = group_m.ToImGroupId(model, groupId) if err != nil { return myContext, err } micUser, err := group_m.GetMicUser(model, groupId, i) if err != nil { return myContext, err } if micUser != nil && micUser.UserId != userId { // 抱下麦 // 检查权限 if err = CheckOptToSvip6(model, userId, micUser.UserId, lang, 11); err != nil { return myContext, err } } if err := group_mic_s.NewGroupPowerService(myContext).GroupMicLeave(groupId, i, userId, externalId); err != nil { return myContext, err } // check cp麦位置 go group_mic_s.NewGroupPowerService(myContext).CheckCpLeaveMic(groupId, userId) resp.ResponseOk(c, nil) return myContext, nil } // @Tags 群组 // @Summary 麦位加锁 // @Accept application/x-www-form-urlencoded // @Param token header string true "token" // @Param nonce header string true "随机数字" // @Param groupUuid formData string true "groupUuid" // @Param i formData string true "麦序" // @Success 200 // @Router /v1/imGroup/mic/lock [post] func GroupMicLock(c *gin.Context) (*mycontext.MyContext, error) { myContext := mycontext.CreateMyContext(c.Keys) groupUuid := c.PostForm("groupUuid") i, err := strconv.Atoi(c.PostForm("i")) if err != nil { return myContext, err } userId, externalId, err := req.GetUserIdAndExtId(c, myContext) if err != nil { return myContext, err } model := domain.CreateModelContext(myContext) groupUuid, err = group_m.ToImGroupId(model, groupUuid) if err != nil { return myContext, err } if err := group_mic_s.NewGroupPowerService(myContext).GroupMicLock(userId, externalId, groupUuid, i); err != nil { return myContext, err } resp.ResponseOk(c, nil) return myContext, nil } // @Tags 群组 // @Summary 麦位解锁 // @Accept application/x-www-form-urlencoded // @Param token header string true "token" // @Param nonce header string true "随机数字" // @Param groupUuid formData string true "groupUuid" // @Param i formData string true "麦序" // @Success 200 // @Router /v1/imGroup/mic/unlock [post] func GroupMicUnLock(c *gin.Context) (*mycontext.MyContext, error) { myContext := mycontext.CreateMyContext(c.Keys) groupUuid := c.PostForm("groupUuid") i, err := strconv.Atoi(c.PostForm("i")) if err != nil { return myContext, err } userId, externalId, err := req.GetUserIdAndExtId(c, myContext) if err != nil { return myContext, err } model := domain.CreateModelContext(myContext) groupUuid, err = group_m.ToImGroupId(model, groupUuid) if err != nil { return myContext, err } if err := group_mic_s.NewGroupPowerService(myContext).GroupMicUnLock(userId, externalId, groupUuid, i); err != nil { return myContext, err } resp.ResponseOk(c, nil) return myContext, nil } // @Tags 群组 // @Summary 开麦(可以说话) // @Accept application/x-www-form-urlencoded // @Param token header string true "token" // @Param nonce header string true "随机数字" // @Param groupUuid formData string true "groupUuid" // @Param i formData string true "麦序" // @Success 200 // @Router /v1/imGroup/mic/speech/open [post] func GroupMicSpeechOpen(c *gin.Context) (*mycontext.MyContext, error) { myContext := mycontext.CreateMyContext(c.Keys) groupUuid := c.PostForm("groupUuid") i, err := strconv.Atoi(c.PostForm("i")) if err != nil { return myContext, err } userId, externalId, err := req.GetUserIdAndExtId(c, myContext) if err != nil { return myContext, err } model := domain.CreateModelContext(myContext) groupUuid, err = group_m.ToImGroupId(model, groupUuid) if err != nil { return myContext, err } if err := group_mic_s.NewGroupPowerService(myContext).GroupMicSpeechOpen(userId, externalId, groupUuid, i); err != nil { return myContext, err } resp.ResponseOk(c, nil) return myContext, nil } // @Tags 群组 // @Summary 关麦(不可以说话),管理人禁言这个麦位 // @Accept application/x-www-form-urlencoded // @Param token header string true "token" // @Param nonce header string true "随机数字" // @Param groupUuid formData string true "groupUuid" // @Param i formData string true "麦序" // @Success 200 // @Router /v1/imGroup/mic/speech/close [post] func GroupMicSpeechClose(c *gin.Context) (*mycontext.MyContext, error) { myContext := mycontext.CreateMyContext(c.Keys) groupUuid := c.PostForm("groupUuid") i, err := strconv.Atoi(c.PostForm("i")) if err != nil { return myContext, err } userId, externalId, err := req.GetUserIdAndExtId(c, myContext) if err != nil { return myContext, err } _, lang, err := req.GetUserIdLang(c, myContext) if err != nil { return myContext, err } model := domain.CreateModelContext(myContext) groupUuid, err = group_m.ToImGroupId(model, groupUuid) if err != nil { return myContext, err } if err := group_mic_s.NewGroupPowerService(myContext).GroupMicSpeechClose(userId, externalId, groupUuid, lang, i); err != nil { return myContext, err } resp.ResponseOk(c, nil) return myContext, nil } // @Tags 群组 // @Summary 麦位解除静音(打开座位) // @Accept application/x-www-form-urlencoded // @Param token header string true "token" // @Param nonce header string true "随机数字" // @Param groupUuid formData string true "groupUuid" // @Param i formData string true "麦序" // @Success 200 // @Router /v1/imGroup/mic/unmute [post] func GroupMicUnmute(c *gin.Context) (*mycontext.MyContext, error) { myContext := mycontext.CreateMyContext(c.Keys) groupUuid := c.PostForm("groupUuid") i, err := strconv.Atoi(c.PostForm("i")) if err != nil { return myContext, err } userId, externalId, err := req.GetUserIdAndExtId(c, myContext) if err != nil { return myContext, err } model := domain.CreateModelContext(myContext) groupUuid, err = group_m.ToImGroupId(model, groupUuid) if err != nil { return myContext, err } if err := group_mic_s.NewGroupPowerService(myContext).GroupMicUnMute(userId, externalId, groupUuid, i); err != nil { return myContext, err } resp.ResponseOk(c, nil) return myContext, nil } // @Tags 群组 // @Summary 麦位静音(关闭座位) // @Accept application/x-www-form-urlencoded // @Param token header string true "token" // @Param nonce header string true "随机数字" // @Param groupUuid formData string true "groupUuid" // @Param i formData string true "麦序" // @Success 200 // @Router /v1/imGroup/mic/mute [post] func GroupMicMute(c *gin.Context) (*mycontext.MyContext, error) { // todo myContext := mycontext.CreateMyContext(c.Keys) groupUuid := c.PostForm("groupUuid") i, err := strconv.Atoi(c.PostForm("i")) if err != nil { return myContext, err } userId, externalId, err := req.GetUserIdAndExtId(c, myContext) if err != nil { return myContext, err } model := domain.CreateModelContext(myContext) groupUuid, err = group_m.ToImGroupId(model, groupUuid) if err != nil { return myContext, err } if err := group_mic_s.NewGroupPowerService(myContext).GroupMicMute(userId, externalId, groupUuid, i); err != nil { return myContext, err } resp.ResponseOk(c, nil) return myContext, nil } // @Tags 群组 // @Summary 麦上用户群发成员广播 // @Accept application/x-www-form-urlencoded // @Param token header string true "token" // @Param nonce header string true "随机数字" // @Param groupId formData string true "群ID" // @Param content formData string true "内容" // @Success 200 {object} diamond_cv.CvDiamond // @Router /v1/imGroup/mic/mass [post] func GroupMicMass(c *gin.Context) (*mycontext.MyContext, error) { myContext := mycontext.CreateMyContext(c.Keys) userId, externalId, err := req.GetUserIdAndExtId(c, myContext) if err != nil { return myContext, err } groupId := c.PostForm("groupId") if len(groupId) <= 0 { return myContext, bizerr.InvalidParameter } model := domain.CreateModelContext(myContext) groupId, err = group_m.ToImGroupId(model, groupId) if err != nil { return myContext, err } content := c.PostForm("content") if err := group_mic_s.NewGroupPowerService(myContext).GroupIMMassByInMic(groupId, userId, externalId, content); err != nil { return myContext, err } diamond, err := diamond_cv.GetDiamond(userId) if err != nil { return nil, myerr.WrapErr(err) } resp.ResponseOk(c, diamond) return myContext, nil } // @Tags 群组 // @Summary 用户群发成员广播 // @Accept application/x-www-form-urlencoded // @Param token header string true "token" // @Param nonce header string true "随机数字" // @Param groupId formData string true "群ID" // @Param content formData string true "内容" // @Success 200 {object} diamond_cv.CvDiamond // @Router /v1/imGroup/mgr/mass [post] func GroupMgrMass(c *gin.Context) (*mycontext.MyContext, error) { myContext := mycontext.CreateMyContext(c.Keys) userId, externalId, err := req.GetUserIdAndExtId(c, myContext) if err != nil { return myContext, err } groupId := c.PostForm("groupId") if len(groupId) <= 0 { return myContext, bizerr.InvalidParameter } model := domain.CreateModelContext(myContext) groupId, err = group_m.ToImGroupId(model, groupId) if err != nil { return myContext, err } content := c.PostForm("content") if err := group_mic_s.NewGroupPowerService(myContext).GroupIMMassByMgr(groupId, userId, externalId, content); err != nil { return myContext, err } diamond, err := diamond_cv.GetDiamond(userId) if err != nil { return nil, myerr.WrapErr(err) } resp.ResponseOk(c, diamond) return myContext, nil }