Преглед на файлове

1.修复时长问题-少于1分钟显示返回0
2.修复参与人数并发错误问题
3.修改直播间添加后,立即执行创建直播间的逻辑

hgw преди 3 години
родител
ревизия
df448e6604

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/vo/TempCampUserTrainingDetailVo.java

@@ -75,6 +75,8 @@ public class TempCampUserTrainingDetailVo implements Serializable {
             if (playTime >= 60) {
                 BigDecimal divide = BigDecimal.valueOf(playTime).divide(BigDecimal.valueOf(60), 0, RoundingMode.DOWN);
                 playTime = divide.intValue();
+            } else {
+                playTime = 0;
             }
         }
         this.playTime = playTime;

+ 5 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java

@@ -215,8 +215,6 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         obj.setCreatedBy(getSysUser().getId());
         obj.setCreatedTime(now);
         this.save(obj);
-        //看是否需要马上创建房间
-        CompletableFuture.runAsync(this::createLiveRoom);
     }
 
     /**
@@ -908,6 +906,10 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
      * 提前30分钟主动去融云注册并创建房间
      */
     public void createLiveRoom() {
+        RBucket<Object> createLock = redissonClient.getBucket("IM:LIVE_ROOM_CREATE_LOCK");
+        if (!createLock.trySet(1,1, TimeUnit.MINUTES)) {
+            return;
+        }
         Date now = new Date();
         Date endTime = DateUtil.addMinutes(now, PRE_LIVE_TIME_MINUTE);
         List<ImLiveBroadcastRoom> list = this.list(new WrapperUtil<ImLiveBroadcastRoom>()
@@ -920,6 +922,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
             return;
         }
         list.forEach(this::createLiveRoom);
+        createLock.delete();
     }
 
     /**

+ 14 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TempLittleArtistTrainingCampUserRelationServiceImpl.java

@@ -12,6 +12,8 @@ import com.ym.mec.biz.service.TempLittleArtistTrainingCampService;
 import com.ym.mec.biz.service.TempLittleArtistTrainingCampUserRelationService;
 import com.ym.mec.common.exception.BizException;
 import org.apache.commons.lang3.StringUtils;
+import org.redisson.api.RBucket;
+import org.redisson.api.RedissonClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -20,6 +22,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Objects;
 import java.util.Optional;
+import java.util.concurrent.TimeUnit;
 import java.util.function.Consumer;
 
 /**
@@ -38,6 +41,8 @@ public class TempLittleArtistTrainingCampUserRelationServiceImpl extends Service
     private SysConfigService sysConfigService;
     @Autowired
     private TempLittleArtistTrainingCampService tempLittleArtistTrainingCampService;
+    @Autowired
+    private RedissonClient redissonClient;
 
     @Override
     public TempLittleArtistTrainingCampUserRelationDao getDao() {
@@ -53,15 +58,20 @@ public class TempLittleArtistTrainingCampUserRelationServiceImpl extends Service
     @Override
     public void add(Integer campId) {
         SysUser user = getUser();
+        RBucket<Object> addCamp = redissonClient.getBucket("TEMP:CAMP_ADD:" + user.getId());
+        if (!addCamp.trySet(1,10, TimeUnit.SECONDS)) {
+            throw new BizException("正在登记训练营,请勿重复提交");
+        }
         TempLittleArtistTrainingCampUserRelation one = this.getOne(Wrappers.<TempLittleArtistTrainingCampUserRelation>lambdaQuery()
-                .eq(TempLittleArtistTrainingCampUserRelation::getUserId, user.getId()));
-        if (Objects.nonNull(one) && Objects.nonNull(one.getActivityId())) {
+                .eq(TempLittleArtistTrainingCampUserRelation::getUserId, user.getId())
+                .isNotNull(TempLittleArtistTrainingCampUserRelation::getActivityId));
+        if (Objects.nonNull(one)) {
             throw new BizException("您已登记训练营!");
         }
         int count = this.count(Wrappers.<TempLittleArtistTrainingCampUserRelation>lambdaUpdate()
                 .set(TempLittleArtistTrainingCampUserRelation::getActivityId, campId));
         int maxNum = 2000;
-        if (count == maxNum) {
+        if (count >= maxNum) {
             throw new BizException("人数已报满!");
         }
         //修改训练营人数,小于2000人
@@ -73,6 +83,7 @@ public class TempLittleArtistTrainingCampUserRelationServiceImpl extends Service
                 .set(TempLittleArtistTrainingCampUserRelation::getActivityId, campId)
                 .set(TempLittleArtistTrainingCampUserRelation::getState, TempLittleArtistTrainingCampUserRelation.APPLY)
                 .eq(TempLittleArtistTrainingCampUserRelation::getUserId, user.getId()));
+        addCamp.delete();
     }
 
     /**

+ 3 - 0
mec-web/src/main/java/com/ym/mec/web/controller/ImLiveBroadcastRoomController.java

@@ -18,6 +18,7 @@ import javax.annotation.Resource;
 import javax.validation.Valid;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.CompletableFuture;
 
 /**
  * 直播房间管理表(ImLiveBroadcastRoom)表控制层
@@ -68,6 +69,8 @@ public class ImLiveBroadcastRoomController extends BaseController {
     @PreAuthorize("@pcs.hasPermissions('imLiveBroadcastRoom/add')")
     public HttpResponseResult<Object> add(@Valid @RequestBody ImLiveBroadcastRoomDto dto) {
         imLiveBroadcastRoomService.add(dto);
+        //看是否需要马上创建房间
+        CompletableFuture.runAsync(imLiveBroadcastRoomService::createLiveRoom);
         return succeed();
     }