Răsfoiți Sursa

3.2.3 bug修改

xiaofei 2 ani în urmă
părinte
comite
9a384d1a92
14 a modificat fișierele cu 100 adăugiri și 27 ștergeri
  1. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ConditionMapper.java
  2. 7 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TSyncExamStudentScoreMapper.java
  3. 3 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TeachCourseMapper.java
  4. 5 3
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TSyncExamStudentScoreService.java
  5. 3 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TeachCourseService.java
  6. 9 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ConditionServiceImpl.java
  7. 26 15
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TSyncExamStudentScoreServiceImpl.java
  8. 5 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TeachCourseServiceImpl.java
  9. 5 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java
  10. 7 1
      distributed-print-business/src/main/resources/mapper/ConditionMapper.xml
  11. 6 0
      distributed-print-business/src/main/resources/mapper/TSyncExamStudentScoreMapper.xml
  12. 14 0
      distributed-print-business/src/main/resources/mapper/TeachCourseMapper.xml
  13. 5 3
      distributed-print/src/main/java/com/qmth/distributed/print/api/TSyncExamStudentScoreController.java
  14. 4 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/TeachcloudCommonServiceImpl.java

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ConditionMapper.java

@@ -29,7 +29,7 @@ public interface ConditionMapper {
 
     List<PrintPlanBrief> listPrintPlan(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("dpr") DataPermissionRule dpr);
 
-    List<BasicCourse> listCourseForScore(@Param("semesterId") Long semesterId, @Param("examId") Long examId,@Param("dpr") DataPermissionRule dpr);
+    List<BasicCourse> listCourseForScore(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("basicCourses") List<BasicCourse> basicCourses, @Param("dpr") DataPermissionRule dpr);
 
     List<BasicClazz> listClazz(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("dpr") DataPermissionRule dpr);
 }

+ 7 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TSyncExamStudentScoreMapper.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.qmth.distributed.print.business.bean.result.TSyncExamStudentScoreResult;
 import com.qmth.distributed.print.business.entity.TSyncExamStudentScore;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
+import com.qmth.teachcloud.common.entity.BasicCourse;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -28,6 +29,7 @@ public interface TSyncExamStudentScoreMapper extends BaseMapper<TSyncExamStudent
      * @param semesterId
      * @param clazzId
      * @param courseCode
+     * @param basicCourses
      * @param dpr
      * @return
      */
@@ -37,6 +39,7 @@ public interface TSyncExamStudentScoreMapper extends BaseMapper<TSyncExamStudent
                                                    @Param("examId") Long examId,
                                                    @Param("clazzId") Long clazzId,
                                                    @Param("courseCode") String courseCode,
+                                                   @Param("basicCourses") List<BasicCourse> basicCourses,
                                                    @Param("dpr") DataPermissionRule dpr);
 
     /**
@@ -46,6 +49,7 @@ public interface TSyncExamStudentScoreMapper extends BaseMapper<TSyncExamStudent
      * @param semesterId
      * @param clazzId
      * @param courseCode
+     * @param basicCourses
      * @return
      */
     public List<TSyncExamStudentScoreResult> export(@Param("schoolId") Long schoolId,
@@ -53,6 +57,7 @@ public interface TSyncExamStudentScoreMapper extends BaseMapper<TSyncExamStudent
                                                     @Param("examId") Long examId,
                                                     @Param("clazzId") Long clazzId,
                                                     @Param("courseCode") String courseCode,
+                                                    @Param("basicCourses") List<BasicCourse> basicCourses,
                                                     @Param("dpr") DataPermissionRule dpr);
 
     /**
@@ -62,6 +67,7 @@ public interface TSyncExamStudentScoreMapper extends BaseMapper<TSyncExamStudent
      * @param semesterId
      * @param clazzId
      * @param courseCode
+     * @param basicCourses
      * @return
      */
     public int exportCount(@Param("schoolId") Long schoolId,
@@ -69,5 +75,6 @@ public interface TSyncExamStudentScoreMapper extends BaseMapper<TSyncExamStudent
                            @Param("examId") Long examId,
                            @Param("clazzId") Long clazzId,
                            @Param("courseCode") String courseCode,
+                           @Param("basicCourses") List<BasicCourse> basicCourses,
                            @Param("dpr") DataPermissionRule dpr);
 }

+ 3 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TeachCourseMapper.java

@@ -7,6 +7,7 @@ import com.qmth.distributed.print.business.bean.result.TeachCourseResult;
 import com.qmth.distributed.print.business.entity.TeachCourse;
 import com.qmth.teachcloud.common.bean.result.TeacherSelectResult;
 import com.qmth.teachcloud.common.bean.result.TeacherTeamResult;
+import com.qmth.teachcloud.common.entity.BasicCourse;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -51,4 +52,6 @@ public interface TeachCourseMapper extends BaseMapper<TeachCourse> {
      * @return 教师查询集合
      */
     List<TeacherSelectResult> findTeacherByOrgIds(@Param("orgIdList") List<Long> orgIdList);
+
+    List<BasicCourse> findTeachCourseByUserId(Long userId);
 }

+ 5 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TSyncExamStudentScoreService.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.distributed.print.business.bean.result.TSyncExamStudentScoreResult;
 import com.qmth.distributed.print.business.entity.TSyncExamStudentScore;
 import com.qmth.distributed.print.business.enums.ImageTrajectoryEnum;
+import com.qmth.teachcloud.common.entity.SysUser;
 
 import java.io.IOException;
 import java.util.List;
@@ -38,17 +39,18 @@ public interface TSyncExamStudentScoreService extends IService<TSyncExamStudentS
     /**
      * 成绩导出
      *
-     * @param schoolId
+     * @param sysUser
      * @param semesterId
      * @param clazzId
      * @param courseCode
      * @return
      */
-    public List<TSyncExamStudentScoreResult> export(Long schoolId,
+    public List<TSyncExamStudentScoreResult> export(SysUser sysUser,
                                                     Long semesterId,
                                                     Long examId,
                                                     Long clazzId,
-                                                    String courseCode);
+                                                    String courseCode,
+                                                    String servletPath);
 
     /**
      * 成绩导出计数

+ 3 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TeachCourseService.java

@@ -9,6 +9,7 @@ import com.qmth.distributed.print.business.bean.result.TeachCourseResult;
 import com.qmth.distributed.print.business.entity.TeachCourse;
 import com.qmth.teachcloud.common.bean.result.TeacherSelectResult;
 import com.qmth.teachcloud.common.bean.result.TeacherTeamResult;
+import com.qmth.teachcloud.common.entity.BasicCourse;
 import com.qmth.teachcloud.common.entity.SysUser;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -118,4 +119,6 @@ public interface TeachCourseService extends IService<TeachCourse> {
      * @return 用户结果
      */
     List<TeacherSelectResult> findUserByOrgId(Long orgId);
+
+    List<BasicCourse> findTeachCourseByUserId(Long userId);
 }

+ 9 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ConditionServiceImpl.java

@@ -5,6 +5,7 @@ import com.qmth.distributed.print.business.bean.result.PrintPlanBrief;
 import com.qmth.distributed.print.business.mapper.ConditionMapper;
 import com.qmth.distributed.print.business.service.BasicExamService;
 import com.qmth.distributed.print.business.service.ConditionService;
+import com.qmth.distributed.print.business.service.TeachCourseService;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import com.qmth.teachcloud.common.entity.*;
 import com.qmth.teachcloud.common.service.BasicRoleDataPermissionService;
@@ -32,6 +33,9 @@ public class ConditionServiceImpl implements ConditionService {
     @Resource
     BasicRoleDataPermissionService basicRoleDataPermissionService;
 
+    @Resource
+    TeachCourseService teachCourseService;
+
     @Resource
     ConditionMapper conditionMapper;
 
@@ -78,7 +82,11 @@ public class ConditionServiceImpl implements ConditionService {
         }
         // 成绩查询
         else if ("487".equals(privilegeIdString)) {
-            return conditionMapper.listCourseForScore(semesterId, examId, dpr);
+            List<BasicCourse> basicCourses = teachCourseService.findTeachCourseByUserId(sysUser.getId());
+            if (basicCourses.isEmpty()) {
+                dpr = basicRoleDataPermissionService.findDataPermission(privilegeId);
+            }
+            return conditionMapper.listCourseForScore(semesterId, examId, basicCourses, dpr);
         } else {
             dpr = basicRoleDataPermissionService.findDataPermission(privilegeId);
             return conditionMapper.listCourse(semesterId, examId, enable, printPlanIds, dpr);

+ 26 - 15
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TSyncExamStudentScoreServiceImpl.java

@@ -10,9 +10,11 @@ import com.qmth.distributed.print.business.entity.TSyncExamStudentScore;
 import com.qmth.distributed.print.business.enums.ImageTrajectoryEnum;
 import com.qmth.distributed.print.business.mapper.TSyncExamStudentScoreMapper;
 import com.qmth.distributed.print.business.service.TSyncExamStudentScoreService;
+import com.qmth.distributed.print.business.service.TeachCourseService;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import com.qmth.teachcloud.common.config.DictionaryConfig;
 import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.BasicCourse;
 import com.qmth.teachcloud.common.entity.BasicRoleDataPermission;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
@@ -59,6 +61,9 @@ public class TSyncExamStudentScoreServiceImpl extends ServiceImpl<TSyncExamStude
     @Resource
     BasicRoleDataPermissionService basicRoleDataPermissionService;
 
+    @Resource
+    TeachCourseService teachCourseService;
+
     /**
      * 同步成绩查询列表
      *
@@ -73,15 +78,13 @@ public class TSyncExamStudentScoreServiceImpl extends ServiceImpl<TSyncExamStude
         if (semesterId == null) {
             throw ExceptionResultEnum.ERROR.exception("请选择学期");
         }
-        if (examId == null) {
-            throw ExceptionResultEnum.ERROR.exception("请选择考试");
-        }
-        if (StringUtils.isBlank(courseCode)) {
-            throw ExceptionResultEnum.ERROR.exception("请选择课程");
-        }
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(sysUser.getSchoolId(), sysUser.getId(), ServletUtil.getRequest().getServletPath());
-        IPage<TSyncExamStudentScoreResult> list = tSyncExamStudentScoreMapper.list(iPage, sysUser.getSchoolId(), semesterId, examId, clazzId, courseCode, dpr);
+        List<BasicCourse> basicCourses = teachCourseService.findTeachCourseByUserId(sysUser.getId());
+        DataPermissionRule dpr = null;
+        if (basicCourses.isEmpty()) {
+            dpr = basicRoleDataPermissionService.findDataPermission(sysUser.getSchoolId(), sysUser.getId(), ServletUtil.getRequest().getServletPath());
+        }
+        IPage<TSyncExamStudentScoreResult> list = tSyncExamStudentScoreMapper.list(iPage, sysUser.getSchoolId(), semesterId, examId, clazzId, courseCode, basicCourses, dpr);
         list.getRecords().stream().map(m -> {
             String localSheetUrls = m.getLocalSheetUrls();
             if (StringUtils.isNotBlank(localSheetUrls)) {
@@ -101,17 +104,21 @@ public class TSyncExamStudentScoreServiceImpl extends ServiceImpl<TSyncExamStude
     /**
      * 成绩导出
      *
-     * @param schoolId
+     * @param sysUser
      * @param semesterId
      * @param clazzId
      * @param courseCode
      * @return
      */
     @Override
-    public List<TSyncExamStudentScoreResult> export(Long schoolId, Long semesterId, Long examId, Long clazzId, String courseCode) {
-        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(schoolId, sysUser.getId(), ServletUtil.getRequest().getServletPath());
-        return tSyncExamStudentScoreMapper.export(schoolId, semesterId, examId, clazzId, courseCode, dpr);
+    public List<TSyncExamStudentScoreResult> export(SysUser sysUser, Long semesterId, Long examId, Long clazzId, String courseCode, String servletPath) {
+        Long schoolId = sysUser.getSchoolId();
+        List<BasicCourse> basicCourses = teachCourseService.findTeachCourseByUserId(sysUser.getId());
+        DataPermissionRule dpr = null;
+        if (basicCourses.isEmpty()) {
+            dpr = basicRoleDataPermissionService.findDataPermission(schoolId, sysUser.getId(), servletPath);
+        }
+        return tSyncExamStudentScoreMapper.export(schoolId, semesterId, examId, clazzId, courseCode, basicCourses, dpr);
     }
 
     /**
@@ -126,8 +133,12 @@ public class TSyncExamStudentScoreServiceImpl extends ServiceImpl<TSyncExamStude
     @Override
     public int exportCount(Long schoolId, Long semesterId, Long examId, Long clazzId, String courseCode) {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(schoolId, sysUser.getId(), ServletUtil.getRequest().getServletPath());
-        return tSyncExamStudentScoreMapper.exportCount(schoolId, semesterId, examId, clazzId, courseCode, dpr);
+        List<BasicCourse> basicCourses = teachCourseService.findTeachCourseByUserId(sysUser.getId());
+        DataPermissionRule dpr = null;
+        if (basicCourses.isEmpty()) {
+            dpr = basicRoleDataPermissionService.findDataPermission(schoolId, sysUser.getId(), ServletUtil.getRequest().getServletPath());
+        }
+        return tSyncExamStudentScoreMapper.exportCount(schoolId, semesterId, examId, clazzId, courseCode, basicCourses, dpr);
     }
 
     /**

+ 5 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TeachCourseServiceImpl.java

@@ -371,4 +371,9 @@ public class TeachCourseServiceImpl extends ServiceImpl<TeachCourseMapper, Teach
         Set<Long> orgIdSet = sysOrgService.findDeepOrgIdListByOrgIdList(temp);
         return this.baseMapper.findTeacherByOrgIds(new ArrayList<>(orgIdSet));
     }
+
+    @Override
+    public List<BasicCourse> findTeachCourseByUserId(Long userId) {
+        return this.baseMapper.findTeachCourseByUserId(userId);
+    }
 }

+ 5 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java

@@ -1677,9 +1677,10 @@ public class TaskLogicServiceImpl implements TaskLogicService {
             examId = Objects.nonNull(map.get("examId")) ? Long.valueOf(map.get("examId").toString()) : null;
             clazzId = Objects.nonNull(map.get("clazzId")) ? Long.valueOf(map.get("clazzId").toString()) : null;
             courseCode = Objects.nonNull(map.get("courseCode")) ? (String) map.get("courseCode") : null;
+            String servletPath = Objects.nonNull(map.get("servletPath")) ? (String) map.get("servletPath") : null;
 
             fos = new ByteArrayOutputStream();
-            List<TSyncExamStudentScoreResult> tSyncExamStudentScoreResultList = tSyncExamStudentScoreService.export(sysUser.getSchoolId(), semesterId, examId, clazzId, courseCode);
+            List<TSyncExamStudentScoreResult> tSyncExamStudentScoreResultList = tSyncExamStudentScoreService.export(sysUser, semesterId, examId, clazzId, courseCode, servletPath);
             ExcelUtil.excelMake(TSyncExamStudentScoreResult.class, tSyncExamStudentScoreResultList, fos);
             String excelExportFilePath = printCommonService.saveTaskAttachment(fos, (boolean) map.get(SystemConstant.OSS));
             map.computeIfAbsent("count", v -> Objects.isNull(tSyncExamStudentScoreResultList) ? 0 : tSyncExamStudentScoreResultList.size());
@@ -1719,7 +1720,9 @@ public class TaskLogicServiceImpl implements TaskLogicService {
             clazzId = Objects.nonNull(map.get("clazzId")) ? (Long) map.get("clazzId") : null;
             courseCode = Objects.nonNull(map.get("courseCode")) ? (String) map.get("courseCode") : null;
 
-            List<TSyncExamStudentScoreResult> tSyncExamStudentScoreResultList = tSyncExamStudentScoreService.export(sysUser.getSchoolId(), semesterId, examId, clazzId, courseCode);
+            String servletPath = Objects.nonNull(map.get("servletPath")) ? (String) map.get("servletPath") : null;
+
+            List<TSyncExamStudentScoreResult> tSyncExamStudentScoreResultList = tSyncExamStudentScoreService.export(sysUser, semesterId, examId, clazzId, courseCode, servletPath);
             if (Objects.nonNull(tSyncExamStudentScoreResultList) && tSyncExamStudentScoreResultList.size() > 0) {
                 List<TSyncExamStudentScore> tSyncExamStudentScoreList = new Gson().fromJson(JacksonUtil.parseJson(tSyncExamStudentScoreResultList), new TypeToken<List<TSyncExamStudentScore>>() {
                 }.getType());

+ 7 - 1
distributed-print-business/src/main/resources/mapper/ConditionMapper.xml

@@ -221,6 +221,12 @@
             <if test="examId != null">
                 AND et.exam_id = #{examId}
             </if>
+            <if test="basicCourses.size > 0">
+                and bc.code in
+                <foreach collection="basicCourses" item="item" index="index" open="(" separator="," close=")">
+                    #{item.code}
+                </foreach>
+            </if>
             <if test="dpr != null">
                 <if test="dpr.requestUserId != null">
                     AND tc.user_id = #{dpr.requestUserId}
@@ -237,7 +243,7 @@
     </select>
     <select id="listClazz" resultType="com.qmth.teachcloud.common.entity.BasicClazz">
         SELECT DISTINCT
-            tsess.clazz_id id, tsess.clazz_name name
+            tsess.clazz_id id, tsess.clazz_name clazzName
         FROM
             t_sync_exam_student_score tsess
                 JOIN

+ 6 - 0
distributed-print-business/src/main/resources/mapper/TSyncExamStudentScoreMapper.xml

@@ -63,6 +63,12 @@
             <if test="courseCode != null and courseCode != ''">
                 and edc.course_code = #{courseCode}
             </if>
+            <if test="(courseCode == null or courseCode == '') and basicCourses.size > 0">
+                and edc.course_code in
+                <foreach collection="basicCourses" item="item" index="index" open="(" separator="," close=")">
+                    #{item.code}
+                </foreach>
+            </if>
             <if test="dpr != null">
                 <if test="dpr.requestUserId != null">
                     AND tc.user_id = #{dpr.requestUserId}

+ 14 - 0
distributed-print-business/src/main/resources/mapper/TeachCourseMapper.xml

@@ -71,6 +71,20 @@
         </where>
         ORDER BY so.id
     </select>
+    <select id="findTeachCourseByUserId" resultType="com.qmth.teachcloud.common.entity.BasicCourse">
+        SELECT
+            bc.code, bc.name
+        FROM
+            basic_course bc
+        WHERE
+            EXISTS( SELECT
+                        1
+                    FROM
+                        teach_course tc
+                    WHERE
+                        bc.id = tc.basic_course_id
+                      AND tc.user_id = #{userId})
+    </select>
 </mapper>
 
 

+ 5 - 3
distributed-print/src/main/java/com/qmth/distributed/print/api/TSyncExamStudentScoreController.java

@@ -68,7 +68,7 @@ public class TSyncExamStudentScoreController {
     @ApiResponses({@ApiResponse(code = 200, message = "成绩查询信息", response = TSyncExamStudentScoreResult.class)})
     @RequestMapping(value = "/score/list", method = RequestMethod.POST)
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.SEARCH)
-    public Result list(@ApiParam(value = "学期ID", required = false) @RequestParam(required=false) String semesterId,
+    public Result list(@ApiParam(value = "学期ID", required = false) @RequestParam(required = false) String semesterId,
                        @ApiParam(value = "考试ID", required = false) @RequestParam(required = false) String examId,
                        @ApiParam(value = "班级id", required = false) @RequestParam(required = false) String clazzId,
                        @ApiParam(value = "课程编码", required = false) @RequestParam(required = false) String courseCode,
@@ -115,9 +115,9 @@ public class TSyncExamStudentScoreController {
     @RequestMapping(value = "/score/batch_download", method = RequestMethod.POST)
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.SEARCH)
     public Result batchDownload(@ApiParam(value = "学期id", required = true) @RequestParam String semesterId,
-                                @ApiParam(value = "考试ID", required = false) @RequestParam(required = false) String examId,
+                                @ApiParam(value = "考试ID", required = true) @RequestParam String examId,
                                 @ApiParam(value = "班级id", required = false) @RequestParam(required = false) String clazzId,
-                                @ApiParam(value = "课程编码", required = true) @RequestParam String courseCode) {
+                                @ApiParam(value = "课程编码", required = false) @RequestParam(required = false) String courseCode) {
         return createScoreTbTask(TaskTypeEnum.SCORE_DOWNLOAD, semesterId, examId, clazzId, courseCode);
     }
 
@@ -140,6 +140,8 @@ public class TSyncExamStudentScoreController {
         map.computeIfAbsent("clazzId", v -> SystemConstant.convertIdToLong(params[2]));
         map.computeIfAbsent("courseCode", v -> params[3]);
         map.computeIfAbsent(SystemConstant.OSS, v -> dictionaryConfig.sysDomain().isOss());
+        String servletPath = ServletUtil.getRequest().getServletPath();
+        map.computeIfAbsent("servletPath", v -> servletPath);
         if (taskTypeEnum == TaskTypeEnum.SCORE_EXPORT) {
             asyncScoreExportService.exportTask(map);
         } else if (taskTypeEnum == TaskTypeEnum.SCORE_DOWNLOAD) {

+ 4 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/TeachcloudCommonServiceImpl.java

@@ -473,7 +473,7 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
     @Override
     public String filePreview(Long attachmentId) {
         BasicAttachment basicAttachment = basicAttachmentService.getById(attachmentId);
-        if(basicAttachment == null){
+        if (basicAttachment == null) {
             return null;
         }
         return filePreview(basicAttachment.getPath());
@@ -640,6 +640,9 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
         UploadFileEnum uploadType = Enum.valueOf(UploadFileEnum.class, (String) object.get(SystemConstant.UPLOAD_TYPE));
 
         File localPath = new File(rootPath, fileName);
+        if (!localPath.exists()) {
+            localPath.getParentFile().mkdirs();
+        }
         if (type.equals(SystemConstant.OSS)) {
             return fileStoreUtil.ossDownload(filePath, localPath.getPath(), uploadType.getFssType());
         } else {