zoujiajian преди 1 година
родител
ревизия
beadfc5d18

+ 16 - 0
netflix-dao/src/main/java/com/cyksj/mapper/ZfbShopOrderDayLimitMapper.java

@@ -0,0 +1,16 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.ZfbShopOrderDayLimit;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: ZfbShopOrderDayLimitMapper
+ * 创建者: JavaZou
+ * 创建时间:2024/11/26 11:40
+ */
+public interface ZfbShopOrderDayLimitMapper extends BaseMapper<ZfbShopOrderDayLimit> {
+	Integer decrRemainOrdersById(Long id);
+
+	void incrDayLimitRemainOrders(String shopId);
+}

+ 20 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/ZfbShopOrderDayLimit.java

@@ -0,0 +1,20 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: ZfbShopOrderDayLimit
+ * 创建者: JavaZou
+ * 创建时间:2024/11/26 11:40
+ */
+@Getter
+@Setter
+public class ZfbShopOrderDayLimit extends BaseEntity{
+	private String appId;
+
+	private Integer orders;
+
+	private Integer remainOrders;
+}

+ 12 - 0
netflix-dao/src/main/resources/mapper/ZfbShopOrderDayLimitMapper.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.cyksj.mapper.ZfbShopOrderDayLimitMapper">
+
+    <update id="decrRemainOrdersById">
+        update zfb_shop_order_day_limit set remain_orders = remain_orders - 1 where id = #{id} and remain_orders > 0
+    </update>
+
+    <update id="incrDayLimitRemainOrders">
+        update zfb_shop_order_day_limit set remain_orders = remain_orders + 1 where app_id = #{shopId} and remain_orders >= 0
+    </update>
+</mapper>

+ 4 - 0
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -350,6 +350,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 	private final UserMirrorShopDistributeWaitingSendPointsMapper userMirrorShopDistributeWaitingSendPointsMapper;
 
+	private final ZfbShopOrderDayLimitMapper zfbShopOrderDayLimitMapper;
+
 	private final List<String> noChekGoodsTemp = List.of("Apple One", "Youtube", "Spotify");
 
 	@Transactional(rollbackFor = Throwable.class)
@@ -992,6 +994,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 				if (gcCash != null && gcCash.compareTo(BigDecimal.ZERO) > 0) {
 					giftCardOrderUseRecordService.returnGiftCardCash(orderDon.getId());
 				}
+				//恢复支付宝每日限单数
+				zfbShopOrderDayLimitMapper.incrDayLimitRemainOrders(orderDon.getShopId());
 			}
 		}
 	}

+ 27 - 2
netflix-service/src/main/java/com/cyksj/service/pay/impl/AliPayCommonServiceImpl.java

@@ -38,6 +38,7 @@ import org.springframework.stereotype.Service;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.Date;
+import java.util.List;
 import java.util.Optional;
 
 /*
@@ -76,6 +77,8 @@ public class AliPayCommonServiceImpl implements AliPayCommonService {
 
 	private final UserMirrorShopFeeOrderDonMapper feeOrderDonMapper;
 
+	private final ZfbShopOrderDayLimitMapper zfbShopOrderDayLimitMapper;
+
 	private static final Sequence SEQUENCE = new Sequence(0);
 
 	@Override
@@ -116,14 +119,24 @@ public class AliPayCommonServiceImpl implements AliPayCommonService {
 		Long orderId = re.getOrderId();
 		String returnUrl = re.getReturnUrl();
 		OrderDon orderDon = orderDonMapper.selectById(orderId);
-		//获取支付宝默认商户
-		String appId = sysConfigService.getDefaultShopConfigByType("zfb");
+		String appId = null;
 		if (orderDon.getPopularizeId() != null) {
 			ShopConfig shopConfig = shopConfigMapper.getByChannelPopularizeId(orderDon.getPopularizeId(), "zfb");
 			if (shopConfig != null) {
 				appId = shopConfig.getAppId();
 			}
 		}
+		//排除推广链接
+		if (StrUtil.isEmpty(appId)) {
+			//获取每日订单限制 支付宝商户
+			ZfbShopOrderDayLimit dayLimit = getZfbShopOrdersDayLimit();
+			if (dayLimit == null) {
+				//获取支付宝默认商户
+				appId = sysConfigService.getDefaultShopConfigByType("zfb");
+			} else {
+				appId = dayLimit.getAppId();
+			}
+		}
 		if (OrderDon.Type.ALI_PAY != orderDon.getType()) {
 			orderDon.setType(OrderDon.Type.ALI_PAY);
 		}
@@ -187,6 +200,18 @@ public class AliPayCommonServiceImpl implements AliPayCommonService {
 		return aliPayParams;
 	}
 
+	private ZfbShopOrderDayLimit getZfbShopOrdersDayLimit() {
+		List<ZfbShopOrderDayLimit> orderDayLimits = zfbShopOrderDayLimitMapper.selectList(Wrappers.lambdaQuery(ZfbShopOrderDayLimit.class)
+				.gt(ZfbShopOrderDayLimit::getRemainOrders, 0));
+		for (ZfbShopOrderDayLimit orderDayLimit : orderDayLimits) {
+			Integer update = zfbShopOrderDayLimitMapper.decrRemainOrdersById(orderDayLimit.getId());
+			if (update == 1) {
+				return orderDayLimit;
+			}
+		}
+		return null;
+	}
+
 	public AliPayParams builderPayParams(Long orderId, String orderNo, String shopId, BigDecimal money, Date orderCreatedTime, String subject, String productCode, String payMode, String notifyUrl, String returnUrl) throws Exception {
 		OrderPayBuilderDto orderPayBuilderDto = new OrderPayBuilderDto();
 		orderPayBuilderDto.setOrderId(orderId);