package com.sky.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
import com.sky.constant.MessageConstant;
import com.sky.context.BaseContext;
import com.sky.dto.*;
import com.sky.entity.*;
import com.sky.exception.AddressBookBusinessException;
import com.sky.exception.OrderBusinessException;
import com.sky.exception.ShoppingCartBusinessException;
import com.sky.mapper.*;
import com.sky.result.PageResult;
import com.sky.service.OrderService;
import com.sky.utils.WeChatPayUtil;
import com.sky.vo.OrderPaymentVO;
import com.sky.vo.OrderStatisticsVO;
import com.sky.vo.OrderSubmitVO;
import com.sky.vo.OrderVO;
import com.sky.websoket.WebSocketServer;
import org.aspectj.weaver.ast.Or;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.annotation.WebServlet;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author zc
* @create 2023-08-10-15:46
*/
@Service
public class OrderServiceImpl implements OrderService {
@Autowired
private OrderMapper orderMapper;
@Autowired
private OrderDetailMapper orderDetailMapper;
@Autowired
private AddressBookMapper addressBookMapper;
@Autowired
private ShoppingCartMapper shoppingCartMapper;
@Autowired
private UserMapper userMapper;
@Autowired
private WeChatPayUtil weChatPayUtil;
@Autowired
private WebSocketServer webSocketServer;
//用户下单
@Transactional
public OrderSubmitVO submitOrder(OrdersSubmitDTO ordersSubmitDTO) {
//处理各种业务异常(地址簿为空、购物车数据为空)
AddressBook addressBook=addressBookMapper.getById(ordersSubmitDTO.getAddressBookId());
if(addressBook==null){
throw new AddressBookBusinessException(MessageConstant.SHOPPING_CART_IS_NULL);
}
//查询当前用户的购物车数据
Long userId= BaseContext.getCurrentId();
ShoppingCart shoppingCart=new ShoppingCart();
shoppingCart.setUserId(userId);
List<ShoppingCart> shoppingCartList = shoppingCartMapper.list(shoppingCart);
if(shoppingCartList==null&&shoppingCartList.size()==0){
throw new ShoppingCartBusinessException(MessageConstant.SHOPPING_CART_IS_NULL);
}
//向订单表插入1条数据
Orders orders=new Orders();
BeanUtils.copyProperties(ordersSubmitDTO,orders);
orders.setOrderTime(LocalDateTime.now());
orders.setPayStatus(Orders.UN_PAID);
orders.setStatus(Orders.PENDING_PAYMENT);
orders.setNumber(String.valueOf(System.currentTimeMillis()));
orders.setPhone(addressBook.getPhone());
orders.setConsignee(addressBook.getConsignee());
orders.setUserId(userId);
orderMapper.insert(orders);
List<OrderDetail> orderDetailList=new ArrayList<>();
//向订单明细表插入n条数据
for(ShoppingCart cart:shoppingCartList){
OrderDetail orderDetail=new OrderDetail();
BeanUtils.copyProperties(cart,orderDetail);
orderDetail.setOrderId(orders.getId());
orderDetailList.add(orderDetail);
}
orderDetailMapper.insertBatch(orderDetailList);
//清空当前用户的购物车数据
shoppingCartMapper.deleteByUserId(userId);
//封装o返回结果
OrderSubmitVO orderSubmitVO=OrderSubmitVO.builder()
.id(orders.getId())
.orderTime(orders.getOrderTime())
.orderNumber(orders.getNumber())
.orderAmount(orders.getAmount())
.build();
return null;
}
/**
* 订单支付
*
* @param ordersPaymentDTO
* @return
*/
public OrderPaymentVO payment(OrdersPaymentDTO ordersPaymentDTO) throws Exception {
// 当前登录用户id
Long userId = BaseContext.getCurrentId();
User user = userMapper.getById(userId);
//调用微信支付接口,生成预支付交易单
/*JSONObject jsonObject = weChatPayUtil.pay(
ordersPaymentDTO.getOrderNumber(), //商户订单号
new BigDecimal(0.01), //支付金额,单位 元
"苍穹外卖订单", //商品描述
user.getOpenid() //微信用户的openid
);*/
JSONObject jsonObject=new JSONObject();
if (jsonObject.getString("code") != null && jsonObject.getString("code").equals("ORDERPAID")) {
throw new OrderBusinessException("该订单已支付");
}
OrderPaymentVO vo = jsonObject.toJavaObject(OrderPaymentVO.class);
vo.setPackageStr(jsonObject.getString("package"));
paySuccess(ordersPaymentDTO.getOrderNumber());
return vo;
}
/**
* 支付成功,修改订单状态
*
* @param outTradeNo
*/
public void paySuccess(String outTradeNo) {
// 根据订单号查询订单
Orders ordersDB = orderMapper.getByNumber(outTradeNo);
// 根据订单id更新订单的状态、支付方式、支付状态、结账时间
/*Orders orders = Orders.builder()
.id(ordersDB.getId())
.status(Orders.TO_BE_CONFIRMED)
.payStatus(Orders.PAID)
.checkoutTime(LocalDateTime.now())
.build();*/
Orders orders=new Orders();
orders.setId(ordersDB.getId());
orders.setStatus(Orders.TO_BE_CONFIRMED);
orders.setPayStatus(Orders.PAID);
orders.setCheckoutTime(LocalDateTime.now());
orderMapper.update(orders);
//通过websocket向客户端浏览器推送信息
Map map=new HashMap();
map.put("type",1);
map.put("orderId",ordersDB.getId());
map.put("content","订单号:"+outTradeNo);
String json= JSON.toJSONString(map);
webSocketServer.sendToAllClient(json);
}
/**
* 用户端订单分页查询
*
* @param pageNum
* @param pageSize
* @param status
* @return
*/
public PageResult pageQuery4User(int pageNum, int pageSize, Integer status) {
// 设置分页
PageHelper.startPage(pageNum, pageSize);
OrdersPageQueryDTO ordersPageQueryDTO = new OrdersPageQueryDTO();
ordersPageQueryDTO.setUserId(BaseContext.getCurrentId());
ordersPageQueryDTO.setStatus(status);
// 分页条件查询
Page<Orders> page = orderMapper.pageQuery(ordersPageQueryDTO);
List<OrderVO> list = new ArrayList();
// 查询出订单明细,并封装入OrderVO进行响应
if (page != null && page.getTotal() > 0) {
for (Orders orders : page) {
Long orderId = orders.getId();// 订单id
// 查询订单明细
List<OrderDetail> orderDetails = orderDetailMapper.getByOrderId(orderId);
OrderVO orderVO = new OrderVO();
BeanUtils.copyProperties(orders, orderVO);
orderVO.setOrderDetailList(orderDetails);
list.add(orderVO);
}
}
return new PageResult(page.getTotal(), list);
}
/**
* 查询订单详情
*
* @param id
* @return
*/
public OrderVO details(Long id) {
// 根据id查询订单
Orders orders = orderMapper.getById(id);
// 查询该订单对应的菜品/套餐明细
List<OrderDetail> orderDetailList = orderDetailMapper.getByOrderId(orders.getId());
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【资源说明】 基于Java开发的校园食堂外卖平台源码-课程设计.zip基于Java开发的校园食堂外卖平台源码-课程设计.zip基于Java开发的校园食堂外卖平台源码-课程设计.zip基于Java开发的校园食堂外卖平台源码-课程设计.zip基于Java开发的校园食堂外卖平台源码-课程设计.zip基于Java开发的校园食堂外卖平台源码-课程设计.zip基于Java开发的校园食堂外卖平台源码-课程设计.zip基于Java开发的校园食堂外卖平台源码-课程设计.zip基于Java开发的校园食堂外卖平台源码-课程设计.zip 基于Java开发的校园食堂外卖平台源码-课程设计.zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
资源推荐
资源详情
资源评论
收起资源包目录
基于Java开发的校园食堂外卖平台源码-课程设计.zip (157个子文件)
.gitignore 50B
OrderServiceImpl.java 18KB
ReportServiceImpl.java 11KB
WeChatPayUtil.java 9KB
SetmealServiceImpl.java 6KB
HttpClientUtil.java 5KB
DishServiceImpl.java 5KB
EmployeeServiceImpl.java 5KB
WorkspaceServiceImpl.java 5KB
ShoppingCartServiceImpl.java 4KB
CategoryServiceImpl.java 4KB
PayNotifyController.java 4KB
WebMvcConfiguration.java 4KB
EmployeeController.java 4KB
AutoFillAspect.java 3KB
OrderController.java 3KB
DishController.java 3KB
OrderController.java 3KB
AddressBookController.java 3KB
ReportController.java 3KB
SetmealController.java 3KB
JacksonObjectMapper.java 3KB
CategoryController.java 3KB
Orders.java 2KB
AliOssUtil.java 2KB
UserServiceImpl.java 2KB
WorkSpaceController.java 2KB
AddressBookServiceImpl.java 2KB
JwtUtil.java 2KB
OrderService.java 2KB
SetmealMapper.java 2KB
JwtTokenUserInterceptor.java 2KB
JwtTokenAdminInterceptor.java 2KB
ShoppingCartController.java 2KB
OrderTask.java 2KB
DishController.java 2KB
UserController.java 2KB
WebSocketServer.java 2KB
SetmealController.java 2KB
OrderMapper.java 2KB
DishMapper.java 2KB
MessageConstant.java 2KB
AddressBookMapper.java 1KB
ShoppingCartMapper.java 1KB
EmployeeMapper.java 1KB
GlobalExceptionHandler.java 1KB
CategoryMapper.java 1KB
SetmealService.java 1KB
ShopController.java 1KB
AddressBook.java 1KB
OrdersDTO.java 1KB
SetmealDishMapper.java 1KB
DishService.java 1014B
EmployeeService.java 988B
CategoryController.java 979B
DishVO.java 942B
SetmealVO.java 941B
CategoryService.java 935B
ShopController.java 886B
OrdersSubmitDTO.java 884B
OssConfiguration.java 856B
Setmeal.java 853B
Dish.java 850B
RedisConfiguration.java 844B
ReportService.java 836B
WeChatProperties.java 831B
Result.java 821B
Employee.java 816B
Category.java 815B
ShoppingCart.java 808B
OrderReportVO.java 763B
User.java 741B
OrderDetail.java 740B
WorkspaceService.java 727B
SkyApplication.java 724B
DishFlavorMapper.java 683B
EmployeeLoginVO.java 665B
UserMapper.java 660B
SetmealDTO.java 651B
SetmealDish.java 649B
DishDTO.java 620B
ShoppingCartService.java 605B
JwtProperties.java 600B
OrderOverViewVO.java 591B
OrderDetailMapper.java 579B
OrdersPageQueryDTO.java 574B
UserReportVO.java 561B
OrderPaymentVO.java 557B
BusinessDataVO.java 547B
AutoFill.java 535B
OrderSubmitVO.java 527B
DishFlavor.java 508B
SalesTop10ReportVO.java 489B
TurnoverReportVO.java 477B
OrderVO.java 461B
WebSocketConfiguration.java 457B
DishItemVO.java 453B
AutoFillConstant.java 424B
EmployeeLoginDTO.java 417B
SetmealOverViewVO.java 406B
共 157 条
- 1
- 2
资源评论
Make程序设计
- 粉丝: 5621
- 资源: 3567
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功