diff --git a/agileboot-admin/src/main/java/com/agileboot/admin/controller/shop/ShopOrderController.java b/agileboot-admin/src/main/java/com/agileboot/admin/controller/shop/ShopOrderController.java index b46fa32..f496aca 100644 --- a/agileboot-admin/src/main/java/com/agileboot/admin/controller/shop/ShopOrderController.java +++ b/agileboot-admin/src/main/java/com/agileboot/admin/controller/shop/ShopOrderController.java @@ -9,6 +9,7 @@ import com.agileboot.common.enums.common.BusinessTypeEnum; import com.agileboot.common.utils.poi.CustomExcelUtil; import com.agileboot.domain.shop.order.OrderApplicationService; import com.agileboot.domain.shop.order.db.ShopOrderEntity; +import com.agileboot.domain.shop.order.db.dto.OrderWithGoodsDTO; import com.agileboot.domain.shop.order.dto.ShopOrderExcelDTO; import com.agileboot.domain.shop.order.query.SearchShopOrderQuery; import io.swagger.v3.oas.annotations.Operation; @@ -35,9 +36,9 @@ public class ShopOrderController extends BaseController { @Operation(summary = "订单列表") // @PreAuthorize("@permission.has('shop:goods:list')") @GetMapping("/list") - public ResponseDTO> list(SearchShopOrderQuery query) { + public ResponseDTO> list(SearchShopOrderQuery query) { log.info("订单列表查询参数:{}", JSONUtil.toJsonStr(query)); - PageDTO page = orderApplicationService.getOrderList(query); + PageDTO page = orderApplicationService.getOrderList(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 0805b37..c513622 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 @@ -1,6 +1,7 @@ package com.agileboot.domain.cabinet.cell; import com.agileboot.common.core.page.PageDTO; +import com.agileboot.domain.cabinet.cell.dto.CabinetCellWithOrderCountDTO; import com.agileboot.domain.common.command.BulkOperationCommand; import com.agileboot.domain.cabinet.cell.command.AddCabinetCellCommand; import com.agileboot.domain.cabinet.cell.command.UpdateCabinetCellCommand; @@ -29,7 +30,8 @@ public class CabinetCellApplicationService { private final ShopGoodsService shopGoodsService; public PageDTO getCabinetCellList(SearchCabinetCellQuery query) { - Page page = cabinetCellService.getCellList(query); +// Page page = cabinetCellService.getCellList(query); + Page page = cabinetCellService.getCellListWithOrders(query); List goodsList = shopGoodsService.selectAll(); List dtoList = page.getRecords().stream() .map(cell -> { 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 61d4c06..edf7ce0 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 @@ -1,5 +1,6 @@ package com.agileboot.domain.cabinet.cell.db; +import com.agileboot.domain.cabinet.cell.dto.CabinetCellWithOrderCountDTO; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.toolkit.Constants; @@ -51,4 +52,13 @@ 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 " + + "FROM cabinet_cell cc " + + "LEFT JOIN shop_order_goods sog ON cc.cell_id = sog.cell_id AND sog.deleted = 0 " + + "${ew.customSqlSegment} ") + Page getCellListWithOrders( + Page page, + @Param(Constants.WRAPPER) Wrapper queryWrapper + ); + } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellService.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellService.java index 037eec3..07c1f7f 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellService.java @@ -1,9 +1,14 @@ package com.agileboot.domain.cabinet.cell.db; import com.agileboot.common.core.page.AbstractPageQuery; +import com.agileboot.domain.cabinet.cell.dto.CabinetCellWithOrderCountDTO; import com.agileboot.domain.cabinet.smartCabinet.dto.CabinetDetailDTO; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import org.apache.ibatis.annotations.Param; + import java.util.List; /** @@ -23,4 +28,6 @@ public interface CabinetCellService extends IService { List selectByGoodsId(Long goodsId); void clearGoodsIdAndFreeCell(Long cellId); + + Page getCellListWithOrders(AbstractPageQuery query); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellServiceImpl.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellServiceImpl.java index 6da9fb8..bf23f61 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellServiceImpl.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellServiceImpl.java @@ -1,6 +1,7 @@ package com.agileboot.domain.cabinet.cell.db; import com.agileboot.common.core.page.AbstractPageQuery; +import com.agileboot.domain.cabinet.cell.dto.CabinetCellWithOrderCountDTO; import com.agileboot.domain.cabinet.smartCabinet.dto.CabinetDetailDTO; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -40,4 +41,9 @@ public class CabinetCellServiceImpl extends ServiceImpl getCellListWithOrders(AbstractPageQuery query) { + return baseMapper.getCellListWithOrders(query.toPage(), query.toQueryWrapper()); + } } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/dto/CabinetCellDTO.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/dto/CabinetCellDTO.java index 84f9570..2b5741c 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/dto/CabinetCellDTO.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/dto/CabinetCellDTO.java @@ -25,6 +25,12 @@ public class CabinetCellDTO { } } + public CabinetCellDTO(CabinetCellWithOrderCountDTO entity) { + if (entity != null) { + BeanUtil.copyProperties(entity, this); + } + } + @ExcelColumn(name = "格口ID") private Long cellId; @@ -40,6 +46,9 @@ public class CabinetCellDTO { @ExcelColumn(name = "库存数量") private Integer stock; + @ExcelColumn(name = "订单数量") + private Integer orderCount; + @ExcelColumn(name = "格口类型") private Integer cellType; 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 new file mode 100644 index 0000000..fa89cd9 --- /dev/null +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/dto/CabinetCellWithOrderCountDTO.java @@ -0,0 +1,13 @@ +package com.agileboot.domain.cabinet.cell.dto; + +import com.agileboot.domain.cabinet.cell.db.CabinetCellEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +public class CabinetCellWithOrderCountDTO extends CabinetCellEntity { + @ApiModelProperty("历史订单数量") + private Integer orderCount; +} \ 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 new file mode 100644 index 0000000..49e5313 --- /dev/null +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/query/SearchCabinetCellWithOrdersQuery.java @@ -0,0 +1,40 @@ +package com.agileboot.domain.cabinet.cell.query; + +import com.agileboot.common.core.page.AbstractPageQuery; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +@EqualsAndHashCode(callSuper = true) +@Data +public class SearchCabinetCellWithOrdersQuery extends AbstractPageQuery { + private Long cellId; + private Long cabinetId; + private Integer cellNo; + private Integer cellType; + private Integer usageStatus; + private Integer availableStatus; + private Date startTime; + private Date endTime; + + @Override + public QueryWrapper addQueryCondition() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + + queryWrapper + .eq(cellId != null, "cc.cell_id", cellId) + .eq(cabinetId != null, "cc.cabinet_id", cabinetId) + .eq(cellNo != null, "cc.cell_no", cellNo) + .eq(cellType != null, "cc.cell_type", cellType) + .eq(usageStatus != null, "cc.usage_status", usageStatus) + .eq(availableStatus != null, "cc.available_status", availableStatus) + .eq("cc.deleted", false) + .between(startTime != null && endTime != null, "cc.create_time", startTime, endTime); + + this.timeRangeColumn = "create_time"; + + return queryWrapper; + } +} diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/OrderApplicationService.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/OrderApplicationService.java index 0e93e0f..72c0a85 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/OrderApplicationService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/OrderApplicationService.java @@ -25,6 +25,7 @@ import com.agileboot.domain.shop.order.db.ShopOrderEntity; import com.agileboot.domain.shop.order.db.ShopOrderService; import com.agileboot.domain.shop.order.db.ShopOrderGoodsEntity; import com.agileboot.domain.shop.order.db.ShopOrderGoodsService; +import com.agileboot.domain.shop.order.db.dto.OrderWithGoodsDTO; import com.agileboot.domain.shop.order.dto.CreateOrderResult; import com.agileboot.domain.shop.order.dto.GetOrdersByOpenIdDTO; import com.agileboot.domain.shop.order.dto.ShopOrderDTO; @@ -74,8 +75,8 @@ public class OrderApplicationService { private final CabinetCellOperationModelFactory cabinetCellOperationModelFactory; private final PaymentOperationLogApplicationService paymentOperationLogApplicationService; - public PageDTO getOrderList(SearchShopOrderQuery query) { - Page page = orderService.page(query.toPage(), query.toQueryWrapper()); + public PageDTO getOrderList(SearchShopOrderQuery query) { + Page page = orderService.getOrderList(query); return new PageDTO<>(page.getRecords(), page.getTotal()); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderMapper.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderMapper.java index cf45af9..935d341 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderMapper.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderMapper.java @@ -1,6 +1,12 @@ package com.agileboot.domain.shop.order.db; +import com.agileboot.domain.shop.order.db.dto.OrderWithGoodsDTO; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; /** *

@@ -12,4 +18,14 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; */ public interface ShopOrderMapper extends BaseMapper { + @Select("SELECT o.*, " + + "GROUP_CONCAT(DISTINCT og.goods_name) AS goodsNames, " + + "GROUP_CONCAT(DISTINCT og.cover_img) AS coverImgs " + + "FROM shop_order o " + + "LEFT JOIN shop_order_goods og ON o.order_id = og.order_id AND og.deleted = 0 " + + "${ew.customSqlSegment}") + Page getOrderList( + Page page, + @Param(Constants.WRAPPER) Wrapper queryWrapper + ); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderService.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderService.java index c87b01e..8e16ca3 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderService.java @@ -1,5 +1,9 @@ package com.agileboot.domain.shop.order.db; +import com.agileboot.domain.shop.order.db.dto.OrderWithGoodsDTO; +import com.agileboot.domain.shop.order.query.SearchShopOrderQuery; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; /** @@ -11,4 +15,5 @@ import com.baomidou.mybatisplus.extension.service.IService; * @since 2025-03-10 */ public interface ShopOrderService extends IService { + Page getOrderList(SearchShopOrderQuery query); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderServiceImpl.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderServiceImpl.java index 159bae0..7ca53f4 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderServiceImpl.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderServiceImpl.java @@ -1,7 +1,11 @@ package com.agileboot.domain.shop.order.db; import cn.hutool.core.date.DateUtil; +import com.agileboot.domain.shop.order.db.dto.OrderWithGoodsDTO; import com.agileboot.domain.shop.order.model.OrderModel; +import com.agileboot.domain.shop.order.query.SearchShopOrderQuery; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; @@ -15,4 +19,8 @@ import org.springframework.stereotype.Service; */ @Service public class ShopOrderServiceImpl extends ServiceImpl implements ShopOrderService { + @Override + public Page getOrderList(SearchShopOrderQuery query) { + return baseMapper.getOrderList(query.toPage(), query.toQueryWrapper()); + } } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/dto/OrderWithGoodsDTO.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/dto/OrderWithGoodsDTO.java new file mode 100644 index 0000000..e0099fd --- /dev/null +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/dto/OrderWithGoodsDTO.java @@ -0,0 +1,12 @@ +package com.agileboot.domain.shop.order.db.dto; + +import com.agileboot.domain.shop.order.db.ShopOrderEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +public class OrderWithGoodsDTO extends ShopOrderEntity { + private String goodsNames; + private String coverImgs; +} \ No newline at end of file diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/query/SearchShopOrderQuery.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/query/SearchShopOrderQuery.java index a601bb4..adef8a7 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/query/SearchShopOrderQuery.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/query/SearchShopOrderQuery.java @@ -12,7 +12,8 @@ import lombok.EqualsAndHashCode; @Data public class SearchShopOrderQuery extends AbstractPageQuery { - private String orderNumber; + private Long orderId; + private Long cellId; private Integer status; private Integer payStatus; private Date startTime; @@ -25,16 +26,18 @@ public class SearchShopOrderQuery extends AbstractPageQuery { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper - .like(StrUtil.isNotEmpty(orderNumber), "order_number", orderNumber) - .eq(status != null, "status", status) - .eq(payStatus != null, "pay_status", payStatus) - .eq(StrUtil.isNotEmpty(paymentMethod), "payment_method", paymentMethod) - .between(startTime != null && endTime != null, "create_time", startTime, endTime) - .between(payTime != null, "pay_time", + .eq(orderId != null, "o.order_id", orderId) + .eq(cellId != null, "og.cell_id", cellId) + .eq(status != null, "o.status", status) + .eq(payStatus != null, "o.pay_status", payStatus) + .eq(StrUtil.isNotEmpty(paymentMethod), "o.payment_method", paymentMethod) + .between(startTime != null && endTime != null, "o.create_time", startTime, endTime) + .between(payTime != null, "o.pay_time", payTime == null ? null : DateUtil.beginOfDay(payTime).toJdkDate(), payTime == null ? null : DateUtil.endOfDay(payTime).toJdkDate()) - .eq("deleted", 0) - .orderByDesc("create_time"); + .eq("o.deleted", 0) + .groupBy("o.order_id") + .orderByDesc("o.create_time"); return queryWrapper; } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/system/user/query/SearchUserQuery.java b/agileboot-domain/src/main/java/com/agileboot/domain/system/user/query/SearchUserQuery.java index 1bbdc3d..4bd4b0e 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/system/user/query/SearchUserQuery.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/system/user/query/SearchUserQuery.java @@ -16,6 +16,7 @@ public class SearchUserQuery extends AbstractPageQuery { protected Long userId; protected String username; + protected String nickname; protected Integer status; protected String phoneNumber; protected Long deptId; @@ -26,6 +27,7 @@ public class SearchUserQuery extends AbstractPageQuery { queryWrapper.like(StrUtil.isNotEmpty(username), "username", username) .like(StrUtil.isNotEmpty(phoneNumber), "u.phone_number", phoneNumber) + .like(StrUtil.isNotEmpty(nickname), "u.nickname", nickname) .eq(userId != null, "u.user_id", userId) .eq(status != null, "u.status", status) .eq("u.deleted", 0)