From 160033f107d45e21ab40b462aa6bdf00e17511a0 Mon Sep 17 00:00:00 2001 From: dzq Date: Mon, 26 May 2025 09:59:32 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=A0=BC=E5=8F=A3=E7=AE=A1=E7=90=86):=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=A0=BC=E5=8F=A3=E5=88=97=E8=A1=A8=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=95=86=E5=93=81=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E5=85=B3=E8=81=94=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修改SQL查询语句,直接关联查询商品名称、价格和封面图,避免后续循环查询 移除冗余的DTO转换逻辑,直接返回包含商品信息的DTO 在查询条件中添加商品名称的模糊搜索支持 --- .../cabinet/CabinetCellController.java | 5 +++-- .../cell/CabinetCellApplicationService.java | 21 ++----------------- .../cabinet/cell/db/CabinetCellMapper.java | 3 ++- .../dto/CabinetCellWithOrderCountDTO.java | 15 +++++++++++++ .../SearchCabinetCellWithOrdersQuery.java | 3 +++ 5 files changed, 25 insertions(+), 22 deletions(-) diff --git a/agileboot-admin/src/main/java/com/agileboot/admin/controller/cabinet/CabinetCellController.java b/agileboot-admin/src/main/java/com/agileboot/admin/controller/cabinet/CabinetCellController.java index f48e6cc..6ae88fd 100644 --- a/agileboot-admin/src/main/java/com/agileboot/admin/controller/cabinet/CabinetCellController.java +++ b/agileboot-admin/src/main/java/com/agileboot/admin/controller/cabinet/CabinetCellController.java @@ -10,6 +10,7 @@ import com.agileboot.domain.cabinet.cell.command.AddCabinetCellCommand; import com.agileboot.domain.cabinet.cell.command.UpdateCabinetCellCommand; import com.agileboot.domain.cabinet.cell.db.CabinetCellEntity; import com.agileboot.domain.cabinet.cell.dto.CabinetCellDTO; +import com.agileboot.domain.cabinet.cell.dto.CabinetCellWithOrderCountDTO; import com.agileboot.domain.cabinet.cell.query.SearchCabinetCellQuery; import com.agileboot.domain.cabinet.cell.query.SearchCabinetCellWithOrdersQuery; import com.agileboot.domain.common.command.BulkOperationCommand; @@ -39,8 +40,8 @@ public class CabinetCellController extends BaseController { @Operation(summary = "格口列表") @GetMapping - public ResponseDTO> list(SearchCabinetCellWithOrdersQuery query) { - PageDTO page = cabinetCellApplicationService.getCabinetCellList(query); + public ResponseDTO> list(SearchCabinetCellWithOrdersQuery query) { + PageDTO page = cabinetCellApplicationService.getCabinetCellList(query); return ResponseDTO.ok(page); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/CabinetCellApplicationService.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/CabinetCellApplicationService.java index 34a9640..e5d7438 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/CabinetCellApplicationService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/CabinetCellApplicationService.java @@ -30,26 +30,9 @@ public class CabinetCellApplicationService { private final CabinetCellModelFactory cabinetCellModelFactory; private final ShopGoodsService shopGoodsService; - public PageDTO getCabinetCellList(SearchCabinetCellWithOrdersQuery query) { -// Page page = cabinetCellService.getCellList(query); + public PageDTO getCabinetCellList(SearchCabinetCellWithOrdersQuery query) { Page page = cabinetCellService.getCellListWithOrders(query); - List goodsList = shopGoodsService.selectAll(); - List dtoList = page.getRecords().stream() - .map(cell -> { - CabinetCellDTO dto = new CabinetCellDTO(cell); - ShopGoodsEntity goods = goodsList.stream() - .filter(g -> g.getGoodsId().equals(cell.getGoodsId())) - .findFirst() - .orElse(null); - if (goods != null) { - dto.setGoodsName(goods.getGoodsName()); - dto.setPrice(goods.getPrice()); - dto.setCoverImg(goods.getCoverImg()); - } - return dto; - }) - .collect(Collectors.toList()); - return new PageDTO<>(dtoList, page.getTotal()); + return new PageDTO<>(page.getRecords(), page.getTotal()); } public void addCabinetCell(AddCabinetCellCommand command) { diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellMapper.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellMapper.java index c2e78f3..782f9c9 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellMapper.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellMapper.java @@ -52,9 +52,10 @@ public interface CabinetCellMapper extends BaseMapper { "WHERE cell_id = #{cellId}") void clearGoodsIdAndFreeCell(@Param("cellId") Long cellId); - @Select("SELECT cc.*, COUNT(sog.order_goods_id) AS orderCount " + + @Select("SELECT cc.*, COUNT(sog.order_goods_id) AS orderCount, sg.goods_name, sg.price, sg.cover_img " + "FROM cabinet_cell cc " + "LEFT JOIN shop_order_goods sog ON cc.cell_id = sog.cell_id AND sog.deleted = 0 " + + "LEFT JOIN shop_goods sg ON cc.goods_id = sg.goods_id AND sg.deleted = 0 " + "${ew.customSqlSegment} ") Page getCellListWithOrders( Page page, diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/dto/CabinetCellWithOrderCountDTO.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/dto/CabinetCellWithOrderCountDTO.java index fa89cd9..6ede152 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/dto/CabinetCellWithOrderCountDTO.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/dto/CabinetCellWithOrderCountDTO.java @@ -1,13 +1,28 @@ package com.agileboot.domain.cabinet.cell.dto; import com.agileboot.domain.cabinet.cell.db.CabinetCellEntity; +import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; +import java.math.BigDecimal; + @Data @EqualsAndHashCode(callSuper = true) public class CabinetCellWithOrderCountDTO extends CabinetCellEntity { @ApiModelProperty("历史订单数量") private Integer orderCount; + + @ApiModelProperty("关联商品名称") + @TableField("goods_name") + private String goodsName; + + @ApiModelProperty("关联商品价格") + @TableField("price") + private BigDecimal price; + + @ApiModelProperty("关联商品图片") + @TableField("cover_img") + private String coverImg; } \ No newline at end of file diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/query/SearchCabinetCellWithOrdersQuery.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/query/SearchCabinetCellWithOrdersQuery.java index 008b4ab..468d66c 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/query/SearchCabinetCellWithOrdersQuery.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/query/SearchCabinetCellWithOrdersQuery.java @@ -4,6 +4,7 @@ import com.agileboot.common.core.page.AbstractPageQuery; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.Data; import lombok.EqualsAndHashCode; +import org.apache.commons.lang3.StringUtils; import java.util.Date; @@ -18,6 +19,7 @@ public class SearchCabinetCellWithOrdersQuery extends AbstractPageQuery { private Integer availableStatus; private Date startTime; private Date endTime; + private String goodsName; @Override public QueryWrapper addQueryCondition() { @@ -31,6 +33,7 @@ public class SearchCabinetCellWithOrdersQuery extends AbstractPageQuery { .eq(usageStatus != null, "cc.usage_status", usageStatus) .eq(availableStatus != null, "cc.available_status", availableStatus) .eq("cc.deleted", false) + .like(StringUtils.isNotBlank(goodsName), "sg.goods_name", goodsName) .between(startTime != null && endTime != null, "cc.create_time", startTime, endTime) .groupBy("cc.cell_id");