Procházet zdrojové kódy

河南濮阳ip退款mj并记录

zoujiajian před 2 roky
rodič
revize
a364e29233

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

@@ -2,8 +2,10 @@ package com.cyksj.common.util;
 
 import cn.hutool.core.util.RandomUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpUtil;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
+import com.cyksj.dto.ArkIpAddressDto;
 
 import java.io.PrintWriter;
 import java.io.StringWriter;
@@ -50,6 +52,8 @@ public final class StringUtil {
 
 	private static final String baseStr = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
 
+	private static final String PAID_IP_APP_CODE_AUTH = "APPCODE ce891b0008634139a493d477c064ff19";
+
 	/**
 	 * provate constructor
 	 */
@@ -590,4 +594,25 @@ public final class StringUtil {
 		}
 		return result;
 	}
+
+	/**
+	 * 付费ip地址查询
+	 */
+	public static String paidIpAddress(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 new StringBuilder()
+					.append(inputIpAddress.getNation())
+					.append(inputIpAddress.getProvince())
+					.append(inputIpAddress.getCity()).toString();
+		} catch (Exception e) {
+		}
+		return "unknown";
+	}
 }

+ 96 - 0
netflix-common/src/main/java/com/cyksj/dto/ArkIpAddressDto.java

@@ -0,0 +1,96 @@
+package com.cyksj.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: ArkIpAddressDto
+ * 创建者: JavaZou
+ * 创建时间:2024/6/21 11:15
+ */
+@Getter
+@Setter
+public class ArkIpAddressDto {
+	@JsonProperty("INPUT_STRING")
+	private String inputString;
+	@JsonProperty("INPUT_IP_ADDRESS")
+	private String inputIpAddress;
+	@JsonProperty("CALLER_IP_ADDRESS")
+	private String callerIpAddress;
+	@JsonProperty("STATUS")
+	private String status;
+	@JsonProperty("ENTITY")
+	private Entity entity;
+
+	@Getter
+	@Setter
+	public static class Entity {
+		@JsonProperty("INPUT_IP_ADDRESS")
+		private InputIpAddress inputIpAddress;
+		@JsonProperty("CALLER_IP_ADDRESS")
+		private CallerIpAddress callerIpAddress;
+
+		/**
+		 * ip信息
+		 */
+		@Getter
+		@Setter
+		public static class InputIpAddress {
+			@JsonProperty("IP_ADDRESS")
+			private String ipAddress;
+			@JsonProperty("GLOBAL")
+			private String global;
+			@JsonProperty("NATION")
+			private String nation;
+			@JsonProperty("NATION_NAME_EN")
+			private String nationNameEn;
+			@JsonProperty("NATION_NAME_EN_ABBR")
+			private String nationNameEnAbbr;
+			@JsonProperty("PROVINCE")
+			private String province;
+			@JsonProperty("CITY")
+			private String city;
+			@JsonProperty("DISTRICT")
+			private String district;
+			@JsonProperty("ISP")
+			private String isp;
+			@JsonProperty("ADCODE")
+			private String adcode;
+			@JsonProperty("GPS")
+			private String gps;
+			@JsonProperty("STATUS")
+			private String status;
+		}
+
+		@Getter
+		@Setter
+		public static class CallerIpAddress {
+			@JsonProperty("IP_ADDRESS")
+			private String ipAddress;
+			@JsonProperty("GLOBAL")
+			private String global;
+			@JsonProperty("NATION")
+			private String nation;
+			@JsonProperty("NATION_NAME_EN")
+			private String nationNameEn;
+			@JsonProperty("NATION_NAME_EN_ABBR")
+			private String nationNameEnAbbr;
+			@JsonProperty("PROVINCE")
+			private String province;
+			@JsonProperty("CITY")
+			private String city;
+			@JsonProperty("DISTRICT")
+			private String district;
+			@JsonProperty("ISP")
+			private String isp;
+			@JsonProperty("ADCODE")
+			private String adcode;
+			@JsonProperty("GPS")
+			private String gps;
+			@JsonProperty("STATUS")
+			private String status;
+		}
+	}
+}

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/OrderDonExceptionUserRecordMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.OrderDonExceptionUserRecord;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: OrderDonExceptionUserRecordMapper
+ * 创建者: JavaZou
+ * 创建时间:2024/6/21 11:36
+ */
+public interface OrderDonExceptionUserRecordMapper extends BaseMapper<OrderDonExceptionUserRecord> {
+}

+ 24 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/OrderDonExceptionUserRecord.java

@@ -0,0 +1,24 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: OrderDonExceptionUserRecord
+ * 创建者: JavaZou
+ * 创建时间:2024/6/21 11:34
+ */
+@Getter
+@Setter
+public class OrderDonExceptionUserRecord extends BaseEntity{
+	private Long orderId;
+
+	private Long userId;
+
+	private String ip;
+
+	private String buyerId;
+
+	private String address;
+}

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

@@ -313,6 +313,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 	private final GroupsRelationNetflixService groupsRelationNetflixService;
 
+	private final OrderDonExceptionUserRecordMapper orderDonExceptionUserRecordMapper;
+
 	private final List<String> noChekGoodsTemp = List.of("Apple One", "Youtube", "Spotify");
 
 	@Transactional(rollbackFor = Throwable.class)
@@ -1125,6 +1127,30 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			return;
 		}
 
+		//是否是河南濮阳ip 直接退款mj
+		if (orderDon.getGoodsId() == 26) {
+			OrderDonLocationRelate orderDonLocationRelate = orderDonLocationRelateMapper.selectOne(Wrappers.lambdaQuery(OrderDonLocationRelate.class)
+					.eq(OrderDonLocationRelate::getOrderId, orderDon.getId())
+					.last("limit 1"));
+			if (orderDonLocationRelate != null) {
+				String address = StringUtil.paidIpAddress(orderDonLocationRelate.getIp());
+				if (address.contains("濮阳")) {
+					log.info("该支付账号id:{} 河南濮阳ip 直接退款mj", buyerId);
+					notifyRefundOrder(orderDon, goodsDon, sku);
+					//记录
+					OrderDonExceptionUserRecord exceptionUserRecord = new OrderDonExceptionUserRecord();
+					exceptionUserRecord.setOrderId(orderDon.getId());
+					exceptionUserRecord.setUserId(orderDon.getUserId());
+					exceptionUserRecord.setBuyerId(orderDon.getBuyerId());
+					exceptionUserRecord.setIp(orderDonLocationRelate.getIp());
+					exceptionUserRecord.setAddress(address);
+					orderDonExceptionUserRecordMapper.insert(exceptionUserRecord);
+					return;
+				}
+			}
+		}
+
+
 		if (orderDon.getOrderType() == 1 && StrUtil.isNotEmpty(buyerId)) {
 			//近一个月同一买家id 只能购买一次 多人
 			if (orderDon.getGoodsId() == 26l && sku.getNum() != 1) {