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.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.DeviceExamineRecordContrastDetailsDto; import com.yuanchu.mom.dto.DeviceExamineRecordContrastDto; import com.yuanchu.mom.exception.ErrorException; import com.yuanchu.mom.mapper.DeviceExaminePlanDetailsMapper; import com.yuanchu.mom.mapper.DeviceExamineRecordContrastMapper; import com.yuanchu.mom.mapper.UserMapper; import com.yuanchu.mom.pojo.DeviceExaminePlanDetails; import com.yuanchu.mom.pojo.DeviceExamineRecordContrast; import com.yuanchu.mom.pojo.DeviceExamineRecordContrastDetails; import com.yuanchu.mom.pojo.User; import com.yuanchu.mom.service.DeviceExamineRecordContrastDetailsService; import com.yuanchu.mom.service.DeviceExamineRecordContrastService; import com.yuanchu.mom.utils.HackLoopTableRenderPolicy; import com.yuanchu.mom.utils.UserUtils; 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.LocalDateTime; import java.util.ArrayList; import java.util.HashMap; import java.util.List; /** *

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

* * @author 江苏鵷雏网络科技有限公司 * @since 2024-12-16 07:14:43 */ @Service @Transactional(rollbackFor = Exception.class) public class DeviceExamineRecordContrastServiceImpl extends ServiceImpl implements DeviceExamineRecordContrastService { @Resource private DeviceExamineRecordContrastDetailsService deviceExamineRecordContrastDetailsService; @Resource private DeviceExaminePlanDetailsMapper deviceExaminePlanDetailsMapper; @Resource private GetLook getLook; @Resource private UserMapper userMapper; /** * 查询核查对比记录 * @return */ @Override public DeviceExamineRecordContrastDto getExamineRecordContrast(Integer planDetailsId) { DeviceExamineRecordContrastDto contrastDto = baseMapper.getExamineRecordContrast(planDetailsId); // 判断是否为空 if (contrastDto == null) { contrastDto = new DeviceExamineRecordContrastDto(); // 查询设备详情 DeviceExaminePlanDetails deviceExaminePlanDetails = deviceExaminePlanDetailsMapper.selectById(planDetailsId); contrastDto.setPlanDetailsId(deviceExaminePlanDetails.getPlanDetailsId()); } else { // 查询详情 List list = deviceExamineRecordContrastDetailsService.list(Wrappers.lambdaQuery() .eq(DeviceExamineRecordContrastDetails::getRecordContrastId, contrastDto.getRecordContrastId())); contrastDto.setRecordContrastDetailsList(list); } return contrastDto; } /** * 新增核查对比记录 * @return */ @Override public boolean addExamineRecordContrast(DeviceExamineRecordContrastDto dto) { if (dto.getPlanDetailsId() == null) { throw new ErrorException("缺少计划详细信息id"); } if (dto.getRecordContrastId() == null) { Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId"); User user = userMapper.selectById(userId); dto.setCheckerUserId(userId); dto.setCheckerUser(user.getName()); // 查询审查人id if (dto.getReviewUserId() != null) { User reviewUser = userMapper.selectById(dto.getReviewUserId()); dto.setReviewUser(reviewUser.getName()); } } this.saveOrUpdate(dto); // 删除全部详情 deviceExamineRecordContrastDetailsService.remove(Wrappers.lambdaQuery() .eq(DeviceExamineRecordContrastDetails::getRecordContrastId, dto.getRecordContrastId())); //添加详情 if (CollectionUtils.isNotEmpty(dto.getRecordContrastDetailsList())) { for (DeviceExamineRecordContrastDetails details : dto.getRecordContrastDetailsList()) { details.setRecordContrastId(dto.getRecordContrastId()); } deviceExamineRecordContrastDetailsService.saveBatch(dto.getRecordContrastDetailsList()); } return false; } /** * 审核核查对比记录 * @return */ @Override public boolean reviewExamineRecordContrast(DeviceExamineRecordContrastDto dto) { if (dto.getPlanDetailsId() == null) { throw new ErrorException("缺少计划详细信息id"); } LambdaUpdateWrapper wrapper = Wrappers.lambdaUpdate() .eq(DeviceExamineRecordContrast::getPlanDetailsId, dto.getPlanDetailsId()) .set(DeviceExamineRecordContrast::getReviewStatus, dto.getReviewStatus()) .set(DeviceExamineRecordContrast::getReviewRemark, dto.getReviewRemark()) .set(DeviceExamineRecordContrast::getReviewTime, LocalDateTime.now()); // 为0清除审核人 if (dto.getReviewStatus().equals(0)) { wrapper.set(DeviceExamineRecordContrast::getReviewUserId, null) .set(DeviceExamineRecordContrast::getReviewUser, null); } this.update(wrapper); return true; } /** * 导出审核核查对比记录 * * @param planDetailsId 详情id * @param response */ @Override public void exportReviewExamineRecordContrast(Integer planDetailsId, HttpServletResponse response) { // 查询对比记录 DeviceExamineRecordContrastDto deviceExamineRecordContrast = baseMapper.selectExamineRecordContrastDto(planDetailsId); // 查询对比记录详情 List deviceExamineRecordContrastDetailList = deviceExamineRecordContrastDetailsService.list(Wrappers.lambdaQuery().eq(DeviceExamineRecordContrastDetails::getRecordContrastId, deviceExamineRecordContrast.getRecordContrastId())); // 设置序号 ArrayList deviceExamineRecordContrastDetailsDtoList = new ArrayList<>(); deviceExamineRecordContrastDetailList.forEach(deviceExamineRecordContrastDetail -> { DeviceExamineRecordContrastDetailsDto deviceExamineRecordContrastDetailsDto = new DeviceExamineRecordContrastDetailsDto(); BeanUtils.copyProperties(deviceExamineRecordContrastDetail, deviceExamineRecordContrastDetailsDto); deviceExamineRecordContrastDetailsDto.setIndex(deviceExamineRecordContrastDetailList.indexOf(deviceExamineRecordContrastDetail) + 1); deviceExamineRecordContrastDetailsDtoList.add(deviceExamineRecordContrastDetailsDto); }); // 获取路径 InputStream inputStream = this.getClass().getResourceAsStream("/static/word/review-examine-record-contrast.docx"); Configure configure = Configure.builder() .bind("deviceExamineRecordContrastDetailsDtoList", new HackLoopTableRenderPolicy()) .build(); XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render( new HashMap() {{ put("deviceExamineRecordContrast", deviceExamineRecordContrast); put("deviceExamineRecordContrastDetailsDtoList", deviceExamineRecordContrastDetailsDtoList); //获取核查人的签名地址 put("checkerUserUrl", UserUtils.getFinalUserSignatureUrl(deviceExamineRecordContrast.getCheckerUserId())); //获取审查人的签名地址 put("reviewUserUrl", UserUtils.getFinalUserSignatureUrl(deviceExamineRecordContrast.getReviewUserId())); }}); 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("导出失败"); } } }