SystemDictionariesServiceImpl.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. package com.care.demo.service.impl;
  2. import cn.hutool.core.collection.CollUtil;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
  5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  6. import com.care.common.exception.BDException;
  7. import com.care.common.vo.PageResVO;
  8. import com.care.demo.entity.RimsDictionaries;
  9. import com.care.demo.mapper.RimsDictionariesMapper;
  10. import com.care.demo.service.SystemDictionariesService;
  11. import com.care.common.util.PageUtil;
  12. import org.apache.commons.lang3.StringUtils;
  13. import org.springframework.stereotype.Service;
  14. import javax.annotation.Resource;
  15. import java.util.*;
  16. /**
  17. * @author nhc
  18. * @version 1.0
  19. * @description 系统设置-字典管理模块-业务逻辑层接口实现类
  20. * @date 2021/02/08/19:41
  21. */
  22. @Service
  23. public class SystemDictionariesServiceImpl implements SystemDictionariesService {
  24. @Resource
  25. private RimsDictionariesMapper rimsDictionariesMapper;
  26. /**
  27. * 无条件分页查询
  28. * 业务逻辑:
  29. * 1、先通过传递过来的页面大小与查询到的总记录数算出总页数;
  30. * 2、根据总页数限制当前页的范围不会越界
  31. * 3、先查询一级字典集合,通过遍历id映射二级字典PID查询出的集合填充进对象
  32. * 4、将补全完整的Page工具类携带所有搜索数据返回
  33. * @param page 分页参数对象
  34. * @return 返回携带数据的分页工具对象z
  35. */
  36. @Override
  37. public PageUtil<RimsDictionaries> getDictionaries(PageResVO page) {
  38. //1、创建一个分页工具对象(然后对分页数据进行整理)
  39. PageUtil<RimsDictionaries> pageUtil = new PageUtil<>();
  40. //2、更新当前页面大小
  41. pageUtil.setPageSize(page.getPageSize());
  42. //3、获取无条件查询总记录数
  43. //因为只对一级记录进行分页,所以要查询的是所有一级记录的总记录数
  44. QueryWrapper<RimsDictionaries> wrapper = new QueryWrapper<>();
  45. //查询条件为 PID = 0 为一级目录
  46. wrapper.lambda()
  47. .eq(RimsDictionaries::getPid, 0);
  48. pageUtil.setTotal(rimsDictionariesMapper.selectCount(wrapper));
  49. //4、更新当前页码(此时页码将不会再发生越界问题)
  50. pageUtil.setCurrent(page.getCurrent());
  51. //一级字典分页集合
  52. List<RimsDictionaries> dictionariesList1 = new ArrayList<>();
  53. //添加查询条件查询 所有未被删除的字典数据
  54. QueryWrapper<RimsDictionaries> dictionariesQueryWrapper = new QueryWrapper<>();
  55. dictionariesQueryWrapper.lambda()
  56. .eq(RimsDictionaries::getPid, 0)
  57. .orderByAsc(RimsDictionaries::getEnable);
  58. Page<RimsDictionaries> dictionariesPage = rimsDictionariesMapper.selectPage(
  59. new Page<>(
  60. pageUtil.getCurrent(), pageUtil.getPageSize()),
  61. dictionariesQueryWrapper);
  62. List<RimsDictionaries> records = dictionariesPage.getRecords();
  63. for (RimsDictionaries rimsDictionaries : records) {
  64. //根据一级字典id获取所有二级字典对象集合
  65. QueryWrapper<RimsDictionaries> wrapper2 = new QueryWrapper<>();
  66. wrapper2.lambda()
  67. .eq(RimsDictionaries::getPid, rimsDictionaries.getId())
  68. .orderByAsc(RimsDictionaries::getEnable);
  69. List<RimsDictionaries> rimsDictionariesList2 =
  70. rimsDictionariesMapper.selectList(wrapper2);
  71. //将二级字典对象set进属性
  72. rimsDictionaries.setRimsDictionariesList(rimsDictionariesList2);
  73. //将一级分页对象set进一级字典分页对象集合
  74. dictionariesList1.add(rimsDictionaries);
  75. }
  76. pageUtil.setListT(dictionariesList1);
  77. return pageUtil;
  78. }
  79. /**
  80. * 多条件分页查询
  81. * @param rimsDictionaries 字典对象用来承载搜索条件
  82. * @param page 分页对象
  83. * @return 符合搜索条件的字典集合
  84. */
  85. @Override
  86. public PageUtil<RimsDictionaries> getDictionariesByPage(RimsDictionaries rimsDictionaries, PageResVO page) {
  87. //1、创建一个分页工具对象(然后对分页数据进行整理)
  88. PageUtil<RimsDictionaries> pageUtil = new PageUtil<>();
  89. //2、更新当前页面大小
  90. pageUtil.setPageSize(page.getPageSize());
  91. //3、获取多条件查询总记录数
  92. pageUtil.setTotal(rimsDictionariesMapper.selectDictionariesByCount(rimsDictionaries));
  93. //4、更新当前页码(此时页码将不会再发生越界问题)
  94. pageUtil.setCurrent(page.getCurrent());
  95. List<RimsDictionaries> dictionariesList = rimsDictionariesMapper.selectDictionariesByPage(rimsDictionaries, pageUtil);
  96. pageUtil.setListT(dictionariesList);
  97. return pageUtil;
  98. }
  99. /**
  100. * 字段查重
  101. * @param rimsDictionaries 收集需要查重的字段参数
  102. * @return 返回0表示字段没有重复,非零表示有重复
  103. */
  104. @Override
  105. public Integer getDictionaRepetitionCount(RimsDictionaries rimsDictionaries) {
  106. return rimsDictionariesMapper.selectDictionaRepetitionCount(rimsDictionaries);
  107. }
  108. /**
  109. * 添加记录
  110. * @param rimsDictionaries 收集需要添加的字段参数
  111. * @return 添加成功返回 1
  112. */
  113. @Override
  114. public Integer addDictionaries(RimsDictionaries rimsDictionaries) {
  115. return rimsDictionariesMapper.insert(rimsDictionaries);
  116. }
  117. /**
  118. * 修改记录
  119. * @param rimsDictionaries 收集需要添加的字段参数
  120. * @return 修改成功返回 1
  121. */
  122. @Override
  123. public Integer updateDictionaries(RimsDictionaries rimsDictionaries) {
  124. return rimsDictionariesMapper.updateById(rimsDictionaries);
  125. }
  126. /**
  127. * 删除记录
  128. * @param id 删除记录的id(有可能是父级id)
  129. * @return 删除成功返回 1
  130. */
  131. @Override
  132. public Integer deleteDictionariesById(Long id) {
  133. //先判定是否为父级id
  134. RimsDictionaries rimsDictionaries = rimsDictionariesMapper.selectById(id);
  135. if(rimsDictionaries == null){
  136. return 0;
  137. }
  138. //若为父节点,则先删除所有子节点
  139. if(0 == rimsDictionaries.getPid()){
  140. QueryWrapper<RimsDictionaries> wrapper = new QueryWrapper<>();
  141. wrapper.lambda().eq(RimsDictionaries::getPid,id);
  142. rimsDictionariesMapper.delete(wrapper);
  143. }
  144. //最后删除当前节点
  145. return rimsDictionariesMapper.deleteById(id);
  146. }
  147. /**
  148. * 启用停用记录
  149. * @param rimsDictionaries 字典对象里面包含要修改数据的id和启停值
  150. * @return 修改成功返回 1
  151. */
  152. @Override
  153. public Integer updateDictionariesEnableById(RimsDictionaries rimsDictionaries) {
  154. //变更参数承载对象
  155. RimsDictionaries rd = new RimsDictionaries();
  156. //根据传入的启用停用值取反
  157. rd.setEnable(rimsDictionaries.getEnable() == 0 ? 1 : 0);
  158. //若修改的记录为一级目录,则先修改全部的子目录
  159. if(rimsDictionaries.getPid() == 0){
  160. //构建修改条件
  161. UpdateWrapper<RimsDictionaries> wrapper = new UpdateWrapper<>();
  162. wrapper.lambda().eq(RimsDictionaries::getPid,rimsDictionaries.getId());
  163. rimsDictionariesMapper.update(rd, wrapper);
  164. }
  165. //最后修改当前节点
  166. rd.setId(rimsDictionaries.getId());
  167. return rimsDictionariesMapper.updateById(rd);
  168. }
  169. /**
  170. * 根据编码表dicCode,查询子节点列表
  171. *
  172. * @param dicCode
  173. * @return
  174. */
  175. @Override
  176. public List<RimsDictionaries> listDictionariesByDicCode(String dicCode) {
  177. if (StringUtils.isEmpty(dicCode)) {
  178. throw new BDException("请指定要查询的父节点编码");
  179. }
  180. QueryWrapper<RimsDictionaries> queryWrapper = new QueryWrapper<>();
  181. //查询未删除、启用的字典
  182. queryWrapper.lambda().eq(RimsDictionaries::getDicCode, dicCode);
  183. RimsDictionaries rimsDictionaries = rimsDictionariesMapper.selectOne(queryWrapper);
  184. List<RimsDictionaries> rimsDictionariesList =null;
  185. if(rimsDictionaries!=null){
  186. QueryWrapper<RimsDictionaries> wrapper = new QueryWrapper<>();
  187. wrapper.lambda().eq(RimsDictionaries::getPid, rimsDictionaries.getId())
  188. .eq(RimsDictionaries::getDeleted,0)
  189. .eq(RimsDictionaries::getEnable,0)
  190. .orderByAsc(RimsDictionaries::getDicSort);
  191. rimsDictionariesList = rimsDictionariesMapper.selectList(wrapper);
  192. }
  193. return rimsDictionariesList;
  194. }
  195. /**
  196. * 根据编码表父节点dicCode,节点dicCode查询节点名称
  197. * @param pDicCode
  198. * @param dicCode
  199. * @return
  200. */
  201. @Override
  202. public String getDictionariesNameByDicCode(String pDicCode,String dicCode) {
  203. if (StringUtils.isEmpty(pDicCode)&&StringUtils.isEmpty(dicCode)) {
  204. throw new BDException("请指定要查询的节点编码");
  205. }
  206. QueryWrapper<RimsDictionaries> queryWrapper = new QueryWrapper<>();
  207. queryWrapper.lambda().eq(RimsDictionaries::getDicCode, pDicCode);
  208. RimsDictionaries pRimsDictionaries = rimsDictionariesMapper.selectOne(queryWrapper);
  209. String dictionariesName = "";
  210. if(pRimsDictionaries!=null){
  211. QueryWrapper<RimsDictionaries> wrapper = new QueryWrapper<>();
  212. wrapper.lambda().eq(RimsDictionaries::getPid, pRimsDictionaries.getId());
  213. wrapper.lambda().eq(RimsDictionaries::getDicCode, dicCode);
  214. RimsDictionaries rimsDictionaries = rimsDictionariesMapper.selectOne(wrapper);
  215. if(rimsDictionaries!=null){
  216. dictionariesName = rimsDictionaries.getDictionariesName();
  217. }
  218. }
  219. return dictionariesName;
  220. }
  221. /**
  222. * 以名称为key ,code 为值返回map
  223. * @param pDicCode
  224. * @return
  225. */
  226. @Override
  227. public Map<String, String> getReverseDicMapByDicCode(String pDicCode) {
  228. if(StringUtils.isBlank(pDicCode)){
  229. return Collections.emptyMap();
  230. }
  231. List<RimsDictionaries> dics = listDictionariesByDicCode(pDicCode);
  232. if(CollUtil.isEmpty(dics)){
  233. return Collections.emptyMap();
  234. }
  235. Map<String,String> resultMap = new HashMap<>(16);
  236. dics.forEach(dic ->resultMap.put(dic.getDictionariesName(),dic.getDicCode()));
  237. return resultMap;
  238. }
  239. }