package com.oying.modules.sh.service.impl;
|
|
import com.oying.exception.BadRequestException;
|
import com.oying.modules.pc.product.domain.Product;
|
import com.oying.modules.pc.product.domain.enums.ProductStatusEnum;
|
import com.oying.modules.pc.product.service.ProductService;
|
import com.oying.modules.sh.domain.Order;
|
import com.oying.modules.sh.domain.request.GeneratorOrder;
|
import com.oying.modules.sh.domain.request.ProductOrder;
|
import com.oying.modules.sh.domain.request.SubmitOrder;
|
import com.oying.modules.sh.domain.vo.OrderInfo;
|
import com.oying.modules.sh.domain.vo.ProductInfo;
|
import com.oying.modules.sh.service.UserAddressService;
|
import com.oying.utils.FileUtil;
|
import lombok.RequiredArgsConstructor;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.oying.modules.sh.service.OrderService;
|
import com.oying.modules.sh.domain.dto.OrderQueryCriteria;
|
import com.oying.modules.sh.mapper.OrderMapper;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import com.oying.utils.PageUtil;
|
|
import java.math.BigDecimal;
|
import java.util.*;
|
import java.io.IOException;
|
import javax.servlet.http.HttpServletResponse;
|
|
import com.oying.utils.PageResult;
|
|
/**
|
* @author lixin
|
* @description 服务实现
|
* @date 2025-06-11
|
**/
|
@Service
|
@RequiredArgsConstructor
|
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {
|
|
private final OrderMapper orderMapper;
|
private final UserAddressService userAddressService;
|
private final ProductService productService;
|
|
@Override
|
public PageResult<Order> queryAll(OrderQueryCriteria criteria, Page<Object> page) {
|
return PageUtil.toPage(orderMapper.findAll(criteria, page));
|
}
|
|
@Override
|
public List<Order> queryAll(OrderQueryCriteria criteria) {
|
return orderMapper.findAll(criteria);
|
}
|
|
@Override
|
public Order submitOrder(SubmitOrder submit) {
|
return null;
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public OrderInfo generatorOrder(GeneratorOrder criteria) {
|
List<ProductInfo> products = new ArrayList<>();
|
BigDecimal amount = BigDecimal.ZERO;
|
for (ProductOrder productOrder : criteria.getProducts()) {
|
Product product = productService.getById(productOrder.getProductId());
|
if (product == null) {
|
throw new BadRequestException("商品不存在");
|
}
|
if (product.getStoreId().equals(criteria.getStoreId())) {
|
throw new BadRequestException("不支持跨门店下单");
|
}
|
if (!product.getStatus().equals(ProductStatusEnum.AVAILABLE.getValue())) {
|
ProductStatusEnum statusEnum = ProductStatusEnum.get(product.getStatus());
|
throw new BadRequestException(product.getName() + ":" + (statusEnum != null ? statusEnum.getReasonPhrase() : "状态"));
|
}
|
if (productOrder.getProductCount() > product.getStockQuantity()) {
|
throw new BadRequestException("商品库存不足");
|
}
|
if (productOrder.getProductCount() < product.getMinPurchaseQuantity()) {
|
throw new BadRequestException("起售数量不足");
|
}
|
ProductInfo info = new ProductInfo();
|
info.setProduct(product);
|
info.setProductLabels(product.getLabels());
|
info.setCount(productOrder.getProductCount());
|
products.add(info);
|
amount = amount.add(product.getPrice().multiply(BigDecimal.valueOf(productOrder.getProductCount())));
|
}
|
OrderInfo info = new OrderInfo();
|
info.setProducts(products);
|
info.setAmount(amount);
|
info.setPayAmount(amount);
|
info.setPromotionAmount(BigDecimal.ZERO);
|
info.setUserAddresses(userAddressService.queryUserAddress());
|
return info;
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void create(Order resources) {
|
orderMapper.insert(resources);
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void update(Order resources) {
|
Order order = getById(resources.getOrderId());
|
order.copy(resources);
|
orderMapper.updateById(order);
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void deleteAll(List<Long> ids) {
|
orderMapper.deleteBatchIds(ids);
|
}
|
|
@Override
|
public void download(List<Order> all, HttpServletResponse response) throws IOException {
|
List<Map<String, Object>> list = new ArrayList<>();
|
for (Order order : all) {
|
Map<String, Object> map = new LinkedHashMap<>();
|
map.put("订单号", order.getOrderNum());
|
map.put("用户id", order.getUserId());
|
map.put("门店ID", order.getStoreId());
|
map.put("门店", order.getStoreName());
|
map.put("描述", order.getOrderDescribe());
|
map.put("原金额", order.getOriginalPrice());
|
map.put("折扣价", order.getPaidPrice());
|
map.put("实付金额", order.getActuallyPayPrice());
|
map.put("支付状态", order.getPayState());
|
map.put("消息", order.getPayMessage());
|
map.put("支付类型", order.getPayType());
|
map.put("支付时间", order.getPayTime());
|
map.put("订单失效时间RFC3339", order.getExpireTime());
|
map.put("openid", order.getOpenid());
|
map.put("APPID", order.getAppId());
|
map.put("创建人", order.getCreateBy());
|
map.put("创建时间", order.getCreateTime());
|
map.put("修改者", order.getUpdateBy());
|
map.put("修改时间", order.getUpdateTime());
|
list.add(map);
|
}
|
FileUtil.downloadExcel(list, response);
|
}
|
}
|