diff --git a/pom.xml b/pom.xml
index 1f535af2372e6aecb790b6f3934ea3327d3c214d..286af75a7b481f272712ae4e6ff007a679e7999b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -56,6 +56,13 @@
spring-boot-starter-thymeleaf
+
+
+
+
+
+
+
com.aliyun
@@ -146,6 +153,12 @@
druid-spring-boot-starter
1.1.23
+
+
+
+
+
+
diff --git a/src/main/java/com/dhu/common/GlobalExceptionHandler.java b/src/main/java/com/dhu/common/GlobalExceptionHandler.java
index cfe62ede622cc774333ee3e57535ea3bbe49b1b2..3aed6bfac8c4bbfbaa80118aa0fd0646eaac2d2f 100644
--- a/src/main/java/com/dhu/common/GlobalExceptionHandler.java
+++ b/src/main/java/com/dhu/common/GlobalExceptionHandler.java
@@ -1,6 +1,8 @@
package com.dhu.common;
import lombok.extern.slf4j.Slf4j;
+//import org.apache.shiro.authz.AuthorizationException;
+//import org.apache.shiro.authz.UnauthorizedException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
@@ -18,7 +20,7 @@ import java.sql.SQLIntegrityConstraintViolationException;
public class GlobalExceptionHandler {
/**
- * 异常处理方法
+ * sql异常处理方法
* @return
*/
@ExceptionHandler(SQLIntegrityConstraintViolationException.class)
@@ -33,7 +35,7 @@ public class GlobalExceptionHandler {
}
/**
- * 异常处理方法
+ * 业务异常处理方法
* @return
*/
@ExceptionHandler(CustomException.class)
@@ -41,4 +43,21 @@ public class GlobalExceptionHandler {
log.error(ex.getMessage());
return R.error(ex.getMessage());
}
+
+ /**
+ * 权限异常处理方法
+ */
+// @ExceptionHandler(UnauthorizedException.class)
+// public R unauthorizedException(Exception ex){
+// log.error(ex.getMessage());
+// return R.error("当前用户无相应权限");
+// }
+//
+// @ExceptionHandler(AuthorizationException.class)
+// public R authorizationException(Exception ex){
+// log.error(ex.getMessage());
+// return R.error("权限认证失败");
+// }
+
+
}
diff --git a/src/main/java/com/dhu/config/WebMvcConfig.java b/src/main/java/com/dhu/config/WebMvcConfig.java
index 380fdd410dbd54ab96fdc69859f4e2dd6b0a4651..e04109ef5a81231edc59d5311b44480f4cbe0a10 100644
--- a/src/main/java/com/dhu/config/WebMvcConfig.java
+++ b/src/main/java/com/dhu/config/WebMvcConfig.java
@@ -62,9 +62,9 @@ public class WebMvcConfig extends WebMvcConfigurationSupport {
private ApiInfo apiInfo(){
return new ApiInfoBuilder()
- .title("瑞吉外卖")
+ .title("食为天")
.version("1.0")
- .description("瑞吉外卖接口文档")
+ .description("食为天线上点餐系统接口文档")
.build();
}
}
diff --git a/src/main/java/com/dhu/controller/DishController.java b/src/main/java/com/dhu/controller/DishController.java
index 865b1f4b9385d7b6170c041ca3dddcfb162b1bb1..a536a3851572cbf26c0971d2746fbe9695d89e43 100644
--- a/src/main/java/com/dhu/controller/DishController.java
+++ b/src/main/java/com/dhu/controller/DishController.java
@@ -7,6 +7,7 @@ import com.dhu.dto.DishDto;
import com.dhu.entity.Category;
import com.dhu.entity.Dish;
import com.dhu.entity.DishFlavor;
+import com.dhu.entity.Setmeal;
import com.dhu.service.CategoryService;
import com.dhu.service.DishFlavorService;
import com.dhu.service.DishService;
@@ -169,9 +170,34 @@ public class DishController {
}
}
- @DeleteMapping("/status")
- public R deleteByIds(@PathVariable Collection ids){
+ /**
+ * 批量删除
+ * @param ids
+ * @return
+ */
+ @DeleteMapping
+ public R deleteByIds(@RequestParam List ids){
dishService.removeByIds(ids);
return R.success("删除成功");
}
+
+ /**
+ * 批量停售与起售
+ * @param status
+ * @param ids
+ * @return
+ */
+ @PostMapping("/status/{status}")
+ public R saleOrNoSale(@PathVariable("status") int status,@RequestParam List ids) {
+ log.info("status:{} ids:{}",status,ids);
+ LambdaQueryWrapper lqw = new LambdaQueryWrapper<>();
+ lqw.in(ids!=null, Dish::getId, ids);
+ List dishes = dishService.list(lqw);
+ dishes.stream().map((item) ->{
+ item.setStatus(status);
+ dishService.updateById(item);
+ return item;
+ }).collect(Collectors.toList());
+ return R.success(status == 1 ?"起售成功":"停售成功");
+ }
}
diff --git a/src/main/java/com/dhu/controller/EmployeeController.java b/src/main/java/com/dhu/controller/EmployeeController.java
index cce605d88ab874d3a25bd78c72e23ff9cb0cf6a5..e2ddb2e8d82e6b9543142534dd7a699ab66e0a79 100644
--- a/src/main/java/com/dhu/controller/EmployeeController.java
+++ b/src/main/java/com/dhu/controller/EmployeeController.java
@@ -7,11 +7,19 @@ import com.dhu.entity.Employee;
import com.dhu.service.EmployeeService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
+//import org.apache.shiro.SecurityUtils;
+//import org.apache.shiro.authc.AuthenticationException;
+//import org.apache.shiro.authc.AuthenticationToken;
+//import org.apache.shiro.authc.UsernamePasswordToken;
+//import org.apache.shiro.authz.annotation.RequiresRoles;
+//import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.DigestUtils;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import java.util.Map;
@Slf4j
@RestController
@@ -38,7 +46,6 @@ public class EmployeeController {
LambdaQueryWrapper lqw = new LambdaQueryWrapper();
lqw.eq(Employee::getUsername, employee.getUsername());
Employee emp = employeeService.getOne(lqw);
- R result = new R();
//查询成功或失败
if (emp == null) {
@@ -56,9 +63,32 @@ public class EmployeeController {
}
}
+// @PostMapping("/login")
+// public R login(HttpSession session, @RequestBody Map map) {
+//
+// //1.获取登录认证的subject对象
+// Subject subject = SecurityUtils.getSubject();
+// String password = map.get("password").toString();
+// String name = map.get("username").toString();
+// boolean rememberMe = (boolean) map.get("rememberMe");
+// //2.将账号密码封装到token中
+// AuthenticationToken token = new UsernamePasswordToken(name, password,rememberMe);
+// //调用Login方法进行登录认证
+// try{
+// subject.login(token);
+// session.setAttribute("user", token.getPrincipal().toString());
+// Employee employee = new Employee();
+// employee.setName(token.getPrincipal().toString());
+// return R.success(employee);
+// } catch (AuthenticationException e){
+// e.printStackTrace();
+// log.info("登录失败");
+// return R.error("登录失败");
+// }
+// }
+
/**
* 员工退出方法
- *
* @param request
* @return
*/
@@ -75,19 +105,12 @@ public class EmployeeController {
* @param employee
* @return
*/
+// @RequiresRoles("admin")
@PostMapping
public R save(HttpServletRequest request, @RequestBody Employee employee) {
log.info("新增员工,员工信息:{}", employee.toString());
//设置初始密码(md5加密)
employee.setPassword(DigestUtils.md5DigestAsHex("123456".getBytes()));
- //设置员工创建时间
-// employee.setCreateTime(LocalDateTime.now());
- //设置更新时间
-// employee.setUpdateTime(LocalDateTime.now());
- //设置创建人ID和更新人ID
-// Long empId = (Long) request.getSession().getAttribute("employee");
-// employee.setCreateUser(empId);
-// employee.setUpdateUser(empId);
//保存数据到数据库
employeeService.save(employee);
return R.success("添加成功");
@@ -126,13 +149,10 @@ public class EmployeeController {
* @param employee
* @return
*/
+// @RequiresRoles("admin")
@PutMapping
public R update(HttpServletRequest request, @RequestBody Employee employee){
log.info(employee.toString());
- //HttpSession session = request.getSession();
- //Long empId = (Long) session.getAttribute("employee");
- //employee.setUpdateUser(empId);
- //employee.setUpdateTime(LocalDateTime.now());
long id = Thread.currentThread().getId();
log.info("线程id为:{}", id);
employeeService.updateById(employee);
diff --git a/src/main/java/com/dhu/controller/SetmealController.java b/src/main/java/com/dhu/controller/SetmealController.java
index 2426726de88002bcb11779d8fcc818e7ff7505e7..0c2a28e4e01a18668d7a7acebeab5f4b3807a6f4 100644
--- a/src/main/java/com/dhu/controller/SetmealController.java
+++ b/src/main/java/com/dhu/controller/SetmealController.java
@@ -96,6 +96,12 @@ public class SetmealController {
return R.success("套餐数据删除成功");
}
+ /**
+ * 菜品停售与起售
+ * @param status
+ * @param ids
+ * @return
+ */
@PostMapping("/status/{status}")
public R saleOrNoSale(@PathVariable("status") int status,@RequestParam List ids) {
log.info("status:{} ids:{}",status,ids);
diff --git a/src/main/java/com/dhu/controller/UserController.java b/src/main/java/com/dhu/controller/UserController.java
index f9f91385f7aa09401ea84988f604ba1fc818d5bd..b368e2b6ce577d6ca715d26d432b3b63416a9f7a 100644
--- a/src/main/java/com/dhu/controller/UserController.java
+++ b/src/main/java/com/dhu/controller/UserController.java
@@ -2,6 +2,7 @@ package com.dhu.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.dhu.common.R;
+import com.dhu.entity.Employee;
import com.dhu.entity.User;
import com.dhu.service.UserService;
import com.dhu.utils.ValidateCodeUtils;
@@ -9,6 +10,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.util.DigestUtils;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
@@ -26,7 +28,7 @@ public class UserController {
private RedisTemplate redisTemplate;
/**
- * 发送邮箱验证码
+ * 发送手机验证码
*
* @param user
* @param session
@@ -48,14 +50,17 @@ public class UserController {
return R.success("手机验证码发送成功,请及时查看");
}
return R.error("发生未知错误,验证码发送失败");
-
-
}
+ /**
+ * 发送邮箱校验码
+ * @param user
+ * @return
+ */
@PostMapping("sendEmail")
public R sendEmail(@RequestBody User user) {
//获取邮箱账号
- String email = user.getPhone();
+ String email = user.getEmail();
String subject = "食为天点餐系统登录验证码";
@@ -67,9 +72,6 @@ public class UserController {
//发送邮箱验证码
userService.sendMsg(email, subject, context);
- //将随机生成的验证码保存到session中
-// session.setAttribute(email,code);
-
//验证码保存到Redis中,并且设置验证码有效时间为5分钟
redisTemplate.opsForValue().set(email, code, 5, TimeUnit.MINUTES);
return R.success("邮箱验证码发送成功,请及时查看");
@@ -92,30 +94,62 @@ public class UserController {
//获取手机号
String phone = map.get("phone").toString();
+ //将页面传输过来的密码进行MD5加密
+ String password = map.get("password").toString();
+ password = DigestUtils.md5DigestAsHex(password.getBytes());
+
+ //使用加密后的密码进行数据库查询
+ LambdaQueryWrapper lqw = new LambdaQueryWrapper();
+ lqw.eq(User::getPhone, phone);
+ User user = userService.getOne(lqw);
+
+ //进行验证码的比对(页面提交的验证码和Session中保存的验证码比对)
+ if (user != null) {
+ //如果能够比对成功,说明登录成功
+ //登陆成功,将用户Id存入Session并返回登录成功结果
+ session.setAttribute("user", user.getId());
+ return R.success(user);
+ }
+ return R.error("登录失败");
+ }
+
+ /**
+ * 邮箱登录
+ * @param map
+ * @param session
+ * @return
+ */
+ @PostMapping("/login-email")
+ public R login_email(@RequestBody Map map, HttpSession session) {
+ log.info(map.toString());
+ //获取邮箱
+ String email = map.get("email").toString();
+ log.info("邮箱={}", email);
//获取验证码
String code = map.get("code").toString();
-
+ log.info("验证码={}",code);
//从Session中获取保存的验证码
// Object codeInSession = session.getAttribute(phone);
-
// 从Redis中获取缓存验证码
- Object codeInRedis = redisTemplate.opsForValue().get(phone);
-
+ Object codeInRedis = redisTemplate.opsForValue().get(email);
//进行验证码的比对(页面提交的验证码和Session中保存的验证码比对)
if (codeInRedis != null && codeInRedis.equals(code)) {
//如果能够比对成功,说明登录成功
-
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
- queryWrapper.eq(User::getPhone, phone);
-
+ queryWrapper.eq(User::getEmail, email);
User user = userService.getOne(queryWrapper);
if (user == null) {
//判断当前手机号对应的用户是否为新用户,如果是新用户就自动完成注册
user = new User();
- user.setPhone(phone);
+ user.setEmail(email);
user.setStatus(1);
// 取邮箱的前五位为用户名
- user.setName(phone.substring(0, 6));
+ user.setName(email.substring(0, 6));
+ // 取邮箱@前的数字部分为密码
+ String password = email.split("@")[0];
+ user.setPassword(password);
+ user.setPhone("15577437713");
+ log.info("user={}",user);
userService.save(user);
}
session.setAttribute("user", user.getId());
@@ -136,10 +170,11 @@ public class UserController {
return R.success("安全退出成功!");
}
- @GetMapping("getByPhone")
- public R getByPhone(String phone) {
+ @GetMapping("getById")
+ public R getById(HttpSession session) {
+ Long id =(Long) session.getAttribute("user");
LambdaQueryWrapper lqw = new LambdaQueryWrapper<>();
- lqw.eq(User::getPhone, phone);
+ lqw.eq(User::getId, id);
User user = userService.getOne(lqw);
return R.success(user);
}
diff --git a/src/main/java/com/dhu/entity/User.java b/src/main/java/com/dhu/entity/User.java
deleted file mode 100644
index 8d973db40194d8e9acec071ede70cdc490250730..0000000000000000000000000000000000000000
--- a/src/main/java/com/dhu/entity/User.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.dhu.entity;
-
-import lombok.Data;
-import java.time.LocalDateTime;
-import java.util.Date;
-import java.util.List;
-import java.io.Serializable;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-/**
- * 用户信息
- */
-@Data
-public class User implements Serializable {
-
- private static final long serialVersionUID = 1L;
-
- private Long id;
-
-
- //姓名
- private String name;
-
-
- //手机号
- private String phone;
-
-
- //性别 0 女 1 男
- private String sex;
-
-
- //身份证号
- private String idNumber;
-
-
- //头像
- private String avatar;
-
-
- //状态 0:禁用,1:正常
- private Integer status;
-}
diff --git a/src/main/java/com/dhu/filter/LoginCheckFilter.java b/src/main/java/com/dhu/filter/LoginCheckFilter.java
index 57c6b28e82d04dd4beb1e31cf312758188a45778..31ed675ed7e63e87329c468f1360b1aae07298b6 100644
--- a/src/main/java/com/dhu/filter/LoginCheckFilter.java
+++ b/src/main/java/com/dhu/filter/LoginCheckFilter.java
@@ -35,6 +35,7 @@ public class LoginCheckFilter implements Filter {
"/user/sendMsg",
"/user/sendEmail",
"/user/login",
+ "/user/login-email",
"/doc.html",
"/webjars/**",
"/swagger-resources",
@@ -93,4 +94,4 @@ public class LoginCheckFilter implements Filter {
}
return false;
}
-}
+}
\ No newline at end of file
diff --git a/src/main/java/com/dhu/mapper/UserMapper.java b/src/main/java/com/dhu/mapper/UserMapper.java
index 8efd520d4c45b25d8fb911b6aad37b1cd040bb3a..8cbf1999513a13e576ffb88cb7c41bd0369af493 100644
--- a/src/main/java/com/dhu/mapper/UserMapper.java
+++ b/src/main/java/com/dhu/mapper/UserMapper.java
@@ -1,9 +1,29 @@
package com.dhu.mapper;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dhu.entity.User;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+/**
+* @author 缄默
+* @description 针对表【user(用户信息)】的数据库操作Mapper
+* @createDate 2022-12-04 13:20:36
+* @Entity com.dhu.entity.User
+*/
@Mapper
public interface UserMapper extends BaseMapper {
+
+ //获取用户角色信息
+ @Select("select name from role where id in(select rid from role_user where uid =( select id from user where name =#{principal}));")
+ List getUserRoleInfoMapper(@Param("principal")String principal);
+
+ List getUserPermissionInfoMapper(@Param("roles")List roles);
}
+
+
+
+
diff --git a/src/main/java/com/dhu/service/UserService.java b/src/main/java/com/dhu/service/UserService.java
index 6f349ad16307a68f351f49248d38a4017f6a5fa4..88d1a18d42a37393048a2a0c28b4bd9cd76b4d3b 100644
--- a/src/main/java/com/dhu/service/UserService.java
+++ b/src/main/java/com/dhu/service/UserService.java
@@ -1,9 +1,24 @@
package com.dhu.service;
-import com.baomidou.mybatisplus.extension.service.IService;
import com.dhu.entity.User;
+import com.baomidou.mybatisplus.extension.service.IService;
-public interface UserService extends IService {
+import java.util.List;
+/**
+* @author 缄默
+* @description 针对表【user(用户信息)】的数据库操作Service
+* @createDate 2022-12-04 13:20:36
+*/
+public interface UserService extends IService {
public void sendMsg(String email, String subject, String context);
+
+ User getUserInfoByName(String name);
+
+ //根据用户查询角色信息
+ List getUserRoleInfo(String principal);
+
+ //根据角色查询权限
+ List getUserPermissionInfo(List roles);
+
}
diff --git a/src/main/java/com/dhu/service/impl/UserServiceImpl.java b/src/main/java/com/dhu/service/impl/UserServiceImpl.java
index 42e68be2bb3fd045632d417b49a8062bd962b4c5..dc54c910e21f6f4ecc606a5d2ee6352479092970 100644
--- a/src/main/java/com/dhu/service/impl/UserServiceImpl.java
+++ b/src/main/java/com/dhu/service/impl/UserServiceImpl.java
@@ -1,21 +1,33 @@
package com.dhu.service.impl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dhu.entity.User;
-import com.dhu.mapper.UserMapper;
import com.dhu.service.UserService;
+import com.dhu.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;
+import java.util.List;
+
+/**
+* @author 缄默
+* @description 针对表【user(用户信息)】的数据库操作Service实现
+* @createDate 2022-12-04 13:20:36
+*/
@Service
-public class UserServiceImpl extends ServiceImpl implements UserService {
+public class UserServiceImpl extends ServiceImpl
+ implements UserService{
@Value("${spring.mail.username}")
private String from; //邮件发送人
@Autowired
private JavaMailSender mailSender;
+
+ @Autowired
+ private UserMapper userMapper;
@Override
public void sendMsg(String to, String subject, String context) {
SimpleMailMessage mailMessage = new SimpleMailMessage();
@@ -27,4 +39,27 @@ public class UserServiceImpl extends ServiceImpl implements Us
mailSender.send(mailMessage);
}
+
+ @Override
+ public User getUserInfoByName(String name) {
+ LambdaQueryWrapper lqw = new LambdaQueryWrapper<>();
+ lqw.eq(User::getName, name);
+ User user = userMapper.selectOne(lqw);
+ return user;
+ }
+
+ @Override
+ public List getUserRoleInfo(String principal) {
+ return userMapper.getUserRoleInfoMapper(principal);
+ }
+
+ //获取角色权限信息
+ @Override
+ public List getUserPermissionInfo(List roles) {
+ return userMapper.getUserPermissionInfoMapper(roles);
+ }
}
+
+
+
+
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 3ec05fce210674260864e287f109cc46e4dd93f3..4e95204d2a11949f7c6dcdf366a29398c06c2222 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -11,6 +11,16 @@ spring:
username: 3183761076@qq.com
password: ypkoxfpwysdndebi
default-encoding: utf-8
+ smtp:
+ auth: true
+ ssl:
+ trust: smtp.qq.com
+ socketFactory:
+ class: 'javax.net.ssl.SSLSocketFactory'
+ port: 465
+ starttls:
+ enable: true
+ required: true
redis:
password: a20011028
host: 101.133.226.33
@@ -40,4 +50,6 @@ mybatis-plus:
db-config:
id-type: ASSIGN_ID
reggie:
- path: /usr/local/img/
\ No newline at end of file
+ path: /usr/local/img/
+#shiro:
+# loginUrl: /myController/login
\ No newline at end of file
diff --git a/src/main/resources/backend/images/login/logo.png b/src/main/resources/backend/images/login/logo.png
index 86f104c9b1ba385473fb9bd8873a0af8c38c9604..6bd9fb8a652554e94903e0187bd3b5dda83c8e34 100644
Binary files a/src/main/resources/backend/images/login/logo.png and b/src/main/resources/backend/images/login/logo.png differ
diff --git a/src/main/resources/backend/images/logo.png b/src/main/resources/backend/images/logo.png
deleted file mode 100644
index de4e309ef3addabad86785a3abecd7187b84cb47..0000000000000000000000000000000000000000
Binary files a/src/main/resources/backend/images/logo.png and /dev/null differ
diff --git a/src/main/resources/backend/index.html b/src/main/resources/backend/index.html
index f128773506a17cdd30d86a6a444593eede363497..96dd56a78f1dd9a662c7c22737e94b24a668f599 100644
--- a/src/main/resources/backend/index.html
+++ b/src/main/resources/backend/index.html
@@ -4,7 +4,7 @@
- 瑞吉外卖管理端
+ 食为天管理端
@@ -34,7 +34,8 @@