Преглед изворни кода

杭州、北京ip过滤对应商品;是否购买过AI订单接口

zoujiajian пре 8 месеци
родитељ
комит
d96fb1db91

+ 19 - 0
netflix-common/src/main/java/com/cyksj/common/util/StringUtil.java

@@ -528,6 +528,25 @@ public final class StringUtil {
 		return "unknown";
 	}
 
+	/**
+	 * 付费ip地址查询
+	 */
+	public static String getNewestIpAddress(String ip) {
+		cn.hutool.http.HttpResponse execute = HttpUtil.createGet(String.format("https://ipaddr.market.alicloudapi.com/ip_addr_search/v1?IP_ADDR=%s", ip))
+				.header("Authorization", PAID_IP_APP_CODE_AUTH)
+				.header("Content-Type", "application/x-www-form-urlencoded; charset=utf-8")
+				.execute();
+
+		try {
+			ArkIpAddressDto arkIpAddressDto = Jsons.parseObject(execute.body(), ArkIpAddressDto.class);
+			ArkIpAddressDto.Entity.InputIpAddress inputIpAddress = arkIpAddressDto.getEntity().getInputIpAddress();
+			return inputIpAddress.getCity();
+		} catch (Exception e) {
+
+		}
+		return "unknown";
+	}
+
 	/**
 	 * 身份证号返回
 	 */

+ 2 - 0
netflix-dao/src/main/java/com/cyksj/mapper/OrderDonMapper.java

@@ -97,4 +97,6 @@ public interface OrderDonMapper extends BaseMapper<OrderDon> {
 	Map<String, Object> selectUserMIrrorShopDistributeOrderDetail(@Param("startDate") Date startDate, @Param("endDate") Date endDate);
 
 	List<DistributeOrderStatisticsDataView> getDistributeOrderView(@Param("goodsId") Long goodsId, @Param("start") String start, @Param("end") String end, @Param("isGeneral") Boolean isGeneral, @Param("chain") Integer chain);
+
+	Integer hasPaymentAiGoods(Long userId);
 }

+ 6 - 0
netflix-dao/src/main/java/com/cyksj/model/views/GoodsFrontListCategoryView.java

@@ -175,6 +175,12 @@ public class GoodsFrontListCategoryView {
 	@DbField("g.img")
 	private String goodsImg;
 
+	/**
+	 * 是否是特殊ip过滤商品
+	 */
+	@DbField("g.is_filter")
+	private Boolean isFilter;
+
 	/**
 	 * 购买通知信息
 	 */

+ 6 - 0
netflix-dao/src/main/java/com/cyksj/model/views/HomeManagementFrontView.java

@@ -46,6 +46,12 @@ public class HomeManagementFrontView {
 	@DbField("g.is_owns")
 	private Boolean isOwns;
 
+	/**
+	 * 是否是特殊ip过滤商品
+	 */
+	@DbField("g.is_filter")
+	private Boolean isFilter;
+
 	@DbField("hc.url")
 	private String url;
 

+ 5 - 0
netflix-dao/src/main/resources/mapper/OrderDonMapper.xml

@@ -594,4 +594,9 @@
         where rn &lt;= 5
         order by `date` asc, money desc
     </select>
+
+    <select id="hasPaymentAiGoods" resultType="java.lang.Integer">
+        select count(1) from order_don where user_id = #{userId} and status not in ('close','noPayment')
+        and goods_id in (select distinct goods_id from goods_don_category_relate where category = 1)
+    </select>
 </mapper>

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

@@ -1544,7 +1544,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 					.eq(OrderDonLocationRelate::getOrderId, orderDon.getId())
 					.last("limit 1"));
 			if (orderDonLocationRelate != null) {
-				String address = StringUtil.paidIpAddress(orderDonLocationRelate.getIp());
+				String address = StringUtil.getNewestIpAddress(orderDonLocationRelate.getIp());
 				if (address.contains("濮阳")) {
 					log.info("该支付账号id:{} 河南濮阳ip 直接退款mj", buyerId);
 					notifyRefundOrder(orderDon, goodsDon, sku);

+ 37 - 28
netflix-web/src/main/java/com/cyksj/web/controller/goods/GoodsDonController.java

@@ -15,10 +15,7 @@ import com.cyksj.common.util.StringUtil;
 import com.cyksj.dto.Result;
 import com.cyksj.dto.UserSharedDto;
 import com.cyksj.enums.GatewayResponse;
-import com.cyksj.mapper.GiftCardGoodsSkuMapper;
-import com.cyksj.mapper.GoodsDonSkuMapper;
-import com.cyksj.mapper.OrderDonMapper;
-import com.cyksj.mapper.RegisterOrderDonMapper;
+import com.cyksj.mapper.*;
 import com.cyksj.mapper.manage.coupon.CouponUserMapper;
 import com.cyksj.mapper.shop.YhShopGoodsSkuMapper;
 import com.cyksj.mapper.sys.SysConfigMapper;
@@ -617,20 +614,19 @@ public class GoodsDonController {
 			yhsId = yhShopFrontService.getYhsIdByCustomId(customId);
 			key = RedisService.key.YH_HOME_PAGHE_CACHE_SHOP.getName() + yhsId + ":homeManage";
 		}
-//		List<Long> filter_goodsIds = getFilterGoodsIds();
-		List<Long> filter_goodsIds = null;
+		Long fUid = StpUserUtil.getUserIdAfterLogin();
+		Boolean isFilterGoodsIds = isFilterGoodsIds(fUid);
 		AtomicBoolean isRemoveRg = new AtomicBoolean(false);
-//		if (isHzIp()) {
-//			key += ":hz-ip";
+		if (isFilterGoodsIds) {
+			key += ":filter-ip";
 //			isRemoveRg.set(true);
-//		}
+		}
 		String lang = request.getHeader("lang");
 		AtomicBoolean language = new AtomicBoolean(false);
 		if (lang != null && !StrUtil.equals(UserPageLanguage.Language.zh_CN.name(), lang)) {
 			key += ":" + lang;
 			language.set(true);
 		}
-		Long fUid = StpUserUtil.getUserIdAfterLogin();
 		Object o = redisService.get(key);
 		if (o == null) {
 			try {
@@ -649,8 +645,8 @@ public class GoodsDonController {
                                     .field(HomeManagementFrontView::getType, type.name());
                             if (type == HomeManagementConfig.Type.ex || type == HomeManagementConfig.Type.vg) {
                                 builder.put("condition", conditionSql);
-                                if (CollUtil.isNotEmpty(filter_goodsIds)) {
-                                    builder.field(HomeManagementFrontView::getGoodsId, filter_goodsIds).op(Operator.NotIn);
+                                if (isFilterGoodsIds) {
+                                    builder.field(HomeManagementFrontView::getIsFilter, Boolean.FALSE);
                                 }
                             }
                             List<HomeManagementFrontView> homeManagementFrontViews = beanSearcher.searchAll(HomeManagementFrontView.class, builder.build());
@@ -700,21 +696,34 @@ public class GoodsDonController {
 		return GatewayResponse.SUCCESS.newBuilder().toResult();
 	}
 
-    public List<Long> getFilterGoodsIds() {
+	public Boolean isFilterGoodsIds(Long userIdAfLogin) {
         List<Long> filter_goodsIds = null;
+		if (userIdAfLogin == null) {
+			//未登录 直接过滤
+			return true;
+		}
 	    //获取当前ip地址
-	    if (StringUtil.getRealAddressByIP(ServletUtil.getClientIP(request)).contains("杭州")) {
-		    //过滤杭州Ai ChatGPT平台
-		    SysConfig sysConfig = sysConfigMapper.selectOne(Wrappers.lambdaQuery(SysConfig.class)
-				    .eq(SysConfig::getSysKey, Constant.LOCATION_FOR_GOODS_IDS).last("limit 1"));
-		    if (sysConfig != null && StrUtil.isNotBlank(sysConfig.getSysValue())) {
-			    try {
-				    filter_goodsIds = Jsons.parseList(sysConfig.getSysValue(), Long.class);
-			    } catch (Exception e) {
+	    String newestIpAddress = StringUtil.getNewestIpAddress(ServletUtil.getClientIP(request));
+	    if (newestIpAddress.contains("杭州") || newestIpAddress.contains("北京")) {
+//		    //过滤杭州Ai ChatGPT平台
+//		    SysConfig sysConfig = sysConfigMapper.selectOne(Wrappers.lambdaQuery(SysConfig.class)
+//				    .eq(SysConfig::getSysKey, Constant.LOCATION_FOR_GOODS_IDS).last("limit 1"));
+//		    if (sysConfig != null && StrUtil.isNotBlank(sysConfig.getSysValue())) {
+//			    try {
+//				    filter_goodsIds = Jsons.parseList(sysConfig.getSysValue(), Long.class);
+//			    } catch (Exception e) {
+//			    }
+//		    }
+		    if (userIdAfLogin != null) {
+				//是否购买过AI产品
+			    Integer count = orderDonMapper.hasPaymentAiGoods(userIdAfLogin);
+			    if (count == 0) {
+				    //未购买 直接过滤
+				    return true;
 			    }
 		    }
 	    }
-        return filter_goodsIds;
+        return false;
     }
 
 	public Boolean isHzIp() {
@@ -1083,10 +1092,9 @@ public class GoodsDonController {
 		if (cgy != null) {
 			categoryGoodsKey += ":" + cgy;
 		}
-		//List<Long> filter_goodsIds = getFilterGoodsIds();
-		List<Long> filter_goodsIds = null;
-		if (CollUtil.isNotEmpty(filter_goodsIds)) {
-			categoryGoodsKey += ":hz-ip";
+		Boolean isFilterGoodsIds = isFilterGoodsIds(fUid);
+		if (isFilterGoodsIds) {
+			categoryGoodsKey += ":filter-ip";
 		}
 		String lang = request.getHeader("lang");
 		AtomicBoolean language = new AtomicBoolean(false);
@@ -1102,8 +1110,9 @@ public class GoodsDonController {
 				String condition = String.format(" and gcr.category = %s", cgy);
 				mapBuilder.put("condition", condition);
 			}
-			if (CollUtil.isNotEmpty(filter_goodsIds)) {
-				mapBuilder.field(GoodsFrontListCategoryView::getId, filter_goodsIds).op(Operator.NotIn);
+			if (isFilterGoodsIds) {
+				//特殊ip需要过滤的商品
+				mapBuilder.field(GoodsFrontListCategoryView::getIsFilter, Boolean.FALSE);
 			}
 			List<GoodsFrontListCategoryView> goodsFrontListViews = beanSearcher.searchAll(GoodsFrontListCategoryView.class, mapBuilder.build());
 			List<Long> gptBuyGids = getGptMirrorGiveawayBuyGids();

+ 13 - 0
netflix-web/src/main/java/com/cyksj/web/controller/payment/OrderController.java

@@ -152,6 +152,9 @@ public class OrderController {
     @Autowired
     private UpgradePackageMapper upgradePackageMapper;
 
+    @Autowired
+    private OrderDonMapper orderDonMapper;
+
     /**
      * 支付
      * @author chan
@@ -1044,4 +1047,14 @@ public class OrderController {
         orderDonService.receiveGptMirrorDayCard(orderId);
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }
+
+    /**
+     * 是否购买过AI订单
+     */
+    @GetMapping("/get/payAiOrders/condition")
+    public Result<Boolean> getPayAiOrdersConditions() {
+        long userId = StpUserUtil.getLoginIdAsLong();
+        Integer selectCount = orderDonMapper.hasPaymentAiGoods(userId);
+        return GatewayResponse.SUCCESS.newBuilder().toResult(selectCount > 0);
+    }
 }