package com.yuanchu.mom.service.impl;
|
|
import cn.hutool.core.date.DateUtil;
|
import com.alibaba.excel.EasyExcel;
|
import com.alibaba.excel.context.AnalysisContext;
|
import com.alibaba.excel.event.AnalysisEventListener;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.deepoove.poi.XWPFTemplate;
|
import com.deepoove.poi.config.Configure;
|
import com.deepoove.poi.data.Pictures;
|
import com.yuanchu.mom.common.GetLook;
|
import com.yuanchu.mom.dto.QualityMonitorDetailsEvaluateDto;
|
import com.yuanchu.mom.dto.QualityMonitorDto;
|
import com.yuanchu.mom.excel.QualityMonitorDetailsUpload;
|
import com.yuanchu.mom.exception.ErrorException;
|
import com.yuanchu.mom.mapper.*;
|
import com.yuanchu.mom.pojo.*;
|
import com.yuanchu.mom.service.QualityMonitorDetailsEvaluateService;
|
import com.yuanchu.mom.service.QualityMonitorDetailsRatifyService;
|
import com.yuanchu.mom.service.QualityMonitorDetailsService;
|
import com.yuanchu.mom.service.QualityMonitorService;
|
import com.yuanchu.mom.utils.HackLoopTableRenderPolicy;
|
import com.yuanchu.mom.utils.XWPFDocumentUtils;
|
import com.yuanchu.mom.utils.DateImageUtil;
|
import com.yuanchu.mom.utils.QueryWrappers;
|
import com.yuanchu.mom.utils.UserUtils;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.File;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.io.OutputStream;
|
import java.net.URLEncoder;
|
import java.time.LocalDateTime;
|
import java.time.format.DateTimeFormatter;
|
import java.util.*;
|
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.stream.Collectors;
|
|
/**
|
* 质量监控计划主表
|
*
|
* @author zhuo
|
* @since 2024-11-06
|
*/
|
@Service
|
@Transactional(rollbackFor = Exception.class)
|
public class QualityMonitorServiceImpl extends ServiceImpl<QualityMonitorMapper, QualityMonitor> implements QualityMonitorService {
|
|
@Resource
|
private QualityMonitorDetailsService qualityMonitorDetailsService;
|
@Resource
|
private QualityMonitorDetailsMapper qualityMonitorDetailsMapper;
|
@Resource
|
private UserMapper userMapper;
|
@Resource
|
private QualityMonitorDetailsRatifyMapper qualityMonitorDetailsRatifyMapper;
|
@Resource
|
private QualityMonitorDetailsRatifyService qualityMonitorDetailsRatifyService;
|
@Resource
|
private QualityMonitorDetailsEvaluateMapper qualityMonitorDetailsEvaluateMapper;
|
@Resource
|
private QualityMonitorDetailsEvaluateService qualityMonitorDetailsEvaluateService;
|
@Resource
|
private QualityMonitorDetailsEvaluateFileMapper qualityMonitorDetailsEvaluateFileMapper;
|
@Resource
|
private GetLook getLook;
|
@Value("${file.path}")
|
private String imgUrl;
|
|
@Value("${wordUrl}")
|
private String wordUrl;
|
|
|
/**
|
* 导入监控计划
|
* @param file
|
* @return
|
*/
|
@Override
|
public boolean importQualityMonitor(MultipartFile file) {
|
// 当前登录用户
|
Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
|
// 文件名称
|
String fileName = file.getOriginalFilename().substring(0, file.getOriginalFilename().lastIndexOf("."));
|
QualityMonitor qualityMonitor = new QualityMonitor();
|
qualityMonitor.setMonitorName(fileName);
|
qualityMonitor.setWriteUserId(userId);
|
qualityMonitor.setWriteTime(LocalDateTime.now());
|
baseMapper.insert(qualityMonitor);
|
|
List<QualityMonitorDetails> detailsUploadList = new ArrayList<>();
|
|
// 导入附件内容
|
try {
|
// excel解析
|
EasyExcel.read(file.getInputStream(), QualityMonitorDetailsUpload.class, new AnalysisEventListener<QualityMonitorDetailsUpload>() {
|
@Override
|
public void invoke(QualityMonitorDetailsUpload detailsUpload, AnalysisContext analysisContext) {
|
// 判断是否为空
|
if (StringUtils.isNotBlank(detailsUpload.getPlannedTime()) &&
|
StringUtils.isNotBlank(detailsUpload.getMonitorProject()) &&
|
StringUtils.isNotBlank(detailsUpload.getParticipant()) &&
|
StringUtils.isNotBlank(detailsUpload.getBudget()) &&
|
StringUtils.isNotBlank(detailsUpload.getOrganization()) &&
|
StringUtils.isNotBlank(detailsUpload.getMonitorWay())) {
|
// 对象复制
|
QualityMonitorDetails monitorDetails = new QualityMonitorDetails();
|
BeanUtils.copyProperties(detailsUpload, monitorDetails);
|
monitorDetails.setQualityMonitorId(qualityMonitor.getQualityMonitorId());
|
|
detailsUploadList.add(monitorDetails);
|
}
|
}
|
@Override
|
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
|
|
}
|
}).sheet().doRead();
|
qualityMonitorDetailsService.saveBatch(detailsUploadList);
|
|
} catch (IOException e) {
|
throw new RuntimeException(e);
|
}
|
return true;
|
}
|
|
/**
|
* 监控计划审核
|
* @param qualityMonitor
|
* @return
|
*/
|
@Override
|
public boolean examineQualityMonitor(QualityMonitor qualityMonitor) {
|
// 当前登录用户
|
Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
|
baseMapper.update(null, Wrappers.<QualityMonitor>lambdaUpdate()
|
.eq(QualityMonitor::getQualityMonitorId, qualityMonitor.getQualityMonitorId())
|
.set(QualityMonitor::getExamineUserId, userId)
|
.set(QualityMonitor::getExamineRemark, qualityMonitor.getExamineRemark())
|
.set(QualityMonitor::getExamineStatus, qualityMonitor.getExamineStatus())
|
.set(QualityMonitor::getExamineTime, LocalDateTime.now())
|
);
|
return true;
|
}
|
|
/**
|
* 监控计划批准
|
* @param qualityMonitor
|
* @return
|
*/
|
@Override
|
public boolean ratifyQualityMonitor(QualityMonitor qualityMonitor) {
|
// 当前登录用户
|
Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
|
baseMapper.update(null, Wrappers.<QualityMonitor>lambdaUpdate()
|
.eq(QualityMonitor::getQualityMonitorId, qualityMonitor.getQualityMonitorId())
|
.set(QualityMonitor::getRatifyUserId, userId)
|
.set(QualityMonitor::getRatifyRemark, qualityMonitor.getRatifyRemark())
|
.set(QualityMonitor::getRatifyStatus, qualityMonitor.getRatifyStatus())
|
.set(QualityMonitor::getRatifyTime, LocalDateTime.now())
|
);
|
return true;
|
}
|
|
/**
|
* 监控计划列表
|
* @param page
|
* @param qualityMonitor
|
* @return
|
*/
|
@Override
|
public IPage<QualityMonitorDto> pageQualityMonitor(Page page, QualityMonitor qualityMonitor) {
|
return baseMapper.pageQualityMonitor(page, QueryWrappers.queryWrappers(qualityMonitor));
|
}
|
|
/**
|
* 监控计划详情列表
|
* @param page
|
* @param qualityMonitorDetails
|
* @return
|
*/
|
@Override
|
public IPage<QualityMonitorDetails> pageQualityMonitorDetail(Page page, QualityMonitorDetails qualityMonitorDetails) {
|
if (qualityMonitorDetails.getQualityMonitorId() == null) {
|
return new Page();
|
}
|
return qualityMonitorDetailsMapper.pageQualityMonitorDetail(page, QueryWrappers.queryWrappers(qualityMonitorDetails));
|
}
|
|
/**
|
* 导出监控计划
|
* @param qualityMonitorId
|
* @param response
|
*/
|
@Override
|
public void exportQualityMonitorDetail(Integer qualityMonitorId, HttpServletResponse response) {
|
// 查询详情
|
QualityMonitor qualityMonitor = baseMapper.selectById(qualityMonitorId);
|
|
//获取提交人的签名地址
|
String writeUrl = userMapper.selectById(qualityMonitor.getWriteUserId()).getSignatureUrl();
|
if (ObjectUtils.isEmpty(writeUrl) || writeUrl.equals("")) {
|
throw new ErrorException("找不到检验人的签名");
|
}
|
|
//获取复核人的签名地址
|
String examineUrl = null;
|
if (qualityMonitor.getExamineUserId() != null) {
|
examineUrl = userMapper.selectById(qualityMonitor.getExamineUserId()).getSignatureUrl();
|
if (StringUtils.isBlank(examineUrl)) {
|
throw new ErrorException("找不到复核人的签名");
|
}
|
}
|
|
//获取批准人的签名地址
|
String ratifyUrl = null;
|
if (qualityMonitor.getRatifyUserId() != null) {
|
ratifyUrl = userMapper.selectById(qualityMonitor.getRatifyUserId()).getSignatureUrl();
|
if (StringUtils.isBlank(ratifyUrl)) {
|
throw new ErrorException("找不到复核人的签名");
|
}
|
}
|
|
// 查询详情
|
List<QualityMonitorDetails> qualityMonitorDetails = qualityMonitorDetailsMapper.selectList(Wrappers.<QualityMonitorDetails>lambdaQuery()
|
.eq(QualityMonitorDetails::getQualityMonitorId, qualityMonitorId));
|
|
// 判断监控目的一样的值
|
AtomicInteger count = new AtomicInteger(1);
|
Map<String, List<QualityMonitorDetails>> listMap = qualityMonitorDetails.stream().collect(Collectors.groupingBy(QualityMonitorDetails::getMonitorPurpose));
|
listMap.forEach((s, details) -> {
|
// 查询数量超过1的
|
if (details.size() > 1) {
|
for (QualityMonitorDetails detail : details) {
|
detail.setMonitorPurpose(detail.getMonitorPurpose() + "∑" + count);
|
}
|
count.getAndIncrement();
|
}
|
});
|
|
int index = 1;
|
for (QualityMonitorDetails qualityMonitorDetail : qualityMonitorDetails) {
|
qualityMonitorDetail.setIndex(index);
|
index++;
|
}
|
|
// 获取路径
|
InputStream inputStream = this.getClass().getResourceAsStream("/static/quality-monitor.docx");
|
String finalExamineUrl = examineUrl;
|
String finalRatifyUrl = ratifyUrl;
|
Configure configure = Configure.builder()
|
.bind("monitorDetailList", new HackLoopTableRenderPolicy())
|
.build();
|
XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
|
new HashMap<String, Object>() {{
|
put("monitorDetailList", qualityMonitorDetails);
|
put("writeUrl", StringUtils.isNotBlank(writeUrl) ? Pictures.ofLocal(imgUrl + "/" + writeUrl).create() : null);
|
put("examineUrl", StringUtils.isNotBlank(finalExamineUrl) ? Pictures.ofLocal(imgUrl + "/" + finalExamineUrl).create() : null);
|
put("ratifyUrl", StringUtils.isNotBlank(finalRatifyUrl) ? Pictures.ofLocal(imgUrl + "/" + finalRatifyUrl).create() : null);
|
put("writeDateUrl", qualityMonitor.getWriteTime() != null ?
|
Pictures.ofStream(DateImageUtil.createDateImage(qualityMonitor.getWriteTime())).create() : null);
|
put("examineDateUrl", qualityMonitor.getExamineTime() != null ?
|
Pictures.ofStream(DateImageUtil.createDateImage(qualityMonitor.getExamineTime())).create() : null);
|
put("ratifyDateUrl", qualityMonitor.getRatifyTime() != null ?
|
Pictures.ofStream(DateImageUtil.createDateImage(qualityMonitor.getRatifyTime())).create() : null);
|
}});
|
|
// 处理换行问题
|
XWPFDocumentUtils.updateMergeByDocument(template.getXWPFDocument());
|
try {
|
response.setContentType("application/msword");
|
String fileName = URLEncoder.encode(
|
qualityMonitor.getMonitorName(), "UTF-8");
|
response.setHeader("Content-disposition",
|
"attachment;filename=" + fileName + ".docx");
|
OutputStream os = response.getOutputStream();
|
template.write(os);
|
os.flush();
|
os.close();
|
} catch (Exception e) {
|
e.printStackTrace();
|
throw new RuntimeException("导出失败");
|
}
|
}
|
|
|
|
/************************************************************ 批准 *******************************************************************/
|
|
/**
|
* 查询监控计划详情实施信息
|
* @param qualityMonitorDetailsId
|
* @return
|
*/
|
@Override
|
public QualityMonitorDetailsRatify getQualityMonitorRatify(Integer qualityMonitorDetailsId) {
|
QualityMonitorDetailsRatify qualityMonitorDetailsRatify;
|
// 查询监控部门id
|
qualityMonitorDetailsRatify = qualityMonitorDetailsRatifyMapper.selectOne(Wrappers.<QualityMonitorDetailsRatify>lambdaQuery()
|
.eq(QualityMonitorDetailsRatify::getQualityMonitorDetailsId, qualityMonitorDetailsId));
|
|
if (qualityMonitorDetailsRatify == null) {
|
// 查询详情计划
|
QualityMonitorDetails qualityMonitorDetails = qualityMonitorDetailsMapper.selectById(qualityMonitorDetailsId);
|
qualityMonitorDetailsRatify = new QualityMonitorDetailsRatify();
|
qualityMonitorDetailsRatify.setQualityMonitorDetailsId(qualityMonitorDetailsId); // 详情id
|
qualityMonitorDetailsRatify.setMonitorProject(qualityMonitorDetails.getMonitorProject()); // 监控项目
|
qualityMonitorDetailsRatify.setMonitorData(DateUtil.format(new Date(), "yyyy-MM")); // 监控时间
|
qualityMonitorDetailsRatify.setMonitorPurpose(qualityMonitorDetails.getMonitorPurpose()); // 监控目的
|
qualityMonitorDetailsRatify.setParticipant(qualityMonitorDetails.getParticipant()); // 参加人员
|
qualityMonitorDetailsRatify.setBudget(qualityMonitorDetails.getBudget()); // 预算
|
qualityMonitorDetailsRatify.setInspectionDepartment(userMapper.selectUserDepartmentLimsName(getLook.selectPowerByMethodAndUserId(null).get("userId")));
|
}
|
|
if (qualityMonitorDetailsRatify.getRatifyUserId() != null) {
|
qualityMonitorDetailsRatify.setRatifyName(userMapper.selectById(qualityMonitorDetailsRatify.getRatifyUserId()).getName());
|
}
|
|
return qualityMonitorDetailsRatify;
|
}
|
|
/**
|
* 新增监控批准实施
|
* @param qualityMonitorDetailsRatify
|
* @return
|
*/
|
@Override
|
public boolean addQualityMonitorRatify(QualityMonitorDetailsRatify qualityMonitorDetailsRatify) {
|
if (qualityMonitorDetailsRatify.getQualityMonitorDetailsId() == null) {
|
throw new ErrorException("缺少监控详细信息id");
|
}
|
qualityMonitorDetailsRatifyService.saveOrUpdate(qualityMonitorDetailsRatify);
|
return true;
|
}
|
|
/**
|
* 监控计划详情批准意见
|
* @param qualityMonitorDetailsRatify
|
* @return
|
*/
|
@Override
|
public boolean addQualityMonitorRatifyOpinion(QualityMonitorDetailsRatify qualityMonitorDetailsRatify) {
|
qualityMonitorDetailsRatifyService.update(Wrappers.<QualityMonitorDetailsRatify>lambdaUpdate()
|
.eq(QualityMonitorDetailsRatify::getDetailsRatifyId, qualityMonitorDetailsRatify.getDetailsRatifyId())
|
.set(QualityMonitorDetailsRatify::getRatifyOpinion, qualityMonitorDetailsRatify.getRatifyOpinion())
|
.set(QualityMonitorDetailsRatify::getIsFinish, 1));
|
return true;
|
}
|
|
/**
|
* 导出监控计划详情实施信息
|
*
|
* @param detailsRatifyId 监控计划详情实施id
|
* @param response 响应
|
*/
|
@Override
|
public void exportQualityMonitorRatify(Integer detailsRatifyId, HttpServletResponse response) {
|
QualityMonitorDetailsRatify qualityMonitorDetailsRatify = qualityMonitorDetailsRatifyMapper.selectById(detailsRatifyId);
|
|
// 获取路径
|
InputStream inputStream = this.getClass().getResourceAsStream("/static/quality-monitor-details-ratify.docx");
|
Configure configure = Configure.builder()
|
.bind("processMethodVerifyMachineAttachmentList", new HackLoopTableRenderPolicy())
|
.build();
|
XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
|
new HashMap<String, Object>() {{
|
put("qualityMonitorDetailsRatify", qualityMonitorDetailsRatify);
|
put("ratifyUserUrl", UserUtils.getFinalUserSignatureUrl(qualityMonitorDetailsRatify.getRatifyUserId()));
|
}});
|
|
// 处理换行问题
|
XWPFDocumentUtils.updateMergeByDocument(template.getXWPFDocument());
|
try {
|
response.setContentType("application/msword");
|
String fileName = URLEncoder.encode(
|
"质量监控实施计划", "UTF-8");
|
response.setHeader("Content-disposition",
|
"attachment;filename=" + fileName + ".docx");
|
OutputStream os = response.getOutputStream();
|
template.write(os);
|
os.flush();
|
os.close();
|
} catch (Exception e) {
|
e.printStackTrace();
|
throw new RuntimeException("导出失败");
|
}
|
}
|
|
/************************************************************ 评价 *******************************************************************/
|
|
/**
|
* 查询质量监控评价
|
* @param qualityMonitorDetailsId
|
* @return
|
*/
|
@Override
|
public QualityMonitorDetailsEvaluate getQualityMonitorEvaluate(Integer qualityMonitorDetailsId) {
|
return qualityMonitorDetailsEvaluateMapper.getQualityMonitorEvaluate(qualityMonitorDetailsId);
|
}
|
|
/**
|
* 新增监控评价
|
* @param qualityMonitorDetailsEvaluate
|
* @return
|
*/
|
@Override
|
public boolean addQualityMonitorEvaluate(QualityMonitorDetailsEvaluate qualityMonitorDetailsEvaluate) {
|
if (qualityMonitorDetailsEvaluate.getQualityMonitorDetailsId() == null) {
|
throw new ErrorException("缺少监控详细信息id");
|
}
|
return qualityMonitorDetailsEvaluateService.saveOrUpdate(qualityMonitorDetailsEvaluate);
|
}
|
|
/**
|
* 监控评价审批意见
|
* @param qualityMonitorDetailsEvaluate
|
* @return
|
*/
|
@Override
|
public boolean addMonitorEvaluateOpinion(QualityMonitorDetailsEvaluate qualityMonitorDetailsEvaluate) {
|
qualityMonitorDetailsEvaluateService.update(Wrappers.<QualityMonitorDetailsEvaluate>lambdaUpdate()
|
.eq(QualityMonitorDetailsEvaluate::getDetailsEvaluateId, qualityMonitorDetailsEvaluate.getDetailsEvaluateId())
|
.set(QualityMonitorDetailsEvaluate::getRatifyOpinion, qualityMonitorDetailsEvaluate.getRatifyOpinion())
|
.set(QualityMonitorDetailsEvaluate::getRatifyTime, LocalDateTime.now())
|
.set(QualityMonitorDetailsEvaluate::getIsFinish, 1));
|
return true;
|
}
|
|
/**
|
* 新增监控评价附件表
|
* @param detailsEvaluateId
|
* @param file
|
* @return
|
*/
|
@Override
|
public boolean uploadEvaluateFile(Integer detailsEvaluateId, MultipartFile file) {
|
if (detailsEvaluateId == null) {
|
throw new ErrorException("缺少监控详情id");
|
}
|
|
String urlString;
|
String pathName;
|
String path;
|
String filename = file.getOriginalFilename();
|
String contentType = file.getContentType();
|
QualityMonitorDetailsEvaluateFile evaluateFile = new QualityMonitorDetailsEvaluateFile();
|
evaluateFile.setDetailsEvaluateId(detailsEvaluateId);
|
evaluateFile.setFileName(filename);
|
if (contentType != null && contentType.startsWith("image/")) {
|
// 是图片
|
path = imgUrl;
|
evaluateFile.setType(1);
|
} else {
|
// 是文件
|
path = wordUrl;
|
evaluateFile.setType(2);
|
}
|
try {
|
File realpath = new File(path);
|
if (!realpath.exists()) {
|
realpath.mkdirs();
|
}
|
pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + file.getOriginalFilename();
|
urlString = realpath + "/" + pathName;
|
file.transferTo(new File(urlString));
|
evaluateFile.setFileUrl(pathName);
|
qualityMonitorDetailsEvaluateFileMapper.insert(evaluateFile);
|
return true;
|
} catch (Exception e) {
|
e.printStackTrace();
|
System.err.println("附件上传错误");
|
return false;
|
}
|
}
|
|
/**
|
* 查询监控评价附件列表
|
* @return
|
*/
|
@Override
|
public List<QualityMonitorDetailsEvaluateFile> getEvaluateFileList(Integer detailsEvaluateId) {
|
return qualityMonitorDetailsEvaluateFileMapper.selectList(Wrappers.<QualityMonitorDetailsEvaluateFile>lambdaQuery()
|
.eq(QualityMonitorDetailsEvaluateFile::getDetailsEvaluateId, detailsEvaluateId));
|
}
|
|
/**
|
* 导出监控评价
|
* @param detailsEvaluateId 监控评价id
|
*/
|
@Override
|
public void exportQualityMonitorEvaluate(Integer detailsEvaluateId, HttpServletResponse response) {
|
// 查询监控评价信息
|
QualityMonitorDetailsEvaluate qualityMonitorDetailsEvaluate = qualityMonitorDetailsEvaluateMapper.selectById(detailsEvaluateId);
|
// 渲染word模板对象
|
QualityMonitorDetailsEvaluateDto qualityMonitorDetailsEvaluateDto = new QualityMonitorDetailsEvaluateDto();
|
BeanUtils.copyProperties(qualityMonitorDetailsEvaluate, qualityMonitorDetailsEvaluateDto);
|
// 格式化时间
|
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
qualityMonitorDetailsEvaluateDto.setRatifyTimeStr(qualityMonitorDetailsEvaluate.getRatifyTime().format(dateTimeFormatter));
|
// 获取路径
|
InputStream inputStream = this.getClass().getResourceAsStream("/static/quality-monitor-evaluate.docx");
|
Configure configure = Configure.builder()
|
.build();
|
XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
|
new HashMap<String, Object>() {{
|
put("qualityMonitorDetailsEvaluate", qualityMonitorDetailsEvaluateDto);
|
put("implementUserUrl", UserUtils.getFinalUserSignatureUrl(Integer.valueOf(qualityMonitorDetailsEvaluate.getImplementUserId())));
|
put("ratifyUserUrl", UserUtils.getFinalUserSignatureUrl(qualityMonitorDetailsEvaluate.getRatifyUserId()));
|
}});
|
|
// 处理换行问题
|
XWPFDocumentUtils.updateMergeByDocument(template.getXWPFDocument());
|
try {
|
response.setContentType("application/msword");
|
String fileName = URLEncoder.encode(
|
"监控评价", "UTF-8");
|
response.setHeader("Content-disposition",
|
"attachment;filename=" + fileName + ".docx");
|
OutputStream os = response.getOutputStream();
|
template.write(os);
|
os.flush();
|
os.close();
|
} catch (Exception e) {
|
e.printStackTrace();
|
throw new RuntimeException("导出失败");
|
}
|
}
|
}
|