From 1d4c8ec6297a62fb19aebefa5191375a6d412672 Mon Sep 17 00:00:00 2001 From: litianxiang Date: Mon, 4 May 2026 13:35:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=88=A0=E9=99=A4seller?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/DesignerController.java | 8 ++ .../designer/service/DesignerService.java | 9 +++ .../designer/service/DesignerServiceImpl.java | 78 +++++++++++++++++++ .../listing/entity/ListingImageEntity.java | 4 +- .../listing/service/ListingServiceImpl.java | 10 ++- .../order/service/OrderServiceImpl.java | 2 +- src/main/resources/db/schema.sql | 4 +- 7 files changed, 109 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/aida/seller/module/designer/controller/DesignerController.java b/src/main/java/com/aida/seller/module/designer/controller/DesignerController.java index 2d71c08..96abb18 100644 --- a/src/main/java/com/aida/seller/module/designer/controller/DesignerController.java +++ b/src/main/java/com/aida/seller/module/designer/controller/DesignerController.java @@ -87,4 +87,12 @@ public class DesignerController { DesignerDTO designerInfo = designerService.getDesignerInfo(userId); return Response.success(designerInfo); } + + @Operation(summary = "删除设计师", description = "根据当前登录用户ID逻辑删除设计师及其所有关联数据(订单、订单明细、商品、商品图片)") + @DeleteMapping("/delete") + public Response delete() { + Long userId = UserContext.getUserId(); + designerService.deleteByUserId(userId); + return Response.success(); + } } diff --git a/src/main/java/com/aida/seller/module/designer/service/DesignerService.java b/src/main/java/com/aida/seller/module/designer/service/DesignerService.java index 077e801..6e9c768 100644 --- a/src/main/java/com/aida/seller/module/designer/service/DesignerService.java +++ b/src/main/java/com/aida/seller/module/designer/service/DesignerService.java @@ -49,4 +49,13 @@ public interface DesignerService extends IService { * 获取设计师详细信息 */ DesignerDTO getDesignerInfo(Long userId); + + /** + * 删除设计师(逻辑删除)及其所有关联数据 + *

级联删除:seller_designer(按userId)→ seller_orders → seller_order_item、 + * seller_listing → seller_listing_image

+ * + * @param userId 用户ID + */ + void deleteByUserId(Long userId); } diff --git a/src/main/java/com/aida/seller/module/designer/service/DesignerServiceImpl.java b/src/main/java/com/aida/seller/module/designer/service/DesignerServiceImpl.java index 254e0bf..6128cfc 100644 --- a/src/main/java/com/aida/seller/module/designer/service/DesignerServiceImpl.java +++ b/src/main/java/com/aida/seller/module/designer/service/DesignerServiceImpl.java @@ -9,6 +9,14 @@ import com.aida.seller.module.designer.dto.DesignerDTO; import com.aida.seller.module.designer.entity.DesignerEntity; import com.aida.seller.module.designer.enums.DesignerApplyStatusEnum; import com.aida.seller.module.designer.mapper.DesignerMapper; +import com.aida.seller.module.listing.entity.ListingEntity; +import com.aida.seller.module.listing.entity.ListingImageEntity; +import com.aida.seller.module.listing.mapper.ListingImageMapper; +import com.aida.seller.module.listing.mapper.ListingMapper; +import com.aida.seller.module.order.entity.OrderInfoEntity; +import com.aida.seller.module.order.entity.OrderItemEntity; +import com.aida.seller.module.order.mapper.OrderInfoMapper; +import com.aida.seller.module.order.mapper.OrderItemMapper; import com.aida.seller.util.MinioUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -18,6 +26,9 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; +import java.util.stream.Collectors; + import java.time.LocalDateTime; @Service @@ -25,6 +36,11 @@ import java.time.LocalDateTime; public class DesignerServiceImpl extends ServiceImpl implements DesignerService { private final MinioUtil minioUtil; + private final OrderInfoMapper orderInfoMapper; + private final OrderItemMapper orderItemMapper; + private final ListingMapper listingMapper; + private final ListingImageMapper listingImageMapper; + @Override public Boolean checkQualification(Long userId) { DesignerEntity entity = this.getOne( @@ -218,4 +234,66 @@ public class DesignerServiceImpl extends ServiceImpl() + .eq(DesignerEntity::getUserId, userId) + .last("LIMIT 1") + ); + if (designer == null) { + throw new BusinessException("设计师记录不存在"); + } + + Long sellerId = designer.getId(); + + // 1. 查询所有关联的 listing_id,再删除 listing 及其图片 + List listings = listingMapper.selectList( + new LambdaQueryWrapper() + .eq(ListingEntity::getSellerId, sellerId) + ); + if (!listings.isEmpty()) { + List listingIds = listings.stream() + .map(ListingEntity::getId) + .collect(Collectors.toList()); + + // 逻辑删除关联的图片 + listingImageMapper.delete( + new LambdaQueryWrapper() + .in(ListingImageEntity::getListingId, listingIds) + ); + // 逻辑删除 listing + listingMapper.delete( + new LambdaQueryWrapper() + .eq(ListingEntity::getSellerId, sellerId) + ); + } + + // 2. 删除 seller_orders 及关联的 order_item + List orders = orderInfoMapper.selectList( + new LambdaQueryWrapper() + .eq(OrderInfoEntity::getSellerId, sellerId) + ); + if (!orders.isEmpty()) { + List orderIds = orders.stream() + .map(OrderInfoEntity::getId) + .collect(Collectors.toList()); + + // 逻辑删除关联的订单明细 + orderItemMapper.delete( + new LambdaQueryWrapper() + .in(OrderItemEntity::getOrderId, orderIds) + ); + // 逻辑删除订单 + orderInfoMapper.delete( + new LambdaQueryWrapper() + .eq(OrderInfoEntity::getSellerId, sellerId) + ); + } + + // 3. 逻辑删除设计师本人 + this.removeById(sellerId); + } } diff --git a/src/main/java/com/aida/seller/module/listing/entity/ListingImageEntity.java b/src/main/java/com/aida/seller/module/listing/entity/ListingImageEntity.java index 40ad2a1..26d063a 100644 --- a/src/main/java/com/aida/seller/module/listing/entity/ListingImageEntity.java +++ b/src/main/java/com/aida/seller/module/listing/entity/ListingImageEntity.java @@ -1,7 +1,6 @@ package com.aida.seller.module.listing.entity; import com.baomidou.mybatisplus.annotation.*; -import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; @@ -43,4 +42,7 @@ public class ListingImageEntity implements Serializable { @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; + /** 是否删除:0-否,1-是 */ + @TableLogic + private Integer deleted; } diff --git a/src/main/java/com/aida/seller/module/listing/service/ListingServiceImpl.java b/src/main/java/com/aida/seller/module/listing/service/ListingServiceImpl.java index a4c1313..4743911 100644 --- a/src/main/java/com/aida/seller/module/listing/service/ListingServiceImpl.java +++ b/src/main/java/com/aida/seller/module/listing/service/ListingServiceImpl.java @@ -71,7 +71,8 @@ public class ListingServiceImpl extends ServiceImpl() .eq(ListingEntity::getId, dto.getId()) - .eq(ListingEntity::getSellerId, sellerId)); + .eq(ListingEntity::getSellerId, sellerId) + .eq(ListingEntity::getDeleted, 0)); if (existing == null) { throw new BusinessException("商品不存在"); } @@ -111,7 +112,8 @@ public class ListingServiceImpl extends ServiceImpl() .eq(ListingEntity::getId, id) - .eq(ListingEntity::getSellerId, sellerId)); + .eq(ListingEntity::getSellerId, sellerId) + .eq(ListingEntity::getDeleted, 0)); if (entity == null) { throw new BusinessException("商品不存在"); } @@ -141,6 +143,7 @@ public class ListingServiceImpl extends ServiceImpl pageParam = new Page<>(dto.getPageNum(), dto.getPageSize()); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(ListingEntity::getSellerId, sellerId); + queryWrapper.eq(ListingEntity::getDeleted, 0); if (dto.getStatus() != null) { queryWrapper.eq(ListingEntity::getStatus, dto.getStatus()); } else { @@ -164,7 +167,8 @@ public class ListingServiceImpl extends ServiceImpl() .eq(ListingEntity::getId, id) - .eq(ListingEntity::getSellerId, sellerId)); + .eq(ListingEntity::getSellerId, sellerId) + .eq(ListingEntity::getDeleted, 0)); if (existing == null) { throw new BusinessException("商品不存在"); } diff --git a/src/main/java/com/aida/seller/module/order/service/OrderServiceImpl.java b/src/main/java/com/aida/seller/module/order/service/OrderServiceImpl.java index 4f879de..2bd45e0 100644 --- a/src/main/java/com/aida/seller/module/order/service/OrderServiceImpl.java +++ b/src/main/java/com/aida/seller/module/order/service/OrderServiceImpl.java @@ -78,7 +78,7 @@ public class OrderServiceImpl extends ServiceImpl