This commit is contained in:
2025-01-21 14:48:58 +08:00
parent 812a4b6331
commit 29715bda78
16 changed files with 336 additions and 116 deletions

View File

@ -1,12 +1,17 @@
package com.ycwl.basic.repository;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.ycwl.basic.mapper.OrderMapper;
import com.ycwl.basic.model.pc.order.entity.OrderEntity;
import com.ycwl.basic.model.pc.order.entity.OrderItemEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Component
public class OrderRepository {
@ -15,19 +20,59 @@ public class OrderRepository {
@Autowired
private RedisTemplate<String, String> redisTemplate;
public static final String ORDER_ITEM_CACHE_KEY = "order:user:%s:type:%s:id:%s";
public static final String ORDER_CACHE_KEY = "order:%s";
public static final String ORDER_ITEMS_CACHE_KEY = "order:%s:items";
public static final String ORDER_ITEM_CACHE_KEY = "order:item:%s";
public static final String ORDER_USER_TYPE_BUY_ITEM_CACHE_KEY = "order:user:%s:type:%s:id:%s";
public OrderEntity getOrder(Long orderId) {
if (redisTemplate.hasKey(String.format(ORDER_CACHE_KEY, orderId))) {
return JSON.parseObject(redisTemplate.opsForValue().get(String.format(ORDER_CACHE_KEY, orderId)), OrderEntity.class);
}
OrderEntity orderEntity = orderMapper.get(orderId);
if (orderEntity != null) {
redisTemplate.opsForValue().set(String.format(ORDER_CACHE_KEY, orderId), JSON.toJSONString(orderEntity), 60, TimeUnit.SECONDS);
}
return orderEntity;
}
public List<OrderItemEntity> getOrderItems(Long orderId) {
if (redisTemplate.hasKey(String.format(ORDER_ITEMS_CACHE_KEY, orderId))) {
return JSON.parseArray(redisTemplate.opsForValue().get(String.format(ORDER_ITEMS_CACHE_KEY, orderId)), Long.class)
.stream().map(this::getOrderItemByOrderItemId).collect(Collectors.toList());
}
List<OrderItemEntity> orderItemEntities = orderMapper.listOrderItemByOrderId(orderId);
if (orderItemEntities != null) {
redisTemplate.opsForValue().set(
String.format(ORDER_ITEMS_CACHE_KEY, orderId),
JSONArray.toJSONString(orderItemEntities.stream().map(OrderItemEntity::getId).collect(Collectors.toList()))
);
}
return orderItemEntities;
}
public OrderItemEntity getOrderItemByOrderItemId(Long orderItemId) {
if (redisTemplate.hasKey(String.format(ORDER_ITEM_CACHE_KEY, orderItemId))) {
return JSON.parseObject(redisTemplate.opsForValue().get(String.format(ORDER_ITEM_CACHE_KEY, orderItemId)), OrderItemEntity.class);
}
OrderItemEntity orderItemEntity = orderMapper.getOrderItem(orderItemId);
if (orderItemEntity != null) {
redisTemplate.opsForValue().set(String.format(ORDER_ITEM_CACHE_KEY, orderItemId), JSON.toJSONString(orderItemEntity));
}
return orderItemEntity;
}
public boolean checkUserBuyItem(Long userId, int goodsType, Long goodsId) {
synchronized (this) {
if (redisTemplate.hasKey(String.format(ORDER_ITEM_CACHE_KEY, userId, goodsType, goodsId))) {
return "1".equals(redisTemplate.opsForValue().get(String.format(ORDER_ITEM_CACHE_KEY, userId, goodsType, goodsId)));
if (redisTemplate.hasKey(String.format(ORDER_USER_TYPE_BUY_ITEM_CACHE_KEY, userId, goodsType, goodsId))) {
return "1".equals(redisTemplate.opsForValue().get(String.format(ORDER_USER_TYPE_BUY_ITEM_CACHE_KEY, userId, goodsType, goodsId)));
}
OrderEntity orderEntity = orderMapper.getUserBuyItem(userId, goodsType, goodsId);
if (orderEntity == null) {
redisTemplate.opsForValue().set(String.format(ORDER_ITEM_CACHE_KEY, userId, goodsType, goodsId), "0", 60, TimeUnit.SECONDS);
redisTemplate.opsForValue().set(String.format(ORDER_USER_TYPE_BUY_ITEM_CACHE_KEY, userId, goodsType, goodsId), "0", 60, TimeUnit.SECONDS);
return false;
}
redisTemplate.opsForValue().set(String.format(ORDER_ITEM_CACHE_KEY, userId, goodsType, goodsId), "1");
redisTemplate.opsForValue().set(String.format(ORDER_USER_TYPE_BUY_ITEM_CACHE_KEY, userId, goodsType, goodsId), "1");
return true;
}
}
@ -45,6 +90,22 @@ public class OrderRepository {
}
public void clearUserBuyItemCache(Long userId, int goodsType, Long goodsId) {
redisTemplate.delete(String.format(ORDER_ITEM_CACHE_KEY, userId, goodsType, goodsId));
redisTemplate.delete(String.format(ORDER_USER_TYPE_BUY_ITEM_CACHE_KEY, userId, goodsType, goodsId));
}
public void clearOrderCache(Long orderId) {
OrderEntity order = getOrder(orderId);
redisTemplate.delete(String.format(ORDER_CACHE_KEY, orderId));
getOrderItems(orderId).forEach(orderItem -> {
redisTemplate.delete(String.format(ORDER_ITEM_CACHE_KEY, orderItem.getId()));
clearUserBuyItemCache(order.getMemberId(), orderItem.getGoodsType(), orderItem.getGoodsId());
});
redisTemplate.delete(String.format(ORDER_ITEMS_CACHE_KEY, orderId));
}
public void updateOrder(Long orderId, OrderEntity updateEntity) {
updateEntity.setId(orderId);
orderMapper.updateOrder(updateEntity);
clearOrderCache(orderId);
}
}

View File

@ -0,0 +1,55 @@
package com.ycwl.basic.repository;
import com.ycwl.basic.mapper.SourceMapper;
import com.ycwl.basic.model.pc.source.entity.MemberSourceEntity;
import com.ycwl.basic.model.pc.source.entity.SourceEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class SourceRepository {
@Autowired
private SourceMapper sourceMapper;
@Autowired
private RedisTemplate<String, String> redisTemplate;
public void addSource(SourceEntity source) {
sourceMapper.add(source);
}
public void setUserIsBuyItem(Long memberId, int type, Long faceId, Long orderId) {
MemberSourceEntity memberSource = new MemberSourceEntity();
memberSource.setMemberId(memberId);
memberSource.setFaceId(faceId);
memberSource.setType(type);
memberSource.setOrderId(orderId);
memberSource.setIsBuy(1);
sourceMapper.updateRelation(memberSource);
}
public void setUserNotBuyItem(Long memberId, int type, Long faceId) {
MemberSourceEntity memberSource = new MemberSourceEntity();
memberSource.setMemberId(memberId);
memberSource.setFaceId(faceId);
memberSource.setType(type);
memberSource.setOrderId(null);
memberSource.setIsBuy(0);
sourceMapper.updateRelation(memberSource);
}
public boolean getUserIsBuy(Long userId, int type, Long faceId) {
switch (type) {
case 1:
List<SourceEntity> videoSourceList = sourceMapper.listVideoByFaceRelation(userId, faceId);
return videoSourceList.stream().anyMatch(item -> Integer.valueOf(1).equals(item.getIsBuy()));
case 2:
List<SourceEntity> imageSourceList = sourceMapper.listImageByFaceRelation(userId, faceId);
return imageSourceList.stream().anyMatch(item -> Integer.valueOf(1).equals(item.getIsBuy()));
default:
return false;
}
}
}

View File

@ -1,6 +1,7 @@
package com.ycwl.basic.repository;
import com.ycwl.basic.mapper.VideoMapper;
import com.ycwl.basic.model.pc.video.entity.MemberVideoEntity;
import com.ycwl.basic.model.pc.video.entity.VideoEntity;
import com.ycwl.basic.model.pc.video.resp.VideoRespVO;
import com.ycwl.basic.model.task.req.VideoInfoReq;
@ -31,4 +32,30 @@ public class VideoRepository {
update.setDuration(req.getDuration());
videoMapper.updateMeta(update);
}
public void setUserIsBuyItem(Long memberId, Long videoId, Long orderId) {
MemberVideoEntity memberVideo = new MemberVideoEntity();
memberVideo.setVideoId(videoId);
memberVideo.setMemberId(memberId);
memberVideo.setIsBuy(1);
memberVideo.setOrderId(orderId);
videoMapper.updateRelation(memberVideo);
}
public void setUserNotBuyItem(Long memberId, Long videoId) {
MemberVideoEntity memberVideo = new MemberVideoEntity();
memberVideo.setVideoId(videoId);
memberVideo.setMemberId(memberId);
memberVideo.setIsBuy(0);
memberVideo.setOrderId(null);
videoMapper.updateRelation(memberVideo);
}
public boolean getUserIsBuy(Long userId, Long videoId) {
MemberVideoEntity memberVideo = videoMapper.queryUserVideo(userId, videoId);
if (memberVideo == null) {
return false;
}
return Integer.valueOf(1).equals(memberVideo.getIsBuy());
}
}