package com.ruoyi.device.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.ruoyi.basic.mapper.LaboratoryMapper;
import com.ruoyi.basic.pojo.Laboratory;
import com.ruoyi.device.dto.DeviceStateDto;
import com.ruoyi.device.mapper.DeviceStateMapper;
import com.ruoyi.device.pojo.DeviceState;
import com.ruoyi.device.service.DeviceStateService;
import com.ruoyi.inspect.util.UserUtils;
import org.springframework.stereotype.Service;
import jakarta.annotation.Resource;
import jakarta.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;
@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 != null ? laboratory.getLaboratoryName() : "";
} else {
laboratoryName = "";
}
// 获取路径
InputStream inputStream = this.getClass().getResourceAsStream("/static/word/device-status.docx");
Configure configure = Configure.builder()
.build();
XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
new HashMap() {{
put("deviceStateDto", deviceStateDto);
// 签名兜底: 人员未配置签名或签名文件缺失时返回透明图片, 保证导出不因空图片报错
put("submitOperatingPersonnelUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceStateDto.getSubmitOperatingPersonnel()));
put("departmentNextPesponsibleUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceStateDto.getDepartmentNextPesponsible()));
put("measuringRoomNextPesponsibleUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceStateDto.getMeasuringRoomNextPesponsible()));
put("approvalNextPesponsibleUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceStateDto.getApprovalNextPesponsible()));
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();
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("导出失败");
}
}
}