diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/DQBomApi.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/DQBomApi.java index 1208a21e..efad7653 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/DQBomApi.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/DQBomApi.java @@ -7,16 +7,15 @@ import com.google.common.collect.ImmutableList; import com.mzt.logapi.context.LogRecordContext; import com.mzt.logapi.starter.annotation.LogRecord; import com.nflg.product.base.core.api.BaseApi; +import com.nflg.product.bomnew.pojo.query.BomExceptionQuery; import com.nflg.product.bomnew.pojo.query.BomNewDQbomPageQuery; import com.nflg.product.bomnew.pojo.query.BomNewDQbomQuery; import com.nflg.product.bomnew.pojo.query.BomNewDQbomSaveQuery; -import com.nflg.product.bomnew.pojo.vo.BomDQbomEditDetailVO; -import com.nflg.product.bomnew.pojo.vo.BomNewDQbomVO; -import com.nflg.product.bomnew.pojo.vo.DQbomExcelVO; -import com.nflg.product.bomnew.pojo.vo.OperationErrorMsgVO; +import com.nflg.product.bomnew.pojo.vo.*; import com.nflg.product.bomnew.service.DQBomImportService; import com.nflg.product.bomnew.service.DQBomService; import com.nflg.product.bomnew.util.EecExcelUtil; +import com.nflg.product.bomnew.util.VUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import nflg.product.common.vo.ResultVO; @@ -141,7 +140,7 @@ public class DQBomApi extends BaseApi { @PostMapping("checkException") @ApiOperation("异常检查") public ResultVO checkException(@Valid @RequestBody @NotEmpty List bomRowIds) { - dQBomService.checkException(bomRowIds.get(0)); + bomRowIds.forEach(dQBomService::checkException); return ResultVO.success(); } @@ -153,7 +152,7 @@ public class DQBomApi extends BaseApi { @PostMapping("deleteBom") @ApiOperation("删除bom") public ResultVO deleteBom(@Valid @RequestBody @NotEmpty List rootBomRowIds) { - dQBomService.deleteBom(rootBomRowIds.get(0)); + rootBomRowIds.forEach(dQBomService::deleteBom); return ResultVO.success(); } @@ -165,6 +164,7 @@ public class DQBomApi extends BaseApi { @PostMapping("exportBom") @ApiOperation("导出bom") public void exportBom(@Valid @RequestBody @NotEmpty List rootBomRowIds, HttpServletResponse response) throws IOException { + VUtils.isTure(rootBomRowIds.size() > 1).throwMessage("每次只能导出1条"); List data = dQBomService.exportBom(rootBomRowIds.get(0)); EecExcelUtil.export(response, data, DQbomExcelVO.class, "电气专用bom"); } @@ -177,7 +177,7 @@ public class DQBomApi extends BaseApi { @PostMapping("convertToPbom") @ApiOperation("生成pbom") public ResultVO convertToPbom(@Valid @RequestBody @NotEmpty List rootBomRowIds) { - dQBomService.convertToPbom(rootBomRowIds.get(0)); + rootBomRowIds.forEach(dQBomService::convertToPbom); return ResultVO.success(); } @@ -213,6 +213,7 @@ public class DQBomApi extends BaseApi { @PostMapping("importToSAP") @ApiOperation("导入到SAP") public ResultVO importToSAP(@Valid @RequestBody @NotEmpty List rootBomRowIds) { + VUtils.isTure(rootBomRowIds.size() > 1).throwMessage("每次只能导入1条"); return dQBomService.importToSAP(rootBomRowIds.get(0)); } @@ -227,4 +228,15 @@ public class DQBomApi extends BaseApi { public ResultVO editDetail(@Valid @RequestParam("rowId") @NotNull Long rowId, @Valid @RequestParam("bomRowId") @NotNull Long bomRowId) { return ResultVO.success(dQBomService.editDetail(rowId, bomRowId)); } + + /** + * 获取节点异常状态 + * @param query query + * @return 节点异常状态 + */ + @PostMapping("getBomException") + @ApiOperation("获取节点异常状态") + public ResultVO> getBomException(@Valid @RequestBody @NotEmpty List query) { + return ResultVO.success(dQBomService.getBomException(query)); + } } 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 1780e572..d9c5fcc3 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 @@ -31,6 +31,8 @@ import org.ttzero.excel.entity.Workbook; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import javax.validation.constraints.NotEmpty; import java.io.IOException; import java.util.List; import java.util.Objects; @@ -450,5 +452,15 @@ public class EbomApi extends BaseApi { return ResultVO.success(); } - + /** + * 导入到SAP + * @param rootBomRowIds 顶级bom的rowId + * @return + */ + @PostMapping("importToSAP") + @ApiOperation("导入到SAP") + public ResultVO importToSAP(@Valid @RequestBody @NotEmpty List rootBomRowIds) { + VUtils.isTure(rootBomRowIds.size() > 1).throwMessage("每次只能导入1条"); + return bomNewEbomParentService.importToSAP(rootBomRowIds.get(0)); + } } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/BomNewEbomParentEntity.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/BomNewEbomParentEntity.java index 68c9abf4..ece90393 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/BomNewEbomParentEntity.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/BomNewEbomParentEntity.java @@ -1,19 +1,17 @@ package com.nflg.product.bomnew.pojo.entity; -import java.math.BigDecimal; -import java.time.LocalDateTime; - -import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; - -import java.io.Serializable; - import lombok.Data; import lombok.experimental.Accessors; +import java.io.Serializable; +import java.math.BigDecimal; import java.time.LocalDateTime; -import java.time.LocalDate; /** * t_bom_new_ebom_parent @@ -365,5 +363,19 @@ public class BomNewEbomParentEntity implements Serializable { @ApiModelProperty(value = "待复核根节点") private Integer rootIsForWaitReview; + /** + * 导入SAP状态,1-未导入;3-已导入 + */ + @TableField(value = "sap_state") + @ApiModelProperty(value = "导入SAP状态,1-未导入;3-已导入") + private Integer sapState; + + /** + * 导入SAP时间 + */ + @TableField(value = "sap_time") + @ApiModelProperty(value = "导入SAP时间") + private LocalDateTime sapTime; + private static final long serialVersionUID = 265246823929418418L; } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/query/BomExceptionQuery.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/query/BomExceptionQuery.java new file mode 100644 index 00000000..85a9bd8a --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/query/BomExceptionQuery.java @@ -0,0 +1,33 @@ +package com.nflg.product.bomnew.pojo.query; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * @author 曹鹏飞 + * @date 2024/4/24 14:24:21 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "com-nflg-product-bomnew-pojo-new-query-BomExceptionQuery") +public class BomExceptionQuery implements Serializable { + + /** + * bomRowId + */ + @ApiModelProperty(value = "bomRowId", required = true) + @NotNull + protected Long bomRowId; + + /** + * rowId + */ + @ApiModelProperty(value = "rowId", required = true) + @NotNull + protected Long rowId; +} diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomExceptionVO.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomExceptionVO.java new file mode 100644 index 00000000..f57001f2 --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomExceptionVO.java @@ -0,0 +1,43 @@ +package com.nflg.product.bomnew.pojo.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * @author 曹鹏飞 + * @date 2024/4/24 13:32:57 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "com-nflg-product-bomnew-pojo-new-vo-BomExceptionVO") +public class BomExceptionVO implements Serializable { + + /** + * bom行编号 + */ + @ApiModelProperty(value = "bom行编号") + public Long bomRowId; + + /** + * rowId + */ + @ApiModelProperty(value = "rowId") + public Long rowId; + + /** + * 物料编码 + */ + @ApiModelProperty(value = "物料编码") + public String materialNo; + + /** + * 异常状态 + * @see com.nflg.product.bomnew.constant.EBomExceptionStatusEnum + */ + @ApiModelProperty(value = "异常状态") + private Integer exceptionStatus = -1; +} diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewDQbomVO.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewDQbomVO.java index d5d83c73..202f7210 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewDQbomVO.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewDQbomVO.java @@ -1,7 +1,6 @@ package com.nflg.product.bomnew.pojo.vo; import cn.hutool.core.util.StrUtil; -import com.nflg.product.bomnew.constant.BomConstant; import com.nflg.product.bomnew.pojo.entity.BomNewDQbomChildEntity; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -116,7 +115,7 @@ public class BomNewDQbomVO extends BomNewDQbomChildEntity implements Serializabl private String drawingNoDesc; public String getDrawingNoDesc() { - if (StrUtil.isNotBlank(getDrawingNo()) && getDrawingNo().startsWith(BomConstant.NO_TEMPORARY_PREFIX)) { + if (StrUtil.equals(getProjectType(), "T")) { return ""; } return getDrawingNo(); @@ -129,7 +128,7 @@ public class BomNewDQbomVO extends BomNewDQbomChildEntity implements Serializabl private String materialNoDesc; public String getMaterialNoDesc() { - if (StrUtil.isNotBlank(getMaterialNo()) && getMaterialNo().startsWith(BomConstant.NO_TEMPORARY_PREFIX)) { + if (StrUtil.equals(getProjectType(), "T")) { return ""; } return getMaterialNo(); diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewDQbomExceptionCheckService.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewDQbomExceptionCheckService.java index 14bd07eb..b33834aa 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewDQbomExceptionCheckService.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewDQbomExceptionCheckService.java @@ -3,7 +3,6 @@ package com.nflg.product.bomnew.service; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; -import com.nflg.product.bomnew.constant.BomConstant; import com.nflg.product.bomnew.constant.EBomExceptionStatusEnum; import com.nflg.product.bomnew.constant.MaterialGetEnum; import com.nflg.product.bomnew.pojo.entity.BomNewDQbomChildEntity; @@ -125,18 +124,19 @@ public class BomNewDQbomExceptionCheckService { EBomExceptionStatusEnum status = EBomExceptionStatusEnum.OK; if (parent.getRootIs() == 1 || parent.getUserRootIs() == 1) { if ("T".equals(parent.getProjectType())) { - parent.setExceptionStatus(EBomExceptionStatusEnum.OK.getValue()); - } else if (parent.getMaterialNo().startsWith(BomConstant.NO_TEMPORARY_PREFIX)) { - status = EBomExceptionStatusEnum.EXCEPT_NO_4; + if (StrUtil.isBlank(parent.getMaterialName())) { + status = EBomExceptionStatusEnum.EXCEPT_NO_4; + } } else { - BaseMaterialVO materialVO = materialVOS.stream().filter(v -> v.getMaterialNo().equals(parent.getMaterialNo())) + BaseMaterialVO materialVO = materialVOS.stream() + .filter(v -> v.getMaterialNo().equals(parent.getMaterialNo())) .findFirst() .orElse(null); if (materialVO == null) { status = EBomExceptionStatusEnum.EXCEPT_NO_7; } else if (materialVO.getMaterialState().equals(MaterialGetEnum.MaterialStateEnum.STATE_NO_4.getValue())) { status = EBomExceptionStatusEnum.EXCEPT_NO_2; - } else if (!materialVO.getMaterialName().equals(parent.getMaterialName())) { + } else if (!materialVO.getMaterialDesc().equals(parent.getMaterialName())) { status = EBomExceptionStatusEnum.EXCEPT_NO_15; } else if (Objects.isNull(parent.getNum()) || parent.getNum().equals(BigDecimal.ZERO)) { status = EBomExceptionStatusEnum.EXCEPT_NO_4; @@ -163,9 +163,11 @@ public class BomNewDQbomExceptionCheckService { private void checkChild(BomNewDQbomChildEntity child) { EBomExceptionStatusEnum status = EBomExceptionStatusEnum.OK; if ("T".equals(child.getProjectType())) { - child.setExceptionStatus(EBomExceptionStatusEnum.OK.getValue()); - } else if (child.getMaterialNo().startsWith(BomConstant.NO_TEMPORARY_PREFIX)) { - status = EBomExceptionStatusEnum.EXCEPT_NO_4; + if (StrUtil.isBlank(child.getMaterialName())) { + status = EBomExceptionStatusEnum.EXCEPT_NO_4; + } + // } else if (child.getMaterialNo().startsWith(BomConstant.NO_TEMPORARY_PREFIX)) { + // status = EBomExceptionStatusEnum.EXCEPT_NO_4; } else { BaseMaterialVO materialVO = materialVOS.stream().filter(v -> v.getMaterialNo().equals(child.getMaterialNo())) .findFirst() @@ -174,7 +176,7 @@ public class BomNewDQbomExceptionCheckService { status = EBomExceptionStatusEnum.EXCEPT_NO_7; } else if (materialVO.getMaterialState().equals(MaterialGetEnum.MaterialStateEnum.STATE_NO_4.getValue())) { status = EBomExceptionStatusEnum.EXCEPT_NO_2; - } else if (!materialVO.getMaterialName().equals(child.getMaterialName())) { + } else if (!materialVO.getMaterialDesc().equals(child.getMaterialName())) { status = EBomExceptionStatusEnum.EXCEPT_NO_15; } else if (Objects.isNull(child.getNum()) || child.getNum().equals(BigDecimal.ZERO)) { status = EBomExceptionStatusEnum.EXCEPT_NO_4; diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomParentService.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomParentService.java index 3b89df67..8d57df1c 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomParentService.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomParentService.java @@ -4,11 +4,10 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.convert.Convert; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.lang.TypeReference; -import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.NumberUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; +import cn.hutool.core.util.*; import cn.hutool.extra.spring.SpringUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -23,6 +22,8 @@ import com.nflg.product.base.core.exception.NflgBusinessException; import com.nflg.product.bomnew.constant.*; import com.nflg.product.bomnew.mapper.master.BomNewEbomParentMapper; import com.nflg.product.bomnew.pojo.dto.*; +import com.nflg.product.bomnew.pojo.dto.sap.impart2.ImportSapParamDTO; +import com.nflg.product.bomnew.pojo.dto.sap.impart2.T1DTO; import com.nflg.product.bomnew.pojo.entity.*; import com.nflg.product.bomnew.pojo.query.BomNewEbomMaterialQuery; import com.nflg.product.bomnew.pojo.query.BomNewEbomParentQuery; @@ -46,6 +47,7 @@ import java.io.OutputStream; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.*; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.ForkJoinTask; @@ -626,14 +628,14 @@ public class BomNewEbomParentService extends ServiceImpl list, List unCheckList) { - CheckEBomException checkEBomException = new CheckEBomException(list); - checkEBomException.setUnCheckExcept(unCheckList); - checkEBomException.checkException(); - - //保存异常 - saveException(checkEBomException); - } + // public void checkBomException(List list, List unCheckList) { + // CheckEBomException checkEBomException = new CheckEBomException(list); + // checkEBomException.setUnCheckExcept(unCheckList); + // checkEBomException.checkException(); + // + // //保存异常 + // saveException(checkEBomException); + // } /** @@ -919,6 +921,69 @@ public class BomNewEbomParentService extends ServiceImpl { + importToSAP(bomRowId); + }); + } + } + + public ResultVO importToSAP(Long bomRowId) { + BomNewEbomParentEntity root = this.getById(bomRowId); + VUtils.isTure(Objects.isNull(root)).throwMessage("数据不存在"); + VUtils.isTure(root.getRootIs() != 1).throwMessage("请选择根节点"); + + ImportSapParamDTO sapDto = new ImportSapParamDTO(); + sapDto.setZID(RandomUtil.randomNumbers(5)); + sapDto.setI_WERKS(FactoryCodeEnum.FACTORY_1010.getValue()); + sapDto.setI_STLAN("2"); + String dateYMD = DateUtil.format(new Date(), "yyyyMMdd"); + List t1s = new ArrayList<>(); + T1DTO troot = new T1DTO(); + troot.setID(RandomUtil.randomNumbers(5)); + troot.setMATNR(""); + troot.setIDNRK(root.getMaterialNo()); + troot.setMEINS(root.getMaterialUnit()); + troot.setMENGE("1"); + troot.setPOSTP(""); + troot.setDATUM(dateYMD); + t1s.add(troot); + buildChildrenForSap(root, t1s); + sapDto.setT1(t1s); + ResultVO resultVO = SpringUtil.getBean(SapOpUtilService.class).importToSapV2(sapDto, null); + if (resultVO.getState().equals(STATE.Success.getState())) { + BomNewEbomParentEntity parentEntity = new BomNewEbomParentEntity(); + parentEntity.setRowId(bomRowId); + parentEntity.setSapState(MBomConstantEnum.MBomStatusEnum.PUB_SAP.getValue()); + parentEntity.setSapTime(LocalDateTimeUtil.now()); + updateById(parentEntity); + } + return resultVO; + } + + private void buildChildrenForSap(BomNewEbomParentEntity parent, List t1s) { + List children = ebomChildService.lambdaQuery() + .eq(BomNewEbomChildEntity::getParentRowId, parent.getRowId()) + .list(); + if (CollUtil.isNotEmpty(children)) { + String dateYMD = DateUtil.format(new Date(), "yyyyMMdd"); + children.forEach(c -> { + T1DTO t1 = new T1DTO(); + t1.setID(RandomUtil.randomNumbers(5)); + t1.setMATNR(parent.getMaterialNo()); + t1.setIDNRK(c.getMaterialNo()); + t1.setMEINS(c.getMaterialUnit()); + t1.setMENGE(c.getNum().toString()); + t1.setPOSTP(c.getProjectType()); + t1.setDATUM(dateYMD); + t1s.add(t1); + BomNewEbomParentEntity cp = lambdaQuery() + .eq(BomNewEbomParentEntity::getMaterialNo, c.getMaterialNo()) + .eq(BomNewEbomParentEntity::getStatus, EBomStatusEnum.PUBLISHED.getValue()) + .one(); + if (!Objects.isNull(cp)) { + buildChildrenForSap(cp, t1s); + } + }); } } @@ -1681,10 +1746,10 @@ public class BomNewEbomParentService extends ServiceImpl rowIds = eBomDel.getRevertOBom().stream().map(BomNewEbomParentVO::getSourceRowId).collect(Collectors.toList()); - SpringUtil.getBean(BomNewOriginalParentService.class).revertBom(rowIds); - } + // if (CollectionUtil.isNotEmpty(eBomDel.getRevertOBom())) { + // List rowIds = eBomDel.getRevertOBom().stream().map(BomNewEbomParentVO::getSourceRowId).collect(Collectors.toList()); + // SpringUtil.getBean(BomNewOriginalParentService.class).revertBom(rowIds); + // } if (CollectionUtil.isNotEmpty(eBomDel.getDelEBom())) { diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/DQBomImportService.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/DQBomImportService.java index 76f9b2a2..39bce886 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/DQBomImportService.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/DQBomImportService.java @@ -2,6 +2,7 @@ package com.nflg.product.bomnew.service; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.toolkit.IdWorker; @@ -138,7 +139,7 @@ public class DQBomImportService { //BomNewDQbomParentEntity oldParent = dQBomParentService.getLatestByMaterialNo(parent.getMaterialNo()); boolean isSame = true; if (Objects.isNull(oldParent)) { - return isSame; + return false; } isSame = Objects.equals(parent.getMaterialUnit(), oldParent.getMaterialUnit()) && NumberUtil.equals(parent.getNum(), oldParent.getNum()) @@ -176,14 +177,14 @@ public class DQBomImportService { log.debug("checkInconsistentData,entity:" + JsonUtil.toJson(child)); List oldChildren = dQBomChildService.getBom(parentRowId, child.getMaterialNo()); boolean isSame = true; - if (CollUtil.isEmpty(oldChildren)) return isSame; + if (CollUtil.isEmpty(oldChildren)) return false; BomNewDQbomVO oldChild; if (oldChildren.size() == 1) { oldChild = oldChildren.get(0); } else { oldChild = oldChildren.stream().filter(c -> Objects.equals(c.getOrderNumber(), child.getOrderNumber())).findFirst().orElse(null); if (Objects.isNull(oldChild)) { - return isSame; + return false; } } isSame = Objects.equals(child.getMaterialUnit(), oldChild.getMaterialUnit()) @@ -364,7 +365,7 @@ public class DQBomImportService { dQbomExcelVO.setRowNum(rowNum.get()); if (dQbomExcelVO.getProjectType().equals("T")) { - long id = System.currentTimeMillis(); + String id = RandomUtil.randomNumbers(9); dQbomExcelVO.setMaterialNo(BomConstant.NO_TEMPORARY_PREFIX + id); dQbomExcelVO.setDrawingNo(BomConstant.NO_TEMPORARY_PREFIX + id); if (StrUtil.isBlank(dQbomExcelVO.getMaterialUnit())) { @@ -374,6 +375,10 @@ public class DQBomImportService { dQbomExcelVO.setNum(BigDecimal.ONE); } } + if (StrUtil.equals(dQbomExcelVO.getMaterialNo(), "9000000000")) { + dQbomExcelVO.setProjectType("T"); + } + dQbomExcelVO.setCurrentVersion(""); excelContextTL.get().add(dQbomExcelVO); } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/DQBomService.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/DQBomService.java index 1f01f992..71fcd35d 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/DQBomService.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/DQBomService.java @@ -1,6 +1,5 @@ package com.nflg.product.bomnew.service; -import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DateUtil; @@ -12,7 +11,6 @@ import cn.hutool.extra.spring.SpringUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.google.common.collect.Sets; import com.nflg.product.base.core.conmon.util.SessionUtil; import com.nflg.product.bomnew.constant.*; import com.nflg.product.bomnew.pojo.dto.sap.impart2.ImportSapParamDTO; @@ -21,13 +19,11 @@ import com.nflg.product.bomnew.pojo.entity.BomNewDQbomChildEntity; import com.nflg.product.bomnew.pojo.entity.BomNewDQbomParentEntity; import com.nflg.product.bomnew.pojo.entity.BomNewPbomChildEntity; import com.nflg.product.bomnew.pojo.entity.BomNewPbomParentEntity; +import com.nflg.product.bomnew.pojo.query.BomExceptionQuery; import com.nflg.product.bomnew.pojo.query.BomNewDQbomPageQuery; import com.nflg.product.bomnew.pojo.query.BomNewDQbomQuery; import com.nflg.product.bomnew.pojo.query.BomNewDQbomSaveQuery; -import com.nflg.product.bomnew.pojo.vo.BaseMaterialVO; -import com.nflg.product.bomnew.pojo.vo.BomDQbomEditDetailVO; -import com.nflg.product.bomnew.pojo.vo.BomNewDQbomVO; -import com.nflg.product.bomnew.pojo.vo.DQbomExcelVO; +import com.nflg.product.bomnew.pojo.vo.*; import com.nflg.product.bomnew.util.BomUtil; import com.nflg.product.bomnew.util.VUtils; import com.nflg.product.bomnew.util.VersionUtil; @@ -148,11 +144,7 @@ public class DQBomService { parents.forEach(p -> { if (Objects.isNull(vo.getStatus())) { vo.setStatus(p.getStatus()); - // vo.setCurrentVersion("A00"); } - // if (Objects.equals(vo.getBomExist(), 0) && Objects.equals(vo.getShouldBomExist(), 1)) { - // vo.setCurrentVersion("A-1"); - // } p.setChildNodes(CollUtil.toList(vo)); datas.addAll(buildParent(p)); }); @@ -192,7 +184,7 @@ public class DQBomService { BaseMaterialVO bm = materialBaseInfos.stream().filter(m -> m.getMaterialNo().equals(d.getMaterialNo())).findFirst().orElse(null); if (bm != null) { d.setMaterialState(bm.getMaterialState()); - d.setSystemMaterialName(bm.getMaterialName()); + d.setSystemMaterialName(bm.getMaterialDesc()); d.setSystemMaterialCategoryName(bm.getCategoryName()); d.setSystemMaterialUnit(bm.getMaterialUnit()); d.setMaterialRowId(bm.getMaterialRowId()); @@ -224,13 +216,13 @@ public class DQBomService { */ @Transactional(rollbackFor = Exception.class) public BomNewDQbomSaveQuery save(BomNewDQbomSaveQuery query) { - BomNewDQbomParentEntity parent = new BomNewDQbomParentEntity(); - BeanUtil.copyProperties(query.getParent(), parent); + BomNewDQbomParentEntity parent = Convert.convert(BomNewDQbomParentEntity.class, query.getParent()); - if (Objects.isNull(parent.getRowId()) || parent.getRowId() == 0) { + if (Objects.isNull(query.getParent()) || query.getParent().getBomRowId() == 0) { //新增父级节点 - BomNewDQbomParentEntity oldParent = dQBomParentService.lambdaQuery().eq(BomNewDQbomParentEntity::getMaterialNo, parent.getMaterialNo()) - .eq(BomNewDQbomParentEntity::getLastVersionIs, 1) + BomNewDQbomParentEntity oldParent = dQBomParentService.lambdaQuery() + .eq(BomNewDQbomParentEntity::getMaterialNo, query.getParent().getMaterialNo()) + .eq(BomNewDQbomParentEntity::getStatus, DQBomStatusEnum.WAIT_CONVERT.getValue()) .one(); VUtils.isTure(oldParent != null && !oldParent.getCreatedBy().equals(SessionUtil.getUserCode())) .throwMessage("父级已被其他人创建"); @@ -248,20 +240,20 @@ public class DQBomService { parent.setCreatedJob(userRoleService.technician() ? UserJobEnum.ENGINEER.getValue() : UserJobEnum.DESIGNER.getValue()); parent.setSource(2); dQBomParentService.save(parent); - query.getParent().setRowId(parent.getRowId()); + query.getParent().setBomRowId(parent.getRowId()); } else { - //修改数据 - // VUtils.isTure(!SessionUtil.getUserCode().equals(parent.getCreatedBy())).throwMessage("不能修改他人的数据"); + //删除所有子级关系 + dQBomChildService.deleteAllChildren(query.getParent().getBomRowId()); + parent.setRowId(query.getParent().getBomRowId()); + parent.setModifyTime(LocalDateTime.now()); if (CollUtil.isEmpty(query.getChildren())) { - dQBomChildService.deleteAllChildren(parent.getRowId()); + parent.setBomExist(0); + dQBomParentService.saveOrUpdate(parent); return query; } - //删除 - dQBomChildService.deleteAllChildren(parent.getRowId()); parent.setBomExist(1); - parent.setModifyTime(LocalDateTime.now()); - dQBomParentService.updateById(parent); + dQBomParentService.saveOrUpdate(parent); } //处理child List children = Convert.toList(BomNewDQbomChildEntity.class, query.getChildren()); @@ -271,15 +263,20 @@ public class DQBomService { c.setRowId(IdWorker.getId()); c.setCreatedBy(SessionUtil.getUserCode()); c.setCreatedName(SessionUtil.getRealName()); + if (StrUtil.equals(c.getProjectType(), "T")) { + String id = RandomUtil.randomNumbers(9); + c.setMaterialNo(BomConstant.NO_TEMPORARY_PREFIX + id); + c.setDrawingNo(BomConstant.NO_TEMPORARY_PREFIX + id); + if (Objects.isNull(c.getNum()) || NumberUtil.equals(c.getNum(), BigDecimal.ZERO)) { + c.setNum(BigDecimal.ONE); + } + if (StrUtil.isBlank(c.getMaterialUnit())) { + c.setMaterialUnit("PC"); + } + } } else { c.setModifyTime(LocalDateTime.now()); } - if (StrUtil.isBlank(c.getMaterialUnit())) { - c.setMaterialUnit("PC"); - } - if (Objects.isNull(c.getNum()) || NumberUtil.equals(c.getNum(), BigDecimal.ZERO)) { - c.setNum(BigDecimal.ONE); - } c.setLevel(parent.getLevel() + 1); c.setParentRowId(parent.getRowId()); c.setIdentityNo(c.getParentRowId() + "_" + c.getRowId()); @@ -327,6 +324,11 @@ public class DQBomService { .set(BomNewDQbomParentEntity::getEditStatus, EbomEditStatusEnum.HANDLER_FINISHED.getValue()) .set(BomNewDQbomParentEntity::getModifyTime, LocalDateTime.now()) .update(); + dQBomChildService.lambdaUpdate() + .eq(BomNewDQbomChildEntity::getParentRowId, query.getParent().getRowId()) + .set(BomNewDQbomChildEntity::getEditStatus, EbomEditStatusEnum.HANDLER_FINISHED.getValue()) + .set(BomNewDQbomChildEntity::getModifyTime, LocalDateTime.now()) + .update(); //checkException(CollUtil.toList(query.getParent().getRowId())); } @@ -375,7 +377,7 @@ public class DQBomService { t1.setMATNR(d.getParentMaterialNo()); t1.setIDNRK(d.getMaterialNo()); t1.setMEINS(d.getMaterialUnit()); - t1.setMENGE("1"); + t1.setMENGE(d.getNum().toString()); t1.setPOSTP(d.getProjectType()); t1.setDATUM(dateYMD); t1s.add(t1); @@ -393,15 +395,29 @@ public class DQBomService { } public BomDQbomEditDetailVO editDetail(Long rowId, Long bomRowId) { + VUtils.isTure(Objects.isNull(rowId) && Objects.isNull(bomRowId)).throwMessage("无效的数据"); + BomDQbomEditDetailVO vo = new BomDQbomEditDetailVO(); - BomNewDQbomParentEntity parent = dQBomParentService.getById(bomRowId); - BomNewDQbomChildEntity child = dQBomChildService.getById(rowId); - VUtils.isTure(Objects.isNull(parent) && Objects.isNull(child)).throwMessage("无效的数据"); - if (!Objects.isNull(parent)) { - vo.setParent(Convert.convert(BomNewDQbomVO.class, parent)); + if (bomRowId == 0) { + BomNewDQbomChildEntity child = dQBomChildService.getById(rowId); + BomNewDQbomVO p = Convert.convert(BomNewDQbomVO.class, child); + p.setRootIs(0); + p.setBomRowId(bomRowId); + p.setUserRootIs(0); + p.setRowId(IdWorker.getId()); + p.setCreatedTime(LocalDateTime.now()); + p.setCreatedBy(SessionUtil.getUserCode()); + p.setModifyTime(null); + initMaterialInfo(Collections.singletonList(p)); + vo.setParent(p); + } else { + BomNewDQbomParentEntity parent = dQBomParentService.getById(bomRowId); + BomNewDQbomVO p = Convert.convert(BomNewDQbomVO.class, parent); + p.setBomRowId(bomRowId); + p.setRowId(rowId); + initMaterialInfo(Collections.singletonList(p)); + vo.setParent(p); vo.setDatas(getChild(bomRowId)); - } else if (!Objects.isNull(child)) { - vo.setParent(Convert.convert(BomNewDQbomVO.class, child)); } return vo; } @@ -438,13 +454,17 @@ public class DQBomService { BomNewDQbomParentEntity root = dQBomParentService.getById(rootBomRowId); VUtils.isTure(Objects.isNull(root)).throwMessage("未找到数据"); + VUtils.isTure(root.getStatus() == 2).throwMessage("已转pbom不能再次转换"); + if (Objects.equals(root.getExceptionStatus(), EBomExceptionStatusEnum.OK.getValue())) { + //如果没有异常,则再进行一次异常检查,避免手动添加数据后没做异常检查就转pbom + checkException(rootBomRowId); + } VUtils.isTure(!Objects.equals(root.getExceptionStatus(), EBomExceptionStatusEnum.OK.getValue())) .throwMessage("异常状态不能转pbom"); - VUtils.isTure(root.getStatus() == 2).throwMessage("已转pbom不能再次转换"); List parents = new ArrayList<>(); List children = new ArrayList<>(); - buildPbom(root, parents, children); + buildTree(root, parents, children); dQBomParentService.updateBatchById(parents); dQBomChildService.updateBatchById(children); savePbomParents(parents); @@ -465,14 +485,21 @@ public class DQBomService { pchildren.forEach(c -> { c.setCreatedTime(LocalDateTime.now()); c.setModifyTime(null); + c.setFacCode(FactoryCodeEnum.FACTORY_1010.getValue()); c.setIdentityNo(c.getParentRowId() + "_" + c.getRowId()); if (CollUtil.isNotEmpty(materialBaseInfos)) { - BaseMaterialVO materialVO = materialBaseInfos.stream().filter(m -> m.getMaterialNo().equals(c.getMaterialNo())).findFirst().orElse(null); + BaseMaterialVO materialVO = materialBaseInfos.stream() + .filter(m -> m.getMaterialNo().equals(c.getMaterialNo())) + .findFirst() + .orElse(null); if (!Objects.isNull(materialVO)) { c.setMaterialCategoryCode(materialVO.getMaterialCategoryCode()); } } - BomNewDQbomParentEntity parent = parents.stream().filter(p -> p.getMaterialNo().equals(c.getMaterialNo())).findFirst().orElse(null); + BomNewDQbomParentEntity parent = parents.stream() + .filter(p -> p.getMaterialNo().equals(c.getMaterialNo())) + .findFirst() + .orElse(null); if (!Objects.isNull(parent)) { c.setBomVersionRowId(parent.getRowId()); } @@ -496,10 +523,11 @@ public class DQBomService { bomNewPbomParentService.saveBatch(pparents); } - private void buildPbom(BomNewDQbomParentEntity parent, List parents, List children) { + private void buildTree(BomNewDQbomParentEntity parent, List parents, List children) { parent.setStatus(2); parent.setConvertToPbomTime(LocalDateTime.now()); parent.setModifyTime(LocalDateTime.now()); + parent.setEditStatus(2); parents.add(parent); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(BomNewDQbomParentEntity::getMaterialNo, parent.getMaterialNo()); @@ -508,6 +536,7 @@ public class DQBomService { List cc = dQBomChildService.getByParentRowId(parent.getRowId()); cc.forEach(c -> { c.setStatus(2); + c.setEditStatus(2); c.setModifyTime(LocalDateTime.now()); }); children.addAll(cc); @@ -521,34 +550,37 @@ public class DQBomService { VUtils.isTure(true).throwMessage(StrUtil.format("{}的当前版本为{},比pbom中版本{}低", parent.getMaterialNo() , parent.getCurrentVersion(), pp.getCurrentVersion())); } else { - if (pp.getStatus() == 4) { - List dqChildren = getChild(parent.getRowId()); - Set pChildren = bomNewPbomChildService.lambdaQuery() - .select(BomNewPbomChildEntity::getMaterialNo) - .eq(BomNewPbomChildEntity::getParentRowId, pp.getRowId()) - .list() - .stream() - .map(BomNewPbomChildEntity::getMaterialNo) - .collect(Collectors.toSet()); - if (dqChildren.size() != pChildren.size() - || !Sets.difference(dqChildren.stream().map(BomNewDQbomVO::getMaterialNo).collect(Collectors.toSet()), pChildren).isEmpty()) { - parent.setCurrentVersion(VersionUtil.getNextVersion(parent.getCurrentVersion())); - pp.setLastVersionIs(0); - bomNewPbomParentService.updateById(pp); - } + if (pp.getStatus() >= 4) { + // List dqChildren = getChild(parent.getRowId()); + // Set pChildren = bomNewPbomChildService.lambdaQuery() + // .select(BomNewPbomChildEntity::getMaterialNo) + // .eq(BomNewPbomChildEntity::getParentRowId, pp.getRowId()) + // .list() + // .stream() + // .map(BomNewPbomChildEntity::getMaterialNo) + // .collect(Collectors.toSet()); + // if (dqChildren.size() != pChildren.size() + // || !Sets.difference(dqChildren.stream().map(BomNewDQbomVO::getMaterialNo).collect(Collectors.toSet()), pChildren).isEmpty()) { + parent.setCurrentVersion(VersionUtil.getNextVersion(pp.getCurrentVersion())); + pp.setLastVersionIs(0); + bomNewPbomParentService.updateById(pp); + // } } else { + parent.setCurrentVersion(pp.getCurrentVersion()); bomNewPbomParentService.getBaseMapper().deleteById(pp.getRowId()); - bomNewPbomChildService.getBaseMapper().delete(new LambdaQueryWrapper() + bomNewPbomChildService.getBaseMapper().delete(bomNewPbomChildService.lambdaQuery() .eq(BomNewPbomChildEntity::getParentRowId, pp.getRowId())); } } + } else { + parent.setCurrentVersion(VersionUtil.getNextVersion("")); } //处理子级 dQBomParentService.lambdaQuery() .in(BomNewDQbomParentEntity::getMaterialNo, cc.stream().map(BomNewDQbomChildEntity::getMaterialNo).collect(Collectors.toList())) .eq(BomNewDQbomParentEntity::getStatus, 1) .list() - .forEach(p -> buildPbom(p, parents, children)); + .forEach(p -> buildTree(p, parents, children)); } private int versionCompare(String version1, String version2) { @@ -556,4 +588,33 @@ public class DQBomService { if (StrUtil.isBlank(version2)) return -1; return Integer.parseInt(version1.substring(1)) - Integer.parseInt(version2.substring(1)); } + + public List getBomException(List query) { + List datas = new ArrayList<>(); + for (int index = 0, count = query.size(); index < count; index++) { + BomExceptionQuery bom = query.get(index); + BomExceptionVO vo = new BomExceptionVO(); + if (index == 0) { + checkException(bom.getBomRowId()); + + BomNewDQbomParentEntity parent = dQBomParentService.getById(bom.getBomRowId()); + vo.setMaterialNo(parent.getMaterialNo()); + vo.setExceptionStatus(parent.getExceptionStatus()); + } else { + BomNewDQbomChildEntity child = dQBomChildService.getById(bom.getRowId()); + vo.setMaterialNo(child.getMaterialNo()); + if (Objects.equals(child.getExceptionStatus(), EBomExceptionStatusEnum.OK.getValue())) { + BomNewDQbomParentEntity parent = dQBomParentService.getById(bom.getBomRowId()); + vo.setExceptionStatus(parent.getExceptionStatus()); + } else { + vo.setExceptionStatus(child.getExceptionStatus()); + } + } + vo.setBomRowId(bom.getBomRowId()); + vo.setRowId(bom.getRowId()); + datas.add(vo); + } + return datas; + } + } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/MaterialMainService.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/MaterialMainService.java index 2796ee78..0dc86b18 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/MaterialMainService.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/MaterialMainService.java @@ -19,6 +19,7 @@ import com.nflg.product.bomnew.util.VUtils; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Service; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.function.BiConsumer; @@ -108,12 +109,14 @@ public class MaterialMainService extends ServiceImpl void intiMaterialInfo(List data , String ... ignorePropertyList) { + public List intiMaterialInfo(List data, String... ignorePropertyList) { List materialNos = data.stream().map(BaseMaterialVO::getMaterialNo).filter(StrUtil::isNotBlank).collect(Collectors.toList()); if (CollUtil.isNotEmpty(materialNos)) { List materialBaseInfos = SpringUtil.getBean(MaterialMainService.class).getMaterialBaseInfo(materialNos); intiMaterialInfo(data, materialBaseInfos, ignorePropertyList); + return materialBaseInfos; } + return Collections.emptyList(); } public void intiMaterialInfo(List data ,List materialBaseInfos, String ... ignorePropertyList) { diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/CheckEBomException.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/CheckEBomException.java index 68deccdf..95f69909 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/CheckEBomException.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/CheckEBomException.java @@ -14,10 +14,7 @@ import com.nflg.product.bomnew.pojo.vo.BaseMaterialVO; import com.nflg.product.bomnew.pojo.vo.BomNewEbomParentVO; import com.nflg.product.bomnew.service.BomNewEbomParentService; import com.nflg.product.bomnew.service.MaterialMainService; -import com.nflg.product.bomnew.util.BomLevelUtil; -import com.nflg.product.bomnew.util.ListCommonUtil; -import com.nflg.product.bomnew.util.TreeUtils; -import com.nflg.product.bomnew.util.VUtils; +import com.nflg.product.bomnew.util.*; import lombok.Getter; import lombok.Setter; import nflg.product.common.constant.STATE; @@ -88,28 +85,27 @@ public class CheckEBomException { */ public void initException() { //初始化物料信息 - SpringUtil.getBean(MaterialMainService.class).intiMaterialInfo(allBomDetail, EBomConstant.EBOM_IGNORED_FIELDS_INIT_MATERIAL_DEFAULT); + List materialBaseInfo = SpringUtil.getBean(MaterialMainService.class).intiMaterialInfo(allBomDetail, EBomConstant.EBOM_IGNORED_FIELDS_INIT_MATERIAL_DEFAULT); - checkException(); + checkException(materialBaseInfo); } public void initException(List unCheckException) { //初始化物料信息 - SpringUtil.getBean(MaterialMainService.class).intiMaterialInfo(allBomDetail, EBomConstant.EBOM_IGNORED_FIELDS_INIT_MATERIAL_DEFAULT); + List materialBaseInfo = SpringUtil.getBean(MaterialMainService.class).intiMaterialInfo(allBomDetail, EBomConstant.EBOM_IGNORED_FIELDS_INIT_MATERIAL_DEFAULT); this.unCheckExcept=unCheckException; - checkException(); + checkException(materialBaseInfo); } public void initException(String... ignorePropertyList) { - - SpringUtil.getBean(MaterialMainService.class).intiMaterialInfo(allBomDetail, ignorePropertyList); - checkException(); + List materialBaseInfo = SpringUtil.getBean(MaterialMainService.class).intiMaterialInfo(allBomDetail, ignorePropertyList); + checkException(materialBaseInfo); } - public void checkException() { + public void checkException(List materialBaseInfo) { for (BomNewEbomParentVO vo : allBomDetail) { // if(Objects.isNull(vo.getExceptionStatus())) { //忽略不检查的如14 @@ -118,7 +114,10 @@ public class CheckEBomException { && unCheckExcept.contains(vo.getExceptionStatus())) { continue; } - + BaseMaterialVO mainVO = materialBaseInfo.stream() + .filter(u -> StrUtil.equals(u.getMaterialNo(), vo.getMaterialNo())) + .findFirst() + .orElse(null); vo.setExceptionStatus(EBomExceptionStatusEnum.OK.getValue()); // } if (StrUtil.isNotBlank(vo.getMaterialNo()) @@ -132,6 +131,9 @@ public class CheckEBomException { } else if (StrUtil.isBlank(vo.getProjectType()) && !Objects.equals(vo.getRootIs(), 1) && !Objects.equals(vo.getUserRootIs(), 1) && !Objects.equals(vo.getRootIsForWaitReview(), 1)) { vo.setExceptionStatus(EBomExceptionStatusEnum.EXCEPT_NO_8.getValue()); + } else if ((StrUtil.equals("KG", StringUtil.toUpperCase(vo.getMaterialUnit())) && !StrUtil.equals(StringUtil.toUpperCase(vo.getMaterialUnit()), "PC")) + || (!Objects.isNull(mainVO) && !StrUtil.equals(vo.getMaterialUnit(), mainVO.getMaterialUnit()))) { + vo.setExceptionStatus(EBomExceptionStatusEnum.EXCEPT_NO_12.getValue()); } else if (StrUtil.isNotBlank(vo.getNoticeNums()) && EBomExceptionStatusEnum.EXCEPT_NO_11.equalsValue(vo.getExceptionStatus())) { vo.setExceptionStatus(EBomExceptionStatusEnum.OK.getValue()); } @@ -158,11 +160,15 @@ public class CheckEBomException { for (String key : childMaterialMap.keySet()) { List materialGroupList = childMaterialMap.get(key); if (materialGroupList.size() > 1) { - materialGroupList.forEach(u -> { - u.setExceptionStatus(EBomExceptionStatusEnum.EXCEPT_NO_6.getValue()); + Map> m2 = ListCommonUtil.listGroupMap(materialGroupList, BomNewEbomParentVO::getProjectType); + m2.forEach((mk, mv) -> { + if (mv.size() > 1) { + mv.forEach(u -> { + u.setExceptionStatus(EBomExceptionStatusEnum.EXCEPT_NO_6.getValue()); + }); + } }); } - } if (ProjectTypeInputTypeEnum.ProjectTypeEnum.TYPE_Q.getValue().equals(parent.getProjectType())) { List qList = child.stream().filter(u -> ProjectTypeInputTypeEnum.ProjectTypeEnum.TYPE_Q.getValue().equals(u.getProjectType())).collect(Collectors.toList()); diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/util/StringUtil.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/util/StringUtil.java index 3bcdf746..bf9642bd 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/util/StringUtil.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/util/StringUtil.java @@ -1,5 +1,6 @@ package com.nflg.product.bomnew.util; +import cn.hutool.core.util.StrUtil; import org.apache.commons.lang3.StringUtils; /** @@ -134,4 +135,9 @@ public class StringUtil { } return count; } + + public static String toUpperCase(String str) { + if (StrUtil.isBlank(str)) return str; + return str.toUpperCase(); + } } diff --git a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewDQbomParentMapper.xml b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewDQbomParentMapper.xml index 19752668..1f20a57c 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewDQbomParentMapper.xml +++ b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewDQbomParentMapper.xml @@ -67,9 +67,10 @@ ifnull(p.bom_exist, 0) bom_exist, ifnull(p.sap_state, 1) sap_state, c.* - FROM t_bom_new_dqbom_parent p - RIGHT JOIN t_bom_new_dqbom_child c ON p.material_no = c.material_no - WHERE c.parent_row_id = #{bomRowId} + FROM t_bom_new_dqbom_child c + INNER JOIN t_bom_new_dqbom_parent p2 ON p2.row_id = c.parent_row_id + LEFT JOIN t_bom_new_dqbom_parent p ON p.material_no = c.material_no AND p.status = p2.status + WHERE p2.row_id = #{bomRowId} ORDER BY c.order_number @@ -128,16 +129,7 @@ SELECT *,row_id as bomRowId FROM t_bom_new_ebom_parent - WHERE (root_is=1 OR ((user_root_is=1 OR root_is_for_wait_review=1) AND created_by=#{userCode})) + - AND status IN (1,3) + WHERE status IN (1,3) AND (user_root_is=1 OR root_is_for_wait_review=1) AND created_by=#{userCode} - AND status=2 + WHERE root_is=1 AND status=2 - AND status=4 + WHERE root_is=1 AND status=4 AND devise_name=#{query.deviseName} diff --git a/nflg_project_dev/nflg-bom-new/src/test/java/com/nflg/product/bomnew/service/test/OtherTest.java b/nflg_project_dev/nflg-bom-new/src/test/java/com/nflg/product/bomnew/service/test/OtherTest.java index ff621bac..e0491328 100644 --- a/nflg_project_dev/nflg-bom-new/src/test/java/com/nflg/product/bomnew/service/test/OtherTest.java +++ b/nflg_project_dev/nflg-bom-new/src/test/java/com/nflg/product/bomnew/service/test/OtherTest.java @@ -1,6 +1,7 @@ package com.nflg.product.bomnew.service.test; import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.toolkit.IdWorker; @@ -142,4 +143,9 @@ public class OtherTest { public void test16() { System.out.println("下一个版本:" + VersionUtil.getNextVersionForSmallVersion("A00")); } + + @Test + public void test17() { + System.out.println("T" + RandomUtil.randomNumbers(9)); + } }