From 37a4ded3c8667307ce4872ecaef365250adddbe5 Mon Sep 17 00:00:00 2001
From: hokli <2629910752@qq.com>
Date: Sun, 28 Sep 2025 14:45:13 +0800
Subject: [PATCH] =?UTF-8?q?x=E7=94=A8=E6=88=B7-=E5=90=8E=E5=8F=B0fixed?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../business/vo/game/ChargeUserXDetailVo.java | 3 +
.../event/listener/NewUserListener.java | 28 +++++
.../game/ChargeUserXDetailService.java | 33 +----
.../service/game/ChargeUserXService.java | 116 +++++++++++++++++-
.../sqlmappers/ChargeUserXDetailMapper.xml | 4 +-
5 files changed, 144 insertions(+), 40 deletions(-)
create mode 100644 accompany-business/accompany-business-service/src/main/java/com/accompany/business/event/listener/NewUserListener.java
diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/game/ChargeUserXDetailVo.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/game/ChargeUserXDetailVo.java
index a28c2724b..3d7da1c83 100644
--- a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/game/ChargeUserXDetailVo.java
+++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/game/ChargeUserXDetailVo.java
@@ -6,6 +6,7 @@ import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
+import java.util.Date;
/**
*
@@ -78,5 +79,7 @@ public class ChargeUserXDetailVo {
@ExcelProperty("取消X身份标记原因")
@ApiModelProperty("取消X身份标记原因")
private String removeReason;
+ private Date createTime;
+ private Date updateTime;
}
diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/event/listener/NewUserListener.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/event/listener/NewUserListener.java
new file mode 100644
index 000000000..19e317b7a
--- /dev/null
+++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/event/listener/NewUserListener.java
@@ -0,0 +1,28 @@
+
+package com.accompany.business.event.listener;
+
+import com.accompany.business.event.NewUserEvent;
+import com.accompany.business.service.game.ChargeUserXService;
+import com.accompany.core.model.Users;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationListener;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+
+@Component
+@Slf4j
+public class NewUserListener implements ApplicationListener {
+
+ @Autowired
+ private ChargeUserXService chargeUserXService;
+
+ @Async
+ @Override
+ public void onApplicationEvent(NewUserEvent event) {
+ Users user = (Users) event.getSource();
+ chargeUserXService.check(user);
+ }
+
+}
+
diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/ChargeUserXDetailService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/ChargeUserXDetailService.java
index ce0418902..9ad2c40f0 100644
--- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/ChargeUserXDetailService.java
+++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/ChargeUserXDetailService.java
@@ -1,7 +1,6 @@
package com.accompany.business.service.game;
import com.accompany.business.model.game.ChargeUserXDetail;
-import com.accompany.business.model.game.ChargeUserXRecord;
import com.accompany.business.mybatismapper.game.ChargeUserXDetailMapper;
import com.accompany.business.service.AccountLoginRecordService;
import com.accompany.business.service.user.UsersService;
@@ -21,7 +20,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
-import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -126,7 +124,7 @@ public class ChargeUserXDetailService extends ServiceImpl listExistAutoRecord() {
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/ChargeUserXService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/ChargeUserXService.java
index 7afb1675e..a74c99a3d 100644
--- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/ChargeUserXService.java
+++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/ChargeUserXService.java
@@ -1,18 +1,30 @@
package com.accompany.business.service.game;
+import cn.hutool.core.date.DateUtil;
import com.accompany.business.model.game.ChargeUserXDetail;
+import com.accompany.business.model.game.ChargeUserXRecord;
import com.accompany.business.model.game.GameDayStatData;
import com.accompany.business.service.AccountLoginRecordService;
import com.accompany.business.service.user.UsersService;
import com.accompany.common.constant.Constant;
import com.accompany.common.constant.GameConstant;
+import com.accompany.common.push.MarkdownMessage;
+import com.accompany.common.utils.EnvComponent;
+import com.accompany.core.enumeration.PartitionEnum;
+import com.accompany.core.model.AccountLoginRecord;
+import com.accompany.core.model.RegionInfo;
+import com.accompany.core.model.Users;
import com.accompany.core.service.SysConfService;
+import com.accompany.core.service.message.MessageRobotPushService;
+import com.accompany.core.service.region.RegionInfoService;
import com.accompany.payment.model.UserRechargeLevel;
import com.accompany.payment.service.UserRechargeLevelService;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import java.math.BigDecimal;
+import java.text.MessageFormat;
import java.util.*;
import java.util.stream.Collectors;
@@ -39,8 +51,16 @@ public class ChargeUserXService {
private ChargeUserXDetailService chargeUserXDetailService;
@Autowired
private UserRechargeLevelService rechargeLevelService;
+ @Autowired
+ private ChargeUserXRecordService chargeUserXRecordService;
+ @Autowired
+ private EnvComponent envComponent;
+ @Autowired
+ private MessageRobotPushService messageRobotPushService;
+ @Autowired
+ private RegionInfoService regionInfoService;
+
-
public void updateUserX(Date date) {
List zeroChargeList = rechargeLevelService.listByZeroTotalGold();
List chargeUserXDetails = chargeUserXDetailService.listExistAutoRecord();
@@ -88,10 +108,28 @@ public class ChargeUserXService {
if (CollectionUtils.isNotEmpty(zeroChargeList)) {
for (UserRechargeLevel zeroCharge : zeroChargeList) {
- if (existXMap.containsKey(zeroCharge.getUid())) {
+ Long uid = zeroCharge.getUid();
+ if (existXMap.containsKey(uid)) {
continue;
}
-
+ GameDayStatData gameDayStatData = gameDayStatDataMap.get(uid);
+ if (gameDayStatData == null) {//游戏获奖未达标
+ continue;
+ }
+ ChargeUserXDetail chargeUserXDetail = new ChargeUserXDetail();
+ AccountLoginRecord lastLoginRecord = accountLoginRecordService.getLastLoginRecord(uid);
+ if (lastLoginRecord != null) {
+ chargeUserXDetail.setIp(lastLoginRecord.getLoginIp());
+ chargeUserXDetail.setDeviceId(lastLoginRecord.getDeviceId());
+ }
+ chargeUserXDetail.setUid(uid);
+ chargeUserXDetail.setWinGold(gameDayStatData.getWinGold());
+ chargeUserXDetail.setPayGold(gameDayStatData.getPayGold());
+ chargeUserXDetail.setAdminAdd(0);
+ chargeUserXDetail.setIdentity(1);
+ chargeUserXDetail.setCreateTime(date);
+ chargeUserXDetail.setUpdateTime(date);
+ chargeUserXDetails.add(chargeUserXDetail);
}
}
@@ -105,11 +143,77 @@ public class ChargeUserXService {
}
- private void sendMsg() {
- }
-
public void initDetail() {
}
+
+ public void check(Users users) {
+ Long uid = users.getUid();
+ ChargeUserXDetail chargeUserXDetail = new ChargeUserXDetail();
+ AccountLoginRecord lastLogin = accountLoginRecordService.getLastLoginRecord(uid);
+ if (lastLogin != null) {
+ chargeUserXDetail.setUid(uid);
+ chargeUserXDetail.setIp(lastLogin.getLoginIp());
+ chargeUserXDetail.setDeviceId(lastLogin.getDeviceId());
+ chargeUserXDetail.setIdentity(1);
+ //进行iP检测
+ ChargeUserXRecord recordByIp = chargeUserXRecordService.getRecordByIp(String.valueOf(lastLogin.getLoginIp()));
+ String remark = "注册关联,关联记录id:{0},关联值:{1}";
+ ChargeUserXRecord recordByDevice = chargeUserXRecordService.getRecordByDevice(String.valueOf(lastLogin.getDeviceId()));
+ if (recordByDevice != null) {
+ chargeUserXDetail.setRemark(MessageFormat.format(remark, recordByDevice.getId(), recordByDevice.getDeviceId()));
+ chargeUserXDetail.setRefStatus(1);
+ chargeUserXDetailService.save(chargeUserXDetail);
+ chargeUserXDetailService.delCache(uid);
+ chargeUserXRecordService.saveRecord(uid);
+ String regionName = "";
+ if (users.getRegionId() != null) {
+ RegionInfo regionInfo = regionInfoService.getById(users.getRegionId());
+ regionName = regionInfo.getName();
+ }
+ this.sendRobotMsg(users.getPartitionId(), users.getErbanNo(), regionName, BigDecimal.ZERO, BigDecimal.ZERO, lastLogin.getDeviceId());
+ return;
+ }
+
+ if (recordByIp != null) {
+ chargeUserXDetail.setRemark(MessageFormat.format(remark, recordByIp.getId(),recordByIp.getIp()));
+ chargeUserXDetail.setRefStatus(1);
+ chargeUserXDetailService.save(chargeUserXDetail);
+ chargeUserXDetailService.delCache(uid);
+ chargeUserXRecordService.saveRecord(uid);
+ String regionName = "";
+ if (users.getRegionId() != null) {
+ RegionInfo regionInfo = regionInfoService.getById(users.getRegionId());
+ regionName = regionInfo.getName();
+ }
+ this.sendRobotMsg(users.getPartitionId(), users.getErbanNo(), regionName, BigDecimal.ZERO, BigDecimal.ZERO, lastLogin.getDeviceId());
+ }
+
+ }
+ }
+
+ private void sendRobotMsg(Integer partitionId, Long erbanNo, String regionName, BigDecimal payGold, BigDecimal winGold, String refValue) {
+ String key;
+ if (envComponent.getDevOrNativeEnv()) {
+ key = "474c92e5-385d-4b6a-b606-b33769f59457";
+ } else {
+ key = "10879113-5e0e-4385-8c52-faa6a96417d9";
+ }
+ PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId);
+ String title = "首次被标记为“X”";
+ MarkdownMessage msg = new MarkdownMessage();
+ msg.add(MarkdownMessage.getHeaderText(3, title));
+ msg.add(MarkdownMessage.getReferenceText("新增用户特殊标识: X"));
+ msg.add(MarkdownMessage.getReferenceText("标识含义: 垃圾嫌疑用户"));
+ msg.add(MarkdownMessage.getReferenceText("用户 ID: " + erbanNo));
+ msg.add(MarkdownMessage.getReferenceText("分区: " + partitionEnum.getDesc()));
+ msg.add(MarkdownMessage.getReferenceText("用户国家: " + regionName));
+ msg.add(MarkdownMessage.getReferenceText("累计进入金币: " + payGold));
+ msg.add(MarkdownMessage.getReferenceText("累计退出金币: " + winGold));
+ msg.add(MarkdownMessage.getReferenceText("累计差额: " + payGold.subtract(winGold)));
+ msg.add(MarkdownMessage.getReferenceText("关联值: " + refValue));
+ msg.add(MarkdownMessage.getReferenceText("标记时间(GMT+8): " + DateUtil.formatDateTime(new Date())));
+ messageRobotPushService.pushMessageByKey(key, msg, false);
+ }
}
diff --git a/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/ChargeUserXDetailMapper.xml b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/ChargeUserXDetailMapper.xml
index a35b23803..02a2089c9 100644
--- a/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/ChargeUserXDetailMapper.xml
+++ b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/ChargeUserXDetailMapper.xml
@@ -37,10 +37,10 @@
and not cuxd.identity = 1
-
+
and cuxd.uid in (select uid from charge_user_x_record where type = 1 and ip = #{ip})
-
+
and cuxd.uid in (select uid from charge_user_x_record where type = 2 and device_id = #{device})
order by cuxd.update_time desc