From bc05582cafe48c0e97790fc6de4c599fa8ae6017 Mon Sep 17 00:00:00 2001 From: xs Date: Fri, 21 Mar 2025 17:38:20 +0800 Subject: [PATCH] =?UTF-8?q?1.2.8=EF=BC=9A=20=E7=89=A9=E6=96=99bom=E5=90=8E?= =?UTF-8?q?=E7=AB=AF=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/constant/HwMomMesConstants.java | 17 +++ .../BaseMaterialInfoController.java | 19 +++ .../controller/ProdMaterialBomController.java | 47 ++++++- .../ProdMaterialBomVersionController.java | 117 +++++++++++++++ .../dromara/mes/domain/ProdMaterialBom.java | 24 +++- .../mes/domain/ProdMaterialBomVersion.java | 35 +++++ .../mes/domain/bo/ProdMaterialBomBo.java | 27 +++- .../domain/bo/ProdMaterialBomVersionBo.java | 36 +++++ .../domain/vo/ProdMaterialBomVersionVo.java | 45 ++++++ .../mes/domain/vo/ProdMaterialBomVo.java | 28 +++- .../org/dromara/mes/domain/vo/TreeSelect.java | 24 +++- .../mes/mapper/BaseMaterialInfoMapper.java | 10 ++ .../mes/mapper/ProdMaterialBomMapper.java | 19 +++ .../mapper/ProdMaterialBomVersionMapper.java | 15 ++ .../mes/service/IProdMaterialBomService.java | 8 ++ .../IProdMaterialBomVersionService.java | 69 +++++++++ .../impl/BaseMaterialInfoServiceImpl.java | 2 +- .../impl/BaseStructureBomServiceImpl.java | 13 +- .../impl/ProdMaterialBomServiceImpl.java | 118 ++++++++++++---- .../ProdMaterialBomVersionServiceImpl.java | 133 ++++++++++++++++++ .../mapper/mes/BaseMaterialInfoMapper.xml | 29 ++++ .../mapper/mes/ProdMaterialBomMapper.xml | 63 ++++++++- .../mes/ProdMaterialBomVersionMapper.xml | 7 + 23 files changed, 847 insertions(+), 58 deletions(-) create mode 100644 ruoyi-common/hwmom-common-mom/src/main/java/org/dromara/common/constant/HwMomMesConstants.java create mode 100644 ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdMaterialBomVersionController.java create mode 100644 ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/ProdMaterialBomVersion.java create mode 100644 ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdMaterialBomVersionBo.java create mode 100644 ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdMaterialBomVersionVo.java create mode 100644 ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/mapper/ProdMaterialBomVersionMapper.java create mode 100644 ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/IProdMaterialBomVersionService.java create mode 100644 ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdMaterialBomVersionServiceImpl.java create mode 100644 ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/ProdMaterialBomVersionMapper.xml diff --git a/ruoyi-common/hwmom-common-mom/src/main/java/org/dromara/common/constant/HwMomMesConstants.java b/ruoyi-common/hwmom-common-mom/src/main/java/org/dromara/common/constant/HwMomMesConstants.java new file mode 100644 index 00000000..cd917fa8 --- /dev/null +++ b/ruoyi-common/hwmom-common-mom/src/main/java/org/dromara/common/constant/HwMomMesConstants.java @@ -0,0 +1,17 @@ +package org.dromara.common.constant; + +/** + * MES常量信息 + * + * @author xins + */ +public interface HwMomMesConstants { + + /** + * 物料bom顶级标识 + */ + public static final Long MES_MATERIAL_BOM_TOP_FLAG_YES = 1L; + + + +} diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/BaseMaterialInfoController.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/BaseMaterialInfoController.java index 9c55bacb..e2715564 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/BaseMaterialInfoController.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/BaseMaterialInfoController.java @@ -6,6 +6,11 @@ import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.mes.domain.bo.BaseMaterialTypeBo; +import org.dromara.mes.domain.bo.ProdMaterialBomVersionBo; +import org.dromara.mes.domain.vo.BaseMaterialTypeVo; +import org.dromara.mes.domain.vo.ProdMaterialBomVersionVo; +import org.dromara.mes.service.IBaseMaterialTypeService; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -37,6 +42,8 @@ public class BaseMaterialInfoController extends BaseController { private final IBaseMaterialInfoService baseMaterialInfoService; + private final IBaseMaterialTypeService baseMaterialTypeService; + /** * 查询物料信息列表 */ @@ -114,4 +121,16 @@ public class BaseMaterialInfoController extends BaseController { List list = baseMaterialInfoService.queryList(bo); return R.ok(list); } + + + + /** + * 查询bom版本信息列表 + */ + @SaCheckPermission("mes:baseMaterialInfo:list") + @GetMapping("/getMaterialTypeList") + public R> getMaterialTypeList(BaseMaterialTypeBo bo) { + List list = baseMaterialTypeService.queryList(bo); + return R.ok(list); + } } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdMaterialBomController.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdMaterialBomController.java index e86d51b3..d63bad42 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdMaterialBomController.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdMaterialBomController.java @@ -6,8 +6,12 @@ import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; -import org.dromara.mes.domain.bo.BaseStructureBomBo; -import org.dromara.mes.domain.vo.TreeSelect; +import org.dromara.mes.domain.BaseMeasurementUnitInfo; +import org.dromara.mes.domain.ProdMaterialBomVersion; +import org.dromara.mes.domain.bo.*; +import org.dromara.mes.domain.vo.*; +import org.dromara.mes.service.IBaseMeasurementUnitInfoService; +import org.dromara.mes.service.IProdMaterialBomVersionService; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -19,8 +23,6 @@ import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.EditGroup; import org.dromara.common.log.enums.BusinessType; import org.dromara.common.excel.utils.ExcelUtil; -import org.dromara.mes.domain.vo.ProdMaterialBomVo; -import org.dromara.mes.domain.bo.ProdMaterialBomBo; import org.dromara.mes.service.IProdMaterialBomService; /** @@ -38,6 +40,10 @@ public class ProdMaterialBomController extends BaseController { private final IProdMaterialBomService prodMaterialBomService; + private final IBaseMeasurementUnitInfoService baseMeasurementUnitInfoService; + + private final IProdMaterialBomVersionService prodMaterialBomVersionService; + /** * 查询物料BOM信息列表 */ @@ -140,6 +146,18 @@ public class ProdMaterialBomController extends BaseController { return R.ok(prodMaterialBomService.selectMaterialBomTreeList(prodMaterialBomBo)); } + /** + * 获取父级物料BOM信息详细信息 + * + * @param prodMaterialBomBo + */ + @SaCheckPermission("mes:materialBom:list") + @GetMapping("/getParentMaterialBom") + public R getParentMaterialBom(ProdMaterialBomBo prodMaterialBomBo) { + return R.ok(prodMaterialBomService.selectParentMaterialBom(prodMaterialBomBo)); + } + + /** * 查询物料BOM信息列表 */ @@ -150,4 +168,25 @@ public class ProdMaterialBomController extends BaseController { return R.ok(list); } + + /** + * 查询单位信息列表 + */ + @SaCheckPermission("mes:materialBom:list") + @GetMapping("/getUnitInfoList") + public R> getUnitInfoList(BaseMeasurementUnitInfoBo bo) { + List list = baseMeasurementUnitInfoService.queryList(bo); + return R.ok(list); + } + + /** + * 查询bom版本信息列表 + */ + @SaCheckPermission("mes:materialBom:list") + @GetMapping("/getMaterialBomVersionList") + public R> getMaterialBomVersionList(ProdMaterialBomVersionBo bo) { + List list = prodMaterialBomVersionService.queryList(bo); + return R.ok(list); + } + } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdMaterialBomVersionController.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdMaterialBomVersionController.java new file mode 100644 index 00000000..078c82ea --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdMaterialBomVersionController.java @@ -0,0 +1,117 @@ +package org.dromara.mes.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.mes.domain.vo.ProdMaterialBomVersionVo; +import org.dromara.mes.domain.bo.ProdMaterialBomVersionBo; +import org.dromara.mes.service.IProdMaterialBomVersionService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 物料bom版本 + * 前端访问路由地址为:/mes/materialBomVersion + * + * @author xins + * @date 2025-03-19 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/materialBomVersion") +public class ProdMaterialBomVersionController extends BaseController { + + private final IProdMaterialBomVersionService prodMaterialBomVersionService; + + /** + * 查询物料bom版本列表 + */ + @SaCheckPermission("mes:materialBomVersion:list") + @GetMapping("/list") + public TableDataInfo list(ProdMaterialBomVersionBo bo, PageQuery pageQuery) { + return prodMaterialBomVersionService.queryPageList(bo, pageQuery); + } + + /** + * 导出物料bom版本列表 + */ + @SaCheckPermission("mes:materialBomVersion:export") + @Log(title = "物料bom版本", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(ProdMaterialBomVersionBo bo, HttpServletResponse response) { + List list = prodMaterialBomVersionService.queryList(bo); + ExcelUtil.exportExcel(list, "物料bom版本", ProdMaterialBomVersionVo.class, response); + } + + /** + * 获取物料bom版本详细信息 + * + * @param materialBomVersion 主键 + */ + @SaCheckPermission("mes:materialBomVersion:query") + @GetMapping("/{materialBomVersion}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable String materialBomVersion) { + return R.ok(prodMaterialBomVersionService.queryById(materialBomVersion)); + } + + /** + * 新增物料bom版本 + */ + @SaCheckPermission("mes:materialBomVersion:add") + @Log(title = "物料bom版本", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody ProdMaterialBomVersionBo bo) { + return toAjax(prodMaterialBomVersionService.insertByBo(bo)); + } + + /** + * 修改物料bom版本 + */ + @SaCheckPermission("mes:materialBomVersion:edit") + @Log(title = "物料bom版本", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody ProdMaterialBomVersionBo bo) { + return toAjax(prodMaterialBomVersionService.updateByBo(bo)); + } + + /** + * 删除物料bom版本 + * + * @param materialBomVersions 主键串 + */ + @SaCheckPermission("mes:materialBomVersion:remove") + @Log(title = "物料bom版本", businessType = BusinessType.DELETE) + @DeleteMapping("/{materialBomVersions}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable String[] materialBomVersions) { + return toAjax(prodMaterialBomVersionService.deleteWithValidByIds(List.of(materialBomVersions), true)); + } + + + /** + * 下拉框查询物料bom版本列表 + */ + + @GetMapping("/getProdMaterialBomVersionList") + public R> getProdMaterialBomVersionList(ProdMaterialBomVersionBo bo) { + List list = prodMaterialBomVersionService.queryList(bo); + return R.ok(list); + } +} diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/ProdMaterialBom.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/ProdMaterialBom.java index 8275b9f3..f43bf132 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/ProdMaterialBom.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/ProdMaterialBom.java @@ -38,6 +38,21 @@ public class ProdMaterialBom extends TenantEntity { */ private Long materialId; + /** + * 物料单位ID + */ + private Long unitId; + + /** + * 父级物料单位ID + */ + private Long parentUnitId; + + /** + * 父级标准数量 + */ + private BigDecimal parentStandardAmount; + /** * 物料名称 */ @@ -48,6 +63,11 @@ public class ProdMaterialBom extends TenantEntity { */ private Long materialTypeId; + /** + * 父级物料类型ID + */ + private Long parentMaterialTypeId; + /** * bom说明 */ @@ -58,10 +78,6 @@ public class ProdMaterialBom extends TenantEntity { */ private String materialBomVersion; - /** - * 祖级列表 - */ - private String ancestors; /** * 标准数量 diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/ProdMaterialBomVersion.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/ProdMaterialBomVersion.java new file mode 100644 index 00000000..fea8ecff --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/ProdMaterialBomVersion.java @@ -0,0 +1,35 @@ +package org.dromara.mes.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 物料bom版本对象 prod_material_bom_version + * + * @author xins + * @date 2025-03-19 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("prod_material_bom_version") +public class ProdMaterialBomVersion extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键标识,BOM版本,手动输入 + */ + private String materialBomVersion; + + /** + * 激活标识(1是 0否) + */ + private String activeFlag; + + +} diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdMaterialBomBo.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdMaterialBomBo.java index 2a7bb606..14ad594f 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdMaterialBomBo.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdMaterialBomBo.java @@ -35,9 +35,24 @@ public class ProdMaterialBomBo extends BaseEntity { /** * 物料ID */ - @NotNull(message = "物料ID不能为空", groups = { AddGroup.class, EditGroup.class }) + @NotNull(message = "物料ID不能为空", groups = {AddGroup.class, EditGroup.class}) private Long materialId; + /** + * 物料单位ID + */ + private Long unitId; + + /** + * 父级物料单位ID + */ + private Long parentUnitId; + + /** + * 父级标准数量 + */ + private BigDecimal parentStandardAmount; + /** * 物料名称 */ @@ -48,6 +63,11 @@ public class ProdMaterialBomBo extends BaseEntity { */ private Long materialTypeId; + /** + * 父级物料类型ID + */ + private Long parentMaterialTypeId; + /** * bom说明 */ @@ -58,10 +78,6 @@ public class ProdMaterialBomBo extends BaseEntity { */ private String materialBomVersion; - /** - * 祖级列表 - */ - private String ancestors; /** * 标准数量 @@ -112,5 +128,4 @@ public class ProdMaterialBomBo extends BaseEntity { private String materialTypeName;//join查询字段 - private Long bomStructureParentId;//结构树的parentId } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdMaterialBomVersionBo.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdMaterialBomVersionBo.java new file mode 100644 index 00000000..b4a22897 --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdMaterialBomVersionBo.java @@ -0,0 +1,36 @@ +package org.dromara.mes.domain.bo; + +import org.dromara.mes.domain.ProdMaterialBomVersion; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 物料bom版本业务对象 prod_material_bom_version + * + * @author xins + * @date 2025-03-19 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = ProdMaterialBomVersion.class, reverseConvertGenerate = false) +public class ProdMaterialBomVersionBo extends BaseEntity { + + /** + * 主键标识,BOM版本,手动输入 + */ + @NotBlank(message = "主键标识,BOM版本,手动输入不能为空", groups = { AddGroup.class, EditGroup.class }) + private String materialBomVersion; + + /** + * 激活标识(1是 0否) + */ + @NotBlank(message = "激活标识(1是 0否)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String activeFlag; + + +} diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdMaterialBomVersionVo.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdMaterialBomVersionVo.java new file mode 100644 index 00000000..46ccb7bd --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdMaterialBomVersionVo.java @@ -0,0 +1,45 @@ +package org.dromara.mes.domain.vo; + +import org.dromara.mes.domain.ProdMaterialBomVersion; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 物料bom版本视图对象 prod_material_bom_version + * + * @author xins + * @date 2025-03-19 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = ProdMaterialBomVersion.class) +public class ProdMaterialBomVersionVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键标识,BOM版本,手动输入 + */ + @ExcelProperty(value = "主键标识,BOM版本,手动输入") + private String materialBomVersion; + + /** + * 激活标识(1是 0否) + */ + @ExcelProperty(value = "激活标识", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "1=是,0=否") + private String activeFlag; + + +} diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdMaterialBomVo.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdMaterialBomVo.java index e55ac0f6..866c4ec3 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdMaterialBomVo.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdMaterialBomVo.java @@ -47,6 +47,21 @@ public class ProdMaterialBomVo implements Serializable { @ExcelProperty(value = "物料ID") private Long materialId; + /** + * 物料单位ID + */ + private Long unitId; + + /** + * 父级物料单位ID + */ + private Long parentUnitId; + + /** + * 父级标准数量 + */ + private BigDecimal parentStandardAmount; + /** * 物料名称 */ @@ -58,6 +73,11 @@ public class ProdMaterialBomVo implements Serializable { */ private Long materialTypeId; + /** + * 父级物料类型ID + */ + private Long parentMaterialTypeId; + /** * bom说明 */ @@ -68,10 +88,6 @@ public class ProdMaterialBomVo implements Serializable { */ private String materialBomVersion; - /** - * 祖级列表 - */ - private String ancestors; /** * 标准数量 @@ -169,6 +185,10 @@ public class ProdMaterialBomVo implements Serializable { private String materialTypeName;//join字段 + private String parentMaterialName; //join字段 + + private String parentMaterialTypeName;//join字段 + private String unitName;//子物料单位 } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/TreeSelect.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/TreeSelect.java index 6abc7341..21001a12 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/TreeSelect.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/TreeSelect.java @@ -4,6 +4,7 @@ import com.alibaba.excel.util.StringUtils; import com.fasterxml.jackson.annotation.JsonInclude; import java.io.Serializable; +import java.math.BigDecimal; import java.util.List; import java.util.stream.Collectors; @@ -37,6 +38,8 @@ public class TreeSelect implements Serializable { private List children; + private Long materialId; + private String materialName; /** * 物料类型ID @@ -47,6 +50,7 @@ public class TreeSelect implements Serializable { private String materialBomVersion; + private String treeKey;//作为树的唯一键使用 public TreeSelect() { @@ -60,7 +64,8 @@ public class TreeSelect implements Serializable { } public TreeSelect(ProdMaterialBomVo prodMaterialBomVo) { - this.id = prodMaterialBomVo.getMaterialBomId(); + this.id = prodMaterialBomVo.getMaterialBomId();//树的唯一键,有可能为空,所以不能作为树的ID + this.treeKey = prodMaterialBomVo.getMaterialId() + "-" + prodMaterialBomVo.getMaterialBomVersion(); if (prodMaterialBomVo.getParentId() == null) { this.label = prodMaterialBomVo.getMaterialName(); } else { @@ -68,6 +73,7 @@ public class TreeSelect implements Serializable { prodMaterialBomVo.getMaterialName(); } this.parentId = prodMaterialBomVo.getParentId(); + this.materialId = prodMaterialBomVo.getMaterialId(); this.children = prodMaterialBomVo.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); this.materialName = prodMaterialBomVo.getMaterialName(); this.materialTypeId = prodMaterialBomVo.getMaterialTypeId(); @@ -138,4 +144,20 @@ public class TreeSelect implements Serializable { public void setMaterialBomVersion(String materialBomVersion) { this.materialBomVersion = materialBomVersion; } + + public Long getMaterialId() { + return materialId; + } + + public void setMaterialId(Long materialId) { + this.materialId = materialId; + } + + public String getTreeKey() { + return treeKey; + } + + public void setTreeKey(String treeKey) { + this.treeKey = treeKey; + } } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/mapper/BaseMaterialInfoMapper.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/mapper/BaseMaterialInfoMapper.java index f38c805f..e1501107 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/mapper/BaseMaterialInfoMapper.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/mapper/BaseMaterialInfoMapper.java @@ -1,10 +1,13 @@ package org.dromara.mes.mapper; import org.dromara.mes.domain.BaseMaterialInfo; +import org.dromara.mes.domain.bo.BaseMaterialInfoBo; import org.dromara.mes.domain.vo.BaseMaterialInfoVo; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.pda.api.model.BaseMaterial; +import java.util.List; + /** * 物料信息Mapper接口 * @@ -14,4 +17,11 @@ import org.dromara.pda.api.model.BaseMaterial; public interface BaseMaterialInfoMapper extends BaseMapperPlus { BaseMaterial queryByMaterialCode(String materialCode); + + /** + * 查询物料信息列表,join material_type + * @param baseMaterialInfoBo + * @return + */ + List selectMaterialJoinList(BaseMaterialInfoBo baseMaterialInfoBo); } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/mapper/ProdMaterialBomMapper.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/mapper/ProdMaterialBomMapper.java index a5348a26..0b67d90d 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/mapper/ProdMaterialBomMapper.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/mapper/ProdMaterialBomMapper.java @@ -26,6 +26,17 @@ public interface ProdMaterialBomMapper extends BaseMapperPlus selectMaterialBomJoinList(ProdMaterialBomBo podMaterialBomBo); + /** + * 在查询顶级节点的parent数据时的查询生产bom数据,join material和materialtype + * + * @param podMaterialBomBo 查询条件 + * @return 生产bom信息集合 + */ +// @DataPermission({ +// @DataColumn(key = "deptName", value = "dept_id") +// }) + List selectParentMaterialBomJoinList(ProdMaterialBomBo podMaterialBomBo); + /** * 查询生产bom数据,join material、materialtype和bomstructure @@ -38,4 +49,12 @@ public interface ProdMaterialBomMapper extends BaseMapperPlus selectMaterialBomJoinStructureList(ProdMaterialBomBo podMaterialBomBo); + + /** + * 查询生产bom数据,join material和materialtype,查询物料优先,左连接bom表 + * + * @param podMaterialBomBo 查询条件 + * @return 生产bom信息 + */ + ProdMaterialBomVo selectParentMaterialBomJoin(ProdMaterialBomBo podMaterialBomBo); } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/mapper/ProdMaterialBomVersionMapper.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/mapper/ProdMaterialBomVersionMapper.java new file mode 100644 index 00000000..d34df294 --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/mapper/ProdMaterialBomVersionMapper.java @@ -0,0 +1,15 @@ +package org.dromara.mes.mapper; + +import org.dromara.mes.domain.ProdMaterialBomVersion; +import org.dromara.mes.domain.vo.ProdMaterialBomVersionVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 物料bom版本Mapper接口 + * + * @author xins + * @date 2025-03-19 + */ +public interface ProdMaterialBomVersionMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/IProdMaterialBomService.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/IProdMaterialBomService.java index 6c62fdb8..72f38569 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/IProdMaterialBomService.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/IProdMaterialBomService.java @@ -73,6 +73,14 @@ public interface IProdMaterialBomService { */ public List queryJoinStructureList(ProdMaterialBomBo bo); + /** + * 查询父级生产bom信息 + * + * @param bo 生产bom信息 + * @return 生产bom信息集合 + */ + public ProdMaterialBomVo selectParentMaterialBom(ProdMaterialBomBo bo); + /** * 查询生产bom信息 * diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/IProdMaterialBomVersionService.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/IProdMaterialBomVersionService.java new file mode 100644 index 00000000..50c1035a --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/IProdMaterialBomVersionService.java @@ -0,0 +1,69 @@ +package org.dromara.mes.service; + +import org.dromara.mes.domain.ProdMaterialBomVersion; +import org.dromara.mes.domain.vo.ProdMaterialBomVersionVo; +import org.dromara.mes.domain.bo.ProdMaterialBomVersionBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 物料bom版本Service接口 + * + * @author xins + * @date 2025-03-19 + */ +public interface IProdMaterialBomVersionService { + + /** + * 查询物料bom版本 + * + * @param materialBomVersion 主键 + * @return 物料bom版本 + */ + ProdMaterialBomVersionVo queryById(String materialBomVersion); + + /** + * 分页查询物料bom版本列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 物料bom版本分页列表 + */ + TableDataInfo queryPageList(ProdMaterialBomVersionBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的物料bom版本列表 + * + * @param bo 查询条件 + * @return 物料bom版本列表 + */ + List queryList(ProdMaterialBomVersionBo bo); + + /** + * 新增物料bom版本 + * + * @param bo 物料bom版本 + * @return 是否新增成功 + */ + Boolean insertByBo(ProdMaterialBomVersionBo bo); + + /** + * 修改物料bom版本 + * + * @param bo 物料bom版本 + * @return 是否修改成功 + */ + Boolean updateByBo(ProdMaterialBomVersionBo bo); + + /** + * 校验并批量删除物料bom版本信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/BaseMaterialInfoServiceImpl.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/BaseMaterialInfoServiceImpl.java index db8da508..4467892a 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/BaseMaterialInfoServiceImpl.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/BaseMaterialInfoServiceImpl.java @@ -98,7 +98,7 @@ public class BaseMaterialInfoServiceImpl implements IBaseMaterialInfoService { .eq(bo.getMaterialId() != null, BaseMaterialInfo::getMaterialId, bo.getMaterialId()) .eq(StringUtils.isNotBlank(bo.getErpId()), BaseMaterialInfo::getErpId, bo.getErpId()) - .eq(StringUtils.isNotBlank(bo.getMaterialCode()), BaseMaterialInfo::getMaterialCode, bo.getMaterialCode()) + .like(StringUtils.isNotBlank(bo.getMaterialCode()), BaseMaterialInfo::getMaterialCode, bo.getMaterialCode()) .eq(StringUtils.isNotBlank(bo.getOldMaterialCode()), BaseMaterialInfo::getOldMaterialCode, bo.getOldMaterialCode()) .like(StringUtils.isNotBlank(bo.getMaterialName()), BaseMaterialInfo::getMaterialName, bo.getMaterialName()) .eq(bo.getMaterialTypeId() != null, BaseMaterialInfo::getMaterialTypeId, bo.getMaterialTypeId()) diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/BaseStructureBomServiceImpl.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/BaseStructureBomServiceImpl.java index e5729449..a64acde5 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/BaseStructureBomServiceImpl.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/BaseStructureBomServiceImpl.java @@ -175,6 +175,7 @@ public class BaseStructureBomServiceImpl implements IBaseStructureBomService { throw new ServiceException("此物料类型下已经有此子级物料类型"); } + //TODO:需要找整棵树,不能无限循环 BaseStructureBom reverseQuery = new BaseStructureBom();//同一个物料类型同一个父级,反过来父级物料类型是物料类型的子级 reverseQuery.setParentId(entity.getMaterialTypeId()); reverseQuery.setMaterialTypeId(entity.getParentId()); @@ -217,9 +218,9 @@ public class BaseStructureBomServiceImpl implements IBaseStructureBomService { //监测删除的节点是否有子节点 BaseStructureBom query = new BaseStructureBom(); query.setParentId(id); - if (baseMapper.selectCount(Wrappers.lambdaQuery(query)) > 0) { - throw new ServiceException("BOM结构编号["+id+"]存在子节点,不允许删除"); - } +// if (baseMapper.selectCount(Wrappers.lambdaQuery(query)) > 0) { +// throw new ServiceException("BOM结构编号["+id+"]存在子节点,不允许删除"); +// } BaseStructureBomVo dbStructureBomVo = baseMapper.selectVoById(id); if (materialBomUsed(dbStructureBomVo)) { throw new ServiceException("BOM结构编号["+id+"]的物料类型和子级物料类型都已经在生产BOM中配置,不允许删除"); @@ -256,9 +257,9 @@ public class BaseStructureBomServiceImpl implements IBaseStructureBomService { List returnList = new ArrayList(); List tempList = structureBomVos.stream().map(BaseStructureBomVo::getMaterialTypeId).collect(Collectors.toList()); for (BaseStructureBomVo structureBomVo : structureBomVos) { - if (structureBomVo.getMaterialTypeId().equals(-1L) && StringUtil.isBlank(structureBomVo.getMaterialTypeName())) { - structureBomVo.setMaterialTypeName("BOM结构"); - } +// if (structureBomVo.getMaterialTypeId().equals(-1L) && StringUtil.isBlank(structureBomVo.getMaterialTypeName())) { +// structureBomVo.setMaterialTypeName("BOM结构"); +// } // 如果是顶级节点, 遍历该父节点的所有子节点 if (!tempList.contains(structureBomVo.getParentId())) { recursionFn(structureBomVos, structureBomVo); diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdMaterialBomServiceImpl.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdMaterialBomServiceImpl.java index 6b7f62b5..fec6b84d 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdMaterialBomServiceImpl.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdMaterialBomServiceImpl.java @@ -1,14 +1,12 @@ package org.dromara.mes.service.impl; -import com.alibaba.csp.sentinel.util.StringUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import org.dromara.common.constant.HwMomMesConstants; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; import lombok.RequiredArgsConstructor; -import org.dromara.mes.domain.BaseStructureBom; -import org.dromara.mes.domain.vo.BaseStructureBomVo; import org.dromara.mes.domain.vo.TreeSelect; import org.springframework.stereotype.Service; import org.dromara.mes.domain.bo.ProdMaterialBomBo; @@ -19,6 +17,7 @@ import org.dromara.mes.service.IProdMaterialBomService; import java.util.*; import java.util.stream.Collectors; +import java.util.function.Function; import org.springframework.transaction.annotation.Transactional; import cn.hutool.core.collection.CollUtil; @@ -71,7 +70,6 @@ public class ProdMaterialBomServiceImpl implements IProdMaterialBomService { .like(StringUtils.isNotBlank(bo.getMaterialName()), ProdMaterialBom::getMaterialName, bo.getMaterialName()) .like(StringUtils.isNotBlank(bo.getMaterialBomDesc()), ProdMaterialBom::getMaterialBomDesc, bo.getMaterialBomDesc()) .like(StringUtils.isNotBlank(bo.getMaterialBomVersion()), ProdMaterialBom::getMaterialBomVersion, bo.getMaterialBomVersion()) - .like(StringUtils.isNotBlank(bo.getAncestors()), ProdMaterialBom::getAncestors, bo.getAncestors()) .eq(bo.getStandardAmount() != null, ProdMaterialBom::getStandardAmount, bo.getStandardAmount()) .eq(bo.getTopFlag() != null, ProdMaterialBom::getTopFlag, bo.getTopFlag()) .eq(StringUtils.isNotBlank(bo.getCheckType()), ProdMaterialBom::getCheckType, bo.getCheckType()) @@ -94,11 +92,6 @@ public class ProdMaterialBomServiceImpl implements IProdMaterialBomService { public Boolean insertByBo(ProdMaterialBomBo bo) { isTopFlag(bo); ProdMaterialBomVo info = baseMapper.selectVoById(bo.getParentId()); - if (StringUtils.isNull(info)) { - bo.setAncestors(bo.getParentId().toString()); - } else { - bo.setAncestors(info.getAncestors() + "," + bo.getParentId()); - } ProdMaterialBom add = MapstructUtils.convert(bo, ProdMaterialBom.class); validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; @@ -178,6 +171,8 @@ public class ProdMaterialBomServiceImpl implements IProdMaterialBomService { if (CollUtil.isEmpty(boList)) { return false; } + //todo:在pojo中增加equals方法,来判断有没有修改,如果有修改则判断计划中是否有引用,根据物料id和bom版本找 + //TODO:判断在新建子级时,是否存在在此颗树的父级节点存在此子级节点,根据bom版本找 //获取materialbomid不为空的更新,获取materialbomid为空materialid不为空的保存 for (ProdMaterialBomBo prodMaterialBomBo : boList) { if (prodMaterialBomBo.getMaterialBomId() == null) { @@ -210,6 +205,17 @@ public class ProdMaterialBomServiceImpl implements IProdMaterialBomService { return baseMapper.selectMaterialBomJoinStructureList(bo); } + /** + * 查询父级生产bom信息 + * + * @param bo 生产bom信息 + * @return 生产bom信息集合 + */ + @Override + public ProdMaterialBomVo selectParentMaterialBom(ProdMaterialBomBo bo) { + return baseMapper.selectParentMaterialBomJoin(bo); + } + /** * 查询生产bom信息 @@ -232,26 +238,75 @@ public class ProdMaterialBomServiceImpl implements IProdMaterialBomService { */ private List buildMaterialBomTree(List prodMaterialBomVos) { List returnList = new ArrayList(); - ProdMaterialBomVo topProdMaterialBomVo = new ProdMaterialBomVo(); - topProdMaterialBomVo.setMaterialBomId(0L); - topProdMaterialBomVo.setMaterialName("生产BOM"); - topProdMaterialBomVo.setMaterialTypeId(1L); - prodMaterialBomVos.add(topProdMaterialBomVo); - - List tempList = prodMaterialBomVos.stream().map(ProdMaterialBomVo::getMaterialBomId).toList(); - for (ProdMaterialBomVo prodMaterialBomVo : prodMaterialBomVos) { - // 如果是顶级节点, 遍历该父节点的所有子节点 - if (!tempList.contains(prodMaterialBomVo.getParentId())) { - recursionFn(prodMaterialBomVos, prodMaterialBomVo); - returnList.add(prodMaterialBomVo); - } +// ProdMaterialBomVo topProdMaterialBomVo = new ProdMaterialBomVo(); +// topProdMaterialBomVo.setMaterialId(0L); +// topProdMaterialBomVo.setMaterialName("生产BOM"); +// topProdMaterialBomVo.setMaterialTypeId(1L); +// prodMaterialBomVos.add(topProdMaterialBomVo); + + +// List tempList = prodMaterialBomVos.stream().map(ProdMaterialBomVo::getMaterialId).toList(); + + /** + * 由于顶级节点的parent没有父级对象,需要虚拟新增一个 + * 例如顶级节点v1版本A节点下有b,也有c,则只增加一个A的顶级节点对象,parentId是1,materialId是A + */ + //1、先过滤出顶级 + List topMaterialBomVos = prodMaterialBomVos.stream() + .filter(obj -> prodMaterialBomVos.stream() + .noneMatch(other -> other.getMaterialId().longValue() == obj.getParentId().longValue())) + .toList(); + + + //2、过滤出parentId相同的 + List distinctParentIdVoList = topMaterialBomVos.stream() + .collect(Collectors.toMap( + ProdMaterialBomVo::getParentId, // 以parentId作为key + Function.identity(), // 以对象本身作为value + (existing, replacement) -> existing // 如果遇到重复的key,保留已有的对象 + )) + .values() + .stream() + .toList(); + + //3、基于过滤出顶级的增加虚拟top节点进行递归 + for (ProdMaterialBomVo prodMaterialBomVo : distinctParentIdVoList) { + ProdMaterialBomVo topProdMaterialBomVo = new ProdMaterialBomVo(); + topProdMaterialBomVo.setMaterialBomId(0L); + topProdMaterialBomVo.setParentId(0L); + topProdMaterialBomVo.setMaterialId(prodMaterialBomVo.getParentId()); + topProdMaterialBomVo.setMaterialTypeId(prodMaterialBomVo.getParentMaterialTypeId()); + topProdMaterialBomVo.setMaterialTypeName(prodMaterialBomVo.getParentMaterialTypeName());//设置parent的物料类型名称 + topProdMaterialBomVo.setMaterialName(prodMaterialBomVo.getParentMaterialName());//设置parent的物料名称 + topProdMaterialBomVo.setMaterialBomVersion(prodMaterialBomVo.getMaterialBomVersion()); + prodMaterialBomVos.add(topProdMaterialBomVo); + + recursionFn(prodMaterialBomVos, topProdMaterialBomVo); + returnList.add(topProdMaterialBomVo); + +// // 如果是顶级节点, 遍历该父节点的所有子节点 +// if (!tempList.contains(prodMaterialBomVo.getParentId())) { +// recursionFn(prodMaterialBomVos, prodMaterialBomVo); +// returnList.add(prodMaterialBomVo); +// } } + + +// for (ProdMaterialBomVo prodMaterialBomVo : prodMaterialBomVos) { +// // 如果是顶级节点, 遍历该父节点的所有子节点 +// if (!tempList.contains(prodMaterialBomVo.getParentId())) { +// recursionFn(prodMaterialBomVos, prodMaterialBomVo); +// returnList.add(prodMaterialBomVo); +// } +// } if (returnList.isEmpty()) { returnList = prodMaterialBomVos; } return returnList; } + + /** * 构建前端所需要下拉树结构 * @@ -259,8 +314,18 @@ public class ProdMaterialBomServiceImpl implements IProdMaterialBomService { * @return 下拉树结构列表 */ private List buildMaterialBomTreeSelect(List prodMaterialBomVos) { - List materialBomTrees = buildMaterialBomTree(prodMaterialBomVos); - return materialBomTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); + // 根据物料bom版本号group,不能的版本是不同的树。使用 groupingBy 将 List 转换为 Map> + Map> prodMaterialBomVoMap = prodMaterialBomVos.stream() + .collect(Collectors.groupingBy(ProdMaterialBomVo::getMaterialBomVersion)); + + List allMaterialBomTrees = new ArrayList<>(); + // 根据物料版本号build树 + prodMaterialBomVoMap.forEach((materialBomVersion, vos) -> { + List materialBomTrees = buildMaterialBomTree(vos); + allMaterialBomTrees.addAll(materialBomTrees); + }); + + return allMaterialBomTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); } @@ -285,11 +350,12 @@ public class ProdMaterialBomServiceImpl implements IProdMaterialBomService { /** * 得到子节点列表 */ - private List getChildList(List list, ProdMaterialBomVo parent) { + private List getChildList(List list, ProdMaterialBomVo t) { return list.stream() .filter(n -> StringUtils.isNotNull(n.getParentId()) && - n.getParentId().equals(parent.getMaterialBomId())) + n.getParentId().equals(t.getMaterialId())) .collect(Collectors.toList()); + } /** diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdMaterialBomVersionServiceImpl.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdMaterialBomVersionServiceImpl.java new file mode 100644 index 00000000..de39058a --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdMaterialBomVersionServiceImpl.java @@ -0,0 +1,133 @@ +package org.dromara.mes.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.yulichang.toolkit.JoinWrappers; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.dromara.mes.domain.bo.ProdMaterialBomVersionBo; +import org.dromara.mes.domain.vo.ProdMaterialBomVersionVo; +import org.dromara.mes.domain.ProdMaterialBomVersion; +import org.dromara.mes.mapper.ProdMaterialBomVersionMapper; +import org.dromara.mes.service.IProdMaterialBomVersionService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 物料bom版本Service业务层处理 + * + * @author xins + * @date 2025-03-19 + */ +@RequiredArgsConstructor +@Service +public class ProdMaterialBomVersionServiceImpl implements IProdMaterialBomVersionService { + + private final ProdMaterialBomVersionMapper baseMapper; + + /** + * 查询物料bom版本 + * + * @param materialBomVersion 主键 + * @return 物料bom版本 + */ + @Override + public ProdMaterialBomVersionVo queryById(String materialBomVersion){ + return baseMapper.selectVoById(materialBomVersion); + } + + /** + * 分页查询物料bom版本列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 物料bom版本分页列表 + */ + @Override + public TableDataInfo queryPageList(ProdMaterialBomVersionBo bo, PageQuery pageQuery) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的物料bom版本列表 + * + * @param bo 查询条件 + * @return 物料bom版本列表 + */ + @Override + public List queryList(ProdMaterialBomVersionBo bo) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private MPJLambdaWrapper buildQueryWrapper(ProdMaterialBomVersionBo bo) { + Map params = bo.getParams(); + MPJLambdaWrapper lqw = JoinWrappers.lambda(ProdMaterialBomVersion.class) + .selectAll(ProdMaterialBomVersion.class) + .eq(StringUtils.isNotBlank(bo.getMaterialBomVersion()), ProdMaterialBomVersion::getMaterialBomVersion, bo.getMaterialBomVersion()) + .eq(StringUtils.isNotBlank(bo.getActiveFlag()), ProdMaterialBomVersion::getActiveFlag, bo.getActiveFlag()) + .orderByDesc(ProdMaterialBomVersion::getCreateTime).orderByDesc(ProdMaterialBomVersion::getActiveFlag); + return lqw; + } + + /** + * 新增物料bom版本 + * + * @param bo 物料bom版本 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(ProdMaterialBomVersionBo bo) { + ProdMaterialBomVersion add = MapstructUtils.convert(bo, ProdMaterialBomVersion.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setMaterialBomVersion(add.getMaterialBomVersion()); + } + return flag; + } + + /** + * 修改物料bom版本 + * + * @param bo 物料bom版本 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(ProdMaterialBomVersionBo bo) { + ProdMaterialBomVersion update = MapstructUtils.convert(bo, ProdMaterialBomVersion.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(ProdMaterialBomVersion entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除物料bom版本信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/BaseMaterialInfoMapper.xml b/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/BaseMaterialInfoMapper.xml index 3f95aa25..8311a975 100644 --- a/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/BaseMaterialInfoMapper.xml +++ b/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/BaseMaterialInfoMapper.xml @@ -7,4 +7,33 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + + diff --git a/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/ProdMaterialBomMapper.xml b/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/ProdMaterialBomMapper.xml index b7aa5cc7..d0cd62ba 100644 --- a/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/ProdMaterialBomMapper.xml +++ b/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/ProdMaterialBomMapper.xml @@ -12,11 +12,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" pmb.parent_id, pmb.material_type_id, pmb.material_bom_version, + pmb.parent_material_type_id, + pmb.parent_standard_amount, + pmb.parent_unit_id, + pmb.top_flag, bmi.material_name, - bmt.matrial_type_name as material_type_name + bmt.matrial_type_name as material_type_name, + bmip.material_name as parent_material_name, + bmtp.matrial_type_name as parent_material_type_name from prod_material_bom pmb left join base_material_info bmi on pmb.material_id=bmi.material_id - left join base_material_type bmt on bmi.material_type_id = bmt.matrial_type_id + left join base_material_type bmt on pmb.material_type_id = bmt.matrial_type_id + left join base_material_info bmip on pmb.parent_id=bmip.material_id + left join base_material_type bmtp on pmb.parent_material_type_id = bmtp.matrial_type_id and bmt.matrial_type_code like concat('%', #{materialTypeCode}, '%') @@ -24,12 +32,56 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and bmt.matrial_type_name like concat('%', #{materialTypeName}, '%') + and pmb.material_bom_version = #{materialBomVersion} + and pmb.parent_id = #{parentId} order by pmb.material_bom_id, pmb.material_bom_version desc + + + + + diff --git a/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/ProdMaterialBomVersionMapper.xml b/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/ProdMaterialBomVersionMapper.xml new file mode 100644 index 00000000..1de199fa --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/ProdMaterialBomVersionMapper.xml @@ -0,0 +1,7 @@ + + + + +