From ca66acc0a3998fa7724adb4ba93f2bee9fe72deb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Tue, 7 May 2024 11:08:50 +0800 Subject: [PATCH 1/9] =?UTF-8?q?feat:=20ebom=E7=BC=96=E8=BE=91=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E4=B9=9F=E9=9C=80=E8=A6=81=E8=B7=9F=E7=94=B5=E6=B0=94?= =?UTF-8?q?=E4=B8=93=E7=94=A8bom=E7=9A=84=E7=BC=96=E8=BE=91=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E4=B8=80=E6=A0=B7=E6=9C=89=E7=88=B6=E7=BA=A7=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E5=AF=BC=E8=88=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nflg/product/bomnew/api/user/EbomApi.java | 19 +++++++--- .../service/BomNewEbomParentService.java | 35 ++++++++++++++++--- .../domain/EBom/CheckEBomException.java | 3 +- 3 files changed, 46 insertions(+), 11 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 51517b7a..7eb6d4f3 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 @@ -10,12 +10,10 @@ import com.mzt.logapi.starter.annotation.LogRecord; import com.nflg.product.base.core.api.BaseApi; import com.nflg.product.base.core.conmon.util.SessionUtil; import com.nflg.product.bomnew.pojo.dto.*; +import com.nflg.product.bomnew.pojo.query.BomExceptionQuery; import com.nflg.product.bomnew.pojo.query.BomNewEbomMaterialQuery; import com.nflg.product.bomnew.pojo.query.BomNewEbomParentQuery; -import com.nflg.product.bomnew.pojo.vo.BomNewEbomEditDetailVO; -import com.nflg.product.bomnew.pojo.vo.BomNewEbomParentVO; -import com.nflg.product.bomnew.pojo.vo.BomNewEbomUpgradeChangeVO; -import com.nflg.product.bomnew.pojo.vo.OperationErrorMsgVO; +import com.nflg.product.bomnew.pojo.vo.*; import com.nflg.product.bomnew.service.*; import com.nflg.product.bomnew.util.EecExcelUtil; import com.nflg.product.bomnew.util.VUtils; @@ -411,7 +409,7 @@ public class EbomApi extends BaseApi { @PostMapping("intiException") @ApiOperation("初始化错误类型") @LogRecord(success = "Ebom-初始化错误类型,操作结果:{{#_ret}}", bizNo = "{{#bomRowIds.toString()}}", type = "Ebom-初始化错误类型") - public ResultVO intiException(@RequestBody List bomRowIds) throws ExecutionException, InterruptedException { + public ResultVO intiException(@RequestBody List bomRowIds) { bomNewEbomParentService.batchCheckAndSaveEBomException(bomRowIds); return ResultVO.success(true); @@ -464,4 +462,15 @@ public class EbomApi extends BaseApi { VUtils.isTure(rootBomRowIds.size() > 1).throwMessage("每次只能导入1条"); return bomNewEbomParentService.importToSAP(rootBomRowIds.get(0)); } + + /** + * 获取节点异常状态 + * @param query query + * @return 节点异常状态 + */ + @PostMapping("getBomException") + @ApiOperation("获取节点异常状态") + public ResultVO> getBomException(@Valid @RequestBody @NotEmpty List query) { + return ResultVO.success(bomNewEbomParentService.getBomException(query)); + } } 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 8e912e98..522c931a 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 @@ -24,6 +24,7 @@ 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.BomExceptionQuery; import com.nflg.product.bomnew.pojo.query.BomNewEbomMaterialQuery; import com.nflg.product.bomnew.pojo.query.BomNewEbomParentQuery; import com.nflg.product.bomnew.pojo.vo.*; @@ -527,10 +528,8 @@ public class BomNewEbomParentService extends ServiceImpl getBomTree(Long rowId, Boolean generateLevelNumberFlag) throws ExecutionException, InterruptedException { + public List getBomTree(Long rowId, Boolean generateLevelNumberFlag) { List bomDetail = this.getBaseMapper().getParentChild(rowId); // EBomDetailTask detailTask = new EBomDetailTask(bomDetail); @@ -719,7 +718,7 @@ public class BomNewEbomParentService extends ServiceImpl bomRowIds) throws ExecutionException, InterruptedException { + public void batchCheckAndSaveEBomException(List bomRowIds) { for (Long bomRowId : bomRowIds) { CheckEBomException checkEBomException = new CheckEBomException(bomRowId); checkEBomException.initException(); @@ -2258,4 +2257,32 @@ public class BomNewEbomParentService extends ServiceImpl 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) { + batchCheckAndSaveEBomException(Collections.singletonList(bom.getBomRowId())); + + BomNewEbomParentEntity parent = getById(bom.getBomRowId()); + vo.setMaterialNo(parent.getMaterialNo()); + vo.setExceptionStatus(parent.getExceptionStatus()); + } else { + BomNewEbomChildEntity child = ebomChildService.getById(bom.getRowId()); + vo.setMaterialNo(child.getMaterialNo()); + if (Objects.equals(child.getExceptionStatus(), EBomExceptionStatusEnum.OK.getValue())) { + BomNewEbomParentEntity parent = 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/domain/EBom/CheckEBomException.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/CheckEBomException.java index 95f69909..b7ee4e03 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 @@ -21,7 +21,6 @@ import nflg.product.common.constant.STATE; import java.math.BigDecimal; import java.util.*; -import java.util.concurrent.ExecutionException; import java.util.stream.Collectors; /** @@ -53,7 +52,7 @@ public class CheckEBomException { } - public CheckEBomException(Long bomRowId) throws ExecutionException, InterruptedException { + public CheckEBomException(Long bomRowId) { allBomDetail = SpringUtil.getBean(BomNewEbomParentService.class).getBomTree(bomRowId, true); //只检查待复核和自己的 From 8f1fb6c330697c1c9656a82a445a00139c335b81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Tue, 7 May 2024 11:10:55 +0800 Subject: [PATCH 2/9] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E9=94=99=E8=AF=AF=E4=BF=A1=E6=81=AF=E5=88=B0excel?= =?UTF-8?q?=E7=9A=84=E6=8E=A5=E5=8F=A3=EF=BC=8C=E6=95=B0=E6=8D=AE=E7=94=B1?= =?UTF-8?q?=E5=89=8D=E7=AB=AF=E4=BC=A0=E8=BF=87=E6=9D=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../product/bomnew/api/user/DQBomApi.java | 12 ++++++++++ .../nflg/product/bomnew/api/user/TestApi.java | 22 +++++++++++++++++++ .../pojo/vo/OperationErrorMsgBaseVO.java | 2 ++ .../bomnew/pojo/vo/OperationErrorMsgVO.java | 4 ++++ 4 files changed, 40 insertions(+) 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 0cf761ef..956a9e67 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 @@ -239,4 +239,16 @@ public class DQBomApi extends BaseApi { public ResultVO> getBomException(@Valid @RequestBody @NotEmpty List query) { return ResultVO.success(dQBomService.getBomException(query)); } + + /** + * 导出错误信息到excel + * @param messages 错误信息 + * @return + */ + @PostMapping("exportErrorToExcel") + @ApiOperation("导出错误信息到excel") + public void exportErrorToExcel(@Valid @RequestBody @NotNull List messages + , HttpServletResponse response) throws IOException { + EecExcelUtil.export(response, messages, OperationErrorMsgVO.class, "错误信息"); + } } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/TestApi.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/TestApi.java index 88575698..f08ab8aa 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/TestApi.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/TestApi.java @@ -11,9 +11,12 @@ import io.swagger.annotations.ApiOperation; import nflg.product.common.vo.ResultVO; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; +import javax.validation.Valid; +import javax.validation.constraints.NotNull; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -30,6 +33,10 @@ public class TestApi { @Resource SapOpUtilService sapOpUtilService; + /** + * sap接口测试 + * @return + */ @GetMapping("sap") @ApiOperation("sap接口测试") public ResultVO> workDetailsListByPage() { @@ -52,4 +59,19 @@ public class TestApi { sapDto.setT1(t1s); return ResultVO.success(sapOpUtilService.importToSapV2(sapDto, null)); } + + /** + * 获取异常信息 + * @param num 数量 + * @return + */ + @GetMapping("getErrors") + @ApiOperation("获取异常信息") + public ResultVO> getErrors(@Valid @RequestParam("num") @NotNull Integer num) { + List msgs = new ArrayList<>(); + for (int i = 0; i < num; i++) { + msgs.add(OperationErrorMsgVO.create("主键数据:" + i, "错误描述:" + i)); + } + return ResultVO.success(msgs); + } } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/OperationErrorMsgBaseVO.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/OperationErrorMsgBaseVO.java index 0cc71b1b..63689139 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/OperationErrorMsgBaseVO.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/OperationErrorMsgBaseVO.java @@ -1,6 +1,7 @@ package com.nflg.product.bomnew.pojo.vo; import io.swagger.annotations.ApiModelProperty; +import org.ttzero.excel.annotation.ExcelColumn; import java.io.Serializable; @@ -11,6 +12,7 @@ import java.io.Serializable; public class OperationErrorMsgBaseVO implements Serializable { @ApiModelProperty("错误描述") + @ExcelColumn("异常信息") public String msg; public OperationErrorMsgBaseVO() { diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/OperationErrorMsgVO.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/OperationErrorMsgVO.java index 23e02cb5..052affbf 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/OperationErrorMsgVO.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/OperationErrorMsgVO.java @@ -1,6 +1,8 @@ package com.nflg.product.bomnew.pojo.vo; import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.ttzero.excel.annotation.ExcelColumn; import java.io.Serializable; @@ -8,9 +10,11 @@ import java.io.Serializable; * @author 曹鹏飞 * @date 2024-03-21 14:49:05 */ +@Data public class OperationErrorMsgVO extends OperationErrorMsgBaseVO implements Serializable { @ApiModelProperty("主键数据") + @ExcelColumn("所在行") public String primaryKey; public OperationErrorMsgVO() { From e91d30d86f642b685f99d904019e3fcf17188339 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Tue, 7 May 2024 14:13:42 +0800 Subject: [PATCH 3/9] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=9F=A5?= =?UTF-8?q?=E7=9C=8Bebom=E5=AF=B9=E5=BA=94=E7=9A=84=E5=8E=9F=E5=A7=8Bbom?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nflg/product/bomnew/api/user/EbomApi.java | 14 ++++++++ .../service/BomNewEbomParentService.java | 32 +++++++++++++++++++ 2 files changed, 46 insertions(+) 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 7eb6d4f3..00b5f29e 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 @@ -27,11 +27,13 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.ttzero.excel.entity.ListSheet; import org.ttzero.excel.entity.Workbook; +import springfox.bean.validators.plugins.schema.NotNullAnnotationPlugin; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; import java.io.IOException; import java.util.List; import java.util.Objects; @@ -68,6 +70,7 @@ public class EbomApi extends BaseApi { @Resource private BomNewPbomParentService bomNewPbomParentService; + private NotNullAnnotationPlugin notNullPlugin; @PostMapping("workDetailsListByPage") @@ -473,4 +476,15 @@ public class EbomApi extends BaseApi { public ResultVO> getBomException(@Valid @RequestBody @NotEmpty List query) { return ResultVO.success(bomNewEbomParentService.getBomException(query)); } + + /** + * 获取对应的原始bom + * @param rowId rowId + * @return 原始bom + */ + @GetMapping("getSource") + @ApiOperation("获取对应的原始bom") + public ResultVO getSource(@Valid @RequestParam("rowId") @NotNull Long rowId) { + return ResultVO.success(bomNewEbomParentService.getSource(rowId)); + } } 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 522c931a..7d149143 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 @@ -98,6 +98,12 @@ public class BomNewEbomParentService extends ServiceImpl Date: Tue, 7 May 2024 16:22:32 +0800 Subject: [PATCH 4/9] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E4=B8=80=E4=B8=AA?= =?UTF-8?q?sql=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/master/BomNewEbomParentMapper.xml | 38 ++++++++++--------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewEbomParentMapper.xml b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewEbomParentMapper.xml index e391f8da..eac96296 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewEbomParentMapper.xml +++ b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewEbomParentMapper.xml @@ -393,24 +393,26 @@ SELECT *,row_id as bomRowId FROM t_bom_new_ebom_parent - - AND created_by = #{userCode} - - - WHERE status IN (1,3) AND (user_root_is=1 OR root_is_for_wait_review=1) AND created_by=#{userCode} - - - WHERE root_is=1 AND status=2 - - - WHERE root_is=1 AND status=4 - - - AND devise_name=#{query.deviseName} - - - AND created_time BETWEEN #{query.startDate} AND DATE_ADD(#{query.endDate}, INTERVAL 1 DAY) - + + + AND created_by = #{userCode} + + + AND status IN (1,3) AND (user_root_is=1 OR root_is_for_wait_review=1) AND created_by=#{userCode} + + + AND root_is=1 AND status=2 + + + AND root_is=1 AND status=4 + + + AND devise_name=#{query.deviseName} + + + AND created_time BETWEEN #{query.startDate} AND DATE_ADD(#{query.endDate}, INTERVAL 1 DAY) + + order by row_id desc From b2ce1def5a6d2ea222b21d20b4ce0bd0905edcad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Tue, 7 May 2024 16:36:30 +0800 Subject: [PATCH 5/9] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E4=B8=80=E4=B8=AA?= =?UTF-8?q?sql=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../product/bomnew/mapper/master/BomNewEbomParentMapper.java | 2 +- .../nflg/product/bomnew/service/BomNewEbomParentService.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewEbomParentMapper.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewEbomParentMapper.java index 395736e3..fd4efe03 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewEbomParentMapper.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewEbomParentMapper.java @@ -38,7 +38,7 @@ public interface BomNewEbomParentMapper extends BaseMapper formalWorksheet(Page page, @Param("query") BomNewEbomParentQuery query); + Page formalWorksheet(Page page, @Param("query") BomNewEbomParentQuery query, String userCode); Page getUpgradeChangeList(Page page, @Param("query") BomNewEbomParentQuery query); /** 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 7d149143..ea2b49ec 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 @@ -302,7 +302,7 @@ public class BomNewEbomParentService extends ServiceImpl formalWorksheet(BomNewEbomParentQuery query) { - Page result = this.getBaseMapper().formalWorksheet(new Page<>(query.getPage(), query.getPageSize()), query); + Page result = this.getBaseMapper().formalWorksheet(new Page<>(query.getPage(), query.getPageSize()), query, SessionUtil.getUserCode()); if (CollUtil.isNotEmpty(result.getRecords())) { From 158dc0db424fd92d82bac13cbb16bf405c81e543 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Wed, 8 May 2024 15:34:20 +0800 Subject: [PATCH 6/9] =?UTF-8?q?fix:=20ebom=E5=BC=82=E5=B8=B8=E6=A3=80?= =?UTF-8?q?=E6=9F=A5=E9=80=BB=E8=BE=91=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/domain/EBom/CheckEBomException.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) 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 b7ee4e03..bf870735 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 @@ -113,10 +113,10 @@ public class CheckEBomException { && unCheckExcept.contains(vo.getExceptionStatus())) { continue; } - BaseMaterialVO mainVO = materialBaseInfo.stream() - .filter(u -> StrUtil.equals(u.getMaterialNo(), vo.getMaterialNo())) - .findFirst() - .orElse(null); + // 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()) @@ -130,8 +130,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()))) { + } 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()))) { + && (StrUtil.isBlank(vo.getExceptionTag()) || (!vo.getExceptionTag().contains("16")) && !vo.getExceptionTag().contains("12"))) { 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()); From 70dd9d0211e3686545b0f70e343109e17b8329be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Wed, 8 May 2024 15:35:15 +0800 Subject: [PATCH 7/9] =?UTF-8?q?feat:=20ebom=E4=BB=8Eexcel=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/master/BomNewEbomChildMapper.java | 2 + .../product/bomnew/pojo/dto/EbomExcelDTO.java | 73 +++++ .../bomnew/service/EBomImportService.java | 286 ++++++++++++++++++ .../mapper/master/BomNewEbomChildMapper.xml | 12 + 4 files changed, 373 insertions(+) create mode 100644 nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/dto/EbomExcelDTO.java create mode 100644 nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/EBomImportService.java diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewEbomChildMapper.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewEbomChildMapper.java index a723b7d6..fca209eb 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewEbomChildMapper.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewEbomChildMapper.java @@ -24,4 +24,6 @@ public interface BomNewEbomChildMapper extends BaseMapper void updateEBomMaterialUse(); List getChildMaxExceptionState(@Param("bomRowIds") List bomRowIds); + + Integer shouldSetRootIs(String materialNo); } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/dto/EbomExcelDTO.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/dto/EbomExcelDTO.java new file mode 100644 index 00000000..35eb6479 --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/dto/EbomExcelDTO.java @@ -0,0 +1,73 @@ +package com.nflg.product.bomnew.pojo.dto; + +import lombok.Data; +import org.ttzero.excel.annotation.ExcelColumn; + +import java.math.BigDecimal; + +/** + * @author 曹鹏飞 + * @date 2024/5/8 09:07:23 + */ +@Data +public class EbomExcelDTO extends BaseImportExcelDTO { + + /** + * 父级物料编号 + */ + @ExcelColumn("抬头物料") + private String parentMaterialNo; + + /** + * 父级物料描述 + */ + @ExcelColumn("物料描述") + private String parentMaterialDesc; + + /** + * 项目类别 + */ + @ExcelColumn("项目类别") + private String projectType; + + /** + * 物料编号 + */ + @ExcelColumn("项目物料") + private String materialNo; + + /** + * 物料描述 + */ + @ExcelColumn("项目物料描述") + private String materialDesc; + + /** + * 数量 + */ + @ExcelColumn("数量") + private BigDecimal num; + + /** + * 物料单位 + */ + @ExcelColumn("单位") + private String unit; + + /** + * 排序顺序 + */ + @ExcelColumn("排序顺序") + private String orderNum; + + /** + * 备注 + */ + @ExcelColumn("备注") + private String remark; + + /** + * 图号 + */ + private String drawingNo; +} diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/EBomImportService.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/EBomImportService.java new file mode 100644 index 00000000..7d56ecaf --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/EBomImportService.java @@ -0,0 +1,286 @@ +package com.nflg.product.bomnew.service; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.nflg.product.base.core.conmon.util.SessionUtil; +import com.nflg.product.bomnew.constant.*; +import com.nflg.product.bomnew.pojo.dto.BaseImportExcelDTO; +import com.nflg.product.bomnew.pojo.dto.EbomExcelDTO; +import com.nflg.product.bomnew.pojo.entity.BomNewEbomChildEntity; +import com.nflg.product.bomnew.pojo.entity.BomNewEbomParentEntity; +import com.nflg.product.bomnew.pojo.vo.BaseMaterialVO; +import com.nflg.product.bomnew.pojo.vo.OperationErrorMsgVO; +import com.nflg.product.bomnew.util.BomUtil; +import com.nflg.product.bomnew.util.EecExcelUtil; +import com.nflg.product.bomnew.util.StringUtil; +import com.nflg.product.bomnew.util.VUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.tuple.Pair; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.IOException; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * @author 曹鹏飞 + * @date 2024/5/8 09:02:12 + */ +@Service +@Slf4j +public class EBomImportService { + + public static final ThreadLocal rowNum = new ThreadLocal<>(); + + public static final ThreadLocal> excelContextTL = new ThreadLocal<>(); + + @Resource + private MaterialMainService materialMainService; + + @Resource + private UserRoleService userRoleService; + + @Resource + private BomNewEbomParentService bomNewEbomParentService; + + @Resource + private BomNewEbomChildService bomNewEbomChildService; + + public List importBom(MultipartFile file) throws IOException { + try { + rowNum.set(1); + excelContextTL.set(new ArrayList<>()); + EecExcelUtil.handlerExcel(file.getInputStream(), EbomExcelDTO.class, this::handlerExcelRow); + + List datas = excelContextTL.get(); + + List errorMsg = checkExcel(datas); + if (!errorMsg.isEmpty()) { + return errorMsg; + } + + Pair, List> pcs = convertToBom(datas); + VUtils.isTure(pcs.getLeft().stream().filter(p -> p.getRootIs() == 1).count() > 1) + .throwMessage("文件中存在多个根节点"); + //VUtils.isTure(checkInconsistentData(pcs.getLeft().get(0), pcs.getLeft(), pcs.getRight())) + // .throwMessage("导入的数据已存在,请勿重复导入"); + + //save(pcs.getLeft(), pcs.getRight()); + + return Collections.emptyList(); + } finally { + excelContextTL.remove(); + } + } + + private void handlerExcelRow(EbomExcelDTO dQbomExcelVO) { + rowNum.set(rowNum.get() + 1); + log.debug("ebom导入excel,第{}行,处理前:{}", rowNum.get(), JSON.toJSONString(dQbomExcelVO)); + + dQbomExcelVO.setRowNum(rowNum.get()); + + excelContextTL.get().add(dQbomExcelVO); + } + + private List checkExcel(List datas) { + List errorMsg = new ArrayList<>(); + + List numError = datas.stream().filter(u -> StrUtil.isBlank(u.getParentMaterialNo())) + .map(BaseImportExcelDTO::getRowNum) + .collect(Collectors.toList()); + if (!numError.isEmpty()) { + errorMsg.addAll(numError.stream().map(n -> OperationErrorMsgVO.create("第" + n + "行", "抬头物料为空")) + .collect(Collectors.toList()) + ); + } + + numError = datas.stream().filter(u -> StrUtil.isBlank(u.getMaterialNo())) + .map(BaseImportExcelDTO::getRowNum) + .collect(Collectors.toList()); + if (!numError.isEmpty()) { + errorMsg.addAll(numError.stream().map(n -> OperationErrorMsgVO.create("第" + n + "行", "项目物料为空")) + .collect(Collectors.toList()) + ); + } + + numError = datas.stream().filter(u -> Objects.isNull(u.getNum()) || BigDecimal.ZERO.compareTo(u.getNum()) >= 0) + .map(BaseImportExcelDTO::getRowNum) + .collect(Collectors.toList()); + + if (!numError.isEmpty()) { + errorMsg.addAll(numError.stream().map(n -> OperationErrorMsgVO.create("第" + n + "行", "数量不正确")) + .collect(Collectors.toList()) + ); + } + + numError = datas.stream().filter(u -> StringUtil.CountForMysql(u.getRemark()) > 200) + .map(BaseImportExcelDTO::getRowNum) + .collect(Collectors.toList()); + if (!numError.isEmpty()) { + errorMsg.addAll(numError.stream().map(n -> OperationErrorMsgVO.create("第" + n + "行", "备注超出200字")) + .collect(Collectors.toList()) + ); + } + + return errorMsg; + } + + private Pair, List> convertToBom(List datas) { + List parents = new ArrayList<>(); + List children = new ArrayList<>(); + + List materialNos = datas.stream().map(EbomExcelDTO::getMaterialNo).collect(Collectors.toList()); + materialNos.addAll(datas.stream().map(EbomExcelDTO::getParentMaterialNo).collect(Collectors.toList())); + materialNos = materialNos.stream().distinct().collect(Collectors.toList()); + List materialBaseInfos = materialMainService.getMaterialBaseInfo(materialNos); + + BomNewEbomParentEntity parent; + for (EbomExcelDTO data : datas) { + parent = parents.stream().filter(p -> p.getMaterialNo().equals(data.getParentMaterialNo())) + .findFirst() + .orElse(null); + if (Objects.isNull(parent)) { + parents.add(buildRoot(materialBaseInfos, data.getParentMaterialNo(), data.getParentMaterialDesc())); + } + + parent = parents.stream().filter(p -> p.getMaterialNo().equals(data.getMaterialNo())) + .findFirst() + .orElse(null); + if (Objects.isNull(parent)) { + parent = buildParent(materialBaseInfos, data); + children.add(buildChild(materialBaseInfos, parent, data.getProjectType())); + parents.add(parent); + } + } + return Pair.of(parents, children); + } + + private BomNewEbomChildEntity buildChild(List materialBaseInfos, BomNewEbomParentEntity parent, String projectType) { + BomNewEbomChildEntity child = Convert.convert(BomNewEbomChildEntity.class, parent); + parent.setOrderNumber(""); + child.setRowId(IdWorker.getId()); + child.setParentRowId(parent.getRowId()); + child.setProjectType(projectType); + child.setProjectTypeInputType(ProjectTypeInputTypeEnum.MANUAL_INPUT.getValue()); + child.setIdentityNo(child.getParentRowId() + "_" + child.getRowId()); + BaseMaterialVO vo = materialBaseInfos.stream() + .filter(m -> m.getMaterialNo().equals(child.getMaterialNo())) + .findFirst() + .orElse(null); + if (!Objects.isNull(vo)) { + child.setMaterialCategoryCode(vo.getMaterialCategoryCode()); + } + return child; + } + + private BomNewEbomParentEntity buildParent(List materialBaseInfos, EbomExcelDTO data) { + BomNewEbomParentEntity parent = new BomNewEbomParentEntity(); + parent.setRowId(IdWorker.getId()); + + BaseMaterialVO vo = materialBaseInfos.stream() + .filter(m -> m.getMaterialNo().equals(data.getMaterialNo())) + .findFirst() + .orElse(null); + if (!Objects.isNull(vo)) { + parent.setDrawingNo(vo.getDrawingNo()); + parent.setUnitWeight(vo.getMaterialWeight()); + } + + parent.setMaterialNo(data.getMaterialNo()); + parent.setMaterialDesc(data.getMaterialDesc()); + parent.setMaterialTexture(""); + parent.setMaterialUnit(data.getUnit()); + parent.setNum(data.getNum()); + parent.setTotalWeight(BomUtil.calculateTotalWeight(parent.getNum(), parent.getUnitWeight())); + //parent.setCurrentVersion(OriginalConstant.DEFAULT_BOM_VERSION); + parent.setUserRootIs(0); + parent.setRootIs(0); + if (userRoleService.technician()) { + //工艺人员 + parent.setStatus(EBomStatusEnum.CHECKED.getValue()); + parent.setCreatedJob(UserJobEnum.ENGINEER.getValue()); + parent.setAuditUserName(SessionUtil.getUserCode()); + parent.setAuditTime(LocalDateTime.now()); + } else { + //设计人员 + parent.setStatus(EBomStatusEnum.WAIT_CHECK.getValue()); + parent.setCreatedJob(UserJobEnum.DESIGNER.getValue()); + parent.setRootIsForWaitReview(1); + } + parent.setDeviseName(SessionUtil.getRealName()); + parent.setDeviseUserCode(SessionUtil.getUserCode()); + parent.setLastVersionIs(1); + parent.setEditStatus(EbomEditStatusEnum.HANDLER_CREATED.getValue()); + parent.setExceptionStatus(EBomExceptionStatusEnum.INIT.getValue()); + parent.setCreatedBy(SessionUtil.getUserCode()); + parent.setRemark(data.getRemark()); + parent.setOrderNumber(data.getOrderNum()); + parent.setDeptName(SessionUtil.getDepartName()); + parent.setSource(EBomSourceEnum.FROM_EXCE.getValue()); + return parent; + } + + /** + * 构建顶级 + * @param materialBaseInfos 主物料数据 + * @param materialNo 物料编号 + * @param materialDesc 物料描述 + * @return 父级 + */ + private BomNewEbomParentEntity buildRoot(List materialBaseInfos, String materialNo, String materialDesc) { + BomNewEbomParentEntity parent = new BomNewEbomParentEntity(); + parent.setRowId(IdWorker.getId()); + + BaseMaterialVO vo = materialBaseInfos.stream() + .filter(m -> m.getMaterialNo().equals(materialNo)) + .findFirst() + .orElse(null); + if (!Objects.isNull(vo)) { + parent.setDrawingNo(vo.getDrawingNo()); + parent.setUnitWeight(vo.getMaterialWeight()); + } + + parent.setMaterialNo(materialNo); + parent.setMaterialDesc(materialDesc); + parent.setMaterialTexture(""); + parent.setMaterialUnit("PC"); + //parent.setUnitWeight(BigDecimal.ZERO); + parent.setNum(BigDecimal.ONE); + //parent.setTotalWeight(BomUtil.calculateTotalWeight(data.getNum(), data.getUnitWeight())); + //parent.setCurrentVersion(OriginalConstant.DEFAULT_BOM_VERSION); + parent.setUserRootIs(1); + if (userRoleService.technician()) { + //工艺人员 + parent.setStatus(EBomStatusEnum.CHECKED.getValue()); + parent.setCreatedJob(UserJobEnum.ENGINEER.getValue()); + parent.setAuditUserName(SessionUtil.getUserCode()); + parent.setAuditTime(LocalDateTime.now()); + parent.setRootIs(bomNewEbomChildService.getBaseMapper().shouldSetRootIs(materialNo)); + } else { + //设计人员 + parent.setRootIs(1); + parent.setStatus(EBomStatusEnum.WAIT_CHECK.getValue()); + parent.setCreatedJob(UserJobEnum.DESIGNER.getValue()); + parent.setRootIsForWaitReview(1); + } + parent.setDeviseName(SessionUtil.getRealName()); + parent.setDeviseUserCode(SessionUtil.getUserCode()); + parent.setLastVersionIs(1); + parent.setEditStatus(EbomEditStatusEnum.HANDLER_CREATED.getValue()); + parent.setExceptionStatus(EBomExceptionStatusEnum.INIT.getValue()); + parent.setCreatedBy(SessionUtil.getUserCode()); + parent.setRemark(""); + parent.setDeptName(SessionUtil.getDepartName()); + parent.setSource(EBomSourceEnum.FROM_EXCE.getValue()); + return parent; + } +} diff --git a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewEbomChildMapper.xml b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewEbomChildMapper.xml index 65e5b549..df5dd0ec 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewEbomChildMapper.xml +++ b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewEbomChildMapper.xml @@ -73,4 +73,16 @@ group by parent_row_id + + From a7c1b7427299615ea7b3a99a14d8aa38d461c937 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Thu, 9 May 2024 08:11:05 +0800 Subject: [PATCH 8/9] =?UTF-8?q?feat(=E7=94=B5=E6=B0=94bom):=20=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E6=95=B0=E6=8D=AE=E6=97=B6=EF=BC=8C=E5=A6=82=E6=9E=9C?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E4=B8=BA=E7=A9=BA=EF=BC=8C=E5=88=99=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E4=B8=BAL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/nflg/product/bomnew/service/DQBomImportService.java | 3 +++ 1 file changed, 3 insertions(+) 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 7bc5d559..69642e0c 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 @@ -379,6 +379,9 @@ public class DQBomImportService { dQbomExcelVO.setProjectType(BomConstant.PROJECT_TYPE_TEMPORARY); } dQbomExcelVO.setCurrentVersion(""); + if (StrUtil.isBlank(dQbomExcelVO.getProjectType())) { + dQbomExcelVO.setProjectType("L"); + } excelContextTL.get().add(dQbomExcelVO); } From 4251feac9ba548636730d3712e2546c15fc7d174 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Thu, 9 May 2024 08:15:17 +0800 Subject: [PATCH 9/9] =?UTF-8?q?feat(=E5=AF=BC=E5=85=A5=E5=88=B0sap):=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=AE=BE=E7=BD=AE=E5=AF=BC=E5=85=A5sap?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../product/bomnew/service/BomNewEbomParentService.java | 6 ++++-- .../product/bomnew/service/BomNewMbomParentService.java | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) 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 ea2b49ec..241cb170 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 @@ -405,6 +405,7 @@ public class BomNewEbomParentService extends ServiceImpl