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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.data.Pictures;
import com.yuanchu.mom.dto.DeviceStateDto;
import com.yuanchu.mom.exception.ErrorException;
import com.yuanchu.mom.mapper.DeviceStateMapper;
import com.yuanchu.mom.mapper.LaboratoryMapper;
import com.yuanchu.mom.mapper.UserMapper;
import com.yuanchu.mom.pojo.DeviceState;
import com.yuanchu.mom.pojo.Laboratory;
import com.yuanchu.mom.pojo.User;
import com.yuanchu.mom.service.DeviceStateService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
/**
*
* 设备停用/启用 服务实现类
*
*
* @author 芯导软件(江苏)有限公司
* @since 2024-09-26 09:51:40
*/
@Service
public class DeviceStateServiceImpl extends ServiceImpl implements DeviceStateService {
@Resource
private LaboratoryMapper laboratoryMapper;
@Resource
private UserMapper userMapper;
@Value("${file.path}")
private String imgUrl;
@Override
public IPage getDeviceStatePage(Integer deviceId, Page page, String processNumber) {
return baseMapper.getDeviceStatePage(deviceId, page, processNumber);
}
@Override
public void exportDeviceStatus(Integer deviceId, String processNumber, HttpServletResponse response) {
// 根据流程编号 查询cnas设备状态
DeviceStateDto deviceStateDto = baseMapper.getDeviceStatePage(deviceId,new Page(1,1), processNumber).getRecords().get(0);
// 对时间进行修改
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
deviceStateDto.setSubmitDateString(deviceStateDto.getSubmitDate() != null ? deviceStateDto.getSubmitDate().format(format) : " 年 月 日");
deviceStateDto.setDepartmentDateString(deviceStateDto.getDepartmentDate() != null? deviceStateDto.getDepartmentDate().format(format) : " 年 月 日");
deviceStateDto.setMeasuringRoomDateString(deviceStateDto.getMeasuringRoomDate() != null? deviceStateDto.getMeasuringRoomDate().format(format) : " 年 月 日");
deviceStateDto.setApprovalDateString(deviceStateDto.getApprovalDate() != null? deviceStateDto.getApprovalDate().format(format) : " 年 月 日");
// 查询设备属于哪个实验室
String laboratoryName;
String largeCategory = deviceStateDto.getLargeCategory();
if (StringUtils.isNotBlank(largeCategory)) {
largeCategory = largeCategory.substring(0, 1);
Laboratory laboratory = laboratoryMapper.selectOne(Wrappers.lambdaQuery()
.eq(Laboratory::getLaboratoryNumber, largeCategory)
.select(Laboratory::getLaboratoryName));
laboratoryName = laboratory.getLaboratoryName();
} else {
laboratoryName = "";
}
//todo: 设备状态查询签名地址 暂时人名查询
//获取申请人的签名地址
String applicantUrl = null;
if (deviceStateDto.getSubmitOperatingPersonnel() != null) {
applicantUrl = userMapper.selectOne(Wrappers.lambdaQuery()
.eq(User::getName, deviceStateDto.getSubmitOperatingPersonnel()))
.getSignatureUrl();
if (StringUtils.isBlank(applicantUrl)) {
throw new ErrorException("找不到申请人的签名");
}
}
//获取部门负责人的签名地址
String headOfDepartmentUrl = null;
if (deviceStateDto.getDepartmentNextPesponsible() != null) {
headOfDepartmentUrl = userMapper.selectOne(Wrappers.lambdaQuery()
.eq(User::getName, deviceStateDto.getDepartmentNextPesponsible()))
.getSignatureUrl();
if (StringUtils.isBlank(headOfDepartmentUrl)) {
throw new ErrorException("找不到部门负责人的签名");
}
}
//获取计量室复测人的签名地址
String measurementRoomUrl = null;
if (deviceStateDto.getMeasuringRoomNextPesponsible() != null) {
measurementRoomUrl = userMapper.selectOne(Wrappers.lambdaQuery()
.eq(User::getName, deviceStateDto.getMeasuringRoomNextPesponsible()))
.getSignatureUrl();
if (StringUtils.isBlank(measurementRoomUrl)) {
throw new ErrorException("找不到计量室复测人的签名");
}
}
//获取批准人的签名地址
String approvedUrl = null;
if (deviceStateDto.getApprovalNextPesponsible() != null) {
approvedUrl = userMapper.selectOne(Wrappers.lambdaQuery()
.eq(User::getName, deviceStateDto.getApprovalNextPesponsible()))
.getSignatureUrl();
if (StringUtils.isBlank(approvedUrl)) {
throw new ErrorException("找不到批准人的签名");
}
}
// 获取路径
InputStream inputStream = this.getClass().getResourceAsStream("/static/word/device-status.docx");
Configure configure = Configure.builder()
.build();
String finalApplicantUrl = applicantUrl; // 申请人的签名地址
String finalHeadOfDepartmentUrl = headOfDepartmentUrl; // 部门负责人的签名地址
String finalMeasurementRoomUrl = measurementRoomUrl; // 计量室复测人的签名地址
String finalApprovedUrl = approvedUrl; // 批准人的签名地址
XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
new HashMap() {{
put("deviceStateDto", deviceStateDto);
put("submitOperatingPersonnelUrl", StringUtils.isNotBlank(finalApplicantUrl) ? Pictures.ofLocal(imgUrl + "/" + finalApplicantUrl).create() : null);
put("departmentNextPesponsibleUrl", StringUtils.isNotBlank(finalHeadOfDepartmentUrl) ? Pictures.ofLocal(imgUrl + "/" + finalHeadOfDepartmentUrl).create() : null);
put("measuringRoomNextPesponsibleUrl", StringUtils.isNotBlank(finalMeasurementRoomUrl) ? Pictures.ofLocal(imgUrl + "/" + finalMeasurementRoomUrl).create() : null);
put("approvalNextPesponsibleUrl", StringUtils.isNotBlank(finalApprovedUrl) ? Pictures.ofLocal(imgUrl + "/" + finalApprovedUrl).create() : null);
put("laboratory", laboratoryName);
}});
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("导出失败");
}
}
}