Browse Source

Merge branch 'saas_2022_05_17_activity' of http://git.dayaedu.com/yonge/mec into zouxuan-2022-05-27

zouxuan 3 years ago
parent
commit
dfefa1ea04

+ 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;

+ 6 - 3
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);
     }
 
     /**
@@ -372,7 +370,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         if (speakerCache.isExists()) {
             RoomSpeakerInfo speakerInfo = speakerCache.get();
             //过期时间= 房间正式开始时间+expiredMinute 分钟
-            Date expiredTime = DateUtil.addMinutes(room.getCreatedTime(), expiredMinute);
+            Date expiredTime = DateUtil.addMinutes(room.getLiveStartTime(), expiredMinute);
             //先决条件 当前时间 大于(创建房间时填入的开播时间 + 设置的过期分钟数)
             if (now.getTime() >= expiredTime.getTime()) {
 
@@ -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();
     }
 
     /**

+ 15 - 4
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));
+                .eq(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();
     }