فهرست منبع

售后订单详情处理

fubojin 3 روز پیش
والد
کامیت
616e8eed5c

+ 1 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/model/OrderRefund.java

@@ -173,6 +173,7 @@ public class OrderRefund implements Serializable{
     //过期的积分
     private Long refundExpiredScore;
 
+
     @TableField(exist = false)
     @ApiModelProperty(value = "退款商品详情")
     private List<OrderRefundSku> orderRefundSkuList;

+ 3 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/model/OrderRefundSku.java

@@ -7,6 +7,7 @@
 
 package com.yami.shop.bean.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
@@ -54,4 +55,6 @@ public class OrderRefundSku implements Serializable{
      */
     private Long orderItemId;
 
+
+
 }

+ 2 - 5
yami-shop-bean/src/main/java/com/yami/shop/bean/param/OrderRefundCountParam.java

@@ -31,15 +31,12 @@ public class OrderRefundCountParam {
     @ApiModelProperty("撤回申请(40)")
     private Integer withdrawApplyCount;
 
-    @ApiModelProperty("卖家接受(60)")
+    @ApiModelProperty("买家发货(60)")
     private Integer sellerAcceptCount;
 
-    @ApiModelProperty("买家发货(65)")
+    @ApiModelProperty("卖家收货(65)")
     private Integer buyerDeliveryCount;
 
-    @ApiModelProperty("配送中数量(40)")
-    private Integer shippingCount;
-
     @ApiModelProperty("退款完成(70)")
     private Integer refundCompleteCount;
 

+ 80 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/vo/OrderRefundSkuVo.java

@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2018-2999 广州亚米信息科技有限公司 All rights reserved.
+ *
+ * https://www.gz-yami.com/
+ *
+ */
+
+package com.yami.shop.bean.vo;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.yami.shop.bean.model.OrderItem;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *
+ *
+ * @author fbj
+ * @date 2025-10-30 09:55:01
+ */
+@Data
+public class OrderRefundSkuVo implements Serializable{
+
+    /**
+     * 记录ID
+     */
+    private Long id;
+
+    /**
+     * 退款商品ID
+     */
+    private Long skuId;
+
+    /**
+     * 退款商品数量
+     */
+    private Integer productCount;
+
+    /**
+     * 退款单ID
+     */
+    private Long orderRefundId;
+
+    /**
+     * 商品单价
+     */
+    private Double skuPrice;
+
+    /**
+     * 订单项id
+     */
+    private Long orderItemId;
+
+
+    /**
+     * 商品规格
+     */
+    private String spec;
+
+    /**
+     * 商品sku名称
+     */
+    private String skuName;
+    /**
+     * 商品spu名称
+     */
+    private String prodName;
+    /**
+     * 商品图片
+     */
+    private String pic;
+
+    /**
+     * 订单项
+     */
+    private OrderItem orderItem;
+
+}

+ 201 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/vo/OrderRefundVo.java

@@ -0,0 +1,201 @@
+/*
+ * Copyright (c) 2018-2999 广州亚米信息科技有限公司 All rights reserved.
+ *
+ * https://www.gz-yami.com/
+ *
+ */
+
+package com.yami.shop.bean.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ *
+ *
+ * @author LGH
+ * @date 2019-08-20 09:55:01
+ */
+@Data
+public class OrderRefundVo implements Serializable{
+
+    /**
+     * 记录ID
+     */
+    private Long refundId;
+    /**
+     * 退款编号
+     */
+    private String refundSn;
+    /**
+     * 店铺ID
+     */
+    private Long shopId;
+    /**
+     * 店铺名称
+     */
+    private String shopName;
+    /**
+     * 买家ID
+     */
+    private String userId;
+    /**
+     * 订单ID
+     */
+    private Long orderId;
+    /**
+     * 订单编号
+     */
+    private String orderNumber;
+
+    /**
+     * 退款单类型(1:整单退款,2:单个物品退款)
+     */
+    private Integer refundType;
+    /**
+     * 订单项ID
+     */
+    private Long orderItemId;
+    /**
+     * 退货数量(0:为全部订单项)
+     */
+    private Integer goodsNum;
+    /**
+     * 退款金额
+     */
+    private Double refundAmount;
+    /**
+     * 退还积分
+     */
+    private Integer refundScore;
+    /**
+     * 申请类型:1,仅退款,2退款退货,5差价退款
+     */
+    private Integer applyType;
+    /**
+     * 是否接收到商品(1:已收到,0:未收到)
+     */
+    private Boolean isReceiver;
+
+    /**
+     * 是否填写了退货物流信息(1:已填写,0:未填写)
+     */
+    private Boolean isReturnLogistics;
+
+    /**
+     * 申请原因
+     */
+    private String buyerReason;
+    /**
+     * 申请说明
+     */
+    private String buyerDesc;
+    /**
+     * 联系方式
+     */
+    private String buyerMobile;
+    /**
+     * 文件凭证json
+     */
+    private String photoFiles;
+    /**
+     * 退款单状态 10:待审核 20:处理中 30:驳回退款 40:撤销退款 60:待退货(一审同意) 65:待确认收货(二审待审核) 70:退款完成
+     */
+    private Integer returnMoneySts;
+    /**
+     * 拒绝原因
+     */
+    private String rejectMessage;
+    /**
+     * 卖家备注
+     */
+    private String sellerMsg;
+    /**
+     * 申请时间
+     */
+    private Date applyTime;
+    /**
+     * 受理时间
+     */
+    private Date handelTime;
+    /**
+     * 发货时间
+     */
+    private Date shipTime;
+    /**
+     * 收货时间
+     */
+    private Date receiveTime;
+    /**
+     * 撤销时间
+     */
+    private Date cancelTime;
+    /**
+     * 退款时间
+     */
+    private Date refundTime;
+    /**
+     * 同意退款时间
+     */
+    private Date decisionTime;
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+    /**
+     * 拒绝时间
+     */
+    private Date rejectTime;
+
+    /**
+     * 退款单总分销金额
+     */
+    private Double distributionTotalAmount = 0.0;
+
+    /**
+     * 平台退款金额(退款时将这部分钱退回给平台,所以商家要扣除从平台这里获取的金额)
+     */
+    private Double platformRefundAmount = 0.0;
+
+    /**
+     * 运费金额
+     */
+    private Double freightAmount;
+
+    /**
+     * 是否处理
+     */
+    private Boolean handler;
+
+    /**
+     * 积分
+     */
+    private Long offsetPoints;
+    /**
+     * 过期的积分
+     */
+    private Long refundExpiredScore;
+
+    /**
+     * 实际支付金额
+     */
+    private Double actualTotal;
+
+    /**
+     * 下单订单商品总数量
+     */
+    private Integer productNums;
+
+    /**
+     * 订单状态
+     */
+    private Integer hbOrderStatus;
+
+    @ApiModelProperty(value = "退款商品详情")
+    private List<OrderRefundSkuVo> orderRefundSkuList;
+
+}

+ 28 - 4
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/OrderRefundController.java

@@ -4,12 +4,17 @@ package com.yami.shop.platform.controller;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.binarywang.wxpay.service.WxPayService;
+import com.yami.shop.bean.app.dto.ApiOrderRefundDto;
 import com.yami.shop.bean.dto.OrderRefundDto;
+import com.yami.shop.bean.model.OrderItem;
 import com.yami.shop.bean.model.OrderRefund;
 import com.yami.shop.bean.model.OrderRefundSku;
 import com.yami.shop.bean.param.OrderRefundCountParam;
 import com.yami.shop.bean.param.OrderRefundStaisticsParam;
+import com.yami.shop.bean.vo.OrderRefundSkuVo;
+import com.yami.shop.bean.vo.OrderRefundVo;
 import com.yami.shop.common.util.PageParam;
+import com.yami.shop.dao.OrderItemMapper;
 import com.yami.shop.dao.OrderRefundSkuMapper;
 import com.yami.shop.service.OrderRefundService;
 import io.swagger.annotations.Api;
@@ -20,6 +25,8 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 import com.yami.shop.common.util.R;
 
+import java.util.List;
+
 /**
  * 订单退款管理实现
  *
@@ -35,6 +42,7 @@ public class OrderRefundController {
 
     private final OrderRefundService orderRefundService;
     private final OrderRefundSkuMapper orderRefundskuMapper;
+    private final OrderItemMapper orderItemMapper;
 
     /**
      * 分页查询
@@ -64,15 +72,30 @@ public class OrderRefundController {
         return R.SUCCESS(orderRefund);
     }
 
+    /**
+     * 通过ID查询详情
+     */
+    @GetMapping("/orderRefundInfo/{refundId}")
+    @ApiOperation(value = "查看退款订单详情", notes = "查看退款订单详情")
+    public R<OrderRefundVo> orderRefundInfo(@PathVariable("refundId") Long refundId) {
+        OrderRefundVo orderRefundVo = orderRefundService.selectInfoById(refundId);
+        List<OrderRefundSkuVo> orderRefundSkuVos = orderRefundskuMapper.selectByRefundId(refundId);
+        orderRefundSkuVos.forEach(c -> c.setOrderItem(orderItemMapper.selectById(c.getOrderItemId())));
+        orderRefundVo.setOrderRefundSkuList(orderRefundSkuVos);
+        return R.SUCCESS(orderRefundVo);
+    }
+
     /**
      * 后管端分页获取退款订单列表
      */
     @ApiOperation("后台分页获取退款订单列表")
     @GetMapping("/orderRefundPage")
-    public R<IPage<OrderRefund>> orderRefundPage(PageParam<OrderRefund> page, OrderRefundStaisticsParam orderRefund) {
-        IPage<OrderRefund> page1 = orderRefundService.orderRefundPage(page, orderRefund);
-        page1.getRecords().forEach(c -> c.setOrderRefundSkuList(orderRefundskuMapper.selectList(new LambdaQueryWrapper<OrderRefundSku>()
-        .eq(OrderRefundSku::getOrderRefundId, c.getRefundId()))));
+    public R<IPage<OrderRefundVo>> orderRefundPage(PageParam<OrderRefund> page, OrderRefundStaisticsParam orderRefund) {
+        IPage<OrderRefundVo> page1 = orderRefundService.orderRefundPage(page, orderRefund);
+        for (OrderRefundVo record : page1.getRecords()) {
+            record.setOrderRefundSkuList(orderRefundskuMapper.selectByRefundId(record.getRefundId()));
+
+        }
         return R.SUCCESS(page1);
     }
 
@@ -84,4 +107,5 @@ public class OrderRefundController {
     public R<OrderRefundCountParam> orderRefundCount(OrderRefundStaisticsParam orderRefund) {
         return R.SUCCESS(orderRefundService.orderRefundCount(orderRefund));
     }
+
 }

+ 10 - 2
yami-shop-service/src/main/java/com/yami/shop/dao/OrderRefundMapper.java

@@ -21,6 +21,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.yami.shop.bean.param.OrderRefundCountParam;
 import com.yami.shop.bean.param.OrderRefundStaisticsParam;
 import com.yami.shop.bean.param.StatisticsRefundParam;
+import com.yami.shop.bean.vo.OrderRefundVo;
 import com.yami.shop.common.util.PageParam;
 import org.apache.ibatis.annotations.Param;
 
@@ -87,7 +88,7 @@ public interface OrderRefundMapper extends BaseMapper<OrderRefund> {
     /**
      * 获取退款订单统计数量
      */
-    OrderRefundCountParam orderRefundCount(OrderRefundStaisticsParam orderRefund);
+    OrderRefundCountParam orderRefundCount(@Param("orderRefund") OrderRefundStaisticsParam orderRefund);
 
     /**
      * 获取退款订单统计
@@ -95,5 +96,12 @@ public interface OrderRefundMapper extends BaseMapper<OrderRefund> {
      * @param orderRefund 订单退款参数
      * @return 订单退款分页
      */
-    IPage<OrderRefund> orderRefundPage(@Param("page") PageParam<OrderRefund> page, @Param("orderRefund") OrderRefundStaisticsParam orderRefund);
+    IPage<OrderRefundVo> orderRefundPage(@Param("page") PageParam<OrderRefund> page, @Param("orderRefund") OrderRefundStaisticsParam orderRefund);
+
+    /**
+     * 获取退款订单详情
+     * @param refundId 订单退款id
+     * @return 订单退款详情
+     */
+    OrderRefundVo selectInfoById(Long refundId);
 }

+ 2 - 7
yami-shop-service/src/main/java/com/yami/shop/dao/OrderRefundSkuMapper.java

@@ -11,17 +11,12 @@
 package com.yami.shop.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.yami.shop.bean.dto.OrderRefundDto;
-import com.yami.shop.bean.model.OrderRefund;
 import com.yami.shop.bean.model.OrderRefundSku;
-import com.yami.shop.bean.param.StatisticsRefundParam;
-import org.apache.ibatis.annotations.Param;
+import com.yami.shop.bean.vo.OrderRefundSkuVo;
 
-import java.util.Date;
 import java.util.List;
 
 public interface OrderRefundSkuMapper extends BaseMapper<OrderRefundSku> {
 
+    List<OrderRefundSkuVo> selectByRefundId(Long refundId);
 }

+ 8 - 1
yami-shop-service/src/main/java/com/yami/shop/service/OrderRefundService.java

@@ -13,6 +13,7 @@ import com.yami.shop.bean.param.OrderRefundCountParam;
 import com.yami.shop.bean.param.OrderRefundParam;
 import com.yami.shop.bean.param.OrderRefundStaisticsParam;
 import com.yami.shop.bean.param.StatisticsRefundParam;
+import com.yami.shop.bean.vo.OrderRefundVo;
 import com.yami.shop.common.util.PageParam;
 import com.yami.shop.common.util.hb.HBR;
 import org.apache.ibatis.annotations.Param;
@@ -209,5 +210,11 @@ public interface OrderRefundService extends IService<OrderRefund> {
      * @param orderRefund 退款单对象
      * @return 退款订单列表
      */
-    IPage<OrderRefund> orderRefundPage(PageParam<OrderRefund> page, OrderRefundStaisticsParam orderRefund);
+    IPage<OrderRefundVo> orderRefundPage(PageParam<OrderRefund> page, OrderRefundStaisticsParam orderRefund);
+
+    /**
+     * 根据ID查询退款单
+     * @param refundId  id
+     */
+    OrderRefundVo selectInfoById(Long refundId);
 }

+ 7 - 1
yami-shop-service/src/main/java/com/yami/shop/service/impl/OrderRefundServiceImpl.java

@@ -23,6 +23,7 @@ import com.yami.shop.bean.event.ReceiptOrderEvent;
 import com.yami.shop.bean.model.*;
 import com.yami.shop.bean.param.*;
 import com.yami.shop.bean.pay.RefundInfoDto;
+import com.yami.shop.bean.vo.OrderRefundVo;
 import com.yami.shop.common.config.Constant;
 import com.yami.shop.common.enums.PayType;
 import com.yami.shop.common.exception.GlobalException;
@@ -1273,9 +1274,14 @@ public class OrderRefundServiceImpl extends ServiceImpl<OrderRefundMapper, Order
     }
 
     @Override
-    public IPage<OrderRefund> orderRefundPage(PageParam<OrderRefund> page, OrderRefundStaisticsParam orderRefund) {
+    public IPage<OrderRefundVo> orderRefundPage(PageParam<OrderRefund> page, OrderRefundStaisticsParam orderRefund) {
         return orderRefundMapper.orderRefundPage(page, orderRefund);
     }
 
+    @Override
+    public OrderRefundVo selectInfoById(Long refundId) {
+        return orderRefundMapper.selectInfoById(refundId);
+    }
+
 
 }

+ 67 - 17
yami-shop-service/src/main/resources/mapper/OrderRefundMapper.xml

@@ -5,10 +5,43 @@
     <resultMap id="BaseResultMap" type="com.yami.shop.bean.model.OrderRefund">
         <id column="refund_id" property="refundId"/>
         <result column="refund_sn" property="refundSn"/>
+        <result column="order_number" property="orderNumber"/>
         <result column="shop_id" property="shopId"/>
         <result column="user_id" property="userId"/>
         <result column="order_id" property="orderId"/>
-        <result column="refund_type" property="orderId"/>
+        <result column="refund_type" property="refundType"/>
+        <result column="order_item_id" property="orderItemId"/>
+        <result column="goods_num" property="goodsNum"/>
+        <result column="refund_amount" property="refundAmount"/>
+        <result column="apply_type" property="applyType"/>
+        <result column="is_receiver" property="isReceiver"/>
+        <result column="buyer_reason" property="buyerReason"/>
+        <result column="buyer_desc" property="buyerDesc"/>
+        <result column="buyer_mobile" property="buyerMobile"/>
+        <result column="photo_files" property="photoFiles"/>
+        <result column="return_money_sts" property="returnMoneySts"/>
+        <result column="reject_message" property="rejectMessage"/>
+        <result column="seller_msg" property="sellerMsg"/>
+        <result column="apply_time" property="applyTime"/>
+        <result column="handel_time" property="handelTime"/>
+        <result column="ship_time" property="shipTime"/>
+        <result column="receive_time" property="receiveTime"/>
+        <result column="cancel_time" property="cancelTime"/>
+        <result column="refund_time" property="refundTime"/>
+        <result column="decision_time" property="decisionTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="reject_time" property="rejectTime"/>
+    </resultMap>
+
+
+    <resultMap id="OrderRefundVoMap" type="com.yami.shop.bean.vo.OrderRefundVo">
+        <id column="refund_id" property="refundId"/>
+        <result column="refund_sn" property="refundSn"/>
+        <result column="order_number" property="orderNumber"/>
+        <result column="shop_id" property="shopId"/>
+        <result column="user_id" property="userId"/>
+        <result column="order_id" property="orderId"/>
+        <result column="refund_type" property="refundType"/>
         <result column="order_item_id" property="orderItemId"/>
         <result column="goods_num" property="goodsNum"/>
         <result column="refund_amount" property="refundAmount"/>
@@ -414,54 +447,71 @@
         COUNT(CASE WHEN return_money_sts = 70 THEN 1 END) AS refundCompleteCount
         FROM tz_order_refund
         <where>
-            <if test="orderNumber != null">
+            <if test="orderRefund.orderNumber != null">
                 and order_number = #{orderRefund.orderNumber}
             </if>
-            <if test="refundSn != null">
+            <if test="orderRefund.refundSn != null">
                 and refund_sn = #{orderRefund.refundSn}
             </if>
-            <if test="buyerMobile != null">
+            <if test="orderRefund.buyerMobile != null">
                 and buyer_mobile = #{orderRefund.buyerMobile}
             </if>
-            <if test="applyType != null">
+            <if test="orderRefund.applyType != null">
                 and apply_type = #{orderRefund.applyType}
             </if>
-            <if test="returnMoneySts != null">
+            <if test="orderRefund.returnMoneySts != null and orderRefund.returnMoneySts != 0">
                 and return_money_sts = #{orderRefund.returnMoneySts}
             </if>
-            <if test="orderParam.startTime != null">
+            <if test="orderRefund.startTime != null">
                 AND create_time &gt;= #{orderRefund.startTime}
             </if>
-            <if test="orderParam.endTime != null">
+            <if test="orderRefund.endTime != null">
                 AND create_time &lt;= #{orderRefund.endTime}
             </if>
         </where>
 
     </select>
-    <select id="orderRefundPage" resultMap="BaseResultMap">
-        select refund.* from tz_order_refund refund
+    <select id="orderRefundPage" resultMap="OrderRefundVoMap">
+        select refund.*, o.actual_total as actualTotal, o.product_nums as productNums, o.hb_order_status as hbOrderStatus,
+        tsd.shop_name as shopName
+        from tz_order_refund refund
+        join tz_shop_detail tsd on refund.shop_id = tsd.shop_id
+        join tz_order o on refund.order_id = o.order_id
         <where>
-            <if test="orderNumber != null">
+            <if test="orderRefund.orderNumber != null">
                 and refund.order_number = #{orderRefund.orderNumber}
             </if>
-            <if test="refundSn != null">
+            <if test="orderRefund.refundSn != null">
                 and refund.refund_sn = #{orderRefund.refundSn}
             </if>
-            <if test="buyerMobile != null">
+            <if test="orderRefund.buyerMobile != null">
                 and refund.buyer_mobile = #{orderRefund.buyerMobile}
             </if>
-            <if test="applyType != null">
+            <if test="orderRefund.applyType != null">
                 and refund.apply_type = #{orderRefund.applyType}
             </if>
-            <if test="returnMoneySts != null">
+            <if test="orderRefund.returnMoneySts != null and orderRefund.returnMoneySts != 0">
                 and refund.return_money_sts = #{orderRefund.returnMoneySts}
             </if>
-            <if test="orderParam.startTime != null">
+            <if test="orderRefund.startTime != null">
                 AND refund.create_time &gt;= #{orderRefund.startTime}
             </if>
-            <if test="orderParam.endTime != null">
+            <if test="orderRefund.endTime != null">
                 AND refund.create_time &lt;= #{orderRefund.endTime}
             </if>
         </where>
     </select>
+
+    <select id="selectInfoById" resultMap="OrderRefundVoMap">
+        select refund.*,
+               o.actual_total    as actualTotal,
+               o.product_nums    as productNums,
+               o.hb_order_status as hbOrderStatus,
+               tsd.shop_name     as shopName
+        from tz_order_refund refund
+                 join tz_shop_detail tsd on refund.shop_id = tsd.shop_id
+                 join tz_order o on refund.order_id = o.order_id
+        where refund.refund_id = #{refundId}
+    </select>
+
 </mapper>

+ 27 - 0
yami-shop-service/src/main/resources/mapper/OrderRefundSkuMapper.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.yami.shop.dao.OrderRefundSkuMapper">
+
+    <resultMap id="BaseResultMap" type="com.yami.shop.bean.vo.OrderRefundSkuVo">
+        <id column="id" property="id"/>
+        <result column="sku_id" property="skuId"/>
+        <result column="product_count" property="productCount"/>
+        <result column="order_refund_id" property="orderRefundId"/>
+        <result column="sku_price" property="skuPrice"/>
+        <result column="order_item_id" property="orderItemId"/>
+        <result column="sku_id" property="skuId"/>
+        <result column="sku_name" property="skuName"/>
+        <result column="spec" property="spec"/>
+        <result column="pic" property="pic"/>
+        <result column="prod_name" property="prodName"/>
+    </resultMap>
+    <select id="selectByRefundId" resultMap="BaseResultMap">
+        select ork.*, sku.sku_name, sku.spec, sku.pic, prod.prod_name
+        from tz_order_refund_sku ork
+                 left join tz_order_item oi on ork.order_item_id = oi.order_item_id
+                 join tz_sku sku on sku.sku_id = ork.sku_id
+                 left join tz_prod prod on sku.prod_id = prod.prod_id
+        where ork.order_refund_id = #{refundId}
+    </select>
+
+</mapper>