From 4e4047e9b523e37fd4d83cbf9fdd5abe201ba278 Mon Sep 17 00:00:00 2001 From: zhuo <2089219845@qq.com> Date: 星期六, 15 二月 2025 13:29:30 +0800 Subject: [PATCH] 添加设备档案导入 --- cnas-server/src/main/java/com/yuanchu/mom/service/impl/DeviceServiceImpl.java | 219 +++++++++++++++++++++++++++++++++++++++++-- cnas-server/src/main/java/com/yuanchu/mom/controller/DeviceController.java | 17 +++ cnas-server/src/main/java/com/yuanchu/mom/service/DeviceService.java | 5 + 3 files changed, 230 insertions(+), 11 deletions(-) diff --git a/cnas-server/src/main/java/com/yuanchu/mom/controller/DeviceController.java b/cnas-server/src/main/java/com/yuanchu/mom/controller/DeviceController.java index 1ce280d..a266330 100644 --- a/cnas-server/src/main/java/com/yuanchu/mom/controller/DeviceController.java +++ b/cnas-server/src/main/java/com/yuanchu/mom/controller/DeviceController.java @@ -20,6 +20,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.io.File; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @@ -216,4 +217,18 @@ return Result.success(deviceService.treeDevice(deviceName)); } -} \ No newline at end of file + @ApiOperation(value = "璁惧妗f瀵煎嚭") + @GetMapping("/exportDeviceFile") + @ValueAuth + public void exportDeviceFile(@RequestParam Integer deviceId, HttpServletResponse response) throws Exception { + deviceService.exportDeviceFile(deviceId,response); + } + + @ApiOperation(value = "浠櫒璁惧涓�瑙堣〃瀵煎嚭") + @GetMapping("/exportEquipmentDetails") + @ValueAuth + public void exportEquipmentDetails(HttpServletResponse response) throws Exception { + deviceService.exportEquipmentDetails(response); + } + +} diff --git a/cnas-server/src/main/java/com/yuanchu/mom/service/DeviceService.java b/cnas-server/src/main/java/com/yuanchu/mom/service/DeviceService.java index 4f08b8b..972f6d8 100644 --- a/cnas-server/src/main/java/com/yuanchu/mom/service/DeviceService.java +++ b/cnas-server/src/main/java/com/yuanchu/mom/service/DeviceService.java @@ -9,6 +9,7 @@ import com.yuanchu.mom.vo.Result; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.util.List; import java.util.Map; @@ -46,4 +47,8 @@ List<Map<String, Object>> treeDevice(String deviceName); Result<?> determineWhetherToCollectData(String managementNumber, HttpServletRequest request); + + void exportDeviceFile(Integer deviceId, HttpServletResponse response); + + void exportEquipmentDetails(HttpServletResponse response); } diff --git a/cnas-server/src/main/java/com/yuanchu/mom/service/impl/DeviceServiceImpl.java b/cnas-server/src/main/java/com/yuanchu/mom/service/impl/DeviceServiceImpl.java index d6abe8c..9d198bb 100644 --- a/cnas-server/src/main/java/com/yuanchu/mom/service/impl/DeviceServiceImpl.java +++ b/cnas-server/src/main/java/com/yuanchu/mom/service/impl/DeviceServiceImpl.java @@ -7,30 +7,34 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; 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.common.PrintChina; -import com.yuanchu.mom.dto.ADto; -import com.yuanchu.mom.dto.BDto; -import com.yuanchu.mom.dto.DeviceDto; +import com.yuanchu.mom.dto.*; import com.yuanchu.mom.exception.ErrorException; -import com.yuanchu.mom.mapper.DeviceMapper; -import com.yuanchu.mom.mapper.StructureItemParameterMapper; -import com.yuanchu.mom.mapper.UserMapper; -import com.yuanchu.mom.pojo.DataConfig; -import com.yuanchu.mom.pojo.Device; -import com.yuanchu.mom.pojo.StructureItemParameter; -import com.yuanchu.mom.pojo.User; +import com.yuanchu.mom.mapper.*; +import com.yuanchu.mom.pojo.*; import com.yuanchu.mom.service.DataConfigService; import com.yuanchu.mom.service.DeviceService; +import com.yuanchu.mom.service.DocumentService; import com.yuanchu.mom.utils.DataAcquisition; +import com.yuanchu.mom.utils.HackLoopTableRenderPolicy; import com.yuanchu.mom.utils.QueryWrappers; import com.yuanchu.mom.vo.Result; import lombok.AllArgsConstructor; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URLEncoder; +import java.text.SimpleDateFormat; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -54,6 +58,14 @@ @Autowired private DataConfigService dataConfigService; + + private InsSampleMapper insSampleMapper; + + private DocumentService documentService; + + private DeviceMetricRecordMapper deviceMetricRecordMapper; + + private DeviceMaintenanceMapper deviceMaintenanceMapper; @Override public List<User> selectUserList() { @@ -998,4 +1010,191 @@ return Result.success(true); } } + + @Override + public void exportDeviceFile(Integer deviceId, HttpServletResponse response) { + + // 璁惧淇℃伅 + Device device = baseMapper.selectById(deviceId); + // 璁惧妗f + List<Document> documentList = documentService.list(Wrappers.<Document>lambdaQuery().eq(Document::getDeviceId, deviceId)); + // 璁惧鏍″噯琛� + List<DeviceMetricRecord> deviceMetricRecordList = deviceMetricRecordMapper.selectList(Wrappers.<DeviceMetricRecord>lambdaQuery().eq(DeviceMetricRecord::getDeviceId, deviceId)); + // 璁惧缁翠慨琛� + List<DeviceMaintenance> deviceMaintenanceList = deviceMaintenanceMapper.selectList(Wrappers.<DeviceMaintenance>lambdaQuery().eq(DeviceMaintenance::getDeviceId, deviceId)); + + + // 杩斿洖缁檞ord鐨勬暟鎹垪琛� 鍒嗕负宸﹀彸涓ゅ垪鏁版嵁 + List<DocumentExportWordDto> documentExportWordDtoList = new ArrayList<>(); + // 缁欐。妗堝姞搴忓彿 骞跺乏鍙冲垎涓哄乏鍙充袱鍒楀湪word涓樉绀� + extracted(documentList, documentExportWordDtoList); + + + // 灏嗘牎鍑嗚〃鍜岀淮淇〃鏀惧叆涓�涓璞′腑鏂逛究word琛ㄦ牸涓樉绀� + List<DeviceMetricRecordAndMaintenanceDto> deviceMetricRecordAndMaintenanceDtoList = getDeviceMetricRecordAndMaintenanceDtoList(deviceMetricRecordList, deviceMaintenanceList); + + + // 鑾峰彇璺緞 + InputStream inputStream = this.getClass().getResourceAsStream("/static/word/device-document.docx"); + Configure configure = Configure.builder() + .bind("document", new HackLoopTableRenderPolicy()) + .bind("deviceMetricRecordAndMaintenanceDtoList", new HackLoopTableRenderPolicy()) + .build(); + XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render( + new HashMap<String, Object>() {{ + put("device", device); + put("document", documentExportWordDtoList); // 妗f + put("deviceMetricRecordAndMaintenanceDtoList", deviceMetricRecordAndMaintenanceDtoList); // 鏍″噯琛� 鍜� 缁翠慨琛� + }}); + + try { + response.setContentType("application/msword"); + String fileName = URLEncoder.encode( + device.getDeviceName() + "妗f", "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("瀵煎嚭澶辫触"); + } + } + + private List<DeviceMetricRecordAndMaintenanceDto> getDeviceMetricRecordAndMaintenanceDtoList(List<DeviceMetricRecord> deviceMetricRecordList, List<DeviceMaintenance> deviceMaintenanceList) { + // 璁惧鏍″噯琛ㄥ拰璁惧缁翠慨琛ㄧ殑闆嗗悎 + List<DeviceMetricRecordAndMaintenanceDto> deviceMetricRecordAndMaintenanceDtoList = new ArrayList<>(); + // 璁惧鏍″噯琛ㄥ拰璁惧缁翠慨琛ㄧ殑闀垮害鍙兘涓嶄竴鏍� 鍙栨渶澶у�� 涓嶅鐨勭敤绌烘暟鎹~鍏� + int metricRecordSize = deviceMetricRecordList.size(); + int maintenanceSize = deviceMaintenanceList.size(); + int size = Math.max(metricRecordSize, maintenanceSize); + // 缁� 鏍¢獙鍜岀淮淇璞� 璧嬪�� + for (int i = 0; i < size; i++) { + // 鏍¢獙鍜岀淮淇璞� + DeviceMetricRecordAndMaintenanceDto deviceMetricRecordAndMaintenanceDto = new DeviceMetricRecordAndMaintenanceDto(); + // 璁剧疆搴忓彿 + deviceMetricRecordAndMaintenanceDto.setIndex(i + 1); + + // 鏍″噯琛ㄦ暟鎹� + if (metricRecordSize > i) { + // 璁剧疆鏃ユ湡鏍煎紡 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + // 鑾峰彇璁惧鏍″噯琛ㄦ暟鎹� + DeviceMetricRecord deviceMetricRecord = deviceMetricRecordList.get(i); + // 璁剧疆鏍″噯鏃ユ湡 + deviceMetricRecordAndMaintenanceDto.setCalibrationDateString(sdf.format(deviceMetricRecord.getCalibrationDate())); + // 璁剧疆璇佷功缂栧彿 + deviceMetricRecordAndMaintenanceDto.setCertificateNumber(deviceMetricRecord.getCertificateSerialNumber()); + // 璁剧疆鏈夋晥鏈� + deviceMetricRecordAndMaintenanceDto.setValidityDateString(sdf.format(deviceMetricRecord.getNextCalibrationDate())); + // 璁剧疆鏍″噯鏈夋晥鏃ユ湡 + deviceMetricRecordAndMaintenanceDto.setValidityDateString(sdf.format(deviceMetricRecord.getConfirmDate())); + // 璁剧疆妫�楠岀粨鏋� + deviceMetricRecordAndMaintenanceDto.setJudgement(deviceMetricRecord.getStatus()); + } + + // 缁翠慨琛ㄦ暟鎹� + if (maintenanceSize > i) { + // 鑾峰彇璁惧缁翠慨琛ㄦ暟鎹� + DeviceMaintenance deviceMaintenance = deviceMaintenanceList.get(i); + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + // 缁翠慨鏃ユ湡 + deviceMetricRecordAndMaintenanceDto.setMaintenanceDateString(deviceMaintenance.getDate().format(dateTimeFormatter)); + // 澶勭悊鏂规硶 + deviceMetricRecordAndMaintenanceDto.setHandlingMethod(deviceMaintenance.getContent()); + // 澶囨敞 + deviceMetricRecordAndMaintenanceDto.setComments(deviceMaintenance.getComments()); + } + + deviceMetricRecordAndMaintenanceDtoList.add(deviceMetricRecordAndMaintenanceDto); + } + return deviceMetricRecordAndMaintenanceDtoList; + } + + /** + * 缁欐。妗堝姞搴忓彿 骞跺乏鍙冲垎涓哄乏鍙充袱鍒楀湪word涓樉绀� + * + * @param documentList 妗f鍒楄〃 + * @param documentExportWordDtoList 杩斿洖缁檞ord鐨勬暟鎹垪琛� + */ + private static void extracted(List<Document> documentList, List<DocumentExportWordDto> documentExportWordDtoList) { + // 缁欐。妗堝姞搴忓彿 骞朵笖鍒嗕负宸﹀彸涓や釜鍒楄〃鍦╳ord涓樉绀� + for (int i = 0; i < documentList.size(); i++) { + // 鍒涘缓word琛ㄦ牸涓竴琛岀殑鏁版嵁瀵硅薄 + DocumentExportWordDto documentExportWordDto = new DocumentExportWordDto(); + // 鑾峰彇妗f淇℃伅 + Document document = documentList.get(i); + // 鏍煎紡鍖栨棩鏈� + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + // 鏍规嵁搴忓彿 鍒嗗埆鍔犲叆涓や釜鍒楄〃 + if (i % 2 == 0) { + // 濂囨暟鍦ㄥ乏鍒� + documentExportWordDto.setIndex1(i + 1); + documentExportWordDto.setName1(document.getName()); + documentExportWordDto.setQuantity1(document.getQuantity()); + documentExportWordDto.setPageCount1(document.getPageCount()); + documentExportWordDto.setArchiveDateString1(document.getProvideDate().format(dateTimeFormatter)); + } else { + // 鍋舵暟鍦ㄥ彸鍒� + documentExportWordDto.setIndex2(i + 1); + documentExportWordDto.setName2(document.getName()); + documentExportWordDto.setQuantity2(document.getQuantity()); + documentExportWordDto.setPageCount2(document.getPageCount()); + documentExportWordDto.setArchiveDateString2(document.getProvideDate().format(dateTimeFormatter)); + } + // 鎶婁竴琛屾暟鎹璞″姞鍏ュ垪琛� + documentExportWordDtoList.add(documentExportWordDto); + } + } + + @Override + public void exportEquipmentDetails(HttpServletResponse response) { + List<Device> deviceList = baseMapper.selectList(null); + List<DeviceExport> deviceExportList = new ArrayList<>(); + + int index = 1; + for (Device device : deviceList) { + Integer equipmentManager = device.getEquipmentManager(); + String equipmentManagerName = null; + if (equipmentManager != null) { + User user = userMapper.selectById(equipmentManager); + if (user != null) { + equipmentManagerName = user.getName(); + } + } + DeviceExport deviceExport = new DeviceExport(); + BeanUtils.copyProperties(device, deviceExport); + deviceExport.setIndex(index); + deviceExport.setEquipmentManagerName(equipmentManagerName); + deviceExportList.add(deviceExport); + index++; + } + + // 鑾峰彇璺緞 + InputStream inputStream = this.getClass().getResourceAsStream("/static/word/quipment-details.docx"); + Configure configure = Configure.builder() + .bind("deviceList", new HackLoopTableRenderPolicy()) + .build(); + XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render( + new HashMap<String, Object>() {{ + put("deviceList", deviceExportList); + }}); + + 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("瀵煎嚭澶辫触"); + } + } } -- Gitblit v1.9.3