|
|
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);
|
|
|
}
|
|
|
}
|