feat(media): refine clerk album review and tests

This commit is contained in:
irving
2025-12-05 22:16:01 -05:00
parent e683ef6863
commit 21bbd0386d
7 changed files with 469 additions and 30 deletions

View File

@@ -6,12 +6,16 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.starry.admin.common.aspect.ClerkUserLogin;
import com.starry.admin.common.conf.ThreadLocalRequestDetail;
import com.starry.admin.common.exception.CustomException;
import com.starry.admin.modules.clerk.enums.ClerkMediaReviewState;
import com.starry.admin.modules.clerk.enums.ClerkMediaUsage;
import com.starry.admin.modules.clerk.module.entity.*;
import com.starry.admin.modules.clerk.module.vo.PlayClerkCommodityEditVo;
import com.starry.admin.modules.clerk.module.vo.PlayClerkCommodityQueryVo;
import com.starry.admin.modules.clerk.service.*;
import com.starry.admin.modules.clerk.service.impl.PlayClerkUserInfoServiceImpl;
import com.starry.admin.modules.clerk.service.impl.PlayClerkUserReviewInfoServiceImpl;
import com.starry.admin.modules.media.enums.MediaOwnerType;
import com.starry.admin.modules.media.service.IPlayMediaService;
import com.starry.admin.modules.order.module.constant.OrderConstant.OperatorType;
import com.starry.admin.modules.order.module.entity.PlayOrderInfoEntity;
import com.starry.admin.modules.order.module.vo.PlayOrderCompleteVo;
@@ -54,6 +58,7 @@ import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
@@ -121,6 +126,10 @@ public class WxClerkController {
private SmsUtils smsUtils;
@Resource
private WxCustomMpService wxCustomMpService;
@Resource
private com.starry.admin.modules.clerk.service.IPlayClerkMediaAssetService clerkMediaAssetService;
@Resource
private IPlayMediaService mediaService;
/**
* 店员获取个人业绩信息
@@ -313,18 +322,77 @@ public class WxClerkController {
@PostMapping("/user/updateAlbum")
public R updateAlbum(@Validated @RequestBody PlayClerkUserAlbumVo vo) {
PlayClerkUserInfoEntity userInfo = ThreadLocalRequestDetail.getClerkUserInfo();
// PlayClerkDataReviewInfoEntity entity =
// playClerkDataReviewInfoService.queryByClerkId(userInfo.getId(), "2", "0");
// if (entity != null) {
// throw new CustomException("已有申请未审核");
// }
PlayClerkDataReviewInfoEntity entity = new PlayClerkDataReviewInfoEntity();
entity.setClerkId(userInfo.getId());
entity.setDataType("2");
entity.setReviewState("0");
entity.setDataContent(vo.getAlbum());
playClerkDataReviewInfoService.create(entity);
return R.ok("提交成功,等待审核~");
List<String> requested = vo.getAlbum() == null ? new ArrayList<>() : vo.getAlbum().stream()
.filter(StrUtil::isNotBlank)
.map(String::trim)
.distinct()
.collect(Collectors.toList());
// 查询当前所有已审核通过的 PROFILE 媒资
List<PlayClerkMediaAssetEntity> approvedAssets = clerkMediaAssetService.listByState(
userInfo.getId(),
ClerkMediaUsage.PROFILE,
Collections.singletonList(ClerkMediaReviewState.APPROVED));
LinkedHashSet<String> requestedSet = new LinkedHashSet<>(requested);
if (requestedSet.isEmpty()) {
throw new CustomException("最少上传一张照片");
}
// 计算哪些是新媒资(需走审核),哪些是纯删除/排序
java.util.Set<String> approvedIds = approvedAssets.stream()
.map(PlayClerkMediaAssetEntity::getMediaId)
.filter(StrUtil::isNotBlank)
.collect(java.util.stream.Collectors.toSet());
java.util.Set<String> newMediaIds = requestedSet.stream()
.filter(id -> !approvedIds.contains(id))
.collect(java.util.stream.Collectors.toSet());
if (!newMediaIds.isEmpty()) {
// 新增媒资必须是当前店员本人名下、已就绪的媒资,才能进入审核流程
java.util.List<com.starry.admin.modules.media.entity.PlayMediaEntity> newMediaEntities =
mediaService.lambdaQuery()
.in(com.starry.admin.modules.media.entity.PlayMediaEntity::getId, newMediaIds)
.list();
if (newMediaEntities.size() != newMediaIds.size()) {
throw new CustomException("存在未完成上传的照片/视频,请稍后重试");
}
for (com.starry.admin.modules.media.entity.PlayMediaEntity media : newMediaEntities) {
if (!userInfo.getTenantId().equals(media.getTenantId())
|| media.getOwnerType() != MediaOwnerType.CLERK
|| !userInfo.getId().equals(media.getOwnerId())) {
throw new CustomException("存在无效的照片/视频,请刷新后重试");
}
if (!com.starry.admin.modules.media.enums.MediaStatus.READY.getCode().equals(media.getStatus())) {
throw new CustomException("存在未完成上传的照片/视频,请稍后重试");
}
}
// 只要存在新增媒资,则按原有逻辑走资料审核,由审核通过时统一生效
PlayClerkDataReviewInfoEntity entity = new PlayClerkDataReviewInfoEntity();
entity.setClerkId(userInfo.getId());
entity.setDataType("2");
entity.setReviewState("0");
entity.setDataContent(new ArrayList<>(requestedSet));
playClerkDataReviewInfoService.create(entity);
return R.ok("提交成功,等待审核~");
}
// 仅删除/排序:直接应用变更,不再生成审核记录
// 先根据新的顺序更新 orderIndex
clerkMediaAssetService.reorder(userInfo.getId(), ClerkMediaUsage.PROFILE, new ArrayList<>(requestedSet));
// 再对不再保留的媒资执行软删除
java.util.Set<String> requestedOnly = new java.util.HashSet<>(requestedSet);
java.util.Set<String> deletedMediaIds = approvedIds.stream()
.filter(id -> !requestedOnly.contains(id))
.collect(java.util.stream.Collectors.toSet());
for (String mediaId : deletedMediaIds) {
clerkMediaAssetService.softDelete(userInfo.getId(), mediaId);
mediaService.softDelete(MediaOwnerType.CLERK, userInfo.getId(), mediaId);
}
return R.ok("修改成功");
}
@ClerkUserLogin