From 8c37f2bf2f552e34375a1433486406fa33657337 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Mon, 15 Sep 2025 15:07:04 +0800 Subject: [PATCH] =?UTF-8?q?refactor(order):=20=E4=BC=98=E5=8C=96=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E7=9B=B8=E5=85=B3=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改了多个模块中的方法名称,使其更加准确地反映功能 - 优化了部分代码逻辑,提高了可读性和维护性 - 增加了获取 --- .../java/com/ycwl/basic/biz/OrderBiz.java | 7 +--- .../mobile/AppOrderV2Controller.java | 10 ++---- .../mobile/goods/VideoGoodsDetailVO.java | 1 + .../basic/repository/VideoTaskRepository.java | 32 +++++++++++++++++-- .../service/mobile/impl/GoodsServiceImpl.java | 9 ++---- .../service/pc/impl/OrderServiceImpl.java | 4 +-- 6 files changed, 37 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/ycwl/basic/biz/OrderBiz.java b/src/main/java/com/ycwl/basic/biz/OrderBiz.java index cb874fab..bc1424b0 100644 --- a/src/main/java/com/ycwl/basic/biz/OrderBiz.java +++ b/src/main/java/com/ycwl/basic/biz/OrderBiz.java @@ -13,17 +13,14 @@ import com.ycwl.basic.model.pc.couponRecord.resp.CouponRecordQueryResp; import com.ycwl.basic.model.pc.face.entity.FaceEntity; import com.ycwl.basic.model.pc.order.entity.OrderEntity; import com.ycwl.basic.model.pc.order.entity.OrderItemEntity; -import com.ycwl.basic.model.pc.order.req.OrderUpdateReq; import com.ycwl.basic.model.pc.order.resp.OrderAppRespVO; import com.ycwl.basic.model.pc.order.resp.OrderItemVO; -import com.ycwl.basic.model.pc.order.resp.OrderRespVO; import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity; import com.ycwl.basic.model.pc.scenic.entity.ScenicEntity; import com.ycwl.basic.model.pc.source.entity.SourceEntity; import com.ycwl.basic.model.pc.task.entity.TaskEntity; import com.ycwl.basic.model.pc.template.resp.TemplateRespVO; import com.ycwl.basic.model.pc.video.entity.VideoEntity; -import com.ycwl.basic.model.pc.video.resp.VideoRespVO; import com.ycwl.basic.pricing.dto.PriceCalculationRequest; import com.ycwl.basic.pricing.dto.PriceCalculationResult; import com.ycwl.basic.pricing.dto.ProductItem; @@ -38,13 +35,11 @@ import com.ycwl.basic.repository.TemplateRepository; import com.ycwl.basic.repository.VideoRepository; import com.ycwl.basic.repository.VideoTaskRepository; import com.ycwl.basic.service.printer.PrinterService; -import com.ycwl.basic.utils.ApiResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; import java.math.BigDecimal; -import java.util.Calendar; import java.util.Collections; import java.util.Comparator; import java.util.Date; @@ -121,7 +116,7 @@ public class OrderBiz { ProductItem vlogProductItem = new ProductItem(); vlogProductItem.setProductType(ProductType.VLOG_VIDEO); vlogProductItem.setProductId(template.getId().toString()); - vlogProductItem.setQuantity(videoTaskRepository.getTaskDeviceCount(video.getTaskId())); + vlogProductItem.setQuantity(videoTaskRepository.getTaskLensNum(video.getTaskId())); vlogProductItem.setScenicId(scenic.getId().toString()); vlogCalculationRequest.setProducts(Collections.singletonList(vlogProductItem)); vlogCalculationRequest.setFaceId(priceObj.getFaceId()); 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 753d844d..6624462a 100644 --- a/src/main/java/com/ycwl/basic/controller/mobile/AppOrderV2Controller.java +++ b/src/main/java/com/ycwl/basic/controller/mobile/AppOrderV2Controller.java @@ -4,8 +4,6 @@ import com.github.pagehelper.PageInfo; import com.ycwl.basic.constant.BaseContextHandler; import com.ycwl.basic.mapper.SourceMapper; import com.ycwl.basic.mapper.VideoMapper; -import com.ycwl.basic.model.pc.order.req.CreateOrderReqVO; -import com.ycwl.basic.model.pc.source.entity.MemberSourceEntity; import com.ycwl.basic.model.pc.source.req.SourceReqQuery; import com.ycwl.basic.model.pc.task.entity.TaskEntity; import com.ycwl.basic.model.pc.video.entity.MemberVideoEntity; @@ -29,17 +27,13 @@ import com.ycwl.basic.order.dto.OrderV2PageRequest; import com.ycwl.basic.order.dto.PaymentParamsRequest; import com.ycwl.basic.order.dto.PaymentParamsResponse; import com.ycwl.basic.order.dto.PaymentCallbackResponse; -import com.ycwl.basic.utils.JacksonUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.springframework.web.bind.annotation.*; import jakarta.servlet.http.HttpServletRequest; -import java.math.BigDecimal; + import java.util.List; -import java.util.Map; -import java.util.concurrent.atomic.AtomicInteger; /** * 移动端订单控制器V2 @@ -111,7 +105,7 @@ public class AppOrderV2Controller { case VLOG_VIDEO: List videoEntities = videoMapper.listRelationByFaceAndTemplate(face.getId(), Long.valueOf(product.getProductId())); if (videoEntities != null && !videoEntities.isEmpty()) { - product.setQuantity(videoTaskRepository.getTaskDeviceCount(videoEntities.getFirst().getTaskId())); + product.setQuantity(videoTaskRepository.getTaskLensNum(videoEntities.getFirst().getTaskId())); } else { product.setQuantity(1); } diff --git a/src/main/java/com/ycwl/basic/model/mobile/goods/VideoGoodsDetailVO.java b/src/main/java/com/ycwl/basic/model/mobile/goods/VideoGoodsDetailVO.java index 430035a3..3fbc6fcc 100644 --- a/src/main/java/com/ycwl/basic/model/mobile/goods/VideoGoodsDetailVO.java +++ b/src/main/java/com/ycwl/basic/model/mobile/goods/VideoGoodsDetailVO.java @@ -50,6 +50,7 @@ public class VideoGoodsDetailVO { // 是否已购买 0否 1是 private Integer isBuy; // 镜头数 + private Integer devicesNum; private Integer lensNum; private Long faceId; private boolean share = false; diff --git a/src/main/java/com/ycwl/basic/repository/VideoTaskRepository.java b/src/main/java/com/ycwl/basic/repository/VideoTaskRepository.java index f18a3230..ecbff8de 100644 --- a/src/main/java/com/ycwl/basic/repository/VideoTaskRepository.java +++ b/src/main/java/com/ycwl/basic/repository/VideoTaskRepository.java @@ -3,7 +3,6 @@ package com.ycwl.basic.repository; import cn.hutool.core.date.DateUtil; import com.ycwl.basic.utils.JacksonUtil; import com.ycwl.basic.mapper.TaskMapper; -import com.ycwl.basic.mapper.VideoMapper; import com.ycwl.basic.model.pc.task.entity.TaskEntity; import com.ycwl.basic.model.pc.task.resp.TaskRespVO; import org.apache.commons.lang3.StringUtils; @@ -11,6 +10,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; +import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; @@ -68,7 +68,35 @@ public class VideoTaskRepository { return shotTime; } - public Integer getTaskDeviceCount(Long taskId) { + public Integer getTaskDeviceNum(Long taskId) { + TaskEntity task = getTaskById(taskId); + if (task == null) { + return 1; + } + Map paramJson = JacksonUtil.parseObject(task.getTaskParams(), Map.class); + if (paramJson == null) { + return 1; + } + List deviceIds = new ArrayList<>(); + 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())) { + if (!deviceIds.contains(entry.getKey())) { + deviceIds.add(entry.getKey()); + } + } + } + } + }); + return deviceIds.size(); + } + + public Integer getTaskLensNum(Long taskId) { TaskEntity task = getTaskById(taskId); if (task == null) { return 1; 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 974616c7..af05250e 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 @@ -1,10 +1,8 @@ package com.ycwl.basic.service.mobile.impl; import cn.hutool.core.date.DateUtil; -import cn.hutool.extra.qrcode.QrCodeUtil; import cn.hutool.http.HttpUtil; import com.ycwl.basic.integration.scenic.dto.scenic.ScenicV2DTO; -import com.ycwl.basic.model.pc.scenic.entity.ScenicEntity; import com.ycwl.basic.utils.JacksonUtil; import com.ycwl.basic.biz.CouponBiz; import com.ycwl.basic.biz.OrderBiz; @@ -37,7 +35,6 @@ import com.ycwl.basic.model.pc.video.req.VideoReqQuery; import com.ycwl.basic.model.pc.video.resp.VideoRespVO; import com.ycwl.basic.repository.DeviceRepository; import com.ycwl.basic.repository.FaceRepository; -import com.ycwl.basic.repository.OrderRepository; import com.ycwl.basic.repository.ScenicRepository; import com.ycwl.basic.repository.VideoTaskRepository; import com.ycwl.basic.service.mobile.GoodsService; @@ -54,15 +51,12 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.io.File; -import java.net.MalformedURLException; import java.net.URI; -import java.net.URL; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; /** @@ -308,7 +302,8 @@ public class GoodsServiceImpl implements GoodsService { return ApiResponse.fail("该vlog不存在或已失效"); } goodsDetailVO.setShotTime(taskTaskService.getTaskShotDate(task.getId())); - goodsDetailVO.setLensNum(videoTaskRepository.getTaskDeviceCount(task.getId())); + goodsDetailVO.setLensNum(videoTaskRepository.getTaskLensNum(task.getId())); + goodsDetailVO.setDevicesNum(videoTaskRepository.getTaskDeviceNum(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 7f4c04af..b42fb559 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 @@ -11,7 +11,6 @@ import com.ycwl.basic.pricing.dto.PriceCalculationResult; import com.ycwl.basic.pricing.dto.ProductItem; import com.ycwl.basic.pricing.service.ICouponService; import com.ycwl.basic.pricing.service.IVoucherService; -import com.ycwl.basic.utils.JacksonUtil; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.ycwl.basic.biz.CouponBiz; @@ -64,7 +63,6 @@ import com.ycwl.basic.service.task.impl.TaskTaskServiceImpl; import com.ycwl.basic.utils.ApiResponse; import com.ycwl.basic.utils.SnowFlakeUtil; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Scope; @@ -342,7 +340,7 @@ public class OrderServiceImpl implements OrderService { goods.setGoodsType(0); goods.setTemplateCoverUrl(template.getCoverUrl()); goods.setCreateTime(videoTaskRepository.getTaskShotDate(task.getId())); - goods.setParts(videoTaskRepository.getTaskDeviceCount(task.getId())); + goods.setParts(videoTaskRepository.getTaskLensNum(task.getId())); goodsList.add(goods); item.setShootingTime(videoTaskRepository.getTaskShotDate(videoMapperById.getTaskId())); item.setVideoUrl(videoMapperById.getVideoUrl());