This commit is contained in:
Jerry Yan 2025-01-02 10:45:07 +08:00
parent cfd48861d5
commit 495210c6b1
22 changed files with 261 additions and 139 deletions

View File

@ -4,4 +4,5 @@ public class TaskConstant {
public static final String TASK_TEMPLATE_KEY_PFX="task:template:cache:"; public static final String TASK_TEMPLATE_KEY_PFX="task:template:cache:";
public static final String TASK_ONLINE_WORKER_KEY_PFX="task:online_worker:"; public static final String TASK_ONLINE_WORKER_KEY_PFX="task:online_worker:";
public static final String TASK_WORKER_TASK_KEY_PFX="task:worker:task:"; public static final String TASK_WORKER_TASK_KEY_PFX="task:worker:task:";
public static final String TASK_AUTOMATIC_KEY_PFX = "task:face:%s:template:%s:id";
} }

View File

@ -44,9 +44,10 @@ public class AppGoodsController {
} }
@ApiOperation("成片vlog商品详情") @ApiOperation("成片vlog商品详情")
@GetMapping("/getVideoGoodsDetail/{goodId}") @GetMapping("/getVideoGoodsDetail/{videoId}")
public ApiResponse<VideoGoodsDetailVO> videoGoodsDetail(@PathVariable("goodId") Long goodsId) { public ApiResponse<VideoGoodsDetailVO> videoGoodsDetail(@PathVariable("videoId") Long videoId) {
return goodsService.videoGoodsDetail(goodsId); JwtInfo worker = JwtTokenUtil.getWorker();
return goodsService.videoGoodsDetail(worker.getUserId(), videoId);
} }
@ApiOperation("查询价格") @ApiOperation("查询价格")
@ -80,20 +81,21 @@ public class AppGoodsController {
/** /**
* 查询用户当前景区的具体模版视频合成任务状态 * 查询用户当前景区的具体模版视频合成任务状态
*
* @param templateId 模版id * @param templateId 模版id
* @return 1 合成中 2 合成成功 * @return 1 合成中 2 合成成功
*/ */
@ApiOperation("查询用户当前景区的具体模版视频合成任务状态 1 合成中 2 合成成功 ") @ApiOperation("查询用户当前景区的具体模版视频合成任务状态 1 合成中 2 合成成功 ")
@GetMapping("/task/template/{templateId}") @GetMapping("/task/face/{faceId}/template/{templateId}")
public ApiResponse<Integer> getTemplateTaskStatus(@PathVariable("templateId") Long templateId) { public ApiResponse<VideoTaskStatusVO> getTemplateTaskStatus(@PathVariable("faceId") Long faceId, @PathVariable("templateId") Long templateId) {
JwtInfo worker = JwtTokenUtil.getWorker(); JwtInfo worker = JwtTokenUtil.getWorker();
return goodsService.getTemplateTaskStatus(worker.getUserId(),templateId); return goodsService.getTemplateTaskStatus(worker.getUserId(), faceId, templateId);
} }
@PostMapping("/submitVideoTask") @PostMapping("/submitVideoTask")
public ApiResponse<String> submitVideoTask(@RequestBody VideoTaskReq videoTaskReq) { public ApiResponse<String> submitVideoTask(@RequestBody VideoTaskReq videoTaskReq) {
JwtInfo worker = JwtTokenUtil.getWorker(); JwtInfo worker = JwtTokenUtil.getWorker();
taskService.autoCreateTaskByFaceIdAndTempalteId(videoTaskReq.getFaceId(),videoTaskReq.getTemplateId(),0); taskService.createTaskByFaceIdAndTempalteId(videoTaskReq.getFaceId(),videoTaskReq.getTemplateId(),0);
return ApiResponse.success("成功"); return ApiResponse.success("成功");
} }
} }

View File

@ -59,10 +59,4 @@ public class TaskTaskController {
taskService.taskFail(taskId, req); taskService.taskFail(taskId, req);
return ApiResponse.success("OK"); return ApiResponse.success("OK");
} }
@PostMapping("/test/createRenderTask/{scenicId}/{templateId}/{faceId}")
public ApiResponse<String> createRenderTask(@PathVariable Long scenicId, @PathVariable Long templateId, @PathVariable Long faceId) {
taskService.createRenderTask(scenicId, templateId, faceId);
return ApiResponse.success("ok");
}
} }

View File

@ -59,4 +59,6 @@ public interface SourceMapper {
SourceEntity querySameVideo(Long faceSampleId, Long deviceId); SourceEntity querySameVideo(Long faceSampleId, Long deviceId);
int hasRelationTo(Long memberId, Long sourceId, int type); int hasRelationTo(Long memberId, Long sourceId, int type);
List<SourceEntity> listVideoByFaceRelation(Long faceId);
} }

View File

@ -1,5 +1,6 @@
package com.ycwl.basic.mapper; package com.ycwl.basic.mapper;
import com.ycwl.basic.model.pc.task.entity.TaskEntity;
import com.ycwl.basic.model.pc.video.entity.MemberVideoEntity; 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.entity.VideoEntity;
import com.ycwl.basic.model.pc.video.req.VideoReqQuery; import com.ycwl.basic.model.pc.video.req.VideoReqQuery;
@ -32,4 +33,14 @@ public interface VideoMapper {
List<VideoRespVO> queryByRelation(VideoReqQuery videoReqQuery); List<VideoRespVO> queryByRelation(VideoReqQuery videoReqQuery);
List<MemberVideoEntity> userFaceTemplateVideo(Long userId, Long faceId, Long templateId); List<MemberVideoEntity> userFaceTemplateVideo(Long userId, Long faceId, Long templateId);
List<TaskEntity> listTaskByFaceRelation(Long userId, Long faceId);
List<TaskEntity> listTaskByFaceTemplateRelation(Long userId, Long faceId, Long templateId);
List<TaskEntity> listTaskByScenicRelation(Long userId, Long scenicId);
MemberVideoEntity queryUserVideo(Long userId, Long videoId);
int updateRelationWhenTaskSuccess(Long taskId, Long videoId);
} }

View File

@ -5,6 +5,8 @@ import lombok.Data;
@Data @Data
public class VideoTaskStatusVO { public class VideoTaskStatusVO {
private Integer status; private Integer status;
private Long videoId;
private Long templateId;
private Long faceId; private Long faceId;
private Long scenicId; private Long scenicId;
} }

View File

@ -5,7 +5,10 @@ import lombok.Data;
@Data @Data
public class MemberVideoEntity { public class MemberVideoEntity {
private Long id; private Long id;
private Long scenicId;
private Long memberId; private Long memberId;
private Long faceId;
private Long templateId;
private Long taskId; private Long taskId;
private Long videoId; private Long videoId;
private Integer isBuy; private Integer isBuy;

View File

@ -56,8 +56,6 @@ public class VideoRespVO {
*/ */
@ApiModelProperty("视频链接") @ApiModelProperty("视频链接")
private String videoUrl; private String videoUrl;
@ApiModelProperty("是否购买 1是 0否")
private Integer isBuy;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime; private Date createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")

View File

@ -142,7 +142,7 @@ public class AppScenicServiceImpl implements AppScenicService {
List<MemberVideoEntity> memberVideoEntityList = videoMapper.userFaceTemplateVideo(worker.getUserId(), faceId, contentPageVO.getTemplateId()); List<MemberVideoEntity> memberVideoEntityList = videoMapper.userFaceTemplateVideo(worker.getUserId(), faceId, contentPageVO.getTemplateId());
if (!memberVideoEntityList.isEmpty()) { if (!memberVideoEntityList.isEmpty()) {
contentPageVO.setIsBuy(memberVideoEntityList.get(0).getIsBuy()); contentPageVO.setIsBuy(memberVideoEntityList.get(0).getIsBuy());
contentPageVO.setContentId(memberVideoEntityList.get(0).getId()); contentPageVO.setContentId(memberVideoEntityList.get(0).getVideoId());
} }
}); });
@ -181,7 +181,10 @@ public class AppScenicServiceImpl implements AppScenicService {
List<MemberVideoEntity> memberVideoEntityList = videoMapper.userFaceTemplateVideo(userId, faceId, contentPageVO.getTemplateId()); List<MemberVideoEntity> memberVideoEntityList = videoMapper.userFaceTemplateVideo(userId, faceId, contentPageVO.getTemplateId());
if (!memberVideoEntityList.isEmpty()) { if (!memberVideoEntityList.isEmpty()) {
contentPageVO.setIsBuy(memberVideoEntityList.get(0).getIsBuy()); contentPageVO.setIsBuy(memberVideoEntityList.get(0).getIsBuy());
contentPageVO.setContentId(memberVideoEntityList.get(0).getId()); contentPageVO.setContentId(memberVideoEntityList.get(0).getVideoId());
contentPageVO.setContentType(1);
} else {
contentPageVO.setContentType(0);
} }
}); });

View File

@ -9,8 +9,10 @@ import com.ycwl.basic.model.pc.face.resp.FaceRespVO;
import com.ycwl.basic.model.pc.scenic.resp.ScenicRespVO; import com.ycwl.basic.model.pc.scenic.resp.ScenicRespVO;
import com.ycwl.basic.model.pc.source.req.SourceReqQuery; import com.ycwl.basic.model.pc.source.req.SourceReqQuery;
import com.ycwl.basic.model.pc.source.resp.SourceRespVO; import com.ycwl.basic.model.pc.source.resp.SourceRespVO;
import com.ycwl.basic.model.pc.task.req.TaskReqQuery; import com.ycwl.basic.model.pc.task.entity.TaskEntity;
import com.ycwl.basic.model.pc.task.resp.TaskRespVO; import com.ycwl.basic.model.pc.task.resp.TaskRespVO;
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.req.VideoReqQuery; import com.ycwl.basic.model.pc.video.req.VideoReqQuery;
import com.ycwl.basic.model.pc.video.resp.VideoRespVO; import com.ycwl.basic.model.pc.video.resp.VideoRespVO;
import com.ycwl.basic.service.mobile.GoodsService; import com.ycwl.basic.service.mobile.GoodsService;
@ -25,6 +27,7 @@ import java.math.RoundingMode;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -61,7 +64,7 @@ public class GoodsServiceImpl implements GoodsService {
goodsPageVO.setGoodsName(videoRespVO.getTemplateName()); goodsPageVO.setGoodsName(videoRespVO.getTemplateName());
goodsPageVO.setScenicId(videoRespVO.getScenicId()); goodsPageVO.setScenicId(videoRespVO.getScenicId());
goodsPageVO.setScenicName(videoRespVO.getScenicName()); goodsPageVO.setScenicName(videoRespVO.getScenicName());
goodsPageVO.setGoodsType(1); goodsPageVO.setGoodsType(0);
goodsPageVO.setGoodsId(videoRespVO.getId()); goodsPageVO.setGoodsId(videoRespVO.getId());
goodsPageVO.setTemplateName(videoRespVO.getTemplateName()); goodsPageVO.setTemplateName(videoRespVO.getTemplateName());
goodsPageVO.setTemplateCoverUrl(videoRespVO.getTemplateCoverUrl()); goodsPageVO.setTemplateCoverUrl(videoRespVO.getTemplateCoverUrl());
@ -79,10 +82,10 @@ public class GoodsServiceImpl implements GoodsService {
GoodsPageVO goodsPageVO = new GoodsPageVO(); GoodsPageVO goodsPageVO = new GoodsPageVO();
if (type == 1) { if (type == 1) {
goodsPageVO.setGoodsName("原片集"); goodsPageVO.setGoodsName("原片集");
goodsPageVO.setGoodsType(2); goodsPageVO.setGoodsType(1);
} else { } else {
goodsPageVO.setGoodsName("照片集"); goodsPageVO.setGoodsName("照片集");
goodsPageVO.setGoodsType(3); goodsPageVO.setGoodsType(2);
} }
goodsPageVO.setScenicId(query.getScenicId()); goodsPageVO.setScenicId(query.getScenicId());
goodsList.add(goodsPageVO); goodsList.add(goodsPageVO);
@ -126,7 +129,7 @@ public class GoodsServiceImpl implements GoodsService {
goodsDetailVO.setScenicName(sourceRespVO.getScenicName()); goodsDetailVO.setScenicName(sourceRespVO.getScenicName());
goodsDetailVO.setLongitude(sourceRespVO.getLongitude()); goodsDetailVO.setLongitude(sourceRespVO.getLongitude());
goodsDetailVO.setLatitude(sourceRespVO.getLatitude()); goodsDetailVO.setLatitude(sourceRespVO.getLatitude());
goodsDetailVO.setGoodsType(2); goodsDetailVO.setGoodsType(sourceType);
goodsDetailVO.setSourceType(sourceType); goodsDetailVO.setSourceType(sourceType);
goodsDetailVO.setGoodsId(sourceRespVO.getId()); goodsDetailVO.setGoodsId(sourceRespVO.getId());
goodsDetailVO.setVideoUrl(sourceRespVO.getVideoUrl()); goodsDetailVO.setVideoUrl(sourceRespVO.getVideoUrl());
@ -144,20 +147,20 @@ public class GoodsServiceImpl implements GoodsService {
public ApiResponse<BigDecimal> queryPrice(GoodsPriceQueryReq queryPriceData) { public ApiResponse<BigDecimal> queryPrice(GoodsPriceQueryReq queryPriceData) {
Integer goodsType = queryPriceData.getGoodsType(); Integer goodsType = queryPriceData.getGoodsType();
if(goodsType==1){//成片vlog if(goodsType==0){//成片vlog
//成片的价格就是成片所用template的价格 //成片的价格就是成片所用template的价格
Long videoId = queryPriceData.getGoodsId(); Long videoId = queryPriceData.getGoodsId();
VideoRespVO videoRespVO = videoMapper.getById(videoId); VideoRespVO videoRespVO = videoMapper.getById(videoId);
if(videoRespVO==null){ if(videoRespVO==null){
return ApiResponse.fail("该vlog不存在或已失效"); return ApiResponse.fail("该vlog不存在或已失效");
} }
BigDecimal tmplatePrice = videoRespVO.getTemplatePrice(); BigDecimal templatePrice = videoRespVO.getTemplatePrice();
if(tmplatePrice==null){ if(templatePrice==null){
return ApiResponse.fail("该vlog使用的模板价格或状态异常请联系管理员"); return ApiResponse.fail("该vlog使用的模板价格或状态异常请联系管理员");
} }
return ApiResponse.success(tmplatePrice); return ApiResponse.success(templatePrice);
}else if(goodsType==2){//原素材 }else if(goodsType==1 || goodsType == 2){//原素材
//原素材的价格就是原素材对应景区定的价格 //原素材的价格就是原素材对应景区定的价格
Long scenicId = queryPriceData.getScenicId(); Long scenicId = queryPriceData.getScenicId();
ScenicRespVO scenicRespVO = scenicMapper.getById(scenicId); ScenicRespVO scenicRespVO = scenicMapper.getById(scenicId);
@ -174,27 +177,35 @@ public class GoodsServiceImpl implements GoodsService {
} }
@Override @Override
public ApiResponse<VideoGoodsDetailVO> videoGoodsDetail(Long goodsId) { public ApiResponse<VideoGoodsDetailVO> videoGoodsDetail(Long userId, Long videoId) {
MemberVideoEntity entity = videoMapper.queryUserVideo(userId, videoId);
if (entity == null) {
return ApiResponse.fail("该视频不属于您");
}
VideoGoodsDetailVO goodsDetailVO = new VideoGoodsDetailVO(); VideoGoodsDetailVO goodsDetailVO = new VideoGoodsDetailVO();
VideoRespVO videoRespVO = videoMapper.getById(goodsId); VideoRespVO videoRespVO = videoMapper.getById(videoId);
if(videoRespVO==null){ if(videoRespVO==null){
return ApiResponse.fail("该vlog不存在或已失效"); return ApiResponse.fail("该vlog不存在或已失效");
} }
goodsDetailVO.setGoodsName(videoRespVO.getTemplateName()); goodsDetailVO.setGoodsName(videoRespVO.getTemplateName());
goodsDetailVO.setScenicId(videoRespVO.getScenicId()); goodsDetailVO.setScenicId(videoRespVO.getScenicId());
goodsDetailVO.setScenicName(videoRespVO.getScenicName()); goodsDetailVO.setScenicName(videoRespVO.getScenicName());
goodsDetailVO.setGoodsType(1); goodsDetailVO.setGoodsType(0);
goodsDetailVO.setGoodsId(videoRespVO.getId()); goodsDetailVO.setGoodsId(videoRespVO.getId());
goodsDetailVO.setVideoUrl(videoRespVO.getVideoUrl()); goodsDetailVO.setVideoUrl(videoRespVO.getVideoUrl());
goodsDetailVO.setTemplateCoverUrl(videoRespVO.getTemplateCoverUrl()); goodsDetailVO.setTemplateCoverUrl(videoRespVO.getTemplateCoverUrl());
goodsDetailVO.setCreateTime(videoRespVO.getCreateTime()); goodsDetailVO.setCreateTime(videoRespVO.getCreateTime());
if (entity.getIsBuy() == 1) {
goodsDetailVO.setIsBuy(1);
} else {
goodsDetailVO.setIsBuy(0);
BigDecimal templatePrice = videoRespVO.getTemplatePrice(); BigDecimal templatePrice = videoRespVO.getTemplatePrice();
BigDecimal slashPrice = videoRespVO.getSlashPrice(); BigDecimal slashPrice = videoRespVO.getSlashPrice();
// 使用DecimalFormat格式化输出 // 使用DecimalFormat格式化输出
DecimalFormat df = new DecimalFormat("0.00"); DecimalFormat df = new DecimalFormat("0.00");
goodsDetailVO.setPrice(templatePrice==null?"":df.format(templatePrice.setScale(2, RoundingMode.HALF_UP))); goodsDetailVO.setPrice(templatePrice==null?"":df.format(templatePrice.setScale(2, RoundingMode.HALF_UP)));
goodsDetailVO.setSlashPrice(slashPrice==null?null:df.format(slashPrice.setScale(2, RoundingMode.HALF_UP))); goodsDetailVO.setSlashPrice(slashPrice==null?null:df.format(slashPrice.setScale(2, RoundingMode.HALF_UP)));
goodsDetailVO.setIsBuy(videoRespVO.getIsBuy()); }
TaskRespVO taskRespVO = taskMapper.getById(videoRespVO.getTaskId()); TaskRespVO taskRespVO = taskMapper.getById(videoRespVO.getTaskId());
JSONObject paramJson = JSON.parseObject(taskRespVO.getTaskParams()); JSONObject paramJson = JSON.parseObject(taskRespVO.getTaskParams());
long deviceCount; long deviceCount;
@ -204,7 +215,7 @@ public class GoodsServiceImpl implements GoodsService {
deviceCount = paramJson.keySet().stream().filter(StringUtils::isNumeric).count(); deviceCount = paramJson.keySet().stream().filter(StringUtils::isNumeric).count();
} }
goodsDetailVO.setLensNum((int) deviceCount); goodsDetailVO.setLensNum((int) deviceCount);
goodsDetailVO.setFaceId(taskRespVO.getFaceId()); goodsDetailVO.setFaceId(entity.getFaceId());
return ApiResponse.success(goodsDetailVO); return ApiResponse.success(goodsDetailVO);
} }
@ -216,27 +227,28 @@ public class GoodsServiceImpl implements GoodsService {
*/ */
@Override @Override
public ApiResponse<VideoTaskStatusVO> getTaskStatusByFaceId(Long userId, Long faceId) { public ApiResponse<VideoTaskStatusVO> getTaskStatusByFaceId(Long userId, Long faceId) {
TaskReqQuery taskReqQuery = new TaskReqQuery(); List<TaskEntity> taskList = videoMapper.listTaskByFaceRelation(userId, faceId);
taskReqQuery.setMemberId(userId);
taskReqQuery.setFaceId(faceId);
VideoTaskStatusVO response = new VideoTaskStatusVO(); VideoTaskStatusVO response = new VideoTaskStatusVO();
List<TaskRespVO> list=taskMapper.list(taskReqQuery); response.setFaceId(faceId);
if(list.isEmpty()){//没有任务 if (taskList.isEmpty()) {
response.setStatus(0); response.setStatus(0);
return ApiResponse.success(response); return ApiResponse.success(response);
} }
Optional<TaskRespVO> first = list.stream().filter(item -> item.getStatus() == 0 || item.getStatus() == 2).findFirst(); long nullTask = taskList.stream().filter(Objects::isNull).count();
if (first.isPresent()) { if (nullTask > 0) {
response.setStatus(1); response.setStatus(0);
response.setScenicId(first.get().getScenicId());
response.setFaceId(first.get().getFaceId());
return ApiResponse.success(response);
} else {
response.setStatus(2);
response.setScenicId(list.get(0).getScenicId());
response.setFaceId(list.get(0).getFaceId());
return ApiResponse.success(response); return ApiResponse.success(response);
} }
Optional<TaskEntity> taskEntity = taskList.stream().filter(task -> 1 == task.getStatus()).findFirst();
if (taskEntity.isPresent()) {
response.setTemplateId(taskEntity.get().getTemplateId());
VideoEntity video = videoMapper.findByTaskId(taskEntity.get().getId());
response.setVideoId(video.getId());
response.setStatus(1);
} else {
response.setStatus(2);
}
return ApiResponse.success(response);
} }
@Override @Override
@ -246,48 +258,52 @@ public class GoodsServiceImpl implements GoodsService {
} }
@Override @Override
public ApiResponse<Integer> getTemplateTaskStatus(Long userId, Long templateId) { public ApiResponse<VideoTaskStatusVO> getTemplateTaskStatus(Long userId, Long faceId, Long templateId) {
TaskReqQuery taskReqQuery = new TaskReqQuery(); List<TaskEntity> taskList = videoMapper.listTaskByFaceTemplateRelation(userId, faceId, templateId);
taskReqQuery.setMemberId(userId); VideoTaskStatusVO response = new VideoTaskStatusVO();
taskReqQuery.setTemplateId(templateId); response.setFaceId(faceId);
int allCount=taskMapper.countTask(taskReqQuery); if (taskList.isEmpty()) {
if(allCount==0){//没有任务 response.setStatus(0);
return ApiResponse.success(0); return ApiResponse.success(response);
} }
taskReqQuery.setStatus(2); Optional<TaskEntity> taskEntity = taskList.stream().filter(task -> task.getStatus() == 1).findFirst();
int count=taskMapper.countTask(taskReqQuery); if (taskEntity.isPresent()) {
if(count>0){ response.setTemplateId(taskEntity.get().getTemplateId());
return ApiResponse.success(1); VideoEntity video = videoMapper.findByTaskId(taskEntity.get().getId());
}else { response.setVideoId(video.getId());
return ApiResponse.success(2); response.setStatus(1);
} else {
response.setStatus(2);
} }
return ApiResponse.success(response);
} }
@Override @Override
public ApiResponse<VideoTaskStatusVO> getTaskStatusByScenicId(Long userId, Long scenicId) { public ApiResponse<VideoTaskStatusVO> getTaskStatusByScenicId(Long userId, Long scenicId) {
TaskReqQuery taskReqQuery = new TaskReqQuery(); FaceRespVO faceVO = faceMapper.getByMemberId(userId, scenicId);
taskReqQuery.setMemberId(userId);
taskReqQuery.setScenicId(scenicId);
int allCount=taskMapper.countTask(taskReqQuery);
VideoTaskStatusVO response = new VideoTaskStatusVO(); VideoTaskStatusVO response = new VideoTaskStatusVO();
if(allCount==0){//没有任务 response.setScenicId(scenicId);
if (faceVO == null) {
// 从来没露脸
response.setStatus(-2);
return ApiResponse.success(response);
}
response.setFaceId(faceVO.getId());
List<TaskEntity> taskList = videoMapper.listTaskByScenicRelation(userId, scenicId);
if (taskList.isEmpty()) {
response.setStatus(0); response.setStatus(0);
return ApiResponse.success(response); return ApiResponse.success(response);
} }
List<TaskRespVO> list=taskMapper.list(taskReqQuery); Optional<TaskEntity> taskEntity = taskList.stream().filter(task -> task.getStatus() == 1).findFirst();
// 未完成是等于0或2 if (taskEntity.isPresent()) {
Optional<TaskRespVO> first = list.stream().filter(item -> item.getStatus() == 0 || item.getStatus() == 2).findFirst(); response.setTemplateId(taskEntity.get().getTemplateId());
if (first.isPresent()) { VideoEntity video = videoMapper.findByTaskId(taskEntity.get().getId());
response.setVideoId(video.getId());
response.setStatus(1); response.setStatus(1);
response.setScenicId(first.get().getScenicId());
response.setFaceId(first.get().getFaceId());
return ApiResponse.success(response);
} else { } else {
response.setStatus(2); response.setStatus(2);
response.setScenicId(list.get(0).getScenicId());
response.setFaceId(list.get(0).getFaceId());
return ApiResponse.success(response);
} }
return ApiResponse.success(response);
} }
} }

View File

@ -212,7 +212,7 @@ public class WxPayServiceImpl implements WxPayService {
List<OrderItemEntity> orderItemList = orderMapper.listOrderItemByOrderId(orderId); List<OrderItemEntity> orderItemList = orderMapper.listOrderItemByOrderId(orderId);
orderItemList.forEach(orderItemVO -> { orderItemList.forEach(orderItemVO -> {
switch (orderItemVO.getGoodsType()) { switch (orderItemVO.getGoodsType()) {
case 1: // 成片 case 0: // 成片
MemberVideoEntity memberVideoEntity = new MemberVideoEntity(); MemberVideoEntity memberVideoEntity = new MemberVideoEntity();
memberVideoEntity.setMemberId(byId.getMemberId()); memberVideoEntity.setMemberId(byId.getMemberId());
memberVideoEntity.setVideoId(orderItemVO.getGoodsId()); memberVideoEntity.setVideoId(orderItemVO.getGoodsId());
@ -220,6 +220,7 @@ public class WxPayServiceImpl implements WxPayService {
memberVideoEntity.setOrderId(orderId); memberVideoEntity.setOrderId(orderId);
videoMapper.updateRelation(memberVideoEntity); videoMapper.updateRelation(memberVideoEntity);
break; break;
case 1: // 源视频
case 2: // 源素材 case 2: // 源素材
MemberSourceEntity memberSourceEntity = new MemberSourceEntity(); MemberSourceEntity memberSourceEntity = new MemberSourceEntity();
memberSourceEntity.setMemberId(byId.getMemberId()); memberSourceEntity.setMemberId(byId.getMemberId());
@ -252,12 +253,13 @@ public class WxPayServiceImpl implements WxPayService {
StatisticsRecordAddReq statisticsRecordAddReq = new StatisticsRecordAddReq(); StatisticsRecordAddReq statisticsRecordAddReq = new StatisticsRecordAddReq();
statisticsRecordAddReq.setMemberId(orderData.getMemberId()); statisticsRecordAddReq.setMemberId(orderData.getMemberId());
// TODO
//如果订单在商品创建后30分钟内支付则为现场支付否则为事后支付 //如果订单在商品创建后30分钟内支付则为现场支付否则为事后支付
if(DateUtils.addDateMinute(createTime,30).compareTo(payAt)>0){// // if(DateUtils.addDateMinute(createTime,30).compareTo(payAt)>0){//
statisticsRecordAddReq.setType(StatisticEnum.ON_SITE_PAYMENT.code); statisticsRecordAddReq.setType(StatisticEnum.ON_SITE_PAYMENT.code);
}else { // }else {
statisticsRecordAddReq.setType(StatisticEnum.POST_PAYMENT.code); // statisticsRecordAddReq.setType(StatisticEnum.POST_PAYMENT.code);
} // }
statisticsRecordAddReq.setScenicId(orderData.getScenicId()); statisticsRecordAddReq.setScenicId(orderData.getScenicId());
statisticsRecordAddReq.setMorphId(orderId); statisticsRecordAddReq.setMorphId(orderId);
statisticsMapper.addStatisticsRecord(statisticsRecordAddReq); statisticsMapper.addStatisticsRecord(statisticsRecordAddReq);

View File

@ -187,11 +187,9 @@ public class FaceServiceImpl implements FaceService {
//新增人脸 //新增人脸
faceEntity.setId(newFaceId); faceEntity.setId(newFaceId);
faceMapper.add(faceEntity); faceMapper.add(faceEntity);
taskTaskService.autoCreateTaskByFaceId(faceEntity.getId());
} else { } else {
//2更新人脸 //2更新人脸
faceMapper.update(faceEntity); faceMapper.update(faceEntity);
taskTaskService.autoCreateTaskByFaceId(faceEntity.getId());
} }
List<MemberSourceEntity> memberSourceEntityList = sourceEntities.stream().map(sourceEntity -> { List<MemberSourceEntity> memberSourceEntityList = sourceEntities.stream().map(sourceEntity -> {
MemberSourceEntity memberSourceEntity = new MemberSourceEntity(); MemberSourceEntity memberSourceEntity = new MemberSourceEntity();
@ -213,6 +211,7 @@ public class FaceServiceImpl implements FaceService {
task.createTime = sampleRespVO.getCreateAt(); task.createTime = sampleRespVO.getCreateAt();
VideoPieceGetter.addTask(task); VideoPieceGetter.addTask(task);
} }
taskTaskService.autoCreateTaskByFaceId(faceEntity.getId());
StatisticsRecordAddReq statisticsRecordAddReq = new StatisticsRecordAddReq(); StatisticsRecordAddReq statisticsRecordAddReq = new StatisticsRecordAddReq();
statisticsRecordAddReq.setMemberId(userId); statisticsRecordAddReq.setMemberId(userId);
statisticsRecordAddReq.setType(StatisticEnum.UPLOAD_FACE.code); statisticsRecordAddReq.setType(StatisticEnum.UPLOAD_FACE.code);

View File

@ -20,6 +20,7 @@ import com.ycwl.basic.model.pc.task.resp.TaskRespVO;
import com.ycwl.basic.model.pc.template.entity.TemplateConfigEntity; import com.ycwl.basic.model.pc.template.entity.TemplateConfigEntity;
import com.ycwl.basic.model.pc.template.entity.TemplateEntity; import com.ycwl.basic.model.pc.template.entity.TemplateEntity;
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.model.pc.video.entity.VideoEntity; import com.ycwl.basic.model.pc.video.entity.VideoEntity;
import com.ycwl.basic.model.task.req.ClientStatusReqVo; import com.ycwl.basic.model.task.req.ClientStatusReqVo;
import com.ycwl.basic.model.task.req.TaskReqVo; import com.ycwl.basic.model.task.req.TaskReqVo;
@ -43,7 +44,6 @@ import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -190,8 +190,8 @@ public class TaskTaskServiceImpl implements TaskService {
} }
@Override @Override
public void autoCreateTaskByFaceId(Long id) { public void autoCreateTaskByFaceId(Long faceId) {
FaceRespVO faceRespVO = faceMapper.getById(id); FaceRespVO faceRespVO = faceMapper.getById(faceId);
if (faceRespVO == null) { if (faceRespVO == null) {
return; return;
} }
@ -206,19 +206,19 @@ public class TaskTaskServiceImpl implements TaskService {
if (templateList == null || templateList.isEmpty()) { if (templateList == null || templateList.isEmpty()) {
return; return;
} }
TaskEntity faceAutomaticTask = taskMapper.getFaceAutomaticTask(id); TaskEntity faceAutomaticTask = taskMapper.getFaceAutomaticTask(faceId);
if (faceAutomaticTask != null) { if (faceAutomaticTask != null) {
return; return;
} }
autoCreateTaskByFaceIdAndTempalteId(id, templateList.get(0).getId(), 1); createTaskByFaceIdAndTempalteId(faceId, templateList.get(0).getId(), 1);
} }
@Override @Override
public void autoCreateTaskByFaceIdAndTempalteId(Long faceId, Long templateId) { public void createTaskByFaceIdAndTempalteId(Long faceId, Long templateId) {
autoCreateTaskByFaceIdAndTempalteId(faceId, templateId, 0); createTaskByFaceIdAndTempalteId(faceId, templateId, 0);
} }
@Override @Override
public void autoCreateTaskByFaceIdAndTempalteId(Long faceId, Long templateId, int automatic) { public void createTaskByFaceIdAndTempalteId(Long faceId, Long templateId, int automatic) {
FaceRespVO faceRespVO = faceMapper.getById(faceId); FaceRespVO faceRespVO = faceMapper.getById(faceId);
List<FaceSampleRespVO> faceSampleList = faceSampleMapper.listByIds(Arrays.stream(faceRespVO.getMatchSampleIds().split(",")).map(Long::valueOf).collect(Collectors.toList())); List<FaceSampleRespVO> faceSampleList = faceSampleMapper.listByIds(Arrays.stream(faceRespVO.getMatchSampleIds().split(",")).map(Long::valueOf).collect(Collectors.toList()));
if (faceSampleList.isEmpty()) { if (faceSampleList.isEmpty()) {
@ -237,45 +237,56 @@ public class TaskTaskServiceImpl implements TaskService {
return; return;
} }
} }
Thread taskThread = new Thread(() -> { faceSampleList.stream().map(sample -> {
List<SourceEntity> vSourceList = sourceMapper.listVideoBySampleIds(faceSampleList.stream().map(FaceSampleRespVO::getId).collect(Collectors.toList()));
List<VideoPieceGetter.Task> tasks = faceSampleList.stream().map(sample -> {
Optional<SourceEntity> optional = vSourceList.stream().filter(video -> video.getFaceSampleId().equals(sample.getId())).findFirst();
if (optional.isPresent()) {
return null;
}
VideoPieceGetter.Task task = new VideoPieceGetter.Task(); VideoPieceGetter.Task task = new VideoPieceGetter.Task();
task.setFaceSampleId(sample.getId()); task.setFaceSampleId(sample.getId());
task.setMemberId(faceRespVO.getMemberId()); task.setMemberId(faceRespVO.getMemberId());
task.setCreateTime(sample.getCreateAt()); task.setCreateTime(sample.getCreateAt());
return task; return task;
}).filter(Objects::nonNull).collect(Collectors.toList()); }).forEach(VideoPieceGetter::addTask);
VideoPieceGetter.Task task = new VideoPieceGetter.Task(); VideoPieceGetter.Task task = new VideoPieceGetter.Task();
task.setType("callback"); task.type = "callback";
task.setCallback(() -> { task.callback = () -> {
List<SourceEntity> videoSourceList = sourceMapper.listVideoBySampleIds(faceSampleList.stream().map(FaceSampleRespVO::getId).collect(Collectors.toList())); List<SourceEntity> videoSourceList = sourceMapper.listVideoByFaceRelation(faceId);
Map<String, List<SourceEntity>> sourcesMap = videoSourceList.stream() Map<String, List<SourceEntity>> sourcesMap = videoSourceList.stream()
.peek(item -> item.setUrl(item.getVideoUrl())) .peek(item -> item.setUrl(item.getVideoUrl()))
.collect(Collectors.groupingBy(item -> item.getDeviceId().toString())); .collect(Collectors.groupingBy(item -> item.getDeviceId().toString()));
TaskReqQuery taskReqQuery = new TaskReqQuery();
taskReqQuery.setFaceId(faceId);
taskReqQuery.setTemplateId(templateId);
taskReqQuery.setTaskParams(JSON.toJSONString(sourcesMap));
List<TaskRespVO> list = taskMapper.list(taskReqQuery);
MemberVideoEntity memberVideoEntity = new MemberVideoEntity();
memberVideoEntity.setMemberId(faceRespVO.getMemberId());
memberVideoEntity.setScenicId(faceRespVO.getScenicId());
memberVideoEntity.setFaceId(faceId);
memberVideoEntity.setTemplateId(templateId);
memberVideoEntity.setIsBuy(0);
if (list.isEmpty()) {
TaskEntity taskEntity = new TaskEntity(); TaskEntity taskEntity = new TaskEntity();
taskEntity.setId(SnowFlakeUtil.getLongId()); taskEntity.setId(SnowFlakeUtil.getLongId());
taskEntity.setScenicId(faceRespVO.getScenicId()); taskEntity.setScenicId(faceRespVO.getScenicId());
taskEntity.setFaceId(faceId); taskEntity.setFaceId(faceId);
taskEntity.setMemberId(faceRespVO.getMemberId()); taskEntity.setMemberId(faceRespVO.getMemberId());
taskEntity.setTemplateId(templateId); taskEntity.setTemplateId(templateId);
taskEntity.setTaskParams(JSON.toJSONString(sourcesMap));
taskEntity.setStatus(0); taskEntity.setStatus(0);
taskEntity.setAutomatic(automatic); taskEntity.setAutomatic(automatic);
taskEntity.setTaskParams(JSON.toJSONString(sourcesMap));
taskMapper.add(taskEntity); taskMapper.add(taskEntity);
}); memberVideoEntity.setTaskId(taskEntity.getId());
if (!tasks.isEmpty()) { } else{
tasks.forEach(VideoPieceGetter::addTask); memberVideoEntity.setTaskId(list.get(0).getId());
VideoPieceGetter.addTask(task); VideoEntity video = videoMapper.findByTaskId(list.get(0).getId());
} else { if (video != null) {
task.getCallback().onInvoke(); memberVideoEntity.setVideoId(video.getId());
} }
}); }
taskThread.start(); videoMapper.addRelation(memberVideoEntity);
};
VideoPieceGetter.addTask(task);
} }
@Override @Override
@ -297,6 +308,7 @@ public class TaskTaskServiceImpl implements TaskService {
if (video != null) { if (video != null) {
video.setVideoUrl(task.getVideoUrl()); video.setVideoUrl(task.getVideoUrl());
videoMapper.update(video); videoMapper.update(video);
videoMapper.updateRelationWhenTaskSuccess(taskId, video.getId());
} else { } else {
video = new VideoEntity(); video = new VideoEntity();
video.setId(SnowFlakeUtil.getLongId()); video.setId(SnowFlakeUtil.getLongId());
@ -308,6 +320,7 @@ public class TaskTaskServiceImpl implements TaskService {
video.setVideoUrl(task.getVideoUrl()); video.setVideoUrl(task.getVideoUrl());
video.setCreateTime(new Date()); video.setCreateTime(new Date());
videoMapper.add(video); videoMapper.add(video);
videoMapper.updateRelationWhenTaskSuccess(taskId, video.getId());
} }
} }

View File

@ -0,0 +1,31 @@
package com.ycwl.basic.service.impl.task;
import com.alibaba.fastjson.JSON;
import com.ycwl.basic.mapper.TemplateMapper;
import com.ycwl.basic.model.pc.template.entity.TemplateConfigEntity;
import com.ycwl.basic.service.task.TaskTemplateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
@Service
public class TaskTemplateServiceImpl implements TaskTemplateService {
@Autowired
private RedisTemplate<String, String> redisTemplate;
@Autowired
private TemplateMapper templateMapper;
private static final String TEMPLATE_KEY = "template:";
private static final String TEMPLATE_CONFIG_KEY = "template:config:";
private TemplateConfigEntity getTemplateConfig(Long templateId) {
if (redisTemplate.hasKey(TEMPLATE_CONFIG_KEY + templateId)) {
return JSON.parseObject(redisTemplate.opsForValue().get(TEMPLATE_CONFIG_KEY + templateId), TemplateConfigEntity.class);
}
TemplateConfigEntity config = templateMapper.getConfig(templateId);
if (config != null) {
redisTemplate.opsForValue().set(TEMPLATE_CONFIG_KEY + templateId, JSON.toJSONString(config));
}
return config;
}
}

View File

@ -34,11 +34,11 @@ public interface GoodsService {
ApiResponse<BigDecimal> queryPrice(GoodsPriceQueryReq queryPriceData); ApiResponse<BigDecimal> queryPrice(GoodsPriceQueryReq queryPriceData);
/** /**
* * @param userId 商品vlogid
* @param goodsId 商品vlogid * @param videoId
* @return * @return
*/ */
ApiResponse<VideoGoodsDetailVO> videoGoodsDetail(Long goodsId); ApiResponse<VideoGoodsDetailVO> videoGoodsDetail(Long userId, Long videoId);
/** /**
* 查询当前用户的成片合成任务状态 * 查询当前用户的成片合成任务状态
@ -48,7 +48,7 @@ public interface GoodsService {
ApiResponse<VideoTaskStatusVO> getTaskStatusByFaceId(Long userId ,Long faceId); ApiResponse<VideoTaskStatusVO> getTaskStatusByFaceId(Long userId ,Long faceId);
ApiResponse<VideoTaskStatusVO> getAllTaskStatus(Long userId); ApiResponse<VideoTaskStatusVO> getAllTaskStatus(Long userId);
ApiResponse<Integer> getTemplateTaskStatus(Long userId, Long templateId); ApiResponse<VideoTaskStatusVO> getTemplateTaskStatus(Long userId, Long faceId, Long templateId);
ApiResponse<VideoTaskStatusVO> getTaskStatusByScenicId(Long userId, Long scenicId); ApiResponse<VideoTaskStatusVO> getTaskStatusByScenicId(Long userId, Long scenicId);
} }

View File

@ -11,9 +11,9 @@ public interface TaskService {
TemplateRespVO workerGetTemplate(Long templateId, WorkerAuthReqVo req); TemplateRespVO workerGetTemplate(Long templateId, WorkerAuthReqVo req);
void autoCreateTaskByFaceIdAndTempalteId(Long faceId, Long templateId); void createTaskByFaceIdAndTempalteId(Long faceId, Long templateId);
void autoCreateTaskByFaceIdAndTempalteId(Long faceId, Long templateId, int automatic); void createTaskByFaceIdAndTempalteId(Long faceId, Long templateId, int automatic);
void taskSuccess(Long taskId, WorkerAuthReqVo req); void taskSuccess(Long taskId, WorkerAuthReqVo req);

View File

@ -0,0 +1,4 @@
package com.ycwl.basic.service.task;
public interface TaskTemplateService {
}

View File

@ -52,7 +52,7 @@ public class DynamicTaskGenerator {
for (ScenicRespVO scenic : scenicList) { for (ScenicRespVO scenic : scenicList) {
log.info("定时任务执行,当前景区:{}", scenic.getName()); log.info("定时任务执行,当前景区:{}", scenic.getName());
ScenicConfigEntity scenicConfig = scenicMapper.getConfig(scenic.getId()); ScenicConfigEntity scenicConfig = scenicMapper.getConfig(scenic.getId());
if (scenicConfig == null || scenicConfig.getBookRoutine() == 2) { if (scenicConfig == null || 2 == scenicConfig.getBookRoutine()) {
log.info("当前景区{},未启用提前预约流程", scenic.getName()); log.info("当前景区{},未启用提前预约流程", scenic.getName());
continue; continue;
} }

View File

@ -156,6 +156,8 @@ public class VideoPieceGetter {
videoSource.setMemberId(task.getMemberId()); videoSource.setMemberId(task.getMemberId());
videoSource.setType(1); videoSource.setType(1);
videoSource.setIsBuy(0); videoSource.setIsBuy(0);
videoSource.setFaceId(task.getFaceId());
videoSource.setScenicId(faceSample.getScenicId());
videoSource.setSourceId(sourceEntity.getId()); videoSource.setSourceId(sourceEntity.getId());
if (imgSource != null) { if (imgSource != null) {
sourceEntity.setUrl(imgSource.getUrl()); sourceEntity.setUrl(imgSource.getUrl());

View File

@ -74,6 +74,8 @@
select id, scenic_id, member_id, face_url,score, match_sample_ids, first_match_rate, match_result, create_at, update_at select id, scenic_id, member_id, face_url,score, match_sample_ids, first_match_rate, match_result, create_at, update_at
from face from face
where member_id = #{userId} and scenic_id = #{scenicId} where member_id = #{userId} and scenic_id = #{scenicId}
order by id desc
limit 1
</select> </select>
<select id="listByScenicIdAndNotFinished" resultType="com.ycwl.basic.model.pc.face.resp.FaceRespVO"> <select id="listByScenicIdAndNotFinished" resultType="com.ycwl.basic.model.pc.face.resp.FaceRespVO">
select id, scenic_id, member_id, face_url,score, match_sample_ids, first_match_rate, match_result, create_at, update_at select id, scenic_id, member_id, face_url,score, match_sample_ids, first_match_rate, match_result, create_at, update_at

View File

@ -118,7 +118,7 @@
where where
ms.member_id = #{memberId} ms.member_id = #{memberId}
<if test="scenicId!= null">and ms.scenic_id = #{scenicId} </if> <if test="scenicId!= null">and ms.scenic_id = #{scenicId} </if>
<if test="isBuy!=null">and ms.is_buy = #{isBuy}</if> <if test="isBuy!=null">and ms.is_buy = #{isBuy} </if>
<if test="type!=null">and ms.type = #{type} </if> <if test="type!=null">and ms.type = #{type} </if>
<if test="faceId!=null">and ms.face_id = #{faceId} </if> <if test="faceId!=null">and ms.face_id = #{faceId} </if>
order by so.create_time desc order by so.create_time desc
@ -145,4 +145,12 @@
from member_source from member_source
where member_id = #{memberId} and source_id = #{sourceId} and type = #{type} where member_id = #{memberId} and source_id = #{sourceId} and type = #{type}
</select> </select>
<select id="listVideoByFaceRelation" resultType="com.ycwl.basic.model.pc.source.entity.SourceEntity">
select *
from source
where source.id in (
select source_id from member_source where face_id = #{faceId} and type = 1
)
order by create_time desc
</select>
</mapper> </mapper>

View File

@ -6,14 +6,14 @@
values (#{id}, #{scenicId}, #{memberId}, #{templateId}, #{taskId}, #{workerId}, #{videoUrl}) values (#{id}, #{scenicId}, #{memberId}, #{templateId}, #{taskId}, #{workerId}, #{videoUrl})
</insert> </insert>
<insert id="addRelation"> <insert id="addRelation">
replace member_video(member_id, task_id, video_id, is_buy, order_id) replace member_video(member_id, scenic_id, face_id, template_id, task_id, video_id, is_buy, order_id)
values (#{memberId}, #{taskId}, #{videoId}, #{isBuy}, #{orderId}) values (#{memberId}, #{scenicId}, #{faceId}, #{templateId}, #{taskId}, #{videoId}, #{isBuy}, #{orderId})
</insert> </insert>
<insert id="addRelations"> <insert id="addRelations">
replace member_video(member_id, task_id, video_id, is_buy, order_id) replace member_video(member_id, scenic_id, face_id, template_id, task_id, video_id, is_buy, order_id)
values values
<foreach collection="list" item="item" separator=","> <foreach collection="list" item="item" separator=",">
(#{item.memberId}, #{item.taskId}, #{item.videoId}, #{item.isBuy}, #{orderId}) (#{item.memberId}, #{item.scenicId}, #{item.faceId}, #{item.templateId}, #{item.taskId}, #{item.videoId}, #{item.isBuy}, #{orderId})
</foreach> </foreach>
</insert> </insert>
<update id="update"> <update id="update">
@ -37,6 +37,11 @@
</set> </set>
where member_id = #{memberId} and video_id = #{videoId} where member_id = #{memberId} and video_id = #{videoId}
</update> </update>
<update id="updateRelationWhenTaskSuccess">
update member_video
set video_id = #{videoId}
where task_id = #{taskId}
</update>
<delete id="deleteById"> <delete id="deleteById">
delete from video where id = #{id} delete from video where id = #{id}
</delete> </delete>
@ -69,7 +74,7 @@
</select> </select>
<select id="getById" resultType="com.ycwl.basic.model.pc.video.resp.VideoRespVO"> <select id="getById" resultType="com.ycwl.basic.model.pc.video.resp.VideoRespVO">
select v.id, v.scenic_id, member_id, template_id, task_id, worker_id, video_url, v.create_time, v.update_time, select v.id, v.scenic_id, member_id, template_id, task_id, worker_id, video_url, v.create_time, v.update_time,
t.name templateName,t.price templatePrice,v.is_buy isBuy, t.cover_url templateCoverUrl, t.slash_price slashPrice, t.name templateName,t.price templatePrice, t.cover_url templateCoverUrl, t.slash_price slashPrice,
s.name scenicName s.name scenicName
from video v from video v
left join scenic s on v.scenic_id = s.id left join scenic s on v.scenic_id = s.id
@ -85,11 +90,11 @@
from member_video mv from member_video mv
left join video v on mv.video_id = v.id left join video v on mv.video_id = v.id
left join scenic s on s.id = v.scenic_id left join scenic s on s.id = v.scenic_id
left join template t on v.template_id = t.id left join template t on mv.template_id = t.id
<where> <where>
<if test="scenicId!= null">and mv.scenic_id = #{scenicId} </if> <if test="scenicId!= null">and mv.scenic_id = #{scenicId} </if>
<if test="memberId!= null">and mv.member_id = #{memberId} </if> <if test="memberId!= null">and mv.member_id = #{memberId} </if>
<if test="templateId!= null">and template_id = #{templateId} </if> <if test="templateId!= null">and mv.template_id = #{templateId} </if>
<if test="taskId!=null">and mv.task_id = #{taskId} </if> <if test="taskId!=null">and mv.task_id = #{taskId} </if>
<if test="isBuy!=null">and mv.is_buy = #{isBuy}</if> <if test="isBuy!=null">and mv.is_buy = #{isBuy}</if>
<if test="startTime!= null">and v.create_time &gt;= #{startTime} </if> <if test="startTime!= null">and v.create_time &gt;= #{startTime} </if>
@ -105,4 +110,28 @@
<select id="userFaceTemplateVideo" resultType="com.ycwl.basic.model.pc.video.entity.MemberVideoEntity"> <select id="userFaceTemplateVideo" resultType="com.ycwl.basic.model.pc.video.entity.MemberVideoEntity">
select * from member_video where member_id = #{userId} and face_id = #{faceId} and template_id = #{templateId} order by id desc select * from member_video where member_id = #{userId} and face_id = #{faceId} and template_id = #{templateId} order by id desc
</select> </select>
<select id="listTaskByFaceRelation" resultType="com.ycwl.basic.model.pc.task.entity.TaskEntity">
select t.*
from member_video mv
left join task t on mv.task_id = t.id
where mv.member_id = #{userId} and mv.face_id = #{faceId}
</select>
<select id="listTaskByFaceTemplateRelation" resultType="com.ycwl.basic.model.pc.task.entity.TaskEntity">
select t.*
from member_video mv
left join task t on mv.task_id = t.id
where mv.member_id = #{userId} and mv.face_id = #{faceId} and mv.template_id = #{templateId}
</select>
<select id="listTaskByScenicRelation" resultType="com.ycwl.basic.model.pc.task.entity.TaskEntity">
select t.*
from member_video mv
left join task t on mv.task_id = t.id
where mv.member_id = #{userId} and t.scenic_id = #{scenicId}
</select>
<select id="queryUserVideo" resultType="com.ycwl.basic.model.pc.video.entity.MemberVideoEntity">
select *
from member_video
where member_id = #{userId} and video_id = #{videoId}
limit 1
</select>
</mapper> </mapper>