| | |
| | | throw new RuntimeException("导入文件没有设备数据"); |
| | | } |
| | | |
| | | Set<String> managementNumbers = new HashSet<>(); |
| | | Set<String> fileKeys = new HashSet<>(); |
| | | for (int i = 0; i < rows.size(); i++) { |
| | | String managementNumber = required(rows.get(i).getManagementNumber(), i + 2, "管理编号"); |
| | | if (!managementNumbers.add(managementNumber)) { |
| | | throw new RuntimeException("第" + (i + 2) + "行:管理编号" + managementNumber + "在文件中重复"); |
| | | 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) + "行:仪器名称+规格型号+管理编号在文件中重复"); |
| | | } |
| | | } |
| | | Set<String> existingNumbers = baseMapper.selectList(Wrappers.<Device>lambdaQuery() |
| | | .in(Device::getManagementNumber, managementNumbers) |
| | | .select(Device::getManagementNumber)) |
| | | .stream().map(Device::getManagementNumber).collect(Collectors.toSet()); |
| | | 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())) |
| | |
| | | int rowNumber = i + 2; |
| | | DeviceImport row = rows.get(i); |
| | | String managementNumber = required(row.getManagementNumber(), rowNumber, "管理编号"); |
| | | if (existingNumbers.contains(managementNumber)) { |
| | | throw new RuntimeException("第" + rowNumber + "行:管理编号" + managementNumber + "已存在"); |
| | | 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, "所属部门"); |
| | |
| | | } |
| | | |
| | | Device device = new Device(); |
| | | device.setDeviceName(required(row.getDeviceName(), rowNumber, "仪器名称")); |
| | | device.setSpecificationModel(required(row.getSpecificationModel(), rowNumber, "规格型号")); |
| | | device.setDeviceName(deviceName); |
| | | device.setSpecificationModel(specificationModel); |
| | | device.setManagementNumber(managementNumber); |
| | | device.setActivationDate(parseDate(row.getActivationDate(), rowNumber, "校准有效期", true)); |
| | | 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.setFactoryNo(trim(row.getFactoryNo())); |
| | | device.setAssetCode(trim(row.getAssetCode())); |
| | | device.setOrigin(trim(row.getOrigin())); |
| | | device.setAcquisitionDate(parseDate(row.getAcquisitionDate(), rowNumber, "购置日期", false)); |
| | | device.setAcquisitionDate(parseDate(row.getAcquisitionDate())); |
| | | device.setStoragePoint(trim(row.getStoragePoint())); |
| | | device.setTechnicalIndicators(trim(row.getTechnicalIndicators())); |
| | | device.setCalibrationServices(trim(row.getCalibrationServices())); |
| | | device.setLastCalibrationDate(parseDate(row.getLastCalibrationDate(), rowNumber, "最近校准日期", false)); |
| | | device.setNextCalibrationDate(parseDate(row.getNextCalibrationDate(), rowNumber, "下次校准日期", false)); |
| | | device.setLastCalibrationDate(parseDate(row.getLastCalibrationDate())); |
| | | device.setNextCalibrationDate(parseDate(row.getNextCalibrationDate())); |
| | | device.setLargeCategory(dictValue(typeMap, row.getLargeCategory(), rowNumber, "设备类型", false)); |
| | | device.setUnitPrice(parseDecimal(row.getUnitPrice(), rowNumber, "单价(万元)")); |
| | | |
| | |
| | | return value; |
| | | } |
| | | |
| | | private LocalDateTime parseDate(String input, int rowNumber, String column, boolean required) { |
| | | private LocalDateTime parseDate(String input) { |
| | | String text = trim(input); |
| | | if (StringUtils.isBlank(text)) { |
| | | if (required) { |
| | | throw new RuntimeException("第" + rowNumber + "行:" + column + "不能为空"); |
| | | } |
| | | return null; |
| | | } |
| | | String datePart = text.replace('/', '-').split("\\s+")[0]; |
| | | try { |
| | | return LocalDate.parse(text.substring(0, Math.min(text.length(), 10)).replace('/', '-'), DateTimeFormatter.ofPattern("yyyy-M-d")) |
| | | .atStartOfDay(); |
| | | return LocalDate.parse(datePart, DateTimeFormatter.ofPattern("yyyy-M-d")).atStartOfDay(); |
| | | } catch (Exception e) { |
| | | throw new RuntimeException("第" + rowNumber + "行:" + column + "格式应为yyyy-MM-dd", e); |
| | | return null; |
| | | } |
| | | } |
| | | |
| | |
| | | return value; |
| | | } |
| | | |
| | | private String deviceKey(String deviceName, String specificationModel, String managementNumber) { |
| | | return (deviceName == null ? "" : deviceName.trim()) + "|" |
| | | + (specificationModel == null ? "" : specificationModel.trim()) + "|" |
| | | + (managementNumber == null ? "" : managementNumber.trim()); |
| | | } |
| | | |
| | | private String trim(String value) { |
| | | return value == null ? null : value.trim(); |
| | | } |