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.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.data.Pictures; import com.spire.doc.Document; import com.spire.doc.FileFormat; import com.yuanchu.mom.common.GetLook; import com.yuanchu.mom.common.PrintChina; import com.yuanchu.mom.dto.ReportPageDto; import com.yuanchu.mom.exception.ErrorException; import com.yuanchu.mom.mapper.InsOrderMapper; import com.yuanchu.mom.mapper.UserMapper; import com.yuanchu.mom.pojo.InsOrder; import com.yuanchu.mom.pojo.InsReport; import com.yuanchu.mom.service.InsReportService; import com.yuanchu.mom.mapper.InsReportMapper; import com.yuanchu.mom.utils.QueryWrappers; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.time.LocalDateTime; import java.util.HashMap; import java.util.Map; import java.util.concurrent.CompletableFuture; /** * @author Administrator * @description 针对表【ins_report(检验报告)】的数据库操作Service实现 * @createDate 2024-03-17 22:10:02 */ @Service public class InsReportServiceImpl extends ServiceImpl implements InsReportService{ @Resource private GetLook getLook; @Resource private UserMapper userMapper; @Resource private InsReportMapper insReportMapper; @Value("${wordUrl}") private String wordUrl; @Value("${file.path}") private String imgUrl; @Resource private InsOrderMapper insOrderMapper; @Override public Map pageInsReport(Page page, ReportPageDto reportPageDto) { Map map = new HashMap<>(); map.put("head", PrintChina.printChina(ReportPageDto.class)); Map map1 = getLook.selectPowerByMethodAndUserId("pageInsReport"); if (map1.get("look") == 1) reportPageDto.setCreateUser(map1.get("userId")); map.put("body", insReportMapper.pageInsReport(page, QueryWrappers.queryWrappers(reportPageDto))); return map; } @Override public String wordToHtml(String path) { try(ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { Document document = new Document(); document.loadFromFile(path.replace("/word", wordUrl)); document.saveToFile(outputStream, FileFormat.Html); return outputStream.toString(); } catch (Exception e) { throw new ErrorException("转换失败"); } } @Override public int inReport(String url, Integer id) { InsReport insReport = new InsReport(); insReport.setId(id); insReport.setUrlS(url); return insReportMapper.updateById(insReport); } @Override public int upReportUrl(Integer id) { return insReportMapper.update(null, Wrappers.lambdaUpdate().eq(InsReport::getId, id).set(InsReport::getUrlS, null)); } //提交 @Override public int writeReport(Integer id) { InsReport insReport = insReportMapper.selectById(id); insReport.setId(id); insReport.setState(1); insReport.setWriteUserId(getLook.selectPowerByMethodAndUserId(null).get("userId"));//提交人 insReport.setWriteTime(LocalDateTime.now());//提交时间 //获取提交人的签名地址 String signatureUrl = userMapper.selectById(insReport.getWriteUserId()).getSignatureUrl(); //系统生成报告地址 String url = insReport.getUrl(); //手动上传报告地址 String urlS = insReport.getUrlS(); wordInsertUrl(new HashMap(){{ put("writeUrl", Pictures.ofLocal(imgUrl+"/"+signatureUrl).create()); }}, (urlS==null?url:urlS).replace("/word", wordUrl)); return insReportMapper.updateById(insReport); } //审核 @Override public int examineReport(Integer id, Integer isExamine, String examineTell) { InsReport insReport = insReportMapper.selectById(id); insReport.setIsExamine(isExamine); if (ObjectUtils.isNotEmpty(examineTell)) { insReport.setExamineTell(examineTell); } insReport.setExamineUserId(getLook.selectPowerByMethodAndUserId(null).get("userId"));//审核人 insReport.setExamineTime(LocalDateTime.now());//审核时间 if (isExamine==0){ //如果审核不通过 insReport.setState(0);//提交状态改为待提交 return insReportMapper.updateById(insReport); } //获取审核人的签名地址 String signatureUrl = userMapper.selectById(insReport.getExamineUserId()).getSignatureUrl(); //系统生成报告地址 String url = insReport.getUrl(); //手动上传报告地址 String urlS = insReport.getUrlS(); wordInsertUrl(new HashMap(){{ put("examineUrl", Pictures.ofLocal(imgUrl+"/"+signatureUrl).create()); }}, (urlS==null?url:urlS).replace("/word", wordUrl)); return insReportMapper.updateById(insReport); } //批准 @Override @Transactional(rollbackFor = Exception.class) public int ratifyReport(Integer id, Integer isRatify, String ratifyTell) { InsReport insReport = insReportMapper.selectById(id); insReport.setIsRatify(isRatify); if (ObjectUtils.isNotEmpty(ratifyTell)) { insReport.setRatifyTell(ratifyTell); } insReport.setRatifyUserId(getLook.selectPowerByMethodAndUserId(null).get("userId"));//批准人 insReport.setRatifyTime(LocalDateTime.now());//批准时间 if (isRatify==0){ //如果批准不通过 insReport.setState(0);//提交状态改为待提交 return insReportMapper.updateById(insReport); } //获取审核人的签名地址 String signatureUrl = userMapper.selectById(insReport.getRatifyUserId()).getSignatureUrl(); //系统生成报告地址 String url = insReport.getUrl(); //手动上传报告地址 String urlS = insReport.getUrlS(); wordInsertUrl(new HashMap(){{ put("ratifyUrl", Pictures.ofLocal(imgUrl+"/"+signatureUrl).create()); }}, (urlS==null?url:urlS).replace("/word", wordUrl)); wordToPdf((urlS == null ? url : urlS).replace("/word", wordUrl)); InsOrder insOrder = new InsOrder(); insOrder.setId(insReportMapper.selectById(id).getInsOrderId()); insOrder.setState(4); insOrderMapper.updateById(insOrder); return insReportMapper.updateById(insReport); } @Override public int wordInsertUrl(Map map, String url) { XWPFTemplate template = XWPFTemplate.compile(url).render(map); try { template.writeAndClose(Files.newOutputStream(Paths.get(url))); } catch (IOException e) { throw new RuntimeException(e); } return 1; } @Override public void wordToPdf(String path) { CompletableFuture.supplyAsync(() -> { try(ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { Document document = new Document(); document.loadFromFile(path); document.saveToFile(path.replace(".docx", ".pdf"), FileFormat.PDF); System.out.println(path.replace(".docx", ".pdf")); return null; } catch (Exception e) { throw new ErrorException("转换失败"); } }).thenAccept(res -> { }).exceptionally(e -> { e.printStackTrace(); return null; }); } }