package com.yuanchu.mom.service.impl;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.yuanchu.mom.common.GetLook;
import com.yuanchu.mom.common.PrintChina;
import com.yuanchu.mom.dto.InspectionOrderExportDto;
import com.yuanchu.mom.dto.ProcessOrderDto;
import com.yuanchu.mom.exception.ErrorException;
import com.yuanchu.mom.mapper.InsOrderMapper;
import com.yuanchu.mom.mapper.UserMapper;
import com.yuanchu.mom.pojo.*;
import com.yuanchu.mom.mapper.ProcessOrderMapper;
import com.yuanchu.mom.pojo.InspectionOrderDetail;
import com.yuanchu.mom.service.ProcessOrderService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.utils.HackLoopTableRenderPolicy;
import com.yuanchu.mom.utils.XWPFDocumentUtils;
import com.yuanchu.mom.utils.QueryWrappers;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*
* 要求、标书和合同评审 服务实现类
*
*
* @author
* @since 2024-11-05 03:06:20
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class ProcessOrderServiceImpl extends ServiceImpl implements ProcessOrderService {
@Resource
private ProcessOrderMapper processOrderMapper;
@Resource
InsOrderMapper insOrderMapper;
@Resource
private UserMapper userMapper;
@Override
public Map pageProcessOrder(Page page, ProcessOrderDto processOrderDto) {
Map map = new HashMap<>();
map.put("head", PrintChina.printChina(ProcessOrderDto.class));
map.put("body", processOrderMapper.pageProcessOrder(page, QueryWrappers.queryWrappers(processOrderDto)));
return map;
}
@Override
public ProcessOrderDto getProcessOrder(Integer id) {
return processOrderMapper.getProcessOrder(id);
}
@Override
public int doProcessOrder(ProcessOrder processOrder) {
if (ObjectUtils.isNotEmpty(processOrder.getComprehensiveUser())) {
User user = userMapper.selectById(processOrder.getComprehensiveUser());
if (ObjectUtils.isEmpty(user.getSignatureUrl())) throw new ErrorException("未找到综合室签名人的电子签名,请上传电子签名!");
}
if (ObjectUtils.isNotEmpty(processOrder.getIssueUser())) {
User user = userMapper.selectById(processOrder.getIssueUser());
if (ObjectUtils.isEmpty(user.getSignatureUrl())) throw new ErrorException("未找到领样员的电子签名,请上传电子签名!");
}
return processOrderMapper.updateById(processOrder);
}
@Override
public void exportInspectionOrder(Integer id, HttpServletResponse response) {
ProcessOrder processOrder = baseMapper.selectById(id);
InspectionOrderExportDto inspectionOrderExportDto = extracted(processOrder);
List list = baseMapper.selectInsOrder(processOrder.getInsOrderId());
int index = 1;
for (InspectionOrderDetail inspectionOrderDetail : list) {
inspectionOrderDetail.setIndex(index);
index++;
}
// 获取路径
InputStream inputStream = this.getClass().getResourceAsStream("/static/inspection-order.docx");
Configure configure = Configure.builder()
.bind("inspectionOrderDetailList", new HackLoopTableRenderPolicy())
.build();
XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
new HashMap() {{
put("inspectionOrder", inspectionOrderExportDto);
put("inspectionOrderDetailList", list);
}});
// 处理换行问题
XWPFDocumentUtils.updateMergeByDocument(template.getXWPFDocument());
try {
response.setContentType("application/msword");
String fileName = URLEncoder.encode(
inspectionOrderExportDto.getSample(), "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("导出失败");
}
}
private InspectionOrderExportDto extracted(ProcessOrder processOrder) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
InspectionOrderExportDto inspectionOrderExportDto = new InspectionOrderExportDto();
ProcessOrderDto processOrderDto = getProcessOrder(processOrder.getId());
BeanUtils.copyProperties(processOrderDto, inspectionOrderExportDto);
if (processOrderDto.getCreateTime() != null) {
inspectionOrderExportDto.setCommissionDateString(processOrderDto.getCreateTime().format(formatter));
}
if (processOrder.getComprehensiveTime() != null) {
inspectionOrderExportDto.setReceiptDataString(processOrder.getComprehensiveTime().format(formatter));
}
if (processOrder.getIssueTime() != null) {
inspectionOrderExportDto.setSampleDataString(processOrder.getIssueTime().format(formatter));
}
if (processOrderDto.getAppointed() != null) {
inspectionOrderExportDto.setAppointedString(processOrderDto.getAppointed().format(formatter));
}
inspectionOrderExportDto.setIsLeave1(processOrderDto.getIsLeave() != null && processOrderDto.getIsLeave() == 1 ? "☑" : "□");
inspectionOrderExportDto.setIsLeave2(processOrderDto.getIsLeave() != null && processOrderDto.getIsLeave() == 0 ? "☑" : "□");
inspectionOrderExportDto.setSend0(processOrderDto.getSend() != null && processOrderDto.getSend() == 1 ? "☑" : "□");
inspectionOrderExportDto.setSend1(processOrderDto.getSend() != null && processOrderDto.getSend() == 0 ? "☑" : "□");
inspectionOrderExportDto.setProcessing0(processOrderDto.getProcessing() != null && processOrderDto.getProcessing() == 0 ? "☑" : "□");
inspectionOrderExportDto.setProcessing1(processOrderDto.getProcessing() != null && processOrderDto.getProcessing() == 1 ? "☑" : "□");
if (ObjectUtils.isNotEmpty(processOrder.getRule())) {
inspectionOrderExportDto.setCriterionRule0(processOrder.getRule().equals("不考虑不确定度") ? "☑" : "□");
inspectionOrderExportDto.setCriterionRule1(processOrder.getRule().contains("-") ? "☑" : "□");
inspectionOrderExportDto.setCriterionRuleRemark(processOrder.getRule().contains("-") ? processOrder.getRule().split("-")[1] : "");
}
return inspectionOrderExportDto;
}
}