feat(media): refine clerk album review and tests
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user