diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/controller/termbank/TermBankController.java b/postdischarge-manage/src/main/java/com/xinelu/manage/controller/termbank/TermBankController.java index d8f887c8..af97d742 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/controller/termbank/TermBankController.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/controller/termbank/TermBankController.java @@ -8,6 +8,7 @@ import com.xinelu.common.enums.BusinessType; import com.xinelu.common.utils.poi.ExcelUtil; import com.xinelu.manage.domain.termbank.TermBank; import com.xinelu.manage.service.termbank.ITermBankService; +import com.xinelu.manage.vo.termbank.TermBankVO; import org.apache.commons.lang3.StringUtils; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; @@ -40,7 +41,7 @@ public class TermBankController extends BaseController { } @GetMapping("/selectTermBankList") - public AjaxResult selectTermBankList(TermBank termBank) { + public AjaxResult selectTermBankList(TermBank termBank) { return AjaxResult.success(termBankService.selectTermBankList(termBank)); } @@ -97,4 +98,12 @@ public class TermBankController extends BaseController { public AjaxResult remove(@PathVariable Long[] ids) { return toAjax(termBankService.deleteTermBankByIds(ids)); } + + /** + * 常用术语层级树图 + */ + @GetMapping("/bankLevel") + public List bankLevel(Long level) { + return termBankService.bankLevel(level); + } } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/termbank/TermBankMapper.java b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/termbank/TermBankMapper.java index a32de6e6..fd15fa23 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/termbank/TermBankMapper.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/termbank/TermBankMapper.java @@ -1,6 +1,7 @@ package com.xinelu.manage.mapper.termbank; import com.xinelu.manage.domain.termbank.TermBank; +import com.xinelu.manage.vo.termbank.TermBankVO; import java.util.List; @@ -27,6 +28,11 @@ public interface TermBankMapper { */ List selectTermBankList(TermBank termBank); + /** + * 常用术语层级树图 + */ + List selectTermBankTree(Long level); + /** * 新增常用术语(知识库) * diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/termbank/ITermBankService.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/termbank/ITermBankService.java index 7140df6e..a99a0626 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/termbank/ITermBankService.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/termbank/ITermBankService.java @@ -2,6 +2,7 @@ package com.xinelu.manage.service.termbank; import com.xinelu.common.core.domain.AjaxResult; import com.xinelu.manage.domain.termbank.TermBank; +import com.xinelu.manage.vo.termbank.TermBankVO; import java.util.List; @@ -61,4 +62,9 @@ public interface ITermBankService { * @return 结果 */ int deleteTermBankById(Long id); + + /** + * 常用术语层级树图 + */ + List bankLevel(Long level); } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/termbank/impl/TermBankServiceImpl.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/termbank/impl/TermBankServiceImpl.java index 3dccd741..c4f3f2be 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/termbank/impl/TermBankServiceImpl.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/termbank/impl/TermBankServiceImpl.java @@ -7,13 +7,18 @@ import com.xinelu.common.utils.codes.GenerateSystemCodeUtil; import com.xinelu.manage.domain.termbank.TermBank; import com.xinelu.manage.mapper.termbank.TermBankMapper; import com.xinelu.manage.service.termbank.ITermBankService; +import com.xinelu.manage.vo.termbank.TermBankVO; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Iterator; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; /** * 常用术语(知识库)Service业务层处理 @@ -120,4 +125,62 @@ public class TermBankServiceImpl implements ITermBankService { public int deleteTermBankById(Long id) { return termBankMapper.deleteTermBankById(id); } + + /** + * 常用术语层级树图 + */ + @Override + public List bankLevel(Long level) { + List termBanks = termBankMapper.selectTermBankTree(level); + if (CollectionUtils.isEmpty(termBanks)) { + return new ArrayList<>(); + } + return buildDeptTree(termBanks); + } + + public List buildDeptTree(List termBanks) { + List returnList = new ArrayList<>(); + List tempList = termBanks.stream().filter(Objects::nonNull).map(TermBank::getTermCode).filter(Objects::nonNull).collect(Collectors.toList()); + for (TermBankVO termBank : termBanks) { + // 如果是顶级节点, 遍历该父节点的所有子节点 + if (!tempList.contains(termBank.getParentTermCode())) { + recursionFn(termBanks, termBank); + returnList.add(termBank); + } + } + if (returnList.isEmpty()) { + returnList = termBanks; + } + return returnList; + } + + private void recursionFn(List list, TermBankVO t) { + // 得到子节点列表 + List childList = getChildList(list, t); + t.setChildren(childList); + for (TermBankVO tChild : childList) { + if (hasChild(list, tChild)) { + recursionFn(list, tChild); + } + } + } + + private List getChildList(List list, TermBankVO t) { + List tlist = new ArrayList(); + Iterator it = list.iterator(); + while (it.hasNext()) { + TermBankVO n = (TermBankVO) it.next(); + if (Objects.nonNull(n.getParentTermCode()) && n.getParentTermCode().equals(t.getTermCode())) { + tlist.add(n); + } + } + return tlist; + } + + /** + * 判断是否有子节点 + */ + private boolean hasChild(List list, TermBankVO t) { + return getChildList(list, t).size() > 0; + } } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/vo/agency/AgencyTreeVO.java b/postdischarge-manage/src/main/java/com/xinelu/manage/vo/agency/AgencyTreeVO.java index a1aa51f5..755186af 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/vo/agency/AgencyTreeVO.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/vo/agency/AgencyTreeVO.java @@ -26,7 +26,7 @@ public class AgencyTreeVO implements Serializable { private String label; /** - * 节点名称 + * 节点层级 */ private String value; diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/vo/termbank/TermBankVO.java b/postdischarge-manage/src/main/java/com/xinelu/manage/vo/termbank/TermBankVO.java new file mode 100644 index 00000000..4f479877 --- /dev/null +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/vo/termbank/TermBankVO.java @@ -0,0 +1,31 @@ +package com.xinelu.manage.vo.termbank; + +import com.xinelu.manage.domain.termbank.TermBank; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.ArrayList; +import java.util.List; + +/** + * 常用术语(知识库)对象 term_bank + * + * @author xinelu + * @date 2024-06-07 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class TermBankVO extends TermBank { + + private String value; + + private List children = new ArrayList(); + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } +} diff --git a/postdischarge-manage/src/main/resources/mapper/manage/termbank/TermBankMapper.xml b/postdischarge-manage/src/main/resources/mapper/manage/termbank/TermBankMapper.xml index c2a66407..76d977ab 100644 --- a/postdischarge-manage/src/main/resources/mapper/manage/termbank/TermBankMapper.xml +++ b/postdischarge-manage/src/main/resources/mapper/manage/termbank/TermBankMapper.xml @@ -5,22 +5,34 @@ - - - - - - - - - - - - + + + + + + + + + + + + - select id, term_code, term_name, term_content, parent_term_code, term_level, term_sort, term_remark, create_by, create_time, update_by, update_time from term_bank + select id, + term_code, + term_name, + term_content, + parent_term_code, + term_level, + term_sort, + term_remark, + create_by, + create_time, + update_by, + update_time + from term_bank + + insert into term_bank - term_code, - - term_name, - - term_content, - - parent_term_code, - - term_level, - - term_sort, - - term_remark, - - create_by, - - create_time, - - update_by, - - update_time, - + term_code, + + term_name, + + term_content, + + parent_term_code, + + term_level, + + term_sort, + + term_remark, + + create_by, + + create_time, + + update_by, + + update_time, + - #{termCode}, - - #{termName}, - - #{termContent}, - - #{parentTermCode}, - - #{termLevel}, - - #{termSort}, - - #{termRemark}, - - #{createBy}, - - #{createTime}, - - #{updateBy}, - - #{updateTime}, - + #{termCode}, + + #{termName}, + + #{termContent}, + + #{parentTermCode}, + + #{termLevel}, + + #{termSort}, + + #{termRemark}, + + #{createBy}, + + #{createTime}, + + #{updateBy}, + + #{updateTime}, + update term_bank - term_code = - #{termCode}, - - term_name = - #{termName}, - - term_content = - #{termContent}, - - parent_term_code = - #{parentTermCode}, - - term_level = - #{termLevel}, - - term_sort = - #{termSort}, - - term_remark = - #{termRemark}, - - create_by = - #{createBy}, - - create_time = - #{createTime}, - - update_by = - #{updateBy}, - - update_time = - #{updateTime}, - + term_code = + #{termCode}, + + term_name = + #{termName}, + + term_content = + #{termContent}, + + parent_term_code = + #{parentTermCode}, + + term_level = + #{termLevel}, + + term_sort = + #{termSort}, + + term_remark = + #{termRemark}, + + create_by = + #{createBy}, + + create_time = + #{createTime}, + + update_by = + #{updateBy}, + + update_time = + #{updateTime}, + where id = #{id} - delete from term_bank where id = #{id} + delete + from term_bank + where id = #{id}