Browse Source

Merge remote-tracking branch 'origin/master'

zouxuan 4 years ago
parent
commit
f20176a3a7

+ 13 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherServeDto.java

@@ -3,6 +3,7 @@ package com.ym.mec.biz.dal.dto;
 import com.ym.mec.biz.dal.enums.JobNatureEnum;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -51,6 +52,18 @@ public class TeacherServeDto {
     /** 及时训练评价次数 */
     private Integer exercisesMessageTimelyNum;
 
+    @ApiModelProperty(value = "提交率")
+    private BigDecimal submitRate;
+
+
+    public BigDecimal getSubmitRate() {
+        return submitRate;
+    }
+
+    public void setSubmitRate(BigDecimal submitRate) {
+        this.submitRate = submitRate;
+    }
+
     public Integer getExpectExercisesNum() {
         return expectExercisesNum;
     }

+ 24 - 12
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SoundServiceImpl.java

@@ -6,6 +6,7 @@ import be.tarsos.dsp.AudioProcessor;
 import be.tarsos.dsp.SilenceDetector;
 import be.tarsos.dsp.beatroot.BeatRootOnsetEventHandler;
 import be.tarsos.dsp.io.PipedAudioStream;
+import be.tarsos.dsp.io.TarsosDSPAudioFormat;
 import be.tarsos.dsp.io.TarsosDSPAudioInputStream;
 import be.tarsos.dsp.io.jvm.AudioDispatcherFactory;
 import be.tarsos.dsp.onsets.ComplexOnsetDetector;
@@ -15,6 +16,7 @@ import com.ym.mec.biz.dal.dao.SysMusicScoreDao;
 import com.ym.mec.biz.dal.entity.SysMusicScore;
 import com.ym.mec.biz.service.SoundService;
 import com.ym.mec.common.exception.BizException;
+import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -24,9 +26,13 @@ import javax.sound.sampled.AudioFileFormat;
 import javax.sound.sampled.AudioFormat;
 import javax.sound.sampled.AudioSystem;
 import javax.sound.sampled.UnsupportedAudioFileException;
+import java.io.File;
+import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.net.URLConnection;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
@@ -53,7 +59,7 @@ public class SoundServiceImpl implements SoundService {
         List<Double> times = new ArrayList<>();
         int size = 256;
         int overlap = 128;
-        AudioDispatcher dispatcher = StringUtils.isBlank(url)?getFromByteArray(bytes, size, overlap):getFromUtl(url, size, overlap);
+        AudioDispatcher dispatcher = StringUtils.isBlank(url)?getFromByteArray(bytes, size, overlap):getFromFile(url, size, overlap);
 
         ComplexOnsetDetector detector = new ComplexOnsetDetector(size);
         BeatRootOnsetEventHandler handler = new BeatRootOnsetEventHandler();
@@ -83,7 +89,7 @@ public class SoundServiceImpl implements SoundService {
         int size = 2048;
         int overlap = 0;
         final SilenceDetector silenceDetecor = new SilenceDetector();
-        AudioDispatcher dispatcher = StringUtils.isBlank(url)?getFromByteArray(bytes, size, overlap):getFromUtl(url, size, overlap);
+        AudioDispatcher dispatcher = StringUtils.isBlank(url)?getFromByteArray(bytes, size, overlap):getFromFile(url, size, overlap);
         dispatcher.addAudioProcessor(silenceDetecor);
         dispatcher.addAudioProcessor(new AudioProcessor() {
             @Override
@@ -106,8 +112,11 @@ public class SoundServiceImpl implements SoundService {
         return dispatcher;
     }
 
-    private AudioDispatcher getFromUtl(String url, int size, int overlap) throws UnsupportedAudioFileException, IOException {
-        AudioDispatcher dispatcher = AudioDispatcherFactory.fromURL(new URL(url), size, overlap);
+    private AudioDispatcher getFromFile(String url, int size, int overlap) throws UnsupportedAudioFileException, IOException {
+        PipedAudioStream file = new PipedAudioStream(url);
+        TarsosDSPAudioInputStream stream = file.getMonoStream(44100,0);
+
+        AudioDispatcher dispatcher = new AudioDispatcher(stream, size, overlap);
         return dispatcher;
     }
 
@@ -119,15 +128,18 @@ public class SoundServiceImpl implements SoundService {
         }
 
         try {
-            AudioFileFormat sourceFile = AudioSystem.getAudioFileFormat(new URL(sysMusicScore.getUrl()));
-            double l_s = sourceFile.getFrameLength()/sourceFile.getFormat().getFrameRate();
-            System.out.printf("源长度:%.2f \n", l_s);
-            AudioFileFormat recordFile = AudioSystem.getAudioFileFormat(record.getInputStream());
-            double r_s = sourceFile.getFrameLength()/sourceFile.getFormat().getFrameRate();
-            System.out.printf("录音长度:%.2f \n", r_s);
+            URL url = new URL(sysMusicScore.getUrl());
+            String filePath = FileUtils.getTempDirectoryPath()+ System.currentTimeMillis() + ".mp3";
+            File f = new File(filePath);
+            FileUtils.copyURLToFile(url, f);
+
+//            AudioSystem.getAudioFileFormat(loadedFile);
+
+            double l_s = 0;
+            double l_r = 0;
 
             //相似度
-            List<Double> pitchs_s = soundPressureLevelExtractor(null, sysMusicScore.getUrl());
+            List<Double> pitchs_s = soundPressureLevelExtractor(null, filePath);
             List<Double> pitchs_r = soundPressureLevelExtractor(record.getBytes(), null);
 
             int maxLength = pitchs_s.size();
@@ -151,7 +163,7 @@ public class SoundServiceImpl implements SoundService {
             System.out.printf("音准:%.2f \r\n", intonation);
 
             //节奏
-            List<Double> times_s = beatExtractor(null, sysMusicScore.getUrl());
+            List<Double> times_s = beatExtractor(null, filePath);
             List<Double> times_r = beatExtractor(record.getBytes(), null);
 
             float sameTimes = 0;

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

@@ -3790,7 +3790,7 @@
                 AND cs.status_ = #{courseStatus, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
             </if>
             <if test="teachIncomeType!=null and teachIncomeType=='SUBSIDY'">
-                AND IF(csts.settlement_time_ IS NULL, s.subsidy_ IS NOT NULL AND s.subsidy_>0, csts.subsidy_ IS NOT NULL AND csts.subsidy_>0)
+                AND csts.subsidy_!=0
             </if>
         </where>
     </sql>
@@ -3801,7 +3801,6 @@
         FROM
             course_schedule cs
             LEFT JOIN course_schedule_teacher_salary csts ON csts.course_schedule_id_ = cs.id_
-            LEFT JOIN school s ON cs.schoole_id_=s.id_
         <include refid="queryTeacherCourseCondition"></include>
         ORDER BY cs.class_date_ DESC,cs.start_class_time_ DESC,cs.id_ DESC
         <include refid="global.limit" />
@@ -3813,7 +3812,6 @@
         FROM
         course_schedule cs
         LEFT JOIN course_schedule_teacher_salary csts ON csts.course_schedule_id_ = cs.id_
-        LEFT JOIN school s ON cs.schoole_id_=s.id_
         <include refid="queryTeacherCourseCondition"></include>
     </select>
 

+ 3 - 0
mec-biz/src/main/resources/config/mybatis/PracticeGroupMapper.xml

@@ -287,6 +287,9 @@
             <if test="type != null and type == 0">
                 AND pg.be_renew_group_id_ IS NOT NULL AND pg.type_='CHARGE'
             </if>
+            <if test="type != null and type == 2">
+                AND pg.type_='FREE'
+            </if>
             <if test="practiceGroupType != null">
                 AND pg.type_=#{practiceGroupType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
             </if>

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

@@ -6,12 +6,14 @@ import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.*;
 import com.ym.mec.biz.service.*;
+import com.ym.mec.common.constant.CommonConstants;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.service.IdGeneratorService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import java.io.IOException;
 import java.io.OutputStream;
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Date;
@@ -2602,8 +2604,16 @@ public class ExportController extends BaseController {
         }
         OutputStream outputStream = response.getOutputStream();
 
+        BigDecimal oneHundred = new BigDecimal(100);
+        BigDecimal zero = new BigDecimal("0.00");
+
         for (TeacherServeDto row : result.getRows()) {
             row.setDateRange(com.ym.mec.util.date.DateUtil.dateToString(row.getMonday(), "yyyy-MM-dd") + '~' + com.ym.mec.util.date.DateUtil.dateToString(row.getSunday(), "yyyy-MM-dd"));
+            if(row.getActualExercisesNum()<=0){
+                row.setSubmitRate(zero);
+            }else{
+                row.setSubmitRate(new BigDecimal(row.getExercisesReplyNum()).divide(new BigDecimal(row.getActualExercisesNum()), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP).multiply(oneHundred));
+            }
         }
 
         try {
@@ -2611,7 +2621,7 @@ public class ExportController extends BaseController {
                     "作业布置", "作业点评", "作业提交率",
                     "提醒时间", "操作人"};
             String[] body = {"organName", "teacherId", "teacherName", "dateRange", "homeworkNum", "exerciseNum",
-                    "expectExercisesNum>actualExercisesNum?'异常':'正常'", "exercisesReplyNum>exercisesMessageNum?'异常':'正常'", "exercisesReplyNum",
+                    "expectExercisesNum>actualExercisesNum?'异常':'正常'", "exercisesReplyNum>exercisesMessageNum?'异常':'正常'", "submitRate",
                     "remindDate", "operatorName"};
             HSSFWorkbook workbook = POIUtil.exportExcel(header, body, result.getRows());
             response.setContentType("application/octet-stream");