From 5042b17c797e0489d8fafc1b4367cad651b3f2f5 Mon Sep 17 00:00:00 2001 From: hokli <2629910752@qq.com> Date: Sun, 28 Sep 2025 16:00:51 +0800 Subject: [PATCH] =?UTF-8?q?x=E7=94=A8=E6=88=B7-fixed1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/service/api/MyApiService.java | 12 ++-- .../admin/controller/api/MyApiController.java | 9 +++ .../game/ChargeUserXDetailService.java | 25 ++++---- .../game/ChargeUserXRecordService.java | 60 ++++++++++++++++--- .../service/game/ChargeUserXService.java | 55 ++++++++++++----- .../sqlmappers/ChargeUserXDetailMapper.xml | 2 +- 6 files changed, 118 insertions(+), 45 deletions(-) diff --git a/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/api/MyApiService.java b/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/api/MyApiService.java index 6f6c39985..00fce0158 100644 --- a/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/api/MyApiService.java +++ b/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/api/MyApiService.java @@ -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 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()); + } } diff --git a/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/api/MyApiController.java b/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/api/MyApiController.java index 5a34aff6e..412838341 100644 --- a/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/api/MyApiController.java +++ b/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/api/MyApiController.java @@ -395,4 +395,13 @@ public class MyApiController { myApiService.mp4TransferGif(url); return BusiResult.success(); } + + @GetMapping("/updateX") + public BusiResult updateX(Long roomId) { + if (null == roomId || !roomId.equals(603L)) { + throw new AdminServiceException(BusiStatus.PARAMERROR); + } + myApiService.updateX(); + return BusiResult.success(); + } } 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 9ad2c40f0..84ccf7537 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 @@ -109,21 +109,6 @@ public class ChargeUserXDetailService extends ServiceImpl 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 detailCache() { String key = RedisKey.charge_user_x_detail.getKey(); return redissonClient.getMap(key, new TypedJsonJacksonCodec(Long.class, ChargeUserXDetail.class)); diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/ChargeUserXRecordService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/ChargeUserXRecordService.java index 24d1500fc..11701c8c8 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/ChargeUserXRecordService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/ChargeUserXRecordService.java @@ -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; /** *

@@ -30,31 +34,71 @@ public class ChargeUserXRecordService extends ServiceImpl ips = this.baseMapper.getLastThirtyXIp(uid); + Date updateTime = new Date(); if (!CollectionUtils.isEmpty(ips)){ - List chargeUserXRecords = new ArrayList<>(); + List uidIpRecords = this.listUidIpRecord(uid); + Map 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 devices = this.baseMapper.getLastThirtyXDevice(uid); if (!CollectionUtils.isEmpty(devices)){ - List chargeUserXRecords = new ArrayList<>(); + List uidDeviceRecords = this.listUidDeviceRecord(uid); + Map 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 listUidIpRecord(Long uid) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ChargeUserXRecord::getUid, uid) + .eq(ChargeUserXRecord::getType, 1); + + return this.baseMapper.selectList(queryWrapper); + } + + private List listUidDeviceRecord(Long uid) { + LambdaQueryWrapper 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); } 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 a74c99a3d..f34f0e997 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 @@ -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 zeroChargeList = rechargeLevelService.listByZeroTotalGold(); List chargeUserXDetails = chargeUserXDetailService.listExistAutoRecord(); - + Long maxId = chargeUserXDetailService.selectMaxId(); //无总充值为0的用户 if (CollectionUtils.isEmpty(zeroChargeList)) { if (CollectionUtils.isNotEmpty(chargeUserXDetails)) { @@ -82,7 +83,6 @@ public class ChargeUserXService { Map gameDayStatDataMap = gameDayStatDataService.statByChannelUid4XRecord(GameConstant.GameChannel.LEADERCC.name(), Long.valueOf(value)); List zeroChargeUidList = new ArrayList<>(); - List 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 tipUser = new ArrayList<>(); + List 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 usersMap = usersService.getUsersMapByUids(tipUids); + Map 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); } 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 02a2089c9..1d2028219 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 @@ -40,7 +40,7 @@ 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