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.command.UpdateCabinetCellCommand;
|
||||||
import com.agileboot.domain.cabinet.cell.db.CabinetCellEntity;
|
import com.agileboot.domain.cabinet.cell.db.CabinetCellEntity;
|
||||||
import com.agileboot.domain.cabinet.cell.dto.CabinetCellDTO;
|
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.SearchCabinetCellQuery;
|
||||||
import com.agileboot.domain.cabinet.cell.query.SearchCabinetCellWithOrdersQuery;
|
import com.agileboot.domain.cabinet.cell.query.SearchCabinetCellWithOrdersQuery;
|
||||||
import com.agileboot.domain.common.command.BulkOperationCommand;
|
import com.agileboot.domain.common.command.BulkOperationCommand;
|
||||||
|
@ -39,8 +40,8 @@ public class CabinetCellController extends BaseController {
|
||||||
|
|
||||||
@Operation(summary = "格口列表")
|
@Operation(summary = "格口列表")
|
||||||
@GetMapping
|
@GetMapping
|
||||||
public ResponseDTO<PageDTO<CabinetCellDTO>> list(SearchCabinetCellWithOrdersQuery<CabinetCellEntity> query) {
|
public ResponseDTO<PageDTO<CabinetCellWithOrderCountDTO>> list(SearchCabinetCellWithOrdersQuery<CabinetCellEntity> query) {
|
||||||
PageDTO<CabinetCellDTO> page = cabinetCellApplicationService.getCabinetCellList(query);
|
PageDTO<CabinetCellWithOrderCountDTO> page = cabinetCellApplicationService.getCabinetCellList(query);
|
||||||
return ResponseDTO.ok(page);
|
return ResponseDTO.ok(page);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,26 +30,9 @@ public class CabinetCellApplicationService {
|
||||||
private final CabinetCellModelFactory cabinetCellModelFactory;
|
private final CabinetCellModelFactory cabinetCellModelFactory;
|
||||||
private final ShopGoodsService shopGoodsService;
|
private final ShopGoodsService shopGoodsService;
|
||||||
|
|
||||||
public PageDTO<CabinetCellDTO> getCabinetCellList(SearchCabinetCellWithOrdersQuery<CabinetCellEntity> query) {
|
public PageDTO<CabinetCellWithOrderCountDTO> getCabinetCellList(SearchCabinetCellWithOrdersQuery<CabinetCellEntity> query) {
|
||||||
// Page<CabinetCellEntity> page = cabinetCellService.getCellList(query);
|
|
||||||
Page<CabinetCellWithOrderCountDTO> page = cabinetCellService.getCellListWithOrders(query);
|
Page<CabinetCellWithOrderCountDTO> page = cabinetCellService.getCellListWithOrders(query);
|
||||||
List<ShopGoodsEntity> goodsList = shopGoodsService.selectAll();
|
return new PageDTO<>(page.getRecords(), page.getTotal());
|
||||||
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());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addCabinetCell(AddCabinetCellCommand command) {
|
public void addCabinetCell(AddCabinetCellCommand command) {
|
||||||
|
|
|
@ -52,9 +52,10 @@ public interface CabinetCellMapper extends BaseMapper<CabinetCellEntity> {
|
||||||
"WHERE cell_id = #{cellId}")
|
"WHERE cell_id = #{cellId}")
|
||||||
void clearGoodsIdAndFreeCell(@Param("cellId") Long 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 " +
|
"FROM cabinet_cell cc " +
|
||||||
"LEFT JOIN shop_order_goods sog ON cc.cell_id = sog.cell_id AND sog.deleted = 0 " +
|
"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} ")
|
"${ew.customSqlSegment} ")
|
||||||
Page<CabinetCellWithOrderCountDTO> getCellListWithOrders(
|
Page<CabinetCellWithOrderCountDTO> getCellListWithOrders(
|
||||||
Page<CabinetCellEntity> page,
|
Page<CabinetCellEntity> page,
|
||||||
|
|
|
@ -1,13 +1,28 @@
|
||||||
package com.agileboot.domain.cabinet.cell.dto;
|
package com.agileboot.domain.cabinet.cell.dto;
|
||||||
|
|
||||||
import com.agileboot.domain.cabinet.cell.db.CabinetCellEntity;
|
import com.agileboot.domain.cabinet.cell.db.CabinetCellEntity;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
public class CabinetCellWithOrderCountDTO extends CabinetCellEntity {
|
public class CabinetCellWithOrderCountDTO extends CabinetCellEntity {
|
||||||
@ApiModelProperty("历史订单数量")
|
@ApiModelProperty("历史订单数量")
|
||||||
private Integer orderCount;
|
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 com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
|
@ -18,6 +19,7 @@ public class SearchCabinetCellWithOrdersQuery<T> extends AbstractPageQuery<T> {
|
||||||
private Integer availableStatus;
|
private Integer availableStatus;
|
||||||
private Date startTime;
|
private Date startTime;
|
||||||
private Date endTime;
|
private Date endTime;
|
||||||
|
private String goodsName;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public QueryWrapper<T> addQueryCondition() {
|
public QueryWrapper<T> addQueryCondition() {
|
||||||
|
@ -31,6 +33,7 @@ public class SearchCabinetCellWithOrdersQuery<T> extends AbstractPageQuery<T> {
|
||||||
.eq(usageStatus != null, "cc.usage_status", usageStatus)
|
.eq(usageStatus != null, "cc.usage_status", usageStatus)
|
||||||
.eq(availableStatus != null, "cc.available_status", availableStatus)
|
.eq(availableStatus != null, "cc.available_status", availableStatus)
|
||||||
.eq("cc.deleted", false)
|
.eq("cc.deleted", false)
|
||||||
|
.like(StringUtils.isNotBlank(goodsName), "sg.goods_name", goodsName)
|
||||||
.between(startTime != null && endTime != null, "cc.create_time", startTime, endTime)
|
.between(startTime != null && endTime != null, "cc.create_time", startTime, endTime)
|
||||||
.groupBy("cc.cell_id");
|
.groupBy("cc.cell_id");
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue