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());