From d2a25dc9ea10078237bcda439abae6e900ccb340 Mon Sep 17 00:00:00 2001 From: dzq Date: Thu, 24 Apr 2025 17:42:18 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E8=AE=A2=E5=8D=95=E7=AE=A1=E7=90=86):=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=AE=A2=E5=8D=95=E5=88=97=E8=A1=A8=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E5=8A=9F=E8=83=BD=E5=B9=B6=E6=89=A9=E5=B1=95=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增订单列表导出功能,支持将订单数据导出为Excel文件。同时扩展了订单查询条件,增加支付时间和支付方式的筛选。此外,新增了ShopOrderExcelDTO类用于Excel导出时的数据映射。 --- .../controller/shop/ShopOrderController.java | 23 +++++++++ .../shop/order/OrderApplicationService.java | 4 ++ .../shop/order/dto/ShopOrderExcelDTO.java | 50 +++++++++++++++++++ .../order/query/SearchShopOrderQuery.java | 7 +++ 4 files changed, 84 insertions(+) create mode 100644 agileboot-domain/src/main/java/com/agileboot/domain/shop/order/dto/ShopOrderExcelDTO.java 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 c507dce..b46fa32 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 @@ -1,18 +1,29 @@ package com.agileboot.admin.controller.shop; +import cn.hutool.json.JSONUtil; +import com.agileboot.admin.customize.aop.accessLog.AccessLog; import com.agileboot.common.core.base.BaseController; import com.agileboot.common.core.dto.ResponseDTO; import com.agileboot.common.core.page.PageDTO; +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.dto.ShopOrderExcelDTO; import com.agileboot.domain.shop.order.query.SearchShopOrderQuery; import io.swagger.v3.oas.annotations.Operation; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import javax.servlet.http.HttpServletResponse; +import java.util.List; +import java.util.stream.Collectors; + +@Slf4j @RestController @RequestMapping("/shop/order") @RequiredArgsConstructor @@ -25,7 +36,19 @@ public class ShopOrderController extends BaseController { // @PreAuthorize("@permission.has('shop:goods:list')") @GetMapping("/list") public ResponseDTO> list(SearchShopOrderQuery query) { + log.info("订单列表查询参数:{}", JSONUtil.toJsonStr(query)); PageDTO page = orderApplicationService.getOrderList(query); return ResponseDTO.ok(page); } + + @Operation(summary = "订单列表导出") + @AccessLog(title = "订单管理", businessType = BusinessTypeEnum.EXPORT) + @GetMapping("/excel") + public void exportOrderByExcel(HttpServletResponse response, SearchShopOrderQuery query) { + query.setPaymentMethod("wechat"); + query.setPayStatus(2); + List list = orderApplicationService.list(query); + List excelDTOList = list.stream().map(ShopOrderExcelDTO::new).collect(Collectors.toList()); + CustomExcelUtil.writeToResponse(excelDTOList, ShopOrderExcelDTO.class, response); + } } 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 b1fc27e..196bfb5 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 @@ -75,6 +75,10 @@ public class OrderApplicationService { return new PageDTO<>(page.getRecords(), page.getTotal()); } + public List list(SearchShopOrderQuery query) { + return orderService.list(query.toQueryWrapper()); + } + public void openOrderGoodsCabinet(Long orderId, Long orderGoodsId, AddCabinetCellOperationCommand operationCommand) { OrderModel orderModel = orderModelFactory.loadById(orderId); // 验证订单状态 diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/dto/ShopOrderExcelDTO.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/dto/ShopOrderExcelDTO.java new file mode 100644 index 0000000..32aa02b --- /dev/null +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/dto/ShopOrderExcelDTO.java @@ -0,0 +1,50 @@ +package com.agileboot.domain.shop.order.dto; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.DateUtil; +import com.agileboot.common.annotation.ExcelColumn; +import com.agileboot.domain.shop.order.db.ShopOrderEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +public class ShopOrderExcelDTO { + public ShopOrderExcelDTO(ShopOrderEntity entity) { + if (entity != null) { + BeanUtil.copyProperties(entity, this); + this.payTimeStr = entity.getPayTime() != null ? DateUtil.format(entity.getPayTime(), "yyyy-MM-dd HH:mm:ss"): ""; + this.createTimeStr = entity.getCreateTime()!= null? DateUtil.format(entity.getCreateTime(), "yyyy-MM-dd HH:mm:ss"): ""; + switch (entity.getPayStatus()) { + case 1: + this.payStatusStr = "未支付"; + break; + case 2: + this.payStatusStr = "已支付"; + break; + case 3: + this.payStatusStr = "退款中"; + break; + case 4: + this.payStatusStr = "已退款"; + break; + default: + this.payStatusStr = ""; + break; + } + } + } + + @ExcelColumn(name = "订单ID") + private Long orderId; + @ExcelColumn(name = "订单金额(元)") + private BigDecimal totalAmount; + @ExcelColumn(name = "支付状态") + private String payStatusStr; + @ExcelColumn(name = "支付时间") + private String payTimeStr; + @ExcelColumn(name = "创建时间") + private String createTimeStr; +} 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 95b3fae..a601bb4 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 @@ -1,5 +1,6 @@ package com.agileboot.domain.shop.order.query; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.agileboot.common.core.page.AbstractPageQuery; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -16,6 +17,8 @@ public class SearchShopOrderQuery extends AbstractPageQuery { private Integer payStatus; private Date startTime; private Date endTime; + private Date payTime; + private String paymentMethod; @Override public QueryWrapper addQueryCondition() { @@ -25,7 +28,11 @@ public class SearchShopOrderQuery extends AbstractPageQuery { .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", + payTime == null ? null : DateUtil.beginOfDay(payTime).toJdkDate(), + payTime == null ? null : DateUtil.endOfDay(payTime).toJdkDate()) .eq("deleted", 0) .orderByDesc("create_time");