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.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.yuanchu.mom.common.GetLook;
|
import com.yuanchu.mom.dto.DeviceCalibrationPlanDetailDto;
|
import com.yuanchu.mom.dto.DeviceCalibrationPlanDto;
|
import com.yuanchu.mom.excel.upload.DeviceCalibrationPlanDetailUpload;
|
import com.yuanchu.mom.mapper.DeviceCalibrationPlanDetailMapper;
|
import com.yuanchu.mom.mapper.DeviceCalibrationPlanMapper;
|
import com.yuanchu.mom.mapper.UserMapper;
|
import com.yuanchu.mom.pojo.DeviceCalibrationPlan;
|
import com.yuanchu.mom.pojo.DeviceCalibrationPlanDetail;
|
import com.yuanchu.mom.service.DeviceCalibrationPlanDetailService;
|
import com.yuanchu.mom.service.DeviceCalibrationPlanService;
|
import com.yuanchu.mom.utils.HackLoopTableRenderPolicy;
|
import com.yuanchu.mom.utils.UserUtils;
|
import com.yuanchu.mom.utils.QueryWrappers;
|
import org.springframework.beans.BeanUtils;
|
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.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;
|
|
/**
|
* <p>
|
* 设备校准计划主表 服务实现类
|
* </p>
|
*
|
* @author 江苏鵷雏网络科技有限公司
|
* @since 2024-12-16 03:58:17
|
*/
|
@Service
|
@Transactional(rollbackFor = Exception.class)
|
public class DeviceCalibrationPlanServiceImpl extends ServiceImpl<DeviceCalibrationPlanMapper, DeviceCalibrationPlan> implements DeviceCalibrationPlanService {
|
|
@Resource
|
private DeviceCalibrationPlanDetailMapper deviceCalibrationPlanDetailMapper;
|
@Resource
|
private DeviceCalibrationPlanDetailService deviceCalibrationPlanDetailService;
|
|
@Resource
|
private UserMapper userMapper;
|
|
@Resource
|
private GetLook getLook;
|
|
/**
|
* 新增设备校准计划
|
* @param calibrationPlanDto
|
* @return
|
*/
|
@Override
|
public boolean addDeviceCalibrationPlan(DeviceCalibrationPlanDto calibrationPlanDto) {
|
// 当前登录用户
|
Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
|
// 编制日期
|
calibrationPlanDto.setWriteUserId(userId);
|
calibrationPlanDto.setWriteTime(LocalDateTime.now());
|
baseMapper.insert(calibrationPlanDto);
|
|
// 添加详情
|
if (CollectionUtils.isNotEmpty(calibrationPlanDto.getCalibrationPlanDetailList())) {
|
for (DeviceCalibrationPlanDetail calibrationPlanDetail : calibrationPlanDto.getCalibrationPlanDetailList()) {
|
calibrationPlanDetail.setPlanId(calibrationPlanDto.getPlanId());
|
}
|
deviceCalibrationPlanDetailService.saveBatch(calibrationPlanDto.getCalibrationPlanDetailList());
|
}
|
|
return true;
|
}
|
|
/**
|
* 导入设备校准计划
|
* @param file
|
* @return
|
*/
|
@Override
|
public boolean importDeviceCalibrationPlan(MultipartFile file, String planYear) {
|
// 当前登录用户
|
Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
|
// 文件名称
|
String fileName = file.getOriginalFilename().substring(0, file.getOriginalFilename().lastIndexOf("."));
|
DeviceCalibrationPlan calibrationPlan = new DeviceCalibrationPlan();
|
calibrationPlan.setPlanName(fileName);
|
calibrationPlan.setPlanYear(planYear);
|
calibrationPlan.setWriteUserId(userId);
|
calibrationPlan.setWriteTime(LocalDateTime.now());
|
baseMapper.insert(calibrationPlan);
|
|
List<DeviceCalibrationPlanDetail> detailsUploadList = new ArrayList<>();
|
// 导入附件内容
|
try {
|
// excel解析
|
EasyExcel.read(file.getInputStream(), DeviceCalibrationPlanDetailUpload.class, new AnalysisEventListener<DeviceCalibrationPlanDetailUpload>() {
|
@Override
|
public void invoke(DeviceCalibrationPlanDetailUpload detailsUpload, AnalysisContext analysisContext) {
|
// 判断是否为空
|
if (StringUtils.isNotBlank(detailsUpload.getDeviceName()) &&
|
StringUtils.isNotBlank(detailsUpload.getDeviceNumber())) {
|
// 对象复制
|
DeviceCalibrationPlanDetail calibrationPlanDetail = new DeviceCalibrationPlanDetail();
|
BeanUtils.copyProperties(detailsUpload, calibrationPlanDetail);
|
// 格式话最近检定时间和本年计划校准时间
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd");
|
calibrationPlanDetail.setLastDate(LocalDate.parse(detailsUpload.getLastDate(), formatter));
|
calibrationPlanDetail.setPlanDate(LocalDate.parse(detailsUpload.getLastDate(), formatter));
|
|
calibrationPlanDetail.setPlanId(calibrationPlan.getPlanId());
|
detailsUploadList.add(calibrationPlanDetail);
|
}
|
}
|
|
@Override
|
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
|
|
}
|
}).sheet().doRead();
|
deviceCalibrationPlanDetailService.saveBatch(detailsUploadList);
|
|
} catch (IOException e) {
|
throw new RuntimeException(e);
|
}
|
return true;
|
}
|
|
/**
|
* 设备校准计划批准
|
* @param deviceCalibrationPlan
|
* @return
|
*/
|
@Override
|
public boolean ratifyDeviceCalibrationPlan(DeviceCalibrationPlan deviceCalibrationPlan) {
|
// 当前登录用户
|
Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
|
baseMapper.update(null, Wrappers.<DeviceCalibrationPlan>lambdaUpdate()
|
.eq(DeviceCalibrationPlan::getPlanId, deviceCalibrationPlan.getPlanId())
|
.set(DeviceCalibrationPlan::getRatifyUserId, userId)
|
.set(DeviceCalibrationPlan::getRatifyRemark, deviceCalibrationPlan.getRatifyRemark())
|
.set(DeviceCalibrationPlan::getRatifyStatus, deviceCalibrationPlan.getRatifyStatus())
|
.set(DeviceCalibrationPlan::getRatifyTime, LocalDateTime.now())
|
);
|
return true;
|
}
|
|
/**
|
* 设备校准计划列表
|
* @param page
|
* @param deviceCalibrationPlan
|
* @return
|
*/
|
@Override
|
public IPage<DeviceCalibrationPlanDto> pageDeviceCalibrationPlan(Page page, DeviceCalibrationPlan deviceCalibrationPlan) {
|
return baseMapper.pageDeviceCalibrationPlan(page, QueryWrappers.queryWrappers(deviceCalibrationPlan));
|
}
|
|
/**
|
* 设备校准计划详情列表
|
* @param page
|
* @param deviceCalibrationPlanDetails
|
* @return
|
*/
|
@Override
|
public IPage<DeviceCalibrationPlanDetail> pageDeviceCalibrationPlanDetail(Page page, DeviceCalibrationPlanDetail deviceCalibrationPlanDetails) {
|
if (deviceCalibrationPlanDetails.getPlanId() == null) {
|
return new Page();
|
}
|
return deviceCalibrationPlanDetailMapper.pageDeviceCalibrationPlanDetail(page, QueryWrappers.queryWrappers(deviceCalibrationPlanDetails));
|
}
|
|
/**
|
* 导出设备校准计划
|
* @param deviceCalibrationPlanId
|
* @param response
|
*/
|
@Override
|
public void exportDeviceCalibrationPlanDetail(Integer deviceCalibrationPlanId, HttpServletResponse response) {
|
// 查询设备校准计划
|
DeviceCalibrationPlan deviceCalibrationPlan = baseMapper.selectById(deviceCalibrationPlanId);
|
DeviceCalibrationPlanDto deviceCalibrationPlanDto = new DeviceCalibrationPlanDto();
|
BeanUtils.copyProperties(deviceCalibrationPlan, deviceCalibrationPlanDto);
|
// 设置编制和批准时间格式
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
deviceCalibrationPlanDto.setWriteTimeStr(deviceCalibrationPlan.getWriteTime() == null ? null : deviceCalibrationPlan.getWriteTime().format(formatter));
|
deviceCalibrationPlanDto.setRatifyTimeStr(deviceCalibrationPlan.getRatifyTime() == null ? null : deviceCalibrationPlan.getRatifyTime().format(formatter));
|
|
// 查询设备校准计划详情
|
List<DeviceCalibrationPlanDetail> deviceCalibrationPlanDetailList = deviceCalibrationPlanDetailMapper.selectList(Wrappers.<DeviceCalibrationPlanDetail>lambdaQuery().eq(DeviceCalibrationPlanDetail::getPlanId, deviceCalibrationPlanId));
|
// 设置序号 和 时间
|
ArrayList<DeviceCalibrationPlanDetailDto> deviceCalibrationPlanDetailDtoList = new ArrayList<>();
|
deviceCalibrationPlanDetailList.forEach(deviceCalibrationPlanDetail -> {
|
DeviceCalibrationPlanDetailDto deviceCalibrationPlanDetailDto = new DeviceCalibrationPlanDetailDto();
|
BeanUtils.copyProperties(deviceCalibrationPlanDetail, deviceCalibrationPlanDetailDto);
|
deviceCalibrationPlanDetailDto.setIndex(deviceCalibrationPlanDetailList.indexOf(deviceCalibrationPlanDetail) + 1);
|
deviceCalibrationPlanDetailDto.setLastDateStr((deviceCalibrationPlanDetail.getLastDate().format(formatter)));
|
deviceCalibrationPlanDetailDto.setPlanDateStr((deviceCalibrationPlanDetail.getPlanDate().format(formatter)));
|
deviceCalibrationPlanDetailDtoList.add(deviceCalibrationPlanDetailDto);
|
});
|
|
// 获取路径
|
InputStream inputStream = this.getClass().getResourceAsStream("/static/word/device-calibration-plan.docx");
|
Configure configure = Configure.builder()
|
.bind("deviceCalibrationPlanDetailDtoList", new HackLoopTableRenderPolicy())
|
.build();
|
XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
|
new HashMap<String, Object>() {{
|
put("deviceCalibrationPlan", deviceCalibrationPlanDto);
|
put("deviceCalibrationPlanDetailDtoList", deviceCalibrationPlanDetailDtoList);
|
//获取编制人的签名地址
|
put("organizationUrl", UserUtils.getFinalUserSignatureUrl(deviceCalibrationPlan.getRatifyUserId()));
|
//获取批准人的签名地址
|
put("approvedUrl", UserUtils.getFinalUserSignatureUrl(deviceCalibrationPlan.getWriteUserId()));
|
}});
|
|
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("导出失败");
|
}
|
}
|
|
}
|