From 70b6497f860832b4d301f426cb4b20af5bb4f298 Mon Sep 17 00:00:00 2001 From: jihaipeng <3204568531@qq.com> Date: Mon, 28 Jul 2025 20:14:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/AdminPrizeController.java | 5 +- .../admin/controller/AdminUserController.java | 3 + .../admin/controller/FundingController.java | 1 + .../com/lottery/admin/mapper/IFundingMapper.java | 4 +- .../service/Impl/AdminUserDetailServiceImpl.java | 22 ++- .../admin/service/Impl/AdminUserServiceImpl.java | 148 ++++++++++++++++++++- .../admin/service/Impl/FundingServiceImpl.java | 6 +- .../src/main/resources/application-prod.yml | 4 +- .../main/resources/mapper/admin/fundingMapper.xml | 8 ++ 9 files changed, 192 insertions(+), 9 deletions(-) diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminPrizeController.java b/lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminPrizeController.java index 0fca979..8df1ce0 100644 --- a/lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminPrizeController.java +++ b/lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminPrizeController.java @@ -81,8 +81,9 @@ public class AdminPrizeController { //新增内定 @PostMapping("/addFixUser") public Result addWinUser(@RequestBody @Valid FixUserDto fixUserDto) throws Exception { - + if(!fixUserDto.getJwcode().startsWith("9")){ + return Result.failure("添加精网号失败"); + } return adminPrizeService.addWinUser(fixUserDto); - } } diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminUserController.java b/lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminUserController.java index 408c11a..a681ca4 100644 --- a/lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminUserController.java +++ b/lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminUserController.java @@ -54,6 +54,9 @@ public class AdminUserController { @PostMapping("/add") public Result add(@RequestBody @Valid UserDto userDto) throws Exception { + if(!userDto.getJwcode().startsWith("9")){ + return Result.failure("添加精网号失败"); + } LOGGER.info("新增用户:{}",userDto); if (!adminUserService.addUser(userDto)){ return Result.failure("用户名或精网号已存在,无法添加"); diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/FundingController.java b/lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/FundingController.java index 6edf2f5..cbe9870 100644 --- a/lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/FundingController.java +++ b/lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/FundingController.java @@ -86,6 +86,7 @@ public class FundingController { //根据活动id查询助力详情 @PostMapping("/getActivityDetail") + public Result> getActivityDetail(@RequestBody @Valid FundingUserDto fundingUserDto) { //检查活动是否存在 LOGGER.info("接口getActivityDetail查询助力详情,查询条件{}", fundingUserDto); diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/IFundingMapper.java b/lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/IFundingMapper.java index f23eb2d..cc43384 100644 --- a/lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/IFundingMapper.java +++ b/lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/IFundingMapper.java @@ -89,7 +89,7 @@ public interface IFundingMapper { Integer selectActivityStatus(Integer id); - @Select("select jwcode from z_user") + @Select("select jwcode from z_user where loc_market in('usa','cn','sg','my','th','hk','vi','can')") ArrayList selectJwcode(); @Update("update z_user set loc_market = #{locMarket} where jwcode = #{jwcode}") @@ -97,4 +97,6 @@ public interface IFundingMapper { @Select("select text from market where market = #{locMarket}") String updateLocMarketToCn(String locMarket); + + String selectm(String locM); } diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminUserDetailServiceImpl.java b/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminUserDetailServiceImpl.java index 3520998..8350faf 100644 --- a/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminUserDetailServiceImpl.java +++ b/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminUserDetailServiceImpl.java @@ -387,6 +387,26 @@ public class AdminUserDetailServiceImpl extends ServiceImpl filteredUserDtos = new ArrayList<>(); + for (UserImportDto dto : userDtos) { + if (dto.getJwcode() != null && dto.getJwcode().startsWith("9")) { + filteredUserDtos.add(dto); + } else { + filteredCount++; + LOGGER.warn("剔除以9开头的精网号: {}", dto.getJwcode()); + } + } + + // 3. 提取所有精网号并去重,且只保留以9开头的数字 + jwcodes = userDtos.stream() + .map(UserImportDto::getJwcode) + .filter(jwcode -> jwcode != null && jwcode.startsWith("9")) // 添加过滤条件 + .distinct() + .collect(Collectors.toList()); + + + // 4. 批量检查member表中存在的精网号(优化为单次查询) Set existingMemberCodes = adminUserMapper.selectExistingJwCodes(jwcodes) .stream() @@ -439,7 +459,7 @@ public class AdminUserDetailServiceImpl extends ServiceImpl imp return PageInfo.of(userPage, userVolist); } +// @Override +// public Result importUsers(MultipartFile file) { +// try { +// // 1. 解析Excel +// List userDtos = EasyExcel.read(file.getInputStream()) +// .head(UserImportDto.class) +// .sheet() +// .doReadSync(); +// +// // 2. 过滤:保留以"9"开头的精网号数据,并记录被剔除的数据 +// List> filteredOutData = new ArrayList<>(); // 存储被剔除的数据(行号 + jwcode) +// List filteredUserDtos = new ArrayList<>(); +// +// for (int i = 0; i < userDtos.size(); i++) { +// UserImportDto dto = userDtos.get(i); +// if (dto.getJwcode() != null && dto.getJwcode().startsWith("9")) { +// filteredUserDtos.add(dto); // 符合条件的数据 +// } else { +// // 记录被剔除的数据(行号和jwcode) +// Map filteredRecord = new HashMap<>(); +// filteredRecord.put("row", i + 2); // Excel行号(从2开始,1是表头) +// filteredRecord.put("jwcode", dto.getJwcode()); +// filteredOutData.add(filteredRecord); +// } +// } +// +// // 3. 检查数据量是否超过限制(基于过滤后的数据) +// if (filteredUserDtos.size() > 2000) { +// return Result.failure("单次导入最多支持2000条数据"); +// } +// +// // 4. 获取所有精网号(过滤后的) +// List jwcodes = filteredUserDtos.stream() +// .map(UserImportDto::getJwcode) +// .distinct() +// .collect(Collectors.toList()); +// +// // 5. 检查member表中存在的精网号 +// Set existingMemberCodes = adminUserMapper.selectExistingJwCodes(jwcodes) +// .stream() +// .collect(Collectors.toSet()); +// +// // 6. 获取已存在的精网号及其删除状态 +// Map existingUserMap = adminUserMapper.selectAllUserCodesWithDelStatus() +// .stream() +// .collect(Collectors.toMap( +// User::getJwcode, +// User::getIsDel, +// (existing, replacement) -> existing +// )); +// +// List usersToAdd = new ArrayList<>(); +// List usersToUpdate = new ArrayList<>(); +// Set processedCodes = new HashSet<>(); +// int skipCount = 0; +// +// // 7. 校验数据并分类(新增/更新/跳过) +// for (int i = 0; i < filteredUserDtos.size(); i++) { +// UserImportDto dto = filteredUserDtos.get(i); +// try { +// validateUser(dto, i + 2); // 行号校正(基于过滤后的数据) +// +// // 检查member表中是否存在 +// if (!existingMemberCodes.contains(dto.getJwcode())) { +// throw new IllegalArgumentException(String.format("第%d行: 精网号%s不存在于member表中", i + 2, dto.getJwcode())); +// } +// +// // 文件内去重 +// if (processedCodes.contains(dto.getJwcode())) { +// throw new IllegalArgumentException(String.format("第%d行: 精网号%s在当前文件中重复", i + 2, dto.getJwcode())); +// } +// processedCodes.add(dto.getJwcode()); +// +// // 处理数据库中的重复情况 +// if (existingUserMap.containsKey(dto.getJwcode())) { +// Integer isDel = existingUserMap.get(dto.getJwcode()); +// if (isDel == 1) { +// User existingUser = adminUserMapper.selectByJwCode(dto.getJwcode()); +// User userToUpdate = convertToEntity(dto); +// userToUpdate.setId(existingUser.getId()); +// userToUpdate.setIsDel(0); +// usersToUpdate.add(userToUpdate); +// } else { +// throw new IllegalArgumentException(String.format("第%d行: 精网号%s已存在", i + 2, dto.getJwcode())); +// } +// } else { +// usersToAdd.add(convertToEntity(dto)); +// } +// } catch (IllegalArgumentException e) { +// LOGGER.warn("导入数据校验失败: {}", e.getMessage()); +// skipCount++; +// } +// } +// +// // 8. 执行数据库操作 +// int successCount = 0; +// if (!usersToAdd.isEmpty()) { +// boolean addSuccess = this.saveBatch(usersToAdd); +// successCount += addSuccess ? usersToAdd.size() : 0; +// } +// if (!usersToUpdate.isEmpty()) { +// boolean updateSuccess = this.updateBatchById(usersToUpdate); +// successCount += updateSuccess ? usersToUpdate.size() : 0; +// } +// +// // 9. 返回结果(包含被剔除的数据) +// Map resultData = new HashMap<>(); +// resultData.put("successCount", successCount); +// resultData.put("addedCount", usersToAdd.size()); +// resultData.put("updatedCount", usersToUpdate.size()); +// resultData.put("skippedCount", skipCount); +// resultData.put("filteredOutData", filteredOutData); // 被剔除的数据(非9开头) +// +// return successCount > 0 ? +// Result.success(String.format("导入成功%d条(新增%d条,更新%d条),跳过%d条", +// successCount, usersToAdd.size(), usersToUpdate.size(), skipCount)) : +// Result.failure("没有有效数据可导入"); +// +// } catch (Exception e) { +// LOGGER.error("导入用户失败", e); +// return Result.failure("导入失败: " + e.getMessage()); +// } +// } + @Override public Result importUsers(MultipartFile file) { try { @@ -218,6 +342,8 @@ public class AdminUserServiceImpl extends ServiceImpl imp .sheet() .doReadSync(); + + // 2. 检查数据量是否超过限制 if (userDtos.size() > 2000) { return Result.failure("单次导入最多支持2000条数据"); @@ -228,6 +354,23 @@ public class AdminUserServiceImpl extends ServiceImpl imp .map(UserImportDto::getJwcode) .distinct() .collect(Collectors.toList()); + // 3. 提取所有精网号并去重,且只保留以9开头的数字 + jwcodes = userDtos.stream() + .map(UserImportDto::getJwcode) + .filter(jwcode -> jwcode != null && jwcode.startsWith("9")) // 添加过滤条件 + .distinct() + .collect(Collectors.toList()); + + int filteredCount = 0; + List filteredUserDtos = new ArrayList<>(); + for (UserImportDto dto : userDtos) { + if (dto.getJwcode() != null && dto.getJwcode().startsWith("9")) { + filteredUserDtos.add(dto); + } else { + filteredCount++; + LOGGER.warn("剔除以9开头的精网号: {}", dto.getJwcode()); + } + } // 4. 检查member表中存在的精网号 Set existingMemberCodes = adminUserMapper.selectExistingJwCodes(jwcodes) @@ -243,6 +386,7 @@ public class AdminUserServiceImpl extends ServiceImpl imp (existing, replacement) -> existing )); + List usersToAdd = new ArrayList<>(); List usersToUpdate = new ArrayList<>(); Set processedCodes = new HashSet<>(); @@ -297,8 +441,8 @@ public class AdminUserServiceImpl extends ServiceImpl imp } return successCount > 0 ? - Result.success(String.format("导入成功%d条(新增%d条,更新%d条),跳过%d条", - successCount, usersToAdd.size(), usersToUpdate.size(), skipCount)) : + Result.success(String.format("导入成功%d条(新增%d条,更新%d条),跳过%d条,失败%d条", + successCount, usersToAdd.size(), usersToUpdate.size(), skipCount,filteredCount)) : Result.failure("没有有效数据可导入"); } catch (Exception e) { LOGGER.error("导入用户失败", e); diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/FundingServiceImpl.java b/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/FundingServiceImpl.java index cfbd586..1600333 100644 --- a/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/FundingServiceImpl.java +++ b/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/FundingServiceImpl.java @@ -87,6 +87,7 @@ public class FundingServiceImpl implements IFundingService { //添加众筹活动 @Override + @Transactional(rollbackOn = SQLException.class) public Result addActivity(FundingActivityDto fundingActivityDto) { if (fundingActivityDto.getActivityName() == null || fundingActivityDto.getActivityName().equals("")) { return Result.failure("活动名称不能为空"); @@ -484,6 +485,7 @@ public class FundingServiceImpl implements IFundingService { */ String apiUrl = "http://api.homilychart.com/hljwgo/api/v2/member/info"; @Override + @Transactional public boolean flushData() throws Exception { ArrayList jwcodes = new ArrayList<>(); jwcodes = fundingMapper.selectJwcode(); @@ -499,7 +501,9 @@ public class FundingServiceImpl implements IFundingService { params.put("jwcode", jwcode); // JSON库解析 String json = HttpUtils.postUrlencoded(apiUrl, params); - return JsonPath.read(json, "$.data.loc_market"); + String locM = JsonPath.read(json, "$.data.loc_market"); + + return fundingMapper.selectm(locM); } } diff --git a/lottery-system/lottery-service/src/main/resources/application-prod.yml b/lottery-system/lottery-service/src/main/resources/application-prod.yml index 569a345..c622b28 100644 --- a/lottery-system/lottery-service/src/main/resources/application-prod.yml +++ b/lottery-system/lottery-service/src/main/resources/application-prod.yml @@ -15,11 +15,11 @@ spring: connection-timeout: 30000 # 连接超时时间(毫秒),默认 30s idle-timeout: 600000 # 空闲连接超时时间(默认 10 分钟) max-lifetime: 1800000 # 连接最大生命周期(默认 30 分钟) - leak-detection-threshold: 5000 # 连接泄漏检测(毫秒,建议 5s) + leak-detection-threshold: 50000 # 连接泄漏检测(毫秒,建议 5s) # ========== Redis 配置 ========== redis: - host: 18.143.76.3 + host: localhost port: 10703 password: Ngc0FYUTA6h3wC5J database: 8 # 默认DB索引 diff --git a/lottery-system/lottery-service/src/main/resources/mapper/admin/fundingMapper.xml b/lottery-system/lottery-service/src/main/resources/mapper/admin/fundingMapper.xml index 4e29fac..67c111e 100644 --- a/lottery-system/lottery-service/src/main/resources/mapper/admin/fundingMapper.xml +++ b/lottery-system/lottery-service/src/main/resources/mapper/admin/fundingMapper.xml @@ -258,5 +258,13 @@ WHERE id = #{activityId} + \ No newline at end of file