feat(格口管理): 优化格口列表查询,添加商品信息关联查询
修改SQL查询语句,直接关联查询商品名称、价格和封面图,避免后续循环查询 移除冗余的DTO转换逻辑,直接返回包含商品信息的DTO 在查询条件中添加商品名称的模糊搜索支持
This commit is contained in:
parent
9dd57047b5
commit
160033f107
|
@ -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<PageDTO<CabinetCellDTO>> list(SearchCabinetCellWithOrdersQuery<CabinetCellEntity> query) {
|
||||
PageDTO<CabinetCellDTO> page = cabinetCellApplicationService.getCabinetCellList(query);
|
||||
public ResponseDTO<PageDTO<CabinetCellWithOrderCountDTO>> list(SearchCabinetCellWithOrdersQuery<CabinetCellEntity> query) {
|
||||
PageDTO<CabinetCellWithOrderCountDTO> page = cabinetCellApplicationService.getCabinetCellList(query);
|
||||
return ResponseDTO.ok(page);
|
||||
}
|
||||
|
||||
|
|
|
@ -30,26 +30,9 @@ public class CabinetCellApplicationService {
|
|||
private final CabinetCellModelFactory cabinetCellModelFactory;
|
||||
private final ShopGoodsService shopGoodsService;
|
||||
|
||||
public PageDTO<CabinetCellDTO> getCabinetCellList(SearchCabinetCellWithOrdersQuery<CabinetCellEntity> query) {
|
||||
// Page<CabinetCellEntity> page = cabinetCellService.getCellList(query);
|
||||
public PageDTO<CabinetCellWithOrderCountDTO> getCabinetCellList(SearchCabinetCellWithOrdersQuery<CabinetCellEntity> query) {
|
||||
Page<CabinetCellWithOrderCountDTO> page = cabinetCellService.getCellListWithOrders(query);
|
||||
List<ShopGoodsEntity> goodsList = shopGoodsService.selectAll();
|
||||
List<CabinetCellDTO> 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) {
|
||||
|
|
|
@ -52,9 +52,10 @@ public interface CabinetCellMapper extends BaseMapper<CabinetCellEntity> {
|
|||
"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<CabinetCellWithOrderCountDTO> getCellListWithOrders(
|
||||
Page<CabinetCellEntity> page,
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -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<T> extends AbstractPageQuery<T> {
|
|||
private Integer availableStatus;
|
||||
private Date startTime;
|
||||
private Date endTime;
|
||||
private String goodsName;
|
||||
|
||||
@Override
|
||||
public QueryWrapper<T> addQueryCondition() {
|
||||
|
@ -31,6 +33,7 @@ public class SearchCabinetCellWithOrdersQuery<T> extends AbstractPageQuery<T> {
|
|||
.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");
|
||||
|
||||
|
|
Loading…
Reference in New Issue