feat(审批): 添加带商品信息的审批列表查询功能
为了在审批列表中展示商品名称和封面图,新增了`selectApprovalWithGoodsInfo`方法,并在相关实体类中添加了`goodsName`和`coverImg`字段。同时,更新了数据库表结构和查询逻辑,确保审批列表能正确返回商品信息。
This commit is contained in:
parent
6f2eaf92a8
commit
980d279ba9
|
@ -1,12 +1,15 @@
|
||||||
package com.agileboot.api.controller;
|
package com.agileboot.api.controller;
|
||||||
|
|
||||||
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.exception.ApiException;
|
import com.agileboot.common.exception.ApiException;
|
||||||
import com.agileboot.common.exception.error.ErrorCode;
|
import com.agileboot.common.exception.error.ErrorCode;
|
||||||
import com.agileboot.domain.shop.approval.ReturnApprovalApplicationService;
|
import com.agileboot.domain.shop.approval.ReturnApprovalApplicationService;
|
||||||
import com.agileboot.domain.shop.approval.command.AddReturnApprovalCommand;
|
import com.agileboot.domain.shop.approval.command.AddReturnApprovalCommand;
|
||||||
import com.agileboot.domain.shop.approval.db.ReturnApprovalEntity;
|
import com.agileboot.domain.shop.approval.db.ReturnApprovalEntity;
|
||||||
import com.agileboot.domain.shop.approval.model.ReturnApprovalModel;
|
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.OrderApplicationService;
|
||||||
import com.agileboot.domain.shop.order.db.ShopOrderGoodsEntity;
|
import com.agileboot.domain.shop.order.db.ShopOrderGoodsEntity;
|
||||||
|
|
||||||
|
@ -14,12 +17,8 @@ import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
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 javax.validation.Valid;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
@ -74,4 +73,11 @@ public class ApprovalApiController {
|
||||||
ReturnApprovalEntity returnApproval = approvalApplicationService.submitApproval(command, orderGoods);
|
ReturnApprovalEntity returnApproval = approvalApplicationService.submitApproval(command, orderGoods);
|
||||||
return ResponseDTO.ok(returnApproval);
|
return ResponseDTO.ok(returnApproval);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/list")
|
||||||
|
@ApiOperation(value = "审批列表")
|
||||||
|
public ResponseDTO<PageDTO<ReturnApprovalEntity>> list(SearchApiReturnApprovalQuery<ReturnApprovalEntity> query) {
|
||||||
|
PageDTO<ReturnApprovalEntity> page = approvalApplicationService.getApprovalWithGoodsInfo(query);
|
||||||
|
return ResponseDTO.ok(page);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.dto.ReturnApprovalDTO;
|
||||||
import com.agileboot.domain.shop.approval.model.ReturnApprovalModel;
|
import com.agileboot.domain.shop.approval.model.ReturnApprovalModel;
|
||||||
import com.agileboot.domain.shop.approval.model.ReturnApprovalModelFactory;
|
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.approval.query.SearchReturnApprovalQuery;
|
||||||
import com.agileboot.domain.shop.order.db.ShopOrderGoodsEntity;
|
import com.agileboot.domain.shop.order.db.ShopOrderGoodsEntity;
|
||||||
import com.agileboot.domain.shop.order.model.OrderGoodsModel;
|
import com.agileboot.domain.shop.order.model.OrderGoodsModel;
|
||||||
|
@ -63,7 +64,7 @@ public class ReturnApprovalApplicationService {
|
||||||
// 设置商品价格并初始化审批状态
|
// 设置商品价格并初始化审批状态
|
||||||
command.setGoodsId(orderGoods.getGoodsId());
|
command.setGoodsId(orderGoods.getGoodsId());
|
||||||
command.setOrderId(orderGoods.getOrderId());
|
command.setOrderId(orderGoods.getOrderId());
|
||||||
command.setGoodsPrice(orderGoods.getPrice());
|
command.setGoodsPrice(orderGoods.getTotalAmount());
|
||||||
command.setReturnImages(command.getReturnImages());
|
command.setReturnImages(command.getReturnImages());
|
||||||
command.setReturnRemark(command.getReturnRemark());
|
command.setReturnRemark(command.getReturnRemark());
|
||||||
command.setStatus(1);
|
command.setStatus(1);
|
||||||
|
@ -83,4 +84,9 @@ public class ReturnApprovalApplicationService {
|
||||||
|
|
||||||
return returnApprovalModel.selectById();
|
return returnApprovalModel.selectById();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PageDTO<ReturnApprovalEntity> getApprovalWithGoodsInfo(SearchApiReturnApprovalQuery<ReturnApprovalEntity> query) {
|
||||||
|
Page<ReturnApprovalEntity> page = approvalService.selectApprovalWithGoodsInfo(query);
|
||||||
|
return new PageDTO<>(page.getRecords(), page.getTotal());
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -76,6 +76,14 @@ public class ReturnApprovalEntity extends BaseEntity<ReturnApprovalEntity> {
|
||||||
@TableField("`status`")
|
@TableField("`status`")
|
||||||
private Integer status;
|
private Integer status;
|
||||||
|
|
||||||
|
@ApiModelProperty("商品名称")
|
||||||
|
@TableField(exist = false)
|
||||||
|
private String goodsName;
|
||||||
|
|
||||||
|
@ApiModelProperty("封面图URL")
|
||||||
|
@TableField(exist = false)
|
||||||
|
private String coverImg;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Serializable pkVal() {
|
public Serializable pkVal() {
|
||||||
|
|
|
@ -17,6 +17,14 @@ import org.apache.ibatis.annotations.Select;
|
||||||
* @since 2025-04-03
|
* @since 2025-04-03
|
||||||
*/
|
*/
|
||||||
public interface ReturnApprovalMapper extends BaseMapper<ReturnApprovalEntity> {
|
public interface ReturnApprovalMapper extends BaseMapper<ReturnApprovalEntity> {
|
||||||
|
|
||||||
|
@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<ReturnApprovalEntity> selectApprovalWithGoodsInfo(Page<ReturnApprovalEntity> page,
|
||||||
|
@Param(Constants.WRAPPER) Wrapper<ReturnApprovalEntity> queryWrapper);
|
||||||
|
|
||||||
@Select("SELECT * " +
|
@Select("SELECT * " +
|
||||||
"FROM return_approval " +
|
"FROM return_approval " +
|
||||||
"${ew.customSqlSegment}")
|
"${ew.customSqlSegment}")
|
||||||
|
|
|
@ -21,4 +21,6 @@ public interface ReturnApprovalService extends IService<ReturnApprovalEntity> {
|
||||||
List<ReturnApprovalEntity> selectAll();
|
List<ReturnApprovalEntity> selectAll();
|
||||||
|
|
||||||
ReturnApprovalEntity getByOrderId(Long orderId);
|
ReturnApprovalEntity getByOrderId(Long orderId);
|
||||||
|
|
||||||
|
Page<ReturnApprovalEntity> selectApprovalWithGoodsInfo(AbstractPageQuery<ReturnApprovalEntity> query);
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,4 +38,9 @@ public class ReturnApprovalServiceImpl extends ServiceImpl<ReturnApprovalMapper,
|
||||||
.last("LIMIT 1");
|
.last("LIMIT 1");
|
||||||
return this.getOne(wrapper);
|
return this.getOne(wrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Page<ReturnApprovalEntity> selectApprovalWithGoodsInfo(AbstractPageQuery<ReturnApprovalEntity> query) {
|
||||||
|
return this.baseMapper.selectApprovalWithGoodsInfo(query.toPage(), query.toQueryWrapper());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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<T> extends AbstractPageQuery<T> {
|
||||||
|
|
||||||
|
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<T> addQueryCondition() {
|
||||||
|
QueryWrapper<T> 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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -52,6 +52,14 @@ public class ShopOrderGoodsEntity extends BaseEntity<ShopOrderGoodsEntity> {
|
||||||
@TableField("total_amount")
|
@TableField("total_amount")
|
||||||
private BigDecimal totalAmount;
|
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退货未通过)")
|
@ApiModelProperty("商品状态(1正常 2已退货 3已换货 4已完成 5审核中 6退货未通过)")
|
||||||
@TableField("`status`")
|
@TableField("`status`")
|
||||||
private Integer status;
|
private Integer status;
|
||||||
|
|
|
@ -35,6 +35,8 @@ public class OrderGoodsModel extends ShopOrderGoodsEntity {
|
||||||
ShopGoodsEntity goods = goodsService.getById(getGoodsId());
|
ShopGoodsEntity goods = goodsService.getById(getGoodsId());
|
||||||
if (goods != null) {
|
if (goods != null) {
|
||||||
BigDecimal price = goods.getPrice();
|
BigDecimal price = goods.getPrice();
|
||||||
|
this.setGoodsName(goods.getGoodsName());
|
||||||
|
this.setCoverImg(goods.getCoverImg());
|
||||||
this.setPrice(price);
|
this.setPrice(price);
|
||||||
this.setTotalAmount(price.multiply(BigDecimal.valueOf(getQuantity())));
|
this.setTotalAmount(price.multiply(BigDecimal.valueOf(getQuantity())));
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,3 +50,12 @@ ALTER TABLE `return_approval`
|
||||||
|
|
||||||
ALTER TABLE `shop_order`
|
ALTER TABLE `shop_order`
|
||||||
ADD COLUMN `biz_order_id` VARCHAR(32) NULL COMMENT '业务系统订单ID(对接外部系统)' AFTER `trade_id`;
|
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;
|
Loading…
Reference in New Issue