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 fnList = sysRole.getFnList(); List 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 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 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 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 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 findInPage(SysRole sysRole, PaginationVO pageVo) { return sysRoleDao.selectInPage(sysRole, pageVo); } @Override public List 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)); } }