x用户-后台fixed

This commit is contained in:
2025-09-28 14:45:13 +08:00
parent b3f84a4402
commit 37a4ded3c8
5 changed files with 144 additions and 40 deletions

View File

@@ -6,6 +6,7 @@ import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
import java.util.Date;
/**
* <p>
@@ -78,5 +79,7 @@ public class ChargeUserXDetailVo {
@ExcelProperty("取消X身份标记原因")
@ApiModelProperty("取消X身份标记原因")
private String removeReason;
private Date createTime;
private Date updateTime;
}

View File

@@ -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<NewUserEvent> {
@Autowired
private ChargeUserXService chargeUserXService;
@Async
@Override
public void onApplicationEvent(NewUserEvent event) {
Users user = (Users) event.getSource();
chargeUserXService.check(user);
}
}

View File

@@ -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<ChargeUserXDetailMappe
}
private void delCache(Long uid) {
public void delCache(Long uid) {
detailCache().remove(uid);
}
@@ -144,35 +142,6 @@ public class ChargeUserXDetailService extends ServiceImpl<ChargeUserXDetailMappe
return chargeUserXDetail;
}
public void check(Long uid) {
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(lastLogin.getLoginIp());
String remark = "注册关联,关联记录id:{0}";
ChargeUserXRecord recordByDevice = chargeUserXRecordService.getRecordByDevice(lastLogin.getDeviceId());
if (recordByDevice != null) {
chargeUserXDetail.setRemark(MessageFormat.format(remark, recordByDevice.getId()));
this.save(chargeUserXDetail);
this.delCache(uid);
chargeUserXRecordService.saveRecord(uid);
return;
}
if (recordByIp != null) {
chargeUserXDetail.setRemark(MessageFormat.format(remark, recordByIp.getId()));
this.save(chargeUserXDetail);
this.delCache(uid);
chargeUserXRecordService.saveRecord(uid);
}
}
}
public List<ChargeUserXDetail> listExistAutoRecord() {
LambdaQueryWrapper<ChargeUserXDetail> queryWrapper = new LambdaQueryWrapper<>();

View File

@@ -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,6 +51,14 @@ 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) {
@@ -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);
}
}

View File

@@ -37,10 +37,10 @@
<if test="identity != null and identity != 1">
and not cuxd.identity = 1
</if>
<if test="ip != null">
<if test="ip != null and ip != ''">
and cuxd.uid in (select uid from charge_user_x_record where type = 1 and ip = #{ip})
</if>
<if test="device != null">
<if test="device != null device ip != ''">
and cuxd.uid in (select uid from charge_user_x_record where type = 2 and device_id = #{device})
</if>
order by cuxd.update_time desc