|
@@ -393,6 +393,75 @@ public class UserOrderRefundServiceImpl extends ServiceImpl<UserOrderRefundDao,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public HttpResponseResult<UserOrderRefundBill> orderRefound(String orderNo) {
|
|
|
+ UserOrderVo detail = orderService.detail(orderNo, null);
|
|
|
+
|
|
|
+ if (null == detail || CollectionUtils.isEmpty(detail.getOrderDetailList())) {
|
|
|
+ return HttpResponseResult.failed("未找到订单信息");
|
|
|
+ }
|
|
|
+ if (!OrderStatusEnum.PAID.equals(detail.getStatus())) {
|
|
|
+ return HttpResponseResult.failed("订单状态异常");
|
|
|
+ }
|
|
|
+
|
|
|
+ //查询订单下未退款的所有详情订单
|
|
|
+ List<UserOrderDetail> orderDetails = baseMapper.selectOrderRefundDetils(detail.getId());
|
|
|
+ if (CollectionUtils.isEmpty(orderDetails)) {
|
|
|
+ return HttpResponseResult.failed("订单中没有可退款商品");
|
|
|
+ }
|
|
|
+
|
|
|
+ //退款的详情id
|
|
|
+ List<Long> detilIds = orderDetails.stream().map(UserOrderDetail::getId).collect(Collectors.toList());
|
|
|
+
|
|
|
+ OrderRefundReq orderRefundReq = new OrderRefundReq();
|
|
|
+ orderRefundReq.setOrderId(detail.getId());
|
|
|
+ orderRefundReq.setUserId(detail.getUserId());
|
|
|
+ orderRefundReq.setReason("测试退款");
|
|
|
+ orderRefundReq.setOredrDetilIds(detilIds);
|
|
|
+ //退款金额
|
|
|
+ BigDecimal actualPrice = BigDecimal.ZERO;
|
|
|
+ for (UserOrderDetailVo vo : detail.getOrderDetailList()) {
|
|
|
+ Optional<Long> first = detilIds.stream().filter(o -> o.equals(vo.getId())).findFirst();
|
|
|
+ if (!first.isPresent()) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ Function<OrderRefundReq, HttpResponseResult<RefundCreateRes>> refundCreateFunction = refundCreate.get(vo.getGoodType());
|
|
|
+ if (!Objects.isNull(refundCreateFunction)) {
|
|
|
+ orderRefundReq.setOredrDetil(vo);
|
|
|
+ HttpResponseResult<RefundCreateRes> apply = refundCreateFunction.apply(orderRefundReq);
|
|
|
+ if (apply.getStatus()) {
|
|
|
+ actualPrice = actualPrice.add(apply.getData().getActualPrice());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ 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.setActualAmount(actualPrice);
|
|
|
+ orderRefunds.setReason("测试退款");
|
|
|
+ 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 doOrderRefundTest(orderRefunds);
|
|
|
+ }
|
|
|
+
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
HttpResponseResult<UserOrderRefundBill> doOrderRefund(UserOrderRefund orderRefund) {
|
|
|
UserOrderPayment payment = orderPaymentService.getOne(Wrappers.<UserOrderPayment>lambdaQuery()
|
|
@@ -441,6 +510,39 @@ public class UserOrderRefundServiceImpl extends ServiceImpl<UserOrderRefundDao,
|
|
|
return HttpResponseResult.succeed(orderRefundBill);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ HttpResponseResult<UserOrderRefundBill> doOrderRefundTest(UserOrderRefund orderRefund) {
|
|
|
+ UserOrderPayment payment = orderPaymentService.getOne(Wrappers.<UserOrderPayment>lambdaQuery()
|
|
|
+ .eq(UserOrderPayment::getOrderNo, orderRefund.getOrderNo())
|
|
|
+ .eq(UserOrderPayment::getStatus, TradeStatusEnum.succeeded)
|
|
|
+ );
|
|
|
+
|
|
|
+ if (null == payment) {
|
|
|
+ throw new BizException("订单状态异常");
|
|
|
+ }
|
|
|
+
|
|
|
+ RefundBill refundBill = new RefundBill(payment.getOpenType(),
|
|
|
+ PaymentClientEnum.valueOf(payment.getPaymentClient()), payment.getPayChannel());
|
|
|
+ refundBill.setTradeNo(payment.getTransNo());
|
|
|
+ refundBill.setPaymentNo(payment.getPaymentNo());
|
|
|
+
|
|
|
+ //单号生成
|
|
|
+ Long billNo = idGeneratorService.generatorId("billNo");
|
|
|
+ //入退款单表
|
|
|
+ UserOrderRefundBill orderRefundBill = new UserOrderRefundBill();
|
|
|
+ orderRefundBill.setRefundId(orderRefund.getId());
|
|
|
+ orderRefundBill.setBillNo(billNo.toString());
|
|
|
+ orderRefundBill.setRefundAmt(orderRefund.getActualAmount());
|
|
|
+ orderRefundBill.setStatus(TradeStatusEnum.succeeded);
|
|
|
+ refundBillService.save(orderRefundBill);
|
|
|
+ updateById(orderRefund);
|
|
|
+
|
|
|
+ //处理退款业务
|
|
|
+ orderRefundSuccessBizHandle(orderRefund.getId());
|
|
|
+ return HttpResponseResult.succeed(orderRefundBill);
|
|
|
+ }
|
|
|
+
|
|
|
/***
|
|
|
* 处理回调-退款成功
|
|
|
* @author liweifan
|