x用户-fixed1

This commit is contained in:
2025-09-28 16:00:51 +08:00
parent e3862d4a82
commit 5042b17c79
6 changed files with 118 additions and 45 deletions

View File

@@ -7,7 +7,6 @@ import com.accompany.admin.service.MainlandAccountService;
import com.accompany.admin.service.UserLevelExperienceExportService;
import com.accompany.business.constant.guild.GuildConstant;
import com.accompany.business.dto.WeekActiveGuildStat;
import com.accompany.business.event.RoomOpenEvent;
import com.accompany.business.model.*;
import com.accompany.business.model.guild.Guild;
import com.accompany.business.model.guild.GuildMember;
@@ -16,11 +15,11 @@ import com.accompany.business.mybatismapper.*;
import com.accompany.business.service.*;
import com.accompany.business.service.activity.WeekStarService;
import com.accompany.business.service.apple.IOSRefundV2Service;
import com.accompany.business.service.game.ChargeUserXService;
import com.accompany.business.service.guild.GuildDressUpService;
import com.accompany.business.service.guild.GuildMemberService;
import com.accompany.business.service.guild.GuildOperatorService;
import com.accompany.business.service.guild.GuildService;
import com.accompany.business.service.guild.*;
import com.accompany.business.service.guildpolicy2.GuildCrystalSettlementService;
import com.accompany.business.service.level.LevelService;
import com.accompany.business.service.lucky.BravoRecordService;
@@ -31,8 +30,6 @@ import com.accompany.business.service.user.UsersService;
import com.accompany.business.vo.RoomVo;
import com.accompany.common.config.SystemConfig;
import com.accompany.common.constant.Constant;
import com.accompany.common.netease.ErBanNetEaseService;
import com.accompany.common.netease.neteaseacc.result.ChatRoomRet;
import com.accompany.common.netease.neteaseacc.result.RoomMemberRet;
import com.accompany.common.netease.neteaseacc.result.RoomRet;
import com.accompany.common.redis.RedisKey;
@@ -41,7 +38,6 @@ import com.accompany.common.utils.*;
import com.accompany.core.base.SpringContextHolder;
import com.accompany.core.enumeration.PartitionEnum;
import com.accompany.core.exception.AdminServiceException;
import com.accompany.core.exception.ServiceException;
import com.accompany.core.model.*;
import com.accompany.core.mybatismapper.AccountLoginRecordMapper;
import com.accompany.core.mybatismapper.UsersMapper;
@@ -162,6 +158,8 @@ public class MyApiService {
private GuildOperatorService guildOperatorService;
@Autowired
private GuildService guildService;
@Autowired
private ChargeUserXService chargeUserXService;
public void refreshRoomMoneyRankList() {
List<Long> roomUidList = myApiAdminMapper.getExceptionRoomUid();
@@ -981,4 +979,8 @@ public class MyApiService {
public void mp4TransferGif(String url) {
SpringContextHolder.getBean(UploadAvatarService.class).reviewAvatar(null, url, null, null, null, null);
}
public void updateX() {
chargeUserXService.updateUserX(new Date());
}
}

View File

@@ -395,4 +395,13 @@ public class MyApiController {
myApiService.mp4TransferGif(url);
return BusiResult.success();
}
@GetMapping("/updateX")
public BusiResult<Void> updateX(Long roomId) {
if (null == roomId || !roomId.equals(603L)) {
throw new AdminServiceException(BusiStatus.PARAMERROR);
}
myApiService.updateX();
return BusiResult.success();
}
}

View File

@@ -109,21 +109,6 @@ public class ChargeUserXDetailService extends ServiceImpl<ChargeUserXDetailMappe
this.delCache(uid);
}
public void updateCharge(Long uid) {
ChargeUserXDetail record = this.baseMapper.getRecord(uid);
if (record != null && record.getIdentity() == 1) {
record.setIdentity(2);
record.setRemoveReason("每日搜索:充值");
record.setUpdateTime(new Date());
this.updateById(record);
this.delCache(uid);
//删除记录
chargeUserXRecordService.deleteRecord(uid);
}
}
public void delCache(Long uid) {
detailCache().remove(uid);
}
@@ -150,6 +135,16 @@ public class ChargeUserXDetailService extends ServiceImpl<ChargeUserXDetailMappe
return this.baseMapper.selectList(queryWrapper);
}
public Long selectMaxId() {
LambdaQueryWrapper<ChargeUserXDetail> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ChargeUserXDetail::getIdentity, 1)
.gt(ChargeUserXDetail::getRefStatus, 0)
.orderByDesc(ChargeUserXDetail::getId)
.last("limit 1");
ChargeUserXDetail chargeUserXDetail = this.baseMapper.selectOne(queryWrapper);
return chargeUserXDetail == null ? 0 : chargeUserXDetail.getId();
}
public RMap<Long, ChargeUserXDetail> detailCache() {
String key = RedisKey.charge_user_x_detail.getKey();
return redissonClient.getMap(key, new TypedJsonJacksonCodec(Long.class, ChargeUserXDetail.class));

View File

@@ -3,14 +3,18 @@ package com.accompany.business.service.game;
import com.accompany.business.model.game.ChargeUserXRecord;
import com.accompany.business.mybatismapper.game.ChargeUserXRecordMapper;
import com.accompany.business.param.BasePageParams;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* <p>
@@ -30,31 +34,71 @@ public class ChargeUserXRecordService extends ServiceImpl<ChargeUserXRecordMappe
public void saveRecord(Long uid) {
List<String> ips = this.baseMapper.getLastThirtyXIp(uid);
Date updateTime = new Date();
if (!CollectionUtils.isEmpty(ips)){
List<ChargeUserXRecord> chargeUserXRecords = new ArrayList<>();
List<ChargeUserXRecord> uidIpRecords = this.listUidIpRecord(uid);
Map<String, ChargeUserXRecord> ipRecordMap = new HashMap<>();
if (CollectionUtils.isNotEmpty(uidIpRecords)) {
ipRecordMap = uidIpRecords.stream().collect(Collectors.toMap(ChargeUserXRecord::getIp, v -> v));
}
for (String ip : ips) {
ChargeUserXRecord xRecord = ipRecordMap.get(ip);
if (xRecord != null) {
xRecord.setStatus(1);
xRecord.setUpdateTime(updateTime);
continue;
}
ChargeUserXRecord chargeUserXRecord = new ChargeUserXRecord();
chargeUserXRecord.setUid(uid);
chargeUserXRecord.setIp(ip);
chargeUserXRecord.setType(1);
chargeUserXRecords.add(chargeUserXRecord);
chargeUserXRecord.setCreateTime(updateTime);
ipRecordMap.put(ip, chargeUserXRecord);
}
this.saveBatch(chargeUserXRecords);
this.saveBatch(ipRecordMap.values());
}
List<String> devices = this.baseMapper.getLastThirtyXDevice(uid);
if (!CollectionUtils.isEmpty(devices)){
List<ChargeUserXRecord> chargeUserXRecords = new ArrayList<>();
List<ChargeUserXRecord> uidDeviceRecords = this.listUidDeviceRecord(uid);
Map<String, ChargeUserXRecord> deviceRecordMap = new HashMap<>();
if (CollectionUtils.isNotEmpty(uidDeviceRecords)) {
deviceRecordMap = uidDeviceRecords.stream().collect(Collectors.toMap(ChargeUserXRecord::getIp, v -> v));
}
for (String device : devices) {
ChargeUserXRecord xRecord = deviceRecordMap.get(device);
if (xRecord != null) {
xRecord.setStatus(1);
xRecord.setUpdateTime(updateTime);
continue;
}
ChargeUserXRecord chargeUserXRecord = new ChargeUserXRecord();
chargeUserXRecord.setUid(uid);
chargeUserXRecord.setDeviceId(device);
chargeUserXRecord.setType(2);
chargeUserXRecords.add(chargeUserXRecord);
chargeUserXRecord.setCreateTime(updateTime);
deviceRecordMap.put(device, chargeUserXRecord);
}
this.saveBatch(chargeUserXRecords);
this.saveBatch(deviceRecordMap.values());
}
}
private List<ChargeUserXRecord> listUidIpRecord(Long uid) {
LambdaQueryWrapper<ChargeUserXRecord> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ChargeUserXRecord::getUid, uid)
.eq(ChargeUserXRecord::getType, 1);
return this.baseMapper.selectList(queryWrapper);
}
private List<ChargeUserXRecord> listUidDeviceRecord(Long uid) {
LambdaQueryWrapper<ChargeUserXRecord> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ChargeUserXRecord::getUid, uid)
.eq(ChargeUserXRecord::getType, 2);
return this.baseMapper.selectList(queryWrapper);
}
public ChargeUserXRecord getRecordByIp(String loginIp) {
return this.baseMapper.getRecordByIp(loginIp);
}

View File

@@ -21,6 +21,7 @@ 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.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
@@ -64,7 +65,7 @@ public class ChargeUserXService {
public void updateUserX(Date date) {
List<UserRechargeLevel> zeroChargeList = rechargeLevelService.listByZeroTotalGold();
List<ChargeUserXDetail> chargeUserXDetails = chargeUserXDetailService.listExistAutoRecord();
Long maxId = chargeUserXDetailService.selectMaxId();
//无总充值为0的用户
if (CollectionUtils.isEmpty(zeroChargeList)) {
if (CollectionUtils.isNotEmpty(chargeUserXDetails)) {
@@ -82,7 +83,6 @@ public class ChargeUserXService {
Map<Long, GameDayStatData> gameDayStatDataMap = gameDayStatDataService.statByChannelUid4XRecord(GameConstant.GameChannel.LEADERCC.name(), Long.valueOf(value));
List<Long> zeroChargeUidList = new ArrayList<>();
List<Long> existXUidList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(zeroChargeList)) {
zeroChargeUidList = zeroChargeList.stream().map(UserRechargeLevel::getUid).toList();
@@ -102,6 +102,7 @@ public class ChargeUserXService {
continue;
}
x.setIdentity(2);
x.setRemoveReason("总充值金额不为0");
x.setUpdateTime(date);
}
}
@@ -116,7 +117,10 @@ public class ChargeUserXService {
if (gameDayStatData == null) {//游戏获奖未达标
continue;
}
ChargeUserXDetail chargeUserXDetail = new ChargeUserXDetail();
ChargeUserXDetail chargeUserXDetail = chargeUserXDetailService.getRecord(uid);
if (chargeUserXDetail == null) {
chargeUserXDetail = new ChargeUserXDetail();
}
AccountLoginRecord lastLoginRecord = accountLoginRecordService.getLastLoginRecord(uid);
if (lastLoginRecord != null) {
chargeUserXDetail.setIp(lastLoginRecord.getLoginIp());
@@ -126,25 +130,41 @@ public class ChargeUserXService {
chargeUserXDetail.setWinGold(gameDayStatData.getWinGold());
chargeUserXDetail.setPayGold(gameDayStatData.getPayGold());
chargeUserXDetail.setAdminAdd(0);
chargeUserXDetail.setRefStatus(0);
chargeUserXDetail.setIdentity(1);
chargeUserXDetail.setCreateTime(date);
chargeUserXDetail.setUpdateTime(date);
chargeUserXDetails.add(chargeUserXDetail);
}
}
chargeUserXDetailService.saveOrUpdateBatch(chargeUserXDetails);
List<ChargeUserXDetail> tipUser = new ArrayList<>();
List<Long> tipUids = new ArrayList<>();
for (ChargeUserXDetail chargeUserXDetail : chargeUserXDetails) {
Long uid = chargeUserXDetail.getUid();
if (chargeUserXDetail.getIdentity() != 1) {
chargeUserXDetailService.delCache(uid);
chargeUserXRecordService.deleteRecord(uid);
continue;
}
if (maxId < chargeUserXDetail.getId()) {
tipUser.add(chargeUserXDetail);
tipUids.add(uid);
}
chargeUserXDetailService.detailCache().put(uid, chargeUserXDetail);
chargeUserXRecordService.saveRecord(uid);
}
}
public void initChargeUserX() {
}
public void initDetail() {
if (CollectionUtils.isNotEmpty(tipUser)) {
Map<Long, Users> usersMap = usersService.getUsersMapByUids(tipUids);
Map<Integer, String> regionName = regionInfoService.getRegionName();
for (ChargeUserXDetail chargeUserXDetail : tipUser) {
Users users = usersMap.get(chargeUserXDetail.getUid());
Integer regionId = users.getRegionId() == null ? 0 : users.getRegionId();
this.sendRobotMsg(users.getPartitionId(), users.getErbanNo(), regionName.get(regionId), chargeUserXDetail.getPayGold(), chargeUserXDetail.getWinGold(), null);
}
}
}
@@ -193,7 +213,8 @@ public class ChargeUserXService {
}
}
private void sendRobotMsg(Integer partitionId, Long erbanNo, String regionName, BigDecimal payGold, BigDecimal winGold, String refValue) {
@Async
public 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";
@@ -212,7 +233,9 @@ public class ChargeUserXService {
msg.add(MarkdownMessage.getReferenceText("累计进入金币: " + payGold));
msg.add(MarkdownMessage.getReferenceText("累计退出金币: " + winGold));
msg.add(MarkdownMessage.getReferenceText("累计差额: " + payGold.subtract(winGold)));
msg.add(MarkdownMessage.getReferenceText("关联值: " + refValue));
if (refValue != null) {
msg.add(MarkdownMessage.getReferenceText("关联值: " + refValue));
}
msg.add(MarkdownMessage.getReferenceText("标记时间GMT+8 " + DateUtil.formatDateTime(new Date())));
messageRobotPushService.pushMessageByKey(key, msg, false);
}

View File

@@ -40,7 +40,7 @@
<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 device ip != ''">
<if test="device != null device != ''">
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