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