文件打包下载excel导出和word导出

0.文件下载接口

        请求 GET

        /pm/prj/menu/whsj/download/{affixId}

       文件affixId多个id以逗号隔开。多个文件会以打包得形式。

 

1.Excel导出

        1.0接口

POST

127.0.0.1:8400/pm/io/exportExcel/year-plan-table-workflow/report

参数

[{"org":"011","report":"年度计划表","fiscalYear":"2023","mofDivCode":"371000"}] 

文件打包下载excel导出和word导出_第1张图片 

    1.1配置模板

数据要以 [entity.object]为模板配置,而且下方必须空一行不然导入会报错

文件打包下载excel导出和word导出_第2张图片

1.2导入模板配置导出配置

文件打包下载excel导出和word导出_第3张图片

多个集合需要配置多个查询条件,配置得服务接口要跟代码里面得对应服务接口得代码

package com.wenzheng.whsj.prj.export;

import com.wenzheng.module.common.excel.suite.service.DataSourceProvider;
import com.wenzheng.platform.core.bean.LoginUser;
import com.wenzheng.whsj.prj.persistence.entity.YearPlanInfo;
import com.wenzheng.whsj.prj.service.PmPrjConcentrateArgumentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;

/**
 *
 * 年度计划表导出
 *
 * @Author ZRP
 * @Date 2023/10/13 14:36
 */
@Service(value = "gzw.yearPlanTableCloudProjectExport")
public class YearPlanTableCloudProjectExport implements DataSourceProvider {

	@Autowired
	private PmPrjConcentrateArgumentService pmPrjConcentrateArgumentService;


	@Override
	public List> findData(Map param) {
		LoginUser user = new LoginUser();
		user.setFiscalYear(param.get("fiscalYear").toString());
		user.setMofDivCode(param.get("mofDivCode").toString());
		user.setOrgCode(param.get("org").toString());

		YearPlanInfo yearPlanInfo = pmPrjConcentrateArgumentService.selectYearPlan(0, user, null, null, null, null);
		return yearPlanInfo.getCloudProjectList();
	}
}

2.导出word

     2.0接口

年度计划书导出 接口

POST

http://10.30.4.96:8400/pm/io/exportExcel/year-plan-book-workflow/report

文件打包下载excel导出和word导出_第4张图片

参数

[{"org":"011","report":"年度计划书","fiscalYear":"2023","mofDivCode":"371000"}]

   2.1模板

文件打包下载excel导出和word导出_第5张图片

2.2配置模板

文件打包下载excel导出和word导出_第6张图片

2.3编写替换数据代码

 @Autowired
    private PmTemplateAffixService templateAffixService;
    @Autowired
    protected SuiteExportService exportService;
    @Autowired
    private OfficeService officeService;
    @Value("${base.uploadpath:upload}")
    private String uploadPath;
    @Autowired
    private PmBaseAffixMapper affixMapper;
    @Autowired
    private FundsAnalysisService fundsAnalysisService;



@Override
    public ResponseEntity<byte[]> downloadWordReport(HttpServletRequest request, String id, Map params, LoginUser user) throws Exception {
        if (BaseUtils.isNull(id)) {
            return null;
        }
        if (org.apache.commons.collections4.MapUtils.isEmpty(params)) {
            params = new HashMap<>();
            params.put("fiscalYear", user.getFiscalYear());
            params.put("mofDivCode", user.getMofDivCode());
        }
        String useObject = exportService.getExpKeyByExportSwitch("year-plan-table-workflow-report", params, user.getFiscalYear(), user.getMofDivCode(), SuiteExportService.TYPE_WORD);
        // 取得模板
        List lstTemplate = templateAffixService.selectByUseObject(useObject, user.getFiscalYear(),
                user.getMofDivCode());
        if (lstTemplate == null || lstTemplate.isEmpty()) {
            throw new TemplateSetException("模板没定义");
        }
        PmTemplateAffix affixTemp = lstTemplate.get(0);
        byte[] data = affixTemp.getFileData();
        //查询数据
        Map map = pmPrjMeasurementReferenceDao.selectById(id);
        if (map == null) {
            throw new TemplateSetException("暂无当前数据");
        }
        map = initData(map, user, request);
        String prjName = map.get("prj_name").toString();
        String fileName = prjName + affixTemp.getFileName().substring(0, affixTemp.getFileName().indexOf(".")) + "." + affixTemp.getFileType();


        // 替换
        data = officeService.createDoc(data, map);
        createFile(data, map, lstTemplate.get(0), fileName);



        //如果是生成的,则直接返回 如果是下载用下面这些代码直接输出文件流
        HttpHeaders headers = new HttpHeaders();
        // 处理文件名编码问题
        String userAgent = request.getHeader("user-agent");
        if (HttpUtils.isMSBrowser(userAgent)) {
            // 如果是IE浏览器,则用URLEncode解析
            fileName = URLEncoder.encode(fileName, "UTF-8");
            fileName = fileName.replace("+", " ");
        } else {
            // 如果是谷歌、火狐则解析为ISO-8859-1
            fileName = new String(fileName.getBytes("gbk"), StandardCharsets.ISO_8859_1);
        }
        headers.set("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        return new ResponseEntity<>(data, headers, HttpStatus.OK);
    }



//创建文件出来,存入文件库 获得文件要下载文件id
public String createFile(byte[] data, Map map, PmTemplateAffix pmTemplateAffix, String fileName) {
        String useObject = "yearPlanReport";
        DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
        String dateStr = dateFormat.format(new Date());
        String uuidName = UUID.randomUUID().toString();
        String fileRealName = UUID.randomUUID().toString();

        File templateAffixFile = null;
        try {
            templateAffixFile = FileTool.fileToBytes(data, uploadPath + "/" + useObject + "/" + dateStr + "/", "/" + uuidName);
        } catch (Exception e) {
            System.err.println("===========>" + e.getMessage());
        }
        MultipartFile multipartFile = FileTool.getMultipartFile(templateAffixFile);
        PmBaseAffix affix = new PmBaseAffix();
        affix.setAffixId(UUID.randomUUID().toString());
        if (map.get("affix_id") != null) {
            affix.setPrjId(map.get("affix_id").toString());
        } else {
            affix.setPrjId(UUID.randomUUID().toString());
        }
        affix.setJobId(affix.getPrjId());
        affix.setUseObject(useObject);
        affix.setFileType(pmTemplateAffix.getFileType());
        affix.setFileSize(BaseUtils.sizeParse(multipartFile.getSize()));
        affix.setFileName(fileName);
        affix.setFileTitle(fileName);
        affix.setFileRealName(uuidName);
        affix.setFilePath(File.separator + affix.getUseObject() + File.separator + dateStr);
        affix.setUpdateTime(new Date());
        List pmBaseAffix = pmPrjMeasurementReferenceDao.selectByPrjCode(affix.getPrjId(), useObject);
        if (pmBaseAffix.size() == 0) {
            affixMapper.insert(affix);
        } else {
            affix.setAffixId(pmBaseAffix.get(0).getAffixId());
            affixMapper.updateByPrimaryKeySelective(affix);
        }
        return affix.getAffixId();
    }


用到的工具方法

/**
	 * 将Byte数组转换成文件
	 *
	 * @param bytes    byte数组
	 * @param filePath 文件路径  如 D:\\Users\\Downloads\\
	 * @param fileName 文件名
	 */
	public static File fileToBytes(byte[] bytes, String filePath, String fileName) {
		BufferedOutputStream bos = null;
		FileOutputStream fos = null;
		File file = null;
		try {
			file = new File(filePath + fileName);
			if (!file.getParentFile().exists()) {
				//文件夹不存在 生成
				file.getParentFile().mkdirs();
			}
			fos = new FileOutputStream(file);
			bos = new BufferedOutputStream(fos);
			bos.write(bytes);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (bos != null) {
				try {
					bos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (fos != null) {
				try {
					fos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return file;
	}

	public static  MultipartFile getMultipartFile(File file) {
		FileInputStream fileInputStream = null;
		MultipartFile multipartFile = null;
		try {
			fileInputStream = new FileInputStream(file);
			multipartFile = new MockMultipartFile(file.getName(), file.getName(),
					ContentType.APPLICATION_OCTET_STREAM.toString(), fileInputStream);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return multipartFile;
	}

你可能感兴趣的:(excel,word)