package com.usky.service.sys; import com.sun.org.apache.xpath.internal.operations.Gte; import com.usky.annotion.DataScope; import com.usky.dao.impl.BaseDaoImpl; import com.usky.entity.BaseEntity; import com.usky.entity.sys.SysDeptDTO; import com.usky.entity.sys.SysRoleDTO; import com.usky.entity.sys.SysRoleDeptDTO; import com.usky.entity.sys.SysRoleMenuDTO; import com.usky.entity.sys.vo.SysDeptVO; import com.usky.entity.sys.vo.SysRoleVO; import com.usky.utils.BeanHelp; import com.usky.utils.Page; import com.usky.utils.ShiroUtils; import io.swagger.models.auth.In; import org.apache.commons.lang3.StringUtils; import org.hibernate.query.NativeQuery; import org.hibernate.transform.Transformers; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.sql.Timestamp; import java.util.ArrayList; import java.util.List; /** * @author laowo * @version v1.0 * @date 2021/8/27 15:30 * @description TODO **/ @Service public class RoleServiceImpl extends BaseDaoImpl implements RoleService { @Override @DataScope(deptAlias = "d") public Page list(SysDeptVO sysDeptVO, String roleName, String status, String startTime, String endTime, Integer pageSize, Integer pageNo) { String dataScope = (String) sysDeptVO.getParams().get("dataScope"); StringBuilder sb = new StringBuilder(); sb.append("SELECT DISTINCT\n" + "\tr.role_id AS roleId,\n" + "\tr.role_name AS roleName,\n" + "\tr.role_key AS roleKey,\n" + "\tr.role_sort AS roleSort,\n" + "\tr.data_scope AS dataScope ,\n" + "\tr.STATUS as status,\n" + "\tr.del_flag AS delFlag,\n" + "\tr.create_time AS createTime,\n" + "\tr.remark \n" + "FROM\n" + "\tsys_role r\n" + "\tLEFT JOIN sys_user_role ur ON ur.role_id = r.role_id\n" + "\tLEFT JOIN sys_user u ON u.user_id = ur.user_id\n" + "\tLEFT JOIN sys_dept d ON u.dept_id = d.dept_id where r.del_flag = '0' "); if (StringUtils.isNotBlank(status)) { sb.append(" and r.status = '" + startTime + "'"); } if (StringUtils.isNotBlank(roleName)) { sb.append(" and r.role_name like '%" + roleName + "%'"); } if (StringUtils.isNotBlank(startTime)) { sb.append(" and r.create_time >='" + startTime + "'"); } if (StringUtils.isNotBlank(endTime)) { sb.append(" and r.create_time <='" + endTime + "'"); } if (StringUtils.isNotBlank(dataScope)) { sb.append(dataScope); } List totalCount = getSession().createSQLQuery(sb.toString()).list(); Page result = new Page<>(totalCount.size(), pageSize); NativeQuery query = getSession().createSQLQuery(sb.toString()); query.setFirstResult((pageNo - 1) * pageSize); query.setMaxResults(pageSize); List list = query.setResultTransformer(Transformers.aliasToBean(SysRoleVO.class)).list(); result.setPageList(list); return result; } @Override @DataScope(deptAlias = "d") public List querRoleList(SysRoleVO sysRoleVO) { String dataScope = (String) sysRoleVO.getParams().get("dataScope"); StringBuilder sb = new StringBuilder(); sb.append("SELECT DISTINCT\n" + "\tr.role_id AS roleId,\n" + "\tr.role_name AS roleName,\n" + "\tr.role_key AS roleKey,\n" + "\tr.role_sort AS roleSort,\n" + "\tr.data_scope AS dataScope,\n" + "\tr.STATUS AS status,\n" + "\tr.del_flag AS delFlag,\n" + "\tr.create_time AS createTime,\n" + "\tr.remark \n" + "FROM\n" + "\tsys_role r\n" + "\tLEFT JOIN sys_user_role ur ON ur.role_id = r.role_id\n" + "\tLEFT JOIN sys_user u ON u.user_id = ur.user_id\n" + "\tLEFT JOIN sys_dept d ON u.dept_id = d.dept_id WHERE r.del_flag = '0'"); if (StringUtils.isNotBlank(dataScope)) { sb.append(dataScope); } return (List) getSession().createSQLQuery(sb.toString()).setResultTransformer(Transformers.aliasToBean(SysRoleVO.class)).list(); } @Override public SysRoleDTO queryRoleByName(SysRoleVO role) { return (SysRoleDTO) getSession().createQuery("from SysRoleDTO t where t.roleName='" + role.getRoleName() + "'").uniqueResult(); } @Override public SysRoleDTO queryRoleByKey(SysRoleVO role) { return (SysRoleDTO) getSession().createQuery("from SysRoleDTO t where t.roleKey='" + role.getRoleKey() + "'").uniqueResult(); } @Override @Transactional public void addRole(SysRoleVO roleVO) { SysRoleDTO roleDTO = BeanHelp.copyProperties(roleVO, SysRoleDTO.class); roleDTO.setCreateBy(ShiroUtils.getLoginName()); roleDTO.setCreateTime(new Timestamp(System.currentTimeMillis())); getSession().save(roleDTO); Integer roleId = roleDTO.getRoleId(); insertRoleMenu(roleVO, roleId); roleVO.setRoleId(roleId); insertRoleDept(roleVO); } /** * 角色修改 * * @param roleVO */ @Override @Transactional public void edit(SysRoleVO roleVO) { SysRoleDTO roleDTO = (SysRoleDTO) getSession().createQuery("from SysRoleDTO t where t.roleId=" + roleVO.getRoleId() + "").uniqueResult(); if (StringUtils.isNotBlank(roleVO.getRoleKey())) { roleDTO.setRoleKey(roleVO.getRoleKey()); } if (StringUtils.isNotBlank(roleVO.getRemark())) { roleDTO.setRemark(roleVO.getRemark()); } if (StringUtils.isNotBlank(roleVO.getRoleName())) { roleDTO.setRoleKey(roleVO.getRoleKey()); } if (StringUtils.isNotBlank(roleVO.getStatus())) { roleDTO.setStatus(roleVO.getStatus()); } roleDTO.setRoleSort(roleVO.getRoleSort()); roleDTO.setUpdateBy(ShiroUtils.getLoginName()); roleDTO.setUpdateTime(new Timestamp(System.currentTimeMillis())); getSession().saveOrUpdate(roleDTO); delRoleMenuByRoleId(roleVO.getRoleId()); insertRoleMenu(roleVO, roleVO.getRoleId()); //删除角色和部门关联 delRoleDept(roleVO.getRoleId()); insertRoleDept(roleVO); } /** * 删除角色菜单关联 * * @param roleId */ public void delRoleMenuByRoleId(Integer roleId) { getSession().createSQLQuery("delete from sys_role_menu where role_id=" + roleId + "").executeUpdate(); } public void insertRoleMenu(SysRoleVO role, Integer roleId) { if (null != role.getMenuIds() && role.getMenuIds().length != 0) { List list = new ArrayList(); for (Integer menuId : role.getMenuIds()) { SysRoleMenuDTO rm = new SysRoleMenuDTO(); rm.setRoleId(roleId); rm.setMenuId(menuId); getSession().save(rm); getSession().flush(); getSession().clear(); } } } public void insertRoleDept(SysRoleVO role) { // 新增角色与部门(数据权限)管理 if (null != role.getMenuIds() && role.getMenuIds().length != 0) { for (Integer deptId : role.getDeptIds()) { SysRoleDeptDTO rd = new SysRoleDeptDTO(); rd.setRoleId(role.getRoleId()); rd.setDeptId(deptId); getSession().save(rd); getSession().flush(); getSession().clear(); } } } public void delRoleDept(Integer roleId) { getSession().createSQLQuery("delete from sys_role_dept where role_id=" + roleId + "").executeUpdate(); } }