From b3bb0fff73af02008342b05a77f9503ae4757bd2 Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Thu, 17 Apr 2025 16:39:56 +0800 Subject: [PATCH] =?UTF-8?q?excel=E3=80=81xml=E5=BC=82=E6=AD=A5=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E8=B0=83=E6=95=B4=EF=BC=9A=E5=90=8C=E6=AD=A5=E6=9D=BF?= =?UTF-8?q?=E6=9D=90=E5=BA=93=E5=8C=B9=E9=85=8D=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../executor/enums/ErrorCodeConstants.java | 1 + .../excel/DefaultExcelOrderImportHandler.java | 6 +- .../xml/DefaultXmlOrderImportHandler.java | 6 +- .../DefaultOrderImportExcelListener.java | 40 ++- .../DefaultOrderImportXmlParserHandler.java | 85 ++++- .../module/plan/enums/ErrorCodeConstants.java | 3 +- .../OrderImportTempDataMapper.java | 2 +- .../DefaultExcelOrderImportFactory.java | 310 +++++++++--------- .../factory/DefaultXmlOrderImportFactory.java | 60 +--- .../orderImport/OrderImportTempDataMapper.xml | 12 +- 10 files changed, 271 insertions(+), 254 deletions(-) diff --git a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java index f6d2b6994..505d98037 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java +++ b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java @@ -97,6 +97,7 @@ public class ErrorCodeConstants { public static final ErrorCode ORDER_IMPORT_GROUPCODE_NOT_EXIST_VALID_ERROR = new ErrorCode(1_002_031_013, "导入校验异常:板件{}下加工组编码{}不存在于加工组编码列表中"); public static final ErrorCode ORDER_IMPORT_ROOMCODE_NOT_EXIST_VALID_ERROR = new ErrorCode(1_002_031_014, "导入校验异常:板件{}下房间编码{}不存在于房间编码列表中"); public static final ErrorCode ORDER_IMPORT_BODYCODE_NOT_EXIST_VALID_ERROR = new ErrorCode(1_002_031_015, "导入校验异常:板件{}下柜体编码{}不存在于柜体编码列表中"); + public static final ErrorCode ORDER_IMPORT_PLATEGOODS_NOT_EXIST_VALID_ERROR = new ErrorCode(1_002_031_016, "导入校验异常:第{}行的板材不存在,请确保板材管理中存在对应商品编号或商品(名称+材质+颜色+厚度+品牌)组合的板材后导入"); // ========== manage板材/配件 1_004_001_000 ========== public static final ErrorCode PARTS_NOT_EXISTS = new ErrorCode(1_004_001_000, "配件不存在"); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/orderImport/handler/excel/DefaultExcelOrderImportHandler.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/orderImport/handler/excel/DefaultExcelOrderImportHandler.java index 89c729f44..8562bcb9a 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/orderImport/handler/excel/DefaultExcelOrderImportHandler.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/orderImport/handler/excel/DefaultExcelOrderImportHandler.java @@ -11,6 +11,7 @@ import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderImportAs import com.cf.imes.module.executor.dal.dataobject.orderImport.OrderImportTaskDO; import com.cf.imes.module.executor.dal.mysql.orderImport.OrderImportTaskMapper; import com.cf.imes.module.executor.dal.mysql.orderImport.OrderImportTempDataMapper; +import com.cf.imes.module.executor.dal.mysql.plate.PlateGoodMapper; import com.cf.imes.module.executor.enums.OrderImportStatusEnum; import com.cf.imes.module.executor.enums.OrderImportTaskStatusEnum; import com.cf.imes.module.executor.enums.OrderImportTypeEnum; @@ -67,6 +68,9 @@ public class DefaultExcelOrderImportHandler implements AbstractExcelOrderImportH @Resource private ChenfengCacheProperties chenfengCacheProperties; + @Resource + private PlateGoodMapper plateGoodMapper; + @Override public String getFactoryName() { return "default"; @@ -84,7 +88,7 @@ public class DefaultExcelOrderImportHandler implements AbstractExcelOrderImportH throw new ServiceException(ORDER_IMPORT_ORGAN_LOCK_ERROR); } DefaultOrderImportExcelListener excelListener = - new DefaultOrderImportExcelListener(orderImportTempDataMapper, orderService, dictDataApi, snowFlakeGenerator, importAsyncReqVO.getOrderId(), taskId); + new DefaultOrderImportExcelListener(orderImportTempDataMapper, orderService, dictDataApi, snowFlakeGenerator, plateGoodMapper, importAsyncReqVO.getOrderId(), taskId); try (InputStream inputStream = file.getInputStream()) { // 读取excel diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/orderImport/handler/xml/DefaultXmlOrderImportHandler.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/orderImport/handler/xml/DefaultXmlOrderImportHandler.java index d589ea5d9..1ee2241e7 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/orderImport/handler/xml/DefaultXmlOrderImportHandler.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/orderImport/handler/xml/DefaultXmlOrderImportHandler.java @@ -10,6 +10,7 @@ import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderImportAs import com.cf.imes.module.executor.dal.dataobject.orderImport.OrderImportTaskDO; import com.cf.imes.module.executor.dal.mysql.orderImport.OrderImportTaskMapper; import com.cf.imes.module.executor.dal.mysql.orderImport.OrderImportTempDataMapper; +import com.cf.imes.module.executor.dal.mysql.plate.PlateGoodMapper; import com.cf.imes.module.executor.enums.OrderImportStatusEnum; import com.cf.imes.module.executor.enums.OrderImportTaskStatusEnum; import com.cf.imes.module.executor.enums.OrderImportTypeEnum; @@ -58,6 +59,9 @@ public class DefaultXmlOrderImportHandler implements AbstractXmlOrderImportHandl @Resource private ChenfengCacheProperties chenfengCacheProperties; + @Resource + private PlateGoodMapper plateGoodMapper; + @Override public String getFactoryName() { return "default"; @@ -74,7 +78,7 @@ public class DefaultXmlOrderImportHandler implements AbstractXmlOrderImportHandl throw new ServiceException(ORDER_IMPORT_ORGAN_LOCK_ERROR); } try { - DefaultOrderImportXmlParserHandler defaultOrderImportXmlParserHandler = new DefaultOrderImportXmlParserHandler(orderImportTempDataMapper, orderService, snowFlakeGenerator, importAsyncReqVO.getOrderId(), taskId); + DefaultOrderImportXmlParserHandler defaultOrderImportXmlParserHandler = new DefaultOrderImportXmlParserHandler(orderImportTempDataMapper, orderService, snowFlakeGenerator, plateGoodMapper, importAsyncReqVO.getOrderId(), taskId); defaultOrderImportXmlParserHandler.analyzeFile(file); } catch (ServiceException sev) { // 导入锁解锁 diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/excel/DefaultOrderImportExcelListener.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/excel/DefaultOrderImportExcelListener.java index b8ad48847..1416cafb2 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/excel/DefaultOrderImportExcelListener.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/excel/DefaultOrderImportExcelListener.java @@ -1,5 +1,6 @@ package com.cf.imes.module.executor.util.fileConversion.admin.files.excel; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; @@ -16,7 +17,9 @@ import com.cf.imes.framework.organ.core.context.OrganContextHolder; import com.cf.imes.framework.web.core.util.WebFrameworkUtils; import com.cf.imes.module.executor.dal.dataobject.order.OrderDO; import com.cf.imes.module.executor.dal.dataobject.orderImport.OrderImportTempDataDO; +import com.cf.imes.module.executor.dal.dataobject.plate.PlateGoodDO; import com.cf.imes.module.executor.dal.mysql.orderImport.OrderImportTempDataMapper; +import com.cf.imes.module.executor.dal.mysql.plate.PlateGoodMapper; import com.cf.imes.module.executor.enums.CategoryEnum; import com.cf.imes.module.executor.enums.DataTypeEnum; import com.cf.imes.module.executor.enums.DictTypeConstants; @@ -27,12 +30,15 @@ import com.cf.imes.module.executor.enums.OrderStatusEnum; import com.cf.imes.module.executor.enums.QuarrelEnum; import com.cf.imes.module.executor.service.order.OrderService; import com.cf.imes.module.executor.util.fileConversion.admin.ToolUtil; +import com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO.PlateXmlVO; import com.cf.imes.module.system.api.dict.DictDataApi; import com.cf.imes.module.system.api.dict.dto.DictDataRespDTO; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import javax.xml.stream.Location; import java.lang.reflect.Field; +import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @@ -47,6 +53,7 @@ import static com.cf.imes.module.executor.enums.ErrorCodeConstants.ORDER_IMPORT_ import static com.cf.imes.module.executor.enums.ErrorCodeConstants.ORDER_IMPORT_ORDER_FIELD_EMPTY; import static com.cf.imes.module.executor.enums.ErrorCodeConstants.ORDER_IMPORT_ORDER_FIELD_LENGTH_ERROR; import static com.cf.imes.module.executor.enums.ErrorCodeConstants.ORDER_IMPORT_ORDER_FIELD_MOBILE_FORMAT_ERROR; +import static com.cf.imes.module.executor.enums.ErrorCodeConstants.ORDER_IMPORT_PLATEGOODS_NOT_EXIST_VALID_ERROR; /** * 默认生产单excel导入监听器 @@ -80,6 +87,8 @@ public final class DefaultOrderImportExcelListener extends AnalysisEventListener private SnowFlakeGenerator snowFlakeGenerator; + private PlateGoodMapper plateGoodMapper; + /** * 补板用 */ @@ -111,11 +120,12 @@ public final class DefaultOrderImportExcelListener extends AnalysisEventListener private static final String EMPTY_STRING = new String(); - public DefaultOrderImportExcelListener(OrderImportTempDataMapper orderImportTempDataMapper, OrderService orderService, DictDataApi dictDataApi, SnowFlakeGenerator snowFlakeGenerator, Long orderId, Long taskId) { + public DefaultOrderImportExcelListener(OrderImportTempDataMapper orderImportTempDataMapper, OrderService orderService, DictDataApi dictDataApi, SnowFlakeGenerator snowFlakeGenerator, PlateGoodMapper plateGoodMapper, Long orderId, Long taskId) { this.orderImportTempDataMapper = orderImportTempDataMapper; this.orderService = orderService; this.dictDataApi = dictDataApi; this.snowFlakeGenerator = snowFlakeGenerator; + this.plateGoodMapper = plateGoodMapper; this.orderId = orderId; this.taskId = taskId; // 是否补板 @@ -603,6 +613,34 @@ public final class DefaultOrderImportExcelListener extends AnalysisEventListener isNotEmptyAndDict(vo.getTexture(), DictTypeConstants.GRAIN_TYPE, "纹路"); isNotEmptyAndDict(vo.getOpenDoorType(), DictTypeConstants.DOOR_OPENING_DIRECTIONS, "开门方向"); + // 查询板材库是否有对应 + queryPlateExists(vo); + } + + /** + * 查询板材库是否有对应物料编码 + * 不存在再使用material、coatingObverse、thickness、brand、name查询是否存在匹配,还是不存在提示板材库先添加 + * + * @param plate + */ + private void queryPlateExists(OrderPlateImportExcelVO plate) { + PlateGoodDO plateGoodDO = null; + List plateGoodDOs; + if (StringUtils.isNotEmpty(plate.getGoodsId())) { + plateGoodDOs = plateGoodMapper.selectGoodOne(plate.getGoodsId(), OrganContextHolder.getOrganId()); + } else { + plateGoodDOs = plateGoodMapper.selectGood(plate.getMaterial(), plate.getColor(), + BigDecimal.valueOf(Long.parseLong(plate.getThickness())), + plate.getBrand(), plate.getName(), OrganContextHolder.getOrganId()); + } + + if (CollUtil.isNotEmpty(plateGoodDOs)) { + plateGoodDO = plateGoodDOs.get(0); + } + + if (ObjectUtil.isNull(plateGoodDO)) { + throw ServiceExceptionUtil.exception(ORDER_IMPORT_PLATEGOODS_NOT_EXIST_VALID_ERROR, rowIndex + 1); + } } /** diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/DefaultOrderImportXmlParserHandler.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/DefaultOrderImportXmlParserHandler.java index 69c5e28ad..ac1da5f2e 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/DefaultOrderImportXmlParserHandler.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/DefaultOrderImportXmlParserHandler.java @@ -16,7 +16,9 @@ import com.cf.imes.framework.organ.core.context.OrganContextHolder; import com.cf.imes.framework.web.core.util.WebFrameworkUtils; import com.cf.imes.module.executor.dal.dataobject.order.OrderDO; import com.cf.imes.module.executor.dal.dataobject.orderImport.OrderImportTempDataDO; +import com.cf.imes.module.executor.dal.dataobject.plate.PlateGoodDO; import com.cf.imes.module.executor.dal.mysql.orderImport.OrderImportTempDataMapper; +import com.cf.imes.module.executor.dal.mysql.plate.PlateGoodMapper; import com.cf.imes.module.executor.enums.DataTypeEnum; import com.cf.imes.module.executor.enums.DictTypeConstants; import com.cf.imes.module.executor.enums.OrderImportTmpDataTypeEnum; @@ -56,6 +58,7 @@ import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.web.multipart.MultipartFile; +import javax.xml.stream.Location; import javax.xml.stream.XMLEventReader; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.events.Attribute; @@ -64,6 +67,7 @@ import javax.xml.stream.events.StartElement; import javax.xml.stream.events.XMLEvent; import java.io.InputStream; import java.lang.reflect.Field; +import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @@ -75,6 +79,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Consumer; import java.util.function.Supplier; @@ -86,6 +91,7 @@ import static com.cf.imes.module.executor.enums.ErrorCodeConstants.ORDER_IMPORT_ import static com.cf.imes.module.executor.enums.ErrorCodeConstants.ORDER_IMPORT_ORDER_FIELD_EMPTY; import static com.cf.imes.module.executor.enums.ErrorCodeConstants.ORDER_IMPORT_ORDER_FIELD_LENGTH_ERROR; import static com.cf.imes.module.executor.enums.ErrorCodeConstants.ORDER_IMPORT_ORDER_FIELD_MOBILE_FORMAT_ERROR; +import static com.cf.imes.module.executor.enums.ErrorCodeConstants.ORDER_IMPORT_PLATEGOODS_NOT_EXIST_VALID_ERROR; import static com.cf.imes.module.executor.enums.ErrorCodeConstants.ORDER_IMPORT_ROOMCODE_NOT_EXIST_VALID_ERROR; import static com.cf.imes.module.executor.enums.OrderImportConstants.NOT_ASSIGNED; import static com.cf.imes.module.executor.enums.OrderImportConstants.NOT_ASSIGNED_CODE; @@ -119,6 +125,7 @@ public class DefaultOrderImportXmlParserHandler { private Set groupCodeSet = new HashSet<>(); private Map roomMap = new HashMap<>(); private Map roomBodyMap = new HashMap<>(); + private Map existGoodsIdMap = new HashMap<>(); // 物料编码:已创建的innerGoodsId /** * 补板用 @@ -174,6 +181,8 @@ public class DefaultOrderImportXmlParserHandler { private SnowFlakeGenerator snowFlakeGenerator; + private PlateGoodMapper plateGoodMapper; + // 基础常量 private static final String FIELD_AXISXROTATE = "axisXrotate"; private static final String FIELD_AXISYROTATE = "axisYrotate"; @@ -193,10 +202,11 @@ public class DefaultOrderImportXmlParserHandler { private static final String FIELD_THICKNESS = "thickness"; private static final String FIELD_ORDERCODE = "orderCode"; - public DefaultOrderImportXmlParserHandler(OrderImportTempDataMapper orderImportTempDataMapper, OrderService orderService, SnowFlakeGenerator snowFlakeGenerator, Long orderId, Long taskId) { + public DefaultOrderImportXmlParserHandler(OrderImportTempDataMapper orderImportTempDataMapper, OrderService orderService, SnowFlakeGenerator snowFlakeGenerator, PlateGoodMapper plateGoodMapper, Long orderId, Long taskId) { this.orderImportTempDataMapper = orderImportTempDataMapper; this.orderService = orderService; this.snowFlakeGenerator = snowFlakeGenerator; + this.plateGoodMapper = plateGoodMapper; this.orderId = orderId; this.taskId = taskId; // 是否补板 @@ -244,7 +254,7 @@ public class DefaultOrderImportXmlParserHandler { analyzeGroupXml(attributes); break; case "Plate": - analyzePlateXml(attributes); + analyzePlateXml(attributes, en.getLocation()); break; case "Block": analyzeBlockXml(attributes); @@ -602,29 +612,40 @@ public class DefaultOrderImportXmlParserHandler { * @param attributes * @throws Exception */ - private void analyzePlateXml(Iterator attributes) throws Exception { + private void analyzePlateXml(Iterator attributes, Location location) throws Exception { // 从标签属性生成plate对象 PlateXmlVO plateXmlVO = getJavaBeanFromXmlAttr(PlateXmlVO.class, attributes); if (ObjectUtil.isNull(plateXmlVO)) { plateXmlVO = new PlateXmlVO(); } // 校验板材数据 - checkPlate(plateXmlVO); + checkPlate(plateXmlVO, location); // 每解析到一次plate,设置一次全局plateItemCode给block列表用 plateItemCode = String.valueOf(snowFlakeGenerator.nextId(null)); - // 添加到临时表 - cachedDataList.add(OrderImportTempDataDO.builder() - .id((Long) snowFlakeGenerator.nextId(null)) - .orderId(orderId) - .taskId(taskId) - .type(OrderImportTmpDataTypeEnum.GOODS.getType()) - .innerGoodsId(plateItemCode) - .createTime(LocalDateTime.now()) - .detail(JsonUtils.zipString(JSON.toJSONString(plateXmlVO))) - .sort(sort++) - .build()); + // 相同的itemCode不重复创建临时Goods数据 + String currentItemCode = plateXmlVO.getItemCode(); + Long existInnerGoodsId = existGoodsIdMap.get(currentItemCode); + if(ObjectUtil.isNull(existInnerGoodsId)) { + Long innerGoodsId = (Long) snowFlakeGenerator.nextId(null); + plateItemCode = String.valueOf(innerGoodsId); + existGoodsIdMap.put(currentItemCode, innerGoodsId); + + // 添加到临时表 + cachedDataList.add(OrderImportTempDataDO.builder() + .id((Long) snowFlakeGenerator.nextId(null)) + .orderId(orderId) + .taskId(taskId) + .type(OrderImportTmpDataTypeEnum.GOODS.getType()) + .innerGoodsId(plateItemCode) + .createTime(LocalDateTime.now()) + .detail(JsonUtils.zipString(JSON.toJSONString(plateXmlVO))) + .sort(sort++) + .build()); + } else { + plateItemCode = String.valueOf(existInnerGoodsId); + } } @@ -633,7 +654,7 @@ public class DefaultOrderImportXmlParserHandler { * * @param plate */ - private void checkPlate(PlateXmlVO plate) { + private void checkPlate(PlateXmlVO plate, Location location) { isEmptyAndBack(plate::getName, "plate:name"); isEmptyAndBack(plate::getMaterial, "plate:material"); @@ -651,6 +672,37 @@ public class DefaultOrderImportXmlParserHandler { notEmptyPositiveNumber(plate::getArea, "area", Double.class); isEmptyAddAndInvalid(plate::getUnitArea, plate::setUnitArea, "m²", DictTypeConstants.UNIT_AREA, "unitArea"); notEmptyPositiveNumber(plate::getCount, FIELD_COUNT, Integer.class); + + // 查询板材库是否有对应 + queryPlateExists(plate,location); + } + + /** + * 查询板材库是否有对应物料编码 + * 不存在再使用material、coatingObverse、thickness、brand、name查询是否存在匹配,还是不存在提示板材库先添加 + * + * @param plate + */ + private void queryPlateExists(PlateXmlVO plate, Location location) { + PlateGoodDO plateGoodDO = null; + List plateGoodDOs; + if (StringUtils.isNotEmpty(plate.getItemCode())) { + plateGoodDOs = plateGoodMapper.selectGoodOne(plate.getItemCode(), OrganContextHolder.getOrganId()); + } else { + plateGoodDOs = plateGoodMapper.selectGood(plate.getMaterial(), plate.getCoatingObverse(), + BigDecimal.valueOf(Long.parseLong(plate.getThickness())), + plate.getBrand(), plate.getName(), OrganContextHolder.getOrganId()); + } + + if (CollUtil.isNotEmpty(plateGoodDOs)) { + plateGoodDO = plateGoodDOs.get(0); + } + + if (ObjectUtil.isNotNull(plateGoodDO)) { + plate.setItemCode(plateGoodDO.getGoodsId()); + } else { + throw ServiceExceptionUtil.exception(ORDER_IMPORT_PLATEGOODS_NOT_EXIST_VALID_ERROR, location.getLineNumber()); + } } /** @@ -1642,7 +1694,6 @@ public class DefaultOrderImportXmlParserHandler { if (ObjectUtil.isNull(roomBoxXmlVO)) { - // 检查roomCode if (!bodyEmpty) { throw ServiceExceptionUtil.exception(ORDER_IMPORT_BODYCODE_NOT_EXIST_VALID_ERROR, se, boxCode); diff --git a/cf-module-prod-plan/cf-module-prod-plan-api/src/main/java/com/cf/imes/module/plan/enums/ErrorCodeConstants.java b/cf-module-prod-plan/cf-module-prod-plan-api/src/main/java/com/cf/imes/module/plan/enums/ErrorCodeConstants.java index b863d35f0..dd583345a 100644 --- a/cf-module-prod-plan/cf-module-prod-plan-api/src/main/java/com/cf/imes/module/plan/enums/ErrorCodeConstants.java +++ b/cf-module-prod-plan/cf-module-prod-plan-api/src/main/java/com/cf/imes/module/plan/enums/ErrorCodeConstants.java @@ -8,7 +8,7 @@ import com.cf.imes.framework.common.exception.ErrorCode; */ public class ErrorCodeConstants { // ========== 生产单导入 1_005_000 ========== - public static final ErrorCode ORDER_IMPORT_PLATE_GOODS_NOT_EXISTS = new ErrorCode(1_005_000_000, "{}小板数据不存在:{}"); + public static final ErrorCode ORDER_IMPORT_PLATE_GOODS_NOT_EXISTS = new ErrorCode(1_005_000_000, "{}生产单商品板材数据不存在:{}"); public static final ErrorCode ORDER_IMPORT_ORGANID_NOT_EXISTS = new ErrorCode(1_005_000_001, "不存在组织id,导入终止"); public static final ErrorCode ORDER_IMPORT_FAIL = new ErrorCode(1_005_000_002, "导入失败"); public static final ErrorCode WEBCAD_ORDER_NOT_EXISTS_ERROR = new ErrorCode(1_005_000_004, "导入失败:生产单号【{}】不存在"); @@ -20,4 +20,5 @@ public class ErrorCodeConstants { public static final ErrorCode WEBCAD_ORDER_IMPORT_ORG_SEALEDGE_ANALYZE_ERROR = new ErrorCode(1_005_000_010, "导入失败:组织封边对应配置解析异常,请检查配置"); public static final ErrorCode WEBCAD_ORDER_IMPORT_ORDER_PLATENUM_CHECK_ERROR = new ErrorCode(1_005_000_011, "导入失败:生产单【{}】下板件数量已达到20000片,无法继续导入"); public static final ErrorCode WEBCAD_ORDER_IMPORT_ORDER_PLATENUM_REACH_THRESHOLD_ERROR = new ErrorCode(1_005_000_012, "部分导入成功,生产单【{}】下板件数量已达到20000片,本次拆单超出部分不计入生产单"); + public static final ErrorCode ORDER_IMPORT_PLATE_GOODS_NOMATCH_ERROR = new ErrorCode(1_005_000_013, "导入失败,板材库中无板材匹配,商品编码:{},商品名称:{},材质:{},颜色:{},厚度:{},品牌:{}"); } diff --git a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/dal/mysql/orderImport/OrderImportTempDataMapper.java b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/dal/mysql/orderImport/OrderImportTempDataMapper.java index 7e1ba4b4e..76e5f3a11 100644 --- a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/dal/mysql/orderImport/OrderImportTempDataMapper.java +++ b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/dal/mysql/orderImport/OrderImportTempDataMapper.java @@ -37,7 +37,7 @@ public interface OrderImportTempDataMapper extends BaseMapperX selectGoodsIdGroup(@Param("reqVO") OrderImportTempDataReqVO reqVO); /** - * 基于商品名称、材料、纹理、颜色、规格、商品高、商品宽、商品厚、品牌分组的商品总数查询 + * 基于商品名称、材料、颜色、商品厚、品牌分组的商品总数查询 * * @param reqVO * @return diff --git a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/factory/DefaultExcelOrderImportFactory.java b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/factory/DefaultExcelOrderImportFactory.java index 4d3ed226d..5aa64bedf 100644 --- a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/factory/DefaultExcelOrderImportFactory.java +++ b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/factory/DefaultExcelOrderImportFactory.java @@ -14,13 +14,11 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.cf.imes.framework.common.enums.OrderPlateTypeEnum; import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil; import com.cf.imes.framework.common.util.json.JsonUtils; -import com.cf.imes.framework.common.util.object.BeanUtils; import com.cf.imes.framework.id.core.util.SnowflakeIdWorker3rd; import com.cf.imes.framework.mybatis.core.generator.SnowFlakeGenerator; import com.cf.imes.framework.mybatis.core.injector.BaseBatchMapper; import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; import com.cf.imes.framework.mybatis.core.query.LambdaUpdateWrapperX; -import com.cf.imes.framework.organ.core.context.OrganContextHolder; import com.cf.imes.module.executor.enums.DictTypeConstants; import com.cf.imes.module.executor.enums.OrderImportConstants; import com.cf.imes.module.executor.enums.OrderImportStatusEnum; @@ -38,7 +36,6 @@ import com.cf.imes.module.plan.dal.dataobject.orderImport.OrderImportTempDataGoo import com.cf.imes.module.plan.dal.dataobject.orderImport.OrderImportTempDataGoodsIdGroupDO; import com.cf.imes.module.plan.dal.dataobject.orderItem.OrderItemDO; import com.cf.imes.module.plan.dal.dataobject.orderParts.OrderPartsDO; -import com.cf.imes.module.plan.dal.dataobject.orderParts.PartsDO; import com.cf.imes.module.plan.dal.dataobject.ordermodel.OrderModelDO; import com.cf.imes.module.plan.dal.dataobject.plate.PlateDO; import com.cf.imes.module.plan.dal.dataobject.plate.PlateGoodDO; @@ -70,6 +67,7 @@ import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; +import static com.cf.imes.module.plan.enums.ErrorCodeConstants.ORDER_IMPORT_PLATE_GOODS_NOMATCH_ERROR; import static com.cf.imes.module.plan.enums.ErrorCodeConstants.ORDER_IMPORT_PLATE_GOODS_NOT_EXISTS; import static com.cf.imes.module.plan.service.order.OrderInputProcessor.ORDER_PARTS_REMARK_MODEL; import static com.cf.imes.module.plan.service.order.OrderInputProcessor.ORDER_PLATE_MODEL; @@ -326,11 +324,7 @@ public class DefaultExcelOrderImportFactory { .eq(OrderImportTempDataDO::getType, PLATE_TYPE) .eqIfPresent(OrderImportTempDataDO::getGoodsName, orderImportTempDataGoodsGroupDO.getGoodsName()) .eqIfPresent(OrderImportTempDataDO::getMaterial, orderImportTempDataGoodsGroupDO.getMaterial()) - .eqIfPresent(OrderImportTempDataDO::getWave, orderImportTempDataGoodsGroupDO.getWave()) .eqIfPresent(OrderImportTempDataDO::getColor, orderImportTempDataGoodsGroupDO.getColor()) - .eqIfPresent(OrderImportTempDataDO::getSpec, orderImportTempDataGoodsGroupDO.getSpec()) - .eqIfPresent(OrderImportTempDataDO::getWidth, orderImportTempDataGoodsGroupDO.getWidth()) - .eqIfPresent(OrderImportTempDataDO::getHeight, orderImportTempDataGoodsGroupDO.getHeight()) .eqIfPresent(OrderImportTempDataDO::getThickness, orderImportTempDataGoodsGroupDO.getThickness()) .eqIfPresent(OrderImportTempDataDO::getBrand, orderImportTempDataGoodsGroupDO.getBrand()) .set(OrderImportTempDataDO::getInnerGoodsId, innerGoodsId)); @@ -677,146 +671,146 @@ public class DefaultExcelOrderImportFactory { Page page = new Page<>(1, BATCH_THRESHOLD_NUMBER); orderImportTempDataMapper.selectList(page, new LambdaQueryWrapperX() - .eq(OrderImportTempDataDO::getTaskId, taskId) - .eq(OrderImportTempDataDO::getType, PLATE_TYPE) - .eq(OrderImportTempDataDO::getRoomName, roomName) - .eq(OrderImportTempDataDO::getBodyName, bodyName) - .eqIfPresent(OrderImportTempDataDO::getGroupTypeName, groupTypeName) - .eqIfPresent(OrderImportTempDataDO::getGroupName, groupName) - .eq(OrderImportTempDataDO::getOrganId, organId), new ResultHandler<>() { - int count = 0; + .eq(OrderImportTempDataDO::getTaskId, taskId) + .eq(OrderImportTempDataDO::getType, PLATE_TYPE) + .eq(OrderImportTempDataDO::getRoomName, roomName) + .eq(OrderImportTempDataDO::getBodyName, bodyName) + .eqIfPresent(OrderImportTempDataDO::getGroupTypeName, groupTypeName) + .eqIfPresent(OrderImportTempDataDO::getGroupName, groupName) + .eq(OrderImportTempDataDO::getOrganId, organId), new ResultHandler<>() { + int count = 0; - @Override - public void handleResult(ResultContext resultContext) { - OrderImportTempDataDO tempDataDO = resultContext.getResultObject(); + @Override + public void handleResult(ResultContext resultContext) { + OrderImportTempDataDO tempDataDO = resultContext.getResultObject(); - int num = tempDataDO.getNum().intValue(); - String detail = JsonUtils.unzipString(tempDataDO.getDetail()); - OrderPlateImportExcelVO combination = JSON.parseObject(detail, OrderPlateImportExcelVO.class); - // 根据数量生成num个小板数据 - for (int i = 0; i < num; i++) { - long plateNo = idWorker.nextId(); - long obtainingTime = idWorker.obtainingTime(); - long goodsId = Long.parseLong(tempDataDO.getInnerGoodsId()); - // 成品宽 - String width = combination.getWidth(); - // 成品长 - String height = combination.getHeight(); - // 计算面积 - BigDecimal area = BigDecimal.valueOf(Double.parseDouble(width)) - .multiply(BigDecimal.valueOf(Double.parseDouble(height))) - .movePointLeft(6) - .setScale(2, RoundingMode.HALF_UP); - Long plateId = (Long) snowFlakeGenerator.nextId(null); - // 排版面 纹路 开门方向转换 - DictDataRespDTO typographyDTO = dictDataApi.parseDictData(DictTypeConstants.TYPOGRAPHY_TYPE, combination.getTypographicFace()).getData();// 排版面 - DictDataRespDTO grainDTO = dictDataApi.parseDictData(DictTypeConstants.GRAIN_TYPE, combination.getTexture()).getData();// 纹路 - DictDataRespDTO doorDTO = dictDataApi.parseDictData(DictTypeConstants.DOOR_OPENING_DIRECTIONS, combination.getOpenDoorType()).getData(); + int num = tempDataDO.getNum().intValue(); + String detail = JsonUtils.unzipString(tempDataDO.getDetail()); + OrderPlateImportExcelVO combination = JSON.parseObject(detail, OrderPlateImportExcelVO.class); + // 根据数量生成num个小板数据 + for (int i = 0; i < num; i++) { + long plateNo = idWorker.nextId(); + long obtainingTime = idWorker.obtainingTime(); + long goodsId = Long.parseLong(tempDataDO.getInnerGoodsId()); + // 成品宽 + String width = combination.getWidth(); + // 成品长 + String height = combination.getHeight(); + // 计算面积 + BigDecimal area = BigDecimal.valueOf(Double.parseDouble(width)) + .multiply(BigDecimal.valueOf(Double.parseDouble(height))) + .movePointLeft(6) + .setScale(2, RoundingMode.HALF_UP); + Long plateId = (Long) snowFlakeGenerator.nextId(null); + // 排版面 纹路 开门方向转换 + DictDataRespDTO typographyDTO = dictDataApi.parseDictData(DictTypeConstants.TYPOGRAPHY_TYPE, combination.getTypographicFace()).getData();// 排版面 + DictDataRespDTO grainDTO = dictDataApi.parseDictData(DictTypeConstants.GRAIN_TYPE, combination.getTexture()).getData();// 纹路 + DictDataRespDTO doorDTO = dictDataApi.parseDictData(DictTypeConstants.DOOR_OPENING_DIRECTIONS, combination.getOpenDoorType()).getData(); - PlateDO plateDO = PlateDO.builder() - .id(plateId) - .orderId(orderId) - .name(combination.getName()) - .plateNo(combination.getPlateNo()) - .type(OrderPlateTypeEnum.LAYERBOARD.getType()) - .goodsId(goodsId) - .width(BigDecimal.valueOf(Double.parseDouble(width))) - .plateNo(((obtainingTime) + Long.toString(plateNo).substring(2))) - .height(BigDecimal.valueOf(Double.parseDouble(height))) - .thickness(BigDecimal.valueOf(Double.parseDouble(combination.getThickness()))) - .splitWidth(BigDecimal.valueOf(NumberUtil.parseDouble(combination.getSplitWidth()))) - .splitHeight(BigDecimal.valueOf(NumberUtil.parseDouble(combination.getSplitHeight()))) - .splitThickness(BigDecimal.valueOf(Double.parseDouble(tempDataDO.getThickness()))) - .sealLeft(BigDecimal.valueOf(Double.parseDouble(combination.getSealLeft()))) - .sealRight(BigDecimal.valueOf(Double.parseDouble(combination.getSealRight()))) - .sealUp(BigDecimal.valueOf(Double.parseDouble(combination.getSealUp()))) - .sealDown(BigDecimal.valueOf(Double.parseDouble(combination.getSealDown()))) - .holeFace(Integer.valueOf(typographyDTO.getValue())) - .texture(Integer.valueOf(grainDTO.getValue())) - .area(area) - .openDoorType(Integer.valueOf(doorDTO.getValue())) - .isSpecialShaped(false) - .isSculpt(false) - .remark(remarkExtract(combination.remarkJSON())) - .roomName(roomName) - .bodyName(bodyName) - .customPlateNoBuilder(new StringBuilder()) - .organId(organId) - .holeArrange(0) - .holeFace(0) - .unregularPointCount(0) - .frontHoleCount(0) - .backHoleCount(0) - .sideHoleCount(0) - .frontModelCount(0) - .backModelCount(0) - .isDoor(false) - .offsetX(BIG_ZERO) - .offsetY(BIG_ZERO) - .isArcAcross(false) - .moduleTypeId(0L) - .isRowHole(false) - .isOptimized(false) - .isCutted(0) - .isCancel(false) - .filterType(EMPTY_STRING) - .deleted(false) - .build(); - plateDO.setCreator(operatorName); - plateDO.setUpdater(operatorName); - LocalDateTime now = LocalDateTime.now(); - plateDO.setCreateTime(now); - plateDO.setUpdateTime(now); + PlateDO plateDO = PlateDO.builder() + .id(plateId) + .orderId(orderId) + .name(combination.getName()) + .plateNo(combination.getPlateNo()) + .type(OrderPlateTypeEnum.LAYERBOARD.getType()) + .goodsId(goodsId) + .width(BigDecimal.valueOf(Double.parseDouble(width))) + .plateNo(((obtainingTime) + Long.toString(plateNo).substring(2))) + .height(BigDecimal.valueOf(Double.parseDouble(height))) + .thickness(BigDecimal.valueOf(Double.parseDouble(combination.getThickness()))) + .splitWidth(BigDecimal.valueOf(NumberUtil.parseDouble(combination.getSplitWidth()))) + .splitHeight(BigDecimal.valueOf(NumberUtil.parseDouble(combination.getSplitHeight()))) + .splitThickness(BigDecimal.valueOf(Double.parseDouble(tempDataDO.getThickness()))) + .sealLeft(BigDecimal.valueOf(Double.parseDouble(combination.getSealLeft()))) + .sealRight(BigDecimal.valueOf(Double.parseDouble(combination.getSealRight()))) + .sealUp(BigDecimal.valueOf(Double.parseDouble(combination.getSealUp()))) + .sealDown(BigDecimal.valueOf(Double.parseDouble(combination.getSealDown()))) + .holeFace(Integer.valueOf(typographyDTO.getValue())) + .texture(Integer.valueOf(grainDTO.getValue())) + .area(area) + .openDoorType(Integer.valueOf(doorDTO.getValue())) + .isSpecialShaped(false) + .isSculpt(false) + .remark(remarkExtract(combination.remarkJSON())) + .roomName(roomName) + .bodyName(bodyName) + .customPlateNoBuilder(new StringBuilder()) + .organId(organId) + .holeArrange(0) + .holeFace(0) + .unregularPointCount(0) + .frontHoleCount(0) + .backHoleCount(0) + .sideHoleCount(0) + .frontModelCount(0) + .backModelCount(0) + .isDoor(false) + .offsetX(BIG_ZERO) + .offsetY(BIG_ZERO) + .isArcAcross(false) + .moduleTypeId(0L) + .isRowHole(false) + .isOptimized(false) + .isCutted(0) + .isCancel(false) + .filterType(EMPTY_STRING) + .deleted(false) + .build(); + plateDO.setCreator(operatorName); + plateDO.setUpdater(operatorName); + LocalDateTime now = LocalDateTime.now(); + plateDO.setCreateTime(now); + plateDO.setUpdateTime(now); - // 生成自定义板编号 - generateCustomPlateNo(plateDO); + // 生成自定义板编号 + generateCustomPlateNo(plateDO); - // 批量插入order_plate - plateDOS.add(plateDO); - orderInfoBatchInsertWithinThreshold(plateMapper, plateDOS, false); + // 批量插入order_plate + plateDOS.add(plateDO); + orderInfoBatchInsertWithinThreshold(plateMapper, plateDOS, false); - OrderItemDO orderItemDO = OrderItemDO.builder() - .orderId(orderId) - .type(OrderItemTypeEnum.PLATE_ITEM.getStatus()) - .roomId(orderBodyDO.getRoomId()) - .bodyId(orderBodyDO.getId()) - .plateId(plateId) - .num(1.0) - .groupId(StringUtils.isNotEmpty(groupTypeName) ? groupId : 0L) - .organId(organId) - .packageId(0L) - .partsId(0L) - .build(); - // 批量插入order_item - orderItemDOS.add(orderItemDO); - orderInfoBatchInsertWithinThreshold(orderItemMapper, orderItemDOS, false); + OrderItemDO orderItemDO = OrderItemDO.builder() + .orderId(orderId) + .type(OrderItemTypeEnum.PLATE_ITEM.getStatus()) + .roomId(orderBodyDO.getRoomId()) + .bodyId(orderBodyDO.getId()) + .plateId(plateId) + .num(1.0) + .groupId(StringUtils.isNotEmpty(groupTypeName) ? groupId : 0L) + .organId(organId) + .packageId(0L) + .partsId(0L) + .build(); + // 批量插入order_item + orderItemDOS.add(orderItemDO); + orderInfoBatchInsertWithinThreshold(orderItemMapper, orderItemDOS, false); - // 批量插入CAD板件信息 - OrderModelDO orderModelDO = OrderModelDO.builder() - .orderId(orderId) - .batchId(batchId) - .plateId(plateId) - .typographicFace(Integer.valueOf(typographyDTO.getValue())) - .texture(plateDO.getTexture()) - .openDoorType(plateDO.getOpenDoorType()) - .build(); + // 批量插入CAD板件信息 + OrderModelDO orderModelDO = OrderModelDO.builder() + .orderId(orderId) + .batchId(batchId) + .plateId(plateId) + .typographicFace(Integer.valueOf(typographyDTO.getValue())) + .texture(plateDO.getTexture()) + .openDoorType(plateDO.getOpenDoorType()) + .build(); - // 查询大板id用于小板轮廓goodsId - GoodsDO goodsDO = goodsMapper.selectById(goodsId); - if (ObjectUtil.isNull(goodsDO)) { - throw ServiceExceptionUtil.exception(ORDER_IMPORT_PLATE_GOODS_NOT_EXISTS, orderId, goodsId); - } - orderModelDO.setGoodsId(goodsDO.getGoodsId()); - orderModelDO.setPlateGoodsId(goodsId); - orderModelDO.setOrganId(organId); - orderModelDO.setCreator(operatorName); - orderModelDO.setUpdater(operatorName); - orderModelDOS.add(orderModelDO); - - // 批量插入造型数据 - orderModelsBatchInsertWithinThreshold(false); - } + // 查询大板id用于小板轮廓goodsId + GoodsDO goodsDO = goodsMapper.selectById(goodsId); + if (ObjectUtil.isNull(goodsDO)) { + throw ServiceExceptionUtil.exception(ORDER_IMPORT_PLATE_GOODS_NOT_EXISTS, orderId, goodsId); } + orderModelDO.setGoodsId(goodsDO.getGoodsId()); + orderModelDO.setPlateGoodsId(goodsId); + orderModelDO.setOrganId(organId); + orderModelDO.setCreator(operatorName); + orderModelDO.setUpdater(operatorName); + orderModelDOS.add(orderModelDO); + + // 批量插入造型数据 + orderModelsBatchInsertWithinThreshold(false); + } + } }); @@ -1285,20 +1279,24 @@ public class DefaultExcelOrderImportFactory { private void analyzePlateGoods(GoodsDO goodsDO) { PlateGoodDO plateGoodDO = null; List existPlateGoodDOS = new ArrayList<>(); - if (StringUtils.isNotEmpty(goodsDO.getGoodsId())) { + String goodsId = goodsDO.getGoodsId(); + String goodsName = goodsDO.getGoodsName(); + String material = goodsDO.getMaterial(); + String color = goodsDO.getColor(); + BigDecimal thickness = goodsDO.getThickness(); + String brand = goodsDO.getBrand(); + + if (StringUtils.isNotEmpty(goodsId)) { // goodsId查询是否存在大板 - plateGoodDO = getPlateGood(goodsDO.getGoodsId()); + plateGoodDO = getPlateGood(goodsId); } else { // 没有goodsId,大板属性匹配大板 existPlateGoodDOS = plateGoodMapper.selectList(new LambdaQueryWrapperX() - .eq(PlateGoodDO::getGoodsName, goodsDO.getGoodsName()) - .eq(PlateGoodDO::getMaterial, goodsDO.getMaterial()) - .eq(PlateGoodDO::getColor, goodsDO.getColor()) - .eqIfPresent(PlateGoodDO::getTexture, goodsDO.getTexture()) - .eqIfPresent(PlateGoodDO::getWidth, goodsDO.getWidth()) - .eqIfPresent(PlateGoodDO::getHeight, goodsDO.getHeight()) - .eq(PlateGoodDO::getThickness, goodsDO.getThickness()) - .eqIfPresent(PlateGoodDO::getSpec, goodsDO.getSpec()) + .eq(PlateGoodDO::getGoodsName, goodsName) + .eq(PlateGoodDO::getMaterial, material) + .eq(PlateGoodDO::getColor, color) + .eq(PlateGoodDO::getThickness, thickness) + .eqIfPresent(PlateGoodDO::getBrand, brand) .eq(PlateGoodDO::getDeleted, 0) .eq(PlateGoodDO::getOrganId, organId)); } @@ -1310,21 +1308,7 @@ public class DefaultExcelOrderImportFactory { // 存在大板 goodsDO.setGoodsId(plateGoodDO.getGoodsId()); } else { - // 不存在大板,新增 - long plateNo = idWorker.nextId(); - long obtainingTime = idWorker.obtainingTime(); - - // 大板id设置到orderGoodsDO - String goodsId = StringUtils.isEmpty(goodsDO.getGoodsId()) ? (obtainingTime) + Long.toString(plateNo).substring(2) : goodsDO.getGoodsId(); - goodsDO.setGoodsId(goodsId); - - plateGoodDO = BeanUtils.toBean(goodsDO, PlateGoodDO.class) - .setId((Long) snowFlakeGenerator.nextId(null)) - .setGoodsId(goodsId); - - // 批量插入plategood - plateGoodDOS.add(plateGoodDO); - orderInfoBatchInsertWithinThreshold(plateGoodMapper, plateGoodDOS, false); + throw ServiceExceptionUtil.exception(ORDER_IMPORT_PLATE_GOODS_NOMATCH_ERROR, goodsId, goodsName, material, color, thickness, brand); } } diff --git a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/factory/DefaultXmlOrderImportFactory.java b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/factory/DefaultXmlOrderImportFactory.java index c3587e2c6..a0eb0d9dd 100644 --- a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/factory/DefaultXmlOrderImportFactory.java +++ b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/factory/DefaultXmlOrderImportFactory.java @@ -14,13 +14,10 @@ import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil; import com.cf.imes.framework.common.util.json.JsonUtils; -import com.cf.imes.framework.common.util.object.BeanUtils; import com.cf.imes.framework.dict.core.util.DictFrameworkUtils; import com.cf.imes.framework.id.core.util.SnowflakeIdWorker3rd; import com.cf.imes.framework.mybatis.core.generator.SnowFlakeGenerator; import com.cf.imes.framework.mybatis.core.injector.BaseBatchMapper; -import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; -import com.cf.imes.framework.organ.core.context.OrganContextHolder; import com.cf.imes.module.executor.enums.DictTypeConstants; import com.cf.imes.module.executor.enums.OrderImportStatusEnum; import com.cf.imes.module.executor.enums.OrderImportTmpDataTypeEnum; @@ -61,7 +58,6 @@ import com.cf.imes.module.plan.dal.dataobject.orderImport.OrderImportTempDataPar import com.cf.imes.module.plan.dal.dataobject.orderImport.OrderImportTempDataPartRoomBodyGroupGroupDO; import com.cf.imes.module.plan.dal.dataobject.orderItem.OrderItemDO; import com.cf.imes.module.plan.dal.dataobject.orderParts.OrderPartsDO; -import com.cf.imes.module.plan.dal.dataobject.orderParts.PartsDO; import com.cf.imes.module.plan.dal.dataobject.ordermodel.OrderModelDO; import com.cf.imes.module.plan.dal.dataobject.plate.PlateDO; import com.cf.imes.module.plan.dal.dataobject.plate.PlateGoodDO; @@ -283,7 +279,7 @@ public class DefaultXmlOrderImportFactory { log.info("====================【生产单默认xml导入处理回显结束】===================="); // 删除临时数据 - deleteTempData(); +// deleteTempData(); // 完成所有流程后更新任务为导入成功 updateTaskSuccess(); } catch (Exception e) { @@ -408,8 +404,6 @@ public class DefaultXmlOrderImportFactory { goodsDO.setCreateTime(now); goodsDO.setUpdateTime(now); - // 解析大板 - analyzePlateGoods(goodsDO); goodsDOS.add(goodsDO); rawGoodsDOS.add(rawGoodsDO); // 批量插入rawgoods、goods @@ -1865,58 +1859,6 @@ public class DefaultXmlOrderImportFactory { return sb.toString(); } - /** - * 解析大板 - * 大板库没有新增,有就赋值goodsId - * - * @param goodsDO - */ - private void analyzePlateGoods(GoodsDO goodsDO) { - PlateGoodDO plateGoodDO = null; - List existPlateGoodDOS = new ArrayList<>(); - if (StringUtils.isNotEmpty(goodsDO.getGoodsId())) { - // goodsId查询是否存在大板 - plateGoodDO = getPlateGood(goodsDO.getGoodsId()); - } else { - // 没有goodsId,大板属性匹配大板 - existPlateGoodDOS = plateGoodMapper.selectList(new LambdaQueryWrapperX() - .eq(PlateGoodDO::getGoodsName, goodsDO.getGoodsName()) - .eq(PlateGoodDO::getMaterial, goodsDO.getMaterial()) - .eq(PlateGoodDO::getColor, goodsDO.getColor()) - .eqIfPresent(PlateGoodDO::getTexture, goodsDO.getTexture()) - .eqIfPresent(PlateGoodDO::getWidth, goodsDO.getWidth()) - .eqIfPresent(PlateGoodDO::getHeight, goodsDO.getHeight()) - .eq(PlateGoodDO::getThickness, goodsDO.getThickness()) - .eqIfPresent(PlateGoodDO::getSpec, goodsDO.getSpec()) - .eq(PlateGoodDO::getDeleted, 0) - .eq(PlateGoodDO::getOrganId, organId)); - } - - if (CollUtil.isNotEmpty(existPlateGoodDOS)) { - // 存在大板 - goodsDO.setGoodsId(existPlateGoodDOS.get(0).getGoodsId()); - } else if (plateGoodDO != null) { - // 存在大板 - goodsDO.setGoodsId(plateGoodDO.getGoodsId()); - } else { - // 不存在大板,新增 - long plateNo = idWorker.nextId(); - long obtainingTime = idWorker.obtainingTime(); - - // 大板id设置到orderGoodsDO - String goodsId = StringUtils.isEmpty(goodsDO.getGoodsId()) ? (obtainingTime) + Long.toString(plateNo).substring(2) : goodsDO.getGoodsId(); - goodsDO.setGoodsId(goodsId); - - plateGoodDO = BeanUtils.toBean(goodsDO, PlateGoodDO.class) - .setId((Long) snowFlakeGenerator.nextId(null)) - .setGoodsId(goodsId); - - // 批量插入plategood - plateGoodDOS.add(plateGoodDO); - orderInfoBatchInsertWithinThreshold(plateGoodMapper, plateGoodDOS, false); - } - } - /** * 查询大板信息 * diff --git a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/resources/mapper/orderImport/OrderImportTempDataMapper.xml b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/resources/mapper/orderImport/OrderImportTempDataMapper.xml index 67594d1f5..cfc0b64cd 100644 --- a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/resources/mapper/orderImport/OrderImportTempDataMapper.xml +++ b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/resources/mapper/orderImport/OrderImportTempDataMapper.xml @@ -25,16 +25,12 @@ select count(1) from ( select goods_name, material, - wave, color, - spec, - height, - width, thickness, brand from order_import_temp_data where task_id = #{reqVO.taskId} and type = #{reqVO.type} and outer_goods_id = #{reqVO.goodsId} - group by goods_name,material, wave, color, spec, height, width, thickness, brand) temp + group by goods_name,material, color, thickness, brand) temp select goods_name, material, - wave, color, - spec, - height, - width, thickness, brand @@ -73,7 +65,7 @@ from order_import_temp_data where task_id = #{reqVO.taskId} and type = #{reqVO.type} and outer_goods_id = #{reqVO.goodsId} - group by goods_name, material, wave, color, spec, height, width, thickness, brand + group by goods_name, material, color, thickness, brand order by sortn limit #{reqVO.offset}, #{reqVO.size}