You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
sky-take-out/sky-server/src/main/java/com/sky/service/impl/EmployeeServiceImpl.java

159 lines
5.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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.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.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;
/**
* 员工登录
*
* @param employeeLoginDTO 包含用户名和密码的数据传输对象
* @return 返回登录成功的员工实体对象
*/
public Employee login(EmployeeLoginDTO employeeLoginDTO) {
String username = employeeLoginDTO.getUsername();
String password = employeeLoginDTO.getPassword();
//1、根据用户名查询数据库中的数据
Employee employee = employeeMapper.getByUsername(username);
//2、处理各种异常情况用户名不存在、密码不对、账号被锁定
if (employee == null) {
//账号不存在
throw new AccountNotFoundException(MessageConstant.ACCOUNT_NOT_FOUND);
}
//密码比对
//对前端传过来的明文密码进行加密处理
password = DigestUtils.md5DigestAsHex(password.getBytes());
if (!password.equals(employee.getPassword())) {
//密码错误
throw new PasswordErrorException(MessageConstant.PASSWORD_ERROR);
}
if (employee.getStatus() == StatusConstant.DISABLE) {
//账号被锁定
throw new AccountLockedException(MessageConstant.ACCOUNT_LOCKED);
}
//3、返回实体对象
return employee;
}
/*
* 新增员工
*
* @param employeeDTO 包含新员工信息的数据传输对象
*/
@Override
public void save(EmployeeDTO employeeDTO) {
System.out.println("当前线程的id" + Thread.currentThread().getId());
Employee employee = new Employee();
//对象属性拷贝
BeanUtils.copyProperties(employeeDTO,employee);
//设置账户状态为启用
employee.setStatus(StatusConstant.ENABLE);
//设置默认密码并进行加密处理
employee.setPassword(DigestUtils.md5DigestAsHex(PasswordConstant.DEFAULT_PASSWORD.getBytes()));
// employee.setCreateTime(LocalDateTime.now()); // 创建时间设置为当前时间
// employee.setUpdateTime(LocalDateTime.now()); // 更新时间设置为当前时间
// employee.setCreateUser(BaseContext.getCurrentId()); // 创建人ID设置为当前用户ID
// employee.setUpdateUser(BaseContext.getCurrentId()); // 更新人ID设置为当前用户ID
//将新员工信息插入数据库
employeeMapper.insert(employee);
}
/*
* 分页查询员工列表
*
* @param employeePageQueryDTO 包含分页查询条件的数据传输对象
* @return 返回分页结果,包括总记录数和当前页数据列表
*/
@Override
public PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO) {
//开始分页查询
PageHelper.startPage(employeePageQueryDTO.getPage(),employeePageQueryDTO.getPageSize());
Page<Employee> page = employeeMapper.pageQuery(employeePageQueryDTO);
long total = page.getTotal(); // 获取总记录数
List<Employee> records = page.getResult(); // 获取当前页数据列表
return new PageResult(total,records); // 返回分页结果
}
/*
* 修改员工状态(启用或禁用)
*
* @param status 要设置的状态值(启用或禁用)
* @param id 要修改的员工ID
*/
@Override
public void startOrStop(Integer status, Long id) {
//构建员工对象并设置状态和ID
Employee employee = Employee.builder()
.status(status)
.id(id)
.build();
//更新员工状态到数据库
employeeMapper.update(employee);
}
/*
* 根据ID查询员工信息并隐藏密码字段
*
* @param id 要查询的员工ID
* @return 返回查询到的员工实体对象,密码字段被隐藏为"****"
*/
@Override
public Employee getById(Long id) {
Employee employee = employeeMapper.getById(id); // 根据ID查询员工信息
employee.setPassword("****"); // 隐藏密码字段
return employee; // 返回查询到的员工信息
}
/*
* 更新员工信息
*
* @param employeeDTO 包含更新后的员工信息的数据传输对象
*/
@Override
public void update(EmployeeDTO employeeDTO) {
Employee employee = new Employee();
BeanUtils.copyProperties(employeeDTO,employee); // 将DTO对象的属性拷贝到实体对象中
// employee.setUpdateTime(LocalDateTime.now()); // 更新时间为当前时间
// employee.setUpdateUser(BaseContext.getCurrentId()); // 更新人ID设置为当前用户ID
//更新员工信息到数据库
employeeMapper.update(employee);
}
}