一口价查询

This commit is contained in:
2025-09-21 00:15:08 +08:00
parent b7d3e20c46
commit 18cb459320
4 changed files with 62 additions and 6 deletions

View File

@@ -360,4 +360,12 @@ public class OrderBiz {
orderRepository.clearOrderCache(orderId); // 更新完了,清理下 orderRepository.clearOrderCache(orderId); // 更新完了,清理下
profitSharingBiz.revokeProfitSharing(order.getScenicId(), orderId, "订单已退款"); profitSharingBiz.revokeProfitSharing(order.getScenicId(), orderId, "订单已退款");
} }
/**
* 检查用户是否购买了指定商品
* 提供给PriceBiz使用,避免循环调用
*/
public boolean checkUserBuyItem(Long userId, int goodsType, Long goodsId) {
return orderRepository.checkUserBuyItem(userId, goodsType, goodsId);
}
} }

View File

@@ -11,9 +11,11 @@ import com.ycwl.basic.model.pc.price.entity.PriceConfigEntity;
import com.ycwl.basic.model.pc.price.resp.GoodsListRespVO; import com.ycwl.basic.model.pc.price.resp.GoodsListRespVO;
import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity; import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity;
import com.ycwl.basic.model.pc.template.resp.TemplateRespVO; import com.ycwl.basic.model.pc.template.resp.TemplateRespVO;
import com.ycwl.basic.model.pc.video.entity.MemberVideoEntity;
import com.ycwl.basic.pricing.entity.PriceOnePriceConfig; import com.ycwl.basic.pricing.entity.PriceOnePriceConfig;
import com.ycwl.basic.pricing.service.IOnePricePurchaseService; import com.ycwl.basic.pricing.service.IOnePricePurchaseService;
import com.ycwl.basic.repository.FaceRepository; import com.ycwl.basic.repository.FaceRepository;
import com.ycwl.basic.repository.MemberRelationRepository;
import com.ycwl.basic.repository.PriceRepository; import com.ycwl.basic.repository.PriceRepository;
import com.ycwl.basic.repository.ScenicRepository; import com.ycwl.basic.repository.ScenicRepository;
import com.ycwl.basic.repository.TemplateRepository; import com.ycwl.basic.repository.TemplateRepository;
@@ -47,6 +49,8 @@ public class PriceBiz {
private FaceService faceService; private FaceService faceService;
@Autowired @Autowired
private CouponBiz couponBiz; private CouponBiz couponBiz;
@Autowired
private MemberRelationRepository memberRelationRepository;
public List<GoodsListRespVO> listGoodsByScenic(Long scenicId) { public List<GoodsListRespVO> listGoodsByScenic(Long scenicId) {
List<GoodsListRespVO> goodsList = new ArrayList<>(); List<GoodsListRespVO> goodsList = new ArrayList<>();
@@ -150,10 +154,48 @@ public class PriceBiz {
} }
} }
if (type == -1 && !respVO.isBuy()) { if (type == -1 && !respVO.isBuy()) {
// 查找所有内容是否购买。 // 直接查询用户购买状态,避免调用faceContentList造成循环调用
List<ContentPageVO> list = faceService.faceContentList(faceId); boolean allContentsPurchased = true;
boolean notBuy = list.stream().anyMatch(item -> Integer.valueOf(0).equals(item.getIsBuy()));
if (!notBuy) { // 检查视频模板购买状态
List<TemplateRespVO> templateList = templateRepository.getTemplateListByScenicId(scenicId);
for (TemplateRespVO template : templateList) {
// 使用OrderRepository直接检查是否购买了该模板下的内容
List<MemberVideoEntity> videoEntities = memberRelationRepository.listRelationByFaceAndTemplate(faceId, template.getId());
if (videoEntities == null || videoEntities.isEmpty()) {
allContentsPurchased = false;
break;
}
boolean hasPurchasedTemplate = orderBiz.checkUserBuyItem(userId, 0, videoEntities.getFirst().getVideoId());
if (!hasPurchasedTemplate) {
allContentsPurchased = false;
break;
}
}
// 检查源文件购买状态(录像集和照片集)
if (allContentsPurchased) {
if (scenicConfig != null) {
// 检查录像集
if (!Boolean.TRUE.equals(scenicConfig.getDisableSourceVideo())) {
boolean hasPurchasedRecording = orderBiz.checkUserBuyItem(userId, 1, faceId);
if (!hasPurchasedRecording) {
allContentsPurchased = false;
}
}
// 检查照片集
if (allContentsPurchased && !Boolean.TRUE.equals(scenicConfig.getDisableSourceImage())) {
boolean hasPurchasedPhoto = orderBiz.checkUserBuyItem(userId, 2, faceId);
if (!hasPurchasedPhoto) {
allContentsPurchased = false;
}
}
}
}
// 如果所有内容都已购买,则认为已购买套餐
if (allContentsPurchased) {
respVO.setBuy(true); respVO.setBuy(true);
} }
} }

View File

@@ -98,6 +98,10 @@ public class OrderRepository {
return checkUserBuyItem(userId, 0, videoId); return checkUserBuyItem(userId, 0, videoId);
} }
public boolean checkUserBuyTemplate(Long userId, Long templateId) {
return checkUserBuyItem(userId, -1, templateId);
}
public void clearUserBuyItemCache(Long userId, int goodsType, Long goodsId) { public void clearUserBuyItemCache(Long userId, int goodsType, Long goodsId) {
redisTemplate.delete(String.format(ORDER_USER_TYPE_BUY_ITEM_CACHE_KEY, userId, goodsType, goodsId)); redisTemplate.delete(String.format(ORDER_USER_TYPE_BUY_ITEM_CACHE_KEY, userId, goodsType, goodsId));
} }

View File

@@ -715,9 +715,11 @@ public class FaceServiceImpl implements FaceService {
contentPageVO.setLockType(1); contentPageVO.setLockType(1);
} }
} }
IsBuyRespVO buy = orderBiz.isBuy(userId, contentPageVO.getScenicId(), contentPageVO.getGoodsType(), contentPageVO.getContentId()); boolean buy = orderBiz.checkUserBuyItem(userId, contentPageVO.getGoodsType(), contentPageVO.getContentId());
if (buy.isBuy()) { if (buy) {
contentPageVO.setIsBuy(1); contentPageVO.setIsBuy(1);
} else {
contentPageVO.setIsBuy(0);
} }
}).collect(Collectors.toList()); }).collect(Collectors.toList());