package com.matrix.system.common.service.impl; 
 | 
  
 | 
import com.matrix.core.constance.MatrixConstance; 
 | 
import com.matrix.core.constance.SystemErrorCode; 
 | 
import com.matrix.core.exception.GlobleException; 
 | 
import com.matrix.core.pojo.PaginationVO; 
 | 
import com.matrix.core.tools.ModelUtils; 
 | 
import com.matrix.core.tools.StringUtils; 
 | 
import com.matrix.core.tools.WebUtil; 
 | 
import com.matrix.system.common.bean.*; 
 | 
import com.matrix.system.common.dao.SysRoleDao; 
 | 
import com.matrix.system.common.dao.SysRolePwoerFnDao; 
 | 
import com.matrix.system.common.service.SysRoleService; 
 | 
import org.apache.commons.collections.CollectionUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Service; 
 | 
  
 | 
import java.util.ArrayList; 
 | 
import java.util.List; 
 | 
import java.util.Map; 
 | 
  
 | 
/** 
 | 
 * 角色管理功能 
 | 
 * @author JIANGYOUYAO 
 | 
 * @email 935090232@qq.com 
 | 
 * @date Dec 11, 2017 
 | 
 */ 
 | 
@Service 
 | 
public class SysRoleServiceImpl implements SysRoleService { 
 | 
  
 | 
    @Autowired 
 | 
    private SysRoleDao sysRoleDao; 
 | 
    @Autowired 
 | 
    private SysRolePwoerFnDao rolePwoerDao; 
 | 
  
 | 
    @Override 
 | 
    public int add(SysRole sysRole) { 
 | 
        SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); 
 | 
        sysRole.setCompanyId(user.getCompanyId()); 
 | 
        sysRole.setCreateBy(user.getSuAccount()); 
 | 
        sysRole.setUpdateBy(user.getSuAccount()); 
 | 
        sysRole.setIsDefault(SysRole.NOT_DEFAULT); 
 | 
        // 新增角色对应的中间表 
 | 
        int i = sysRoleDao.insert(sysRole); 
 | 
        addRolePwoer(sysRole); 
 | 
        return i; 
 | 
  
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 新增角色的权限,添加前清空已有的权限 
 | 
     *  
 | 
     * @param sysRole 
 | 
     */ 
 | 
    private void addRolePwoer(SysRole sysRole) { 
 | 
        SysRolePwoerFn sysRolePwoerFn = new SysRolePwoerFn(); 
 | 
        sysRolePwoerFn.setRoleId(sysRole.getRoleId()); 
 | 
        rolePwoerDao.deleteByModel(sysRolePwoerFn); 
 | 
        List<SysFunction> fnList = sysRole.getFnList(); 
 | 
        List<SysRolePwoerFn> rolePwoer = new ArrayList<>(); 
 | 
        if (fnList != null) { 
 | 
            for (SysFunction sysFunction : fnList) { 
 | 
                // 如果为空则不在进行添加 
 | 
                if (sysFunction == null || sysFunction.getFnId() == null) { 
 | 
                    continue; 
 | 
                } 
 | 
                SysRolePwoerFn temp = new SysRolePwoerFn(); 
 | 
                temp.setFnId(sysFunction.getFnId()); 
 | 
                temp.setRoleId(sysRole.getRoleId()); 
 | 
                temp.setCreateBy(sysRole.getCreateBy()); 
 | 
                temp.setUpdateBy(sysRole.getUpdateBy()); 
 | 
                temp.setRpfBtns(getBtns(sysFunction.getSysFnBtnRel())); 
 | 
                rolePwoer.add(temp); 
 | 
            } 
 | 
        } 
 | 
        if (CollectionUtils.isNotEmpty(rolePwoer)) { 
 | 
            rolePwoerDao.batchInsert(rolePwoer); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取功能按钮的字符串值 
 | 
     *  
 | 
     * @author JIANGYOUYAO 
 | 
     * @email 935090232@qq.com 
 | 
     * @date 2017年12月6日 
 | 
     * @param sysFunction 
 | 
     * @return 
 | 
     */ 
 | 
    private String getBtns(List<SysFnBtnRel> fnBtnRelList) { 
 | 
        StringBuilder btns = new StringBuilder(); 
 | 
        if (CollectionUtils.isNotEmpty(fnBtnRelList)) { 
 | 
            for (SysFnBtnRel fnBtnRel : fnBtnRelList) { 
 | 
                if (fnBtnRel != null && StringUtils.isNotBlank(fnBtnRel.getBtnValue())) { 
 | 
                    btns.append(fnBtnRel.getBtnValue() + ","); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return btns.toString().substring(0, btns.toString().length()); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public int batchAdd(List<SysRole> sysRoleList) { 
 | 
        return sysRoleDao.batchInsert(sysRoleList); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public int modifyByMap(SysRole oldSysRole, SysRole newSysRole) { 
 | 
        // 这样写只能保证基本信息不被覆盖 
 | 
        SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); 
 | 
        newSysRole.setCompanyId(user.getCompanyId()); 
 | 
        newSysRole.setCreateBy(user.getSuName()); 
 | 
        newSysRole.setUpdateBy(user.getSuName()); 
 | 
        addRolePwoer(newSysRole); 
 | 
        Map<String, Object> modifyMap = null; 
 | 
        try { 
 | 
            if (!ModelUtils.isModified(oldSysRole, newSysRole)) { 
 | 
                return MatrixConstance.DML_SUCCESSS; 
 | 
            } 
 | 
            modifyMap = ModelUtils.comparePojo2Map(oldSysRole, newSysRole); 
 | 
        } catch (Exception e) { 
 | 
            throw new GlobleException(SystemErrorCode.DATA_UPDATE_FAIL, e, newSysRole.getRoleName()); 
 | 
        } 
 | 
        if (modifyMap.size() > 0) { 
 | 
            modifyMap.put("roleId", oldSysRole.getRoleId()); 
 | 
            return sysRoleDao.updateByMap(modifyMap); 
 | 
        } 
 | 
        return MatrixConstance.DML_SUCCESSS; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public int modifyByModel(SysRole sysRole) { 
 | 
        return sysRoleDao.updateByModel(sysRole); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public int remove(List<String> list) { 
 | 
  
 | 
        return sysRoleDao.deleteByIds(list); 
 | 
  
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public int removeById(String roleId) { 
 | 
  
 | 
        return sysRoleDao.deleteById(Long.valueOf(roleId)); 
 | 
  
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public int removeByModel(SysRole sysRole) { 
 | 
  
 | 
        return sysRoleDao.deleteByModel(sysRole); 
 | 
  
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<SysRole> findInPage(SysRole sysRole, PaginationVO pageVo) { 
 | 
  
 | 
        return sysRoleDao.selectInPage(sysRole, pageVo); 
 | 
  
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<SysRole> findByModel(SysRole sysRole) { 
 | 
  
 | 
        return sysRoleDao.selectByModel(sysRole); 
 | 
  
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public int findTotal(SysRole sysRole) { 
 | 
  
 | 
        return sysRoleDao.selectTotalRecord(sysRole); 
 | 
  
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public SysRole findById(String roleId) { 
 | 
  
 | 
        return sysRoleDao.selectById(Long.valueOf(roleId)); 
 | 
  
 | 
    } 
 | 
  
 | 
} 
 |