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.common.GetLook; import com.yuanchu.mom.dto.DeviceRecordDto; import com.yuanchu.mom.dto.DeviceRecordExportWord; import com.yuanchu.mom.mapper.DeviceMapper; import com.yuanchu.mom.mapper.DeviceRecordMapper; import com.yuanchu.mom.mapper.LaboratoryMapper; import com.yuanchu.mom.pojo.Device; import com.yuanchu.mom.pojo.DeviceRecord; import com.yuanchu.mom.service.DeviceRecordService; import com.yuanchu.mom.utils.HackLoopTableRenderPolicy; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; 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.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** *

* cnas设备使用记录表 服务实现类 *

* * @author 江苏鵷雏网络科技有限公司 * @since 2024-09-21 11:06:47 */ @Service public class DeviceRecordServiceImpl extends ServiceImpl implements DeviceRecordService { @Resource private LaboratoryMapper laboratoryMapper; @Resource private DeviceMapper deviceMapper; @Resource private GetLook getLook; @Override public IPage deviceRecordPage(Integer deviceId, Page page, String sampleCode, String managementNumber) { Map map1 = getLook.selectPowerByMethodAndUserId("deviceRecordPage"); Integer userId = null; if (map1.get("look") == 1) { //个人 userId = map1.get("userId"); } return baseMapper.deviceRecordPage(deviceId, page, sampleCode, managementNumber, userId); } @Override public void exportUseRecord(Integer deviceId, String exportDate, HttpServletResponse response) { // 查询cnas设备使用记录 List deviceList = baseMapper.selectExportList(deviceId, exportDate); // 设备信息 Device device = deviceMapper.selectById(deviceId); // 查询设备属于哪个实验室 String laboratoryName = "装备线缆实验室"; // 要映射到word数据 List deviceExportList = new ArrayList<>(); // deviceExportList 赋值 for (DeviceRecord deviceRecord : deviceList) { // 处理设备 开始使用时间 和 结束时间 String startTime = ""; String endTime = ""; String operationDate = ""; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); if (deviceRecord.getUseStartDate() != null) { startTime = deviceRecord.getUseStartDate().format(formatter); endTime = deviceRecord.getUseEndDate().format(formatter); String[] startTimeSplit = startTime.split(" "); String[] endTimeSplit = endTime.split(" "); startTime = startTimeSplit[1]; if (startTimeSplit[0].equals(endTimeSplit[0])) { endTime = endTimeSplit[1]; } else { endTime = endTimeSplit[0] + '\n' + endTimeSplit[1]; } DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy.M.d"); operationDate = deviceRecord.getUseStartDate().format(formatter2); } // 处理使用前和使用后 String useBeforeString = deviceRecord.getUseBefore() == 0? "异常" : "良好"; String useAfterString = deviceRecord.getUseAfter() == 0 ? "异常" : "良好"; DeviceRecordExportWord deviceRecordExportWord = new DeviceRecordExportWord(); // 进行赋值 BeanUtils.copyProperties(deviceRecord, deviceRecordExportWord); deviceRecordExportWord.setUseBeforeString(useBeforeString); // 使用前 deviceRecordExportWord.setUseAfterString(useAfterString); // 使用后 deviceRecordExportWord.setOperationDate(operationDate); // 设备操作日期 deviceRecordExportWord.setUseStartDateString(startTime); // 开始时间 deviceRecordExportWord.setUseEndDateString(endTime); // 结束时间 deviceExportList.add(deviceRecordExportWord); } // 获取路径 InputStream inputStream = this.getClass().getResourceAsStream("/static/word/use-record.docx"); Configure configure = Configure.builder() .bind("useRecord", new HackLoopTableRenderPolicy()) .build(); String deviceName = device.getDeviceName(); String managementNumber = device.getManagementNumber(); XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render( new HashMap() {{ put("useRecord", deviceExportList); put("deviceName", deviceName); put("managementNumber", managementNumber); put("laboratory", laboratoryName); }}); 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("导出失败"); } } }