From 5a826a777792e81952d82564d2a620b47b7331ca Mon Sep 17 00:00:00 2001 From: dzq Date: Sat, 29 Nov 2025 09:06:06 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E8=AE=A2=E5=8D=95):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=80=9F=E8=BF=98=E5=8A=A8=E6=80=81=E6=9F=A5=E8=AF=A2=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加借还动态查询接口及相关DTO、Query类 在BorrowReturnRecordDTO中增加归还时间和审批时间字段 实现借出和归还记录的联合查询并按时间排序 --- .../controller/shop/ShopOrderController.java | 10 ++ .../api/controller/OrderController.java | 14 +++ .../shop/order/OrderApplicationService.java | 7 ++ .../domain/shop/order/db/ShopOrderMapper.java | 70 ++++++++++++ .../shop/order/db/ShopOrderService.java | 4 + .../shop/order/db/ShopOrderServiceImpl.java | 7 ++ .../order/dto/BorrowReturnDynamicDTO.java | 101 ++++++++++++++++++ .../shop/order/dto/BorrowReturnRecordDTO.java | 6 ++ .../query/SearchBorrowReturnDynamicQuery.java | 62 +++++++++++ 9 files changed, 281 insertions(+) create mode 100644 agileboot-domain/src/main/java/com/agileboot/domain/shop/order/dto/BorrowReturnDynamicDTO.java create mode 100644 agileboot-domain/src/main/java/com/agileboot/domain/shop/order/query/SearchBorrowReturnDynamicQuery.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 b770818..9f21125 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 @@ -11,8 +11,10 @@ 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.BorrowReturnRecordDTO; +import com.agileboot.domain.shop.order.dto.BorrowReturnDynamicDTO; import com.agileboot.domain.shop.order.dto.ShopOrderExcelDTO; import com.agileboot.domain.shop.order.query.SearchBorrowReturnRecordQuery; +import com.agileboot.domain.shop.order.query.SearchBorrowReturnDynamicQuery; import com.agileboot.domain.shop.order.query.SearchShopOrderExcelQuery; import com.agileboot.domain.shop.order.query.SearchShopOrderQuery; import io.swagger.v3.oas.annotations.Operation; @@ -63,4 +65,12 @@ public class ShopOrderController extends BaseController { PageDTO page = orderApplicationService.getBorrowReturnRecordList(query); return ResponseDTO.ok(page); } + + @Operation(summary = "借还动态分页列表") + @GetMapping("/borrow-return-dynamic") + public ResponseDTO> getBorrowReturnDynamicList(SearchBorrowReturnDynamicQuery query) { + log.info("借还动态查询参数:{}", JSONUtil.toJsonStr(query)); + PageDTO page = orderApplicationService.getBorrowReturnDynamicList(query); + return ResponseDTO.ok(page); + } } diff --git a/agileboot-api/src/main/java/com/agileboot/api/controller/OrderController.java b/agileboot-api/src/main/java/com/agileboot/api/controller/OrderController.java index a7b786b..b4f3e26 100644 --- a/agileboot-api/src/main/java/com/agileboot/api/controller/OrderController.java +++ b/agileboot-api/src/main/java/com/agileboot/api/controller/OrderController.java @@ -2,6 +2,9 @@ package com.agileboot.api.controller; import cn.hutool.json.JSONUtil; import com.agileboot.common.config.WxshopConfig; +import com.agileboot.common.core.page.PageDTO; +import com.agileboot.domain.shop.order.dto.BorrowReturnDynamicDTO; +import com.agileboot.domain.shop.order.query.SearchBorrowReturnDynamicQuery; import org.springframework.beans.factory.annotation.Autowired; import com.agileboot.common.core.base.BaseController; import com.agileboot.common.exception.ApiException; @@ -141,4 +144,15 @@ public class OrderController extends BaseController { return ResponseDTO.fail(refundVO); } } + + /** + * 借还动态分页列表 + * @param query 借还动态查询参数 + * @return 包含借还动态列表的响应 + */ + @GetMapping("/borrow-return-dynamic") + public ResponseDTO> getBorrowReturnDynamicList(SearchBorrowReturnDynamicQuery query) { + PageDTO page = orderApplicationService.getBorrowReturnDynamicList(query); + return ResponseDTO.ok(page); + } } 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 08dc693..1228453 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 @@ -48,7 +48,9 @@ import com.agileboot.domain.shop.order.command.SubmitOrderCommand; import com.agileboot.domain.shop.order.db.*; import com.agileboot.domain.shop.order.db.dto.OrderWithGoodsDTO; import com.agileboot.domain.shop.order.dto.BorrowReturnRecordDTO; +import com.agileboot.domain.shop.order.dto.BorrowReturnDynamicDTO; import com.agileboot.domain.shop.order.query.SearchBorrowReturnRecordQuery; +import com.agileboot.domain.shop.order.query.SearchBorrowReturnDynamicQuery; import com.agileboot.domain.shop.order.dto.CreateOrderResult; import com.agileboot.domain.shop.order.dto.GetOrdersByOpenIdDTO; import com.agileboot.domain.shop.order.dto.TopGoodsDTO; @@ -124,6 +126,11 @@ public class OrderApplicationService { return new PageDTO<>(page.getRecords(), page.getTotal()); } + public PageDTO getBorrowReturnDynamicList(SearchBorrowReturnDynamicQuery query) { + Page page = orderService.getBorrowReturnDynamicList(query); + return new PageDTO<>(page.getRecords(), page.getTotal()); + } + public List list(SearchShopOrderExcelQuery query) { return orderService.list(query.toQueryWrapper()); } 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 eaa96a8..6e1b791 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 @@ -2,7 +2,9 @@ package com.agileboot.domain.shop.order.db; import com.agileboot.domain.shop.order.db.dto.OrderWithGoodsDTO; import com.agileboot.domain.shop.order.dto.BorrowReturnRecordDTO; +import com.agileboot.domain.shop.order.dto.BorrowReturnDynamicDTO; import com.agileboot.domain.shop.order.query.SearchBorrowReturnRecordQuery; +import com.agileboot.domain.shop.order.query.SearchBorrowReturnDynamicQuery; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.toolkit.Constants; @@ -53,6 +55,8 @@ public interface ShopOrderMapper extends BaseMapper { "cc.cell_no as cellNo, " + "sc.cabinet_id as cabinetId, " + "sc.cabinet_name as cabinetName, " + + "ra.create_time as returnTime, " + + "ra.approval_time as auditTime, " + "CASE " + " WHEN ra.approval_id IS NULL THEN 0 " + " WHEN ra.status IN (1, 4) THEN 1 " + @@ -72,6 +76,72 @@ public interface ShopOrderMapper extends BaseMapper { @Param(Constants.WRAPPER) Wrapper queryWrapper ); + @Select("") + Page getBorrowReturnDynamicList( + Page page, + @Param(Constants.WRAPPER) Wrapper queryWrapper + ); + @Select("SELECT COUNT(1) FROM shop_order WHERE deleted = 0") Long countAllRecord(); 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 e8220d5..539023d 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 @@ -2,7 +2,9 @@ package com.agileboot.domain.shop.order.db; import com.agileboot.domain.shop.order.db.dto.OrderWithGoodsDTO; import com.agileboot.domain.shop.order.dto.BorrowReturnRecordDTO; +import com.agileboot.domain.shop.order.dto.BorrowReturnDynamicDTO; import com.agileboot.domain.shop.order.query.SearchBorrowReturnRecordQuery; +import com.agileboot.domain.shop.order.query.SearchBorrowReturnDynamicQuery; import com.agileboot.domain.shop.order.query.SearchShopOrderQuery; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -23,6 +25,8 @@ public interface ShopOrderService extends IService { Page getBorrowReturnRecordList(SearchBorrowReturnRecordQuery query); + Page getBorrowReturnDynamicList(SearchBorrowReturnDynamicQuery query); + Long countAllRecord(); BigDecimal sumTotalAmount(); 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 5aa5435..3efb782 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 @@ -3,9 +3,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.dto.BorrowReturnRecordDTO; +import com.agileboot.domain.shop.order.dto.BorrowReturnDynamicDTO; import com.agileboot.domain.shop.order.model.OrderModel; import com.agileboot.domain.shop.order.query.SearchShopOrderQuery; import com.agileboot.domain.shop.order.query.SearchBorrowReturnRecordQuery; +import com.agileboot.domain.shop.order.query.SearchBorrowReturnDynamicQuery; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -33,6 +35,11 @@ public class ShopOrderServiceImpl extends ServiceImpl getBorrowReturnDynamicList(SearchBorrowReturnDynamicQuery query) { + return baseMapper.getBorrowReturnDynamicList(query.toPage(), query.toQueryWrapper()); + } + @Override public Long countAllRecord() { return baseMapper.countAllRecord(); diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/dto/BorrowReturnDynamicDTO.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/dto/BorrowReturnDynamicDTO.java new file mode 100644 index 0000000..ab9f1c1 --- /dev/null +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/dto/BorrowReturnDynamicDTO.java @@ -0,0 +1,101 @@ +package com.agileboot.domain.shop.order.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +public class BorrowReturnDynamicDTO { + + @ApiModelProperty("订单商品ID") + private Long orderGoodsId; + + @ApiModelProperty("动态类型(0-借出 1-归还)") + private Integer dynamicType; + + @ApiModelProperty("动态类型描述") + private String dynamicTypeStr; + + @ApiModelProperty("订单ID") + private Long orderId; + + @ApiModelProperty("订单创建时间/借出时间") + private Date orderTime; + + @ApiModelProperty("商品ID") + private Long goodsId; + + @ApiModelProperty("商品名称") + private String goodsName; + + @ApiModelProperty("商品单价") + private BigDecimal goodsPrice; + + @ApiModelProperty("数量") + private Integer quantity; + + @ApiModelProperty("支付方式") + private String paymentMethod; + + @ApiModelProperty("订单姓名") + private String orderName; + + @ApiModelProperty("订单手机号") + private String orderMobile; + + @ApiModelProperty("格口ID") + private Long cellId; + + @ApiModelProperty("格口号") + private Integer cellNo; + + @ApiModelProperty("柜机ID") + private Long cabinetId; + + @ApiModelProperty("柜机名称") + private String cabinetName; + + @ApiModelProperty("归还/审批时间(归还记录时有效)") + private Date operateTime; + + @ApiModelProperty("审批ID(归还记录时有效)") + private Long approvalId; + + @ApiModelProperty("审批状态(归还记录时有效,0-未退还 1-待审批 2-已通过 3-已驳回 4-开柜中)") + private Integer status; + + @ApiModelProperty("状态描述") + private String statusStr; + + @ApiModelProperty("审批人(归还记录时有效)") + private String auditName; + + @ApiModelProperty("审核说明(归还记录时有效)") + private String auditRemark; + + @ApiModelProperty("归还图片(归还记录时有效)") + private String images; + + public String getDynamicTypeStr() { + if (dynamicType == null) return "-"; + switch (dynamicType) { + case 0: return "借出"; + case 1: return "归还"; + default: return "未知"; + } + } + + public String getStatusStr() { + if (status == null) return "-"; + switch (status) { + case 0: return "未退还"; + case 1: return "待审批"; + case 2: return "已通过"; + case 3: return "已驳回"; + case 4: return "开柜中"; + default: return "未知状态"; + } + } +} diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/dto/BorrowReturnRecordDTO.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/dto/BorrowReturnRecordDTO.java index 7ad6467..fcdb2cb 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/dto/BorrowReturnRecordDTO.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/dto/BorrowReturnRecordDTO.java @@ -63,6 +63,12 @@ public class BorrowReturnRecordDTO { @ApiModelProperty("柜机名称") private String cabinetName; + @ApiModelProperty("归还时间") + private Date returnTime; + + @ApiModelProperty("审批时间") + private Date auditTime; + public String getStatusStr() { if (status == null) return "-"; switch (status) { diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/query/SearchBorrowReturnDynamicQuery.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/query/SearchBorrowReturnDynamicQuery.java new file mode 100644 index 0000000..08d18c4 --- /dev/null +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/query/SearchBorrowReturnDynamicQuery.java @@ -0,0 +1,62 @@ +package com.agileboot.domain.shop.order.query; + +import cn.hutool.core.util.StrUtil; +import com.agileboot.common.core.page.AbstractPageQuery; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class SearchBorrowReturnDynamicQuery extends AbstractPageQuery { + + private Long goodsId; + private Integer status; + private Integer dynamicType; // 动态类型:0-借出 1-归还 + + @Override + public QueryWrapper addQueryCondition() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + + if (dynamicType != null) { + queryWrapper.eq("dynamic_type", dynamicType); + } + + if (status == null && dynamicType != null && dynamicType == 1) { + // 如果查询归还记录且未指定状态,默认查询待审批、已通过、已驳回 + status = -1; + } + + // 状态筛选只对归还记录有效 + if (dynamicType == null || dynamicType == 1) { + if (status == null) { + status = -1; + } + if (status == 0) { + // 未退还:已支付但没有审批记录的订单商品 + queryWrapper.isNull("ra.approval_id"); + } else if (status == 1) { + // 待审批:有审批记录且状态为1(待审核)或4(开柜中)的订单 + queryWrapper.and(wrapper -> wrapper.eq("ra.status", 1) + .or() + .eq("ra.status", 4)); + } else if (status == 2) { + // 已通过:状态为2(已通过)的审批记录 + queryWrapper.eq("ra.status", 2); + } else if (status == 3) { + // 已驳回:状态为3(已驳回)的审批记录 + queryWrapper.eq("ra.status", 3); + } + } + + if (goodsId != null) { + queryWrapper.eq("sog.goods_id", goodsId); + } + + queryWrapper.eq("so.deleted", 0) + .eq("sog.deleted", 0) + .eq("so.pay_status", 2); + + return queryWrapper; + } +}