com.wiiyaya.provider.main.service.impl.BackendUserServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.wiiyaya.provider.main.service.impl.BackendUserServiceImpl.java

Source

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

}