package com.example.service;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.RandomUtil;
import com.example.common.ResultCode;
import com.example.dao.OrderGoodsRelDao;
import com.example.dao.OrderInfoDao;
import com.example.entity.*;
import com.example.exception.CustomException;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
public class OrderInfoService {
@Resource
private OrderInfoDao orderInfoDao;
@Resource
private GoodsInfoService goodsInfoService;
@Resource
private AdminInfoService adminInfoService;
@Resource
private SaleInfoService saleInfoService;
@Resource
private UserInfoService userInfoService;
@Resource
private OrderGoodsRelDao orderGoodsRelDao;
@Resource
private CartInfoService cartInfoService;
/**
* 根据id查询订单信息
*/
public OrderInfo findById(Long id) {
OrderInfo orderInfo = orderInfoDao.selectByPrimaryKey(id);
packOrder(orderInfo);
return orderInfo;
}
public List<OrderInfo> findAll(Long userId, Integer level) {
List<OrderInfo> orderInfos = orderInfoDao.findByUserId(userId, level);
for (OrderInfo orderInfo : orderInfos) {
packOrder(orderInfo);
}
return orderInfos;
}
/**
* 包装订单的用户和菜品信息
*/
private void packOrder(OrderInfo orderInfo) {
Long orderId = orderInfo.getId();
List<OrderGoodsRel> rels = orderGoodsRelDao.findByOrderId(orderId);
orderInfo.setUserInfo(getUserInfo(orderInfo.getUserId(), orderInfo.getLevel()));
List<GoodsInfo> goodsList = CollUtil.newArrayList();
orderInfo.setGoodsList(goodsList);
for (OrderGoodsRel rel : rels) {
GoodsInfo goodsDetailInfo = goodsInfoService.findById(rel.getGoodsId());
if (goodsDetailInfo != null) {
// 注意这里返回的count是用户加入菜品的数量,而不是菜品的库存
goodsDetailInfo.setCount(rel.getCount());
goodsList.add(goodsDetailInfo);
}
}
}
/**
* 分页查询订单信息
*/
public PageInfo<OrderInfo> findEndPages(Integer pageNum, Integer pageSize, HttpServletRequest request) {
Account user = (Account) request.getSession().getAttribute("user");
if (user == null) {
throw new CustomException("1001", "session已失效,请重新登录");
}
Integer level = user.getLevel();
Long userId = user.getId();
PageHelper.startPage(pageNum, pageSize);
List<OrderInfo> orderInfos;
if (1 == level) {
orderInfos = orderInfoDao.selectAll();
} else if (userId != null){
orderInfos = orderInfoDao.findByEndUserId(userId, null, level);
} else {
orderInfos = new ArrayList<>();
}
for (OrderInfo orderInfo : orderInfos) {
packOrder(orderInfo);
}
return PageInfo.of(orderInfos);
}
public PageInfo<OrderInfo> findFrontPages(Long userId, Integer level, Integer pageNum, Integer pageSize) {
PageHelper.startPage(pageNum, pageSize);
List<OrderInfo> orderInfos;
if (userId != null){
orderInfos = orderInfoDao.findByUserId(userId, level);
} else {
orderInfos = new ArrayList<>();
}
for (OrderInfo orderInfo : orderInfos) {
packOrder(orderInfo);
}
return PageInfo.of(orderInfos);
}
/**
* 分页查询订单信息
*/
public PageInfo<OrderInfo> findPages(Long userId, Integer level, Integer pageNum, Integer pageSize) {
PageHelper.startPage(pageNum, pageSize);
List<OrderInfo> orderInfos;
if (userId != null) {
orderInfos = orderInfoDao.findByUserId(userId, level);
} else {
orderInfos = orderInfoDao.selectAll();
}
for (OrderInfo orderInfo : orderInfos) {
packOrder(orderInfo);
}
return PageInfo.of(orderInfos);
}
/**
* 下单
*/
@Transactional
public OrderInfo add(OrderInfo info) {
Long userId = info.getUserId();
Integer level = info.getLevel();
Account userInfo = getUserInfo(userId, level);
List<GoodsInfo> goodsList = info.getGoodsList();
// 将菜品分分类,根据上传用户id_用户level来确定唯一的key
Map<String, List<GoodsInfo>> collectMap = goodsList.stream()
.collect(Collectors.groupingBy(x -> x.getUserId() + "_" + x.getLevel()));
for (String key : collectMap.keySet()) {
List<GoodsInfo> list = collectMap.get(key);
// 这里面创建一个订单
OrderInfo orderInfo = new OrderInfo();
orderInfo.setUserId(userId);
orderInfo.setLevel(level);
orderInfo.setStatus("待付款");
orderInfo.setLinkAddress(userInfo.getAddress());
orderInfo.setLinkMan(userInfo.getNickName());
orderInfo.setLinkPhone(userInfo.getPhone());
orderInfo.setCreateTime(DateUtil.formatDateTime(new Date()));
// 订单id:用户id + 当前年月日时分 + 4位流水号
String orderId = userId + DateUtil.format(new Date(), "yyyyMMddHHmm") + RandomUtil.randomNumbers(4);
orderInfo.setOrderId(orderId);
// 生成订单
orderInfoDao.insertSelective(orderInfo);
double totalPrice = 0;
for (GoodsInfo orderGoodsVO : list) {
Long goodsId = orderGoodsVO.getId();
// 查询菜品信息
GoodsInfo goodsDetail = goodsInfoService.findById(goodsId);
if (goodsDetail != null) {
Integer orderCount = orderGoodsVO.getCount() == null ? 0 : orderGoodsVO.getCount();
Integer goodsCount = goodsDetail.getCount() == null ? 0 : goodsDetail.getCount();
// 扣库存
if (orderCount <= goodsCount) {
goodsDetail.setCount(goodsCount - orderCount);
// 销量 +count
int sales = goodsDetail.getSales() == null ? 0 : goodsDetail.getSales();
goodsDetail.setSales(sales + orderCount);
goodsInfoService.update(goodsDetail);
// 建立关系
OrderGoodsRel orderGoodsRel = new OrderGoodsRel();
orderGoodsRel.setGoodsId(goodsId);
orderGoodsRel.setOrderId(orderInfo.getId());
orderGoodsRel.setCount(orderCount);
orderGoodsRelDao.insertSelective(orderGoodsRel);
totalPrice += goodsDetail.getPrice() * goodsDetail.getDiscount() * orderCount;
}
}
}
orderInfo.setTotalPrice(totalPrice);
// 更新订单信息
orderInfoDao.updateByPrimaryKeySelective(orderInfo);
// 下单 清空购物车
cartInfoService.empty(userId, level);
}
return info;
}
@Transactional(rollbackFor = Exception.class)
public void add(Long userId, Integer level, List<GoodsInfo> goodsList) {
Account userInfo = ge
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
用户登陆注册,管理员登陆(能够进行非空判断)。客户管理功能:增删改查(订桌,定菜,能够删除和重新选择点菜信息,结账)管理员管理功能:(修改菜单添加或删减,价格修改,查看空余座位,管理预定退订座位,付款查询,员工管理等)
资源推荐
资源详情
资源评论
收起资源包目录
基于java餐厅管理系统设计与实现(毕业论文) (562个子文件)
$PRODUCT_WORKSPACE_FILE$ 489B
OrderInfoService.class 14KB
OrderInfoService.class 14KB
AccountController.class 12KB
AccountController.class 12KB
AdminInfoController.class 8KB
AdminInfoController.class 8KB
SaleInfoController.class 8KB
SaleInfoController.class 8KB
UserInfoController.class 8KB
UserInfoController.class 8KB
NxSystemFileController.class 8KB
NxSystemFileController.class 8KB
YudingInfoController.class 8KB
YudingInfoController.class 8KB
AdvertiserInfoController.class 8KB
AdvertiserInfoController.class 8KB
GoodsInfoService.class 7KB
GoodsInfoService.class 7KB
EchartsController.class 7KB
EchartsController.class 7KB
TypeInfoController.class 7KB
TypeInfoController.class 7KB
CartInfoService.class 7KB
CartInfoService.class 7KB
CommentInfoService.class 6KB
CommentInfoService.class 6KB
GoodsInfoController.class 6KB
GoodsInfoController.class 6KB
OrderInfoController.class 6KB
OrderInfoController.class 6KB
MenuController.class 5KB
MenuController.class 5KB
GoodsInfo.class 5KB
GoodsInfo.class 5KB
YudingInfo.class 5KB
YudingInfo.class 5KB
CartInfoController.class 4KB
CartInfoController.class 4KB
CommentInfoController.class 4KB
CommentInfoController.class 4KB
YudingInfoService.class 4KB
YudingInfoService.class 4KB
AdminInfoService.class 4KB
AdminInfoService.class 4KB
UserInfoService.class 4KB
SaleInfoService.class 4KB
UserInfoService.class 4KB
SaleInfoService.class 4KB
OrderInfo.class 4KB
OrderInfo.class 4KB
AdminInfo.class 4KB
AdminInfo.class 4KB
SaleInfo.class 3KB
SaleInfo.class 3KB
AdvertiserInfoService.class 3KB
AdvertiserInfoService.class 3KB
UserInfo.class 3KB
UserInfo.class 3KB
Account.class 3KB
Account.class 3KB
NxSystemFileInfoService.class 3KB
NxSystemFileInfoService.class 3KB
TypeInfoService.class 2KB
TypeInfoService.class 2KB
CommentInfo.class 2KB
CommentInfo.class 2KB
CartInfo.class 2KB
CartInfo.class 2KB
Result.class 2KB
Result.class 2KB
OrderInfoDao.class 2KB
OrderInfoDao.class 2KB
EchartsData.class 2KB
EchartsData.class 2KB
ResultCode.class 2KB
ResultCode.class 2KB
MyInterceptor.class 2KB
MyInterceptor.class 2KB
GlobalExceptionHandler.class 2KB
GlobalExceptionHandler.class 2KB
GoodsInfoDao.class 2KB
GoodsInfoDao.class 2KB
WebMvcConfig.class 2KB
WebMvcConfig.class 2KB
EchartsData$Data.class 1KB
EchartsData$Data.class 1KB
OrderGoodsRel.class 1KB
OrderGoodsRel.class 1KB
AdvertiserInfo.class 1KB
AdvertiserInfo.class 1KB
EchartsData$Series.class 1KB
EchartsData$Series.class 1KB
AuthorityInfo.class 1KB
AuthorityInfo.class 1KB
NxSystemFileInfo.class 1KB
NxSystemFileInfo.class 1KB
CommentInfoDao.class 1KB
CommentInfoDao.class 1KB
TypeInfo.class 1KB
共 562 条
- 1
- 2
- 3
- 4
- 5
- 6
资源评论
code.song
- 粉丝: 347
- 资源: 917
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功