From c20932ff1ff1d79c60de76c2a317b694b7be6812 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A7=E7=B1=B3?= <470431449@qq.com> Date: Tue, 23 Jan 2024 12:57:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8E=9F=E5=A7=8BBOM=E6=90=9C=E7=B4=A2+?= =?UTF-8?q?=E8=99=9A=E6=8B=9F=E5=8C=85=E5=8A=A0=E5=8D=95=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bomnew/api/user/OriginalBomApi.java | 17 ++- .../BomNewOriginalMaterialUseMapper.java | 15 ++ .../master/BomNewOriginalParentMapper.java | 14 ++ .../BomNewOriginalMaterialUseEntity.java | 55 +++++++ .../bomnew/pojo/vo/BomOriginalListVO.java | 4 + .../BomNewOriginalMaterialUseService.java | 19 +++ .../service/BomNewOriginalParentService.java | 134 ++++++++++++++---- .../bomnew/service/MaterialService.java | 1 + .../bomnew/util/OriginalCTreeUtils.java | 126 ++++++++++++++++ .../BomNewOriginalMaterialUseMapper.xml | 18 +++ .../master/BomNewOriginalParentMapper.xml | 123 +++++++++++----- 11 files changed, 461 insertions(+), 65 deletions(-) create mode 100644 nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewOriginalMaterialUseMapper.java create mode 100644 nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/BomNewOriginalMaterialUseEntity.java create mode 100644 nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewOriginalMaterialUseService.java create mode 100644 nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/util/OriginalCTreeUtils.java create mode 100644 nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewOriginalMaterialUseMapper.xml diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/OriginalBomApi.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/OriginalBomApi.java index 9b5dab75..0af6eff8 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/OriginalBomApi.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/OriginalBomApi.java @@ -95,13 +95,16 @@ public class OriginalBomApi extends BaseApi { @PostMapping("pullFromCad") @ApiOperation("从CAD获取BOM数据") //去除参数 @RequestBody OriginalBomFromPlmQuery dto - + @Transactional(rollbackFor = Exception.class) public ResultVO pullFromPlm() { originalParentService.pullFromPlm(SessionUtil.getUserCode()); originalParentService.computeLevelNumAndRootState(); + //更新物料使用 + originalParentService.getBaseMapper().upOriginalMaterialUse(); + return ResultVO.success(true); } @@ -110,6 +113,9 @@ public class OriginalBomApi extends BaseApi { public ResultVO del(@RequestParam("bomRowId") Long bomRowId) throws ExecutionException, InterruptedException { originalParentService.del(bomRowId); originalParentService.computeLevelNumAndRootState(); + + //更新物料使用 + originalParentService.getBaseMapper().upOriginalMaterialUse(); return ResultVO.success(true); } @@ -165,7 +171,8 @@ public class OriginalBomApi extends BaseApi { //计算层级 originalParentService.computeLevelNumAndRootState(); - + //更新物料使用 + originalParentService.getBaseMapper().upOriginalMaterialUse(); return ResultVO.success(true); } @@ -209,14 +216,14 @@ public class OriginalBomApi extends BaseApi { @ApiOperation("导出-bom异常物料") @PostMapping("downLoadErrorMaterial") - public void downLoadErrorMaterial(HttpServletResponse response){ + public void downLoadErrorMaterial(HttpServletResponse response) { } @ApiOperation("test匹配") @PostMapping("testpiPEI") - public ResultVO test(@RequestParam("mname") String mname , @RequestParam("textrue")String textrue){ + public ResultVO test(@RequestParam("mname") String mname, @RequestParam("textrue") String textrue) { MaterialMateCache mateCache = new MaterialMateCache(); MaterialMateVO materialMate = mateCache.findMaterialByNameOrmaterialTexture(mname, textrue); return ResultVO.success(materialMate.getMaterialNo()); @@ -224,6 +231,4 @@ public class OriginalBomApi extends BaseApi { } - - } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewOriginalMaterialUseMapper.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewOriginalMaterialUseMapper.java new file mode 100644 index 00000000..a5c1ae0d --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewOriginalMaterialUseMapper.java @@ -0,0 +1,15 @@ +package com.nflg.product.bomnew.mapper.master; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.nflg.product.bomnew.pojo.entity.BomNewOriginalMaterialUseEntity; + +/** + * t_bom_new_original_material_use 表数据库访问层 + * 该物料使用在了哪些零部件上 + * + * @author makejava + * @since 2024-01-23 10:22:42 + */ +public interface BomNewOriginalMaterialUseMapper extends BaseMapper { +} diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewOriginalParentMapper.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewOriginalParentMapper.java index b4963e49..ae0a0483 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewOriginalParentMapper.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewOriginalParentMapper.java @@ -42,4 +42,18 @@ public interface BomNewOriginalParentMapper extends BaseMapper getDrawingNoByMaterialNos(@Param("materialNos") List materialNos); + + List getParentForDrawingNoSeach(@Param("drawingNos") List drawingNos ,@Param("state") Integer state); + + List getChildForDrawingNoSeach(@Param("drawingNos") List drawingNos); + + + } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/BomNewOriginalMaterialUseEntity.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/BomNewOriginalMaterialUseEntity.java new file mode 100644 index 00000000..54680122 --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/BomNewOriginalMaterialUseEntity.java @@ -0,0 +1,55 @@ +package com.nflg.product.bomnew.pojo.entity; + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.Data; +import lombok.experimental.Accessors; +import java.time.LocalDateTime; +import java.time.LocalDate; + +/** + * t_bom_new_original_material_use + * 该物料使用在了哪些零部件上 + * + * @author makejava + * @since 2024-01-23 10:22:42 + */ +@Data +@Accessors(chain = true) +@ApiModel(value="com-nflg-product-bomnew-pojo-new-entity-BomNewOriginalMaterialUseEntity") +@TableName(value = "t_bom_new_original_material_use") +public class BomNewOriginalMaterialUseEntity implements Serializable { + + /** + * 主键-雪花ID + */ + @TableId(value = "row_id", type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "主键-雪花ID") + private Long rowId; + + /** + * drawing_no + */ + @TableField(value = "drawing_no") + @ApiModelProperty(value = "drawing_no") + private String drawingNo; + + /** + * 父级图号-多个用逗号隔开(单层最新版) + */ + @TableField(value = "parent_drawing_nos") + @ApiModelProperty(value = "父级图号-多个用逗号隔开(单层最新版)") + private String parentDrawingNos; + + /** + * 父级创建用户-多个用逗号隔开(单层最新版) + */ + @TableField(value = "parent_create_user") + @ApiModelProperty(value = "父级创建用户-多个用逗号隔开(单层最新版)") + private String parentCreateUser; + + private static final long serialVersionUID = 914525080365661039L; + +} diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomOriginalListVO.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomOriginalListVO.java index 0bdf14ed..016a0a57 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomOriginalListVO.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomOriginalListVO.java @@ -7,6 +7,8 @@ import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; +import java.util.Collections; +import java.util.List; /** * 原始BOM-列表 @@ -179,6 +181,8 @@ public class BomOriginalListVO extends BaseMaterialVO { @ApiModelProperty("转换后Ebom行ID") private Long eBomRowId=0L; + private List childNodes = Collections.emptyList(); + diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewOriginalMaterialUseService.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewOriginalMaterialUseService.java new file mode 100644 index 00000000..4eef4d4f --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewOriginalMaterialUseService.java @@ -0,0 +1,19 @@ +package com.nflg.product.bomnew.service; + + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.nflg.product.bomnew.mapper.master.BomNewOriginalMaterialUseMapper; +import com.nflg.product.bomnew.pojo.entity.BomNewOriginalMaterialUseEntity; +import org.springframework.stereotype.Service; + +/** + * t_bom_new_original_material_use 表服务实现类 + * 该物料使用在了哪些零部件上 + * + * @author makejava + * @since 2024-01-23 10:22:42 + */ +@Service +public class BomNewOriginalMaterialUseService extends ServiceImpl { + +} diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewOriginalParentService.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewOriginalParentService.java index 1c5b493f..82226c68 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewOriginalParentService.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewOriginalParentService.java @@ -8,20 +8,17 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.google.common.collect.Sets; import com.nflg.product.base.core.config.SpringContextUtils; import com.nflg.product.base.core.conmon.util.SessionUtil; import com.nflg.product.base.core.exception.NflgBusinessException; -import com.nflg.product.bomnew.constant.OriginalConstant; -import com.nflg.product.bomnew.constant.OriginalEditStatusEnum; -import com.nflg.product.bomnew.constant.OriginalSourceEnum; -import com.nflg.product.bomnew.constant.OriginalStatusEnum; +import com.nflg.product.bomnew.constant.*; import com.nflg.product.bomnew.mapper.master.BomNewOriginalParentMapper; import com.nflg.product.bomnew.pojo.dto.BomNewOriginalExcelDTO; import com.nflg.product.bomnew.pojo.dto.OriginalSaveBomDTO; -import com.nflg.product.bomnew.pojo.entity.BomNewOriginalChildEntity; -import com.nflg.product.bomnew.pojo.entity.BomNewOriginalParentEntity; -import com.nflg.product.bomnew.pojo.entity.BomOriginalCadParentEntity; +import com.nflg.product.bomnew.pojo.entity.*; import com.nflg.product.bomnew.pojo.query.OriginalBomQuery; +import com.nflg.product.bomnew.pojo.vo.BomNewEbomParentVO; import com.nflg.product.bomnew.pojo.vo.BomOriginalListVO; import com.nflg.product.bomnew.pojo.vo.BomOriginalPlmBomVO; import com.nflg.product.bomnew.service.domain.EBom.CheckEBomException; @@ -82,6 +79,60 @@ public class BomNewOriginalParentService extends ServiceImpl getParentDrawingNoByMaterialNo(List drawingNos) { + List draringEnts = originalMaterialUseService.lambdaQuery().in(BomNewOriginalMaterialUseEntity::getDrawingNo, drawingNos).list(); + List draringNosList = draringEnts.stream().map(u -> StrUtil.split(u.getParentDrawingNos(), ",") ).collect(Collectors.toList()); + List draringNos = draringNosList.stream().flatMap(Arrays::stream).collect(Collectors.toList()); + Set result = new HashSet<>(); + if (CollUtil.isNotEmpty(draringNos)) { + Set relSkuNo = Sets.newHashSet(draringNos); + while (CollUtil.isNotEmpty(relSkuNo)) { + List relSkuList = originalMaterialUseService.lambdaQuery().in(BomNewOriginalMaterialUseEntity::getDrawingNo, relSkuNo).list(); + result.addAll(relSkuNo); + relSkuNo.clear(); + Set finalRelSkuNo = relSkuNo; + relSkuList.forEach(k -> { + if (StrUtil.isNotBlank(k.getParentDrawingNos())) { + finalRelSkuNo.addAll(Sets.newHashSet(StrUtil.split(k.getParentDrawingNos(), ","))); + } + }); + relSkuNo = finalRelSkuNo; + } + } + return result; + } + + private Page handSeachToTree(List parents, List childs) { + Page resutlData = new Page<>(); + Set parentSet = parents.stream().map(u -> u.getDrawingNo()).collect(Collectors.toSet()); + Set childSet = childs.stream().map(u -> u.getDrawingNo()).collect(Collectors.toSet()); + Set difference = Sets.difference(parentSet, childSet); + List resultParents = parents.stream().filter(u -> difference.contains(u.getDrawingNo())).collect(Collectors.toList()); + resutlData.setTotal(difference.size()); + resutlData.setSize(difference.size()); + resutlData.setPages(1); + resutlData.setCurrent(1L); + List all = new ArrayList<>(); + // all.addAll(resultParents); + all.addAll(childs); + List result = new ArrayList<>(); + for (BomOriginalListVO vo : resultParents) { + vo.setParentRowId(0L); + List da = new ArrayList<>(); + da.addAll(childs); + da.add(vo); + result.addAll(OriginalCTreeUtils.toTree(0L, da, BomOriginalListVO::getParentRowId, BomOriginalListVO::getBomRowId)); + } + resutlData.setRecords(result); + return resutlData; + } + /** * 获取原始BOM列表 * @@ -89,13 +140,41 @@ public class BomNewOriginalParentService extends ServiceImpl getOriginalBomListPage(OriginalBomQuery query) { - Page result = this.getBaseMapper().getOriginalBomListPage(new Page<>(query.getPage(), query.getPageSize()), query, SessionUtil.getUserCode()); + Page result=null; + //物料编码搜索或图号搜索 + if (CollUtil.isNotEmpty(query.getMaterialNos()) || CollUtil.isNotEmpty(query.getDrawingNos())) { + List queryDrawingNos= new ArrayList<>(); + queryDrawingNos.addAll(query.getDrawingNos()); + if (CollUtil.isNotEmpty(query.getMaterialNos())) { + List drawingNos = this.getBaseMapper().getDrawingNoByMaterialNos(query.getMaterialNos()); + if (CollUtil.isNotEmpty(drawingNos)) { + queryDrawingNos.addAll(drawingNos); + } + } + if (CollUtil.isNotEmpty(queryDrawingNos)) { + List parentDrawingNos = getParentDrawingNoByMaterialNo(queryDrawingNos).stream().collect(Collectors.toList()); + parentDrawingNos.addAll(queryDrawingNos); + if (CollUtil.isNotEmpty(parentDrawingNos)) { + List parents = this.getBaseMapper().getParentForDrawingNoSeach(parentDrawingNos, query.getStatus()); + List childs = this.getBaseMapper().getChildForDrawingNoSeach(parentDrawingNos); + List data = new ArrayList<>(); + data.addAll(parents); + data.addAll(childs); + materialMainService.intiMaterialInfo(data, EBomConstant.EBOM_IGNORED_FIELDS_INIT_MATERIAL_DEFAULT); + result = handSeachToTree(parents, childs); + } + } + }else { - materialMainService.intiMaterialInfo(result.getRecords()); + result = this.getBaseMapper().getOriginalBomListPage(new Page<>(query.getPage(), query.getPageSize()), query, SessionUtil.getUserCode()); + materialMainService.intiMaterialInfo(result.getRecords()); + } return result; } + + /** * 编辑时-暂存 * @@ -189,7 +268,7 @@ public class BomNewOriginalParentService extends ServiceImpl sourceIds){ + public void revertBom(List sourceIds) { - if(CollectionUtil.isEmpty(sourceIds)){ - return; - } + if (CollectionUtil.isEmpty(sourceIds)) { + return; + } - this.getBaseMapper().updateRevertBom(OriginalStatusEnum.UN_CONVERT.getValue(), - OriginalEditStatusEnum.HANDLER_CREATED.getValue(), - sourceIds); + this.getBaseMapper().updateRevertBom(OriginalStatusEnum.UN_CONVERT.getValue(), + OriginalEditStatusEnum.HANDLER_CREATED.getValue(), + sourceIds); } @@ -259,7 +337,7 @@ public class BomNewOriginalParentService extends ServiceImpl bomDetail = this.getBaseMapper().getParentChild(bom.getRowId()); OriginalBomDetailTask detailTask = new OriginalBomDetailTask(bomDetail); detailTask.setLevelNum(1); @@ -360,17 +438,19 @@ public class BomNewOriginalParentService extends ServiceImpl bomRowIds) throws ExecutionException, InterruptedException { List bomNewOriginalParentEntities = this.getBaseMapper().selectBatchIds(bomRowIds); - List convertedBom = bomNewOriginalParentEntities.stream().filter(u -> OriginalStatusEnum.OVER_CONVERT.equalsValue(u.getStatus())).collect(Collectors.toList()); + //List convertedBom = bomNewOriginalParentEntities.stream().filter(u -> OriginalStatusEnum.OVER_CONVERT.equalsValue(u.getStatus())).collect(Collectors.toList()); // VUtils.isTure(CollUtil.isNotEmpty(convertedBom)).throwMessage("所选BOM中存在已转换的BOM"); + //检查:有子级的物料编码不能为空 + //开始转换 for (BomNewOriginalParentEntity parent : bomNewOriginalParentEntities) { - Long ebomRowId= IdWorker.getId(); - convertToEBomDo(parent,ebomRowId); + Long ebomRowId = IdWorker.getId(); + convertToEBomDo(parent, ebomRowId); //更新并保存异常信息 - ebomParentService.checkAndSaveEBomException( ebomRowId); + ebomParentService.checkAndSaveEBomException(ebomRowId); } return true; @@ -383,9 +463,13 @@ public class BomNewOriginalParentService extends ServiceImpl bomAllChildList = this.getBomTree(parent.getRowId()); + + //检查-有子级的物料,编码不能为空 + List noMaterialDrawing = bomAllChildList.stream().filter(u -> u.getBomRowId() > 0 && StrUtil.isBlank(u.getMaterialNo())).map(u -> u.getDrawingNo()).collect(Collectors.toList()); + VUtils.isTure(CollUtil.isNotEmpty(noMaterialDrawing)).throwMessage(StrUtil.join(",", noMaterialDrawing)+" 请维护物料编码"); BomOriginalListVO parentVO = Convert.convert(BomOriginalListVO.class, parent); parentVO.setEBomRowId(eBomRowId); @@ -435,7 +519,7 @@ public class BomNewOriginalParentService extends ServiceImpl noMaterialNoList = excelContext.stream().filter(u -> StrUtil.isBlank(u.getMaterialNo())).collect(Collectors.toList()); - materialMainService.initMaterialForDrawdingNo(noMaterialNoList,BomNewOriginalExcelDTO::getChartNo,BomNewOriginalExcelDTO::setMaterialNo,BomNewOriginalExcelDTO::setMaterialName); + materialMainService.initMaterialForDrawdingNo(noMaterialNoList, BomNewOriginalExcelDTO::getChartNo, BomNewOriginalExcelDTO::setMaterialNo, BomNewOriginalExcelDTO::setMaterialName); //转换 for (BomNewOriginalExcelDTO data : excelContext) { diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/MaterialService.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/MaterialService.java index e2147d68..942ae9a1 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/MaterialService.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/MaterialService.java @@ -185,6 +185,7 @@ public class MaterialService { ma.setMaterialClass(0); ma.setProcessState(0); ma.setApplyUserCode(SessionUtil.getRealName()); + ma.setMaterialUnit("PC"); resultList.add(ma); AddMaterialMainDTO ent=new AddMaterialMainDTO(); diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/util/OriginalCTreeUtils.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/util/OriginalCTreeUtils.java new file mode 100644 index 00000000..aa5b3919 --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/util/OriginalCTreeUtils.java @@ -0,0 +1,126 @@ +package com.nflg.product.bomnew.util; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import com.nflg.product.bomnew.pojo.vo.BomNewEbomParentVO; +import com.nflg.product.bomnew.pojo.vo.BomOriginalListVO; + +import javax.validation.constraints.NotNull; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** +* +* @author 大米 +* @date 2023/11/18 16:19 +*/ +public class OriginalCTreeUtils { + + + /** + * + * + * @param dataList 数据 + * @param keyFun id + * @param parentKeyFun 父级id + * @param rootKey 顶层的 id 值 ,比如部门树的顶层id是0 + */ + public static List toTree(K rootKey, + Collection dataList, + @NotNull Function parentKeyFun, + @NotNull Function keyFun) { + return toFilterTree(rootKey, dataList, parentKeyFun, keyFun, null); + } + + /** + * + * + * @param rootKey 顶层的 id 值 ,比如部门树的顶层id是0 + * @param dataList 数据列 + * @param parentKeyFun 取父级id的方法引用 + * @param keyFun 取子级id的方法引用 + * @param filterNoDataFun 存在这种场景,选人的时候,某个子部门以及父部门下没有下挂任何人员,那么这两个部门直接隐藏,避免对用户造成干扰, + * 这个参数表示部门实体类,人员字段的方法引用 + */ + public static List toFilterTree(K rootKey, + Collection dataList, + @NotNull Function parentKeyFun, + @NotNull Function keyFun, + Function filterNoDataFun) { + if (CollUtil.isEmpty(dataList)) { + return Collections.emptyList(); + } + + // 根据父节点,对列表进行分组 + Map> groupParentKeyMap = dataList.stream().filter(t -> parentKeyFun.apply(t) != null).collect(Collectors.groupingBy(parentKeyFun)); + List rootNodes; + if (rootKey == null) { + rootNodes = dataList.stream().filter(t -> parentKeyFun.apply(t) == null).collect(Collectors.toList()); + } else { + rootNodes = groupParentKeyMap.getOrDefault(rootKey, Collections.emptyList()); + } + + return handlerChildTree(rootNodes, groupParentKeyMap, keyFun, filterNoDataFun); + } + + /** + * 列表转树 + */ + private static List handlerChildTree(Collection rootNodes, Map> groupParentKeyMap, + Function keyFun, Function filterNoDataFun) { + if (CollUtil.isEmpty(rootNodes)) { + return Collections.emptyList(); + } + List nodes = new ArrayList<>(); + for (T t : rootNodes) { + List childNodesData = groupParentKeyMap.getOrDefault(keyFun.apply(t), Collections.emptyList()); + BomOriginalListVO node =new BomOriginalListVO(); + BeanUtil.copyProperties(t,node); + + List treeNodes = handlerChildTree(childNodesData, groupParentKeyMap, keyFun, filterNoDataFun); + if (filterNoDataFun != null && CollUtil.isEmpty(treeNodes)) { + if (skipNoDataNode(filterNoDataFun, t)) { + continue; + } + } + nodes.add(node); + node.setChildNodes(treeNodes); + } + return nodes; + } + + /** + * 判断是否为空数据,如果没有数据则隐藏 + */ + @SuppressWarnings("rawtypes") + private static boolean skipNoDataNode(Function filterNoDataFun, T t) { + D filterData = filterNoDataFun.apply(t); + if (filterData == null) { + return true; + } + if (filterData instanceof Collection) { + Collection filterDataList = (Collection) filterData; + return CollUtil.isEmpty(filterDataList); + } + return false; + } + + /** + * 树转list + */ + public static List toList(List> treeNodeList) { + List resultList = new ArrayList<>(); + for (TreeNode treeNode : treeNodeList) { + if (treeNode == null || treeNode.getData() == null) { + continue; + } + resultList.add(treeNode.getData()); + if (CollUtil.isNotEmpty(treeNode.getChildNodes())) { + resultList.addAll(toList(treeNode.getChildNodes())); + } + } + return resultList; + } +} + diff --git a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewOriginalMaterialUseMapper.xml b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewOriginalMaterialUseMapper.xml new file mode 100644 index 00000000..bfa6a5d4 --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewOriginalMaterialUseMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + row_id, drawing_no, parent_drawing_nos, parent_create_user + + diff --git a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewOriginalParentMapper.xml b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewOriginalParentMapper.xml index a3efb2cf..2c1c7a42 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewOriginalParentMapper.xml +++ b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewOriginalParentMapper.xml @@ -45,24 +45,24 @@ - and status=2 + and status=2 - - and convert_to_ebom_time> DATE_ADD(now(), INTERVAL -3 DAY) - + + and convert_to_ebom_time> DATE_ADD(now(), INTERVAL -3 DAY) + and status=1 - and drawing_no in + and drawing_no in #{drawingNo} - and material_no in + and material_no in #{materialNo} @@ -76,7 +76,7 @@ @@ -96,29 +96,27 @@ #{rowId} - - delete from t_bom_new_original_parent where row_id in - - #{rowId} - ; - delete from t_bom_new_original_child where parent_row_id in - - #{rowId} - ; + delete from t_bom_new_original_parent where row_id in + + #{rowId} + ; + delete from t_bom_new_original_child where parent_row_id in + + #{rowId} + ; - - update t_bom_new_original_parent set status = #{status},edit_status=#{editStatus} where + update t_bom_new_original_parent set status = #{status},edit_status=#{editStatus} where row_id in #{rowId} ; - update t_bom_new_original_child set status = #{status},edit_status=#{editStatus} where + update t_bom_new_original_child set status = #{status},edit_status=#{editStatus} where parent_row_id in #{rowId} @@ -126,12 +124,9 @@ - - - - - update t_bom_new_original_parent set status = #{status},edit_status=#{editStatus}, convert_to_ebom_time=now() where + update t_bom_new_original_parent set status = #{status},edit_status=#{editStatus}, convert_to_ebom_time=now() + where row_id in #{rowId} @@ -145,26 +140,86 @@ - - update t_bom_new_original_parent set root_is=0,user_root_is=0 where last_version_is=1 - + update t_bom_new_original_parent + set root_is=0, + user_root_is=0 + where last_version_is = 1 - update t_bom_new_original_parent a join ( - select a.row_id from t_bom_new_original_parent a + update t_bom_new_original_parent a join ( + select a.row_id from t_bom_new_original_parent a left join t_bom_new_original_child b on a.drawing_no=b.drawing_no - where a.last_version_is=1 and b.row_id is null ) t on a.row_id=t.row_id set a.root_is=1 + where a.last_version_is=1 and b.row_id is null ) t + on a.row_id=t.row_id set a.root_is=1 - update t_bom_new_original_parent a join ( - select a.row_id from t_bom_new_original_parent a + update t_bom_new_original_parent a join ( + select a.row_id from t_bom_new_original_parent a left join t_bom_new_original_child b - on a.drawing_no=b.drawing_no and a.created_by=b.created_by - where a.last_version_is=1 and b.row_id is null ) t on a.row_id=t.row_id set a.user_root_is=1 + on a.drawing_no=b.drawing_no and a.created_by=b.created_by + where a.last_version_is=1 and b.row_id is null ) t + on a.row_id=t.row_id set a.user_root_is=1 + + SET @@global.group_concat_max_len=804800; + truncate table t_bom_new_original_material_use; + INSERT INTO `t_bom_new_original_material_use` (`row_id`, `drawing_no`, `parent_drawing_nos`) + + select min(b.row_id) rowId, b.drawing_no, GROUP_CONCAt(distinct a.drawing_no) as value_list + from t_bom_new_original_parent a + join t_bom_new_original_child b on a.row_id = b.parent_row_id and a.last_version_is = 1 + group by b.drawing_no; + + + + + + + + +