소스 검색

维保记录导出,先上传到阿里云oss,然后返回文件地址给前端

wang-hai-cheng 5 년 전
부모
커밋
ad0d308a2c

+ 2 - 2
lift-business-service/src/main/java/cn/com/ty/lift/business/maintenance/controller/MaintenanceRecordController.java

@@ -415,7 +415,7 @@ public class MaintenanceRecordController {
 
     @PostMapping("export")
     @Validation(fields = {"recordIds"})
-    public void export(@Val @RequestBody MtRecordRequest mtRecordRequest, HttpServletResponse response) {
-        maintenanceRecordService.export(mtRecordRequest, response);
+    public RestResponse<?> export(@Val @RequestBody MtRecordRequest mtRecordRequest) {
+       return RestResponse.success(maintenanceRecordService.export(mtRecordRequest));
     }
 }

+ 26 - 41
lift-business-service/src/main/java/cn/com/ty/lift/business/maintenance/service/MaintenanceRecordService.java

@@ -21,12 +21,14 @@ import cn.com.ty.lift.business.project.dao.entity.Project;
 import cn.com.ty.lift.business.project.dao.entity.ProjectLiftRelevance;
 import cn.com.ty.lift.business.project.service.ProjectLiftRelevanceService;
 import cn.com.ty.lift.business.project.service.ProjectService;
+import cn.com.ty.lift.common.aliservice.aliyunoss.AliyunOSS;
 import cn.com.ty.lift.common.constants.CommonEnum;
 import cn.com.ty.lift.common.utils.DateUtils;
 import cn.com.ty.lift.common.utils.MapHelper;
 import cn.com.ty.lift.common.utils.ValuePool;
 import cn.com.ty.lift.common.verify.Val;
 import cn.com.ty.lift.common.verify.Validate;
+import cn.com.ty.lift.common.verify.ValidateException;
 import cn.com.xwy.boot.web.dto.RestResponse;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.IterUtil;
@@ -843,7 +845,7 @@ public class MaintenanceRecordService extends ServiceImpl<MaintenanceRecordMappe
         return baseMapper.pageByLift(request.getPage(), request);
     }
 
-    public void export(MtRecordRequest mtRecordRequest, HttpServletResponse response) {
+    public String export(MtRecordRequest mtRecordRequest) {
         Map<String, String> headerAlias = new LinkedHashMap<>();
         headerAlias.put("projectName", "项目名称");
         headerAlias.put("useCompanyCode", "梯号");
@@ -907,62 +909,45 @@ public class MaintenanceRecordService extends ServiceImpl<MaintenanceRecordMappe
                 projectName = StrUtil.isNotEmpty(projectName) ? projectName.replace(illegalChars, "-") : "[项目]";
                 registrationCode = StrUtil.isNotEmpty(registrationCode) ? registrationCode.replace(illegalChars, "-") : "[电梯注册代码]";
                 //保养单及图片文件夹 dir/i.ProjectName-RegistrationCode/
-//                String imgDir = StrUtil.format("{}{}{}.{}-{}{}", dir, File.separator, (i + 1), projectName, registrationCode, File.separator);
+                String imgDir = StrUtil.format("{}{}{}.{}-{}{}", dir, File.separator, (i + 1), projectName, registrationCode, File.separator);
                 //生成维保图片
-//                List<MtRecordImg> mtRecordImgs = mtRecordResponse.getMtRecordImgs();
-//                List<MtRecordImg> imgs = mtRecordImgs.stream().filter(img -> mtRecordResponse.getId().equals(img.getMtRecordId())).collect(Collectors.toList());
-//                if (IterUtil.isNotEmpty(imgs)) {
-//                    for (int n = 0; n < imgs.size(); n++) {
-//                        String imgUrl = imgs.get(n).getImgUrl();
-//                        if (StrUtil.isNotEmpty(imgUrl)) {
-//                            log.info("imgUrl: {}", imgUrl);
-//                            String filename = imgDir + StrUtil.format("维保图片{}.jpg", (n + 1));
-//                            log.info("生成维保图片文件: {}", filename);
-//                            HttpUtil.downloadFile(imgUrl, filename);
-//                        }
-//                    }
-//                }
+                List<MtRecordImg> mtRecordImgs = mtRecordResponse.getMtRecordImgs();
+                List<MtRecordImg> imgs = mtRecordImgs.stream().filter(img -> mtRecordResponse.getId().equals(img.getMtRecordId())).collect(Collectors.toList());
+                if (IterUtil.isNotEmpty(imgs)) {
+                    for (int n = 0; n < imgs.size(); n++) {
+                        String imgUrl = imgs.get(n).getImgUrl();
+                        if (StrUtil.isNotEmpty(imgUrl)) {
+                            log.info("imgUrl: {}", imgUrl);
+                            String filename = imgDir + StrUtil.format("维保图片{}.jpg", (n + 1));
+                            log.info("生成维保图片文件: {}", filename);
+                            HttpUtil.downloadFile(imgUrl, filename);
+                        }
+                    }
+                }
                 //生成保养单
-                String maintenanceExcelDir = StrUtil.format("{}{}{}.{}-{}{}", dir, File.separator, (i + 1), projectName, registrationCode, "保养单.xlsx");
+                String maintenanceExcelDir = imgDir + "保养单.xlsx";
                 log.info("生成保养单: {}", maintenanceExcelDir);
                 excelWriter(mtRecordResponse, maintenanceExcelDir);
             }
             //压缩文件夹
             log.info("生成zipFile路径: {}", zip);
             ZipUtil.zip(dir, zip);
+            //上传文件到阿里云,并返回路径给前端
+            return AliyunOSS.me().putObject("maintenance/export/zip/" + generateCode + ".zip", readInputStream(new FileInputStream(new File(zip))));
         } catch (Exception e) {
-            FileUtil.del(zipFile);
-            FileUtil.del(baseDir);
             log.error("生成保养文件失败", e);
             throw Validate.validateException("生成保养文件失败");
-        }
-        //下载压缩文件
-        if (FileUtil.exist(zipFile)) {
-            // 设置强制下载不打开, ZIP的application/x-zip-compressed
-            response.setContentType("application/force-download");
-            // 设置文件名
-            response.addHeader("Content-Disposition", "attachment;fileName=" + zipFile.getName());
-            byte[] buffer = new byte[1024];
-            try (FileInputStream fis = new FileInputStream(zipFile);
-                 BufferedInputStream bis = new BufferedInputStream(fis)) {
-                OutputStream os = response.getOutputStream();
-                int i;
-                while ((i = bis.read(buffer)) != -1) {
-                    os.write(buffer, 0, i);
-                }
-            } catch (Exception e) {
-                log.error("下载保养文件失败", e);
-                throw Validate.validateException("下载保养文件失败");
-            } finally {
-                //删除临时根目录和zip文件
-                FileUtil.del(zipFile);
-                FileUtil.del(baseDir);
-            }
+        } finally {
+            FileUtil.del(zipFile);
+            FileUtil.del(baseDir);
         }
     }
 
     private MtRecordResponse getMtRecordResponse(@RequestBody @Val MtRecordRequest request) {
         MtRecordResponse entity = this.infoById(request);
+        if (entity == null) {
+            throw new ValidateException("维保记录不存在");
+        }
         String repairDuration = this.getRepairDuration(entity.getRepairDiff());
         entity.setRepairDuration(repairDuration);
         Validate.notNull(entity, ValuePool.MAINTENANCE_RECORD_NOT_EXIST);