功能补充
一、用户登出
在UserController添加loginout方法
//用户登出
@PostMapping("/loginout")
public R<String> loginout(HttpServletRequest request){
//清理Session中保存的当前用户登录的id
request.getSession().removeAttribute("user");
return R.success("退出成功");
}
二、订单管理
导入OrderDto需手动添加private int sumNum;
(前端会计算数量)
在OrderController添加userPage方法
//订单管理
@Transactional
@GetMapping("/userPage")
public R<Page> userPage(int page,int pageSize){
//构造分页构造器
Page<Orders> pageInfo = new Page<>(page, pageSize);
Page<OrdersDto> ordersDtoPage = new Page<>();
//构造条件构造器
LambdaQueryWrapper<Orders> queryWrapper = new LambdaQueryWrapper<>();
//添加排序条件
queryWrapper.orderByDesc(Orders::getOrderTime);
//进行分页查询
orderService.page(pageInfo,queryWrapper);
//对象拷贝
BeanUtils.copyProperties(pageInfo,ordersDtoPage,"records");
List<Orders> records=pageInfo.getRecords();
List<OrdersDto> list = records.stream().map((item) -> {
OrdersDto ordersDto = new OrdersDto();
BeanUtils.copyProperties(item, ordersDto);
Long Id = item.getId();
//根据id查分类对象
Orders orders = orderService.getById(Id);
String number = orders.getNumber();
LambdaQueryWrapper<OrderDetail> lambdaQueryWrapper=new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(OrderDetail::getOrderId,number);
List<OrderDetail> orderDetailList = orderDetailService.list(lambdaQueryWrapper);
int num=0;
for(OrderDetail l:orderDetailList){
num+=l.getNumber().intValue();
}
ordersDto.setSumNum(num);
return ordersDto;
}).collect(Collectors.toList());
ordersDtoPage.setRecords(list);
return R.success(ordersDtoPage);
}
三、再来一单
用户可以通过该方法快速再下一单
在OrderController中添加again方法处理post请求
//再来一单
@Transactional
@PostMapping("/again")
public R<String> again(@RequestBody Orders order1){
//取得orderId
Long id = order1.getId();
Orders orders = orderService.getById(id);
//设置订单号码
long orderId = IdWorker.getId();
orders.setId(orderId);
//设置订单号码
String number = String.valueOf(IdWorker.getId());
orders.setNumber(number);
//设置下单时间
orders.setOrderTime(LocalDateTime.now());
orders.setCheckoutTime(LocalDateTime.now());
orders.setStatus(2);
//向订单表中插入一条数据
orderService.save(orders);
//修改订单明细表
LambdaQueryWrapper<OrderDetail> queryWrapper=new LambdaQueryWrapper<>();
queryWrapper.eq(OrderDetail::getOrderId,id);
List<OrderDetail> list = orderDetailService.list(queryWrapper);
list.stream().map((item)->{
//订单明细表id
long detailId = IdWorker.getId();
//设置订单号码
item.setOrderId(orderId);
item.setId(detailId);
return item;
}).collect(Collectors.toList());
//向订单明细表中插入多条数据
orderDetailService.saveBatch(list);
return R.success("再来一单");
}
四、管理端订单明细
在OrderController添加page方法处理get请求
@GetMapping("/page")
public R<Page> page(int page, int pageSize, String number,String beginTime,String endTime){
//构造分页构造器
Page<Orders> pageInfo = new Page<>(page, pageSize);
Page<OrdersDto> ordersDtoPage=new Page<>();
//构造条件构造器
LambdaQueryWrapper<Orders> queryWrapper = new LambdaQueryWrapper<>();
//根据number进行模糊查询
queryWrapper.like(!StringUtils.isEmpty(number),Orders::getNumber,number);
//根据Datetime进行时间范围查询
// log.info("开始时间:{}",beginTime);
// log.info("结束时间:{}",endTime);
if(beginTime!=null&&endTime!=null){
queryWrapper.ge(Orders::getOrderTime,beginTime);
queryWrapper.le(Orders::getOrderTime,endTime);
}
//添加排序条件
queryWrapper.orderByDesc(Orders::getOrderTime);
//进行分页查询
orderService.page(pageInfo,queryWrapper);
//对象拷贝
BeanUtils.copyProperties(pageInfo,ordersDtoPage,"records");
List<Orders> records=pageInfo.getRecords();
List<OrdersDto> list=records.stream().map((item)->{
OrdersDto ordersDto=new OrdersDto();
BeanUtils.copyProperties(item,ordersDto);
String name="用户"+item.getUserId();
ordersDto.setUserName(name);
return ordersDto;
}).collect(Collectors.toList());
ordersDtoPage.setRecords(list);
return R.success(ordersDtoPage);
}
五、外卖订单派送
在OrderController处理post请求修改status
@PutMapping
public R<String> send(@RequestBody Orders orders){
Long id = orders.getId();
Integer status = orders.getStatus();
LambdaQueryWrapper<Orders> queryWrapper=new LambdaQueryWrapper<>();
queryWrapper.eq(Orders::getId,id);
Orders one = orderService.getOne(queryWrapper);
one.setStatus(status);
orderService.updateById(one);
return R.success("派送成功");
}