Browse Source

删除文件

刘俊驰 5 months ago
parent
commit
db0f8f5b53

+ 8 - 0
mec-application/src/main/java/com/ym/mec/web/controller/TaskController.java

@@ -757,4 +757,12 @@ public class TaskController extends BaseController {
     public void workOverdue(){
         userMusicService.workOverdue();
     }
+
+    /**
+     * 删除过期作业
+     */
+    @GetMapping("/deleteOverdueHomework")
+    public void deleteOverdueHomework(){
+        studentCourseHomeworkService.deleteOverdueHomework();
+    }
 }

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

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ym.mec.biz.dal.dto.StudentLessonExaminationDto;
 import com.ym.mec.biz.dal.dto.StudentLessonExaminationDto1;
 import com.ym.mec.biz.dal.entity.StudentLessonExamination;
+import com.ym.mec.biz.dal.entity.StudentLessonExaminationDetail;
+import com.ym.mec.biz.dal.entity.StudentLessonTrainingDetail;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -38,5 +40,8 @@ public interface StudentLessonExaminationDao extends BaseMapper<StudentLessonExa
     List<Map<Long, String>> getStudentName(@Param("examinationIds") List<Long> examinationIds);
 
     List<StudentLessonExamination> queryEndList(@Param("date") String date);
+
+    List<StudentLessonExaminationDetail> queryExpired();
+
 }
 

+ 4 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentLessonTrainingDetailMapper.java

@@ -4,11 +4,14 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ym.mec.biz.dal.entity.StudentLessonTrainingDetail;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 /**
  * 练习内容
  * 2023-03-31 14:18:47
  */
 @Repository
 public interface StudentLessonTrainingDetailMapper extends BaseMapper<StudentLessonTrainingDetail> {
-	
+
+    List<StudentLessonTrainingDetail> queryExpired();
 }

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

@@ -158,4 +158,9 @@ public interface StudentCourseHomeworkService extends BaseService<Long, StudentC
     StudentLessonTrainingDetailWrapper.StudentLessonTraining findExtracurricularExercisesDetailPublicV2(Long courseScheduleId, Long userId, ELessonTrainingType type);
 
     void pushEndMsg();
+
+    /**
+     * 删除过期作业
+     */
+    void deleteOverdueHomework();
 }

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentLessonTrainingDetailService.java

@@ -84,4 +84,6 @@ public interface StudentLessonTrainingDetailService extends IService<StudentLess
 
     @NotNull
     Map<Integer, List<StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail>> getGroupMap(Long courseHomeworkId, ELessonTrainingType trainingType);
+
+    List<StudentLessonTrainingDetail> queryExpired();
 }

+ 79 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkServiceImpl.java

@@ -1,6 +1,9 @@
 package com.ym.mec.biz.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.google.common.collect.Lists;
+import com.microsvc.toolkit.middleware.oss.OssPluginContext;
+import com.microsvc.toolkit.middleware.oss.OssPluginService;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.*;
@@ -26,6 +29,7 @@ import com.ym.mec.util.date.DateUtil;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.jetbrains.annotations.NotNull;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -90,9 +94,15 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
     private StudentLessonExaminationDao studentLessonExaminationDao;
     @Resource
     private StudentLessonTrainingDetailService studentLessonTrainingDetailService;
+
+    @Autowired
+    private StudentLessonExaminationDetailService studentLessonExaminationDetailService;
+
     @Resource
     private ExtracurricularExercisesDao extracurricularExercisesDao;
 
+    @Autowired
+    private OssPluginContext ossPluginContext;
     @Override
     public BaseDAO<Long, StudentCourseHomework> getDAO() {
         return studentCourseHomeworkDao;
@@ -1197,6 +1207,75 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
 
     }
 
+    /**
+     * 删除过期作业
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteOverdueHomework() {
+
+        OssPluginService pluginService = ossPluginContext.getPluginService("tencent");
+        // 删练习作业
+        {
+            List<StudentLessonTrainingDetail> trainingDetails = studentLessonTrainingDetailService.queryExpired();
+
+            List<String> delFileList = new ArrayList<>();
+            List<StudentLessonTrainingDetail> updateList = new ArrayList<>();
+            for (StudentLessonTrainingDetail trainingDetail : trainingDetails) {
+                StudentLessonTrainingDetail studentLessonTrainingDetail = new StudentLessonTrainingDetail();
+                studentLessonTrainingDetail.setId(trainingDetail.getId());
+                String fileJson = trainingDetail.getFileJson();
+                List<CourseHomeworkWrapper.FileJson> fileJsonList = JSON.parseArray(fileJson, CourseHomeworkWrapper.FileJson.class);
+                List<String> delFiles = fileJsonList.stream().map(CourseHomeworkWrapper.FileJson::getFilePath)
+                    .filter(StringUtils::isNotBlank)
+                    .collect(Collectors.toList());
+                delFileList.addAll(delFiles);
+                studentLessonTrainingDetail.setFileDelFlag(true);
+                updateList.add(studentLessonTrainingDetail);
+            }
+
+            if (!org.springframework.util.CollectionUtils.isEmpty(delFileList)) {
+                List<List<String>> partition = Lists.partition(delFileList, 10);
+                for (List<String> strings : partition) {
+                    pluginService.batchDeleteFile(strings);
+                }
+            }
+            if (CollectionUtils.isNotEmpty(updateList)) {
+                studentLessonTrainingDetailService.updateBatchById(updateList, 100);
+            }
+        }
+
+        // 删评测作业
+        {
+            List<StudentLessonExaminationDetail> studentLessonExaminationDetails = studentLessonExaminationDao.queryExpired();
+
+            List<String> delFileList = new ArrayList<>();
+            List<StudentLessonExaminationDetail> updateList = new ArrayList<>();
+            for (StudentLessonExaminationDetail examinationDetail : studentLessonExaminationDetails) {
+                StudentLessonExaminationDetail lessonExaminationDetail = new StudentLessonExaminationDetail();
+                lessonExaminationDetail.setId(examinationDetail.getId());
+                String fileJson = examinationDetail.getFileJson();
+                List<CourseHomeworkWrapper.FileJson> fileJsonList = JSON.parseArray(fileJson, CourseHomeworkWrapper.FileJson.class);
+                List<String> delFiles = fileJsonList.stream().map(CourseHomeworkWrapper.FileJson::getFilePath)
+                    .filter(StringUtils::isNotBlank)
+                    .collect(Collectors.toList());
+                delFileList.addAll(delFiles);
+                lessonExaminationDetail.setFileDelFlag(true);
+                updateList.add(lessonExaminationDetail);
+            }
+
+            if (!org.springframework.util.CollectionUtils.isEmpty(delFileList)) {
+                List<List<String>> partition = Lists.partition(delFileList, 10);
+                for (List<String> strings : partition) {
+                    pluginService.batchDeleteFile(strings);
+                }
+            }
+            if (CollectionUtils.isNotEmpty(updateList)) {
+                studentLessonExaminationDetailService.updateBatchById(updateList, 100);
+            }
+        }
+    }
+
     @NotNull
     private StudentLessonTrainingDetailWrapper.StudentLessonTraining getUserInfo(Long userId) {
         SysUser sysUser = sysUserFeignService.queryUserById(userId.intValue());

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

@@ -515,4 +515,9 @@ public class StudentLessonTrainingDetailServiceImpl extends ServiceImpl<StudentL
                                 .collect(Collectors.groupingBy(StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail::getGroup,LinkedHashMap::new,Collectors.toList()));
         return groupDetailMap;
     }
+
+    @Override
+    public List<StudentLessonTrainingDetail> queryExpired() {
+        return baseMapper.queryExpired();
+    }
 }

+ 8 - 0
mec-biz/src/main/resources/config/mybatis/StudentLessonExaminationMapper.xml

@@ -127,4 +127,12 @@
         left join lesson_examination le ON sle.lesson_examination_id_ = le.id_
         where sle.training_flag_ = false AND DATE_FORMAT(expire_date_,'%Y-%m-%d') = #{date}
     </select>
+
+    <select id="queryExpired" resultType="com.ym.mec.biz.dal.entity.StudentLessonExaminationDetail">
+
+        select t1.* from lesson_examination t
+        left join student_lesson_examination_detail t1 on t.id_ = t1.lesson_examination_id_
+        where t.expire_date_ is not null and t.file_expire_day_ is not null and t.file_expire_day_ >0
+          and date_add(t.expire_date_,interval t.file_expire_day_ day) &lt; now() and t1.file_del_flag_=0 and t1.file_json_ is not null
+    </select>
 </mapper>

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

@@ -2,4 +2,15 @@
 <!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.StudentLessonTrainingDetailMapper">
 
+    <select id="queryExpired" resultType="com.ym.mec.biz.dal.entity.StudentLessonTrainingDetail">
+        select b.* from (select t.id_,'HOMEWORK' as type from  course_homework t
+        where t.expiry_date_ is not null and t.file_expire_day_ is not null and t.file_expire_day_ >0
+            and date_add(t.expiry_date_,interval t.file_expire_day_ day) &lt; now()
+        union all
+        select t.id_,t.group_type_ as type from extracurricular_exercises t
+        where t.expire_date_ is not null and t.file_expire_day_ is not null and t.file_expire_day_ >0
+          and date_add(t.expire_date_,interval t.file_expire_day_ day) &lt; now()) a
+        left join student_lesson_training_detail b on b.course_homework_id_ = a.id_ and b.type_ = a.type
+        where b.file_del_flag_=0 and b.file_json_ is not null
+    </select>
 </mapper>

+ 7 - 0
mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java

@@ -324,4 +324,11 @@ public interface TaskRemoteService {
     @GetMapping("/task/workOverdue")
     void workOverdue();
 
+
+    /**
+     * 删除过期作业
+     */
+    @GetMapping("/task/deleteOverdueHomework")
+    void deleteOverdueHomework();
+
 }

+ 8 - 0
mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java

@@ -373,4 +373,12 @@ public class TaskRemoteServiceFallback implements TaskRemoteService {
     public void workOverdue() {
         logger.error("作品过期设置失败");
     }
+
+    /**
+     * 删除过期作业
+     */
+    @Override
+    public void deleteOverdueHomework() {
+        logger.error("删除过期作业失败");
+    }
 }

+ 21 - 0
mec-task/src/main/java/com/ym/mec/task/jobs/DeleteOverdueHomeworkTask.java

@@ -0,0 +1,21 @@
+package com.ym.mec.task.jobs;
+
+import com.ym.mec.task.TaskRemoteService;
+import com.ym.mec.task.core.BaseTask;
+import com.ym.mec.task.core.TaskException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class DeleteOverdueHomeworkTask extends BaseTask {
+
+    @Autowired
+    private TaskRemoteService taskRemoteService;
+
+    @Override
+    public void execute() throws TaskException {
+        taskRemoteService.deleteOverdueHomework();
+    }
+
+}
+