用户列表 新增参数

This commit is contained in:
GYJ
2025-02-25 17:00:44 +08:00
parent 2d24f56d45
commit 04eb7ba600
11 changed files with 370 additions and 11 deletions

View File

@@ -0,0 +1,14 @@
package com.sqx.modules.app.dto;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author GYJoker
*/
@Data
public class UserInviteDTO {
private String userId;
private BigDecimal inviteAmount;
}

View File

@@ -188,6 +188,11 @@ public class UserEntity implements Serializable {
*/
private BigDecimal inviteAmount;
/**
* 累计邀请人数
*/
private Integer inviteCount;
/**
* 是否是新用户 1否
*/
@@ -212,6 +217,9 @@ public class UserEntity implements Serializable {
@TableField(exist = false)
private Integer vipType;
@TableField(exist = false)
private Integer cashCount;
@TableField(exist = false)
private BigDecimal cashAmount;
}

View File

@@ -60,4 +60,13 @@ public class UserMoney implements Serializable {
private BigDecimal inviteIncomeMoney;;
private BigDecimal inviteIncomeCoin;
/**
* 累计提现金额
*/
private BigDecimal cashAmount;
/**
* 累计提现次数
*/
private Integer cashCount;
}

View File

@@ -5,10 +5,7 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sqx.common.utils.PageUtils;
import com.sqx.common.utils.Result;
import com.sqx.modules.app.dto.AuthCertNoDTO;
import com.sqx.modules.app.dto.AuthDTO;
import com.sqx.modules.app.dto.LoginDTO;
import com.sqx.modules.app.dto.RegisterDTO;
import com.sqx.modules.app.dto.*;
import com.sqx.modules.app.entity.UserEntity;
import javax.servlet.http.HttpServletRequest;
@@ -234,4 +231,8 @@ public interface UserService extends IService<UserEntity> {
UserEntity queryByInvitationCodeOrUserId(Long inviterUserId, String invitationCode);
Result register(RegisterDTO registerDTO);
Result updateUserInviteAmount(UserInviteDTO userInviteDTO);
Result removeUserBlack(Long userId);
}

View File

@@ -1758,4 +1758,41 @@ public class UserServiceImpl extends ServiceImpl<UserDao, UserEntity> implements
return baseMapper.selectOne(new LambdaQueryWrapper<UserEntity>().eq(UserEntity::getUserId, inviterUserId));
}
@Override
public Result updateUserInviteAmount(UserInviteDTO userInviteDTO) {
if (StrUtil.isBlank(userInviteDTO.getUserId())) {
return Result.error("用户id不能为空");
}
if (userInviteDTO.getInviteAmount() == null || userInviteDTO.getInviteAmount().compareTo(BigDecimal.ZERO) <= 0) {
return Result.error("邀请奖励金额必须大于0");
}
UserEntity userEntity = baseMapper.selectById(userInviteDTO.getUserId());
if (userEntity == null) {
return Result.error("用户不存在");
}
userEntity.setInviteAmount(userInviteDTO.getInviteAmount());
baseMapper.update(userEntity, new LambdaUpdateWrapper<UserEntity>().eq(UserEntity::getUserId, userInviteDTO.getUserId()));
return Result.success("更新成功");
}
@Override
public Result removeUserBlack(Long userId) {
UserEntity userEntity = getById(userId);
if (userEntity == null) {
return Result.error("用户不存在");
}
userEntity.setStatus(1);
update(userEntity, new LambdaUpdateWrapper<UserEntity>().eq(UserEntity::getUserId, userId));
UserInfo userInfo = userInfoService.getOne(new LambdaQueryWrapper<UserInfo>().eq(UserInfo::getUserId, userId));
if (userInfo != null && StrUtil.isNotBlank(userInfo.getCertNo())) {
tbUserBlacklistMapper.delete(new LambdaQueryWrapper<TbUserBlacklist>().eq(TbUserBlacklist::getIdCardNo, userInfo.getCertNo()));
}
return Result.success("解除拉黑成功");
}
}

View File

@@ -214,6 +214,7 @@ public class InviteServiceImpl extends ServiceImpl<InviteDao, Invite> implements
user.setUserId(userId);
user.setInviterCode(userEntity.getInvitationCode());
user.setInviterUserId(userEntity.getUserId());
user.setInviteCount((userEntity.getInviteCount() == null ? 0 : userEntity.getInviteCount()) + 1);
userService.updateById(user);
// 金币

View File

@@ -5,12 +5,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sqx.modules.pay.entity.CashOut;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.*;
/**
* @author fang
@@ -52,4 +50,7 @@ public interface CashOutDao extends BaseMapper<CashOut> {
List<CashOut> countByUserIdList(Set<Long> userIdList);
Double queryUserTodayCashOutSum(@Param("userId") Long userId, @Param("time") String time);
@Select("select count(1) as totalCount, sum(money) as totalAmount from cash_out where user_id=#{userId}")
Map<String, Object> getUserCashInfo(@Param("userId") Long userId);
}

View File

@@ -2,6 +2,7 @@ package com.sqx.modules.pay.service.impl;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.sqx.modules.app.entity.UserMoney;
import com.sqx.modules.app.entity.UserMoneyDetails;
import com.sqx.modules.app.service.UserMoneyDetailsService;
import com.sqx.modules.app.service.UserMoneyService;
@@ -85,6 +86,14 @@ public class WuyouCallbackServiceImpl implements WuyouCallbackService {
cashOut.setOutAt(DateUtil.now());
cashOutDao.update(cashOut, new LambdaQueryWrapper<CashOut>().eq(CashOut::getUserId, cashOut.getUserId()).eq(CashOut::getId, cashOut.getId()));
UserMoney one = userMoneyService.getOne(new LambdaQueryWrapper<UserMoney>().eq(UserMoney::getUserId, cashOut.getUserId()));
if (one != null) {
one.setCashCount(one.getCashCount() + 1);
one.setCashAmount((one.getCashAmount() == null ? BigDecimal.ZERO : one.getCashAmount().add(money)));
userMoneyService.update(one, new LambdaQueryWrapper<UserMoney>().eq(UserMoney::getUserId, cashOut.getUserId()));
}
return 1;
}

View File

@@ -0,0 +1,219 @@
swagger:
enabled: false
pay:
h5BaseUrl: https://dj-h5.hnsiyao.cn/me/detail/detail?allId=
orderNotifyUrl: https://pay.hnsiyao.cn/czg/app/wuyou/notify
extractNotifyUrl: https://pay.hnsiyao.cn/czg/app/wuyou/extractNotify
server:
port: 8200
nsq:
address: 47.122.26.160
port:
produce: 4150
consumer: 4161
# 数据源的一些配置
driver-class-name: com.mysql.cj.jdbc.Driver
# 最小空闲连接默认值10小于0或大于maximum-pool-size都会重置为maximum-pool-size
minimum-idle: 5
# 最大连接数小于等于0会被重置为默认值10大于零小于1会被重置为minimum-idle的值
maximum-pool-size: 15
# 空闲连接超时时间默认值60000010分钟大于等于max-lifetime且max-lifetime>0会被重置为0不等于0且小于10秒会被重置为10秒。
idle-timeout: 20000
# 连接最大存活时间.不等于0且小于30秒会被重置为默认值30分钟.设置应该比mysql设置的超时时间短
max-lifetime: 30000
# 连接超时时间:毫秒小于250毫秒否则被重置为默认值30秒
connection-timeout: 30000
spring:
redis:
open: true # 是否开启redis缓存 true开启 false关闭
database: 0
host: 47.122.73.144 # Redis服务器地址
port: 6379
password: 222222 # 密码(默认为空)
timeout: 6000ms # 连接超时时长(毫秒)
jedis:
pool:
max-active: 1000 # 连接池最大连接数(使用负值表示没有限制)
max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制)
max-idle: 10 # 连接池中的最大空闲连接
min-idle: 5 # 连接池中的最小空闲连接
# sharding-jdbc 配置
shardingsphere:
# 显示sharding-jdbc改写的sql语句
show-sql: false
center-tables-data-node: duanju.%s
# 区域表的数据源节点
region-tables-data-node: duanju-$->{0..4}.%s
# 区域分库策略的计算字段
region-tables-sharding-database-column: user_id
# 分库的计算方法
region-tables-sharding-database-algorithm: duanju-$->{user_id % 5}
# 短剧集表 拆分
course_details-sharding-database-column: course_id
course_details-sharding-database-algorithm: duanju-$->{course_id % 5}
# 数据源名称
datasource:
duanju:
driver-class-name: ${driver-class-name}
jdbc-url: jdbc:mysql://rm-gc712o11yndj78x6a6o.mysql.cn-chengdu.rds.aliyuncs.com/duanju?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=CTT
username: video_user
password: VideoUser@1
minimum-idle: ${minimum-idle}
maximum-pool-size: ${maximum-pool-size}
idle-timeout: ${idle-timeout}
max-lifetime: ${max-lifetime}
connection-timeout: ${connection-timeout}
# 数据源配置begin
duanju-0:
driver-class-name: ${driver-class-name}
jdbc-url: jdbc:mysql://rm-gc712o11yndj78x6a6o.mysql.cn-chengdu.rds.aliyuncs.com/duanju-0?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=CTT
username: video_user
password: VideoUser@1
minimum-idle: ${minimum-idle}
maximum-pool-size: ${maximum-pool-size}
idle-timeout: ${idle-timeout}
max-lifetime: ${max-lifetime}
connection-timeout: ${connection-timeout}
duanju-1:
driver-class-name: ${driver-class-name}
jdbc-url: jdbc:mysql://rm-gc712o11yndj78x6a6o.mysql.cn-chengdu.rds.aliyuncs.com/duanju-1?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=CTT
username: video_user
password: VideoUser@1
minimum-idle: ${minimum-idle}
maximum-pool-size: ${maximum-pool-size}
idle-timeout: ${idle-timeout}
max-lifetime: ${max-lifetime}
connection-timeout: ${connection-timeout}
duanju-2:
driver-class-name: ${driver-class-name}
jdbc-url: jdbc:mysql://rm-gc712o11yndj78x6a6o.mysql.cn-chengdu.rds.aliyuncs.com/duanju-2?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=CTT
username: video_user
password: VideoUser@1
minimum-idle: ${minimum-idle}
maximum-pool-size: ${maximum-pool-size}
idle-timeout: ${idle-timeout}
max-lifetime: ${max-lifetime}
connection-timeout: ${connection-timeout}
duanju-3:
driver-class-name: ${driver-class-name}
jdbc-url: jdbc:mysql://rm-gc712o11yndj78x6a6o.mysql.cn-chengdu.rds.aliyuncs.com/duanju-3?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=CTT
username: video_user
password: VideoUser@1
minimum-idle: ${minimum-idle}
maximum-pool-size: ${maximum-pool-size}
idle-timeout: ${idle-timeout}
max-lifetime: ${max-lifetime}
connection-timeout: ${connection-timeout}
duanju-4:
driver-class-name: ${driver-class-name}
jdbc-url: jdbc:mysql://rm-gc712o11yndj78x6a6o.mysql.cn-chengdu.rds.aliyuncs.com/duanju-4?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=CTT
username: video_user
password: VideoUser@1
minimum-idle: ${minimum-idle}
maximum-pool-size: ${maximum-pool-size}
idle-timeout: ${idle-timeout}
max-lifetime: ${max-lifetime}
connection-timeout: ${connection-timeout}
# duanju-slave:
# driver-class-name: ${driver-class-name}
# jdbc-url: jdbc:mysql://47.122.30.120:3306/duanju?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=CTT
# username: root
# password: VideoUser1@
# minimum-idle: ${minimum-idle}
# maximum-pool-size: ${maximum-pool-size}
# idle-timeout: ${idle-timeout}
# max-lifetime: ${max-lifetime}
# connection-timeout: ${connection-timeout}
# duanju-slave-0:
# driver-class-name: ${driver-class-name}
# jdbc-url: jdbc:mysql://47.122.30.120:3306/duanju-0?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=CTT
# username: root
# password: VideoUser1@
# minimum-idle: ${minimum-idle}
# maximum-pool-size: ${maximum-pool-size}
# idle-timeout: ${idle-timeout}
# max-lifetime: ${max-lifetime}
# connection-timeout: ${connection-timeout}
# duanju-slave-1:
# driver-class-name: ${driver-class-name}
# jdbc-url: jdbc:mysql://47.122.30.120:3306/duanju-1?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=CTT
# username: root
# password: VideoUser1@
# minimum-idle: ${minimum-idle}
# maximum-pool-size: ${maximum-pool-size}
# idle-timeout: ${idle-timeout}
# max-lifetime: ${max-lifetime}
# connection-timeout: ${connection-timeout}
# duanju-slave-2:
# driver-class-name: ${driver-class-name}
# jdbc-url: jdbc:mysql://47.122.30.120:3306/duanju-2?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=CTT
# username: root
# password: VideoUser1@
# minimum-idle: ${minimum-idle}
# maximum-pool-size: ${maximum-pool-size}
# idle-timeout: ${idle-timeout}
# max-lifetime: ${max-lifetime}
# connection-timeout: ${connection-timeout}
# duanju-slave-3:
# driver-class-name: ${driver-class-name}
# jdbc-url: jdbc:mysql://47.122.30.120:3306/duanju-3?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=CTT
# username: root
# password: VideoUser1@
# minimum-idle: ${minimum-idle}
# maximum-pool-size: ${maximum-pool-size}
# idle-timeout: ${idle-timeout}
# max-lifetime: ${max-lifetime}
# connection-timeout: ${connection-timeout}
# duanju-slave-4:
# driver-class-name: ${driver-class-name}
# jdbc-url: jdbc:mysql://47.122.30.120:3306/duanju-4?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=CTT
# username: root
# password: VideoUser1@
# minimum-idle: ${minimum-idle}
# maximum-pool-size: ${maximum-pool-size}
# idle-timeout: ${idle-timeout}
# max-lifetime: ${max-lifetime}
# connection-timeout: ${connection-timeout}
# 数据源配置end
# 读写分离配置begin
master-slave-rules:
#数据源
duanju:
masterDataSourceName: duanju
slaveDataSourceNames:
- duanju
# - duanju-slave
duanju-0:
masterDataSourceName: duanju-0
slaveDataSourceNames:
- duanju-0
# - duanju-slave-0
duanju-1:
masterDataSourceName: duanju-1
slaveDataSourceNames:
- duanju-1
# - duanju-slave-1
duanju-2:
masterDataSourceName: duanju-2
slaveDataSourceNames:
- duanju-2
# - duanju-slave-2
duanju-3:
masterDataSourceName: duanju-3
slaveDataSourceNames:
- duanju-3
# - duanju-slave-3
duanju-4:
masterDataSourceName: duanju-4
slaveDataSourceNames:
- duanju-4
# - duanju-slave-4

View File

@@ -6,9 +6,12 @@
<select id="selectUserPage" resultType="com.sqx.modules.app.entity.UserEntity">
select u.*,1 as member,
s.username as sysUserName
s.username as sysUserName,
m.cash_count as cashCount,
m.cash_amount as cashAmount
from tb_user u
left join sys_user s on s.qd_code=u.qd_code
left join user_money m on m.user_id=u.user_id
where s.sys_user_id is null
<if test="search!=null and search!=''">
and (u.user_id=#{search} or u.phone = #{search} or u.user_name =#{search} )

View File

@@ -6,6 +6,8 @@ import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.PageUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.sqx.modules.app.dao.UserDao;
import com.sqx.modules.app.dao.UserMoneyDao;
@@ -19,7 +21,9 @@ import com.sqx.modules.app.service.UserService;
import com.sqx.modules.job.task.TempOrdersTask;
import com.sqx.modules.orders.entity.Orders;
import com.sqx.modules.orders.service.OrdersService;
import com.sqx.modules.pay.dao.CashOutDao;
import com.sqx.modules.pay.dao.PayDetailsDao;
import com.sqx.modules.pay.entity.CashOut;
import com.sqx.modules.pay.entity.PayDetails;
import com.sqx.modules.pay.service.PayDetailsService;
import com.sqx.modules.sys.service.SysUserService;
@@ -34,10 +38,11 @@ import org.springframework.test.context.ActiveProfiles;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
@ActiveProfiles("pay")
@ActiveProfiles("test")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class Tets {
private static final Logger log = LoggerFactory.getLogger(Tets.class);
@@ -60,12 +65,64 @@ public class Tets {
@Autowired
private UserDao userDao;
@Autowired
CashOutDao cashOutDao;
@Autowired
private SysUserService sysUserService;
@Autowired
private OrdersService ordersService;
@Test
public void testUserInviteCount() {
List<UserEntity> userList = userService.list(Wrappers.emptyWrapper());
System.out.println(userList.size());
userList.parallelStream().forEach(item -> {
try {
if (item.getInviterUserId() == null) {
UserEntity userEntity = userDao.selectOne(new LambdaQueryWrapper<UserEntity>().eq(UserEntity::getInvitationCode, item.getInviterCode())
.select(UserEntity::getUserId));
item.setInviterUserId(userEntity == null ? 1L :userEntity.getUserId());
userDao.update(null, new LambdaUpdateWrapper<UserEntity>().eq(UserEntity::getUserId, item.getUserId())
.set(UserEntity::getInviterUserId, userEntity == null ? 1L : userEntity.getUserId()));
log.info("更新用户信息: {}", item);
}
int count = userService.count(new LambdaQueryWrapper<UserEntity>().eq(UserEntity::getInviterUserId, item.getUserId()));
item.setInviteCount(count);
userService.updateById(item);
log.info("更新邀请人数: {}, {}", item.getUserId(), count);
} catch (Exception e) {
log.error("", e);
}
});
}
@Test
public void testUserCashInfo() {
List<UserMoney> userMonies = userMoneyDao.selectList(new QueryWrapper<UserMoney>().isNotNull("user_id"));
System.out.println(userMonies.size());
userMonies.parallelStream().forEach(item -> {
try {
Map<String, Object> cashInfo = cashOutDao.getUserCashInfo(item.getUserId());
System.out.println(cashInfo);
item.setCashAmount(cashInfo.get("totalAmount") == null ? BigDecimal.ZERO :new BigDecimal(cashInfo.get("totalAmount").toString()));
item.setCashCount(Integer.valueOf(cashInfo.get("totalCount").toString()));
userMoneyDao.update(item, new LambdaUpdateWrapper<UserMoney>().eq(UserMoney::getUserId, item.getUserId()));
log.info("更新用户提现信息: {}", item);
} catch (Exception e) {
log.error("", e);
}
});
}
//@Test
public void test4() {
UserEntity userEntity = userDao.selectById(1072962203591784209L);