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; } }