From e199e0e57b60b7f44cb358420d215b85f031a0b0 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Tue, 25 Feb 2025 16:57:35 +0800 Subject: [PATCH] =?UTF-8?q?batch=E4=B8=8B=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ycwl/basic/biz/PriceBiz.java | 59 ++++++++++++++++++ .../controller/mobile/AppOrderController.java | 9 +++ .../controller/pc/PriceConfigController.java | 6 +- .../model/pc/order/entity/OrderEntity.java | 5 ++ .../pc/order/req/CreateBatchOrderReqVO.java | 12 ++++ .../service/impl/pc/OrderServiceImpl.java | 61 +++++++++++++++++++ .../impl/{ => pc}/PriceConfigServiceImpl.java | 28 ++------- .../ycwl/basic/service/pc/OrderService.java | 3 + .../service/{ => pc}/PriceConfigService.java | 2 +- src/main/resources/mapper/OrderMapper.xml | 4 +- 10 files changed, 158 insertions(+), 31 deletions(-) create mode 100644 src/main/java/com/ycwl/basic/model/pc/order/req/CreateBatchOrderReqVO.java rename src/main/java/com/ycwl/basic/service/impl/{ => pc}/PriceConfigServiceImpl.java (71%) rename src/main/java/com/ycwl/basic/service/{ => pc}/PriceConfigService.java (95%) diff --git a/src/main/java/com/ycwl/basic/biz/PriceBiz.java b/src/main/java/com/ycwl/basic/biz/PriceBiz.java index 6b04c9f..b592f1b 100644 --- a/src/main/java/com/ycwl/basic/biz/PriceBiz.java +++ b/src/main/java/com/ycwl/basic/biz/PriceBiz.java @@ -1,7 +1,66 @@ package com.ycwl.basic.biz; +import com.ycwl.basic.model.pc.price.entity.PriceConfigEntity; +import com.ycwl.basic.model.pc.price.resp.GoodsListRespVO; +import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity; +import com.ycwl.basic.model.pc.template.resp.TemplateRespVO; +import com.ycwl.basic.repository.PriceRepository; +import com.ycwl.basic.repository.ScenicRepository; +import com.ycwl.basic.repository.TemplateRepository; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + @Component public class PriceBiz { + @Autowired + private TemplateRepository templateRepository; + @Autowired + private ScenicRepository scenicRepository; + @Autowired + private PriceRepository priceRepository; + + public List listGoodsByScenic(Long scenicId) { + List goodsList = new ArrayList<>(); + // 景区视频 + List templateList = templateRepository.getTemplateListByScenicId(scenicId); + templateList.stream().map(template -> { + GoodsListRespVO goods = new GoodsListRespVO(); + goods.setGoodsId(template.getId()); + goods.setGoodsName(template.getName()); + return goods; + }).forEach(goodsList::add); + ScenicConfigEntity scenicConfig = scenicRepository.getScenicConfig(scenicId); + if (scenicConfig != null) { + if (!Integer.valueOf(1).equals(scenicConfig.getDisableSourceVideo())) { + goodsList.add(new GoodsListRespVO(1L, "原片集")); + } + if (!Integer.valueOf(1).equals(scenicConfig.getDisableSourceImage())) { + goodsList.add(new GoodsListRespVO(2L, "照片集")); + } + } + return goodsList; + } + + public List queryGoodsList(Integer configId) { + PriceConfigEntity priceConfig = priceRepository.getPriceConfig(configId); + if (priceConfig == null) { + return Collections.emptyList(); + } + String[] goodsIds = priceConfig.getGoodsIds().split(","); + List goodsList = listGoodsByScenic(priceConfig.getScenicId()); + return goodsList.stream().filter(goods -> { + for (String goodsId : goodsIds) { + if (StringUtils.equals(goods.getGoodsId().toString(), goodsId)) { + return true; + } + } + return false; + }).collect(Collectors.toList()); + } } diff --git a/src/main/java/com/ycwl/basic/controller/mobile/AppOrderController.java b/src/main/java/com/ycwl/basic/controller/mobile/AppOrderController.java index cf5c1f9..4668ab8 100644 --- a/src/main/java/com/ycwl/basic/controller/mobile/AppOrderController.java +++ b/src/main/java/com/ycwl/basic/controller/mobile/AppOrderController.java @@ -8,6 +8,7 @@ import com.ycwl.basic.model.mobile.goods.GoodsPriceQueryReq; import com.ycwl.basic.model.mobile.order.IsBuyRespVO; import com.ycwl.basic.model.mobile.order.OrderAppPageReq; import com.ycwl.basic.model.mobile.order.RefundOrderReq; +import com.ycwl.basic.model.pc.order.req.CreateBatchOrderReqVO; import com.ycwl.basic.model.pc.order.req.CreateOrderReqVO; import com.ycwl.basic.model.pc.order.req.OrderAddReq; import com.ycwl.basic.model.pc.order.resp.OrderAppRespVO; @@ -60,6 +61,14 @@ public class AppOrderController { } + @ApiOperation("用户端打包订单新增") + @PostMapping("/addBatchOrder") + public ApiResponse addOrder(@RequestBody CreateBatchOrderReqVO batchOrderReqVO) throws Exception { + JwtInfo worker = JwtTokenUtil.getWorker(); + return orderService.createBatchOrder(worker.getUserId(), batchOrderReqVO); + } + + @ApiOperation("获取用户订单数量") @GetMapping("/getUserOrderCount") public ApiResponse getUserOrderCount() { diff --git a/src/main/java/com/ycwl/basic/controller/pc/PriceConfigController.java b/src/main/java/com/ycwl/basic/controller/pc/PriceConfigController.java index 0f55214..43ed71f 100644 --- a/src/main/java/com/ycwl/basic/controller/pc/PriceConfigController.java +++ b/src/main/java/com/ycwl/basic/controller/pc/PriceConfigController.java @@ -6,16 +6,12 @@ import com.ycwl.basic.model.pc.price.entity.PriceConfigEntity; import com.ycwl.basic.model.pc.price.req.PriceConfigListReq; import com.ycwl.basic.model.pc.price.resp.GoodsListRespVO; import com.ycwl.basic.model.pc.price.resp.PriceConfigRespVO; -import com.ycwl.basic.model.pc.template.resp.TemplateRespVO; import com.ycwl.basic.repository.PriceRepository; -import com.ycwl.basic.repository.TemplateRepository; -import com.ycwl.basic.service.PriceConfigService; +import com.ycwl.basic.service.pc.PriceConfigService; import com.ycwl.basic.utils.ApiResponse; -import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; import java.util.List; @RestController diff --git a/src/main/java/com/ycwl/basic/model/pc/order/entity/OrderEntity.java b/src/main/java/com/ycwl/basic/model/pc/order/entity/OrderEntity.java index abd7b76..b7564f1 100644 --- a/src/main/java/com/ycwl/basic/model/pc/order/entity/OrderEntity.java +++ b/src/main/java/com/ycwl/basic/model/pc/order/entity/OrderEntity.java @@ -17,6 +17,11 @@ public class OrderEntity { @TableId private Long id; private Long scenicId; + /** + * 订单类型: -1 全场打包 0 单点 1 打包 + */ + private int type; + private Integer priceConfigId; /** * 用户id */ diff --git a/src/main/java/com/ycwl/basic/model/pc/order/req/CreateBatchOrderReqVO.java b/src/main/java/com/ycwl/basic/model/pc/order/req/CreateBatchOrderReqVO.java new file mode 100644 index 0000000..ab058a1 --- /dev/null +++ b/src/main/java/com/ycwl/basic/model/pc/order/req/CreateBatchOrderReqVO.java @@ -0,0 +1,12 @@ +package com.ycwl.basic.model.pc.order.req; + +import lombok.Data; + +@Data +public class CreateBatchOrderReqVO { + private Long scenicId; + private Integer type; + private String goodsId; + private Long faceId; + private Long couponId; +} 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 1245065..020bb68 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 @@ -3,6 +3,7 @@ package com.ycwl.basic.service.impl.pc; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.ycwl.basic.biz.OrderBiz; +import com.ycwl.basic.biz.PriceBiz; import com.ycwl.basic.constant.BaseContextHandler; import com.ycwl.basic.constant.NumberConstant; import com.ycwl.basic.enums.*; @@ -16,6 +17,7 @@ import com.ycwl.basic.model.mobile.statistic.req.StatisticsRecordAddReq; import com.ycwl.basic.model.pc.member.resp.MemberRespVO; 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.CreateBatchOrderReqVO; import com.ycwl.basic.model.pc.order.req.CreateOrderReqVO; import com.ycwl.basic.model.pc.order.req.OrderUpdateReq; import com.ycwl.basic.model.pc.order.req.OrderReqQuery; @@ -23,12 +25,15 @@ 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.orderOp.entity.OrderOperationEntity; +import com.ycwl.basic.model.pc.price.entity.PriceConfigEntity; +import com.ycwl.basic.model.pc.price.resp.GoodsListRespVO; 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.repository.PriceRepository; import com.ycwl.basic.repository.VideoRepository; import com.ycwl.basic.repository.VideoTaskRepository; import com.ycwl.basic.service.mobile.GoodsService; @@ -82,6 +87,10 @@ public class OrderServiceImpl implements OrderService { private VideoRepository videoRepository; @Autowired private VideoTaskRepository videoTaskRepository; + @Autowired + private PriceRepository priceRepository; + @Autowired + private PriceBiz priceBiz; @Override public ApiResponse> pageQuery(OrderReqQuery query) { @@ -337,4 +346,56 @@ public class OrderServiceImpl implements OrderService { return ApiResponse.success(wxPayRespVO); } + @Override + @Transactional(rollbackFor = Exception.class) + public ApiResponse createBatchOrder(Long userId, CreateBatchOrderReqVO batchOrderReqVO) throws Exception { + PriceConfigEntity priceConfig = priceRepository.getPriceConfigByScenicTypeGoods(batchOrderReqVO.getScenicId(), batchOrderReqVO.getType(), batchOrderReqVO.getGoodsId()); + if (priceConfig == null) { + return ApiResponse.fail("该套餐暂未开放购买"); + } + log.info("创建批量订单,价格配置:{},请求:{}", priceConfig, batchOrderReqVO); + OrderEntity order = new OrderEntity(); + Long orderId = SnowFlakeUtil.getLongId(); + order.setId(orderId); + order.setMemberId(userId); + MemberRespVO member = memberMapper.getById(userId); + order.setOpenId(member.getOpenId()); + order.setScenicId(priceConfig.getScenicId()); + order.setType(priceConfig.getType()); + List goodsList = priceBiz.queryGoodsList(priceConfig.getId()); + List orderItems = goodsList.stream().map(goods -> { + OrderItemEntity orderItem = new OrderItemEntity(); + orderItem.setOrderId(orderId); + if (Long.valueOf(1L).equals(goods.getGoodsId())) { + orderItem.setGoodsId(batchOrderReqVO.getFaceId()); + orderItem.setGoodsType(1); + } else if (Long.valueOf(2L).equals(goods.getGoodsId())) { + orderItem.setGoodsId(batchOrderReqVO.getCouponId()); + orderItem.setGoodsType(2); + } else { + orderItem.setGoodsId(goods.getGoodsId()); + orderItem.setGoodsType(0); + } + return orderItem; + }).collect(Collectors.toList()); + order.setSlashPrice(priceConfig.getSlashPrice()); + order.setPrice(priceConfig.getPrice()); + order.setPayPrice(priceConfig.getPrice()); + if (order.getPayPrice().equals(BigDecimal.ZERO)) { + order.setStatus(OrderStateEnum.PAID.getState()); + order.setPayAt(new Date()); + } else { + order.setStatus(OrderStateEnum.UNPAID.getState()); + } + orderMapper.add(order); + int addOrderItems = orderMapper.addOrderItems(orderItems); + if (addOrderItems == NumberConstant.ZERO) { + log.error("订单明细添加失败"); + return ApiResponse.fail("订单添加失败"); + } + + WxPayRespVO wxPayRespVO = initiatePayment(order, orderItems); + return ApiResponse.success(wxPayRespVO); + } + } diff --git a/src/main/java/com/ycwl/basic/service/impl/PriceConfigServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/pc/PriceConfigServiceImpl.java similarity index 71% rename from src/main/java/com/ycwl/basic/service/impl/PriceConfigServiceImpl.java rename to src/main/java/com/ycwl/basic/service/impl/pc/PriceConfigServiceImpl.java index 0bfe168..ef6c831 100644 --- a/src/main/java/com/ycwl/basic/service/impl/PriceConfigServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/pc/PriceConfigServiceImpl.java @@ -1,6 +1,7 @@ -package com.ycwl.basic.service.impl; +package com.ycwl.basic.service.impl.pc; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ycwl.basic.biz.PriceBiz; import com.ycwl.basic.mapper.PriceConfigMapper; import com.ycwl.basic.model.pc.price.entity.PriceConfigEntity; import com.ycwl.basic.model.pc.price.req.PriceConfigListReq; @@ -10,13 +11,12 @@ import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity; import com.ycwl.basic.model.pc.template.resp.TemplateRespVO; import com.ycwl.basic.repository.ScenicRepository; import com.ycwl.basic.repository.TemplateRepository; -import com.ycwl.basic.service.PriceConfigService; +import com.ycwl.basic.service.pc.PriceConfigService; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; -import java.util.Collections; import java.util.List; @Service @@ -25,7 +25,7 @@ public class PriceConfigServiceImpl extends ServiceImpl listByCondition(PriceConfigListReq req) { @@ -39,25 +39,7 @@ public class PriceConfigServiceImpl extends ServiceImpl listGoodsByScenic(Long scenicId) { - List goodsList = new ArrayList<>(); - // 景区视频 - List templateList = templateRepository.getTemplateListByScenicId(scenicId); - templateList.stream().map(template -> { - GoodsListRespVO goods = new GoodsListRespVO(); - goods.setGoodsId(template.getId()); - goods.setGoodsName(template.getName()); - return goods; - }).forEach(goodsList::add); - ScenicConfigEntity scenicConfig = scenicRepository.getScenicConfig(scenicId); - if (scenicConfig != null) { - if (!Integer.valueOf(1).equals(scenicConfig.getDisableSourceVideo())) { - goodsList.add(new GoodsListRespVO(1L, "原片集")); - } - if (!Integer.valueOf(1).equals(scenicConfig.getDisableSourceImage())) { - goodsList.add(new GoodsListRespVO(2L, "照片集")); - } - } - return goodsList; + return priceBiz.listGoodsByScenic(scenicId); } @Override diff --git a/src/main/java/com/ycwl/basic/service/pc/OrderService.java b/src/main/java/com/ycwl/basic/service/pc/OrderService.java index e567d6a..bc6dcfe 100644 --- a/src/main/java/com/ycwl/basic/service/pc/OrderService.java +++ b/src/main/java/com/ycwl/basic/service/pc/OrderService.java @@ -5,6 +5,7 @@ import com.ycwl.basic.enums.OrderStateEnum; import com.ycwl.basic.model.mobile.order.OrderAppPageReq; import com.ycwl.basic.model.mobile.order.RefundOrderReq; import com.ycwl.basic.model.pc.order.entity.OrderEntity; +import com.ycwl.basic.model.pc.order.req.CreateBatchOrderReqVO; import com.ycwl.basic.model.pc.order.req.CreateOrderReqVO; import com.ycwl.basic.model.pc.order.req.OrderUpdateReq; import com.ycwl.basic.model.pc.order.req.OrderAddReq; @@ -62,4 +63,6 @@ public interface OrderService { ApiResponse> refundPageQuery(OrderReqQuery query); ApiResponse createOrder(Long userId, CreateOrderReqVO orderAddReq) throws Exception; + + ApiResponse createBatchOrder(Long userId, CreateBatchOrderReqVO batchOrderReqVO) throws Exception; } diff --git a/src/main/java/com/ycwl/basic/service/PriceConfigService.java b/src/main/java/com/ycwl/basic/service/pc/PriceConfigService.java similarity index 95% rename from src/main/java/com/ycwl/basic/service/PriceConfigService.java rename to src/main/java/com/ycwl/basic/service/pc/PriceConfigService.java index fdffa52..856c194 100644 --- a/src/main/java/com/ycwl/basic/service/PriceConfigService.java +++ b/src/main/java/com/ycwl/basic/service/pc/PriceConfigService.java @@ -1,4 +1,4 @@ -package com.ycwl.basic.service; +package com.ycwl.basic.service.pc; import com.baomidou.mybatisplus.extension.service.IService; import com.ycwl.basic.model.pc.price.entity.PriceConfigEntity; diff --git a/src/main/resources/mapper/OrderMapper.xml b/src/main/resources/mapper/OrderMapper.xml index b316aee..1886ce1 100644 --- a/src/main/resources/mapper/OrderMapper.xml +++ b/src/main/resources/mapper/OrderMapper.xml @@ -144,8 +144,8 @@ - insert into `order`(id, member_id, openid, slash_price, price, pay_price, remark, broker_id, promo_code, scenic_id, status) - VALUES (#{id}, #{memberId}, #{openId}, #{slashPrice}, #{price}, #{payPrice}, #{remark}, #{brokerId}, #{promoCode}, #{scenicId}, #{status}) + insert into `order`(id, member_id, openid, `type`, `price_config_id`, slash_price, price, pay_price, remark, broker_id, promo_code, scenic_id, status) + VALUES (#{id}, #{memberId}, #{openId}, #{type}, #{priceConfigId}, #{slashPrice}, #{price}, #{payPrice}, #{remark}, #{brokerId}, #{promoCode}, #{scenicId}, #{status}) insert into order_item(order_id,goods_type, goods_id) VALUES