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

支付完成和订阅激活后批量关闭相同类型订单

Bob 4 месяцев назад
Родитель
Сommit
86c9087450

+ 2 - 0
pdf-office-payment/src/main/java/cn/kdan/cloud/pdf/office/payment/mapper/OrderMapper.java

@@ -20,4 +20,6 @@ public interface OrderMapper extends BaseMapper<Order> {
 
     List<OrdersVO> selectOrdersByThirdOrderNo(@Param("thirdOrderNo") String thirdOrderNo);
 
+    List<OrdersVO> getOrderByUser(@Param("userId") String userId, @Param("platform") Integer platform);
+
 }

+ 7 - 0
pdf-office-payment/src/main/java/cn/kdan/cloud/pdf/office/payment/service/OrderService.java

@@ -55,6 +55,13 @@ public interface OrderService extends IService<Order> {
      */
     void closeOrder(String orderId);
 
+    /**
+     * 关闭用户同类型订单
+     * @param userId
+     * @param platform
+     */
+    void closeOrderByUser(String userId, Integer platform);
+
     /**
      * 订单支付成功
      *

+ 24 - 0
pdf-office-payment/src/main/java/cn/kdan/cloud/pdf/office/payment/service/impl/OrderServiceImpl.java

@@ -38,6 +38,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.nacos.common.utils.UuidUtils;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -542,6 +543,29 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         productApi.refundCouponByOrderId(orderId);
     }
 
+    @Override
+    public void closeOrderByUser(String userId, Integer platform) {
+        List<OrdersVO> orderByUser = this.baseMapper.getOrderByUser(userId, platform);
+        if(CollectionUtils.isEmpty(orderByUser)){
+            return;
+        }
+        log.info("关闭用户相同订单:{}", orderByUser);
+        for (OrdersVO orders : orderByUser) {
+            log.info("当前订单信息:{}", orders);
+            if (ObjectUtils.isNotEmpty(orders.getStatus()) && orders.getStatus().equals(OrderConstant.CREATED)) {
+                Order order = new Order();
+                order.setStatus(OrderConstant.CLOSED);
+                order.setId(orders.getId());
+                this.baseMapper.updateById(order);
+            }
+            //删除缓存中的订单
+            deleteTheCacheInTheCacheManager(orders.getEmail() + "-" + orders.getProductId() + "-" + orders.getPayment());
+            deleteTheCacheInTheCacheManager(orders.getUserId() + "-" + orders.getProductId() + "-" + orders.getPayment());
+            // 检查订单优惠券
+            productApi.refundCouponByOrderId(orders.getId());
+        }
+    }
+
     @Override
     public OrderUpdateVO updateOrderSucceeded(OrderSucceededBO orderSucceeded) {
         Order orders = new Order();

+ 2 - 0
pdf-office-payment/src/main/java/cn/kdan/cloud/pdf/office/payment/service/impl/PayCenterWebhookServiceImpl.java

@@ -287,6 +287,8 @@ public class PayCenterWebhookServiceImpl implements PayCenterWebhookService {
                     }
                     //删除缓存中的订单
                     ordersService.deleteTheCacheInTheCacheManager(ordersVO.getUserId() + "-" + ordersVO.getProductId() + "-" + ordersVO.getPayment());
+                    // 关闭用户同类型订单
+                    ordersService.closeOrderByUser(ordersVO.getUserId(), productVO.getPlatform());
                     break;
                 case "2":
                     // 支付失败,有延时队列暂不处理

+ 27 - 0
pdf-office-payment/src/main/resources/mapper/OrderMapper.xml

@@ -102,4 +102,31 @@
         from `order`
         where third_order_no = #{thirdOrderNo}
     </select>
+
+    <select id="getOrderByUser" resultType="cn.kdan.cloud.pdf.office.api.payment.vo.OrdersVO">
+        select o.id,o.app_id,o.subscription_id,o.trade_no,o.third_order_no
+             ,o.price
+             ,o.payment
+             ,o.status
+             ,o.result
+             ,o.created_at
+             ,o.updated_at
+             ,o.page_pay_url
+             ,o.invoice_no
+             ,o.third_trade_no
+             ,o.product_id
+             ,o.discount
+             ,o.reduced_price
+             ,o.is_vpp
+             ,o.type
+             ,o.detail_type
+             ,o.user_id
+             ,o.email,o.pay_number,o.discount_type,o.subscription_type,o.payment_model
+        from `order` o
+        left join `product` p on o.product_id = p.id
+        where o.user_id = #{userId} and o.status = 0
+        <if test="platform != null">
+            and p.platform = #{platform}
+        </if>
+    </select>
 </mapper>