f485d2247f8954a60f9ec65370161d0a4baa792e.svn-base 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. package cn.com.goldenwater.dcproj.service.impl.system;
  2. import cn.com.goldenwater.core.service.AbstractCrudService;
  3. import cn.com.goldenwater.dcproj.dao.BisInspAllRlationPersDao;
  4. import cn.com.goldenwater.dcproj.dao.MenuDao;
  5. import cn.com.goldenwater.dcproj.dao.PrivDao;
  6. import cn.com.goldenwater.dcproj.dto.MenuDto;
  7. import cn.com.goldenwater.dcproj.enums.PrivTypeEnum;
  8. import cn.com.goldenwater.dcproj.enums.SqlExecuteStateEnum;
  9. import cn.com.goldenwater.dcproj.enums.SystemFlagEnum;
  10. import cn.com.goldenwater.dcproj.model.BisInspAllRlationPers;
  11. import cn.com.goldenwater.dcproj.model.Menu;
  12. import cn.com.goldenwater.dcproj.model.Priv;
  13. import cn.com.goldenwater.dcproj.param.GetMenuByUserIdParam;
  14. import cn.com.goldenwater.dcproj.param.InsertMenuParam;
  15. import cn.com.goldenwater.dcproj.param.MenuParam;
  16. import cn.com.goldenwater.dcproj.param.UpdateMenuParam;
  17. import cn.com.goldenwater.dcproj.service.MenuService;
  18. import cn.com.goldenwater.dcproj.utils.RecursiveSort;
  19. import cn.com.goldenwater.id.util.UuidUtil;
  20. import com.github.pagehelper.PageHelper;
  21. import com.github.pagehelper.PageInfo;
  22. import org.apache.commons.lang3.StringUtils;
  23. import org.springframework.beans.factory.annotation.Autowired;
  24. import org.springframework.stereotype.Service;
  25. import org.springframework.transaction.annotation.Transactional;
  26. import java.util.ArrayList;
  27. import java.util.List;
  28. import java.util.Optional;
  29. /**
  30. * @author lune
  31. * @date 2018-2-13
  32. */
  33. @Service
  34. @Transactional(rollbackFor = Exception.class)
  35. public class MenuServiceImpl extends AbstractCrudService<Menu, MenuParam> implements MenuService {
  36. @Autowired
  37. private MenuDao menuDao;
  38. @Autowired
  39. private PrivDao privDao;
  40. @Autowired
  41. private BisInspAllRlationPersDao bisInspAllRlationPersDao;
  42. public MenuServiceImpl(MenuDao menuDao) {
  43. super(menuDao);
  44. this.menuDao = menuDao;
  45. }
  46. @Override
  47. public PageInfo<Menu> getMenuByUserId(GetMenuByUserIdParam p) throws Exception {
  48. BisInspAllRlationPers per = bisInspAllRlationPersDao.get(p.getUserId());
  49. if (per == null) {
  50. throw new Exception("此用户不存在:" + p.getUserId());
  51. }
  52. if (per.getOwnerSystem() == null) {
  53. throw new Exception("用户所属系统不正确:" + per.getOwnerSystem());
  54. }
  55. List<String> systemList = new ArrayList<>();
  56. if (!SystemFlagEnum.DC_ALL.getValue().equals(per.getOwnerSystem())) {
  57. systemList.add(SystemFlagEnum.DC_ALL.getValue());
  58. systemList.add(per.getOwnerSystem());
  59. }
  60. List<Menu> list = menuDao.getMenuByUserId(p.getUserId(), p.getSortlevel(), p.getMenuName(), p.getOwnApp(), systemList);
  61. // 递归 菜单,重新排序
  62. List<Menu> menuList = RecursiveSort.sort(list);
  63. list.removeAll(menuList);
  64. menuList.addAll(list);
  65. // 分页,截取这一段
  66. int index = (p.getPageNum() - 1) * p.getPageSize();
  67. if (index > menuList.size()) {
  68. index = 0;
  69. // index = menuList.size() / index;
  70. }
  71. int endIndex = index + p.getPageSize();
  72. if (endIndex > menuList.size()) {
  73. endIndex = menuList.size();
  74. }
  75. List<Menu> subList = new ArrayList<>();
  76. if (menuList.size() > 0) {
  77. subList = menuList.subList(index, endIndex);
  78. }
  79. PageInfo<Menu> pageInfo = new PageInfo<>(subList);
  80. pageInfo.setTotal(menuList.size());
  81. pageInfo.setPageNum(p.getPageNum());
  82. pageInfo.setPageSize(p.getPageSize());
  83. return pageInfo;
  84. }
  85. @Override
  86. @Transactional
  87. public Menu addMenuAndPriv(InsertMenuParam menuParam) throws Exception {
  88. int result1 = 0, result2 = 0;
  89. String uuid = UuidUtil.uuid(); // 生成uuid
  90. Priv priv = new Priv();
  91. priv.setId(uuid);
  92. priv.setPrivName(menuParam.getMenuName());
  93. priv.setPrivType(PrivTypeEnum.MENU.getValue()); //字典类型
  94. priv.setPrivUri(menuParam.getPrivUri());
  95. priv.setFlagLeaf(menuParam.getFlagLeaf());
  96. priv.setCode(menuParam.getCode());
  97. priv.setOwnerSystem(menuParam.getOwnerSystem());
  98. Menu menu = new Menu();
  99. if (StringUtils.isBlank(menuParam.getParentId()) || "0".equals(menuParam.getParentId())) {
  100. menuParam.setParentId("0");
  101. priv.setParentId("0");
  102. menu.setSortLevel(1L);
  103. } else {
  104. Menu parentMenu = menuDao.get(menuParam.getParentId());
  105. if (parentMenu == null) {
  106. throw new Exception("父菜单不存在:" + menuParam.getParentId());
  107. }
  108. priv.setParentId(parentMenu.getPrivId());
  109. menu.setSortLevel(parentMenu.getSortLevel() + 1);
  110. }
  111. Long maxSeq = privDao.selectMaxSeqByParentId(priv.getParentId());
  112. if (maxSeq == null) {
  113. maxSeq = 0L;
  114. }
  115. priv.setSeq(maxSeq + 1);
  116. menu.setId(uuid);
  117. menu.setParentId(menuParam.getParentId());
  118. menu.setPrivId(uuid);
  119. menu.setHref(menuParam.getHref());
  120. menu.setIcon(StringUtils.isEmpty(menuParam.getIcon()) ? "" : menuParam.getIcon());
  121. menu.setMenuName(menuParam.getMenuName());
  122. menu.setSequence(menuParam.getSequence());
  123. menu.setOwnApp(menuParam.getOwnApp());
  124. result1 = menuDao.insert(menu);
  125. if (result1 == SqlExecuteStateEnum.SUCCESS.getValue()) {
  126. result2 = privDao.insert(priv);
  127. } else {
  128. throw new Exception("插入菜单出错");
  129. }
  130. if (result2 != SqlExecuteStateEnum.SUCCESS.getValue()) {
  131. throw new Exception("插入权限菜单出错");
  132. }
  133. return menu;
  134. }
  135. @Override
  136. @Transactional
  137. public Menu updateWithPriv(UpdateMenuParam p) throws Exception {
  138. int result1 = 0, result2 = 0;
  139. boolean result = false;
  140. Menu m = menuDao.get(p.getId());
  141. Priv priv = privDao.get(m.getPrivId());
  142. if (StringUtils.isNotBlank(p.getParentId()) && !p.getParentId().equals(m.getParentId()) ) {
  143. Menu parentMenu = menuDao.get(p.getParentId());
  144. Optional.ofNullable(parentMenu).map(Menu::getPrivId).ifPresent(priv::setParentId);
  145. }
  146. m.setSequence(p.getSequence());
  147. m.setHref(p.getHref());
  148. m.setIcon(p.getIcon());
  149. m.setMenuName(p.getMenuName());
  150. m.setParentId(p.getParentId());
  151. m.setSortLevel(p.getSortLevel());
  152. m.setOwnApp(p.getOwnApp());
  153. result1 = menuDao.update(m);
  154. if (result1 != SqlExecuteStateEnum.SUCCESS.getValue()) {
  155. throw new Exception("更新菜单出错");
  156. }
  157. priv.setSeq(p.getSequence());
  158. priv.setPrivName(p.getMenuName());
  159. priv.setOwnerSystem(p.getOwnerSystem());
  160. priv.setCode(p.getCode());
  161. priv.setPrivUri(p.getPrivUri());
  162. priv.setFlagLeaf(p.getFlagLeaf());
  163. result2 = privDao.update(priv);
  164. if (result2 != SqlExecuteStateEnum.SUCCESS.getValue()) {
  165. throw new Exception("更新菜单出错");
  166. }
  167. return m;
  168. }
  169. @Override
  170. @Transactional
  171. public void deleteWithPriv(String id) throws Exception {
  172. int result1 = 0, result2 = 0;
  173. Menu m = menuDao.get(id);
  174. Priv priv = privDao.get(m.getPrivId());
  175. result1 = privDao.delete(priv.getId());
  176. if (result1 == SqlExecuteStateEnum.SUCCESS.getValue()) {
  177. result2 = menuDao.delete(id);
  178. }
  179. if (result2 != SqlExecuteStateEnum.SUCCESS.getValue()) {
  180. throw new Exception("删除菜单出错");
  181. }
  182. }
  183. @Override
  184. public List<MenuDto> findPageDto(MenuParam param) {
  185. PageHelper.startPage(param.getPageNum(), param.getPageSize(), false);
  186. List<MenuDto> list = menuDao.findPageDto(param);
  187. return list;
  188. }
  189. @Override
  190. public List<Menu> findPage(MenuParam param) {
  191. PageHelper.startPage(param.getPageNum(), param.getPageSize(), false);
  192. List<Menu> list = menuDao.findPage(param);
  193. return list;
  194. }
  195. @Override
  196. public PageInfo<MenuDto> findPageInfoDto(MenuParam param) {
  197. PageHelper.startPage(param.getPageNum(), param.getPageSize(), true);
  198. List<MenuDto> list = menuDao.findPageDto(param);
  199. PageInfo<MenuDto> pageInfo = new PageInfo(list);
  200. return pageInfo;
  201. }
  202. @Override
  203. public List<MenuDto> findMenuList(MenuParam param) {
  204. return menuDao.findMenuList(param);
  205. }
  206. @Override
  207. public void updateMemuPriv(List<Menu> list, String privId) {
  208. menuDao.clearMemuPriv(privId);
  209. menuDao.updateMemuPriv(list);
  210. }
  211. }