ColumnNavigationBarServiceImpl.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. package com.ruoyi.system.service.impl;
  2. import java.util.ArrayList;
  3. import java.util.Iterator;
  4. import java.util.List;
  5. import java.util.stream.Collectors;
  6. import com.ruoyi.common.constant.UserConstants;
  7. import com.ruoyi.common.core.domain.TreeSelect;
  8. import com.ruoyi.common.core.domain.entity.ColumnNews;
  9. import com.ruoyi.common.core.domain.entity.SysDept;
  10. import com.ruoyi.common.core.text.Convert;
  11. import com.ruoyi.common.exception.ServiceException;
  12. import com.ruoyi.common.utils.DateUtils;
  13. import com.ruoyi.common.utils.StringUtils;
  14. import com.ruoyi.common.core.domain.entity.ColumnNavigationBar;
  15. import com.ruoyi.system.mapper.ColumnNewsMapper;
  16. import com.ruoyi.system.service.IColumnNavigationBarService;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.stereotype.Service;
  19. import com.ruoyi.system.mapper.ColumnNavigationBarMapper;
  20. /**
  21. * 栏目导航Service业务层处理
  22. *
  23. * @author boman
  24. * @date 2021-12-24
  25. */
  26. @Service
  27. public class ColumnNavigationBarServiceImpl implements IColumnNavigationBarService
  28. {
  29. @Autowired
  30. private ColumnNavigationBarMapper columnNavigationBarMapper;
  31. @Autowired
  32. private ColumnNewsMapper columnNewsMapper;
  33. /**
  34. * 查询栏目导航
  35. *
  36. * @param columnId 栏目导航主键
  37. * @return 栏目导航
  38. */
  39. @Override
  40. public ColumnNavigationBar selectColumnNavigationBarByColumnId(Long columnId)
  41. {
  42. return columnNavigationBarMapper.selectColumnNavigationBarByColumnId(columnId);
  43. }
  44. /**
  45. * 查询栏目导航列表
  46. *
  47. * @param columnNavigationBar 栏目导航
  48. * @return 栏目导航
  49. */
  50. @Override
  51. public List<ColumnNavigationBar> selectColumnNavigationBarList(ColumnNavigationBar columnNavigationBar)
  52. {
  53. return columnNavigationBarMapper.selectColumnNavigationBarList(columnNavigationBar);
  54. }
  55. /**
  56. * 门户获取各个部分首页标题
  57. * @param columnNavigationBar
  58. * @return
  59. */
  60. @Override
  61. public List<ColumnNavigationBar> selectColumnNavigationBarListMenHu(ColumnNavigationBar columnNavigationBar) {
  62. List<ColumnNavigationBar> columnNavigationBars = columnNavigationBarMapper.selectColumnNavigationBarListMenHu(columnNavigationBar);
  63. if (columnNavigationBars.size() > 0){
  64. for (ColumnNavigationBar navigationBar : columnNavigationBars) {
  65. Long columnId = navigationBar.getColumnId();
  66. //去查询文章
  67. List<ColumnNews> columnNews = columnNewsMapper.selectColumnNewsListMenHuByColumnId(columnId);
  68. navigationBar.setColumnNewsList(columnNews);
  69. }
  70. }
  71. return columnNavigationBars;
  72. }
  73. /**
  74. * 新增栏目导航
  75. *
  76. * @param columnNavigationBar 栏目导航
  77. * @return 结果
  78. */
  79. @Override
  80. public int insertColumnNavigationBar(ColumnNavigationBar columnNavigationBar)
  81. {
  82. Long parentId = columnNavigationBar.getParentId();
  83. if (parentId != null){
  84. ColumnNavigationBar info = columnNavigationBarMapper.selectColumnNavigationBarByColumnId(columnNavigationBar.getParentId());
  85. // 如果父节点不为正常状态,则不允许新增子节点
  86. if (!UserConstants.DEPT_NORMAL.equals(info.getStatus()))
  87. {
  88. throw new ServiceException("上级栏目导航停用,不允许新增");
  89. }
  90. columnNavigationBar.setAncestors(info.getAncestors() + "," + columnNavigationBar.getParentId());
  91. }else {
  92. columnNavigationBar.setParentId(0L);
  93. columnNavigationBar.setAncestors(String.valueOf(columnNavigationBar.getParentId()));
  94. }
  95. columnNavigationBar.setCreateTime(DateUtils.getNowDate());
  96. return columnNavigationBarMapper.insertColumnNavigationBar(columnNavigationBar);
  97. }
  98. /**
  99. * 修改栏目导航
  100. *
  101. * @param columnNavigationBar 栏目导航
  102. * @return 结果
  103. */
  104. @Override
  105. public int updateColumnNavigationBar(ColumnNavigationBar columnNavigationBar)
  106. {
  107. Long parentId = columnNavigationBar.getParentId();
  108. if (parentId == null){
  109. columnNavigationBar.setParentId(0L);
  110. }
  111. ColumnNavigationBar newParentColumn = columnNavigationBarMapper.selectColumnNavigationBarByColumnId(columnNavigationBar.getParentId());
  112. ColumnNavigationBar oldColumnNavigationBar = columnNavigationBarMapper.selectColumnNavigationBarByColumnId(columnNavigationBar.getColumnId());
  113. if (StringUtils.isNotNull(newParentColumn) && StringUtils.isNotNull(oldColumnNavigationBar))
  114. {
  115. String newAncestors = newParentColumn.getAncestors() + "," + newParentColumn.getColumnId();
  116. String oldAncestors = oldColumnNavigationBar.getAncestors();
  117. columnNavigationBar.setAncestors(newAncestors);
  118. updateDeptChildren(columnNavigationBar.getColumnId(), newAncestors, oldAncestors);
  119. }
  120. int result = columnNavigationBarMapper.updateColumnNavigationBar(columnNavigationBar);
  121. if (UserConstants.DEPT_NORMAL.equals(columnNavigationBar.getStatus()) && StringUtils.isNotEmpty(columnNavigationBar.getAncestors())
  122. && !StringUtils.equals("0", columnNavigationBar.getAncestors()))
  123. {
  124. // 如果该部门是启用状态,则启用该部门的所有上级部门
  125. updateParentColumnStatusNormal(columnNavigationBar);
  126. }
  127. columnNavigationBar.setUpdateTime(DateUtils.getNowDate());
  128. return columnNavigationBarMapper.updateColumnNavigationBar(columnNavigationBar);
  129. }
  130. /**
  131. * 修改子元素关系
  132. *
  133. * @param deptId 被修改的部门ID
  134. * @param newAncestors 新的父ID集合
  135. * @param oldAncestors 旧的父ID集合
  136. */
  137. public void updateDeptChildren(Long deptId, String newAncestors, String oldAncestors)
  138. {
  139. List<ColumnNavigationBar> children = columnNavigationBarMapper.selectChildrenColumnById(deptId);
  140. for (ColumnNavigationBar child : children)
  141. {
  142. child.setAncestors(child.getAncestors().replaceFirst(oldAncestors, newAncestors));
  143. }
  144. if (children.size() > 0)
  145. {
  146. columnNavigationBarMapper.updateColumnChildren(children);
  147. }
  148. }
  149. /**
  150. * 批量删除栏目导航
  151. *
  152. * @param columnIds 需要删除的栏目导航主键
  153. * @return 结果
  154. */
  155. @Override
  156. public int deleteColumnNavigationBarByColumnIds(Long[] columnIds)
  157. {
  158. return columnNavigationBarMapper.deleteColumnNavigationBarByColumnIds(columnIds);
  159. }
  160. /**
  161. * 删除栏目导航信息
  162. *
  163. * @param columnId 栏目导航主键
  164. * @return 结果
  165. */
  166. @Override
  167. public int deleteColumnNavigationBarByColumnId(Long columnId)
  168. {
  169. return columnNavigationBarMapper.deleteColumnNavigationBarByColumnId(columnId);
  170. }
  171. /**
  172. * 构建前端所需要下拉树结构
  173. * @param columnNavigationBars 栏目导航列表
  174. * @return
  175. */
  176. @Override
  177. public List<TreeSelect> buildColumnTreeSelect(List<ColumnNavigationBar> columnNavigationBars) {
  178. List<ColumnNavigationBar> columnTrees = buildColumnTree(columnNavigationBars);
  179. return columnTrees.stream().map(TreeSelect::new).collect(Collectors.toList());
  180. }
  181. /**
  182. * 构建前端所需要树结构
  183. *
  184. * @param columnNavigationBars 部门列表
  185. * @return 树结构列表
  186. */
  187. @Override
  188. public List<ColumnNavigationBar> buildColumnTree(List<ColumnNavigationBar> columnNavigationBars)
  189. {
  190. List<ColumnNavigationBar> returnList = new ArrayList<ColumnNavigationBar>();
  191. List<Long> tempList = new ArrayList<Long>();
  192. for (ColumnNavigationBar columnNavigationBar : columnNavigationBars)
  193. {
  194. tempList.add(columnNavigationBar.getColumnId());
  195. }
  196. for (Iterator<ColumnNavigationBar> iterator = columnNavigationBars.iterator(); iterator.hasNext();)
  197. {
  198. ColumnNavigationBar columnNavigationBar = (ColumnNavigationBar) iterator.next();
  199. // 如果是顶级节点, 遍历该父节点的所有子节点
  200. if (!tempList.contains(columnNavigationBar.getParentId()))
  201. {
  202. recursionFn(columnNavigationBars, columnNavigationBar);
  203. returnList.add(columnNavigationBar);
  204. }
  205. }
  206. if (returnList.isEmpty())
  207. {
  208. returnList = columnNavigationBars;
  209. }
  210. return returnList;
  211. }
  212. /**
  213. * 校验栏目导航名称是否唯一
  214. * @param columnNavigationBar 栏目导航信息
  215. * @return
  216. */
  217. @Override
  218. public String checkColumnNameUnique(ColumnNavigationBar columnNavigationBar) {
  219. Long columnId = StringUtils.isNull(columnNavigationBar.getColumnId()) ? -1L : columnNavigationBar.getColumnId();
  220. ColumnNavigationBar info = columnNavigationBarMapper.checkColumnNameUnique(columnNavigationBar.getColumnName(), columnNavigationBar.getParentId());
  221. if (StringUtils.isNotNull(info) && info.getColumnId().longValue() != columnId.longValue())
  222. {
  223. return UserConstants.NOT_UNIQUE;
  224. }
  225. return UserConstants.UNIQUE;
  226. }
  227. /**
  228. * 根据ID查询所有子栏目导航(正常状态)
  229. * @param columnId 栏目导航ID
  230. * @return
  231. */
  232. @Override
  233. public int selectNormalChildrenColumnById(Long columnId) {
  234. return columnNavigationBarMapper.selectNormalChildrenColumnById(columnId);
  235. }
  236. /**
  237. * @param columnId 栏目导航ID
  238. * @return
  239. */
  240. @Override
  241. public boolean hasChildByColumnId(Long columnId) {
  242. int result = columnNavigationBarMapper.hasChildByColumnId(columnId);
  243. return result > 0;
  244. }
  245. /**
  246. * 递归列表
  247. */
  248. private void recursionFn(List<ColumnNavigationBar> list, ColumnNavigationBar t)
  249. {
  250. // 得到子节点列表
  251. List<ColumnNavigationBar> childList = getChildList(list, t);
  252. t.setChildren(childList);
  253. for (ColumnNavigationBar tChild : childList)
  254. {
  255. if (hasChild(list, tChild))
  256. {
  257. recursionFn(list, tChild);
  258. }
  259. }
  260. }
  261. /**
  262. * 得到子节点列表
  263. */
  264. private List<ColumnNavigationBar> getChildList(List<ColumnNavigationBar> list, ColumnNavigationBar t)
  265. {
  266. List<ColumnNavigationBar> tlist = new ArrayList<ColumnNavigationBar>();
  267. Iterator<ColumnNavigationBar> it = list.iterator();
  268. while (it.hasNext())
  269. {
  270. ColumnNavigationBar n = (ColumnNavigationBar) it.next();
  271. if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getColumnId().longValue())
  272. {
  273. tlist.add(n);
  274. }
  275. }
  276. return tlist;
  277. }
  278. /**
  279. * 判断是否有子节点
  280. */
  281. private boolean hasChild(List<ColumnNavigationBar> list, ColumnNavigationBar t)
  282. {
  283. return getChildList(list, t).size() > 0;
  284. }
  285. /**
  286. * 修改该栏目导航的父级栏目导航状态
  287. *
  288. * @param columnNavigationBar 当前栏目导航
  289. */
  290. private void updateParentColumnStatusNormal(ColumnNavigationBar columnNavigationBar)
  291. {
  292. String ancestors = columnNavigationBar.getAncestors();
  293. Long[] columnIds = Convert.toLongArray(ancestors);
  294. columnNavigationBarMapper.updateColumnStatusNormal(columnIds);
  295. }
  296. }