刘俊驰 8 mesi fa
parent
commit
0a1f537bf8

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseHomeworkWrapper.java

@@ -218,6 +218,10 @@ public class CourseHomeworkWrapper {
         @ApiModelProperty("训练说明")
         private String memo;
 
+
+        @ApiModelProperty(value = "文件过期天数")
+        private Integer fileExpireDay;
+
         @ApiModelProperty("练习内容")
         private List<StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail> trainingDetailList;
 

+ 1 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/LessonExaminationDetailDto.java

@@ -1,7 +1,6 @@
 package com.ym.mec.biz.dal.dto;
 
 
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.ym.mec.biz.dal.enums.HardLevelEnum;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -33,7 +32,7 @@ public class LessonExaminationDetailDto{
     private Integer end;
 
     @ApiModelProperty("作业类型,MUSIC_SCORE:曲目评测,DESCRIPTION:描述")
-    private String type;
+    private String homeworkType;
 
     @ApiModelProperty("作业描述")
     private String desc;

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/LessonExaminationResultDto.java

@@ -61,5 +61,8 @@ public class LessonExaminationResultDto{
 
     @ApiModelProperty("作业分组")
     private Integer group;
+
+    @ApiModelProperty(value = "文件过期天数")
+    private Integer fileExpireDay;
 }
 

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/LessonExaminationSubmitDto.java

@@ -16,5 +16,11 @@ public class LessonExaminationSubmitDto {
 
     @ApiModelProperty(value = "测评分数")
     private Integer score;
+
+    @ApiModelProperty(value = "评测记录ID")
+    private Long recordId;
+
+    @ApiModelProperty("上传文件JSON")
+    private CourseHomeworkWrapper.FileJson fileJson;
 }
 

+ 4 - 5
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentLessonExaminationDetailDto.java

@@ -64,16 +64,15 @@ public class StudentLessonExaminationDetailDto {
     private Integer group;
 
     @ApiModelProperty("作业类型,MUSIC_SCORE:曲目评测,DESCRIPTION:描述")
-    private String type;
+    private String homeworkType;
 
 
     @ApiModelProperty("作业描述")
     private String desc;
 
-    @ApiModelProperty("上传文件JSON")
-    private String fileJson;
+    private String fileJsons;
 
-    @ApiModelProperty("上传作业文件失效删除标记")
-    private Boolean fileDelFlag;
+    @ApiModelProperty("上传文件JSON")
+    private CourseHomeworkWrapper.FileJson fileJson;
 }
 

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentLessonTrainingDetailWrapper.java

@@ -11,6 +11,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import javax.validation.constraints.NotNull;
+import java.io.File;
 import java.util.List;
 
 /**
@@ -135,7 +136,7 @@ public class StudentLessonTrainingDetailWrapper {
         private String desc;
 
         @ApiModelProperty("上传文件JSON")
-        private String fileJson;
+        private CourseHomeworkWrapper.FileJson fileJson;
 
         @ApiModelProperty("上传作业文件失效删除标记")
         private Boolean fileDelFlag;

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentLessonExaminationDetail.java

@@ -95,8 +95,8 @@ public class StudentLessonExaminationDetail implements Serializable {
     private Date updateTime;
 
     @ApiModelProperty("作业类型,MUSIC_SCORE:曲目评测,DESCRIPTION:描述")
-    @TableField(value = "type_")
-    private String type;
+    @TableField(value = "homework_type_")
+    private String homeworkType;
 
 
     @ApiModelProperty("评测记录ID")

+ 18 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseHomeworkServiceImpl.java

@@ -274,6 +274,15 @@ public class CourseHomeworkServiceImpl extends BaseServiceImpl<Long, CourseHomew
         List<CourseHomeworkWrapper.StudentLessonTrainingStat> trainingStatList =  studentLessonTrainingDetailService
                 .getLessonTrainingStat(courseHomeworkList.getCourseHomeworkId(), ELessonTrainingType.HOMEWORK);
 
+        boolean expireFlag = false;
+        if (courseHomeworkList.getFileExpireDay() != null && courseHomeworkList.getFileExpireDay() >0) {
+            expireFlag = DateUtil.addDays(courseHomeworkList.getExpiryDate(), courseHomeworkList.getFileExpireDay()).before(new Date());
+        }
+        for (StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail studentLessonTrainingDetail : baseLessonTrainingDetail) {
+            if (studentLessonTrainingDetail.getFileJson() !=null) {
+                studentLessonTrainingDetail.getFileJson().setExpireFlag(expireFlag);
+            }
+        }
 
 
         courseHomeworkList.setTrainingGroupList(trainingStatList);
@@ -315,6 +324,15 @@ public class CourseHomeworkServiceImpl extends BaseServiceImpl<Long, CourseHomew
         List<CourseHomeworkWrapper.StudentLessonTrainingStat> practiceGroupList = studentLessonTrainingDetailService
                 .getLessonTrainingStat(courseHomeworkList.getCourseHomeworkId(),courseHomeworkList.getType());
 
+        boolean expireFlag = false;
+        if (courseHomeworkList.getFileExpireDay() != null && courseHomeworkList.getFileExpireDay() >0) {
+            expireFlag = DateUtil.addDays(courseHomeworkList.getExpiryDate(), courseHomeworkList.getFileExpireDay()).before(new Date());
+        }
+        for (StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail studentLessonTrainingDetail : baseLessonTrainingDetail) {
+            if (studentLessonTrainingDetail.getFileJson() !=null) {
+                studentLessonTrainingDetail.getFileJson().setExpireFlag(expireFlag);
+            }
+        }
 
         courseHomeworkList.setTrainingGroupList(practiceGroupList);
         courseHomeworkList.setTrainingDetailList(baseLessonTrainingDetail);

+ 13 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkServiceImpl.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.*;
@@ -931,15 +932,21 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
         if (studentLessonTrainingDetail == null) {
             throw new BizException("练习记录不存在");
         }
-        // 设置个人作业练习详情记录
-        studentLessonTrainingDetail.setTrainingTimes(studentLessonTrainingDetail.getTrainingTimes() +1);
+        if (record.getFileJson() == null) {
+            // 设置个人作业练习详情记录
+            studentLessonTrainingDetail.setTrainingTimes(studentLessonTrainingDetail.getTrainingTimes() + 1);
 
-        if (studentLessonTrainingDetail.getTrainingTimes() >= studentLessonTrainingDetail.getTimes()) {
-            studentLessonTrainingDetail.setTrainingStatus(StandardEnum.STANDARD);
-        } else {
-            studentLessonTrainingDetail.setTrainingStatus(StandardEnum.NOT_STANDARD);
+            if (studentLessonTrainingDetail.getTrainingTimes() >= studentLessonTrainingDetail.getTimes()) {
+                studentLessonTrainingDetail.setTrainingStatus(StandardEnum.STANDARD);
+            } else {
+                studentLessonTrainingDetail.setTrainingStatus(StandardEnum.NOT_STANDARD);
 
+            }
+        } else if (studentLessonTrainingDetail.getTrainingStatus() == StandardEnum.NOT_START) {
+            studentLessonTrainingDetail.setTrainingStatus(StandardEnum.NOT_STANDARD);
         }
+        record.getFileJson().setExpireFlag(false);
+        studentLessonTrainingDetail.setFileJson(JSON.toJSONString(record.getFileJson()));
         studentLessonTrainingDetail.setUpdateTime(new Date());
         studentLessonTrainingDetailService.updateById(studentLessonTrainingDetail);
 

+ 39 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentLessonExaminationDetailServiceImpl.java

@@ -1,14 +1,20 @@
 package com.ym.mec.biz.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ym.mec.biz.dal.dao.StudentLessonExaminationDetailDao;
+import com.ym.mec.biz.dal.dto.CourseHomeworkWrapper;
 import com.ym.mec.biz.dal.dto.LessonExaminationDetailDto;
 import com.ym.mec.biz.dal.dto.StudentLessonExaminationDetailDto;
 import com.ym.mec.biz.dal.dto.StudentLessonExaminationSaveDto;
+import com.ym.mec.biz.dal.entity.LessonExamination;
 import com.ym.mec.biz.dal.entity.StudentLessonExaminationDetail;
 import com.ym.mec.biz.dal.page.StudentLessonExaminationQueryDto;
+import com.ym.mec.biz.service.LessonExaminationService;
 import com.ym.mec.biz.service.StudentLessonExaminationDetailService;
 import com.ym.mec.common.exception.BizException;
+import com.ym.mec.util.date.DateUtil;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import org.slf4j.Logger;
@@ -18,6 +24,7 @@ import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -31,6 +38,9 @@ public class StudentLessonExaminationDetailServiceImpl extends ServiceImpl<Stude
 
     private final static Logger log = LoggerFactory.getLogger(StudentLessonExaminationDetailServiceImpl.class);
 
+    @Autowired
+    private LessonExaminationService lessonExaminationService;
+
     @Override
     public StudentLessonExaminationDetailDao getDao() {
         return this.baseMapper;
@@ -60,7 +70,7 @@ public class StudentLessonExaminationDetailServiceImpl extends ServiceImpl<Stude
                     studentLessonExaminationDetail.setHeardLevel(vo.getHeardLevel());
                     studentLessonExaminationDetail.setStandardScore(vo.getScore());
                     studentLessonExaminationDetail.setStart(vo.getStart());
-                    studentLessonExaminationDetail.setType(vo.getType());
+                    studentLessonExaminationDetail.setHomeworkType(vo.getHomeworkType());
                     studentLessonExaminationDetail.setDesc(vo.getDesc());
                     studentLessonExaminationDetail.setEnd(vo.getEnd());
                     studentLessonExaminationDetail.setGroup(dto.getGroup());
@@ -79,7 +89,34 @@ public class StudentLessonExaminationDetailServiceImpl extends ServiceImpl<Stude
 
     @Override
     public List<StudentLessonExaminationDetailDto> queryAll(StudentLessonExaminationQueryDto query) {
-        return baseMapper.queryAll(query);
+
+        List<StudentLessonExaminationDetailDto> studentLessonExaminationDetailDtos = baseMapper.queryAll(query);
+        if (CollectionUtils.isEmpty(studentLessonExaminationDetailDtos)) {
+            return new ArrayList<>();
+        }
+        for (StudentLessonExaminationDetailDto studentLessonExaminationDetailDto : studentLessonExaminationDetailDtos) {
+            if (StringUtils.isEmpty(studentLessonExaminationDetailDto.getFileJsons())) {
+                continue;
+            }
+            studentLessonExaminationDetailDto.setFileJson(JSON.parseObject(studentLessonExaminationDetailDto.getFileJsons(), CourseHomeworkWrapper.FileJson.class));
+
+            studentLessonExaminationDetailDto.setFileJsons("");
+        }
+        if (query.getLessonExaminationId() != null) {
+            LessonExamination lessonExamination = lessonExaminationService.getById(query.getLessonExaminationId());
+            if (lessonExamination != null) {
+                boolean expireFlag = false;
+                if (lessonExamination.getFileExpireDay() != null && lessonExamination.getFileExpireDay() >0) {
+                    expireFlag = DateUtil.addDays(lessonExamination.getExpireDate(), lessonExamination.getFileExpireDay()).before(new Date());
+                }
+                for (StudentLessonExaminationDetailDto dto : studentLessonExaminationDetailDtos) {
+                    if (dto.getFileJson() != null) {
+                        dto.getFileJson().setExpireFlag(expireFlag);
+                    }
+                }
+            }
+        }
+        return studentLessonExaminationDetailDtos;
     }
 
     @Override

+ 35 - 18
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentLessonExaminationServiceImpl.java

@@ -107,10 +107,11 @@ public class StudentLessonExaminationServiceImpl extends ServiceImpl<StudentLess
             dataList = baseMapper.queryPage(params);
             if(queryInfo.getLessonExaminationId() != null){
                 Map<Integer, StudentLessonExaminationDetail> examinationIdMap = new HashMap<>();
-                if(queryInfo.getLessonExaminationId() != null){
+                LessonExamination lessonExamination = lessonExaminationService.getById(queryInfo.getLessonExaminationId());
+                if(queryInfo.getLessonExaminationId() != null && lessonExamination !=null){
                     List<StudentLessonExaminationDetail> list = studentLessonExaminationDetailService.lambdaQuery().
                             eq(StudentLessonExaminationDetail::getLessonExaminationId, queryInfo.getLessonExaminationId()).list();
-                    String musicScoreIds = list.stream().filter(o-> "MUSIC_SCORE".equals(o.getType())).map(e->e.getMusicScoreId().toString()).collect(Collectors.joining(","));
+                    String musicScoreIds = list.stream().filter(o-> "MUSIC_SCORE".equals(o.getHomeworkType())).map(e->e.getMusicScoreId().toString()).collect(Collectors.joining(","));
                     Map<Integer, SysMusicScore> musicScoreMap = new HashMap<>();
                     if (StringUtils.isNotEmpty(musicScoreIds)) {
                         List<SysMusicScore> musicScores = sysMusicScoreDao.findByIds(musicScoreIds);
@@ -120,16 +121,23 @@ public class StudentLessonExaminationServiceImpl extends ServiceImpl<StudentLess
                     }
                     examinationIdMap = list.stream().collect(Collectors.groupingBy(StudentLessonExaminationDetail::getUserId,
                             Collectors.collectingAndThen(Collectors.toList(), e -> e.get(0))));
+                    boolean expireFlag = false;
+                    if (lessonExamination.getFileExpireDay() != null && lessonExamination.getFileExpireDay() >0) {
+                        expireFlag = DateUtil.addDays(lessonExamination.getExpireDate(), lessonExamination.getFileExpireDay()).before(new Date());
+                    }
                     for (StudentLessonExaminationDto dto : dataList) {
                         StudentLessonExaminationDetail detail = examinationIdMap.get(dto.getUserId());
                         if (detail != null ) {
                             StudentLessonExaminationDetailDto detailDto = JSON.parseObject(JSON.toJSONString(detail), StudentLessonExaminationDetailDto.class);
-                            if(detail.getMusicScoreId() != null && "MUSIC_SCORE".equals(detail.getType())){
+                            if(detail.getMusicScoreId() != null && "MUSIC_SCORE".equals(detail.getHomeworkType())){
                                 SysMusicScore musicScore = musicScoreMap.get(detail.getMusicScoreId().intValue());
                                 if (musicScore != null){
                                     detailDto.setMusicScoreName(musicScore.getName());
                                 }
                             }
+                            if (detailDto.getFileJson() != null) {
+                                detailDto.getFileJson().setExpireFlag(expireFlag);
+                            }
                             dto.setStudentLessonExaminationDetail(detailDto);
                             dto.setMemo(detailDto.getMemo());
                         }
@@ -172,27 +180,36 @@ public class StudentLessonExaminationServiceImpl extends ServiceImpl<StudentLess
         studentLessonExamination.setTrainingTime(now);
         this.updateById(studentLessonExamination);
         //是否达标
-        if(submitDto.getScore() >= detail.getStandardScore()){
-            detail.setStandardFlag(true);
-        }
-        //训练分数是否比上一次高
-        Boolean flag = submitDto.getScore() > detail.getTrainingScore();
-        if(flag){
-            detail.setTrainingScore(submitDto.getScore());
-            //计算分数
-            Double actualScore = detail.getTrainingScore() * 1D / detail.getStandardScore() * detail.getAvgScore();
-            //更新分数
-            detail.setActualAvgScore(actualScore.intValue() > detail.getAvgScore() ? detail.getAvgScore():actualScore.intValue());
+        if (submitDto.getScore() != null) {
+            if (submitDto.getScore() >= detail.getStandardScore()) {
+                detail.setStandardFlag(true);
+            }
+            //训练分数是否比上一次高
+            Boolean flag = submitDto.getScore() > detail.getTrainingScore();
+            if (flag) {
+                detail.setTrainingScore(submitDto.getScore());
+
+                detail.setRecordId(submitDto.getRecordId());
+                //计算分数
+                Double actualScore = detail.getTrainingScore() * 1D / detail.getStandardScore() * detail.getAvgScore();
+                //更新分数
+                detail.setActualAvgScore(actualScore.intValue() > detail.getAvgScore() ? detail.getAvgScore() : actualScore.intValue());
+            }
+            //更新总分
+            if(flag){
+                baseMapper.updateTrainingScore(lessonExaminationId,userId);
+            }
         }
         //更新详情
         detail.setTrainingTime(now);
+        if (submitDto.getFileJson() != null) {
+            submitDto.getFileJson().setExpireFlag(false);
+            detail.setFileJson(JSON.toJSONString(submitDto.getFileJson()));
+        }
         studentLessonExaminationDetailService.updateById(detail);
         //更新达标人数
         lessonExaminationDao.updateStandardNum(lessonExaminationId);
-        //更新总分
-        if(flag){
-            baseMapper.updateTrainingScore(lessonExaminationId,userId);
-        }
+
         //更新服务指标
         studentExtracurricularExercisesSituationService.updateLastSubmitTime(lessonExamination,studentLessonExamination);
     }

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

@@ -4420,7 +4420,8 @@
         ch.expiry_date_ as expiryDate,
         ch.completed_num_ as finishNum,
         cs.name_ as courseScheduleName,
-        ch.expect_num_ as studentNum
+        ch.expect_num_ as studentNum,
+        ch.file_expire_day_ as fileExpireDay
         from course_schedule cs
         left join course_homework ch on cs.id_ = ch.course_schedule_id_
         <include refid="selectPage"/>

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

@@ -427,7 +427,8 @@
         create_time_ as assignTime,
         expire_date_ as expiryDate,
         student_id_list_ as studentIdList,
-        teacher_id_ as teacherId
+        teacher_id_ as teacherId,
+        file_expire_day_ as fileExpireDay
         from extracurricular_exercises
         <where>
 

+ 7 - 5
mec-biz/src/main/resources/config/mybatis/StudentLessonExaminationDetailMapper.xml

@@ -20,7 +20,7 @@
         <result column="group_" property="group"/>
         <result column="create_time_" property="createTime"/>
         <result column="update_time_" property="updateTime"/>
-        <result column="type_" property="type"/>
+        <result column="homework_type_" property="homeworkType"/>
         <result column="desc_" property="desc"/>
         <result column="file_json_" property="fileJson"/>
         <result column="file_del_flag_" property="fileDelFlag"/>
@@ -29,18 +29,20 @@
     <insert id="insertBatch" keyColumn="id_" keyProperty="id" useGeneratedKeys="true"
             parameterType="com.ym.mec.biz.dal.entity.StudentLessonExaminationDetail">
         insert into student_lesson_examination_detail(user_id_, lesson_examination_id_, music_score_id_, heard_level_,standard_score_,
-                                                      avg_score_, part_index_,start_,end_,memo_,group_,type_,desc_,file_json_)
+                                                      avg_score_, part_index_,start_,end_,memo_,group_,homework_type_,desc_,file_json_)
         values
         <foreach collection="entities" item="entity" separator=",">
-            (#{entity.userId}, #{entity.lessonExaminationId},#{entity.musicScoreId}, #{entity.heardLevel,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-             #{entity.standardScore}, #{entity.avgScore},#{entity.partIndex},#{entity.start},#{entity.end},#{entity.memo},#{entity.group},#{entity.type},#{entity.desc},#{entity.fileJson})
+            (#{entity.userId}, #{entity.lessonExaminationId},#{entity.musicScoreId},
+            #{entity.heardLevel,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            #{entity.standardScore},
+            #{entity.avgScore},#{entity.partIndex},#{entity.start},#{entity.end},#{entity.memo},#{entity.group},#{entity.homeworkType},#{entity.desc},#{entity.fileJson})
         </foreach>
     </insert>
     <select id="queryAll" resultType="com.ym.mec.biz.dal.dto.StudentLessonExaminationDetailDto">
         select sms.name_ musicScoreName,sled.id_ studentLessonExaminationDetailId, sled.user_id_ userId, sled.lesson_examination_id_ lessonExaminationId, sled.music_score_id_ musicScoreId,
                sled.heard_level_ heardLevel, sled.training_score_ trainingScore,sled.avg_score_ avgScore, sled.actual_avg_score_ actualAvgScore, sled.start_ start, sled.end_ end,
                sled.standard_score_ standardScore, sled.part_index_ partIndex,CASE WHEN sled.training_time_ IS NULL THEN 0 ELSE 1 END trainingFlag,
-               sms.del_flag_ = 0 AND sms.show_flag_ = 1 validFlag,sled.memo_ memo,sled.group_ 'group',sled.type_ type,sled.desc_ 'desc',sled.file_json_ fileJson,sled.file_del_flag_ fileDelFlag
+               sms.del_flag_ = 0 AND sms.show_flag_ = 1 validFlag,sled.memo_ memo,sled.group_ 'group',sled.homework_type_ homeworkType,sled.desc_ 'desc',sled.file_json_ fileJsons
         from student_lesson_examination_detail sled
         left join sys_music_score sms ON sms.id_ = sled.music_score_id_
         <where>