task缓存

This commit is contained in:
Jerry Yan 2025-01-03 17:38:15 +08:00
parent 8e95d1b390
commit 5d9f3aae41
11 changed files with 71 additions and 71 deletions

View File

@ -74,17 +74,6 @@ public class AppGoodsController {
return goodsService.getAllTaskStatus(worker.getUserId()); return goodsService.getAllTaskStatus(worker.getUserId());
} }
@GetMapping("/task/face/{faceId}")
public ApiResponse<VideoTaskStatusVO> getTaskStatusByFaceId(@PathVariable("faceId") Long faceId) {
JwtInfo worker = JwtTokenUtil.getWorker();
return goodsService.getTaskStatusByFaceId(worker.getUserId(), faceId);
}
@GetMapping("/task/scenic/{scenicId}")
public ApiResponse<VideoTaskStatusVO> getAllTaskStatusByScenicId(@PathVariable("scenicId") Long scenicId) {
JwtInfo worker = JwtTokenUtil.getWorker();
return goodsService.getTaskStatusByScenicId(worker.getUserId(), scenicId);
}
/** /**
* 查询用户当前景区的具体模版视频合成任务状态 * 查询用户当前景区的具体模版视频合成任务状态
* *

View File

@ -1,6 +1,7 @@
package com.ycwl.basic.mapper; package com.ycwl.basic.mapper;
import com.ycwl.basic.model.mobile.order.OrderAppPageReq; import com.ycwl.basic.model.mobile.order.OrderAppPageReq;
import com.ycwl.basic.model.pc.order.entity.OrderEntity;
import com.ycwl.basic.model.pc.order.entity.OrderItemEntity; import com.ycwl.basic.model.pc.order.entity.OrderItemEntity;
import com.ycwl.basic.model.pc.order.req.OrderUpdateReq; import com.ycwl.basic.model.pc.order.req.OrderUpdateReq;
import com.ycwl.basic.model.pc.order.req.OrderAddReq; import com.ycwl.basic.model.pc.order.req.OrderAddReq;
@ -40,4 +41,6 @@ public interface OrderMapper {
List<OrderRespVO> refundList(OrderReqQuery query); List<OrderRespVO> refundList(OrderReqQuery query);
List<OrderItemEntity> listOrderItemByOrderId(Long orderId); List<OrderItemEntity> listOrderItemByOrderId(Long orderId);
OrderEntity getUserBuyItem(Long userId, int goodsType, Long goodsId);
} }

View File

@ -27,15 +27,6 @@ public interface TaskMapper {
int update(TaskEntity task); int update(TaskEntity task);
int updateStatus(Long id, Integer status); int updateStatus(Long id, Integer status);
/**
* 用户制作中的视频数量
*
* @param userId
* @return
*/
int countByMemberIdStau(String userId);
/** /**
* 用户合成的视频 * 用户合成的视频
* *

View File

@ -16,10 +16,6 @@ import lombok.Data;
public class TopStateResp { public class TopStateResp {
@ApiModelProperty("是否录入有效人脸") @ApiModelProperty("是否录入有效人脸")
private Boolean isFace = false; private Boolean isFace = false;
@ApiModelProperty("是否有专属视频待制作")
private Boolean madeVideos = false;
@ApiModelProperty("是否有专属视频合成中")
private Boolean compositingVideo = false;
@ApiModelProperty("AI合成了多少个视频null时没有合成的视频") @ApiModelProperty("AI合成了多少个视频null时没有合成的视频")
private Integer aiVideoNum; private Integer aiVideoNum;
} }

View File

@ -0,0 +1,41 @@
package com.ycwl.basic.repository;
import com.ycwl.basic.mapper.OrderMapper;
import com.ycwl.basic.model.pc.order.entity.OrderEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
@Component
public class OrderRepository {
@Autowired
private OrderMapper orderMapper;
@Autowired
private RedisTemplate<String, String> redisTemplate;
public static final String ORDER_ITEM_CACHE_KEY = "order:user:%s:type:%s:id:%s";
public boolean checkUserBuyItem(Long userId, int goodsType, Long goodsId) {
if (redisTemplate.hasKey(String.format(ORDER_ITEM_CACHE_KEY, userId, goodsType, goodsId))) {
return true;
}
OrderEntity orderEntity = orderMapper.getUserBuyItem(userId, goodsType, goodsId);
if (orderEntity == null) {
return false;
}
redisTemplate.opsForValue().set(String.format(ORDER_ITEM_CACHE_KEY, userId, goodsType, goodsId), "1");
return true;
}
public boolean checkUserBuyFaceSourceImage(Long userId, Long faceId) {
return checkUserBuyItem(userId, 2, faceId);
}
public boolean checkUserBuyFaceSourceVideo(Long userId, Long faceId) {
return checkUserBuyItem(userId, 1, faceId);
}
public boolean checkUserBuyVideo(Long userId, Long videoId) {
return checkUserBuyItem(userId, 0, videoId);
}
}

View File

@ -17,7 +17,6 @@ public class VideoTaskRepository {
@Autowired @Autowired
private VideoMapper videoMapper; private VideoMapper videoMapper;
public static final String USER_TASK_CACHE_KEY = "task:user:%s";
public static final String TASK_CACHE_KEY = "task:byId:%s"; public static final String TASK_CACHE_KEY = "task:byId:%s";
public TaskEntity getTaskById(Long taskId) { public TaskEntity getTaskById(Long taskId) {
@ -25,10 +24,14 @@ public class VideoTaskRepository {
return JSONObject.parseObject(redisTemplate.opsForValue().get(String.format(TASK_CACHE_KEY, taskId)), TaskEntity.class); return JSONObject.parseObject(redisTemplate.opsForValue().get(String.format(TASK_CACHE_KEY, taskId)), TaskEntity.class);
} else { } else {
TaskEntity task = taskMapper.get(taskId); TaskEntity task = taskMapper.get(taskId);
if (task != null) { if (task != null && 1 == task.getStatus()) {
redisTemplate.opsForValue().set(String.format(TASK_CACHE_KEY, taskId), JSONObject.toJSONString(task)); redisTemplate.opsForValue().set(String.format(TASK_CACHE_KEY, taskId), JSONObject.toJSONString(task));
} }
return task; return task;
} }
} }
public void clearTaskCache(Long taskId) {
redisTemplate.delete(String.format(TASK_CACHE_KEY, taskId));
}
} }

View File

@ -97,38 +97,6 @@ public class AppScenicServiceImpl implements AppScenicService {
return ApiResponse.success(dataList); return ApiResponse.success(dataList);
} }
@Override
public ApiResponse<TopStateResp> topState() {
TopStateResp topStateResp = new TopStateResp();
String userId = BaseContextHandler.getUserId();
if (StringUtils.isBlank(userId)) {
return ApiResponse.success(topStateResp);
}
// 查询是否有人脸
FaceReqQuery faceReqQuery = new FaceReqQuery();
faceReqQuery.setMemberId(Long.parseLong(userId));
List<FaceRespVO> list = faceMapper.list(faceReqQuery);
for (FaceRespVO faceRespVO : list) {
if (faceRespVO.getScore().compareTo(faceScore) >= NumberConstant.ZERO) {
topStateResp.setIsFace(true);
}
}
// 查询是否有专属视频待制作
int sourceNum = sourceMapper.countByMemberId(userId);
topStateResp.setMadeVideos(sourceNum > 0);
// 是否有专属视频合成中
int taskSynthesizingNum = taskMapper.countByMemberIdStau(userId);
topStateResp.setCompositingVideo(taskSynthesizingNum > 0);
// AI合成了多少个视频 完成
int taskFinishNum = taskMapper.countByMemberIdStauFinish(userId);
topStateResp.setAiVideoNum(taskFinishNum);
return ApiResponse.success(topStateResp);
}
@Override @Override
public ApiResponse<List<ContentPageVO>> contentList(Long faceId) { public ApiResponse<List<ContentPageVO>> contentList(Long faceId) {
JwtInfo worker = JwtTokenUtil.getWorker(); JwtInfo worker = JwtTokenUtil.getWorker();

View File

@ -26,6 +26,7 @@ import com.ycwl.basic.model.task.req.ClientStatusReqVo;
import com.ycwl.basic.model.task.req.TaskReqVo; import com.ycwl.basic.model.task.req.TaskReqVo;
import com.ycwl.basic.model.task.req.WorkerAuthReqVo; import com.ycwl.basic.model.task.req.WorkerAuthReqVo;
import com.ycwl.basic.model.task.resp.TaskSyncRespVo; import com.ycwl.basic.model.task.resp.TaskSyncRespVo;
import com.ycwl.basic.repository.VideoTaskRepository;
import com.ycwl.basic.service.task.TaskService; import com.ycwl.basic.service.task.TaskService;
import com.ycwl.basic.storage.StorageFactory; import com.ycwl.basic.storage.StorageFactory;
import com.ycwl.basic.storage.adapters.IStorageAdapter; import com.ycwl.basic.storage.adapters.IStorageAdapter;
@ -68,6 +69,8 @@ public class TaskTaskServiceImpl implements TaskService {
private VideoMapper videoMapper; private VideoMapper videoMapper;
@Autowired @Autowired
private TemplateRepository templateRepository; private TemplateRepository templateRepository;
@Autowired
private VideoTaskRepository videoTaskRepository;
private RenderWorkerEntity getWorker(@NonNull WorkerAuthReqVo req) { private RenderWorkerEntity getWorker(@NonNull WorkerAuthReqVo req) {
String accessKey = req.getAccessKey(); String accessKey = req.getAccessKey();
@ -110,7 +113,10 @@ public class TaskTaskServiceImpl implements TaskService {
// Template // Template
List<TaskRespVO> taskList = taskMapper.selectNotRunning(); List<TaskRespVO> taskList = taskMapper.selectNotRunning();
resp.setTasks(taskList); resp.setTasks(taskList);
taskList.forEach(task -> taskMapper.assignToWorker(task.getId(), worker.getId())); taskList.forEach(task -> {
taskMapper.assignToWorker(task.getId(), worker.getId());
videoTaskRepository.clearTaskCache(task.getId());
});
// return Task // return Task
return resp; return resp;
} }
@ -174,6 +180,7 @@ public class TaskTaskServiceImpl implements TaskService {
taskUpdate.setId(taskId); taskUpdate.setId(taskId);
taskUpdate.setWorkerId(worker.getId()); taskUpdate.setWorkerId(worker.getId());
taskMapper.setStart(taskUpdate); taskMapper.setStart(taskUpdate);
videoTaskRepository.clearTaskCache(taskUpdate.getId());
} }
@Override @Override
@ -284,6 +291,7 @@ public class TaskTaskServiceImpl implements TaskService {
taskUpdate.setStatus(1); taskUpdate.setStatus(1);
taskUpdate.setWorkerId(worker.getId()); taskUpdate.setWorkerId(worker.getId());
taskMapper.setSuccess(taskUpdate); taskMapper.setSuccess(taskUpdate);
videoTaskRepository.clearTaskCache(taskUpdate.getId());
VideoEntity video = videoMapper.findByTaskId(taskId); VideoEntity video = videoMapper.findByTaskId(taskId);
if (video != null) { if (video != null) {
video.setVideoUrl(task.getVideoUrl()); video.setVideoUrl(task.getVideoUrl());
@ -319,6 +327,7 @@ public class TaskTaskServiceImpl implements TaskService {
taskUpdate.setWorkerId(worker.getId()); taskUpdate.setWorkerId(worker.getId());
taskMapper.setFail(taskUpdate); taskMapper.setFail(taskUpdate);
taskMapper.deassign(taskId); taskMapper.deassign(taskId);
videoTaskRepository.clearTaskCache(taskUpdate.getId());
} }
@Override @Override
@ -336,6 +345,7 @@ public class TaskTaskServiceImpl implements TaskService {
updateTask.setId(taskId); updateTask.setId(taskId);
updateTask.setVideoUrl(url); updateTask.setVideoUrl(url);
taskMapper.update(updateTask); taskMapper.update(updateTask);
videoTaskRepository.clearTaskCache(updateTask.getId());
} }
return adapter.getUrlForUpload(filename); return adapter.getUrlForUpload(filename);
} }

View File

@ -33,12 +33,6 @@ public interface AppScenicService {
*/ */
ApiResponse<List<ScenicAppVO>> scenicList(ScenicIndexVO scenicIndexVO); ApiResponse<List<ScenicAppVO>> scenicList(ScenicIndexVO scenicIndexVO);
/**
* 首页顶部状态
*
* @return
*/
ApiResponse<TopStateResp> topState();
ApiResponse<List<ContentPageVO>> contentList(Long scenicId); ApiResponse<List<ContentPageVO>> contentList(Long scenicId);
ApiResponse<List<ContentPageVO>> faceContentList(Long userId, Long faceId); ApiResponse<List<ContentPageVO>> faceContentList(Long userId, Long faceId);

View File

@ -87,8 +87,8 @@
oi.goods_type, oi.goods_type,
CASE oi.goods_type CASE oi.goods_type
WHEN '0' THEN mvd.name WHEN '0' THEN mvd.name
WHEN '1' THEN '原片' WHEN '1' THEN '原片'
WHEN '2' THEN '照片' WHEN '2' THEN '照片'
ELSE '其他' ELSE '其他'
END AS goods_name, END AS goods_name,
CASE oi.goods_type CASE oi.goods_type
@ -344,4 +344,13 @@
<select id="listOrderItemByOrderId" resultType="com.ycwl.basic.model.pc.order.entity.OrderItemEntity"> <select id="listOrderItemByOrderId" resultType="com.ycwl.basic.model.pc.order.entity.OrderItemEntity">
select * from order_item where order_id = #{orderId} select * from order_item where order_id = #{orderId}
</select> </select>
<select id="getUserBuyItem" resultType="com.ycwl.basic.model.pc.order.entity.OrderEntity">
select o.*
from order_item oi
left join `order` o on o.id = oi.order_id
where o.member_id = #{userId}
and oi.goods_id = #{goodsId}
and oi.goods_type = #{goodsType}
and o.status = 1
</select>
</mapper> </mapper>

View File

@ -72,10 +72,6 @@ from task
from task from task
where id = #{id} where id = #{id}
</select> </select>
<select id="countByMemberIdStau" resultType="java.lang.Integer">
select count(1) from task
where member_id = #{userId} and status IN (0,2)
</select>
<select id="countByMemberIdStauFinish" resultType="java.lang.Integer"> <select id="countByMemberIdStauFinish" resultType="java.lang.Integer">
select count(1) select count(1)
from task from task