Browse Source

Merge branch 'music_score'

Joburgess 4 years ago
parent
commit
957ae52c54

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

@@ -42,6 +42,11 @@ public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData>
                                               @Param("startMonth") String startMonth,
                                               @Param("startMonth") String startMonth,
                                               @Param("endMonth") String endMonth);
                                               @Param("endMonth") String endMonth);
 
 
+	List<IndexBaseMonthData> getAllIndexBaseData(@Param("organIds") Set<Integer> organIds,
+                                                 @Param("dataTypes") Set<String> dataTypes,
+                                                 @Param("startMonth") String startMonth,
+                                                 @Param("endMonth") String endMonth);
+
     List<IndexBaseMonthData> getVipCourseDataList(@Param("organIds") Set<Integer> organIds,
     List<IndexBaseMonthData> getVipCourseDataList(@Param("organIds") Set<Integer> organIds,
                                               @Param("dataTypes") Set<String> dataTypes,
                                               @Param("dataTypes") Set<String> dataTypes,
                                               @Param("startMonth") String startMonth,
                                               @Param("startMonth") String startMonth,

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/EduOrganStudentDataDto.java

@@ -8,6 +8,8 @@ import io.swagger.annotations.ApiModelProperty;
  */
  */
 public class EduOrganStudentDataDto {
 public class EduOrganStudentDataDto {
 
 
+    private int index;
+
     private Integer organId;
     private Integer organId;
 
 
     @ApiModelProperty("分部名称")
     @ApiModelProperty("分部名称")
@@ -43,6 +45,14 @@ public class EduOrganStudentDataDto {
     @ApiModelProperty("云教练新增人数")
     @ApiModelProperty("云教练新增人数")
     private int newCloudStudyStudentNum;
     private int newCloudStudyStudentNum;
 
 
+    public int getIndex() {
+        return index;
+    }
+
+    public void setIndex(int index) {
+        this.index = index;
+    }
+
     public Integer getOrganId() {
     public Integer getOrganId() {
         return organId;
         return organId;
     }
     }

+ 32 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SoundCheckInfoDto.java

@@ -0,0 +1,32 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.List;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/8/19 0019
+ */
+public class SoundCheckInfoDto {
+
+    private int curIndex;
+
+    private List<Double> frequencyList;
+
+    public int getCurIndex() {
+        return curIndex;
+    }
+
+    public void setCurIndex(int curIndex) {
+        this.curIndex = curIndex;
+    }
+
+    public List<Double> getFrequencyList() {
+        return frequencyList;
+    }
+
+    public void setFrequencyList(List<Double> frequencyList) {
+        this.frequencyList = frequencyList;
+    }
+}

+ 34 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/WebsocketTypeEnum.java

@@ -0,0 +1,34 @@
+package com.ym.mec.biz.dal.enums;
+
+import com.ym.mec.common.enums.BaseEnum;
+
+public enum WebsocketTypeEnum implements BaseEnum<String, WebsocketTypeEnum> {
+	SOUND_COMPARE("SOUND_COMPARE", "评测"),
+	SOUND_CHECK("SOUND_CHECK", "校音");
+
+	private String code;
+
+	private String msg;
+
+	WebsocketTypeEnum(String code, String msg) {
+		this.code = code;
+		this.msg = msg;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getMsg() {
+		return msg;
+	}
+
+	public void setMsg(String msg) {
+		this.msg = msg;
+	}
+
+	@Override
+	public String getCode() {
+		return this.code;
+	}
+}

+ 10 - 12
mec-biz/src/main/java/com/ym/mec/biz/handler/WebSocketHandler.java

@@ -3,6 +3,7 @@ package com.ym.mec.biz.handler;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.ym.mec.biz.dal.dto.WebSocketClientDetail;
 import com.ym.mec.biz.dal.dto.WebSocketClientDetail;
 import com.ym.mec.biz.dal.dto.WebSocketInfo;
 import com.ym.mec.biz.dal.dto.WebSocketInfo;
+import com.ym.mec.biz.dal.enums.WebsocketTypeEnum;
 import com.ym.mec.biz.service.SoundSocketService;
 import com.ym.mec.biz.service.SoundSocketService;
 import com.ym.mec.biz.service.WebSocketEventHandler;
 import com.ym.mec.biz.service.WebSocketEventHandler;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -30,21 +31,21 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
      */
      */
     public static final Map<String, WebSocketClientDetail> WS_CLIENTS = new ConcurrentHashMap<>();
     public static final Map<String, WebSocketClientDetail> WS_CLIENTS = new ConcurrentHashMap<>();
 
 
-    private static Map<String, WebSocketEventHandler> appMap = new ConcurrentHashMap<>();
+    private static Map<WebsocketTypeEnum, WebSocketEventHandler> appMap = new ConcurrentHashMap<>();
 
 
     /**
     /**
      * @describe 注册应用
      * @describe 注册应用
      * @author Joburgess
      * @author Joburgess
      * @date 2021/8/5 0005
      * @date 2021/8/5 0005
-     * @param tag:
+     * @param websocketType:
      * @param webSocketEventHandler:
      * @param webSocketEventHandler:
      * @return boolean
      * @return boolean
      */
      */
-    public static boolean regist(String tag, WebSocketEventHandler webSocketEventHandler){
-        if (appMap.containsKey(tag)){
+    public static boolean regist(WebsocketTypeEnum websocketType, WebSocketEventHandler webSocketEventHandler){
+        if (appMap.containsKey(websocketType)){
             return false;
             return false;
         }
         }
-        appMap.put(tag, webSocketEventHandler);
+        appMap.put(websocketType, webSocketEventHandler);
         return true;
         return true;
     }
     }
 
 
@@ -67,15 +68,12 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
         String phone = session.getPrincipal().getName().split(":")[1];
         String phone = session.getPrincipal().getName().split(":")[1];
         LOGGER.info("{}: {}", phone, message.getPayload());
         LOGGER.info("{}: {}", phone, message.getPayload());
         WebSocketInfo webSocketInfo = JSON.parseObject(message.getPayload(), WebSocketInfo.class);
         WebSocketInfo webSocketInfo = JSON.parseObject(message.getPayload(), WebSocketInfo.class);
-        String tag = "";
+
+        WebsocketTypeEnum websocketType = WebsocketTypeEnum.SOUND_COMPARE;
         if(webSocketInfo.getHeader().containsKey(SoundSocketService.TAG)){
         if(webSocketInfo.getHeader().containsKey(SoundSocketService.TAG)){
-            tag = webSocketInfo.getHeader().get(SoundSocketService.TAG);
-        }
-        if(StringUtils.isNotBlank(tag)){
-            appMap.get(tag).receiveTextMessage(session, phone, message);
-        }else{
-            appMap.values().forEach(e->e.receiveTextMessage(session, phone, message));
+            websocketType = WebsocketTypeEnum.valueOf(webSocketInfo.getHeader().get(SoundSocketService.TAG));
         }
         }
+        appMap.get(websocketType).receiveTextMessage(session, phone, message);
     }
     }
 
 
     @Override
     @Override

+ 9 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java

@@ -1237,17 +1237,17 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			return pageInfo;
 			return pageInfo;
 		}
 		}
 		Set<String> dataTypes = new HashSet<String>(){{
 		Set<String> dataTypes = new HashSet<String>(){{
-			add(CLOUD_STUDY_LIVELY_STUDENT_NUM.getCode());add(MEMBER_STUDENT_NUM.getCode());add(EXPERIENCE_MEMBER_STUDENT_NUM.getCode());
-			add(NEW_MEMBER_STUDENT_NUM.getCode());add(ORGAN_TOTAL_STUDENT_NUM.getCode());add(CLOUD_STUDY_NEW_STUDENT_NUM.getCode());}};
+			add(CLOUD_STUDY_LIVELY_STUDENT_NUM.getCode());add(MEMBER_STUDENT_NUM.getCode());add(NEW_MEMBER_STUDENT_NUM.getCode());
+			add(ORGAN_TOTAL_STUDENT_NUM.getCode());add(CLOUD_STUDY_NEW_STUDENT_NUM.getCode());}};
 
 
 
 
-		List<IndexBaseMonthData> indexBaseDatas = indexBaseMonthDataDao.getIndexBaseData(new HashSet<>(organIds), dataTypes, queryInfo.getDate(), queryInfo.getDate());
+		List<IndexBaseMonthData> indexBaseDatas = indexBaseMonthDataDao.getAllIndexBaseData(new HashSet<>(organIds), dataTypes, queryInfo.getDate(), queryInfo.getDate());
 
 
 		Map<Integer, Integer> organsStudentNumMap = indexBaseDatas.stream().filter(i->ORGAN_TOTAL_STUDENT_NUM.equals(i.getDataType())).collect(Collectors.toMap(IndexBaseMonthData::getOrganId, i->i.getActivateNum().intValue(), (i1, i2)->i1));
 		Map<Integer, Integer> organsStudentNumMap = indexBaseDatas.stream().filter(i->ORGAN_TOTAL_STUDENT_NUM.equals(i.getDataType())).collect(Collectors.toMap(IndexBaseMonthData::getOrganId, i->i.getActivateNum().intValue(), (i1, i2)->i1));
 
 
 		Map<Integer, Integer> organsVipStudentNumMap = indexBaseDatas.stream().filter(i->MEMBER_STUDENT_NUM.equals(i.getDataType())).collect(Collectors.toMap(IndexBaseMonthData::getOrganId, i->i.getActivateNum().intValue(), (i1, i2)->i1));
 		Map<Integer, Integer> organsVipStudentNumMap = indexBaseDatas.stream().filter(i->MEMBER_STUDENT_NUM.equals(i.getDataType())).collect(Collectors.toMap(IndexBaseMonthData::getOrganId, i->i.getActivateNum().intValue(), (i1, i2)->i1));
 
 
-		Map<Integer, Integer> organsEVipStudentNumMap = indexBaseDatas.stream().filter(i->EXPERIENCE_MEMBER_STUDENT_NUM.equals(i.getDataType())).collect(Collectors.toMap(IndexBaseMonthData::getOrganId, i->i.getActivateNum().intValue(), (i1, i2)->i1));
+//		Map<Integer, Integer> organsEVipStudentNumMap = indexBaseDatas.stream().filter(i->EXPERIENCE_MEMBER_STUDENT_NUM.equals(i.getDataType())).collect(Collectors.toMap(IndexBaseMonthData::getOrganId, i->i.getActivateNum().intValue(), (i1, i2)->i1));
 
 
 		Map<Integer, Integer> organCloudStudyLivelyStudentNumMap =indexBaseDatas.stream().filter(i->CLOUD_STUDY_LIVELY_STUDENT_NUM.equals(i.getDataType())).collect(Collectors.toMap(IndexBaseMonthData::getOrganId, i->i.getActivateNum().intValue(), (i1, i2)->i1));
 		Map<Integer, Integer> organCloudStudyLivelyStudentNumMap =indexBaseDatas.stream().filter(i->CLOUD_STUDY_LIVELY_STUDENT_NUM.equals(i.getDataType())).collect(Collectors.toMap(IndexBaseMonthData::getOrganId, i->i.getActivateNum().intValue(), (i1, i2)->i1));
 
 
@@ -1267,9 +1267,6 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			if(organsVipStudentNumMap.containsKey(organ.getId())){
 			if(organsVipStudentNumMap.containsKey(organ.getId())){
 				organStudentVipData.setVipStudentNum(organsVipStudentNumMap.get(organ.getId()));
 				organStudentVipData.setVipStudentNum(organsVipStudentNumMap.get(organ.getId()));
 			}
 			}
-			if(organsEVipStudentNumMap.containsKey(organ.getId())){
-				organStudentVipData.seteVipStudentNum(organsEVipStudentNumMap.get(organ.getId()));
-			}
 			if(organCloudStudyLivelyStudentNumMap.containsKey(organ.getId())){
 			if(organCloudStudyLivelyStudentNumMap.containsKey(organ.getId())){
 				organStudentVipData.setCloudStudyLivelyStudentNum(organCloudStudyLivelyStudentNumMap.get(organ.getId()));
 				organStudentVipData.setCloudStudyLivelyStudentNum(organCloudStudyLivelyStudentNumMap.get(organ.getId()));
 			}
 			}
@@ -1329,7 +1326,11 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			comparing = Comparator.comparing(EduOrganStudentDataDto::getOrganId);
 			comparing = Comparator.comparing(EduOrganStudentDataDto::getOrganId);
 		}
 		}
 
 
-		result = result.stream().skip(pageInfo.getOffset()).limit(pageInfo.getLimit()).sorted(comparing).collect(Collectors.toList());
+		result.sort(comparing);
+		for (int i = 0; i < result.size(); i++) {
+			result.get(i).setIndex(i+1);
+		}
+		result = result.stream().skip(pageInfo.getOffset()).limit(pageInfo.getLimit()).sorted(Comparator.comparing(EduOrganStudentDataDto::getIndex)).collect(Collectors.toList());
 		pageInfo.setRows(result);
 		pageInfo.setRows(result);
 		return pageInfo;
 		return pageInfo;
 	}
 	}

+ 77 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SoundCheckHandler.java

@@ -0,0 +1,77 @@
+package com.ym.mec.biz.service.impl;
+
+import be.tarsos.dsp.AudioDispatcher;
+import be.tarsos.dsp.AudioEvent;
+import be.tarsos.dsp.io.jvm.AudioDispatcherFactory;
+import be.tarsos.dsp.pitch.PitchDetectionHandler;
+import be.tarsos.dsp.pitch.PitchDetectionResult;
+import be.tarsos.dsp.pitch.PitchProcessor;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.ym.mec.biz.dal.dto.MusicPitchDetailDto;
+import com.ym.mec.biz.dal.dto.SoundCheckInfoDto;
+import com.ym.mec.biz.dal.dto.WebSocketInfo;
+import com.ym.mec.biz.dal.enums.WebsocketTypeEnum;
+import com.ym.mec.biz.handler.WebSocketHandler;
+import com.ym.mec.biz.service.SoundSocketService;
+import com.ym.mec.biz.service.WebSocketEventHandler;
+import com.ym.mec.common.exception.BizException;
+import org.springframework.stereotype.Service;
+import org.springframework.web.socket.BinaryMessage;
+import org.springframework.web.socket.TextMessage;
+import org.springframework.web.socket.WebSocketSession;
+
+import javax.sound.sampled.UnsupportedAudioFileException;
+import java.io.File;
+import java.io.IOException;
+import java.util.Map;
+import java.util.Objects;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/8/19 0019
+ */
+@Service
+public class SoundCheckHandler implements WebSocketEventHandler {
+
+    private static final double COMPARE_FREQUENCY = 442;
+
+    /** 校音数据 */
+    private Map<String, Integer> userSoundCheckInfo = new ConcurrentHashMap<>();
+
+    public SoundCheckHandler() {
+        WebSocketHandler.regist(WebsocketTypeEnum.SOUND_CHECK, this);
+    }
+
+    @Override
+    public void afterConnectionEstablished(WebSocketSession session, String phone) {
+
+    }
+
+    @Override
+    public void receiveTextMessage(WebSocketSession session, String phone, TextMessage message) {
+        userSoundCheckInfo.put(phone, 0);
+    }
+
+    @Override
+    public void receiveBinaryMessage(WebSocketSession session, String phone, BinaryMessage message) {
+        if(!userSoundCheckInfo.containsKey(phone)){
+            return;
+        }
+        try {
+            AudioDispatcher dispatcher = AudioDispatcherFactory.fromByteArray(message.getPayload().array(), SoundCompareHandler.soundCompareConfig.audioFormat, SoundCompareHandler.soundCompareConfig.simpleSize, SoundCompareHandler.soundCompareConfig.overlap);
+            dispatcher.addAudioProcessor(new PitchProcessor(SoundCompareHandler.soundCompareConfig.algo, SoundCompareHandler.soundCompareConfig.simpleRate, SoundCompareHandler.soundCompareConfig.simpleSize, (pitchDetectionResult, audioEvent) -> {
+
+            }));
+            dispatcher.run();
+        } catch (UnsupportedAudioFileException e) {
+            throw new BizException("{}校音异常:{}", phone, e);
+        }
+    }
+
+    @Override
+    public void afterConnectionClosed(WebSocketSession session, String phone) {
+
+    }
+}

+ 3 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SoundCompareHandler.java

@@ -13,6 +13,7 @@ import com.ym.mec.biz.dal.dto.SoundCompareHelper;
 import com.ym.mec.biz.dal.dto.WavHeader;
 import com.ym.mec.biz.dal.dto.WavHeader;
 import com.ym.mec.biz.dal.dto.WebSocketInfo;
 import com.ym.mec.biz.dal.dto.WebSocketInfo;
 import com.ym.mec.biz.dal.enums.DeviceTypeEnum;
 import com.ym.mec.biz.dal.enums.DeviceTypeEnum;
+import com.ym.mec.biz.dal.enums.WebsocketTypeEnum;
 import com.ym.mec.biz.handler.WebSocketHandler;
 import com.ym.mec.biz.handler.WebSocketHandler;
 import com.ym.mec.biz.service.SoundSocketService;
 import com.ym.mec.biz.service.SoundSocketService;
 import com.ym.mec.biz.service.SysMusicCompareRecordService;
 import com.ym.mec.biz.service.SysMusicCompareRecordService;
@@ -74,7 +75,7 @@ public class SoundCompareHandler implements WebSocketEventHandler {
     private SysMusicScoreAccompanimentDao sysMusicScoreAccompanimentDao;
     private SysMusicScoreAccompanimentDao sysMusicScoreAccompanimentDao;
 
 
     public SoundCompareHandler() {
     public SoundCompareHandler() {
-        WebSocketHandler.regist("SOUND_COMPARE", this);
+        WebSocketHandler.regist(WebsocketTypeEnum.SOUND_COMPARE, this);
         File soundDir = new File(tmpDir);
         File soundDir = new File(tmpDir);
         if(!soundDir.exists()){
         if(!soundDir.exists()){
             soundDir.mkdir();
             soundDir.mkdir();
@@ -269,7 +270,7 @@ public class SoundCompareHandler implements WebSocketEventHandler {
         sysMusicCompareRecordService.saveMusicCompareData(phone, userSoundInfoMap.get(phone));
         sysMusicCompareRecordService.saveMusicCompareData(phone, userSoundInfoMap.get(phone));
 
 
         if(Objects.nonNull(userSoundInfoMap.get(phone).getFile())){
         if(Objects.nonNull(userSoundInfoMap.get(phone).getFile())){
-            userSoundInfoMap.get(phone).getFile().deleteOnExit();
+            userSoundInfoMap.get(phone).getFile().delete();
         }
         }
 
 
         userSoundInfoMap.remove(phone);
         userSoundInfoMap.remove(phone);

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

@@ -598,11 +598,11 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
         if(!CollectionUtils.isEmpty(organsVipStudentNumMapList)){
         if(!CollectionUtils.isEmpty(organsVipStudentNumMapList)){
             organsVipStudentNumMap = MapUtil.convertIntegerMap(organsVipStudentNumMapList);
             organsVipStudentNumMap = MapUtil.convertIntegerMap(organsVipStudentNumMapList);
         }
         }
-        List<Map<Integer, Integer>> organsEVipStudentNumMapList = studentDao.getOrgansEVipStudentNum(organIds);
-        Map<String, Long> organsEVipStudentNumMap = new HashMap<>();
-        if(!CollectionUtils.isEmpty(organsEVipStudentNumMapList)){
-            organsEVipStudentNumMap = MapUtil.convertIntegerMap(organsEVipStudentNumMapList);
-        }
+//        List<Map<Integer, Integer>> organsEVipStudentNumMapList = studentDao.getOrgansEVipStudentNum(organIds);
+//        Map<String, Long> organsEVipStudentNumMap = new HashMap<>();
+//        if(!CollectionUtils.isEmpty(organsEVipStudentNumMapList)){
+//            organsEVipStudentNumMap = MapUtil.convertIntegerMap(organsEVipStudentNumMapList);
+//        }
         List<Map<Integer, Integer>> organCloudStudyStudentNumMapList = studentDao.getOrganCloudStudyStudentNum(organIds);
         List<Map<Integer, Integer>> organCloudStudyStudentNumMapList = studentDao.getOrganCloudStudyStudentNum(organIds);
         Map<String, Long> organCloudStudyStudentNumMap = new HashMap<>();
         Map<String, Long> organCloudStudyStudentNumMap = new HashMap<>();
         if(!CollectionUtils.isEmpty(organCloudStudyStudentNumMapList)){
         if(!CollectionUtils.isEmpty(organCloudStudyStudentNumMapList)){
@@ -631,9 +631,9 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
             if(organsVipStudentNumMap.containsKey(organ.getId().toString())){
             if(organsVipStudentNumMap.containsKey(organ.getId().toString())){
                 organStudentVipData.setVipStudentNum(organsVipStudentNumMap.get(organ.getId().toString()).intValue());
                 organStudentVipData.setVipStudentNum(organsVipStudentNumMap.get(organ.getId().toString()).intValue());
             }
             }
-            if(organsEVipStudentNumMap.containsKey(organ.getId().toString())){
-                organStudentVipData.seteVipStudentNum(organsEVipStudentNumMap.get(organ.getId().toString()).intValue());
-            }
+//            if(organsEVipStudentNumMap.containsKey(organ.getId().toString())){
+//                organStudentVipData.seteVipStudentNum(organsEVipStudentNumMap.get(organ.getId().toString()).intValue());
+//            }
             if(organCloudStudyStudentNumMap.containsKey(organ.getId().toString())){
             if(organCloudStudyStudentNumMap.containsKey(organ.getId().toString())){
                 organStudentVipData.setCloudStudyUseStudentNum(organCloudStudyStudentNumMap.get(organ.getId().toString()).intValue());
                 organStudentVipData.setCloudStudyUseStudentNum(organCloudStudyStudentNumMap.get(organ.getId().toString()).intValue());
             }
             }

+ 26 - 0
mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml

@@ -149,6 +149,32 @@
 		GROUP BY month_,data_type_
 		GROUP BY month_,data_type_
 	</select>
 	</select>
 
 
+	<select id="getAllIndexBaseData" resultMap="IndexBaseMonthData">
+		SELECT
+			*
+		FROM index_base_month_data
+		<where>
+			<if test="dataTypes!=null and dataTypes.size()>0">
+				AND data_type_ IN
+				<foreach collection="dataTypes" item="dataType" open="(" close=")" separator=",">
+					#{dataType}
+				</foreach>
+			</if>
+			<if test="organIds!=null and organIds.size()>0">
+				AND organ_id_ IN
+				<foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+					#{organId}
+				</foreach>
+			</if>
+			<if test="startMonth!=null and startMonth!=''">
+				AND month_&gt;=#{startMonth}
+			</if>
+			<if test="endMonth!=null and endMonth!=''">
+				AND month_&lt;=#{endMonth}
+			</if>
+		</where>
+	</select>
+
 	<select id="getVipCourseDataList" resultMap="IndexBaseMonthData">
 	<select id="getVipCourseDataList" resultMap="IndexBaseMonthData">
 		SELECT
 		SELECT
 			month_,
 			month_,

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

@@ -1047,7 +1047,7 @@
                  LEFT JOIN cloud_teacher_order cto ON stu.user_id_=cto.student_id_
                  LEFT JOIN cloud_teacher_order cto ON stu.user_id_=cto.student_id_
                  LEFT JOIN sys_user su ON su.id_=stu.user_id_
                  LEFT JOIN sys_user su ON su.id_=stu.user_id_
         WHERE su.del_flag_=0 AND stu.experience_member_rank_setting_id_ IS NOT NULL
         WHERE su.del_flag_=0 AND stu.experience_member_rank_setting_id_ IS NOT NULL
-        AND NOT IN (SELECT DISTINCT student_id_ FROM cloud_teacher_order WHERE status_ IN (1,2))
+        AND stu.user_id_ NOT IN (SELECT DISTINCT student_id_ FROM cloud_teacher_order WHERE status_ IN (1,2))
         <if test="organIds!=null and organIds.size()>0">
         <if test="organIds!=null and organIds.size()>0">
             AND su.organ_id_ IN
             AND su.organ_id_ IN
             <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
             <foreach collection="organIds" item="organId" open="(" close=")" separator=",">

+ 10 - 9
mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

@@ -3125,7 +3125,7 @@ public class ExportController extends BaseController {
         try {
         try {
             String[] header = {"老师编号", "老师姓名", "学员总数", "付费学员数量",
             String[] header = {"老师编号", "老师姓名", "学员总数", "付费学员数量",
                     "试用会员", "会员占比"};
                     "试用会员", "会员占比"};
-            String[] body = {"teacherId", "teacherName", "totalStudentNum", "vipStudentNum", "eVipStudentNum", "vipStudentDuty"};
+            String[] body = {"teacherId", "teacherName", "totalStudentNum", "vipStudentNum", "eVipStudentNum", "vipStudentDuty+\"%\""};
             HSSFWorkbook workbook = POIUtil.exportExcel(header, body, rows);
             HSSFWorkbook workbook = POIUtil.exportExcel(header, body, rows);
             response.setContentType("application/octet-stream");
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=employeeInfo-" + DateUtil.getDate(new Date()) + ".xls");
             response.setHeader("Content-Disposition", "attachment;filename=employeeInfo-" + DateUtil.getDate(new Date()) + ".xls");
@@ -3164,8 +3164,9 @@ public class ExportController extends BaseController {
         }else if(StringUtils.isNotBlank(employee.getOrganIdList())){
         }else if(StringUtils.isNotBlank(employee.getOrganIdList())){
             organIds = Arrays.stream(employee.getOrganIdList().split(",")).map(id->Integer.valueOf(id)).collect(Collectors.toList());
             organIds = Arrays.stream(employee.getOrganIdList().split(",")).map(id->Integer.valueOf(id)).collect(Collectors.toList());
         }
         }
+        List<Integer> ids = organIds.stream().filter(id -> !OrganizationService.EXCLUDE_ORGAN_IDS.contains(id)).collect(Collectors.toList());
 
 
-        List<EduOrganStudentDataDto> rows = studentService.queryOrganStudentOverView(organIds, queryInfo).getRows();
+        List<EduOrganStudentDataDto> rows = studentService.queryOrganStudentOverView(ids, queryInfo).getRows();
         if (CollectionUtils.isEmpty(rows)) {
         if (CollectionUtils.isEmpty(rows)) {
             response.setStatus(200);
             response.setStatus(200);
             response.setContentType("Content-Type: application/json;charset=UTF-8");
             response.setContentType("Content-Type: application/json;charset=UTF-8");
@@ -3175,9 +3176,8 @@ public class ExportController extends BaseController {
         }
         }
         OutputStream outputStream = response.getOutputStream();
         OutputStream outputStream = response.getOutputStream();
         try {
         try {
-            String[] header = {"分部", "老师姓名", "学员总数", "付费学员数量",
-                    "试用会员", "会员占比"};
-            String[] body = {"teacherId", "teacherName", "totalStudentNum", "vipStudentNum", "eVipStudentNum", "vipStudentDuty"};
+            String[] header = {"分部", "学员总数", "付费会员数量","会员占比"};
+            String[] body = {"organName", "totalStudentNum", "vipStudentNum", "vipStudentDuty+\"%\""};
             HSSFWorkbook workbook = POIUtil.exportExcel(header, body, rows);
             HSSFWorkbook workbook = POIUtil.exportExcel(header, body, rows);
             response.setContentType("application/octet-stream");
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=employeeInfo-" + DateUtil.getDate(new Date()) + ".xls");
             response.setHeader("Content-Disposition", "attachment;filename=employeeInfo-" + DateUtil.getDate(new Date()) + ".xls");
@@ -3216,8 +3216,9 @@ public class ExportController extends BaseController {
         }else if(StringUtils.isNotBlank(employee.getOrganIdList())){
         }else if(StringUtils.isNotBlank(employee.getOrganIdList())){
             organIds = Arrays.stream(employee.getOrganIdList().split(",")).map(id->Integer.valueOf(id)).collect(Collectors.toList());
             organIds = Arrays.stream(employee.getOrganIdList().split(",")).map(id->Integer.valueOf(id)).collect(Collectors.toList());
         }
         }
+        List<Integer> ids = organIds.stream().filter(id -> !OrganizationService.EXCLUDE_ORGAN_IDS.contains(id)).collect(Collectors.toList());
 
 
-        List<EduOrganStudentDataDto> rows = indexService.organStudentOverView(organIds, queryInfo).getRows();
+        List<EduOrganStudentDataDto> rows = indexService.organStudentOverView(ids, queryInfo).getRows();
         if (CollectionUtils.isEmpty(rows)) {
         if (CollectionUtils.isEmpty(rows)) {
             response.setStatus(200);
             response.setStatus(200);
             response.setContentType("Content-Type: application/json;charset=UTF-8");
             response.setContentType("Content-Type: application/json;charset=UTF-8");
@@ -3227,9 +3228,9 @@ public class ExportController extends BaseController {
         }
         }
         OutputStream outputStream = response.getOutputStream();
         OutputStream outputStream = response.getOutputStream();
         try {
         try {
-            String[] header = {"分部", "老师姓名", "学员总数", "付费学员数量",
-                    "试用会员", "会员占比"};
-            String[] body = {"teacherId", "teacherName", "totalStudentNum", "vipStudentNum", "eVipStudentNum", "vipStudentDuty"};
+            String[] header = {"排名", "分部", "学员总数", "活跃人数", "活跃人数占比", "使用人数", "使用人数占比", "付费会员数量","付费会员占比", "新增付费会员"};
+            String[] body = {"index", "organName", "totalStudentNum", "cloudStudyLivelyStudentNum", "cloudStudyLivelyStudentDuty+\"%\"",
+                    "cloudStudyUseStudentNum", "cloudStudyUseStudentDuty+\"%\"", "vipStudentNum", "vipStudentDuty+\"%\"", "newCloudStudyStudentNum"};
             HSSFWorkbook workbook = POIUtil.exportExcel(header, body, rows);
             HSSFWorkbook workbook = POIUtil.exportExcel(header, body, rows);
             response.setContentType("application/octet-stream");
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=employeeInfo-" + DateUtil.getDate(new Date()) + ".xls");
             response.setHeader("Content-Disposition", "attachment;filename=employeeInfo-" + DateUtil.getDate(new Date()) + ".xls");

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

@@ -10,6 +10,7 @@ import com.ym.mec.biz.dal.page.IndexDataQueryInfo;
 import com.ym.mec.biz.dal.page.OrganCloudStudyStudentDataQueryInfo;
 import com.ym.mec.biz.dal.page.OrganCloudStudyStudentDataQueryInfo;
 import com.ym.mec.biz.service.EmployeeService;
 import com.ym.mec.biz.service.EmployeeService;
 import com.ym.mec.biz.service.IndexBaseMonthDataService;
 import com.ym.mec.biz.service.IndexBaseMonthDataService;
+import com.ym.mec.biz.service.OrganizationService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.PageInfo;
@@ -225,7 +226,7 @@ public class IndexController extends BaseController {
 			return failed("用户信息获取失败");
 			return failed("用户信息获取失败");
 		}
 		}
 		Employee employee = employeeService.get(sysUser.getId());
 		Employee employee = employeeService.get(sysUser.getId());
-		List<Integer> organIds = Arrays.stream(employee.getOrganIdList().split(",")).map(id -> Integer.valueOf(id)).collect(Collectors.toList());
+		List<Integer> organIds = Arrays.stream(employee.getOrganIdList().split(",")).map(id -> Integer.valueOf(id)).filter(id -> !OrganizationService.EXCLUDE_ORGAN_IDS.contains(id)).collect(Collectors.toList());
 		return succeed(indexService.organStudentOverView(organIds, queryInfo));
 		return succeed(indexService.organStudentOverView(organIds, queryInfo));
 	}
 	}
 }
 }