From 773613c598befd7cb0abe14ff798ead120621f8c Mon Sep 17 00:00:00 2001
From: zhangsan <646228430@qq.com>
Date: Thu, 18 Apr 2024 16:52:40 +0800
Subject: [PATCH] =?UTF-8?q?=E7=BC=93=E5=AD=98=E8=8F=9C=E5=93=81=E5=A5=97?=
=?UTF-8?q?=E9=A4=90?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/com/sky/utils/HttpClientUtil.java | 2 +-
sky-server/pom.xml | 5 ++
.../src/main/java/com/sky/SkyApplication.java | 2 +
.../com/sky/config/WebMvcConfiguration.java | 8 +++
.../controller/admin/CategoryController.java | 2 +-
.../sky/controller/admin/DishController.java | 29 +++++++-
.../controller/admin/SetmealController.java | 7 +-
.../controller/user/CategoryController.java | 33 +++++++++
.../sky/controller/user/DishController.java | 58 +++++++++++++++
.../controller/user/SetmealController.java | 56 +++++++++++++++
.../sky/controller/user/UserController.java | 42 +++++++++++
.../interceptor/JwtTokenUserInterceptor.java | 61 ++++++++++++++++
.../java/com/sky/mapper/CategoryMapper.java | 1 -
.../main/java/com/sky/mapper/DishMapper.java | 3 +-
.../java/com/sky/mapper/SetmealMapper.java | 11 +++
.../main/java/com/sky/mapper/UserMapper.java | 17 +++++
.../java/com/sky/service/DishService.java | 4 +-
.../java/com/sky/service/SetmealService.java | 8 +++
.../java/com/sky/service/UserService.java | 8 +++
.../com/sky/service/impl/DishServiceImpl.java | 32 ++++++++-
.../sky/service/impl/SetmealServiceImpl.java | 24 +++++++
.../com/sky/service/impl/UserServiceImpl.java | 72 +++++++++++++++++++
.../src/main/resources/application-dev.yml | 4 ++
sky-server/src/main/resources/application.yml | 13 +++-
.../main/resources/mapper/CategoryMapper.xml | 6 ++
.../src/main/resources/mapper/DishMapper.xml | 7 ++
.../main/resources/mapper/SetmealMapper.xml | 14 ++++
.../src/main/resources/mapper/UserMapper.xml | 10 +++
28 files changed, 524 insertions(+), 15 deletions(-)
create mode 100644 sky-server/src/main/java/com/sky/controller/user/CategoryController.java
create mode 100644 sky-server/src/main/java/com/sky/controller/user/DishController.java
create mode 100644 sky-server/src/main/java/com/sky/controller/user/SetmealController.java
create mode 100644 sky-server/src/main/java/com/sky/controller/user/UserController.java
create mode 100644 sky-server/src/main/java/com/sky/interceptor/JwtTokenUserInterceptor.java
create mode 100644 sky-server/src/main/java/com/sky/mapper/UserMapper.java
create mode 100644 sky-server/src/main/java/com/sky/service/UserService.java
create mode 100644 sky-server/src/main/java/com/sky/service/impl/UserServiceImpl.java
create mode 100644 sky-server/src/main/resources/mapper/UserMapper.xml
diff --git a/sky-common/src/main/java/com/sky/utils/HttpClientUtil.java b/sky-common/src/main/java/com/sky/utils/HttpClientUtil.java
index a10dbc4..b28eccd 100644
--- a/sky-common/src/main/java/com/sky/utils/HttpClientUtil.java
+++ b/sky-common/src/main/java/com/sky/utils/HttpClientUtil.java
@@ -44,7 +44,7 @@ public class HttpClientUtil {
URIBuilder builder = new URIBuilder(url);
if(paramMap != null){
for (String key : paramMap.keySet()) {
- builder.addParameter(key,paramMap.get(key));
+ builder.addParameter(key,paramMap.get(key)); //将传入的参数 `paramMap` 中的每一个键值对转换为 URL 的查询字符串形式
}
}
URI uri = builder.build();
diff --git a/sky-server/pom.xml b/sky-server/pom.xml
index 854a620..ff9b983 100644
--- a/sky-server/pom.xml
+++ b/sky-server/pom.xml
@@ -127,6 +127,11 @@
org.springframework.boot
spring-boot-starter-data-redis
+
+ org.springframework.boot
+ spring-boot-starter-cache
+ 2.7.3
+
diff --git a/sky-server/src/main/java/com/sky/SkyApplication.java b/sky-server/src/main/java/com/sky/SkyApplication.java
index b13f77c..845d36b 100644
--- a/sky-server/src/main/java/com/sky/SkyApplication.java
+++ b/sky-server/src/main/java/com/sky/SkyApplication.java
@@ -3,11 +3,13 @@ package com.sky;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cache.annotation.EnableCaching;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@SpringBootApplication
@EnableTransactionManagement //开启注解方式的事务管理
@Slf4j
+@EnableCaching
public class SkyApplication {
public static void main(String[] args) {
SpringApplication.run(SkyApplication.class, args);
diff --git a/sky-server/src/main/java/com/sky/config/WebMvcConfiguration.java b/sky-server/src/main/java/com/sky/config/WebMvcConfiguration.java
index 35cbf80..1ad3b15 100644
--- a/sky-server/src/main/java/com/sky/config/WebMvcConfiguration.java
+++ b/sky-server/src/main/java/com/sky/config/WebMvcConfiguration.java
@@ -1,6 +1,7 @@
package com.sky.config;
import com.sky.interceptor.JwtTokenAdminInterceptor;
+import com.sky.interceptor.JwtTokenUserInterceptor;
import com.sky.json.JacksonObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -29,6 +30,8 @@ public class WebMvcConfiguration extends WebMvcConfigurationSupport {
@Autowired
private JwtTokenAdminInterceptor jwtTokenAdminInterceptor;
+ @Autowired
+ private JwtTokenUserInterceptor jwtTokenUserInterceptor;
/**
* 注册自定义拦截器
@@ -40,6 +43,11 @@ public class WebMvcConfiguration extends WebMvcConfigurationSupport {
registry.addInterceptor(jwtTokenAdminInterceptor)
.addPathPatterns("/admin/**")
.excludePathPatterns("/admin/employee/login");
+
+ registry.addInterceptor(jwtTokenUserInterceptor)
+ .addPathPatterns("user/**")
+ .excludePathPatterns("/user/user/login")
+ .excludePathPatterns("/user/shop/status");
}
/**
diff --git a/sky-server/src/main/java/com/sky/controller/admin/CategoryController.java b/sky-server/src/main/java/com/sky/controller/admin/CategoryController.java
index 90660c8..ea85a47 100644
--- a/sky-server/src/main/java/com/sky/controller/admin/CategoryController.java
+++ b/sky-server/src/main/java/com/sky/controller/admin/CategoryController.java
@@ -13,7 +13,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
-@RestController
+@RestController("adminCategoryController")
@RequestMapping("/admin/category")
@Slf4j
public class CategoryController {
diff --git a/sky-server/src/main/java/com/sky/controller/admin/DishController.java b/sky-server/src/main/java/com/sky/controller/admin/DishController.java
index 29d9496..d279c41 100644
--- a/sky-server/src/main/java/com/sky/controller/admin/DishController.java
+++ b/sky-server/src/main/java/com/sky/controller/admin/DishController.java
@@ -10,22 +10,29 @@ import com.sky.vo.DishVO;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;
import java.util.List;
+import java.util.Set;
-@RestController
+@RestController("adminDishController")
@RequestMapping("/admin/dish")
@Slf4j
public class DishController {
@Autowired
private DishService dishService;
+ @Autowired
+ private RedisTemplate redisTemplate;
@PostMapping
@ApiOperation("新增菜品")
public Result addDish(@RequestBody DishDTO dishDTO){
log.info("新增菜品");
- System.out.println("dishDTO:"+dishDTO);
dishService.addDish(dishDTO);
+
+ //清理缓存数据
+ String key = "dish_" + dishDTO.getCategoryId();
+ cleanCache(key);
return Result.success();
}
@GetMapping("/page")
@@ -39,6 +46,9 @@ public class DishController {
public Result deleteDish(Long[] ids){
log.info("批量删除菜品");
dishService.deleteBatch(ids);
+
+ //将所有的菜品缓存数据清理掉,所有以dish_开头的key
+ cleanCache("dish_*");
return Result.success();
}
@GetMapping("/{id}")
@@ -50,20 +60,33 @@ public class DishController {
@PutMapping
@ApiOperation("更新菜品")
public Result update(@RequestBody DishDTO dishDTO){
+ log.info("修改菜品:{}", dishDTO);
dishService.update(dishDTO);
+
+ //将所有的菜品缓存数据清理掉,所有以dish_开头的key
+ cleanCache("dish_*");
return Result.success();
}
@PostMapping("/status/{status}")
@ApiOperation("菜品起售/停售")
public Result startOrStop(@PathVariable("status") Integer status, Long id){
dishService.startOrStop(status,id);
+
+ //将所有的菜品缓存数据清理掉,所有以dish_开头的key
+ cleanCache("dish_*");
return Result.success();
}
@GetMapping("/list")
@ApiOperation("根据分类id查询菜品")
public Result> list(Long categoryId){
- List dishList=dishService.list(categoryId);
+ Dish dish=new Dish();
+ dish.setCategoryId(categoryId);
+ List dishList=dishService.list(dish);
return Result.success(dishList);
}
+ private void cleanCache(String pattern){
+ Set keys = redisTemplate.keys(pattern);
+ redisTemplate.delete(keys);
+ }
}
diff --git a/sky-server/src/main/java/com/sky/controller/admin/SetmealController.java b/sky-server/src/main/java/com/sky/controller/admin/SetmealController.java
index d16cabf..a4a74cf 100644
--- a/sky-server/src/main/java/com/sky/controller/admin/SetmealController.java
+++ b/sky-server/src/main/java/com/sky/controller/admin/SetmealController.java
@@ -10,9 +10,10 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheEvict;
import org.springframework.web.bind.annotation.*;
-@RestController
+@RestController("adminSetmealController")
@Slf4j
@Api("套餐相关接口")
@RequestMapping("/admin/setmeal")
@@ -22,6 +23,7 @@ public class SetmealController {
@PostMapping
@ApiOperation("新增套餐")
+ @CacheEvict(cacheNames = "setmealCache",key = "#setmealDTO.categoryId")//key: setmealCache::100
public Result addSetmeal(@RequestBody SetmealDTO setmealDTO){
log.info("新增套餐");
setmealService.addSetmeal(setmealDTO);
@@ -35,6 +37,7 @@ public class SetmealController {
}
@DeleteMapping
@ApiOperation("删除套餐")
+ @CacheEvict(cacheNames = "setmealCache",allEntries = true)
public Result deleteByIds(@RequestParam Long[] ids){
log.info("删除套餐");
setmealService.deleteBatch(ids);
@@ -48,12 +51,14 @@ public class SetmealController {
}
@PutMapping
@ApiOperation("修改套餐")
+ @CacheEvict(cacheNames = "setmealCache",allEntries = true)
public Result update(@RequestBody SetmealDTO setmealDTO) {
setmealService.update(setmealDTO);
return Result.success();
}
@PostMapping("/status/{status}")
@ApiOperation("套餐起售停售")
+ @CacheEvict(cacheNames = "setmealCache",allEntries = true)
public Result startOrStop(@PathVariable Integer status, Long id) {
setmealService.startOrStop(status, id);
return Result.success();
diff --git a/sky-server/src/main/java/com/sky/controller/user/CategoryController.java b/sky-server/src/main/java/com/sky/controller/user/CategoryController.java
new file mode 100644
index 0000000..5cbc11a
--- /dev/null
+++ b/sky-server/src/main/java/com/sky/controller/user/CategoryController.java
@@ -0,0 +1,33 @@
+package com.sky.controller.user;
+
+import com.sky.entity.Category;
+import com.sky.result.Result;
+import com.sky.service.CategoryService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import java.util.List;
+
+@RestController("userCategoryController")
+@RequestMapping("/user/category")
+@Api(tags = "C端-分类接口")
+public class CategoryController {
+
+ @Autowired
+ private CategoryService categoryService;
+
+ /**
+ * 查询分类
+ * @param type
+ * @return
+ */
+ @GetMapping("/list")
+ @ApiOperation("查询分类")
+ public Result> list(Integer type) {
+ List list = categoryService.listByType(type);
+ return Result.success(list);
+ }
+}
diff --git a/sky-server/src/main/java/com/sky/controller/user/DishController.java b/sky-server/src/main/java/com/sky/controller/user/DishController.java
new file mode 100644
index 0000000..df6cf9d
--- /dev/null
+++ b/sky-server/src/main/java/com/sky/controller/user/DishController.java
@@ -0,0 +1,58 @@
+package com.sky.controller.user;
+
+import com.sky.constant.StatusConstant;
+import com.sky.entity.Dish;
+import com.sky.result.Result;
+import com.sky.service.DishService;
+import com.sky.vo.DishVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import java.util.List;
+
+@RestController("userDishController")
+@RequestMapping("/user/dish")
+@Slf4j
+@Api(tags = "C端-菜品浏览接口")
+public class DishController {
+ @Autowired
+ private DishService dishService;
+ @Autowired
+ private RedisTemplate redisTemplate;
+
+ /**
+ * 根据分类id查询菜品
+ *
+ * @param categoryId
+ * @return
+ */
+ @GetMapping("/list")
+ @ApiOperation("根据分类id查询菜品")
+ public Result> list(Long categoryId) {
+ //构造key:dish_分类id
+ String key="dish_"+categoryId;
+
+ //查询redis中是否存在菜品数据
+ List list = (List) redisTemplate.opsForValue().get(key);
+ if(list!=null &&list.size()>0)
+ {
+ //如果存在,直接返回,无须查询数据库
+ log.info("查缓存");
+ return Result.success(list);
+ }
+ //如果不存在,查询数据库并将数据放入redis中
+ Dish dish = new Dish();
+ dish.setCategoryId(categoryId);
+ dish.setStatus(StatusConstant.ENABLE);//查询起售中的菜品
+
+ list = dishService.listWithFlavor(dish);
+ redisTemplate.opsForValue().set(key,list);
+ return Result.success(list);
+ }
+
+}
diff --git a/sky-server/src/main/java/com/sky/controller/user/SetmealController.java b/sky-server/src/main/java/com/sky/controller/user/SetmealController.java
new file mode 100644
index 0000000..603eecb
--- /dev/null
+++ b/sky-server/src/main/java/com/sky/controller/user/SetmealController.java
@@ -0,0 +1,56 @@
+package com.sky.controller.user;
+
+import com.sky.constant.StatusConstant;
+import com.sky.entity.Setmeal;
+import com.sky.result.Result;
+import com.sky.service.SetmealService;
+import com.sky.vo.DishItemVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@RestController("userSetmealController")
+@RequestMapping("/user/setmeal")
+@Api(tags = "C端-套餐浏览接口")
+public class SetmealController {
+ @Autowired
+ private SetmealService setmealService;
+
+ /**
+ * 条件查询
+ *
+ * @param categoryId
+ * @return
+ */
+ @GetMapping("/list")
+ @ApiOperation("根据分类id查询套餐")
+ @Cacheable(cacheNames = "setmealCache",key = "#categoryId") //key: setmealCache::100
+ public Result> list(Long categoryId) {
+ Setmeal setmeal = new Setmeal();
+ setmeal.setCategoryId(categoryId);
+ setmeal.setStatus(StatusConstant.ENABLE);
+
+ List list = setmealService.list(setmeal);
+ return Result.success(list);
+ }
+
+ /**
+ * 根据套餐id查询包含的菜品列表
+ *
+ * @param id
+ * @return
+ */
+ @GetMapping("/dish/{id}")
+ @ApiOperation("根据套餐id查询包含的菜品列表")
+ public Result> dishList(@PathVariable("id") Long id) {
+ List list = setmealService.getDishItemById(id);
+ return Result.success(list);
+ }
+}
diff --git a/sky-server/src/main/java/com/sky/controller/user/UserController.java b/sky-server/src/main/java/com/sky/controller/user/UserController.java
new file mode 100644
index 0000000..19c25b8
--- /dev/null
+++ b/sky-server/src/main/java/com/sky/controller/user/UserController.java
@@ -0,0 +1,42 @@
+package com.sky.controller.user;
+
+import com.sky.constant.JwtClaimsConstant;
+import com.sky.dto.UserLoginDTO;
+import com.sky.entity.User;
+import com.sky.properties.JwtProperties;
+import com.sky.result.Result;
+import com.sky.service.UserService;
+import com.sky.utils.JwtUtil;
+import com.sky.vo.UserLoginVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/user/user")
+@Api(tags = "C端用户相关接口")
+@Slf4j
+public class UserController implements Serializable {
+ @Autowired
+ private UserService userService;
+ @Autowired
+ private JwtProperties jwtProperties;
+ @PostMapping("/login")
+ @ApiOperation("微信登录")
+ public Result login(@RequestBody UserLoginDTO userLoginDTO){
+ log.info("微信用户登录:{}",userLoginDTO.getCode());
+ User user=userService.wxLogin(userLoginDTO);
+ //生成JWT令牌
+ Mapclaims=new HashMap<>();
+ claims.put(JwtClaimsConstant.USER_ID,user.getId());
+ String token=JwtUtil.createJWT(jwtProperties.getUserSecretKey(),jwtProperties.getUserTtl(),claims);
+ UserLoginVO userLoginVO = UserLoginVO.builder().id(user.getId()).openid(user.getOpenid()).token(token).build();
+ return Result.success(userLoginVO);
+ }
+}
diff --git a/sky-server/src/main/java/com/sky/interceptor/JwtTokenUserInterceptor.java b/sky-server/src/main/java/com/sky/interceptor/JwtTokenUserInterceptor.java
new file mode 100644
index 0000000..aa0bc1f
--- /dev/null
+++ b/sky-server/src/main/java/com/sky/interceptor/JwtTokenUserInterceptor.java
@@ -0,0 +1,61 @@
+package com.sky.interceptor;
+
+import com.sky.constant.JwtClaimsConstant;
+import com.sky.context.BaseContext;
+import com.sky.properties.JwtProperties;
+import com.sky.utils.JwtUtil;
+import io.jsonwebtoken.Claims;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.web.method.HandlerMethod;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * jwt令牌校验的拦截器
+ */
+@Component
+@Slf4j
+public class JwtTokenUserInterceptor implements HandlerInterceptor {
+
+ @Autowired
+ private JwtProperties jwtProperties;
+
+ /**
+ * 校验jwt
+ *
+ * @param request
+ * @param response
+ * @param handler
+ * @return
+ * @throws Exception
+ */
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+ //判断当前拦截到的是Controller的方法还是其他资源
+ if (!(handler instanceof HandlerMethod)) {
+ //当前拦截到的不是动态方法,直接放行
+ return true;
+ }
+
+ //1、从请求头中获取令牌
+ String token = request.getHeader(jwtProperties.getAdminTokenName());
+
+ //2、校验令牌
+ try {
+ log.info("jwt校验:{}", token);
+ Claims claims = JwtUtil.parseJWT(jwtProperties.getAdminSecretKey(), token);
+ Long userId = Long.valueOf(claims.get(JwtClaimsConstant.USER_ID).toString());
+ log.info("当前员工id:", userId);
+ BaseContext.setCurrentId(userId);
+ //3、通过,放行
+ return true;
+ } catch (Exception ex) {
+ //4、不通过,响应401状态码
+ response.setStatus(401);
+ return false;
+ }
+ }
+}
diff --git a/sky-server/src/main/java/com/sky/mapper/CategoryMapper.java b/sky-server/src/main/java/com/sky/mapper/CategoryMapper.java
index ae4d45c..cd545e5 100644
--- a/sky-server/src/main/java/com/sky/mapper/CategoryMapper.java
+++ b/sky-server/src/main/java/com/sky/mapper/CategoryMapper.java
@@ -24,7 +24,6 @@ public interface CategoryMapper {
void deleteById(Integer id);
@AutoFill(OperationType.UPDATE)
void update(Category category);
- @Select("select * from category where type=#{type}")
List listByType(Integer type);
}
diff --git a/sky-server/src/main/java/com/sky/mapper/DishMapper.java b/sky-server/src/main/java/com/sky/mapper/DishMapper.java
index fe03304..6ace588 100644
--- a/sky-server/src/main/java/com/sky/mapper/DishMapper.java
+++ b/sky-server/src/main/java/com/sky/mapper/DishMapper.java
@@ -29,8 +29,7 @@ public interface DishMapper {
void deleteById(Long id);
@AutoFill(OperationType.UPDATE)
void update(Dish dish);
- @Select("select * from dish where category_id=#{categoryId}")
- List listByType(Long categoryId);
+ List listByType(Dish dish);
@Select("select a.* from dish a left join setmeal_dish b on a.id = b.dish_id where b.setmeal_id = #{setmealId}")
List getBySetmealId(Long setmealId);
}
diff --git a/sky-server/src/main/java/com/sky/mapper/SetmealMapper.java b/sky-server/src/main/java/com/sky/mapper/SetmealMapper.java
index b9e2586..3419727 100644
--- a/sky-server/src/main/java/com/sky/mapper/SetmealMapper.java
+++ b/sky-server/src/main/java/com/sky/mapper/SetmealMapper.java
@@ -4,6 +4,7 @@ import com.sky.annotation.AutoFill;
import com.sky.dto.SetmealPageQueryDTO;
import com.sky.entity.Setmeal;
import com.sky.enumeration.OperationType;
+import com.sky.vo.DishItemVO;
import com.sky.vo.SetmealVO;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
@@ -23,4 +24,14 @@ public interface SetmealMapper {
void deleteById(Long id);
@AutoFill(OperationType.UPDATE)
void update(Setmeal setmeal);
+ /**
+ * 动态条件查询套餐
+ * @param setmeal
+ * @return
+ */
+ List list(Setmeal setmeal);
+ @Select("select sd.name, sd.copies, d.image, d.description " +
+ "from setmeal_dish sd left join dish d on sd.dish_id = d.id " +
+ "where sd.setmeal_id = #{setmealId}")
+ List getDishItemBySetmealId(Long id);
}
diff --git a/sky-server/src/main/java/com/sky/mapper/UserMapper.java b/sky-server/src/main/java/com/sky/mapper/UserMapper.java
new file mode 100644
index 0000000..47ca3c4
--- /dev/null
+++ b/sky-server/src/main/java/com/sky/mapper/UserMapper.java
@@ -0,0 +1,17 @@
+package com.sky.mapper;
+
+import com.sky.entity.User;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
+@Mapper
+public interface UserMapper {
+ @Select("select * from user where openid=#{openid}")
+ User getByOpenid(String openid);
+
+ /**
+ * 插入新用户
+ * @param user
+ */
+ void insert(User user);
+}
diff --git a/sky-server/src/main/java/com/sky/service/DishService.java b/sky-server/src/main/java/com/sky/service/DishService.java
index dd7705d..528b3a8 100644
--- a/sky-server/src/main/java/com/sky/service/DishService.java
+++ b/sky-server/src/main/java/com/sky/service/DishService.java
@@ -21,5 +21,7 @@ public interface DishService {
void startOrStop(Integer status, Long id);
- List list(Long categoryId);
+ List list(Dish dish);
+
+ List listWithFlavor(Dish dish);
}
diff --git a/sky-server/src/main/java/com/sky/service/SetmealService.java b/sky-server/src/main/java/com/sky/service/SetmealService.java
index 0d30301..35cc006 100644
--- a/sky-server/src/main/java/com/sky/service/SetmealService.java
+++ b/sky-server/src/main/java/com/sky/service/SetmealService.java
@@ -2,9 +2,13 @@ package com.sky.service;
import com.sky.dto.SetmealDTO;
import com.sky.dto.SetmealPageQueryDTO;
+import com.sky.entity.Setmeal;
import com.sky.result.PageResult;
+import com.sky.vo.DishItemVO;
import com.sky.vo.SetmealVO;
+import java.util.List;
+
public interface SetmealService {
void addSetmeal(SetmealDTO setmealDTO);
@@ -22,4 +26,8 @@ public interface SetmealService {
void update(SetmealDTO setmealDTO);
void startOrStop(Integer status, Long id);
+
+ List list(Setmeal setmeal);
+
+ List getDishItemById(Long id);
}
diff --git a/sky-server/src/main/java/com/sky/service/UserService.java b/sky-server/src/main/java/com/sky/service/UserService.java
new file mode 100644
index 0000000..200dac6
--- /dev/null
+++ b/sky-server/src/main/java/com/sky/service/UserService.java
@@ -0,0 +1,8 @@
+package com.sky.service;
+
+import com.sky.dto.UserLoginDTO;
+import com.sky.entity.User;
+
+public interface UserService {
+ User wxLogin(UserLoginDTO userLoginDTO);
+}
diff --git a/sky-server/src/main/java/com/sky/service/impl/DishServiceImpl.java b/sky-server/src/main/java/com/sky/service/impl/DishServiceImpl.java
index 14c814d..d4d77b9 100644
--- a/sky-server/src/main/java/com/sky/service/impl/DishServiceImpl.java
+++ b/sky-server/src/main/java/com/sky/service/impl/DishServiceImpl.java
@@ -24,6 +24,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import java.util.ArrayList;
import java.util.List;
@Service
@@ -122,8 +123,35 @@ public class DishServiceImpl implements DishService {
}
@Override
- public List list(Long categoryId) {
- List dishList=dishMapper.listByType(categoryId);
+ public List list(Dish dish) {
+ List dishList=dishMapper.listByType(dish);
return dishList;
}
+
+ @Override
+ /**
+ * 条件查询菜品和口味
+ * @param dish
+ * @return
+ */
+ public List listWithFlavor(Dish dish) {
+ //TODO 貌似还有问题
+ List dishList = dishMapper.listByType(dish);
+
+ List dishVOList = new ArrayList<>();
+
+ for (Dish d : dishList) {
+ DishVO dishVO = new DishVO();
+ BeanUtils.copyProperties(d,dishVO);
+
+ //根据菜品id查询对应的口味
+ List flavors = dishFlavorMapper.queryByDishId(d.getId());
+
+ dishVO.setFlavors(flavors);
+ dishVOList.add(dishVO);
+ }
+
+ return dishVOList;
+ }
+
}
diff --git a/sky-server/src/main/java/com/sky/service/impl/SetmealServiceImpl.java b/sky-server/src/main/java/com/sky/service/impl/SetmealServiceImpl.java
index 45766b7..46d6f27 100644
--- a/sky-server/src/main/java/com/sky/service/impl/SetmealServiceImpl.java
+++ b/sky-server/src/main/java/com/sky/service/impl/SetmealServiceImpl.java
@@ -16,6 +16,7 @@ import com.sky.mapper.SetmealMapper;
import com.sky.mapper.Setmeal_dishMapper;
import com.sky.result.PageResult;
import com.sky.service.SetmealService;
+import com.sky.vo.DishItemVO;
import com.sky.vo.SetmealVO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -126,4 +127,27 @@ public class SetmealServiceImpl implements SetmealService {
.build();
setmealMapper.update(setmeal);
}
+
+ @Override
+ /**
+ * 条件查询
+ * @param setmeal
+ * @return
+ */
+ public List list(Setmeal setmeal) {
+ List list = setmealMapper.list(setmeal);
+ return list;
+ }
+
+ @Override
+ /**
+ * 根据id查询菜品选项
+ * @param id
+ * @return
+ */
+ public List getDishItemById(Long id) {
+ return setmealMapper.getDishItemBySetmealId(id);
+ }
+
+
}
diff --git a/sky-server/src/main/java/com/sky/service/impl/UserServiceImpl.java b/sky-server/src/main/java/com/sky/service/impl/UserServiceImpl.java
new file mode 100644
index 0000000..fa3999b
--- /dev/null
+++ b/sky-server/src/main/java/com/sky/service/impl/UserServiceImpl.java
@@ -0,0 +1,72 @@
+package com.sky.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.sky.constant.MessageConstant;
+import com.sky.dto.UserLoginDTO;
+import com.sky.entity.User;
+import com.sky.exception.LoginFailedException;
+import com.sky.mapper.UserMapper;
+import com.sky.properties.WeChatProperties;
+import com.sky.service.UserService;
+import com.sky.utils.HttpClientUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.Map;
+
+@Service
+@Slf4j
+public class UserServiceImpl implements UserService {
+ public static final String WX_LOGIN = "https://api.weixin.qq.com/sns/jscode2session";
+ @Autowired
+ private WeChatProperties weChatProperties;
+ @Autowired
+ private UserMapper userMapper;
+ /**
+ * 微信登录
+ * @param userLoginDTO
+ * @return
+ */
+ @Override
+ public User wxLogin(UserLoginDTO userLoginDTO) {
+ //调用微信接口服务,获得当前微信用户的openid
+ String openid=getOpenid(userLoginDTO.getCode());
+ //判断openid是否为空,如果空则登录失败
+ if(openid==null)
+ throw new LoginFailedException(MessageConstant.LOGIN_FAILED);
+
+ //判断当前用户是否为新用户
+ User user = userMapper.getByOpenid(openid);
+ //如果是,则自动注册
+ if(user==null){
+ user=User.builder()
+ .openid(openid)
+ .createTime(LocalDateTime.now())
+ .build();
+ userMapper.insert(user);
+ }
+ //返回用户对象
+ return user;
+ }
+
+ /**
+ * 调用微信接口服务,获取微信用户的openid
+ * @param code
+ * @return
+ */
+ private String getOpenid(String code){
+ Map map=new HashMap<>();
+ map.put("appid",weChatProperties.getAppid());
+ map.put("secret",weChatProperties.getSecret());
+ map.put("js_code",code);
+ map.put("grant_type","authorization_code");
+ String json=HttpClientUtil.doGet(WX_LOGIN,map);
+ JSONObject jsonObject = JSON.parseObject(json);
+ String openid = jsonObject.getString("openid");
+ return openid;
+ }
+}
diff --git a/sky-server/src/main/resources/application-dev.yml b/sky-server/src/main/resources/application-dev.yml
index f87f08f..4a8cc35 100644
--- a/sky-server/src/main/resources/application-dev.yml
+++ b/sky-server/src/main/resources/application-dev.yml
@@ -17,3 +17,7 @@ sky:
access-key-secret: AJPJSYc5sdwiZoj8RWzsXtjKR3W8f0
endpoint: https://oss-cn-hangzhou.aliyuncs.com
bucket-name: zyjavaweb
+
+ wechat:
+ appid: wxa3b6f70e4ffb92cd
+ secret: ef08b2be0e89a4ff71105c28416e9f42
diff --git a/sky-server/src/main/resources/application.yml b/sky-server/src/main/resources/application.yml
index fc0acc6..2ba91e8 100644
--- a/sky-server/src/main/resources/application.yml
+++ b/sky-server/src/main/resources/application.yml
@@ -18,6 +18,7 @@ spring:
auth: ${sky.redis.auth}
database: ${sky.redis.database}
+
mybatis:
#mapper配置文件
mapper-locations: classpath:mapper/*.xml
@@ -36,6 +37,7 @@ logging:
sky:
jwt:
+ #管理端token
# 设置jwt签名加密时使用的秘钥
admin-secret-key: itcast
# 设置jwt过期时间
@@ -43,11 +45,16 @@ sky:
# 设置前端传递过来的令牌名称
admin-token-name: token
+ #用户端token
+ user-secret-key: itheima
+ user-ttl: 7200000
+ user-token-name: authentication
+
alioss:
endpoint: {sky.alioss.endpoint}
bucket-name: {sky.alioss.bucket-name}
access-key-id: {sky.alioss.access-key-id}
access-key-secret: {sky.alioss.access-key-secret}
-
-
-
+ wechat:
+ appid: ${sky.wechat.appid}
+ secret: ${sky.wechat.secret}
diff --git a/sky-server/src/main/resources/mapper/CategoryMapper.xml b/sky-server/src/main/resources/mapper/CategoryMapper.xml
index a8b24f2..1f1a905 100644
--- a/sky-server/src/main/resources/mapper/CategoryMapper.xml
+++ b/sky-server/src/main/resources/mapper/CategoryMapper.xml
@@ -14,6 +14,12 @@
order by sort
+
update category
diff --git a/sky-server/src/main/resources/mapper/DishMapper.xml b/sky-server/src/main/resources/mapper/DishMapper.xml
index 2263909..595a9b5 100644
--- a/sky-server/src/main/resources/mapper/DishMapper.xml
+++ b/sky-server/src/main/resources/mapper/DishMapper.xml
@@ -21,6 +21,13 @@
order by d.create_time desc
+
update dish
diff --git a/sky-server/src/main/resources/mapper/SetmealMapper.xml b/sky-server/src/main/resources/mapper/SetmealMapper.xml
index 71682c5..af67d24 100644
--- a/sky-server/src/main/resources/mapper/SetmealMapper.xml
+++ b/sky-server/src/main/resources/mapper/SetmealMapper.xml
@@ -29,4 +29,18 @@
and c.status=#{status}
+
\ No newline at end of file
diff --git a/sky-server/src/main/resources/mapper/UserMapper.xml b/sky-server/src/main/resources/mapper/UserMapper.xml
new file mode 100644
index 0000000..c7473e2
--- /dev/null
+++ b/sky-server/src/main/resources/mapper/UserMapper.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+ insert into user (openid, name, phone, sex, id_number, avatar, create_time)
+ values (#{openid}, #{name}, #{phone}, #{sex}, #{idNumber}, #{avatar}, #{createTime})
+
+
\ No newline at end of file