Browse Source

88:退款订单优化

Long 3 days ago
parent
commit
1b640dd342

+ 11 - 0
fs-service-system/src/main/java/com/fs/store/domain/FsStoreAfterSalesItem.java

@@ -24,6 +24,9 @@ public class FsStoreAfterSalesItem extends BaseEntity
     @Excel(name = "商品id")
     private Long productId;
 
+    /** 数量 */
+    private Integer num;
+
     /** 退货东西的详情信息 */
     @Excel(name = "退货东西的详情信息")
     private String jsonInfo;
@@ -75,4 +78,12 @@ public class FsStoreAfterSalesItem extends BaseEntity
     public void setIsDel(Integer isDel) {
         this.isDel = isDel;
     }
+
+    public Integer getNum() {
+        return num;
+    }
+
+    public void setNum(Integer num) {
+        this.num = num;
+    }
 }

+ 33 - 23
fs-service-system/src/main/java/com/fs/store/service/impl/FsStoreAfterSalesServiceImpl.java

@@ -1,13 +1,5 @@
 package com.fs.store.service.impl;
 
-import java.lang.reflect.Field;
-import java.math.BigDecimal;
-import java.sql.Timestamp;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.time.LocalDateTime;
-import java.util.*;
-
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.json.JSONUtil;
@@ -26,26 +18,21 @@ import com.fs.erp.service.IErpOrderService;
 import com.fs.huifuPay.domain.HuiFuRefundResult;
 import com.fs.huifuPay.sdk.opps.core.request.V2TradePaymentScanpayRefundRequest;
 import com.fs.huifuPay.service.HuiFuService;
-import com.fs.pay.pay.domain.QueryRefundResult;
-import com.fs.pay.pay.domain.RefundResult;
-import com.fs.pay.pay.dto.RefundOrderDTO;
 import com.fs.pay.pay.service.PayService;
-import com.fs.pay.pay.service.impl.PayApiServiceImpl;
-import com.fs.pay.service.impl.PayServiceImpl;
+import com.fs.pay.service.IPayService;
 import com.fs.store.config.StoreConfig;
 import com.fs.store.domain.*;
 import com.fs.store.dto.StoreOrderProductDTO;
 import com.fs.store.enums.AfterSalesStatusEnum;
 import com.fs.store.enums.AfterStatusEnum;
 import com.fs.store.enums.OrderInfoEnum;
+import com.fs.store.mapper.FsStoreAfterSalesMapper;
 import com.fs.store.mapper.FsStoreOrderItemMapper;
 import com.fs.store.param.*;
 import com.fs.store.service.*;
 import com.fs.store.vo.FsStoreAfterSalesQueryVO;
 import com.fs.store.vo.FsStoreAfterSalesVO;
 import com.fs.store.vo.FsStoreOrderItemVO;
-import com.fs.pay.service.IPayService;
-import com.fs.pay.service.dto.RefundDTO;
 import com.fs.system.service.ISysConfigService;
 import com.fs.wx.pay.config.WxPayProperties;
 import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest;
@@ -55,16 +42,22 @@ import com.github.binarywang.wxpay.bean.result.WxPayRefundResult;
 import com.github.binarywang.wxpay.config.WxPayConfig;
 import com.github.binarywang.wxpay.exception.WxPayException;
 import com.github.binarywang.wxpay.service.WxPayService;
-import com.hc.openapi.tool.util.Ids;
 import lombok.Synchronized;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.fs.store.mapper.FsStoreAfterSalesMapper;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
+import java.lang.reflect.Field;
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.util.*;
+
 /**
  * 售后记录Service业务层处理
  *
@@ -282,6 +275,7 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService
             FsStoreAfterSalesItem storeAfterSalesItem = new FsStoreAfterSalesItem();
             storeAfterSalesItem.setStoreAfterSalesId(storeAfterSales.getId());
             storeAfterSalesItem.setProductId(item.getProductId());
+            storeAfterSalesItem.setNum(productParam.getNum());
             storeAfterSalesItem.setJsonInfo(item.getJsonInfo());
             storeAfterSalesItem.setIsDel(0);
             afterSalesItemService.insertFsStoreAfterSalesItem(storeAfterSalesItem);
@@ -555,6 +549,14 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService
         order.setRefundStatus(OrderInfoEnum.REFUND_STATUS_2.getValue());
         orderService.updateFsStoreOrder(order);
 
+        BigDecimal refundAmount = param.getRefundAmount();
+        if (Objects.isNull(refundAmount)) {
+            throw new CustomException("退款金额不能为空");
+        }
+        if (order.getPayMoney().compareTo(refundAmount) < 0) {
+            throw new CustomException("退款金额不能大于支付金额");
+        }
+
         FsStoreAfterSalesStatus storeAfterSalesStatus = new FsStoreAfterSalesStatus();
         storeAfterSalesStatus.setStoreAfterSalesId(storeAfterSales.getId());
         storeAfterSalesStatus.setChangeType(4);
@@ -565,12 +567,20 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService
         //退库存
         //获取订单下的商品
         List<FsStoreOrderItemVO> orderItemVOS=fsStoreOrderItemMapper.selectFsStoreOrderItemListByOrderId(order.getId());
-        for(FsStoreOrderItemVO vo:orderItemVOS){
-            if(vo.getIsAfterSales()==1){
-                productService.incProductStock(vo.getNum(), vo.getProductId()
-                        , vo.getProductAttrValueId());
+
+        // 获取售后商品
+        FsStoreAfterSalesItem params = new FsStoreAfterSalesItem();
+        params.setStoreAfterSalesId(storeAfterSales.getId());
+        List<FsStoreAfterSalesItem> fsStoreAfterSalesItems = afterSalesItemService.selectFsStoreAfterSalesItemList(params);
+
+        // 退库存
+        for (FsStoreAfterSalesItem item : fsStoreAfterSalesItems) {
+            FsStoreOrderItemVO itemVO = orderItemVOS.stream().filter(i -> i.getProductId().equals(item.getProductId())).findFirst().orElse(null);
+            if(Objects.nonNull(itemVO) && itemVO.getIsAfterSales() == 1 && Objects.nonNull(item.getNum())){
+                productService.incProductStock(item.getNum().longValue(), item.getProductId(), null);
             }
         }
+
         //将钱退还给用户
         if(order.getPayMoney().compareTo(BigDecimal.ZERO)==1){
             List<FsStorePayment> payments=paymentService.selectFsStorePaymentByOrderId(order.getId());
@@ -591,7 +601,7 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService
                         refundRequest.setOutTradeNo("store-"+payment.getPayCode());
                         refundRequest.setOutRefundNo("store-"+payment.getPayCode());
                         refundRequest.setTotalFee(WxPayUnifiedOrderRequest.yuanToFen(payment.getPayMoney().toString()));
-                        refundRequest.setRefundFee(WxPayUnifiedOrderRequest.yuanToFen(payment.getPayMoney().toString()));
+                        refundRequest.setRefundFee(WxPayUnifiedOrderRequest.yuanToFen(refundAmount.toString()));
                         try {
                             WxPayRefundResult refundResult = wxPayService.refund(refundRequest);
                             WxPayRefundQueryResult refundQueryResult = wxPayService.refundQuery("", refundResult.getOutTradeNo(), refundResult.getOutRefundNo(), refundResult.getRefundId());
@@ -611,7 +621,7 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService
                         }
                     }else if (payment.getPayMode()!=null&&payment.getPayMode().equals("hf")){
                         V2TradePaymentScanpayRefundRequest request = new V2TradePaymentScanpayRefundRequest();
-                        request.setOrdAmt(payment.getPayMoney().toString());
+                        request.setOrdAmt(refundAmount.toString());
                         request.setOrgReqDate(new SimpleDateFormat("yyyyMMdd").format(payment.getCreateTime()));
                         request.setReqSeqId("refund-"+payment.getPayCode());
                         Map<String, Object> extendInfoMap = new HashMap<>();

+ 6 - 1
fs-service-system/src/main/resources/mapper/store/FsStoreAfterSalesItemMapper.xml

@@ -8,12 +8,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="id"    column="id"    />
         <result property="storeAfterSalesId"    column="store_after_sales_id"    />
         <result property="productId"    column="product_id"    />
+        <result property="num"    column="num"    />
         <result property="jsonInfo"    column="json_info"    />
         <result property="isDel"    column="is_del"    />
     </resultMap>
 
     <sql id="selectFsStoreAfterSalesItemVo">
-        select id, store_after_sales_id, product_id, json_info, is_del from fs_store_after_sales_item
+        select id, store_after_sales_id, product_id,num, json_info, is_del from fs_store_after_sales_item
     </sql>
 
     <select id="selectFsStoreAfterSalesItemList" parameterType="FsStoreAfterSalesItem" resultMap="FsStoreAfterSalesItemResult">
@@ -21,6 +22,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <where>  
             <if test="storeAfterSalesId != null "> and store_after_sales_id = #{storeAfterSalesId}</if>
             <if test="productId != null "> and product_id = #{productId}</if>
+            <if test="num != null "> and num = #{num}</if>
             <if test="jsonInfo != null  and jsonInfo != ''"> and json_info = #{jsonInfo}</if>
             <if test="isDel != null  and isDel != ''"> and is_del = #{isDel}</if>
         </where>
@@ -36,12 +38,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="storeAfterSalesId != null">store_after_sales_id,</if>
             <if test="productId != null">product_id,</if>
+            <if test="num != null">num,</if>
             <if test="jsonInfo != null and jsonInfo != ''">json_info,</if>
             <if test="isDel != null">is_del,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="storeAfterSalesId != null">#{storeAfterSalesId},</if>
             <if test="productId != null">#{productId},</if>
+            <if test="num != null">#{num},</if>
             <if test="jsonInfo != null and jsonInfo != ''">#{jsonInfo},</if>
             <if test="isDel != null">#{isDel},</if>
          </trim>
@@ -52,6 +56,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <trim prefix="SET" suffixOverrides=",">
             <if test="storeAfterSalesId != null">store_after_sales_id = #{storeAfterSalesId},</if>
             <if test="productId != null">product_id = #{productId},</if>
+            <if test="num != null">num = #{num},</if>
             <if test="jsonInfo != null and jsonInfo != ''">json_info = #{jsonInfo},</if>
             <if test="isDel != null">is_del = #{isDel},</if>
         </trim>