diff --git a/sky-common/src/main/java/com/sky/constant/MessageConstant.java b/sky-common/src/main/java/com/sky/constant/MessageConstant.java index c6b645d..d761bb3 100644 --- a/sky-common/src/main/java/com/sky/constant/MessageConstant.java +++ b/sky-common/src/main/java/com/sky/constant/MessageConstant.java @@ -23,5 +23,5 @@ public class MessageConstant { public static final String DISH_BE_RELATED_BY_SETMEAL = "当前菜品关联了套餐,不能删除"; public static final String ORDER_STATUS_ERROR = "订单状态错误"; public static final String ORDER_NOT_FOUND = "订单不存在"; - + public static final String ALREADY_EXISTS = "已存在"; } diff --git a/sky-common/src/main/java/com/sky/json/JacksonObjectMapper.java b/sky-common/src/main/java/com/sky/json/JacksonObjectMapper.java index c181eda..53c9c17 100644 --- a/sky-common/src/main/java/com/sky/json/JacksonObjectMapper.java +++ b/sky-common/src/main/java/com/sky/json/JacksonObjectMapper.java @@ -25,8 +25,8 @@ import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKN public class JacksonObjectMapper extends ObjectMapper { public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd"; - //public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; - public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm"; + public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; +// public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm"; public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss"; public JacksonObjectMapper() { diff --git a/sky-pojo/src/main/java/com/sky/dto/StartOrStopDTO.java b/sky-pojo/src/main/java/com/sky/dto/StartOrStopDTO.java new file mode 100644 index 0000000..8bcf00b --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/dto/StartOrStopDTO.java @@ -0,0 +1,9 @@ +package com.sky.dto; + +import lombok.Data; + +@Data +public class StartOrStopDTO { + private int status; + private int id; +} diff --git a/sky-server/pom.xml b/sky-server/pom.xml index 6172153..3f5d194 100644 --- a/sky-server/pom.xml +++ b/sky-server/pom.xml @@ -95,7 +95,6 @@ org.springframework.boot spring-boot-starter-cache - org.springframework.boot spring-boot-starter-websocket @@ -115,6 +114,15 @@ org.apache.poi poi-ooxml + + org.springframework.boot + spring-boot-starter-security + + + com.github.pagehelper + pagehelper-spring-boot-starter + 1.4.2 + 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 98fc764..0176c44 100644 --- a/sky-server/src/main/java/com/sky/config/WebMvcConfiguration.java +++ b/sky-server/src/main/java/com/sky/config/WebMvcConfiguration.java @@ -1,10 +1,13 @@ package com.sky.config; import com.sky.interceptor.JwtTokenAdminInterceptor; +import com.sky.json.JacksonObjectMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; @@ -15,6 +18,8 @@ import springfox.documentation.service.ApiInfo; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; +import java.util.List; + /** * 配置类,注册web层相关组件 */ @@ -65,4 +70,19 @@ public class WebMvcConfiguration extends WebMvcConfigurationSupport { registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); } + + /** + *扩展spring mvc消息转化器 + * @param converters + */ + @Override + protected void extendMessageConverters(List> converters) { + log.info("扩展消息转换器..."); + //创建一个消息转换器对象 + MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); + //需要为消息转换器设置一个对象转换器,对象转换器可以将Java对象序列化为json数据 + converter.setObjectMapper(new JacksonObjectMapper()); + //将自己的消息转化器加入容器中 + converters.add(0,converter); + } } diff --git a/sky-server/src/main/java/com/sky/config/WebSecurityConfig.java b/sky-server/src/main/java/com/sky/config/WebSecurityConfig.java new file mode 100644 index 0000000..ae7898b --- /dev/null +++ b/sky-server/src/main/java/com/sky/config/WebSecurityConfig.java @@ -0,0 +1,25 @@ +package com.sky.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; + +@Configuration +@EnableWebSecurity +public class WebSecurityConfig extends WebSecurityConfigurerAdapter { + @Override + protected void configure(HttpSecurity http) throws Exception { + http + .authorizeRequests() + .anyRequest().permitAll() // 允许所有请求 + .and() + .csrf().disable(); // 禁用CSRF保护 + } + @Bean + public BCryptPasswordEncoder encoder(){ + return new BCryptPasswordEncoder(); + } +} \ No newline at end of file diff --git a/sky-server/src/main/java/com/sky/controller/admin/EmployeeController.java b/sky-server/src/main/java/com/sky/controller/admin/EmployeeController.java index 5857f07..7a14e27 100644 --- a/sky-server/src/main/java/com/sky/controller/admin/EmployeeController.java +++ b/sky-server/src/main/java/com/sky/controller/admin/EmployeeController.java @@ -1,19 +1,21 @@ package com.sky.controller.admin; import com.sky.constant.JwtClaimsConstant; +import com.sky.dto.EmployeeDTO; import com.sky.dto.EmployeeLoginDTO; +import com.sky.dto.EmployeePageQueryDTO; +import com.sky.dto.StartOrStopDTO; import com.sky.entity.Employee; import com.sky.properties.JwtProperties; +import com.sky.result.PageResult; import com.sky.result.Result; import com.sky.service.EmployeeService; import com.sky.utils.JwtUtil; import com.sky.vo.EmployeeLoginVO; +import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.Map; @@ -71,4 +73,33 @@ public class EmployeeController { return Result.success(); } + /** + * 新增员工 + */ + @PostMapping + @ApiOperation("新增员工") + public Result save(@RequestBody EmployeeDTO employeeDTO){ + log.info("新增员工:{}",employeeDTO); + employeeService.save(employeeDTO); + return Result.success(); + } + /** + * 分页查询 + */ + @GetMapping("/page") + @ApiOperation("分页查询") + public Result list(EmployeePageQueryDTO employeePageQueryDTO){ + log.info("分页查询:{}",employeePageQueryDTO); + PageResult pageResult=employeeService.pageQuery(employeePageQueryDTO); + return Result.success(pageResult); + } + /** + * 禁用/启动员工 + */ + @PutMapping("/status") + @ApiOperation("禁用/启用") + public Result startOrStop(@RequestBody StartOrStopDTO startOrStopDTO){ + employeeService.startOrStop(startOrStopDTO); + return Result.success(); + } } diff --git a/sky-server/src/main/java/com/sky/handler/GlobalExceptionHandler.java b/sky-server/src/main/java/com/sky/handler/GlobalExceptionHandler.java index 1a48598..6cbe2da 100644 --- a/sky-server/src/main/java/com/sky/handler/GlobalExceptionHandler.java +++ b/sky-server/src/main/java/com/sky/handler/GlobalExceptionHandler.java @@ -1,11 +1,14 @@ package com.sky.handler; +import com.sky.constant.MessageConstant; import com.sky.exception.BaseException; import com.sky.result.Result; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; +import java.sql.SQLIntegrityConstraintViolationException; + /** * 全局异常处理器,处理项目中抛出的业务异常 */ @@ -23,5 +26,18 @@ public class GlobalExceptionHandler { log.error("异常信息:{}", ex.getMessage()); return Result.error(ex.getMessage()); } - + @ExceptionHandler + public Result exceptionHandler(SQLIntegrityConstraintViolationException ex){ + //Duplicate entry 'zhangsan' for key 'employee.idx_username' + String message = ex.getMessage(); + log.info(message); + if(message.contains("Duplicate entry")){ + String[] split = message.split(" "); + String username = split[2]; + String msg = username + MessageConstant.ALREADY_EXISTS; + return Result.error(msg); + }else{ + return Result.error(MessageConstant.UNKNOWN_ERROR); + } + } } diff --git a/sky-server/src/main/java/com/sky/interceptor/JwtTokenAdminInterceptor.java b/sky-server/src/main/java/com/sky/interceptor/JwtTokenAdminInterceptor.java index e7c50b6..b880123 100644 --- a/sky-server/src/main/java/com/sky/interceptor/JwtTokenAdminInterceptor.java +++ b/sky-server/src/main/java/com/sky/interceptor/JwtTokenAdminInterceptor.java @@ -1,6 +1,7 @@ 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; @@ -47,6 +48,7 @@ public class JwtTokenAdminInterceptor implements HandlerInterceptor { Claims claims = JwtUtil.parseJWT(jwtProperties.getAdminSecretKey(), token); Long empId = Long.valueOf(claims.get(JwtClaimsConstant.EMP_ID).toString()); log.info("当前员工id:", empId); + BaseContext.setCurrentId(empId); //3、通过,放行 return true; } catch (Exception ex) { diff --git a/sky-server/src/main/java/com/sky/mapper/EmployeeMapper.java b/sky-server/src/main/java/com/sky/mapper/EmployeeMapper.java index 550eda5..39895fa 100644 --- a/sky-server/src/main/java/com/sky/mapper/EmployeeMapper.java +++ b/sky-server/src/main/java/com/sky/mapper/EmployeeMapper.java @@ -1,8 +1,14 @@ package com.sky.mapper; +import com.sky.dto.EmployeePageQueryDTO; +import com.sky.dto.StartOrStopDTO; import com.sky.entity.Employee; +import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +import java.util.List; @Mapper public interface EmployeeMapper { @@ -15,4 +21,20 @@ public interface EmployeeMapper { @Select("select * from employee where username = #{username}") Employee getByUsername(String username); + /** + * 新增员工 + * @param employee + */ + @Insert("insert into employee (name, username, password, phone, sex, id_number, create_time, update_time, create_user, update_user,status) " + + "values " + + "(#{name},#{username},#{password},#{phone},#{sex},#{idNumber},#{createTime},#{updateTime},#{createUser},#{updateUser},#{status})") + void save(Employee employee); + + /** + * 分页条件查询 + * @return + */ + List list(EmployeePageQueryDTO employeePageQueryDTO); + @Update("update employee set status=#{status} where id=#{id}") + void startOrStop(StartOrStopDTO startOrStopDTO); } diff --git a/sky-server/src/main/java/com/sky/service/EmployeeService.java b/sky-server/src/main/java/com/sky/service/EmployeeService.java index d3e2ab2..3f02909 100644 --- a/sky-server/src/main/java/com/sky/service/EmployeeService.java +++ b/sky-server/src/main/java/com/sky/service/EmployeeService.java @@ -1,7 +1,11 @@ package com.sky.service; +import com.sky.dto.EmployeeDTO; import com.sky.dto.EmployeeLoginDTO; +import com.sky.dto.EmployeePageQueryDTO; +import com.sky.dto.StartOrStopDTO; import com.sky.entity.Employee; +import com.sky.result.PageResult; public interface EmployeeService { @@ -12,4 +16,9 @@ public interface EmployeeService { */ Employee login(EmployeeLoginDTO employeeLoginDTO); + void save(EmployeeDTO employeeDTO); + + PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO); + + void startOrStop(StartOrStopDTO startOrStopDTO); } diff --git a/sky-server/src/main/java/com/sky/service/impl/EmployeeServiceImpl.java b/sky-server/src/main/java/com/sky/service/impl/EmployeeServiceImpl.java index cc98c98..d4ce1e4 100644 --- a/sky-server/src/main/java/com/sky/service/impl/EmployeeServiceImpl.java +++ b/sky-server/src/main/java/com/sky/service/impl/EmployeeServiceImpl.java @@ -1,23 +1,37 @@ package com.sky.service.impl; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; import com.sky.constant.MessageConstant; +import com.sky.constant.PasswordConstant; import com.sky.constant.StatusConstant; +import com.sky.context.BaseContext; +import com.sky.dto.EmployeeDTO; import com.sky.dto.EmployeeLoginDTO; +import com.sky.dto.EmployeePageQueryDTO; +import com.sky.dto.StartOrStopDTO; import com.sky.entity.Employee; import com.sky.exception.AccountLockedException; import com.sky.exception.AccountNotFoundException; import com.sky.exception.PasswordErrorException; import com.sky.mapper.EmployeeMapper; +import com.sky.result.PageResult; import com.sky.service.EmployeeService; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; -import org.springframework.util.DigestUtils; + +import java.time.LocalDateTime; +import java.util.List; @Service public class EmployeeServiceImpl implements EmployeeService { @Autowired private EmployeeMapper employeeMapper; + @Autowired + private BCryptPasswordEncoder bCryptPasswordEncoder; /** * 员工登录 @@ -40,7 +54,7 @@ public class EmployeeServiceImpl implements EmployeeService { //密码比对 // TODO 后期需要进行md5加密,然后再进行比对 - if (!password.equals(employee.getPassword())) { + if (!bCryptPasswordEncoder.matches(password,employee.getPassword())) { //密码错误 throw new PasswordErrorException(MessageConstant.PASSWORD_ERROR); } @@ -54,4 +68,32 @@ public class EmployeeServiceImpl implements EmployeeService { return employee; } + @Override + public void save(EmployeeDTO employeeDTO) { + Employee employee = new Employee(); + //对象属性拷贝 + BeanUtils.copyProperties(employeeDTO, employee); + employee.setCreateTime(LocalDateTime.now()); + employee.setUpdateTime(LocalDateTime.now()); + employee.setUpdateUser(BaseContext.getCurrentId()); + employee.setCreateUser(BaseContext.getCurrentId()); + String encodedPassword=bCryptPasswordEncoder.encode(PasswordConstant.DEFAULT_PASSWORD); + employee.setPassword(encodedPassword); + employee.setStatus(StatusConstant.ENABLE); + employeeMapper.save(employee); + } + + @Override + public PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO) { + PageHelper.startPage(employeePageQueryDTO.getPage(), employeePageQueryDTO.getPageSize()); + List employeeList=employeeMapper.list(employeePageQueryDTO); + Page p= (Page) employeeList; + PageResult pageResult=new PageResult(p.getTotal(),p.getResult()); + return pageResult; + } + + @Override + public void startOrStop(StartOrStopDTO startOrStopDTO) { + employeeMapper.startOrStop(startOrStopDTO); + } } diff --git a/sky-server/src/main/resources/application-dev.yml b/sky-server/src/main/resources/application-dev.yml index 0339477..dd9dca6 100644 --- a/sky-server/src/main/resources/application-dev.yml +++ b/sky-server/src/main/resources/application-dev.yml @@ -5,4 +5,4 @@ sky: port: 3306 database: sky_take_out username: root - password: root + password: 123456 diff --git a/sky-server/src/main/resources/mapper/EmployeeMapper.xml b/sky-server/src/main/resources/mapper/EmployeeMapper.xml index 3c3dc8d..f7ea02a 100644 --- a/sky-server/src/main/resources/mapper/EmployeeMapper.xml +++ b/sky-server/src/main/resources/mapper/EmployeeMapper.xml @@ -2,4 +2,13 @@ +