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