From 2f467298075f6eb3bc40ecfa6da88c009f7fd0f8 Mon Sep 17 00:00:00 2001 From: chenrui <1187576398@qq.com> Date: 星期四, 10 四月 2025 13:32:14 +0800 Subject: [PATCH] 成品复测功能修改 --- cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java | 173 +++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 159 insertions(+), 14 deletions(-) diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java index 2192576..31c04ba 100644 --- a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java +++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java @@ -1,8 +1,10 @@ package com.ruoyi.device.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import com.alibaba.fastjson2.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; @@ -12,7 +14,9 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; +import com.ruoyi.basic.mapper.LaboratoryMapper; import com.ruoyi.basic.mapper.StructureItemParameterMapper; +import com.ruoyi.basic.pojo.Laboratory; import com.ruoyi.basic.pojo.StructureItemParameter; import com.ruoyi.common.core.domain.Result; import com.ruoyi.common.core.domain.entity.User; @@ -25,18 +29,19 @@ import com.ruoyi.device.pojo.*; import com.ruoyi.device.service.DataConfigService; import com.ruoyi.device.service.DeviceService; -import com.ruoyi.device.service.DocumentService; +import com.ruoyi.device.service.DeviceDocumentsService; import com.ruoyi.device.utils.DataAcquisition; import com.ruoyi.framework.exception.ErrorException; import com.ruoyi.inspect.mapper.InsSampleMapper; import com.ruoyi.inspect.pojo.InsProduct; import com.ruoyi.inspect.util.HackLoopTableRenderPolicy; +import com.ruoyi.system.mapper.SysDictDataMapper; import com.ruoyi.system.mapper.UserMapper; import lombok.AllArgsConstructor; import org.apache.logging.log4j.util.Strings; import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; @@ -48,6 +53,7 @@ import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -61,15 +67,17 @@ private UserMapper userMapper; + private LaboratoryMapper laboratoryMapper; + + private SysDictDataMapper sysDictDataMapper; + private StructureItemParameterMapper structureItemParameterMapper; private DataConfigService dataConfigService; - private QrShowServiceImpl qrShowService; - private InsSampleMapper insSampleMapper; - private DocumentService documentService; + private DeviceDocumentsService documentService; private DeviceMetricRecordMapper deviceMetricRecordMapper; @@ -120,11 +128,6 @@ } @Override - public List<Device> selectDevicePrincipal() { - return deviceMapper.selectDevicePrincipal(); - } - - @Override public List<Device> selectDeviceByCategory(String inspectionItem, String inspectionItemSubclass, String laboratory) { List<Integer> id; @@ -171,7 +174,7 @@ } deviceDto.setAuthorizedPersonName(name); //鏌ヨ璁惧鏍″噯淇℃伅 - DeviceMetricRecord calibrate = qrShowService.getDeviceMetricRecord(id, "calibrate"); + DeviceMetricRecord calibrate = getDeviceMetricRecord(id, "calibrate"); deviceDto.setCalibrateNo(calibrate.getCertificateSerialNumber()); // 鍒颁簡鍋滅敤鏃ユ湡锛岃嚜鍔ㄥ皢鐘舵�佹敼涓哄仠鐢� @@ -185,6 +188,21 @@ } } return deviceDto; + } + + /** + * 鏌ヨ璁惧鏍″噯/鏍告煡璁板綍 + * @param deviceId + * @param type + * @return + */ + public DeviceMetricRecord getDeviceMetricRecord(int deviceId, String type){ + return Optional.ofNullable( + deviceMetricRecordMapper.selectOne(Wrappers.<DeviceMetricRecord>lambdaQuery() + .eq(DeviceMetricRecord::getDeviceId, deviceId) + .eq(DeviceMetricRecord::getType, type) + .orderByDesc(DeviceMetricRecord::getCreateTime) + .last("limit 1"))).orElse(new DeviceMetricRecord()); } @Override @@ -309,7 +327,7 @@ // 璁惧淇℃伅 Device device = baseMapper.selectById(deviceId); // 璁惧妗f - List<Document> documentList = documentService.list(Wrappers.<Document>lambdaQuery().eq(Document::getDeviceId, deviceId)); + List<DeviceDocuments> documentList = documentService.list(Wrappers.<DeviceDocuments>lambdaQuery().eq(DeviceDocuments::getDeviceId, deviceId)); // 璁惧鏍″噯琛� List<DeviceMetricRecord> deviceMetricRecordList = deviceMetricRecordMapper.selectList(Wrappers.<DeviceMetricRecord>lambdaQuery().eq(DeviceMetricRecord::getDeviceId, deviceId)); // 璁惧缁翠慨琛� @@ -411,13 +429,13 @@ * @param documentList 妗f鍒楄〃 * @param documentExportWordDtoList 杩斿洖缁檞ord鐨勬暟鎹垪琛� */ - private static void extracted(List<Document> documentList, List<DocumentExportWordDto> documentExportWordDtoList) { + private static void extracted(List<DeviceDocuments> documentList, List<DocumentExportWordDto> documentExportWordDtoList) { // 缁欐。妗堝姞搴忓彿 骞朵笖鍒嗕负宸﹀彸涓や釜鍒楄〃鍦╳ord涓樉绀� for (int i = 0; i < documentList.size(); i++) { // 鍒涘缓word琛ㄦ牸涓竴琛岀殑鏁版嵁瀵硅薄 DocumentExportWordDto documentExportWordDto = new DocumentExportWordDto(); // 鑾峰彇妗f淇℃伅 - Document document = documentList.get(i); + DeviceDocuments document = documentList.get(i); // 鏍煎紡鍖栨棩鏈� DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // 鏍规嵁搴忓彿 鍒嗗埆鍔犲叆涓や釜鍒楄〃 @@ -489,4 +507,131 @@ throw new RuntimeException("瀵煎嚭澶辫触"); } } + + @Override + @Transactional(isolation = Isolation.READ_COMMITTED, rollbackFor = Exception.class) + public void importExcel(List<Device> batch) { + if (CollUtil.isEmpty(batch)) { + return; + } + + // 鎻愬墠鑾峰彇璁惧鍚嶇О銆佸瀷鍙峰拰绠$悊缂栧彿闆嗗悎 + Set<String> deviceNames = batch.stream().map(Device::getDeviceName).collect(Collectors.toSet()); + Set<String> specificationModels = batch.stream().map(Device::getSpecificationModel).collect(Collectors.toSet()); + Set<String> managementNumbers = batch.stream().map(Device::getManagementNumber).collect(Collectors.toSet()); + + // 鎵归噺鏌ヨ鍏宠仈鏁版嵁锛堢敤鎴枫�佸疄楠屽锛� + Map<String, Integer> userMap = queryUserMap(batch); + Map<String, Integer> labMap = queryLabMap(batch); + + // 鍐呭瓨澶勭悊锛氳浆鎹㈠叧鑱斿瓧娈靛苟鍘婚噸锛屽悓鏃舵媶鍒嗘彃鍏ュ拰鏇存柊鍒楄〃 + List<Device> toInsert = new ArrayList<>(); + List<Device> toUpdate = new ArrayList<>(); + processBatch(batch, userMap, labMap, deviceNames, specificationModels, managementNumbers, toInsert, toUpdate); + + // 鎵归噺鎿嶄綔鏁版嵁搴� + batchOperate(toInsert, toUpdate); + } + + /** + * 鍒ゆ柇璇ヨ澶囨槸鍚﹀彲浠ユ暟閲� + * @param managementNumber + * @param request + * @return + */ + @Override + public Result<?> determineWhetherToCollectData(String managementNumber, HttpServletRequest request) { + String ip = DataAcquisition.getIp(request); + List<Device> device = baseMapper.selectList(Wrappers.<Device>lambdaQuery() + .eq(Device::getIp, ip)); + if (ObjectUtils.isEmpty(device)) { + return Result.success(false); + } + if (ObjectUtils.isEmpty(device.get(0).getFileType()) || ObjectUtils.isEmpty(device.get(0).getCollectUrl())) { + return Result.success(false); + } else { + return Result.success(true); + } + } + + private Map<String, Integer> queryUserMap(List<Device> batch) { + Set<String> managerNames = batch.stream() + .map(Device::getEquipmentManagerName) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + if (CollUtil.isEmpty(managerNames)) { + return Collections.emptyMap(); + } + return userMapper.selectList( + new LambdaQueryWrapper<User>().in(User::getName, managerNames) + ).stream().collect(Collectors.toMap(User::getName, User::getId)); + } + + private Map<String, Integer> queryLabMap(List<Device> batch) { + Set<String> labNames = batch.stream() + .map(Device::getSubordinateDepartments) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + if (CollUtil.isEmpty(labNames)) { + return Collections.emptyMap(); + } + return laboratoryMapper.selectList( + new LambdaQueryWrapper<Laboratory>().in(Laboratory::getLaboratoryName, labNames) + ).stream().collect(Collectors.toMap(Laboratory::getLaboratoryName, Laboratory::getId)); + } + + private void processBatch(List<Device> batch, Map<String, Integer> userMap, Map<String, Integer> labMap, + Set<String> deviceNames, Set<String> specificationModels, Set<String> managementNumbers, + List<Device> toInsert, List<Device> toUpdate) { + // 棰勮绠楀敮涓�閿紙璁惧鍚嶇О+鍨嬪彿+绠$悊缂栧彿锛� + Map<String, Device> existDevices = deviceMapper.selectList( + new LambdaQueryWrapper<Device>() + .in(Device::getDeviceName, deviceNames) + .in(Device::getSpecificationModel, specificationModels) + .in(Device::getManagementNumber, managementNumbers) + ).stream().collect(Collectors.toMap( + d -> d.getDeviceName() + "|" + d.getSpecificationModel() + "|" + d.getManagementNumber(), + Function.identity() + )); + + for (Device device : batch) { + // 杞崲鍏宠仈瀛楁 + device.setEquipmentManager(userMap.get(device.getEquipmentManagerName())); + device.setSubordinateDepartmentsId(labMap.get(device.getSubordinateDepartments())); + + // 璁惧鐘舵�� + if (ObjectUtils.isNotEmpty(device.getDeviceStatusName())) { + try { + // 鏌ュ瓧鍏稿搴旂殑鍊� + String status = sysDictDataMapper.selectDictValue("device_status", device.getDeviceStatusName()); + device.setDeviceStatus(Integer.parseInt(status)); + } catch (Exception e) { + // 澶勭悊寮傚父锛屼緥濡傝褰曟棩蹇� + e.printStackTrace(); + } + } + + // 鐢熸垚鍞竴閿� + String key = device.getDeviceName() + "|" + device.getSpecificationModel() + "|" + device.getManagementNumber(); + if (existDevices.containsKey(key)) { + Device exist = existDevices.get(key); + BeanUtils.copyProperties(device, exist, "id"); + toUpdate.add(exist); + } else { + toInsert.add(device); + } + } + } + + private void batchOperate(List<Device> toInsert, List<Device> toUpdate) { + // 鎵归噺鎻掑叆 + if (CollUtil.isNotEmpty(toInsert)) { + deviceMapper.insertBatchSomeColumn(toInsert); + } + + // 鎵归噺鏇存柊 + if (CollUtil.isNotEmpty(toUpdate)) { + updateBatchById(toUpdate); + } + } } -- Gitblit v1.9.3