diff --git a/src/main/java/com/sqx/modules/app/dto/UserInviteDTO.java b/src/main/java/com/sqx/modules/app/dto/UserInviteDTO.java new file mode 100644 index 00000000..515d2cfb --- /dev/null +++ b/src/main/java/com/sqx/modules/app/dto/UserInviteDTO.java @@ -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; +} diff --git a/src/main/java/com/sqx/modules/app/entity/UserEntity.java b/src/main/java/com/sqx/modules/app/entity/UserEntity.java index 878d91c2..0e5e96a9 100644 --- a/src/main/java/com/sqx/modules/app/entity/UserEntity.java +++ b/src/main/java/com/sqx/modules/app/entity/UserEntity.java @@ -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; } diff --git a/src/main/java/com/sqx/modules/app/entity/UserMoney.java b/src/main/java/com/sqx/modules/app/entity/UserMoney.java index 3acf2abb..7ab8eb3d 100644 --- a/src/main/java/com/sqx/modules/app/entity/UserMoney.java +++ b/src/main/java/com/sqx/modules/app/entity/UserMoney.java @@ -60,4 +60,13 @@ public class UserMoney implements Serializable { private BigDecimal inviteIncomeMoney;; private BigDecimal inviteIncomeCoin; + /** + * 累计提现金额 + */ + private BigDecimal cashAmount; + /** + * 累计提现次数 + */ + private Integer cashCount; + } diff --git a/src/main/java/com/sqx/modules/app/service/UserService.java b/src/main/java/com/sqx/modules/app/service/UserService.java index 88f6b9fe..87ac2de1 100644 --- a/src/main/java/com/sqx/modules/app/service/UserService.java +++ b/src/main/java/com/sqx/modules/app/service/UserService.java @@ -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 queryByInvitationCodeOrUserId(Long inviterUserId, String invitationCode); Result register(RegisterDTO registerDTO); + + Result updateUserInviteAmount(UserInviteDTO userInviteDTO); + + Result removeUserBlack(Long userId); } diff --git a/src/main/java/com/sqx/modules/app/service/impl/UserServiceImpl.java b/src/main/java/com/sqx/modules/app/service/impl/UserServiceImpl.java index e1f0b810..6d484e4b 100644 --- a/src/main/java/com/sqx/modules/app/service/impl/UserServiceImpl.java +++ b/src/main/java/com/sqx/modules/app/service/impl/UserServiceImpl.java @@ -1758,4 +1758,41 @@ public class UserServiceImpl extends ServiceImpl implements return baseMapper.selectOne(new LambdaQueryWrapper().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().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().eq(UserEntity::getUserId, userId)); + + UserInfo userInfo = userInfoService.getOne(new LambdaQueryWrapper().eq(UserInfo::getUserId, userId)); + if (userInfo != null && StrUtil.isNotBlank(userInfo.getCertNo())) { + tbUserBlacklistMapper.delete(new LambdaQueryWrapper().eq(TbUserBlacklist::getIdCardNo, userInfo.getCertNo())); + } + return Result.success("解除拉黑成功"); + } } diff --git a/src/main/java/com/sqx/modules/invite/service/impl/InviteServiceImpl.java b/src/main/java/com/sqx/modules/invite/service/impl/InviteServiceImpl.java index 6fecddb0..b0c5f1b3 100644 --- a/src/main/java/com/sqx/modules/invite/service/impl/InviteServiceImpl.java +++ b/src/main/java/com/sqx/modules/invite/service/impl/InviteServiceImpl.java @@ -214,6 +214,7 @@ public class InviteServiceImpl extends ServiceImpl implements user.setUserId(userId); user.setInviterCode(userEntity.getInvitationCode()); user.setInviterUserId(userEntity.getUserId()); + user.setInviteCount((userEntity.getInviteCount() == null ? 0 : userEntity.getInviteCount()) + 1); userService.updateById(user); // 金币 diff --git a/src/main/java/com/sqx/modules/pay/dao/CashOutDao.java b/src/main/java/com/sqx/modules/pay/dao/CashOutDao.java index 7fd5f0b6..b77657c6 100644 --- a/src/main/java/com/sqx/modules/pay/dao/CashOutDao.java +++ b/src/main/java/com/sqx/modules/pay/dao/CashOutDao.java @@ -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 { List countByUserIdList(Set 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 getUserCashInfo(@Param("userId") Long userId); } diff --git a/src/main/java/com/sqx/modules/pay/service/impl/WuyouCallbackServiceImpl.java b/src/main/java/com/sqx/modules/pay/service/impl/WuyouCallbackServiceImpl.java index 576a9ac8..68e7ca39 100644 --- a/src/main/java/com/sqx/modules/pay/service/impl/WuyouCallbackServiceImpl.java +++ b/src/main/java/com/sqx/modules/pay/service/impl/WuyouCallbackServiceImpl.java @@ -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().eq(CashOut::getUserId, cashOut.getUserId()).eq(CashOut::getId, cashOut.getId())); + UserMoney one = userMoneyService.getOne(new LambdaQueryWrapper().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().eq(UserMoney::getUserId, cashOut.getUserId())); + } + return 1; } diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml new file mode 100644 index 00000000..eb5674c8 --- /dev/null +++ b/src/main/resources/application-test.yml @@ -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 +# 空闲连接超时时间,默认值600000(10分钟),大于等于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 diff --git a/src/main/resources/mapper/app/UserDao.xml b/src/main/resources/mapper/app/UserDao.xml index a4314297..f34ca9f7 100644 --- a/src/main/resources/mapper/app/UserDao.xml +++ b/src/main/resources/mapper/app/UserDao.xml @@ -6,9 +6,12 @@