c9bca0483b6b4fa8890cf8d3c85ec77ba9453f3c.svn-base 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. package ${bussiPackage}.${entityPackage}.service.impl;
  2. import org.jeecg.common.exception.JeecgBootException;
  3. import org.jeecg.common.util.oConvertUtils;
  4. import ${bussiPackage}.${entityPackage}.entity.${entityName};
  5. import ${bussiPackage}.${entityPackage}.mapper.${entityName}Mapper;
  6. import ${bussiPackage}.${entityPackage}.service.I${entityName}Service;
  7. import org.springframework.stereotype.Service;
  8. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  9. import org.springframework.transaction.annotation.Transactional;
  10. import java.util.ArrayList;
  11. import java.util.Arrays;
  12. import java.util.List;
  13. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  14. <#assign pidFieldName = "">
  15. <#assign hasChildrenField = "">
  16. <#list originalColumns as po>
  17. <#if po.fieldDbName == tableVo.extendParams.pidField>
  18. <#assign pidFieldName = po.fieldName>
  19. </#if>
  20. <#if po.fieldDbName == tableVo.extendParams.hasChildren>
  21. <#assign hasChildrenField = po.fieldName>
  22. </#if>
  23. </#list>
  24. /**
  25. * @Description: ${tableVo.ftlDescription}
  26. * @Author: jeecg-boot
  27. * @Date: ${.now?string["yyyy-MM-dd"]}
  28. * @Version: V1.0
  29. */
  30. @Service
  31. public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, ${entityName}> implements I${entityName}Service {
  32. @Override
  33. public void add${entityName}(${entityName} ${entityName?uncap_first}) {
  34. //新增时设置hasChild为0
  35. ${entityName?uncap_first}.set${hasChildrenField?cap_first}(I${entityName}Service.NOCHILD);
  36. if(oConvertUtils.isEmpty(${entityName?uncap_first}.get${pidFieldName?cap_first}())){
  37. ${entityName?uncap_first}.set${pidFieldName?cap_first}(I${entityName}Service.ROOT_PID_VALUE);
  38. }else{
  39. //如果当前节点父ID不为空 则设置父节点的hasChildren 为1
  40. ${entityName} parent = baseMapper.selectById(${entityName?uncap_first}.get${pidFieldName?cap_first}());
  41. if(parent!=null && !"1".equals(parent.get${hasChildrenField?cap_first}())){
  42. parent.set${hasChildrenField?cap_first}("1");
  43. baseMapper.updateById(parent);
  44. }
  45. }
  46. baseMapper.insert(${entityName?uncap_first});
  47. }
  48. @Override
  49. public void update${entityName}(${entityName} ${entityName?uncap_first}) {
  50. ${entityName} entity = this.getById(${entityName?uncap_first}.getId());
  51. if(entity==null) {
  52. throw new JeecgBootException("未找到对应实体");
  53. }
  54. String old_pid = entity.get${pidFieldName?cap_first}();
  55. String new_pid = ${entityName?uncap_first}.get${pidFieldName?cap_first}();
  56. if(!old_pid.equals(new_pid)) {
  57. updateOldParentNode(old_pid);
  58. if(oConvertUtils.isEmpty(new_pid)){
  59. ${entityName?uncap_first}.set${pidFieldName?cap_first}(I${entityName}Service.ROOT_PID_VALUE);
  60. }
  61. if(!I${entityName}Service.ROOT_PID_VALUE.equals(${entityName?uncap_first}.get${pidFieldName?cap_first}())) {
  62. baseMapper.updateTreeNodeStatus(${entityName?uncap_first}.get${pidFieldName?cap_first}(), I${entityName}Service.HASCHILD);
  63. }
  64. }
  65. baseMapper.updateById(${entityName?uncap_first});
  66. }
  67. @Override
  68. @Transactional(rollbackFor = Exception.class)
  69. public void delete${entityName}(String id) throws JeecgBootException {
  70. //查询选中节点下所有子节点一并删除
  71. id = this.queryTreeChildIds(id);
  72. if(id.indexOf(",")>0) {
  73. StringBuffer sb = new StringBuffer();
  74. String[] idArr = id.split(",");
  75. for (String idVal : idArr) {
  76. if(idVal != null){
  77. ${entityName} ${entityName?uncap_first} = this.getById(idVal);
  78. String pidVal = ${entityName?uncap_first}.get${pidFieldName?cap_first}();
  79. //查询此节点上一级是否还有其他子节点
  80. List<${entityName}> dataList = baseMapper.selectList(new QueryWrapper<${entityName}>().eq("${tableVo.extendParams.pidField}", pidVal).notIn("id",Arrays.asList(idArr)));
  81. if((dataList == null || dataList.size()==0) && !Arrays.asList(idArr).contains(pidVal)
  82. && !sb.toString().contains(pidVal)){
  83. //如果当前节点原本有子节点 现在木有了,更新状态
  84. sb.append(pidVal).append(",");
  85. }
  86. }
  87. }
  88. //批量删除节点
  89. baseMapper.deleteBatchIds(Arrays.asList(idArr));
  90. //修改已无子节点的标识
  91. String[] pidArr = sb.toString().split(",");
  92. for(String pid : pidArr){
  93. this.updateOldParentNode(pid);
  94. }
  95. }else{
  96. ${entityName} ${entityName?uncap_first} = this.getById(id);
  97. if(${entityName?uncap_first}==null) {
  98. throw new JeecgBootException("未找到对应实体");
  99. }
  100. updateOldParentNode(${entityName?uncap_first}.get${pidFieldName?cap_first}());
  101. baseMapper.deleteById(id);
  102. }
  103. }
  104. @Override
  105. public List<${entityName}> queryTreeListNoPage(QueryWrapper<${entityName}> queryWrapper) {
  106. List<${entityName}> dataList = baseMapper.selectList(queryWrapper);
  107. List<${entityName}> mapList = new ArrayList<>();
  108. for(${entityName} data : dataList){
  109. String pidVal = data.get${pidFieldName?cap_first}();
  110. //递归查询子节点的根节点
  111. if(pidVal != null && !"0".equals(pidVal)){
  112. ${entityName} rootVal = this.getTreeRoot(pidVal);
  113. if(rootVal != null && !mapList.contains(rootVal)){
  114. mapList.add(rootVal);
  115. }
  116. }else{
  117. if(!mapList.contains(data)){
  118. mapList.add(data);
  119. }
  120. }
  121. }
  122. return mapList;
  123. }
  124. /**
  125. * 根据所传pid查询旧的父级节点的子节点并修改相应状态值
  126. * @param pid
  127. */
  128. private void updateOldParentNode(String pid) {
  129. if(!I${entityName}Service.ROOT_PID_VALUE.equals(pid)) {
  130. Integer count = baseMapper.selectCount(new QueryWrapper<${entityName}>().eq("${tableVo.extendParams.pidField}", pid));
  131. if(count==null || count<=1) {
  132. baseMapper.updateTreeNodeStatus(pid, I${entityName}Service.NOCHILD);
  133. }
  134. }
  135. }
  136. /**
  137. * 递归查询节点的根节点
  138. * @param pidVal
  139. * @return
  140. */
  141. private ${entityName} getTreeRoot(String pidVal){
  142. ${entityName} data = baseMapper.selectById(pidVal);
  143. if(data != null && !"0".equals(data.get${pidFieldName?cap_first}())){
  144. return this.getTreeRoot(data.get${pidFieldName?cap_first}());
  145. }else{
  146. return data;
  147. }
  148. }
  149. /**
  150. * 根据id查询所有子节点id
  151. * @param ids
  152. * @return
  153. */
  154. private String queryTreeChildIds(String ids) {
  155. //获取id数组
  156. String[] idArr = ids.split(",");
  157. StringBuffer sb = new StringBuffer();
  158. for (String pidVal : idArr) {
  159. if(pidVal != null){
  160. if(!sb.toString().contains(pidVal)){
  161. if(sb.toString().length() > 0){
  162. sb.append(",");
  163. }
  164. sb.append(pidVal);
  165. this.getTreeChildIds(pidVal,sb);
  166. }
  167. }
  168. }
  169. return sb.toString();
  170. }
  171. /**
  172. * 递归查询所有子节点
  173. * @param pidVal
  174. * @param sb
  175. * @return
  176. */
  177. private StringBuffer getTreeChildIds(String pidVal,StringBuffer sb){
  178. List<${entityName}> dataList = baseMapper.selectList(new QueryWrapper<${entityName}>().eq("${tableVo.extendParams.pidField}", pidVal));
  179. if(dataList != null && dataList.size()>0){
  180. for(${entityName} tree : dataList) {
  181. if(!sb.toString().contains(tree.getId())){
  182. sb.append(",").append(tree.getId());
  183. }
  184. this.getTreeChildIds(tree.getId(),sb);
  185. }
  186. }
  187. return sb;
  188. }
  189. }