package cn.cetc54.platform.core.serviceimpl; import cn.cetc54.platform.core.common.vo.PermissionDTO; import cn.cetc54.platform.core.dao.UserDao; import cn.cetc54.platform.core.dao.mapper.PermissionMapper; import cn.cetc54.platform.core.dao.mapper.UserRoleMapper; import cn.cetc54.platform.core.entity.Role; import cn.cetc54.platform.core.entity.User; import cn.cetc54.platform.core.service.UserService; import cn.cetc54.platform.core.common.constant.CommonConstant; import cn.cetc54.platform.core.common.utils.SecurityUtil; import cn.cetc54.platform.core.common.vo.RoleDTO; import cn.cetc54.platform.core.common.vo.SearchVo; import cn.cetc54.platform.core.entity.Permission; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; import org.springframework.lang.Nullable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.persistence.criteria.*; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.stream.Collectors; /** * 用户接口实现 * @author */ @Slf4j @Service @Transactional public class UserServiceImpl implements UserService { @Autowired private UserDao userDao; @Autowired private UserRoleMapper userRoleMapper; @Autowired private PermissionMapper permissionMapper; @Autowired private SecurityUtil securityUtil; @Override public UserDao getRepository() { return userDao; } @Override public User findByUsername(String username) { User user = userDao.findByUsername(username); if(user==null){ return null; } return userToDTO(user); } @Override public User findByMobile(String mobile) { User user = userDao.findByMobile(mobile); if(user==null){ return null; } return userToDTO(user); } @Override public User findByEmail(String email) { User user = userDao.findByEmail(email); if(user==null){ return null; } return userToDTO(user); } public User userToDTO(User user){ // 关联角色 List roleList = userRoleMapper.findByUserId(user.getId()); List roleDTOList = roleList.stream().map(e->{ return new RoleDTO().setId(e.getId()).setName(e.getName()); }).collect(Collectors.toList()); user.setRoles(roleDTOList); // 关联权限菜单 List permissionList = permissionMapper.findByUserId(user.getId()); List permissionDTOList = permissionList.stream() .filter(e -> CommonConstant.PERMISSION_OPERATION.equals(e.getType())) .map(e->{ return new PermissionDTO().setTitle(e.getTitle()).setPath(e.getPath()); }).collect(Collectors.toList()); user.setPermissions(permissionDTOList); return user; } @Override public Page findByCondition(User user, SearchVo searchVo, Pageable pageable) { return userDao.findAll(new Specification() { @Nullable @Override public Predicate toPredicate(Root root, CriteriaQuery cq, CriteriaBuilder cb) { Path idField = root.get("id"); Path usernameField = root.get("username"); Path nicknameField = root.get("nickname"); Path mobileField = root.get("mobile"); Path emailField = root.get("email"); Path departmentIdField = root.get("departmentId"); Path sexField = root.get("sex"); Path typeField = root.get("type"); Path statusField = root.get("status"); Path createTimeField = root.get("createTime"); List list = new ArrayList(); if(StrUtil.isNotBlank(user.getId())){ list.add(cb.equal(idField, user.getId())); } //模糊搜素 if(StrUtil.isNotBlank(user.getUsername())){ list.add(cb.like(usernameField,'%'+user.getUsername()+'%')); } if(StrUtil.isNotBlank(user.getNickname())){ list.add(cb.like(nicknameField,'%'+user.getNickname()+'%')); } if(StrUtil.isNotBlank(user.getMobile())){ list.add(cb.like(mobileField,'%'+user.getMobile()+'%')); } if(StrUtil.isNotBlank(user.getEmail())){ list.add(cb.like(emailField,'%'+user.getEmail()+'%')); } //部门 if(StrUtil.isNotBlank(user.getDepartmentId())){ list.add(cb.equal(departmentIdField, user.getDepartmentId())); } //性别 if(StrUtil.isNotBlank(user.getSex())){ list.add(cb.equal(sexField, user.getSex())); } //类型 if(user.getType()!=null){ list.add(cb.equal(typeField, user.getType())); } //状态 if(user.getStatus()!=null){ list.add(cb.equal(statusField, user.getStatus())); } //创建时间 if(StrUtil.isNotBlank(searchVo.getStartDate())&&StrUtil.isNotBlank(searchVo.getEndDate())){ Date start = DateUtil.parse(searchVo.getStartDate()); Date end = DateUtil.parse(searchVo.getEndDate()); list.add(cb.between(createTimeField, start, DateUtil.endOfDay(end))); } //数据权限 List depIds = securityUtil.getDeparmentIds(); if(depIds!=null&&depIds.size()>0){ list.add(departmentIdField.in(depIds)); } Predicate[] arr = new Predicate[list.size()]; cq.where(list.toArray(arr)); return null; } }, pageable); } @Override public List findByDepartmentId(String departmentId) { return userDao.findByDepartmentId(departmentId); } @Override public void updateDepartmentTitle(String departmentId, String departmentTitle) { userDao.updateDepartmentTitle(departmentId, departmentTitle); } }