diff --git a/ebike-operations/src/main/java/com/cdzy/operations/mapper/EbikeBikeConfigurationMapper.java b/ebike-operations/src/main/java/com/cdzy/operations/mapper/EbikeBikeConfigurationMapper.java new file mode 100644 index 0000000..9e0bcee --- /dev/null +++ b/ebike-operations/src/main/java/com/cdzy/operations/mapper/EbikeBikeConfigurationMapper.java @@ -0,0 +1,14 @@ +package com.cdzy.operations.mapper; + +import com.cdzy.operations.model.entity.EbikeBikeConfiguration; +import com.mybatisflex.core.BaseMapper; + +/** + * 车辆相关配置 映射层 + * + * @author yanglei + * @since 2025-12-03 16:21 + */ + +public interface EbikeBikeConfigurationMapper extends BaseMapper { +} diff --git a/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeBikeConfigurationDto.java b/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeBikeConfigurationDto.java new file mode 100644 index 0000000..7caa55c --- /dev/null +++ b/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeBikeConfigurationDto.java @@ -0,0 +1,37 @@ +package com.cdzy.operations.model.dto; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 配置项 实体类 + * + * @author yanglei + * @since 2025-12-03 16:31 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class EbikeBikeConfigurationDto { + + /** + * 运营商id + */ + @NotNull(message = "运营商id不能为空") + private Long operatorId; + + /** + * 配置项时长 + */ + @NotNull(message = "配置项时长不能为空") + private Integer configurationDuration; + + /** + * 配置项描述 + */ + @NotBlank(message = "配置项描述不能为空") + private String configurationDescription; +} diff --git a/ebike-operations/src/main/java/com/cdzy/operations/model/entity/EbikeBikeConfiguration.java b/ebike-operations/src/main/java/com/cdzy/operations/model/entity/EbikeBikeConfiguration.java new file mode 100644 index 0000000..e5acca6 --- /dev/null +++ b/ebike-operations/src/main/java/com/cdzy/operations/model/entity/EbikeBikeConfiguration.java @@ -0,0 +1,79 @@ +package com.cdzy.operations.model.entity; + +import com.mybatisflex.annotation.Column; +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.Table; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 车辆相关配置 实体类 + * + * @author yanglei + * @since 2025-12-03 16:18 + */ + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table("ebike_bike_configuration") +public class EbikeBikeConfiguration implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 操作主键id + */ + @Id + private Long batteryId; + + /** + * 运营商id + */ + private Long operatorId; + + /** + * 配置项时长 + */ + private Integer configurationDuration; + + /** + * 配置项描述 + */ + private String configurationDescription; + + /** + * 创建时间 + */ + @Column(onInsertValue = "now()") + private LocalDateTime createdTime; + + /** + * 创建人 + */ + private Long createdBy; + + /** + * 修改时间 + */ + @Column(onUpdateValue = "now()") + private LocalDateTime updatedTime; + + /** + * 修改人 + */ + private Long updatedBy; + + /** + * 删除与否 + */ + private Boolean isDeleted; +} diff --git a/ebike-operations/src/main/java/com/cdzy/operations/service/EbikeBikeConfigurationService.java b/ebike-operations/src/main/java/com/cdzy/operations/service/EbikeBikeConfigurationService.java new file mode 100644 index 0000000..97902ef --- /dev/null +++ b/ebike-operations/src/main/java/com/cdzy/operations/service/EbikeBikeConfigurationService.java @@ -0,0 +1,31 @@ +package com.cdzy.operations.service; + +import com.cdzy.operations.model.dto.EbikeBikeConfigurationDto; +import com.cdzy.operations.model.entity.EbikeBikeConfiguration; +import com.mybatisflex.core.service.IService; + +import java.util.List; + +/** + * 车辆相关配置 服务层 + * + * @author yanglei + * @since 2025-12-03 16:22 + */ + +public interface EbikeBikeConfigurationService extends IService { + + /** + * 根据运营商id获取配置项(sql会自动拼接运营商id) + * + * @return 配置项 + */ + List getConfigurationByOperationId(); + + /** + * 配置项保存 + * + * @param configurationDto 配置项参数 + */ + void saveConfiguration(EbikeBikeConfigurationDto configurationDto); +} diff --git a/ebike-operations/src/main/java/com/cdzy/operations/service/impl/EbikeBikeConfigurationServiceImpl.java b/ebike-operations/src/main/java/com/cdzy/operations/service/impl/EbikeBikeConfigurationServiceImpl.java new file mode 100644 index 0000000..5e50675 --- /dev/null +++ b/ebike-operations/src/main/java/com/cdzy/operations/service/impl/EbikeBikeConfigurationServiceImpl.java @@ -0,0 +1,43 @@ +package com.cdzy.operations.service.impl; + +import cn.dev33.satoken.stp.StpUtil; +import com.cdzy.operations.mapper.EbikeBikeConfigurationMapper; +import com.cdzy.operations.model.dto.EbikeBikeConfigurationDto; +import com.cdzy.operations.model.entity.EbikeBikeConfiguration; +import com.cdzy.operations.service.EbikeBikeConfigurationService; +import com.mybatisflex.core.query.QueryWrapper; +import com.mybatisflex.spring.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +import java.util.List; + +import static com.cdzy.operations.model.entity.table.EbikeBikeConfigurationTableDef.EBIKE_BIKE_CONFIGURATION; + + +/** + * 车辆相关配置 实现类 + * + * @author yanglei + * @since 2025-12-03 16:22 + */ +@Service +public class EbikeBikeConfigurationServiceImpl extends ServiceImpl implements EbikeBikeConfigurationService { + + @Override + public List getConfigurationByOperationId() { + QueryWrapper queryWrapper = QueryWrapper.create() + .select(EBIKE_BIKE_CONFIGURATION.ALL_COLUMNS); + return this.mapper.selectListByQuery(queryWrapper); + } + + @Override + public void saveConfiguration(EbikeBikeConfigurationDto configurationDto) { + EbikeBikeConfiguration configuration = EbikeBikeConfiguration.builder() + .operatorId(configurationDto.getOperatorId()) + .configurationDuration(configurationDto.getConfigurationDuration()) + .configurationDescription(configurationDto.getConfigurationDescription()) + .createdBy(StpUtil.getLoginIdAsLong()) + .build(); + this.mapper.insert(configuration); + } +} diff --git a/ebike-user/src/main/java/com/cdzy/user/service/impl/EbikeFaultReportServiceImpl.java b/ebike-user/src/main/java/com/cdzy/user/service/impl/EbikeFaultReportServiceImpl.java index 81857d6..99ec26e 100644 --- a/ebike-user/src/main/java/com/cdzy/user/service/impl/EbikeFaultReportServiceImpl.java +++ b/ebike-user/src/main/java/com/cdzy/user/service/impl/EbikeFaultReportServiceImpl.java @@ -204,75 +204,69 @@ public class EbikeFaultReportServiceImpl extends ServiceImpl attachmentFiles = ebikeFaultReportDto.getAttachmentFiles(); - // 更新文件信息 - if (!CollectionUtils.isEmpty(attachmentFiles)) { - List existingFiles = ebikeAttachmentFileService.queryFiles(ebikeFaultReportDto.getReportId()); - Set existingFileIds = existingFiles.stream() + // 文件处理 + List attachments = ebikeFaultReportDto.getAttachmentFiles(); + if (!CollectionUtils.isEmpty(attachments)) { + List existingFiles = ebikeAttachmentFileService.queryFiles(ebikeFaultReportDto.getReportId()); + Set existingIds = existingFiles.stream() .map(EbikeFaultFile::getFileId) .filter(Objects::nonNull) .collect(Collectors.toSet()); - // 分离前端数据,无id的新增,有id的对比 - Set incomingFileIds = new HashSet<>(); - List filesToInsert = new ArrayList<>(); + Set incomingIds = new HashSet<>(); + List toInsert = new ArrayList<>(); - for (EbikeFaultFileDto dto : attachmentFiles) { - if (dto.getFileId() != null) { - incomingFileIds.add(dto.getFileId()); + for (EbikeFaultFileDto f : attachments) { + if (f.getFileId() != null) { + incomingIds.add(f.getFileId()); } else { - // fileId 为空,则是新文件,插入数据 - EbikeFaultFile newFile = EbikeFaultFile.builder() + toInsert.add(EbikeFaultFile.builder() .reportId(ebikeFaultReportDto.getReportId()) - .fileName(dto.getFileName()) - .fileUrl(dto.getFileUrl()) - //.createBy(userId) - .build(); - filesToInsert.add(newFile); + .fileName(f.getFileName()) + .fileUrl(f.getFileUrl()) + .build()); } } - // 对比incomingFileIds与existingFileIds的id,在existingFileIds数据库存在,但是不在incomingFileIds存在的已经被删除 - List fileIdsToDelete = existingFileIds.stream() - .filter(id -> !incomingFileIds.contains(id)) - .collect(Collectors.toList()); - - // 根据主键id删除文件数据 - if (!fileIdsToDelete.isEmpty()) { - ebikeAttachmentFileService.removeByIds(fileIdsToDelete); + // 删除:存在但前端没传 + existingIds.removeAll(incomingIds); + if (!existingIds.isEmpty()) { + ebikeAttachmentFileService.removeByIds(new ArrayList<>(existingIds)); } - // 插入新文件 - if (!filesToInsert.isEmpty()) { - ebikeAttachmentFileService.saveBatch(filesToInsert); + // 新增 + if (!toInsert.isEmpty()) { + ebikeAttachmentFileService.saveBatch(toInsert); } } - List faultPart = ebikeFaultReportDto.getFaultPart(); - List existingFaultParts = ebikeFaultPartService.getFaultPartByReportId(ebikeFaultReportDto.getReportId()); - // 需要删除的 - List toDelete = existingFaultParts.stream() - .filter(part -> !faultPart.contains(part)) - .toList(); + // 故障部位处理 + List newParts = ebikeFaultReportDto.getFaultPart(); + List oldParts = ebikeFaultPartService.getFaultPartByReportId(ebikeFaultReportDto.getReportId()); - // 需要新增的 - List toInsert = faultPart.stream() - .filter(part -> !existingFaultParts.contains(part)) - .toList(); - List partsToSave = toInsert.stream() - .map(fp -> EbikeFaultPart.builder() - .reportId(ebikeFaultReportDto.getReportId()) - .faultPart(fp) - .isDeleted(false) - .createBy(ebikeFaultReportDto.getUserId()) - .build()) + // 删除:旧有但新数据没有的 + List toDelete = oldParts.stream() + .filter(part -> !newParts.contains(part)) .toList(); if (!toDelete.isEmpty()) { ebikeFaultPartService.removeByIds(toDelete); } - if (!partsToSave.isEmpty()) { - ebikeFaultPartService.saveBatch(partsToSave); + + // 新增:新有但旧数据没有的 + List toInsertParts = newParts.stream() + .filter(part -> !oldParts.contains(part)) + .toList(); + if (!toInsertParts.isEmpty()) { + List parts = toInsertParts.stream() + .map(fp -> EbikeFaultPart.builder() + .reportId(ebikeFaultReportDto.getReportId()) + .faultPart(fp) + .isDeleted(false) + .createBy(ebikeFaultReportDto.getUserId()) + .build()) + .toList(); + ebikeFaultPartService.saveBatch(parts); } }