From 29637bc5e5a3b469863566d3b19507832d8aa46a Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Mon, 8 Sep 2025 10:11:19 +0800 Subject: [PATCH] =?UTF-8?q?refactor(biz):=20=E9=87=8D=E6=9E=84Vlog=20?= =?UTF-8?q?=E8=A7=86=E9=A2=91=E4=BB=B7=E6=A0=BC=E8=AE=A1=E7=AE=97=E9=80=BB?= =?UTF-8?q?=E8=BE=91=20-=20=E7=A7=BB=E9=99=A4=20OrderBiz=20=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E5=9B=BA=E5=AE=9A=E4=BB=B7=E6=A0=BC=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=EF=BC=8C=E6=94=B9=E4=B8=BA=E8=B0=83=E7=94=A8=E4=BB=B7=E6=A0=BC?= =?UTF-8?q?=E8=AE=A1=E7=AE=97=E6=9C=8D=E5=8A=A1=20-=20=E5=88=A0=E9=99=A4?= =?UTF-8?q?=20PriceBiz=20=E4=B8=AD=E6=9C=AA=E4=BD=BF=E7=94=A8=E7=9A=84=20I?= =?UTF-8?q?OnePricePurchaseService=20=E6=B3=A8=E5=85=A5=20-=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=20AppOrderV2Controller=20=E4=B8=AD=E7=9A=84=E4=BA=A7?= =?UTF-8?q?=E5=93=81=E6=95=B0=E9=87=8F=E8=AE=BE=E7=BD=AE=E9=80=BB=E8=BE=91?= =?UTF-8?q?=20-=20=E6=96=B0=E5=A2=9E=20VideoTaskRepository=20=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=20getTaskDeviceCount=20=E6=96=B9=E6=B3=95=EF=BC=8C?= =?UTF-8?q?=E7=94=A8=E4=BA=8E=E8=8E=B7=E5=8F=96=E4=BB=BB=E5=8A=A1=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E6=95=B0=E9=87=8F=20-=20=E8=B0=83=E6=95=B4=20GoodsSer?= =?UTF-8?q?viceImpl=20=E5=92=8C=20OrderServiceImpl=20=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E4=BB=A3=E7=A0=81=EF=BC=8C=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E6=96=B0=E7=9A=84=E8=AE=BE=E5=A4=87=E6=95=B0=E9=87=8F=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ycwl/basic/biz/OrderBiz.java | 19 +++++++----- .../java/com/ycwl/basic/biz/PriceBiz.java | 2 -- .../mobile/AppOrderV2Controller.java | 27 ++-------------- .../basic/repository/VideoTaskRepository.java | 31 +++++++++++++++++++ .../service/mobile/impl/GoodsServiceImpl.java | 22 +------------ .../service/pc/impl/OrderServiceImpl.java | 13 +------- 6 files changed, 48 insertions(+), 66 deletions(-) diff --git a/src/main/java/com/ycwl/basic/biz/OrderBiz.java b/src/main/java/com/ycwl/basic/biz/OrderBiz.java index 41d0f5e..cb874fa 100644 --- a/src/main/java/com/ycwl/basic/biz/OrderBiz.java +++ b/src/main/java/com/ycwl/basic/biz/OrderBiz.java @@ -117,13 +117,18 @@ public class OrderBiz { if (template == null) { return priceObj; } - priceObj.setPrice(template.getPrice()); - BigDecimal slashPrice = template.getSlashPrice(); - if (slashPrice == null) { - priceObj.setSlashPrice(priceObj.getPrice()); - } else { - priceObj.setSlashPrice(slashPrice); - } + PriceCalculationRequest vlogCalculationRequest = new PriceCalculationRequest(); + ProductItem vlogProductItem = new ProductItem(); + vlogProductItem.setProductType(ProductType.VLOG_VIDEO); + vlogProductItem.setProductId(template.getId().toString()); + vlogProductItem.setQuantity(videoTaskRepository.getTaskDeviceCount(video.getTaskId())); + vlogProductItem.setScenicId(scenic.getId().toString()); + vlogCalculationRequest.setProducts(Collections.singletonList(vlogProductItem)); + vlogCalculationRequest.setFaceId(priceObj.getFaceId()); + PriceCalculationResult vlogCalculationResult = iPriceCalculationService.calculatePrice(vlogCalculationRequest); + priceObj.setPrice(vlogCalculationResult.getFinalAmount()); + priceObj.setSlashPrice(vlogCalculationResult.getOriginalAmount()); + priceObj.setFaceId(goodsId); priceObj.setScenicId(video.getScenicId()); break; case 1: // source diff --git a/src/main/java/com/ycwl/basic/biz/PriceBiz.java b/src/main/java/com/ycwl/basic/biz/PriceBiz.java index 60df028..2b19451 100644 --- a/src/main/java/com/ycwl/basic/biz/PriceBiz.java +++ b/src/main/java/com/ycwl/basic/biz/PriceBiz.java @@ -39,8 +39,6 @@ public class PriceBiz { private FaceRepository faceRepository; @Autowired private CouponBiz couponBiz; - @Autowired - private IOnePricePurchaseService onePricePurchaseService; public List listGoodsByScenic(Long scenicId) { List goodsList = new ArrayList<>(); diff --git a/src/main/java/com/ycwl/basic/controller/mobile/AppOrderV2Controller.java b/src/main/java/com/ycwl/basic/controller/mobile/AppOrderV2Controller.java index d1599ee..c92a16f 100644 --- a/src/main/java/com/ycwl/basic/controller/mobile/AppOrderV2Controller.java +++ b/src/main/java/com/ycwl/basic/controller/mobile/AppOrderV2Controller.java @@ -96,32 +96,11 @@ public class AppOrderV2Controller { request.getProducts().forEach(product -> { switch (product.getProductType()) { case VLOG_VIDEO: - AtomicInteger deviceCount = new AtomicInteger(); List videoEntities = videoMapper.listRelationByFaceAndTemplate(face.getId(), Long.valueOf(product.getProductId())); if (videoEntities != null && !videoEntities.isEmpty()) { - TaskEntity task = videoTaskRepository.getTaskById(videoEntities.getFirst().getTaskId()); - if (task != null) { - Map paramJson = JacksonUtil.parseObject(task.getTaskParams(), Map.class); - if (paramJson == null) { - deviceCount.set(1); - } else { - List templatePlaceholder = templateRepository.getTemplatePlaceholder(task.getTemplateId()); - paramJson.entrySet().stream() - .filter(entry -> StringUtils.isNumeric(entry.getKey())) - .forEach(entry -> { - List jsonArray = JacksonUtil.parseArray(JacksonUtil.toJSONString(entry.getValue()), Object.class); - if (jsonArray != null && !jsonArray.isEmpty()) { - for (Object ignored : jsonArray) { - if (templatePlaceholder.contains(entry.getKey())) { - deviceCount.getAndIncrement(); - templatePlaceholder.remove(entry.getKey()); - } - } - } - }); - } - product.setQuantity(deviceCount.get()); - } + product.setQuantity(videoTaskRepository.getTaskDeviceCount(videoEntities.getFirst().getTaskId())); + } else { + product.setQuantity(1); } break; case RECORDING_SET: diff --git a/src/main/java/com/ycwl/basic/repository/VideoTaskRepository.java b/src/main/java/com/ycwl/basic/repository/VideoTaskRepository.java index 8b65445..f18a323 100644 --- a/src/main/java/com/ycwl/basic/repository/VideoTaskRepository.java +++ b/src/main/java/com/ycwl/basic/repository/VideoTaskRepository.java @@ -12,8 +12,11 @@ import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import java.util.Date; +import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; @Component public class VideoTaskRepository { @@ -23,6 +26,8 @@ public class VideoTaskRepository { private TaskMapper taskMapper; public static final String TASK_CACHE_KEY = "task:byId:%s"; + @Autowired + private TemplateRepository templateRepository; public TaskEntity getTaskById(Long taskId) { if (redisTemplate.hasKey(String.format(TASK_CACHE_KEY, taskId))) { @@ -63,4 +68,30 @@ public class VideoTaskRepository { return shotTime; } + public Integer getTaskDeviceCount(Long taskId) { + TaskEntity task = getTaskById(taskId); + if (task == null) { + return 1; + } + Map paramJson = JacksonUtil.parseObject(task.getTaskParams(), Map.class); + if (paramJson == null) { + return 1; + } + AtomicInteger deviceCount = new AtomicInteger(); + List templatePlaceholder = templateRepository.getTemplatePlaceholder(task.getTemplateId()); + paramJson.entrySet().stream() + .filter(entry -> StringUtils.isNumeric(entry.getKey())) + .forEach(entry -> { + List jsonArray = JacksonUtil.parseArray(JacksonUtil.toJSONString(entry.getValue()), Object.class); + if (jsonArray != null && !jsonArray.isEmpty()) { + for (Object ignored : jsonArray) { + if (templatePlaceholder.contains(entry.getKey())) { + deviceCount.getAndIncrement(); + templatePlaceholder.remove(entry.getKey()); + } + } + } + }); + return deviceCount.get(); + } } diff --git a/src/main/java/com/ycwl/basic/service/mobile/impl/GoodsServiceImpl.java b/src/main/java/com/ycwl/basic/service/mobile/impl/GoodsServiceImpl.java index 0a2c89d..9cc64ad 100644 --- a/src/main/java/com/ycwl/basic/service/mobile/impl/GoodsServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/mobile/impl/GoodsServiceImpl.java @@ -290,28 +290,8 @@ public class GoodsServiceImpl implements GoodsService { if (task == null) { return ApiResponse.fail("该vlog不存在或已失效"); } - Map paramJson = JacksonUtil.parseObject(task.getTaskParams(), Map.class); - AtomicInteger deviceCount = new AtomicInteger(); goodsDetailVO.setShotTime(taskTaskService.getTaskShotDate(task.getId())); - if (paramJson == null) { - deviceCount.set(1); - } else { - List templatePlaceholder = templateRepository.getTemplatePlaceholder(task.getTemplateId()); - paramJson.entrySet().stream() - .filter(entry -> StringUtils.isNumeric(entry.getKey())) - .forEach(entry -> { - List jsonArray = JacksonUtil.parseArray(JacksonUtil.toJSONString(entry.getValue()), Object.class); - if (jsonArray != null && !jsonArray.isEmpty()) { - for (Object ignored : jsonArray) { - if (templatePlaceholder.contains(entry.getKey())) { - deviceCount.getAndIncrement(); - templatePlaceholder.remove(entry.getKey()); - } - } - } - }); - } - goodsDetailVO.setLensNum(deviceCount.get()); + goodsDetailVO.setLensNum(videoTaskRepository.getTaskDeviceCount(task.getId())); CouponRecordQueryResp couponRecord = couponBiz.queryUserCouponRecord(task.getScenicId(), userId, task.getFaceId(), task.getTemplateId().toString()); if (couponRecord != null) { if (couponRecord.isUsable()) { diff --git a/src/main/java/com/ycwl/basic/service/pc/impl/OrderServiceImpl.java b/src/main/java/com/ycwl/basic/service/pc/impl/OrderServiceImpl.java index 0637a7d..606450f 100644 --- a/src/main/java/com/ycwl/basic/service/pc/impl/OrderServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/pc/impl/OrderServiceImpl.java @@ -298,19 +298,8 @@ public class OrderServiceImpl implements OrderService { goods.setUrl(videoMapperById.getVideoUrl()); goods.setGoodsType(0); goods.setTemplateCoverUrl(template.getCoverUrl()); - long deviceCount; - if (task.getTaskParams() == null) { - deviceCount = 1; - } else { - Map paramJson = JacksonUtil.parseObject(task.getTaskParams(), Map.class); - List templatePlaceholder = templateRepository.getTemplatePlaceholder(task.getTemplateId()); - deviceCount = paramJson.keySet().stream() - .filter(StringUtils::isNumeric) - .filter(templatePlaceholder::contains) - .count(); - } goods.setCreateTime(videoTaskRepository.getTaskShotDate(task.getId())); - goods.setParts(Math.toIntExact(deviceCount)); + goods.setParts(videoTaskRepository.getTaskDeviceCount(task.getId())); goodsList.add(goods); item.setShootingTime(videoTaskRepository.getTaskShotDate(videoMapperById.getTaskId())); item.setVideoUrl(videoMapperById.getVideoUrl());