Sfoglia il codice sorgente

登记簿批量导出代码提交

jingyuanchao 1 anno fa
parent
commit
baf844b2fd

+ 1 - 1
project_data/sql/0.0.3/soc/soc.sql

@@ -400,7 +400,7 @@ ALTER TABLE  core_safety_book_user_id MODIFY COLUMN id bigint auto_increment NOT
 ALTER TABLE  core_safety_dict MODIFY COLUMN id int auto_increment NOT NULL COMMENT '主键';
 
 
-ALTER TABLE  core_safety_exception_data MODIFY COLUMN id bigint DEFAULT 0 NOT NULL COMMENT '主键';
+ALTER TABLE  core_safety_exception_data MODIFY COLUMN id bigint  NOT NULL COMMENT '主键';
 ALTER TABLE  core_safety_exception_data MODIFY COLUMN create_time datetime DEFAULT CURRENT_TIMESTAMP  NULL COMMENT '创建时间';
 
 

+ 6 - 2
soc-common/soc-common-redis/src/main/java/com/xunmei/common/redis/delay/RegisterBookFileExpirationListener.java

@@ -4,11 +4,15 @@ package com.xunmei.common.redis.delay;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 
+import java.io.File;
+
 @Component
 @Slf4j
 public class RegisterBookFileExpirationListener implements RedisDelayedQueueListener<String> {
     @Override
-    public void invoke(String key) {
-        log.info(" redis延迟队列监听到消息, key:{}", key);
+    public void invoke(String filePath) {
+        File file = new File(filePath);
+        boolean delete = file.delete();
+        log.info(" 登记簿延迟删除文件:{},删除结果 : {} ", filePath, delete ? "成功" : "失败");
     }
 }

+ 19 - 11
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillTaskServiceImpl.java

@@ -419,7 +419,7 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
                 .ge(CoreDrillTask::getStartDate, minDateRange)
                 .le(CoreDrillTask::getEndDate, maxDateRange)
                 .eq(CoreDrillTask::getPlanId, plan.getId())
-                .select(CoreDrillTask::getId,CoreDrillTask::getOrgId, CoreDrillTask::getStartDate, CoreDrillTask::getEndDate, CoreDrillTask::getPlanId)
+                .select(CoreDrillTask::getId, CoreDrillTask::getOrgId, CoreDrillTask::getStartDate, CoreDrillTask::getEndDate, CoreDrillTask::getPlanId)
         );
         for (SysOrg org : orgList) {
             for (int i = 1; i <= plan.getExecTimes(); i++) {
@@ -512,17 +512,13 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
         }
         List<CoreDrillTaskReportVo> result = new ArrayList<>();
         List<CoreDrillTaskReportVo> list = coreDrillTaskMapper.selectReport(request, planId, planIdList);
+        if (list.isEmpty()) {
+            return new ArrayList<>();
+        }
         if (list.size() == 1 && list.get(0).getOrgId() == null) {
+            return new ArrayList<>();
             //走到这 说明mapper没有查到数据 构建空数据返回
-            for (SysOrg org : sysOrgList) {
-                CoreDrillTaskReportVo reportVo = new CoreDrillTaskReportVo();
-                reportVo.setOrgId(org.getId());
-                reportVo.setOrgName(org.getName());
-                reportVo.setShouldFinish(0);
-                reportVo.setFinish(0);
-                reportVo.setScore("0.0");
-                result.add(reportVo);
-            }
+            //buildEmptyData(sysOrgList, result);
         } else {
             for (SysOrg org : sysOrgList) {
                 List<CoreDrillTaskReportVo> childrenOrgData = list.stream().filter(vo -> vo.getOrgPath().startsWith(org.getPath())).collect(Collectors.toList());
@@ -546,6 +542,18 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
         return reportVoList;
     }
 
+    private void buildEmptyData(List<SysOrg> sysOrgList, List<CoreDrillTaskReportVo> result) {
+        for (SysOrg org : sysOrgList) {
+            CoreDrillTaskReportVo reportVo = new CoreDrillTaskReportVo();
+            reportVo.setOrgId(org.getId());
+            reportVo.setOrgName(org.getName());
+            reportVo.setShouldFinish(0);
+            reportVo.setFinish(0);
+            reportVo.setScore("0.0");
+            result.add(reportVo);
+        }
+    }
+
     private String calculateScore(List<CoreDrillTaskReportVo> childrenOrgData) {
         //计算finish 字段总和
         int finish = childrenOrgData.stream().map(CoreDrillTaskReportVo::getFinish).reduce(Integer::sum).orElse(0);
@@ -731,7 +739,7 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
         }
         drillTask.setCommentScore(request.getScore());
         drillTask.setStatus(DrillDoStatus.DONE.getCode());
-       //drillTask.setComment(request.getComment());
+        //drillTask.setComment(request.getComment());
         drillTask.setRecStatus(0);
         int i = baseMapper.updateById(drillTask);
         buildDrillTaskPdf(request.getTaskId());

+ 36 - 32
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingTaskServiceImpl.java

@@ -476,7 +476,7 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
                 .ge(CoreEduTrainingTask::getStartDate, minDateRange)
                 .le(CoreEduTrainingTask::getEndDate, maxDateRange)
                 .eq(CoreEduTrainingTask::getPlanId, plan.getId())
-                .select(CoreEduTrainingTask::getId,CoreEduTrainingTask::getOrgId, CoreEduTrainingTask::getStartDate, CoreEduTrainingTask::getEndDate, CoreEduTrainingTask::getPlanId)
+                .select(CoreEduTrainingTask::getId, CoreEduTrainingTask::getOrgId, CoreEduTrainingTask::getStartDate, CoreEduTrainingTask::getEndDate, CoreEduTrainingTask::getPlanId)
         );
         for (SysOrg org : orgList) {
             for (int i = 1; i <= plan.getExecTimes(); i++) {
@@ -580,34 +580,38 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
     }
 
     private void buildResultData(List<SysOrg> sysOrgList, List<CoreEduTrainingTaskReportVo> result, List<CoreEduTrainingTaskReportVo> list) {
-        if (list.size() == 1 && list.get(0).getOrgId() == null) {
-            //走到这 说明mapper没有查到数据 构建空数据返回
-            for (SysOrg org : sysOrgList) {
-                CoreEduTrainingTaskReportVo reportVo = new CoreEduTrainingTaskReportVo();
-                reportVo.setOrgId(org.getId());
-                reportVo.setOrgName(org.getName());
-                reportVo.setShouldFinish(0);
-                reportVo.setFinish(0);
-                reportVo.setFinishRate("0%");
-                result.add(reportVo);
-            }
-        } else {
-            for (SysOrg org : sysOrgList) {
-                List<CoreEduTrainingTaskReportVo> childrenOrgData = list.stream()
-                        .filter(vo -> vo.getOrgPath().startsWith(org.getPath()))
-                        .collect(Collectors.toList());
-
-                int totalShouldFinish = childrenOrgData.stream().mapToInt(CoreEduTrainingTaskReportVo::getShouldFinish).sum();
-                int totalFinish = childrenOrgData.stream().mapToInt(CoreEduTrainingTaskReportVo::getFinish).sum();
-
-                CoreEduTrainingTaskReportVo reportVo = new CoreEduTrainingTaskReportVo();
-                reportVo.setOrgId(org.getId());
-                reportVo.setOrgName(org.getName());
-                reportVo.setShouldFinish(totalShouldFinish);
-                reportVo.setFinish(totalFinish);
-                reportVo.setFinishRate(calculatePercent(totalFinish, totalShouldFinish));
-                result.add(reportVo);
-            }
+        if (list.isEmpty()) {
+            //buildEmptyData(sysOrgList, result);
+            return;
+        }
+        for (SysOrg org : sysOrgList) {
+            List<CoreEduTrainingTaskReportVo> childrenOrgData = list.stream()
+                    .filter(vo -> vo.getOrgPath().startsWith(org.getPath()))
+                    .collect(Collectors.toList());
+
+            int totalShouldFinish = childrenOrgData.stream().mapToInt(CoreEduTrainingTaskReportVo::getShouldFinish).sum();
+            int totalFinish = childrenOrgData.stream().mapToInt(CoreEduTrainingTaskReportVo::getFinish).sum();
+
+            CoreEduTrainingTaskReportVo reportVo = new CoreEduTrainingTaskReportVo();
+            reportVo.setOrgId(org.getId());
+            reportVo.setOrgName(org.getName());
+            reportVo.setShouldFinish(totalShouldFinish);
+            reportVo.setFinish(totalFinish);
+            reportVo.setFinishRate(calculatePercent(totalFinish, totalShouldFinish));
+            result.add(reportVo);
+        }
+    }
+
+    private void buildEmptyData(List<SysOrg> sysOrgList, List<CoreEduTrainingTaskReportVo> result) {
+        //走到这 说明mapper没有查到数据 构建空数据返回
+        for (SysOrg org : sysOrgList) {
+            CoreEduTrainingTaskReportVo reportVo = new CoreEduTrainingTaskReportVo();
+            reportVo.setOrgId(org.getId());
+            reportVo.setOrgName(org.getName());
+            reportVo.setShouldFinish(0);
+            reportVo.setFinish(0);
+            reportVo.setFinishRate("0%");
+            result.add(reportVo);
         }
     }
 
@@ -829,7 +833,7 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
         }
         //处理签名数据
         dealEduTrainingSign(list);
-        list.removeIf(item->DateUtil.date().before(item.getStartTime()) || DateUtil.date().after(item.getEndTime()));
+        list.removeIf(item -> DateUtil.date().before(item.getStartTime()) || DateUtil.date().after(item.getEndTime()));
         list.forEach(item -> {
             item.setType(PanelTypeEnums.EDU_TRAINING.getCode());
         });
@@ -907,10 +911,10 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
     public void export(CoreEduTrainingTaskPageDto request, HttpServletResponse response) {
         dealTaskPageParam(request);
         List<CoreEduTrainingTaskExportVo> list = coreEduTrainingTaskMapper.selectCoreEduTrainingTaskPage(request);
-        if (ObjectUtil.isEmpty(list)){
+        if (ObjectUtil.isEmpty(list)) {
             throw new SystemException("未获取到数据");
         }
-        int index=1;
+        int index = 1;
         for (CoreEduTrainingTaskExportVo task : list) {
             task.setIndex(index);
             index++;

+ 8 - 5
soc-modules/soc-modules-file/src/main/java/com/xunmei/file/service/LocalSysFileServiceImpl.java

@@ -748,9 +748,9 @@ public class LocalSysFileServiceImpl implements ISysFileService {
                         .collect(Collectors.toList());
                 pdfToZipTempVoList.removeIf(pdfToZipTempVo -> !FileUtil.exist(pdfToZipTempVo.getFile()));
                 log.info("登记簿全部下载完成,开始压缩文件,数量:{}", pdfToZipTempVoList.size());
-
-                String localFileName = URLEncoder.encode(CacheConstants.REGISTER_PDF_FILE_KEY + DateHelper.getDateString(date) + str + ".zip", "UTF-8");
-                FileOutputStream fos = new FileOutputStream(localFileName);
+                String encodedFileName = URLEncoder.encode(CacheConstants.REGISTER_PDF_FILE_KEY + DateHelper.getDateString(date) + str + ".zip", "UTF-8");
+                String filePath = this.localFilePath + File.separator + encodedFileName;
+                FileOutputStream fos = new FileOutputStream(filePath);
                 ZipOutputStream zos = new ZipOutputStream(fos);
                 long fileSize = 0L;
                 for (PdfToZipTempVo tempVo : pdfToZipTempVoList) {
@@ -763,7 +763,7 @@ public class LocalSysFileServiceImpl implements ISysFileService {
                 zos.close();
                 fos.close();
                 num++;
-                saveFileDataToRedis(org, date, zipName, localFileName, fileSize, pdfDto);
+                saveFileDataToRedis(org, date, zipName, filePath, fileSize, pdfDto);
             } catch (Throwable e) {
                 throw new RuntimeException(e);
             } finally {
@@ -788,8 +788,11 @@ public class LocalSysFileServiceImpl implements ISysFileService {
         pdfLocalFileTempVo.setDownLoadTime(DateUtil.format(date, "yyyy-MM-dd HH:mm:ss"));
         pdfLocalFileTempVo.setIsRegisterBookPage(pdfDto.getIsRegisterBookPage());
         pdfLocalFileTempVo.setCreateTime(new Date());
-        RedisUtils.setCacheObject(URLDecoder.decode(localFileName, "UTF-8"), JSON.toJSONString(pdfLocalFileTempVo));
+        //此处localFileName 为文件的绝对路径,存在redis延迟队列中,一个小时后删除文件
         delayedQueue.addQueueHours(pdfLocalFileTempVo.getLocalFileName(), 1, RegisterBookFileExpirationListener.class);
+        localFileName = localFileName.replace(this.localFilePath+File.separator, "");
+        //此处localFileName 为文件名称,存入redis中,用于页面展示文件名称,下载
+        RedisUtils.setCacheObject(URLDecoder.decode(localFileName, "UTF-8"), JSON.toJSONString(pdfLocalFileTempVo));
     }
 
     private List<List<CoreRegisterBookPdfPageVo>> checkSubList(CoreRegisterBookPdfExportDto pdfDto) {