Merge branch 'test' into dev

This commit is contained in:
2025-01-07 15:47:23 +08:00
33 changed files with 340 additions and 200 deletions

View File

@@ -34,8 +34,9 @@ public class ApiAccessLimitUtil {
/** /**
* 默认 当月5次 * 默认 当月5次
* @param id 唯一值 *
* @param key 接口名称 sys:limit:接口名称 * @param id 唯一值
* @param key 接口名称 sys:limit:接口名称
* @return * @return
*/ */
public static boolean isAccessAllowed(String id, String key) { public static boolean isAccessAllowed(String id, String key) {
@@ -58,9 +59,10 @@ public class ApiAccessLimitUtil {
/** /**
* 默认月 month/月/自然月 * 默认月 month/月/自然月
* @param id 唯一值 *
* @param key 接口名称 sys:limit:接口名称 * @param id 唯一值
* @param count 次数限制 * @param key 接口名称 sys:limit:接口名称
* @param count 次数限制
* @return * @return
*/ */
public static boolean isAccessAllowed(String id, String key, Integer count) { public static boolean isAccessAllowed(String id, String key, Integer count) {
@@ -82,9 +84,10 @@ public class ApiAccessLimitUtil {
/** /**
* 默认 5次 * 默认 5次
*
* @param id 唯一值 * @param id 唯一值
* @param key 接口名称 sys:limit:接口名称 * @param key 接口名称 sys:limit:接口名称
* @param timeFormat day/天/自然天 week/周/本周日 month/月/自然月 year/年/自然年 * @param timeFormat day/天/自然天 week/周/本周日 month/月/自然月 year/年/自然年
* @return * @return
*/ */
public static boolean isAccessAllowed(String id, String key, String timeFormat) { public static boolean isAccessAllowed(String id, String key, String timeFormat) {
@@ -108,7 +111,7 @@ public class ApiAccessLimitUtil {
* @param id 唯一值 * @param id 唯一值
* @param key 接口名称 sys:limit:接口名称 * @param key 接口名称 sys:limit:接口名称
* @param count 次数限制 * @param count 次数限制
* @param timeFormat day/天/自然天 week/周/本周日 month/月/自然月 year/年/自然年 * @param timeFormat day/天/自然天 week/周/本周日 month/月/自然月 year/年/自然年
* @return * @return
*/ */
public static boolean isAccessAllowed(String id, String key, Integer count, String timeFormat) { public static boolean isAccessAllowed(String id, String key, Integer count, String timeFormat) {
@@ -118,7 +121,7 @@ public class ApiAccessLimitUtil {
long expireAt; long expireAt;
if (StrUtil.isBlank(timeFormat)) { if (StrUtil.isBlank(timeFormat)) {
expireAt = count; expireAt = count;
}else { } else {
// 根据不同时间周期设置过期时间并初始化访问次数为1 // 根据不同时间周期设置过期时间并初始化访问次数为1
expireAt = calculateExpireAt(timeFormat); expireAt = calculateExpireAt(timeFormat);
} }
@@ -133,14 +136,40 @@ public class ApiAccessLimitUtil {
return false; return false;
} }
public static boolean getCertAuthIsAccessAllowed(String id, String key, Integer count) {
String redisKey = "app:updateLimit:auth:" + key + ":" + id;
Object countObj = redisUtils.get(redisKey);
if (countObj == null) {
return true;
}
return Integer.parseInt(countObj.toString()) < count;
}
public static void setCertAuthIsAccessAllowed(String id, String key, Integer count, String timeFormat) {
String redisKey = "app:updateLimit:auth:" + key + ":" + id;
Object countObj = redisUtils.get(redisKey);
if (countObj == null) {
long expireAt;
if (StrUtil.isBlank(timeFormat)) {
expireAt = count;
} else {
// 根据不同时间周期设置过期时间并初始化访问次数为1
expireAt = calculateExpireAt(timeFormat);
}
redisUtils.set(redisKey, 1, expireAt);
} else {
redisUtils.incr(redisKey);
}
}
public static void removeKey(String id, String key) { public static void removeKey(String id, String key) {
String redisKey = generateRedisKey(key, id); String redisKey = generateRedisKey(key, id);
redisUtils.delete(redisKey); redisUtils.delete(redisKey);
} }
public static<T> T runFunAndCheckKey(Supplier<T> supplier, String lockKey, Integer seconds) { public static <T> T runFunAndCheckKey(Supplier<T> supplier, String lockKey, Integer seconds) {
try{ try {
// 创建线程id, 用作判断 // 创建线程id, 用作判断
String clientId = UUID.randomUUID().toString(); String clientId = UUID.randomUUID().toString();
// 设置分布式锁 // 设置分布式锁
@@ -154,12 +183,12 @@ public class ApiAccessLimitUtil {
lock = Boolean.TRUE.equals(redisUtils.setIfAbsent(lockKey, clientId, seconds)); lock = Boolean.TRUE.equals(redisUtils.setIfAbsent(lockKey, clientId, seconds));
} }
return supplier.get(); return supplier.get();
} catch (RuntimeException e){ } catch (RuntimeException e) {
log.error("执行出错", e); log.error("执行出错", e);
throw e; throw e;
} catch (InterruptedException e) { } catch (InterruptedException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} finally{ } finally {
redisUtils.delete(lockKey); redisUtils.delete(lockKey);
} }
} }
@@ -189,7 +218,7 @@ public class ApiAccessLimitUtil {
Date now = DateUtil.beginOfDay(DateUtil.date()); Date now = DateUtil.beginOfDay(DateUtil.date());
Date expireDate = null; Date expireDate = null;
if ("day".equals(timePeriod)) { if ("day".equals(timePeriod)) {
expireDate = DateUtil.endOfDay(now); expireDate = DateUtil.endOfDay(now);
} else if ("week".equals(timePeriod)) { } else if ("week".equals(timePeriod)) {
expireDate = DateUtil.endOfWeek(now); expireDate = DateUtil.endOfWeek(now);
} else if ("month".equals(timePeriod)) { } else if ("month".equals(timePeriod)) {

View File

@@ -37,9 +37,6 @@ import java.util.*;
@ConfigurationProperties(prefix = "spring.shardingsphere") @ConfigurationProperties(prefix = "spring.shardingsphere")
public class ShardingConfig { public class ShardingConfig {
@Value("${spring.profiles.active}")
private String activeProfile;
/** /**
* 读取数据源信息 * 读取数据源信息
*/ */

View File

@@ -9,7 +9,6 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.sqx.common.annotation.Debounce; import com.sqx.common.annotation.Debounce;
import com.sqx.common.exception.SqxException;
import com.sqx.common.utils.ApiAccessLimitUtil; import com.sqx.common.utils.ApiAccessLimitUtil;
import com.sqx.common.utils.DataLimitUtil; import com.sqx.common.utils.DataLimitUtil;
import com.sqx.common.utils.Result; import com.sqx.common.utils.Result;
@@ -33,6 +32,7 @@ import java.util.Map;
/** /**
* APP登录授权 * APP登录授权
* @author mac
*/ */
@RestController @RestController
@RequestMapping("/app/user") @RequestMapping("/app/user")
@@ -104,83 +104,75 @@ public class AppController {
UserInfo userInfo = userInfoService.getByUserId(userId); UserInfo userInfo = userInfoService.getByUserId(userId);
UserEntity userEntity = userService.getById(userId); UserEntity userEntity = userService.getById(userId);
String errMsg = null; if (StrUtil.isNotBlank(zhiFuBao) && (!zhiFuBao.equals(userEntity.getZhiFuBao())) || !certName.equals(userEntity.getZhiFuBaoName())) {
if (StrUtil.isNotBlank(zhiFuBao) && !zhiFuBao.equals(userEntity.getZhiFuBao())) {
int count = userService.count(new QueryWrapper<UserEntity>() int count = userService.count(new QueryWrapper<UserEntity>()
.ne("user_id", userId) .ne("user_id", userId)
.eq("zhi_fu_bao_name", certName) .eq("zhi_fu_bao_name", certName)
.eq("zhi_fu_bao", zhiFuBao)); .eq("zhi_fu_bao", zhiFuBao));
if (count > 0) { if (count > 0) {
errMsg = "支付宝信息修改失败: 一个支付宝账号仅可绑定一个用户"; return Result.error("支付宝信息修改失败: 支付宝账号已被绑定");
} }
if (errMsg == null && StrUtil.isNotBlank(userInfo.getCertName()) && !certName.equals(userInfo.getCertName())) { if (StrUtil.isNotBlank(userInfo.getCertName()) && !certName.equals(userInfo.getCertName())) {
errMsg = "支付宝信息修改失败: 姓名与实名认证信息不相符"; return Result.error("支付宝信息修改失败: 姓名与实名认证信息不相符");
} }
if (errMsg == null && !DataLimitUtil.isAccessAllowed(zhiFuBao+certName, Integer.parseInt(commonRepository.findOne(924).getValue()), "month")) { if (!DataLimitUtil.isAccessAllowed(zhiFuBao + certName, Integer.parseInt(commonRepository.findOne(924).getValue()), "month")) {
errMsg = "支付宝信息修改失败: 相同支付宝账号每月可绑定次数已用完"; return Result.error("支付宝信息修改失败: 相同支付宝账号每月可绑定次数已用完");
} }
if (errMsg == null && !ApiAccessLimitUtil.isAccessAllowed(userId.toString(), "updateZFB", Integer.parseInt(commonRepository.findOne(925).getValue()), "month")) { if (!ApiAccessLimitUtil.isAccessAllowed(userId.toString(), "updateZFB", Integer.parseInt(commonRepository.findOne(925).getValue()), "month")) {
errMsg = "支付宝信息修改失败: 每月可修改次数已用完,请联系管理员"; return Result.error("支付宝信息修改失败: 每月可修改次数已用完,请联系管理员");
} }
if (errMsg == null) { userEntity.setZhiFuBao(zhiFuBao);
userEntity.setZhiFuBao(zhiFuBao); userEntity.setZhiFuBaoName(certName);
userEntity.setZhiFuBaoName(certName); userService.update(userEntity, new LambdaQueryWrapper<UserEntity>().eq(UserEntity::getUserId, userId));
userService.update(userEntity, new LambdaQueryWrapper<UserEntity>().eq(UserEntity::getUserId, userId)); }
}
if (StrUtil.isBlank(certNum)) {
return Result.success();
} }
String authErrMsg = null; if (!certNum.equals(userInfo.getCertNo()) || !certName.equals(userInfo.getCertName())) {
if (StrUtil.isNotBlank(certNum) && !certNum.equals(userInfo.getCertNo())) {
if (StrUtil.isNotBlank(userEntity.getZhiFuBaoName()) && !certName.equals(userEntity.getZhiFuBaoName())) { if (StrUtil.isNotBlank(userEntity.getZhiFuBaoName()) && !certName.equals(userEntity.getZhiFuBaoName())) {
authErrMsg = "实名修改失败: 姓名与绑定支付宝信息不相符"; return Result.error("实名修改失败: 姓名与绑定支付宝信息不相符");
} }
if (authErrMsg == null && !IdcardUtil.isValidCard(certNum)) { if (!IdcardUtil.isValidCard(certNum)) {
authErrMsg = "实名修改失败: 身份证号码有误"; return Result.error("实名修改失败: 身份证号码有误");
} }
if (authErrMsg == null) { Integer idCount = userInfoService.countCertCount(certName, certNum);
Integer idCount = userInfoService.countCertCount(certName, certNum); if (idCount >= 1) {
if (idCount > 1) { return Result.error("实名修改失败: 此身份证信息已绑定过");
authErrMsg = "实名修改失败: 此实名信息已存在"; }
}
} if (!ApiAccessLimitUtil.getCertAuthIsAccessAllowed(String.valueOf(userId), "updateAuthCertInfo", 1)) {
return Result.error("实名修改失败: 每月可修改次数已用完,请联系管理员");
if (authErrMsg == null && !ApiAccessLimitUtil.isAccessAllowed(String.valueOf(userId), "updateAuthCertInfo", 1, "month")) { }
authErrMsg = "实名修改失败: 账号每月可修改次数已用完,请联系管理员";
} if (!ApiAccessLimitUtil.getCertAuthIsAccessAllowed(certNum, "updateAuthCertInfoByIdCard", 1)) {
return Result.error("实名修改失败: 每月可修改次数已用完,请联系管理员");
if (authErrMsg == null && !ApiAccessLimitUtil.isAccessAllowed(certNum, "updateAuthCertInfoByIdCard", 1, "month")) { }
authErrMsg = "实名修改失败: 此身份证信息次月已绑定过,请联系管理员";
} try {
aliService.authCertNo(certName, certNum);
if (authErrMsg == null) { userInfo.setCertName(certName);
try { userInfo.setCertNo(certNum);
aliService.authCertNo(certName, certNum); userInfo.setUpdateTime(DateUtil.date());
userInfo.setCertName(certName); boolean update = userInfoService.update(userInfo, new LambdaQueryWrapper<UserInfo>().eq(UserInfo::getUserId, userId).eq(UserInfo::getId, userInfo.getId()));
userInfo.setCertNo(certNum); if (!update) {
userInfo.setUpdateTime(DateUtil.date()); return Result.error("实名修改失败: 请稍后重试");
userInfoService.update(userInfo, new LambdaQueryWrapper<UserInfo>().eq(UserInfo::getUserId, userId));
}catch (Exception e) {
ApiAccessLimitUtil.removeKey(String.valueOf(userId), "updateAuthCertInfo");
ApiAccessLimitUtil.removeKey(certNum, "updateAuthCertInfoByIdCard");
authErrMsg = "实名修改失败: 身份证信息不匹配";
} }
ApiAccessLimitUtil.setCertAuthIsAccessAllowed(String.valueOf(userId), "updateAuthCertInfo", 1, "month");
ApiAccessLimitUtil.setCertAuthIsAccessAllowed(certNum, "updateAuthCertInfoByIdCard", 1, "month");
return Result.success();
} catch (Exception e) {
return Result.error("实名修改失败: 身份证信息不匹配");
} }
} }
if (errMsg != null || authErrMsg != null) {
authErrMsg = authErrMsg == null ? "" : authErrMsg;
return Result.error(errMsg == null ? authErrMsg : errMsg + " " + authErrMsg);
}
return Result.success(); return Result.success();
// 去除首绑支付宝奖励
// if (bool && isFirstBind) {
// userService.firstBindAwardsMoney(old);
// }
} }
@@ -194,22 +186,6 @@ public class AppController {
return Result.success(); return Result.success();
} }
/*@Login
@RequestMapping(value = "/updateUsers", method = RequestMethod.POST)
@ApiOperation("用户修改个人信息")
@ResponseBody
public Result updateUsers(@RequestAttribute("userId") Long userId,String userName,String avatar,String phone) {
UserEntity userEntity=new UserEntity();
userEntity.setUserId(userId);
userEntity.setUserName(userName);
userEntity.setAvatar(avatar);
userEntity.setPhone(phone);
userService.updateById(userEntity);
return Result.success();
}*/
@Login @Login
@RequestMapping(value = "/updateUserImageUrl", method = RequestMethod.POST) @RequestMapping(value = "/updateUserImageUrl", method = RequestMethod.POST)
@ApiOperation("用户修改头像") @ApiOperation("用户修改头像")

View File

@@ -167,16 +167,6 @@ public class AppLoginController {
return userService.sendMsg(phone, state,null); return userService.sendMsg(phone, state,null);
} }
@Login
@Debounce(value = "#authCertNoDTO.idNum")
@PostMapping("/authCertNo")
public Result authCertNo(@RequestBody @Validated AuthCertNoDTO authCertNoDTO, @RequestAttribute("userId") long userId) {
if (!ApiAccessLimitUtil.isAccessAllowed(String.valueOf(userId), "updateAuthCertInfo", 1, "month")) {
return Result.error("每月可修改次数已用完,请联系管理员");
}
return Result.success().put("data", userService.authCertNo(userId, authCertNoDTO));
}
@ApiOperation("解密手机号") @ApiOperation("解密手机号")
@RequestMapping(value = "/selectPhone",method = RequestMethod.POST) @RequestMapping(value = "/selectPhone",method = RequestMethod.POST)
public Result getPhoneNumberBeanS5(@RequestBody WxPhone wxPhone) { public Result getPhoneNumberBeanS5(@RequestBody WxPhone wxPhone) {

View File

@@ -7,6 +7,7 @@ import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
/** /**
* 用户 * 用户
@@ -35,7 +36,7 @@ public interface UserDao extends BaseMapper<UserEntity> {
int insertUser(UserEntity userEntity); int insertUser(UserEntity userEntity);
List<UserEntity> selectInviteUserList(String userName,String phone); List<UserEntity> selectInviteUserList(@Param("queryUserIdList") Set<Long> queryUserIdList);
int selectUserOnLineCount(String qdCode); int selectUserOnLineCount(String qdCode);

View File

@@ -0,0 +1,28 @@
package com.sqx.modules.app.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
/**
* 用户黑名单
* @author tankaikai
* @since 2025-01-07 12:56
*/
@Data
@TableName(value ="tb_user_blacklist")
public class TbUserBlacklist implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(type=IdType.AUTO)
private Long id;
private String idCardNo;
private String realName;
}

View File

@@ -61,6 +61,18 @@ public class UserEntity implements Serializable {
@ApiModelProperty("性别 1男 2女") @ApiModelProperty("性别 1男 2女")
private Integer sex; private Integer sex;
/**
* 姓名
*/
@TableField("cert_name")
private String certName;
/**
* 身份证号码
*/
@TableField("cert_no")
private String certNo;
/** /**
* 微信小程序openid * 微信小程序openid
*/ */

View File

@@ -2,13 +2,17 @@ package com.sqx.modules.app.interceptor;
import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.sqx.common.exception.CzgException; import com.sqx.common.exception.CzgException;
import com.sqx.common.exception.SqxException; import com.sqx.common.exception.SqxException;
import com.sqx.common.utils.DateUtils; import com.sqx.common.utils.DateUtils;
import com.sqx.common.utils.IPUtils; import com.sqx.common.utils.IPUtils;
import com.sqx.modules.app.annotation.Login; import com.sqx.modules.app.annotation.Login;
import com.sqx.modules.app.entity.TbUserBlacklist;
import com.sqx.modules.app.entity.UserEntity; import com.sqx.modules.app.entity.UserEntity;
import com.sqx.modules.app.mapper.TbUserBlacklistMapper;
import com.sqx.modules.app.service.UserService; import com.sqx.modules.app.service.UserService;
import com.sqx.modules.app.utils.JwtUtils; import com.sqx.modules.app.utils.JwtUtils;
import com.sqx.modules.redisService.RedisService; import com.sqx.modules.redisService.RedisService;
@@ -36,6 +40,8 @@ public class AuthorizationInterceptor extends HandlerInterceptorAdapter {
private JwtUtils jwtUtils; private JwtUtils jwtUtils;
@Autowired @Autowired
private UserService userService; private UserService userService;
@Autowired
private TbUserBlacklistMapper tbUserBlacklistMapper;
private final RedisService redisService; private final RedisService redisService;
@@ -91,9 +97,9 @@ public class AuthorizationInterceptor extends HandlerInterceptorAdapter {
throw new CzgException("ip跳动过于频繁请联系管理员解封"); throw new CzgException("ip跳动过于频繁请联系管理员解封");
} }
ThreadUtil.execAsync(() -> { // ThreadUtil.execAsync(() -> {
redisService.recordUrlVisitCountWithIp(userId, request.getRequestURI(), ip); // redisService.recordUrlVisitCountWithIp(userId, request.getRequestURI(), ip);
}); // });
// 设置 userId 到 request 里,后续根据 userId 获取用户信息 // 设置 userId 到 request 里,后续根据 userId 获取用户信息
UserEntity user = userService.selectUserById(userId); UserEntity user = userService.selectUserById(userId);
@@ -101,6 +107,13 @@ public class AuthorizationInterceptor extends HandlerInterceptorAdapter {
throw new CzgException("异常行为用户: {}" + user.getUserId()); throw new CzgException("异常行为用户: {}" + user.getUserId());
} }
if (StrUtil.isNotBlank(user.getCertNo())) {
TbUserBlacklist blacklist = tbUserBlacklistMapper.selectOne(Wrappers.<TbUserBlacklist>lambdaQuery().eq(TbUserBlacklist::getIdCardNo, user.getCertNo()));
if (blacklist != null) {
throw new CzgException(StrUtil.format("黑名单用户,禁止访问:{} / {}", blacklist.getRealName(), blacklist.getIdCardNo()));
}
}
if (redisService.isRecordUserOnLineTime(userId)) { if (redisService.isRecordUserOnLineTime(userId)) {
ThreadUtil.execAsync(() -> { ThreadUtil.execAsync(() -> {
// 记录用户最后一次调用接口的时间 // 记录用户最后一次调用接口的时间

View File

@@ -0,0 +1,14 @@
package com.sqx.modules.app.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sqx.modules.app.entity.TbUserBlacklist;
import org.apache.ibatis.annotations.Mapper;
/**
* 支付宝黑名单 Mapper
* @author tankaikai
* @since 2025-01-07 12:56
*/
@Mapper
public interface TbUserBlacklistMapper extends BaseMapper<TbUserBlacklist> {
}

View File

@@ -20,7 +20,6 @@ import com.aliyuncs.profile.DefaultProfile;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.getui.push.v2.sdk.ApiHelper; import com.getui.push.v2.sdk.ApiHelper;
import com.getui.push.v2.sdk.GtApiConfiguration; import com.getui.push.v2.sdk.GtApiConfiguration;
@@ -34,6 +33,7 @@ import com.getui.push.v2.sdk.dto.req.message.android.GTNotification;
import com.getui.push.v2.sdk.dto.req.message.ios.Alert; import com.getui.push.v2.sdk.dto.req.message.ios.Alert;
import com.getui.push.v2.sdk.dto.req.message.ios.Aps; import com.getui.push.v2.sdk.dto.req.message.ios.Aps;
import com.getui.push.v2.sdk.dto.req.message.ios.IosDTO; import com.getui.push.v2.sdk.dto.req.message.ios.IosDTO;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.github.qcloudsms.SmsSingleSenderResult; import com.github.qcloudsms.SmsSingleSenderResult;
@@ -126,8 +126,6 @@ public class UserServiceImpl extends ServiceImpl<UserDao, UserEntity> implements
private final UserVipDao userVipDao; private final UserVipDao userVipDao;
private final InviteAchievementService inviteAchievementService; private final InviteAchievementService inviteAchievementService;
@Value("${spring.profiles.active}")
private String profiles;
private ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock(true); private ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock(true);
@@ -1525,19 +1523,50 @@ public class UserServiceImpl extends ServiceImpl<UserDao, UserEntity> implements
@Override @Override
public Result selectInviteUserList(Integer page, Integer limit, String userName, String phone) { public Result selectInviteUserList(Integer page, Integer limit, String userName, String phone) {
PageHelper.startPage(page,limit); LambdaQueryWrapper<UserEntity> queryWrapper = new LambdaQueryWrapper<>();
List<UserEntity> userEntities = baseMapper.selectInviteUserList(userName, phone); if(StrUtil.isNotBlank(userName)) {
if (!userEntities.isEmpty()) { queryWrapper.like(UserEntity::getUserName, userName);
Set<Long> userIdList = userEntities.stream().map(UserEntity::getUserId).collect(Collectors.toSet()); }
if (StrUtil.isNotBlank(phone)) {
queryWrapper.like(UserEntity::getPhone, phone);
}
Set<Long> queryUserIdList = null;
if (!queryWrapper.isEmptyOfWhere()) {
queryUserIdList = list(queryWrapper.select(UserEntity::getUserId)).stream().map(UserEntity::getUserId).collect(Collectors.toSet());
}
PageHelper.startPage(page, limit);
List<UserEntity> inviteList = baseMapper.selectInviteUserList(queryUserIdList);
List<UserEntity> userInfoList = new ArrayList<>();
if (!inviteList.isEmpty()) {
Map<String, Integer> countInfoMap = new HashMap<>();
ArrayList<String> inviteCodeList = new ArrayList<>();
inviteList.forEach(item -> {
countInfoMap.put(item.getInviterCode(), item.getCounts());
inviteCodeList.add(item.getInviterCode());
});
userInfoList = list(new LambdaQueryWrapper<UserEntity>().in(UserEntity::getInvitationCode, inviteCodeList));
Set<Long> useridList = userInfoList.stream().map(UserEntity::getUserId).collect(Collectors.toSet());
Map<Long, UserMoney> infoMap = userMoneyService.list(new LambdaQueryWrapper<UserMoney>() Map<Long, UserMoney> infoMap = userMoneyService.list(new LambdaQueryWrapper<UserMoney>()
.in(UserMoney::getUserId, userIdList)) .in(UserMoney::getUserId, useridList))
.stream().collect(Collectors.toMap(UserMoney::getUserId, item -> item)); .stream().collect(Collectors.toMap(UserMoney::getUserId, item -> item));
userEntities.forEach(item -> { userInfoList.forEach(item -> {
UserMoney userMoney = infoMap.get(item.getUserId()); UserMoney userMoney = infoMap.get(item.getUserId());
item.setMoney(userMoney == null ? BigDecimal.ZERO : userMoney.getInviteIncomeMoney()); item.setMoney(userMoney == null ? BigDecimal.ZERO : userMoney.getInviteIncomeMoney());
Integer i = countInfoMap.get(item.getInvitationCode());
item.setCounts(i == null ? 0 : i);
}); });
} }
return Result.success().put("data", PageUtils.page(new PageInfo<>(userEntities),true));
userInfoList = userInfoList.stream()
.sorted((u1, u2) -> Integer.compare(u2.getCounts(), u1.getCounts())) // 按 counts 降序
.collect(Collectors.toList());
return Result.success().put("data", PageUtils.page(new PageInfo<>(userInfoList),true));
} }
@Override @Override

View File

@@ -29,7 +29,7 @@ public class AppCourseController extends AbstractController {
@Autowired @Autowired
private RedisUtils redisUtils; private RedisUtils redisUtils;
@Login // @Login
@GetMapping("/selectCourse") @GetMapping("/selectCourse")
@ApiOperation("查询短剧信息") @ApiOperation("查询短剧信息")
public Result selectCourse(@ApiParam("") Integer page, @ApiParam("") Integer limit, @ApiParam("分类id") Long classifyId, public Result selectCourse(@ApiParam("") Integer page, @ApiParam("") Integer limit, @ApiParam("分类id") Long classifyId,

View File

@@ -20,4 +20,5 @@ public interface CourseCollectDao extends BaseMapper<CourseCollect> {
List<Course> selectClassify1In3(@Param("userId") Long userId); List<Course> selectClassify1In3(@Param("userId") Long userId);
List<Course> selectClassify1ByUserId(@Param("userId") Long userId);
} }

View File

@@ -132,10 +132,16 @@ public class CourseCollectServiceImpl extends ServiceImpl<CourseCollectDao, Cour
@CachePut(value = "app:courseCollect", key = "#userId") @CachePut(value = "app:courseCollect", key = "#userId")
public Result selectByUserId(Integer page, Integer limit, Long userId, Integer classify) { public Result selectByUserId(Integer page, Integer limit, Long userId, Integer classify) {
PageHelper.startPage(page, limit); PageHelper.startPage(page, limit);
//查 收藏记录 List<Course> courses = new ArrayList<>();
List<Course> courses = baseMapper.selectClassify1In3(userId); //收藏
if (classify.equals(1)) {
//查 收藏记录
courses = baseMapper.selectClassify1In3(userId);
} else {
courses = baseMapper.selectClassify1ByUserId(userId);
}
if (CollectionUtil.isEmpty(courses)) { if (CollectionUtil.isEmpty(courses)) {
return Result.success(); return Result.success().put("data", PageUtils.page(new PageInfo<>(courses), true));
} }
//剧id //剧id
Set<Long> courseIdList = new HashSet<>(); Set<Long> courseIdList = new HashSet<>();
@@ -151,7 +157,8 @@ public class CourseCollectServiceImpl extends ServiceImpl<CourseCollectDao, Cour
List<CourseDetails> courseDetails1 = courseIdList.isEmpty() ? new ArrayList<>() : List<CourseDetails> courseDetails1 = courseIdList.isEmpty() ? new ArrayList<>() :
courseDetailsService.list(new LambdaQueryWrapper<CourseDetails>().in(CourseDetails::getCourseDetailsId, courseDetailIds)); courseDetailsService.list(new LambdaQueryWrapper<CourseDetails>().in(CourseDetails::getCourseDetailsId, courseDetailIds));
Map<Long, CourseDetails> courseDetailsMap = courseDetails1.stream().collect(Collectors.toMap(CourseDetails::getCourseId, item -> item)); Map<Long, CourseDetails> courseDetailsMap = courseDetails1.stream().collect(Collectors.toMap(CourseDetails::getCourseId, item -> item));
Map<Long, Integer> countMap = courseDetailsDao.countByCourseId(courseIdList).stream() List<CourseDetails> courseDetails2 = courseDetailsDao.countByCourseId(courseIdList);
Map<Long, Integer> countMap = courseDetails2.stream()
.collect(Collectors.toMap(CourseDetails::getCourseId, CourseDetails::getCourseDetailsCount)); .collect(Collectors.toMap(CourseDetails::getCourseId, CourseDetails::getCourseDetailsCount));
if (CollectionUtil.isNotEmpty(courseList)) { if (CollectionUtil.isNotEmpty(courseList)) {

View File

@@ -10,6 +10,7 @@ import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Profile;
import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -20,6 +21,7 @@ import java.util.List;
@Component @Component
@EnableScheduling @EnableScheduling
@Profile({"prod"})
public class SpinningTask3 { public class SpinningTask3 {
@Resource @Resource
@@ -27,16 +29,11 @@ public class SpinningTask3 {
@Resource @Resource
private DiscSpinningRecordService recordService; private DiscSpinningRecordService recordService;
@Value("${spring.profiles.active}")
private String profiles;
private Logger logger = LoggerFactory.getLogger(getClass()); private Logger logger = LoggerFactory.getLogger(getClass());
@Scheduled(cron = "0 0/5 * * * ? ") @Scheduled(cron = "0 0/1 * * * ? ")
public void record() { public void record() {
if (!"prod".equals(profiles)) {
return;
}
record("1"); record("1");
} }

View File

@@ -2,12 +2,14 @@ package com.sqx.modules.job.task;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.sqx.modules.pay.dao.CashOutDao; import com.sqx.modules.pay.dao.CashOutDao;
import com.sqx.modules.pay.entity.CashOut; import com.sqx.modules.pay.entity.CashOut;
import com.sqx.modules.pay.wuyou.BaseResp; import com.sqx.modules.pay.wuyou.BaseResp;
import com.sqx.modules.pay.wuyou.WuyouPay; import com.sqx.modules.pay.wuyou.WuyouPay;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
@@ -23,19 +25,32 @@ public class TempCashOutTask{
private Logger logger = LoggerFactory.getLogger(getClass()); private Logger logger = LoggerFactory.getLogger(getClass());
public void run(String params) { @Scheduled(cron = "0 0/8 * * * ? ")
public void run() {
logger.info("提现开始"); logger.info("提现开始");
List<CashOut> cashOuts = cashOutDao.selectTemp(); List<CashOut> cashOuts = cashOutDao.selectTemp(DateUtil.offsetMinute(DateUtil.date(), 5));
for (CashOut cashOut : cashOuts) { for (CashOut cashOut : cashOuts) {
BaseResp baseResp = wuyouPay.queryExtractOrder(cashOut.getOrderNumber(), cashOut.getUserId(), cashOut.getUserType() != 2, cashOut.getMoney()); try {
logger.info("baseResp{} ", JSONUtil.toJsonStr(baseResp)); BaseResp baseResp;
if (baseResp.getStatus() != null && (baseResp.getStatus().equals(2) || baseResp.getStatus().equals(10000))){ if (DateUtil.parse(cashOut.getCreateAt()).compareTo(DateUtil.parse("2025-01-06 16:50:00")) < 0) {
logger.info("success{} ", cashOut.getOrderNumber()); baseResp = wuyouPay.queryExtractOrder(cashOut.getOrderNumber(), cashOut.getUserId(), cashOut.getUserType() != 2, cashOut.getMoney());
cashOut.setState(1); }else {
cashOut.setOutAt(DateUtil.now()); baseResp = wuyouPay.queryExtractOrder(cashOut.getOrderNumber(), cashOut.getMoney());
cashOut.setRefund(null); }
cashOut.setOutAt(DateUtil.now()); logger.info("baseResp{} ", JSONUtil.toJsonStr(baseResp));
cashOutDao.updateById(cashOut); if (baseResp.getStatus() != null && (baseResp.getStatus().equals(2) || baseResp.getStatus().equals(10000))){
logger.info("success{} ", cashOut.getOrderNumber());
cashOut.setState(1);
cashOut.setOutAt(DateUtil.now());
cashOut.setRefund(null);
cashOut.setOutAt(DateUtil.now());
cashOutDao.update(cashOut, new LambdaQueryWrapper<CashOut>().eq(CashOut::getUserId, cashOut.getUserId()).eq(CashOut::getId, cashOut.getId()));
}else if (baseResp.getStatus() != null && baseResp.getStatus().equals(3)) {
cashOut.setState(2);
cashOutDao.update(cashOut, new LambdaQueryWrapper<CashOut>().eq(CashOut::getUserId, cashOut.getUserId()).eq(CashOut::getId, cashOut.getId()));
}
}catch (Exception e) {
logger.error("体现定时任务查询出错", e);
} }
} }
logger.info("提现结束"); logger.info("提现结束");

View File

@@ -7,8 +7,6 @@ import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sqx.common.utils.DateUtils; import com.sqx.common.utils.DateUtils;
import com.sqx.modules.app.entity.InviteAchievement; import com.sqx.modules.app.entity.InviteAchievement;
import com.sqx.modules.app.entity.UserEntity; import com.sqx.modules.app.entity.UserEntity;
@@ -23,7 +21,6 @@ import com.sqx.modules.complet.entity.CompletAward;
import com.sqx.modules.complet.service.CompletAwardService; import com.sqx.modules.complet.service.CompletAwardService;
import com.sqx.modules.course.service.CourseService; import com.sqx.modules.course.service.CourseService;
import com.sqx.modules.invite.dao.InviteDao; import com.sqx.modules.invite.dao.InviteDao;
import com.sqx.modules.invite.entity.Invite;
import com.sqx.modules.invite.service.InviteService; import com.sqx.modules.invite.service.InviteService;
import com.sqx.modules.orders.dao.OrdersDao; import com.sqx.modules.orders.dao.OrdersDao;
import com.sqx.modules.orders.entity.Orders; import com.sqx.modules.orders.entity.Orders;
@@ -160,6 +157,7 @@ public class TempOrdersTask {
order.setPayWay(9); order.setPayWay(9);
order.setStatus(1); order.setStatus(1);
order.setPayTime(DateUtils.format(new Date())); order.setPayTime(DateUtils.format(new Date()));
ordersService.fillSysUserId(order);
ordersService.update(order, new LambdaQueryWrapper<Orders>() ordersService.update(order, new LambdaQueryWrapper<Orders>()
.eq(Orders::getOrdersId, order.getOrdersId()).eq(Orders::getUserId, order.getUserId())); .eq(Orders::getOrdersId, order.getOrdersId()).eq(Orders::getUserId, order.getUserId()));

View File

@@ -53,7 +53,7 @@ public class AppMessageController {
@RequestMapping(value = "/selectMessage", method = RequestMethod.GET) @RequestMapping(value = "/selectMessage", method = RequestMethod.GET)
@ApiOperation("查询用户消息") @ApiOperation("查询用户消息")
@ResponseBody @ResponseBody
@Login // @Login
public Result selectMessage(int page, int limit,Integer state){ public Result selectMessage(int page, int limit,Integer state){
Map<String,Object> map=new HashMap<>(); Map<String,Object> map=new HashMap<>();
map.put("page",page); map.put("page",page);

View File

@@ -65,4 +65,9 @@ public interface OrdersService extends IService<Orders> {
Integer countOrderNum(Long userId, String time); Integer countOrderNum(Long userId, String time);
/**
* 填充渠道用户id
* @param orders
*/
void fillSysUserId(Orders orders);
} }

View File

@@ -15,10 +15,7 @@ import com.github.pagehelper.PageInfo;
import com.sqx.common.utils.DateUtils; import com.sqx.common.utils.DateUtils;
import com.sqx.common.utils.PageUtils; import com.sqx.common.utils.PageUtils;
import com.sqx.common.utils.Result; import com.sqx.common.utils.Result;
import com.sqx.modules.app.entity.UserMoney; import com.sqx.modules.app.entity.*;
import com.sqx.modules.app.entity.UserMoneyDetails;
import com.sqx.modules.app.entity.UserVip;
import com.sqx.modules.app.entity.VipDetails;
import com.sqx.modules.app.service.*; import com.sqx.modules.app.service.*;
import com.sqx.modules.common.service.CommonInfoService; import com.sqx.modules.common.service.CommonInfoService;
import com.sqx.modules.course.dao.CourseDao; import com.sqx.modules.course.dao.CourseDao;
@@ -37,6 +34,8 @@ import com.sqx.modules.orders.service.OrdersService;
import com.sqx.modules.pay.controller.app.AliPayController; import com.sqx.modules.pay.controller.app.AliPayController;
import com.sqx.modules.pay.service.DyService; import com.sqx.modules.pay.service.DyService;
import com.sqx.modules.pay.service.WxService; import com.sqx.modules.pay.service.WxService;
import com.sqx.modules.sys.dao.SysUserDao;
import com.sqx.modules.sys.entity.SysUserEntity;
import com.sqx.modules.utils.AliPayOrderUtil; import com.sqx.modules.utils.AliPayOrderUtil;
import com.sqx.modules.utils.InvitationCodeUtil; import com.sqx.modules.utils.InvitationCodeUtil;
import com.sqx.modules.utils.TimeCompleteUtils; import com.sqx.modules.utils.TimeCompleteUtils;
@@ -88,6 +87,9 @@ public class OrdersServiceImpl extends ServiceImpl<OrdersDao, Orders> implements
@Autowired @Autowired
private CourseDetailsDao courseDetailsDao; private CourseDetailsDao courseDetailsDao;
@Autowired
private SysUserDao sysUserDao;
private ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock(true); private ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock(true);
@@ -319,7 +321,8 @@ public class OrdersServiceImpl extends ServiceImpl<OrdersDao, Orders> implements
orders.setCreateTime(df.format(new Date())); orders.setCreateTime(df.format(new Date()));
//设置订单种类 //设置订单种类
orders.setOrdersType(1); orders.setOrdersType(1);
// 填充系统用户id
fillSysUserId(orders);
//不是会员或会员过期直接生成订单直接生成订单 //不是会员或会员过期直接生成订单直接生成订单
int count = baseMapper.insert(orders); int count = baseMapper.insert(orders);
result.put("flag", 2); result.put("flag", 2);
@@ -435,7 +438,7 @@ public class OrdersServiceImpl extends ServiceImpl<OrdersDao, Orders> implements
orders.setCreateTime(df.format(new Date())); orders.setCreateTime(df.format(new Date()));
//设置订单种类 //设置订单种类
orders.setOrdersType(1); orders.setOrdersType(1);
fillSysUserId(orders);
//不是会员或会员过期直接生成订单直接生成订单 //不是会员或会员过期直接生成订单直接生成订单
int count = baseMapper.insert(orders); int count = baseMapper.insert(orders);
result.put("flag", 2); result.put("flag", 2);
@@ -483,6 +486,7 @@ public class OrdersServiceImpl extends ServiceImpl<OrdersDao, Orders> implements
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//设置创建时间 //设置创建时间
orders.setCreateTime(df.format(new Date())); orders.setCreateTime(df.format(new Date()));
fillSysUserId(orders);
//插入到订单表中 //插入到订单表中
baseMapper.insert(orders); baseMapper.insert(orders);
return Result.success().put("data", orders); return Result.success().put("data", orders);
@@ -563,6 +567,7 @@ public class OrdersServiceImpl extends ServiceImpl<OrdersDao, Orders> implements
// orders.setSysUserId(Long.parseLong(String.valueOf(sysUserId))); // orders.setSysUserId(Long.parseLong(String.valueOf(sysUserId)));
// orders.setQdMoney(new BigDecimal(String.valueOf(map.get("qdMoney")))); // orders.setQdMoney(new BigDecimal(String.valueOf(map.get("qdMoney"))));
// } // }
fillSysUserId(orders);
baseMapper.updateById(orders); baseMapper.updateById(orders);
insertOrders(orders); insertOrders(orders);
return Result.success(); return Result.success();
@@ -669,7 +674,7 @@ public class OrdersServiceImpl extends ServiceImpl<OrdersDao, Orders> implements
List<Orders> orders = baseMapper.selectOrdersByOrdersNo(ordersNo, status, userId, courseId, List<Orders> orders = baseMapper.selectOrdersByOrdersNo(ordersNo, status, userId, courseId,
flag, time, userName, ordersType, TimeCompleteUtils.completeStartTime(startTime), TimeCompleteUtils.completeEndTime(endTime), sysUserId, qdCode, sysUserName); flag, time, userName, ordersType, TimeCompleteUtils.completeStartTime(startTime), TimeCompleteUtils.completeEndTime(endTime), sysUserId, qdCode, sysUserName);
Set<Long> courseIds = orders.stream().map(Orders::getCourseId).collect(Collectors.toSet()); Set<Long> courseIds = orders.stream().map(Orders::getCourseId).collect(Collectors.toSet());
if(CollUtil.isNotEmpty(courseIds)) { if (CollUtil.isNotEmpty(courseIds)) {
List<Course> courses = courseDao.selectBatchIds(courseIds); List<Course> courses = courseDao.selectBatchIds(courseIds);
Map<Long, String> map = courses.stream().collect(Collectors.toMap(Course::getCourseId, Course::getTitle)); Map<Long, String> map = courses.stream().collect(Collectors.toMap(Course::getCourseId, Course::getTitle));
orders.parallelStream().forEach(s -> { orders.parallelStream().forEach(s -> {
@@ -779,4 +784,25 @@ public class OrdersServiceImpl extends ServiceImpl<OrdersDao, Orders> implements
public Integer countOrderNum(Long userId, String time) { public Integer countOrderNum(Long userId, String time) {
return baseMapper.countOrderNum(userId, time); return baseMapper.countOrderNum(userId, time);
} }
@Override
public void fillSysUserId(Orders orders) {
if (orders.getSysUserId() != null) {
return;
}
orders.setSysUserId(1L);
UserEntity userEntity = userService.selectUserById(orders.getUserId());
if (userEntity == null) {
return;
}
String qdCode = userEntity.getQdCode();
if (StrUtil.isBlank(qdCode)) {
return;
}
SysUserEntity sysUserEntity = sysUserDao.selectOne(Wrappers.<SysUserEntity>lambdaQuery().eq(SysUserEntity::getQdCode, qdCode).last("LIMIT 1"));
if (sysUserEntity == null) {
return;
}
orders.setSysUserId(sysUserEntity.getSysUserId());
}
} }

View File

@@ -1,5 +1,6 @@
package com.sqx.modules.pay.dao; package com.sqx.modules.pay.dao;
import cn.hutool.core.date.DateTime;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sqx.modules.pay.entity.CashOut; import com.sqx.modules.pay.entity.CashOut;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@@ -22,7 +23,7 @@ public interface CashOutDao extends BaseMapper<CashOut> {
List<CashOut> selectYesterday(); List<CashOut> selectYesterday();
List<CashOut> selectTemp(); List<CashOut> selectTemp(@Param("time")DateTime time);
Double selectCashOutSum(@Param("userId") Long userId, @Param("startTime") Date startTime, @Param("endTime") Date endTime); Double selectCashOutSum(@Param("userId") Long userId, @Param("startTime") Date startTime, @Param("endTime") Date endTime);

View File

@@ -115,25 +115,23 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
} }
@Override @Override
public PageUtils selectCashOutList(Integer page, Integer limit, CashOut cashOut,@Param("isApp") boolean isApp) { public PageUtils selectCashOutList(Integer page, Integer limit, CashOut cashOut, @Param("isApp") boolean isApp) {
LambdaQueryWrapper<CashOut> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<CashOut> queryWrapper = new LambdaQueryWrapper<>();
if (isApp) { if (isApp) {
queryWrapper.eq(CashOut::getUserId, cashOut.getUserId()) queryWrapper.eq(CashOut::getUserId, cashOut.getUserId())
.eq(CashOut::getUserType, 1); .eq(CashOut::getUserType, 1);
}else { } else {
if (cashOut.getSysUserId() != null) { if (cashOut.getSysUserId() == null) {
return PageUtils.page(new PageInfo<>());
}else {
queryWrapper.eq(CashOut::getUserId, cashOut.getSysUserId()) queryWrapper.eq(CashOut::getUserId, cashOut.getSysUserId())
.eq(CashOut::getUserType, 2); .eq(CashOut::getUserType, 2);
} }
} }
if (!isApp && cashOut.getUserId() != null) {
queryWrapper.eq(CashOut::getUserId, cashOut.getUserId());
}
PageHelper.startPage(page, limit); PageHelper.startPage(page, limit);
List<CashOut> cashOutList = list(queryWrapper.eq(CashOut::getUserType, 1).orderByDesc(CashOut::getCreateAt)); List<CashOut> cashOutList = list(queryWrapper.orderByDesc(CashOut::getCreateAt));
if (!isApp) { if (!isApp) {
ArrayList<Long> userIdList = new ArrayList<>(); ArrayList<Long> userIdList = new ArrayList<>();
@@ -662,9 +660,9 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
if (StrUtil.isNotBlank(cashOut.getStartTime()) && StrUtil.isNotBlank(cashOut.getEndTime())) { if (StrUtil.isNotBlank(cashOut.getStartTime()) && StrUtil.isNotBlank(cashOut.getEndTime())) {
queryWrapper.between(CashOut::getCreateAt, cashOut.getStartTime(), cashOut.getEndTime()); queryWrapper.between(CashOut::getCreateAt, cashOut.getStartTime(), cashOut.getEndTime());
}else if (StrUtil.isNotBlank(cashOut.getStartTime())) { } else if (StrUtil.isNotBlank(cashOut.getStartTime())) {
queryWrapper.ge(CashOut::getCreateAt, cashOut.getStartTime()); queryWrapper.ge(CashOut::getCreateAt, cashOut.getStartTime());
}else if (StrUtil.isNotBlank(cashOut.getEndTime())) { } else if (StrUtil.isNotBlank(cashOut.getEndTime())) {
queryWrapper.le(CashOut::getCreateAt, cashOut.getEndTime()); queryWrapper.le(CashOut::getCreateAt, cashOut.getEndTime());
} }

View File

@@ -412,6 +412,7 @@ public class DyServiceImpl implements DyService {
orders.setPayWay(7); orders.setPayWay(7);
orders.setStatus(1); orders.setStatus(1);
orders.setPayTime(DateUtils.format(new Date())); orders.setPayTime(DateUtils.format(new Date()));
ordersService.fillSysUserId(orders);
ordersService.updateById(orders); ordersService.updateById(orders);
UserEntity user = userService.selectUserById(orders.getUserId()); UserEntity user = userService.selectUserById(orders.getUserId());
UserEntity byUser = userService.queryByInvitationCode(user.getInviterCode()); UserEntity byUser = userService.queryByInvitationCode(user.getInviterCode());
@@ -431,6 +432,7 @@ public class DyServiceImpl implements DyService {
orders.setSysUserId(Long.parseLong(String.valueOf(sysUserId))); orders.setSysUserId(Long.parseLong(String.valueOf(sysUserId)));
orders.setQdMoney(new BigDecimal(String.valueOf(map.get("qdMoney")))); orders.setQdMoney(new BigDecimal(String.valueOf(map.get("qdMoney"))));
} }
ordersService.fillSysUserId(orders);
ordersService.insertOrders(orders); ordersService.insertOrders(orders);
}else{ }else{
String remark = payDetails.getRemark(); String remark = payDetails.getRemark();
@@ -502,6 +504,7 @@ public class DyServiceImpl implements DyService {
if(StringUtils.isNotEmpty(currency) && "DIAMOND".equals(currency)){ if(StringUtils.isNotEmpty(currency) && "DIAMOND".equals(currency)){
orders.setDiamond(1); orders.setDiamond(1);
} }
ordersService.fillSysUserId(orders);
ordersService.updateById(orders); ordersService.updateById(orders);
UserEntity user = userService.selectUserById(orders.getUserId()); UserEntity user = userService.selectUserById(orders.getUserId());
UserEntity byUser = userService.queryByInvitationCode(user.getInviterCode()); UserEntity byUser = userService.queryByInvitationCode(user.getInviterCode());
@@ -521,6 +524,7 @@ public class DyServiceImpl implements DyService {
orders.setSysUserId(Long.parseLong(String.valueOf(sysUserId))); orders.setSysUserId(Long.parseLong(String.valueOf(sysUserId)));
orders.setQdMoney(new BigDecimal(String.valueOf(map.get("qdMoney")))); orders.setQdMoney(new BigDecimal(String.valueOf(map.get("qdMoney"))));
} }
ordersService.fillSysUserId(orders);
ordersService.insertOrders(orders); ordersService.insertOrders(orders);
}else{ }else{
if(StringUtils.isNotEmpty(currency) && "DIAMOND".equals(currency)){ if(StringUtils.isNotEmpty(currency) && "DIAMOND".equals(currency)){
@@ -615,5 +619,4 @@ public class DyServiceImpl implements DyService {
} }
} }

View File

@@ -188,6 +188,7 @@ public class KsServiceImpl implements KsService {
orders.setPayWay(8); orders.setPayWay(8);
orders.setStatus(1); orders.setStatus(1);
orders.setPayTime(DateUtils.format(new Date())); orders.setPayTime(DateUtils.format(new Date()));
ordersService.fillSysUserId(orders);
ordersService.updateById(orders); ordersService.updateById(orders);
UserEntity user = userService.selectUserById(orders.getUserId()); UserEntity user = userService.selectUserById(orders.getUserId());
UserEntity byUser = userService.queryByInvitationCode(user.getInviterCode()); UserEntity byUser = userService.queryByInvitationCode(user.getInviterCode());
@@ -207,6 +208,7 @@ public class KsServiceImpl implements KsService {
orders.setSysUserId(Long.parseLong(String.valueOf(sysUserId))); orders.setSysUserId(Long.parseLong(String.valueOf(sysUserId)));
orders.setQdMoney(new BigDecimal(String.valueOf(map.get("qdMoney")))); orders.setQdMoney(new BigDecimal(String.valueOf(map.get("qdMoney"))));
} }
ordersService.fillSysUserId(orders);
ordersService.insertOrders(orders); ordersService.insertOrders(orders);
}else{ }else{
userMoneyService.updateMoney(1,payDetails.getUserId(),payDetails.getMoney()); userMoneyService.updateMoney(1,payDetails.getUserId(),payDetails.getMoney());

View File

@@ -10,9 +10,11 @@ import com.sqx.modules.pay.dao.PayDetailsDao;
import com.sqx.modules.pay.entity.PayDetails; import com.sqx.modules.pay.entity.PayDetails;
import com.sqx.modules.pay.service.PayDetailsService; import com.sqx.modules.pay.service.PayDetailsService;
import com.sqx.modules.utils.TimeCompleteUtils; import com.sqx.modules.utils.TimeCompleteUtils;
import org.apache.shardingsphere.api.hint.HintManager;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;

View File

@@ -303,6 +303,7 @@ public class WxServiceImpl implements WxService {
orders.setSysUserId(Long.parseLong(String.valueOf(sysUserId))); orders.setSysUserId(Long.parseLong(String.valueOf(sysUserId)));
orders.setQdMoney(new BigDecimal(String.valueOf(map.get("qdMoney")))); orders.setQdMoney(new BigDecimal(String.valueOf(map.get("qdMoney"))));
} }
ordersService.fillSysUserId(orders);
ordersService.updateById(orders); ordersService.updateById(orders);
ordersService.insertOrders(orders); ordersService.insertOrders(orders);
}else{ }else{
@@ -383,6 +384,7 @@ public class WxServiceImpl implements WxService {
orders.setSysUserId(Long.parseLong(String.valueOf(sysUserId))); orders.setSysUserId(Long.parseLong(String.valueOf(sysUserId)));
orders.setQdMoney(new BigDecimal(String.valueOf(map.get("qdMoney")))); orders.setQdMoney(new BigDecimal(String.valueOf(map.get("qdMoney"))));
} }
ordersService.fillSysUserId(orders);
ordersService.updateById(orders); ordersService.updateById(orders);
ordersService.insertOrders(orders); ordersService.insertOrders(orders);
}else{ }else{

View File

@@ -127,6 +127,7 @@ spring:
- qrtz_cron_triggers - qrtz_cron_triggers
- qrtz_calendars - qrtz_calendars
- qrtz_blob_triggers - qrtz_blob_triggers
- tb_user_blacklist
# 日志配置 # 日志配置
logging: logging:

View File

@@ -299,22 +299,16 @@
<select id="selectInviteUserList" resultType="com.sqx.modules.app.entity.UserEntity"> <select id="selectInviteUserList" resultType="com.sqx.modules.app.entity.UserEntity">
SELECT SELECT any_value(inviter_code) as inviterCode, COUNT(*) AS counts
u.*, FROM tb_user
IFNULL( b.counts, 0 ) AS counts, <if test="queryUserIdList != null">
0 AS money where user_id in
FROM <foreach collection="queryUserIdList" item="id" open="(" separator="," close=")">
tb_user u #{id}
LEFT JOIN ( SELECT inviter_code, COUNT(*) AS counts FROM tb_user u1 GROUP BY inviter_code ) AS b ON u.invitation_code = b.inviter_code </foreach>
WHERE
1 = 1
<if test="userName!=null and userName!=''">
and user_name like concat('%',#{userName},'%')
</if> </if>
<if test="phone!=null and phone!=''">
and phone like concat('%',#{phone},'%') GROUP BY inviter_code order by counts desc
</if>
order by money desc,counts desc
</select> </select>
<select id="selectUserOnLineCount" resultType="Integer"> <select id="selectUserOnLineCount" resultType="Integer">

View File

@@ -40,5 +40,15 @@
WHERE WHERE
c1.classify = 3 c1.classify = 3
AND c1.user_id = #{userId} AND c1.user_id = #{userId}
order by c1.create_time desc
</select>
<select id="selectClassify1ByUserId" resultType="com.sqx.modules.course.entity.Course">
SELECT c1.course_id as courseId,
c1.course_details_id as courseDetailsId
FROM `course_collect` c1
WHERE c1.classify = 3
AND c1.user_id = #{userId}
order by c1.create_time desc
</select> </select>
</mapper> </mapper>

View File

@@ -108,7 +108,7 @@
SELECT course_id as courseId, SELECT course_id as courseId,
COUNT(*) AS courseDetailsCount COUNT(*) AS courseDetailsCount
FROM course_details FROM course_details
where course_details_id in where course_id in
<foreach collection="courseIdList" item="ids" open="(" separator="," close=")"> <foreach collection="courseIdList" item="ids" open="(" separator="," close=")">
#{ids} #{ids}
</foreach> </foreach>

View File

@@ -183,7 +183,7 @@
<select id="selectOrdersCount" resultType="Integer"> <select id="selectOrdersCount" resultType="Integer">
select count(*) from orders where 1=1 select count(*) from orders where 1=1
<if test="sysUserId!=null"> <if test="sysUserId!=null and sysUserId != 1">
and sys_user_id=#{sysUserId} and sys_user_id=#{sysUserId}
</if> </if>
<if test="status!=null"> <if test="status!=null">
@@ -206,7 +206,7 @@
<select id="selectOrdersMoney" resultType="Double"> <select id="selectOrdersMoney" resultType="Double">
select sum(pay_money) from orders select sum(pay_money) from orders
where 1=1 where 1=1
<if test="sysUserId!=null"> <if test="sysUserId!=null and sysUserId != 1">
and sys_user_id=#{sysUserId} and sys_user_id=#{sysUserId}
</if> </if>
<if test="status!=null"> <if test="status!=null">

View File

@@ -18,7 +18,7 @@
<select id="selectTemp" resultType="com.sqx.modules.pay.entity.CashOut"> <select id="selectTemp" resultType="com.sqx.modules.pay.entity.CashOut">
SELECT * FROM cash_out SELECT * FROM cash_out
WHERE WHERE
state = 0 and order_number is not null and order_number != '' (state = 0 or state=4) and order_number is not null and order_number != '' and create_at &lt; #{time}
</select> </select>
<select id="selectCashOutSum" resultType="Double"> <select id="selectCashOutSum" resultType="Double">
@@ -26,7 +26,12 @@
</select> </select>
<select id="selectSysUserCashOutSum" resultType="Double"> <select id="selectSysUserCashOutSum" resultType="Double">
select sum(money) from cash_out where state = 1 and sys_user_id=#{sysUserId} and create_at &gt; #{time} select sum(money) from cash_out where state = 1
<if test="sysUserId != null">
and user_id=#{sysUserId}
</if>
and user_type = 2
and create_at &gt; #{time}
</select> </select>
<select id="sumMoney" resultType="Double"> <select id="sumMoney" resultType="Double">

View File

@@ -56,7 +56,6 @@
<if test="state==null or state==-1"> <if test="state==null or state==-1">
and s.state!=-1 and s.state!=-1
</if> </if>
group by s.id
order by s.create_time desc order by s.create_time desc
</select> </select>

View File

@@ -1,19 +1,9 @@
package com.sqx; package com.sqx;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.credentials.provider.StaticCredentialsProvider;
import com.aliyun.tea.TeaException;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.dytnsapi20200217.Client;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.sqx.modules.app.dao.UserDao; import com.sqx.modules.app.dao.UserDao;
import com.sqx.modules.app.dao.UserMoneyDao; import com.sqx.modules.app.dao.UserMoneyDao;
import com.sqx.modules.app.dao.UserMoneyDetailsDao; import com.sqx.modules.app.dao.UserMoneyDetailsDao;
@@ -25,26 +15,21 @@ import com.sqx.modules.app.service.InviteAchievementService;
import com.sqx.modules.app.service.UserService; import com.sqx.modules.app.service.UserService;
import com.sqx.modules.job.task.TempOrdersTask; import com.sqx.modules.job.task.TempOrdersTask;
import com.sqx.modules.orders.service.OrdersService; import com.sqx.modules.orders.service.OrdersService;
import com.sqx.modules.pay.controller.app.WuyouController;
import com.sqx.modules.pay.dao.PayDetailsDao; import com.sqx.modules.pay.dao.PayDetailsDao;
import com.sqx.modules.pay.entity.PayDetails; import com.sqx.modules.pay.entity.PayDetails;
import com.sqx.modules.pay.service.PayDetailsService; import com.sqx.modules.pay.service.PayDetailsService;
import com.sqx.modules.pay.wuyou.BaseResp;
import com.sqx.modules.sys.service.SysUserService; import com.sqx.modules.sys.service.SysUserService;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.util.List;
import java.util.*; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ActiveProfiles("pay") @ActiveProfiles("pay")
@@ -76,14 +61,14 @@ public class Tets {
@Autowired @Autowired
private OrdersService ordersService; private OrdersService ordersService;
@Test //@Test
public void test4() { public void test4() {
UserEntity userEntity = userDao.selectById(1072962203591784209L); UserEntity userEntity = userDao.selectById(1072962203591784209L);
UserEntity userEntity2 = userDao.selectById(1072640875319932689L); UserEntity userEntity2 = userDao.selectById(1072640875319932689L);
tempOrdersTask.activities(userEntity, userEntity2); tempOrdersTask.activities(userEntity, userEntity2);
} }
@Test //@Test
public void test3() { public void test3() {
List<UserMoneyDetails> userMoneyDetails = userMoneyDetailsDao.selectList(new LambdaQueryWrapper<UserMoneyDetails>().in(UserMoneyDetails::getClassify, 6, 1).isNotNull(UserMoneyDetails::getUserId).groupBy(UserMoneyDetails::getUserId).select(UserMoneyDetails::getUserId)); List<UserMoneyDetails> userMoneyDetails = userMoneyDetailsDao.selectList(new LambdaQueryWrapper<UserMoneyDetails>().in(UserMoneyDetails::getClassify, 6, 1).isNotNull(UserMoneyDetails::getUserId).groupBy(UserMoneyDetails::getUserId).select(UserMoneyDetails::getUserId));
Set<Long> useridList = userMoneyDetails.stream().map(UserMoneyDetails::getUserId).collect(Collectors.toSet()); Set<Long> useridList = userMoneyDetails.stream().map(UserMoneyDetails::getUserId).collect(Collectors.toSet());
@@ -100,12 +85,12 @@ public class Tets {
} }
@Test //@Test
public void test2() { public void test2() {
inviteAchievementService.remove(new LambdaQueryWrapper<>()); inviteAchievementService.remove(new LambdaQueryWrapper<>());
//Wrappers.<UserEntity>lambdaQuery().apply("create_time >= str_to_date({0}, '%Y-%m-%d %H:%i:%s')", "2025-01-01 00:00:00");
List<UserEntity> userinfoList = userService.list(); List<UserEntity> userinfoList = userService.list(Wrappers.emptyWrapper());
System.out.println(userinfoList.size());
userinfoList.parallelStream().forEach((userEntity -> { userinfoList.parallelStream().forEach((userEntity -> {
if (StrUtil.isBlank(userEntity.getInviterCode())) return; if (StrUtil.isBlank(userEntity.getInviterCode())) return;