package com.ruoyi.process.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; 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.ruoyi.common.utils.QueryWrappers; import com.ruoyi.framework.exception.ErrorException; import com.ruoyi.inspect.pojo.InsOrder; import com.ruoyi.inspect.pojo.InsReport; import com.ruoyi.inspect.service.InsOrderService; import com.ruoyi.inspect.service.InsReportService; import com.ruoyi.inspect.util.HackLoopTableRenderPolicy; import com.ruoyi.process.dto.InspectionOrderDto; import com.ruoyi.process.dto.InspectionOrderExportDto; import com.ruoyi.process.mapper.InspectionOrderMapper; import com.ruoyi.process.pojo.InspectionOrder; import com.ruoyi.process.pojo.InspectionOrderDetail; import com.ruoyi.process.pojo.ProcessReport; import com.ruoyi.process.service.InspectionOrderDetailService; import com.ruoyi.process.service.InspectionOrderService; import com.ruoyi.process.service.ProcessReportService; 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.InputStream; import java.io.OutputStream; import java.net.URLEncoder; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.HashMap; import java.util.List; /** *

* 检验委托单 服务实现类 *

* * @author 江苏鵷雏网络科技有限公司 * @since 2024-12-09 */ @Service @Transactional(rollbackFor = Exception.class) public class InspectionOrderServiceImpl extends ServiceImpl implements InspectionOrderService { @Resource private InspectionOrderDetailService inspectionOrderDetailService; @Resource private InsOrderService insOrderService; @Resource private InsReportService insReportService; @Value("${wordUrl}") private String wordUrl; @Resource private ProcessReportService processReportService; /** * 检验委托单分页查询 * @param page * @param InspectionOrder * @return */ @Override public IPage pageInspectionOrder(Page page, InspectionOrder InspectionOrder) { return baseMapper.pageInspectionOrder(page, QueryWrappers.queryWrappers(InspectionOrder)); } /** * 检验委托单新增 * @param inspectionOrder * @return */ @Override public boolean addInspectionOrder(InspectionOrderDto inspectionOrder) { if (inspectionOrder.getInsOrderId() == null) { throw new ErrorException("缺少订单id"); } // 复制报告 // 查询订单报告 InsReport insReport = insReportService.getOne(Wrappers.lambdaQuery() .eq(InsReport::getInsOrderId, inspectionOrder.getInsOrderId())); String path = wordUrl + insReport.getUrl().replaceFirst("/word", ""); String fileName =LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + "委托单报告.docx"; // 源文件路径 Path sourcePath = Paths.get(path); // 目标文件路径 Path targetPath = Paths.get(wordUrl + "/" + fileName); try { // 复制文件,如果目标文件已存在,则覆盖 Files.copy(sourcePath, targetPath, StandardCopyOption.REPLACE_EXISTING); // 添加文件地址 inspectionOrder.setFileUrl("/word/" + fileName); } catch (Exception e) { e.printStackTrace(); } baseMapper.insert(inspectionOrder); // 新增详情 if (CollectionUtils.isNotEmpty(inspectionOrder.getOrderDetailList())) { for (InspectionOrderDetail InspectionOrderDetail : inspectionOrder.getOrderDetailList()) { InspectionOrderDetail.setInspectionOrderId(inspectionOrder.getInspectionOrderId()); } inspectionOrderDetailService.saveBatch(inspectionOrder.getOrderDetailList()); } //新增7.8报告结果 ProcessReport processReport = new ProcessReport(); processReport.setInspectionOrderId(inspectionOrder.getInsOrderId()); processReport.setInsReportCode(inspectionOrder.getEntrustCode());//报告编号=委托编号 //页数 try { com.aspose.words.Document doc = new com.aspose.words.Document(path); processReport.setPages(doc.getPageCount()+""); } catch (Exception e) { } processReport.setNumber("1");//发送份数默认1 processReport.setSend(inspectionOrder.getCommissionUnit());//发往何处=委托单位 processReport.setMethod(inspectionOrder.getSend()==1?"自取":"其他");//发送方式 processReport.setSendTime(insReport.getRatifyTime().toLocalDate());//发送日期 processReport.setSendUser(64);//发送人固定 processReport.setSignatory(inspectionOrder.getCommissionUser());//签收人=委托人 processReportService.save(processReport); return true; } /** * 检验委托单修改 * @param InspectionOrder * @return */ @Override public boolean updateInspectionOrder(InspectionOrderDto InspectionOrder) { baseMapper.updateById(InspectionOrder); // 删除之前的详情 inspectionOrderDetailService.remove(Wrappers.lambdaQuery() .eq(InspectionOrderDetail::getInspectionOrderId, InspectionOrder.getInspectionOrderId())); // 新增详情 for (InspectionOrderDetail InspectionOrderDetail : InspectionOrder.getOrderDetailList()) { InspectionOrderDetail.setInspectionOrderId(InspectionOrder.getInspectionOrderId()); } inspectionOrderDetailService.saveBatch(InspectionOrder.getOrderDetailList()); //修改7.9报告结果 ProcessReport processReport = processReportService.getOne(Wrappers.lambdaQuery().eq(ProcessReport::getInspectionOrderId, InspectionOrder.getInspectionOrderId())); processReport.setInsReportCode(InspectionOrder.getEntrustCode());//报告编号=委托编号 processReportService.updateById(processReport); return true; } /** * 检验委托单删除 * @param inspectionOrderId * @return */ @Override public boolean delInspectionOrder(Integer inspectionOrderId) { inspectionOrderDetailService.remove(Wrappers.lambdaQuery() .eq(InspectionOrderDetail::getInspectionOrderId, inspectionOrderId)); baseMapper.deleteById(inspectionOrderId); return true; } /** * 检验委托单查看详情 * @param inspectionOrderId * @return */ @Override public InspectionOrderDto getInspectionOrderOne(Integer inspectionOrderId) { InspectionOrder inspectionOrder = baseMapper.selectById(inspectionOrderId); InspectionOrderDto inspectionOrderDto = new InspectionOrderDto(); BeanUtils.copyProperties(inspectionOrder, inspectionOrderDto); // 查询详细信息 inspectionOrderDto.setOrderDetailList(inspectionOrderDetailService.list(Wrappers.lambdaQuery() .eq(InspectionOrderDetail::getInspectionOrderId, inspectionOrderId))); return inspectionOrderDto; } /** * 根据成品订单id查询委托单详情 * @param insOrderId * @return */ @Override public InspectionOrderDto getInspectionOrderByInsOderId(Integer insOrderId) { InsOrder order = insOrderService.getById(insOrderId); InspectionOrderDto inspectionOrderDto = new InspectionOrderDto(); inspectionOrderDto.setInsOrderId(order.getId());//成品订单id inspectionOrderDto.setEntrustCode(order.getEntrustCode());//委托编号 inspectionOrderDto.setSampleName(order.getSample());//试样名称 inspectionOrderDto.setProduction(order.getProduction());//生产单位 inspectionOrderDto.setCommissionUnit(order.getCompany());//委托单位 inspectionOrderDto.setCommissionUser(order.getPrepareUser());//委托人 inspectionOrderDto.setSampleStatus("完好");//样品状态 inspectionOrderDto.setIsLeave(order.getIsLeave());//是否留样 inspectionOrderDto.setProcessing(order.getProcessing());//样品处理方式 inspectionOrderDto.setAppointed(order.getAppointed());//约定时间 inspectionOrderDto.setSend(order.getSend());//报告发送方式 inspectionOrderDto.setCommissionPhone(order.getPhone());//报告发送方式 return inspectionOrderDto; } /** * 委托单查询成品订单 * @return */ @Override public IPage getInsOrderOnInspection(Page page, InsOrder insOrder) { return baseMapper.getInsOrderOnInspection(page, QueryWrappers.queryWrappers(insOrder)); } /** * 委托单成品报告上传 * @param file * @param inspectionOrderId * @return */ @Override public boolean uploadInspectionOrderFile(MultipartFile file, Integer inspectionOrderId) { String urlString; String pathName; try { String path = wordUrl; 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)); baseMapper.update(null, Wrappers.lambdaUpdate() .eq(InspectionOrder::getInspectionOrderId, inspectionOrderId) .set(InspectionOrder::getFileUrl, "/word/" + pathName)); } catch (Exception e) { throw new ErrorException("文件上传失败"); } return true; } @Override public void exportInspectionOrder(Integer inspectionOrderId, HttpServletResponse response) { InspectionOrder inspectionOrder = baseMapper.selectById(inspectionOrderId); InspectionOrderExportDto inspectionOrderExportDto = extracted(inspectionOrder); List list = inspectionOrderDetailService.list(Wrappers.lambdaQuery() .eq(InspectionOrderDetail::getInspectionOrderId, inspectionOrderId)); 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); }}); try { response.setContentType("application/msword"); String fileName = URLEncoder.encode( inspectionOrderExportDto.getSampleName(), "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(InspectionOrder inspectionOrder) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日"); InspectionOrderExportDto inspectionOrderExportDto = new InspectionOrderExportDto(); BeanUtils.copyProperties(inspectionOrder, inspectionOrderExportDto); if (inspectionOrder.getCommissionDate() != null) { inspectionOrderExportDto.setCommissionDateString(inspectionOrder.getCommissionDate().format(formatter)); } if (inspectionOrder.getReceiptData() != null) { inspectionOrderExportDto.setReceiptDataString(inspectionOrder.getReceiptData().format(formatter)); } if (inspectionOrder.getSampleData() != null) { inspectionOrderExportDto.setSampleDataString(inspectionOrder.getSampleData().format(formatter)); } if (inspectionOrder.getAppointed() != null) { inspectionOrderExportDto.setAppointedString(inspectionOrder.getAppointed().format(formatter)); } inspectionOrderExportDto.setIsLeave1(inspectionOrder.getIsLeave() != null && inspectionOrder.getIsLeave() == 1? "☑" : "□"); inspectionOrderExportDto.setIsLeave2(inspectionOrder.getIsLeave() != null && inspectionOrder.getIsLeave() == 0? "☑" : "□"); inspectionOrderExportDto.setSend0(inspectionOrder.getSend() != null && inspectionOrder.getSend() == 1? "☑" : "□"); inspectionOrderExportDto.setSend1(inspectionOrder.getSend() != null && inspectionOrder.getSend() == 0? "☑" : "□"); inspectionOrderExportDto.setProcessing0(inspectionOrder.getProcessing() != null && inspectionOrder.getProcessing() == 0? "☑" : "□"); inspectionOrderExportDto.setProcessing1(inspectionOrder.getProcessing() != null && inspectionOrder.getProcessing() == 1? "☑" : "□"); inspectionOrderExportDto.setCriterionRule0(inspectionOrder.getCriterionRule() != null && inspectionOrder.getCriterionRule() == 0? "☑" : "□"); inspectionOrderExportDto.setCriterionRule1(inspectionOrder.getCriterionRule() != null && inspectionOrder.getCriterionRule() == 1? "☑" : "□"); return inspectionOrderExportDto; } }