cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java
@@ -17,17 +17,22 @@
import com.ruoyi.basic.pojo.StructureItemParameter;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.core.domain.entity.SysDictData;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.device.dto.*;
import com.ruoyi.device.excel.upload.DeviceImport;
import com.ruoyi.device.mapper.CollectBridgeMapper;
import com.ruoyi.device.mapper.DeviceCalibrationPlanDetailMapper;
import com.ruoyi.device.mapper.DeviceCalibrationPlanMapper;
import com.ruoyi.device.mapper.DeviceMaintenanceMapper;
import com.ruoyi.device.mapper.DeviceMapper;
import com.ruoyi.device.mapper.DeviceMetricRecordMapper;
import com.ruoyi.device.pojo.*;
import com.ruoyi.device.service.DataConfigService;
import com.ruoyi.device.service.DeviceCalibrationPlanService;
import com.ruoyi.device.service.DeviceExaminePlanService;
import com.ruoyi.device.service.DeviceMaintenancePlanService;
import com.ruoyi.device.service.DeviceService;
import com.ruoyi.device.service.DeviceDocumentsService;
import com.ruoyi.device.utils.DataAcquisition;
@@ -36,7 +41,6 @@
import com.ruoyi.inspect.pojo.InsProduct;
import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
import com.ruoyi.system.mapper.SysDictDataMapper;
import com.ruoyi.system.mapper.SysDeptMapper;
import com.ruoyi.system.mapper.UserMapper;
import lombok.AllArgsConstructor;
import org.apache.logging.log4j.util.Strings;
@@ -68,8 +72,6 @@
    private UserMapper userMapper;
    private SysDeptMapper sysDeptMapper;
    private SysDictDataMapper sysDictDataMapper;
    private StructureItemParameterMapper structureItemParameterMapper;
@@ -86,6 +88,12 @@
    private CollectBridgeMapper collectBridgeMapper;
    private DeviceCalibrationPlanService deviceCalibrationPlanService;
    private DeviceExaminePlanService deviceExaminePlanService;
    private DeviceMaintenancePlanService deviceMaintenancePlanService;
    @Override
    public IPage<DeviceDto> selectDeviceParameter(Page page, DeviceDto itemParameter, Boolean laboratoryNameIsNull) {
        IPage<DeviceDto> iPage = deviceMapper.selectDeviceParameterPage(page, QueryWrappers.queryWrappers(itemParameter), laboratoryNameIsNull);
@@ -94,7 +102,13 @@
    @Override
    public int addDeviceParameter(Device itemParameter) {
        return deviceMapper.insert(itemParameter);
        int rows = deviceMapper.insert(itemParameter);
        Device device = deviceMapper.selectById(itemParameter.getId());
        if (device != null && (device.getNextExamineDate() != null
                || (device.getLastExamineDate() != null && StringUtils.isNotBlank(device.getExamineCycle())))) {
            deviceExaminePlanService.syncDeviceExamineDetail(device);
        }
        return rows;
    }
    @Override
@@ -105,8 +119,23 @@
    @Transactional(rollbackFor = Exception.class)
    @Override
    public int upDeviceParameter(Device itemParameter) {
        return deviceMapper.updateById(itemParameter);
        int rows = deviceMapper.updateById(itemParameter);
        // 档案修订填写了校准信息后,到点的自动同步到设备校准计划
        Device device = deviceMapper.selectById(itemParameter.getId());
        if (device != null && (device.getNextCalibrationDate() != null || device.getActivationDate() != null)) {
            deviceCalibrationPlanService.syncDeviceCalibrationDetail(device);
        }
        // 档案修订填写了核查信息后,到点的自动同步到设备核查计划
        if (device != null && (device.getNextExamineDate() != null
                || (device.getLastExamineDate() != null && StringUtils.isNotBlank(device.getExamineCycle())))) {
            deviceExaminePlanService.syncDeviceExamineDetail(device);
        }
        // 档案修订填写了保养信息后,到点的自动同步到设备保养计划
        if (device != null && (device.getNextMaintenanceDate() != null
                || (device.getLastMaintenanceDate() != null && StringUtils.isNotBlank(device.getMaintenanceCycle())))) {
            deviceMaintenancePlanService.syncDeviceMaintenanceDetail(device);
        }
        return rows;
    }
    @Override
@@ -458,8 +487,9 @@
    }
    @Override
    public void exportEquipmentDetails(HttpServletResponse response) {
        List<Device> deviceList = baseMapper.selectList(null);
    public void exportEquipmentDetails(DeviceDto itemParameter, HttpServletResponse response) {
        // 按当前筛选条件导出(条件为空时导出全部)
        List<Device> deviceList = baseMapper.selectList(QueryWrappers.<Device>queryWrappers(itemParameter));
        List<DeviceExport> deviceExportList = new ArrayList<>();
        int index = 1;
@@ -550,19 +580,16 @@
        Set<String> fileKeys = new HashSet<>();
        for (int i = 0; i < rows.size(); i++) {
            String managementNumber = required(rows.get(i).getManagementNumber(), i + 2, "管理编号");
            String deviceName = required(rows.get(i).getDeviceName(), i + 2, "仪器名称");
            String deviceName = required(rows.get(i).getDeviceName(), i + 2, "设备名称");
            String specificationModel = required(rows.get(i).getSpecificationModel(), i + 2, "规格型号");
            if (!fileKeys.add(deviceKey(deviceName, specificationModel, managementNumber))) {
                throw new RuntimeException("第" + (i + 2) + "行:仪器名称+规格型号+管理编号在文件中重复");
                throw new RuntimeException("第" + (i + 2) + "行:设备名称+规格型号+管理编号在文件中重复");
            }
        }
        Set<String> existingKeys = baseMapper.selectList(Wrappers.<Device>lambdaQuery()
                        .select(Device::getDeviceName, Device::getSpecificationModel, Device::getManagementNumber))
                .stream().map(d -> deviceKey(d.getDeviceName(), d.getSpecificationModel(), d.getManagementNumber())).collect(Collectors.toSet());
        Map<String, List<SysDept>> departmentMap = sysDeptMapper.selectDeptList(new SysDept()).stream()
                .filter(item -> StringUtils.isNotBlank(item.getDeptName()))
                .collect(Collectors.groupingBy(item -> item.getDeptName().trim()));
        Map<String, List<User>> userMap = userMapper.selectList(Wrappers.<User>lambdaQuery()
                        .isNotNull(User::getName).select(User::getId, User::getName))
                .stream().collect(Collectors.groupingBy(item -> item.getName().trim()));
@@ -574,16 +601,10 @@
            int rowNumber = i + 2;
            DeviceImport row = rows.get(i);
            String managementNumber = required(row.getManagementNumber(), rowNumber, "管理编号");
            String deviceName = required(row.getDeviceName(), rowNumber, "仪器名称");
            String deviceName = required(row.getDeviceName(), rowNumber, "设备名称");
            String specificationModel = required(row.getSpecificationModel(), rowNumber, "规格型号");
            if (existingKeys.contains(deviceKey(deviceName, specificationModel, managementNumber))) {
                throw new RuntimeException("第" + rowNumber + "行:仪器名称“" + deviceName + "”+规格型号“" + specificationModel + "”+管理编号“" + managementNumber + "”已存在");
            }
            String laboratoryName = required(row.getLaboratoryName(), rowNumber, "所属部门");
            List<SysDept> departments = departmentMap.get(laboratoryName);
            if (CollectionUtils.isEmpty(departments) || departments.size() > 1) {
                throw new RuntimeException("第" + rowNumber + "行:所属部门“" + laboratoryName + "”不存在或不唯一");
                throw new RuntimeException("第" + rowNumber + "行:设备名称“" + deviceName + "”+规格型号“" + specificationModel + "”+管理编号“" + managementNumber + "”已存在");
            }
            Device device = new Device();
@@ -591,7 +612,6 @@
            device.setSpecificationModel(specificationModel);
            device.setManagementNumber(managementNumber);
            device.setActivationDate(parseDate(row.getActivationDate()));
            device.setSubordinateDepartmentsId(departments.get(0).getDeptId().intValue());
            device.setDeviceStatus(Integer.valueOf(dictValue(statusMap, row.getDeviceStatus(), rowNumber, "当前状态", true)));
            device.setCalibrationDate(required(row.getCalibrationDate(), rowNumber, "校准周期(月)"));
            device.setEnDeviceName(trim(row.getEnDeviceName()));