diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/controller/OrganizationController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/controller/OrganizationController.java index 33a7ba03..70b8b66f 100644 --- a/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/controller/OrganizationController.java +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/controller/OrganizationController.java @@ -3,10 +3,7 @@ */ package com.openhis.web.basedatamanage.controller; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; @@ -16,7 +13,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.core.common.core.domain.R; import com.core.common.utils.AssignSeqUtil; @@ -26,8 +22,6 @@ import com.openhis.administration.mapper.OrganizationMapper; import com.openhis.administration.service.IOrganizationService; import com.openhis.common.constant.PromptMsgConstant; import com.openhis.common.enums.OrganizationType; -import com.openhis.common.utils.HisPageUtils; -import com.openhis.common.utils.HisQueryUtils; import com.openhis.web.basedatamanage.dto.OrgQueryParam; import com.openhis.web.basedatamanage.dto.OrganizationInitDto; import com.openhis.web.basedatamanage.dto.OrganizationQueryDto; @@ -82,15 +76,22 @@ public class OrganizationController { @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) { - // 构建查询条件 - QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(orgQueryParam, searchKey, - new HashSet<>(Arrays.asList("name", "py_str", "wb_str")), request); - - // 设置排序 - queryWrapper.orderByDesc("create_time"); - // 执行分页查询并转换为 orgQueryDtoPage - Page orgQueryDtoPage = - HisPageUtils.selectPage(organizationMapper, queryWrapper, pageNo, pageSize, OrganizationQueryDto.class); + // // 构建查询条件 + // QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(orgQueryParam, searchKey, + // new HashSet<>(Arrays.asList("name", "py_str", "wb_str")), request); + // + // // 设置排序 + // queryWrapper.orderByDesc("create_time"); + // // 执行分页查询并转换为 orgQueryDtoPage + // Page orgQueryDtoPage = + // HisPageUtils.selectPage(organizationMapper, queryWrapper, pageNo, pageSize, OrganizationQueryDto.class); + // 查询机构列表 + Page page = organizationService.page(new Page<>(pageNo, pageSize)); + List organizationList = page.getRecords(); + // 将机构列表转为树结构 + List orgTree = buildTree(organizationList); + Page orgQueryDtoPage = new Page<>(pageNo, pageSize, page.getCurrent()); + orgQueryDtoPage.setRecords(orgTree); return R.ok(orgQueryDtoPage, MessageUtils.createMessage(PromptMsgConstant.Common.M00009, new Object[] {"机构信息"})); @@ -184,4 +185,45 @@ public class OrganizationController { : R.fail(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00007, new Object[] {"机构活动标识"})); } + /** + * 将机构列表转换为树结构 + * + * @param records 机构列表 + * @return tree + */ + private List buildTree(List records) { + // 按b_no的层级排序,确保父节点先处理 + List sortedRecords = records.stream() + .sorted(Comparator.comparingInt(r -> r.getBusNo().split("\\.").length)).collect(Collectors.toList()); + + Map nodeMap = new HashMap<>(); + List tree = new ArrayList<>(); + + for (Organization record : sortedRecords) { + String bNo = record.getBusNo(); + String[] parts = bNo.split("\\."); + OrganizationQueryDto node = new OrganizationQueryDto(); + BeanUtils.copyProperties(record, node); + // 将当前节点加入映射 + nodeMap.put(bNo, node); + + if (parts.length == 1) { + // 根节点 + tree.add(node); + } else { + // 获取父节点的b_no(去掉最后一部分) + String parentBNo = String.join(".", Arrays.copyOf(parts, parts.length - 1)); + OrganizationQueryDto parent = nodeMap.get(parentBNo); + + if (parent != null) { + parent.getChildren().add(node); + } else { + // 处理父节点不存在的情况(例如数据缺失) + // 可根据需求调整为将节点加入根或抛出异常 + } + } + } + return tree; + } + } diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/OrganizationQueryDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/OrganizationQueryDto.java index 9f092423..c1f9f8fd 100644 --- a/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/OrganizationQueryDto.java +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/OrganizationQueryDto.java @@ -3,6 +3,9 @@ */ package com.openhis.web.basedatamanage.dto; +import java.util.ArrayList; +import java.util.List; + import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.openhis.common.enums.OrganizationClass; @@ -52,4 +55,7 @@ public class OrganizationQueryDto { /** 显示顺序 */ private Integer displayOrder; + + /** 子集合 */ + private List children = new ArrayList<>(); } diff --git a/openhis-server/openhis-domain/src/main/java/com/openhis/administration/domain/Organization.java b/openhis-server/openhis-domain/src/main/java/com/openhis/administration/domain/Organization.java index 257970b4..3ec0f9c2 100644 --- a/openhis-server/openhis-domain/src/main/java/com/openhis/administration/domain/Organization.java +++ b/openhis-server/openhis-domain/src/main/java/com/openhis/administration/domain/Organization.java @@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.core.common.core.domain.HisBaseEntity; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.openhis.common.enums.OrganizationClass; import com.openhis.common.enums.OrganizationType; @@ -25,6 +27,7 @@ public class Organization extends HisBaseEntity { /** ID */ @TableId(type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) private Long id; /** 编码 */