mirror of
http://192.168.1.205:9980/cf_devdept2/cf_imes_server.git
synced 2026-08-12 21:02:08 +08:00
excel、xml异步导入调整:同步板材库匹配逻辑
This commit is contained in:
+1
@@ -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, "配件不存在");
|
||||
|
||||
+5
-1
@@ -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
|
||||
|
||||
+5
-1
@@ -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) {
|
||||
// 导入锁解锁
|
||||
|
||||
+39
-1
@@ -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<PlateGoodDO> 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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+68
-17
@@ -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<String> groupCodeSet = new HashSet<>();
|
||||
private Map<String, RoomXmlVO> roomMap = new HashMap<>();
|
||||
private Map<String, RoomBoxXmlVO> roomBodyMap = new HashMap<>();
|
||||
private Map<String, Long> 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<Attribute> attributes) throws Exception {
|
||||
private void analyzePlateXml(Iterator<Attribute> 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<PlateGoodDO> 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);
|
||||
|
||||
+2
-1
@@ -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, "导入失败,板材库中无板材匹配,商品编码:{},商品名称:{},材质:{},颜色:{},厚度:{},品牌:{}");
|
||||
}
|
||||
|
||||
+1
-1
@@ -37,7 +37,7 @@ public interface OrderImportTempDataMapper extends BaseMapperX<OrderImportTempDa
|
||||
List<OrderImportTempDataGoodsIdGroupDO> selectGoodsIdGroup(@Param("reqVO") OrderImportTempDataReqVO reqVO);
|
||||
|
||||
/**
|
||||
* 基于商品名称、材料、纹理、颜色、规格、商品高、商品宽、商品厚、品牌分组的商品总数查询
|
||||
* 基于商品名称、材料、颜色、商品厚、品牌分组的商品总数查询
|
||||
*
|
||||
* @param reqVO
|
||||
* @return
|
||||
|
||||
+147
-163
@@ -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<OrderImportTempDataDO> page = new Page<>(1, BATCH_THRESHOLD_NUMBER);
|
||||
orderImportTempDataMapper.selectList(page, new LambdaQueryWrapperX<OrderImportTempDataDO>()
|
||||
.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<? extends OrderImportTempDataDO> resultContext) {
|
||||
OrderImportTempDataDO tempDataDO = resultContext.getResultObject();
|
||||
@Override
|
||||
public void handleResult(ResultContext<? extends OrderImportTempDataDO> 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<PlateGoodDO> 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<PlateGoodDO>()
|
||||
.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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-59
@@ -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<PlateGoodDO> existPlateGoodDOS = new ArrayList<>();
|
||||
if (StringUtils.isNotEmpty(goodsDO.getGoodsId())) {
|
||||
// goodsId查询是否存在大板
|
||||
plateGoodDO = getPlateGood(goodsDO.getGoodsId());
|
||||
} else {
|
||||
// 没有goodsId,大板属性匹配大板
|
||||
existPlateGoodDOS = plateGoodMapper.selectList(new LambdaQueryWrapperX<PlateGoodDO>()
|
||||
.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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询大板信息
|
||||
*
|
||||
|
||||
+2
-10
@@ -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>
|
||||
|
||||
<select id="selectCountPartGoodsGroup" resultType="java.lang.Integer">
|
||||
@@ -61,11 +57,7 @@
|
||||
<select id="selectPlateGoodsGroup" resultType="com.cf.imes.module.plan.dal.dataobject.orderImport.OrderImportTempDataGoodsGroupDO">
|
||||
select goods_name,
|
||||
material,
|
||||
wave,
|
||||
color,
|
||||
spec,
|
||||
height,
|
||||
width,
|
||||
thickness,
|
||||
brand
|
||||
<if test="reqVO.doPaging">
|
||||
@@ -73,7 +65,7 @@
|
||||
</if>
|
||||
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
|
||||
<if test="reqVO.doPaging">
|
||||
order by sortn
|
||||
limit #{reqVO.offset}, #{reqVO.size}
|
||||
|
||||
Reference in New Issue
Block a user