Spring boot框架根据模板实现文件导出、下载功能

Spring boot框架根据模板实现文件导出功能

文件导出:


service层代码:

@Override
    public BaseResponse<List<Map<String, String>>> export(List<Long> ids) {
        List<CorpPersonSum> corpPersonSums = getProList(ids);
        if(org.apache.dubbo.common.utils.CollectionUtils.isEmpty(corpPersonSums)){
            return BaseResponse.buildSuccessResponse();
        }
        ArrayList<Map<String, String>> response = Lists.newArrayList();
        Map<String,String> levelOneConstructor = dictionaryService.queryValueAndTextMap(String.valueOf(CorpPersonEnum.LEVEL_ONE_CONSTRUCTOR));
        Map<String,String> levelTwoConstructor = dictionaryService.queryValueAndTextMap(String.valueOf(CorpPersonEnum.LEVEL_TWO_CONSTRUCTOR));
        Map<String,String> registeredEngineer = dictionaryService.queryValueAndTextMap(String.valueOf(CorpPersonEnum.REGISTERED_CONSULTANT_ENGINEER));
        for (int i = 1; i <= corpPersonSums.size(); i++) {
            CorpPersonSum corpPersonSum = corpPersonSums.get(i - 1);
            HashMap<String, String> result = Maps.newHashMap();

            result.put("0", String.valueOf(i));
            //corpBaseInfoService.getProjectNameById(corpPersonSum.getCorpId());
            CorpPersonSumPageRespDTO corpPersonSumPageRespDTO = new CorpPersonSumPageRespDTO();
            result.put("1", Optional.ofNullable(corpBaseInfoService.getcorpNameById(corpPersonSum.getCorpId())).orElse(""));
            result.put("2", String.valueOf(Optional.ofNullable(corpPersonSum.getTotalStaff()).orElse(Integer.valueOf(""))));
            result.put("3",levelOneConstructor.getOrDefault(corpPersonSumPageRespDTO.getLevelOneConstructor(),""));
            result.put("4",levelTwoConstructor.getOrDefault(corpPersonSumPageRespDTO.getLevelTwoConstructor(),""));
            result.put("5",registeredEngineer.getOrDefault(corpPersonSumPageRespDTO.getRegisteredEngineer(),""));
            result.put("6",String.valueOf(Optional.ofNullable(corpPersonSum.getProfessorEngineer()).orElse(Integer.valueOf(""))));
            result.put("7",String.valueOf(Optional.ofNullable(corpPersonSum.getHighGradeEngineer()).orElse(Integer.valueOf(""))));
            result.put("8",String.valueOf(Optional.ofNullable(corpPersonSum.getMiddleGradeEngineer()).orElse(Integer.valueOf(""))));
            result.put("9",String.valueOf(Optional.ofNullable(corpPersonSum.getTechnician()).orElse(Integer.valueOf(""))));
            result.put("10",String.valueOf(Optional.ofNullable(corpPersonSum.getAdministrativeStaff()).orElse(Integer.valueOf(""))));
            result.put("11",String.valueOf(Optional.ofNullable(corpPersonSum.getOnsiteManageStaff()).orElse(Integer.valueOf(""))));
            result.put("12",String.valueOf(Optional.ofNullable(corpPersonSum.getOtherStaff()).orElse(Integer.valueOf(""))));

            response.add(result);
        }

        return BaseResponse.buildSuccessResponse().result(response);
    }

controller层代码:

    @RequestMapping("/export")
    public void export(String ids) {
        if(StringUtils.isEmpty(ids)) {
            log.info("参数不正确");
            return;
        }
        List<Long> collect = CommonUtil.parseString(ids);
        String businessModule = BusinessModuleEnum.CORP_PERSON_INFO.getBusinessType();
        String businessType = BusinessTypeEnum.CORP_PERSON_INFO_EXCEL.getCode();
        BaseResponse<FileRespDTO> fileInfoResponse = fileTemplateRSV.getFileInfo(businessModule, businessType);
        FileRespDTO fileData = RemoteInvocationUtil.getResult(fileInfoResponse);
        if (Objects.isNull(fileData) || StringUtils.isBlank(fileData.getFileUrl())) {
            log.info("文件模板不存在,businessModule:{}, businessType:{}", businessModule, businessType);
            return;
        }
        String url = fileData.getFileUrl();
        byte[] result = RemoteInvocationUtil.getResult(fileCommonRSV.download(url));
        if (result != null && result.length != 0) {
            BaseResponse<List<Map<String, String>>> exportResponse = corpPersonSumRSV.export(collect);
            if(ObjectUtils.isNotEmpty(exportResponse) && exportResponse.getSuccess()) {
                String fileName = "列表";

                ExcelUtils.exportExcel(BusinessTypeEnum.CORP_PERSON_INFO_EXCEL, fileName,
                        "Sheet1", result, exportResponse.getResult(), null, resp);
            }
        }
    }

对应的枚举类型:

CORP_PERSON_INFO_EXCEL("corp_base_info_excel","excel导出模板"),
CORP_PERSON_INFO("corp_person_info","corpPersonInfo", "", null, null,
            "人员信息"),

**文件下载:**

controller层代码:

@RequestMapping("/init")
    @ApiOperation(tags = "模板下载", value = "模板下载", httpMethod = "POST")
    public BaseResponseVO<JSONObject> init(){
        HmExcellentProjectFormEntity hmExcellentProjectFormEntity = new HmExcellentProjectFormEntity();

        JSONObject formDefinition = formilyEngineService.getFormilyJsonWithValue(hmExcellentProjectFormEntity, null, null);;
        if (Objects.nonNull(formDefinition)) {

            SafetyDTO safetyDTO = new SafetyDTO();
            safetyDTO.setId(null);
            safetyDTO.setBusinessId(null);
            safetyDTO.setBusinessModule(BusinessModuleEnum.SPONGE_AWARD.name());

            JSONObject jsonObject = new JSONObject(true);
            jsonObject.put("schema", formDefinition);
            jsonObject.put("params", JSONObject.parseObject(JSONObject.toJSONString(safetyDTO)));
            return BaseResponseVO.success(jsonObject);
        }
        return BaseResponseVO.error("失败");
    }
}
@GetMapping("/download")
    public void download(String templateBusinessModule, String templateBusinessType) {

        ServletOutputStream sos = null;
        try {
            //1.获取pdfkey
            BaseResponse<FileRespDTO> fileInfoResponse = FileTemplateRSV.getFileInfo(templateBusinessModule, templateBusinessType);
            if (null == fileInfoResponse || (null != fileInfoResponse && fileInfoResponse.getSuccess() == false)) {
                return;
            }

            FileRespDTO data = fileInfoResponse.getResult();
            if (null == data) {
                return;
            }
            if (StringUtils.isBlank(data.getFileUrl())) {
                return;
            }
            byte[] result = RemoteInvocationUtil.getResult(fileCommonRSV.download(data.getFileUrl()));
            if (result != null && result.length != 0) {
                sos = resp.getOutputStream();
                resp.setContentType(String.format("%s;charset=UTF-8", data.getType()));
                String filename = new String(data.getFileName().getBytes(), "ISO-8859-1");
                resp.addHeader("Content-Disposition", String.format("attachment;filename=%s", filename));
                sos.write(result);
                sos.flush();
            }

        } catch (IOException e) {
            log.error("发生异常===={}", e.getMessage(), e);
        } finally {
            try {
                if (null != sos) {
                    sos.close();
                }
            } catch (IOException e) {
                log.error("发生异常===={}", e.getMessage(), e);
            }
        }
    }

service层代码:

@Override
    public BaseResponse<FileRespDTO> getFileInfo(String businessModule, String businessType) {
        if (StringUtils.isBlank(businessModule) || StringUtils.isBlank(businessType)) {
            return BaseResponse.buildErrorResponse().code(CommonError.Code.PARAM_NOT_NULL.getCode());
        }

        Long fileId = yjFileTemplateRelaService.getFileId(businessModule, businessType);
        FileRespDTO yjFile = yjFileService.getFileInfoById(fileId);

        return BaseResponse.buildSuccessResponse().result(yjFile);
    }
@Override
    public Long getFileId(String businessModule, String businessType) {

        if (StringUtils.isBlank(businessModule) || StringUtils.isBlank(businessType)) {
            return null;
        }
        FileTemplateRelaExample example = new FileTemplateRelaExample();
        FileTemplateRelaExample.Criteria criteria = example.createCriteria();
        criteria.andBusinessModuleEqualTo(businessModule);
        criteria.andBusinessTypeEqualTo(businessType);

        Optional<Collection<FileTemplateRela>> result =  this.queryByExample(example);

        List<FileTemplateRela> fileTemplateRelas = (List<FileTemplateRela>) result.orElse(null);

        if (CollectionUtils.isEmpty(fileTemplateRelas) || ObjectUtils.isEmpty(fileTemplateRelas.get(0))) {
            return null;
        }
        return fileTemplateRelas.get(0).getFileId();
    }
 @Override
    public FileRespDTO getFileInfoById(Long id) {
        if (ObjectUtils.isEmpty(id)) {
            return null;
        }
        FileExample example = new FileExample();
        example.createCriteria().andDeletedEqualTo(CommonConstants.UN_DELETED).andIdEqualTo(id);
        Optional<File> File = this.queryOneByExample(example);
        if (!File.isPresent()) {
            return null;
        }
        return convertFileRespVo(File.get(), null);
    }

对应文件DTO:

@Data
@ApiModel(value = "FileRespDTO", description = "附件信息DTO")
public class FileRespDTO implements Serializable {
    /**
     * 文件名
     */
    @ApiModelProperty(name = "fileName", value = "文件名")
    private String fileName;
    /**
     * 文件唯一key
     */
    @ApiModelProperty(name = "key", value = "文件唯一key")
    private String key;
    /**
     * 文件转pdf的
     */
    @ApiModelProperty(name = "pdfKey", value = "文件转pdf的")
    private String pdfKey;
    /**
     * 文件url
     */
    @ApiModelProperty(name = "fileUrl", value = "文件url")
    private String fileUrl;
    /**
     * pdf文件url
     */
    @ApiModelProperty(name = "pdfFileUrl", value = "文件转pdf后url")
    private String pdfFileUrl;
    /**
     * 文件类型
     */
    @ApiModelProperty(name = "type", value = "文件类型")
    private String type;
    /**
     * 文件内容
     */
    @ApiModelProperty(name = "fileData", value = "文件内容byte数组")
    private byte[] fileData;

    /**
     * 文件内容
     */
    @ApiModelProperty(name = "fileData", value = "文件内容base64")
    private String base64Data;
    /**
     * 文件后缀
     */
    @ApiModelProperty(name = "subbfix", value = "文件后缀")
    private String subbfix;

    /**
     * 业务模块
     */
    @ApiModelProperty(name = "businessModule", value = "业务模块")
    private String businessModule;

    /**
     * 业务类型
     */
    @ApiModelProperty(name = "businessType", value = "业务类型")
    private String businessType;

    @ApiModelProperty(name = "businessId", value = "业务id")
    private Long businessId;

    @ApiModelProperty(name = "gmtCreate", value = "上传时间")
    private Date gmtCreate;

    @ApiModelProperty(name = "gmtCreateStr", value = "上传时间")
    private String gmtCreateStr;

    @ApiModelProperty(name = "creator", value = "上传人")
    private Long creator;

    @ApiModelProperty(name = "creatorName", value = "上传人姓名")
    private String creatorName;

    @ApiModelProperty(name = "fileId", value = "文件id")
    private Long fileId;

    @ApiModelProperty(name = "fileType", value = "文件类型")
    private int fileType;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值