From 31c5d7242679c7e80c29708f82ba26a64dc7df03 Mon Sep 17 00:00:00 2001 From: sxu <602087911@qq.com> Date: Mon, 14 Apr 2025 23:10:21 +0800 Subject: [PATCH] =?UTF-8?q?=E8=90=A5=E5=85=BB=E5=88=86=E7=B1=BB=E6=A0=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/common/domain/TreeSelect.java | 8 +++ .../MenuNutritionTypeController.java | 10 +++ .../core/menu/domain/MenuNutritionType.java | 5 +- .../service/IMenuNutritionTypeService.java | 3 + .../impl/MenuNutritionTypeServiceImpl.java | 71 +++++++++++++++++++ 5 files changed, 96 insertions(+), 1 deletion(-) diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/common/domain/TreeSelect.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/common/domain/TreeSelect.java index e6ce115..a7cedfb 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/common/domain/TreeSelect.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/common/domain/TreeSelect.java @@ -1,6 +1,7 @@ package com.bonus.canteen.core.common.domain; import com.bonus.canteen.core.alloc.domain.AllocArea; +import com.bonus.canteen.core.menu.domain.MenuNutritionType; import com.fasterxml.jackson.annotation.JsonInclude; import java.io.Serializable; @@ -50,6 +51,13 @@ public class TreeSelect implements Serializable { this.children = area.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); } + public TreeSelect(MenuNutritionType menuNutritionType) { + this.id = menuNutritionType.getId(); + this.label = menuNutritionType.getName(); + this.status = menuNutritionType.getDelFlag(); + this.children = menuNutritionType.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); + } + public Integer getLevel() { return level; } diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/controller/MenuNutritionTypeController.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/controller/MenuNutritionTypeController.java index ae7fa70..a8bf54a 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/controller/MenuNutritionTypeController.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/controller/MenuNutritionTypeController.java @@ -36,6 +36,16 @@ public class MenuNutritionTypeController extends BaseController { @Autowired private IMenuNutritionTypeService menuNutritionTypeService; + @GetMapping("/menuNutritionTypeTree") + public AjaxResult deptTree(MenuNutritionType menuNutritionType) { + try { + return success(menuNutritionTypeService.selectMenuNutritionTypeTreeList(menuNutritionType)); + } catch (Exception e) { + logger.error(e.toString(), e); + } + return error("系统异常,请联系管理员"); + } + /** * 查询营养基础类型列表 */ diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/domain/MenuNutritionType.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/domain/MenuNutritionType.java index 81af51f..51b07bf 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/domain/MenuNutritionType.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/domain/MenuNutritionType.java @@ -8,6 +8,9 @@ import lombok.Data; import lombok.ToString; import com.bonus.common.core.web.domain.BaseEntity; +import java.util.ArrayList; +import java.util.List; + /** * 营养基础类型对象 menu_nutrition_type * @@ -45,5 +48,5 @@ public class MenuNutritionType extends BaseEntity { @ApiModelProperty(value = "层级") private String level; - + private List children = new ArrayList(); } diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/service/IMenuNutritionTypeService.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/service/IMenuNutritionTypeService.java index 1520fea..3fd3e05 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/service/IMenuNutritionTypeService.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/service/IMenuNutritionTypeService.java @@ -2,6 +2,7 @@ package com.bonus.canteen.core.menu.service; import java.util.List; +import com.bonus.canteen.core.common.domain.TreeSelect; import com.bonus.canteen.core.menu.domain.MenuNutritionType; import com.bonus.canteen.core.menu.vo.NutritionTypeV2VO; import com.bonus.canteen.core.menu.vo.NutritionTypeVo; @@ -62,4 +63,6 @@ public interface IMenuNutritionTypeService { public int deleteMenuNutritionTypeById(Long id); List getNutritionTypeList(); + + public List selectMenuNutritionTypeTreeList(MenuNutritionType menuNutritionType); } diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/service/impl/MenuNutritionTypeServiceImpl.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/service/impl/MenuNutritionTypeServiceImpl.java index 958dae1..37130ce 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/service/impl/MenuNutritionTypeServiceImpl.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/service/impl/MenuNutritionTypeServiceImpl.java @@ -3,13 +3,16 @@ package com.bonus.canteen.core.menu.service.impl; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.stream.Collectors; import cn.hutool.system.UserInfo; +import com.bonus.canteen.core.common.domain.TreeSelect; import com.bonus.canteen.core.menu.mapper.MenuNutritionMapper; import com.bonus.canteen.core.menu.vo.NutritionTypeV2VO; import com.bonus.canteen.core.menu.vo.NutritionTypeVo; import com.bonus.common.core.exception.ServiceException; import com.bonus.common.core.utils.DateUtils; +import com.bonus.common.core.utils.StringUtils; import com.bonus.common.security.utils.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -152,4 +155,72 @@ public class MenuNutritionTypeServiceImpl implements IMenuNutritionTypeService { // TreeNodeUtil.assembleTree(list); return nutritionTypeVOList; } + + @Override + public List selectMenuNutritionTypeTreeList(MenuNutritionType menuNutritionType) { + List menuNutritionTypes = selectMenuNutritionTypeList(menuNutritionType); + return buildMenuNutritionTypeTreeSelect(menuNutritionTypes); + } + + public List buildMenuNutritionTypeTreeSelect(List menuNutritionTypes) + { + List menuNutritionTypeTrees = buildMenuNutritionTypeTree(menuNutritionTypes); + return menuNutritionTypeTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + public List buildMenuNutritionTypeTree(List list) { + List returnList = new ArrayList(); + List tempList = list.stream().map(MenuNutritionType::getId).collect(Collectors.toList()); + for (MenuNutritionType type : list) + { + // 如果是顶级节点, 遍历该父节点的所有子节点 + if (!tempList.contains(type.getParentId())) + { + recursionFn(list, type); + returnList.add(type); + } + } + if (returnList.isEmpty()) + { + returnList = list; + } + return returnList; + } + + private void recursionFn(List list, MenuNutritionType t) + { + // 得到子节点列表 + List childList = getChildList(list, t); + t.setChildren(childList); + for (MenuNutritionType tChild : childList) + { + if (hasChild(list, tChild)) + { + recursionFn(list, tChild); + } + } + } + + private List getChildList(List list, MenuNutritionType t) + { + List tlist = new ArrayList(); + Iterator it = list.iterator(); + while (it.hasNext()) + { + MenuNutritionType n = (MenuNutritionType) it.next(); + if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getId().longValue()) + { + tlist.add(n); + } + } + return tlist; + } + + /** + * 判断是否有子节点 + */ + private boolean hasChild(List list, MenuNutritionType t) + { + return getChildList(list, t).size() > 0 ? true : false; + } }