基于javaweb的SpringBoot外卖点餐小程序(java+springboot+maven+mysql+redis+vue+uniapp)

运行环境

Java≥8、MySQL≥5.7、Node.js≥14

开发工具

后端:eclipse/idea/myeclipse/sts等均可配置运行
前端:WebStorm/VSCode/HBuilderX等均可

❗没学过node.js的不要搞前后端分离项目

适用

课程设计,大作业,毕业设计,项目练习,学习演示等

功能说明

352225181003

512325071003

522325071003

532325071003

542325071003

552325071003

基于javaweb的SpringBoot外卖点餐小程序(java+springboot+maven+mysql+redis+vue+uniapp)

后端:springboot+mysql+redis
前端小程序:uniapp
前端web管理:vue

项目后端使用springboot进行开发,其中使用redis进行缓存。使用springcache进行redis缓存时候的管理。使用shardingjdbc完成mysql主从分离的设置。使用swagger生成开发文档。
前端商家平台使用vue2.x脚手架开发,使用elementui开发前端ui。使用axios获取api,使用vue.router进行路由
前端用户界面使用uniapp开发,使用vuex做组件数据存储。

后端启动前先修改配置(用于保存上传的图片):
reggie.path

web管理员:
admin 123456

小程序用户:
13511111111 验证码为1234

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
     */
@GetMapping("/TakeOut")
public R<Page> TakeOut(int page, int pageSize, String phone) {
//1.构造分页构造器
//当前在第几页 查几条
Page pageInfo = new Page(page, pageSize);
//2.条件构造器
LambdaQueryWrapper<Orders> queryWrapper = new LambdaQueryWrapper<>();

queryWrapper.like(StringUtils.isNotEmpty(phone), Orders::getPhone, phone);
queryWrapper.isNull(Orders::getRemark).or().eq(Orders::getRemark,"");

//添加排序条件
queryWrapper.orderByDesc(Orders::getOrderTime);
//3.执行查询
Page list = orderService.page(pageInfo, queryWrapper);
return R.success(list);
}

@DeleteMapping("delete")
public R<String> delete(Long id) {
System.out.println(id);
LambdaQueryWrapper<Orders> queryWrapper = new LambdaQueryWrapper<>();

queryWrapper.eq(Orders::getNumber, id);
orderService.remove(queryWrapper);
return R.success("删除成功");
}

@PutMapping("/update")
public R<String> update(@RequestBody Orders orders) {
// System.out.println(orders);
LambdaQueryWrapper<Orders> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Orders::getNumber, orders.getNumber());
Orders serviceOne = orderService.getOne(queryWrapper);
serviceOne.setStatus(orders.getStatus());
orderService.updateById(serviceOne);
return R.success("成功");
}

@GetMapping("/getById/{id}")
public R<List<OrderDetail>> getById(@PathVariable Long id) {
// System.out.println(id);
LambdaQueryWrapper<OrderDetail> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(OrderDetail::getOrderId, id);
List<OrderDetail> list = orderDetailService.list(queryWrapper);
return R.success(list);
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25



/**
* @Description
* @create 2088-11-01 16:50
*/
@RestController
@RequestMapping("/user")
@Slf4j
@CrossOrigin
public class UserController {

@Autowired
private UserService userService;

@Autowired
private RedisTemplate redisTemplate;


@PostMapping("/save")
public R<String> save(@RequestBody User user){
// System.out.println(user);
LambdaQueryWrapper<User> queryWrapper=new LambdaQueryWrapper<>();
queryWrapper.eq(User::getPhone,user.getPhone());
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
    @Autowired
private CacheManager cacheManager;

/**
* 新增菜品
*
* @param dishDto
* @return
*/
@PostMapping
@CacheEvict(value = "dish", allEntries = true)
public R<String> save(@RequestBody DishDto dishDto) {
dishService.saveWithFlavor(dishDto);
// String key="dish_"+dishDto.getCategoryId()+"_1";
// redisTemplate.delete(key);
return R.success("新增成功");
}

/**
* 菜品信息分页 js在food.js中
*
* @param page
* @param pageSize
* @param name
* @return
*/
@GetMapping("/page")
public R<Page> page(int page, int pageSize, String name) {
//构造分页构造器
Page<Dish> pageInfo = new Page<>(page, pageSize);
Page<DishDto> dishDtoPage = new Page<>(page, pageSize);
//构造条件构造器
LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper<>();
//添加过滤条件
queryWrapper.like(name != null, Dish::getName, name);
//添加排序条件
queryWrapper.orderByDesc(Dish::getUpdateTime);

//执行分页查询
dishService.page(pageInfo, queryWrapper);

//对象clone 拷贝的是页数之类的
BeanUtils.copyProperties(pageInfo, dishDtoPage, "records");
//获取列表页 这边要将查询出来的list中的分类名称改好 然后再赋值给dto对象 最后将新的list 给到上面的dto
List<Dish> records = pageInfo.getRecords();
List<DishDto> list = new ArrayList<>();
for (Dish dish : records) {
DishDto dishDto = new DishDto();
//先拿到原来的list中的分类id
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
            DishDto dishDto = new DishDto();
BeanUtils.copyProperties(item, dishDto);
Long categoryId = item.getCategoryId();
Category category = categoryService.getById(categoryId);
if (category != null) {
String categoryName = category.getName();
dishDto.setCategoryName(categoryName);
}
Long dishId = item.getId();
LambdaQueryWrapper<DishFlavor> queryWrapper1 = new LambdaQueryWrapper<>();
queryWrapper1.eq(DishFlavor::getDishId, dishId);
List<DishFlavor> dishFlavors = dishFlavorService.list(queryWrapper1);
dishDto.setFlavors(dishFlavors);
return dishDto;
}).collect(Collectors.toList());
// redisTemplate.opsForValue().set(key, dishDtos,60, TimeUnit.MINUTES);
return R.success(dishDtos);
}
// @GetMapping("/list")
// public R<List<Dish>> list(Dish dish) {
//
// LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper<>();
// queryWrapper.eq(dish.getCategoryId() != null, Dish::getCategoryId, dish.getCategoryId());
// queryWrapper.eq(Dish::getStatus, 1);
// queryWrapper.orderByAsc(Dish::getSort).orderByDesc(Dish::getUpdateTime);
//
// List<Dish> list = dishService.list(queryWrapper);
// return R.success(list);
// }


/**
* 停售与起售
* @param status
* @param ids
* @return
*/
@PostMapping("/status/{status}")
@CacheEvict(value = "dish", allEntries = true)
public R<String> status(@PathVariable Long status,@RequestParam List<Long> ids){
System.out.println(status);
System.out.println(ids);

for (Long id:ids){
Dish dish = dishService.getById(id);
dish.setStatus(status.intValue());
dishService.updateById(dish);
}
return R.success("修改成功");
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
    }


@DeleteMapping
@CacheEvict(value = "setmealCache", allEntries = true)
public R<String> delete(@RequestParam List<Long> ids) {
// log.info(ids.toString());
setmealService.removeWithDish(ids);
return R.success("删除成功");
}

/**
* 根据条件查询套餐数据
*
* @param setmeal
* @return
*/
@GetMapping("/list")
@Cacheable(value = "setmealCache", key = "#setmeal.categoryId+'_'+#setmeal.status")
public R<List<Setmeal>> list(Setmeal setmeal) {
LambdaQueryWrapper<Setmeal> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(setmeal.getCategoryId() != null, Setmeal::getCategoryId, setmeal.getCategoryId());
queryWrapper.eq(setmeal.getStatus() != null, Setmeal::getStatus, setmeal.getStatus());
queryWrapper.orderByDesc(Setmeal::getUpdateTime);

List<Setmeal> list = setmealService.list(queryWrapper);
return R.success(list);
}

/**
* 起手停售操作
* 采用rest风格
*/
@PostMapping("/status/{status}")
@CacheEvict(value = "setmealCache", allEntries = true)
public R<String> status(@PathVariable Long status, @RequestParam List<Long> ids) {
// System.out.println(ids+"---"+status);
//拿到需要修改的状态和id
for (Long id : ids) {
Setmeal setmeal = setmealService.getById(id);
setmeal.setStatus(status.intValue());
setmealService.updateById(setmeal);
} ;
//根据id修改状态
return R.success("修改成功");
}

/**
* 根据id查询套餐信息,然后将此信息渲染到修改套餐详情中


项目链接:
https://javayms.github.io?id=502325071003201pu
https://javayms.pages.dev?id=502325071003201pu