diff --git a/mall-common/src/main/java/com/suisung/mall/common/pojo/dto/ShopStoreSameCityTransportBaseDTO.java b/mall-common/src/main/java/com/suisung/mall/common/pojo/dto/ShopStoreSameCityTransportBaseDTO.java index 5be54a60..053cd08e 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/pojo/dto/ShopStoreSameCityTransportBaseDTO.java +++ b/mall-common/src/main/java/com/suisung/mall/common/pojo/dto/ShopStoreSameCityTransportBaseDTO.java @@ -17,6 +17,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; +import java.util.Date; import java.util.List; @Data @@ -25,29 +26,39 @@ import java.util.List; @ApiModel(value = "同城配送基础设置DTO", description = "同城配送基础设置DTO") public class ShopStoreSameCityTransportBaseDTO implements Serializable { private static final long serialVersionUID = 1L; + @ApiModelProperty(value = "店铺同城快递运费设置(起送条件+优惠条件)") - public List transportList; + private List transportList; + @ApiModelProperty(value = "店铺同城快递基础运费设置") - ShopStoreSameCityTransportBase transportBase; + private ShopStoreSameCityTransportBase transportBase; public void rebuildTransportList() { - if (this.transportBase == null || this.transportList.isEmpty()) { + if (this.transportBase == null || this.transportList == null || this.transportList.isEmpty()) { return; } - for (ShopStoreSameCityTransport transport : this.transportList) { - transport.setTransport_base_id(this.transportBase.getTransport_base_id()); - transport.setUpdated_by(this.transportBase.getUpdated_by()); - transport.setUpdated_at(this.transportBase.getUpdated_at()); - transport.setStore_id(this.transportBase.getStore_id()); + // 缓存基础设置的属性值,避免在循环中重复调用getter方法 + Long transportBaseId = this.transportBase.getTransport_base_id(); + Long storeId = this.transportBase.getStore_id(); + Integer updatedBy = this.transportBase.getUpdated_by(); + Date updatedAt = this.transportBase.getUpdated_at(); - if (transport.getCreated_by() == null && transport.getUpdated_by() != null) { - transport.setCreated_by(transport.getUpdated_by()); + for (ShopStoreSameCityTransport transport : this.transportList) { + transport.setTransport_base_id(transportBaseId); + transport.setStore_id(storeId); + transport.setUpdated_by(updatedBy); + transport.setUpdated_at(updatedAt); + + // 设置创建时间相关字段 + if (transport.getCreated_by() == null && updatedBy != null) { + transport.setCreated_by(updatedBy); } - if (transport.getCreated_at() == null && transport.getUpdated_at() != null) { - transport.setCreated_at(transport.getUpdated_at()); + if (transport.getCreated_at() == null && updatedAt != null) { + transport.setCreated_at(updatedAt); } } } } + diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreSameCityTransportServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreSameCityTransportServiceImpl.java index ac789165..1747baca 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreSameCityTransportServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreSameCityTransportServiceImpl.java @@ -28,6 +28,7 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; import static com.suisung.mall.common.utils.ContextUtil.getCurrentUser; @@ -113,7 +114,7 @@ public class ShopStoreSameCityTransportServiceImpl extends BaseServiceImpl existingRecordsWrapper = new LambdaQueryWrapper<>(); + existingRecordsWrapper.eq(ShopStoreSameCityTransport::getTransport_base_id, transportBaseId) + .eq(ShopStoreSameCityTransport::getStore_id, storeId); + List existingRecords = list(existingRecordsWrapper); + + // 提取transportList中记录的transport_id,用于判断哪些记录需要删除 + List transportIdsInList = transportList.stream() + .filter(t -> t.getTransport_id() != null && t.getTransport_id() > 0) + .map(ShopStoreSameCityTransport::getTransport_id) + .collect(Collectors.toList()); + + // 删除不在transportList中的现有记录 + for (ShopStoreSameCityTransport existingRecord : existingRecords) { + if (!transportIdsInList.contains(existingRecord.getTransport_id())) { + removeById(existingRecord.getTransport_id()); + } + } + int count = 0; for (ShopStoreSameCityTransport transport : transportList) { try { @@ -169,6 +200,7 @@ public class ShopStoreSameCityTransportServiceImpl extends BaseServiceImpl