Browse Source

优化代码
增加学员分组功能

hgw 3 years ago
parent
commit
6a11e1e88b
15 changed files with 196 additions and 24 deletions
  1. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TempLittleArtistTrainingCampDao.java
  2. 3 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TempLittleArtistTrainingCampUserRelation.java
  3. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/ImLiveBroadcastRoomService.java
  4. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TempLittleArtistTrainingCampService.java
  5. 32 10
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java
  6. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveRoomReservationServiceImpl.java
  7. 87 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TempLittleArtistTrainingCampServiceImpl.java
  8. 1 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TempLittleArtistTrainingCampUserRelationServiceImpl.java
  9. 6 0
      mec-biz/src/main/resources/config/mybatis/ImLiveRoomReservationMapper.xml
  10. 45 1
      mec-biz/src/main/resources/config/mybatis/TempLittleArtistTrainingCampMapper.xml
  11. 1 1
      mec-biz/src/main/resources/config/mybatis/TempLittleArtistTrainingCampUserRelationMapper.xml
  12. 8 0
      mec-student/src/main/java/com/ym/mec/student/controller/ImLiveBroadcastRoomController.java
  13. 0 3
      mec-student/src/main/java/com/ym/mec/student/controller/TempLittleArtistTrainingCampController.java
  14. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/ImLiveBroadcastRoomController.java
  15. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/TempLittleArtistTrainingCampController.java

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TempLittleArtistTrainingCampDao.java

@@ -39,5 +39,7 @@ public interface TempLittleArtistTrainingCampDao extends BaseMapper<TempLittleAr
     List<ImGroup> queryCampImGroup(String imGroupIds);
 
     Integer queryUserTrainingPlayTime(@Param("param") Map<String, Object> param);
+
+    List<Integer> queryUserGroup(@Param("campId") Integer campId);
 }
 

+ 3 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TempLittleArtistTrainingCampUserRelation.java

@@ -38,7 +38,7 @@ public class TempLittleArtistTrainingCampUserRelation implements Serializable {
 
     @TableField("im_group_id_")
     @ApiModelProperty(value = "im群id")
-    private Integer imGroupId;
+    private String imGroupId;
 
     @TableField("state_")
     @ApiModelProperty(value = "状态:未报名NOT_APPLY ,已报名 APPLY")
@@ -72,11 +72,11 @@ public class TempLittleArtistTrainingCampUserRelation implements Serializable {
         this.userId = userId;
     }
 
-    public Integer getImGroupId() {
+    public String getImGroupId() {
         return imGroupId;
     }
 
-    public void setImGroupId(Integer imGroupId) {
+    public void setImGroupId(String imGroupId) {
         this.imGroupId = imGroupId;
     }
 

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/ImLiveBroadcastRoomService.java

@@ -21,7 +21,7 @@ public interface ImLiveBroadcastRoomService extends IService<ImLiveBroadcastRoom
 
     PageInfo<ImLiveBroadcastRoomVo> queryPage(Map<String, Object> param);
 
-    ImLiveBroadcastRoomVo queryRoomAndCheck(String roomUid, Integer userId);
+    ImLiveBroadcastRoomVo queryRoomAndCheck(String roomUid, Integer userId,Integer osType);
 
     ImLiveBroadcastRoomVo queryRoomInfo(String roomUid);
 

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TempLittleArtistTrainingCampService.java

@@ -13,6 +13,7 @@ import com.ym.mec.common.page.PageInfo;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -107,6 +108,8 @@ public interface TempLittleArtistTrainingCampService extends IService<TempLittle
      */
     void checkCampState();
 
+    void studentGrouping(Date now);
+
     /**
      * 云教练训练是否达标
      */

+ 32 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java

@@ -82,6 +82,8 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
     private ImLiveBroadcastRoomDataService liveBroadcastRoomDataService;
     @Autowired
     private LiveGoodsMapperDao liveGoodsMapperDao;
+    @Autowired
+    private ImLiveRoomReservationService imLiveRoomReservationService;
 
     //待替换的变量
     public static final String USER_ID = "${userId}";
@@ -109,19 +111,20 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
      *
      * @param roomUid 房间uid
      * @param userId  用户id
+     * @param osType  1:学生端
      */
     @Override
-    public ImLiveBroadcastRoomVo queryRoomAndCheck(String roomUid, Integer userId) {
+    public ImLiveBroadcastRoomVo queryRoomAndCheck(String roomUid, Integer userId, Integer osType) {
         SysUser sysUser;
         if (Objects.isNull(userId)) {
             sysUser = getSysUser();
         } else {
             sysUser = getSysUser(userId);
         }
-        return queryRoomAndCheck(roomUid, sysUser);
+        return queryRoomAndCheck(roomUid, sysUser, osType);
     }
 
-    public ImLiveBroadcastRoomVo queryRoomAndCheck(String roomUid, SysUser sysUser) {
+    public ImLiveBroadcastRoomVo queryRoomAndCheck(String roomUid, SysUser sysUser, Integer osType) {
         //直播间信息校验
         Optional<ImLiveBroadcastRoomVo> optional = Optional.ofNullable(roomUid)
                 .map(this::queryRoomInfo);
@@ -132,6 +135,9 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         ImLiveBroadcastRoomVo room = optional.get();
         if (room.getLiveState() == 0) {
             Date liveStartTime = DateUtil.addMinutes(room.getLiveStartTime(), -PRE_LIVE_TIME_MINUTE);
+            if (osType == 1) {
+                throw new BizException("直播尚未开始");
+            }
             throw new BizException(DateUtil.format(liveStartTime, "yyyy年MM月dd日 HH点mm分") + " 可进入直播间准备");
         }
         if (room.getLiveState() == 2) {
@@ -194,9 +200,12 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
     @Transactional(rollbackFor = Exception.class)
     public void add(ImLiveBroadcastRoomDto dto) {
         SysUser sysUser = getSysUser(dto.getSpeakerId());
+        Date now = new Date();
+        if (now.getTime() > dto.getLiveStartTime().getTime()) {
+            throw new BizException("设置的直播开始时间不能小于当前时间");
+        }
         ImLiveBroadcastRoom obj = new ImLiveBroadcastRoom();
         BeanUtils.copyProperties(dto, obj);
-        Date now = new Date();
         String roomUid = "LIVE-" + sysUser.getId() + "-" + now.getTime();
         obj.setTenantId(TenantContextHolder.getTenantId());
         obj.setRoomUid(roomUid);
@@ -206,6 +215,8 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         obj.setCreatedBy(getSysUser().getId());
         obj.setCreatedTime(now);
         this.save(obj);
+        //看是否需要马上创建房间
+        CompletableFuture.runAsync(this::createLiveRoom);
     }
 
     /**
@@ -441,7 +452,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         this.updateById(room);
 
         //下架商品
-        liveGoodsMapperDao.updateStatus(room.getRoomUid(),null,false);
+        liveGoodsMapperDao.updateStatus(room.getRoomUid(), null, false);
 
         //向聊天室发自定义消息踢出所有人
         try {
@@ -611,6 +622,20 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
             //向直播间发送当前在线人数消息
             this.sendOnlineUserCount(roomUid, userId, onlineUserInfo.size());
             log.info("opsRoom>>>> looker userInfo: {}", JSONObject.toJSONString(userInfo));
+            //用户离开直播间发送退出房间消息给主讲人
+            ImRoomMessage message = new ImRoomMessage();
+            message.setIsIncludeSender(1);
+            message.setFromUserId(userId.toString());
+            message.setToChatroomId(roomUid);
+            message.setObjectName(ImRoomMessage.LOOKER_LOGIN_OUT);
+            message.setContent(userId);
+            try {
+                imFeignService.publishRoomMsg(message);
+                log.info("opsRoom>>>> looker LOOKER_LOGIN_OUT : {}", JSONObject.toJSONString(userInfo));
+            } catch (Exception e) {
+                log.error("opsRoom>>>>  looker error LOOKER_LOGIN_OUT {}", e.getMessage());
+                log.error("opsRoom>>>>  looker error sendMessage {} : LOOKER_LOGIN_OUT : {}", message, JSONObject.toJSONString(userInfo));
+            }
         });
     }
 
@@ -678,7 +703,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
      */
     public ImLiveBroadcastRoomVo speakerJoinRoom(String roomUid) {
         SysUser sysUser = getSysUser();
-        ImLiveBroadcastRoomVo roomVo = queryRoomAndCheck(roomUid, sysUser);
+        ImLiveBroadcastRoomVo roomVo = queryRoomAndCheck(roomUid, sysUser, 0);
         Integer userId = sysUser.getId();
         if (!userId.equals(roomVo.getSpeakerId())) {
             throw new BizException("您不是该直播间的主讲人");
@@ -895,9 +920,6 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         list.forEach(this::createLiveRoom);
     }
 
-    @Autowired
-    private ImLiveRoomReservationService imLiveRoomReservationService;
-
     /**
      * 去融云创建房间
      */
@@ -1054,7 +1076,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         }
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         String baseApiUrl = sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL);
-        sysMessageService.batchSendImGroupMessage(MessageTypeEnum.IM_SHARE_LIVE_URL, sysUser.getId().toString(), "liveRoom?"+roomUid, groupIds.split(","), null,
+        sysMessageService.batchSendImGroupMessage(MessageTypeEnum.IM_SHARE_LIVE_URL, sysUser.getId().toString(), "liveRoom?" + roomUid, groupIds.split(","), null,
                 imLiveBroadcastRoomVo.getTenantName(), imLiveBroadcastRoomVo.getRoomTitle(), imLiveBroadcastRoomVo.getSpeakerName(),
                 DateUtil.format(imLiveBroadcastRoomVo.getLiveStartTime(), DateUtil.CHINESE_DATA_FORMAT_1),
                 imLiveBroadcastRoomVo.getLiveRemark(), HttpUtil.getSortUrl(baseApiUrl + "/#/liveClassTransfer?roomUid=" + roomUid));

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveRoomReservationServiceImpl.java

@@ -31,6 +31,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.BiConsumer;
 
 /**
  * 直播预约记录(ImLiveRoomReservation)表服务实现类
@@ -87,6 +88,10 @@ public class ImLiveRoomReservationServiceImpl extends ServiceImpl<ImLiveRoomRese
         Page<ImLiveBroadcastRoomVo> pageInfo = PageUtil.getPageInfo(param);
         pageInfo.setDesc("a.created_time_");
         param.put("tenantId", TenantContextHolder.getTenantId());
+        BiConsumer<String, String> addTimeCons = (key, time) -> Optional.ofNullable(param.get(key)).map(String::valueOf)
+                .ifPresent(date -> param.put(key, date + " " + time));
+        addTimeCons.accept("startTime", "00:00:00");
+        addTimeCons.accept("endTime", "23:59:59");
         IPage<ImLiveBroadcastRoomVo> page = baseMapper.queryPageStudent(pageInfo, param);
         return PageUtil.pageInfo(page);
     }

+ 87 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TempLittleArtistTrainingCampServiceImpl.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Lists;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.TempLittleArtistTrainingCampDao;
@@ -15,6 +16,7 @@ import com.ym.mec.biz.dal.vo.TempCampUserTrainingDetailVo;
 import com.ym.mec.biz.dal.vo.TempCampUserTrainingPlayTimeVo;
 import com.ym.mec.biz.dal.vo.TempCampUserVo;
 import com.ym.mec.biz.dal.vo.TempUserTrainingTimeDetailVo;
+import com.ym.mec.biz.service.ImGroupService;
 import com.ym.mec.biz.service.TempLittleArtistTrainingCampService;
 import com.ym.mec.biz.service.TempLittleArtistTrainingCampUserRelationService;
 import com.ym.mec.common.exception.BizException;
@@ -36,8 +38,10 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -55,6 +59,8 @@ public class TempLittleArtistTrainingCampServiceImpl extends ServiceImpl<TempLit
     private SysUserFeignService sysUserFeignService;
     @Autowired
     private TempLittleArtistTrainingCampUserRelationService tempLittleArtistTrainingCampUserRelationService;
+    @Autowired
+    private ImGroupService imGroupService;
 
     @Override
     public TempLittleArtistTrainingCampDao getDao() {
@@ -307,6 +313,7 @@ public class TempLittleArtistTrainingCampServiceImpl extends ServiceImpl<TempLit
      * 定时任务-修改训练营状态-每天0点执行一次
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void checkCampState() {
         //查询未结束 并 未删除的训练营
         List<TempLittleArtistTrainingCamp> campList = this.list(Wrappers.<TempLittleArtistTrainingCamp>lambdaQuery()
@@ -320,7 +327,7 @@ public class TempLittleArtistTrainingCampServiceImpl extends ServiceImpl<TempLit
         Map<String, List<TempLittleArtistTrainingCamp>> stateMap = WrapperUtil.groupList(campList, TempLittleArtistTrainingCamp::getState);
         //未开始 NOT_START 修改为 报名中 APPLY
         opsState(now, stateMap, TempLittleArtistTrainingCamp.NOT_START, TempLittleArtistTrainingCamp::getApplyStartDate, TempLittleArtistTrainingCamp.APPLY);
-        //报名中 APPLY 修改为 筹备中 READY
+        //报名中 APPLY 修改为 筹备中 READY  如果报名结束日期+1天正好等于训练开始时间 并 训练时间正好是今天那么直接变更为进行中状态,那么直接修改为进行中状态
         opsState(now, stateMap, TempLittleArtistTrainingCamp.APPLY, TempLittleArtistTrainingCamp::getApplyEndDate, TempLittleArtistTrainingCamp.READY);
         //筹备中 READY 修改为 进行中 ING
         opsState(now, stateMap, TempLittleArtistTrainingCamp.READY, TempLittleArtistTrainingCamp::getTrainStartDate, TempLittleArtistTrainingCamp.ING);
@@ -328,6 +335,8 @@ public class TempLittleArtistTrainingCampServiceImpl extends ServiceImpl<TempLit
         opsState(now, stateMap, TempLittleArtistTrainingCamp.ING, TempLittleArtistTrainingCamp::getTrainEndDate, TempLittleArtistTrainingCamp.END);
         //修改数据
         campList.forEach(this::updateById);
+        //对今天开始训练的人进行分组
+        this.studentGrouping(now);
     }
 
     /**
@@ -344,6 +353,20 @@ public class TempLittleArtistTrainingCampServiceImpl extends ServiceImpl<TempLit
         List<TempLittleArtistTrainingCamp> list = stateMap.get(oldState);
         if (CollectionUtils.isNotEmpty(list)) {
             list.forEach(camp -> {
+                //报名中的状态
+                if (oldState.equals(TempLittleArtistTrainingCamp.APPLY)) {
+                    //报名结束日期+1天
+                    long appleEndAddTime = DateUtil.addDays(camp.getApplyEndDate(), 1).getTime();
+                    //训练开始时间
+                    long trainStartTime = camp.getTrainStartDate().getTime();
+                    //今天
+                    long nowTime = DateUtil.toDate(LocalDate.now().toString()).getTime();
+                    //报名结束日期+1天正好等于训练开始时间 并 训练时间正好是今天那么直接变更为进行中状态
+                    if (appleEndAddTime == trainStartTime && nowTime == trainStartTime) {
+                        camp.setState(TempLittleArtistTrainingCamp.ING);
+                        return;
+                    }
+                }
                 if (now.getTime() >= dateField.apply(camp).getTime()) {
                     camp.setState(newState);
                 }
@@ -352,6 +375,69 @@ public class TempLittleArtistTrainingCampServiceImpl extends ServiceImpl<TempLit
     }
 
     /**
+     * 对开始训练的的学员进行分组
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void studentGrouping(Date now) {
+        now = Optional.ofNullable(now).orElse(DateUtil.stringToDate(LocalDate.now() + " 00:00:00"));
+        //待数据修改后-查询训练开始时间为今天并且没有分组并且状态为进行中的数据
+        List<TempLittleArtistTrainingCamp> groupCampList = this.list(Wrappers.<TempLittleArtistTrainingCamp>lambdaQuery()
+                .eq(TempLittleArtistTrainingCamp::getDelFlag, 0)
+                .eq(TempLittleArtistTrainingCamp::getState, TempLittleArtistTrainingCamp.ING)
+                .isNull(TempLittleArtistTrainingCamp::getImGroupIds)
+                .eq(TempLittleArtistTrainingCamp::getTrainStartDate, now)
+        );
+        if (CollectionUtils.isEmpty(groupCampList)) {
+            return;
+        }
+        String groupType = "TRAINING";
+        //每个房间最大人数
+        BigDecimal maxUserNum = new BigDecimal("1");
+        //key-训练营id  value-训练营集合
+        groupCampList.forEach(camp -> {
+            List<String> imGroupIds = new ArrayList<>();
+            //查询该训练营 已报名且没分组的学员
+            List<Integer> userList = baseMapper.queryUserGroup(camp.getId());
+            if (CollectionUtils.isEmpty(userList)) {
+                return;//训练营没人报名
+            }
+            List<String> userStrList = userList.stream().map(String::valueOf).collect(Collectors.toList());
+            //报名人数
+            int totalUserNum = userStrList.size();
+            BigDecimal applyNum = new BigDecimal(totalUserNum + "");
+            //如果人数小于最大人数 则直接分组
+            if (maxUserNum.intValue() >= applyNum.intValue()) {
+                //分组
+                String groupId = imGroupService.createGroup(userStrList, camp.getName() + "-1群", groupType);
+                imGroupIds.add(groupId);
+            } else {
+                //分组数 ->报名人数 ➗ 每组最大人数 有小数就向上取整 1.01 -> 2
+                BigDecimal groupNum = applyNum.divide(maxUserNum, 0, RoundingMode.UP);
+                //每组分配人数 向下取整 1.01 -> 2
+                BigDecimal groupUserNum = applyNum.divide(groupNum, 0, RoundingMode.DOWN);
+                //切分人数
+                List<List<String>> partition = Lists.partition(userStrList, groupUserNum.intValue());
+                //群号
+                AtomicInteger i = new AtomicInteger(1);
+                partition.forEach(list -> {
+                    String groupId = imGroupService.createGroup(list, camp.getName() + "-" + i.get() + "群", groupType);
+                    //修改
+                    tempLittleArtistTrainingCampUserRelationService.update(Wrappers.<TempLittleArtistTrainingCampUserRelation>lambdaUpdate()
+                            .set(TempLittleArtistTrainingCampUserRelation::getImGroupId, groupId)
+                            .eq(TempLittleArtistTrainingCampUserRelation::getActivityId, camp.getId())
+                            .in(TempLittleArtistTrainingCampUserRelation::getUserId, list)
+                            .isNull(TempLittleArtistTrainingCampUserRelation::getImGroupId));
+                    imGroupIds.add(groupId);
+                    i.getAndIncrement();
+                });
+            }
+            camp.setImGroupIds(String.join(",", imGroupIds));
+            this.updateById(camp);
+        });
+    }
+
+    /**
      * 云教练训练是否达标
      */
     @Override

+ 1 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TempLittleArtistTrainingCampUserRelationServiceImpl.java

@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.TempLittleArtistTrainingCampUserRelationDao;
-import com.ym.mec.biz.dal.entity.ImLiveBroadcastRoom;
 import com.ym.mec.biz.dal.entity.TempLittleArtistTrainingCampUserRelation;
 import com.ym.mec.biz.dal.vo.TempCampUserQualificationsVo;
 import com.ym.mec.biz.service.SysConfigService;
@@ -53,7 +52,7 @@ public class TempLittleArtistTrainingCampUserRelationServiceImpl extends Service
         SysUser user = getUser();
         int count = this.count(Wrappers.<TempLittleArtistTrainingCampUserRelation>lambdaUpdate()
                 .set(TempLittleArtistTrainingCampUserRelation::getActivityId, campId));
-        if(count > 2000) {
+        if (count == 2000) {
             throw new BizException("人数已报满!");
         }
         this.update(Wrappers.<TempLittleArtistTrainingCampUserRelation>lambdaUpdate()

+ 6 - 0
mec-biz/src/main/resources/config/mybatis/ImLiveRoomReservationMapper.xml

@@ -56,6 +56,12 @@
             <if test="param.liveState != null">
                 and a.live_state_ = #{param.liveState}
             </if>
+            <if test="param.startTime != null">
+                <![CDATA[ AND a.live_start_time_  >= #{param.startTime} ]]>
+            </if>
+            <if test="param.endTime != null">
+                <![CDATA[ AND a.live_start_time_  <= #{param.endTime} ]]>
+            </if>
         </where>
     </select>
 </mapper>

+ 45 - 1
mec-biz/src/main/resources/config/mybatis/TempLittleArtistTrainingCampMapper.xml

@@ -92,7 +92,7 @@
             <if test="param.search != null ">
                 AND (
                 b.`id_` LIKE CONCAT('%', #{param.search},'%')
-                OR b.`name_` LIKE CONCAT('%', #{param.search},'%')
+                OR b.`username_` LIKE CONCAT('%', #{param.search},'%')
                 OR b.`phone_` LIKE CONCAT('%', #{param.search},'%')
                 )
             </if>
@@ -154,4 +154,48 @@
           AND create_time_ &lt;= #{param.endTime}
     </select>
 
+    <select id="queryUserGroup" resultType="int" parameterType="int">
+        <!--有乐团的用户-->
+        <!--select a.user_id_ as userId, a.sortDate, b.subject_id_list_-->
+        select a.user_id_ as userId
+        from (select a.user_id_, c.bill_start_date_ as sortDate
+              from (select a.activity_id_, a.user_id_, b.music_group_id_, a.state_
+                    from temp_little_artist_training_camp_user_relation as a
+                             left join student_registration as b on a.user_id_ = b.user_id_
+                    where a.state_ = 'APPLY'
+                      and a.activity_id_ = #{campId}
+                      and a.im_group_id_ is null
+                    group by b.user_id_
+                    having min(b.id_)) as a
+                       left join music_group as c on a.music_group_id_ = c.id_
+              union all
+              <!--没有乐团的用户-取第一次上课时间-->
+              select a.user_id_, min(d.class_date_) as sortDate
+              from temp_little_artist_training_camp_user_relation as a
+                  left join student_registration as b on a.user_id_ = b.user_id_
+                  left join course_schedule_student_payment as c on a.user_id_ = c.user_id_
+                  left join course_schedule as d on c.course_schedule_id_ = d.id_
+              where b.id_ is null
+                and a.state_ = 'APPLY'
+                and a.activity_id_ = #{campId}
+                and a.im_group_id_ is null
+              group by a.user_id_
+              having min(d.class_date_)
+              union all
+            <!-- 没有乐团-没有上课的用户 -->
+              select a.user_id_, null as sortDate
+              from temp_little_artist_training_camp_user_relation as a
+                  left join student_registration as b on a.user_id_ = b.user_id_
+                  left join course_schedule_student_payment as c on a.user_id_ = c.user_id_
+                  left join course_schedule as d on c.course_schedule_id_ = d.id_
+              where b.id_ is null
+                and c.id_ is null
+                and a.state_ = 'APPLY'
+                and a.activity_id_ = #{campId}
+                and a.im_group_id_ is null
+              group by a.user_id_) as a
+                 left join student as b on a.user_id_ = b.user_id_
+        order by a.sortDate desc, b.subject_id_list_
+    </select>
+
 </mapper>

+ 1 - 1
mec-biz/src/main/resources/config/mybatis/TempLittleArtistTrainingCampUserRelationMapper.xml

@@ -5,7 +5,7 @@
         <id column="id_" jdbcType="INTEGER" property="id"/>
         <result column="activity_id_" jdbcType="INTEGER" property="activityId"/>
         <result column="user_id_" jdbcType="INTEGER" property="userId"/>
-        <result column="im_group_id_" jdbcType="INTEGER" property="imGroupId"/>
+        <result column="im_group_id_" jdbcType="VARCHAR" property="imGroupId"/>
         <result column="state_" jdbcType="VARCHAR" property="state"/>
         <result column="create_time_" jdbcType="TIMESTAMP" property="createTime"/>
     </resultMap>

+ 8 - 0
mec-student/src/main/java/com/ym/mec/student/controller/ImLiveBroadcastRoomController.java

@@ -6,6 +6,7 @@ import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
@@ -34,5 +35,12 @@ public class ImLiveBroadcastRoomController extends BaseController {
         return succeed(imLiveBroadcastRoomService.queryPopularizeRoom());
     }
 
+    @ApiOperation("查询房间信息并校验房间是否合规")
+    @GetMapping("/queryRoom")
+    public HttpResponseResult<ImLiveBroadcastRoomVo> queryRoomAndCheck(@ApiParam(value = "房间uid", required = true) String roomUid,
+                                                                       @ApiParam(value = "用户id", required = true) Integer userId) {
+        return succeed(imLiveBroadcastRoomService.queryRoomAndCheck(roomUid, userId, 1));
+    }
+
 }
 

+ 0 - 3
mec-student/src/main/java/com/ym/mec/student/controller/TempLittleArtistTrainingCampController.java

@@ -1,7 +1,5 @@
 package com.ym.mec.student.controller;
 
-import com.ym.mec.biz.dal.dto.TempLittleArtistTrainingCampDto;
-import com.ym.mec.biz.dal.entity.ImGroup;
 import com.ym.mec.biz.dal.entity.TempLittleArtistTrainingCamp;
 import com.ym.mec.biz.dal.vo.*;
 import com.ym.mec.biz.service.TempLittleArtistTrainingCampService;
@@ -13,7 +11,6 @@ import io.swagger.annotations.*;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
-import javax.validation.Valid;
 import java.util.List;
 import java.util.Map;
 

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

@@ -54,7 +54,7 @@ public class ImLiveBroadcastRoomController extends BaseController {
     @GetMapping("/queryRoom")
     public HttpResponseResult<ImLiveBroadcastRoomVo> queryRoomAndCheck(@ApiParam(value = "房间uid", required = true) String roomUid,
                                                                        @ApiParam(value = "用户id", required = true) Integer userId) {
-        return succeed(imLiveBroadcastRoomService.queryRoomAndCheck(roomUid, userId));
+        return succeed(imLiveBroadcastRoomService.queryRoomAndCheck(roomUid, userId, 0));
     }
 
     @ApiOperation("查询房间信息")

+ 1 - 1
mec-web/src/main/java/com/ym/mec/web/controller/TempLittleArtistTrainingCampController.java

@@ -148,7 +148,7 @@ public class TempLittleArtistTrainingCampController extends BaseController {
 
     @ApiImplicitParams({
             @ApiImplicitParam(name = "search", dataType = "String", value = "学员姓名/手机号/编号-模糊搜索"),
-            @ApiImplicitParam(name = "imGroupId", dataType = "Integer", value = "所在群组Id"),
+            @ApiImplicitParam(name = "imGroupId", dataType = "String", value = "所在群组Id"),
             @ApiImplicitParam(name = "campId", dataType = "Integer", value = "训练营id"),
     })
     @ApiOperation(value="导出训练营详情")