bug
This commit is contained in:
parent
cfd48861d5
commit
495210c6b1
@ -4,4 +4,5 @@ public class TaskConstant {
|
||||
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_WORKER_TASK_KEY_PFX="task:worker:task:";
|
||||
public static final String TASK_AUTOMATIC_KEY_PFX = "task:face:%s:template:%s:id";
|
||||
}
|
||||
|
@ -44,9 +44,10 @@ public class AppGoodsController {
|
||||
}
|
||||
|
||||
@ApiOperation("成片vlog商品详情")
|
||||
@GetMapping("/getVideoGoodsDetail/{goodId}")
|
||||
public ApiResponse<VideoGoodsDetailVO> videoGoodsDetail(@PathVariable("goodId") Long goodsId) {
|
||||
return goodsService.videoGoodsDetail(goodsId);
|
||||
@GetMapping("/getVideoGoodsDetail/{videoId}")
|
||||
public ApiResponse<VideoGoodsDetailVO> videoGoodsDetail(@PathVariable("videoId") Long videoId) {
|
||||
JwtInfo worker = JwtTokenUtil.getWorker();
|
||||
return goodsService.videoGoodsDetail(worker.getUserId(), videoId);
|
||||
}
|
||||
|
||||
@ApiOperation("查询价格")
|
||||
@ -80,20 +81,21 @@ public class AppGoodsController {
|
||||
|
||||
/**
|
||||
* 查询用户当前景区的具体模版视频合成任务状态
|
||||
*
|
||||
* @param templateId 模版id
|
||||
* @return 1 合成中 2 合成成功
|
||||
*/
|
||||
@ApiOperation("查询用户当前景区的具体模版视频合成任务状态 1 合成中 2 合成成功 ")
|
||||
@GetMapping("/task/template/{templateId}")
|
||||
public ApiResponse<Integer> getTemplateTaskStatus(@PathVariable("templateId") Long templateId) {
|
||||
@GetMapping("/task/face/{faceId}/template/{templateId}")
|
||||
public ApiResponse<VideoTaskStatusVO> getTemplateTaskStatus(@PathVariable("faceId") Long faceId, @PathVariable("templateId") Long templateId) {
|
||||
JwtInfo worker = JwtTokenUtil.getWorker();
|
||||
return goodsService.getTemplateTaskStatus(worker.getUserId(),templateId);
|
||||
return goodsService.getTemplateTaskStatus(worker.getUserId(), faceId, templateId);
|
||||
}
|
||||
|
||||
@PostMapping("/submitVideoTask")
|
||||
public ApiResponse<String> submitVideoTask(@RequestBody VideoTaskReq videoTaskReq) {
|
||||
JwtInfo worker = JwtTokenUtil.getWorker();
|
||||
taskService.autoCreateTaskByFaceIdAndTempalteId(videoTaskReq.getFaceId(),videoTaskReq.getTemplateId(),0);
|
||||
taskService.createTaskByFaceIdAndTempalteId(videoTaskReq.getFaceId(),videoTaskReq.getTemplateId(),0);
|
||||
return ApiResponse.success("成功");
|
||||
}
|
||||
}
|
||||
|
@ -59,10 +59,4 @@ public class TaskTaskController {
|
||||
taskService.taskFail(taskId, req);
|
||||
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");
|
||||
}
|
||||
}
|
||||
|
@ -59,4 +59,6 @@ public interface SourceMapper {
|
||||
SourceEntity querySameVideo(Long faceSampleId, Long deviceId);
|
||||
|
||||
int hasRelationTo(Long memberId, Long sourceId, int type);
|
||||
|
||||
List<SourceEntity> listVideoByFaceRelation(Long faceId);
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
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.VideoEntity;
|
||||
import com.ycwl.basic.model.pc.video.req.VideoReqQuery;
|
||||
@ -32,4 +33,14 @@ public interface VideoMapper {
|
||||
List<VideoRespVO> queryByRelation(VideoReqQuery videoReqQuery);
|
||||
|
||||
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);
|
||||
}
|
||||
|
@ -5,6 +5,8 @@ import lombok.Data;
|
||||
@Data
|
||||
public class VideoTaskStatusVO {
|
||||
private Integer status;
|
||||
private Long videoId;
|
||||
private Long templateId;
|
||||
private Long faceId;
|
||||
private Long scenicId;
|
||||
}
|
||||
|
@ -5,7 +5,10 @@ import lombok.Data;
|
||||
@Data
|
||||
public class MemberVideoEntity {
|
||||
private Long id;
|
||||
private Long scenicId;
|
||||
private Long memberId;
|
||||
private Long faceId;
|
||||
private Long templateId;
|
||||
private Long taskId;
|
||||
private Long videoId;
|
||||
private Integer isBuy;
|
||||
|
@ -56,8 +56,6 @@ public class VideoRespVO {
|
||||
*/
|
||||
@ApiModelProperty("视频链接")
|
||||
private String videoUrl;
|
||||
@ApiModelProperty("是否购买 1是 0否")
|
||||
private Integer isBuy;
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTime;
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
|
@ -142,7 +142,7 @@ public class AppScenicServiceImpl implements AppScenicService {
|
||||
List<MemberVideoEntity> memberVideoEntityList = videoMapper.userFaceTemplateVideo(worker.getUserId(), faceId, contentPageVO.getTemplateId());
|
||||
if (!memberVideoEntityList.isEmpty()) {
|
||||
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());
|
||||
if (!memberVideoEntityList.isEmpty()) {
|
||||
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);
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -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.source.req.SourceReqQuery;
|
||||
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.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.resp.VideoRespVO;
|
||||
import com.ycwl.basic.service.mobile.GoodsService;
|
||||
@ -25,6 +27,7 @@ import java.math.RoundingMode;
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@ -61,7 +64,7 @@ public class GoodsServiceImpl implements GoodsService {
|
||||
goodsPageVO.setGoodsName(videoRespVO.getTemplateName());
|
||||
goodsPageVO.setScenicId(videoRespVO.getScenicId());
|
||||
goodsPageVO.setScenicName(videoRespVO.getScenicName());
|
||||
goodsPageVO.setGoodsType(1);
|
||||
goodsPageVO.setGoodsType(0);
|
||||
goodsPageVO.setGoodsId(videoRespVO.getId());
|
||||
goodsPageVO.setTemplateName(videoRespVO.getTemplateName());
|
||||
goodsPageVO.setTemplateCoverUrl(videoRespVO.getTemplateCoverUrl());
|
||||
@ -79,10 +82,10 @@ public class GoodsServiceImpl implements GoodsService {
|
||||
GoodsPageVO goodsPageVO = new GoodsPageVO();
|
||||
if (type == 1) {
|
||||
goodsPageVO.setGoodsName("原片集");
|
||||
goodsPageVO.setGoodsType(2);
|
||||
goodsPageVO.setGoodsType(1);
|
||||
} else {
|
||||
goodsPageVO.setGoodsName("照片集");
|
||||
goodsPageVO.setGoodsType(3);
|
||||
goodsPageVO.setGoodsType(2);
|
||||
}
|
||||
goodsPageVO.setScenicId(query.getScenicId());
|
||||
goodsList.add(goodsPageVO);
|
||||
@ -126,7 +129,7 @@ public class GoodsServiceImpl implements GoodsService {
|
||||
goodsDetailVO.setScenicName(sourceRespVO.getScenicName());
|
||||
goodsDetailVO.setLongitude(sourceRespVO.getLongitude());
|
||||
goodsDetailVO.setLatitude(sourceRespVO.getLatitude());
|
||||
goodsDetailVO.setGoodsType(2);
|
||||
goodsDetailVO.setGoodsType(sourceType);
|
||||
goodsDetailVO.setSourceType(sourceType);
|
||||
goodsDetailVO.setGoodsId(sourceRespVO.getId());
|
||||
goodsDetailVO.setVideoUrl(sourceRespVO.getVideoUrl());
|
||||
@ -144,20 +147,20 @@ public class GoodsServiceImpl implements GoodsService {
|
||||
public ApiResponse<BigDecimal> queryPrice(GoodsPriceQueryReq queryPriceData) {
|
||||
Integer goodsType = queryPriceData.getGoodsType();
|
||||
|
||||
if(goodsType==1){//成片vlog
|
||||
if(goodsType==0){//成片vlog
|
||||
//成片的价格就是成片所用template的价格
|
||||
Long videoId = queryPriceData.getGoodsId();
|
||||
VideoRespVO videoRespVO = videoMapper.getById(videoId);
|
||||
if(videoRespVO==null){
|
||||
return ApiResponse.fail("该vlog不存在或已失效");
|
||||
}
|
||||
BigDecimal tmplatePrice = videoRespVO.getTemplatePrice();
|
||||
if(tmplatePrice==null){
|
||||
BigDecimal templatePrice = videoRespVO.getTemplatePrice();
|
||||
if(templatePrice==null){
|
||||
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();
|
||||
ScenicRespVO scenicRespVO = scenicMapper.getById(scenicId);
|
||||
@ -174,27 +177,35 @@ public class GoodsServiceImpl implements GoodsService {
|
||||
}
|
||||
|
||||
@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();
|
||||
VideoRespVO videoRespVO = videoMapper.getById(goodsId);
|
||||
VideoRespVO videoRespVO = videoMapper.getById(videoId);
|
||||
if(videoRespVO==null){
|
||||
return ApiResponse.fail("该vlog不存在或已失效");
|
||||
}
|
||||
goodsDetailVO.setGoodsName(videoRespVO.getTemplateName());
|
||||
goodsDetailVO.setScenicId(videoRespVO.getScenicId());
|
||||
goodsDetailVO.setScenicName(videoRespVO.getScenicName());
|
||||
goodsDetailVO.setGoodsType(1);
|
||||
goodsDetailVO.setGoodsType(0);
|
||||
goodsDetailVO.setGoodsId(videoRespVO.getId());
|
||||
goodsDetailVO.setVideoUrl(videoRespVO.getVideoUrl());
|
||||
goodsDetailVO.setTemplateCoverUrl(videoRespVO.getTemplateCoverUrl());
|
||||
goodsDetailVO.setCreateTime(videoRespVO.getCreateTime());
|
||||
if (entity.getIsBuy() == 1) {
|
||||
goodsDetailVO.setIsBuy(1);
|
||||
} else {
|
||||
goodsDetailVO.setIsBuy(0);
|
||||
BigDecimal templatePrice = videoRespVO.getTemplatePrice();
|
||||
BigDecimal slashPrice = videoRespVO.getSlashPrice();
|
||||
// 使用DecimalFormat格式化输出
|
||||
DecimalFormat df = new DecimalFormat("0.00");
|
||||
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.setIsBuy(videoRespVO.getIsBuy());
|
||||
}
|
||||
TaskRespVO taskRespVO = taskMapper.getById(videoRespVO.getTaskId());
|
||||
JSONObject paramJson = JSON.parseObject(taskRespVO.getTaskParams());
|
||||
long deviceCount;
|
||||
@ -204,7 +215,7 @@ public class GoodsServiceImpl implements GoodsService {
|
||||
deviceCount = paramJson.keySet().stream().filter(StringUtils::isNumeric).count();
|
||||
}
|
||||
goodsDetailVO.setLensNum((int) deviceCount);
|
||||
goodsDetailVO.setFaceId(taskRespVO.getFaceId());
|
||||
goodsDetailVO.setFaceId(entity.getFaceId());
|
||||
return ApiResponse.success(goodsDetailVO);
|
||||
}
|
||||
|
||||
@ -216,27 +227,28 @@ public class GoodsServiceImpl implements GoodsService {
|
||||
*/
|
||||
@Override
|
||||
public ApiResponse<VideoTaskStatusVO> getTaskStatusByFaceId(Long userId, Long faceId) {
|
||||
TaskReqQuery taskReqQuery = new TaskReqQuery();
|
||||
taskReqQuery.setMemberId(userId);
|
||||
taskReqQuery.setFaceId(faceId);
|
||||
List<TaskEntity> taskList = videoMapper.listTaskByFaceRelation(userId, faceId);
|
||||
VideoTaskStatusVO response = new VideoTaskStatusVO();
|
||||
List<TaskRespVO> list=taskMapper.list(taskReqQuery);
|
||||
if(list.isEmpty()){//没有任务
|
||||
response.setFaceId(faceId);
|
||||
if (taskList.isEmpty()) {
|
||||
response.setStatus(0);
|
||||
return ApiResponse.success(response);
|
||||
}
|
||||
Optional<TaskRespVO> first = list.stream().filter(item -> item.getStatus() == 0 || item.getStatus() == 2).findFirst();
|
||||
if (first.isPresent()) {
|
||||
response.setStatus(1);
|
||||
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());
|
||||
long nullTask = taskList.stream().filter(Objects::isNull).count();
|
||||
if (nullTask > 0) {
|
||||
response.setStatus(0);
|
||||
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
|
||||
@ -246,48 +258,52 @@ public class GoodsServiceImpl implements GoodsService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResponse<Integer> getTemplateTaskStatus(Long userId, Long templateId) {
|
||||
TaskReqQuery taskReqQuery = new TaskReqQuery();
|
||||
taskReqQuery.setMemberId(userId);
|
||||
taskReqQuery.setTemplateId(templateId);
|
||||
int allCount=taskMapper.countTask(taskReqQuery);
|
||||
if(allCount==0){//没有任务
|
||||
return ApiResponse.success(0);
|
||||
public ApiResponse<VideoTaskStatusVO> getTemplateTaskStatus(Long userId, Long faceId, Long templateId) {
|
||||
List<TaskEntity> taskList = videoMapper.listTaskByFaceTemplateRelation(userId, faceId, templateId);
|
||||
VideoTaskStatusVO response = new VideoTaskStatusVO();
|
||||
response.setFaceId(faceId);
|
||||
if (taskList.isEmpty()) {
|
||||
response.setStatus(0);
|
||||
return ApiResponse.success(response);
|
||||
}
|
||||
taskReqQuery.setStatus(2);
|
||||
int count=taskMapper.countTask(taskReqQuery);
|
||||
if(count>0){
|
||||
return ApiResponse.success(1);
|
||||
}else {
|
||||
return ApiResponse.success(2);
|
||||
Optional<TaskEntity> taskEntity = taskList.stream().filter(task -> task.getStatus() == 1).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
|
||||
public ApiResponse<VideoTaskStatusVO> getTaskStatusByScenicId(Long userId, Long scenicId) {
|
||||
TaskReqQuery taskReqQuery = new TaskReqQuery();
|
||||
taskReqQuery.setMemberId(userId);
|
||||
taskReqQuery.setScenicId(scenicId);
|
||||
int allCount=taskMapper.countTask(taskReqQuery);
|
||||
FaceRespVO faceVO = faceMapper.getByMemberId(userId, scenicId);
|
||||
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);
|
||||
return ApiResponse.success(response);
|
||||
}
|
||||
List<TaskRespVO> list=taskMapper.list(taskReqQuery);
|
||||
// 未完成是等于0或2
|
||||
Optional<TaskRespVO> first = list.stream().filter(item -> item.getStatus() == 0 || item.getStatus() == 2).findFirst();
|
||||
if (first.isPresent()) {
|
||||
Optional<TaskEntity> taskEntity = taskList.stream().filter(task -> task.getStatus() == 1).findFirst();
|
||||
if (taskEntity.isPresent()) {
|
||||
response.setTemplateId(taskEntity.get().getTemplateId());
|
||||
VideoEntity video = videoMapper.findByTaskId(taskEntity.get().getId());
|
||||
response.setVideoId(video.getId());
|
||||
response.setStatus(1);
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -212,7 +212,7 @@ public class WxPayServiceImpl implements WxPayService {
|
||||
List<OrderItemEntity> orderItemList = orderMapper.listOrderItemByOrderId(orderId);
|
||||
orderItemList.forEach(orderItemVO -> {
|
||||
switch (orderItemVO.getGoodsType()) {
|
||||
case 1: // 成片
|
||||
case 0: // 成片
|
||||
MemberVideoEntity memberVideoEntity = new MemberVideoEntity();
|
||||
memberVideoEntity.setMemberId(byId.getMemberId());
|
||||
memberVideoEntity.setVideoId(orderItemVO.getGoodsId());
|
||||
@ -220,6 +220,7 @@ public class WxPayServiceImpl implements WxPayService {
|
||||
memberVideoEntity.setOrderId(orderId);
|
||||
videoMapper.updateRelation(memberVideoEntity);
|
||||
break;
|
||||
case 1: // 源视频
|
||||
case 2: // 源素材
|
||||
MemberSourceEntity memberSourceEntity = new MemberSourceEntity();
|
||||
memberSourceEntity.setMemberId(byId.getMemberId());
|
||||
@ -252,12 +253,13 @@ public class WxPayServiceImpl implements WxPayService {
|
||||
|
||||
StatisticsRecordAddReq statisticsRecordAddReq = new StatisticsRecordAddReq();
|
||||
statisticsRecordAddReq.setMemberId(orderData.getMemberId());
|
||||
// TODO
|
||||
//如果订单在商品创建后30分钟内支付,则为现场支付,否则为事后支付
|
||||
if(DateUtils.addDateMinute(createTime,30).compareTo(payAt)>0){//
|
||||
// if(DateUtils.addDateMinute(createTime,30).compareTo(payAt)>0){//
|
||||
statisticsRecordAddReq.setType(StatisticEnum.ON_SITE_PAYMENT.code);
|
||||
}else {
|
||||
statisticsRecordAddReq.setType(StatisticEnum.POST_PAYMENT.code);
|
||||
}
|
||||
// }else {
|
||||
// statisticsRecordAddReq.setType(StatisticEnum.POST_PAYMENT.code);
|
||||
// }
|
||||
statisticsRecordAddReq.setScenicId(orderData.getScenicId());
|
||||
statisticsRecordAddReq.setMorphId(orderId);
|
||||
statisticsMapper.addStatisticsRecord(statisticsRecordAddReq);
|
||||
|
@ -187,11 +187,9 @@ public class FaceServiceImpl implements FaceService {
|
||||
//新增人脸
|
||||
faceEntity.setId(newFaceId);
|
||||
faceMapper.add(faceEntity);
|
||||
taskTaskService.autoCreateTaskByFaceId(faceEntity.getId());
|
||||
} else {
|
||||
//2、更新人脸
|
||||
faceMapper.update(faceEntity);
|
||||
taskTaskService.autoCreateTaskByFaceId(faceEntity.getId());
|
||||
}
|
||||
List<MemberSourceEntity> memberSourceEntityList = sourceEntities.stream().map(sourceEntity -> {
|
||||
MemberSourceEntity memberSourceEntity = new MemberSourceEntity();
|
||||
@ -213,6 +211,7 @@ public class FaceServiceImpl implements FaceService {
|
||||
task.createTime = sampleRespVO.getCreateAt();
|
||||
VideoPieceGetter.addTask(task);
|
||||
}
|
||||
taskTaskService.autoCreateTaskByFaceId(faceEntity.getId());
|
||||
StatisticsRecordAddReq statisticsRecordAddReq = new StatisticsRecordAddReq();
|
||||
statisticsRecordAddReq.setMemberId(userId);
|
||||
statisticsRecordAddReq.setType(StatisticEnum.UPLOAD_FACE.code);
|
||||
|
@ -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.TemplateEntity;
|
||||
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.task.req.ClientStatusReqVo;
|
||||
import com.ycwl.basic.model.task.req.TaskReqVo;
|
||||
@ -43,7 +44,6 @@ import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@ -190,8 +190,8 @@ public class TaskTaskServiceImpl implements TaskService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void autoCreateTaskByFaceId(Long id) {
|
||||
FaceRespVO faceRespVO = faceMapper.getById(id);
|
||||
public void autoCreateTaskByFaceId(Long faceId) {
|
||||
FaceRespVO faceRespVO = faceMapper.getById(faceId);
|
||||
if (faceRespVO == null) {
|
||||
return;
|
||||
}
|
||||
@ -206,19 +206,19 @@ public class TaskTaskServiceImpl implements TaskService {
|
||||
if (templateList == null || templateList.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
TaskEntity faceAutomaticTask = taskMapper.getFaceAutomaticTask(id);
|
||||
TaskEntity faceAutomaticTask = taskMapper.getFaceAutomaticTask(faceId);
|
||||
if (faceAutomaticTask != null) {
|
||||
return;
|
||||
}
|
||||
autoCreateTaskByFaceIdAndTempalteId(id, templateList.get(0).getId(), 1);
|
||||
createTaskByFaceIdAndTempalteId(faceId, templateList.get(0).getId(), 1);
|
||||
}
|
||||
@Override
|
||||
public void autoCreateTaskByFaceIdAndTempalteId(Long faceId, Long templateId) {
|
||||
autoCreateTaskByFaceIdAndTempalteId(faceId, templateId, 0);
|
||||
public void createTaskByFaceIdAndTempalteId(Long faceId, Long templateId) {
|
||||
createTaskByFaceIdAndTempalteId(faceId, templateId, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void autoCreateTaskByFaceIdAndTempalteId(Long faceId, Long templateId, int automatic) {
|
||||
public void createTaskByFaceIdAndTempalteId(Long faceId, Long templateId, int automatic) {
|
||||
FaceRespVO faceRespVO = faceMapper.getById(faceId);
|
||||
List<FaceSampleRespVO> faceSampleList = faceSampleMapper.listByIds(Arrays.stream(faceRespVO.getMatchSampleIds().split(",")).map(Long::valueOf).collect(Collectors.toList()));
|
||||
if (faceSampleList.isEmpty()) {
|
||||
@ -237,45 +237,56 @@ public class TaskTaskServiceImpl implements TaskService {
|
||||
return;
|
||||
}
|
||||
}
|
||||
Thread taskThread = new Thread(() -> {
|
||||
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;
|
||||
}
|
||||
faceSampleList.stream().map(sample -> {
|
||||
VideoPieceGetter.Task task = new VideoPieceGetter.Task();
|
||||
task.setFaceSampleId(sample.getId());
|
||||
task.setMemberId(faceRespVO.getMemberId());
|
||||
task.setCreateTime(sample.getCreateAt());
|
||||
return task;
|
||||
}).filter(Objects::nonNull).collect(Collectors.toList());
|
||||
}).forEach(VideoPieceGetter::addTask);
|
||||
|
||||
|
||||
VideoPieceGetter.Task task = new VideoPieceGetter.Task();
|
||||
task.setType("callback");
|
||||
task.setCallback(() -> {
|
||||
List<SourceEntity> videoSourceList = sourceMapper.listVideoBySampleIds(faceSampleList.stream().map(FaceSampleRespVO::getId).collect(Collectors.toList()));
|
||||
task.type = "callback";
|
||||
task.callback = () -> {
|
||||
List<SourceEntity> videoSourceList = sourceMapper.listVideoByFaceRelation(faceId);
|
||||
Map<String, List<SourceEntity>> sourcesMap = videoSourceList.stream()
|
||||
.peek(item -> item.setUrl(item.getVideoUrl()))
|
||||
.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.setId(SnowFlakeUtil.getLongId());
|
||||
taskEntity.setScenicId(faceRespVO.getScenicId());
|
||||
taskEntity.setFaceId(faceId);
|
||||
taskEntity.setMemberId(faceRespVO.getMemberId());
|
||||
taskEntity.setTemplateId(templateId);
|
||||
taskEntity.setTaskParams(JSON.toJSONString(sourcesMap));
|
||||
taskEntity.setStatus(0);
|
||||
taskEntity.setAutomatic(automatic);
|
||||
taskEntity.setTaskParams(JSON.toJSONString(sourcesMap));
|
||||
taskMapper.add(taskEntity);
|
||||
});
|
||||
if (!tasks.isEmpty()) {
|
||||
tasks.forEach(VideoPieceGetter::addTask);
|
||||
VideoPieceGetter.addTask(task);
|
||||
} else {
|
||||
task.getCallback().onInvoke();
|
||||
memberVideoEntity.setTaskId(taskEntity.getId());
|
||||
} else{
|
||||
memberVideoEntity.setTaskId(list.get(0).getId());
|
||||
VideoEntity video = videoMapper.findByTaskId(list.get(0).getId());
|
||||
if (video != null) {
|
||||
memberVideoEntity.setVideoId(video.getId());
|
||||
}
|
||||
});
|
||||
taskThread.start();
|
||||
}
|
||||
videoMapper.addRelation(memberVideoEntity);
|
||||
};
|
||||
VideoPieceGetter.addTask(task);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -297,6 +308,7 @@ public class TaskTaskServiceImpl implements TaskService {
|
||||
if (video != null) {
|
||||
video.setVideoUrl(task.getVideoUrl());
|
||||
videoMapper.update(video);
|
||||
videoMapper.updateRelationWhenTaskSuccess(taskId, video.getId());
|
||||
} else {
|
||||
video = new VideoEntity();
|
||||
video.setId(SnowFlakeUtil.getLongId());
|
||||
@ -308,6 +320,7 @@ public class TaskTaskServiceImpl implements TaskService {
|
||||
video.setVideoUrl(task.getVideoUrl());
|
||||
video.setCreateTime(new Date());
|
||||
videoMapper.add(video);
|
||||
videoMapper.updateRelationWhenTaskSuccess(taskId, video.getId());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
@ -34,11 +34,11 @@ public interface GoodsService {
|
||||
ApiResponse<BigDecimal> queryPrice(GoodsPriceQueryReq queryPriceData);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param goodsId 商品(vlog)id
|
||||
* @param userId 商品(vlog)id
|
||||
* @param videoId
|
||||
* @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> 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);
|
||||
}
|
||||
|
@ -11,9 +11,9 @@ public interface TaskService {
|
||||
|
||||
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);
|
||||
|
||||
|
@ -0,0 +1,4 @@
|
||||
package com.ycwl.basic.service.task;
|
||||
|
||||
public interface TaskTemplateService {
|
||||
}
|
@ -52,7 +52,7 @@ public class DynamicTaskGenerator {
|
||||
for (ScenicRespVO scenic : scenicList) {
|
||||
log.info("定时任务执行,当前景区:{}", scenic.getName());
|
||||
ScenicConfigEntity scenicConfig = scenicMapper.getConfig(scenic.getId());
|
||||
if (scenicConfig == null || scenicConfig.getBookRoutine() == 2) {
|
||||
if (scenicConfig == null || 2 == scenicConfig.getBookRoutine()) {
|
||||
log.info("当前景区{},未启用提前预约流程", scenic.getName());
|
||||
continue;
|
||||
}
|
||||
|
@ -156,6 +156,8 @@ public class VideoPieceGetter {
|
||||
videoSource.setMemberId(task.getMemberId());
|
||||
videoSource.setType(1);
|
||||
videoSource.setIsBuy(0);
|
||||
videoSource.setFaceId(task.getFaceId());
|
||||
videoSource.setScenicId(faceSample.getScenicId());
|
||||
videoSource.setSourceId(sourceEntity.getId());
|
||||
if (imgSource != null) {
|
||||
sourceEntity.setUrl(imgSource.getUrl());
|
||||
|
@ -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
|
||||
from face
|
||||
where member_id = #{userId} and scenic_id = #{scenicId}
|
||||
order by id desc
|
||||
limit 1
|
||||
</select>
|
||||
<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
|
||||
|
@ -118,7 +118,7 @@
|
||||
where
|
||||
ms.member_id = #{memberId}
|
||||
<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="faceId!=null">and ms.face_id = #{faceId} </if>
|
||||
order by so.create_time desc
|
||||
@ -145,4 +145,12 @@
|
||||
from member_source
|
||||
where member_id = #{memberId} and source_id = #{sourceId} and type = #{type}
|
||||
</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>
|
||||
|
@ -6,14 +6,14 @@
|
||||
values (#{id}, #{scenicId}, #{memberId}, #{templateId}, #{taskId}, #{workerId}, #{videoUrl})
|
||||
</insert>
|
||||
<insert id="addRelation">
|
||||
replace member_video(member_id, task_id, video_id, is_buy, order_id)
|
||||
values (#{memberId}, #{taskId}, #{videoId}, #{isBuy}, #{orderId})
|
||||
replace member_video(member_id, scenic_id, face_id, template_id, task_id, video_id, is_buy, order_id)
|
||||
values (#{memberId}, #{scenicId}, #{faceId}, #{templateId}, #{taskId}, #{videoId}, #{isBuy}, #{orderId})
|
||||
</insert>
|
||||
<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
|
||||
<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>
|
||||
</insert>
|
||||
<update id="update">
|
||||
@ -37,6 +37,11 @@
|
||||
</set>
|
||||
where member_id = #{memberId} and video_id = #{videoId}
|
||||
</update>
|
||||
<update id="updateRelationWhenTaskSuccess">
|
||||
update member_video
|
||||
set video_id = #{videoId}
|
||||
where task_id = #{taskId}
|
||||
</update>
|
||||
<delete id="deleteById">
|
||||
delete from video where id = #{id}
|
||||
</delete>
|
||||
@ -69,7 +74,7 @@
|
||||
</select>
|
||||
<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,
|
||||
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
|
||||
from video v
|
||||
left join scenic s on v.scenic_id = s.id
|
||||
@ -85,11 +90,11 @@
|
||||
from member_video mv
|
||||
left join video v on mv.video_id = v.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>
|
||||
<if test="scenicId!= null">and mv.scenic_id = #{scenicId} </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="isBuy!=null">and mv.is_buy = #{isBuy}</if>
|
||||
<if test="startTime!= null">and v.create_time >= #{startTime} </if>
|
||||
@ -105,4 +110,28 @@
|
||||
<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>
|
||||
<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>
|
Loading…
x
Reference in New Issue
Block a user