diff --git a/domain/service/group_mic_s/group_mic.go b/domain/service/group_mic_s/group_mic.go index e3dc63d8858c654bb5e2c279f35efc33e4effad7..fe600014c4d3fee6938a39913e44d9abde20d691 100644 --- a/domain/service/group_mic_s/group_mic.go +++ b/domain/service/group_mic_s/group_mic.go @@ -331,6 +331,7 @@ func (s *GroupMicService) IncrGroupPowerOnMicExpAndTime(groupId string, userId u return nil } +// 检查cp上麦 func (s *GroupMicService) CheckCpOnMic(groupUuid string) { model := domain.CreateModelContext(s.svc.MyContext) // 填充cp麦位 @@ -382,3 +383,43 @@ func (s *GroupMicService) CheckCpOnMic(groupUuid string) { } return } + +// 检查cp下麦 +func (s *GroupMicService) CheckCpLeaveMic(groupUuid string, leaveUid uint64) { + model := domain.CreateModelContext(s.svc.MyContext) + // 填充cp麦位 + micNumType, err := group_m.GetMicNumType(model, groupUuid) + if err != nil { + return + } + _, micUsers, err := group_m.GetAllMic(groupUuid, micNumType) + if err != nil { + return + } + // userId->micIndex + var userMicIndex = make(map[uint64]int) + var cpUserId uint64 + for _, u := range micUsers { + if u.UserId == leaveUid { + cpUserId = u.CpUserId + } + userMicIndex[u.UserId] = u.I + } + if cpUserId <= 0 { + return + } + user, err := user_m.GetUser(model, cpUserId) + if err != nil { + model.Log.Errorf("GetUser fail:%v", err) + return + } + redisLock(redis_key.GetPrefixGroupMicUserInLock(cpUserId), uuid.NewV4().String(), time.Second*2, func() error { + model := domain.CreateModel(s.svc.CtxAndDb) + mic, err := group_m.GetMic(model, groupUuid, userMicIndex[cpUserId]) + if err != nil { + return err + } + return mic.Update(cpUserId, user.ExternalId, 0) + }) + return +} diff --git a/route/group_r/group_mic.go b/route/group_r/group_mic.go index b3c02f2d425dbbedf37fea89705389a6c489bc18..2cb2a728a45f99a274e22c8b046b8de939157928 100644 --- a/route/group_r/group_mic.go +++ b/route/group_r/group_mic.go @@ -705,6 +705,8 @@ func GroupMicLeave(c *gin.Context) (*mycontext.MyContext, error) { 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 }