From 7811a9b4afc0ea9357df3a5e102cba8d90815ab4 Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Tue, 7 Jan 2025 10:34:01 +0800 Subject: [PATCH 01/18] =?UTF-8?q?=E6=AD=A3=E5=BC=8F=E7=8E=AF=E5=A2=83?= =?UTF-8?q?=E6=89=A7=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/sqx/config/ShardingConfig.java | 3 --- .../sqx/modules/app/service/impl/UserServiceImpl.java | 2 -- .../java/com/sqx/modules/job/task/SpinningTask3.java | 9 +++------ 3 files changed, 3 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/sqx/config/ShardingConfig.java b/src/main/java/com/sqx/config/ShardingConfig.java index 7cc0f0b7..801904f1 100644 --- a/src/main/java/com/sqx/config/ShardingConfig.java +++ b/src/main/java/com/sqx/config/ShardingConfig.java @@ -37,9 +37,6 @@ import java.util.*; @ConfigurationProperties(prefix = "spring.shardingsphere") public class ShardingConfig { - @Value("${spring.profiles.active}") - private String activeProfile; - /** * 读取数据源信息 */ 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 12459bb7..728645d4 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 @@ -126,8 +126,6 @@ public class UserServiceImpl extends ServiceImpl implements private final UserVipDao userVipDao; private final InviteAchievementService inviteAchievementService; - @Value("${spring.profiles.active}") - private String profiles; private ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock(true); diff --git a/src/main/java/com/sqx/modules/job/task/SpinningTask3.java b/src/main/java/com/sqx/modules/job/task/SpinningTask3.java index aadbb678..27dfd3ee 100644 --- a/src/main/java/com/sqx/modules/job/task/SpinningTask3.java +++ b/src/main/java/com/sqx/modules/job/task/SpinningTask3.java @@ -10,6 +10,7 @@ import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Profile; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -20,6 +21,7 @@ import java.util.List; @Component @EnableScheduling +@Profile({"prod"}) public class SpinningTask3 { @Resource @@ -27,16 +29,11 @@ public class SpinningTask3 { @Resource private DiscSpinningRecordService recordService; - @Value("${spring.profiles.active}") - private String profiles; private Logger logger = LoggerFactory.getLogger(getClass()); - @Scheduled(cron = "0 0/5 * * * ? ") + @Scheduled(cron = "0 0/1 * * * ? ") public void record() { - if (!"prod".equals(profiles)) { - return; - } record("1"); } From 8888b0b7312a099f6431c80744c7d7e2939cc4fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Tue, 7 Jan 2025 10:45:07 +0800 Subject: [PATCH 02/18] =?UTF-8?q?1.=E5=8F=96=E6=B6=88=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E7=94=A8=E6=88=B7url?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/app/interceptor/AuthorizationInterceptor.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/sqx/modules/app/interceptor/AuthorizationInterceptor.java b/src/main/java/com/sqx/modules/app/interceptor/AuthorizationInterceptor.java index 7e778a39..d16296a2 100644 --- a/src/main/java/com/sqx/modules/app/interceptor/AuthorizationInterceptor.java +++ b/src/main/java/com/sqx/modules/app/interceptor/AuthorizationInterceptor.java @@ -91,9 +91,9 @@ public class AuthorizationInterceptor extends HandlerInterceptorAdapter { throw new CzgException("ip跳动过于频繁,请联系管理员解封"); } - ThreadUtil.execAsync(() -> { - redisService.recordUrlVisitCountWithIp(userId, request.getRequestURI(), ip); - }); +// ThreadUtil.execAsync(() -> { +// redisService.recordUrlVisitCountWithIp(userId, request.getRequestURI(), ip); +// }); // 设置 userId 到 request 里,后续根据 userId 获取用户信息 UserEntity user = userService.selectUserById(userId); From 89a1e0c4e8138435babbb17197638f1e603d4ee4 Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Tue, 7 Jan 2025 10:47:11 +0800 Subject: [PATCH 03/18] =?UTF-8?q?=E4=BB=A3=E7=90=86=E5=95=86=E6=8F=90?= =?UTF-8?q?=E7=8E=B0=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pay/service/impl/CashOutServiceImpl.java | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/sqx/modules/pay/service/impl/CashOutServiceImpl.java b/src/main/java/com/sqx/modules/pay/service/impl/CashOutServiceImpl.java index 618afb3c..a822b05f 100644 --- a/src/main/java/com/sqx/modules/pay/service/impl/CashOutServiceImpl.java +++ b/src/main/java/com/sqx/modules/pay/service/impl/CashOutServiceImpl.java @@ -115,25 +115,23 @@ public class CashOutServiceImpl extends ServiceImpl impleme } @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 queryWrapper = new LambdaQueryWrapper<>(); if (isApp) { queryWrapper.eq(CashOut::getUserId, cashOut.getUserId()) .eq(CashOut::getUserType, 1); - }else { - if (cashOut.getSysUserId() != null) { + } else { + if (cashOut.getSysUserId() == null) { + return PageUtils.page(new PageInfo<>()); + }else { queryWrapper.eq(CashOut::getUserId, cashOut.getSysUserId()) .eq(CashOut::getUserType, 2); } } - if (!isApp && cashOut.getUserId() != null) { - queryWrapper.eq(CashOut::getUserId, cashOut.getUserId()); - } - PageHelper.startPage(page, limit); - List cashOutList = list(queryWrapper.eq(CashOut::getUserType, 1).orderByDesc(CashOut::getCreateAt)); + List cashOutList = list(queryWrapper.orderByDesc(CashOut::getCreateAt)); if (!isApp) { ArrayList userIdList = new ArrayList<>(); @@ -662,9 +660,9 @@ public class CashOutServiceImpl extends ServiceImpl impleme if (StrUtil.isNotBlank(cashOut.getStartTime()) && StrUtil.isNotBlank(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()); - }else if (StrUtil.isNotBlank(cashOut.getEndTime())) { + } else if (StrUtil.isNotBlank(cashOut.getEndTime())) { queryWrapper.le(CashOut::getCreateAt, cashOut.getEndTime()); } From fa6603212ae2219df17510e449e76622629f07e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Tue, 7 Jan 2025 11:06:32 +0800 Subject: [PATCH 04/18] =?UTF-8?q?1.=E5=AE=9E=E5=90=8D=E6=AC=A1=E6=95=B0?= =?UTF-8?q?=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sqx/modules/app/controller/app/AppController.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/sqx/modules/app/controller/app/AppController.java b/src/main/java/com/sqx/modules/app/controller/app/AppController.java index b9f04786..8a79eaf7 100644 --- a/src/main/java/com/sqx/modules/app/controller/app/AppController.java +++ b/src/main/java/com/sqx/modules/app/controller/app/AppController.java @@ -144,7 +144,7 @@ public class AppController { if (authErrMsg == null) { Integer idCount = userInfoService.countCertCount(certName, certNum); - if (idCount > 1) { + if (idCount >= 1) { authErrMsg = "实名修改失败: 此实名信息已存在"; } } @@ -163,7 +163,11 @@ public class AppController { userInfo.setCertName(certName); userInfo.setCertNo(certNum); userInfo.setUpdateTime(DateUtil.date()); - userInfoService.update(userInfo, new LambdaQueryWrapper().eq(UserInfo::getUserId, userId)); + boolean update = userInfoService.update(userInfo, new LambdaQueryWrapper().eq(UserInfo::getUserId, userId).eq(UserInfo::getId, userInfo.getId())); + if (!update) { + ApiAccessLimitUtil.removeKey(String.valueOf(userId), "updateAuthCertInfo"); + ApiAccessLimitUtil.removeKey(certNum, "updateAuthCertInfoByIdCard"); + } }catch (Exception e) { ApiAccessLimitUtil.removeKey(String.valueOf(userId), "updateAuthCertInfo"); ApiAccessLimitUtil.removeKey(certNum, "updateAuthCertInfoByIdCard"); From 0711e21f2f5babd3e8e490a8725199a5b8f7f993 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Tue, 7 Jan 2025 11:20:00 +0800 Subject: [PATCH 05/18] =?UTF-8?q?1.=E5=AE=9E=E5=90=8D=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sqx/modules/app/controller/app/AppController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/sqx/modules/app/controller/app/AppController.java b/src/main/java/com/sqx/modules/app/controller/app/AppController.java index 8a79eaf7..c570ce67 100644 --- a/src/main/java/com/sqx/modules/app/controller/app/AppController.java +++ b/src/main/java/com/sqx/modules/app/controller/app/AppController.java @@ -105,7 +105,7 @@ public class AppController { UserEntity userEntity = userService.getById(userId); String errMsg = null; - if (StrUtil.isNotBlank(zhiFuBao) && !zhiFuBao.equals(userEntity.getZhiFuBao())) { + if (StrUtil.isNotBlank(zhiFuBao) && (!zhiFuBao.equals(userEntity.getZhiFuBao())) || !certName.equals(userEntity.getZhiFuBaoName())) { int count = userService.count(new QueryWrapper() .ne("user_id", userId) .eq("zhi_fu_bao_name", certName) @@ -134,7 +134,7 @@ public class AppController { String authErrMsg = null; - if (StrUtil.isNotBlank(certNum) && !certNum.equals(userInfo.getCertNo())) { + if (StrUtil.isNotBlank(certNum) && (!certNum.equals(userInfo.getCertNo()) || !certName.equals(userInfo.getCertName()))) { if (StrUtil.isNotBlank(userEntity.getZhiFuBaoName()) && !certName.equals(userEntity.getZhiFuBaoName())) { authErrMsg = "实名修改失败: 姓名与绑定支付宝信息不相符"; } From 5acbec182b4ea6ec357a17d8c10e7d4a39f0029c Mon Sep 17 00:00:00 2001 From: GYJ <1157756119@qq.com> Date: Tue, 7 Jan 2025 12:44:53 +0800 Subject: [PATCH 06/18] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AE=9E=E5=90=8D?= =?UTF-8?q?=E8=AE=A4=E8=AF=81=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sqx/common/utils/ApiAccessLimitUtil.java | 55 ++++++-- .../app/controller/app/AppController.java | 118 +++++++----------- .../controller/app/AppLoginController.java | 10 -- 3 files changed, 87 insertions(+), 96 deletions(-) diff --git a/src/main/java/com/sqx/common/utils/ApiAccessLimitUtil.java b/src/main/java/com/sqx/common/utils/ApiAccessLimitUtil.java index e6e5c944..5b5dc62d 100644 --- a/src/main/java/com/sqx/common/utils/ApiAccessLimitUtil.java +++ b/src/main/java/com/sqx/common/utils/ApiAccessLimitUtil.java @@ -34,8 +34,9 @@ public class ApiAccessLimitUtil { /** * 默认 当月5次 - * @param id 唯一值 - * @param key 接口名称 sys:limit:接口名称 + * + * @param id 唯一值 + * @param key 接口名称 sys:limit:接口名称 * @return */ public static boolean isAccessAllowed(String id, String key) { @@ -58,9 +59,10 @@ public class ApiAccessLimitUtil { /** * 默认月 month/月/自然月 - * @param id 唯一值 - * @param key 接口名称 sys:limit:接口名称 - * @param count 次数限制 + * + * @param id 唯一值 + * @param key 接口名称 sys:limit:接口名称 + * @param count 次数限制 * @return */ public static boolean isAccessAllowed(String id, String key, Integer count) { @@ -82,9 +84,10 @@ public class ApiAccessLimitUtil { /** * 默认 5次 + * * @param id 唯一值 * @param key 接口名称 sys:limit:接口名称 - * @param timeFormat day/天/自然天 week/周/本周日 month/月/自然月 year/年/自然年 + * @param timeFormat day/天/自然天 week/周/本周日 month/月/自然月 year/年/自然年 * @return */ public static boolean isAccessAllowed(String id, String key, String timeFormat) { @@ -108,7 +111,7 @@ public class ApiAccessLimitUtil { * @param id 唯一值 * @param key 接口名称 sys:limit:接口名称 * @param count 次数限制 - * @param timeFormat day/天/自然天 week/周/本周日 month/月/自然月 year/年/自然年 + * @param timeFormat day/天/自然天 week/周/本周日 month/月/自然月 year/年/自然年 * @return */ public static boolean isAccessAllowed(String id, String key, Integer count, String timeFormat) { @@ -118,7 +121,7 @@ public class ApiAccessLimitUtil { long expireAt; if (StrUtil.isBlank(timeFormat)) { expireAt = count; - }else { + } else { // 根据不同时间周期设置过期时间并初始化访问次数为1 expireAt = calculateExpireAt(timeFormat); } @@ -133,14 +136,40 @@ public class ApiAccessLimitUtil { return false; } + public static boolean getCertAuthIsAccessAllowed(String id, String key, Integer count) { + String redisKey = generateRedisKey(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 = generateRedisKey(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) { String redisKey = generateRedisKey(key, id); redisUtils.delete(redisKey); } - public static T runFunAndCheckKey(Supplier supplier, String lockKey, Integer seconds) { - try{ + public static T runFunAndCheckKey(Supplier supplier, String lockKey, Integer seconds) { + try { // 创建线程id, 用作判断 String clientId = UUID.randomUUID().toString(); // 设置分布式锁 @@ -154,12 +183,12 @@ public class ApiAccessLimitUtil { lock = Boolean.TRUE.equals(redisUtils.setIfAbsent(lockKey, clientId, seconds)); } return supplier.get(); - } catch (RuntimeException e){ + } catch (RuntimeException e) { log.error("执行出错", e); throw e; } catch (InterruptedException e) { throw new RuntimeException(e); - } finally{ + } finally { redisUtils.delete(lockKey); } } @@ -189,7 +218,7 @@ public class ApiAccessLimitUtil { Date now = DateUtil.beginOfDay(DateUtil.date()); Date expireDate = null; if ("day".equals(timePeriod)) { - expireDate = DateUtil.endOfDay(now); + expireDate = DateUtil.endOfDay(now); } else if ("week".equals(timePeriod)) { expireDate = DateUtil.endOfWeek(now); } else if ("month".equals(timePeriod)) { diff --git a/src/main/java/com/sqx/modules/app/controller/app/AppController.java b/src/main/java/com/sqx/modules/app/controller/app/AppController.java index c570ce67..28f32d34 100644 --- a/src/main/java/com/sqx/modules/app/controller/app/AppController.java +++ b/src/main/java/com/sqx/modules/app/controller/app/AppController.java @@ -9,7 +9,6 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.sqx.common.annotation.Debounce; -import com.sqx.common.exception.SqxException; import com.sqx.common.utils.ApiAccessLimitUtil; import com.sqx.common.utils.DataLimitUtil; import com.sqx.common.utils.Result; @@ -33,6 +32,7 @@ import java.util.Map; /** * APP登录授权 + * @author mac */ @RestController @RequestMapping("/app/user") @@ -104,87 +104,75 @@ public class AppController { UserInfo userInfo = userInfoService.getByUserId(userId); UserEntity userEntity = userService.getById(userId); - String errMsg = null; if (StrUtil.isNotBlank(zhiFuBao) && (!zhiFuBao.equals(userEntity.getZhiFuBao())) || !certName.equals(userEntity.getZhiFuBaoName())) { int count = userService.count(new QueryWrapper() .ne("user_id", userId) .eq("zhi_fu_bao_name", certName) .eq("zhi_fu_bao", zhiFuBao)); if (count > 0) { - errMsg = "支付宝信息修改失败: 一个支付宝账号仅可绑定一个用户"; + return Result.error("支付宝信息修改失败: 此支付宝账号已被绑定"); } - if (errMsg == null && StrUtil.isNotBlank(userInfo.getCertName()) && !certName.equals(userInfo.getCertName())) { - errMsg = "支付宝信息修改失败: 姓名与实名认证信息不相符"; + if (StrUtil.isNotBlank(userInfo.getCertName()) && !certName.equals(userInfo.getCertName())) { + return Result.error("支付宝信息修改失败: 姓名与实名认证信息不相符"); } - if (errMsg == null && !DataLimitUtil.isAccessAllowed(zhiFuBao+certName, Integer.parseInt(commonRepository.findOne(924).getValue()), "month")) { - errMsg = "支付宝信息修改失败: 相同支付宝账号每月可绑定次数已用完"; + if (!DataLimitUtil.isAccessAllowed(zhiFuBao + certName, Integer.parseInt(commonRepository.findOne(924).getValue()), "month")) { + return Result.error("支付宝信息修改失败: 相同支付宝账号每月可绑定次数已用完"); } - if (errMsg == null && !ApiAccessLimitUtil.isAccessAllowed(userId.toString(), "updateZFB", Integer.parseInt(commonRepository.findOne(925).getValue()), "month")) { - errMsg = "支付宝信息修改失败: 每月可修改次数已用完,请联系管理员"; + if (!ApiAccessLimitUtil.isAccessAllowed(userId.toString(), "updateZFB", Integer.parseInt(commonRepository.findOne(925).getValue()), "month")) { + return Result.error("支付宝信息修改失败: 每月可修改次数已用完,请联系管理员"); } - if (errMsg == null) { - userEntity.setZhiFuBao(zhiFuBao); - userEntity.setZhiFuBaoName(certName); - userService.update(userEntity, new LambdaQueryWrapper().eq(UserEntity::getUserId, userId)); - } + userEntity.setZhiFuBao(zhiFuBao); + userEntity.setZhiFuBaoName(certName); + userService.update(userEntity, new LambdaQueryWrapper().eq(UserEntity::getUserId, userId)); + } + + if (StrUtil.isBlank(certNum)) { + return Result.success(); } - String authErrMsg = null; - if (StrUtil.isNotBlank(certNum) && (!certNum.equals(userInfo.getCertNo()) || !certName.equals(userInfo.getCertName()))) { + if (!certNum.equals(userInfo.getCertNo()) || !certName.equals(userInfo.getCertName())) { if (StrUtil.isNotBlank(userEntity.getZhiFuBaoName()) && !certName.equals(userEntity.getZhiFuBaoName())) { - authErrMsg = "实名修改失败: 姓名与绑定支付宝信息不相符"; + return Result.error("实名修改失败: 姓名与绑定支付宝信息不相符"); } - if (authErrMsg == null && !IdcardUtil.isValidCard(certNum)) { - authErrMsg = "实名修改失败: 身份证号码有误"; + if (!IdcardUtil.isValidCard(certNum)) { + return Result.error("实名修改失败: 身份证号码有误"); } - if (authErrMsg == null) { - Integer idCount = userInfoService.countCertCount(certName, certNum); - if (idCount >= 1) { - authErrMsg = "实名修改失败: 此实名信息已存在"; - } - } - - if (authErrMsg == null && !ApiAccessLimitUtil.isAccessAllowed(String.valueOf(userId), "updateAuthCertInfo", 1, "month")) { - authErrMsg = "实名修改失败: 账号每月可修改次数已用完,请联系管理员"; - } - - if (authErrMsg == null && !ApiAccessLimitUtil.isAccessAllowed(certNum, "updateAuthCertInfoByIdCard", 1, "month")) { - authErrMsg = "实名修改失败: 此身份证信息次月已绑定过,请联系管理员"; - } - - if (authErrMsg == null) { - try { - aliService.authCertNo(certName, certNum); - userInfo.setCertName(certName); - userInfo.setCertNo(certNum); - userInfo.setUpdateTime(DateUtil.date()); - boolean update = userInfoService.update(userInfo, new LambdaQueryWrapper().eq(UserInfo::getUserId, userId).eq(UserInfo::getId, userInfo.getId())); - if (!update) { - ApiAccessLimitUtil.removeKey(String.valueOf(userId), "updateAuthCertInfo"); - ApiAccessLimitUtil.removeKey(certNum, "updateAuthCertInfoByIdCard"); - } - }catch (Exception e) { - ApiAccessLimitUtil.removeKey(String.valueOf(userId), "updateAuthCertInfo"); - ApiAccessLimitUtil.removeKey(certNum, "updateAuthCertInfoByIdCard"); - authErrMsg = "实名修改失败: 身份证信息不匹配"; + Integer idCount = userInfoService.countCertCount(certName, certNum); + if (idCount >= 1) { + return Result.error("实名修改失败: 此身份证信息已绑定过"); + } + + if (!ApiAccessLimitUtil.getCertAuthIsAccessAllowed(String.valueOf(userId), "updateAuthCertInfo", 1)) { + return Result.error("实名修改失败: 每月可修改次数已用完,请联系管理员"); + } + + if (!ApiAccessLimitUtil.getCertAuthIsAccessAllowed(certNum, "updateAuthCertInfoByIdCard", 1)) { + return Result.error("实名修改失败: 每月可修改次数已用完,请联系管理员"); + } + + try { + aliService.authCertNo(certName, certNum); + userInfo.setCertName(certName); + userInfo.setCertNo(certNum); + userInfo.setUpdateTime(DateUtil.date()); + boolean update = userInfoService.update(userInfo, new LambdaQueryWrapper().eq(UserInfo::getUserId, userId).eq(UserInfo::getId, userInfo.getId())); + if (!update) { + return Result.error("实名修改失败: 请稍后重试"); } + 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(); - // 去除首绑支付宝奖励 -// if (bool && isFirstBind) { -// userService.firstBindAwardsMoney(old); -// } } @@ -198,22 +186,6 @@ public class AppController { 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 @RequestMapping(value = "/updateUserImageUrl", method = RequestMethod.POST) @ApiOperation("用户修改头像") diff --git a/src/main/java/com/sqx/modules/app/controller/app/AppLoginController.java b/src/main/java/com/sqx/modules/app/controller/app/AppLoginController.java index a621ad32..f6d55dd1 100644 --- a/src/main/java/com/sqx/modules/app/controller/app/AppLoginController.java +++ b/src/main/java/com/sqx/modules/app/controller/app/AppLoginController.java @@ -167,16 +167,6 @@ public class AppLoginController { 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("解密手机号") @RequestMapping(value = "/selectPhone",method = RequestMethod.POST) public Result getPhoneNumberBeanS5(@RequestBody WxPhone wxPhone) { From cba8d759437d1fd69b6801f3dc4b1e8984d68fc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=AD=E5=87=AF=E5=87=AF?= Date: Tue, 7 Jan 2025 13:15:22 +0800 Subject: [PATCH 07/18] =?UTF-8?q?=E6=94=AF=E4=BB=98=E5=AE=9D=E9=BB=91?= =?UTF-8?q?=E5=90=8D=E5=8D=95=E5=8F=8A=E7=94=A8=E6=88=B7=E8=AE=BF=E9=97=AE?= =?UTF-8?q?=E6=8B=A6=E6=88=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/interceptor/AuthorizationInterceptor.java | 12 ++++++++++++ src/main/resources/application.yml | 1 + 2 files changed, 13 insertions(+) diff --git a/src/main/java/com/sqx/modules/app/interceptor/AuthorizationInterceptor.java b/src/main/java/com/sqx/modules/app/interceptor/AuthorizationInterceptor.java index 7e778a39..671567cd 100644 --- a/src/main/java/com/sqx/modules/app/interceptor/AuthorizationInterceptor.java +++ b/src/main/java/com/sqx/modules/app/interceptor/AuthorizationInterceptor.java @@ -2,13 +2,16 @@ package com.sqx.modules.app.interceptor; import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.sqx.common.exception.CzgException; import com.sqx.common.exception.SqxException; import com.sqx.common.utils.DateUtils; import com.sqx.common.utils.IPUtils; import com.sqx.modules.app.annotation.Login; +import com.sqx.modules.app.entity.AlipayBlacklist; import com.sqx.modules.app.entity.UserEntity; +import com.sqx.modules.app.mapper.AlipayBlacklistMapper; import com.sqx.modules.app.service.UserService; import com.sqx.modules.app.utils.JwtUtils; import com.sqx.modules.redisService.RedisService; @@ -36,6 +39,8 @@ public class AuthorizationInterceptor extends HandlerInterceptorAdapter { private JwtUtils jwtUtils; @Autowired private UserService userService; + @Autowired + private AlipayBlacklistMapper alipayBlacklistMapper; private final RedisService redisService; @@ -101,6 +106,13 @@ public class AuthorizationInterceptor extends HandlerInterceptorAdapter { throw new CzgException("异常行为用户: {}" + user.getUserId()); } + if(StrUtil.isNotBlank(user.getZhiFuBao())){ + AlipayBlacklist blacklist = alipayBlacklistMapper.selectById(user.getZhiFuBao()); + if(blacklist != null){ + throw new CzgException("禁止访问"); + } + } + if (redisService.isRecordUserOnLineTime(userId)) { ThreadUtil.execAsync(() -> { // 记录用户最后一次调用接口的时间 diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 0d061785..02533ed2 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -127,6 +127,7 @@ spring: - qrtz_cron_triggers - qrtz_calendars - qrtz_blob_triggers + - alipay_blacklist # 日志配置 logging: From 52f6016e3998c116cc35146a6f6a69e4f14a4504 Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Tue, 7 Jan 2025 13:17:02 +0800 Subject: [PATCH 08/18] =?UTF-8?q?=E5=85=85=E5=80=BC=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sqx/modules/pay/service/impl/PayDetailsServiceImpl.java | 2 ++ src/main/resources/mapper/pay/PayDetailsDao.xml | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/sqx/modules/pay/service/impl/PayDetailsServiceImpl.java b/src/main/java/com/sqx/modules/pay/service/impl/PayDetailsServiceImpl.java index bcf43d1d..93b842db 100644 --- a/src/main/java/com/sqx/modules/pay/service/impl/PayDetailsServiceImpl.java +++ b/src/main/java/com/sqx/modules/pay/service/impl/PayDetailsServiceImpl.java @@ -10,9 +10,11 @@ import com.sqx.modules.pay.dao.PayDetailsDao; import com.sqx.modules.pay.entity.PayDetails; import com.sqx.modules.pay.service.PayDetailsService; import com.sqx.modules.utils.TimeCompleteUtils; +import org.apache.shardingsphere.api.hint.HintManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Map; diff --git a/src/main/resources/mapper/pay/PayDetailsDao.xml b/src/main/resources/mapper/pay/PayDetailsDao.xml index 84ba4d44..d09ff8d4 100644 --- a/src/main/resources/mapper/pay/PayDetailsDao.xml +++ b/src/main/resources/mapper/pay/PayDetailsDao.xml @@ -56,7 +56,6 @@ and s.state!=-1 - group by s.id order by s.create_time desc From f234fc84dafd11a19a404d325b04175167793007 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=AD=E5=87=AF=E5=87=AF?= Date: Tue, 7 Jan 2025 13:18:17 +0800 Subject: [PATCH 09/18] =?UTF-8?q?=E6=94=AF=E4=BB=98=E5=AE=9D=E9=BB=91?= =?UTF-8?q?=E5=90=8D=E5=8D=95=E5=8F=8A=E7=94=A8=E6=88=B7=E8=AE=BF=E9=97=AE?= =?UTF-8?q?=E6=8B=A6=E6=88=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/app/entity/AlipayBlacklist.java | 26 +++++++++++++++++++ .../app/mapper/AlipayBlacklistMapper.java | 14 ++++++++++ 2 files changed, 40 insertions(+) create mode 100644 src/main/java/com/sqx/modules/app/entity/AlipayBlacklist.java create mode 100644 src/main/java/com/sqx/modules/app/mapper/AlipayBlacklistMapper.java diff --git a/src/main/java/com/sqx/modules/app/entity/AlipayBlacklist.java b/src/main/java/com/sqx/modules/app/entity/AlipayBlacklist.java new file mode 100644 index 00000000..268d3bcb --- /dev/null +++ b/src/main/java/com/sqx/modules/app/entity/AlipayBlacklist.java @@ -0,0 +1,26 @@ +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 ="alipay_blacklist") +public class AlipayBlacklist implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(type=IdType.INPUT) + private String alipayAccountNo; + + private String alipayAccountName; + +} diff --git a/src/main/java/com/sqx/modules/app/mapper/AlipayBlacklistMapper.java b/src/main/java/com/sqx/modules/app/mapper/AlipayBlacklistMapper.java new file mode 100644 index 00000000..b66ec9db --- /dev/null +++ b/src/main/java/com/sqx/modules/app/mapper/AlipayBlacklistMapper.java @@ -0,0 +1,14 @@ +package com.sqx.modules.app.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.sqx.modules.app.entity.AlipayBlacklist; +import org.apache.ibatis.annotations.Mapper; + +/** + * 支付宝黑名单 Mapper + * @author tankaikai + * @since 2025-01-07 12:56 + */ +@Mapper +public interface AlipayBlacklistMapper extends BaseMapper { +} From a490541ccb2fe24c7c2608f55c9e30c0a0cd479d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Tue, 7 Jan 2025 13:20:00 +0800 Subject: [PATCH 10/18] =?UTF-8?q?1.=E6=8E=92=E8=A1=8C=E6=A6=9C=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E6=95=B0=E6=8D=AE=E4=B8=8D=E5=87=86=E7=A1=AE=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/sqx/modules/app/dao/UserDao.java | 2 +- .../app/service/impl/UserServiceImpl.java | 22 ++++++++++++++----- src/main/resources/mapper/app/UserDao.xml | 17 +------------- 3 files changed, 19 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/sqx/modules/app/dao/UserDao.java b/src/main/java/com/sqx/modules/app/dao/UserDao.java index 037fe2eb..cfc39a54 100644 --- a/src/main/java/com/sqx/modules/app/dao/UserDao.java +++ b/src/main/java/com/sqx/modules/app/dao/UserDao.java @@ -35,7 +35,7 @@ public interface UserDao extends BaseMapper { int insertUser(UserEntity userEntity); - List selectInviteUserList(String userName,String phone); + List selectInviteUserList(); int selectUserOnLineCount(String qdCode); 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 728645d4..2cc55344 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 @@ -1523,19 +1523,31 @@ public class UserServiceImpl extends ServiceImpl implements @Override public Result selectInviteUserList(Integer page, Integer limit, String userName, String phone) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + if(StrUtil.isNotBlank(userName)) { + queryWrapper.like(UserEntity::getUserName, userName); + } + + if (StrUtil.isNotBlank(phone)) { + queryWrapper.like(UserEntity::getPhone, phone); + } + queryWrapper.orderByDesc(UserEntity::getCreateTime); PageHelper.startPage(page,limit); - List userEntities = baseMapper.selectInviteUserList(userName, phone); - if (!userEntities.isEmpty()) { - Set userIdList = userEntities.stream().map(UserEntity::getUserId).collect(Collectors.toSet()); + List userEntityList = list(queryWrapper); + + Map countInfoMap = baseMapper.selectInviteUserList().stream().collect(Collectors.toMap(UserEntity::getUserId, UserEntity::getCounts)); + if (!userEntityList.isEmpty()) { + Set userIdList = userEntityList.stream().map(UserEntity::getUserId).collect(Collectors.toSet()); Map infoMap = userMoneyService.list(new LambdaQueryWrapper() .in(UserMoney::getUserId, userIdList)) .stream().collect(Collectors.toMap(UserMoney::getUserId, item -> item)); - userEntities.forEach(item -> { + userEntityList.forEach(item -> { UserMoney userMoney = infoMap.get(item.getUserId()); item.setMoney(userMoney == null ? BigDecimal.ZERO : userMoney.getInviteIncomeMoney()); + item.setCounts(countInfoMap.get(item.getUserId())); }); } - return Result.success().put("data", PageUtils.page(new PageInfo<>(userEntities),true)); + return Result.success().put("data", PageUtils.page(new PageInfo<>(userEntityList),true)); } @Override diff --git a/src/main/resources/mapper/app/UserDao.xml b/src/main/resources/mapper/app/UserDao.xml index 17f4d683..7c05619b 100644 --- a/src/main/resources/mapper/app/UserDao.xml +++ b/src/main/resources/mapper/app/UserDao.xml @@ -299,22 +299,7 @@ - SELECT any_value(user_id) as userId, COUNT(*) AS counts FROM tb_user GROUP BY inviter_code order by counts desc + SELECT any_value(inviter_code) as inviterCode, COUNT(*) AS counts + FROM tb_user + + where user_id in + + #{id} + + + + GROUP BY inviter_code order by counts desc + + diff --git a/src/main/resources/mapper/course/CourseDetailsDao.xml b/src/main/resources/mapper/course/CourseDetailsDao.xml index a7c7bea8..d1446b43 100644 --- a/src/main/resources/mapper/course/CourseDetailsDao.xml +++ b/src/main/resources/mapper/course/CourseDetailsDao.xml @@ -108,7 +108,7 @@ SELECT course_id as courseId, COUNT(*) AS courseDetailsCount FROM course_details - where course_details_id in + where course_id in #{ids} From e55866f7aca4004bbc6b0f83400a80a0d881922c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Tue, 7 Jan 2025 15:28:19 +0800 Subject: [PATCH 16/18] =?UTF-8?q?1.cashOut=E5=AE=9A=E6=97=B6=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sqx/modules/job/task/TempCashOutTask.java | 37 +++++++++++++------ .../com/sqx/modules/pay/dao/CashOutDao.java | 3 +- src/main/resources/mapper/pay/CashDao.xml | 2 +- 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/sqx/modules/job/task/TempCashOutTask.java b/src/main/java/com/sqx/modules/job/task/TempCashOutTask.java index 4511bd70..4b803b26 100644 --- a/src/main/java/com/sqx/modules/job/task/TempCashOutTask.java +++ b/src/main/java/com/sqx/modules/job/task/TempCashOutTask.java @@ -2,12 +2,14 @@ package com.sqx.modules.job.task; import cn.hutool.core.date.DateUtil; 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.entity.CashOut; import com.sqx.modules.pay.wuyou.BaseResp; import com.sqx.modules.pay.wuyou.WuyouPay; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; @@ -23,19 +25,32 @@ public class TempCashOutTask{ private Logger logger = LoggerFactory.getLogger(getClass()); - public void run(String params) { + @Scheduled(cron = "0 0/8 * * * ? ") + public void run() { logger.info("提现开始"); - List cashOuts = cashOutDao.selectTemp(); + List cashOuts = cashOutDao.selectTemp(DateUtil.offsetMinute(DateUtil.date(), 5)); for (CashOut cashOut : cashOuts) { - BaseResp baseResp = wuyouPay.queryExtractOrder(cashOut.getOrderNumber(), cashOut.getUserId(), cashOut.getUserType() != 2, cashOut.getMoney()); - logger.info("baseResp:{} ", JSONUtil.toJsonStr(baseResp)); - 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.updateById(cashOut); + try { + BaseResp baseResp; + if (DateUtil.parse(cashOut.getCreateAt()).compareTo(DateUtil.parse("2025-01-06 16:50:00")) < 0) { + baseResp = wuyouPay.queryExtractOrder(cashOut.getOrderNumber(), cashOut.getUserId(), cashOut.getUserType() != 2, cashOut.getMoney()); + }else { + baseResp = wuyouPay.queryExtractOrder(cashOut.getOrderNumber(), cashOut.getMoney()); + } + logger.info("baseResp:{} ", JSONUtil.toJsonStr(baseResp)); + 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().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().eq(CashOut::getUserId, cashOut.getUserId()).eq(CashOut::getId, cashOut.getId())); + } + }catch (Exception e) { + logger.error("体现定时任务查询出错", e); } } logger.info("提现结束"); 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 db7df678..eda0fdbd 100644 --- a/src/main/java/com/sqx/modules/pay/dao/CashOutDao.java +++ b/src/main/java/com/sqx/modules/pay/dao/CashOutDao.java @@ -1,5 +1,6 @@ package com.sqx.modules.pay.dao; +import cn.hutool.core.date.DateTime; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.sqx.modules.pay.entity.CashOut; import org.apache.ibatis.annotations.Mapper; @@ -22,7 +23,7 @@ public interface CashOutDao extends BaseMapper { List selectYesterday(); - List selectTemp(); + List selectTemp(@Param("time")DateTime time); Double selectCashOutSum(@Param("userId") Long userId, @Param("startTime") Date startTime, @Param("endTime") Date endTime); diff --git a/src/main/resources/mapper/pay/CashDao.xml b/src/main/resources/mapper/pay/CashDao.xml index 81fbb266..f9cb2667 100644 --- a/src/main/resources/mapper/pay/CashDao.xml +++ b/src/main/resources/mapper/pay/CashDao.xml @@ -18,7 +18,7 @@ select count(*) from orders where 1=1 - + and sys_user_id=#{sysUserId} @@ -206,7 +206,7 @@