Java tutorial
/* * Copyright 2016-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.wiiyaya.provider.main.service.impl; import com.mysema.query.jpa.JPQLQuery; import com.wiiyaya.framework.common.exception.BusinessException; import com.wiiyaya.framework.common.model.easyui.EasyUiDataGrid; import com.wiiyaya.framework.common.utils.StringUtils; import com.wiiyaya.framework.provider.tools.JF; import com.wiiyaya.provider.main.constant.MainConstant; import com.wiiyaya.provider.main.entity.BackendUser; import com.wiiyaya.provider.main.entity.Role; import com.wiiyaya.provider.main.model.BackendUserDto; import com.wiiyaya.provider.main.repository.BackendUserDao; import com.wiiyaya.provider.main.repository.RoleDao; import com.wiiyaya.provider.main.repository.querydsl.BackendUserQry; import com.wiiyaya.provider.main.service.BackendUserService; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.IterableUtils; import org.apache.commons.collections4.Predicate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; @Service("backendUserService") public class BackendUserServiceImpl implements BackendUserService { @Autowired private BackendUserDao backendUserDao; @Autowired private RoleDao roleDao; @Autowired private PasswordEncoder passwordEncoder; @Override @Transactional(readOnly = true) public EasyUiDataGrid<BackendUserDto> getAllUsers(final BackendUserDto backendUserDto, Pageable pageRequest) { List<BackendUserDto> rstList = new ArrayList<>(); //Page<BackendUser> backendUserDbs = backendUserDao.findAllJF((schQry, notCountQry) -> BackendUserQry.searchUser(schQry, notCountQry, backendUserDto), pageRequest); Lambda ? Page<BackendUser> backendUserDbs = backendUserDao.findAllJF(new JF() { @Override public void prepareQry(JPQLQuery schQry, boolean notCountQry) { BackendUserQry.searchUser(schQry, notCountQry, backendUserDto); } }, pageRequest); for (BackendUser backendUserDb : backendUserDbs) { BackendUserDto dto = new BackendUserDto(); dto.setId(backendUserDb.getId()); dto.setNickname(backendUserDb.getNickname()); dto.setEmail(backendUserDb.getEmail()); dto.setPhone(backendUserDb.getPhone()); dto.setEnabled(backendUserDb.isEnabled()); List<String> rNames = new ArrayList<>(); for (Role r : backendUserDb.getRoles()) { rNames.add(r.getName()); } dto.setRoleNames(StringUtils.join(rNames, StringUtils.SPACE)); rstList.add(dto); } return new EasyUiDataGrid<>(rstList, backendUserDbs.getTotalElements()); } @Override @Transactional(rollbackFor = BusinessException.class) public void saveUser(BackendUserDto backendUserDto) throws BusinessException { if (backendUserDao.isUsernameExists(backendUserDto.getUsername()) > 0) { throw new BusinessException(MainConstant.ERROR_USER_NAME_EXISTS); } BackendUser backendUserDb = new BackendUser(); backendUserDb.setUsername(backendUserDto.getUsername()); backendUserDb.setPassword(passwordEncoder.encode(backendUserDto.getPassword())); backendUserDb.setNickname(backendUserDto.getNickname()); backendUserDb.setEmail(backendUserDto.getEmail()); backendUserDb.setPhone(backendUserDto.getPhone()); Set<Role> roles = new HashSet<Role>(); for (Long roleId : backendUserDto.getRoleIds()) { roles.add(roleDao.findOne(roleId)); } backendUserDb.setRoles(roles); backendUserDb.setAccountNonExpired(true); backendUserDb.setAccountNonLocked(true); backendUserDb.setCredentialsNonExpired(true); backendUserDb.setEnabled(true); backendUserDao.save(backendUserDb); } @Override @Transactional(readOnly = true) public BackendUserDto getUserById(Long userId) throws BusinessException { BackendUser backendUserDb = backendUserDao.findOne(userId); if (backendUserDb == null) { throw new BusinessException(MainConstant.ERROR_USER_NOT_FOUND); } BackendUserDto backendUserDto = new BackendUserDto(); backendUserDto.setId(backendUserDb.getId()); backendUserDto.setVersion(backendUserDb.getVersion()); backendUserDto.setUsername(backendUserDb.getUsername()); backendUserDto.setNickname(backendUserDb.getNickname()); backendUserDto.setEmail(backendUserDb.getEmail()); backendUserDto.setPhone(backendUserDb.getPhone()); //List<Long> roleIds = backendUserDb.getRoles().stream().map(Role::getId).collect(Collectors.toList()); Lambda ? List<Long> roleIds = new ArrayList<>(); for (Role role : backendUserDb.getRoles()) { roleIds.add(role.getId()); } backendUserDto.setRoleIds(roleIds); return backendUserDto; } @Override @Transactional(rollbackFor = BusinessException.class) public void updateUser(BackendUserDto backendUserDto) throws BusinessException { BackendUser backendUserDb = backendUserDao.findOne(backendUserDto.getId()); if (backendUserDb == null) { throw new BusinessException(MainConstant.ERROR_USER_NOT_FOUND); } if (backendUserDb.getId() <= 3L) { throw new BusinessException(MainConstant.ERROR_USER_CANT_AMD); } backendUserDb.setVersion(backendUserDto.getVersion()); backendUserDb.setNickname(backendUserDto.getNickname()); backendUserDb.setEmail(backendUserDto.getEmail()); backendUserDb.setPhone(backendUserDto.getPhone()); //?? if (StringUtils.isNotEmpty(backendUserDto.getNewPwd())) { if (StringUtils.isEmpty(backendUserDto.getPwdConfirm()) || !backendUserDto.getNewPwd().equals(backendUserDto.getPwdConfirm())) { throw new BusinessException(MainConstant.ERROR_USER_NEW_PWD_NOT_MATCH); } if (StringUtils.isEmpty(backendUserDto.getOldPwd()) || !passwordEncoder.matches(backendUserDto.getOldPwd(), backendUserDb.getPassword())) { throw new BusinessException(MainConstant.ERROR_USER_OLD_PWD_NOT_MATCH); } backendUserDb.setPassword(passwordEncoder.encode(backendUserDto.getNewPwd())); } if (CollectionUtils.isNotEmpty(backendUserDto.getRoleIds())) { for (Iterator<Role> itDb = backendUserDb.getRoles().iterator(); itDb.hasNext();) { final Role roleDb = itDb.next(); //boolean existInPage = IterableUtils.matchesAny(backendUserDto.getRoleIds(), object -> roleDb.getId().equals(object)); Lambda ? boolean existInPage = IterableUtils.matchesAny(backendUserDto.getRoleIds(), new Predicate<Long>() { @Override public boolean evaluate(Long object) { return roleDb.getId().equals(object); } }); if (!existInPage) { itDb.remove(); } } backendUserDb.getRoles().addAll(roleDao.findAll(backendUserDto.getRoleIds())); } else { backendUserDb.getRoles().clear(); } backendUserDao.save(backendUserDb); } @Override @Transactional(rollbackFor = BusinessException.class) public void enableUser(Long userId) throws BusinessException { BackendUser backendUserDb = backendUserDao.findOne(userId); if (backendUserDb == null) { throw new BusinessException(MainConstant.ERROR_USER_NOT_FOUND); } if (backendUserDb.getId() <= 3L) { throw new BusinessException(MainConstant.ERROR_USER_CANT_AMD); } backendUserDb.setEnabled(true); backendUserDao.save(backendUserDb); } @Override @Transactional(rollbackFor = BusinessException.class) public void disableUser(Long userId) throws BusinessException { BackendUser backendUserDb = backendUserDao.findOne(userId); if (backendUserDb == null) { throw new BusinessException(MainConstant.ERROR_USER_NOT_FOUND); } if (backendUserDb.getId() <= 3L) { throw new BusinessException(MainConstant.ERROR_USER_CANT_AMD); } backendUserDb.setEnabled(false); backendUserDao.save(backendUserDb); } }