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