|
|
@ -50,20 +50,22 @@ public class OrderServiceImpl implements OrderService {
|
|
|
|
private UserMapper userMapper;
|
|
|
|
private UserMapper userMapper;
|
|
|
|
@Autowired
|
|
|
|
@Autowired
|
|
|
|
private WebSocketServer webSocketServer;
|
|
|
|
private WebSocketServer webSocketServer;
|
|
|
|
/*
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 用户下单
|
|
|
|
* 用户下单
|
|
|
|
* */
|
|
|
|
* @param ordersSubmitDTO 订单提交数据传输对象
|
|
|
|
@Transactional
|
|
|
|
* @return 订单提交视图对象
|
|
|
|
@Override
|
|
|
|
*/
|
|
|
|
public OrderSubmitVO submitOrder(OrdersSubmitDTO ordersSubmitDTO) {
|
|
|
|
@Transactional // 开启事务管理
|
|
|
|
//1.处理各种业务异常(地址薄为空,购物车数据为空)
|
|
|
|
public OrderSubmitVO submit(OrdersSubmitDTO ordersSubmitDTO) {
|
|
|
|
|
|
|
|
//1.处理各种业务异常(地址簿为空、购物车数据为空)
|
|
|
|
AddressBook addressBook = addressBookMapper.getById(ordersSubmitDTO.getAddressBookId());
|
|
|
|
AddressBook addressBook = addressBookMapper.getById(ordersSubmitDTO.getAddressBookId());
|
|
|
|
if(addressBook == null){
|
|
|
|
if(addressBook == null){
|
|
|
|
//抛出业务异常
|
|
|
|
//抛出业务异常
|
|
|
|
throw new AddressBookBusinessException(MessageConstant.ADDRESS_BOOK_IS_NULL);
|
|
|
|
throw new AddressBookBusinessException(MessageConstant.ADDRESS_BOOK_IS_NULL);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//查询当前用户购物车数据
|
|
|
|
//查询当前用户的购物车数据
|
|
|
|
Long userId = BaseContext.getCurrentId();
|
|
|
|
Long userId = BaseContext.getCurrentId();
|
|
|
|
ShoppingCart shoppingCart = new ShoppingCart();
|
|
|
|
ShoppingCart shoppingCart = new ShoppingCart();
|
|
|
|
shoppingCart.setUserId(userId);
|
|
|
|
shoppingCart.setUserId(userId);
|
|
|
@ -83,23 +85,21 @@ public class OrderServiceImpl implements OrderService {
|
|
|
|
orders.setConsignee(addressBook.getConsignee());
|
|
|
|
orders.setConsignee(addressBook.getConsignee());
|
|
|
|
orders.setUserId(userId);
|
|
|
|
orders.setUserId(userId);
|
|
|
|
orderMapper.insert(orders);
|
|
|
|
orderMapper.insert(orders);
|
|
|
|
|
|
|
|
|
|
|
|
List<OrderDetail> orderDetailList = new ArrayList<>();
|
|
|
|
|
|
|
|
//3.向订单明细表插入n条数据
|
|
|
|
//3.向订单明细表插入n条数据
|
|
|
|
|
|
|
|
List<OrderDetail> orderDetailList = new ArrayList<>();
|
|
|
|
for (ShoppingCart cart : shoppingCartList) {
|
|
|
|
for (ShoppingCart cart : shoppingCartList) {
|
|
|
|
OrderDetail orderDetail = new OrderDetail();
|
|
|
|
OrderDetail orderDetail = new OrderDetail();
|
|
|
|
BeanUtils.copyProperties(cart,orderDetail);
|
|
|
|
BeanUtils.copyProperties(cart,orderDetail);
|
|
|
|
orderDetail.setOrderId(orders.getId());//设置当前订单明细的orderId
|
|
|
|
orderDetail.setOrderId(orders.getId());//设置当前订单明细的orderId
|
|
|
|
orderDetailList.add(orderDetail);
|
|
|
|
orderDetailList.add(orderDetail);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
orderDetailMapper.insertBatch(orderDetailList);
|
|
|
|
orderMapper.insertBatch(orderDetailList);
|
|
|
|
//4.清空购物车数据
|
|
|
|
//4.清空购物车数据
|
|
|
|
shoppingCartMapper.deleteByUserId(userId);
|
|
|
|
shoppingCartMapper.deleteByUserId(userId);
|
|
|
|
//5.封装VO返回结果
|
|
|
|
//5.封装返回结果
|
|
|
|
OrderSubmitVO orderSubmitVO = OrderSubmitVO.builder()
|
|
|
|
OrderSubmitVO orderSubmitVO = OrderSubmitVO.builder()
|
|
|
|
.id(orders.getId())
|
|
|
|
.id(orders.getId())
|
|
|
|
.orderTime(orders.getOrderTime())
|
|
|
|
.orderTime(orders.getOrderTime())
|
|
|
|
.orderNumber(orders.getNumber())
|
|
|
|
|
|
|
|
.orderAmount(orders.getAmount())
|
|
|
|
.orderAmount(orders.getAmount())
|
|
|
|
.build();
|
|
|
|
.build();
|
|
|
|
return orderSubmitVO;
|
|
|
|
return orderSubmitVO;
|
|
|
@ -107,23 +107,23 @@ public class OrderServiceImpl implements OrderService {
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 订单支付
|
|
|
|
* 订单支付
|
|
|
|
*
|
|
|
|
* @param ordersPaymentDTO 订单支付数据传输对象
|
|
|
|
* @param ordersPaymentDTO
|
|
|
|
* @return 订单支付视图对象
|
|
|
|
* @return
|
|
|
|
* @throws Exception 异常信息
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public OrderPaymentVO payment(OrdersPaymentDTO ordersPaymentDTO) throws Exception {
|
|
|
|
public OrderPaymentVO payment(OrdersPaymentDTO ordersPaymentDTO) throws Exception {
|
|
|
|
// 当前登录用户id
|
|
|
|
// 当前登录用户id
|
|
|
|
Long userId = BaseContext.getCurrentId();
|
|
|
|
Long userId = BaseContext.getCurrentId();
|
|
|
|
User user = userMapper.getById(userId);
|
|
|
|
User user = userMapper.getById(userId);
|
|
|
|
|
|
|
|
|
|
|
|
//调用微信支付接口,生成预支付交易单
|
|
|
|
/*调用微信接口,生成预支付交易单*/
|
|
|
|
/* JSONObject jsonObject = weChatPayUtil.pay(
|
|
|
|
/* JSONObject jsonObject = weChatPayUtil.pay(
|
|
|
|
ordersPaymentDTO.getOrderNumber(), //商户订单号
|
|
|
|
ordersPaymentDTO.getOrdersId(), //商户订单号
|
|
|
|
new BigDecimal(0.01), //支付金额,单位 元
|
|
|
|
new BigDecimal(0.01), //支付金额,单位:元
|
|
|
|
"苍穹外卖订单", //商品描述
|
|
|
|
"苍穹外卖订单", //商品描述
|
|
|
|
user.getOpenid() //微信用户的openid
|
|
|
|
user.getOpenid() //微信用户的openid
|
|
|
|
);*/
|
|
|
|
);*/
|
|
|
|
JSONObject jsonObject = new JSONObject();
|
|
|
|
JSONObject jsonObject = new JSONObject(); // 模拟微信支付返回的数据
|
|
|
|
|
|
|
|
|
|
|
|
if (jsonObject.getString("code") != null && jsonObject.getString("code").equals("ORDERPAID")) {
|
|
|
|
if (jsonObject.getString("code") != null && jsonObject.getString("code").equals("ORDERPAID")) {
|
|
|
|
throw new OrderBusinessException("该订单已支付");
|
|
|
|
throw new OrderBusinessException("该订单已支付");
|
|
|
@ -137,72 +137,81 @@ public class OrderServiceImpl implements OrderService {
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 支付成功,修改订单状态
|
|
|
|
* 支付成功,修改订单状态
|
|
|
|
*
|
|
|
|
* @param outTradeNo 商户订单号
|
|
|
|
* @param outTradeNo
|
|
|
|
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public void paySuccess(String outTradeNo) {
|
|
|
|
public void paySuccess(String outTradeNo) {
|
|
|
|
|
|
|
|
|
|
|
|
// 根据订单号查询订单
|
|
|
|
// 根据订单号查询订单
|
|
|
|
Orders ordersDB = orderMapper.getByNumber(outTradeNo);
|
|
|
|
Orders ordersDB = orderMapper.getByNumber(outTradeNo);
|
|
|
|
|
|
|
|
|
|
|
|
// 根据订单id更新订单的状态、支付方式、支付状态、结账时间
|
|
|
|
// 根据订单id更新订单的状态、支付状态、结账时间
|
|
|
|
Orders orders = Orders.builder()
|
|
|
|
Orders orders = Orders.builder()
|
|
|
|
.id(ordersDB.getId())
|
|
|
|
.id(ordersDB.getId())
|
|
|
|
.status(Orders.TO_BE_CONFIRMED)
|
|
|
|
.status(Orders.TO_BE_CONFIRMED)
|
|
|
|
.payStatus(Orders.PAID)
|
|
|
|
.payStatus(Orders.PAID)
|
|
|
|
.checkoutTime(LocalDateTime.now())
|
|
|
|
.checkoutTime(LocalDateTime.now())
|
|
|
|
.build();
|
|
|
|
.build();
|
|
|
|
|
|
|
|
|
|
|
|
orderMapper.update(orders);
|
|
|
|
orderMapper.update(orders);
|
|
|
|
|
|
|
|
|
|
|
|
//通过websocket向客户端浏览器推送消息 type orderId content
|
|
|
|
//通过websocket向客户端浏览器推送消息 type=1表示来单提醒 2表示客户催单
|
|
|
|
Map map = new HashMap<>();
|
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
|
map.put("type",1);//1表示来单提醒 2表示客户催单
|
|
|
|
map.put("type", 1); //1表示来单提醒 2表示客户催单
|
|
|
|
map.put("orderId",ordersDB.getId());
|
|
|
|
map.put("orderId", ordersDB.getId());
|
|
|
|
map.put("content","订单号:" + outTradeNo);
|
|
|
|
map.put("content", "订单号:" + outTradeNo);
|
|
|
|
|
|
|
|
|
|
|
|
String json = JSON.toJSONString(map);
|
|
|
|
String json = JSON.toJSONString(map);
|
|
|
|
webSocketServer.sendToAllClient(json);
|
|
|
|
webSocketServer.sendToAllClient(json);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 历史订单查询分页列表
|
|
|
|
|
|
|
|
* @param pageNum 页码数
|
|
|
|
|
|
|
|
* @param pageSize 每页显示数量
|
|
|
|
|
|
|
|
* @param status 订单状态
|
|
|
|
|
|
|
|
* @return 分页结果对象
|
|
|
|
|
|
|
|
*/
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public PageResult historyQueryPage(int pageNum, int pageSize, Integer status) {
|
|
|
|
public PageResult historyQueryPage(int pageNum, int pageSize, Integer status) {
|
|
|
|
PageHelper.startPage(pageNum,pageSize);
|
|
|
|
PageHelper.startPage(pageNum, pageSize); // 开始分页查询
|
|
|
|
|
|
|
|
OrdersPageQueryDTO ordersPageQueryDTO = new OrdersPageQueryDTO(); // 创建订单分页查询数据传输对象
|
|
|
|
OrdersPageQueryDTO ordersPageQueryDTO = new OrdersPageQueryDTO();
|
|
|
|
Long userId = BaseContext.getCurrentId(); // 获取当前用户id
|
|
|
|
Long userId = BaseContext.getCurrentId();
|
|
|
|
ordersPageQueryDTO.setUserId(userId); // 设置用户id到查询条件中
|
|
|
|
ordersPageQueryDTO.setUserId(userId);
|
|
|
|
ordersPageQueryDTO.setStatus(status); // 设置订单状态到查询条件中
|
|
|
|
ordersPageQueryDTO.setStatus(status);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//分页查询条件
|
|
|
|
// 分页查询条件设置完成,执行分页查询操作
|
|
|
|
Page<Orders> page = orderMapper.pageQuery(ordersPageQueryDTO);
|
|
|
|
Page<Orders> page = orderMapper.pageQuery(ordersPageQueryDTO);
|
|
|
|
|
|
|
|
List<OrderVO> list = new ArrayList<>(); // 初始化订单视图对象列表
|
|
|
|
List<OrderVO> list = new ArrayList<>();
|
|
|
|
if (page != null && page.getTotal() > 0) { // 如果查询结果不为空且总记录数大于0,则进行数据处理
|
|
|
|
if(page != null && page.getTotal() > 0){
|
|
|
|
for (Orders orders : page) { // 遍历查询结果中的每个订单对象
|
|
|
|
for (Orders orders : page) {
|
|
|
|
Long orderId = orders.getId(); // 获取订单id
|
|
|
|
Long orderId = orders.getId();
|
|
|
|
List<OrderDetail> orderDetails = orderDetailMapper.getByOrderId(orderId); // 根据订单id查询订单明细列表
|
|
|
|
List<OrderDetail> orderDetails = orderDetailMapper.getByOrderId(orderId);
|
|
|
|
OrderVO orderVO = new OrderVO(); // 创建订单视图对象
|
|
|
|
OrderVO orderVO = new OrderVO();
|
|
|
|
BeanUtils.copyProperties(orders, orderVO); // 将订单对象的属性复制到订单视图对象中
|
|
|
|
BeanUtils.copyProperties(orders,orderVO);
|
|
|
|
orderVO.setOrderDetailList(orderDetails); // 设置订单明细列表到订单视图对象中
|
|
|
|
orderVO.setOrderDetailList(orderDetails);
|
|
|
|
list.add(orderVO); // 将订单视图对象添加到列表中
|
|
|
|
list.add(orderVO);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return new PageResult(page.getTotal(),list);
|
|
|
|
return new PageResult(page.getTotal(), list); // 返回分页结果对象,包含总记录数和订单视图对象列表
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 根据id查询订单详情
|
|
|
|
|
|
|
|
* @param id 订单id
|
|
|
|
|
|
|
|
* @return 订单视图对象
|
|
|
|
|
|
|
|
*/
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public OrderVO showDetails(Long id) {
|
|
|
|
public OrderVO showDetails(Long id) {
|
|
|
|
//根据id查询订单
|
|
|
|
//根据id查询订单
|
|
|
|
Orders orders = orderMapper.getById(id);
|
|
|
|
Orders orders = orderMapper.getById(id);
|
|
|
|
List<OrderDetail> orderDetails = orderDetailMapper.getByOrderId(orders.getId());
|
|
|
|
List<OrderDetail> orderDetails = orderDetailMapper.getByOrderId(orders.getId()); // 根据订单id查询订单明细列表
|
|
|
|
OrderVO orderVO = new OrderVO();
|
|
|
|
OrderVO orderVO = new OrderVO(); // 创建订单视图对象
|
|
|
|
BeanUtils.copyProperties(orders,orderVO);
|
|
|
|
BeanUtils.copyProperties(orders, orderVO); // 将订单对象的属性复制到订单视图对象中
|
|
|
|
orderVO.setOrderDetailList(orderDetails);
|
|
|
|
orderVO.setOrderDetailList(orderDetails); // 设置订单明细列表到订单视图对象中
|
|
|
|
return orderVO;
|
|
|
|
return orderVO; // 返回订单视图对象
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Transactional
|
|
|
|
@Transactional
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public void cancel(Long id) {
|
|
|
|
public void cancel(Long id) {
|
|
|
|
Orders orders = orderMapper.getById(id);
|
|
|
|
Orders orders = orderMapper.getById(id);
|
|
|
|