x用户-fixedAll

This commit is contained in:
2025-09-28 16:52:35 +08:00
parent 1226992c78
commit 3d2e6d9cfd
4 changed files with 43 additions and 25 deletions

View File

@@ -24,6 +24,7 @@ import java.io.IOException;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
/** /**
@@ -47,9 +48,12 @@ public class ChargeUserXDetailAdminController extends BaseController {
@GetMapping(value = "/list") @GetMapping(value = "/list")
public BusiResult<IPage<ChargeUserXDetailVo>> listPage(Long erbanNo, String ip, public BusiResult<IPage<ChargeUserXDetailVo>> listPage(Long erbanNo, String ip,
String device, Integer identity, Integer pageNo, Integer pageSize) { String device, Integer identity, Integer pageNo, Integer pageSize, Integer partitionId) {
List<Integer> allPartitionId = adminPartitionService.getAllPartitionId(getAdminId()); List<Integer> allPartitionId = adminPartitionService.getAllPartitionId(getAdminId());
IPage<ChargeUserXDetailVo> ipage = chargeUserXDetailService.listPage(allPartitionId, erbanNo, ip, device, identity, pageNo, pageSize); if (!allPartitionId.contains(partitionId)) {
throw new AdminServiceException(5001, "无权查看该区数据权限");
}
IPage<ChargeUserXDetailVo> ipage = chargeUserXDetailService.listPage(Arrays.asList(partitionId), erbanNo, ip, device, identity, pageNo, pageSize);
return BusiResult.success(ipage); return BusiResult.success(ipage);
} }
@@ -84,9 +88,12 @@ public class ChargeUserXDetailAdminController extends BaseController {
@ApiOperation(value = "导出", httpMethod = "POST") @ApiOperation(value = "导出", httpMethod = "POST")
@PostMapping("/export") @PostMapping("/export")
public void export(Long erbanNo, String ip, String device, Integer identity, HttpServletResponse response) throws IOException { public void export(Long erbanNo, String ip, String device, Integer identity, Integer partitionId, HttpServletResponse response) throws IOException {
List<Integer> allPartitionId = adminPartitionService.getAllPartitionId(getAdminId()); List<Integer> allPartitionId = adminPartitionService.getAllPartitionId(getAdminId());
IPage<ChargeUserXDetailVo> ipage = chargeUserXDetailService.listPage(allPartitionId, erbanNo, ip, device, identity, -1, -1); if (!allPartitionId.contains(partitionId)) {
throw new AdminServiceException(5001, "无权查看该区数据权限");
}
IPage<ChargeUserXDetailVo> ipage = chargeUserXDetailService.listPage(Arrays.asList(partitionId), erbanNo, ip, device, identity, -1, -1);
response.setContentType("application/vnd.ms-excel"); response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码 // 这里URLEncoder.encode可以防止中文乱码

View File

@@ -75,7 +75,7 @@ public class ChargeUserXDetailService extends ServiceImpl<ChargeUserXDetailMappe
record.setAdminAdd(1); record.setAdminAdd(1);
this.updateById(record); this.updateById(record);
this.delCache(uid); this.delCache(uid);
chargeUserXRecordService.saveRecord(uid); chargeUserXRecordService.saveRecord(uid, null, null);
} }
} else { } else {
@@ -92,7 +92,7 @@ public class ChargeUserXDetailService extends ServiceImpl<ChargeUserXDetailMappe
chargeUserXDetail.setRemark(remark); chargeUserXDetail.setRemark(remark);
this.save(chargeUserXDetail); this.save(chargeUserXDetail);
this.delCache(uid); this.delCache(uid);
chargeUserXRecordService.saveRecord(uid); chargeUserXRecordService.saveRecord(uid, null, null);
} }
} }
} }
@@ -102,6 +102,7 @@ public class ChargeUserXDetailService extends ServiceImpl<ChargeUserXDetailMappe
ChargeUserXDetail record = this.baseMapper.getRecord(uid); ChargeUserXDetail record = this.baseMapper.getRecord(uid);
record.setIdentity(3); record.setIdentity(3);
record.setUpdateTime(new Date()); record.setUpdateTime(new Date());
removeReason = removeReason == null ? "" : removeReason;
record.setRemoveReason("后台移除:" + username + ":" + removeReason); record.setRemoveReason("后台移除:" + username + ":" + removeReason);
record.setAdminId(adminId); record.setAdminId(adminId);
this.updateById(record); this.updateById(record);
@@ -137,9 +138,7 @@ public class ChargeUserXDetailService extends ServiceImpl<ChargeUserXDetailMappe
public Long selectMaxId() { public Long selectMaxId() {
LambdaQueryWrapper<ChargeUserXDetail> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<ChargeUserXDetail> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ChargeUserXDetail::getIdentity, 1) queryWrapper.orderByDesc(ChargeUserXDetail::getId)
.gt(ChargeUserXDetail::getRefStatus, 0)
.orderByDesc(ChargeUserXDetail::getId)
.last("limit 1"); .last("limit 1");
ChargeUserXDetail chargeUserXDetail = this.baseMapper.selectOne(queryWrapper); ChargeUserXDetail chargeUserXDetail = this.baseMapper.selectOne(queryWrapper);
return chargeUserXDetail == null ? 0 : chargeUserXDetail.getId(); return chargeUserXDetail == null ? 0 : chargeUserXDetail.getId();

View File

@@ -3,6 +3,7 @@ package com.accompany.business.service.game;
import com.accompany.business.model.game.ChargeUserXRecord; import com.accompany.business.model.game.ChargeUserXRecord;
import com.accompany.business.mybatismapper.game.ChargeUserXRecordMapper; import com.accompany.business.mybatismapper.game.ChargeUserXRecordMapper;
import com.accompany.business.param.BasePageParams; import com.accompany.business.param.BasePageParams;
import com.accompany.core.util.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -10,10 +11,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Date; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -32,16 +30,23 @@ public class ChargeUserXRecordService extends ServiceImpl<ChargeUserXRecordMappe
return this.baseMapper.listPage(page,uid, type); return this.baseMapper.listPage(page,uid, type);
} }
public void saveRecord(Long uid) { public void saveRecord(Long uid, String lastLoginIp, String lastLoginDevice) {
List<String> ips = this.baseMapper.getLastThirtyXIp(uid); List<String> ips = this.baseMapper.getLastThirtyXIp(uid);
Date updateTime = new Date(); Date updateTime = new Date();
if (!CollectionUtils.isEmpty(ips)){ Set<String> ipSet = new HashSet<>();
if (StringUtils.isNoneEmpty(lastLoginIp)) {
ipSet.add(lastLoginIp);
}
if (CollectionUtils.isEmpty(ips)) {
ips.addAll(ips);
}
if (!CollectionUtils.isEmpty(ipSet)){
List<ChargeUserXRecord> uidIpRecords = this.listUidIpRecord(uid); List<ChargeUserXRecord> uidIpRecords = this.listUidIpRecord(uid);
Map<String, ChargeUserXRecord> ipRecordMap = new HashMap<>(); Map<String, ChargeUserXRecord> ipRecordMap = new HashMap<>();
if (CollectionUtils.isNotEmpty(uidIpRecords)) { if (CollectionUtils.isNotEmpty(uidIpRecords)) {
ipRecordMap = uidIpRecords.stream().collect(Collectors.toMap(ChargeUserXRecord::getIp, v -> v)); ipRecordMap = uidIpRecords.stream().collect(Collectors.toMap(ChargeUserXRecord::getIp, v -> v));
} }
for (String ip : ips) { for (String ip : ipSet) {
ChargeUserXRecord xRecord = ipRecordMap.get(ip); ChargeUserXRecord xRecord = ipRecordMap.get(ip);
if (xRecord != null) { if (xRecord != null) {
xRecord.setStatus(1); xRecord.setStatus(1);
@@ -56,16 +61,23 @@ public class ChargeUserXRecordService extends ServiceImpl<ChargeUserXRecordMappe
chargeUserXRecord.setCreateTime(updateTime); chargeUserXRecord.setCreateTime(updateTime);
ipRecordMap.put(ip, chargeUserXRecord); ipRecordMap.put(ip, chargeUserXRecord);
} }
this.saveBatch(ipRecordMap.values()); this.saveOrUpdateBatch(ipRecordMap.values());
} }
List<String> devices = this.baseMapper.getLastThirtyXDevice(uid); List<String> devices = this.baseMapper.getLastThirtyXDevice(uid);
if (!CollectionUtils.isEmpty(devices)){ Set<String> deviceSet = new HashSet<>();
if (StringUtils.isNotEmpty(lastLoginDevice)) {
deviceSet.add(lastLoginDevice);
}
if (CollectionUtils.isEmpty(devices)) {
deviceSet.addAll(devices);
}
if (!CollectionUtils.isEmpty(deviceSet)){
List<ChargeUserXRecord> uidDeviceRecords = this.listUidDeviceRecord(uid); List<ChargeUserXRecord> uidDeviceRecords = this.listUidDeviceRecord(uid);
Map<String, ChargeUserXRecord> deviceRecordMap = new HashMap<>(); Map<String, ChargeUserXRecord> deviceRecordMap = new HashMap<>();
if (CollectionUtils.isNotEmpty(uidDeviceRecords)) { if (CollectionUtils.isNotEmpty(uidDeviceRecords)) {
deviceRecordMap = uidDeviceRecords.stream().collect(Collectors.toMap(ChargeUserXRecord::getIp, v -> v)); deviceRecordMap = uidDeviceRecords.stream().collect(Collectors.toMap(ChargeUserXRecord::getIp, v -> v));
} }
for (String device : devices) { for (String device : deviceSet) {
ChargeUserXRecord xRecord = deviceRecordMap.get(device); ChargeUserXRecord xRecord = deviceRecordMap.get(device);
if (xRecord != null) { if (xRecord != null) {
xRecord.setStatus(1); xRecord.setStatus(1);
@@ -79,7 +91,7 @@ public class ChargeUserXRecordService extends ServiceImpl<ChargeUserXRecordMappe
chargeUserXRecord.setCreateTime(updateTime); chargeUserXRecord.setCreateTime(updateTime);
deviceRecordMap.put(device, chargeUserXRecord); deviceRecordMap.put(device, chargeUserXRecord);
} }
this.saveBatch(deviceRecordMap.values()); this.saveOrUpdateBatch(deviceRecordMap.values());
} }
} }

View File

@@ -154,7 +154,7 @@ public class ChargeUserXService {
tipUids.add(uid); tipUids.add(uid);
} }
chargeUserXDetailService.detailCache().put(uid, chargeUserXDetail); chargeUserXDetailService.detailCache().put(uid, chargeUserXDetail);
chargeUserXRecordService.saveRecord(uid); chargeUserXRecordService.saveRecord(uid, chargeUserXDetail.getIp(), chargeUserXDetail.getDeviceId());
} }
if (CollectionUtils.isNotEmpty(tipUser)) { if (CollectionUtils.isNotEmpty(tipUser)) {
@@ -187,7 +187,7 @@ public class ChargeUserXService {
chargeUserXDetail.setRefStatus(1); chargeUserXDetail.setRefStatus(1);
chargeUserXDetailService.save(chargeUserXDetail); chargeUserXDetailService.save(chargeUserXDetail);
chargeUserXDetailService.delCache(uid); chargeUserXDetailService.delCache(uid);
chargeUserXRecordService.saveRecord(uid); chargeUserXRecordService.saveRecord(uid, chargeUserXDetail.getIp(), chargeUserXDetail.getDeviceId());
String regionName = ""; String regionName = "";
if (users.getRegionId() != null) { if (users.getRegionId() != null) {
RegionInfo regionInfo = regionInfoService.getById(users.getRegionId()); RegionInfo regionInfo = regionInfoService.getById(users.getRegionId());
@@ -202,7 +202,7 @@ public class ChargeUserXService {
chargeUserXDetail.setRefStatus(1); chargeUserXDetail.setRefStatus(1);
chargeUserXDetailService.save(chargeUserXDetail); chargeUserXDetailService.save(chargeUserXDetail);
chargeUserXDetailService.delCache(uid); chargeUserXDetailService.delCache(uid);
chargeUserXRecordService.saveRecord(uid); chargeUserXRecordService.saveRecord(uid, chargeUserXDetail.getIp(), chargeUserXDetail.getDeviceId());
String regionName = ""; String regionName = "";
if (users.getRegionId() != null) { if (users.getRegionId() != null) {
RegionInfo regionInfo = regionInfoService.getById(users.getRegionId()); RegionInfo regionInfo = regionInfoService.getById(users.getRegionId());
@@ -218,7 +218,7 @@ public class ChargeUserXService {
public void sendRobotMsg(Integer partitionId, Long erbanNo, String regionName, BigDecimal payGold, BigDecimal winGold, String refValue) { public void sendRobotMsg(Integer partitionId, Long erbanNo, String regionName, BigDecimal payGold, BigDecimal winGold, String refValue) {
String key; String key;
if (envComponent.getDevOrNativeEnv()) { if (envComponent.getDevOrNativeEnv()) {
key = "474c92e5-385d-4b6a-b606-b33769f59457"; key = "ce275432-117d-4016-9f24-3410f1d54e4d";
} else { } else {
key = "10879113-5e0e-4385-8c52-faa6a96417d9"; key = "10879113-5e0e-4385-8c52-faa6a96417d9";
} }
@@ -233,7 +233,7 @@ public class ChargeUserXService {
msg.add(MarkdownMessage.getReferenceText("用户国家: " + regionName)); msg.add(MarkdownMessage.getReferenceText("用户国家: " + regionName));
msg.add(MarkdownMessage.getReferenceText("累计进入金币: " + payGold)); msg.add(MarkdownMessage.getReferenceText("累计进入金币: " + payGold));
msg.add(MarkdownMessage.getReferenceText("累计退出金币: " + winGold)); msg.add(MarkdownMessage.getReferenceText("累计退出金币: " + winGold));
msg.add(MarkdownMessage.getReferenceText("累计差额: " + payGold.subtract(winGold))); msg.add(MarkdownMessage.getReferenceText("累计差额(退出-进入) " + winGold.subtract(payGold)));
if (refValue != null) { if (refValue != null) {
msg.add(MarkdownMessage.getReferenceText("关联值: " + refValue)); msg.add(MarkdownMessage.getReferenceText("关联值: " + refValue));
} }