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 page = employeeMapper.pageQuery(employeePageQueryDTO); long total = page.getTotal(); // 获取总记录数 List 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); } }