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 implements OrderService { private final OrderMapper orderMapper; private final UserAddressService userAddressService; private final ProductService productService; @Override public PageResult queryAll(OrderQueryCriteria criteria, Page page) { return PageUtil.toPage(orderMapper.findAll(criteria, page)); } @Override public List 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 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 ids) { orderMapper.deleteBatchIds(ids); } @Override public void download(List all, HttpServletResponse response) throws IOException { List> list = new ArrayList<>(); for (Order order : all) { Map 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); } }