|  | @@ -10,6 +10,8 @@ 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;
 | 
	
	
		
			
				|  | @@ -76,6 +78,9 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
 | 
	
		
			
				|  |  |      private PortalOrderDao portalOrderDao;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  | +    private UserOrderRefundMapper userOrderRefundMapper;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  |      private IdGeneratorService idGeneratorService;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
	
		
			
				|  | @@ -665,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
 | 
	
	
		
			
				|  | @@ -801,11 +791,57 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
 | 
	
		
			
				|  |  |          } 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);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      /***
 | 
	
		
			
				|  |  |       * 处理回调-支付失败
 | 
	
	
		
			
				|  | @@ -885,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
 |