package com.ruoyi.process.service.impl;
|
|
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.json.JSONArray;
|
import cn.hutool.json.JSONObject;
|
import cn.hutool.json.JSONUtil;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
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.data.PictureRenderData;
|
import com.ruoyi.common.core.domain.entity.User;
|
import com.ruoyi.common.utils.QueryWrappers;
|
import com.ruoyi.device.mapper.DeviceMapper;
|
import com.ruoyi.framework.exception.ErrorException;
|
import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
|
import com.ruoyi.inspect.util.UserUtils;
|
import com.ruoyi.process.dto.ProcessMethodVerifyDto;
|
import com.ruoyi.process.dto.ProcessMethodVerifyExportWordDto;
|
import com.ruoyi.process.mapper.ProcessMethodVerifyCalibrationsFileMapper;
|
import com.ruoyi.process.mapper.ProcessMethodVerifyMapper;
|
import com.ruoyi.process.mapper.ProcessMethodVerifyWorkFileMapper;
|
import com.ruoyi.process.pojo.*;
|
import com.ruoyi.process.service.*;
|
import com.ruoyi.system.mapper.UserMapper;
|
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 org.apache.poi.xwpf.usermodel.XWPFDocument;
|
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
|
import org.apache.poi.xwpf.usermodel.XWPFRun;
|
import org.apache.poi.xwpf.usermodel.XWPFTable;
|
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
|
|
import jakarta.annotation.Resource;
|
import jakarta.servlet.http.HttpServletResponse;
|
import java.io.File;
|
import java.io.InputStream;
|
import java.io.OutputStream;
|
import java.net.URLEncoder;
|
import java.time.LocalDateTime;
|
import java.time.format.DateTimeFormatter;
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.LinkedHashSet;
|
import java.util.Objects;
|
import java.util.Set;
|
|
/**
|
* 标准方法验证
|
*
|
* @author zhuo
|
* @since 2024-11-05
|
*/
|
@Service
|
@Transactional(rollbackFor = Exception.class)
|
public class ProcessMethodVerifyServiceImpl extends ServiceImpl<ProcessMethodVerifyMapper, ProcessMethodVerify> implements ProcessMethodVerifyService {
|
|
@Resource
|
private ProcessMethodVerifyCalibrationsFileService processMethodVerifyCalibrationsFileService;
|
@Resource
|
private ProcessMethodVerifyMethodFileService processMethodVerifyMethodFileService;
|
@Resource
|
private ProcessMethodVerifyWorkFileService processMethodVerifyWorkFileService;
|
@Resource
|
private ProcessMethodVerifyMachineAttachmentService processMethodVerifyMachineAttachmentService;
|
@Resource
|
private ProcessMethodVerifyCalibrationsFileMapper processMethodVerifyCalibrationsFileMapper;
|
@Resource
|
private ProcessMethodVerifyWorkFileMapper processMethodVerifyWorkFileMapper;
|
@Resource
|
private DeviceMapper deviceMapper;
|
|
@Resource
|
private UserMapper userMapper;
|
|
@Value("${file.path}")
|
private String imgUrl;
|
|
@Value("${wordUrl}")
|
private String wordUrl;
|
|
|
/**
|
* 标准方法跟新验证修改
|
*
|
* @param page
|
* @param methodVerifyDto
|
* @return
|
*/
|
@Override
|
public IPage<ProcessMethodVerify> pagesMethodVerify(Page page, ProcessMethodVerifyDto methodVerifyDto) {
|
if (methodVerifyDto.getOperationType() == null) {
|
throw new ErrorException("请选择是变更还是验证");
|
}
|
return baseMapper.pagesMethodVerify(page, QueryWrappers.queryWrappers(methodVerifyDto));
|
}
|
|
/**
|
* 新增标准方法验证
|
*
|
* @param methodVerifyDto
|
* @return
|
*/
|
@Override
|
public boolean addMethodSearchNew(ProcessMethodVerifyDto methodVerifyDto) {
|
if (methodVerifyDto.getOperationType() == null) {
|
throw new ErrorException("请选择是变更还是验证");
|
}
|
validateWordVerification(methodVerifyDto);
|
// 新增
|
baseMapper.insert(methodVerifyDto);
|
|
// 判断确认人是否为空
|
if (StringUtils.isNotBlank(methodVerifyDto.getConfirmUser())) {
|
// 添加上岗证
|
this.addWorkFile(methodVerifyDto);
|
}
|
|
// 新增设备信息
|
if (CollectionUtils.isNotEmpty(methodVerifyDto.getMachineAttachmentList())) {
|
this.addDevice(methodVerifyDto);
|
}
|
|
return true;
|
}
|
|
/**
|
* 查询标准方法验证详情
|
*
|
* @param methodVerifyId
|
* @return
|
*/
|
@Override
|
public ProcessMethodVerifyDto getMethodVerifyOne(Integer methodVerifyId) {
|
ProcessMethodVerify processMethodVerify = baseMapper.selectById(methodVerifyId);
|
ProcessMethodVerifyDto processMethodVerifyDto = new ProcessMethodVerifyDto();
|
BeanUtil.copyProperties(processMethodVerify, processMethodVerifyDto);
|
|
// 查询设备详情
|
processMethodVerifyDto.setMachineAttachmentList(processMethodVerifyMachineAttachmentService.list(Wrappers.<ProcessMethodVerifyMachineAttachment>lambdaQuery()
|
.eq(ProcessMethodVerifyMachineAttachment::getMethodVerifyId, methodVerifyId)));
|
// 查询原始记录
|
processMethodVerifyDto.setMethodFileList(processMethodVerifyMethodFileService.list(Wrappers.<ProcessMethodVerifyMethodFile>lambdaQuery()
|
.eq(ProcessMethodVerifyMethodFile::getMethodVerifyId, methodVerifyId)));
|
// 查询上岗证
|
processMethodVerifyDto.setWorkFileList(processMethodVerifyWorkFileService.list(Wrappers.<ProcessMethodVerifyWorkFile>lambdaQuery()
|
.eq(ProcessMethodVerifyWorkFile::getMethodVerifyId, methodVerifyId)));
|
// 查询校准证书
|
processMethodVerifyDto.setCalibrationsFileList(processMethodVerifyCalibrationsFileMapper.selectCalibrationsFileList(methodVerifyId));
|
|
|
return processMethodVerifyDto;
|
}
|
|
@Override
|
public List<ProcessMethodVerifyWorkFile> getCurrentWorkFiles(String userIds) {
|
List<ProcessMethodVerifyWorkFile> files = new ArrayList<>();
|
if (StringUtils.isBlank(userIds)) return files;
|
|
Set<Integer> ids = new LinkedHashSet<>();
|
for (String value : StrUtil.split(userIds, ",")) {
|
try {
|
ids.add(Integer.valueOf(value.trim()));
|
} catch (NumberFormatException e) {
|
throw new ErrorException("检测人员ID无效");
|
}
|
}
|
if (ids.size() > 5) throw new ErrorException("最多选择5名检测人员");
|
|
for (Integer userId : ids) {
|
ProcessMethodVerifyWorkFile file = processMethodVerifyWorkFileMapper.selectLatestAuthorization(userId);
|
if (file == null) continue;
|
file.setUserId(userId);
|
if (StringUtils.isBlank(file.getFileUrl())) {
|
file.setFileName("未上传上岗证书");
|
file.setType(0);
|
} else {
|
file.setFileName(file.getFileUrl());
|
file.setType(file.getFileUrl().matches("(?i).*\\.(png|jpe?g|gif|bmp|webp)$") ? 1 : 2);
|
}
|
files.add(file);
|
}
|
return files;
|
}
|
|
/**
|
* 修改标准方法验证
|
*
|
* @param methodVerifyDto
|
* @return
|
*/
|
@Override
|
public boolean updateMethodVerify(ProcessMethodVerifyDto methodVerifyDto) {
|
validateWordVerification(methodVerifyDto);
|
baseMapper.updateById(methodVerifyDto);
|
|
// 删除上岗证
|
processMethodVerifyWorkFileService.remove(Wrappers.<ProcessMethodVerifyWorkFile>lambdaQuery()
|
.eq(ProcessMethodVerifyWorkFile::getMethodVerifyId, methodVerifyDto.getMethodVerifyId()));
|
|
// 删除原本设备详情
|
processMethodVerifyMachineAttachmentService.remove(Wrappers.<ProcessMethodVerifyMachineAttachment>lambdaQuery()
|
.eq(ProcessMethodVerifyMachineAttachment::getMethodVerifyId, methodVerifyDto.getMethodVerifyId()));
|
|
// 删除元校准证书
|
processMethodVerifyCalibrationsFileService.remove(Wrappers.<ProcessMethodVerifyCalibrationsFile>lambdaQuery()
|
.eq(ProcessMethodVerifyCalibrationsFile::getMethodVerifyId, methodVerifyDto.getMethodVerifyId()));
|
|
// 判断确认人是否为空
|
if (StringUtils.isNotBlank(methodVerifyDto.getConfirmUser())) {
|
// 添加上岗证
|
this.addWorkFile(methodVerifyDto);
|
}
|
|
// 新增设备信息
|
if (CollectionUtils.isNotEmpty(methodVerifyDto.getMachineAttachmentList())) {
|
this.addDevice(methodVerifyDto);
|
}
|
return true;
|
}
|
|
/**
|
* 删除标准方法验证
|
*
|
* @param methodVerifyId
|
* @return
|
*/
|
@Override
|
public boolean delMethodVerify(Integer methodVerifyId) {
|
// 删除所有设备
|
processMethodVerifyMachineAttachmentService.remove(Wrappers.<ProcessMethodVerifyMachineAttachment>lambdaQuery()
|
.eq(ProcessMethodVerifyMachineAttachment::getMethodVerifyId, methodVerifyId));
|
|
// 删除所有原始记录
|
processMethodVerifyMethodFileService.remove(Wrappers.<ProcessMethodVerifyMethodFile>lambdaQuery()
|
.eq(ProcessMethodVerifyMethodFile::getMethodVerifyId, methodVerifyId));
|
|
|
baseMapper.deleteById(methodVerifyId);
|
|
return true;
|
}
|
|
/**
|
* 方法验证确认
|
*
|
* @param methodVerifyId
|
* @return
|
*/
|
@Override
|
public boolean methodVerifyAffirm(Integer methodVerifyId) {
|
baseMapper.update(null, Wrappers.<ProcessMethodVerify>lambdaUpdate()
|
.set(ProcessMethodVerify::getConfirmDate, LocalDateTime.now())
|
.eq(ProcessMethodVerify::getMethodVerifyId, methodVerifyId));
|
return true;
|
}
|
|
/**
|
* 方法验证新增原始记录
|
*
|
* @param methodVerifyId
|
* @param file
|
* @return
|
*/
|
@Override
|
public boolean uploadVerifyMethodFile(Integer methodVerifyId, MultipartFile file) {
|
if (methodVerifyId == null) {
|
throw new ErrorException("缺少原始记录id");
|
}
|
|
String urlString;
|
String pathName;
|
String path;
|
String filename = file.getOriginalFilename();
|
String contentType = file.getContentType();
|
ProcessMethodVerifyMethodFile methodFile = new ProcessMethodVerifyMethodFile();
|
methodFile.setMethodVerifyId(methodVerifyId);
|
methodFile.setFileName(filename);
|
if (contentType != null && contentType.startsWith("image/")) {
|
// 是图片
|
path = imgUrl;
|
methodFile.setType(1);
|
} else {
|
// 是文件
|
path = wordUrl;
|
methodFile.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));
|
methodFile.setFileUrl(pathName);
|
return processMethodVerifyMethodFileService.save(methodFile);
|
} catch (Exception e) {
|
e.printStackTrace();
|
System.err.println("附件上传错误");
|
return false;
|
}
|
}
|
|
/**
|
* 标准方法验证原始记录列表
|
*
|
* @param methodVerifyId
|
* @return
|
*/
|
@Override
|
public List<ProcessMethodVerifyMethodFile> getVerifyMethodFileList(Integer methodVerifyId) {
|
return processMethodVerifyMethodFileService.list(Wrappers.<ProcessMethodVerifyMethodFile>lambdaQuery()
|
.eq(ProcessMethodVerifyMethodFile::getMethodVerifyId, methodVerifyId));
|
}
|
|
/**
|
* 导出标准方法更新验证
|
*
|
* @param methodVerifyId 标准方法验证id
|
* @param response
|
*/
|
@Override
|
public void exportMethodVerify(Integer methodVerifyId, HttpServletResponse response) {
|
// 获取标准方法更新验证数据
|
ProcessMethodVerify processMethodVerify = baseMapper.selectById(methodVerifyId);
|
if (processMethodVerify == null) {
|
throw new ErrorException("方法验证记录不存在");
|
}
|
if (Objects.equals(processMethodVerify.getOperationType(), 1)
|
&& StringUtils.isNotBlank(processMethodVerify.getVerificationContent())) {
|
exportWordVerification(processMethodVerify, response);
|
return;
|
}
|
|
// 将内部字段转换成展示到word中的对象
|
ProcessMethodVerifyExportWordDto exportWordTemplate = getExportWordTemplate(processMethodVerify);
|
|
// 定义一个集合存放人员签名
|
ArrayList<PictureRenderData> pictureRenderDataList = new ArrayList<>();
|
// TODO:确认最多会有5个人
|
String confirmUser = processMethodVerify.getConfirmUser();
|
if (StringUtils.isNotBlank(confirmUser)) {
|
// 对人员id字符串进行分割成数组
|
String[] userIds = confirmUser.split(",");
|
// 循环获取人员签名
|
for (String userIdStr : userIds) {
|
// 转换为int类型
|
Integer userId = Integer.valueOf(userIdStr);
|
// 获取人员签名对象
|
PictureRenderData finalUserSignatureUrl = UserUtils.getFinalUserSignatureUrl(userId);
|
// 将人员签名对象添加到集合中
|
pictureRenderDataList.add(finalUserSignatureUrl);
|
}
|
}
|
|
// 判断集合长度,并补null到5个
|
while (pictureRenderDataList.size() < 5) {
|
pictureRenderDataList.add(null);
|
}
|
|
// 获取设备信息
|
List<ProcessMethodVerifyMachineAttachment> processMethodVerifyMachineAttachmentList = processMethodVerifyMachineAttachmentService.list(Wrappers.<ProcessMethodVerifyMachineAttachment>lambdaQuery()
|
.eq(ProcessMethodVerifyMachineAttachment::getMethodVerifyId, methodVerifyId));
|
|
// 获取路径
|
InputStream inputStream = this.getClass().getResourceAsStream("/static/method-verify.docx");
|
Configure configure = Configure.builder()
|
.bind("processMethodVerifyMachineAttachmentList", new HackLoopTableRenderPolicy())
|
.build();
|
XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
|
new HashMap<String, Object>() {{
|
put("processMethodVerify", exportWordTemplate);
|
put("processMethodVerifyMachineAttachmentList", processMethodVerifyMachineAttachmentList);
|
put("affirmUserUrl1", pictureRenderDataList.get(0));
|
put("affirmUserUrl2", pictureRenderDataList.get(1));
|
put("affirmUserUrl3", pictureRenderDataList.get(2));
|
put("affirmUserUrl4", pictureRenderDataList.get(3));
|
put("affirmUserUrl5", pictureRenderDataList.get(4));
|
}});
|
|
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();
|
inputStream.close();
|
} catch (Exception e) {
|
e.printStackTrace();
|
throw new RuntimeException("导出失败");
|
}
|
}
|
|
/** 按客户提供的横向方法验证表导出;原始记录和验证结果仍作为附件保存。 */
|
private void exportWordVerification(ProcessMethodVerify verify, HttpServletResponse response) {
|
JSONObject content = JSONUtil.parseObj(verify.getVerificationContent());
|
String[] checkKeys = {"personnel", "equipment", "reagents", "conditions", "sample", "steps",
|
"processing", "qualityControl", "result"};
|
InputStream templateStream = getClass().getResourceAsStream("/static/method-verification-customer.docx");
|
if (templateStream == null) throw new IllegalStateException("方法验证导出模板不存在");
|
try (InputStream inputStream = templateStream; XWPFDocument document = new XWPFDocument(inputStream)) {
|
XWPFTable table = document.getTables().get(0);
|
setTemplateCell(table, 0, 1, verify.getStandardName());
|
setTemplateCell(table, 0, 3, verify.getStandardCode());
|
setTemplateCell(table, 1, 1, verify.getVerifyItem());
|
|
JSONArray entries = content.getJSONArray("checks");
|
for (int i = 0; i < checkKeys.length; i++) {
|
JSONObject entry = findCheck(entries, checkKeys[i]);
|
Integer satisfied = entry == null ? null : entry.getInt("satisfied");
|
int row = i + 3;
|
if (row <= 8) {
|
setTemplateCell(table, row, 1, field(entry, "requirement"));
|
setTemplateCell(table, row, 2, field(entry, "capability"));
|
setTemplateCell(table, row, 3, satisfiedText(satisfied));
|
} else {
|
setTemplateCell(table, row, 1, mergedCheckText(entry));
|
setTemplateCell(table, row, 2, satisfiedText(satisfied));
|
}
|
}
|
setTemplateCell(table, 12, 1, field(content, "conclusion"));
|
setTemplateCell(table, 13, 1, decisionText(field(content, "reviewDecision"),
|
"评审人员", field(content, "reviewer"), field(content, "reviewDate")));
|
setTemplateCell(table, 14, 1, decisionText(field(content, "approvalDecision"),
|
"技术负责人", field(content, "approver"), field(content, "approvalDate")));
|
|
response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
|
String fileName = URLEncoder.encode("方法验证记录", "UTF-8");
|
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".docx");
|
document.write(response.getOutputStream());
|
} catch (Exception e) {
|
throw new RuntimeException("导出方法验证记录失败", e);
|
}
|
}
|
|
private JSONObject findCheck(JSONArray entries, String key) {
|
if (entries == null) return null;
|
for (Object value : entries) {
|
JSONObject check = JSONUtil.parseObj(value);
|
if (key.equals(check.getStr("key"))) return check;
|
}
|
return null;
|
}
|
|
private String field(JSONObject object, String key) {
|
return object == null ? "" : StrUtil.nullToEmpty(object.getStr(key));
|
}
|
|
private String satisfiedText(Integer satisfied) {
|
return satisfied == null ? "" : satisfied == 1 ? "是" : "否";
|
}
|
|
private String mergedCheckText(JSONObject entry) {
|
String requirement = field(entry, "requirement").trim();
|
String capability = field(entry, "capability").trim();
|
if (requirement.isEmpty()) return capability;
|
if (capability.isEmpty() || requirement.equals(capability)) return requirement;
|
return "方法要求:" + requirement + "\n实验室能力:" + capability;
|
}
|
|
private String decisionText(String decision, String personLabel, String person, String date) {
|
StringBuilder value = new StringBuilder();
|
for (String choice : new String[]{"同意使用", "不能使用", "限制使用"}) {
|
if (value.length() > 0) value.append(" ");
|
value.append(choice.equals(decision) ? "☑" : "□").append(choice);
|
}
|
value.append("\n").append(personLabel).append(":").append(person);
|
if (StringUtils.isNotBlank(date)) {
|
String[] parts = date.split("-");
|
value.append(" 日期:");
|
value.append(parts.length == 3 ? parts[0] + "年" + parts[1] + "月" + parts[2] + "日" : date);
|
}
|
return value.toString();
|
}
|
|
private void setTemplateCell(XWPFTable table, int row, int cellIndex, String value) {
|
XWPFTableCell cell = table.getRow(row).getCell(cellIndex);
|
XWPFParagraph paragraph = cell.getParagraphs().get(0);
|
XWPFRun run = paragraph.getRuns().get(0);
|
String[] lines = StrUtil.nullToEmpty(value).replace("\r\n", "\n").split("\n", -1);
|
run.setText(lines[0], 0);
|
for (int i = 1; i < lines.length; i++) {
|
run.addBreak();
|
run.setText(lines[i]);
|
}
|
}
|
|
private void validateWordVerification(ProcessMethodVerifyDto verify) {
|
// 没有 verificationContent 的旧记录继续由旧表单维护。
|
if (!Objects.equals(verify.getOperationType(), 1)
|
|| StringUtils.isBlank(verify.getVerificationContent())) return;
|
if (StringUtils.isBlank(verify.getStandardName())
|
|| StringUtils.isBlank(verify.getStandardCode())
|
|| StringUtils.isBlank(verify.getVerifyItem())) {
|
throw new ErrorException("请填写标准名称、标准编号和验证项目");
|
}
|
try {
|
JSONUtil.parseObj(verify.getVerificationContent());
|
} catch (Exception e) {
|
throw new ErrorException("方法验证内容格式错误");
|
}
|
// 保留旧列供现有依赖 method_name 的查询使用。
|
verify.setMethodName(verify.getStandardName());
|
}
|
|
private ProcessMethodVerifyExportWordDto getExportWordTemplate(ProcessMethodVerify processMethodVerify) {
|
ProcessMethodVerifyExportWordDto processMethodVerifyExportWordDto = new ProcessMethodVerifyExportWordDto();
|
BeanUtil.copyProperties(processMethodVerify, processMethodVerifyExportWordDto);
|
// (人)是否满足
|
if (processMethodVerify.getPersonIsSatisfied() != null) {
|
processMethodVerifyExportWordDto.setPersonIsSatisfiedStr(processMethodVerify.getPersonIsSatisfied() == 1 ? "√" : "×");
|
}
|
// (机)是否满足
|
if (processMethodVerify.getMachineIsSatisfied() != null) {
|
processMethodVerifyExportWordDto.setMachineIsSatisfiedStr(processMethodVerify.getMachineIsSatisfied() == 1 ? "√" : "×");
|
}
|
// (料)是否满足
|
if (processMethodVerify.getMaterialIsSatisfied() != null) {
|
processMethodVerifyExportWordDto.setMaterialIsSatisfiedStr(processMethodVerify.getMaterialIsSatisfied() == 1 ? "√" : "×");
|
}
|
// (法)是否满足
|
if (processMethodVerify.getMethodIsSatisfied() != null) {
|
processMethodVerifyExportWordDto.setMethodIsSatisfiedStr(processMethodVerify.getMethodIsSatisfied() == 1? "√" : "×");
|
}
|
// (环)是否满足
|
if (processMethodVerify.getEnvironmentIsSatisfied() != null) {
|
processMethodVerifyExportWordDto.setEnvironmentIsSatisfiedStr(processMethodVerify.getEnvironmentIsSatisfied() == 1 ? "√" : "×");
|
}
|
// (测量溯源性)是否满足
|
if (processMethodVerify.getTraceabilityIsSatisfied() != null) {
|
processMethodVerifyExportWordDto.setTraceabilityIsSatisfiedStr(processMethodVerify.getTraceabilityIsSatisfied() == 1 ? "√" : "×");
|
}
|
// (样品管理需求)是否满足
|
if (processMethodVerify.getManagementIsSatisfied() != null) {
|
processMethodVerifyExportWordDto.setManagementIsSatisfiedStr(processMethodVerify.getManagementIsSatisfied() == 1 ? "√" : "×");
|
}
|
// (其他)是否满足
|
if (processMethodVerify.getOtherIsSatisfied() != null) {
|
processMethodVerifyExportWordDto.setOtherIsSatisfiedStr(processMethodVerify.getOtherIsSatisfied() == 1 ? "√" : "×");
|
}
|
// 确认日期
|
processMethodVerifyExportWordDto.setConfirmDateStr(processMethodVerify.getConfirmDate() != null ? processMethodVerify.getConfirmDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")): null);
|
// 评审意见
|
processMethodVerifyExportWordDto.setReviewResultStr(buildOpinionCheckBox(processMethodVerify.getReviewResult()));
|
processMethodVerifyExportWordDto.setReviewDateStr(processMethodVerify.getReviewDate() != null ? processMethodVerify.getReviewDate().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日")): null);
|
// 审批意见
|
processMethodVerifyExportWordDto.setApprovalResultStr(buildOpinionCheckBox(processMethodVerify.getApprovalResult()));
|
processMethodVerifyExportWordDto.setApprovalDateStr(processMethodVerify.getApprovalDate() != null ? processMethodVerify.getApprovalDate().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日")): null);
|
return processMethodVerifyExportWordDto;
|
}
|
|
/**
|
* 拼接"同意使用/不能使用/限制使用"勾选项展示串
|
*/
|
private String buildOpinionCheckBox(String result) {
|
return ("同意使用".equals(result) ? "☑" : "□") + "同意使用 "
|
+ ("不能使用".equals(result) ? "☑" : "□") + "不能使用 "
|
+ ("限制使用".equals(result) ? "☑" : "□") + "限制使用";
|
}
|
|
|
/**
|
* 添加上岗证
|
*
|
* @param methodVerifyDto
|
*/
|
private void addWorkFile(ProcessMethodVerifyDto methodVerifyDto) {
|
List<String> confirmUserIds = StrUtil.split(methodVerifyDto.getConfirmUser(), ",");
|
List<ProcessMethodVerifyWorkFile> workFileList = new ArrayList<>();
|
for (String confirmUserId : confirmUserIds) {
|
Integer userId = Integer.valueOf(confirmUserId);
|
String workName = processMethodVerifyWorkFileMapper.selectWorkFile(userId);
|
// 判断是否有证书
|
if (StringUtils.isNotBlank(workName)) {
|
User user = userMapper.selectById(userId);
|
ProcessMethodVerifyWorkFile workFile = new ProcessMethodVerifyWorkFile();
|
workFile.setMethodVerifyId(methodVerifyDto.getMethodVerifyId());
|
workFile.setType(workName.matches("(?i).*\\.(png|jpe?g|gif|bmp|webp)$") ? 1 : 2);
|
workFile.setFileUrl(workName);
|
workFile.setFileName(workName);
|
workFile.setUserId(user.getId());
|
workFile.setUserName(user.getName());
|
workFileList.add(workFile);
|
}
|
}
|
if (CollectionUtils.isNotEmpty(workFileList)) {
|
processMethodVerifyWorkFileService.saveBatch(workFileList);
|
}
|
}
|
|
/**
|
* 添加设备信息
|
*
|
* @param methodVerifyDto
|
*/
|
private void addDevice(ProcessMethodVerifyDto methodVerifyDto) {
|
List<ProcessMethodVerifyCalibrationsFile> calibrationsFiles = new ArrayList<>();
|
for (ProcessMethodVerifyMachineAttachment machineAttachment : methodVerifyDto.getMachineAttachmentList()) {
|
machineAttachment.setMethodVerifyId(methodVerifyDto.getMethodVerifyId());
|
// 查询校准证书
|
String calibrationsName = processMethodVerifyCalibrationsFileMapper.selectCalibrationsFile(machineAttachment.getDeviceId());
|
// 判断是否有证书
|
if (StringUtils.isNotBlank(calibrationsName)) {
|
ProcessMethodVerifyCalibrationsFile calibrationsFile = new ProcessMethodVerifyCalibrationsFile();
|
calibrationsFile.setMethodVerifyId(methodVerifyDto.getMethodVerifyId());
|
calibrationsFile.setType(1);
|
calibrationsFile.setFileUrl(calibrationsName);
|
calibrationsFile.setFileName(calibrationsName);
|
calibrationsFile.setDeviceId((machineAttachment.getDeviceId()));
|
calibrationsFiles.add(calibrationsFile);
|
}
|
}
|
// 添加校准证书
|
processMethodVerifyCalibrationsFileService.saveBatch(calibrationsFiles);
|
|
// 添加设备
|
processMethodVerifyMachineAttachmentService.saveBatch(methodVerifyDto.getMachineAttachmentList());
|
}
|
|
}
|