From e70098bf2937f0f10be83e7a4cc768e17ef579d8 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Fri, 17 Jan 2025 12:16:22 +0800 Subject: [PATCH] 2 --- .../com/ycwl/basic/mapper/SourceMapper.java | 3 +- .../model/pc/order/resp/OrderItemVO.java | 2 + .../service/impl/pc/OrderServiceImpl.java | 34 +++++++++++ .../task/impl/TaskFaceServiceImpl.java | 60 +++++++++++++++++-- .../ycwl/basic/task/DynamicTaskGenerator.java | 2 +- src/main/resources/mapper/SourceMapper.xml | 8 ++- 6 files changed, 100 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/ycwl/basic/mapper/SourceMapper.java b/src/main/java/com/ycwl/basic/mapper/SourceMapper.java index fbb9cb5..62162be 100644 --- a/src/main/java/com/ycwl/basic/mapper/SourceMapper.java +++ b/src/main/java/com/ycwl/basic/mapper/SourceMapper.java @@ -62,6 +62,7 @@ public interface SourceMapper { int hasRelationTo(Long memberId, Long sourceId, int type); List listVideoByScenicFaceRelation(Long scenicId, Long faceId); - List listVideoByFaceRelation(Long faceId); + List listVideoByFaceRelation(Long memberId, Long faceId); + List listImageByFaceRelation(Long memberId, Long faceId); } diff --git a/src/main/java/com/ycwl/basic/model/pc/order/resp/OrderItemVO.java b/src/main/java/com/ycwl/basic/model/pc/order/resp/OrderItemVO.java index 9876869..c0c1972 100644 --- a/src/main/java/com/ycwl/basic/model/pc/order/resp/OrderItemVO.java +++ b/src/main/java/com/ycwl/basic/model/pc/order/resp/OrderItemVO.java @@ -7,6 +7,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.Date; +import java.util.List; /** * @Author:longbinbin @@ -44,4 +45,5 @@ public class OrderItemVO { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; private Date shootingTime; + private List coverList; } 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 9932192..e2273b2 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 @@ -24,12 +24,15 @@ import com.ycwl.basic.model.pc.order.resp.OrderItemVO; import com.ycwl.basic.model.pc.order.resp.OrderRespVO; import com.ycwl.basic.model.pc.orderOp.entity.OrderOperationEntity; import com.ycwl.basic.model.pc.source.entity.SourceEntity; +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.model.wx.WXPayOrderReqVO; import com.ycwl.basic.model.wx.WxPayRespVO; import com.ycwl.basic.service.mobile.GoodsService; import com.ycwl.basic.service.mobile.WxPayService; import com.ycwl.basic.service.pc.OrderService; +import com.ycwl.basic.service.task.impl.TaskTaskServiceImpl; import com.ycwl.basic.utils.ApiResponse; import com.ycwl.basic.utils.BigDecimalUtil; import com.ycwl.basic.utils.SnowFlakeUtil; @@ -40,9 +43,11 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.ArrayList; +import java.util.Collections; import java.util.Date; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; /** * @Author:longbinbin @@ -69,6 +74,8 @@ public class OrderServiceImpl implements OrderService { private StatisticsMapper statisticsMapper; @Autowired private OrderBiz orderBiz; + @Autowired + private TaskTaskServiceImpl taskTaskServiceImpl; @Override public ApiResponse> pageQuery(OrderReqQuery query) { @@ -214,6 +221,33 @@ public class OrderServiceImpl implements OrderService { public ApiResponse> appPageQuery(OrderAppPageReq orderReqQuery) { PageHelper.startPage(orderReqQuery.getPageNum(), orderReqQuery.getPageSize()); List list = orderMapper.appList(orderReqQuery); + list.forEach(order -> { + List orderItemList = order.getOrderItemList(); + if (orderItemList == null) { + return; + } + orderItemList.forEach(item -> { + if (Integer.valueOf(1).equals(item.getGoodsType())) { // 原片 + List memberVideoEntityList = sourceMapper.listVideoByFaceRelation(orderReqQuery.getMemberId(), item.getFaceId()); + item.setCoverList(memberVideoEntityList.stream().map(SourceEntity::getUrl).collect(Collectors.toList())); + if (!memberVideoEntityList.isEmpty()) { + item.setShootingTime(memberVideoEntityList.get(0).getCreateTime()); + } + } else if (Integer.valueOf(2).equals(item.getGoodsType())) { + List memberVideoEntityList = sourceMapper.listImageByFaceRelation(orderReqQuery.getMemberId(), item.getFaceId()); + item.setCoverList(memberVideoEntityList.stream().map(SourceEntity::getUrl).collect(Collectors.toList())); + if (!memberVideoEntityList.isEmpty()) { + item.setShootingTime(memberVideoEntityList.get(0).getCreateTime()); + } + } else { + item.setCoverList(Collections.singletonList(item.getCoverUrl())); + VideoRespVO videoMapperById = videoMapper.getById(item.getGoodsId()); + if (videoMapperById != null) { + item.setShootingTime(taskTaskServiceImpl.getTaskShotDate(videoMapperById.getTaskId())); + } + } + }); + }); PageInfo pageInfo = new PageInfo<>(list); return ApiResponse.success(pageInfo); } 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 854a66c..b876cd0 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 @@ -15,6 +15,7 @@ import com.aliyuncs.facebody.model.v20191230.ListFaceEntitiesRequest; import com.aliyuncs.facebody.model.v20191230.ListFaceEntitiesResponse; import com.aliyuncs.facebody.model.v20191230.SearchFaceRequest; import com.aliyuncs.facebody.model.v20191230.SearchFaceResponse; +import com.ycwl.basic.biz.OrderBiz; import com.ycwl.basic.config.FaceDetectConfig; import com.ycwl.basic.constant.FaceConstant; import com.ycwl.basic.exception.BaseException; @@ -22,6 +23,8 @@ import com.ycwl.basic.mapper.FaceDetectLogMapper; import com.ycwl.basic.mapper.FaceMapper; import com.ycwl.basic.mapper.FaceSampleMapper; import com.ycwl.basic.mapper.ScenicMapper; +import com.ycwl.basic.mapper.SourceMapper; +import com.ycwl.basic.model.mobile.order.IsBuyRespVO; import com.ycwl.basic.model.pc.face.entity.FaceEntity; import com.ycwl.basic.model.pc.face.resp.FaceRespVO; import com.ycwl.basic.model.pc.faceDetectLog.entity.FaceDetectLog; @@ -30,6 +33,8 @@ import com.ycwl.basic.model.pc.faceSample.entity.FaceSampleEntity; import com.ycwl.basic.model.pc.faceSample.req.FaceSampleReqQuery; import com.ycwl.basic.model.pc.faceSample.resp.FaceSampleRespVO; import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity; +import com.ycwl.basic.model.pc.source.entity.MemberSourceEntity; +import com.ycwl.basic.model.pc.source.entity.SourceEntity; import com.ycwl.basic.model.task.resp.AddFaceSampleRespVo; import com.ycwl.basic.model.task.resp.SearchFaceRespVo; import com.ycwl.basic.repository.FaceRepository; @@ -37,6 +42,7 @@ import com.ycwl.basic.service.task.TaskFaceService; import com.ycwl.basic.storage.StorageFactory; import com.ycwl.basic.storage.adapters.IStorageAdapter; import com.ycwl.basic.storage.utils.StorageUtil; +import com.ycwl.basic.task.VideoPieceGetter; import com.ycwl.basic.utils.DateUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -55,6 +61,7 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Random; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -75,6 +82,10 @@ public class TaskFaceServiceImpl implements TaskFaceService { private FaceDetectLogMapper logMapper; @Autowired private FaceRepository faceRepository; + @Autowired + private SourceMapper sourceMapper; + @Autowired + private OrderBiz orderBiz; private IAcsClient getClient() { DefaultProfile profile = DefaultProfile.getProfile( @@ -86,7 +97,13 @@ public class TaskFaceServiceImpl implements TaskFaceService { @Override public SearchFaceRespVo searchFace(Long faceId) { FaceRespVO faceRespVO = faceMapper.getById(faceId); - SearchFaceRespVo respVo = searchFace(faceRespVO.getScenicId().toString(), faceRespVO.getFaceUrl()); + if (faceRespVO == null) { + SearchFaceRespVo vo = new SearchFaceRespVo(); + vo.setSampleListIds(new ArrayList<>()); + return vo; + } + Long scenicId = faceRespVO.getScenicId(); + SearchFaceRespVo respVo = searchFace(scenicId.toString(), faceRespVO.getFaceUrl()); if (respVo != null) { FaceEntity faceEntity = new FaceEntity(); faceEntity.setId(faceId); @@ -96,6 +113,35 @@ public class TaskFaceServiceImpl implements TaskFaceService { faceEntity.setMatchSampleIds(StringUtils.join(respVo.getSampleListIds(), ",")); faceMapper.update(faceEntity); faceRepository.clearFaceCache(faceId); + List sampleListIds = respVo.getSampleListIds(); + if (sampleListIds != null && !sampleListIds.isEmpty()) {// 匹配原片:照片 + List sourceEntities = sourceMapper.listBySampleIds(sampleListIds); + List memberSourceEntityList = sourceEntities.stream().map(sourceEntity -> { + MemberSourceEntity memberSourceEntity = new MemberSourceEntity(); + memberSourceEntity.setScenicId(scenicId); + memberSourceEntity.setFaceId(faceEntity.getId()); + memberSourceEntity.setMemberId(faceRespVO.getMemberId()); + memberSourceEntity.setSourceId(sourceEntity.getId()); + memberSourceEntity.setType(sourceEntity.getType()); + IsBuyRespVO isBuy = orderBiz.isBuy(faceRespVO.getMemberId(), scenicId, sourceEntity.getType(), sourceEntity.getId()); + if (isBuy.isBuy()) { // 如果用户买过 + memberSourceEntity.setIsBuy(1); + } else if (isBuy.isFree()) { // 全免费逻辑 + memberSourceEntity.setIsBuy(1); + } else { + memberSourceEntity.setIsBuy(0); + } + return memberSourceEntity; + }).collect(Collectors.toList()); + if (!memberSourceEntityList.isEmpty()) { + sourceMapper.addRelations(memberSourceEntityList); + VideoPieceGetter.Task task = new VideoPieceGetter.Task(); + task.faceId = faceEntity.getId(); + task.faceSampleIds = sampleListIds; + task.memberId = faceRespVO.getMemberId(); + VideoPieceGetter.addTask(task); + } + } } return respVo; } @@ -378,17 +424,19 @@ public class TaskFaceServiceImpl implements TaskFaceService { } - private static final String DATE_FORMAT="yyyyMMddHHmmssSSS"; + private static final String DATE_FORMAT="yyyyMMddHHmmss"; public static String generateEntityId(FaceSampleEntity entity) { SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT); - String entityId = entity.getDeviceId().toString() + "_" + sdf.format(entity.getCreateAt()); - return entityId; + Random random = new Random(); + int randomNumber = random.nextInt(900) + 100; + return entity.getDeviceId().toString() + "_" + sdf.format(entity.getCreateAt()) + randomNumber; } public static String generateEntityId(FaceSampleRespVO entity) { SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT); - String entityId = entity.getDeviceId().toString() + "_" + sdf.format(entity.getCreateAt()); - return entityId; + Random random = new Random(); + int randomNumber = random.nextInt(900) + 100; + return entity.getDeviceId().toString() + "_" + sdf.format(entity.getCreateAt()) + randomNumber; } public String getFaceUrl(Long faceId) { diff --git a/src/main/java/com/ycwl/basic/task/DynamicTaskGenerator.java b/src/main/java/com/ycwl/basic/task/DynamicTaskGenerator.java index 5a23337..302ee22 100644 --- a/src/main/java/com/ycwl/basic/task/DynamicTaskGenerator.java +++ b/src/main/java/com/ycwl/basic/task/DynamicTaskGenerator.java @@ -155,7 +155,7 @@ public class DynamicTaskGenerator { public static void addTask(Long faceSampleId) { Date createTime = new Date(); // 两分钟后 - createTime.setTime(createTime.getTime() + 80000L); + createTime.setTime(createTime.getTime() + 30000L); queue.add(new Task(faceSampleId, createTime)); } diff --git a/src/main/resources/mapper/SourceMapper.xml b/src/main/resources/mapper/SourceMapper.xml index 20c6de0..7f2b91d 100644 --- a/src/main/resources/mapper/SourceMapper.xml +++ b/src/main/resources/mapper/SourceMapper.xml @@ -160,7 +160,7 @@ select s.* from member_source ms left join source s on ms.source_id = s.id - where ms.face_id = #{faceId} and ms.type = 1 + where ms.face_id = #{faceId} and ms.member_id = #{memberId} and ms.type = 1 order by create_time desc +