From f86025bf472a067d509bc0acc4b1402643f6ee6d Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Sun, 29 Dec 2024 18:06:57 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../basic/controller/pc/SourceController.java | 5 +- .../com/ycwl/basic/mapper/SourceMapper.java | 6 +++ .../pc/source/entity/MemberSourceEntity.java | 14 ++++++ .../service/impl/mobile/GoodsServiceImpl.java | 2 +- .../service/impl/pc/SourceServiceImpl.java | 4 +- .../ycwl/basic/service/pc/SourceService.java | 2 +- .../com/ycwl/basic/task/VideoPieceGetter.java | 24 ++++++++-- src/main/resources/mapper/SourceMapper.xml | 46 ++++++++++++++----- 8 files changed, 83 insertions(+), 20 deletions(-) create mode 100644 src/main/java/com/ycwl/basic/model/pc/source/entity/MemberSourceEntity.java diff --git a/src/main/java/com/ycwl/basic/controller/pc/SourceController.java b/src/main/java/com/ycwl/basic/controller/pc/SourceController.java index 42d779b..fb77f92 100644 --- a/src/main/java/com/ycwl/basic/controller/pc/SourceController.java +++ b/src/main/java/com/ycwl/basic/controller/pc/SourceController.java @@ -1,9 +1,11 @@ package com.ycwl.basic.controller.pc; +import com.ycwl.basic.model.jwt.JwtInfo; import com.ycwl.basic.model.pc.source.entity.SourceEntity; import com.ycwl.basic.model.pc.source.req.SourceReqQuery; import com.ycwl.basic.service.pc.SourceService; import com.ycwl.basic.utils.ApiResponse; +import com.ycwl.basic.utils.JwtTokenUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -34,7 +36,8 @@ public class SourceController { @ApiOperation("查询视频源详情") @GetMapping("getDetail/{id}") public ApiResponse getById(@PathVariable Long id) { - return sourceService.getById(id); + JwtInfo worker = JwtTokenUtil.getWorker(); + return sourceService.getById(id, worker.getUserId()); } @ApiOperation("添加视频源") @PostMapping("/add") diff --git a/src/main/java/com/ycwl/basic/mapper/SourceMapper.java b/src/main/java/com/ycwl/basic/mapper/SourceMapper.java index 9ad1e39..a1897f9 100644 --- a/src/main/java/com/ycwl/basic/mapper/SourceMapper.java +++ b/src/main/java/com/ycwl/basic/mapper/SourceMapper.java @@ -1,5 +1,6 @@ package com.ycwl.basic.mapper; +import com.ycwl.basic.model.pc.source.entity.MemberSourceEntity; import com.ycwl.basic.model.pc.source.entity.SourceEntity; import com.ycwl.basic.model.pc.source.req.SourceReqQuery; import com.ycwl.basic.model.pc.source.resp.SourceRespVO; @@ -17,6 +18,7 @@ public interface SourceMapper { List list(SourceReqQuery sourceReqQuery); SourceRespVO getById(Long id); + SourceRespVO userGetById(Long id, Long userId); List listBySampleIds(List sourceIds); @@ -43,4 +45,8 @@ public interface SourceMapper { List listVideoBySampleIds(List sampleId); SourceEntity findBySampleId(Long faceSampleId); + + int addRelation(MemberSourceEntity source); + + List listUser(SourceReqQuery sourceReqQuery); } diff --git a/src/main/java/com/ycwl/basic/model/pc/source/entity/MemberSourceEntity.java b/src/main/java/com/ycwl/basic/model/pc/source/entity/MemberSourceEntity.java new file mode 100644 index 0000000..3ec4132 --- /dev/null +++ b/src/main/java/com/ycwl/basic/model/pc/source/entity/MemberSourceEntity.java @@ -0,0 +1,14 @@ +package com.ycwl.basic.model.pc.source.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +@Data +@TableName("member_source") +public class MemberSourceEntity { + private Long id; + private Long memberId; + private Integer type; + private Long sourceId; + private Integer isBuy; +} 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 17bb19b..080a0c5 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 @@ -104,7 +104,7 @@ public class GoodsServiceImpl implements GoodsService { sourceReqQuery.setIsBuy(query.getIsBuy()); sourceReqQuery.setMemberId(query.getMemberId()); sourceReqQuery.setType(sourceType); - List list = sourceMapper.list(sourceReqQuery); + List list = sourceMapper.listUser(sourceReqQuery); List goodsDetailVOList = new ArrayList<>(); String goodsNamePrefix = ""; diff --git a/src/main/java/com/ycwl/basic/service/impl/pc/SourceServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/pc/SourceServiceImpl.java index 6067464..9330956 100644 --- a/src/main/java/com/ycwl/basic/service/impl/pc/SourceServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/pc/SourceServiceImpl.java @@ -37,8 +37,8 @@ public class SourceServiceImpl implements SourceService { } @Override - public ApiResponse getById(Long id) { - return ApiResponse.success(sourceMapper.getById(id)); + public ApiResponse getById(Long id, Long userId) { + return ApiResponse.success(sourceMapper.userGetById(id, userId)); } @Override diff --git a/src/main/java/com/ycwl/basic/service/pc/SourceService.java b/src/main/java/com/ycwl/basic/service/pc/SourceService.java index af2983a..b91ddaf 100644 --- a/src/main/java/com/ycwl/basic/service/pc/SourceService.java +++ b/src/main/java/com/ycwl/basic/service/pc/SourceService.java @@ -15,7 +15,7 @@ import java.util.List; public interface SourceService { ApiResponse> pageQuery(SourceReqQuery sourceReqQuery); ApiResponse> list(SourceReqQuery sourceReqQuery); - ApiResponse getById(Long id); + ApiResponse getById(Long id, Long userId); ApiResponse add(SourceEntity source); ApiResponse deleteById(Long id); ApiResponse update(SourceEntity source); diff --git a/src/main/java/com/ycwl/basic/task/VideoPieceGetter.java b/src/main/java/com/ycwl/basic/task/VideoPieceGetter.java index dd0f8bf..8582843 100644 --- a/src/main/java/com/ycwl/basic/task/VideoPieceGetter.java +++ b/src/main/java/com/ycwl/basic/task/VideoPieceGetter.java @@ -9,6 +9,7 @@ import com.ycwl.basic.mapper.SourceMapper; import com.ycwl.basic.model.pc.device.entity.DeviceConfigEntity; import com.ycwl.basic.model.pc.device.entity.DeviceEntity; import com.ycwl.basic.model.pc.faceSample.resp.FaceSampleRespVO; +import com.ycwl.basic.model.pc.source.entity.MemberSourceEntity; import com.ycwl.basic.model.pc.source.entity.SourceEntity; import com.ycwl.basic.storage.StorageFactory; import com.ycwl.basic.storage.adapters.IStorageAdapter; @@ -110,7 +111,11 @@ public class VideoPieceGetter { new Date(task.getCreateTime().getTime() - cutPre.multiply(BigDecimal.valueOf(1000)).longValue()), new Date(task.getCreateTime().getTime() + cutPost.multiply(BigDecimal.valueOf(1000)).longValue()) ); - long offset = task.getCreateTime().getTime() - listByDtRange.get(0).getCreateTime().getTime(); + if (listByDtRange.isEmpty()) { + log.warn("没有可用的文件"); + return; + } + long offset = task.getCreateTime().getTime() - listByDtRange.get(0).getCreateTime().getTime() - cutPre.multiply(BigDecimal.valueOf(1000)).longValue(); FfmpegTask ffmpegTask = new FfmpegTask(); ffmpegTask.setFileList(listByDtRange); ffmpegTask.setDuration(duration); @@ -128,10 +133,19 @@ public class VideoPieceGetter { SourceEntity imgSource = sourceMapper.findBySampleId(faceSample.getId()); SourceEntity sourceEntity = new SourceEntity(); sourceEntity.setId(SnowFlakeUtil.getLongId()); + MemberSourceEntity videoSource = new MemberSourceEntity(); + MemberSourceEntity imageSource = new MemberSourceEntity(); + videoSource.setMemberId(task.getMemberId()); + videoSource.setType(1); + videoSource.setIsBuy(0); + videoSource.setSourceId(sourceEntity.getId()); + imageSource.setMemberId(task.getMemberId()); + imageSource.setType(2); + imageSource.setIsBuy(0); if (imgSource != null) { + imageSource.setSourceId(imgSource.getId()); sourceEntity.setUrl(imgSource.getUrl()); sourceEntity.setPosJson(imgSource.getPosJson()); - sourceEntity.setMemberId(imgSource.getMemberId()); } sourceEntity.setVideoUrl(url); sourceEntity.setFaceSampleId(faceSample.getId()); @@ -140,6 +154,10 @@ public class VideoPieceGetter { sourceEntity.setDeviceId(faceSample.getDeviceId()); sourceEntity.setType(1); sourceMapper.add(sourceEntity); + sourceMapper.addRelation(videoSource); + if (imgSource != null) { + sourceMapper.addRelation(imageSource); + } } public boolean startFfmpegTask(FfmpegTask task) { @@ -319,7 +337,7 @@ public class VideoPieceGetter { ffmpegCmd.add("-filter_complex"); ffmpegCmd.add( IntStream.range(0, inputFiles.size()).mapToObj(i -> "[" + i + ":v]").collect(Collectors.joining("")) + - "concat=n=2:v=1[v]" + "concat=n="+inputFiles.size()+":v=1[v]" ); ffmpegCmd.add("-map"); ffmpegCmd.add("[v]"); diff --git a/src/main/resources/mapper/SourceMapper.xml b/src/main/resources/mapper/SourceMapper.xml index 4e18acc..193556e 100644 --- a/src/main/resources/mapper/SourceMapper.xml +++ b/src/main/resources/mapper/SourceMapper.xml @@ -2,15 +2,18 @@ - insert into source(id, scenic_id, device_id, member_id, url, video_url, `type`, face_sample_id, pos_json) - values (#{id}, #{scenicId}, #{deviceId}, #{memberId}, #{url}, #{videoUrl}, #{type}, #{faceSampleId}, #{posJson}) + insert into source(id, scenic_id, device_id, url, video_url, `type`, face_sample_id, pos_json) + values (#{id}, #{scenicId}, #{deviceId}, #{url}, #{videoUrl}, #{type}, #{faceSampleId}, #{posJson}) + + + insert member_source(member_id, source_id, is_buy, type) + values (#{memberId}, #{sourceId}, #{isBuy}, #{type}) update source scenic_id = #{scenicId}, device_id = #{deviceId}, - member_id = #{memberId}, url = #{url}, video_url = #{videoUrl}, is_buy = #{isBuy}, @@ -31,7 +34,6 @@ and scenic_id = #{scenicId} and device_id = #{deviceId} - and member_id = #{memberId} and url = #{url} and is_buy = #{isBuy} @@ -43,27 +45,33 @@ order by so.create_time desc + +