package com.yuanchu.mom.service.impl;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
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.DeviceInspectionRecordDto;
import com.yuanchu.mom.mapper.DeviceInspectionRecordMapper;
import com.yuanchu.mom.mapper.DeviceMapper;
import com.yuanchu.mom.mapper.UserMapper;
import com.yuanchu.mom.pojo.Device;
import com.yuanchu.mom.pojo.DeviceInspectionRecord;
import com.yuanchu.mom.pojo.DeviceInspectionRecordDetails;
import com.yuanchu.mom.pojo.User;
import com.yuanchu.mom.service.DeviceInspectionRecordDetailsService;
import com.yuanchu.mom.service.DeviceInspectionRecordService;
import com.yuanchu.mom.utils.HackLoopTableRenderPolicy;
import com.yuanchu.mom.utils.UserUtils;
import com.yuanchu.mom.utils.QueryWrappers;
import com.yuanchu.mom.vo.Result;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
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;
import java.util.List;
/**
*
* 设备点检记录表 服务实现类
*
*
* @author 江苏鵷雏网络科技有限公司
* @since 2024-12-16 04:25:14
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class DeviceInspectionRecordServiceImpl extends ServiceImpl implements DeviceInspectionRecordService {
@Resource
private UserMapper userMapper;
@Resource
private GetLook getLook;
@Resource
private DeviceMapper deviceMapper;
@Resource
private DeviceInspectionRecordDetailsService deviceInspectionRecordDetailsService;
/**
* 分页查询设备点检记录
*
* @param page 当前页码
*/
@Override
public Result> getDeviceInspectionRecordByPage(IPage page, DeviceInspectionRecordDto deviceInspectionRecordDto) {
IPage iPage = baseMapper.selectDeviceParameterPage(page, QueryWrappers.queryWrappers(deviceInspectionRecordDto));
return Result.success(iPage);
}
/**
* 查询点检详情
* @param inspectionRecordId
* @return
*/
@Override
public Result getDeviceInspectionRecord(Integer inspectionRecordId) {
DeviceInspectionRecord deviceInspectionRecord = baseMapper.selectById(inspectionRecordId);
DeviceInspectionRecordDto dto = new DeviceInspectionRecordDto();
BeanUtils.copyProperties(deviceInspectionRecord, dto);
List list = deviceInspectionRecordDetailsService.list(Wrappers.lambdaQuery().eq(DeviceInspectionRecordDetails::getInspectionRecordId, inspectionRecordId));
dto.setDetails(list);
return Result.success(dto);
}
/**
* 新增设备点检记录
*
* @param deviceInspectionRecord 设备点检记录
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Result addDeviceInspectionRecord(DeviceInspectionRecordDto deviceInspectionRecord) {
Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
User user = userMapper.selectById(userId);
deviceInspectionRecord.setRecorderId(userId);
deviceInspectionRecord.setRecorder(user.getName());
// 查询复核人id
if (deviceInspectionRecord.getReviewerId() != null) {
User reviewUser = userMapper.selectById(deviceInspectionRecord.getReviewerId());
deviceInspectionRecord.setReviewer(reviewUser.getName());
}
this.saveOrUpdate(deviceInspectionRecord);
if (CollectionUtils.isNotEmpty(deviceInspectionRecord.getDetails())) {
for (DeviceInspectionRecordDetails detail : deviceInspectionRecord.getDetails()) {
detail.setInspectionRecordId(deviceInspectionRecord.getInspectionRecordId());
}
deviceInspectionRecordDetailsService.saveBatch( deviceInspectionRecord.getDetails());
}
return Result.success();
}
/**
* 修改设备点检记录
*
* @param deviceInspectionRecord 设备点检记录
*/
@Override
public Result updateInspectionRecordAndDetails(DeviceInspectionRecordDto deviceInspectionRecord) {
// 查询复核人id
if (deviceInspectionRecord.getReviewerId() != null) {
User reviewUser = userMapper.selectById(deviceInspectionRecord.getReviewerId());
deviceInspectionRecord.setReviewer(reviewUser.getName());
}
this.saveOrUpdate(deviceInspectionRecord);
deviceInspectionRecordDetailsService.remove(Wrappers.lambdaQuery().eq(DeviceInspectionRecordDetails::getInspectionRecordId, deviceInspectionRecord.getInspectionRecordId()));
if (CollectionUtils.isNotEmpty(deviceInspectionRecord.getDetails())) {
for (DeviceInspectionRecordDetails detail : deviceInspectionRecord.getDetails()) {
detail.setInspectionRecordId(deviceInspectionRecord.getInspectionRecordId());
}
deviceInspectionRecordDetailsService.saveBatch( deviceInspectionRecord.getDetails());
}
return Result.success();
}
/**
* 删除设备点检记录
*
* @param deviceInspectionRecord 设备点检记录
*/
@Override
public Result deleteDeviceInspectionRecordOrDetails(DeviceInspectionRecordDto deviceInspectionRecord) {
this.removeById(deviceInspectionRecord);
deviceInspectionRecordDetailsService.remove(Wrappers.lambdaQuery().eq(DeviceInspectionRecordDetails::getInspectionRecordId, deviceInspectionRecord.getInspectionRecordId()));
return Result.success();
}
/**
* 复核点检记录
* @param dto
* @return
*/
@Override
public Result reviewDeviceInspectionRecord(DeviceInspectionRecordDto dto) {
LambdaUpdateWrapper wrapper = Wrappers.lambdaUpdate()
.eq(DeviceInspectionRecord::getInspectionRecordId, dto.getInspectionRecordId())
.set(DeviceInspectionRecord::getStatus, dto.getStatus())
.set(DeviceInspectionRecord::getReviewerRemark, dto.getReviewerRemark());
// 为0清除审核人
if (dto.getStatus().equals(0)) {
wrapper.set(DeviceInspectionRecord::getReviewerId, null)
.set(DeviceInspectionRecord::getReviewer, null);
}
this.update(wrapper);
return Result.success();
}
/**
* 导出设备点检记录
*
* @param deviceInspectionRecordId 设备点检记录id
* @param response 响应
*/
@Override
public Result exportDeviceInspectionRecord(Integer deviceInspectionRecordId, HttpServletResponse response) {
DeviceInspectionRecord deviceInspectionRecord = baseMapper.selectById(deviceInspectionRecordId);
DeviceInspectionRecordDto deviceInspectionRecordDto = new DeviceInspectionRecordDto();
BeanUtils.copyProperties(deviceInspectionRecord, deviceInspectionRecordDto);
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
deviceInspectionRecordDto.setTestDateString(deviceInspectionRecord.getTestDate() == null ? null : deviceInspectionRecord.getTestDate().format(dateFormatter));
List deviceInspectionRecordDetailsList = deviceInspectionRecordDetailsService.list(Wrappers.lambdaQuery().eq(DeviceInspectionRecordDetails::getInspectionRecordId, deviceInspectionRecordId));
Integer deviceId = deviceInspectionRecord.getDeviceId();
Device device = deviceMapper.selectById(deviceId);
// 获取路径
InputStream inputStream = this.getClass().getResourceAsStream("/static/word/device-inspection-record.docx");
Configure configure = Configure.builder()
.bind("deviceInspectionRecordDetailsList", new HackLoopTableRenderPolicy())
.build();
XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
new HashMap() {{
put("deviceInspectionRecord", deviceInspectionRecordDto);
put("deviceInspectionRecordDetailsList", deviceInspectionRecordDetailsList);
put("device", device);
put("recorderUrl", UserUtils.getFinalUserSignatureUrl(deviceInspectionRecordDto.getRecorderId()));
put("reviewerUrl", UserUtils.getFinalUserSignatureUrl(deviceInspectionRecordDto.getReviewerId()));
}});
try {
response.setContentType("application/msword");
String fileName = URLEncoder.encode(
device.getDeviceName() + "点检记录", "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("导出失败");
}
return Result.success();
}
}