소스 검색

订单修改

liweifan 3 년 전
부모
커밋
7b16a44a84

+ 9 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderRefundService.java

@@ -56,7 +56,7 @@ public interface UserOrderRefundService extends IService<UserOrderRefund>  {
     HttpResponseResult<Boolean> doAuth(AuthOperaReq authOperaReq, SysUser user);
 
 	/**
-	 * 系統自動退款
+	 * 系統自動退款(退已完成的订单)
 	 * @param orderNo
 	 * @param reason
 	 * @return
@@ -64,6 +64,14 @@ public interface UserOrderRefundService extends IService<UserOrderRefund>  {
 	HttpResponseResult<UserOrderRefundBill> orderRefund(String orderNo, String reason);
 
 	/**
+	 * 交易失败退款(退已完成的订单)
+	 * @param data
+	 * @param reason
+	 * @return
+	 */
+	HttpResponseResult<UserOrderRefundBill> orderFailRefund(PaymentCallBack data, String orderNo, String reason);
+
+	/**
 	 * 退款回调
 	 * @param data
 	 */

+ 8 - 10
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderPaymentServiceImpl.java

@@ -7,9 +7,7 @@ import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderPayReq;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
-import com.yonge.cooleshow.biz.dal.service.SysUserContractRecordService;
-import com.yonge.cooleshow.biz.dal.service.SysUserService;
-import com.yonge.cooleshow.biz.dal.service.UserOrderService;
+import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderPayRes;
@@ -34,7 +32,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.yonge.cooleshow.biz.dal.entity.UserOrderPayment;
 import com.yonge.cooleshow.biz.dal.dao.UserOrderPaymentDao;
-import com.yonge.cooleshow.biz.dal.service.UserOrderPaymentService;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
@@ -62,6 +59,8 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
     private SysUserContractRecordService sysUserContractRecordService;
     @Autowired
     private SysUserService userService;
+    @Autowired
+    private UserOrderRefundService orderRefundService;
 
     @Override
     public UserOrderPayment detailByOrderNo(String orderNo, PayChannelEnum payChannel, TradeStatusEnum status) {
@@ -127,11 +126,7 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
             }
         }
         updateById(orderPayment);
-        if (TradeStatusEnum.succeeded.equals(orderPayment.getCloseStatus())) {
-            return true;
-        } else {
-            return false;
-        }
+        return true;
     }
 
 
@@ -273,6 +268,9 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
         }
         if (detail.getStatus().equals(OrderStatusEnum.WAIT_PAY) || detail.getStatus().equals(OrderStatusEnum.PAYING)) {
             userOrderService.orderSuccess(detail, data);
+        } else if (!detail.getStatus().equals(OrderStatusEnum.PAID)) {
+            //原路退还
+            orderRefundService.orderFailRefund(data, detail.getOrderNo(), "订单已超时,金额原路退回");
         }
 
         //处理支付完成签署协议
@@ -309,7 +307,7 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
         if (detail.getStatus().equals(OrderStatusEnum.WAIT_PAY) || detail.getStatus().equals(OrderStatusEnum.PAYING)) {
             userOrderService.doOrderCancel(detail, OrderStatusEnum.FAIL, "支付回调失败:" + errMsg);
             //关闭付款单
-            onlyClosePayment(detail.getOrderNo(), "支付回调失败:" + errMsg);
+            closePaymentAndReqOpen(detail.getOrderNo(), "支付回调失败:" + errMsg);
         }
     }
 

+ 48 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderRefundServiceImpl.java

@@ -290,6 +290,54 @@ public class UserOrderRefundServiceImpl extends ServiceImpl<UserOrderRefundDao,
         return doOrderRefund(orderRefunds);
     }
 
+    @Override
+    public HttpResponseResult<UserOrderRefundBill> orderFailRefund(PaymentCallBack data, String orderNo, String reason) {
+        UserOrderPayment orderPayment = orderPaymentService.detailByTransNoOrPaymentNo(data.getId(), data.getPaymentNo());
+        if (null == orderPayment) {
+            return HttpResponseResult.failed("未找到付款单");
+        }
+        //订单完成
+        UserOrderVo detail = orderService.detail(orderPayment.getOrderNo(), null);
+        if (null == detail) {
+            return HttpResponseResult.failed("未找到订单");
+        }
+        //退款的详情id
+        List<Long> detilIds = new ArrayList<>();
+
+        OrderRefundReq orderRefundReq = new OrderRefundReq();
+        orderRefundReq.setOrderId(detail.getId());
+        orderRefundReq.setUserId(detail.getUserId());
+        orderRefundReq.setReason(reason);
+        //退款金额
+        BigDecimal actualPrice = BigDecimal.ZERO;
+        for (UserOrderDetailVo vo : detail.getOrderDetailList()) {
+            detilIds.add(vo.getId());
+            actualPrice = actualPrice.add(vo.getActualPrice());
+        }
+        String join = StringUtil.join(detilIds, ",");
+
+        UserOrderRefund orderRefunds = new UserOrderRefund();
+        orderRefunds.setUserId(detail.getUserId());
+        orderRefunds.setOrderId(detail.getId());
+        orderRefunds.setOrderNo(detail.getOrderNo());
+        orderRefunds.setOredrDetilIds(join);
+        orderRefunds.setStatus(AuthStatusEnum.PASS);
+        orderRefunds.setApplyAmount(actualPrice);
+        orderRefunds.setReason(reason);
+        save(orderRefunds);
+
+        for (UserOrderDetailVo vo : detail.getOrderDetailList()) {
+            List<Long> collect = orderRefundReq.getOredrDetilIds().stream().filter(o -> o.equals(vo.getId())).collect(Collectors.toList());
+            if (CollectionUtils.isNotEmpty(collect)) {
+                Consumer<UserOrderDetailVo> refundAfterConsumer = refundAfter.get(vo.getGoodType());
+                if (!Objects.isNull(refundAfterConsumer)) {
+                    refundAfterConsumer.accept(vo);
+                }
+            }
+        }
+        return doOrderRefund(orderRefunds);
+    }
+
 
     @Override
     @Transactional(rollbackFor = Exception.class)