diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/constant/OptionalBomConstant.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/constant/OptionalBomConstant.java index 8a54e03a..14f6113c 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/constant/OptionalBomConstant.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/constant/OptionalBomConstant.java @@ -16,6 +16,16 @@ public class OptionalBomConstant { private final String description; } + @AllArgsConstructor + @Getter + public enum ChooseStatusEnum implements ValueEnum { + CHOOSE_STATUS_NO(0, "可选"), + CHOOSE_STATUS_YES(1, "标配"); + private final Integer value; + private final String description; + + } + //数据来源 (0 :excel 1:手动录入) @AllArgsConstructor @@ -48,4 +58,19 @@ public class OptionalBomConstant { } + @AllArgsConstructor + @Getter + public enum ExcelErrorTagEnum implements ValueEnum { + NO(0, "无错误"), + REPEAT (1, "重复的标配"), + MATERIA_NO_UNKOWN (2, "无物料号"), + ALL (3, "同时满足"); + private final Integer value; + private final String description; + + } + + + + } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/excel/ImportExcelField.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/excel/ImportExcelField.java new file mode 100644 index 00000000..cc1fb94d --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/excel/ImportExcelField.java @@ -0,0 +1,27 @@ +package com.nflg.product.bomnew.excel; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class ImportExcelField{ + @ExcelIgnore + private Integer lineNo; + + @ExcelProperty(value="",index = 0) + private String cellFirst; + + @ExcelProperty(value="",index = 1) + private String cellSecond; + + @ExcelProperty(value="",index = 2) + private String cellThird; + + + + + + +} diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/excel/ImportExcelHelper.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/excel/ImportExcelHelper.java new file mode 100644 index 00000000..22ca39af --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/excel/ImportExcelHelper.java @@ -0,0 +1,131 @@ +package com.nflg.product.bomnew.excel; + +import cn.hutool.core.collection.CollectionUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.enums.CellExtraTypeEnum; +import com.alibaba.excel.metadata.CellExtra; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.InputStream; +import java.lang.reflect.Field; +import java.util.List; + +public class ImportExcelHelper { + + private static final Logger LOGGER = LoggerFactory.getLogger(ImportExcelHelper.class); + + /** + * 返回解析后的List + * + * @param: fileName 文件名 + * @param: clazz Excel对应属性名 + * @param: sheetNo 要解析的sheet + * @param: headRowNumber 正文起始行 + * @return java.util.List 解析后的List + */ + public List getList(InputStream inputStream, Class clazz, Integer sheetNo, Integer headRowNumber) { + ImportExcelListener listener = new ImportExcelListener<>(headRowNumber); + try { + + EasyExcel.read(inputStream, clazz, listener).extraRead(CellExtraTypeEnum.MERGE).sheet(sheetNo).headRowNumber(headRowNumber).doRead(); + } catch (Exception e) { + LOGGER.error(e.getMessage()); + } + List extraMergeInfoList = listener.getExtraMergeInfoList(); + if (CollectionUtil.isEmpty(extraMergeInfoList)) { + return listener.getData(); + } + List data = explainMergeData(listener.getData(), extraMergeInfoList, headRowNumber); + return data; + } + + /** + * 处理合并单元格 + * + * @param data 解析数据 + * @param extraMergeInfoList 合并单元格信息 + * @param headRowNumber 起始行 + * @return 填充好的解析数据 + */ + private List explainMergeData(List data, List extraMergeInfoList, Integer headRowNumber) { + //循环所有合并单元格信息 + extraMergeInfoList.forEach(cellExtra -> { + int firstRowIndex = cellExtra.getFirstRowIndex() - headRowNumber; + int lastRowIndex = cellExtra.getLastRowIndex() - headRowNumber; + int firstColumnIndex = cellExtra.getFirstColumnIndex(); + int lastColumnIndex = cellExtra.getLastColumnIndex(); + //获取初始值 + Object initValue = getInitValueFromList(firstRowIndex, firstColumnIndex, data); + //设置值 + for (int i = firstRowIndex; i <= lastRowIndex; i++) { + for (int j = firstColumnIndex; j <= lastColumnIndex; j++) { + setInitValueToList(initValue, i, j, data); + } + } + }); + return data; + } + + /** + * 设置合并单元格的值 + * + * @param filedValue 值 + * @param rowIndex 行 + * @param columnIndex 列 + * @param data 解析数据 + */ + public void setInitValueToList(Object filedValue, Integer rowIndex, Integer columnIndex, List data) { + T object = data.get(rowIndex); + + for (Field field : object.getClass().getDeclaredFields()) { + //提升反射性能,关闭安全检查 + field.setAccessible(true); + ExcelProperty annotation = field.getAnnotation(ExcelProperty.class); + if (annotation != null) { + if (annotation.index() == columnIndex) { + try { + field.set(object, filedValue); + break; + } catch (IllegalAccessException e) { + LOGGER.error("设置合并单元格的值异常:"+e.getMessage()); + } + } + } + } + } + + + /** + * 获取合并单元格的初始值 + * rowIndex对应list的索引 + * columnIndex对应实体内的字段 + * + * @param firstRowIndex 起始行 + * @param firstColumnIndex 起始列 + * @param data 列数据 + * @return 初始值 + */ + private Object getInitValueFromList(Integer firstRowIndex, Integer firstColumnIndex, List data) { + Object filedValue = null; + T object = data.get(firstRowIndex); + for (Field field : object.getClass().getDeclaredFields()) { + //提升反射性能,关闭安全检查 + field.setAccessible(true); + ExcelProperty annotation = field.getAnnotation(ExcelProperty.class); + if (annotation != null) { + if (annotation.index() == firstColumnIndex) { + try { + filedValue = field.get(object); + break; + } catch (IllegalAccessException e) { + LOGGER.error("设置合并单元格的初始值异常:"+e.getMessage()); + } + } + } + } + return filedValue; + } +} diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/excel/ImportExcelListener.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/excel/ImportExcelListener.java new file mode 100644 index 00000000..fc21b3a4 --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/excel/ImportExcelListener.java @@ -0,0 +1,143 @@ +package com.nflg.product.bomnew.excel; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.event.AnalysisEventListener; +import com.alibaba.excel.metadata.CellExtra; +import com.alibaba.excel.read.metadata.holder.ReadRowHolder; +import com.alibaba.fastjson.JSON; +import org.apache.commons.beanutils.BeanUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * Excel模板的读取监听类 + + */ +public class ImportExcelListener extends AnalysisEventListener { + private static final Logger LOGGER = LoggerFactory.getLogger(ImportExcelListener.class); + /** + * 解析的数据 + */ + List list = new ArrayList<>(); + + /** + * 正文起始行 + */ + private Integer headRowNumber; + /** + * 合并单元格 + */ + private List extraMergeInfoList = new ArrayList<>(); + + public ImportExcelListener(Integer headRowNumber) { + this.headRowNumber = headRowNumber; + } + + /** + * 这个每一条数据解析都会来调用 + * + * @param data one row value. Is is same as {@link AnalysisContext#readRowHolder()} + * @param context context + */ + @Override + public void invoke(T data, AnalysisContext context) { + // 如果一行Excel数据均为空值,则不装载该行数据 + if(isLineNullValue(data)){ + return; + } + LOGGER.info("解析到一条数据: {}", JSON.toJSONString(data)); + // 获取Excle行号(从0开始) + ReadRowHolder readRowHolder = context.readRowHolder(); + Integer rowIndex = readRowHolder.getRowIndex(); + try { + BeanUtils.setProperty(data, "lineNo", rowIndex+1); + } catch (IllegalAccessException e) { + LOGGER.error("ImportExcelListener.invoke 设置行号异常: ", e); + } catch (InvocationTargetException e) { + LOGGER.error("ImportExcelListener.invoke 设置行号异常: ", e); + } + list.add(data); + } + + /** + * 所有数据解析完成了 都会来调用 + * + * @param context context + */ + @Override + public void doAfterAllAnalysed(AnalysisContext context) { + LOGGER.info("所有数据解析完成!"); + } + + /** + * 返回解析出来的List + */ + public List getData() { + return list; + } + + /** + * 读取额外信息:合并单元格 + */ + @Override + public void extra(CellExtra extra, AnalysisContext context) { + LOGGER.info("读取到了一条额外信息:{}", JSON.toJSONString(extra)); + switch (extra.getType()) { + case MERGE: { + LOGGER.info( + "额外信息是合并单元格,而且覆盖了一个区间,在firstRowIndex:{},firstColumnIndex;{},lastRowIndex:{},lastColumnIndex:{}", + extra.getFirstRowIndex(), extra.getFirstColumnIndex(), extra.getLastRowIndex(), + extra.getLastColumnIndex()); + if (extra.getRowIndex() >= headRowNumber) { + extraMergeInfoList.add(extra); + } + break; + } + default: + } + } + + /** + * 返回解析出来的合并单元格List + */ + public List getExtraMergeInfoList() { + return extraMergeInfoList; + } + + /** + * 判断整行单元格数据是否均为空 true是 false否 + */ + private boolean isLineNullValue(T data) { + if (data instanceof String) { + return Objects.isNull(data); + } + try { + List fields = Arrays.stream(data.getClass().getDeclaredFields()) + .filter(f -> f.isAnnotationPresent(ExcelProperty.class)) + .collect(Collectors.toList()); + List lineNullList = new ArrayList<>(fields.size()); + for (Field field : fields) { + field.setAccessible(true); + Object value = field.get(data); + if (Objects.isNull(value)) { + lineNullList.add(Boolean.TRUE); + } else { + lineNullList.add(Boolean.FALSE); + } + } + return lineNullList.stream().allMatch(Boolean.TRUE::equals); + } catch (Exception e) { + LOGGER.error("读取数据行[{}]解析失败: {}", data, e.getMessage()); + } + return true; + } +} diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/excel/PreviewExcelExportHelper.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/excel/PreviewExcelExportHelper.java new file mode 100644 index 00000000..bcc6ad5e --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/excel/PreviewExcelExportHelper.java @@ -0,0 +1,246 @@ +package com.nflg.product.bomnew.excel; + +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.metadata.Head; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.write.handler.CellWriteHandler; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.metadata.WriteTable; +import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; +import com.alibaba.excel.write.metadata.holder.WriteTableHolder; +import com.alibaba.excel.write.metadata.style.WriteCellStyle; +import com.alibaba.excel.write.metadata.style.WriteFont; +import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; +import com.nflg.product.bomnew.pojo.vo.OptionalEbomMainVO; +import org.apache.poi.ss.usermodel.*; +import com.alibaba.excel.write.merge.OnceAbsoluteMergeStrategy; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; + +public class PreviewExcelExportHelper { + + public void buildHeader(int maxColumn, OptionalEbomMainVO header , WriteSheet sheet, ExcelWriter writer, AtomicInteger tableNoCounting) { + + //自定义到处样式 + WriteCellStyle cellStyle = new WriteCellStyle(); + //水平居中 + cellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER); + WriteFont writeFont = new WriteFont(); + //加粗 + writeFont.setBold(Boolean.TRUE); + //字体大小 + writeFont.setFontHeightInPoints((short) 14); + cellStyle.setWriteFont(writeFont); + + WriteTable table = EasyExcel + .writerTable(tableNoCounting.get()) + .needHead(Boolean.FALSE) + .registerWriteHandler( + new OnceAbsoluteMergeStrategy(tableNoCounting.get() - 1, tableNoCounting.getAndIncrement() - 1, 0, maxColumn) + ) + .registerWriteHandler(new HorizontalCellStyleStrategy(cellStyle, cellStyle)) + .build(); + //在这里,由于EasyExcel使用List>这样的数据来构建一个表,里面的List表示一行数据。 + //所以我们这里一次只构建一行数据,一行数据中只有一个单元格的数据,一行数据就作为一个表格写入 + //故有几个标题就需要构建几次表格 + List cellList = new ArrayList<>(); + cellList.add(String.format("%s选配清单",header.getDeviceName())); + //因为需要合并单元格到列数最大的单元格处,这里如果不添加空字符串,则不会构建单元格,在合并单元格的时候就会报错 +// for (int i = 0; i < maxColumn - 1; ++i) { +// cellList.add(""); +// } + List> rowList = new ArrayList<>(); + rowList.add(cellList); + //写入表格 + writer.write(rowList, sheet, table); + + + + //第二行 + + + table = EasyExcel + .writerTable(tableNoCounting.get()) + .needHead(Boolean.FALSE) + // .registerWriteHandler(new HorizontalCellStyleStrategy(cellStyle, cellStyle)) + .registerWriteHandler(new PreviewExcelExportHelper.CellColorSheetWriteHandler()) + .build(); + cellList.clear(); + rowList.clear(); + cellList.add("机型编号:"); + + cellList.add(String.format("%s",header.getDeviceNo())); + cellList.add("机型名称:"); + + cellList.add(String.format("%s",header.getDeviceName())); + rowList.add(cellList); + writer.write(rowList, sheet, table); + tableNoCounting.getAndIncrement(); + + table = EasyExcel + .writerTable(tableNoCounting.get()) + .needHead(Boolean.FALSE) + .registerWriteHandler( + new OnceAbsoluteMergeStrategy(tableNoCounting.get() - 1, tableNoCounting.getAndIncrement() - 1, 0, maxColumn) + ) + // .registerWriteHandler(new HorizontalCellStyleStrategy(cellStyle, cellStyle)) + .build(); + rowList.clear(); + writer.write(rowList, sheet, table); + + } + + + + + public static class CellColorSheetWriteHandler implements CellWriteHandler { + private final Logger LOGGER = LoggerFactory.getLogger(CellColorSheetWriteHandler.class); + @Override + public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, + Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead) { + + } + + + @Override + public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, + Head head, Integer relativeRowIndex, Boolean isHead) { + + LOGGER.info("第{}行,第{}列写入完成。", cell.getRowIndex(), cell.getColumnIndex()); + + int rowIndex = cell.getRowIndex(); + int cellIndex = cell.getColumnIndex(); + + +// if(rowIndex==1){ +// switch (cellIndex){ +// case 0: +// case 2: { +// CellStyle cellStyle = cell.getSheet().getWorkbook().createCellStyle(); +// cellStyle.setFillBackgroundColor(IndexedColors.GREEN.index); +// cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); +// cellStyle.setBorderLeft(BorderStyle.THIN); +// cellStyle.setLeftBorderColor((short) 0); +// cellStyle.setBorderTop(BorderStyle.THIN); +// cellStyle.setTopBorderColor((short) 0); +// cellStyle.setBorderRight(BorderStyle.THIN); +// cellStyle.setRightBorderColor((short) 0); +// cellStyle.setBorderBottom(BorderStyle.THIN); +// cellStyle.setBottomBorderColor((short) 0); +// // 字体 +// Font headWriteFont = cell.getSheet().getWorkbook().createFont(); +// //设置字体名字 +// headWriteFont.setFontName("宋体"); +// //设置字体大小 +// headWriteFont.setFontHeightInPoints((short) 11); +// headWriteFont.setBold(true); +// cellStyle.setFont(headWriteFont); +// //设置水平对齐的样式为居中对齐; +// cellStyle.setAlignment(HorizontalAlignment.RIGHT); +// //设置垂直对齐的样式为居中对齐; +// cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); +// cell.setCellStyle(cellStyle); +// } +// break; +// +// +// case 1: +// case 3: { +// CellStyle cellStyle = cell.getSheet().getWorkbook().createCellStyle(); +// cellStyle.setFillBackgroundColor(IndexedColors.GREEN.index); +// cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); +// cellStyle.setBorderLeft(BorderStyle.THIN); +// cellStyle.setLeftBorderColor((short) 0); +// cellStyle.setBorderTop(BorderStyle.THIN); +// cellStyle.setTopBorderColor((short) 0); +// cellStyle.setBorderRight(BorderStyle.THIN); +// cellStyle.setRightBorderColor((short) 0); +// cellStyle.setBorderBottom(BorderStyle.THIN); +// cellStyle.setBottomBorderColor((short) 0); +// // 字体 +// Font headWriteFont = cell.getSheet().getWorkbook().createFont(); +// //设置字体名字 +// headWriteFont.setFontName("宋体"); +// //设置字体大小 +// headWriteFont.setFontHeightInPoints((short) 11); +// cellStyle.setFont(headWriteFont); +// //设置水平对齐的样式为居中对齐; +// cellStyle.setAlignment(HorizontalAlignment.CENTER); +// //设置垂直对齐的样式为居中对齐; +// cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); +// cell.setCellStyle(cellStyle); +// } +// break; +// +// } +// } + + + } + + + @Override + public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) { + + } + + + + + + + + + + + } + + + + + + public static WriteCellStyle getBodyStyle(HorizontalAlignment horizontalAlignment ) { + WriteCellStyle bodyWriteCellStyle = new WriteCellStyle(); + // 字体 + WriteFont headWriteFont = new WriteFont(); + //设置字体名字 + headWriteFont.setFontName("宋体"); + //设置字体大小 + headWriteFont.setFontHeightInPoints((short) 11); + + //设置底边框; + bodyWriteCellStyle.setBorderBottom(BorderStyle.THIN); + //设置底边框颜色; + bodyWriteCellStyle.setBottomBorderColor((short) 0); + //设置左边框; + bodyWriteCellStyle.setBorderLeft(BorderStyle.THIN); + //设置左边框颜色; + bodyWriteCellStyle.setLeftBorderColor((short) 0); + //设置右边框; + bodyWriteCellStyle.setBorderRight(BorderStyle.THIN); + //设置右边框颜色; + bodyWriteCellStyle.setRightBorderColor((short) 0); + //设置顶边框; + bodyWriteCellStyle.setBorderTop(BorderStyle.THIN); + //设置顶边框颜色; + bodyWriteCellStyle.setTopBorderColor((short) 0); + //设置自动换行; + bodyWriteCellStyle.setWrapped(false); + //设置水平对齐的样式为居中对齐; + bodyWriteCellStyle.setHorizontalAlignment(horizontalAlignment); + //设置垂直对齐的样式为居中对齐; + bodyWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER); + return bodyWriteCellStyle; + } + + + + + + +} diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/MaterialMainMapper.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/MaterialMainMapper.java index 9ccf2cd3..6eea165a 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/MaterialMainMapper.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/MaterialMainMapper.java @@ -31,4 +31,8 @@ public interface MaterialMainMapper extends BaseMapper { List getMaterialByDrawingNo(@Param("drawingNos") List drawingNos); + List getMaterialByAnyNo(@Param("drawingNos") List drawingNos); + + + } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/dto/OptionalEbomImportChildAddDTO.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/dto/OptionalEbomImportChildAddDTO.java index 108d7288..1233cde1 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/dto/OptionalEbomImportChildAddDTO.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/dto/OptionalEbomImportChildAddDTO.java @@ -26,22 +26,22 @@ public class OptionalEbomImportChildAddDTO implements Serializable { /** * 物料编码 */ - @ApiModelProperty(value = "物料编码") - private String materialNo; +// @ApiModelProperty(value = "物料编码") +// private String materialNo; /** * 物料名 */ - @ApiModelProperty(value = "物料名") - private String materialName; +// @ApiModelProperty(value = "物料名") +// private String materialName; /** * 物料描述 */ - @ApiModelProperty(value = "物料描述") - private String materialDesc; +// @ApiModelProperty(value = "物料描述") +// private String materialDesc; /** * 图号 */ - @ApiModelProperty(value = "图号") + @ApiModelProperty(value = "图号/物料编码") private String drawingNo; /** * 部件类型(1 单选 2 多选) diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/dto/OptionalEbomImportChildDTO.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/dto/OptionalEbomImportChildDTO.java index aaacde31..6f7b174f 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/dto/OptionalEbomImportChildDTO.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/dto/OptionalEbomImportChildDTO.java @@ -98,4 +98,21 @@ public class OptionalEbomImportChildDTO implements Serializable { private String createdBy; + + + private Integer lineNo; + + /** + * 是否忽略 (无) 物料号 + */ + private Boolean tag; + + /** + * 错误类型 + * 第0位表示重复的标配 第1位无物料号 + * + */ + private int error ; + + } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/dto/OptionalEbomImportDTO.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/dto/OptionalEbomImportDTO.java index 166fa518..ea8b3524 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/dto/OptionalEbomImportDTO.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/dto/OptionalEbomImportDTO.java @@ -3,33 +3,69 @@ package com.nflg.product.bomnew.pojo.dto; import java.math.BigDecimal; import java.time.LocalDateTime; + import com.baomidou.mybatisplus.annotation.*; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; + import java.io.Serializable; + import lombok.Data; import lombok.experimental.Accessors; + import java.time.LocalDateTime; import java.time.LocalDate; import java.util.Date; +import java.util.List; + @Data @ApiModel("选项信息") @Accessors(chain = true) -public class OptionalEbomImportDTO implements Serializable { -/**主键*/ @ApiModelProperty(value = "主键") +public class OptionalEbomImportDTO implements Serializable { + /** + * 主键 + */ + @ApiModelProperty(value = "主键") private Long rowId; -/**根节点id*/ @ApiModelProperty(value = "根节点id") + /** + * 根节点id + */ + @ApiModelProperty(value = "根节点id") private Long rootRowId; -/**上层id*/ @ApiModelProperty(value = "上层id") + /** + * 上层id + */ + @ApiModelProperty(value = "上层id") private Long parentRowId; -/**选项名*/ @ApiModelProperty(value = "选项名") + /** + * 选项名 + */ + @ApiModelProperty(value = "选项名") private String optionName; -/**创建时间*/ @ApiModelProperty(value = "创建时间") + + @ApiModelProperty(value = "选项图号") + private String optionDrawingNo; + + + + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间") private Date createdTime; -/**是否删除(0 :否 1:是)*/ @ApiModelProperty(value = "是否删除(0 :否 1:是)") + /** + * 是否删除(0 :否 1:是) + */ + @ApiModelProperty(value = "是否删除(0 :否 1:是)") private Integer isDel; @ApiModelProperty(value = "操作人编码") private String createdBy; + + private List child; + + private boolean error; + + } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/OptionalEbomImportEntity.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/OptionalEbomImportEntity.java index 8bd17dfc..0da3236b 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/OptionalEbomImportEntity.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/OptionalEbomImportEntity.java @@ -49,6 +49,10 @@ public class OptionalEbomImportEntity implements Serializable { @TableField(value = "option_name") @ApiModelProperty(value = "选项名") private String optionName; + + @TableField(value = "option_drawing_no") + @ApiModelProperty(value = "选项图号") + private String optionDrawingNo; /** * 创建时间 */ diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/OptionalEbomImportChildVO.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/OptionalEbomImportChildVO.java index 22ec91fc..60361bde 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/OptionalEbomImportChildVO.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/OptionalEbomImportChildVO.java @@ -90,7 +90,7 @@ public class OptionalEbomImportChildVO implements Serializable { * 创建时间 */ @ApiModelProperty(value = "创建时间") - private LocalDateTime createdTime; + private Date createdTime; /** * 操作人编码 */ diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/OptionalEbomImportVO.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/OptionalEbomImportVO.java index ad912900..cd9d84e3 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/OptionalEbomImportVO.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/OptionalEbomImportVO.java @@ -45,6 +45,8 @@ public class OptionalEbomImportVO implements Serializable { */ @ApiModelProperty(value = "选项名") private String optionName; + @ApiModelProperty(value = "选项图号") + private String optionDrawingNo; /** * 创建时间 */ 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 3f0a9f4a..db19bceb 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 @@ -33,16 +33,17 @@ public class MaterialMainService extends ServiceImpl getMaterialBaseInfo(@Param("materialNos") List materialNos){ + public List getMaterialBaseInfo(@Param("materialNos") List materialNos) { return this.getBaseMapper().getMaterialBaseInfo(materialNos); } - public List getMateialMate(){ + public List getMateialMate() { return this.getBaseMapper().getMateialMate(); } @@ -75,9 +76,9 @@ public class MaterialMainService extends ServiceImpl */ - public void initMaterialForDrawdingNo(List list, Function getDrawingNoFun, BiConsumer... setFun) { + public void initMaterialForDrawdingNo(List list, Function getDrawingNoFun, BiConsumer... setFun) { List drawingNos = list.stream().map(getDrawingNoFun).collect(Collectors.toList()); - if(CollUtil.isNotEmpty(drawingNos)) { + if (CollUtil.isNotEmpty(drawingNos)) { List materialList = SpringUtil.getBean(MaterialMainMapper.class).getMaterialByDrawingNo(drawingNos); Map materialVOMap = ListCommonUtil.listToMap(materialList, BaseMaterialVO::getDrawingNo); for (T t : list) { @@ -96,4 +97,44 @@ public class MaterialMainService extends ServiceImpl void initMaterialForDrawdingNoImmul(List list, Function getDrawingNoFun, BiConsumer setMaterialNoFun,BiConsumer setMaterialDescFun) { + List drawingNos = list.stream().map(getDrawingNoFun).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(drawingNos)) { + List materialList = SpringUtil.getBean(MaterialMainMapper.class).getMaterialByDrawingNo(drawingNos); + Map materialVOMap = ListCommonUtil.listToMap(materialList, BaseMaterialVO::getDrawingNo); + for (T t : list) { + + String drawingNo = getDrawingNoFun.apply(t); + BaseMaterialVO materialVO = materialVOMap.get(drawingNo); + if (materialVO != null) { + setMaterialNoFun.accept( t,materialVO.getMaterialNo()); + setMaterialDescFun .accept( t,materialVO.getMaterialDesc()); + +// for (BiConsumer setFun1 : setFun) { +// setFun1.accept(t, materialVO.getMaterialNo()); +// } + } + + + } + } + + + } + + /** + * @param drawingNos 图号 或 物料号 + * @return + */ + public List initMaterialForAnyNo(List drawingNos) { + + if (CollUtil.isNotEmpty(drawingNos)) { + List materialList = SpringUtil.getBean(MaterialMainMapper.class).getMaterialByAnyNo(drawingNos); + return materialList; + + } + return null; + + } } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/OptionalEbomImportChildService.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/OptionalEbomImportChildService.java index 4d7d0e26..cd4142ce 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/OptionalEbomImportChildService.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/OptionalEbomImportChildService.java @@ -3,6 +3,7 @@ package com.nflg.product.bomnew.service; import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.TypeReference; +import cn.hutool.extra.spring.SpringUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -14,112 +15,70 @@ import com.nflg.product.bomnew.pojo.dto.OptionalEbomImportChildAddDTO; import com.nflg.product.bomnew.pojo.dto.OptionalEbomImportChildDTO; import com.nflg.product.bomnew.pojo.dto.OptionalEbomMainDelDTO; import com.nflg.product.bomnew.pojo.entity.OptionalEbomImportChildEntity; +import com.nflg.product.bomnew.pojo.vo.BaseMaterialVO; import com.nflg.product.bomnew.pojo.vo.OptionalEbomImportChildVO; import org.apache.ibatis.annotations.Param; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.stream.Collectors; /** * ebom选配件表(OptionalEbomImportChild)服务实现类 - * - */ @Service public class OptionalEbomImportChildService extends ServiceImpl { - public List getByRootRowIdList( Long rootRowId){ + public List getByRootRowIdList(Long rootRowId) { return getBaseMapper().getByRootRowIdList(rootRowId); } - private OptionalEbomImportChildEntity vo2entity(OptionalEbomImportChildVO vo){ - OptionalEbomImportChildEntity entity=new OptionalEbomImportChildEntity(); - BeanUtils.copyProperties(vo,entity); - entity.setCreatedTime(new Date()); - entity.setUpdatedTime(entity.getCreatedTime()); - // entity.setCreatedBy(SessionUtil.getUserCode()); - - return entity; - } - - /** - * 标配 - * @param entities - * @return - */ - public Boolean insertPartTypeRadio( List entities){ - if(entities==null || entities.size()==0){ - return false; - } - - - List lists= Convert.convert(new TypeReference>() {}, entities); - - lists.forEach(item->{ - item.setCreatedBy(SessionUtil.getUserCode()); - item.setCreatedTime(new Date()); - item.setUpdatedTime(new Date()); - - }); - - return this.saveOrUpdateBatch(lists) ; - } - - - - public Boolean insertPartTypeCheckbox( OptionalEbomImportChildVO vo){ - - OptionalEbomImportChildEntity entity= Convert.convert(new TypeReference() {}, vo); - entity.setPartType(OptionalBomConstant.PartTypeEnum.PART_TYPE_CHECBOX.getValue()); - entity.setCreatedBy(SessionUtil.getUserCode()); - entity.setCreatedTime(new Date()); - entity.setUpdatedTime(new Date()); - return this.save(entity); - } - /** * 添加选配数据 + * * @param dto * @return */ public Boolean insertOption(OptionalEbomImportChildAddDTO dto) throws NflgBusinessException { + String nos = dto.getDrawingNo(); + //先统一后分割 + String[] array = nos.replace(";", ";").split(";"); + List listNo = Arrays.stream(array).collect(Collectors.toList()); - if(dto.getPartType()==OptionalBomConstant.PartTypeEnum.PART_TYPE_RADIO.getValue()){ - OptionalEbomImportChildVO vo=Convert.convert(new TypeReference() {}, dto); - List list=new ArrayList<>(); - list.add(vo); - list.forEach(item->{ - item.setSource(OptionalBomConstant.SourceTypeEnum.SOURCE_INPUT.getValue()); - }); + List materialListVo = SpringUtil.getBean(MaterialMainService.class).initMaterialForAnyNo(listNo); + List optionList = Convert.convert(new TypeReference>() { + }, materialListVo); - return insertPartTypeRadio(list); - } + optionList.forEach(item -> { - if(dto.getPartType()==OptionalBomConstant.PartTypeEnum.PART_TYPE_CHECBOX.getValue()){ - OptionalEbomImportChildVO vo=Convert.convert(new TypeReference() {}, dto); - vo.setSource(OptionalBomConstant.SourceTypeEnum.SOURCE_INPUT.getValue()); - return insertPartTypeCheckbox(vo); - } + item.setSource(OptionalBomConstant.SourceTypeEnum.SOURCE_INPUT.getValue()); + item.setCreatedBy(SessionUtil.getUserCode()); + item.setRootRowId(dto.getRootRowId()); + item.setParentRowId(dto.getParentRowId()); + item.setPartType(dto.getPartType()); + item.setRemak(dto.getRemak()); + item.setCreatedTime(new Date()); + item.setUpdatedTime(new Date()); + + }); + return this.saveOrUpdateBatch(optionList); - return false; } + public Boolean openCloseStatus(OptionalEbomImportChildVO vo) { - - public Boolean openCloseStatus( OptionalEbomImportChildVO vo) { - - OptionalEbomImportChildEntity entity= Convert.convert(OptionalEbomImportChildEntity.class,vo); + OptionalEbomImportChildEntity entity = Convert.convert(OptionalEbomImportChildEntity.class, vo); entity.setUpdatedTime(new Date()); - return this.updateById(entity); + return this.updateById(entity); } @@ -131,18 +90,18 @@ public class OptionalEbomImportChildService extends ServiceImpl longList = dto.getRowIdList(); String rowIds = longList.stream().map(Object::toString) .collect(Collectors.joining(",")); - return getBaseMapper().deleteByRootId(rowIds)>0; + return getBaseMapper().deleteByRootId(rowIds) > 0; } - public Boolean deleteByRowId(List longIds){ + public Boolean deleteByRowId(List longIds) { String rowIds = longIds.stream().map(Object::toString) .collect(Collectors.joining(",")); - return getBaseMapper().deleteByRowId(rowIds)>0; + return getBaseMapper().deleteByRowId(rowIds) > 0; } } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/OptionalEbomMainService.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/OptionalEbomMainService.java index b380337b..48aa767e 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/OptionalEbomMainService.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/OptionalEbomMainService.java @@ -56,6 +56,7 @@ public class OptionalEbomMainService extends ServiceImpl longList = dto.getRowIdList(); diff --git a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/MaterialMainMapper.xml b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/MaterialMainMapper.xml index 225616ea..43636498 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/MaterialMainMapper.xml +++ b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/MaterialMainMapper.xml @@ -99,4 +99,20 @@ + + + + diff --git a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/OptionalEbomConfigMapper.xml b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/OptionalEbomConfigMapper.xml index 765e345e..b732c5c3 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/OptionalEbomConfigMapper.xml +++ b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/OptionalEbomConfigMapper.xml @@ -77,7 +77,6 @@ diff --git a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/OptionalEbomImportMapper.xml b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/OptionalEbomImportMapper.xml index 147d9deb..63ebb56a 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/OptionalEbomImportMapper.xml +++ b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/OptionalEbomImportMapper.xml @@ -7,13 +7,15 @@ + + -row_id,root_row_id,parent_row_id,option_name,created_time,is_del,created_by +row_id,root_row_id,parent_row_id,option_name,option_drawing_no,created_time,is_del,created_by