diff --git a/src/main/java/com/ycwl/basic/constant/TaskConstant.java b/src/main/java/com/ycwl/basic/constant/TaskConstant.java index 15ff9a0..8ae316a 100644 --- a/src/main/java/com/ycwl/basic/constant/TaskConstant.java +++ b/src/main/java/com/ycwl/basic/constant/TaskConstant.java @@ -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"; } diff --git a/src/main/java/com/ycwl/basic/controller/mobile/AppGoodsController.java b/src/main/java/com/ycwl/basic/controller/mobile/AppGoodsController.java index 4d985ca..4599a1e 100644 --- a/src/main/java/com/ycwl/basic/controller/mobile/AppGoodsController.java +++ b/src/main/java/com/ycwl/basic/controller/mobile/AppGoodsController.java @@ -44,9 +44,10 @@ public class AppGoodsController { } @ApiOperation("成片vlog商品详情") - @GetMapping("/getVideoGoodsDetail/{goodId}") - public ApiResponse videoGoodsDetail(@PathVariable("goodId") Long goodsId) { - return goodsService.videoGoodsDetail(goodsId); + @GetMapping("/getVideoGoodsDetail/{videoId}") + public ApiResponse 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 getTemplateTaskStatus(@PathVariable("templateId") Long templateId) { + @GetMapping("/task/face/{faceId}/template/{templateId}") + public ApiResponse 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 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("成功"); } } diff --git a/src/main/java/com/ycwl/basic/controller/task/TaskTaskController.java b/src/main/java/com/ycwl/basic/controller/task/TaskTaskController.java index a39308f..177ea1b 100644 --- a/src/main/java/com/ycwl/basic/controller/task/TaskTaskController.java +++ b/src/main/java/com/ycwl/basic/controller/task/TaskTaskController.java @@ -59,10 +59,4 @@ public class TaskTaskController { taskService.taskFail(taskId, req); return ApiResponse.success("OK"); } - - @PostMapping("/test/createRenderTask/{scenicId}/{templateId}/{faceId}") - public ApiResponse createRenderTask(@PathVariable Long scenicId, @PathVariable Long templateId, @PathVariable Long faceId) { - taskService.createRenderTask(scenicId, templateId, faceId); - return ApiResponse.success("ok"); - } } diff --git a/src/main/java/com/ycwl/basic/mapper/SourceMapper.java b/src/main/java/com/ycwl/basic/mapper/SourceMapper.java index 4c903f1..ebd3673 100644 --- a/src/main/java/com/ycwl/basic/mapper/SourceMapper.java +++ b/src/main/java/com/ycwl/basic/mapper/SourceMapper.java @@ -59,4 +59,6 @@ public interface SourceMapper { SourceEntity querySameVideo(Long faceSampleId, Long deviceId); int hasRelationTo(Long memberId, Long sourceId, int type); + + List listVideoByFaceRelation(Long faceId); } diff --git a/src/main/java/com/ycwl/basic/mapper/VideoMapper.java b/src/main/java/com/ycwl/basic/mapper/VideoMapper.java index 487343f..e4fd5a4 100644 --- a/src/main/java/com/ycwl/basic/mapper/VideoMapper.java +++ b/src/main/java/com/ycwl/basic/mapper/VideoMapper.java @@ -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 queryByRelation(VideoReqQuery videoReqQuery); List userFaceTemplateVideo(Long userId, Long faceId, Long templateId); + + List listTaskByFaceRelation(Long userId, Long faceId); + + List listTaskByFaceTemplateRelation(Long userId, Long faceId, Long templateId); + + List listTaskByScenicRelation(Long userId, Long scenicId); + + MemberVideoEntity queryUserVideo(Long userId, Long videoId); + + int updateRelationWhenTaskSuccess(Long taskId, Long videoId); } diff --git a/src/main/java/com/ycwl/basic/model/mobile/goods/VideoTaskStatusVO.java b/src/main/java/com/ycwl/basic/model/mobile/goods/VideoTaskStatusVO.java index 3ea303d..293024a 100644 --- a/src/main/java/com/ycwl/basic/model/mobile/goods/VideoTaskStatusVO.java +++ b/src/main/java/com/ycwl/basic/model/mobile/goods/VideoTaskStatusVO.java @@ -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; } diff --git a/src/main/java/com/ycwl/basic/model/pc/video/entity/MemberVideoEntity.java b/src/main/java/com/ycwl/basic/model/pc/video/entity/MemberVideoEntity.java index c2d5866..b13dbdd 100644 --- a/src/main/java/com/ycwl/basic/model/pc/video/entity/MemberVideoEntity.java +++ b/src/main/java/com/ycwl/basic/model/pc/video/entity/MemberVideoEntity.java @@ -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; diff --git a/src/main/java/com/ycwl/basic/model/pc/video/resp/VideoRespVO.java b/src/main/java/com/ycwl/basic/model/pc/video/resp/VideoRespVO.java index e210065..c267189 100644 --- a/src/main/java/com/ycwl/basic/model/pc/video/resp/VideoRespVO.java +++ b/src/main/java/com/ycwl/basic/model/pc/video/resp/VideoRespVO.java @@ -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") diff --git a/src/main/java/com/ycwl/basic/service/impl/mobile/AppScenicServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/mobile/AppScenicServiceImpl.java index 31d753a..4ca5bd1 100644 --- a/src/main/java/com/ycwl/basic/service/impl/mobile/AppScenicServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/mobile/AppScenicServiceImpl.java @@ -142,7 +142,7 @@ public class AppScenicServiceImpl implements AppScenicService { List 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 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); } }); diff --git a/src/main/java/com/ycwl/basic/service/impl/mobile/GoodsServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/mobile/GoodsServiceImpl.java index 6af314d..23cbbd0 100644 --- a/src/main/java/com/ycwl/basic/service/impl/mobile/GoodsServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/mobile/GoodsServiceImpl.java @@ -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 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 videoGoodsDetail(Long goodsId) { + public ApiResponse 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()); - 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()); + 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))); + } 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 getTaskStatusByFaceId(Long userId, Long faceId) { - TaskReqQuery taskReqQuery = new TaskReqQuery(); - taskReqQuery.setMemberId(userId); - taskReqQuery.setFaceId(faceId); + List taskList = videoMapper.listTaskByFaceRelation(userId, faceId); VideoTaskStatusVO response = new VideoTaskStatusVO(); - List list=taskMapper.list(taskReqQuery); - if(list.isEmpty()){//没有任务 + response.setFaceId(faceId); + if (taskList.isEmpty()) { response.setStatus(0); return ApiResponse.success(response); } - Optional 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 = 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 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 getTemplateTaskStatus(Long userId, Long faceId, Long templateId) { + List 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 = 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 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 taskList = videoMapper.listTaskByScenicRelation(userId, scenicId); + if (taskList.isEmpty()) { response.setStatus(0); return ApiResponse.success(response); } - List list=taskMapper.list(taskReqQuery); - // 未完成是等于0或2 - Optional first = list.stream().filter(item -> item.getStatus() == 0 || item.getStatus() == 2).findFirst(); - if (first.isPresent()) { + Optional 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); } } diff --git a/src/main/java/com/ycwl/basic/service/impl/mobile/WxPayServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/mobile/WxPayServiceImpl.java index 987bc4b..9901877 100644 --- a/src/main/java/com/ycwl/basic/service/impl/mobile/WxPayServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/mobile/WxPayServiceImpl.java @@ -212,7 +212,7 @@ public class WxPayServiceImpl implements WxPayService { List 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); diff --git a/src/main/java/com/ycwl/basic/service/impl/pc/FaceServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/pc/FaceServiceImpl.java index 4f9331e..012ccc9 100644 --- a/src/main/java/com/ycwl/basic/service/impl/pc/FaceServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/pc/FaceServiceImpl.java @@ -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 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); diff --git a/src/main/java/com/ycwl/basic/service/impl/task/TaskTaskServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/task/TaskTaskServiceImpl.java index 63bb7aa..48b1f72 100644 --- a/src/main/java/com/ycwl/basic/service/impl/task/TaskTaskServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/task/TaskTaskServiceImpl.java @@ -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 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 vSourceList = sourceMapper.listVideoBySampleIds(faceSampleList.stream().map(FaceSampleRespVO::getId).collect(Collectors.toList())); - List tasks = faceSampleList.stream().map(sample -> { - Optional optional = vSourceList.stream().filter(video -> video.getFaceSampleId().equals(sample.getId())).findFirst(); - if (optional.isPresent()) { - return null; - } - 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()); + faceSampleList.stream().map(sample -> { VideoPieceGetter.Task task = new VideoPieceGetter.Task(); - task.setType("callback"); - task.setCallback(() -> { - List videoSourceList = sourceMapper.listVideoBySampleIds(faceSampleList.stream().map(FaceSampleRespVO::getId).collect(Collectors.toList())); - Map> sourcesMap = videoSourceList.stream() - .peek(item -> item.setUrl(item.getVideoUrl())) - .collect(Collectors.groupingBy(item -> item.getDeviceId().toString())); + task.setFaceSampleId(sample.getId()); + task.setMemberId(faceRespVO.getMemberId()); + task.setCreateTime(sample.getCreateAt()); + return task; + }).forEach(VideoPieceGetter::addTask); + + + VideoPieceGetter.Task task = new VideoPieceGetter.Task(); + task.type = "callback"; + task.callback = () -> { + List videoSourceList = sourceMapper.listVideoByFaceRelation(faceId); + Map> 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 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()); } } diff --git a/src/main/java/com/ycwl/basic/service/impl/task/TaskTemplateServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/task/TaskTemplateServiceImpl.java new file mode 100644 index 0000000..eb3d334 --- /dev/null +++ b/src/main/java/com/ycwl/basic/service/impl/task/TaskTemplateServiceImpl.java @@ -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 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; + } +} diff --git a/src/main/java/com/ycwl/basic/service/mobile/GoodsService.java b/src/main/java/com/ycwl/basic/service/mobile/GoodsService.java index d49b93e..c065408 100644 --- a/src/main/java/com/ycwl/basic/service/mobile/GoodsService.java +++ b/src/main/java/com/ycwl/basic/service/mobile/GoodsService.java @@ -34,11 +34,11 @@ public interface GoodsService { ApiResponse queryPrice(GoodsPriceQueryReq queryPriceData); /** - * - * @param goodsId 商品(vlog)id + * @param userId 商品(vlog)id + * @param videoId * @return */ - ApiResponse videoGoodsDetail(Long goodsId); + ApiResponse videoGoodsDetail(Long userId, Long videoId); /** * 查询当前用户的成片合成任务状态 @@ -48,7 +48,7 @@ public interface GoodsService { ApiResponse getTaskStatusByFaceId(Long userId ,Long faceId); ApiResponse getAllTaskStatus(Long userId); - ApiResponse getTemplateTaskStatus(Long userId, Long templateId); + ApiResponse getTemplateTaskStatus(Long userId, Long faceId, Long templateId); ApiResponse getTaskStatusByScenicId(Long userId, Long scenicId); } diff --git a/src/main/java/com/ycwl/basic/service/task/TaskService.java b/src/main/java/com/ycwl/basic/service/task/TaskService.java index da07160..b07c234 100644 --- a/src/main/java/com/ycwl/basic/service/task/TaskService.java +++ b/src/main/java/com/ycwl/basic/service/task/TaskService.java @@ -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); diff --git a/src/main/java/com/ycwl/basic/service/task/TaskTemplateService.java b/src/main/java/com/ycwl/basic/service/task/TaskTemplateService.java new file mode 100644 index 0000000..a5ad1e4 --- /dev/null +++ b/src/main/java/com/ycwl/basic/service/task/TaskTemplateService.java @@ -0,0 +1,4 @@ +package com.ycwl.basic.service.task; + +public interface TaskTemplateService { +} diff --git a/src/main/java/com/ycwl/basic/task/DynamicTaskGenerator.java b/src/main/java/com/ycwl/basic/task/DynamicTaskGenerator.java index 20ad866..9ee469f 100644 --- a/src/main/java/com/ycwl/basic/task/DynamicTaskGenerator.java +++ b/src/main/java/com/ycwl/basic/task/DynamicTaskGenerator.java @@ -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; } diff --git a/src/main/java/com/ycwl/basic/task/VideoPieceGetter.java b/src/main/java/com/ycwl/basic/task/VideoPieceGetter.java index cf21c6a..931b7dd 100644 --- a/src/main/java/com/ycwl/basic/task/VideoPieceGetter.java +++ b/src/main/java/com/ycwl/basic/task/VideoPieceGetter.java @@ -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()); diff --git a/src/main/resources/mapper/FaceMapper.xml b/src/main/resources/mapper/FaceMapper.xml index b6b447a..92a9acd 100644 --- a/src/main/resources/mapper/FaceMapper.xml +++ b/src/main/resources/mapper/FaceMapper.xml @@ -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 + diff --git a/src/main/resources/mapper/VideoMapper.xml b/src/main/resources/mapper/VideoMapper.xml index 115d53c..abbf398 100644 --- a/src/main/resources/mapper/VideoMapper.xml +++ b/src/main/resources/mapper/VideoMapper.xml @@ -6,14 +6,14 @@ values (#{id}, #{scenicId}, #{memberId}, #{templateId}, #{taskId}, #{workerId}, #{videoUrl}) - 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}) - 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 - (#{item.memberId}, #{item.taskId}, #{item.videoId}, #{item.isBuy}, #{orderId}) + (#{item.memberId}, #{item.scenicId}, #{item.faceId}, #{item.templateId}, #{item.taskId}, #{item.videoId}, #{item.isBuy}, #{orderId}) @@ -37,6 +37,11 @@ where member_id = #{memberId} and video_id = #{videoId} + + update member_video + set video_id = #{videoId} + where task_id = #{taskId} + delete from video where id = #{id} @@ -69,7 +74,7 @@ select * from member_video where member_id = #{userId} and face_id = #{faceId} and template_id = #{templateId} order by id desc + + + + \ No newline at end of file