package com.lqm.service.impl;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.AlipayResponse;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradeAppPayModel;
import com.alipay.api.request.AlipayTradeAppPayRequest;
import com.alipay.api.response.AlipayTradeAppPayResponse;
import com.alipay.demo.trade.config.Configs;
import com.alipay.demo.trade.model.ExtendParams;
import com.alipay.demo.trade.model.GoodsDetail;
import com.alipay.demo.trade.service.AlipayTradeService;
import com.alipay.demo.trade.service.impl.AlipayTradeServiceImpl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.lqm.common.Const;
import com.lqm.common.ServerResponse;
import com.lqm.common.enums.OrderStatusEnum;
import com.lqm.common.enums.PayPlatformEnum;
import com.lqm.common.enums.PaymentTypeEnum;
import com.lqm.common.enums.ProductStatusEnum;
import com.lqm.dao.*;
import com.lqm.pojo.*;
import com.lqm.service.IOrderService;
import com.lqm.util.BigDecimalUtil;
import com.lqm.util.DateTimeUtil;
import com.lqm.util.PropertiesUtil;
import com.lqm.vo.OrderItemVo;
import com.lqm.vo.OrderProductVo;
import com.lqm.vo.OrderVo;
import com.lqm.vo.ShippingVo;
import com.sun.media.jfxmedia.logging.Logger;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.*;
/**
* Created by geely
*/
@Service("iOrderService")
@Slf4j
public class OrderServiceImpl implements IOrderService {
private static AlipayTradeService tradeService;
static {
/** 一定要在创建AlipayTradeService之前调用Configs.init()设置默认参数
* Configs会读取classpath下的zfbinfo.properties文件配置信息,如果找不到该文件则确认该文件是否在classpath目录
*/
Configs.init("zfbinfo.properties");
/** 使用Configs提供的默认参数
* AlipayTradeService可以使用单例或者为静态成员对象,不需要反复new
*/
tradeService = new AlipayTradeServiceImpl.ClientBuilder().build();
}
@Autowired
private OrderMapper orderMapper;
@Autowired
private OrderItemMapper orderItemMapper;
@Autowired
private PayInfoMapper payInfoMapper;
@Autowired
private CartMapper cartMapper;
@Autowired
private ProductMapper productMapper;
@Autowired
private ShippingMapper shippingMapper;
public ServerResponse createOrderByCard(Integer userId, Integer shippingId){
//从购物车中获取数据
List<Cart> cartList = cartMapper.selectCheckedCartByUserId(userId);
//计算这个订单的总价
ServerResponse serverResponse = this.getCartOrderItem(userId,cartList);
if(!serverResponse.isSuccess()){
return serverResponse;
}
List<OrderItem> orderItemList = (List<OrderItem>)serverResponse.getData();
BigDecimal payment = this.getOrderTotalPrice(orderItemList);
//生成订单
Order order = this.assembleOrder(userId,shippingId,payment);
if(order == null){
return ServerResponse.createByErrorMessage("生成订单错误");
}
if(CollectionUtils.isEmpty(orderItemList)){
return ServerResponse.createByErrorMessage("购物车为空");
}
for(OrderItem orderItem : orderItemList){
orderItem.setOrderNo(order.getOrderNo());
}
//mybatis 批量插入
orderItemMapper.batchInsert(orderItemList);
//生成成功,我们要减少我们产品的库存
this.reduceProductStock(orderItemList);
//清空一下购物车
this.cleanCart(cartList);
//返回给前端数据
OrderVo orderVo = assembleOrderVo(order,orderItemList);
return ServerResponse.createBySuccess(orderVo);
}
public ServerResponse createOrderDirect(int userId,long productId,int quantity,Integer shippingId){
Product product = productMapper.selectByPrimaryKey(productId);
if(ProductStatusEnum.ON_SALE.getCode() != product.getStatus()){
return ServerResponse.createByErrorMessage("产品"+product.getName()+"不是在线售卖状态");
}
//校验库存
if(quantity > product.getStock()){
return ServerResponse.createByErrorMessage("产品"+product.getName()+"库存不足");
}
BigDecimal payment = BigDecimalUtil.mul(product.getPrice().doubleValue(),quantity);
//Order订单插入
Order order = this.assembleOrder(userId,shippingId,payment);
if(order == null){
return ServerResponse.createByErrorMessage("生成订单错误");
}
//OrderItem插入
OrderItem orderItem = new OrderItem();
orderItem.setUserId(userId);
orderItem.setProductId(product.getId());
orderItem.setProductName(product.getName());
orderItem.setProductImage(product.getMainImage());
orderItem.setCurrentUnitPrice(product.getPrice());
orderItem.setQuantity(quantity);
orderItem.setTotalPrice(payment);
orderItem.setOrderNo(order.getOrderNo());
orderItemMapper.insert(orderItem);
//生成成功,我们要减少我们产品的库存
product.setStock(product.getStock()-orderItem.getQuantity());
productMapper.updateByPrimaryKeySelective(product);
//返回给前端数据
List<OrderItem> orderItemList = new ArrayList<>();
orderItemList.add(orderItem);
OrderVo orderVo = assembleOrderVo(order,orderItemList);
return ServerResponse.createBySuccess(orderVo);
}
private OrderVo assembleOrderVo(Order order,List<OrderItem> orderItemList){
OrderVo orderVo = new OrderVo();
orderVo.setOrderNo(order.getOrderNo());
orderVo.setPayment(order.getPayment());
orderVo.setPaymentType(order.getPaymentType());
orderVo.setPaymentTypeDesc(PaymentTypeEnum.codeOf(order.getPaymentType()).getValue());
orderVo.setPostage(order.getPostage());
orderVo.setStatus(order.getStatus());
orderVo.setStatusDesc(OrderStatusEnum.codeOf(order.getStatus()).getValue());
orderVo.setShippingId(order.getShippingId());
Shipping shipping = shippingMapper.selectByPrimaryKey(order.getShippingId());
if(shipping != null){
orderVo.setReceiverName(shipping.getReceiverName());
orderVo.setShippingVo(assembleShippingVo(shipping));
}
orderVo.setPaymentTime(DateTimeUtil.dateToStr(order.getPaymentTime()));
orderVo.setSendTime(DateTimeUtil.dateToStr(order.getSendTime()));
orderVo.setEndTime(DateTimeUtil.dateToStr(order.getEndTime()));
orderVo.setCreateTime(DateTimeUtil.dateToStr(order.getCreateTime()));
orderVo.setCloseTime(DateTimeUtil.dateToStr(order.getCloseTime()));
orderVo.setImageHost(PropertiesUtil.getProperty("ftp.server.http.prefix"));
List<OrderItemVo> orderItemVoList = Lists.newArrayList();
for(OrderItem orderItem : orderItemList){
OrderItemVo orderItemVo = assembleOrderItemVo(orderItem);
orderItemVoList.add(orderItemVo);
}
orderVo.setOrderItemVoList(orderItemVoList);
return orderVo;
}
private OrderItemVo assembleOrderItemVo(OrderItem orderItem){
OrderItemVo orderItemVo = new OrderItemVo();
orderItemVo.setOrderNo(orderItem.getOrderNo());
orderItemVo.setProductId(orderItem.getProductId());
orderItemVo.setProductName(orderItem.getProductName());
orderItemVo
onnx
- 粉丝: 1w+
- 资源: 5627
最新资源
- 联合计算铌酸锂微环的Integrated Dispersion:分析超连续谱与光频梳高阶色散的应用研究,Lumerical Mode联合Matlab计算铌酸锂微环的Integrated Dispers
- 基于高频信号注入法的永磁同步电机最大转矩电流比控制算法的在线参数辨识与仿真研究报告-附MATLAB Simulink模型、参考文献及详细说明文档,永磁同步电机控制算法-最大转矩电流比控制(高频信号
- Matlab Simulink下的自抗扰控制(ADRC)算法实现:高效扰动消除与控制系统优化,自抗扰控制(ADRC)算法的Matlab Simulink实现,ADRC算法,自抗扰控制算法的Matlab
- 基于滑模控制的双向Buck-Boost升降压斩波电路及其Cuk电路的Matlab Simulink模型研究:开环闭环策略下的隔离与非隔离双向电路设计,滑模控制双向Buck-Boost升降压斩波电路,c
- linux Miniconda 安装脚本
- 基于模型预测控制(MPC)的PMSM磁场定向控制(FOC)与速度精确控制研究,Simulink-基于模型预测控制对PMSM进行FOC控制,模拟控制了PMSM的速度:基于模型预测控制(MPC)对永磁同步
- 《解锁Cursor:开启高效编程新旅程》,从基础到实战演练
- "MATLAB驱动的直齿轮热弹耦合动力学分析程序:参数输入与结果输出的一站式解决方案",1-220基于matlab的考虑直齿轮热弹耦合的动力学分析,输入主动轮、从动轮各类参数,考虑润滑油温度、润滑油粘
- R工作空间-手写数字识别数据集
- WOA-LightGBM算法:基于鲸鱼优化算法的LightGBM多变量回归预测Matlab程序包,WOA-LightGBM基于鲸鱼算法优化LightGBM的多变量回归预测 Matlab语言 程序已调试
- 基于Matlab Simulink的插电式混合动力汽车四驱PHEV建模与仿真教学:从模型搭建到策略开发的全流程解析,基于Matlab simulink的插电式混合动力汽车建模仿真模型4驱PHEV(比亚
- MATLAB程序视频:双层优化配置模型-含高比例可再生能源配电网灵活资源的运行与规划联合优化算法演示,matlab程序视频:该程序主要方法复现《含高比例可再生能源配电网灵活资源双层优化配置》运行-规
- 基于风光储一次调频的VSG虚拟同步机调频系统:四机两区域离散模型及非无穷大电网的渗透研究与应用定制方案,风光储一次调频,永磁同步风机VSG同步机调频两区域系统,离散模型,非无穷大电网,风机为网侧VSG
- 基于DAB双有源桥的Matlab Simulink仿真:移相技术对减小回流功率的影响及其应用,附带Lunwenviso绘图与Mathtype公式辅助开题报告与PPT演示 ,DAB双有源桥,单移相+双移
- MATLAB Simulink并联P2混合动力汽车仿真模型:策略可优化,操作性强,快速上手学术研究之利器,基于matlab simulink并联p2混合动力汽车simulink仿真模型(整车纯simu
- xitemao.mobileconfig
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈