package com.yuanchu.mom.service.impl;
import cn.hutool.core.lang.UUID;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.config.ConfigureBuilder;
import com.deepoove.poi.data.*;
import com.deepoove.poi.data.style.*;
import com.yuanchu.mom.common.GetLook;
import com.yuanchu.mom.common.PrintChina;
import com.yuanchu.mom.exception.ErrorException;
import com.yuanchu.mom.mapper.UserMapper;
import com.yuanchu.mom.pojo.ManageDocumentAlter;
import com.yuanchu.mom.pojo.ManageRecordAudit;
import com.yuanchu.mom.mapper.ManageRecordAuditMapper;
import com.yuanchu.mom.pojo.ManageRecordCancel;
import com.yuanchu.mom.service.ManageRecordAuditService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.utils.QueryWrappers;
import org.apache.commons.io.IOUtils;
import org.apache.poi.openxml4j.util.ZipSecureFile;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
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.*;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.time.LocalDate;
import java.util.*;
/**
*
* 文件修订申请审批记录 服务实现类
*
*
* @author
* @since 2024-11-14 10:29:18
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class ManageRecordAuditServiceImpl extends ServiceImpl implements ManageRecordAuditService {
@Resource
private ManageRecordAuditMapper manageRecordAuditMapper;
@Resource
private UserMapper userMapper;
@Value("${wordUrl}")
private String wordUrl;
@Resource
GetLook getLook;
@Override
public Map pageManageRecordAudit(Page page, ManageRecordAudit manageRecordAudit) {
Map map = new HashMap<>();
map.put("head", PrintChina.printChina(ManageRecordAudit.class));
IPage manageRecordAuditIPage = manageRecordAuditMapper.pageManageRecordAudit(page, QueryWrappers.queryWrappers(manageRecordAudit));
for (ManageRecordAudit record : manageRecordAuditIPage.getRecords()) {
String limsName = userMapper.selectUserDepartmentLimsName(record.getCreateUser());
record.setCreateUserDepart(limsName);
}
map.put("body", manageRecordAuditIPage);
return map;
}
@Override
public int addManageRecordAudit(ManageRecordAudit manageRecordAudit) {
if (ObjectUtils.isNotEmpty(manageRecordAudit.getFile())) {
String urlString;
String pathName;
String path;
MultipartFile file = manageRecordAudit.getFile();
//上传新文件
path = wordUrl;
try {
File realpath = new File(path);
if (!realpath.exists()) {
realpath.mkdirs();
}
pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
urlString = realpath + "/" + pathName;
file.transferTo(new File(urlString));
} catch (Exception e) {
e.printStackTrace();
System.err.println("附件上传错误");
return 0;
}
manageRecordAudit.setAfterUrl(pathName);
}
manageRecordAudit.setCreateTime(LocalDate.now());
return manageRecordAuditMapper.insert(manageRecordAudit);
}
@Override
public int doManageRecordAudit(ManageRecordAudit manageRecordAudit) {
ManageRecordAudit recordAudit= manageRecordAuditMapper.selectById(manageRecordAudit.getId());
if (ObjectUtils.isNotEmpty(manageRecordAudit.getFile())) {
if (ObjectUtils.isNotEmpty(recordAudit.getAfterUrl())) {
// 删除旧文件
File oldFile = new File(wordUrl + "/" + recordAudit.getAfterUrl());
oldFile.delete();
}
//上传新文件
String urlString;
String pathName;
String path;
MultipartFile file = manageRecordAudit.getFile();
path = wordUrl;
try {
File realpath = new File(path);
if (!realpath.exists()) {
realpath.mkdirs();
}
pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
urlString = realpath + "/" + pathName;
file.transferTo(new File(urlString));
manageRecordAudit.setAfterUrl(pathName);
} catch (Exception e) {
e.printStackTrace();
System.err.println("附件上传错误");
return 0;
}
}
return manageRecordAuditMapper.updateById(manageRecordAudit);
}
@Override
public int ratifyManageRecordAudit(Integer id) {
ManageRecordAudit recordAudit = manageRecordAuditMapper.selectById(id);
recordAudit.setRatifyUser(getLook.selectPowerByMethodAndUserId(null).get("userId"));
return manageRecordAuditMapper.updateById(recordAudit);
}
@Override
public String exportOutManageRecordAudit(ManageRecordAudit manageRecordAudit, HttpServletResponse response) {
List manageRecordAuditList = manageRecordAuditMapper.pageManageRecordAudit(new Page(-1, -1), QueryWrappers.queryWrappers(manageRecordAudit)).getRecords();
for (ManageRecordAudit record : manageRecordAuditList) {
String limsName = userMapper.selectUserDepartmentLimsName(record.getCreateUser());
record.setCreateUserDepart(limsName);
}
//生成检验报告发放登记表
InputStream inputStream = this.getClass().getResourceAsStream("/static/audit-deal.docx");
ConfigureBuilder builder = Configure.builder();
builder.useSpringEL(true);
List