From cfb93920682da544243b87f813cdb51ce3488f22 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Fri, 14 Feb 2025 18:18:21 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ycwl/basic/biz/OrderBiz.java | 3 +- .../extern/LyCompatibleController.java | 201 ++++++++++++++++++ .../com/ycwl/basic/controller/extern/R.java | 55 +++++ .../controller/mobile/AppFaceController.java | 7 +- .../controller/mobile/AppGoodsController.java | 3 +- .../mobile/AppScenicController.java | 3 +- .../basic/controller/pc/VideoController.java | 15 -- .../com/ycwl/basic/mapper/MemberMapper.java | 2 + .../com/ycwl/basic/mapper/VideoMapper.java | 2 + .../basic/repository/VideoRepository.java | 38 ++++ .../basic/repository/VideoTaskRepository.java | 30 +++ .../impl/mobile/AppScenicServiceImpl.java | 25 +-- .../service/impl/mobile/GoodsServiceImpl.java | 8 +- .../service/impl/pc/FaceServiceImpl.java | 11 +- .../service/impl/pc/OrderServiceImpl.java | 16 +- .../service/impl/pc/VideoServiceImpl.java | 30 --- .../service/mobile/AppScenicService.java | 2 +- .../basic/service/mobile/GoodsService.java | 2 +- .../ycwl/basic/service/pc/FaceService.java | 3 +- .../ycwl/basic/service/pc/VideoService.java | 3 - .../task/impl/TaskFaceServiceImpl.java | 4 +- .../task/impl/TaskTaskServiceImpl.java | 3 + .../java/com/ycwl/basic/task/FaceCleaner.java | 3 +- src/main/resources/mapper/MemberMapper.xml | 17 ++ .../resources/mapper/StatisticsMapper.xml | 1 + src/main/resources/mapper/VideoMapper.xml | 5 + 26 files changed, 404 insertions(+), 88 deletions(-) create mode 100644 src/main/java/com/ycwl/basic/controller/extern/LyCompatibleController.java create mode 100644 src/main/java/com/ycwl/basic/controller/extern/R.java diff --git a/src/main/java/com/ycwl/basic/biz/OrderBiz.java b/src/main/java/com/ycwl/basic/biz/OrderBiz.java index dd73b52..ee575e5 100644 --- a/src/main/java/com/ycwl/basic/biz/OrderBiz.java +++ b/src/main/java/com/ycwl/basic/biz/OrderBiz.java @@ -16,6 +16,7 @@ import com.ycwl.basic.model.pc.order.resp.OrderRespVO; import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity; import com.ycwl.basic.model.pc.scenic.entity.ScenicEntity; import com.ycwl.basic.model.pc.template.resp.TemplateRespVO; +import com.ycwl.basic.model.pc.video.entity.VideoEntity; import com.ycwl.basic.model.pc.video.resp.VideoRespVO; import com.ycwl.basic.repository.FaceRepository; import com.ycwl.basic.repository.OrderRepository; @@ -72,7 +73,7 @@ public class OrderBiz { } switch (goodsType) { case 0: // video - VideoRespVO video = videoMapper.getById(goodsId); + VideoEntity video = videoRepository.getVideo(goodsId); if (video == null) { return null; } diff --git a/src/main/java/com/ycwl/basic/controller/extern/LyCompatibleController.java b/src/main/java/com/ycwl/basic/controller/extern/LyCompatibleController.java new file mode 100644 index 0000000..d6ae6a5 --- /dev/null +++ b/src/main/java/com/ycwl/basic/controller/extern/LyCompatibleController.java @@ -0,0 +1,201 @@ +package com.ycwl.basic.controller.extern; + +import com.ycwl.basic.mapper.FaceMapper; +import com.ycwl.basic.mapper.MemberMapper; +import com.ycwl.basic.mapper.VideoMapper; +import com.ycwl.basic.model.mobile.face.FaceRecognizeResp; +import com.ycwl.basic.model.mobile.goods.GoodsDetailVO; +import com.ycwl.basic.model.mobile.goods.GoodsReqQuery; +import com.ycwl.basic.model.mobile.goods.VideoTaskStatusVO; +import com.ycwl.basic.model.mobile.scenic.content.ContentPageVO; +import com.ycwl.basic.model.pc.face.resp.FaceRespVO; +import com.ycwl.basic.model.pc.member.entity.MemberEntity; +import com.ycwl.basic.model.pc.member.resp.MemberRespVO; +import com.ycwl.basic.model.pc.video.entity.VideoEntity; +import com.ycwl.basic.model.pc.video.resp.VideoRespVO; +import com.ycwl.basic.repository.VideoRepository; +import com.ycwl.basic.repository.VideoTaskRepository; +import com.ycwl.basic.service.mobile.AppScenicService; +import com.ycwl.basic.service.mobile.GoodsService; +import com.ycwl.basic.service.pc.FaceService; +import com.ycwl.basic.service.task.impl.TaskTaskServiceImpl; +import com.ycwl.basic.utils.ApiResponse; +import com.ycwl.basic.utils.SnowFlakeUtil; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import java.util.Date; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@RestController("/ly") +public class LyCompatibleController { + @Autowired + private FaceService faceService; + + @Autowired + private MemberMapper memberMapper; + @Autowired + private GoodsService goodsService; + @Autowired + private FaceMapper faceMapper; + @Autowired + private AppScenicService appScenicService; + @Autowired + private VideoRepository videoRepository; + @Autowired + private VideoMapper videoMapper; + @Autowired + private TaskTaskServiceImpl taskTaskServiceImpl; + + @PostMapping("sendPhoto") + public R sendPhoto(@RequestParam(value = "file", required = false) MultipartFile file, HttpServletRequest request) { + Map headersMap = new HashMap(); + Enumeration headerNames = request.getHeaderNames(); + while (headerNames.hasMoreElements()) { + String key = (String) headerNames.nextElement(); + String value = request.getHeader(key); + headersMap.put(key, value); + } + if (!headersMap.containsKey("client")) { + return R.error("请在Header中传入client!(client:用户OpenId)"); + } + if (!headersMap.containsKey("secret")) { + return R.error("请传入秘钥!"); + } + String scid = request.getParameter("scid"); + Long scenicId = 0L; + if (StringUtils.isBlank(scid)) { + return R.error("景区ID为空!"); + } + if (StringUtils.equals("288",scid)) { + // 正式景区 + } + String openId = headersMap.get("client"); + MemberRespVO member = memberMapper.getByOpenId(openId); + if (member == null) { + member = new MemberRespVO(); + MemberEntity memberEntity = new MemberEntity(); + memberEntity.setOpenId(openId); + memberEntity.setScenicId(scenicId); + memberEntity.setCreateDate(new Date()); + memberEntity.setId(SnowFlakeUtil.getLongId()); + memberEntity.setNickname("用户"); + memberMapper.add(memberEntity); + member.setId(memberEntity.getId()); + } + FaceRecognizeResp resp; + try { + resp = faceService.faceUpload(file, scenicId, member.getId()); + } catch (Exception e) { + return R.error("上传失败!报错:"+e.getMessage()); + } + if (resp.getFaceId() == null) { + return R.error("上传失败!"); + } + return R.ok().put("data", resp); + } + + @PostMapping("getIsVideo") + public R getIsVideo(HttpServletRequest request) { + Map headersMap = new HashMap(); + Enumeration headerNames = request.getHeaderNames(); + while (headerNames.hasMoreElements()) { + String key = (String) headerNames.nextElement(); + String value = request.getHeader(key); + headersMap.put(key, value); + } + if (!headersMap.containsKey("client")) { + return R.error("请在Header中传入client!(client:用户OpenId)"); + } + if (!headersMap.containsKey("secret")) { + return R.error("请传入秘钥!"); + } + String openId = headersMap.get("client"); + MemberRespVO member = memberMapper.getByOpenId(openId); + if (member == null) { + return R.error("用户不存在!"); + } + VideoTaskStatusVO taskStatusVO = goodsService.getTaskStatusByScenicId(member.getId(), member.getScenicId()); + if (taskStatusVO == null) { + return R.ok().put("hasVideo", 0); + } + switch (taskStatusVO.getStatus()) { + case 1: + return R.ok().put("hasVideo", 1); + case 2: + return R.ok().put("hasVideo", 3); + case 0: + case 3: + default: + return R.ok().put("hasVideo", 0); + } + } + + @PostMapping("getNewVideo") + public R getNewVideo(HttpServletRequest request) { + Map headersMap = new HashMap(); + Enumeration headerNames = request.getHeaderNames(); + while (headerNames.hasMoreElements()) { + String key = (String) headerNames.nextElement(); + String value = request.getHeader(key); + headersMap.put(key, value); + } + if (!headersMap.containsKey("client")) { + return R.error("请在Header中传入client!(client:用户OpenId)"); + } + if (!headersMap.containsKey("secret")) { + return R.error("请传入秘钥!"); + } + String openId = headersMap.get("client"); + MemberRespVO member = memberMapper.getByOpenId(openId); + if (member == null) { + return R.error("用户不存在!"); + } + FaceRespVO faceVO = faceMapper.getLatestByMemberId(member.getId(), member.getScenicId()); + if (faceVO == null) { + return R.error("用户没有上传过照片!"); + } + VideoTaskStatusVO taskStatusVO = goodsService.getTaskStatusByScenicId(member.getId(), member.getScenicId()); + List listApiResponse = appScenicService.faceContentList(member.getId(), faceVO.getId()); + Map> collect = listApiResponse.stream() + .filter(contentPageVO -> contentPageVO.getLockType() < 0) + .collect(Collectors.groupingBy(ContentPageVO::getGoodsType)); + List> videoList = collect.get(0).stream().map(contentPageVO -> { + Map map = new HashMap<>(); + VideoEntity videoRespVO = videoRepository.getVideo(contentPageVO.getContentId()); + map.put("template_cover_image", contentPageVO.getTemplateCoverUrl()); + Date taskShotDate = taskTaskServiceImpl.getTaskShotDate(videoRespVO.getTaskId()); + map.put("shoottime", taskShotDate); + map.put("openid", openId); + map.put("scenicname", contentPageVO.getScenicName()); + map.put("title", contentPageVO.getName()); + map.put("ossurldm", videoRespVO.getVideoUrl()); + return map; + }).collect(Collectors.toList()); + GoodsReqQuery goodsReqQuery = new GoodsReqQuery(); + goodsReqQuery.setSourceType(1); + List sourceGoodsList = goodsService.sourceGoodsList(member.getId(), goodsReqQuery); + List> userVideoList = sourceGoodsList.stream().map(goodsDetailVO -> { + Map map = new HashMap<>(); + map.put("openid", openId); + map.put("template_cover_image", goodsDetailVO.getUrl()); + map.put("scenicname", goodsDetailVO.getScenicName()); + map.put("shoottime", goodsDetailVO.getCreateTime()); + map.put("ossurldm", goodsDetailVO.getVideoUrl()); + return map; + }).collect(Collectors.toList()); + return R.ok() + .put("isgen", taskStatusVO.getStatus() == 1 ? 0 : 1) + .put("newvideo", videoList) + .put("newuservideo", userVideoList); + } +} diff --git a/src/main/java/com/ycwl/basic/controller/extern/R.java b/src/main/java/com/ycwl/basic/controller/extern/R.java new file mode 100644 index 0000000..19b3e3c --- /dev/null +++ b/src/main/java/com/ycwl/basic/controller/extern/R.java @@ -0,0 +1,55 @@ +package com.ycwl.basic.controller.extern; + +import java.util.HashMap; +import java.util.Map; + +/** + * 返回数据 + * + * @author chenshun + * @email sunlightcs@gmail.com + * @date 2016年10月27日 下午9:59:27 + */ +public class R extends HashMap { + private static final long serialVersionUID = 1L; + + public R() { + put("code", 0); + } + + public static R error() { + return error(500, "未知异常,请联系管理员"); + } + + public static R error(String msg) { + return error(500, msg); + } + + public static R error(int code, String msg) { + R r = new R(); + r.put("code", code); + r.put("msg", msg); + return r; + } + + public static R ok(String msg) { + R r = new R(); + r.put("msg", msg); + return r; + } + + public static R ok(Map map) { + R r = new R(); + r.putAll(map); + return r; + } + + public static R ok() { + return new R(); + } + + public R put(String key, Object value) { + super.put(key, value); + return this; + } +} diff --git a/src/main/java/com/ycwl/basic/controller/mobile/AppFaceController.java b/src/main/java/com/ycwl/basic/controller/mobile/AppFaceController.java index f0033bf..34b1cba 100644 --- a/src/main/java/com/ycwl/basic/controller/mobile/AppFaceController.java +++ b/src/main/java/com/ycwl/basic/controller/mobile/AppFaceController.java @@ -1,6 +1,7 @@ package com.ycwl.basic.controller.mobile; import com.ycwl.basic.model.jwt.JwtInfo; +import com.ycwl.basic.model.mobile.face.FaceRecognizeResp; import com.ycwl.basic.model.pc.face.resp.FaceRespVO; import com.ycwl.basic.service.pc.FaceService; import com.ycwl.basic.utils.ApiResponse; @@ -38,7 +39,11 @@ AppFaceController { @ApiOperation("人脸照片上传") @PostMapping("/faceUPload") public ApiResponse faceUpload(@RequestParam("file")MultipartFile file, @RequestParam("scenicId") Long scenicId) { - return faceService.faceUpload(file,scenicId); + //获取用户id + JwtInfo worker = JwtTokenUtil.getWorker(); + Long userId = worker.getUserId(); + FaceRecognizeResp resp = faceService.faceUpload(file, scenicId, userId); + return ApiResponse.success(resp); } @GetMapping("/scenic/{scenicId}/list") 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 160c07d..3ebd485 100644 --- a/src/main/java/com/ycwl/basic/controller/mobile/AppGoodsController.java +++ b/src/main/java/com/ycwl/basic/controller/mobile/AppGoodsController.java @@ -44,7 +44,8 @@ public class AppGoodsController { @ApiOperation("源素材(原片/照片)商品列表") @PostMapping("/sourceGoodsList") public ApiResponse> sourceGoodsList(@RequestBody GoodsReqQuery query) { - return goodsService.sourceGoodsList(Long.valueOf(BaseContextHandler.getUserId()), query); + List goodsDetailVOS = goodsService.sourceGoodsList(Long.valueOf(BaseContextHandler.getUserId()), query); + return ApiResponse.success(goodsDetailVOS); } @ApiOperation("成片vlog商品详情") diff --git a/src/main/java/com/ycwl/basic/controller/mobile/AppScenicController.java b/src/main/java/com/ycwl/basic/controller/mobile/AppScenicController.java index c2851ca..965243d 100644 --- a/src/main/java/com/ycwl/basic/controller/mobile/AppScenicController.java +++ b/src/main/java/com/ycwl/basic/controller/mobile/AppScenicController.java @@ -73,7 +73,8 @@ public class AppScenicController { @GetMapping("/face/{faceId}/contentList") public ApiResponse> contentList(@PathVariable Long faceId) { JwtInfo worker = JwtTokenUtil.getWorker(); - return appScenicService.faceContentList(worker.getUserId(), faceId); + List contentPageVOS = appScenicService.faceContentList(worker.getUserId(), faceId); + return ApiResponse.success(contentPageVOS); } diff --git a/src/main/java/com/ycwl/basic/controller/pc/VideoController.java b/src/main/java/com/ycwl/basic/controller/pc/VideoController.java index 88288e2..99306d8 100644 --- a/src/main/java/com/ycwl/basic/controller/pc/VideoController.java +++ b/src/main/java/com/ycwl/basic/controller/pc/VideoController.java @@ -41,20 +41,5 @@ public class VideoController { public ApiResponse getById(@PathVariable Long id) { return videoService.getById(id); } - @ApiOperation("添加成片") - @PostMapping("/add") - public ApiResponse add(@RequestBody VideoEntity video) { - return videoService.add(video); - } - @ApiOperation("删除成片") - @DeleteMapping("/delete/{id}") - public ApiResponse deleteById(@PathVariable Long id) { - return videoService.deleteById(id); - } - @ApiOperation("修改成片") - @PostMapping("/update") - public ApiResponse update(@RequestBody VideoEntity video) { - return videoService.update(video); - } } diff --git a/src/main/java/com/ycwl/basic/mapper/MemberMapper.java b/src/main/java/com/ycwl/basic/mapper/MemberMapper.java index 0d77e08..1a2de5c 100644 --- a/src/main/java/com/ycwl/basic/mapper/MemberMapper.java +++ b/src/main/java/com/ycwl/basic/mapper/MemberMapper.java @@ -45,4 +45,6 @@ public interface MemberMapper { * @return */ int addScenicServiceNoticeStatus(@Param("scenicId") Long scenicId,@Param("memberId") Long memberId); + + MemberRespVO getByOpenId(String openId); } diff --git a/src/main/java/com/ycwl/basic/mapper/VideoMapper.java b/src/main/java/com/ycwl/basic/mapper/VideoMapper.java index 851571c..6eed441 100644 --- a/src/main/java/com/ycwl/basic/mapper/VideoMapper.java +++ b/src/main/java/com/ycwl/basic/mapper/VideoMapper.java @@ -48,4 +48,6 @@ public interface VideoMapper { int updateRelationWhenTaskSuccess(Long taskId, Long videoId, int isBuy); List listRelationByCreateTime(Date startTime, Date endTime); + + VideoEntity getEntity(Long videoId); } diff --git a/src/main/java/com/ycwl/basic/repository/VideoRepository.java b/src/main/java/com/ycwl/basic/repository/VideoRepository.java index de4e09c..7a898e2 100644 --- a/src/main/java/com/ycwl/basic/repository/VideoRepository.java +++ b/src/main/java/com/ycwl/basic/repository/VideoRepository.java @@ -1,5 +1,6 @@ package com.ycwl.basic.repository; +import com.alibaba.fastjson.JSON; import com.ycwl.basic.mapper.VideoMapper; import com.ycwl.basic.model.pc.video.entity.MemberVideoEntity; import com.ycwl.basic.model.pc.video.entity.VideoEntity; @@ -18,6 +19,33 @@ public class VideoRepository { @Autowired private VideoMapper videoMapper; + public static final String VIDEO_CACHE_KEY = "video:%s"; + public static final String VIDEO_BY_TASK_ID_CACHE_KEY = "video:task:%s"; + + public VideoEntity getVideo(Long videoId) { + if (redisTemplate.hasKey(String.format(VIDEO_CACHE_KEY, videoId))) { + return JSON.parseObject(redisTemplate.opsForValue().get(String.format(VIDEO_CACHE_KEY, videoId)), VideoEntity.class); + } + VideoEntity video = videoMapper.getEntity(videoId); + if (video != null) { + redisTemplate.opsForValue().set(String.format(VIDEO_CACHE_KEY, videoId), JSON.toJSONString(video)); + redisTemplate.opsForValue().set(String.format(VIDEO_BY_TASK_ID_CACHE_KEY, video.getTaskId()), JSON.toJSONString(video)); + } + return video; + } + + public VideoEntity getVideoByTaskId(Long taskId) { + if (redisTemplate.hasKey(String.format(VIDEO_BY_TASK_ID_CACHE_KEY, taskId))) { + return JSON.parseObject(redisTemplate.opsForValue().get(String.format(VIDEO_BY_TASK_ID_CACHE_KEY, taskId)), VideoEntity.class); + } + VideoEntity video = videoMapper.findByTaskId(taskId); + if (video != null) { + redisTemplate.opsForValue().set(String.format(VIDEO_BY_TASK_ID_CACHE_KEY, taskId), JSON.toJSONString(video)); + redisTemplate.opsForValue().set(String.format(VIDEO_CACHE_KEY, video.getId()), JSON.toJSONString(video)); + } + return video; + } + public void updateMeta(Long videoId, VideoInfoReq req) { VideoRespVO video = videoMapper.getById(videoId); if (video.getDuration() != null) { @@ -31,6 +59,7 @@ public class VideoRepository { update.setWidth(req.getWidth()); update.setDuration(req.getDuration()); videoMapper.updateMeta(update); + clearVideoCache(videoId); } public void setUserIsBuyItem(Long memberId, Long videoId, Long orderId) { @@ -58,4 +87,13 @@ public class VideoRepository { } return Integer.valueOf(1).equals(memberVideo.getIsBuy()); } + + public boolean clearVideoCache(Long videoId) { + if (redisTemplate.hasKey(String.format(VIDEO_CACHE_KEY, videoId))) { + VideoEntity video = getVideo(videoId); + redisTemplate.delete(String.format(VIDEO_CACHE_KEY, videoId)); + redisTemplate.delete(String.format(VIDEO_BY_TASK_ID_CACHE_KEY, video.getTaskId())); + } + return true; + } } diff --git a/src/main/java/com/ycwl/basic/repository/VideoTaskRepository.java b/src/main/java/com/ycwl/basic/repository/VideoTaskRepository.java index b9e34a9..dbb1cc8 100644 --- a/src/main/java/com/ycwl/basic/repository/VideoTaskRepository.java +++ b/src/main/java/com/ycwl/basic/repository/VideoTaskRepository.java @@ -1,13 +1,19 @@ package com.ycwl.basic.repository; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.ycwl.basic.mapper.TaskMapper; import com.ycwl.basic.mapper.VideoMapper; import com.ycwl.basic.model.pc.task.entity.TaskEntity; +import com.ycwl.basic.model.pc.task.resp.TaskRespVO; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; +import java.util.Date; +import java.util.Optional; import java.util.concurrent.TimeUnit; @Component @@ -34,4 +40,28 @@ public class VideoTaskRepository { public void clearTaskCache(Long taskId) { redisTemplate.delete(String.format(TASK_CACHE_KEY, taskId)); } + + + public Date getTaskShotDate(Long taskId) { + TaskRespVO taskRespVO = taskMapper.getById(taskId); + if (taskRespVO == null) { + return null; + } + Date shotTime = taskRespVO.getCreateTime(); + JSONObject paramJson = JSON.parseObject(taskRespVO.getTaskParams()); + if (paramJson != null) { + Optional any = paramJson.keySet().stream().filter(StringUtils::isNumeric).findAny(); + if (any.isPresent()) { + JSONArray jsonArray = paramJson.getJSONArray(any.get()); + if (!jsonArray.isEmpty()) { + JSONObject jsonObject = jsonArray.getJSONObject(0); + if (jsonObject.containsKey("createTime")) { + shotTime = new Date(jsonObject.getLong("createTime")); + } + } + } + } + return shotTime; + } + } 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 fdd5a92..31be58c 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 @@ -25,22 +25,20 @@ 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.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.resp.VideoRespVO; import com.ycwl.basic.repository.ScenicRepository; +import com.ycwl.basic.repository.VideoRepository; import com.ycwl.basic.repository.VideoTaskRepository; import com.ycwl.basic.service.mobile.AppScenicService; -import com.ycwl.basic.repository.TemplateRepository; import com.ycwl.basic.utils.ApiResponse; import com.ycwl.basic.utils.JwtTokenUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; -import java.math.BigDecimal; -import java.util.ArrayList; +import java.util.Collections; import java.util.List; -import java.util.Optional; import java.util.stream.Collectors; /** @@ -75,6 +73,8 @@ public class AppScenicServiceImpl implements AppScenicService { private TemplateBiz templateBiz; @Autowired private VideoTaskRepository videoTaskRepository; + @Autowired + private VideoRepository videoRepository; @Override public ApiResponse> pageQuery(ScenicReqQuery scenicReqQuery) { @@ -106,10 +106,10 @@ public class AppScenicServiceImpl implements AppScenicService { } @Override - public ApiResponse> faceContentList(Long userId, Long faceId) { + public List faceContentList(Long userId, Long faceId) { FaceRespVO faceRespVO = faceMapper.getById(faceId); if (faceRespVO == null) { - return ApiResponse.success(new ArrayList<>()); + return Collections.emptyList(); } List contentList = templateMapper.listFor(faceRespVO.getScenicId()); contentList.forEach(contentPageVO -> { @@ -119,9 +119,9 @@ public class AppScenicServiceImpl implements AppScenicService { if (!memberVideoEntityList.isEmpty()) { contentPageVO.setIsBuy(memberVideoEntityList.get(0).getIsBuy()); contentPageVO.setContentId(memberVideoEntityList.get(0).getVideoId()); - VideoRespVO videoMapperById = videoMapper.getById(contentPageVO.getContentId()); - if (videoMapperById != null) { - contentPageVO.setDuration(videoMapperById.getDuration()); + VideoEntity video = videoRepository.getVideo(contentPageVO.getContentId()); + if (video != null) { + contentPageVO.setDuration(video.getDuration()); contentPageVO.setLockType(-1); } else { TaskEntity taskById = videoTaskRepository.getTaskById(memberVideoEntityList.get(0).getTaskId()); @@ -198,7 +198,7 @@ public class AppScenicServiceImpl implements AppScenicService { } }); - return ApiResponse.success(contentList); + return contentList; } @Override @@ -231,7 +231,8 @@ public class AppScenicServiceImpl implements AppScenicService { @Override public ApiResponse> contentListUseDefaultFace() { FaceRespVO lastFaceByUserId = faceMapper.findLastFaceByUserId(BaseContextHandler.getUserId()); - return faceContentList(lastFaceByUserId.getMemberId(), lastFaceByUserId.getId()); + List contentPageVOS = faceContentList(lastFaceByUserId.getMemberId(), lastFaceByUserId.getId()); + return ApiResponse.success(contentPageVOS); } @Override 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 a2f9497..f4b908c 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 @@ -7,7 +7,6 @@ import com.ycwl.basic.biz.TaskStatusBiz; import com.ycwl.basic.constant.BaseContextHandler; import com.ycwl.basic.mapper.*; import com.ycwl.basic.model.mobile.goods.*; -import com.ycwl.basic.model.mobile.order.IsBuyRespVO; import com.ycwl.basic.model.mobile.order.PriceObj; import com.ycwl.basic.model.pc.face.entity.FaceEntity; import com.ycwl.basic.model.pc.face.resp.FaceRespVO; @@ -32,9 +31,6 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.math.BigDecimal; -import java.math.RoundingMode; -import java.text.DecimalFormat; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -141,7 +137,7 @@ public class GoodsServiceImpl implements GoodsService { } @Override - public ApiResponse> sourceGoodsList(Long userId, GoodsReqQuery query) { + public List sourceGoodsList(Long userId, GoodsReqQuery query) { Integer sourceType = query.getSourceType(); SourceReqQuery sourceReqQuery = new SourceReqQuery(); sourceReqQuery.setScenicId(query.getScenicId()); @@ -186,7 +182,7 @@ public class GoodsServiceImpl implements GoodsService { i++; } - return ApiResponse.success(goodsDetailVOList); + return goodsDetailVOList; } @Override 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 bcad224..c4462e2 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 @@ -8,7 +8,6 @@ import com.ycwl.basic.mapper.FaceSampleMapper; import com.ycwl.basic.mapper.SourceMapper; import com.ycwl.basic.mapper.StatisticsMapper; import com.ycwl.basic.mapper.FaceMapper; -import com.ycwl.basic.model.jwt.JwtInfo; import com.ycwl.basic.model.mobile.face.FaceRecognizeResp; import com.ycwl.basic.model.mobile.order.IsBuyRespVO; import com.ycwl.basic.model.mobile.statistic.req.StatisticsRecordAddReq; @@ -113,12 +112,8 @@ public class FaceServiceImpl implements FaceService { } @Override -// @Transactional(rollbackFor = Exception.class) - public ApiResponse faceUpload(MultipartFile file, Long scenicId) { - //获取用户id - JwtInfo worker = JwtTokenUtil.getWorker(); - Long userId = worker.getUserId(); - log.info("当前登录用户信息:{}",worker); + public FaceRecognizeResp faceUpload(MultipartFile file, Long scenicId, Long userId) { + //1、上传人脸照片 IStorageAdapter adapter = StorageFactory.use("faces"); @@ -188,7 +183,7 @@ public class FaceServiceImpl implements FaceService { resp.setUrl(faceUrl); resp.setFaceId(newFaceId); matchFaceId(newFaceId, oldFaceId == null); - return ApiResponse.success(resp); + return resp; } @Override diff --git a/src/main/java/com/ycwl/basic/service/impl/pc/OrderServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/pc/OrderServiceImpl.java index fb69173..1245065 100644 --- a/src/main/java/com/ycwl/basic/service/impl/pc/OrderServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/pc/OrderServiceImpl.java @@ -29,6 +29,8 @@ import com.ycwl.basic.model.pc.video.entity.VideoEntity; import com.ycwl.basic.model.pc.video.resp.VideoRespVO; import com.ycwl.basic.model.wx.WXPayOrderReqVO; import com.ycwl.basic.model.wx.WxPayRespVO; +import com.ycwl.basic.repository.VideoRepository; +import com.ycwl.basic.repository.VideoTaskRepository; import com.ycwl.basic.service.mobile.GoodsService; import com.ycwl.basic.service.mobile.WxPayService; import com.ycwl.basic.service.pc.OrderService; @@ -76,6 +78,10 @@ public class OrderServiceImpl implements OrderService { private OrderBiz orderBiz; @Autowired private TaskTaskServiceImpl taskTaskServiceImpl; + @Autowired + private VideoRepository videoRepository; + @Autowired + private VideoTaskRepository videoTaskRepository; @Override public ApiResponse> pageQuery(OrderReqQuery query) { @@ -109,9 +115,9 @@ public class OrderServiceImpl implements OrderService { } } else { item.setCoverList(Collections.singletonList(item.getCoverUrl())); - VideoRespVO videoMapperById = videoMapper.getById(item.getGoodsId()); + VideoEntity videoMapperById = videoRepository.getVideoByTaskId(item.getGoodsId()); if (videoMapperById != null) { - item.setShootingTime(taskTaskServiceImpl.getTaskShotDate(videoMapperById.getTaskId())); + item.setShootingTime(videoTaskRepository.getTaskShotDate(videoMapperById.getTaskId())); item.setVideoUrl(videoMapperById.getVideoUrl()); } } @@ -229,9 +235,9 @@ public class OrderServiceImpl implements OrderService { } } else { item.setCoverList(Collections.singletonList(item.getCoverUrl())); - VideoRespVO videoMapperById = videoMapper.getById(item.getGoodsId()); - if (videoMapperById != null) { - item.setShootingTime(taskTaskServiceImpl.getTaskShotDate(videoMapperById.getTaskId())); + VideoEntity video = videoRepository.getVideo(item.getGoodsId()); + if (video != null) { + item.setShootingTime(videoTaskRepository.getTaskShotDate(video.getTaskId())); } } }); diff --git a/src/main/java/com/ycwl/basic/service/impl/pc/VideoServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/pc/VideoServiceImpl.java index be1c35a..246c44c 100644 --- a/src/main/java/com/ycwl/basic/service/impl/pc/VideoServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/pc/VideoServiceImpl.java @@ -42,34 +42,4 @@ public class VideoServiceImpl implements VideoService { return ApiResponse.success(videoMapper.getById(id)); } - @Override - public ApiResponse add(VideoEntity video) { - video.setId(SnowFlakeUtil.getLongId()); - int i = videoMapper.add(video); - if (i > 0) { - return ApiResponse.success(true); - }else { - return ApiResponse.fail("成片新增失败"); - } - } - - @Override - public ApiResponse deleteById(Long id) { - int i = videoMapper.deleteById(id); - if (i > 0) { - return ApiResponse.success(true); - }else { - return ApiResponse.fail("成片删除失败"); - } - } - - @Override - public ApiResponse update(VideoEntity video) { - int i = videoMapper.update(video); - if (i > 0) { - return ApiResponse.success(true); - }else { - return ApiResponse.fail("成片修改失败"); - } - } } diff --git a/src/main/java/com/ycwl/basic/service/mobile/AppScenicService.java b/src/main/java/com/ycwl/basic/service/mobile/AppScenicService.java index abe3ccc..539dc4d 100644 --- a/src/main/java/com/ycwl/basic/service/mobile/AppScenicService.java +++ b/src/main/java/com/ycwl/basic/service/mobile/AppScenicService.java @@ -34,7 +34,7 @@ public interface AppScenicService { ApiResponse> scenicList(ScenicIndexVO scenicIndexVO); - ApiResponse> faceContentList(Long userId, Long faceId); + List faceContentList(Long userId, Long faceId); ApiResponse login(ScenicLoginReq scenicLoginReq) throws Exception; 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 a7d90b3..74262fc 100644 --- a/src/main/java/com/ycwl/basic/service/mobile/GoodsService.java +++ b/src/main/java/com/ycwl/basic/service/mobile/GoodsService.java @@ -25,7 +25,7 @@ public interface GoodsService { * @param query * @return */ - ApiResponse> sourceGoodsList(Long userId, GoodsReqQuery query); + List sourceGoodsList(Long userId, GoodsReqQuery query); /** * @param userId 商品(vlog)id diff --git a/src/main/java/com/ycwl/basic/service/pc/FaceService.java b/src/main/java/com/ycwl/basic/service/pc/FaceService.java index 9bcbcf3..94678e8 100644 --- a/src/main/java/com/ycwl/basic/service/pc/FaceService.java +++ b/src/main/java/com/ycwl/basic/service/pc/FaceService.java @@ -1,6 +1,7 @@ package com.ycwl.basic.service.pc; import com.github.pagehelper.PageInfo; +import com.ycwl.basic.model.mobile.face.FaceRecognizeResp; import com.ycwl.basic.model.pc.face.entity.FaceEntity; import com.ycwl.basic.model.pc.face.req.FaceReqQuery; import com.ycwl.basic.model.pc.face.resp.FaceRespVO; @@ -22,7 +23,7 @@ public interface FaceService { ApiResponse deleteById(Long id); ApiResponse deleteByIds(List ids); - ApiResponse faceUpload(MultipartFile file, Long scrnicId); + FaceRecognizeResp faceUpload(MultipartFile file, Long scenicId, Long userId); List listByUser(Long userId, String scenicId); SearchFaceRespVo matchFaceId(Long faceId); diff --git a/src/main/java/com/ycwl/basic/service/pc/VideoService.java b/src/main/java/com/ycwl/basic/service/pc/VideoService.java index ba7e73c..f06afd1 100644 --- a/src/main/java/com/ycwl/basic/service/pc/VideoService.java +++ b/src/main/java/com/ycwl/basic/service/pc/VideoService.java @@ -16,9 +16,6 @@ public interface VideoService { ApiResponse> pageQuery(VideoReqQuery videoReqQuery); ApiResponse> list(VideoReqQuery videoReqQuery); ApiResponse getById(Long id); - ApiResponse add(VideoEntity task); - ApiResponse deleteById(Long id); - ApiResponse update(VideoEntity task); } diff --git a/src/main/java/com/ycwl/basic/service/task/impl/TaskFaceServiceImpl.java b/src/main/java/com/ycwl/basic/service/task/impl/TaskFaceServiceImpl.java index 0c76f30..b702f46 100644 --- a/src/main/java/com/ycwl/basic/service/task/impl/TaskFaceServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/task/impl/TaskFaceServiceImpl.java @@ -316,8 +316,8 @@ public class TaskFaceServiceImpl implements TaskFaceService { listFaceEntitiesRequest.setOrder("asc"); try { IAcsClient client = getClient(); + AtomicBoolean flag = new AtomicBoolean(false); while (true) { - AtomicBoolean flag = new AtomicBoolean(false); ListFaceEntitiesResponse listFaceEntitiesResponse = client.getAcsResponse(listFaceEntitiesRequest); if (listFaceEntitiesResponse == null || listFaceEntitiesResponse.getData() == null || listFaceEntitiesResponse.getData().getEntities() == null || listFaceEntitiesResponse.getData().getEntities().isEmpty()) { break; @@ -346,6 +346,8 @@ public class TaskFaceServiceImpl implements TaskFaceService { }); if (!flag.get()) { break; + } else { + flag.set(false); } } } catch (Exception ignored) { diff --git a/src/main/java/com/ycwl/basic/service/task/impl/TaskTaskServiceImpl.java b/src/main/java/com/ycwl/basic/service/task/impl/TaskTaskServiceImpl.java index 673ba14..6785a6b 100644 --- a/src/main/java/com/ycwl/basic/service/task/impl/TaskTaskServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/task/impl/TaskTaskServiceImpl.java @@ -438,6 +438,8 @@ public class TaskTaskServiceImpl implements TaskService { } List videoSourceList = sourceMapper.listVideoByScenicFaceRelation(face.getScenicId(), faceId); Map> sourcesMap = videoSourceList.stream() + .filter(Objects::nonNull) + .filter(item -> Objects.nonNull(item.getVideoUrl())) .peek(item -> item.setUrl(item.getVideoUrl())) .filter(item -> { DeviceEntity device = deviceRepository.getDevice(item.getDeviceId()); @@ -555,6 +557,7 @@ public class TaskTaskServiceImpl implements TaskService { video.setDuration(req.getVideoInfo().getDuration()); } videoMapper.update(video); + videoRepository.clearVideoCache(video.getId()); } else { video = new VideoEntity(); video.setId(SnowFlakeUtil.getLongId()); diff --git a/src/main/java/com/ycwl/basic/task/FaceCleaner.java b/src/main/java/com/ycwl/basic/task/FaceCleaner.java index d6861e2..0912837 100644 --- a/src/main/java/com/ycwl/basic/task/FaceCleaner.java +++ b/src/main/java/com/ycwl/basic/task/FaceCleaner.java @@ -27,6 +27,7 @@ import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; +import java.util.Objects; @Component @EnableScheduling @@ -139,7 +140,7 @@ public class FaceCleaner { IStorageAdapter adapter = StorageFactory.use("assets-ext"); List fileObjectList = adapter.listDir("video-source"); fileObjectList.parallelStream().forEach(fileObject -> { - if (list.parallelStream().noneMatch(videoRespVO -> videoRespVO.getVideoUrl().contains(fileObject.getFullPath()))){ + if (list.parallelStream().filter(videoRespVO -> Objects.nonNull(videoRespVO.getVideoUrl())).noneMatch(videoRespVO -> videoRespVO.getVideoUrl().contains(fileObject.getFullPath()))){ log.info("删除视频文件:{}", fileObject); adapter.deleteFile(fileObject.getFullPath()); } else { diff --git a/src/main/resources/mapper/MemberMapper.xml b/src/main/resources/mapper/MemberMapper.xml index 25dd2e6..de16788 100644 --- a/src/main/resources/mapper/MemberMapper.xml +++ b/src/main/resources/mapper/MemberMapper.xml @@ -132,4 +132,21 @@ from scenic_notification where member_id = #{memberId} and scenic_id = #{scenicId} + \ No newline at end of file diff --git a/src/main/resources/mapper/StatisticsMapper.xml b/src/main/resources/mapper/StatisticsMapper.xml index a6fb9a1..3eb55b2 100644 --- a/src/main/resources/mapper/StatisticsMapper.xml +++ b/src/main/resources/mapper/StatisticsMapper.xml @@ -47,6 +47,7 @@ and create_time <= #{endTime} + group by member_id ) AS subquery; + \ No newline at end of file