package com.yuanchu.mom.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; 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.exception.ErrorException; import com.yuanchu.mom.mapper.DeviceAcceptanceFileMapper; import com.yuanchu.mom.mapper.DeviceAcceptanceMapper; import com.yuanchu.mom.mapper.DeviceMapper; import com.yuanchu.mom.pojo.Device; import com.yuanchu.mom.pojo.DeviceAcceptance; import com.yuanchu.mom.pojo.DeviceAcceptanceFile; import com.yuanchu.mom.service.DeviceAcceptanceService; import com.yuanchu.mom.utils.HackLoopTableRenderPolicy; import com.yuanchu.mom.utils.QueryWrappers; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.InputStream; import java.io.OutputStream; import java.net.URLEncoder; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.HashMap; /** *

* 设备验收(装备) 服务实现类 *

* * @author 江苏鵷雏网络科技有限公司 * @since 2024-12-20 01:45:14 */ @Service public class DeviceAcceptanceServiceImpl extends ServiceImpl implements DeviceAcceptanceService { @Resource private DeviceAcceptanceFileMapper deviceAcceptanceFileMapper; @Resource private DeviceMapper deviceMapper; @Value("${file.path}") private String imgUrl; @Value("${wordUrl}") private String wordUrl; /** * 设备验收列表 * @param page * @param deviceAcceptance * @return */ @Override public IPage pageDeviceAcceptance(Page page, DeviceAcceptance deviceAcceptance) { return baseMapper.pageDeviceAcceptance(page, QueryWrappers.queryWrappers(deviceAcceptance)); } /** * 设备验收附件 * @param acceptanceId * @param file * @return */ @Override public boolean uploadDeviceAcceptanceFile(Integer acceptanceId, MultipartFile file) { if (acceptanceId == null) { throw new ErrorException("缺少验收id"); } String urlString; String pathName; String path; String filename = file.getOriginalFilename(); String contentType = file.getContentType(); DeviceAcceptanceFile acceptanceFile = new DeviceAcceptanceFile(); acceptanceFile.setAcceptanceId(acceptanceId); acceptanceFile.setFileName(filename); if (contentType != null && contentType.startsWith("image/")) { // 是图片 path = imgUrl; acceptanceFile.setType(1); } else { // 是文件 path = wordUrl; acceptanceFile.setType(2); } try { File realpath = new File(path); if (!realpath.exists()) { realpath.mkdirs(); } pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + file.getOriginalFilename(); urlString = realpath + "/" + pathName; file.transferTo(new File(urlString)); acceptanceFile.setFileUrl(pathName); deviceAcceptanceFileMapper.insert(acceptanceFile); return true; } catch (Exception e) { e.printStackTrace(); System.err.println("附件上传错误"); return false; } } /** * 设备验收导出 * @param acceptanceId 设备验收id * @param response 响应体 * @return */ @Override public void exportDeviceAcceptance(Integer acceptanceId, HttpServletResponse response) { DeviceAcceptance deviceAcceptance = baseMapper.selectById(acceptanceId); if (deviceAcceptance == null) { throw new ErrorException("设备验收不存在"); } Device device = null; if (deviceAcceptance.getDeviceId() != null) { device = deviceMapper.selectById(deviceAcceptance.getDeviceId()); } // 获取路径 InputStream inputStream = this.getClass().getResourceAsStream("/static/word/acceptance-certificate.docx"); Configure configure = Configure.builder() .bind("deviceInspectionRecordDetailsList", new HackLoopTableRenderPolicy()) .build(); Device finalDevice = device; String deviceName = device.getDeviceName() == null ? "" : device.getDeviceName(); XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render( new HashMap() {{ put("deviceAcceptance", deviceAcceptance); put("device", finalDevice); }}); try { response.setContentType("application/msword"); 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("导出失败"); } } }