Prechádzať zdrojové kódy

Merge remote-tracking branch 'origin/master_saas' into master_saas

zouxuan 2 rokov pred
rodič
commit
a8a1493177
26 zmenil súbory, kde vykonal 473 pridanie a 34 odobranie
  1. 12 1
      audio-analysis/src/main/java/com/yonge/netty/entity/MusicXmlBasicInfo.java
  2. 1 1
      audio-analysis/src/main/java/com/yonge/netty/server/service/AudioCompareHandler.java
  3. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java
  4. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TempLittleArtistTrainingCampDao.java
  5. 17 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/UserMusicCompareCampDayDataDao.java
  6. 90 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/UserMusicCompareCampDayData.java
  7. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/vo/ImLiveBroadcastRoomMemberVo.java
  8. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/vo/ImLiveRoomVideoVo.java
  9. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ImLiveRoomBlackService.java
  10. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysMusicCompareRecordService.java
  11. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/service/UserMusicCompareCampDayDataService.java
  12. 87 16
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java
  13. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveRoomBlackServiceImpl.java
  14. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankSettingServiceImpl.java
  15. 8 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  16. 32 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicCompareRecordServiceImpl.java
  17. 5 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TempLittleArtistTrainingCampServiceImpl.java
  18. 19 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/UserMusicCompareCampDayDataServiceImpl.java
  19. 4 2
      mec-biz/src/main/resources/config/mybatis/ImLiveBroadcastRoomMemberMapper.xml
  20. 11 0
      mec-biz/src/main/resources/config/mybatis/StudentMapper.xml
  21. 70 0
      mec-biz/src/main/resources/config/mybatis/TempLittleArtistTrainingCampMapper.xml
  22. 13 0
      mec-biz/src/main/resources/config/mybatis/UserMusicCompareCampDayDataMapper.xml
  23. 7 0
      mec-im/src/main/resources/logback-spring.xml
  24. 2 2
      mec-student/src/main/java/com/ym/mec/student/controller/SysMusicCompareRecordController.java
  25. 5 4
      mec-web/pom.xml
  26. 2 2
      mec-web/src/main/resources/bootstrap-local.properties

+ 12 - 1
audio-analysis/src/main/java/com/yonge/netty/entity/MusicXmlBasicInfo.java

@@ -14,6 +14,8 @@ public class MusicXmlBasicInfo {
 	private Integer tenantId;
 
 	private Integer subjectId;
+
+    private Integer campId;
 	
 	private String clientId;
 
@@ -41,7 +43,16 @@ public class MusicXmlBasicInfo {
 
 	private Map<Integer, MusicXmlSection> musicXmlSectionMap = new HashMap<Integer, MusicXmlSection>();
 
-	public Integer getId() {
+
+    public Integer getCampId() {
+        return campId;
+    }
+
+    public void setCampId(Integer campId) {
+        this.campId = campId;
+    }
+
+    public Integer getId() {
 		return id;
 	}
 

+ 1 - 1
audio-analysis/src/main/java/com/yonge/netty/server/service/AudioCompareHandler.java

@@ -159,7 +159,7 @@ public class AudioCompareHandler implements MessageHandler {
 				
 				MusicXmlNote musicXmlNote = musicXmlBasicInfo.getMusicXmlInfos().stream().max(Comparator.comparing(MusicXmlNote::getTimeStamp)).get();
 				sysMusicCompareRecord.setSourceTime((float) ((musicXmlNote.getTimeStamp()+musicXmlNote.getDuration())/1000));
-				sysMusicCompareRecordService.insert(sysMusicCompareRecord);
+				sysMusicCompareRecordService.insert(sysMusicCompareRecord,musicXmlBasicInfo.getCampId());
 				channelContext.setRecordId(sysMusicCompareRecord.getId());
 			}
 			break;

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java

@@ -362,4 +362,9 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
     List<TempCampUserTrainingSequenceVo> getStudentCloudStudySequenceDays(@Param("studentIds") List<Integer> studentIds,
                                                                           @Param("startTime") String startTime,
                                                                           @Param("endTime") String endTime);
+
+
+    List<TempCampUserTrainingSequenceVo> getStudentCloudStudySequenceDaysV2(@Param("studentIds") List<Integer> studentIds,
+                                                                          @Param("startTime") String startTime,
+                                                                          @Param("endTime") String endTime);
 }

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

@@ -25,6 +25,8 @@ public interface TempLittleArtistTrainingCampDao extends BaseMapper<TempLittleAr
 
     <T> List<T> queryUserTrainingTime(@Param("param") Map<String, Object> param);
 
+    <T> List<T> queryUserTrainingTimeV2(@Param("param") Map<String, Object> param);
+
     List<Integer> queryAllUserId();
 
     <T> IPage<T> queryCampUser(Page<T> page, @Param("param") Map<String, Object> param);
@@ -35,6 +37,8 @@ public interface TempLittleArtistTrainingCampDao extends BaseMapper<TempLittleAr
      */
     <T> IPage<T> queryUserTrainingDetail(Page<T> page, @Param("param") Map<String, Object> param);
 
+    <T> IPage<T> queryUserTrainingDetailV2(Page<T> page, @Param("param") Map<String, Object> param);
+
     List<ImGroup> queryCampImGroup(String imGroupIds);
 
     Integer queryUserTrainingPlayTime(@Param("param") Map<String, Object> param);

+ 17 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/UserMusicCompareCampDayDataDao.java

@@ -0,0 +1,17 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ym.mec.biz.dal.entity.UserMusicCompareCampDayData;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2023-03-23
+ */
+@Repository
+public interface UserMusicCompareCampDayDataDao extends BaseMapper<UserMusicCompareCampDayData> {
+    int updateCampDayData(@Param("userId") Integer userId, @Param("campId") Integer campId, @Param("playTime") float playTime);
+}

+ 90 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/UserMusicCompareCampDayData.java

@@ -0,0 +1,90 @@
+package com.ym.mec.biz.dal.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2023-03-23
+ */
+@TableName("user_music_compare_camp_day_data")
+@ApiModel(value = "UserMusicCompareCampDayData对象", description = "")
+public class UserMusicCompareCampDayData implements Serializable {
+    private static final long serialVersionUID = 1L;
+    @TableId(value = "id_", type = IdType.AUTO)
+    private Long id;
+    @ApiModelProperty("用户编号 ")
+    @TableField(value = "user_id_")
+    private Integer userId;
+    @ApiModelProperty("训练营id ")
+    @TableField(value = "camp_id_")
+    private Integer campId;
+    @ApiModelProperty("日期 ")
+    @TableField(value = "day_")
+    private Date day;
+    @ApiModelProperty("训练次数 ")
+    @TableField(value = "train_num_")
+    private Integer trainNum;
+    @ApiModelProperty("训练时长 ")
+    @TableField(value = "train_time_")
+    private Float trainTime;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public Integer getCampId() {
+        return campId;
+    }
+
+    public void setCampId(Integer campId) {
+        this.campId = campId;
+    }
+
+    public Date getDay() {
+        return day;
+    }
+
+    public void setDay(Date day) {
+        this.day = day;
+    }
+
+    public Integer getTrainNum() {
+        return trainNum;
+    }
+
+    public void setTrainNum(Integer trainNum) {
+        this.trainNum = trainNum;
+    }
+
+    public Float getTrainTime() {
+        return trainTime;
+    }
+
+    public void setTrainTime(Float trainTime) {
+        this.trainTime = trainTime;
+    }
+
+
+}

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/vo/ImLiveBroadcastRoomMemberVo.java

@@ -51,6 +51,17 @@ public class ImLiveBroadcastRoomMemberVo implements java.io.Serializable {
     @ApiModelProperty(value = "连麦状态 0:未申请1:申请连麦中2:连麦中")
     private Integer whetherMicStatus;
 
+    @ApiModelProperty(value = "是否黑名单")
+    private boolean blackFlag;
+
+    public boolean isBlackFlag() {
+        return blackFlag;
+    }
+
+    public void setBlackFlag(boolean blackFlag) {
+        this.blackFlag = blackFlag;
+    }
+
     public String getAvatar() {
         return avatar;
     }

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/vo/ImLiveRoomVideoVo.java

@@ -3,6 +3,7 @@ package com.ym.mec.biz.dal.vo;
 import com.ym.mec.biz.dal.entity.ImLiveRoomVideo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang3.StringUtils;
 
 import java.io.Serializable;
 
@@ -12,6 +13,9 @@ public class ImLiveRoomVideoVo extends ImLiveRoomVideo implements Serializable {
     @ApiModelProperty(value = "播出端-  pc网页端 移动端mobile")
     private String os;
 
+    @ApiModelProperty("视频类型")
+    private String videoType;
+
     public String getOs() {
         return os;
     }
@@ -19,4 +23,22 @@ public class ImLiveRoomVideoVo extends ImLiveRoomVideo implements Serializable {
     public void setOs(String os) {
         this.os = os;
     }
+
+    public String getVideoType() {
+
+        if (StringUtils.isNotEmpty(getUrl())) {
+
+            String fileName = getUrl();
+            int indexOf = fileName.lastIndexOf("?");
+            if (indexOf > -1) {
+                fileName = getUrl().substring(0, indexOf);
+            }
+            return fileName.substring(fileName.lastIndexOf(".") + 1);
+        }
+        return videoType;
+    }
+
+    public void setVideoType(String videoType) {
+        this.videoType = videoType;
+    }
 }

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ImLiveRoomBlackService.java

@@ -61,5 +61,12 @@ public interface ImLiveRoomBlackService extends IService<ImLiveRoomBlack> {
      * @param userId     用户id
      */
     void sendBlackMsg(ImLiveBroadcastRoomVo roomVo, Integer fromUserId, Integer userId, String type);
+
+    /**
+     * 检查用户是否在房间黑名单中
+     * @param userId 用户id
+     * @param roomUid 房间uid
+     */
+    Boolean checkBlackUser(Integer userId, String roomUid);
 }
 

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SysMusicCompareRecordService.java

@@ -101,4 +101,13 @@ public interface SysMusicCompareRecordService extends BaseService<Long, SysMusic
     void initSysMusicCompareDayData();
     
     PageInfo<TeacherCloudTrainingDto> queryTeacherTraining(TeacherCloudTrainingQueryInfo queryInfo);
+
+
+    /**
+     * 小小训练营 保存用户评测记录
+     *
+     * @param record 评测记录
+     * @param campId 训练营id
+     */
+    boolean insert(SysMusicCompareRecord record,Integer campId);
 }

+ 14 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/UserMusicCompareCampDayDataService.java

@@ -0,0 +1,14 @@
+package com.ym.mec.biz.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ym.mec.biz.dal.entity.UserMusicCompareCampDayData;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2023-03-23
+ */
+public interface UserMusicCompareCampDayDataService extends IService<UserMusicCompareCampDayData> {
+}

+ 87 - 16
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java

@@ -980,7 +980,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         LiveRoomMessage message = LiveRoomMessage.builder()
                 .isIncludeSender(1)
                 .objectName(LiveRoomMessage.STAT_SYNC)
-                .fromUserId(userid)
+                .fromUserId(roomVo.getSpeakerId().toString())
                 .toChatRoomId(roomVo.getRoomUid())
                 .content(messageContent)
                 .build();
@@ -1005,7 +1005,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
 
         // 消息发送用户
         LiveRoomMessage.MessageUser messageUser = null;
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        SysUser sysUser = sysUserFeignService.queryUserById(Integer.parseInt(userid));
         if (Objects.nonNull(sysUser)) {
             // 发送用户信息
             messageUser = LiveRoomMessage.MessageUser
@@ -1024,18 +1024,20 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
 
         LiveRoomMessage message = LiveRoomMessage.builder()
                 .isIncludeSender(1)
-                .objectName(LiveRoomMessage.LOOKER_LOGIN_OUT)
-                .fromUserId(userid)
+                .objectName(LiveRoomMessage.LEAVE)
+                .fromUserId(roomVo.getSpeakerId().toString())
                 .toChatRoomId(roomVo.getRoomUid())
                 .content(messageContent)
                 .build();
         try {
-            // TODO: 取消用户离开事件消息发送
+            // 黑名单才发送退出消息
             //用户离开直播间发送退出房间消息给主讲人
-            /*
+            if (!imLiveRoomBlackService.checkBlackUser(Integer.parseInt(userid), roomVo.getRoomUid())) {
+                return;
+            }
             LivePluginService pluginService = livePluginContext.getPluginService(roomVo.getServiceProvider());
             pluginService.sendChatRoomMessage(message);
-            */
+
             log.info("sendLiveRoomLoginOutMessage>>>> looker LOOKER_LOGIN_OUT : roomId={}, userId={}", roomVo.getRoomUid(), userid);
         } catch (Exception e) {
             log.error("sendLiveRoomLoginOutMessage>>>>  looker error LOOKER_LOGIN_OUT {}", e.getMessage());
@@ -1091,7 +1093,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         LiveRoomMessage message = LiveRoomMessage.builder()
                 .isIncludeSender(1)
                 .objectName(LiveRoomMessage.MEMBER_COUNT)
-                .fromUserId(fromUserId.toString())
+                .fromUserId(roomVo.getSpeakerId().toString())
                 .toChatRoomId(roomUid)
                 .content(messageContent)
                 .build();
@@ -1345,11 +1347,69 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         onlineUserInfo.fastPut(userId, JSONObject.toJSONString(userInfo));
         //向直播间发送当前在线人数消息
         this.sendOnlineUserCount(imLiveBroadcastRoomVo, userId, onlineUserInfo.size());
+
+        // 黑名单发送进入消息
+        if (imLiveRoomBlackService.checkBlackUser(userId, imLiveBroadcastRoomVo.getRoomUid())) {
+            // 发送进入消息
+            this.sendBlackJoinRoom(userId, imLiveBroadcastRoomVo);
+        }
+
+
         log.info("join sendOnlineUserCount>>>>   roomUid: {}  fromUserId:{}  count:{}", roomUid, userId, onlineUserInfo.size());
         log.info("joinRoom>>>> userInfo: {}", JSONObject.toJSONString(userInfo));
     }
 
     /**
+     * 发送黑名单进入消息
+     * @param userId 用户id
+     */
+    private void sendBlackJoinRoom(Integer userId,ImLiveBroadcastRoomVo roomVo) {
+
+        String roomUid = roomVo.getRoomUid();
+        //校验传入参数,房间uid和发送人id不能为空
+        if (!WrapperUtil.checkObj(roomUid, userId)) {
+            log.info(" sendOnlineUserCount>>>> param is null roomUid: {}  fromUserId:{} ", roomUid, userId);
+            return;
+        }
+
+        // 消息发送用户
+        LiveRoomMessage.MessageUser messageUser = null;
+        SysUser sysUser = sysUserFeignService.queryUserById(userId);
+        if (Objects.nonNull(sysUser)) {
+            // 发送用户信息
+            messageUser = LiveRoomMessage.MessageUser
+                .builder()
+                .sendUserId(sysUser.getId().toString())
+                .sendUserName(sysUser.getUsername())
+                .avatarUrl(sysUser.getAvatar())
+                .blackFlag(true)
+                .build();
+        }
+
+        LiveRoomMessage.MessageContent messageContent = LiveRoomMessage.MessageContent
+            .builder()
+            .sendUserInfo(messageUser)
+            .build();
+
+        LiveRoomMessage message = LiveRoomMessage.builder()
+                                                 .isIncludeSender(1)
+                                                 .objectName(LiveRoomMessage.WELCOME)
+                                                 .fromUserId(roomVo.getSpeakerId().toString())
+                                                 .toChatRoomId(roomUid)
+                                                 .content(messageContent)
+                                                 .build();
+
+        //发送消息
+        try {
+            livePluginContext.getPluginService(roomVo.getServiceProvider()).sendChatRoomMessage(message);
+            log.info("sendBlackJoinRoom>>>> message: {}", JSONObject.toJSONString(message));
+        } catch (Exception e) {
+            log.error("sendBlackJoinRoom>>>> error {}", e.getMessage());
+            log.error("sendBlackJoinRoom>>>> sendMessage {} :", JSONObject.toJSONString(message));
+        }
+    }
+
+    /**
      * 获取直播间用户信息
      * @param userId 用户id
      * @param imLiveBroadcastRoomVo 直播间信息
@@ -1640,6 +1700,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
             // 创建直播间IM群
             pluginService.chatRoomCreate(room.getRoomUid(), room.getRoomTitle(),sysUser.getId().toString());
 
+            createSpeakerInfo(room, sysUser);
             Boolean whetherVideoFlag = getRoomConfig(room.getRoomConfig()).map(o -> o.getWhether_video() == 0).orElse(true);
 
             // 腾讯云直播,提前生成录制规则
@@ -1731,7 +1792,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
                 case ANCHOR_CAMERA:
                     appDefinedData.add(TencentRequest.ChatRoomGroupDefinedData.builder()
                                                                               .key(key.getCode())
-                                                                              .value("OFF")
+                                                                              .value("ON")
                                                                               .build());
                     break;
             }
@@ -2131,6 +2192,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         if (liveRoom.getCameraStatus() != null) {
             setGroupDefinedData(room,EGroupDefinedDataType.ANCHOR_CAMERA,liveRoom.getCameraStatus() == 1?
                 EOnOffStatus.ON.getCode():EOnOffStatus.OFF.getCode());
+            return true;
         }
 
         return this.updateById(imLiveBroadcastRoom);
@@ -2276,15 +2338,24 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
             LivePluginService pluginService = livePluginContext.getPluginService(
                 imLiveBroadcastRoom.getServiceProvider());
             try {
-                TencentWrapper.LiveStreamState liveStreamState = pluginService
-                    .liveStreamState(getStreamId(imLiveBroadcastRoom.getRoomUid(),imLiveBroadcastRoom.getSpeakerId()));
-                if (liveStreamState == null) {
-                    log.error("查询直播间流失败,返回结果为空");
+                if (pluginService == null) {
+                    log.error("查询直播间流失败,未找到对应的插件");
                     continue;
                 }
-                log.info("查询直播间流状态:{},roomUid:{}", JSON.toJSONString(liveStreamState), imLiveBroadcastRoom.getRoomUid());
-                if (!"active".equals(liveStreamState.getStreamState())) {
-                    roomDestroy(imLiveBroadcastRoom.getRoomUid());
+                if (pluginService.pluginName().equals(TencentCloudLivePlugin.PLUGIN_NAME)) {
+                    TencentWrapper.LiveStreamState liveStreamState = pluginService.liveStreamState(
+                        getStreamId(imLiveBroadcastRoom.getRoomUid(), imLiveBroadcastRoom.getSpeakerId()));
+                    if (liveStreamState == null) {
+                        log.error("查询直播间流失败,返回结果为空");
+                        continue;
+                    }
+                    log.info("查询直播间流状态:{},roomUid:{}", JSON.toJSONString(liveStreamState), imLiveBroadcastRoom.getRoomUid());
+                    if (!"active".equals(liveStreamState.getStreamState())) {
+                        roomDestroy(imLiveBroadcastRoom.getRoomUid());
+                    }
+                } else if (pluginService.pluginName().equals(RongCloudLivePlugin.PLUGIN_NAME)) {
+                    // 融云走原有逻辑
+                    destroyExpiredLiveRoom(new Date(), imLiveBroadcastRoom, 0);
                 }
             } catch (Exception e) {
 

+ 14 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveRoomBlackServiceImpl.java

@@ -207,6 +207,20 @@ public class ImLiveRoomBlackServiceImpl extends ServiceImpl<ImLiveRoomBlackDao,
         }
     }
 
+    /**
+     * 检查用户是否在房间黑名单中
+     *
+     * @param userId  用户id
+     * @param roomUid 房间uid
+     */
+    @Override
+    public Boolean checkBlackUser(Integer userId, String roomUid) {
+        ImLiveRoomBlack imLiveRoomBlack = this.getOne(Wrappers.<ImLiveRoomBlack>lambdaQuery()
+                .eq(ImLiveRoomBlack::getRoomUid, roomUid)
+                .eq(ImLiveRoomBlack::getUserId, userId));
+        return imLiveRoomBlack != null;
+    }
+
     private SysUser getSysUser() {
         //修改机构基础信息
         return Optional.ofNullable(sysUserFeignService.queryUserInfo())

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

@@ -14,6 +14,7 @@ import java.util.concurrent.TimeUnit;
 import java.util.function.BiPredicate;
 import java.util.stream.Collectors;
 
+import com.alibaba.fastjson.JSON;
 import com.ym.mec.biz.service.*;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -32,7 +33,6 @@ import org.springframework.transaction.annotation.Transactional;
 import com.alibaba.fastjson.JSONArray;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.ActivityUserMapperDao;
 import com.ym.mec.biz.dal.dao.MemberRankPrivilegesDao;
 import com.ym.mec.biz.dal.dao.MemberRankSettingDao;
 import com.ym.mec.biz.dal.dao.StudentPaymentOrderDetailDao;
@@ -664,6 +664,7 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
     public boolean liveBuyOrderCallback(StudentPaymentOrder studentPaymentOrder) {
         //查询原定的是否已处理
         StudentPaymentOrder orignStudentPaymentOrder = studentPaymentOrderService.lockOrder(studentPaymentOrder.getId());
+        logger.info("XXX-createOrder ---> liveBuyOrderCallback:{}", JSON.toJSONString(orignStudentPaymentOrder));
         if (orignStudentPaymentOrder == null) {
             return false;
         }

+ 8 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -184,6 +184,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
 
         String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
 
+        logger.info("XXX-createOrder ---> cashAmount:{}, balance:{}", cashAmount, cashAmount.compareTo(BigDecimal.ZERO));
         if (cashAmount.compareTo(BigDecimal.ZERO) == 0) {
 
             studentPaymentRouteOrderService.addRouteOrder(studentPaymentOrder.getOrderNo(), studentPaymentOrder.getOrganId(), balance);
@@ -396,6 +397,9 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
 
     @Transactional(rollbackFor = Exception.class)
     public void updateOrder(Map<String, String> rpMap) throws Exception {
+
+        logger.info("XXX-createOrder ---> updateOrder:{}", rpMap);
+
         DealStatusEnum status = rpMap.get("tradeState").equals("1") ? DealStatusEnum.SUCCESS : DealStatusEnum.FAILED;
         StudentPaymentOrder order = findOrderByOrderNo(rpMap.get("merOrderNo"));
         order = studentPaymentOrderDao.lockOrder(order.getId());
@@ -433,7 +437,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
         } else {
             order.setMemo(rpMap.get("remarks"));
         }
-        order.setStatus(status);
+
         if (StringUtils.isBlank(order.getTransNo())) {
             order.setTransNo(rpMap.get("orderNo"));
         }
@@ -443,6 +447,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
         TenantContextHolder.setTenantId(order.getTenantId());
         callOrderCallBack(order);
 
+        // 设置订单状态
+        order.setStatus(status);
         if (status.equals(DealStatusEnum.SUCCESS)
                 && StringUtils.isNotBlank(order.getPaymentChannel())
                 && order.getPaymentChannel().equals("ADAPAY")
@@ -538,6 +544,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
 
     //调用相应业务回调接口
     public void callOrderCallBack(StudentPaymentOrder order) throws Exception {
+        logger.info("XXX-createOrder ---> callOrderCallBack:{}", JSON.toJSONString(order));
         if(order.getGroupType() == GroupType.ACTIVITY){
             vipGroupActivityService.orderCallback(order);
         }else {

+ 32 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicCompareRecordServiceImpl.java

@@ -9,6 +9,7 @@ import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.IndexBaseMonthData;
 import com.ym.mec.biz.dal.entity.SysMusicCompareRecord;
 import com.ym.mec.biz.dal.entity.SysMusicScore;
+import com.ym.mec.biz.dal.entity.UserMusicCompareCampDayData;
 import com.ym.mec.biz.dal.enums.FeatureType;
 import com.ym.mec.biz.dal.enums.HeardLevelEnum;
 import com.ym.mec.biz.dal.enums.IndexDataType;
@@ -68,6 +69,9 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 	@Autowired
 	private StudentTeacherMapperDao studentTeacherMapperDao;
 
+    @Autowired
+    private UserMusicCompareCampDayDataDao userMusicCompareCampDayDataDao;
+
 	@Override
 	public BaseDAO<Long, SysMusicCompareRecord> getDAO() {
 		return sysMusicCompareRecordDao;
@@ -499,4 +503,32 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 		pageInfo.setRows(dataList);
 		return pageInfo;
 	}
+
+    /**
+     * 小小训练营 保存用户评测记录
+     *
+     * @param record 评测记录
+     * @param campId 训练营id
+     */
+    @Override
+    public boolean insert(SysMusicCompareRecord record, Integer campId) {
+        this.insert(record);
+
+        if (campId == null) {
+            return true;
+        }
+        // 保存训练营评测记录
+        int i = userMusicCompareCampDayDataDao.updateCampDayData(record.getUserId(), campId, record.getPlayTime());
+        if (i == 0) {
+            UserMusicCompareCampDayData campDayData = new UserMusicCompareCampDayData();
+            campDayData.setCampId(campId);
+            campDayData.setUserId(record.getUserId());
+            campDayData.setDay(new Date());
+            campDayData.setTrainNum(1);
+            campDayData.setTrainTime(record.getPlayTime());
+            userMusicCompareCampDayDataDao.insert(campDayData);
+        }
+
+        return true;
+    }
 }

+ 5 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TempLittleArtistTrainingCampServiceImpl.java

@@ -249,7 +249,8 @@ public class TempLittleArtistTrainingCampServiceImpl extends ServiceImpl<TempLit
         //查询每日训练时长
         param.put("startTime", startDateStr + " 00:00:00");
         param.put("endTime", endDateStr + " 23:59:59");
-        List<TempUserTrainingTimeDetailVo> userTrainingTimeList = baseMapper.queryUserTrainingTime(param);
+        param.put("campId", camp.getId());
+        List<TempUserTrainingTimeDetailVo> userTrainingTimeList = baseMapper.queryUserTrainingTimeV2(param);
         //拼接数据
         if (CollectionUtils.isNotEmpty(userTrainingTimeList)) {
             Map<String, BigDecimal> nowTrainingTime = userTrainingTimeList.stream()
@@ -283,14 +284,14 @@ public class TempLittleArtistTrainingCampServiceImpl extends ServiceImpl<TempLit
         //训练营详情-查询条件时间设置
         queryUserTrainingDetailOpsParam(param);
         Page<TempCampUserTrainingDetailVo> page = PageUtil.getPageInfo(param);
-        page.setDesc("b.playDay");
-        IPage<TempCampUserTrainingDetailVo> vos = baseMapper.queryUserTrainingDetail(page, param);
+        page.setDesc("t.playDay");
+        IPage<TempCampUserTrainingDetailVo> vos = baseMapper.queryUserTrainingDetailV2(page, param);
         List<TempCampUserTrainingDetailVo> records = vos.getRecords();
         if(CollectionUtils.isNotEmpty(records)){
             List<Integer> studentIds = records.stream().map(e -> e.getId()).collect(Collectors.toList());
             Map<Integer,String> subjectMap = MapUtil.convertIntegerMap(studentDao.getStudentSubjectMapList(studentIds));
             Map<Integer,String> groupNameMap = MapUtil.convertMybatisMap(musicGroupDao.queryNormalGroupName(studentIds));
-            List<TempCampUserTrainingSequenceVo> sequenceDays = studentDao.getStudentCloudStudySequenceDays(studentIds,
+            List<TempCampUserTrainingSequenceVo> sequenceDays = studentDao.getStudentCloudStudySequenceDaysV2(studentIds,
                     param.get("startTime").toString(),param.get("endTime").toString());
             Map<Integer, List<Long>> listMap = sequenceDays.stream().collect(Collectors.groupingBy(e -> e.getUserId(),
                     Collectors.collectingAndThen(Collectors.toList(),v->v.stream().map(e->e.getDayNum()).collect(Collectors.toList()))));

+ 19 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/UserMusicCompareCampDayDataServiceImpl.java

@@ -0,0 +1,19 @@
+package com.ym.mec.biz.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ym.mec.biz.dal.dao.UserMusicCompareCampDayDataDao;
+import com.ym.mec.biz.dal.entity.UserMusicCompareCampDayData;
+import com.ym.mec.biz.service.UserMusicCompareCampDayDataService;
+import org.springframework.stereotype.Service;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2023-03-23
+ */
+@Service
+public class UserMusicCompareCampDayDataServiceImpl extends ServiceImpl<UserMusicCompareCampDayDataDao, UserMusicCompareCampDayData>
+     implements UserMusicCompareCampDayDataService {
+
+}

+ 4 - 2
mec-biz/src/main/resources/config/mybatis/ImLiveBroadcastRoomMemberMapper.xml

@@ -37,7 +37,8 @@
         o.name_ organName,
         GROUP_CONCAT(distinct mg.name_) musicGroupName,
         a.join_time_ as joinTime,
-        a.total_time_ as totalViewTime
+        a.total_time_ as totalViewTime,
+        if(ib.user_id_ is null, 0, 1) as blackFlag
         from im_live_broadcast_room_member as a
         left join im_live_broadcast_room as i on a.room_uid_ = i.room_uid_
         left join sys_user as su on su.id_ = a.user_id_
@@ -46,7 +47,8 @@
 		LEFT JOIN music_group mg ON  mg.id_ = sr.music_group_id_
         left join subject as b on st.subject_id_list_ = b.id_
 		left join `sys_user` tu on tu.`id_` = i.`speaker_id_` 
-		LEFT JOIN `organization` o on o.`id_` = su.`organ_id_` 
+		LEFT JOIN `organization` o on o.`id_` = su.`organ_id_`
+        left join im_live_room_black ib on ib.room_uid_ = a.room_uid_ and ib.user_id_ = a.user_id_
         where a.room_uid_ = #{param.roomUid}
         <if test="param.search != null ">
             AND (

+ 11 - 0
mec-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -1273,6 +1273,17 @@
         </foreach>
         group by user_id_,DATE_FORMAT(create_time_,'%Y-%m-%d')
     </select>
+
+    <select id="getStudentCloudStudySequenceDaysV2" resultType="com.ym.mec.biz.dal.vo.TempCampUserTrainingSequenceVo">
+        select user_id_ userId,TO_DAYS(DATE_FORMAT(day_,'%Y-%m-%d')) dayNum
+        from user_music_compare_camp_day_data
+        where DATE_FORMAT(day_,'%Y-%m-%d') BETWEEN #{startTime} AND #{endTime}
+        and user_id_ IN
+        <foreach collection="studentIds" open="(" close=")" item="userId" separator=",">
+            #{userId}
+        </foreach>
+        group by user_id_,DATE_FORMAT(day_,'%Y-%m-%d')
+    </select>
     <sql id="queryStudentBasicInfoSql">
         <where>
             AND su.lock_flag_ = 0 AND su.del_flag_ = 0

+ 70 - 0
mec-biz/src/main/resources/config/mybatis/TempLittleArtistTrainingCampMapper.xml

@@ -76,6 +76,35 @@
         GROUP BY a.user_id_, a.create_time_
     </select>
 
+    <select id="queryUserTrainingTimeV2" resultType="com.ym.mec.biz.dal.vo.TempUserTrainingTimeDetailVo" parameterType="java.util.Map">
+        SELECT
+        user_id_ as userId,
+        ifnull(train_time_, 0) AS playTime,
+        date_format(day_, '%Y-%m-%d') AS trainingDate
+        FROM user_music_compare_camp_day_data
+        <where>
+            <if test="param.startTime != null">
+                AND day_ &gt;= #{param.startTime}
+            </if>
+            <if test="param.campId != null">
+                AND camp_id_ = #{param.campId}
+            </if>
+            <if test="param.endTime != null">
+                AND day_ &lt;= #{param.endTime}
+            </if>
+            <if test="param.userId != null">
+                AND user_id_ = #{param.userId}
+            </if>
+            <if test="param.userIdList !=null and param.userIdList.size()>0">
+                AND user_id_ IN
+                <foreach collection="param.userIdList" item="userId" open="(" close=")" separator=",">
+                    #{userId}
+                </foreach>
+            </if>
+        </where>
+    </select>
+
+
     <select id="queryAllUserId" resultType="java.lang.Integer">
         SELECT
         distinct user_id_
@@ -159,6 +188,47 @@
         </where>
     </select>
 
+
+    <select id="queryUserTrainingDetailV2" parameterType="java.util.Map" resultType="com.ym.mec.biz.dal.vo.TempCampUserTrainingDetailVo">
+        select * from (SELECT
+        a.user_id_ AS id,
+        d.username_ AS username,
+        d.phone_ AS phone,
+        e.name_ AS imGroupName,
+        sum( if(ifnull(c.train_time_,0) &gt;= b.sign_standard_ * 60,1,0)) AS playDay,
+        max(ifnull(c.train_time_,0)) AS playTime
+        FROM
+        `temp_little_artist_training_camp_user_relation` `a`
+        left join temp_little_artist_training_camp b on b.id_ = a.activity_id_
+        left join user_music_compare_camp_day_data c on c.camp_id_ = a.activity_id_ and a.user_id_ = c.user_id_
+
+        LEFT JOIN `sys_user` `d` ON `d`.`id_` = `a`.`user_id_`
+        LEFT JOIN `im_group` `e` ON `a`.`im_group_id_` = `e`.`id_`
+        <where>
+            a.activity_id_ = #{param.campId} and a.state_ = #{param.state}
+            <if test="param.imGroupId != null">
+                AND e.id_ = #{param.imGroupId}
+            </if>
+            <if test="param.search != null">
+                AND (
+                d.`id_` LIKE CONCAT('%', #{param.search},'%')
+                OR d.`username_` LIKE CONCAT('%', #{param.search},'%')
+                OR d.`phone_` LIKE CONCAT('%', #{param.search},'%')
+                )
+            </if>
+        </where>
+        group by a.user_id_
+        )  t
+        <where>
+            <if test="param.standardFlag != null and param.standardFlag == true">
+                AND ifnull( t.playDay, 0 ) >= #{param.standardDays}
+            </if>
+            <if test="param.standardFlag != null and param.standardFlag == false">
+                AND ifnull( t.playDay, 0 ) &lt; #{param.standardDays}
+            </if>
+        </where>
+    </select>
+
     <select id="queryCampImGroup" resultType="com.ym.mec.biz.dal.entity.ImGroup">
         select id_ as id,
                name_ as name

+ 13 - 0
mec-biz/src/main/resources/config/mybatis/UserMusicCompareCampDayDataMapper.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE  mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.ym.mec.biz.dal.dao.UserMusicCompareCampDayDataDao">
+
+<update id="updateCampDayData">
+    UPDATE user_music_compare_camp_day_data a
+        set a.train_num_ = a.train_num_ + 1,
+        a.train_time_ = a.train_time_ + #{playTime}
+        where a.user_id_ = #{userId}
+        and a.camp_id_ = #{campId}
+        and a.day_ = date_format(now(), '%Y-%m-%d')
+    </update>
+</mapper>

+ 7 - 0
mec-im/src/main/resources/logback-spring.xml

@@ -29,6 +29,13 @@
 
     <logger name="com.ym.mec" level="INFO" />
 
+    <!--本地环境:打印控制台 -->
+    <springProfile name="local">
+        <root level="DEBUG">
+            <appender-ref ref="stdout" />
+            <appender-ref ref="file" />
+        </root>
+    </springProfile>
     <!--开发环境:打印控制台 -->
     <springProfile name="dev">
         <root level="INFO">

+ 2 - 2
mec-student/src/main/java/com/ym/mec/student/controller/SysMusicCompareRecordController.java

@@ -32,7 +32,7 @@ public class SysMusicCompareRecordController extends BaseController {
 
     @ApiOperation(value = "添加记录")
     @PostMapping("add")
-    public HttpResponseResult add(SysMusicCompareRecord record){
+    public HttpResponseResult add(SysMusicCompareRecord record,Integer campId){
         if(Objects.isNull(record.getFeature())){
             return failed("请设置功能点");
         }
@@ -40,7 +40,7 @@ public class SysMusicCompareRecordController extends BaseController {
         record.setUserId(userId);
         record.setClientId("student");
         
-        sysMusicCompareRecordService.insert(record);
+        sysMusicCompareRecordService.insert(record,campId);
         
         ModelMap model = new ModelMap();
         model.put("totalPlayTimeOfCurrentDate", sysMusicCompareRecordService.queryCurrentDatePlayTimeByUserId(userId));

+ 5 - 4
mec-web/pom.xml

@@ -70,10 +70,11 @@
 			<groupId>com.yonge.datasource</groupId>
 			<artifactId>dynamic-datasource</artifactId>
 		</dependency>
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>slf4j-api</artifactId>
-		</dependency>
+
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
 	</dependencies>
 	<build>
 		<plugins>

+ 2 - 2
mec-web/src/main/resources/bootstrap-local.properties

@@ -1,9 +1,9 @@
 #\u6307\u5b9a\u5f00\u53d1\u73af\u5883
 #spring.profiles.active=dev
 #\u670d\u52a1\u5668\u5730\u5740
-spring.cloud.nacos.config.server-addr=47.114.176.40:8848
+spring.cloud.nacos.config.server-addr=43.137.4.92:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
-spring.cloud.nacos.config.namespace=763c3d7e-d071-41e3-885a-170b91e6376c
+spring.cloud.nacos.config.namespace=fcc00e52-a464-4ab8-96aa-3469b3f66062
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e
 spring.cloud.nacos.config.group=DEFAULT_GROUP
 #\u6587\u4ef6\u540d -- \u5982\u679c\u6ca1\u6709\u914d\u7f6e\u5219\u9ed8\u8ba4\u4e3a ${spring.appliction.name}