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.common.core.domain.entity.User;
|
import com.ruoyi.common.exception.ServiceException;
|
import com.ruoyi.common.utils.SecurityUtils;
|
import com.ruoyi.device.dto.DeviceStateDto;
|
import com.ruoyi.device.mapper.DeviceMapper;
|
import com.ruoyi.device.mapper.DeviceStateMapper;
|
import com.ruoyi.device.pojo.Device;
|
import com.ruoyi.device.pojo.DeviceState;
|
import com.ruoyi.device.service.DeviceStateService;
|
import com.ruoyi.inspect.util.UserUtils;
|
import com.ruoyi.system.mapper.UserMapper;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
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;
|
|
/**
|
* <p>
|
* 设备停用/启用 服务实现类
|
* </p>
|
*
|
* @author
|
* @since 2024-09-26 09:51:40
|
*/
|
@Service
|
public class DeviceStateServiceImpl extends ServiceImpl<DeviceStateMapper, DeviceState> implements DeviceStateService {
|
|
@Resource
|
private LaboratoryMapper laboratoryMapper;
|
@Resource
|
private UserMapper userMapper;
|
@Resource
|
private DeviceMapper deviceMapper;
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public boolean saveDeviceState(DeviceState deviceState) {
|
User user = userMapper.selectById(SecurityUtils.getUserId().intValue());
|
if (deviceState.getStateId() != null) {
|
DeviceState existing = baseMapper.selectById(deviceState.getStateId());
|
if (existing == null) {
|
throw new ServiceException("单据不存在");
|
}
|
if ("关闭".equals(existing.getCurrentState())) {
|
throw new ServiceException("该流程已结束,不能再操作");
|
}
|
if (StringUtils.isNotBlank(existing.getCurrentResponsible())
|
&& !existing.getCurrentResponsible().equals(user.getName())) {
|
throw new ServiceException("您不是当前环节责任人,无权操作");
|
}
|
}
|
boolean saved = saveOrUpdate(deviceState);
|
if (saved && "关闭".equals(deviceState.getCurrentState())) {
|
updateDeviceStatus(deviceState);
|
}
|
return saved;
|
}
|
|
/**
|
* 流程最终批准后,把停用/启用结果同步到设备档案状态
|
*/
|
private void updateDeviceStatus(DeviceState deviceState) {
|
if (deviceState.getDeviceId() == null) {
|
return;
|
}
|
Device device = deviceMapper.selectById(deviceState.getDeviceId());
|
if (device == null) {
|
return;
|
}
|
Integer status = null;
|
if ("0scrap".equals(deviceState.getDeviceStatus())) {
|
status = 3;
|
} else if ("1startUsing".equals(deviceState.getDeviceStatus())) {
|
status = 0;
|
} else if ("2stopUsing".equals(deviceState.getDeviceStatus())) {
|
status = 2;
|
}
|
if (status != null) {
|
device.setDeviceStatus(status);
|
deviceMapper.updateById(device);
|
}
|
}
|
|
@Override
|
public IPage<DeviceStateDto> 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<DeviceStateDto>(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.<Laboratory>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<String, Object>() {{
|
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("导出失败");
|
}
|
}
|
}
|