| 
					
				 | 
			
			
				@@ -2,10 +2,14 @@ package com.yonge.cooleshow.portal.service.impl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.hutool.core.bean.BeanUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.hutool.core.collection.CollUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.alibaba.fastjson.JSON; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.alibaba.fastjson.JSONObject; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.github.pagehelper.PageHelper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.portal.dao.PortalProductDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.portal.dto.OrderPayReq; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.portal.dto.OrderPayRes; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yonge.toolset.base.exception.BizException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.yonge.cooleshow.enums.PayStatusEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yonge.cooleshow.mall.common.api.CommonPage; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yonge.cooleshow.mall.common.exception.Asserts; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yonge.cooleshow.mall.common.service.RedisService; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -17,11 +21,21 @@ import com.yonge.cooleshow.portal.dao.PortalOrderItemDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yonge.cooleshow.portal.dao.SmsCouponHistoryDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yonge.cooleshow.portal.domain.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yonge.cooleshow.portal.service.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.yonge.cooleshow.sdk.adapay.PaymentSdk; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.yonge.cooleshow.sdk.req.OrderPayReq; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.yonge.cooleshow.sdk.res.OrderPayRes; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.yonge.cooleshow.service.PaymentService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.toolset.payment.base.enums.PaymentClientEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yonge.toolset.utils.string.StringUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.toolset.base.result.BaseResult; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.toolset.payment.base.enums.OpenEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.toolset.payment.base.enums.PayChannelEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.toolset.payment.base.enums.TradeStatusEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.toolset.payment.base.model.DeviceInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.toolset.payment.base.model.DivMember; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.toolset.payment.base.model.OrderDetil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.toolset.payment.base.model.Payment; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.toolset.payment.base.model.callback.PaymentCallBack; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.toolset.payment.core.props.PaymentProperties; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.toolset.payment.core.service.PaymentClient; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.slf4j.Logger; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.slf4j.LoggerFactory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -65,7 +79,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private SmsCouponHistoryMapper couponHistoryMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private RedisService redisService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private String REDIS_KEY_ORDER_ID= "redis.key.orderId"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String REDIS_KEY_ORDER_ID = "redis.key.orderId"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private String REDIS_DATABASE = "redis.database"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private PortalOrderDao portalOrderDao; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -79,18 +93,25 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private UserOrderPaymentService userOrderPaymentService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired(required = true) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private PaymentClient paymentClient; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private PaymentService adapayPaymentService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private PaymentProperties paymentProperties; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private PaymentSdk paymentSdk; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private PmsProductMapper pmsProductMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private PortalProductDao productDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public ConfirmOrderResult generateConfirmOrder(List<Long> cartIds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ConfirmOrderResult result = new ConfirmOrderResult(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //获取购物车信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         UmsMember currentMember = memberService.getCurrentMember(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        List<CartPromotionItem> cartPromotionItemList = cartItemService.listPromotion(currentMember.getId(), cartIds,true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<CartPromotionItem> cartPromotionItemList = cartItemService.listPromotion(currentMember.getId(), cartIds, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         result.setCartPromotionItemList(cartPromotionItemList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //获取用户收货地址列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<UmsMemberReceiveAddress> memberReceiveAddressList = memberReceiveAddressService.list(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -115,7 +136,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //获取购物车及优惠信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         UmsMember currentMember = memberService.getCurrentMember(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<CartPromotionItem> cartPromotionItemList = cartItemService.listPromotion(currentMember.getId(), orderParam.getCartIds(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                                                      true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         for (CartPromotionItem cartPromotionItem : cartPromotionItemList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //生成下单商品信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             OmsOrderItem orderItem = new OmsOrderItem(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -156,7 +177,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             handleCouponAmount(orderItemList, couponHistoryDetail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //判断是否使用积分 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (orderParam.getUseIntegration() == null||orderParam.getUseIntegration().equals(0)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (orderParam.getUseIntegration() == null || orderParam.getUseIntegration().equals(0)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //不使用积分 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             for (OmsOrderItem orderItem : orderItemList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 orderItem.setIntegrationAmount(new BigDecimal(0)); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -177,8 +198,12 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //计算order_item的实付金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         handleRealAmount(orderItemList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //进行库存锁定 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        lockStock(cartPromotionItemList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //进行sku库存锁定 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        lockSkuStock(cartPromotionItemList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 进行商品库存锁定 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        lockProductStock(cartPromotionItemList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //根据商品合计、运费、活动优惠、优惠券、积分计算应付金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         OmsOrder order = new OmsOrder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         StringBuilder cartIds = new StringBuilder(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -237,10 +262,9 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         order.setOrderSn(generateOrderSn(order)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //设置自动收货天数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<OmsOrderSetting> orderSettings = orderSettingMapper.selectByExample(new OmsOrderSettingExample()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(CollUtil.isNotEmpty(orderSettings)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (CollUtil.isNotEmpty(orderSettings)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             order.setAutoConfirmDay(orderSettings.get(0).getConfirmOvertime()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // TODO: 2018/9/3 bill_*,delivery_* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //插入order表和order_item表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         orderMapper.insert(order); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         for (OmsOrderItem orderItem : orderItemList) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -278,17 +302,44 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         orderMapper.updateByPrimaryKeySelective(order); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //恢复所有下单商品的锁定库存,扣减真实库存 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         OmsOrderDetail orderDetail = portalOrderDao.getDetail(orderId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 减sku库存 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         int count = portalOrderDao.updateSkuStock(orderDetail.getOrderItemList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 减商品库存 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        updateProductStock(orderDetail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return count; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     *  减商品库存 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void updateProductStock(OmsOrderDetail orderDetail) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<Long, List<OmsOrderItem>> collect = orderDetail.getOrderItemList() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                   .stream().collect(Collectors.groupingBy(OmsOrderItem::getProductId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<ProductStock> productStockList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (Map.Entry<Long, List<OmsOrderItem>> entry : collect.entrySet()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ProductStock stock = new ProductStock(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            stock.setProductId(entry.getKey()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<OmsOrderItem> value = entry.getValue(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(CollectionUtils.isEmpty(value)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            int sum = value.stream().mapToInt(OmsOrderItem::getProductQuantity).sum(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            stock.setStock(sum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            productStockList.add(stock); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        productDao.updateProductStock(productStockList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public Integer cancelTimeOutOrder() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Integer count=0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Integer count = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         OmsOrderSetting orderSetting = orderSettingMapper.selectByPrimaryKey(1L); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //查询超时、未支付的订单及订单详情 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<OmsOrderDetail> timeOutOrders = portalOrderDao.getTimeOutOrders(orderSetting.getNormalOrderOvertime() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                ,orderSetting.getPayOrderOvertime()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                , orderSetting.getPayOrderOvertime()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (CollectionUtils.isEmpty(timeOutOrders)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return count; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -297,14 +348,14 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (timeOutOrder.getStatus() == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 payingOrderHandle(timeOutOrder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } else if (timeOutOrder.getStatus() == 6) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                cancelOrder(timeOutOrder.getId(), "超时取消"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                cancelOrder(timeOutOrder.getId(), "超时取消", null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return timeOutOrders.size(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public void cancelOrder(Long orderId, String message) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void cancelOrder(Long orderId, String message, PaymentCallBack data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //查询未付款的取消订单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         OmsOrderExample example = new OmsOrderExample(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         example.createCriteria().andIdEqualTo(orderId).andDeleteStatusEqualTo(0); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -313,7 +364,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         OmsOrder cancelOrder = cancelOrderList.get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (cancelOrder != null && (cancelOrder.getStatus() == 0 || cancelOrder.getStatus() == 6) ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (cancelOrder != null && (cancelOrder.getStatus() == 0 || cancelOrder.getStatus() == 6)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //修改订单状态为取消 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             cancelOrder.setStatus(4); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             orderMapper.updateByPrimaryKeySelective(cancelOrder); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -332,7 +383,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 memberService.updateIntegration(cancelOrder.getMemberId(), member.getIntegration() + cancelOrder.getUseIntegration()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 发起关单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            userOrderPaymentService.closePayment(cancelOrder.getOrderSn(),message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            userOrderPaymentService.closePayment(cancelOrder.getOrderSn(),message,data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -350,10 +401,10 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public void confirmReceiveOrder(Long orderId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         UmsMember member = memberService.getCurrentMember(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         OmsOrder order = orderMapper.selectByPrimaryKey(orderId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(!member.getId().equals(order.getMemberId())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!member.getId().equals(order.getMemberId())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Asserts.fail("不能确认他人订单!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(order.getStatus()!=2){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (order.getStatus() != 2) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Asserts.fail("该订单还未发货!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         order.setStatus(3); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -364,16 +415,16 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public CommonPage<OmsOrderDetail> list(String status, Integer pageNum, Integer pageSize) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(status.equals("-1")){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (status.equals("-1")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             status = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         UmsMember member = memberService.getCurrentMember(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        PageHelper.startPage(pageNum,pageSize); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        PageHelper.startPage(pageNum, pageSize); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         OmsOrderExample orderExample = new OmsOrderExample(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         OmsOrderExample.Criteria criteria = orderExample.createCriteria(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         criteria.andDeleteStatusEqualTo(0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .andMemberIdEqualTo(member.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(status != null && !StringUtil.isEmpty(status)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (status != null && !StringUtil.isEmpty(status)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             List<Long> list = StringUtil.toLongList(status); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             List<Integer> collect = list.stream().map(Long::intValue).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             criteria.andStatusIn(collect); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -387,7 +438,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         resultPage.setPageSize(orderPage.getPageSize()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         resultPage.setTotal(orderPage.getTotal()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         resultPage.setTotalPage(orderPage.getTotalPage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(CollUtil.isEmpty(orderList)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (CollUtil.isEmpty(orderList)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return resultPage; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //设置数据信息 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -398,7 +449,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<OmsOrderDetail> orderDetailList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         for (OmsOrder omsOrder : orderList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             OmsOrderDetail orderDetail = new OmsOrderDetail(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            BeanUtil.copyProperties(omsOrder,orderDetail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            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); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -414,7 +465,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         example.createCriteria().andOrderIdEqualTo(orderId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<OmsOrderItem> orderItemList = orderItemMapper.selectByExample(example); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         OmsOrderDetail orderDetail = new OmsOrderDetail(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        BeanUtil.copyProperties(omsOrder,orderDetail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BeanUtil.copyProperties(omsOrder, orderDetail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         orderDetail.setOrderItemList(orderItemList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return orderDetail; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -433,7 +484,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         example.createCriteria().andOrderIdEqualTo(omsOrder.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<OmsOrderItem> orderItemList = orderItemMapper.selectByExample(example); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         OmsOrderDetail orderDetail = new OmsOrderDetail(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        BeanUtil.copyProperties(omsOrder,orderDetail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BeanUtil.copyProperties(omsOrder, orderDetail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         orderDetail.setOrderItemList(orderItemList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return orderDetail; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -442,13 +493,13 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public void deleteOrder(Long orderId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         UmsMember member = memberService.getCurrentMember(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         OmsOrder order = orderMapper.selectByPrimaryKey(orderId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(!member.getId().equals(order.getMemberId())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!member.getId().equals(order.getMemberId())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Asserts.fail("不能删除他人订单!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(order.getStatus()==3||order.getStatus()==4){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (order.getStatus() == 3 || order.getStatus() == 4) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             order.setDeleteStatus(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             orderMapper.updateByPrimaryKey(order); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Asserts.fail("只能删除已完成或已关闭的订单!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -468,56 +519,98 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             orderPayRes.setMessage("订单已付款或已关闭"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return orderPayRes; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        payReq.setOrderPrice(detail.getPayAmount()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         UserOrderPayment userOrderPayment = userOrderPaymentService 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .getByOrderNo(detail.getOrderSn(), payReq.getPayChannel(), PayStatusEnum.pending); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .getByOrderNo(detail.getOrderSn(), payReq.getPayChannel(), TradeStatusEnum.pending); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (userOrderPayment == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // 支付订单号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            payReq.setOrderNo(generateOrderSn(detail)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (userOrderPayment != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 拉起原有的支付 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            payReq.setPayInfo(userOrderPayment.getPayInfo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return adapayPaymentService.orderContinue(payReq); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            orderPayRes = new OrderPayRes(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            orderPayRes.setPay_info(userOrderPayment.getPayInfo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            orderPayRes.setPayChannel(userOrderPayment.getPayChannel()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            orderPayRes.setPay_amt(userOrderPayment.getPayAmt().setScale(2, RoundingMode.HALF_UP).toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return orderPayRes; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //构建汇付统一下单请求 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        OpenEnum openType = OpenEnum.valueOf(paymentProperties.getOpenType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Payment payment = new Payment(openType, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                PaymentClientEnum.valueOf(payReq.getPaymentClient()), payReq.getPayChannel()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        payment.setPaymentNo(generateOrderSn(detail)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        payment.setOrderNo(payReq.getOrderNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        payment.setOrderTitle("酷乐秀商城订单编号-" + detail.getOrderSn()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        payment.setOrderDesc("酷乐秀商城订单编号-" + detail.getOrderSn()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //封装订单详情 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<OrderDetil> orderDetils = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (OmsOrderItem orderDetailVo : detail.getOrderItemList()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            orderDetils.add(new OrderDetil(orderDetailVo.getId().toString(), orderDetailVo.getProductName(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    orderDetailVo.getProductQuantity(), orderDetailVo.getRealAmount().toString())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        payment.setOrderDetils(orderDetils); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        payment.setPayAmt(detail.getPayAmount().setScale(2, RoundingMode.HALF_UP).toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        payment.setDescription(payReq.getReason()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (OpenEnum.ADAPAY.equals(openType)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //创建分账对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            DivMember div_member = new DivMember(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            div_member.setMember_id("0"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            div_member.setAmount(detail.getPayAmount().setScale(2, RoundingMode.HALF_UP).toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            div_member.setFee_flag("Y"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<DivMember> div_members = Arrays.asList(div_member); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            payment.setDivMembers(div_members); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //前端设备信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            DeviceInfo deviceInfo = new DeviceInfo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            deviceInfo.setDevice_ip(payReq.getIpAddress()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            payment.setDeviceInfo(deviceInfo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (PayChannelEnum.wx_lite.equals(payReq.getPayChannel())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Map<String, Object> expend = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                expend.put("open_id", payReq.getOpenId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                payment.setExpend(expend); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        payReq.setGoodTitle("酷乐秀商城订单编号-" + detail.getOrderSn()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        payReq.setGoodDesc("酷乐秀商城订单编号-" + detail.getOrderSn()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 支付中的返回拉起信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        orderPayRes = adapayPaymentService.orderPay(payReq); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (!orderPayRes.isStatus()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BaseResult<Payment> executePayment = paymentClient.executePayment(payment); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!executePayment.getStatus()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 异常将取消订单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            cancelOrder(detail.getId(),orderPayRes.getMessage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            throw new BizException(orderPayRes.getMessage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cancelOrder(detail.getId(), executePayment.getMsg(), null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException(executePayment.getMsg()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (!orderPayRes.getPay_amt().equals(detail.getPayAmount().setScale(2, RoundingMode.HALF_UP).toString())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            cancelOrder(detail.getId(),"订单金额和实际支付金额不符"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!executePayment.getData().getPayAmt().equals(detail.getPayAmount().setScale(2, RoundingMode.HALF_UP).toString())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cancelOrder(detail.getId(), "订单金额和实际支付金额不符", null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             throw new BizException("订单金额和实际支付金额不符"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        saveOrderPayment(executePayment.getData(), detail,payReq.getPaymentClient()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return orderPayRes; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void saveOrderPayment(Payment payment, OmsOrderDetail detail,String paymentClient) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        UserOrderPayment userOrderPayment; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         OmsOrder omsOrder = new OmsOrder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         omsOrder.setId(detail.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (orderPayRes.getPayStatus().getCode().equals(PayStatusEnum.pending.getCode())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            omsOrder.setStatus(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            orderMapper.updateByPrimaryKeySelective(omsOrder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // 保存订单支付表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            userOrderPayment = new UserOrderPayment(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            userOrderPayment.setOrderNo(detail.getOrderSn()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            userOrderPayment.setAdapayNo(orderPayRes.getOrderNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            userOrderPayment.setPayChannel(orderPayRes.getPayChannel()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            userOrderPayment.setTransNo(orderPayRes.getTransNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            userOrderPayment.setPayAmt(new BigDecimal(orderPayRes.getPay_amt())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            userOrderPayment.setPayInfo(orderPayRes.getPay_info()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            userOrderPayment.setStatus(PayStatusEnum.pending.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            userOrderPayment.setPayFailMsg(orderPayRes.getMessage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            userOrderPayment.setCreateTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            userOrderPayment.setUpdateTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            userOrderPaymentService.saveOrUpdate(userOrderPayment); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // 异常将取消订单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            cancelOrder(detail.getId(), orderPayRes.getMessage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return orderPayRes; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        omsOrder.setStatus(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        orderMapper.updateByPrimaryKeySelective(omsOrder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 保存订单支付表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        userOrderPayment = new UserOrderPayment(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        userOrderPayment.setPaymentClient(paymentClient); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        userOrderPayment.setOpenType(paymentProperties.getOpenType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        userOrderPayment.setOrderNo(detail.getOrderSn()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        userOrderPayment.setAdapayNo(payment.getPaymentNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        userOrderPayment.setPayChannel(payment.getPayChannel().getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        userOrderPayment.setTransNo(payment.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        userOrderPayment.setPayAmt(new BigDecimal(payment.getPayAmt())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        userOrderPayment.setPayInfo(payment.getPayInfo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        userOrderPayment.setStatus(TradeStatusEnum.pending.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        userOrderPayment.setPayFailMsg(""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        userOrderPayment.setCreateTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        userOrderPayment.setUpdateTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        userOrderPaymentService.saveOrUpdate(userOrderPayment); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -526,20 +619,22 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public void orderCallback(String data, String type) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        JSONObject hfRes = JSONObject.parseObject(data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (type.equals("payment.succeeded")) {//支付成功 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            paymentSucceededHandle(hfRes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } else if (type.equals("payment.failed")) {//支付失败 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            paymentFailedHandle(hfRes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } else if (type.equals("payment.close.succeeded")) {//支付关单成功 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            paymentCloseSucceededHandle(hfRes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } else if (type.equals("payment.close.failed")) {//支付关单失败 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            paymentCloseFailedHandle(hfRes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void executePaymentCallBack(PaymentCallBack data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (TradeStatusEnum.succeeded.equals(data.getStatus())) {//支付成功 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            paymentSucceededHandle(data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else if (TradeStatusEnum.failed.equals(data.getStatus())) {//支付失败 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            paymentFailedHandle(data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void closePaymentCallBack(PaymentCallBack data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (TradeStatusEnum.succeeded.equals(data.getStatus())) {//关单成功 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            paymentCloseSucceededHandle(data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else if (TradeStatusEnum.failed.equals(data.getStatus())) {//关单失败 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            paymentCloseFailedHandle(data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /*** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -548,17 +643,18 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param: hfRes 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @updateTime 2022/4/27 15:09 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private void paymentSucceededHandle(JSONObject hfRes) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void paymentSucceededHandle(PaymentCallBack data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //订单完成 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        OmsOrder detail = detail(hfRes.getString("order_no")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (null == detail) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            log.error("汇付支付回调,订单未找到。 req is {}", hfRes.toJSONString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        UserOrderPayment userOrderPayment = userOrderPaymentService.getByAdapayNo(data.getPaymentNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (null == userOrderPayment) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.error("汇付支付回调,订单未找到。 req is {}", JSON.toJSONString(data)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        OmsOrderDetail detail = detail(userOrderPayment.getOrderNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (detail.getStatus() == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            orderSuccess(detail, hfRes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            orderSuccess(detail, data,data.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            log.error("汇付支付回调,订单状态异常。 req is {}", hfRes.toJSONString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.error("汇付支付回调,订单状态异常。 req is {}", detail.getOrderSn()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -568,19 +664,24 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param: hfRes 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @updateTime 2022/4/27 15:09 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private void paymentFailedHandle(JSONObject hfRes) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void paymentFailedHandle(PaymentCallBack data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //订单完成 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        OmsOrder detail = detail(hfRes.getString("order_no")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        UserOrderPayment userOrderPayment = userOrderPaymentService.getByAdapayNo(data.getPaymentNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (null == userOrderPayment) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.error("汇付支付回调,订单未找到。 req is {}", JSON.toJSONString(data)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        OmsOrderDetail detail = detail(userOrderPayment.getOrderNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (null == detail) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            log.error("汇付支付回调,订单未找到。 req is {}", hfRes.toJSONString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.error("汇付支付回调,订单未找到。 req is {}", JSON.toJSONString(data)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (detail.getStatus() == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            cancelOrder(detail.getId(), "支付回调失败"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cancelOrder(detail.getId(), data.getErrMsg(),data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            log.error("汇付支付回调,订单状态异常。 req is {}", hfRes.toJSONString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.error("汇付支付回调,订单状态异常。 req is {}", JSON.toJSONString(data)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -590,13 +691,15 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param: hfRes 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @updateTime 2022/4/27 15:33 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private void paymentCloseSucceededHandle(JSONObject hfRes) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        UserOrderPayment orderPayment = userOrderPaymentService.getByTranNo(hfRes.getString("payment_id")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void paymentCloseSucceededHandle(PaymentCallBack data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        UserOrderPayment orderPayment = userOrderPaymentService.getByAdapayNo(data.getPaymentNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (null == orderPayment) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        orderPayment.setStatus(PayStatusEnum.succeeded.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        orderPayment.setUpdateTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        orderPayment.setStatus(TradeStatusEnum.failed.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        orderPayment.setTransNo(data.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        orderPayment.setCloseStatus(TradeStatusEnum.succeeded.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        orderPayment.setCloseTime(data.getClosePaymentCallBack().getTradeTime()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         userOrderPaymentService.saveOrUpdate(orderPayment); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -606,47 +709,60 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param: hfRes 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @updateTime 2022/4/27 15:33 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private void paymentCloseFailedHandle(JSONObject hfRes) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        UserOrderPayment orderPayment = userOrderPaymentService.getByTranNo(hfRes.getString("payment_id")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void paymentCloseFailedHandle(PaymentCallBack data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        UserOrderPayment orderPayment = userOrderPaymentService.getByAdapayNo(data.getPaymentNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (null == orderPayment) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        orderPayment.setStatus(PayStatusEnum.failed.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        orderPayment.setPayFailMsg("支付关单回调失败-" + hfRes.getString("error_msg")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        orderPayment.setStatus(TradeStatusEnum.failed.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        orderPayment.setCloseStatus(TradeStatusEnum.failed.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        orderPayment.setCloseTime(data.getClosePaymentCallBack().getTradeTime()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        orderPayment.setPayFailMsg("支付关单回调失败-" + data.getErrMsg()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         orderPayment.setUpdateTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         userOrderPaymentService.saveOrUpdate(orderPayment); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /*** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 处理支付中订单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @author liweifan 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param: userOrder 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @updateTime 2022/4/13 16:51 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     void payingOrderHandle(OmsOrder userOrder) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //判断汇付订单状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         UserOrderPayment orderPayment = userOrderPaymentService.getByOrderNoAndStatusPaying(userOrder.getOrderSn()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (null == orderPayment) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            cancelOrder(userOrder.getId(), "支付超时"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cancelOrder(userOrder.getId(), "支付超时", null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        OmsOrderDetail detail = detail(orderPayment.getOrderNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            Map<String, Object> resMap = paymentSdk.queryPayment(orderPayment.getTransNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Payment param = new Payment(OpenEnum.valueOf(orderPayment.getOpenType()), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    PaymentClientEnum.valueOf(orderPayment.getPaymentClient()), PayChannelEnum.valueOf(orderPayment.getPayChannel())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            param.setId(orderPayment.getTransNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            param.setPaymentNo(orderPayment.getAdapayNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            BaseResult<Payment> res = paymentClient.queryPayment(param); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //支付成功 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (res.getStatus() && TradeStatusEnum.succeeded.getCode().equals(res.getData().getStatus()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    && (detail.getStatus() == 0 || detail.getStatus() == 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                orderSuccess(detail,res.getData().getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //支付失败 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (PayStatusEnum.failed.getCode().equals(resMap.get("status").toString())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                cancelOrder(userOrder.getId(), "支付失败"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }else if (PayStatusEnum.succeeded.getCode().equals(resMap.get("status").toString())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // 支付成功 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                orderSuccess(userOrder,null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                cancelOrder(userOrder.getId(), "支付超时"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!res.getStatus()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                cancelOrder(userOrder.getId(), res.getMsg(), null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cancelOrder(userOrder.getId(), "支付超时", null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             log.error("轮询处理支付中订单异常,异常参数: {}", JSONObject.toJSONString(userOrder)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    void orderSuccess(OmsOrder detail, String tranId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        orderSuccess(detail,null,tranId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 订单完成 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -654,27 +770,38 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @updateTime 2022/4/13 17:17 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    void orderSuccess(OmsOrder detail, JSONObject hfRes) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    void orderSuccess(OmsOrder detail, PaymentCallBack data, String tranId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //更新订单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         UserOrderPayment orderPayment = userOrderPaymentService.getByOrderNoAndStatusPaying(detail.getOrderSn()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (orderPayment.getPayChannel().equals("alipay")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (orderPayment == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.error("支付回调,支付中订单未找到。 orderNo is {}",detail.getOrderSn()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (data != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String pay_amt = data.getExecutePaymentCallBack().getPayAmt(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!pay_amt.equals(detail.getPayAmount().setScale(2, RoundingMode.HALF_UP).toString())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                orderPayment.setPayFailMsg("订单金额和实际支付金额不符"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (orderPayment.getPayChannel().equals("alipay") || orderPayment.getPayChannel().equals("ali_app")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             paySuccess(detail.getId(),1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } else if (orderPayment.getPayChannel().equals("wx_lite")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else if (orderPayment.getPayChannel().equals("wx_lite") || orderPayment.getPayChannel().equals("wx_app")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             paySuccess(detail.getId(),2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        String pay_amt = hfRes.getString("pay_amt"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (!pay_amt.equals(detail.getPayAmount().setScale(2, RoundingMode.HALF_UP).toString())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            orderPayment.setPayFailMsg("订单金额和实际支付金额不符"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        orderPayment.setStatus(PayStatusEnum.succeeded.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        orderPayment.setStatus(TradeStatusEnum.succeeded.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         orderPayment.setArrivalTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (null != hfRes) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        orderPayment.setTransNo(tranId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (null != data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                orderPayment.setPayAmt(new BigDecimal(pay_amt)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                orderPayment.setFeeAmt(new BigDecimal(hfRes.getString("fee_amt"))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                orderPayment.setArrivalTime(data.getExecutePaymentCallBack().getTradeTime()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                orderPayment.setTransNo(data.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                orderPayment.setPayAmt(new BigDecimal(data.getExecutePaymentCallBack().getPayAmt())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                orderPayment.setFeeAmt(new BigDecimal(data.getExecutePaymentCallBack().getFeeAmt())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                log.error("完成订单,付款单金额格式化失败,参数{}", hfRes.toJSONString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.error("完成订单,付款单金额格式化失败,参数{}", JSON.toJSONString(data)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         userOrderPaymentService.saveOrUpdate(orderPayment); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -687,7 +814,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private String generateOrderSn(OmsOrder order) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         StringBuilder sb = new StringBuilder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String date = new SimpleDateFormat("yyyyMMdd").format(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        String key = REDIS_DATABASE+":"+ REDIS_KEY_ORDER_ID + date; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String key = REDIS_DATABASE + ":" + REDIS_KEY_ORDER_ID + date; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Long increment = redisService.incr(key, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         sb.append(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         sb.append(String.format("%02d", order.getSourceType())); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -972,11 +1099,35 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 锁定下单商品的所有库存 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private void lockStock(List<CartPromotionItem> cartPromotionItemList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void lockSkuStock(List<CartPromotionItem> cartPromotionItemList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         for (CartPromotionItem cartPromotionItem : cartPromotionItemList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (cartPromotionItem.getProductSkuId() == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             int i = skuStockMapper.lockStock(cartPromotionItem.getProductSkuId(),cartPromotionItem.getQuantity()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (i == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                Asserts.fail("库存不足,无法下单"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Asserts.fail("库存不足"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 锁定下单商品的所有库存 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void lockProductStock(List<CartPromotionItem> cartPromotionItemList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<Long, List<CartPromotionItem>> collect = cartPromotionItemList.stream() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                  .collect(Collectors.groupingBy(CartPromotionItem::getProductId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (Map.Entry<Long, List<CartPromotionItem>> entry : collect.entrySet()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<CartPromotionItem> value = entry.getValue(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(CollectionUtils.isEmpty(value)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            int sum = value.stream().mapToInt(CartPromotionItem::getQuantity).sum(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (sum >0 ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                int i = pmsProductMapper.lockStock(entry.getKey(),sum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (i == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    Asserts.fail("库存不足"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -986,7 +1137,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private boolean hasStock(List<CartPromotionItem> cartPromotionItemList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         for (CartPromotionItem cartPromotionItem : cartPromotionItemList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (cartPromotionItem.getRealStock()==null||cartPromotionItem.getRealStock() <= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (cartPromotionItem.getRealStock() == null || cartPromotionItem.getRealStock() <= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 |