package com.itheima.reggie.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.itheima.reggie.common.BaseContext;
import com.itheima.reggie.common.CustomException;
import com.itheima.reggie.entity.*;
import com.itheima.reggie.mapper.OrderMapper;
import com.itheima.reggie.service.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
@Service
@Slf4j
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Orders> implements OrderService {
@Autowired
private ShoppingCartService shoppingCartService;
@Autowired
private UserService userService;
@Autowired
private AddressBookService addressBookService;
@Autowired
private OrderDetailService orderDetailService;
/**
* 用户下单
*
* @param orders
*/
@Transactional
public void submit(Orders orders) {
//获得当前用户id
Long userId = BaseContext.getCurrentId();
//查询当前用户的购物车数据
LambdaQueryWrapper<ShoppingCart> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ShoppingCart::getUserId, userId);
List<ShoppingCart> shoppingCarts = shoppingCartService.list(wrapper);
if (shoppingCarts == null || shoppingCarts.size() == 0) {
throw new CustomException("购物车为空,不能下单");
}
//查询用户数据
User user = userService.getById(userId);
//查询地址数据
Long addressBookId = orders.getAddressBookId();
AddressBook addressBook = addressBookService.getById(addressBookId);
if (addressBook == null) {
throw new CustomException("用户地址信息有误,不能下单");
}
long orderId = IdWorker.getId();//订单号
AtomicInteger amount = new AtomicInteger(0);
List<OrderDetail> orderDetails = shoppingCarts.stream().map((item) -> {
OrderDetail orderDetail = new OrderDetail();
orderDetail.setOrderId(orderId);
orderDetail.setNumber(item.getNumber());
orderDetail.setDishFlavor(item.getDishFlavor());
orderDetail.setDishId(item.getDishId());
orderDetail.setSetmealId(item.getSetmealId());
orderDetail.setName(item.getName());
orderDetail.setImage(item.getImage());
orderDetail.setAmount(item.getAmount());
amount.addAndGet(item.getAmount().multiply(new BigDecimal(item.getNumber())).intValue());
return orderDetail;
}).collect(Collectors.toList());
orders.setId(orderId);
orders.setOrderTime(LocalDateTime.now());
orders.setCheckoutTime(LocalDateTime.now());
orders.setStatus(2);
orders.setAmount(new BigDecimal(amount.get()));//总金额
orders.setUserId(userId);
orders.setNumber(String.valueOf(orderId));
orders.setUserName(user.getName());
orders.setConsignee(addressBook.getConsignee());
orders.setPhone(addressBook.getPhone());
orders.setAddress((addressBook.getProvinceName() == null ? "" : addressBook.getProvinceName())
+ (addressBook.getCityName() == null ? "" : addressBook.getCityName())
+ (addressBook.getDistrictName() == null ? "" : addressBook.getDistrictName())
+ (addressBook.getDetail() == null ? "" : addressBook.getDetail()));
//向订单表插入数据,一条数据
this.save(orders);
//向订单明细表插入数据,多条数据
orderDetailService.saveBatch(orderDetails);
//清空购物车数据
shoppingCartService.remove(wrapper);
}
/**
* 用户个人中心订单信息查看
*
* @param page
* @param pageSize
* @return
*/
@Override
public Page<OrdersDto> userPage(int page, int pageSize) {
//分页构造器对象
Page<Orders> pageInfo = new Page<>(page, pageSize);
Page<OrdersDto> dtoPage = new Page<>();
//创建条件查询对象
LambdaQueryWrapper<Orders> queryWrapper = new LambdaQueryWrapper<>();
//添加排序条件,根据更新时间降序排序
queryWrapper.orderByDesc(Orders::getOrderTime);
this.page(pageInfo, queryWrapper);
//通过OrderId查寻对应的菜品/套餐
LambdaQueryWrapper<OrderDetail> wrapper = new LambdaQueryWrapper<>();
//对OrderDto进行需要的属性赋值
List<Orders> records = pageInfo.getRecords();
List<OrdersDto> list = records.stream().map((item) -> {
OrdersDto ordersDto = new OrdersDto();
//为orderDetails属性赋值
//获取订单ID
Long orderId = item.getId();
//根据订单ID查询对应的订单明细
wrapper.eq(OrderDetail::getOrderId, orderId);
List<OrderDetail> orderDetailList = orderDetailService.list(wrapper);
BeanUtils.copyProperties(item, ordersDto);
//对ordersDto的OorderDetai属性进行赋值
ordersDto.setOrderDetails(orderDetailList);
return ordersDto;
}).collect(Collectors.toList());
BeanUtils.copyProperties(pageInfo, dtoPage, "records");
dtoPage.setRecords(list);
return dtoPage;
}
/**
* 再来一单
*
* @param order
*/
@Override
public void again(Orders order) {
//获取订单里订单号
Orders orderId = this.getById(order.getId());
String number = order.getNumber();
//根据条件进行查询
LambdaQueryWrapper<OrderDetail> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(OrderDetail::getOrderId, number);
List<OrderDetail> orderDetailList = orderDetailService.list(queryWrapper);
//根据查到的数据再次添加到购物车里
List<ShoppingCart> list = orderDetailList.stream().map((item) -> {
//把从order表中和order_details表中获取到的数据赋值给这个购物车对象
ShoppingCart shoppingCart = new ShoppingCart();
shoppingCart.setName(item.getName());
shoppingCart.setImage(item.getImage());
shoppingCart.setUserId(BaseContext.getCurrentId());
shoppingCart.setDishId(item.getDishId());
shoppingCart.setSetmealId(item.getSetmealId());
shoppingCart.setDishFlavor(item.getDishFlavor());
shoppingCart.setNumber(item.getNumber());
shoppingCart.setAmount(item.getAmount());
return shoppingCart;
}).collect(Collectors.toList());
shoppingCartService.saveBatch(list);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
基于SpringBoot+MyBatis-Plus的玛琪外卖网站开发设计源码
共308个文件
xml:106个
java:70个
png:46个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 190 浏览量
2024-10-02
15:34:26
上传
评论
收藏 39.42MB ZIP 举报
温馨提示
本项目为玛琪外卖网站开发设计源码,采用SpringBoot和MyBatis-Plus框架,技术栈涵盖Java、JavaScript、HTML和CSS。源码包含307个文件,具体包括106个XML配置文件、70个Java源文件、45个PNG图片文件、22个JavaScript文件、21个HTML文件、18个CSS文件、6个字体文件、3个Git忽略文件、3个字体文件(WOFF格式)、2个图标文件(ICO格式)。
资源推荐
资源详情
资源评论
收起资源包目录
基于SpringBoot+MyBatis-Plus的玛琪外卖网站开发设计源码 (308个子文件)
common.css 275KB
index.css 227KB
vant.min.css 141KB
main.css 17KB
demo.css 8KB
index.css 6KB
add-order.css 6KB
user.css 4KB
page.css 4KB
address.css 3KB
address-edit.css 3KB
order.css 3KB
login.css 2KB
index.css 2KB
pay-success.css 2KB
login.css 2KB
no-wify.css 1KB
iconfont.css 733B
.gitignore 490B
.gitignore 176B
.gitignore 176B
add.html 23KB
index.html 23KB
add.html 18KB
demo_index.html 12KB
list.html 10KB
list.html 9KB
add-order.html 9KB
list.html 9KB
list.html 9KB
user.html 8KB
address-edit.html 7KB
address.html 7KB
index.html 7KB
add.html 7KB
order.html 7KB
list.html 6KB
login.html 4KB
login.html 4KB
pay-success.html 3KB
no-wify.html 2KB
upload.html 2KB
favico.ico 5KB
favicon.ico 4KB
ruiji (1).iml 336B
OrderServiceImpl.java 7KB
DishController.java 7KB
SetmealController.java 7KB
ShoppingCartController.java 5KB
EmployeeController.java 5KB
DishServiceImpl.java 4KB
SetmealerviceImpl.java 4KB
AddressBookController.java 4KB
OrderController.java 4KB
LoginCheckFilter.java 3KB
UserController.java 3KB
JacksonObjectMapper.java 3KB
CategoryController.java 3KB
CommonController.java 3KB
CategoryServiceImpl.java 2KB
WebMvcConfig.java 2KB
AddressBook.java 1KB
GlobalExceptionHandler.java 1KB
ValidateCodeUtils.java 1KB
MeMetaObjecthandler.java 1KB
Dish.java 1KB
SMSUtils.java 1KB
Setmeal.java 1KB
Category.java 1KB
SetmealDish.java 1KB
Orders.java 1009B
Employee.java 987B
DishFlavor.java 832B
R.java 818B
OrderDetail.java 719B
SetmealService.java 714B
User.java 708B
OrderService.java 690B
ShoppingCart.java 680B
MybatisPlusConfig.java 678B
DishService.java 668B
OrderDetailController.java 629B
AppUserContrller.java 612B
ReggieApplication.java 596B
ShoppingCartServiceImpl.java 490B
BaseContext.java 484B
SetmeralDishServiceImpl.java 483B
AddressBookServiceImpl.java 445B
OrderDetailServiceImpl.java 441B
DishFlavorServiceImpl.java 433B
EmployeeServiceImpl.java 421B
UserServiceImpl.java 418B
DishDto.java 355B
SetmealDishMapper.java 318B
DishFlavorMapper.java 299B
SetmealDto.java 295B
OrdersDto.java 293B
SetmealMapper.java 291B
UserMapper.java 270B
ShoppingCartMapper.java 266B
共 308 条
- 1
- 2
- 3
- 4
资源评论
wjs2024
- 粉丝: 1889
- 资源: 5386
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功