From a329100212be8897ca7df390b054f1949eb0085c Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Wed, 8 Jan 2025 14:45:17 +0800 Subject: [PATCH] =?UTF-8?q?bug=E4=BF=AE=E5=A4=8D=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/mobile/AppGoodsController.java | 3 +- .../model/mobile/goods/GoodsReqQuery.java | 2 - .../impl/mobile/AppScenicServiceImpl.java | 69 +++++---- .../service/impl/mobile/GoodsServiceImpl.java | 144 ++++++++++-------- .../service/impl/pc/FaceServiceImpl.java | 2 +- .../basic/service/mobile/GoodsService.java | 4 +- src/main/resources/mapper/SourceMapper.xml | 2 + src/main/resources/mapper/VideoMapper.xml | 6 +- 8 files changed, 124 insertions(+), 108 deletions(-) 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 2de7738..01a87f0 100644 --- a/src/main/java/com/ycwl/basic/controller/mobile/AppGoodsController.java +++ b/src/main/java/com/ycwl/basic/controller/mobile/AppGoodsController.java @@ -41,8 +41,7 @@ public class AppGoodsController { @ApiOperation("源素材(原片/照片)商品列表") @PostMapping("/sourceGoodsList") public ApiResponse> sourceGoodsList(@RequestBody GoodsReqQuery query) { - query.setMemberId(Long.valueOf(BaseContextHandler.getUserId())); - return goodsService.sourceGoodsList(query); + return goodsService.sourceGoodsList(Long.valueOf(BaseContextHandler.getUserId()), query); } @ApiOperation("成片vlog商品详情") diff --git a/src/main/java/com/ycwl/basic/model/mobile/goods/GoodsReqQuery.java b/src/main/java/com/ycwl/basic/model/mobile/goods/GoodsReqQuery.java index dccb6dc..9df1732 100644 --- a/src/main/java/com/ycwl/basic/model/mobile/goods/GoodsReqQuery.java +++ b/src/main/java/com/ycwl/basic/model/mobile/goods/GoodsReqQuery.java @@ -14,8 +14,6 @@ public class GoodsReqQuery { @ApiModelProperty("是否已购买 0否 1是") private Integer isBuy; private Long faceId; - @ApiModelProperty(value = "用户id", hidden = true) - private Long memberId; @ApiModelProperty("景区id") private Long scenicId; @ApiModelProperty("源素材商品类型 1视频 2图像") 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 60870f2..acc0a72 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 @@ -7,6 +7,7 @@ import com.ycwl.basic.biz.OrderBiz; import com.ycwl.basic.constant.BaseContextHandler; import com.ycwl.basic.mapper.*; import com.ycwl.basic.model.jwt.JwtInfo; +import com.ycwl.basic.model.mobile.goods.GoodsPageVO; import com.ycwl.basic.model.mobile.order.IsBuyRespVO; import com.ycwl.basic.model.mobile.scenic.ScenicAppVO; import com.ycwl.basic.model.mobile.scenic.ScenicDeviceCountVO; @@ -36,6 +37,7 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; /** * @Author:longbinbin @@ -132,40 +134,45 @@ public class AppScenicServiceImpl implements AppScenicService { SourceReqQuery sourceReqQuery = new SourceReqQuery(); sourceReqQuery.setScenicId(faceRespVO.getScenicId()); + sourceReqQuery.setFaceId(faceId); sourceReqQuery.setMemberId(userId); //查询源素材 - List sourceList = sourceMapper.listGroupByType(sourceReqQuery); + List sourceList = sourceMapper.queryByRelation(sourceReqQuery); ScenicConfigEntity scenicConfig = scenicRepository.getScenicConfig(faceRespVO.getScenicId()); - sourceList.stream().filter(item -> { - if (item.getType() == 1) { - if (Integer.valueOf(1).equals(scenicConfig.getDisableSourceVideo())) { - return false; - } - } else if (item.getType() == 2) { - if (Integer.valueOf(1).equals(scenicConfig.getDisableSourceImage())) { - return false; - } - } - return true; - }).forEach(sourceRespVO -> { - ContentPageVO contentPageVO = new ContentPageVO(); - Integer type = sourceRespVO.getType(); - if(type==1){ - contentPageVO.setName("原片集"); - } else { - contentPageVO.setName("照片集"); - } - IsBuyRespVO isBuyRespVO = orderBiz.isBuy(userId, faceRespVO.getScenicId(), type, faceId); - contentPageVO.setSourceType(isBuyRespVO.getGoodsType()); - contentPageVO.setContentId(isBuyRespVO.getGoodsId()); - if (isBuyRespVO.isBuy()) { - contentPageVO.setIsBuy(1); - } else { - contentPageVO.setIsBuy(0); - } - contentPageVO.setContentType(2); - contentList.add(contentPageVO); - }); + sourceList.stream().collect(Collectors.groupingBy(SourceRespVO::getType)).keySet() + .stream() + .filter(type -> { + if (Integer.valueOf(1).equals(type)) { + if (Integer.valueOf(1).equals(scenicConfig.getDisableSourceVideo())) { + return false; + } + } else if (Integer.valueOf(2).equals(type)) { + if (Integer.valueOf(1).equals(scenicConfig.getDisableSourceImage())) { + return false; + } + } + return true; + }) + .forEach(type -> { + ContentPageVO contentPageVO = new ContentPageVO(); + if (type == 1) { + contentPageVO.setName("原片集"); + } else { + contentPageVO.setName("照片集"); + } + IsBuyRespVO isBuyRespVO = orderBiz.isBuy(userId, faceRespVO.getScenicId(), type, faceId); + contentPageVO.setSourceType(isBuyRespVO.getGoodsType()); + contentPageVO.setContentId(isBuyRespVO.getGoodsId()); + if (isBuyRespVO.isBuy()) { + contentPageVO.setIsBuy(1); + } else { + contentPageVO.setIsBuy(0); + } + contentPageVO.setScenicId(faceRespVO.getScenicId()); + contentPageVO.setTemplateCoverUrl(sourceList.get(0).getUrl()); + contentPageVO.setContentType(2); + contentList.add(contentPageVO); + }); return ApiResponse.success(contentList); } 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 491753c..362d8f5 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 @@ -1,23 +1,21 @@ package com.ycwl.basic.service.impl.mobile; import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.ycwl.basic.constant.BaseContextHandler; import com.ycwl.basic.mapper.*; import com.ycwl.basic.model.mobile.goods.*; import com.ycwl.basic.model.pc.face.resp.FaceRespVO; +import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity; 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.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.req.VideoReqQuery; import com.ycwl.basic.model.pc.video.resp.VideoRespVO; +import com.ycwl.basic.repository.ScenicRepository; import com.ycwl.basic.repository.VideoTaskRepository; -import com.ycwl.basic.service.impl.pc.TaskServiceImpl; -import com.ycwl.basic.service.impl.task.TaskTaskServiceImpl; import com.ycwl.basic.service.mobile.GoodsService; import com.ycwl.basic.repository.TemplateRepository; import com.ycwl.basic.service.task.TaskService; @@ -31,66 +29,80 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.text.DecimalFormat; import java.util.ArrayList; -import java.util.Date; import java.util.List; -import java.util.Optional; import java.util.stream.Collectors; /** * @Author:longbinbin * @Date:2024/12/5 15:04 - */@Service + */ +@Service public class GoodsServiceImpl implements GoodsService { - @Autowired - private VideoMapper videoMapper; - @Autowired - private SourceMapper sourceMapper; - @Autowired - private ScenicMapper scenicMapper; + @Autowired + private VideoMapper videoMapper; + @Autowired + private SourceMapper sourceMapper; + @Autowired + private ScenicMapper scenicMapper; @Autowired private FaceMapper faceMapper; - @Autowired - private TemplateRepository templateRepository; + @Autowired + private TemplateRepository templateRepository; @Autowired private VideoTaskRepository videoTaskRepository; @Autowired private TaskService taskTaskService; + @Autowired + private ScenicRepository scenicRepository; public ApiResponse> goodsList(GoodsReqQuery query) { - //查询原素材 - List goodsList = new ArrayList<>(); + //查询原素材 + List goodsList = new ArrayList<>(); + VideoReqQuery videoReqQuery = new VideoReqQuery(); + videoReqQuery.setScenicId(query.getScenicId()); + videoReqQuery.setIsBuy(query.getIsBuy()); + videoReqQuery.setFaceId(query.getFaceId()); + videoReqQuery.setMemberId(Long.valueOf(BaseContextHandler.getUserId())); + //查询成片vlog + List videoList = videoMapper.queryByRelation(videoReqQuery); + videoList.forEach(videoRespVO -> { + GoodsPageVO goodsPageVO = new GoodsPageVO(); + goodsPageVO.setGoodsName(videoRespVO.getTemplateName()); + goodsPageVO.setScenicId(videoRespVO.getScenicId()); + goodsPageVO.setScenicName(videoRespVO.getScenicName()); + goodsPageVO.setGoodsType(0); + goodsPageVO.setFaceId(videoRespVO.getFaceId()); + goodsPageVO.setGoodsId(videoRespVO.getId()); + goodsPageVO.setTemplateName(videoRespVO.getTemplateName()); + goodsPageVO.setTemplateCoverUrl(videoRespVO.getTemplateCoverUrl()); + goodsList.add(goodsPageVO); + }); - VideoReqQuery videoReqQuery = new VideoReqQuery(); - videoReqQuery.setScenicId(query.getScenicId()); - videoReqQuery.setIsBuy(query.getIsBuy()); - videoReqQuery.setMemberId(Long.valueOf(BaseContextHandler.getUserId())); - //查询成片vlog - List videoList = videoMapper.queryByRelation(videoReqQuery); - videoList.forEach(videoRespVO -> { - GoodsPageVO goodsPageVO = new GoodsPageVO(); - goodsPageVO.setGoodsName(videoRespVO.getTemplateName()); - goodsPageVO.setScenicId(videoRespVO.getScenicId()); - goodsPageVO.setScenicName(videoRespVO.getScenicName()); - goodsPageVO.setGoodsType(0); - goodsPageVO.setFaceId(videoRespVO.getFaceId()); - goodsPageVO.setGoodsId(videoRespVO.getId()); - goodsPageVO.setTemplateName(videoRespVO.getTemplateName()); - goodsPageVO.setTemplateCoverUrl(videoRespVO.getTemplateCoverUrl()); - goodsList.add(goodsPageVO); - }); - - - SourceReqQuery sourceReqQuery = new SourceReqQuery(); - sourceReqQuery.setScenicId(query.getScenicId()); - sourceReqQuery.setIsBuy(query.getIsBuy()); - sourceReqQuery.setMemberId(Long.valueOf(BaseContextHandler.getUserId())); - //查询源素材 - List sourceList = sourceMapper.queryByRelation(sourceReqQuery); + SourceReqQuery sourceReqQuery = new SourceReqQuery(); + sourceReqQuery.setScenicId(query.getScenicId()); + sourceReqQuery.setIsBuy(query.getIsBuy()); + sourceReqQuery.setFaceId(query.getFaceId()); + sourceReqQuery.setMemberId(Long.valueOf(BaseContextHandler.getUserId())); + //查询源素材 + List sourceList = sourceMapper.queryByRelation(sourceReqQuery); + ScenicConfigEntity scenicConfig = scenicRepository.getScenicConfig(query.getScenicId()); List sourceGoods = sourceList.stream().collect(Collectors.groupingBy(SourceRespVO::getFaceId)).entrySet().stream().flatMap((faceEntry) -> { Long faceId = faceEntry.getKey(); List goods = faceEntry.getValue(); - return goods.stream().collect(Collectors.groupingBy(SourceRespVO::getType)).keySet().stream().map(type -> { + return goods.stream().collect(Collectors.groupingBy(SourceRespVO::getType)).keySet().stream().filter(type -> { + if (Integer.valueOf(1).equals(type)) { + if (Integer.valueOf(1).equals(scenicConfig.getDisableSourceVideo())) { + return false; + } + } else if (Integer.valueOf(2).equals(type)) { + if (Integer.valueOf(1).equals(scenicConfig.getDisableSourceImage())) { + return false; + } + } + return true; + }).map(type -> { GoodsPageVO goodsPageVO = new GoodsPageVO(); + goodsPageVO.setTemplateCoverUrl(goods.get(0).getUrl()); goodsPageVO.setFaceId(faceId); if (type == 1) { goodsPageVO.setGoodsName("原片集"); @@ -111,27 +123,27 @@ public class GoodsServiceImpl implements GoodsService { } } return ApiResponse.success(goodsList); - } + } @Override - public ApiResponse> sourceGoodsList(GoodsReqQuery query) { + public ApiResponse> sourceGoodsList(Long userId, GoodsReqQuery query) { Integer sourceType = query.getSourceType(); SourceReqQuery sourceReqQuery = new SourceReqQuery(); sourceReqQuery.setScenicId(query.getScenicId()); sourceReqQuery.setIsBuy(query.getIsBuy()); - sourceReqQuery.setMemberId(query.getMemberId()); + sourceReqQuery.setMemberId(userId); sourceReqQuery.setType(sourceType); sourceReqQuery.setFaceId(query.getFaceId()); List list = sourceMapper.listUser(sourceReqQuery); List goodsDetailVOList = new ArrayList<>(); String goodsNamePrefix = ""; - if(sourceType==1){ - goodsNamePrefix="视频"; - }else if (sourceType==2){ - goodsNamePrefix="图片"; - }else { - goodsNamePrefix="其他类型"; + if (sourceType == 1) { + goodsNamePrefix = "视频"; + } else if (sourceType == 2) { + goodsNamePrefix = "图片"; + } else { + goodsNamePrefix = "其他类型"; } //图片编号 int i=1; @@ -139,10 +151,10 @@ public class GoodsServiceImpl implements GoodsService { GoodsDetailVO goodsDetailVO = new GoodsDetailVO(); goodsDetailVO.setGoodsId(sourceRespVO.getId()); String shootingTime = DateUtils.format(sourceRespVO.getCreateTime(), "yyyy.MM.dd HH:mm:ss"); - if(i<10){ - goodsDetailVO.setGoodsName(goodsNamePrefix +"0"+i+" "+shootingTime); - }else { - goodsDetailVO.setGoodsName(goodsNamePrefix +i+" "+shootingTime); + if (i < 10) { + goodsDetailVO.setGoodsName(goodsNamePrefix + "0" + i + " " + shootingTime); + } else { + goodsDetailVO.setGoodsName(goodsNamePrefix + i + " " + shootingTime); } goodsDetailVO.setScenicId(sourceRespVO.getScenicId()); goodsDetailVO.setScenicName(sourceRespVO.getScenicName()); @@ -166,28 +178,28 @@ public class GoodsServiceImpl implements GoodsService { public ApiResponse queryPrice(GoodsPriceQueryReq queryPriceData) { Integer goodsType = queryPriceData.getGoodsType(); - if(goodsType==0){//成片vlog + if (goodsType == 0) {//成片vlog //成片的价格就是成片所用template的价格 Long videoId = queryPriceData.getGoodsId(); VideoRespVO videoRespVO = videoMapper.getById(videoId); - if(videoRespVO==null){ + if (videoRespVO == null) { return ApiResponse.fail("该vlog不存在或已失效"); } BigDecimal templatePrice = videoRespVO.getTemplatePrice(); - if(templatePrice==null){ + if (templatePrice == null) { return ApiResponse.fail("该vlog使用的模板价格或状态异常,请联系管理员"); } return ApiResponse.success(templatePrice); - }else if(goodsType==1 || goodsType == 2){//原素材 + } else if (goodsType == 1 || goodsType == 2) {//原素材 //原素材的价格就是原素材对应景区定的价格 Long scenicId = queryPriceData.getScenicId(); ScenicRespVO scenicRespVO = scenicMapper.getById(scenicId); - if(scenicRespVO==null){ + if (scenicRespVO == null) { return ApiResponse.fail("该景区不存在或状态异常,请联系管理员"); } BigDecimal price = scenicRespVO.getPrice(); - if(price==null){ + if (price == null) { return ApiResponse.fail("该景区的原片价格未设定或状态异常,请联系管理员"); } return ApiResponse.success(price); @@ -199,7 +211,7 @@ public class GoodsServiceImpl implements GoodsService { public ApiResponse videoGoodsDetail(Long userId, Long videoId) { VideoGoodsDetailVO goodsDetailVO = new VideoGoodsDetailVO(); VideoRespVO videoRespVO = videoMapper.getById(videoId); - if(videoRespVO==null){ + if (videoRespVO == null) { return ApiResponse.fail("该vlog不存在或已失效"); } goodsDetailVO.setGoodsName(videoRespVO.getTemplateName()); @@ -223,8 +235,8 @@ public class GoodsServiceImpl implements GoodsService { 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.setPrice(templatePrice == null ? "" : df.format(templatePrice.setScale(2, RoundingMode.HALF_UP))); + goodsDetailVO.setSlashPrice(slashPrice == null ? null : df.format(slashPrice.setScale(2, RoundingMode.HALF_UP))); } TaskEntity task = videoTaskRepository.getTaskById(videoRespVO.getTaskId()); JSONObject paramJson = JSON.parseObject(task.getTaskParams()); 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 7750dbe..638dfdc 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 @@ -57,7 +57,7 @@ public class FaceServiceImpl implements FaceService { @Value("${face.score}") private float faceScore; - private final float strictScore = 0.90F; + private final float strictScore = 0.75F; @Autowired private TaskService taskTaskService; @Autowired 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 3bcabcf..94c8a93 100644 --- a/src/main/java/com/ycwl/basic/service/mobile/GoodsService.java +++ b/src/main/java/com/ycwl/basic/service/mobile/GoodsService.java @@ -21,10 +21,12 @@ public interface GoodsService { /** * 查询源素材商品列表 + * + * @param userId * @param query * @return */ - ApiResponse> sourceGoodsList(GoodsReqQuery query); + ApiResponse> sourceGoodsList(Long userId, GoodsReqQuery query); /** * 查询订单应付价格 diff --git a/src/main/resources/mapper/SourceMapper.xml b/src/main/resources/mapper/SourceMapper.xml index 2afc28d..c16509a 100644 --- a/src/main/resources/mapper/SourceMapper.xml +++ b/src/main/resources/mapper/SourceMapper.xml @@ -137,9 +137,11 @@ left join scenic sc on sc.id = so.scenic_id where ms.member_id = #{memberId} + and ms.face_id = #{faceId} and ms.type = #{type} and ms.scenic_id = #{scenicId} and ms.is_buy = #{isBuy} + order by so.create_time desc