package cn.com.goldenwater.dcproj.service.impl.system; import cn.com.goldenwater.core.service.AbstractCrudService; import cn.com.goldenwater.dcproj.dao.BisInspAllRlationPersDao; import cn.com.goldenwater.dcproj.dao.MenuDao; import cn.com.goldenwater.dcproj.dao.PrivDao; import cn.com.goldenwater.dcproj.dto.MenuDto; import cn.com.goldenwater.dcproj.enums.PrivTypeEnum; import cn.com.goldenwater.dcproj.enums.SqlExecuteStateEnum; import cn.com.goldenwater.dcproj.enums.SystemFlagEnum; import cn.com.goldenwater.dcproj.model.BisInspAllRlationPers; import cn.com.goldenwater.dcproj.model.Menu; import cn.com.goldenwater.dcproj.model.Priv; import cn.com.goldenwater.dcproj.param.GetMenuByUserIdParam; import cn.com.goldenwater.dcproj.param.InsertMenuParam; import cn.com.goldenwater.dcproj.param.MenuParam; import cn.com.goldenwater.dcproj.param.UpdateMenuParam; import cn.com.goldenwater.dcproj.service.MenuService; import cn.com.goldenwater.dcproj.utils.RecursiveSort; import cn.com.goldenwater.id.util.UuidUtil; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; import java.util.Optional; /** * @author lune * @date 2018-2-13 */ @Service @Transactional(rollbackFor = Exception.class) public class MenuServiceImpl extends AbstractCrudService implements MenuService { @Autowired private MenuDao menuDao; @Autowired private PrivDao privDao; @Autowired private BisInspAllRlationPersDao bisInspAllRlationPersDao; public MenuServiceImpl(MenuDao menuDao) { super(menuDao); this.menuDao = menuDao; } @Override public PageInfo getMenuByUserId(GetMenuByUserIdParam p) throws Exception { BisInspAllRlationPers per = bisInspAllRlationPersDao.get(p.getUserId()); if (per == null) { throw new Exception("此用户不存在:" + p.getUserId()); } if (per.getOwnerSystem() == null) { throw new Exception("用户所属系统不正确:" + per.getOwnerSystem()); } List systemList = new ArrayList<>(); if (!SystemFlagEnum.DC_ALL.getValue().equals(per.getOwnerSystem())) { systemList.add(SystemFlagEnum.DC_ALL.getValue()); systemList.add(per.getOwnerSystem()); } List list = menuDao.getMenuByUserId(p.getUserId(), p.getSortlevel(), p.getMenuName(), p.getOwnApp(), systemList); // 递归 菜单,重新排序 List menuList = RecursiveSort.sort(list); list.removeAll(menuList); menuList.addAll(list); // 分页,截取这一段 int index = (p.getPageNum() - 1) * p.getPageSize(); if (index > menuList.size()) { index = 0; // index = menuList.size() / index; } int endIndex = index + p.getPageSize(); if (endIndex > menuList.size()) { endIndex = menuList.size(); } List subList = new ArrayList<>(); if (menuList.size() > 0) { subList = menuList.subList(index, endIndex); } PageInfo pageInfo = new PageInfo<>(subList); pageInfo.setTotal(menuList.size()); pageInfo.setPageNum(p.getPageNum()); pageInfo.setPageSize(p.getPageSize()); return pageInfo; } @Override @Transactional public Menu addMenuAndPriv(InsertMenuParam menuParam) throws Exception { int result1 = 0, result2 = 0; String uuid = UuidUtil.uuid(); // 生成uuid Priv priv = new Priv(); priv.setId(uuid); priv.setPrivName(menuParam.getMenuName()); priv.setPrivType(PrivTypeEnum.MENU.getValue()); //字典类型 priv.setPrivUri(menuParam.getPrivUri()); priv.setFlagLeaf(menuParam.getFlagLeaf()); priv.setCode(menuParam.getCode()); priv.setOwnerSystem(menuParam.getOwnerSystem()); Menu menu = new Menu(); if (StringUtils.isBlank(menuParam.getParentId()) || "0".equals(menuParam.getParentId())) { menuParam.setParentId("0"); priv.setParentId("0"); menu.setSortLevel(1L); } else { Menu parentMenu = menuDao.get(menuParam.getParentId()); if (parentMenu == null) { throw new Exception("父菜单不存在:" + menuParam.getParentId()); } priv.setParentId(parentMenu.getPrivId()); menu.setSortLevel(parentMenu.getSortLevel() + 1); } Long maxSeq = privDao.selectMaxSeqByParentId(priv.getParentId()); if (maxSeq == null) { maxSeq = 0L; } priv.setSeq(maxSeq + 1); menu.setId(uuid); menu.setParentId(menuParam.getParentId()); menu.setPrivId(uuid); menu.setHref(menuParam.getHref()); menu.setIcon(StringUtils.isEmpty(menuParam.getIcon()) ? "" : menuParam.getIcon()); menu.setMenuName(menuParam.getMenuName()); menu.setSequence(menuParam.getSequence()); menu.setOwnApp(menuParam.getOwnApp()); result1 = menuDao.insert(menu); if (result1 == SqlExecuteStateEnum.SUCCESS.getValue()) { result2 = privDao.insert(priv); } else { throw new Exception("插入菜单出错"); } if (result2 != SqlExecuteStateEnum.SUCCESS.getValue()) { throw new Exception("插入权限菜单出错"); } return menu; } @Override @Transactional public Menu updateWithPriv(UpdateMenuParam p) throws Exception { int result1 = 0, result2 = 0; boolean result = false; Menu m = menuDao.get(p.getId()); Priv priv = privDao.get(m.getPrivId()); if (StringUtils.isNotBlank(p.getParentId()) && !p.getParentId().equals(m.getParentId()) ) { Menu parentMenu = menuDao.get(p.getParentId()); Optional.ofNullable(parentMenu).map(Menu::getPrivId).ifPresent(priv::setParentId); } m.setSequence(p.getSequence()); m.setHref(p.getHref()); m.setIcon(p.getIcon()); m.setMenuName(p.getMenuName()); m.setParentId(p.getParentId()); m.setSortLevel(p.getSortLevel()); m.setOwnApp(p.getOwnApp()); result1 = menuDao.update(m); if (result1 != SqlExecuteStateEnum.SUCCESS.getValue()) { throw new Exception("更新菜单出错"); } priv.setSeq(p.getSequence()); priv.setPrivName(p.getMenuName()); priv.setOwnerSystem(p.getOwnerSystem()); priv.setCode(p.getCode()); priv.setPrivUri(p.getPrivUri()); priv.setFlagLeaf(p.getFlagLeaf()); result2 = privDao.update(priv); if (result2 != SqlExecuteStateEnum.SUCCESS.getValue()) { throw new Exception("更新菜单出错"); } return m; } @Override @Transactional public void deleteWithPriv(String id) throws Exception { int result1 = 0, result2 = 0; Menu m = menuDao.get(id); Priv priv = privDao.get(m.getPrivId()); result1 = privDao.delete(priv.getId()); if (result1 == SqlExecuteStateEnum.SUCCESS.getValue()) { result2 = menuDao.delete(id); } if (result2 != SqlExecuteStateEnum.SUCCESS.getValue()) { throw new Exception("删除菜单出错"); } } @Override public List findPageDto(MenuParam param) { PageHelper.startPage(param.getPageNum(), param.getPageSize(), false); List list = menuDao.findPageDto(param); return list; } @Override public List findPage(MenuParam param) { PageHelper.startPage(param.getPageNum(), param.getPageSize(), false); List list = menuDao.findPage(param); return list; } @Override public PageInfo findPageInfoDto(MenuParam param) { PageHelper.startPage(param.getPageNum(), param.getPageSize(), true); List list = menuDao.findPageDto(param); PageInfo pageInfo = new PageInfo(list); return pageInfo; } @Override public List findMenuList(MenuParam param) { return menuDao.findMenuList(param); } @Override public void updateMemuPriv(List list, String privId) { menuDao.clearMemuPriv(privId); menuDao.updateMemuPriv(list); } }