package com.yuanchu.mom.service.impl;
|
|
import com.alibaba.excel.EasyExcel;
|
import com.alibaba.excel.context.AnalysisContext;
|
import com.alibaba.excel.event.AnalysisEventListener;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
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.deepoove.poi.config.ConfigureBuilder;
|
import com.deepoove.poi.data.Pictures;
|
import com.yuanchu.mom.common.GetLook;
|
import com.yuanchu.mom.dto.QualitySuperviseDetailsAccordingDto;
|
import com.yuanchu.mom.dto.QualitySuperviseDetailsCorrectDto;
|
import com.yuanchu.mom.dto.QualitySuperviseDetailsDto;
|
import com.yuanchu.mom.excel.QualitySuperviseDetailsUpload;
|
import com.yuanchu.mom.exception.ErrorException;
|
import com.yuanchu.mom.mapper.*;
|
import com.yuanchu.mom.pojo.*;
|
import com.yuanchu.mom.service.QualitySuperviseDetailsService;
|
import com.yuanchu.mom.service.QualitySuperviseService;
|
import com.yuanchu.mom.utils.HackLoopTableRenderPolicy;
|
import com.yuanchu.mom.utils.XWPFDocumentUtils;
|
import com.yuanchu.mom.utils.DateImageUtil;
|
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.IOException;
|
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.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.stream.Collectors;
|
|
/**
|
* 质量监督主表
|
*
|
* @author zhuo
|
* @since 2024-11-07
|
*/
|
@Service
|
@Transactional(rollbackFor = Exception.class)
|
public class QualitySuperviseServiceImpl extends ServiceImpl<QualitySuperviseMapper, QualitySupervise> implements QualitySuperviseService {
|
|
@Resource
|
private QualitySuperviseDetailsService qualitySuperviseDetailsService;
|
@Resource
|
private QualitySuperviseDetailsMapper qualitySuperviseDetailsMapper;
|
@Resource
|
private QualitySuperviseDetailsRecordMapper qualitySuperviseDetailsRecordMapper;
|
@Resource
|
private QualitySuperviseDetailsAccordingMapper qualitySuperviseDetailsAccordingMapper;
|
@Resource
|
private QualitySuperviseDetailsCorrectMapper qualitySuperviseDetailsCorrectMapper;
|
@Resource
|
private QualitySuperviseDetailsCorrectFileMapper qualitySuperviseDetailsCorrectFileMapper;
|
@Resource
|
private GetLook getLook;
|
@Resource
|
private UserMapper userMapper;
|
@Value("${file.path}")
|
private String imgUrl;
|
|
@Value("${wordUrl}")
|
private String wordUrl;
|
|
/**
|
* 导入监督计划
|
* @param file
|
* @return
|
*/
|
@Override
|
public boolean importQualitySupervise(MultipartFile file) {
|
// 当前登录用户
|
Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
|
User user = userMapper.selectById(userId);
|
// 文件名称
|
String fileName = file.getOriginalFilename().substring(0, file.getOriginalFilename().lastIndexOf("."));
|
QualitySupervise qualitySupervise = new QualitySupervise();
|
qualitySupervise.setSuperviseName(fileName);
|
qualitySupervise.setWriteUserId(userId);
|
qualitySupervise.setWriteUserName(user.getName());
|
qualitySupervise.setWriteTime(LocalDateTime.now());
|
baseMapper.insert(qualitySupervise);
|
|
List<QualitySuperviseDetails> detailsUploadList = new ArrayList<>();
|
|
// 导入附件内容
|
try {
|
// excel解析
|
EasyExcel.read(file.getInputStream(), QualitySuperviseDetailsUpload.class, new AnalysisEventListener<QualitySuperviseDetailsUpload>() {
|
@Override
|
public void invoke(QualitySuperviseDetailsUpload detailsUpload, AnalysisContext analysisContext) {
|
// 判断是否为空
|
if (StringUtils.isNotBlank(detailsUpload.getSuperviseTime()) &&
|
StringUtils.isNotBlank(detailsUpload.getSupervisePurpose()) &&
|
StringUtils.isNotBlank(detailsUpload.getSuperviseProject()) &&
|
StringUtils.isNotBlank(detailsUpload.getSupervisee()) &&
|
StringUtils.isNotBlank(detailsUpload.getSuperviseReason()) &&
|
StringUtils.isNotBlank(detailsUpload.getRemark())) {
|
// 对象复制
|
QualitySuperviseDetails superviseDetails = new QualitySuperviseDetails();
|
BeanUtils.copyProperties(detailsUpload, superviseDetails);
|
superviseDetails.setSuperviseId(qualitySupervise.getSuperviseId());
|
|
detailsUploadList.add(superviseDetails);
|
}
|
}
|
@Override
|
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
|
|
}
|
}).sheet().doRead();
|
qualitySuperviseDetailsService.saveBatch(detailsUploadList);
|
|
} catch (IOException e) {
|
throw new RuntimeException(e);
|
}
|
return true;
|
}
|
|
/**
|
* 监督计划批准
|
* @param qualitySupervise
|
* @return
|
*/
|
@Override
|
public boolean ratifyQualitySupervise(QualitySupervise qualitySupervise) {
|
// 当前登录用户
|
Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
|
baseMapper.update(null, Wrappers.<QualitySupervise>lambdaUpdate()
|
.eq(QualitySupervise::getSuperviseId, qualitySupervise.getSuperviseId())
|
.set(QualitySupervise::getRatifyUserId, userId)
|
.set(QualitySupervise::getRatifyRemark, qualitySupervise.getRatifyRemark())
|
.set(QualitySupervise::getRatifyStatus, qualitySupervise.getRatifyStatus())
|
.set(QualitySupervise::getRatifyTime, LocalDateTime.now())
|
);
|
return true;
|
}
|
|
/**
|
* 监督计划列表
|
* @param page
|
* @param qualitySupervise
|
* @return
|
*/
|
@Override
|
public IPage<QualitySupervise> pageQualitySupervise(Page page, QualitySupervise qualitySupervise) {
|
return baseMapper.pageQualitySupervise(page, QueryWrappers.queryWrappers(qualitySupervise));
|
}
|
|
/**
|
* 监督计划详情列表
|
* @return
|
*/
|
@Override
|
public IPage<QualitySuperviseDetailsDto> pageQualitySuperviseDetail(Page page, QualitySuperviseDetails qualitySuperviseDetails) {
|
if (qualitySuperviseDetails.getSuperviseId() == null) {
|
return new Page();
|
}
|
return qualitySuperviseDetailsMapper.pageQualitySuperviseDetail(page, QueryWrappers.queryWrappers(qualitySuperviseDetails));
|
}
|
|
/**
|
* 导出监督计划
|
* @param superviseId
|
* @param response
|
*/
|
@Override
|
public void exportQualitySupervise(Integer superviseId, HttpServletResponse response) {
|
QualitySupervise qualitySupervise = baseMapper.selectById(superviseId);
|
//获取提交人的签名地址
|
String writeUrl = userMapper.selectById(qualitySupervise.getWriteUserId()).getSignatureUrl();
|
if (ObjectUtils.isEmpty(writeUrl) || writeUrl.equals("")) {
|
throw new ErrorException("找不到检验人的签名");
|
}
|
|
//获取批准人的签名地址
|
String ratifyUrl = null;
|
if (qualitySupervise.getRatifyUserId() != null) {
|
ratifyUrl = userMapper.selectById(qualitySupervise.getRatifyUserId()).getSignatureUrl();
|
if (StringUtils.isBlank(ratifyUrl)) {
|
throw new ErrorException("找不到复核人的签名");
|
}
|
}
|
|
// 查询详情
|
List<QualitySuperviseDetails> qualitySuperviseDetails = qualitySuperviseDetailsMapper.selectList(Wrappers.<QualitySuperviseDetails>lambdaQuery()
|
.eq(QualitySuperviseDetails::getSuperviseId, superviseId));
|
|
// 判断监督目的一样的值
|
AtomicInteger count = new AtomicInteger(1);
|
Map<String, List<QualitySuperviseDetails>> listMap = qualitySuperviseDetails.stream().collect(Collectors.groupingBy(QualitySuperviseDetails::getSupervisePurpose));
|
listMap.forEach((s, details) -> {
|
// 查询数量超过1的
|
if (details.size() > 1) {
|
for (QualitySuperviseDetails detail : details) {
|
detail.setSupervisePurpose(detail.getSupervisePurpose() + "∑" + count);
|
}
|
count.getAndIncrement();
|
}
|
});
|
|
int index = 1;
|
for (QualitySuperviseDetails qualitySuperviseDetail : qualitySuperviseDetails) {
|
qualitySuperviseDetail.setIndex(index);
|
index++;
|
}
|
|
// 获取路径
|
InputStream inputStream = this.getClass().getResourceAsStream("/static/quality-supervise.docx");
|
String finalRatifyUrl = ratifyUrl;
|
Configure configure = Configure.builder()
|
.bind("superviseDetailList", new HackLoopTableRenderPolicy())
|
.build();
|
XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
|
new HashMap<String, Object>() {{
|
put("superviseDetailList", qualitySuperviseDetails);
|
put("writeUrl", StringUtils.isNotBlank(writeUrl) ? Pictures.ofLocal(imgUrl + "/" + writeUrl).create() : null);
|
put("ratifyUrl", StringUtils.isNotBlank(finalRatifyUrl) ? Pictures.ofLocal(imgUrl + "/" + finalRatifyUrl).create() : null);
|
put("writeDateUrl", qualitySupervise.getWriteTime() != null ?
|
Pictures.ofStream(DateImageUtil.createDateImage(qualitySupervise.getWriteTime())).create() : null);
|
put("ratifyDateUrl", qualitySupervise.getRatifyTime() != null ?
|
Pictures.ofStream(DateImageUtil.createDateImage(qualitySupervise.getRatifyTime())).create() : null);
|
}});
|
|
// 处理换行问题
|
XWPFDocumentUtils.updateMergeByDocument(template.getXWPFDocument());
|
try {
|
response.setContentType("application/msword");
|
String fileName = URLEncoder.encode(
|
qualitySupervise.getSuperviseName(), "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("导出失败");
|
}
|
|
|
}
|
|
/************************************************ 记录 ******************************************************/
|
|
/**
|
* 查询监督记录信息
|
* @param superviseDetailsId
|
* @return
|
*/
|
@Override
|
public QualitySuperviseDetailsRecord getSuperviseDetailRecord(Integer superviseDetailsId) {
|
QualitySuperviseDetailsRecord detailsRecord;
|
detailsRecord = qualitySuperviseDetailsRecordMapper.selectOne(Wrappers.<QualitySuperviseDetailsRecord>lambdaQuery()
|
.eq(QualitySuperviseDetailsRecord::getSuperviseDetailsId, superviseDetailsId));
|
if (detailsRecord == null) {
|
detailsRecord = new QualitySuperviseDetailsRecord();
|
}
|
// 添加批准人名称
|
if (detailsRecord.getRatifyUserId() != null) {
|
User user = userMapper.selectById(getLook.selectPowerByMethodAndUserId(null).get("userId"));
|
detailsRecord.setRatifyUserName(user.getName());
|
}
|
return detailsRecord;
|
}
|
|
/**
|
* 新增监督记录信息
|
* @param qualitySuperviseDetailsRecord
|
* @return
|
*/
|
@Override
|
public boolean addSuperviseDetailRecord(QualitySuperviseDetailsRecord qualitySuperviseDetailsRecord) {
|
if (qualitySuperviseDetailsRecord.getSuperviseDetailsId() == null) {
|
throw new ErrorException("缺少监督详细信息id");
|
}
|
qualitySuperviseDetailsRecordMapper.insert(qualitySuperviseDetailsRecord);
|
return true;
|
}
|
|
/**
|
* 监督记录批准
|
* @param qualitySuperviseDetailsRecord
|
* @return
|
*/
|
@Override
|
public boolean addSuperviseRecordOpinion(QualitySuperviseDetailsRecord qualitySuperviseDetailsRecord) {
|
if (qualitySuperviseDetailsRecord.getIsAccording() == null) {
|
throw new ErrorException("缺少最终结果");
|
}
|
|
qualitySuperviseDetailsRecordMapper.update(null, Wrappers.<QualitySuperviseDetailsRecord>lambdaUpdate()
|
.eq(QualitySuperviseDetailsRecord::getSuperviseDetailsId, qualitySuperviseDetailsRecord.getSuperviseDetailsId())
|
.set(QualitySuperviseDetailsRecord::getRatifyOpinion, qualitySuperviseDetailsRecord.getRatifyOpinion())
|
.set(QualitySuperviseDetailsRecord::getRatifyTime, LocalDateTime.now())
|
.set(QualitySuperviseDetailsRecord::getIsAccording, qualitySuperviseDetailsRecord.getIsAccording())
|
.set(QualitySuperviseDetailsRecord::getIsFinish, 1));
|
return true;
|
}
|
|
/**
|
* 导出监督记录表
|
* @param superviseDetailsId
|
* @param response
|
*/
|
@Override
|
public void exportSuperviseDetailRecord(Integer superviseDetailsId, HttpServletResponse response) {
|
QualitySuperviseDetailsRecord recordDto = qualitySuperviseDetailsRecordMapper.selectSuperviseDetailRecord(superviseDetailsId);
|
|
//获取技术负责人的签名地址
|
String ratifyUrl = null;
|
if (recordDto.getRatifyUserId() != null) {
|
ratifyUrl = userMapper.selectById(recordDto.getRatifyUserId()).getSignatureUrl();
|
if (StringUtils.isBlank(ratifyUrl)) {
|
throw new ErrorException("找不到技术负责人的签名");
|
}
|
}
|
|
// 获取路径
|
InputStream inputStream = this.getClass().getResourceAsStream("/static/supervision-detail-record.docx");
|
ConfigureBuilder builder = Configure.builder();
|
builder.useSpringEL(true);
|
String finalRatifyUrl = ratifyUrl;
|
XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
|
new HashMap<String, Object>() {{
|
put("supervision", recordDto);
|
put("technicalDirectorUrl", StringUtils.isNotBlank(finalRatifyUrl) ? Pictures.ofLocal(imgUrl + "/" + finalRatifyUrl).create() : null);
|
put("technicalDirectorDateUrl", recordDto.getRatifyTime() != null ?
|
Pictures.ofStream(DateImageUtil.createDateImage(recordDto.getRatifyTime())).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("导出失败");
|
}
|
}
|
|
/************************************************* 不合格工作控制单 ********************************************************/
|
|
/**
|
* 新增监督记录不符合控制信息
|
* @param detailsAccording
|
* @return
|
*/
|
@Override
|
public boolean addSuperviseDetailAccording(QualitySuperviseDetailsAccording detailsAccording) {
|
QualitySuperviseDetailsAccording according = new QualitySuperviseDetailsAccording();
|
// 当前登录用户信息和部门
|
User user = userMapper.selectById(getLook.selectPowerByMethodAndUserId(null).get("userId"));
|
String departmentLimsName = userMapper.selectUserDepartmentLimsName(user.getId());
|
switch (detailsAccording.getFlowType()) {
|
// 不符合工作情况记录
|
case 0:
|
if (detailsAccording.getSuperviseDetailsId() == null) {
|
throw new ErrorException("缺少质量监督详情Id");
|
}
|
according.setSuperviseDetailsId(detailsAccording.getSuperviseDetailsId());
|
according.setOccurrenceDepartment(detailsAccording.getOccurrenceDepartment());//发生部门
|
according.setHeadDepartment(detailsAccording.getHeadDepartment());//部门负责人
|
according.setFindWay(detailsAccording.getFindWay());//发现途径
|
according.setRecordDetail(detailsAccording.getRecordDetail());//不符合记录详细
|
according.setRecordAccording(detailsAccording.getRecordAccording());//不合格记录依据
|
|
according.setFoundDepartment(departmentLimsName);//发现部门
|
according.setRecordUserId(user.getId());//记录人id
|
according.setRecordUserName(user.getName());//记录人
|
according.setRecordTime(LocalDate.now());//记录时间
|
|
// 处理人信息
|
User actionsUser = userMapper.selectById(detailsAccording.getActionsUserId());
|
String actionsDepartmentLims = userMapper.selectUserDepartmentLimsName(actionsUser.getId());
|
|
according.setResponsibleDepartment(actionsDepartmentLims);//责任部门
|
according.setActionsUserId(actionsUser.getId());//处理人id
|
according.setActionsUserName(actionsUser.getName());//处理人
|
|
according.setSupervisedUserId(detailsAccording.getSupervisedUserId());//被监督人id
|
// 被监督人
|
User supervisedUser = userMapper.selectById(detailsAccording.getSupervisedUserId());
|
according.setSupervisedUserName(supervisedUser.getName());//被监督人
|
according.setActionsTime(detailsAccording.getSupervisedTime());//被监督时间
|
qualitySuperviseDetailsAccordingMapper.insert(according);
|
break;
|
|
// 1处理措施
|
case 1:
|
according.setSuperviseDetailsAccordingId(detailsAccording.getSuperviseDetailsAccordingId());
|
according.setEliminateMeasure(detailsAccording.getEliminateMeasure());//清除不符合措施
|
according.setActionsTime(LocalDate.now());//处理时间
|
|
// 纠正负责人信息
|
User correctsUser = userMapper.selectById(detailsAccording.getCorrectUserId());
|
|
according.setCorrectUserId(correctsUser.getId());//纠正负责人id
|
according.setCorrectUserName(correctsUser.getName());//纠正负责人
|
|
qualitySuperviseDetailsAccordingMapper.updateById(according);
|
break;
|
|
// 纠正措施
|
case 2:
|
according.setSuperviseDetailsAccordingId(detailsAccording.getSuperviseDetailsAccordingId());
|
according.setCorrectContent(detailsAccording.getCorrectContent());//纠正措施内容
|
according.setIsCorrect(detailsAccording.getIsCorrect());//是否纠正处理
|
according.setCorrectTime(LocalDate.now());//纠正填写时间
|
|
// 质量负责人
|
User qualityUser = userMapper.selectById(detailsAccording.getQualityManagerUserId());
|
according.setQualityManagerUserId(qualityUser.getId());//质量负责人id
|
according.setQualityManagerUserName(qualityUser.getName());//质量负责人
|
|
qualitySuperviseDetailsAccordingMapper.updateById(according);
|
break;
|
|
//是否通知客户可恢复工作
|
case 3:
|
according.setSuperviseDetailsAccordingId(detailsAccording.getSuperviseDetailsAccordingId());
|
according.setNotifyCustomer(detailsAccording.getNotifyCustomer());//通知客户
|
according.setBackToWork(detailsAccording.getBackToWork());//回复工作
|
|
according.setQualityManagerTime(LocalDate.now());//日期
|
according.setIsFinish(1);
|
qualitySuperviseDetailsAccordingMapper.updateById(according);
|
break;
|
}
|
return true;
|
}
|
|
/**
|
* 查询监督记录不符合控制信息
|
* @param superviseDetailsId
|
* @return
|
*/
|
@Override
|
public QualitySuperviseDetailsAccording getSuperviseDetailAccording(Integer superviseDetailsId) {
|
QualitySuperviseDetailsAccording detailsAccording;
|
|
detailsAccording = qualitySuperviseDetailsAccordingMapper.selectOne(Wrappers.<QualitySuperviseDetailsAccording>lambdaQuery()
|
.eq(QualitySuperviseDetailsAccording::getSuperviseDetailsId, superviseDetailsId));
|
|
if (detailsAccording == null) {
|
detailsAccording = new QualitySuperviseDetailsAccording();
|
}
|
return detailsAccording;
|
}
|
|
/**
|
* 查询不符合项
|
* @param page
|
* @param detailsAccording
|
* @return
|
*/
|
@Override
|
public IPage<QualitySuperviseDetailsAccording> pageSuperviseDetailAccording(Page page, QualitySuperviseDetailsAccording detailsAccording) {
|
return qualitySuperviseDetailsAccordingMapper.pageSuperviseDetailAccording(page, QueryWrappers.queryWrappers(detailsAccording));
|
}
|
|
/**
|
* 导出监督记录不符合控制信息
|
* @param superviseDetailAccordingId
|
* @param response
|
*/
|
@Override
|
public void superviseDetailAccordingExport(Integer superviseDetailAccordingId, HttpServletResponse response) {
|
QualitySuperviseDetailsAccordingDto exportDto = qualitySuperviseDetailsAccordingMapper.selectSuperviseDetailsAccording(superviseDetailAccordingId);
|
// 发现部门
|
String discovererUrl = null;
|
if (exportDto.getRecordUserId() != null) {
|
discovererUrl = userMapper.selectById(exportDto.getRecordUserId()).getSignatureUrl();
|
if (StringUtils.isBlank(discovererUrl)) {
|
throw new ErrorException("找不到发现部门人的签名");
|
}
|
}
|
|
// 处理措施负责人
|
String responsibleUrl = null;
|
if (exportDto.getCorrectUserId() != null) {
|
responsibleUrl = userMapper.selectById(exportDto.getCorrectUserId()).getSignatureUrl();
|
if (StringUtils.isBlank(responsibleUrl)) {
|
throw new ErrorException("找不到处理措施负责人的签名");
|
}
|
}
|
|
// 技术负责人
|
String correctiveUrl = null;
|
if (exportDto.getQualityManagerUserId() != null) {
|
correctiveUrl = userMapper.selectById(exportDto.getQualityManagerUserId()).getSignatureUrl();
|
if (StringUtils.isBlank(correctiveUrl)) {
|
throw new ErrorException("找不到技术负责人的签名");
|
}
|
}
|
|
// 质量负责人
|
String qualityUrl = null;
|
if (exportDto.getQualityManagerUserId() != null) {
|
qualityUrl = userMapper.selectById(exportDto.getQualityManagerUserId()).getSignatureUrl();
|
if (StringUtils.isBlank(qualityUrl)) {
|
throw new ErrorException("找不到质量负责人的签名");
|
}
|
}
|
|
// 获取路径
|
InputStream inputStream = this.getClass().getResourceAsStream("/static/supervision-detail-according.docx");
|
ConfigureBuilder builder = Configure.builder();
|
String finalDiscovererUrl = discovererUrl;
|
String finalResponsibleUrl = responsibleUrl;
|
String finalCorrectiveUrl = correctiveUrl;
|
String finalQualityUrl = qualityUrl;
|
XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
|
new HashMap<String, Object>() {{
|
put("control", exportDto);
|
put("discovererUrl", StringUtils.isNotBlank(finalDiscovererUrl) ? Pictures.ofLocal(imgUrl + "/" + finalDiscovererUrl).create() : null);
|
put("responsibleUrl", StringUtils.isNotBlank(finalResponsibleUrl) ? Pictures.ofLocal(imgUrl + "/" + finalResponsibleUrl).create() : null);
|
put("correctiveUrl", StringUtils.isNotBlank(finalCorrectiveUrl) ? Pictures.ofLocal(imgUrl + "/" + finalCorrectiveUrl).create() : null);
|
put("qualityUrl", StringUtils.isNotBlank(finalQualityUrl) ? Pictures.ofLocal(imgUrl + "/" + finalQualityUrl).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("导出失败");
|
}
|
}
|
|
/************************************************* 纠正措施处理单 ********************************************************/
|
|
|
@Override
|
public boolean addSuperviseDetailCorrect(QualitySuperviseDetailsCorrect detailsCorrect) {
|
QualitySuperviseDetailsCorrect correct = new QualitySuperviseDetailsCorrect();
|
// 当前登录用户信息和部门
|
User user = userMapper.selectById(getLook.selectPowerByMethodAndUserId(null).get("userId"));
|
String departmentLimsName = userMapper.selectUserDepartmentLimsName(user.getId());
|
|
switch (detailsCorrect.getFlowType()) {
|
// 不合格提出
|
case 0:
|
if (detailsCorrect.getSuperviseDetailsId() == null) {
|
throw new ErrorException("缺少质量监督详情Id");
|
}
|
correct.setSuperviseDetailsId(detailsCorrect.getSuperviseDetailsId());
|
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原因分析人
|
qualitySuperviseDetailsCorrectMapper.insert(correct);
|
|
break;
|
|
// 原因分析
|
case 1:
|
correct.setSuperviseDetailsCorrectId(detailsCorrect.getSuperviseDetailsCorrectId());
|
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纠正人
|
qualitySuperviseDetailsCorrectMapper.updateById(correct);
|
break;
|
|
// 纠正措施
|
case 2:
|
correct.setSuperviseDetailsCorrectId(detailsCorrect.getSuperviseDetailsCorrectId());
|
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验证人
|
qualitySuperviseDetailsCorrectMapper.updateById(correct);
|
break;
|
|
// 验证结果
|
case 3:
|
correct.setSuperviseDetailsCorrectId(detailsCorrect.getSuperviseDetailsCorrectId());
|
correct.setValidationResult(detailsCorrect.getValidationResult());//3验证结果
|
correct.setValidationTime(LocalDate.now());// 3验证时间
|
correct.setIsFinish(1);
|
qualitySuperviseDetailsCorrectMapper.updateById(correct);
|
break;
|
}
|
|
return true;
|
}
|
|
/**
|
* 查询监督纠正处理
|
* @param superviseDetailsId
|
* @return
|
*/
|
@Override
|
public QualitySuperviseDetailsCorrect getSuperviseDetailCorrect(Integer superviseDetailsId) {
|
QualitySuperviseDetailsCorrect detailsCorrect;
|
|
detailsCorrect = qualitySuperviseDetailsCorrectMapper.selectOne(Wrappers.<QualitySuperviseDetailsCorrect>lambdaQuery()
|
.eq(QualitySuperviseDetailsCorrect::getSuperviseDetailsId, superviseDetailsId));
|
|
if (detailsCorrect == null) {
|
detailsCorrect = new QualitySuperviseDetailsCorrect();
|
}
|
return detailsCorrect;
|
}
|
|
/**
|
* 查询监督纠正措施列表
|
* @param page
|
* @param detailsCorrect
|
* @return
|
*/
|
@Override
|
public IPage<QualitySuperviseDetailsCorrect> pageSuperviseDetailCorrect(Page page, QualitySuperviseDetailsCorrect detailsCorrect) {
|
return qualitySuperviseDetailsCorrectMapper.pageSuperviseDetailAccording(page, QueryWrappers.queryWrappers(detailsCorrect));
|
}
|
|
/**
|
* 新增监督纠正措施附件
|
* @param superviseDetailsCorrectId
|
* @param file
|
* @return
|
*/
|
@Override
|
public boolean uploadSuperviseDetailCorrectFile(Integer superviseDetailsCorrectId, MultipartFile file) {
|
if (superviseDetailsCorrectId == null) {
|
throw new ErrorException("缺少纠正措施id");
|
}
|
|
String urlString;
|
String pathName;
|
String path;
|
String filename = file.getOriginalFilename();
|
String contentType = file.getContentType();
|
QualitySuperviseDetailsCorrectFile superviseDetailsCorrectFile = new QualitySuperviseDetailsCorrectFile();
|
superviseDetailsCorrectFile.setSuperviseDetailsCorrectId(superviseDetailsCorrectId);
|
superviseDetailsCorrectFile.setFileName(filename);
|
if (contentType != null && contentType.startsWith("image/")) {
|
// 是图片
|
path = imgUrl;
|
superviseDetailsCorrectFile.setType(1);
|
} else {
|
// 是文件
|
path = wordUrl;
|
superviseDetailsCorrectFile.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));
|
superviseDetailsCorrectFile.setFileUrl(pathName);
|
qualitySuperviseDetailsCorrectFileMapper.insert(superviseDetailsCorrectFile);
|
return true;
|
} catch (Exception e) {
|
e.printStackTrace();
|
throw new ErrorException(e.getMessage());
|
}
|
}
|
|
/**
|
* 查询监督纠正措施附件
|
* @param superviseDetailsCorrectId
|
* @return
|
*/
|
@Override
|
public List<QualitySuperviseDetailsCorrectFile> getSuperviseDetailCorrectFileList(Integer superviseDetailsCorrectId) {
|
return qualitySuperviseDetailsCorrectFileMapper.selectList(Wrappers.<QualitySuperviseDetailsCorrectFile>lambdaQuery()
|
.eq(QualitySuperviseDetailsCorrectFile::getSuperviseDetailsCorrectId, superviseDetailsCorrectId));
|
}
|
|
/**
|
* 导出监督纠正措施
|
* @param superviseDetailsCorrectId
|
* @param response
|
*/
|
@Override
|
public void exportSuperviseDetaillCorrect(Integer superviseDetailsCorrectId, HttpServletResponse response) {
|
QualitySuperviseDetailsCorrect detailsCorrect = qualitySuperviseDetailsCorrectMapper.selectById(superviseDetailsCorrectId);
|
QualitySuperviseDetailsCorrectDto detailsCorrectDto = new QualitySuperviseDetailsCorrectDto();
|
BeanUtils.copyProperties(detailsCorrect, detailsCorrectDto);
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
// 提出时间
|
detailsCorrectDto.setRaiseTimeString(detailsCorrectDto.getRaiseTime() != null
|
? detailsCorrectDto.getRaiseTime().format(formatter) : null);
|
// 原因分析时间
|
detailsCorrectDto.setCauseTimeString(detailsCorrectDto.getCauseTime() != null
|
? detailsCorrectDto.getCauseTime().format(formatter) : null);
|
|
// 纠正时间
|
detailsCorrectDto.setCorrectTimeString(detailsCorrectDto.getCorrectTime() != null
|
? detailsCorrectDto.getCorrectTime().format(formatter) : null);
|
|
// 验证时间
|
detailsCorrectDto.setValidationTimeString(detailsCorrectDto.getValidationTime() != null
|
? detailsCorrectDto.getValidationTime().format(formatter) : null);
|
|
|
// 提出人签名
|
String raiseUrl = null;
|
if (detailsCorrectDto.getRaiseUserId() != null) {
|
raiseUrl = userMapper.selectById(detailsCorrectDto.getRaiseUserId()).getSignatureUrl();
|
if (StringUtils.isBlank(raiseUrl)) {
|
throw new ErrorException("找不到提出人的签名");
|
}
|
}
|
|
// 原因分析人
|
String causeUrl = null;
|
if (detailsCorrectDto.getCauseUserId() != null) {
|
causeUrl = userMapper.selectById(detailsCorrectDto.getCauseUserId()).getSignatureUrl();
|
if (StringUtils.isBlank(causeUrl)) {
|
throw new ErrorException("找不到原因分析人的签名");
|
}
|
}
|
|
// 纠正人
|
String correctUrl = null;
|
if (detailsCorrectDto.getCorrectUserId() != null) {
|
correctUrl = userMapper.selectById(detailsCorrectDto.getCorrectUserId()).getSignatureUrl();
|
if (StringUtils.isBlank(correctUrl)) {
|
throw new ErrorException("找不到纠正人的签名");
|
}
|
}
|
|
// 验证人
|
String validationUrl = null;
|
if (detailsCorrectDto.getValidationUserId() != null) {
|
validationUrl = userMapper.selectById(detailsCorrectDto.getValidationUserId()).getSignatureUrl();
|
if (StringUtils.isBlank(validationUrl)) {
|
throw new ErrorException("找不到验证人的签名");
|
}
|
}
|
|
// 获取路径
|
InputStream inputStream = this.getClass().getResourceAsStream("/static/supervise-detail-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<String, Object>() {{
|
put("correct", detailsCorrectDto);
|
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("导出失败");
|
}
|
|
}
|
}
|