Browse Source

添加地区字段

dev
willy 3 weeks ago
parent
commit
4268b7d19f
  1. 26
      lottery-system/lottery-pojo/src/main/java/com/lottery/dto/ApiUrlResp.java
  2. 2
      lottery-system/lottery-pojo/src/main/java/com/lottery/entity/FundingUser.java
  3. 2
      lottery-system/lottery-pojo/src/main/java/com/lottery/entity/User.java
  4. 2
      lottery-system/lottery-pojo/src/main/java/com/lottery/entity/WinnerRecord.java
  5. 20
      lottery-system/lottery-pojo/src/main/java/com/lottery/vo/FundingUserNewVo.java
  6. 23
      lottery-system/lottery-pojo/src/main/java/com/lottery/vo/ImportResultVo.java
  7. 2
      lottery-system/lottery-pojo/src/main/java/com/lottery/vo/WinUserVo.java
  8. 29
      lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/TongBuController.java
  9. 12
      lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminUserMapper.java
  10. 9
      lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/IFundingMapper.java
  11. 2
      lottery-system/lottery-service/src/main/java/com/lottery/admin/service/IFundingService.java
  12. 249
      lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminUserDetailServiceImpl.java
  13. 50
      lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminUserServiceImpl.java
  14. 1
      lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminWinServiceImpl.java
  15. 37
      lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/FundingServiceImpl.java
  16. 14
      lottery-system/pom.xml

26
lottery-system/lottery-pojo/src/main/java/com/lottery/dto/ApiUrlResp.java

@ -0,0 +1,26 @@
package com.lottery.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
/**
* @program: lottery
* @ClassName ApiUrlResp
* @description:
* @author: wwl
* @create: 2025-07-26 14:12
* @Version 1.0
**/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class ApiUrlResp {
private int code;
private String msg;
private Data data;
@lombok.Data
public static class Data {
private String loc_market;
}
}

2
lottery-system/lottery-pojo/src/main/java/com/lottery/entity/FundingUser.java

@ -31,4 +31,6 @@ public class FundingUser {
private String jwcode; // 用户唯一码
private LocalDateTime joinTime; // 参与时间
private Integer activityId; // 关联的活动ID
private String LocMarket; //地区
}

2
lottery-system/lottery-pojo/src/main/java/com/lottery/entity/User.java

@ -40,6 +40,8 @@ public class User {
private int isDel;
private String locMarket;
private Date createTime; // 创建时间
private Date updateTime; // 更新时间

2
lottery-system/lottery-pojo/src/main/java/com/lottery/entity/WinnerRecord.java

@ -34,6 +34,8 @@ public class WinnerRecord {
private Long prizeId; // 奖品ID
private String locMarket;
@TableField("is_del")
private int isDel;

20
lottery-system/lottery-pojo/src/main/java/com/lottery/vo/FundingUserNewVo.java

@ -0,0 +1,20 @@
package com.lottery.vo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.time.LocalDateTime;
/**
* @program: lottery
* @ClassName FundingUserNewVo
* @description:
* @author: wwl
* @create: 2025-07-26 13:49
* @Version 1.0
**/
@Data
public class FundingUserNewVo {
}

23
lottery-system/lottery-pojo/src/main/java/com/lottery/vo/ImportResultVo.java

@ -0,0 +1,23 @@
package com.lottery.vo;
import lombok.Data;
import java.util.List;
/**
* @program: lottery
* @ClassName ImportResultVo
* @description:
* @author: wwl
* @create: 2025-07-26 17:10
* @Version 1.0
**/
// 导入结果内部类
@Data
public class ImportResultVo {
private int successCount;
private int addedCount;
private int updatedCount;
private int skipCount;
private List<String> invalidJwCodes;
}

2
lottery-system/lottery-pojo/src/main/java/com/lottery/vo/WinUserVo.java

@ -27,6 +27,8 @@ public class WinUserVo {
private String prizeName;
private String LocMarket;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date winTime; // 中奖时间;

29
lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/TongBuController.java

@ -0,0 +1,29 @@
package com.lottery.admin.controller;
import com.lottery.admin.service.IFundingService;
import com.lottery.result.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @program: lottery
* @ClassName TongBuController
* @description:
* @author: wwl
* @create: 2025-07-26 13:46
* @Version 1.0
**/
@RestController
@RequestMapping("/admin/funding")
public class TongBuController {
@Autowired
private IFundingService fundingService;
@PostMapping("/flush")
public boolean flushData() throws Exception {
return fundingService.flushData();
}
}

12
lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminUserMapper.java

@ -3,6 +3,7 @@ package com.lottery.admin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lottery.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
@ -40,4 +41,15 @@ public interface AdminUserMapper extends BaseMapper<User> {
@Select("select * from user where username = #{username}")
User selectByName(String username);
@Select("<script>" +
"SELECT jwcode FROM member_info WHERE jwcode IN " +
"<foreach collection='jwcode' item='code' open='(' separator=',' close=')'>" +
"#{code}" +
"</foreach>" +
"</script>")
Set<String> selectExistingJwCodes(@Param("jwcode") List<String> batchJwCodes);
@Select("select loc_market from member_info where jwcode = #{jwcode}")
String selectLocMarketByJwcode(String jwcode);
}

9
lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/IFundingMapper.java

@ -6,8 +6,11 @@ import com.lottery.vo.FundingActivityVo;
import com.lottery.vo.FundingUserVo;
import com.lottery.vo.MarketVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@ -83,4 +86,10 @@ public interface IFundingMapper {
Integer selectmarket(Integer id);
Integer selectmarketCount(Integer market);
@Select("select jwcode from z_user")
ArrayList<String> selectJwcode();
@Update("update z_user set loc_market = #{locMarket} where jwcode = #{jwcode}")
void updateLocMarket(String jwcode, String locMarket);
}

2
lottery-system/lottery-service/src/main/java/com/lottery/admin/service/IFundingService.java

@ -49,4 +49,6 @@ public interface IFundingService {
Result<String> deleteActivity(Integer activityId);
Result<List<MarketVo>> getMarketListByActivityId(Integer activityId);
boolean flushData() throws Exception;
}

249
lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminUserDetailServiceImpl.java

@ -293,6 +293,8 @@ public class AdminUserDetailServiceImpl extends ServiceImpl<IUserDetailMapper, U
@Override
@Transactional(rollbackFor = Exception.class)
public Result importFixUsers(MultipartFile file, Long gradeId) {
////
//
// try {
// // 1. 解析Excel
// List<UserImportDto> userDtos = EasyExcel.read(file.getInputStream())
@ -300,134 +302,71 @@ public class AdminUserDetailServiceImpl extends ServiceImpl<IUserDetailMapper, U
// .sheet()
// .doReadSync();
//
// // 2. 准备数据集合
// List<User> newUsers = new ArrayList<>(); // 需要新增到user表的用户
// List<User> usersToRecover = new ArrayList<>(); // 需要恢复的已删除用户
// List<UserDetail> newUserDetails = new ArrayList<>(); // 新增的userDetail
// List<UserDetail> detailsToRecover = new ArrayList<>(); // 需要恢复的userDetail
//
// Set<String> processedCodes = new HashSet<>();
// int successCount = 0;
// int skipCount = 0;
//
// // 3. 查询所有已存在的jwcodeuser表
// Set<String> existingJwCodes = adminUserMapper.selectAllUserCodes();
//
// // 4. 查询所有已存在的user_detail记录避免N+1查询
// Map<String, UserDetail> existingDetails = adminUserDetailMapper.selectList(null)
// .stream()
// .collect(Collectors.toMap(
// detail -> adminUserMapper.selectById(detail.getUserId()).getJwcode(),
// detail -> detail
// ));
// Set<String> processedCodes = new HashSet<>();
//
// for (int i = 0; i < userDtos.size(); i++) {
// UserImportDto dto = userDtos.get(i);
// try {
// validateUser(dto, i + 2, processedCodes);
// processedCodes.add(dto.getJwcode());
//
// // 检查是否已在当前文件中处理过
// if (processedCodes.contains(dto.getJwcode())) {
// throw new IllegalArgumentException("精网号在当前文件中重复: " + dto.getJwcode());
// // 2. 查询用户是否存在按jwcode
// User user = adminUserMapper.selectUserByJwcode(dto.getJwcode());
// if (user == null) {
// // 新增用户
// user = convertToEntity(dto);
// adminUserMapper.insert(user);
// } else if (user.getIsDel() == 1) {
// // 恢复已删除用户
// user.setIsDel(0);
// adminUserMapper.updateById(user);
// }
// processedCodes.add(dto.getJwcode());
//
// // 处理逻辑
// if (existingJwCodes.contains(dto.getJwcode())) {
// // --- 用户已存在 ---
// User existingUser = adminUserMapper.selectUserByJwcode(dto.getJwcode());
// // 3. 检查用户是否已经是其他等级的内定用户全局检查
// LambdaQueryWrapper<UserDetail> globalCheckWrapper = new LambdaQueryWrapper<>();
// globalCheckWrapper.eq(UserDetail::getUserId, user.getId())
// .eq(UserDetail::getIsFixed, 1)
// .eq(UserDetail::getIsDel, 0)
// .ne(UserDetail::getGradeId, gradeId); // 排除当前等级
//
// // 检查user表状态
// if (existingUser.getIsDel() == 1) {
// // user表已删除恢复用户
// existingUser.setIsDel(0);
// usersToRecover.add(existingUser);
// }
// if (adminUserDetailMapper.selectCount(globalCheckWrapper) > 0) {
// throw new IllegalArgumentException("用户已是其他等级的内定用户,无法重复内定: " + dto.getJwcode());
// }
//
// // 3. 检查是否已是当前gradeId的内定用户
// LambdaQueryWrapper<UserDetail> wrapper = new LambdaQueryWrapper<>();
// wrapper.eq(UserDetail::getUserId, user.getId())
// .eq(UserDetail::getGradeId, gradeId)
// .eq(UserDetail::getIsFixed, 1);
//
//// // 检查user_detail状态
//// UserDetail existingDetail = existingDetails.get(dto.getJwcode());
//// if (existingDetail != null) {
//// if (existingDetail.getIsDel() == 1) {
//// // user_detail已删除恢复记录
//// existingDetail.setIsDel(0);
//// existingDetail.setGradeId(gradeId);
//// detailsToRecover.add(existingDetail);
//// } else {
//// // user_detail已存在且未删除跳过
//// throw new IllegalArgumentException("用户已存在且未删除: " + dto.getJwcode());
//// }
//// } else {
//// // user_detail不存在新增
//// newUserDetails.add(createUserDetail(existingUser.getId(), gradeId));
//// }
//// } else {
//// // --- 全新用户 ---
//// User newUser = convertToEntity(dto);
//// newUsers.add(newUser);
//// }
//// successCount++;
//// } catch (IllegalArgumentException e) {
//// LOGGER.warn("导入数据校验失败: {}", e.getMessage());
//// skipCount++;
//// }
//// }
// // 检查用户是否已经是其他等级的内定用户
// UserDetail existingFixedDetail = existingDetails.get(existingUser.getId());
// if (existingFixedDetail != null) {
// if (existingFixedDetail.getGradeId().equals(gradeId)) {
// // 已经是当前等级的内定用户
// if (existingFixedDetail.getIsDel() == 1) {
// // 恢复已删除的记录
// existingFixedDetail.setIsDel(0);
// detailsToRecover.add(existingFixedDetail);
// } else {
// throw new IllegalArgumentException("用户已是当前等级的内定用户: " + dto.getJwcode());
// }
// } else {
// // 已经是其他等级的内定用户
// throw new IllegalArgumentException("用户已是其他等级的内定用户,无法添加到本等级: " + dto.getJwcode());
// }
// UserDetail existingDetail = adminUserDetailMapper.selectOne(wrapper);
// if (existingDetail != null) {
// if (existingDetail.getIsDel() == 0) {
// throw new IllegalArgumentException("用户已是当前等级的内定用户: " + dto.getJwcode());
// } else {
// // 不是任何等级的内定用户可以添加
// newUserDetails.add(createUserDetail(existingUser.getId(), gradeId));
// // 物理删除旧记录再新增一条
// adminUserDetailMapper.deleteById(existingDetail.getId());
// }
// } else {
// // --- 全新用户 ---
// User newUser = convertToEntity(dto);
// newUsers.add(newUser);
// }
//
// // 4. 新增内定记录
// UserDetail newDetail = createUserDetail(user.getId(), gradeId);
// adminUserDetailMapper.insert(newDetail);
// successCount++;
//
// } catch (IllegalArgumentException e) {
// LOGGER.warn("导入数据校验失败: {}", e.getMessage());
// LOGGER.warn("导入失败(行{}): {}", i + 2, e.getMessage());
// skipCount++;
// }
// }
// // 5. 批量操作数据库
// if (!newUsers.isEmpty()) {
// adminUserService.saveBatch(newUsers);
// // 为新用户创建userDetail
// newUsers.forEach(user ->
// newUserDetails.add(createUserDetail(user.getId(), gradeId)));
// }
//
// if (!usersToRecover.isEmpty()) {
// adminUserService.updateBatchById(usersToRecover);
// }
//
// if (!detailsToRecover.isEmpty()) {
// this.updateBatchById(detailsToRecover);
// }
//
// if (!newUserDetails.isEmpty()) {
// this.saveBatch(newUserDetails);
// }
//
// return Result.success(String.format("导入成功%d条,跳过%d条", successCount, skipCount));
// } catch (Exception e) {
// LOGGER.error("导入用户失败", e);
// LOGGER.error("导入失败", e);
// return Result.failure("导入失败: " + e.getMessage());
// }
try {
// 1. 解析Excel
List<UserImportDto> userDtos = EasyExcel.read(file.getInputStream())
@ -435,56 +374,57 @@ public class AdminUserDetailServiceImpl extends ServiceImpl<IUserDetailMapper, U
.sheet()
.doReadSync();
// 2. 检查数据量是否超过限制
if (userDtos.size() > 2000) {
return Result.failure("单次导入最多支持2000条数据");
}
// 3. 提取所有精网号并去重
List<String> jwcodes = userDtos.stream()
.map(UserImportDto::getJwcode)
.distinct()
.collect(Collectors.toList());
// 4. 批量检查member表中存在的精网号优化为单次查询
Set<String> existingMemberCodes = adminUserMapper.selectExistingJwCodes(jwcodes)
.stream()
.collect(Collectors.toSet());
// 5. 处理导入逻辑
int successCount = 0;
int skipCount = 0;
Set<String> processedCodes = new HashSet<>();
List<String> invalidJwCodes = new ArrayList<>();
for (int i = 0; i < userDtos.size(); i++) {
UserImportDto dto = userDtos.get(i);
try {
// 基础校验
validateUser(dto, i + 2, processedCodes);
processedCodes.add(dto.getJwcode());
// 2. 查询用户是否存在按jwcode
// 检查精网号是否存在于member表
if (!existingMemberCodes.contains(dto.getJwcode())) {
invalidJwCodes.add(dto.getJwcode());
throw new IllegalArgumentException("精网号不存在于会员系统: " + dto.getJwcode());
}
// 查询或创建用户
User user = adminUserMapper.selectUserByJwcode(dto.getJwcode());
if (user == null) {
// 新增用户
user = convertToEntity(dto);
adminUserMapper.insert(user);
} else if (user.getIsDel() == 1) {
// 恢复已删除用户
user.setIsDel(0);
adminUserMapper.updateById(user);
}
// 3. 检查用户是否已经是其他等级的内定用户全局检查
LambdaQueryWrapper<UserDetail> globalCheckWrapper = new LambdaQueryWrapper<>();
globalCheckWrapper.eq(UserDetail::getUserId, user.getId())
.eq(UserDetail::getIsFixed, 1)
.eq(UserDetail::getIsDel, 0)
.ne(UserDetail::getGradeId, gradeId); // 排除当前等级
if (adminUserDetailMapper.selectCount(globalCheckWrapper) > 0) {
throw new IllegalArgumentException("用户已是其他等级的内定用户,无法重复内定: " + dto.getJwcode());
}
// 检查是否已是其他等级的内定用户
checkGlobalFixedUser(user.getId(), gradeId, dto.getJwcode());
// 3. 检查是否已是当前gradeId的内定用户
LambdaQueryWrapper<UserDetail> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(UserDetail::getUserId, user.getId())
.eq(UserDetail::getGradeId, gradeId)
.eq(UserDetail::getIsFixed, 1);
UserDetail existingDetail = adminUserDetailMapper.selectOne(wrapper);
if (existingDetail != null) {
if (existingDetail.getIsDel() == 0) {
throw new IllegalArgumentException("用户已是当前等级的内定用户: " + dto.getJwcode());
} else {
// 物理删除旧记录再新增一条
adminUserDetailMapper.deleteById(existingDetail.getId());
}
}
// 处理当前等级的内定记录
processGradeFixedUser(user.getId(), gradeId);
// 4. 新增内定记录
// 新增内定记录
UserDetail newDetail = createUserDetail(user.getId(), gradeId);
adminUserDetailMapper.insert(newDetail);
successCount++;
@ -495,13 +435,51 @@ public class AdminUserDetailServiceImpl extends ServiceImpl<IUserDetailMapper, U
}
}
return Result.success(String.format("导入成功%d条,跳过%d条", successCount, skipCount));
// 6. 构建结果信息
String message = String.format("导入完成: 成功%d条,跳过%d条", successCount, skipCount);
if (!invalidJwCodes.isEmpty()) {
message += String.format(",其中%d个精网号无效(示例: %s)",
invalidJwCodes.size(),
invalidJwCodes.stream().limit(5).collect(Collectors.joining(",")));
}
return successCount > 0 ? Result.success(message) : Result.failure("没有有效数据可导入");
} catch (Exception e) {
LOGGER.error("导入失败", e);
LOGGER.error("导入内定用户失败", e);
return Result.failure("导入失败: " + e.getMessage());
}
}
// 检查用户是否已是其他等级的内定用户
private void checkGlobalFixedUser(Long userId, Long currentGradeId, String jwcode) {
LambdaQueryWrapper<UserDetail> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(UserDetail::getUserId, userId)
.eq(UserDetail::getIsFixed, 1)
.eq(UserDetail::getIsDel, 0)
.ne(UserDetail::getGradeId, currentGradeId);
if (adminUserDetailMapper.selectCount(wrapper) > 0) {
throw new IllegalArgumentException("用户已是其他等级的内定用户,无法重复内定: " + jwcode);
}
}
// 处理当前等级的内定记录
private void processGradeFixedUser(Long userId, Long gradeId) {
LambdaQueryWrapper<UserDetail> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(UserDetail::getUserId, userId)
.eq(UserDetail::getGradeId, gradeId)
.eq(UserDetail::getIsFixed, 1);
UserDetail existingDetail = adminUserDetailMapper.selectOne(wrapper);
if (existingDetail != null) {
if (existingDetail.getIsDel() == 0) {
throw new IllegalArgumentException("用户已是当前等级的内定用户");
} else {
adminUserDetailMapper.deleteById(existingDetail.getId());
}
}
}
// 辅助方法创建UserDetail
private UserDetail createUserDetail(Long userId, Long gradeId) {
UserDetail detail = new UserDetail();
@ -558,6 +536,9 @@ public class AdminUserDetailServiceImpl extends ServiceImpl<IUserDetailMapper, U
user.setUsername(dto.getUsername());
user.setCreateTime(new Date());
user.setUpdateTime(new Date());
// 查询并设置loc_market
String locMarket = adminUserMapper.selectLocMarketByJwcode(dto.getJwcode());
user.setLocMarket(locMarket != null ? locMarket : "未知"); // 默认值
// 密码加密
user.setPassword("123456");
return user;

50
lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminUserServiceImpl.java

@ -181,31 +181,52 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, User> imp
@Override
public Result importUsers(MultipartFile file) {
try {
// 1. 解析Excel
List<UserImportDto> userDtos = EasyExcel.read(file.getInputStream())
.head(UserImportDto.class) // 映射到 DTO 对象
.head(UserImportDto.class)
.sheet()
.doReadSync(); // 同步读取所有数据适用于读取量小的场景
.doReadSync();
// 2. 检查数据量是否超过限制
if (userDtos.size() > 2000) {
return Result.failure("单次导入最多支持2000条数据");
}
// 3. 获取所有精网号
List<String> jwcodes = userDtos.stream()
.map(UserImportDto::getJwcode)
.distinct()
.collect(Collectors.toList());
// 2. 获取已存在的精网号及其删除状态
// 4. 检查member表中存在的精网号
Set<String> existingMemberCodes = adminUserMapper.selectExistingJwCodes(jwcodes)
.stream()
.collect(Collectors.toSet());
// 5. 获取已存在的精网号及其删除状态
Map<String, Integer> existingUserMap = adminUserMapper.selectAllUserCodesWithDelStatus()
.stream()
.collect(Collectors.toMap(
User::getJwcode,
User::getIsDel, // 保持 Integer
User::getIsDel,
(existing, replacement) -> existing
));
List<User> usersToAdd = new ArrayList<>(); //新增用户列表
List<User> usersToUpdate = new ArrayList<>(); //待更新的用户列表
Set<String> processedCodes = new HashSet<>(); // 用于当前文件内的去重
List<User> usersToAdd = new ArrayList<>();
List<User> usersToUpdate = new ArrayList<>();
Set<String> processedCodes = new HashSet<>();
int skipCount = 0;
for (int i = 0; i < userDtos.size(); i++) {
UserImportDto dto = userDtos.get(i);
try {
validateUser(dto, i + 2); // 基础校验
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())) {
@ -217,25 +238,24 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, User> imp
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); // 恢复为未删除状态
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++;
}
}
// 3. 执行数据库操作
// 6. 执行数据库操作
int successCount = 0;
if (!usersToAdd.isEmpty()) {
boolean addSuccess = this.saveBatch(usersToAdd);
@ -246,7 +266,6 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, User> imp
successCount += updateSuccess ? usersToUpdate.size() : 0;
}
int skipCount = userDtos.size() - usersToAdd.size() - usersToUpdate.size();
return successCount > 0 ?
Result.success(String.format("导入成功%d条(新增%d条,更新%d条),跳过%d条",
successCount, usersToAdd.size(), usersToUpdate.size(), skipCount)) :
@ -314,6 +333,9 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, User> imp
user.setCreateTime(new Date());
user.setUpdateTime(new Date());
user.setIsDel(0);
// 查询并设置loc_market
String locMarket = adminUserMapper.selectLocMarketByJwcode(dto.getJwcode());
user.setLocMarket(locMarket != null ? locMarket : "未知"); // 默认值
// 设置默认密码
user.setPassword("123456");
return user;

1
lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminWinServiceImpl.java

@ -148,6 +148,7 @@ public class AdminWinServiceImpl extends ServiceImpl<AdminWinMapper, WinnerRecor
// 设置中奖时间
vo.setWinTime(record.getWinTime());
vo.setId(record.getId());
vo.setLocMarket(record.getLocMarket());
return vo;
})
.collect(Collectors.toList());

37
lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/FundingServiceImpl.java

@ -2,20 +2,29 @@ package com.lottery.admin.service.Impl;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.jayway.jsonpath.JsonPath;
import com.lottery.api.controller.PrizeController;
import com.lottery.dto.ApiUrlResp;
import com.lottery.dto.FundingActivityDto;
import com.lottery.dto.FundingUserDto;
import com.lottery.entity.Activity;
import com.lottery.admin.mapper.IFundingMapper;
import com.lottery.admin.service.IFundingService;
import com.lottery.entity.FundingExport;
import com.lottery.entity.FundingUser;
import com.lottery.exception.BusinessException;
import com.lottery.result.Result;
import com.lottery.utils.ConvertBeanUtil;
import com.lottery.utils.HttpUtils;
import com.lottery.utils.ValidationUtils;
import com.lottery.vo.*;
import io.jsonwebtoken.UnsupportedJwtException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.context.WebApplicationContext;
import javax.servlet.http.HttpServletResponse;
import javax.transaction.Transactional;
@ -46,6 +55,10 @@ public class FundingServiceImpl implements IFundingService {
private IFundingMapper fundingMapper;
@Autowired
ObjectMapper objectMapper = new ObjectMapper();
@Autowired
private PrizeController prizeController;
@Autowired
private WebApplicationContext webApplicationContext;
// 获取所有众筹活动
@Override
@ -457,5 +470,29 @@ public class FundingServiceImpl implements IFundingService {
throw new BusinessException(400,"所要查询的活动不存在");
return Result.success(fundingMapper.getMarketListByActivityId(activityId));
}
/**
* 条api
*/
String apiUrl = "http://api.homilychart.com/hljwgo/api/v2/member/info";
@Override
public boolean flushData() throws Exception {
ArrayList<String> jwcodes = new ArrayList<>();
jwcodes = fundingMapper.selectJwcode();
for (String jwcode : jwcodes) {
String locMarket = getMemberInfo(jwcode);
fundingMapper.updateLocMarket(jwcode, locMarket);
}
return true;
}
public String getMemberInfo(String jwcode) throws Exception {
Map<String, String> params = new HashMap<>();
params.put("jwcode", jwcode);
// JSON库解析
String json = HttpUtils.postUrlencoded(apiUrl, params);
return JsonPath.read(json, "$.data.loc_market");
}
}

14
lottery-system/pom.xml

@ -32,6 +32,8 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
@ -136,6 +138,18 @@
<version>0.11.5</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.3</version>
</dependency>
<!-- 如果使用JsonPath -->
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>2.7.0</version>
</dependency>
</dependencies>
<build>
<pluginManagement>

Loading…
Cancel
Save