Browse Source

相同IP恢复分销关系绑定

zoujiajian 1 năm trước cách đây
mục cha
commit
68a4aa25fd

+ 19 - 0
netflix-dao/src/main/java/com/cyksj/mapper/UserIpRecordMapper.java

@@ -0,0 +1,19 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.UserIpRecord;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: UserIpRecordMapper
+ * 创建者: JavaZou
+ * 创建时间:2024/9/6 17:29
+ */
+public interface UserIpRecordMapper extends BaseMapper<UserIpRecord> {
+
+	@Select("select ip from user_ip_record where user_id = #{userId}")
+	List<String> getUserIpList(Long userId);
+}

+ 18 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/UserIpRecord.java

@@ -0,0 +1,18 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: UserIpRecord
+ * 创建者: JavaZou
+ * 创建时间:2024/9/6 17:29
+ */
+@Getter
+@Setter
+public class UserIpRecord extends BaseEntity{
+	private Long userId;
+
+	private String ip;
+}

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

@@ -325,6 +325,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 	private final OrderDonUpgradeRenewRecordMapper orderDonUpgradeRenewRecordMapper;
 
+	private final UserIpRecordMapper userIpRecordMapper;
+
 	private final List<String> noChekGoodsTemp = List.of("Apple One", "Youtube", "Spotify");
 
 	@Transactional(rollbackFor = Throwable.class)
@@ -2901,6 +2903,11 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 								return;
 							}
 						}
+						//是否和分销用户同一ip
+						if (isSameIpAsDistribute(userDistributeShared)) {
+							orderDon.setIsFixedDistribute(true);
+							return;
+						}
 						orderDon.setIsDistribute(false);
 					} else {
 						//45天内是否下单成功 ==>改为30天
@@ -3938,4 +3945,24 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			orderDonPosterRelateMapper.insert(orderDonPosterRelate);
 		}
 	}
+
+	/**
+	 * 是否存在相同ip信息
+	 */
+	private boolean isSameIpAsDistribute(UserDistributeShared userDistributeShared) {
+		List<String> userIpList = userIpRecordMapper.getUserIpList(userDistributeShared.getUserId());
+		if (CollUtil.isEmpty(userIpList)) {
+			return false;
+		}
+		Integer count = userIpRecordMapper.selectCount(Wrappers.lambdaQuery(UserIpRecord.class)
+				.eq(UserIpRecord::getUserId, userDistributeShared.getSharedId())
+				.in(UserIpRecord::getIp, userIpList));
+		if (count > 0) {
+			log.info("分销人:{}于被邀请人:{}存在相同ip信息,判定为相同用户,将绑定关系恢复", userDistributeShared.getSharedId(), userDistributeShared.getUserId());
+			userDistributeShared.setIsBind(true);
+			userDistributeSharedMapper.updateById(userDistributeShared);
+			return true;
+		}
+		return false;
+	}
 }

+ 26 - 0
netflix-web/src/main/java/com/cyksj/web/controller/user/UserController.java

@@ -2,6 +2,7 @@ package com.cyksj.web.controller.user;
 
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.extra.servlet.ServletUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.annotation.NoSubmit;
 import com.cyksj.common.exception.BusinessRuntimeException;
@@ -11,6 +12,7 @@ import com.cyksj.enums.GatewayResponse;
 import com.cyksj.mapper.GoodsDonSkuMapper;
 import com.cyksj.mapper.OrderDonMapper;
 import com.cyksj.mapper.UserDistributePosterRecordMapper;
+import com.cyksj.mapper.UserIpRecordMapper;
 import com.cyksj.mapper.manage.coupon.CouponUserMapper;
 import com.cyksj.mapper.manage.distribute.*;
 import com.cyksj.model.dto.UserWhoami;
@@ -91,6 +93,8 @@ public class UserController {
 
     private final DistributePosterGoodsMapper distributePosterGoodsMapper;
 
+    private final UserIpRecordMapper userIpRecordMapper;
+
     @GetMapping(value = "/wx/whoami")
     public Result<UserWhoami> whoami() {
         long userId = StpUserUtil.getLoginIdAsLong();
@@ -565,4 +569,26 @@ public class UserController {
         }
         return GatewayResponse.SUCCESS.newBuilder().toResult(distributePosterRecord.getId());
     }
+
+    /**
+     * 记录用户ip
+     */
+    @PostMapping("/user/ip/record")
+    public Result<String> recordUserIpAddress() {
+        long userId = StpUserUtil.getLoginIdAsLong();
+        String ip = ServletUtil.getClientIP(request);
+        Integer selectCount = userIpRecordMapper.selectCount(Wrappers.lambdaQuery(UserIpRecord.class)
+                .eq(UserIpRecord::getUserId, userId)
+                .eq(UserIpRecord::getIp, ip));
+        if (selectCount == 0) {
+            try {
+                UserIpRecord userIpRecord = new UserIpRecord();
+                userIpRecord.setUserId(userId);
+                userIpRecord.setIp(ip);
+                userIpRecordMapper.insert(userIpRecord);
+            } catch (DuplicateKeyException e) {
+            }
+        }
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
 }