package com.yuanchu.mom.service.impl; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 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.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.DeviceExamineRecordDto; import com.yuanchu.mom.exception.ErrorException; import com.yuanchu.mom.mapper.DeviceExaminePlanDetailsMapper; import com.yuanchu.mom.mapper.DeviceExamineRecordMapper; import com.yuanchu.mom.mapper.DeviceMapper; import com.yuanchu.mom.mapper.UserMapper; import com.yuanchu.mom.pojo.*; import com.yuanchu.mom.service.DeviceExamineRecordDetailService; import com.yuanchu.mom.service.DeviceExamineRecordService; import com.yuanchu.mom.utils.HackLoopTableRenderPolicy; import com.yuanchu.mom.utils.UserUtils; 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.util.HashMap; import java.util.List; /** *

* 设备核查记录表 服务实现类 *

* * @author 江苏鵷雏网络科技有限公司 * @since 2024-12-16 07:14:28 */ @Service @Transactional(rollbackFor = Exception.class) public class DeviceExamineRecordServiceImpl extends ServiceImpl implements DeviceExamineRecordService { @Resource private DeviceExamineRecordDetailService deviceExamineRecordDetailService; @Resource private DeviceExaminePlanDetailsMapper deviceExaminePlanDetailsMapper; @Resource private DeviceMapper deviceMapper; @Resource private GetLook getLook; @Resource private UserMapper userMapper; /** * 查询核查记录 * * @return */ @Override public DeviceExamineRecordDto getExamineRecord(Integer planDetailsId) { DeviceExamineRecordDto deviceExamineRecord = baseMapper.getExamineRecord(planDetailsId); // 判断是否为空 if (deviceExamineRecord == null) { deviceExamineRecord = new DeviceExamineRecordDto(); // 查询设备详情 DeviceExaminePlanDetails deviceExaminePlanDetails = deviceExaminePlanDetailsMapper.selectById(planDetailsId); Device device = deviceMapper.selectById(deviceExaminePlanDetails.getDeviceId()); if (device != null) { deviceExamineRecord.setDeviceName(device.getDeviceName()); deviceExamineRecord.setDeviceNumber(device.getManagementNumber()); deviceExamineRecord.setPlanDetailsId(deviceExaminePlanDetails.getPlanDetailsId()); } } else { // 查询详情 List list = deviceExamineRecordDetailService.list(Wrappers.lambdaQuery() .eq(DeviceExamineRecordDetail::getRecordId, deviceExamineRecord.getRecordId())); deviceExamineRecord.setRecordDetailList(list); } return deviceExamineRecord; } /** * 新增核查记录 * * @return */ @Override public boolean addExamineRecord(DeviceExamineRecordDto deviceExamineRecordDto) { if (deviceExamineRecordDto.getPlanDetailsId() == null) { throw new ErrorException("缺少计划详细信息id"); } if (deviceExamineRecordDto.getRecordId() == null) { Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId"); User user = userMapper.selectById(userId); deviceExamineRecordDto.setCheckerUserId(userId); deviceExamineRecordDto.setCheckerUser(user.getName()); // 查询审查人id if (deviceExamineRecordDto.getReviewUserId() != null) { User reviewUser = userMapper.selectById(deviceExamineRecordDto.getReviewUserId()); deviceExamineRecordDto.setReviewUser(reviewUser.getName()); } } this.saveOrUpdate(deviceExamineRecordDto); // 删除全部详情 deviceExamineRecordDetailService.remove(Wrappers.lambdaQuery() .eq(DeviceExamineRecordDetail::getRecordId, deviceExamineRecordDto.getRecordId())); //添加详情 if (CollectionUtils.isNotEmpty(deviceExamineRecordDto.getRecordDetailList())) { for (DeviceExamineRecordDetail deviceExamineRecordDetail : deviceExamineRecordDto.getRecordDetailList()) { deviceExamineRecordDetail.setRecordId(deviceExamineRecordDto.getRecordId()); } deviceExamineRecordDetailService.saveBatch(deviceExamineRecordDto.getRecordDetailList()); } return true; } /** * 复核核查记录 * * @return */ @Override public boolean reviewExamineRecord(DeviceExamineRecordDto dto) { if (dto.getPlanDetailsId() == null) { throw new ErrorException("缺少计划详细信息id"); } LambdaUpdateWrapper wrapper = Wrappers.lambdaUpdate() .eq(DeviceExamineRecord::getPlanDetailsId, dto.getPlanDetailsId()) .set(DeviceExamineRecord::getReviewStatus, dto.getReviewStatus()) .set(DeviceExamineRecord::getReviewRemark, dto.getReviewRemark()); // 为0清除审核人 if (dto.getReviewStatus().equals(0)) { wrapper.set(DeviceExamineRecord::getReviewUserId, null) .set(DeviceExamineRecord::getReviewUser, null); } this.update(wrapper); return true; } /** * 导出复核核查记录 * * @param planDetailsId 复核核查记录id * @return */ @Override public void exportReviewExamineRecordDetail(Integer planDetailsId, HttpServletResponse response) { // 查询复核核查记录 DeviceExamineRecordDto deviceExamineRecordDto = baseMapper.selectReviewExamineRecordDto(planDetailsId); // 查询复核核查记录详情 List deviceExamineRecordDetailList = deviceExamineRecordDetailService.list(Wrappers.lambdaQuery().eq(DeviceExamineRecordDetail::getRecordId, deviceExamineRecordDto.getRecordId())); // 获取路径 InputStream inputStream = this.getClass().getResourceAsStream("/static/word/examine-record.docx"); Configure configure = Configure.builder() .bind("deviceExamineRecordDetailList", new HackLoopTableRenderPolicy()) .build(); XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render( new HashMap() {{ put("deviceExamineRecordDto", deviceExamineRecordDto); put("deviceExamineRecordDetailList", deviceExamineRecordDetailList); //获取核查人的签名地址 put("checkerUserUrl", UserUtils.getFinalUserSignatureUrl(deviceExamineRecordDto.getCheckerUserId())); //获取审查人的签名地址 put("reviewUserUrl", UserUtils.getFinalUserSignatureUrl(deviceExamineRecordDto.getReviewUserId())); }}); try { response.setContentType("application/msword"); String deviceName = StringUtils.isNotEmpty(deviceExamineRecordDto.getDeviceName()) ? deviceExamineRecordDto.getDeviceName() : ""; String fileName = URLEncoder.encode( deviceName+ "核查记录", "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("导出失败"); } } }