Просмотр исходного кода

代码优化(小程序下单退单接口)

lishiqiang 1 неделя назад
Родитель
Сommit
b0e5971af6

+ 9 - 0
ship-module-trade/ship-module-trade-api/src/main/java/com/yc/ship/module/trade/enums/TradeMqConstants.java

@@ -45,4 +45,13 @@ public class TradeMqConstants {
     public static final String DL_EXCHANGE_INSURANCE ="dl_exchange_insurance";
     public static final String DL_EXCHANGE_INSURANCE ="dl_exchange_insurance";
 
 
     public static final String DL_INSURANCE_QUERY ="dl.trade.insurance.query";
     public static final String DL_INSURANCE_QUERY ="dl.trade.insurance.query";
+
+    //********以下是才用插件方式********//
+    /**
+     * 交易延迟消息交换机
+     * 用于:支付超时通知
+     */
+    public static final String EXCHANGE_ORDER_DELAYED_MESSAGE = "exchange_trade_order_delayed_message";
+
+    public static final String DELAY_PLUGIN_ROUTE_ORDER_PAY ="delay.plugin.trade.order.pay";
 }
 }

+ 26 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/framework/mq/TradeMqConfig.java

@@ -53,6 +53,8 @@ public class TradeMqConfig {
      */
      */
     public static final String DL_QUEUE_INSURANCE_QUERY ="dl_queue_insurance_query";
     public static final String DL_QUEUE_INSURANCE_QUERY ="dl_queue_insurance_query";
 
 
+    public static final String DELAY_PLUGIN_QUEUE_ORDER_PAY ="delay_plugin_queue_order_pay";
+
 
 
     @Bean
     @Bean
     public RabbitTemplate rabbitTemplate(CachingConnectionFactory connectionFactory) {
     public RabbitTemplate rabbitTemplate(CachingConnectionFactory connectionFactory) {
@@ -342,4 +344,28 @@ public class TradeMqConfig {
     Binding bindInsuranceQueryQueue(@Qualifier("insuranceQueryQueue") Queue queue, @Qualifier("insuranceQueryExchange") CustomExchange exchange) {
     Binding bindInsuranceQueryQueue(@Qualifier("insuranceQueryQueue") Queue queue, @Qualifier("insuranceQueryExchange") CustomExchange exchange) {
         return BindingBuilder.bind(queue).to(exchange).with(DL_QUEUE_INSURANCE_QUERY).noargs();
         return BindingBuilder.bind(queue).to(exchange).with(DL_QUEUE_INSURANCE_QUERY).noargs();
     }
     }
+
+    @Bean(name = "tradeDelayedMessageExchange")
+    public CustomExchange tradeDelayedMessageExchange(){
+        Map<String, Object> args = new HashMap<>();
+        args.put("x-delayed-type", "direct"); // 指定内部路由类型
+        CustomExchange exchange = new CustomExchange(
+                EXCHANGE_ORDER_DELAYED_MESSAGE,                 // 交换机名称
+                "x-delayed-message",              // 固定类型
+                true,                             // 持久化
+                false,                            // 自动删除
+                args
+        );
+        return exchange;
+    }
+
+    @Bean(name = "orderPayDelayPluginQueue")
+    public Queue orderPayDelayPluginQueue(){
+        return new Queue(DELAY_PLUGIN_QUEUE_ORDER_PAY);
+    }
+
+    @Bean
+    Binding bindOrderPayDelayPluginQueue(@Qualifier("orderPayDelayPluginQueue") Queue queue, @Qualifier("tradeDelayedMessageExchange") CustomExchange exchange) {
+        return BindingBuilder.bind(queue).to(exchange).with(DELAY_PLUGIN_ROUTE_ORDER_PAY).noargs();
+    }
 }
 }

+ 14 - 1
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/framework/mq/TradePublishUtils.java

@@ -84,7 +84,19 @@ public class TradePublishUtils {
             return message;
             return message;
         },correlationData);
         },correlationData);
     }
     }
-
+    /**
+     * 发布订单支付延迟消息,用于处理支付超时情况,插件方式
+     * @param data 消息体
+     * @param delay 延迟时间 毫秒
+     */
+    public void publishOrderPayDelayMsgV2(String data, int delay){
+        CorrelationData correlationData = new CorrelationData(data+"_payDelayPluginMsg");
+        template.convertAndSend(EXCHANGE_ORDER_DELAYED_MESSAGE, DELAY_PLUGIN_ROUTE_ORDER_PAY, data, message -> {
+            // 设置延迟毫秒值
+            message.getMessageProperties().setDelay((delay <= 0 ? 60 * 1000 : delay));
+            return message;
+        },correlationData);
+    }
     /**
     /**
      * 发布供应商退款成功消息
      * 发布供应商退款成功消息
      * @param message
      * @param message
@@ -129,6 +141,7 @@ public class TradePublishUtils {
         },correlationData);
         },correlationData);
     }
     }
 
 
+
     /**
     /**
      * 发布核销订单成功消息
      * 发布核销订单成功消息
      *
      *

+ 16 - 1
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/impl/TradeOrderServiceImpl.java

@@ -49,6 +49,7 @@ import com.yc.ship.module.trade.dal.mysql.order.TradeOrderRoomModelMapper;
 import com.yc.ship.module.trade.dal.mysql.order.TradeVisitorMapper;
 import com.yc.ship.module.trade.dal.mysql.order.TradeVisitorMapper;
 import com.yc.ship.module.trade.enums.*;
 import com.yc.ship.module.trade.enums.*;
 import com.yc.ship.module.trade.framework.annotation.TradeOrderLog;
 import com.yc.ship.module.trade.framework.annotation.TradeOrderLog;
+import com.yc.ship.module.trade.framework.common.ConfigUtils;
 import com.yc.ship.module.trade.framework.common.ExceptionUtils;
 import com.yc.ship.module.trade.framework.common.ExceptionUtils;
 import com.yc.ship.module.trade.framework.mq.TradePublishUtils;
 import com.yc.ship.module.trade.framework.mq.TradePublishUtils;
 import com.yc.ship.module.trade.service.order.*;
 import com.yc.ship.module.trade.service.order.*;
@@ -151,6 +152,9 @@ public class TradeOrderServiceImpl implements TradeOrderService {
     @Resource
     @Resource
     private ResourceRouteService resourceRouteService;
     private ResourceRouteService resourceRouteService;
 
 
+    @Resource
+    private ConfigUtils configUtils;
+
 
 
     @Override
     @Override
     public PageResult<TradeOrderRespVO> getPlatOrderPage(TradeOrderPageReqVO pageReqVO) {
     public PageResult<TradeOrderRespVO> getPlatOrderPage(TradeOrderPageReqVO pageReqVO) {
@@ -1206,7 +1210,18 @@ public class TradeOrderServiceImpl implements TradeOrderService {
         //执行下单后处理器
         //执行下单后处理器
         tradeOrderHandlers.forEach(handler -> handler.afterOrderCreate(tradeOrderBO));
         tradeOrderHandlers.forEach(handler -> handler.afterOrderCreate(tradeOrderBO));
         if (tradeOrderBO.getTradeOrderDO().getSellMethod() == 3) {
         if (tradeOrderBO.getTradeOrderDO().getSellMethod() == 3) {
-            tradePublishUtils.publishOrderCreateSuccessMsg(tradeOrderBO.getTradeOrderDO().getId().toString());
+            //支付倒计时
+            Integer payTimeOut;
+            if(ObjectUtil.equal(tradeOrderBO.getTradeOrderDO().getSellMethod(),SellMethodEnum.OTA.getType())){
+                payTimeOut = configUtils.getPayTimeOut(Long.parseLong(tradeOrderBO.getTradeOrderDO().getSourceId()));
+            }else{
+                payTimeOut = configUtils.getPayTimeOut();
+            }
+            //普通方式
+//            tradePublishUtils.publishOrderPayDelayMsg(tradeOrderBO.getTradeOrderDO().getId().toString(),payTimeOut*60000);
+            //插件方式
+            tradePublishUtils.publishOrderPayDelayMsgV2(tradeOrderBO.getTradeOrderDO().getId().toString(),payTimeOut*60000);
+
         }
         }
         //支付倒计时--不超时,有预订单
         //支付倒计时--不超时,有预订单
     }
     }

+ 8 - 4
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/otc/impl/AppOtcTradeOrderServiceImpl.java

@@ -33,6 +33,7 @@ import com.yc.ship.module.trade.enums.PayAccountTypeEnum;
 import com.yc.ship.module.trade.enums.SellMethodEnum;
 import com.yc.ship.module.trade.enums.SellMethodEnum;
 import com.yc.ship.module.trade.enums.TradeOrderOperateTypeEnum;
 import com.yc.ship.module.trade.enums.TradeOrderOperateTypeEnum;
 import com.yc.ship.module.trade.framework.annotation.TradeOrderLog;
 import com.yc.ship.module.trade.framework.annotation.TradeOrderLog;
+import com.yc.ship.module.trade.framework.common.TradeOrderLogUtils;
 import com.yc.ship.module.trade.framework.mq.TradePublishUtils;
 import com.yc.ship.module.trade.framework.mq.TradePublishUtils;
 import com.yc.ship.module.trade.service.order.TradeOrderService;
 import com.yc.ship.module.trade.service.order.TradeOrderService;
 import com.yc.ship.module.trade.service.orderjzdetail.OrderJzDetailService;
 import com.yc.ship.module.trade.service.orderjzdetail.OrderJzDetailService;
@@ -48,10 +49,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeUnit;
 
 
 import static com.yc.ship.framework.security.core.util.SecurityFrameworkUtils.getLoginUserNickname;
 import static com.yc.ship.framework.security.core.util.SecurityFrameworkUtils.getLoginUserNickname;
@@ -265,7 +263,13 @@ public class AppOtcTradeOrderServiceImpl implements AppOtcTradeOrderService {
                 tradeOrderRoomModelMapper.insertBatch(tradeOrderRoomDOList);
                 tradeOrderRoomModelMapper.insertBatch(tradeOrderRoomDOList);
             }
             }
             // TODO:需要发布订单超时mq
             // TODO:需要发布订单超时mq
+            Integer orderStatus = result.getCheckedData().getOrderStatus();
+            //支付倒计时--不超时,有预订单
+            Map<String, Object> append = TradeOrderLogUtils.append("result", "小程序订单创建成功");
+            append.put("content", "");
+            tradePublishUtils.publishOrderCreateSuccessMsg(orderId + "");
             OtcTradeOrderCreateRespVO respVO = TradeOrderConvert.INSTANCE.convert(result.getData());
             OtcTradeOrderCreateRespVO respVO = TradeOrderConvert.INSTANCE.convert(result.getData());
+            TradeOrderLogUtils.setOrderInfo(orderId, null, orderStatus, append);
             return CommonResult.success(respVO);
             return CommonResult.success(respVO);
         } finally {
         } finally {
             if (lock.isHeldByCurrentThread() && lock.isLocked()) {
             if (lock.isHeldByCurrentThread() && lock.isLocked()) {

+ 1 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/refund/impl/TradeRefundServiceImpl.java

@@ -230,6 +230,7 @@ public class TradeRefundServiceImpl implements TradeRefundService {
 //            result.setData(respDTO);
 //            result.setData(respDTO);
 //            return result;
 //            return result;
 //        }
 //        }
+        submitRefundAudit(tradeRefundBO);
         //4.2 供应商退款成功回调, 发起对应渠道退款
         //4.2 供应商退款成功回调, 发起对应渠道退款
         tradeSupplierCallbackService.afterAllRefund(tradeRefundBO);
         tradeSupplierCallbackService.afterAllRefund(tradeRefundBO);
         return CommonResult.success(respDTO);
         return CommonResult.success(respDTO);