From 980d279ba9a8ab6f7516c1b0f9a3c9c2a521c075 Mon Sep 17 00:00:00 2001 From: dzq Date: Wed, 9 Apr 2025 10:16:27 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E5=AE=A1=E6=89=B9):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=B8=A6=E5=95=86=E5=93=81=E4=BF=A1=E6=81=AF=E7=9A=84=E5=AE=A1?= =?UTF-8?q?=E6=89=B9=E5=88=97=E8=A1=A8=E6=9F=A5=E8=AF=A2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 为了在审批列表中展示商品名称和封面图,新增了`selectApprovalWithGoodsInfo`方法,并在相关实体类中添加了`goodsName`和`coverImg`字段。同时,更新了数据库表结构和查询逻辑,确保审批列表能正确返回商品信息。 --- .../api/controller/ApprovalApiController.java | 16 +++++--- .../ReturnApprovalApplicationService.java | 8 +++- .../approval/db/ReturnApprovalEntity.java | 8 ++++ .../approval/db/ReturnApprovalMapper.java | 8 ++++ .../approval/db/ReturnApprovalService.java | 2 + .../db/ReturnApprovalServiceImpl.java | 5 +++ .../query/SearchApiReturnApprovalQuery.java | 40 +++++++++++++++++++ .../shop/order/db/ShopOrderGoodsEntity.java | 8 ++++ .../shop/order/model/OrderGoodsModel.java | 2 + sql/20250328_return_approval.sql | 11 ++++- 10 files changed, 101 insertions(+), 7 deletions(-) create mode 100644 agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/query/SearchApiReturnApprovalQuery.java diff --git a/agileboot-api/src/main/java/com/agileboot/api/controller/ApprovalApiController.java b/agileboot-api/src/main/java/com/agileboot/api/controller/ApprovalApiController.java index 95ce59c..57ca528 100644 --- a/agileboot-api/src/main/java/com/agileboot/api/controller/ApprovalApiController.java +++ b/agileboot-api/src/main/java/com/agileboot/api/controller/ApprovalApiController.java @@ -1,12 +1,15 @@ package com.agileboot.api.controller; import com.agileboot.common.core.dto.ResponseDTO; +import com.agileboot.common.core.page.PageDTO; import com.agileboot.common.exception.ApiException; import com.agileboot.common.exception.error.ErrorCode; import com.agileboot.domain.shop.approval.ReturnApprovalApplicationService; import com.agileboot.domain.shop.approval.command.AddReturnApprovalCommand; import com.agileboot.domain.shop.approval.db.ReturnApprovalEntity; import com.agileboot.domain.shop.approval.model.ReturnApprovalModel; +import com.agileboot.domain.shop.approval.query.SearchApiReturnApprovalQuery; +import com.agileboot.domain.shop.approval.query.SearchReturnApprovalQuery; import com.agileboot.domain.shop.order.OrderApplicationService; import com.agileboot.domain.shop.order.db.ShopOrderGoodsEntity; @@ -14,12 +17,8 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.*; import org.apache.commons.lang3.StringUtils; -import org.springframework.web.bind.annotation.CrossOrigin; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; import java.util.Date; @@ -74,4 +73,11 @@ public class ApprovalApiController { ReturnApprovalEntity returnApproval = approvalApplicationService.submitApproval(command, orderGoods); return ResponseDTO.ok(returnApproval); } + + @GetMapping("/list") + @ApiOperation(value = "审批列表") + public ResponseDTO> list(SearchApiReturnApprovalQuery query) { + PageDTO page = approvalApplicationService.getApprovalWithGoodsInfo(query); + return ResponseDTO.ok(page); + } } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/ReturnApprovalApplicationService.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/ReturnApprovalApplicationService.java index 43a0c90..9090fc2 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/ReturnApprovalApplicationService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/ReturnApprovalApplicationService.java @@ -9,6 +9,7 @@ import com.agileboot.domain.shop.approval.db.ReturnApprovalService; import com.agileboot.domain.shop.approval.dto.ReturnApprovalDTO; import com.agileboot.domain.shop.approval.model.ReturnApprovalModel; import com.agileboot.domain.shop.approval.model.ReturnApprovalModelFactory; +import com.agileboot.domain.shop.approval.query.SearchApiReturnApprovalQuery; import com.agileboot.domain.shop.approval.query.SearchReturnApprovalQuery; import com.agileboot.domain.shop.order.db.ShopOrderGoodsEntity; import com.agileboot.domain.shop.order.model.OrderGoodsModel; @@ -63,7 +64,7 @@ public class ReturnApprovalApplicationService { // 设置商品价格并初始化审批状态 command.setGoodsId(orderGoods.getGoodsId()); command.setOrderId(orderGoods.getOrderId()); - command.setGoodsPrice(orderGoods.getPrice()); + command.setGoodsPrice(orderGoods.getTotalAmount()); command.setReturnImages(command.getReturnImages()); command.setReturnRemark(command.getReturnRemark()); command.setStatus(1); @@ -83,4 +84,9 @@ public class ReturnApprovalApplicationService { return returnApprovalModel.selectById(); } + + public PageDTO getApprovalWithGoodsInfo(SearchApiReturnApprovalQuery query) { + Page page = approvalService.selectApprovalWithGoodsInfo(query); + return new PageDTO<>(page.getRecords(), page.getTotal()); + } } \ No newline at end of file diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/db/ReturnApprovalEntity.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/db/ReturnApprovalEntity.java index 34c128d..ad32352 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/db/ReturnApprovalEntity.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/db/ReturnApprovalEntity.java @@ -76,6 +76,14 @@ public class ReturnApprovalEntity extends BaseEntity { @TableField("`status`") private Integer status; + @ApiModelProperty("商品名称") + @TableField(exist = false) + private String goodsName; + + @ApiModelProperty("封面图URL") + @TableField(exist = false) + private String coverImg; + @Override public Serializable pkVal() { diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/db/ReturnApprovalMapper.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/db/ReturnApprovalMapper.java index c318e3b..a80753b 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/db/ReturnApprovalMapper.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/db/ReturnApprovalMapper.java @@ -17,6 +17,14 @@ import org.apache.ibatis.annotations.Select; * @since 2025-04-03 */ public interface ReturnApprovalMapper extends BaseMapper { + + @Select("SELECT ra.*, sog.goods_name AS goodsName, sog.cover_img AS coverImg " + + "FROM return_approval ra " + + "LEFT JOIN shop_order_goods sog ON ra.order_goods_id = sog.order_goods_id" + + "${ew.customSqlSegment}") + Page selectApprovalWithGoodsInfo(Page page, + @Param(Constants.WRAPPER) Wrapper queryWrapper); + @Select("SELECT * " + "FROM return_approval " + "${ew.customSqlSegment}") diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/db/ReturnApprovalService.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/db/ReturnApprovalService.java index 1212987..255e750 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/db/ReturnApprovalService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/db/ReturnApprovalService.java @@ -21,4 +21,6 @@ public interface ReturnApprovalService extends IService { List selectAll(); ReturnApprovalEntity getByOrderId(Long orderId); + + Page selectApprovalWithGoodsInfo(AbstractPageQuery query); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/db/ReturnApprovalServiceImpl.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/db/ReturnApprovalServiceImpl.java index 47b0411..dba29a6 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/db/ReturnApprovalServiceImpl.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/db/ReturnApprovalServiceImpl.java @@ -38,4 +38,9 @@ public class ReturnApprovalServiceImpl extends ServiceImpl selectApprovalWithGoodsInfo(AbstractPageQuery query) { + return this.baseMapper.selectApprovalWithGoodsInfo(query.toPage(), query.toQueryWrapper()); + } } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/query/SearchApiReturnApprovalQuery.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/query/SearchApiReturnApprovalQuery.java new file mode 100644 index 0000000..f8cb27a --- /dev/null +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/query/SearchApiReturnApprovalQuery.java @@ -0,0 +1,40 @@ +package com.agileboot.domain.shop.approval.query; + +import cn.hutool.core.util.StrUtil; +import com.agileboot.common.core.page.AbstractPageQuery; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import java.util.Date; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class SearchApiReturnApprovalQuery extends AbstractPageQuery { + + private Long approvalId; + private Long orderId; + private Long goodsId; + private String goodsName; + private Integer status; + private String returnRemark; + private String auditRemark; + private Date startTime; + private Date endTime; + + @Override + public QueryWrapper addQueryCondition() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + + queryWrapper + .eq(approvalId != null, "ra.approval_id", approvalId) + .eq(orderId != null, "ra.order_id", orderId) + .eq(goodsId != null, "ra.goods_id", goodsId) + .eq(status != null, "ra.status", status) + .like(StrUtil.isNotEmpty(goodsName), "sog.goods_name", goodsName) + .between(startTime != null && endTime != null, "ra.create_time", startTime, endTime); + + this.timeRangeColumn = "create_time"; + + return queryWrapper; + } +} \ No newline at end of file diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsEntity.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsEntity.java index 6a8d2c8..b580afd 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsEntity.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsEntity.java @@ -52,6 +52,14 @@ public class ShopOrderGoodsEntity extends BaseEntity { @TableField("total_amount") private BigDecimal totalAmount; + @ApiModelProperty("商品名称") + @TableField("goods_name") + private String goodsName; + + @ApiModelProperty("封面图URL") + @TableField("cover_img") + private String coverImg; + @ApiModelProperty("商品状态(1正常 2已退货 3已换货 4已完成 5审核中 6退货未通过)") @TableField("`status`") private Integer status; diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/model/OrderGoodsModel.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/model/OrderGoodsModel.java index 83d3f86..d264fec 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/model/OrderGoodsModel.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/model/OrderGoodsModel.java @@ -35,6 +35,8 @@ public class OrderGoodsModel extends ShopOrderGoodsEntity { ShopGoodsEntity goods = goodsService.getById(getGoodsId()); if (goods != null) { BigDecimal price = goods.getPrice(); + this.setGoodsName(goods.getGoodsName()); + this.setCoverImg(goods.getCoverImg()); this.setPrice(price); this.setTotalAmount(price.multiply(BigDecimal.valueOf(getQuantity()))); } diff --git a/sql/20250328_return_approval.sql b/sql/20250328_return_approval.sql index 3241163..83ed210 100644 --- a/sql/20250328_return_approval.sql +++ b/sql/20250328_return_approval.sql @@ -49,4 +49,13 @@ ALTER TABLE `return_approval` ADD CONSTRAINT `fk_return_order_goods` FOREIGN KEY (`order_goods_id`) REFERENCES `shop_order_goods` (`order_goods_id`); ALTER TABLE `shop_order` -ADD COLUMN `biz_order_id` VARCHAR(32) NULL COMMENT '业务系统订单ID(对接外部系统)' AFTER `trade_id`; \ No newline at end of file +ADD COLUMN `biz_order_id` VARCHAR(32) NULL COMMENT '业务系统订单ID(对接外部系统)' AFTER `trade_id`; + +ALTER TABLE shop_order_goods +ADD COLUMN goods_name VARCHAR(255) NOT NULL COMMENT '商品名称', +ADD COLUMN cover_img VARCHAR(512) COMMENT '封面图URL'; + +UPDATE shop_order_goods sog +INNER JOIN shop_goods sg ON sog.goods_id = sg.goods_id +SET sog.goods_name = sg.goods_name, + sog.cover_img = sg.cover_img; \ No newline at end of file