package com.cyksj.service.mange.cms; import cn.dev33.satoken.annotation.SaCheckLogin; import cn.hutool.core.util.StrUtil; import org.elsa.mxx.api.controller.cms.AbstractCmsRole; import org.elsa.mxx.api.request.CmsRoleReq; import org.elsa.mxx.api.response.latest.Callback; import org.elsa.mxx.api.response.latest.ListOut; import org.elsa.mxx.common.exception.NoteException; import org.elsa.mxx.core.entity.CmsRole; import org.elsa.mxx.core.entity.CmsRoleMenu; import org.elsa.mxx.core.entity.CmsUser; import org.springframework.beans.BeanUtils; import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import java.util.Arrays; import java.util.List; /* *项目名: yicang-admin *文件名: AbstractCmsRoleService *创建者: JavaZou *创建时间:2022/9/30 16:11 */ @Service public class AbstractCmsRoleService extends AbstractCmsRole { @Override public Callback addRole(@RequestBody CmsRoleReq cmsRoleReq) { try { if (StrUtil.isEmpty(cmsRoleReq.getRoleName())) { throw new NoteException("必填项不能为空"); } if (StrUtil.isEmpty(cmsRoleReq.getMenuIds())) { throw new NoteException("请选择对应的菜单"); } CmsRole cmsRole = new CmsRole(); BeanUtils.copyProperties(cmsRoleReq, cmsRole); super.baseDao2.save(cmsRole); cmsRoleReq.setId(cmsRole.getId()); if (StrUtil.isNotEmpty(cmsRoleReq.getMenuIds())) { saveRoleMenuRelation(cmsRoleReq); } } catch (DuplicateKeyException keyEx) { throw new NoteException("角色名重复"); } return Callback.success().setMsg("新增角色成功"); } @Override public Callback putRole(@RequestBody CmsRoleReq cmsRoleReq) throws Exception { if (cmsRoleReq.getId() == null || cmsRoleReq.getId() < 0) { throw new NoteException("角色不存在"); } if (StrUtil.isEmpty(cmsRoleReq.getMenuIds())) { throw new NoteException("请选择对应的菜单"); } CmsRole cmsRole = super.baseDao2.selectOneById(CmsRole.class, cmsRoleReq.getId()); Boolean isFlag = false; if (StrUtil.isNotBlank(cmsRoleReq.getRoleName())) { cmsRole.setRoleName(cmsRoleReq.getRoleName()); isFlag = true; } if (StrUtil.isNotBlank(cmsRoleReq.getRemark())) { cmsRole.setRemark(cmsRoleReq.getRemark()); isFlag = true; } if (isFlag) { super.baseDao2.save(cmsRole); } cmsRoleMapper.deleteMenuRoleRelation(cmsRoleReq.getId()); if (StrUtil.isNotBlank(cmsRoleReq.getMenuIds())) { this.saveRoleMenuRelation(cmsRoleReq); } //查出所关联该角色的所有用户 List cmsUserList = cmsRoleMapper.getAllCmsUserByRoleId(cmsRoleReq.getId()); if (cmsUserList != null) { for (CmsUser cmsUser : cmsUserList) { //更新缓存 cmsUserManager.loadUserRedisCache(cmsUser); } } return Callback.success().setMsg("更新角色成功"); } @Override public Callback delRoleById(@PathVariable("id") Integer id) { if (id == null || id < 0) { throw new NoteException("角色不存在"); } List cmsUserList = cmsRoleMapper.getAllCmsUserByRoleId(id); if (null != cmsUserList && !cmsUserList.isEmpty()) { throw new NoteException("请先删除该角色关联下的用户"); } cmsRoleMapper.deleteMenuRoleRelation(id); super.baseDao2.deleteById(CmsRole.class, id); return Callback.success().setMsg("删除角色成功"); } @Override public Callback> getRoleList(@RequestParam(required = false, defaultValue = "1") Integer start, @RequestParam(required = false, defaultValue = "5") Integer limit) { List list = cmsRoleMapper.getCmsRoleList((start - 1) * limit, limit); Integer size = cmsRoleMapper.countCmsRole(); return Callback.>success().setData(ListOut.create().setList(list).setTotal(size)); } @Override @SaCheckLogin public Callback> getMenuByRoleId(String roleId) { if (StrUtil.isEmpty(roleId)) { throw new NoteException("角色不存在"); } //目前是单个角色 List menus = cmsRoleMapper.getAllMenusByRoleIds(roleId.split(",")); return Callback.>success().setData(menus); } @Override @SaCheckLogin public Callback getDetailByRoleId(@PathVariable("roleId") Integer roleId) { return Callback.success().setData(baseDao2.selectOneById(CmsRole.class, roleId)); } private void saveRoleMenuRelation(CmsRoleReq cmsRoleReq) { Arrays.stream(cmsRoleReq.getMenuIds().split(",")).forEach(menuId -> { super.baseDao2.save(new CmsRoleMenu(cmsRoleReq.getId(), Integer.valueOf(menuId))); }); } }