feat(订单管理): 添加订单列表导出功能并扩展查询条件

新增订单列表导出功能,支持将订单数据导出为Excel文件。同时扩展了订单查询条件,增加支付时间和支付方式的筛选。此外,新增了ShopOrderExcelDTO类用于Excel导出时的数据映射。
This commit is contained in:
dzq 2025-04-24 17:42:18 +08:00
parent 3803ae0446
commit d2a25dc9ea
4 changed files with 84 additions and 0 deletions

View File

@ -1,18 +1,29 @@
package com.agileboot.admin.controller.shop; 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.base.BaseController;
import com.agileboot.common.core.dto.ResponseDTO; import com.agileboot.common.core.dto.ResponseDTO;
import com.agileboot.common.core.page.PageDTO; 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.OrderApplicationService;
import com.agileboot.domain.shop.order.db.ShopOrderEntity; 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 com.agileboot.domain.shop.order.query.SearchShopOrderQuery;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
@RestController @RestController
@RequestMapping("/shop/order") @RequestMapping("/shop/order")
@RequiredArgsConstructor @RequiredArgsConstructor
@ -25,7 +36,19 @@ public class ShopOrderController extends BaseController {
// @PreAuthorize("@permission.has('shop:goods:list')") // @PreAuthorize("@permission.has('shop:goods:list')")
@GetMapping("/list") @GetMapping("/list")
public ResponseDTO<PageDTO<ShopOrderEntity>> list(SearchShopOrderQuery<ShopOrderEntity> query) { public ResponseDTO<PageDTO<ShopOrderEntity>> list(SearchShopOrderQuery<ShopOrderEntity> query) {
log.info("订单列表查询参数:{}", JSONUtil.toJsonStr(query));
PageDTO<ShopOrderEntity> page = orderApplicationService.getOrderList(query); PageDTO<ShopOrderEntity> page = orderApplicationService.getOrderList(query);
return ResponseDTO.ok(page); return ResponseDTO.ok(page);
} }
@Operation(summary = "订单列表导出")
@AccessLog(title = "订单管理", businessType = BusinessTypeEnum.EXPORT)
@GetMapping("/excel")
public void exportOrderByExcel(HttpServletResponse response, SearchShopOrderQuery<ShopOrderEntity> query) {
query.setPaymentMethod("wechat");
query.setPayStatus(2);
List<ShopOrderEntity> list = orderApplicationService.list(query);
List<ShopOrderExcelDTO> excelDTOList = list.stream().map(ShopOrderExcelDTO::new).collect(Collectors.toList());
CustomExcelUtil.writeToResponse(excelDTOList, ShopOrderExcelDTO.class, response);
}
} }

View File

@ -75,6 +75,10 @@ public class OrderApplicationService {
return new PageDTO<>(page.getRecords(), page.getTotal()); return new PageDTO<>(page.getRecords(), page.getTotal());
} }
public List<ShopOrderEntity> list(SearchShopOrderQuery<ShopOrderEntity> query) {
return orderService.list(query.toQueryWrapper());
}
public void openOrderGoodsCabinet(Long orderId, Long orderGoodsId, AddCabinetCellOperationCommand operationCommand) { public void openOrderGoodsCabinet(Long orderId, Long orderGoodsId, AddCabinetCellOperationCommand operationCommand) {
OrderModel orderModel = orderModelFactory.loadById(orderId); OrderModel orderModel = orderModelFactory.loadById(orderId);
// 验证订单状态 // 验证订单状态

View File

@ -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;
}

View File

@ -1,5 +1,6 @@
package com.agileboot.domain.shop.order.query; package com.agileboot.domain.shop.order.query;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.agileboot.common.core.page.AbstractPageQuery; import com.agileboot.common.core.page.AbstractPageQuery;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@ -16,6 +17,8 @@ public class SearchShopOrderQuery<T> extends AbstractPageQuery<T> {
private Integer payStatus; private Integer payStatus;
private Date startTime; private Date startTime;
private Date endTime; private Date endTime;
private Date payTime;
private String paymentMethod;
@Override @Override
public QueryWrapper<T> addQueryCondition() { public QueryWrapper<T> addQueryCondition() {
@ -25,7 +28,11 @@ public class SearchShopOrderQuery<T> extends AbstractPageQuery<T> {
.like(StrUtil.isNotEmpty(orderNumber), "order_number", orderNumber) .like(StrUtil.isNotEmpty(orderNumber), "order_number", orderNumber)
.eq(status != null, "status", status) .eq(status != null, "status", status)
.eq(payStatus != null, "pay_status", payStatus) .eq(payStatus != null, "pay_status", payStatus)
.eq(StrUtil.isNotEmpty(paymentMethod), "payment_method", paymentMethod)
.between(startTime != null && endTime != null, "create_time", startTime, endTime) .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) .eq("deleted", 0)
.orderByDesc("create_time"); .orderByDesc("create_time");