package com.yuanchu.mom.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.StringUtils; 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.deepoove.poi.config.ConfigureBuilder; import com.deepoove.poi.data.Pictures; import com.yuanchu.mom.common.GetLook; import com.yuanchu.mom.dto.InternalCorrectDto; import com.yuanchu.mom.exception.ErrorException; import com.yuanchu.mom.mapper.InternalCorrectFileMapper; import com.yuanchu.mom.mapper.UserMapper; import com.yuanchu.mom.pojo.InternalCorrect; import com.yuanchu.mom.mapper.InternalCorrectMapper; import com.yuanchu.mom.pojo.InternalCorrectFile; import com.yuanchu.mom.pojo.User; import com.yuanchu.mom.service.InternalCorrectService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yuanchu.mom.utils.QueryWrappers; 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.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.HashMap; import java.util.List; /** *

* 内审管理纠正处理表 服务实现类 *

* * @author * @since 2024-11-13 04:00:15 */ @Service @Transactional(rollbackFor = Exception.class) public class InternalCorrectServiceImpl extends ServiceImpl implements InternalCorrectService { @Resource private InternalCorrectFileMapper internalCorrectFileMapper; @Resource private GetLook getLook; @Resource private UserMapper userMapper; @Value("${file.path}") private String imgUrl; @Value("${wordUrl}") private String wordUrl; @Override public boolean addInternalCorrect(InternalCorrect detailsCorrect) { InternalCorrect correct = new InternalCorrect(); // 当前登录用户信息和部门 User user = userMapper.selectById(getLook.selectPowerByMethodAndUserId(null).get("userId")); String departmentLimsName = userMapper.selectUserDepartmentLimsName(user.getId()); switch (detailsCorrect.getFlowType()) { // 不合格提出 case 0: correct.setRaiseResult(detailsCorrect.getRaiseResult());//不合格表述 correct.setVdeRaiseResult(detailsCorrect.getVdeRaiseResult());//vde专家发现 correct.setRaiseDepartment(departmentLimsName);//提出部门 correct.setRaiseUserId(user.getId());//提出人id correct.setRaiseUserName(user.getName());// 提出人 correct.setRaiseTime(LocalDate.now());// 提出时间 // 原因分析人信息 User causeUser = userMapper.selectById(detailsCorrect.getCauseUserId()); String causeDepartmentLims = userMapper.selectUserDepartmentLimsName(causeUser.getId()); correct.setCauseDepartment(causeDepartmentLims);//原因分析责任部门 correct.setCauseUserId(causeUser.getId());//1原因分析人id correct.setCauseUserName(causeUser.getName());// 1原因分析人 baseMapper.insert(correct); break; // 原因分析 case 1: correct.setCorrectId(detailsCorrect.getCorrectId()); correct.setCauseResult(detailsCorrect.getCauseResult());//原因分析 correct.setCauseTime(LocalDate.now());// 1原因分析时间 // 纠正人信息 User correctUser = userMapper.selectById(detailsCorrect.getCorrectUserId()); String correctUserDepartmentLims = userMapper.selectUserDepartmentLimsName(correctUser.getId()); correct.setCorrectDepartment(correctUserDepartmentLims);//2纠正责任部门 correct.setCorrectUserId(correctUser.getId());//2纠正人id correct.setCorrectUserName(correctUser.getName());// 2纠正人 baseMapper.updateById(correct); break; // 纠正措施 case 2: correct.setCorrectId(detailsCorrect.getCorrectId()); correct.setCorrectResult(detailsCorrect.getCorrectResult());//2纠正措施 correct.setRaiseDepartmentAffirm(detailsCorrect.getRaiseDepartmentAffirm());//2提出部门确认 correct.setCorrectTime(LocalDate.now());// 2纠正时间 // 验证人信息 User validationUser = userMapper.selectById(detailsCorrect.getValidationUserId()); String validationUserDepartmentLims = userMapper.selectUserDepartmentLimsName(validationUser.getId()); correct.setValidationDepartment(validationUserDepartmentLims);//3验证部门 correct.setValidationUserId(validationUser.getId());//3验证人id correct.setValidationUserName(validationUser.getName());// 3验证人 baseMapper.updateById(correct); break; // 验证结果 case 3: correct.setCorrectId(detailsCorrect.getCorrectId()); correct.setValidationResult(detailsCorrect.getValidationResult());//3验证结果 correct.setValidationTime(LocalDate.now());// 3验证时间 correct.setIsFinish(1); baseMapper.updateById(correct); break; } return true; } /** * 查询内审管理纠正处理 * @param correctId * @return */ @Override public InternalCorrect getInternalCorrect(Integer correctId) { InternalCorrect detailsCorrect; detailsCorrect = baseMapper.selectOne(Wrappers.lambdaQuery() .eq(InternalCorrect::getCorrectId, correctId)); if (detailsCorrect == null) { detailsCorrect = new InternalCorrect(); } return detailsCorrect; } /** * 查询内审管理纠正措施列表 * @param page * @param detailsCorrect * @return */ @Override public IPage pageInternalCorrect(Page page, InternalCorrect detailsCorrect) { return baseMapper.pageInternalAccording(page, QueryWrappers.queryWrappers(detailsCorrect)); } /** * 新增内审管理纠正措施附件 * @param InternalCorrectId * @param file * @return */ @Override public boolean uploadInternalCorrectFile(Integer InternalCorrectId, MultipartFile file) { if (InternalCorrectId == null) { throw new ErrorException("缺少纠正措施id"); } String urlString; String pathName; String path; String filename = file.getOriginalFilename(); String contentType = file.getContentType(); InternalCorrectFile InternalCorrectFile = new InternalCorrectFile(); InternalCorrectFile.setCorrectId(InternalCorrectId); InternalCorrectFile.setFileName(filename); if (contentType != null && contentType.startsWith("image/")) { // 是图片 path = imgUrl; InternalCorrectFile.setType(1); } else { // 是文件 path = wordUrl; InternalCorrectFile.setType(2); } try { 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)); InternalCorrectFile.setFileUrl(pathName); internalCorrectFileMapper.insert(InternalCorrectFile); return true; } catch (Exception e) { throw new ErrorException(e.getMessage()); } } /** * 查询内审管理纠正措施附件 * @param correctId * @return */ @Override public List getInternalCorrectFileList(Integer correctId) { return internalCorrectFileMapper.selectList(Wrappers.lambdaQuery() .eq(InternalCorrectFile::getCorrectId, correctId)); } /** * 导出纠正措施 * @param correctId * @param response */ @Override public void exportInternalCorrect(Integer correctId, HttpServletResponse response) { InternalCorrect internalCorrect = baseMapper.selectById(correctId); InternalCorrectDto internalCorrectDto = new InternalCorrectDto(); BeanUtils.copyProperties(internalCorrect, internalCorrectDto); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // 提出时间 internalCorrectDto.setRaiseTimeString(internalCorrect.getRaiseTime() != null ? internalCorrect.getRaiseTime().format(formatter) : null); // 原因分析时间 internalCorrectDto.setCauseTimeString(internalCorrect.getCauseTime() != null ? internalCorrect.getCauseTime().format(formatter) : null); // 纠正时间 internalCorrectDto.setCorrectTimeString(internalCorrect.getCorrectTime() != null ? internalCorrect.getCorrectTime().format(formatter) : null); // 验证时间 internalCorrectDto.setValidationTimeString(internalCorrect.getValidationTime() != null ? internalCorrect.getValidationTime().format(formatter) : null); // 提出人签名 String raiseUrl = null; if (internalCorrect.getRaiseUserId() != null) { raiseUrl = userMapper.selectById(internalCorrect.getRaiseUserId()).getSignatureUrl(); if (StringUtils.isBlank(raiseUrl)) { throw new ErrorException("找不到提出人的签名"); } } // 原因分析人 String causeUrl = null; if (internalCorrect.getCauseUserId() != null) { causeUrl = userMapper.selectById(internalCorrect.getCauseUserId()).getSignatureUrl(); if (StringUtils.isBlank(causeUrl)) { throw new ErrorException("找不到原因分析人的签名"); } } // 纠正人 String correctUrl = null; if (internalCorrect.getCorrectUserId() != null) { correctUrl = userMapper.selectById(internalCorrect.getCorrectUserId()).getSignatureUrl(); if (StringUtils.isBlank(correctUrl)) { throw new ErrorException("找不到纠正人的签名"); } } // 验证人 String validationUrl = null; if (internalCorrect.getValidationUserId() != null) { validationUrl = userMapper.selectById(internalCorrect.getValidationUserId()).getSignatureUrl(); if (StringUtils.isBlank(validationUrl)) { throw new ErrorException("找不到验证人的签名"); } } // 获取路径 InputStream inputStream = this.getClass().getResourceAsStream("/static/internal-correct.docx"); ConfigureBuilder builder = Configure.builder(); builder.useSpringEL(true); String finalRaiseUrl = raiseUrl; String finalCauseUrl = causeUrl; String finalCorrectUrl = correctUrl; String finalValidationUrl = validationUrl; XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render( new HashMap() {{ put("correct", internalCorrectDto); put("raiseUrl", StringUtils.isNotBlank(finalRaiseUrl) ? Pictures.ofLocal(imgUrl + "/" + finalRaiseUrl).create() : null); put("causeUrl", StringUtils.isNotBlank(finalCauseUrl) ? Pictures.ofLocal(imgUrl + "/" + finalCauseUrl).create() : null); put("correctUrl", StringUtils.isNotBlank(finalCorrectUrl) ? Pictures.ofLocal(imgUrl + "/" + finalCorrectUrl).create() : null); put("validationUrl", StringUtils.isNotBlank(finalValidationUrl) ? Pictures.ofLocal(imgUrl + "/" + finalValidationUrl).create() : null); }}); try { response.setContentType("application/msword"); String fileName = URLEncoder.encode( "内审纠正措施", "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("导出失败"); } } }