| 
					
				 | 
			
			
				@@ -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 
			 |