From 02bf4e9cf61313e5e35667e55b5d197ed6bc10fd Mon Sep 17 00:00:00 2001 From: yinq Date: Sat, 21 Feb 2026 10:42:34 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E9=85=8D=E6=96=B9=E5=B7=A6=E4=BE=A7?= =?UTF-8?q?=E6=A0=91=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ProdRecipeInfoController.java | 10 ++++ .../dromara/mes/domain/ProdRecipeWeight.java | 6 ++ .../mes/domain/bo/ProdRecipeWeightBo.java | 4 ++ .../mes/domain/vo/ProdRecipeWeightVo.java | 5 ++ .../mes/domain/vo/RecipeTreeNodeVo.java | 59 +++++++++++++++++++ .../mes/service/IProdRecipeInfoService.java | 9 +++ .../impl/ProdRecipeInfoServiceImpl.java | 48 +++++++++++++++ .../impl/ProdRecipeWeightServiceImpl.java | 3 + 8 files changed, 144 insertions(+) create mode 100644 ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/RecipeTreeNodeVo.java diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdRecipeInfoController.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdRecipeInfoController.java index 320b9a3e..bf980bba 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdRecipeInfoController.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdRecipeInfoController.java @@ -19,6 +19,7 @@ import org.dromara.common.log.enums.BusinessType; import org.dromara.common.excel.utils.ExcelUtil; import org.dromara.mes.domain.vo.ProdRecipeInfoVo; import org.dromara.mes.domain.vo.RecipeDetailVo; +import org.dromara.mes.domain.vo.RecipeTreeNodeVo; import org.dromara.mes.domain.bo.ProdRecipeInfoBo; import org.dromara.mes.domain.bo.RecipeDetailSaveBo; import org.dromara.mes.service.IProdRecipeInfoService; @@ -48,6 +49,15 @@ public class ProdRecipeInfoController extends BaseController { return prodRecipeInfoService.queryPageList(bo, pageQuery); } + /** + * 查询配方树 + */ + @SaCheckPermission("mes:recipeInfo:list") + @GetMapping("/tree") + public R> tree(ProdRecipeInfoBo bo) { + return R.ok(prodRecipeInfoService.queryRecipeTree(bo)); + } + /** * 导出配方-基础信息列表 */ diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/ProdRecipeWeight.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/ProdRecipeWeight.java index dee4d07c..1ad44bac 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/ProdRecipeWeight.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/ProdRecipeWeight.java @@ -98,6 +98,12 @@ public class ProdRecipeWeight extends TenantEntity { */ private String maxRate; + /** + * 物料名称(关联物料表) + */ + @TableField(exist = false) + private String materialName; + /** * 删除标志(0代表存在 2代表删除) */ diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdRecipeWeightBo.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdRecipeWeightBo.java index 62532901..a8107443 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdRecipeWeightBo.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdRecipeWeightBo.java @@ -96,5 +96,9 @@ public class ProdRecipeWeightBo extends BaseEntity { */ private String maxRate; + /** + * 物料名称(关联物料表) + */ + private String materialName; } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdRecipeWeightVo.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdRecipeWeightVo.java index 33422ea3..4e8c099f 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdRecipeWeightVo.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdRecipeWeightVo.java @@ -107,6 +107,11 @@ public class ProdRecipeWeightVo implements Serializable { @ExcelProperty(value = "子级编码") private Long childCode; + /** + * 物料名称(关联物料表) + */ + private String materialName; + /** * 是否使用批次 */ diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/RecipeTreeNodeVo.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/RecipeTreeNodeVo.java new file mode 100644 index 00000000..f7864e95 --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/RecipeTreeNodeVo.java @@ -0,0 +1,59 @@ +package org.dromara.mes.domain.vo; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +/** + * 工艺配方树节点VO(父级:配方代号;子级:称量物料名称) + * + * @author system + */ +@Data +public class RecipeTreeNodeVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 节点唯一ID + */ + private String id; + + /** + * 显示标签 + */ + private String label; + + /** + * 配方代号(父节点) + */ + private String recipeCode; + + /** + * 配方ID(用于关联表格数据) + */ + private Long recipeId; + + /** + * 物料ID(子节点) + */ + private Long materialId; + + /** + * 物料名称(子节点) + */ + private String materialName; + + /** + * 配方详情(父节点点击时使用) + */ + private ProdRecipeInfoVo data; + + /** + * 子节点 + */ + private List children; +} diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/IProdRecipeInfoService.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/IProdRecipeInfoService.java index af301a3e..010cd465 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/IProdRecipeInfoService.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/IProdRecipeInfoService.java @@ -3,6 +3,7 @@ package org.dromara.mes.service; import org.dromara.mes.domain.ProdRecipeInfo; import org.dromara.mes.domain.vo.ProdRecipeInfoVo; import org.dromara.mes.domain.vo.RecipeDetailVo; +import org.dromara.mes.domain.vo.RecipeTreeNodeVo; import org.dromara.mes.domain.bo.ProdRecipeInfoBo; import org.dromara.mes.domain.bo.RecipeDetailSaveBo; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -84,4 +85,12 @@ public interface IProdRecipeInfoService { * @return 配方明细 */ RecipeDetailVo queryDetailByRecipeId(Long recipeId); + + /** + * 查询配方树 + * + * @param bo 查询条件 + * @return 树节点列表 + */ + List queryRecipeTree(ProdRecipeInfoBo bo); } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdRecipeInfoServiceImpl.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdRecipeInfoServiceImpl.java index 1dc44f6e..cfcbcfe7 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdRecipeInfoServiceImpl.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdRecipeInfoServiceImpl.java @@ -19,6 +19,7 @@ import org.dromara.mes.domain.vo.ProdRecipeInfoVo; import org.dromara.mes.domain.vo.ProdRecipeWeightVo; import org.dromara.mes.domain.vo.ProdRecipeMixingVo; import org.dromara.mes.domain.vo.RecipeDetailVo; +import org.dromara.mes.domain.vo.RecipeTreeNodeVo; import org.dromara.mes.domain.ProdRecipeInfo; import org.dromara.mes.mapper.ProdRecipeInfoMapper; import org.dromara.mes.service.IProdRecipeInfoService; @@ -29,6 +30,8 @@ import java.util.List; import java.util.Map; import java.util.Collection; import java.util.ArrayList; +import java.util.Set; +import java.util.HashSet; import java.util.stream.Collectors; /** @@ -317,4 +320,49 @@ public class ProdRecipeInfoServiceImpl implements IProdRecipeInfoService { return detail; } + @Override + public List queryRecipeTree(ProdRecipeInfoBo bo) { + bo.setRecipeState("1"); + List recipeList = queryList(bo); + if (recipeList == null || recipeList.isEmpty()) { + return new ArrayList<>(); + } + List treeList = new ArrayList<>(); + for (ProdRecipeInfoVo recipe : recipeList) { + Long recipeId = recipe.getRecipeId(); + String recipeCode = StringUtils.isNotBlank(recipe.getRecipeCode()) ? recipe.getRecipeCode() : "未命名"; + // 查询该配方的称量信息 + ProdRecipeWeightBo weightQuery = new ProdRecipeWeightBo(); + weightQuery.setRecipeId(recipeId); + List weights = prodRecipeWeightService.queryList(weightQuery); + // 按称量序号顺序构建子节点,仅显示物料名称(queryList 已关联物料表查询物料名称) + Set addedNames = new HashSet<>(); + List children = new ArrayList<>(); + for (ProdRecipeWeightVo w : weights) { + Long childCode = w.getChildCode(); + if (childCode == null) continue; + String materialName = StringUtils.isNotBlank(w.getMaterialName()) ? w.getMaterialName() : "未知物料"; + if (addedNames.add(materialName)) { + RecipeTreeNodeVo child = new RecipeTreeNodeVo(); + child.setId("mat_" + recipeId + "_" + childCode); + child.setLabel(materialName); + child.setRecipeId(recipeId); + child.setRecipeCode(recipeCode); + child.setMaterialId(childCode); + child.setMaterialName(materialName); + children.add(child); + } + } + RecipeTreeNodeVo parent = new RecipeTreeNodeVo(); + parent.setId("recipe_" + recipeId); + parent.setLabel(recipeCode); + parent.setRecipeCode(recipeCode); + parent.setRecipeId(recipeId); + parent.setData(recipe); + parent.setChildren(children.isEmpty() ? null : children); + treeList.add(parent); + } + return treeList; + } + } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdRecipeWeightServiceImpl.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdRecipeWeightServiceImpl.java index 9204b9ea..621327e7 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdRecipeWeightServiceImpl.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdRecipeWeightServiceImpl.java @@ -12,6 +12,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.dromara.mes.domain.bo.ProdRecipeWeightBo; import org.dromara.mes.domain.vo.ProdRecipeWeightVo; +import org.dromara.mes.domain.BaseMaterialInfo; import org.dromara.mes.domain.ProdRecipeWeight; import org.dromara.mes.mapper.ProdRecipeWeightMapper; import org.dromara.mes.service.IProdRecipeWeightService; @@ -73,6 +74,8 @@ public class ProdRecipeWeightServiceImpl implements IProdRecipeWeightService { Map params = bo.getParams(); MPJLambdaWrapper lqw = JoinWrappers.lambda(ProdRecipeWeight.class) .selectAll(ProdRecipeWeight.class) + .select(BaseMaterialInfo::getMaterialName) + .leftJoin(BaseMaterialInfo.class, BaseMaterialInfo::getMaterialId, ProdRecipeWeight::getChildCode) .eq(bo.getWeightId() != null, ProdRecipeWeight::getWeightId, bo.getWeightId()) .eq(bo.getRecipeId() != null, ProdRecipeWeight::getRecipeId, bo.getRecipeId()) .eq(bo.getWeightSeq() != null, ProdRecipeWeight::getWeightSeq, bo.getWeightSeq())