Merge branch 'release/3.0' into dev/dev

# Conflicts:
#	src/main/java/com/ai/da/common/security/filter/AuthenticationFilter.java
#	src/main/java/com/ai/da/controller/ThirdPartyController.java
#	src/main/java/com/ai/da/service/AccountService.java
#	src/main/java/com/ai/da/service/impl/AccountServiceImpl.java
This commit is contained in:
shahaibo
2024-09-29 17:56:49 +08:00
6 changed files with 296 additions and 33 deletions

View File

@@ -168,8 +168,6 @@ public interface AccountService extends IService<Account> {
void registerUserToVisitor();
String updateNoLoginRequiredNew(NoLoginRequiredDTO noLoginRequiredDTO, HttpServletRequest request);
Map<String, Long> getNicknameModifyTimes();
void editUserName(String newUserName);
@@ -179,4 +177,6 @@ public interface AccountService extends IService<Account> {
void changeUserEmail(String newMailbox);
void activateNewEmail(String token);
String updateNoLoginRequiredNew(NoLoginRequiredDTO noLoginRequiredDTO, HttpServletRequest request);
}

View File

@@ -572,7 +572,7 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
account.setSystemUser(3);
account.setValidStartTime(System.currentTimeMillis());
if (link) {
account.setValidEndTime(toDayEnd(Instant.now().plus(14, ChronoUnit.DAYS).toEpochMilli()));
account.setValidEndTime(toDayEnd(Instant.now().plus(5, ChronoUnit.DAYS).toEpochMilli()));
} else {
account.setValidEndTime(toDayEnd(Instant.now().plus(5, ChronoUnit.DAYS).toEpochMilli()));
}
@@ -584,7 +584,7 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
account.setLanguage(Language.ENGLISH.name());
account.setValidStartTime(System.currentTimeMillis());
if (link) {
account.setValidEndTime(toDayEnd(Instant.now().plus(14, ChronoUnit.DAYS).toEpochMilli()));
account.setValidEndTime(toDayEnd(Instant.now().plus(5, ChronoUnit.DAYS).toEpochMilli()));
} else {
account.setValidEndTime(toDayEnd(Instant.now().plus(5, ChronoUnit.DAYS).toEpochMilli()));
}

View File

@@ -81,6 +81,9 @@ public class CollectionElementServiceImpl extends ServiceImpl<CollectionElementM
@Resource
private RedisUtil redisUtil;
// @Resource
// private RedisUtil redisUtil;
@Transactional(rollbackFor = Exception.class)
@Override
public CollectionElementVO upload(CollectionElementUploadDTO uploadDTO) {
@@ -707,30 +710,40 @@ public class CollectionElementServiceImpl extends ServiceImpl<CollectionElementM
@Override
public void editSketchBoardsElement(ValidateElementVO elementVO, List<CollectionSketchDTO> sketchBoards) {
if (CollectionUtil.isNotEmpty(sketchBoards)) {
sketchBoards.forEach(sketchBoard -> {
List<CollectionSketchDTO> collect = sketchBoards.stream().filter(o -> o.getDesignType().equals(DesignTypeEnum.COLLECTION.getRealName())).collect(Collectors.toList());
collect.forEach(sketchBoard -> {
CollectionElement collectionElement = CopyUtil.copyObject(sketchBoard, CollectionElement.class);
collectionElement.setHasPin(sketchBoard.getIsPin());
collectionElement.setId(sketchBoard.getSketchBoardId());
collectionElementMapper.updateById(collectionElement);
});
List<Long> sketchBoardIds = sketchBoards.stream().map(CollectionSketchDTO::getSketchBoardId).collect(Collectors.toList());
List<CollectionElement> sketchBoardElements = collectionElementMapper.selectBatchIds(sketchBoardIds);
elementVO.setSketchBoardElements(sketchBoardElements);
List<Long> sketchBoardIds = collect.stream().map(CollectionSketchDTO::getSketchBoardId).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(sketchBoardIds)) {
List<CollectionElement> sketchBoardElements = collectionElementMapper.selectBatchIds(sketchBoardIds);
elementVO.setSketchBoardElements(sketchBoardElements);
}else {
elementVO.setSketchBoardElements(new ArrayList<>());
}
}
}
@Override
public void editPrintBoardsElement(ValidateElementVO elementVO, List<DesignCollectionPrintElementDTO> printBoards) {
if (CollectionUtil.isNotEmpty(printBoards)) {
printBoards.forEach(printBoard -> {
List<DesignCollectionPrintElementDTO> collect = printBoards.stream().filter(o -> o.getDesignType().equals(DesignTypeEnum.COLLECTION.getRealName())).collect(Collectors.toList());
collect.forEach(printBoard -> {
CollectionElement collectionElement = CopyUtil.copyObject(printBoard, CollectionElement.class);
collectionElement.setHasPin(Objects.isNull(printBoard.getIsPin()) ? 0 : printBoard.getIsPin());
collectionElement.setId(printBoard.getId());
collectionElementMapper.updateById(collectionElement);
});
List<Long> printBoardIds = printBoards.stream().map(DesignCollectionPrintElementDTO::getId).collect(Collectors.toList());
List<CollectionElement> printBoardElements = collectionElementMapper.selectBatchIds(printBoardIds);
elementVO.setPrintBoardElements(printBoardElements);
List<Long> printBoardIds = collect.stream().map(DesignCollectionPrintElementDTO::getId).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(printBoardIds)) {
List<CollectionElement> printBoardElements = collectionElementMapper.selectBatchIds(printBoardIds);
elementVO.setPrintBoardElements(printBoardElements);
}else {
elementVO.setPrintBoardElements(new ArrayList<>());
}
}
}

View File

@@ -426,11 +426,15 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
public PageBaseResponse<PortfolioVO> page(QueryPortfolioPageDTO query) {
AuthPrincipalVo userHolder = UserContext.getUserHolder();
QueryWrapper<Portfolio> qw = new QueryWrapper<>();
// 查询用户的作品集
if (query.getGetMyPortfolio() == 1) {
qw.lambda().eq(Portfolio::getAccountId, userHolder.getId());
} else if (!Objects.isNull(query.getAccountId())) {
qw.lambda().eq(Portfolio::getAccountId, query.getAccountId());
}
// 查询用户喜欢的作品集
if (query.getGetLikePortfolio() == 1) {
List<Long> likedPortfolioIdList = redisUtil.getLikedPortfolios(userHolder.getId());
if (!CollectionUtils.isEmpty(likedPortfolioIdList)) {
@@ -439,31 +443,54 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
return PageBaseResponse.success(new Page<>());
}
}
List<Portfolio> topThree = new ArrayList<>();
if (query.getPage() == 1 &&
(query.getGetMyPortfolio() != 1 || query.getGetLikePortfolio() != 1)) {
List<Portfolio> topThree = new ArrayList<>();
List<Long> excludeIds = new ArrayList<>(); // 存放需要排除的 ID 列表
// 获取前三点赞和前三浏览的作品集,并将其排除在分页查询之外
if (query.getPage() == 1 && (query.getGetMyPortfolio() != 1 || query.getGetLikePortfolio() != 1)) {
// 获取前三点赞的作品集 ID
List<Long> topThreeLike = getTopThreeLikeFromRedis(RedisUtil.PORTFOLIO_LIKE_KEY);
log.info("top three like 的作品集的id : {}", topThreeLike);
List<Long> topThreeView = getTopThreeViewFromRedis(RedisUtil.PORTFOLIO_VIEW_KEY);
log.info("top three view 的作品集的id : {}", topThreeView);
QueryWrapper<Portfolio> queryLike = new QueryWrapper<>();
queryLike.in("id", topThreeLike);
QueryWrapper<Portfolio> queryView = new QueryWrapper<>();
queryView.in("id", topThreeView);
List<Portfolio> topThreeLikePortfolio = baseMapper.selectList(queryLike);
List<Portfolio> topThreeViewPortfolio = baseMapper.selectList(queryView);
topThree.addAll(topThreeLikePortfolio);
topThree.addAll(topThreeViewPortfolio);
List<Long> topThreeView = getTopThreeViewFromRedis(RedisUtil.PORTFOLIO_VIEW_KEY, topThreeLike);
// 获取前三点赞的作品集
if (!CollectionUtils.isEmpty(topThreeLike)) {
QueryWrapper<Portfolio> queryLike = new QueryWrapper<>();
queryLike.in("id", topThreeLike);
List<Portfolio> topThreeLikePortfolio = baseMapper.selectList(queryLike);
topThree.addAll(topThreeLikePortfolio);
excludeIds.addAll(topThreeLike); // 添加到排除 ID 列表
}
// 获取前三浏览的作品集
if (!CollectionUtils.isEmpty(topThreeView)) {
QueryWrapper<Portfolio> queryView = new QueryWrapper<>();
queryView.in("id", topThreeView);
List<Portfolio> topThreeViewPortfolio = baseMapper.selectList(queryView);
topThree.addAll(topThreeViewPortfolio);
excludeIds.addAll(topThreeView); // 添加到排除 ID 列表
}
}
// 在正常分页查询中排除前三点赞和前三浏览的作品集
if (!CollectionUtils.isEmpty(excludeIds)) {
qw.lambda().notIn(Portfolio::getId, excludeIds);
}
// 按更新时间排序
qw.lambda().orderByDesc(Portfolio::getUpdateDate);
// 执行分页查询
IPage<Portfolio> page = portfolioMapper.selectPage(new Page<>(query.getPage(), query.getSize()), qw);
// 如果前三点赞和浏览不为空,将它们添加到分页查询的结果最前面
if (!topThree.isEmpty()) {
List<Portfolio> records = page.getRecords();
records.addAll(0, topThree);
records.addAll(0, topThree); // 添加到查询结果的开头
page.setRecords(records);
}
// 将 Portfolio 转换为 PortfolioVO 并进行相关处理
IPage<PortfolioVO> convert = page.convert((Function<Portfolio, PortfolioVO>) portfolio -> {
if (portfolio != null) {
PortfolioVO vo = CopyUtil.copyObject(portfolio, PortfolioVO.class);
@@ -480,9 +507,11 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
}
return null;
});
return PageBaseResponse.success(convert);
}
@Override
public PortfolioVO detail(PortfolioDTO portfolioDTO) {
AuthPrincipalVo userHolder = UserContext.getUserHolder();
@@ -1015,10 +1044,11 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
return null;
}
private List<Long> getTopThreeViewFromRedis(String prefix) {
private List<Long> getTopThreeViewFromRedis(String prefix, List<Long> excludeIds) {
// Step 1: Get all keys with the specific prefix
Set<String> keys = redisUtil.getKeysFromString(prefix + "*");
// Step 2: Create a map to store portfolioId and its corresponding value
// Step 2: Create a map to store portfolioId and its corresponding value
Map<Long, Long> portfolioViews = new HashMap<>();
if (keys != null) {
for (String key : keys) {
@@ -1027,11 +1057,15 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
if (!Objects.isNull(value)) {
// Extract the portfolioId from the key (assuming the key structure is consistent)
Long portfolioId = Long.valueOf(key.replace(prefix, ""));
portfolioViews.put(portfolioId, value);
// 只将不在点赞前三的 portfolioId 加入
if (!excludeIds.contains(portfolioId)) {
portfolioViews.put(portfolioId, value);
}
}
}
}
// Step 3: Find the top 3 portfolio IDs with the largest values
// Step 3: Find the top 3 portfolio IDs with the largest values
if (!portfolioViews.isEmpty()){
List<Long> top3PortfolioIds = portfolioViews.entrySet().stream()
.sorted(Map.Entry.<Long, Long>comparingByValue().reversed())
@@ -1039,7 +1073,7 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
.map(Map.Entry::getKey)
.collect(Collectors.toList());
System.out.println("Top 3 Portfolio IDs: " + top3PortfolioIds);
System.out.println("Top 3 Portfolio IDs after exclusion: " + top3PortfolioIds);
return top3PortfolioIds;
}
return null;