|  | @@ -3,15 +3,19 @@ package com.yonge.cooleshow.portal.service.impl;
 | 
	
		
			
				|  |  |  import cn.hutool.core.bean.BeanUtil;
 | 
	
		
			
				|  |  |  import cn.hutool.core.collection.CollUtil;
 | 
	
		
			
				|  |  |  import cn.hutool.core.map.MapUtil;
 | 
	
		
			
				|  |  | +import com.alibaba.fastjson.JSON;
 | 
	
		
			
				|  |  |  import com.github.pagehelper.PageHelper;
 | 
	
		
			
				|  |  |  import com.ym.mec.common.entity.HttpResponseResult;
 | 
	
		
			
				|  |  |  import com.ym.mec.common.entity.MallCreateOrderModel;
 | 
	
		
			
				|  |  |  import com.ym.mec.common.entity.OrderCancelModel;
 | 
	
		
			
				|  |  |  import com.ym.mec.common.exception.BizException;
 | 
	
		
			
				|  |  |  import com.ym.mec.common.service.IdGeneratorService;
 | 
	
		
			
				|  |  | +import com.ym.mec.thirdparty.adapay.Payment;
 | 
	
		
			
				|  |  | +import com.ym.mec.thirdparty.adapay.entity.BaseResult;
 | 
	
		
			
				|  |  |  import com.ym.mec.web.WebFeignService;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.mall.common.api.CommonPage;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.mall.common.enums.OrderCacheEnum;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.mall.common.enums.TradeStatusEnum;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.mall.common.exception.Asserts;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.mall.common.service.RedisService;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.mall.common.util.DistributedLock;
 | 
	
	
		
			
				|  | @@ -74,6 +78,9 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
 | 
	
		
			
				|  |  |      private PortalOrderDao portalOrderDao;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  | +    private UserOrderRefundMapper userOrderRefundMapper;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  |      private IdGeneratorService idGeneratorService;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
	
		
			
				|  | @@ -90,6 +97,9 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private RedissonClient redissonClient;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private UserOrderPaymentService userOrderPaymentService;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private PortalProductDao productDao;
 | 
	
	
		
			
				|  | @@ -127,22 +137,21 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
 | 
	
		
			
				|  |  |              // 订单号不为空 先删除订单  在重新创建订单
 | 
	
		
			
				|  |  |              OmsOrderDetail detail = detail(orderParam.getOrderNo());
 | 
	
		
			
				|  |  |              if (detail != null && detail.getStatus() == 0) {
 | 
	
		
			
				|  |  | -                detail.setStatus(4);
 | 
	
		
			
				|  |  | -                orderMapper.updateByPrimaryKeySelective(detail);
 | 
	
		
			
				|  |  | -                // 另外生成一个订单
 | 
	
		
			
				|  |  | -                detail.setId(null);
 | 
	
		
			
				|  |  | -                detail.setStatus(0);
 | 
	
		
			
				|  |  | -                detail.setOrderSn(orderSn);
 | 
	
		
			
				|  |  | -                List<OmsOrderItem> orderItemList = detail.getOrderItemList();
 | 
	
		
			
				|  |  | -                orderMapper.insert(detail);
 | 
	
		
			
				|  |  | -                for (OmsOrderItem omsOrderItem : orderItemList) {
 | 
	
		
			
				|  |  | -                    omsOrderItem.setId(null);
 | 
	
		
			
				|  |  | -                    omsOrderItem.setOrderSn(detail.getOrderSn());
 | 
	
		
			
				|  |  | -                    omsOrderItem.setOrderId(detail.getId());
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -                orderItemDao.insertList(orderItemList);
 | 
	
		
			
				|  |  | +                // 取消原有的订单支付
 | 
	
		
			
				|  |  | +                UserOrderPayment userOrderPayment = userOrderPaymentService.getByOrderNoAndStatusPaying(
 | 
	
		
			
				|  |  | +                        orderParam.getOrderNo());
 | 
	
		
			
				|  |  | +                userOrderPayment.setStatus(TradeStatusEnum.close.getCode());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                String oldOrderNo = userOrderPayment.getAdapayNo();
 | 
	
		
			
				|  |  | +                userOrderPaymentService.saveOrUpdate(userOrderPayment);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                return feignMecCreateOrder(order.getCouponId(),orderParam.getOrderNo(), orderSn, detail.getMemberId(), detail.getTotalAmount());
 | 
	
		
			
				|  |  | +                // 增加一个支付中的记录
 | 
	
		
			
				|  |  | +                userOrderPayment.setStatus(TradeStatusEnum.pending.getCode());
 | 
	
		
			
				|  |  | +                userOrderPayment.setAdapayNo(orderSn);
 | 
	
		
			
				|  |  | +                userOrderPayment.setId(null);
 | 
	
		
			
				|  |  | +                userOrderPaymentService.saveOrUpdate(userOrderPayment);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                return feignMecCreateOrder(order.getCouponId(), oldOrderNo, orderSn, null, detail.getMemberId().intValue(), detail.getTotalAmount());
 | 
	
		
			
				|  |  |              } else {
 | 
	
		
			
				|  |  |                  throw new BizException("订单信息获取失败");
 | 
	
		
			
				|  |  |              }
 | 
	
	
		
			
				|  | @@ -154,9 +163,11 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          List<OmsOrderItem> orderItemList = new ArrayList<>();
 | 
	
		
			
				|  |  |          //获取购物车及优惠信息
 | 
	
		
			
				|  |  | -        UmsMember currentMember = memberService.getCurrentMember();
 | 
	
		
			
				|  |  | +        UmsMember currentMember;
 | 
	
		
			
				|  |  |          if (orderParam.getUserId() != null && orderParam.getUserId() > 0) {
 | 
	
		
			
				|  |  |              currentMember = memberService.getById(orderParam.getUserId());
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +            currentMember =  memberService.getCurrentMember();
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          List<CartPromotionItem> cartPromotionItemList = cartItemService.listPromotion(currentMember.getId(),
 | 
	
	
		
			
				|  | @@ -190,7 +201,8 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          BigDecimal amount = calcTotalAmount(orderItemList);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        Map data = feignMecCreateOrder(orderParam.getCouponId(),orderParam.getOrderNo(), orderSn, currentMember.getId(), amount);
 | 
	
		
			
				|  |  | +        Map data = feignMecCreateOrder(orderParam.getCouponId(),orderParam.getOrderNo(), orderSn,
 | 
	
		
			
				|  |  | +                                       orderParam.getTeacherId()==null?null:orderParam.getTeacherId().intValue(), currentMember.getId().intValue(), amount);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          BigDecimal couponAmount = MapUtil.get(data, "mallCouponAmount", BigDecimal.class);
 | 
	
		
			
				|  |  |          if (couponAmount == null) {
 | 
	
	
		
			
				|  | @@ -340,20 +352,48 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
 | 
	
		
			
				|  |  |          Map<String, Object> result = new HashMap<>();
 | 
	
		
			
				|  |  |          result.put("order", order);
 | 
	
		
			
				|  |  |          result.put("orderItemList", orderItemList);
 | 
	
		
			
				|  |  | +        result.put("orderType","paying");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 创建订单时,创建一条用户支付订单信息  金额信息不做处理
 | 
	
		
			
				|  |  | +        UserOrderPayment userOrderPayment = new UserOrderPayment();
 | 
	
		
			
				|  |  | +        userOrderPayment.setOpenType("ADAPAY");
 | 
	
		
			
				|  |  | +        userOrderPayment.setPaymentClient(orderParam.getPlatformType());
 | 
	
		
			
				|  |  | +        userOrderPayment.setOrderNo(order.getOrderSn());
 | 
	
		
			
				|  |  | +        userOrderPayment.setAdapayNo(order.getOrderSn());
 | 
	
		
			
				|  |  | +        userOrderPayment.setStatus(TradeStatusEnum.pending.getCode());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          if (order.getPayAmount().compareTo(BigDecimal.ZERO) == 0) {
 | 
	
		
			
				|  |  |              paySuccess(order.getId(),order.getPayType());
 | 
	
		
			
				|  |  |              order.setStatus(1);
 | 
	
		
			
				|  |  | +            result.put("orderType","success");
 | 
	
		
			
				|  |  | +            userOrderPayment.setStatus(TradeStatusEnum.succeeded.getCode());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +        userOrderPaymentService.save(userOrderPayment);
 | 
	
		
			
				|  |  |          result.put("pay",data);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 保存商品信息到管乐迷
 | 
	
		
			
				|  |  | +        OmsOrderDetail detail = detail(order.getOrderSn());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        MallCreateOrderModel model = new MallCreateOrderModel();
 | 
	
		
			
				|  |  | +        model.setOrderNo(order.getOrderSn());
 | 
	
		
			
				|  |  | +        model.setOrderInfo(JSON.toJSONString(detail));
 | 
	
		
			
				|  |  | +        HttpResponseResult<Map> mapHttpResponseResult = webFeignService.mallSaveOrderInfo(model);
 | 
	
		
			
				|  |  | +        if (!mapHttpResponseResult.getStatus()) {
 | 
	
		
			
				|  |  | +            throw new BizException(mapHttpResponseResult.getMsg());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          return result;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    private Map feignMecCreateOrder(String couponId,String oldOrderNo, String orderSn, Long userId, BigDecimal amount) {
 | 
	
		
			
				|  |  | +    private Map feignMecCreateOrder(String couponId, String oldOrderNo, String orderSn, Integer teacherId, Integer userId, BigDecimal amount) {
 | 
	
		
			
				|  |  |          // 远程调用管乐迷订单记录
 | 
	
		
			
				|  |  |          MallCreateOrderModel model = new MallCreateOrderModel();
 | 
	
		
			
				|  |  |          model.setAmount(amount);
 | 
	
		
			
				|  |  |          model.setOrderNo(orderSn);
 | 
	
		
			
				|  |  | -        model.setUserId(userId.intValue());
 | 
	
		
			
				|  |  | +        if (!userId.equals(teacherId)) {
 | 
	
		
			
				|  |  | +            model.setTeacherId(teacherId);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        model.setUserId(userId);
 | 
	
		
			
				|  |  |          model.setCouponIdList(StringUtil.toIntegerList(couponId));
 | 
	
		
			
				|  |  |          model.setOldOrderNo(oldOrderNo);
 | 
	
		
			
				|  |  |          HttpResponseResult<Map> mapHttpResponseResult = webFeignService.mallCreateOrder(model);
 | 
	
	
		
			
				|  | @@ -459,19 +499,22 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          OmsOrder cancelOrder = cancelOrderList.get(0);
 | 
	
		
			
				|  |  |          if (cancelOrder != null && (cancelOrder.getStatus() == 0 || cancelOrder.getStatus() == 6)) {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            HttpResponseResult<OrderCancelModel> responseResult = webFeignService.cancelOrder(cancelOrder.getOrderSn());
 | 
	
		
			
				|  |  | -            if (!responseResult.getStatus()) {
 | 
	
		
			
				|  |  | -                throw new BizException("远程取消失败");
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            OrderCancelModel data = responseResult.getData();
 | 
	
		
			
				|  |  | -            if (!data.getSuccess()) {
 | 
	
		
			
				|  |  | -                throw new BizException("远程取消失败");
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            if (data.getStatus()) {
 | 
	
		
			
				|  |  | -                LOG.info("订单支付成功,修改订单状态");
 | 
	
		
			
				|  |  | -                orderSuccess(cancelOrder,cancelOrder.getPayAmount(),data.getPayChannel());
 | 
	
		
			
				|  |  | -                return;
 | 
	
		
			
				|  |  | +            UserOrderPayment userOrderPayment = userOrderPaymentService.getByOrderNoAndStatusPaying(
 | 
	
		
			
				|  |  | +                    cancelOrder.getOrderSn());
 | 
	
		
			
				|  |  | +            if (userOrderPayment != null) {
 | 
	
		
			
				|  |  | +                HttpResponseResult<OrderCancelModel> responseResult = webFeignService.cancelOrder(userOrderPayment.getAdapayNo());
 | 
	
		
			
				|  |  | +                if (!responseResult.getStatus()) {
 | 
	
		
			
				|  |  | +                    throw new BizException("远程取消失败");
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                OrderCancelModel data = responseResult.getData();
 | 
	
		
			
				|  |  | +                if (!data.getSuccess()) {
 | 
	
		
			
				|  |  | +                    throw new BizException("远程取消失败");
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                if (data.getStatus()) {
 | 
	
		
			
				|  |  | +                    LOG.info("订单支付成功,修改订单状态");
 | 
	
		
			
				|  |  | +                    orderSuccess(cancelOrder, cancelOrder.getPayAmount(), data.getPayChannel());
 | 
	
		
			
				|  |  | +                    return;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              //修改订单状态为取消
 | 
	
	
		
			
				|  | @@ -627,22 +670,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    @Override
 | 
	
		
			
				|  |  | -    @Transactional
 | 
	
		
			
				|  |  | -    public HttpResponseResult orderPay(Map payReq) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        String orderNo = MapUtil.getStr(payReq,"orderNo");
 | 
	
		
			
				|  |  | -        OmsOrderDetail detail = detail(orderNo);
 | 
	
		
			
				|  |  | -        if (detail == null) {
 | 
	
		
			
				|  |  | -            throw new BizException("订单不存在");
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        if (detail.getStatus() != 0 && detail.getStatus() != 6) {
 | 
	
		
			
				|  |  | -            throw new BizException("订单已付款或已关闭");
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        // 远程调用支付接口
 | 
	
		
			
				|  |  | -        return webFeignService.executePayment(payReq);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
	
		
			
				|  | @@ -741,23 +769,79 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
 | 
	
		
			
				|  |  |      @Transactional
 | 
	
		
			
				|  |  |      public void paymentSucceededHandle(String orderNo, BigDecimal payAmount, String payChannel) {
 | 
	
		
			
				|  |  |          //订单完成
 | 
	
		
			
				|  |  | -        OmsOrderDetail detail = detail(orderNo);
 | 
	
		
			
				|  |  | +        UserOrderPayment orderPayment = userOrderPaymentService.getByAdapayNo(orderNo);
 | 
	
		
			
				|  |  | +        if (orderPayment == null) {
 | 
	
		
			
				|  |  | +            throw new BizException("订单支付信息未找到");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        OmsOrderDetail detail = detail(orderPayment.getOrderNo());
 | 
	
		
			
				|  |  |          if (detail.getStatus() == 0) {
 | 
	
		
			
				|  |  |              orderSuccess(detail, payAmount, payChannel);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            orderPayment.setStatus(TradeStatusEnum.succeeded.getCode());
 | 
	
		
			
				|  |  | +            userOrderPaymentService.saveOrUpdate(orderPayment);
 | 
	
		
			
				|  |  |              Map<String,Object> notifyMap = new HashMap<>();
 | 
	
		
			
				|  |  |              notifyMap.put("channelType", payChannel);
 | 
	
		
			
				|  |  |              notifyMap.put("tradeState", "1");
 | 
	
		
			
				|  |  |              notifyMap.put("totalMoney", payAmount);
 | 
	
		
			
				|  |  | -            notifyMap.put("merOrderNo", orderNo);
 | 
	
		
			
				|  |  | +            notifyMap.put("merOrderNo",orderNo);
 | 
	
		
			
				|  |  |              HttpResponseResult httpResponseResult = webFeignService.updateOrder(notifyMap);
 | 
	
		
			
				|  |  |              if (!httpResponseResult.getStatus()) {
 | 
	
		
			
				|  |  |                  throw new BizException(httpResponseResult.getMsg());
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          } else {
 | 
	
		
			
				|  |  |              LOG.error("汇付支付回调,订单状态异常。 req is {}", detail.getOrderSn());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            orderRefund(orderPayment,detail.getPayAmount().toString());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 支付成功,业务退款
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    private void orderRefund(UserOrderPayment userOrderPayment,String refundAmount) {
 | 
	
		
			
				|  |  | +        UserOrderRefund userOrderRefund = userOrderRefundMapper.selectByPayOrderNo(userOrderPayment.getAdapayNo());
 | 
	
		
			
				|  |  | +        if (userOrderRefund != null && userOrderRefund.getStatus().equals("succeeded")) {
 | 
	
		
			
				|  |  | +            LOG.warn("支付金额已退回");
 | 
	
		
			
				|  |  | +            return;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        String orderSn = generateOrderSn();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        HttpResponseResult<Map<String,String>> httpResponseResult = webFeignService.getBaseUrl(userOrderPayment.getAdapayNo());
 | 
	
		
			
				|  |  | +        if (!httpResponseResult.getStatus()) {
 | 
	
		
			
				|  |  | +            throw new BizException("获取回调路径失败");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        Map<String, String> data = httpResponseResult.getData();
 | 
	
		
			
				|  |  | +        String baseUrl = MapUtil.getStr(data,"baseUrl");
 | 
	
		
			
				|  |  | +        String transNo = MapUtil.getStr(data,"transNo");
 | 
	
		
			
				|  |  | +        // 金额退回
 | 
	
		
			
				|  |  | +        Map<String, Object> refundParams = new HashMap<>(10);
 | 
	
		
			
				|  |  | +        refundParams.put("refund_amt", refundAmount);
 | 
	
		
			
				|  |  | +        refundParams.put("refund_order_no", orderSn);
 | 
	
		
			
				|  |  | +        refundParams.put("notify_url",baseUrl + "/api-mall-portal/payment/callback");
 | 
	
		
			
				|  |  | +        refundParams.put("transNo",transNo);
 | 
	
		
			
				|  |  | +        HttpResponseResult<BaseResult<Map<String, Object>>> refund = webFeignService.refund(refundParams);
 | 
	
		
			
				|  |  | +        if (!refund.getStatus()) {
 | 
	
		
			
				|  |  | +            throw new BizException("退款失败");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        BaseResult<Map<String, Object>> mapBaseResult = refund.getData();
 | 
	
		
			
				|  |  | +        userOrderRefund = new UserOrderRefund();
 | 
	
		
			
				|  |  | +        userOrderRefund.setOrderNo(orderSn);
 | 
	
		
			
				|  |  | +        userOrderRefund.setPayTransNo(transNo);
 | 
	
		
			
				|  |  | +        userOrderRefund.setRefundAmt(new BigDecimal(refundAmount));
 | 
	
		
			
				|  |  | +        userOrderRefund.setPayOrderNo(userOrderPayment.getOrderNo());
 | 
	
		
			
				|  |  | +        if (mapBaseResult.getStatus()) {
 | 
	
		
			
				|  |  | +            Map<String,Object> refundBill = mapBaseResult.getData();
 | 
	
		
			
				|  |  | +            userOrderRefund.setRefundAmt(new BigDecimal(MapUtil.getStr(refundBill,"refund_amt")));
 | 
	
		
			
				|  |  | +            userOrderRefund.setStatus(TradeStatusEnum.pending.getCode());
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +            userOrderRefund.setStatus(TradeStatusEnum.failed.getCode());
 | 
	
		
			
				|  |  | +            userOrderRefund.setPayFailMsg("退款失败:" +mapBaseResult.getMsg());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        userOrderRefundMapper.insert(userOrderRefund);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      /***
 | 
	
		
			
				|  |  |       * 处理回调-支付失败
 | 
	
	
		
			
				|  | @@ -768,14 +852,21 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      @Transactional
 | 
	
		
			
				|  |  |      public void paymentFailedHandle(String orderNo, Map<String, Object> notifyMap) {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        OmsOrderDetail detail = detail(orderNo);
 | 
	
		
			
				|  |  | +        UserOrderPayment orderPayment = userOrderPaymentService.getByAdapayNo(orderNo);
 | 
	
		
			
				|  |  | +        if (orderPayment == null) {
 | 
	
		
			
				|  |  | +            throw new BizException("订单支付信息未找到");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        OmsOrderDetail detail = detail(orderPayment.getOrderNo());
 | 
	
		
			
				|  |  |          if (null == detail) {
 | 
	
		
			
				|  |  |              LOG.error("汇付支付回调,订单未找到。 req is {}", orderNo);
 | 
	
		
			
				|  |  |              throw new BizException("订单未找到");
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (detail.getStatus() == 0) {
 | 
	
		
			
				|  |  |              cancelOrder(detail.getId(), "支付失败");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            // 修改用户付款状态
 | 
	
		
			
				|  |  | +            orderPayment.setStatus(TradeStatusEnum.failed.getCode());
 | 
	
		
			
				|  |  | +            userOrderPaymentService.saveOrUpdate(orderPayment);
 | 
	
		
			
				|  |  |              HttpResponseResult httpResponseResult = webFeignService.updateOrder(notifyMap);
 | 
	
		
			
				|  |  |              if (!httpResponseResult.getStatus()) {
 | 
	
		
			
				|  |  |                  throw new BizException(httpResponseResult.getMsg());
 | 
	
	
		
			
				|  | @@ -785,6 +876,30 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public List<OmsOrderDetail> list(List<String> adapayNoList) {
 | 
	
		
			
				|  |  | +        String adapayNos = adapayNoList.stream().collect(Collectors.joining(","));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        List<OmsOrder> orderList = portalOrderDao.listByAdapayNo(adapayNoList,adapayNos);
 | 
	
		
			
				|  |  | +        //设置数据信息
 | 
	
		
			
				|  |  | +        List<Long> orderIds = orderList.stream().map(OmsOrder::getId).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +        OmsOrderItemExample orderItemExample = new OmsOrderItemExample();
 | 
	
		
			
				|  |  | +        orderItemExample.createCriteria().andOrderIdIn(orderIds);
 | 
	
		
			
				|  |  | +        List<OmsOrderItem> orderItemList = orderItemMapper.selectByExample(orderItemExample);
 | 
	
		
			
				|  |  | +        List<OmsOrderDetail> orderDetailList = new ArrayList<>();
 | 
	
		
			
				|  |  | +        for (OmsOrder omsOrder : orderList) {
 | 
	
		
			
				|  |  | +            OmsOrderDetail orderDetail = new OmsOrderDetail();
 | 
	
		
			
				|  |  | +            BeanUtil.copyProperties(omsOrder, orderDetail);
 | 
	
		
			
				|  |  | +            List<OmsOrderItem> relatedItemList = orderItemList.stream()
 | 
	
		
			
				|  |  | +                                                              .filter(item -> item.getOrderId()
 | 
	
		
			
				|  |  | +                                                                                  .equals(orderDetail.getId()))
 | 
	
		
			
				|  |  | +                                                              .collect(Collectors.toList());
 | 
	
		
			
				|  |  | +            orderDetail.setOrderItemList(relatedItemList);
 | 
	
		
			
				|  |  | +            orderDetailList.add(orderDetail);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return orderDetailList;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  |       * 订单完成
 | 
	
		
			
				|  |  |       *
 | 
	
	
		
			
				|  | @@ -806,6 +921,44 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 退款成功
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    @Transactional
 | 
	
		
			
				|  |  | +    public void paymentRefundSucceededHandle(String payTransNo, String refundAmount, String refundTransNo, String feeAmt) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        LOG.info("refund payTransNo is {}", payTransNo);
 | 
	
		
			
				|  |  | +        if (payTransNo == null) {
 | 
	
		
			
				|  |  | +            return;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        UserOrderRefund userOrderRefund = userOrderRefundMapper.selectByPayTansNo(payTransNo);
 | 
	
		
			
				|  |  | +        userOrderRefund.setArrivalTime(new Date());
 | 
	
		
			
				|  |  | +        userOrderRefund.setStatus(TradeStatusEnum.succeeded.getCode());
 | 
	
		
			
				|  |  | +        userOrderRefund.setTransNo(refundTransNo);
 | 
	
		
			
				|  |  | +        userOrderRefund.setFeeAmt(new BigDecimal(feeAmt));
 | 
	
		
			
				|  |  | +        userOrderRefund.setRefundAmt(new BigDecimal(refundAmount));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        userOrderRefundMapper.updateByPrimaryKeySelective(userOrderRefund);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 退款失败
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    @Transactional
 | 
	
		
			
				|  |  | +    public void paymentRefundFailedHandle(String payTransNo, String msg, String refundTransNo) {
 | 
	
		
			
				|  |  | +        if (payTransNo == null) {
 | 
	
		
			
				|  |  | +            return;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        UserOrderRefund userOrderRefund = userOrderRefundMapper.selectByPayTansNo(payTransNo);
 | 
	
		
			
				|  |  | +        userOrderRefund.setArrivalTime(new Date());
 | 
	
		
			
				|  |  | +        userOrderRefund.setStatus(TradeStatusEnum.failed.getCode());
 | 
	
		
			
				|  |  | +        userOrderRefund.setPayFailMsg(msg);
 | 
	
		
			
				|  |  | +        userOrderRefund.setTransNo(refundTransNo);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        userOrderRefundMapper.updateByPrimaryKeySelective(userOrderRefund);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  |       * 生成18位订单编号:8位日期+2位平台号码+2位支付方式+6位以上自增id
 |