batch下订单

This commit is contained in:
2025-02-25 16:57:35 +08:00
parent 95747a2a71
commit e199e0e57b
10 changed files with 158 additions and 31 deletions

View File

@ -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<PageInfo<OrderRespVO>> pageQuery(OrderReqQuery query) {
@ -337,4 +346,56 @@ public class OrderServiceImpl implements OrderService {
return ApiResponse.success(wxPayRespVO);
}
@Override
@Transactional(rollbackFor = Exception.class)
public ApiResponse<WxPayRespVO> 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<GoodsListRespVO> goodsList = priceBiz.queryGoodsList(priceConfig.getId());
List<OrderItemEntity> 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);
}
}

View File

@ -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<PriceConfigMapper, Price
@Autowired
private TemplateRepository templateRepository;
@Autowired
private ScenicRepository scenicRepository;
private PriceBiz priceBiz;
@Override
public List<PriceConfigRespVO> listByCondition(PriceConfigListReq req) {
@ -39,25 +39,7 @@ public class PriceConfigServiceImpl extends ServiceImpl<PriceConfigMapper, Price
@Override
public List<GoodsListRespVO> listGoodsByScenic(Long scenicId) {
List<GoodsListRespVO> goodsList = new ArrayList<>();
// 景区视频
List<TemplateRespVO> 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

View File

@ -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<PageInfo<OrderRespVO>> refundPageQuery(OrderReqQuery query);
ApiResponse<WxPayRespVO> createOrder(Long userId, CreateOrderReqVO orderAddReq) throws Exception;
ApiResponse<WxPayRespVO> createBatchOrder(Long userId, CreateBatchOrderReqVO batchOrderReqVO) throws Exception;
}

View File

@ -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;