From 5fdbceff472617497f27034350ca4379065666e3 Mon Sep 17 00:00:00 2001 From: 10002327 Date: Fri, 30 Aug 2024 18:02:35 +0800 Subject: [PATCH] =?UTF-8?q?PBOM=E5=BA=93=E5=AD=98=E5=9C=B0=E7=82=B9?= =?UTF-8?q?=E3=80=81ebom=E6=8E=92=E5=BA=8F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nflg/product/bomnew/api/user/EbomApi.java | 13 +++++ .../nflg/product/bomnew/api/user/PBomApi.java | 54 ++++++++++++++++++- .../bomnew/pojo/vo/BomNewPbomParentVO.java | 3 +- ...enerateVirtualPackageServiceFor31Impl.java | 15 ++++++ .../service/BomNewPbomParentService.java | 22 ++++++++ .../product/bomnew/service/SapService.java | 32 +++++++++++ 6 files changed, 137 insertions(+), 2 deletions(-) diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/EbomApi.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/EbomApi.java index 0866466d..f08f2dbc 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/EbomApi.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/EbomApi.java @@ -1,7 +1,9 @@ package com.nflg.product.bomnew.api.user; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.collection.ListUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.EnumUtil; @@ -10,6 +12,7 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.google.common.collect.ImmutableList; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.mzt.logapi.starter.annotation.LogRecord; import com.nflg.product.base.core.api.BaseApi; @@ -411,6 +414,16 @@ public class EbomApi extends BaseApi { checkDeleteRule(dto); bomNewEbomParentService.deleteBomChild(dto.getDelDatas(), dto.getParent()); + //修改排序号的值,按照物料编码升序 by 10002327 0830 + if(CollectionUtil.isNotEmpty(dto.getDatas())){ + List copyList = ListUtil.toCopyOnWriteArrayList(dto.getDatas()); + List sortedList = copyList.stream().sorted(Comparator.comparing(BaseMaterialVO::getMaterialNo)).collect(Collectors.toList()); + Map materialMap = sortedList.stream().collect(Collectors.toMap(BaseMaterialVO::getMaterialNo,bom -> { + int idx = sortedList.indexOf(bom); + return StrUtil.padPre(String.valueOf(idx + 1),3,'0'); + },(k1,k2)->k1)); + dto.getDatas().forEach(bom -> bom.setOrderNumber(materialMap.getOrDefault(bom.getMaterialNo(),bom.getOrderNumber()))); + } BomNewEbomParentVO temporary = bomNewEbomParentService.temporary(dto); return ResultVO.success(temporary); diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/PBomApi.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/PBomApi.java index 1c55aa50..3c79e1f0 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/PBomApi.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/PBomApi.java @@ -1,6 +1,7 @@ package com.nflg.product.bomnew.api.user; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; @@ -25,6 +26,7 @@ import com.nflg.product.bomnew.util.VUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import nflg.product.common.vo.ResultVO; +import org.apache.commons.compress.utils.Lists; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; @@ -38,6 +40,8 @@ import java.util.List; import java.util.Map; import java.util.Objects; import java.util.concurrent.ExecutionException; +import java.util.function.Consumer; +import java.util.stream.Collectors; /** * t_bom_new_pbom_parent 表控制层 @@ -67,13 +71,61 @@ public class PBomApi extends BaseApi { @Resource private MaterialMainService materialMainService; + @Resource + SapService sapService; @PostMapping("workDetailsListByPage") @ApiOperation("PBom工作列表") public ResultVO> workDetailsListByPage(@RequestBody BomNewPbomParentQuery query) { - return ResultVO.success(bomNewPbomParentService.workDetailsListByPage(query)); + IPage r = bomNewPbomParentService.workDetailsListByPage(query); + //添加仓库地点 by 10002327 0830 + if(!r.getRecords().isEmpty()){ + List materialNoList = Lists.newArrayList(); + List facList = Lists.newArrayList(); + +// r.getRecords().forEach(bom -> { +// materialNoList.add(bom.getMaterialNo()); +// facList.add(bom.getFacCode()); +// if(CollectionUtil.isNotEmpty(bom.getChildNodes())){ +// materialNoList.addAll(bom.getChildNodes().stream().map(BaseMaterialVO::getMaterialNo).collect(Collectors.toList())); +// facList.addAll(bom.getChildNodes().stream().map(BomNewPbomParentVO::getFacCode).collect(Collectors.toList())); +// } +// }); + this.get(r.getRecords(),materialNoList,facList); + List> lgproList = sapService.lgproByList(materialNoList,facList); + Map lgproMap = lgproList.stream().collect(Collectors.toMap(m-> { + return String.valueOf(m.get("MATNR")) + String.valueOf(m.get("WERKS")); + },m->String.valueOf(m.get("LGPRO")),(k1,k2)->k1)); + this.set(r.getRecords(),lgproMap); +// r.getRecords().forEach(re -> { +// re.setLgpro(lgproMap.get(StrUtil.padPre(re.getMaterialNo(),18,"0") +re.getFacCode())); +// if(CollectionUtil.isNotEmpty(re.getChildNodes())){ +// re.getChildNodes().forEach(cn -> cn.setLgpro(lgproMap.get(StrUtil.padPre(cn.getMaterialNo(),18,"0") +cn.getFacCode()))); +// } +// }); + + } + return ResultVO.success(r); } + private void get(List list,List materialNoList,List facList){ + list.forEach(l -> { + if(CollectionUtil.isNotEmpty(l.getChildNodes())){ + get(l.getChildNodes(),materialNoList,facList); + } + materialNoList.add(l.getMaterialNo()); + facList.add(l.getFacCode()); + }); + } + + private void set(List list,Map lgproMap){ + list.forEach(l -> { + if(CollectionUtil.isNotEmpty(l.getChildNodes())){ + set(l.getChildNodes(),lgproMap); + } + l.setLgpro(lgproMap.get(StrUtil.padPre(l.getMaterialNo(),18,"0") + l.getFacCode())); + }); + } @PostMapping("releaseListByPage") diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewPbomParentVO.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewPbomParentVO.java index d9497e22..8362e825 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewPbomParentVO.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewPbomParentVO.java @@ -314,7 +314,8 @@ public class BomNewPbomParentVO extends BaseMaterialVO implements Serializable { @ApiModelProperty("原始项目类别") private String originalProjectType; - + @ApiModelProperty("生产仓储地点") + private String lgpro; private String materialNoAndProjectType; diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomGenerateVirtualPackageServiceFor31Impl.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomGenerateVirtualPackageServiceFor31Impl.java index 23d0f936..393c1031 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomGenerateVirtualPackageServiceFor31Impl.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomGenerateVirtualPackageServiceFor31Impl.java @@ -6,6 +6,8 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.extra.spring.SpringUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import com.nflg.product.base.core.conmon.util.SessionUtil; import com.nflg.product.base.core.exception.NflgBusinessException; import com.nflg.product.bomnew.client.MaterialMainClient; @@ -190,6 +192,19 @@ public class BomNewEbomGenerateVirtualPackageServiceFor31Impl implements IBomNew private void save() { TransactionDefinition def = new DefaultTransactionDefinition(); TransactionStatus status = transactionManager.getTransaction(def); + if(CollUtil.isNotEmpty(childrenForAdd)){ + //按 "(发货)","(制作)","(直发)","(发货前装配)" 放在同一个组内排序 by 10002327 0830 + Map> chMap = childrenForAdd.stream().collect(Collectors.groupingBy(c -> { + return c.getDrawingNo().replaceAll("\\(发货\\)|\\(制作\\)|\\(直发\\)|\\(发货前装配\\)",""); + })); + //对map的值,进行排序 + List>> mpList = new ArrayList<>(chMap.entrySet()); + mpList.sort(Map.Entry.comparingByValue((c1,c2) -> Optional.ofNullable(c1).map(l->l.get(0)).map(BomNewEbomChildEntity::getOrderNumber).orElse("") + .compareTo(Optional.of(c2).map(l->l.get(0)).map(BomNewEbomChildEntity::getOrderNumber).orElse("")))); + childrenForAdd.removeAll(childrenForAdd); + mpList.forEach(m -> childrenForAdd.addAll(m.getValue())); + } + try { getMaterialNoForAdd(); if (CollUtil.isNotEmpty(childRowIdsForDel)) { diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewPbomParentService.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewPbomParentService.java index ae9bab04..f0092424 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewPbomParentService.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewPbomParentService.java @@ -119,6 +119,8 @@ public class BomNewPbomParentService extends ServiceImpl(query.getPage(), query.getPageSize()), query); } + //添加仓库地点 by 10002327 0830 + if(!result.getRecords().isEmpty()){ + List> lgproList = sapService.lgproByList(result.getRecords().stream().map(BaseMaterialVO::getMaterialNo).distinct().collect(Collectors.toList()), + result.getRecords().stream().map(BomNewPbomParentVO::getFacCode).distinct().collect(Collectors.toList())); + Map lgproMap = lgproList.stream().collect(Collectors.toMap(m-> { + return String.valueOf(m.get("MATNR")) + String.valueOf(m.get("WERKS")); + },m->String.valueOf(m.get("LGPRO")),(k1,k2)->k1)); + result.getRecords().forEach(r -> r.setLgpro(lgproMap.get(StrUtil.padPre(r.getMaterialNo(),18,"0") +r.getFacCode()))); + } materialMainService.intiMaterialInfo(result.getRecords(), EBomConstant.EBOM_IGNORED_FIELDS_INIT_MATERIAL_DEFAULT); return result; } @@ -400,6 +411,17 @@ public class BomNewPbomParentService extends ServiceImpl> lgproList = sapService.lgproByList(parentChild.stream().map(BaseMaterialVO::getMaterialNo).distinct().collect(Collectors.toList()), + parentChild.stream().map(BomNewPbomParentVO::getFacCode).distinct().collect(Collectors.toList())); + Map lgproMap = lgproList.stream().collect(Collectors.toMap(m-> { + return String.valueOf(m.get("MATNR")) + String.valueOf(m.get("WERKS")); + },m->String.valueOf(m.get("LGPRO")),(k1,k2)->k1)); + parentChild.forEach(r -> r.setLgpro(lgproMap.get(StrUtil.padPre(r.getMaterialNo(),18,"0") +r.getFacCode()))); + } + //主数据初始化 materialMainService.intiMaterialInfo(parentChild, EBomConstant.EBOM_IGNORED_FIELDS_INIT_MATERIAL_DEFAULT3); return parentChild; diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/SapService.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/SapService.java index da21bb70..1ffb0461 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/SapService.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/SapService.java @@ -1,5 +1,7 @@ package com.nflg.product.bomnew.service; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import com.nflg.product.bomnew.pojo.dto.sap.SapReqParams; import com.nflg.product.bomnew.pojo.dto.sap.SapResult; import com.sap.conn.jco.*; @@ -14,6 +16,7 @@ import org.springframework.stereotype.Service; import java.io.File; import java.io.FileOutputStream; import java.util.*; +import java.util.stream.Collectors; /** * sap服務 @@ -300,4 +303,33 @@ public class SapService implements ApplicationContextAware { public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { initProperties(); } + + /** + * 获取物料库存地点 + * @param materialNoList 物料编码集合 + * @param facList 工厂集合 + * @return + */ + public List> lgproByList(List materialNoList,List facList){ + SapReqParams params = new SapReqParams(); + // 接口名 + params.setFunName("ZMDM_MM_MAT_LOCTION_SYNC"); + Map>> inputTables = Maps.newHashMap(); + List> materList = materialNoList.stream().map(m -> { + Map mp = Maps.newHashMap(); + mp.put("MATNR",m); + return mp; + }).collect(Collectors.toList()); + List> werksList = facList.stream().map(m -> { + Map mp = Maps.newHashMap(); + mp.put("WERKS",m); + return mp; + }).collect(Collectors.toList()); + inputTables.put("IT_MATNR",materList); + inputTables.put("IT_WERKS",werksList); + params.setInputTables(inputTables); + SapResult sapResult = doSapFun(params); + Map>> outTablesMap = sapResult.getOutTablesMap(); + return outTablesMap.get("OUTPUT"); + } }