diff --git a/pqs-common/common-oss/src/main/java/com/njcn/oss/utils/FileStorageUtil.java b/pqs-common/common-oss/src/main/java/com/njcn/oss/utils/FileStorageUtil.java index ccdc51a75..4d66a1dad 100644 --- a/pqs-common/common-oss/src/main/java/com/njcn/oss/utils/FileStorageUtil.java +++ b/pqs-common/common-oss/src/main/java/com/njcn/oss/utils/FileStorageUtil.java @@ -1,7 +1,5 @@ package com.njcn.oss.utils; -import cn.hutool.core.io.FileUtil; -import cn.hutool.http.HttpUtil; import com.njcn.common.config.GeneralInfo; import com.njcn.common.pojo.exception.BusinessException; import com.njcn.huawei.obs.util.OBSUtil; @@ -17,7 +15,6 @@ import org.springframework.http.MediaType; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; -import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.*; @@ -90,7 +87,7 @@ public class FileStorageUtil { } else { try { //把名称存入数据 - MinIoUploadResDTO minIoUploadResDTO = minIoUtils.uploadStream(fileStream, minIossProperties.getBucket(), dir,minIoUtils.minFileName(fileName)); + MinIoUploadResDTO minIoUploadResDTO = minIoUtils.uploadStream(fileStream, minIossProperties.getBucket(), dir, minIoUtils.minFileName(fileName)); filePath = minIoUploadResDTO.getMinFileName(); } catch (Exception e) { throw new BusinessException(OssResponseEnum.UPLOAD_FILE_ERROR); @@ -106,7 +103,7 @@ public class FileStorageUtil { * @date 2023/3/7 23:04 * @param filePath 文件在服务器的路径 */ - public String getFileUrl(String filePath){ + public String getFileUrl(String filePath) { String url; if (generalInfo.getBusinessFileStorage() == GeneralConstant.HUAWEI_OBS) { url = obsUtil.getFileUrl(filePath); @@ -117,14 +114,13 @@ public class FileStorageUtil { } - /*** * 根据文件路径获取文件流 * @author hongawen * @date 2023/3/7 23:04 * @param filePath 文件在服务器的路径 */ - public InputStream getFileStream(String filePath){ + public InputStream getFileStream(String filePath) { InputStream inputStream; try { if (generalInfo.getBusinessFileStorage() == GeneralConstant.HUAWEI_OBS) { @@ -132,7 +128,7 @@ public class FileStorageUtil { } else { inputStream = minIoUtils.downloadStream(minIossProperties.getBucket(), filePath); } - }catch (Exception exception){ + } catch (Exception exception) { throw new BusinessException(OssResponseEnum.DOWNLOAD_FILE_STREAM_ERROR); } return inputStream; @@ -147,17 +143,17 @@ public class FileStorageUtil { public void downloadStream(HttpServletResponse response, String filePath) throws IOException { InputStream inputStream; OutputStream toClient = null; - try{ + try { if (generalInfo.getBusinessFileStorage() == GeneralConstant.HUAWEI_OBS) { inputStream = obsUtil.downloadStream(filePath); } else { inputStream = minIoUtils.downloadStream(minIossProperties.getBucket(), filePath); } - }catch (Exception exception){ + } catch (Exception exception) { throw new BusinessException(OssResponseEnum.DOWNLOAD_FILE_STREAM_ERROR); } String fileType = filePath.substring(filePath.lastIndexOf('.')).toLowerCase(); - switch (fileType){ + switch (fileType) { case "jpg": case "jpeg": case "png": @@ -187,8 +183,26 @@ public class FileStorageUtil { } - - + /** + * 获取下载文件流 + * + * @param filePath + * @return + * @throws IOException + */ + public InputStream downloadStream(String filePath) { + InputStream inputStream; + try { + if (generalInfo.getBusinessFileStorage() == GeneralConstant.HUAWEI_OBS) { + inputStream = obsUtil.downloadStream(filePath); + } else { + inputStream = minIoUtils.downloadStream(minIossProperties.getBucket(), filePath); + } + } catch (Exception exception) { + throw new BusinessException(OssResponseEnum.DOWNLOAD_FILE_STREAM_ERROR); + } + return inputStream; + } /*** * 根据文件路径删除指定文件对象 @@ -196,10 +210,10 @@ public class FileStorageUtil { * @date 2023/3/8 9:25 * @param fileName 文件路径名 */ - public void deleteFile(String fileName){ + public void deleteFile(String fileName) { if (generalInfo.getBusinessFileStorage() == GeneralConstant.HUAWEI_OBS) { obsUtil.delete(fileName); - }else{ + } else { minIoUtils.removeObject(minIossProperties.getBucket(), fileName); } } diff --git a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/api/line/ThsSuperviseClient.java b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/api/line/ThsSuperviseClient.java index 1df922f74..15f4ac271 100644 --- a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/api/line/ThsSuperviseClient.java +++ b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/api/line/ThsSuperviseClient.java @@ -4,7 +4,6 @@ import com.njcn.common.pojo.constant.ServerInfo; import com.njcn.common.pojo.response.HttpResult; import com.njcn.prepare.harmonic.api.line.fallback.CoustomReportFeignClientFallbackFactory; import com.njcn.prepare.harmonic.pojo.param.SuperviseParam; -import com.njcn.prepare.harmonic.pojo.vo.SuperviceRunLogVo; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; @@ -23,5 +22,5 @@ public interface ThsSuperviseClient { * @return */ @PostMapping("/initSupervise") - HttpResult initSupervise(@RequestBody @Validated SuperviseParam superviseParam); + HttpResult initSupervise(@RequestBody @Validated SuperviseParam superviseParam); } diff --git a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/api/line/fallback/ThsSuperviseClientFallbackFactory.java b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/api/line/fallback/ThsSuperviseClientFallbackFactory.java index fabcc788e..9e06ff23a 100644 --- a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/api/line/fallback/ThsSuperviseClientFallbackFactory.java +++ b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/api/line/fallback/ThsSuperviseClientFallbackFactory.java @@ -6,7 +6,6 @@ import com.njcn.common.pojo.response.HttpResult; import com.njcn.device.pq.utils.DeviceEnumUtil; import com.njcn.prepare.harmonic.api.line.ThsSuperviseClient; import com.njcn.prepare.harmonic.pojo.param.SuperviseParam; -import com.njcn.prepare.harmonic.pojo.vo.SuperviceRunLogVo; import feign.hystrix.FallbackFactory; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -26,7 +25,7 @@ public class ThsSuperviseClientFallbackFactory implements FallbackFactory finalExceptionEnum = exceptionEnum; return new ThsSuperviseClient() { @Override - public HttpResult initSupervise(@RequestBody @Validated SuperviseParam superviseParam) { + public HttpResult initSupervise(@RequestBody @Validated SuperviseParam superviseParam) { log.error("{}异常,降级处理,异常为:{}", "预警/告警事务的生成: ", throwable.toString()); throw new BusinessException(finalExceptionEnum); } diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/line/ThsSuperviseController.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/line/ThsSuperviseController.java index d52c3aefe..ecc52fafa 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/line/ThsSuperviseController.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/line/ThsSuperviseController.java @@ -3,7 +3,6 @@ package com.njcn.prepare.harmonic.controller.line; import com.njcn.common.pojo.response.HttpResult; import com.njcn.prepare.harmonic.pojo.param.SuperviseParam; -import com.njcn.prepare.harmonic.pojo.vo.SuperviceRunLogVo; import com.njcn.prepare.harmonic.service.mysql.line.ThsSuperviseService; import com.njcn.web.controller.BaseController; import io.swagger.annotations.Api; @@ -32,8 +31,8 @@ public class ThsSuperviseController extends BaseController { @ApiImplicitParam(name = "superviseParam", value = "创建技术监督参数", required = true) @PostMapping("/initSupervise") @ResponseBody - public HttpResult initSupervise(@RequestBody @Validated SuperviseParam superviseParam) { - HttpResult superviceRunLogVoHttpResult = thsSuperviseService.initSupervise(superviseParam); + public HttpResult initSupervise(@RequestBody @Validated SuperviseParam superviseParam) { + HttpResult superviceRunLogVoHttpResult = thsSuperviseService.initSupervise(superviseParam); return superviceRunLogVoHttpResult; } } diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/line/ThsSuperviseServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/line/ThsSuperviseServiceImpl.java index 08469139d..bb15b83ae 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/line/ThsSuperviseServiceImpl.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/line/ThsSuperviseServiceImpl.java @@ -3,6 +3,7 @@ package com.njcn.prepare.harmonic.service.mysql.Impl.line; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; +import com.alibaba.fastjson.JSON; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -78,7 +79,7 @@ public class ThsSuperviseServiceImpl extends ServiceImpl initSupervise(SuperviseParam superviseParam) { + public HttpResult initSupervise(SuperviseParam superviseParam) { SuperviceRunLogVo superviceRunLogVo = new SuperviceRunLogVo(); List overRunLogList = new ArrayList<>(); if (InitTypeEnum.MANUAL.getCode().equals(superviseParam.getInitType()) && StringUtils.isBlank(superviseParam.getDeptId())) { @@ -178,7 +179,7 @@ public class ThsSuperviseServiceImpl extends ServiceImpl { /** * 初始化技术监督 */ - HttpResult initSupervise(SuperviseParam superviseParam); + HttpResult initSupervise(SuperviseParam superviseParam); /** * 查新策略集合 diff --git a/pqs-process/process-api/src/main/java/com/njcn/process/pojo/param/FileParam.java b/pqs-process/process-api/src/main/java/com/njcn/process/pojo/param/FileParam.java new file mode 100644 index 000000000..ff6b822c3 --- /dev/null +++ b/pqs-process/process-api/src/main/java/com/njcn/process/pojo/param/FileParam.java @@ -0,0 +1,18 @@ +package com.njcn.process.pojo.param; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +@Data +public class FileParam { + @ApiModelProperty(value = "技术监督监测点记录id集合", required = true) + @NotNull(message = "技术监督监测点记录id集合不能为空") + private List ids; + @ApiModelProperty(value = "下载的单据类型:1 反馈单,2 测试报告,4 整改通知反馈单", required = true) + @NotNull(message = "下载的单据类型不能为空") + private Integer ticketType; + +} diff --git a/pqs-process/process-boot/src/main/java/com/njcn/process/controller/ThsSuperviseController.java b/pqs-process/process-boot/src/main/java/com/njcn/process/controller/ThsSuperviseController.java index 7f9a49385..1d90cac22 100644 --- a/pqs-process/process-boot/src/main/java/com/njcn/process/controller/ThsSuperviseController.java +++ b/pqs-process/process-boot/src/main/java/com/njcn/process/controller/ThsSuperviseController.java @@ -1,7 +1,11 @@ package com.njcn.process.controller; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.constant.OperateType; +import com.njcn.common.pojo.enums.common.LogEnum; import com.njcn.common.pojo.enums.response.CommonResponseEnum; import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.utils.HttpResultUtil; @@ -11,6 +15,7 @@ import com.njcn.prepare.harmonic.pojo.param.SuperviseParam; import com.njcn.prepare.harmonic.pojo.vo.SuperviceRunLogVo; import com.njcn.prepare.harmonic.pojo.vo.SuperviseVo; import com.njcn.prepare.harmonic.pojo.vo.ThsSuperviseVo; +import com.njcn.process.pojo.param.FileParam; import com.njcn.process.service.ThsOverRunLogService; import com.njcn.process.service.ThsSuperviseService; import com.njcn.web.controller.BaseController; @@ -19,10 +24,12 @@ import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.List; import java.util.Map; @@ -46,14 +53,18 @@ public class ThsSuperviseController extends BaseController { @Autowired private ThsSuperviseClient thsSuperviseClient; + @OperateInfo(info = LogEnum.BUSINESS_COMMON) @ApiOperation("预警/告警事务生成") @ApiImplicitParam(name = "superviseParam", value = "创建技术监督参数", required = true) @PostMapping("/initSupervise") public HttpResult initSupervise(@RequestBody @Validated SuperviseParam superviseParam) { - HttpResult superviceRunLogVoHttpResult = thsSuperviseService.initSupervise(superviseParam); - return superviceRunLogVoHttpResult; + String methodDescribe = getMethodDescribe("initSupervise"); + HttpResult superviceRunLogVoHttpResult = thsSuperviseClient.initSupervise(superviseParam); + SuperviceRunLogVo superviceRunLogVo = JSON.parseObject(superviceRunLogVoHttpResult.getData(), SuperviceRunLogVo.class); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, superviceRunLogVo, methodDescribe); } + @OperateInfo(info = LogEnum.BUSINESS_COMMON, operateType = OperateType.ADD) @ApiOperation("保存技术监督监测点") @ApiImplicitParam(name = "superviceRunLogVo", value = "技术监督监测点参数", required = true) @PostMapping("/saveOverRunLog") @@ -63,6 +74,7 @@ public class ThsSuperviseController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); } + @OperateInfo(info = LogEnum.BUSINESS_COMMON, operateType = OperateType.UPDATE) @ApiOperation("更新技术监督") @ApiImplicitParam(name = "superviceRunLogVo", value = "更新技术监督参数", required = true) @PostMapping("/updateSupervice") @@ -70,7 +82,7 @@ public class ThsSuperviseController extends BaseController { return thsOverRunLogService.updateSupervise(superviceRunLogVo); } - + @OperateInfo(info = LogEnum.BUSINESS_COMMON) @ApiOperation("技术监督详情") @ApiImplicitParam(name = "supIndex", value = "技术监督id", required = true) @PostMapping("/superviseDetail") @@ -80,6 +92,8 @@ public class ThsSuperviseController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON, operateType = OperateType.DELETE) @ApiOperation("删除技术监督") @ApiImplicitParam(name = "superviseDto", value = "删除技术监督请求体", required = true) @PostMapping("/deleteSupervise") @@ -87,6 +101,8 @@ public class ThsSuperviseController extends BaseController { return thsSuperviseService.deleteSupervise(superviseDto); } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) @ApiOperation("查询技术监督列表") @ApiImplicitParam(name = "superviseDto", value = "查询技术监督列表参数", required = true) @PostMapping("/querySuperviseList") @@ -96,6 +112,7 @@ public class ThsSuperviseController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, pageResult, methodDescribe); } + @OperateInfo(info = LogEnum.BUSINESS_COMMON) @ApiOperation("上传技术监督单据") @PostMapping("/uploadSuperviseTicket") public HttpResult uploadSuperviseTicket(@ApiParam(value = "文件", required = true) @@ -110,6 +127,8 @@ public class ThsSuperviseController extends BaseController { } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) @ApiOperation("查询流程状态列表") @PostMapping("/queryProgressValues") public HttpResult queryProgressValues() { @@ -119,6 +138,7 @@ public class ThsSuperviseController extends BaseController { } + @OperateInfo(info = LogEnum.BUSINESS_COMMON, operateType = OperateType.UPLOAD) @ApiOperation("上传单据模板") @PostMapping("/uploadAlarmFormwork") public HttpResult uploadAlarmFormwork(@ApiParam(value = "文件", required = true) @@ -131,6 +151,7 @@ public class ThsSuperviseController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); } + @OperateInfo(info = LogEnum.BUSINESS_COMMON, operateType = OperateType.DOWNLOAD) @ApiOperation("下载单据模板") @PostMapping("/dowloadAlarmFormwork") public HttpResult dowloadAlarmFormwork(@ApiParam(name = "type", value = "类型(0:预警;1:告警)", required = true) @RequestParam("type") Integer type, @@ -142,6 +163,7 @@ public class ThsSuperviseController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, httpPath, methodDescribe); } + @OperateInfo(info = LogEnum.BUSINESS_COMMON) @ApiOperation("技术监督首页") @ApiImplicitParam(name = "superviseDto", value = "查询技术监督列表参数", required = true) @PostMapping("/superviseIndex") @@ -150,5 +172,16 @@ public class ThsSuperviseController extends BaseController { String methodDescribe = getMethodDescribe("superviseIndex"); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, pageResult, methodDescribe); } + + + @OperateInfo(info = LogEnum.BUSINESS_COMMON, operateType = OperateType.DOWNLOAD) + @PostMapping(value = "/downloadFeedBackFile", produces = {MediaType.APPLICATION_OCTET_STREAM_VALUE, MediaType.APPLICATION_JSON_VALUE}) + @ApiOperation("技术监督反馈文件下载") + @ApiImplicitParam(name = "fileParam", value = "反馈文件下载参数", required = true) + public HttpResult downloadFeedBackFile(@RequestBody @Validated FileParam fileParam, HttpServletRequest request, HttpServletResponse response) { + String methodDescribe = getMethodDescribe("downloadFeedBackFile"); + HttpServletResponse resp = thsSuperviseService.downloadFeedBackFile(fileParam, request, response); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, resp, methodDescribe); + } } diff --git a/pqs-process/process-boot/src/main/java/com/njcn/process/service/ThsSuperviseService.java b/pqs-process/process-boot/src/main/java/com/njcn/process/service/ThsSuperviseService.java index 058b8d235..ebd1b2b0e 100644 --- a/pqs-process/process-boot/src/main/java/com/njcn/process/service/ThsSuperviseService.java +++ b/pqs-process/process-boot/src/main/java/com/njcn/process/service/ThsSuperviseService.java @@ -14,11 +14,13 @@ import com.njcn.prepare.harmonic.pojo.vo.SuperviceRunLogVo; import com.njcn.prepare.harmonic.pojo.vo.SuperviseVo; import com.njcn.prepare.harmonic.pojo.vo.ThsSuperviseVo; import com.njcn.process.enums.TypeEnum; +import com.njcn.process.pojo.param.FileParam; import com.njcn.process.pojo.po.LimitRate; import com.njcn.process.pojo.po.ThsWarnStrategyAss; import com.njcn.user.pojo.po.Dept; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.List; import java.util.Map; @@ -87,8 +89,6 @@ public interface ThsSuperviseService extends IService { void buildOverRunLog(SourceSteadyIndicator steady, ThsSupervise thsSupervise, Monitor monitor, LimitRate limitRate, Map limitBoolMap, Integer initType, List thsOverRunLogs); - void deleteTodayData(String depId, Integer initType); - /** * 生成技术监督数据 * @@ -163,4 +163,13 @@ public interface ThsSuperviseService extends IService { * @return */ Page superviseIndex(SuperviseDto superviseDto); + + /** + * 下载反馈文件 + * + * @param fileParam + * @param response + * @return + */ + HttpServletResponse downloadFeedBackFile(FileParam fileParam, HttpServletRequest request, HttpServletResponse response); } diff --git a/pqs-process/process-boot/src/main/java/com/njcn/process/service/impl/ThsSuperviseServiceImpl.java b/pqs-process/process-boot/src/main/java/com/njcn/process/service/impl/ThsSuperviseServiceImpl.java index ca39dfbee..87437a226 100644 --- a/pqs-process/process-boot/src/main/java/com/njcn/process/service/impl/ThsSuperviseServiceImpl.java +++ b/pqs-process/process-boot/src/main/java/com/njcn/process/service/impl/ThsSuperviseServiceImpl.java @@ -30,6 +30,7 @@ import com.njcn.process.annotaion.HarVoltage; import com.njcn.process.annotaion.InterharVoltage; import com.njcn.process.enums.*; import com.njcn.process.mapper.*; +import com.njcn.process.pojo.param.FileParam; import com.njcn.process.pojo.po.LimitRate; import com.njcn.process.pojo.po.ThsAlarmFormwork; import com.njcn.process.pojo.po.ThsWarnStrategyAss; @@ -49,10 +50,17 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.io.*; import java.lang.reflect.Field; +import java.net.URLEncoder; import java.util.*; import java.util.stream.Collectors; +import java.util.zip.Adler32; +import java.util.zip.CheckedOutputStream; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; /** *

@@ -461,7 +469,7 @@ public class ThsSuperviseServiceImpl extends ServiceImpl().eq(ThsSupervise::getDeptId, depId) - .eq(ThsSupervise::getCreateType, initType) - .between(ThsSupervise::getCreateTime, - DateUtil.beginOfDay(new Date()), - DateUtil.endOfDay(new Date())).last("limit 1")); - if (thsSupervise != null) { - thsOverRunLogMapper.delete(new LambdaQueryWrapper().eq(ThsOverRunLog::getSupIndex, thsSupervise.getSupIndex())); - thsSuperviseMapper.delete(new LambdaQueryWrapper().eq(ThsSupervise::getSupIndex, thsSupervise.getSupIndex())); + public HttpServletResponse downloadFeedBackFile(FileParam fileParam, HttpServletRequest request, HttpServletResponse response) { + TicketTypeEnum ticketTypeEnum = TicketTypeEnum.getTicketTypeEnumByCode(fileParam.getTicketType()); + if (ticketTypeEnum == null) { + throw new BusinessException("上传单据参数类型错误!"); } + List thsOverRunLogs = thsOverRunLogMapper.selectList(new LambdaQueryWrapper().in(ThsOverRunLog::getId, fileParam.getIds())); + if (CollectionUtil.isNotEmpty(thsOverRunLogs)) { + Map filePathMap = new HashedMap(); + switch (ticketTypeEnum) { + case FEEDBACK: + filePathMap = thsOverRunLogs.stream().filter(r -> StringUtils.isNotBlank(r.getFeedback())).collect(Collectors.toMap(ThsOverRunLog::getId, ThsOverRunLog::getFeedback)); + break; + case TEST_REPORT: + filePathMap = thsOverRunLogs.stream().filter(r -> StringUtils.isNotBlank(r.getTestReport())).collect(Collectors.toMap(ThsOverRunLog::getId, ThsOverRunLog::getTestReport)); + + break; + case REVISE_FEEDBACK: + filePathMap = thsOverRunLogs.stream().filter(r -> StringUtils.isNotBlank(r.getReviseFeedback())).collect(Collectors.toMap(ThsOverRunLog::getId, ThsOverRunLog::getReviseFeedback)); + + break; + } + response = this.dowloadZipFile(fileParam, filePathMap, request, response, ticketTypeEnum); + } + return response; } + /** + * 批量下载.zip文件 + * + * @param fileParam + * @param filePathMap + * @param request + * @param response + * @return + */ + private HttpServletResponse dowloadZipFile(FileParam fileParam, Map filePathMap, HttpServletRequest request, HttpServletResponse response, TicketTypeEnum ticketTypeEnum) { + try { + if (CollectionUtil.isNotEmpty(filePathMap)) { + ThsOverRunLog thsOverRunLog = thsOverRunLogMapper.selectById(fileParam.getIds().get(0)); + ThsSupervise thsSupervise = thsSuperviseMapper.selectOne(new LambdaQueryWrapper().eq(ThsSupervise::getSupIndex, thsOverRunLog.getSupIndex()).last("limit 1")); + //改为自己的名称 + String fileName = thsSupervise.getName() + ".zip"; + // 创建临时文件 + File zipFile = File.createTempFile(thsSupervise.getName(), ".zip"); + FileOutputStream f = new FileOutputStream(zipFile); + /** + * 作用是为任何OutputStream产生校验和 + * 第一个参数是制定产生校验和的输出流,第二个参数是指定Checksum的类型 (Adler32(较快)和CRC32两种) + */ + CheckedOutputStream csum = new CheckedOutputStream(f, new Adler32()); + // 用于将数据压缩成Zip文件格式 + ZipOutputStream zos = new ZipOutputStream(csum); + for (Map.Entry entry : filePathMap.entrySet()) { + ThsOverRunLog runLog = thsOverRunLogMapper.selectById(entry.getKey()); + Monitor monitor = pmsMonitorMapper.selectById(runLog.getLineIndex()); + InputStream inputStream = fileStorageUtil.downloadStream(entry.getValue()); + // 对于每一个要被存放到压缩包的文件,都必须调用ZipOutputStream对象的putNextEntry()方法,确保压缩包里面文件不同名 + zos.putNextEntry(new ZipEntry(monitor.getName() + ticketTypeEnum.getMessage() + entry.getValue().substring(entry.getValue().lastIndexOf(".")))); + int bytesRead = 0; + // 向压缩文件中输出数据 + while ((bytesRead = inputStream.read()) != -1) { + zos.write(bytesRead); + } + inputStream.close(); + zos.closeEntry(); // 当前文件写完,定位为写入下一条项目 + } + zos.close(); + InputStream fis = new BufferedInputStream(new FileInputStream(zipFile)); + byte[] buffer = new byte[fis.available()]; + fis.read(buffer); + fis.close(); + // 清空response + response.reset(); + // 设置response的Header + response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8")); + response.addHeader("Content-Length", "" + zipFile.length()); + OutputStream toClient = new BufferedOutputStream(response.getOutputStream()); + response.setContentType("application/octet-stream"); + toClient.write(buffer); + toClient.flush(); + toClient.close(); + zipFile.delete(); + } + } catch (Exception e) { + log.error("批量下载.zip文件异常:{}", e.toString()); + } + return response; + } + + /** * 判断监测数据是否超标 *