mirror of
http://192.168.1.205:9980/cf_devdept2/cf_imes_server.git
synced 2026-08-12 21:02:08 +08:00
新增webcad生产单导入:cad拆单导入数据空异常处理、代码规范修改
This commit is contained in:
+5
-7
@@ -12,11 +12,9 @@ public class ErrorCodeConstants {
|
|||||||
public static final ErrorCode ORDER_IMPORT_ORGANID_NOT_EXISTS = new ErrorCode(1_005_000_001, "不存在组织id,导入终止");
|
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 ORDER_IMPORT_FAIL = new ErrorCode(1_005_000_002, "导入失败");
|
||||||
public static final ErrorCode WEBCAD_ORDER_NOT_EXISTS_ERROR = new ErrorCode(1_005_000_004, "导入失败:生产单号【{}】不存在");
|
public static final ErrorCode WEBCAD_ORDER_NOT_EXISTS_ERROR = new ErrorCode(1_005_000_004, "导入失败:生产单号【{}】不存在");
|
||||||
public static final ErrorCode WEBCAD_ORDER_IMPORT_MATERIALS_EMPTY_ERROR = new ErrorCode(1_005_000_005, "导入失败:板材对应列表不能为空");
|
public static final ErrorCode WEBCAD_ORDER_IMPORT_ORGANID_EMPTY_ERROR = new ErrorCode(1_005_000_005, "导入失败:无法获取机构信息,请检查cadtoken是否配置正确");
|
||||||
public static final ErrorCode WEBCAD_ORDER_IMPORT_ROOMBODY_EMPTY_ERROR = new ErrorCode(1_005_000_006, "导入失败:房间柜体列表不能为空");
|
public static final ErrorCode WEBCAD_ORDER_IMPORT_FAILED = new ErrorCode(1_005_000_006, "导入失败:请检查拆单数据");
|
||||||
public static final ErrorCode WEBCAD_ORDER_IMPORT_ORGANID_EMPTY_ERROR = new ErrorCode(1_005_000_007, "导入失败:无法获取机构信息,请检查cadtoken是否配置正确");
|
public static final ErrorCode WEBCAD_ORDER_IMPORT_PLATE_NOT_EXIST_ERROR = new ErrorCode(1_005_000_007, "导入失败:板材对应失败,板材库中不存在对应板材【{}】");
|
||||||
public static final ErrorCode WEBCAD_ORDER_IMPORT_FAILED = new ErrorCode(1_005_000_008, "导入失败:请检查拆单数据");
|
public static final ErrorCode WEBCAD_ORDER_IMPORT_SEAL_NOT_EXIST_ERROR = new ErrorCode(1_005_000_008, "导入失败:封边条对应失败,配件库中不存在对应封边条【{}】");
|
||||||
public static final ErrorCode WEBCAD_ORDER_IMPORT_PLATE_NOT_EXIST_ERROR = new ErrorCode(1_005_000_009, "导入失败:板材对应失败,板材库中不存在对应板材【{}】");
|
public static final ErrorCode WEBCAD_ORDER_IMPORT_SAVEDATA_ERROR = new ErrorCode(1_005_000_009, "导入失败:数据保存异常,请检查拆单数据");
|
||||||
public static final ErrorCode WEBCAD_ORDER_IMPORT_SEAL_NOT_EXIST_ERROR = new ErrorCode(1_005_000_010, "导入失败:封边条对应失败,配件库中不存在对应封边条【{}】");
|
|
||||||
public static final ErrorCode WEBCAD_ORDER_IMPORT_SAVEDATA_ERROR = new ErrorCode(1_005_000_011, "导入失败:数据保存异常,请检查拆单数据");
|
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-65
@@ -3,14 +3,9 @@ package com.cf.imes.module.plan.controller.admin.orderImport.webcad.vo;
|
|||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.springframework.format.annotation.DateTimeFormat;
|
|
||||||
|
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
|
||||||
|
|
||||||
import static com.cf.imes.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Gqr
|
* @author Gqr
|
||||||
* @since 2025/3/3 17:40
|
* @since 2025/3/3 17:40
|
||||||
@@ -22,65 +17,6 @@ public class WebCadDataOrderReqVO {
|
|||||||
* 生产单号
|
* 生产单号
|
||||||
*/
|
*/
|
||||||
@JsonProperty(value = "OrderNo")
|
@JsonProperty(value = "OrderNo")
|
||||||
|
@NotNull(message = "生产单号不能为空")
|
||||||
private String OrderNo;
|
private String OrderNo;
|
||||||
|
|
||||||
/**
|
|
||||||
* 自定义单号
|
|
||||||
*/
|
|
||||||
@JsonProperty(value = "CustomOrderNo")
|
|
||||||
private String CustomOrderNo;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 客户
|
|
||||||
*/
|
|
||||||
@JsonProperty(value = "CustomName")
|
|
||||||
private String CustomName;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 状态
|
|
||||||
*/
|
|
||||||
@JsonProperty(value = "Status")
|
|
||||||
private int Status;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 经销商
|
|
||||||
*/
|
|
||||||
@JsonProperty(value = "SalePerson")
|
|
||||||
private String SalePerson;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 订单日期
|
|
||||||
*/
|
|
||||||
@JsonProperty(value = "OrderDate")
|
|
||||||
@NotNull(message = "订单日期不能为空")
|
|
||||||
private String OrderDate;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 交付日期
|
|
||||||
*/
|
|
||||||
@NotNull(message = "交付日期不能为空")
|
|
||||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
|
|
||||||
@JsonProperty(value = "DeliveryDate")
|
|
||||||
private LocalDate DeliveryDate;
|
|
||||||
|
|
||||||
@JsonProperty(value = "Consigee")
|
|
||||||
private String Consigee;
|
|
||||||
|
|
||||||
@JsonProperty(value = "ConsigeePhone")
|
|
||||||
private String ConsigeePhone;
|
|
||||||
|
|
||||||
@JsonProperty(value = "ConsigeeAddress")
|
|
||||||
private String ConsigeeAddress;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 拆单员
|
|
||||||
*/
|
|
||||||
@JsonProperty(value = "Splitter")
|
|
||||||
private String Splitter;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 备注
|
|
||||||
*/
|
|
||||||
@JsonProperty(value = "Remark")
|
|
||||||
private String Remark;
|
|
||||||
}
|
}
|
||||||
|
|||||||
+48
-32
@@ -66,9 +66,7 @@ import java.util.concurrent.Executors;
|
|||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static com.cf.imes.module.plan.enums.ErrorCodeConstants.WEBCAD_ORDER_IMPORT_MATERIALS_EMPTY_ERROR;
|
|
||||||
import static com.cf.imes.module.plan.enums.ErrorCodeConstants.WEBCAD_ORDER_IMPORT_PLATE_NOT_EXIST_ERROR;
|
import static com.cf.imes.module.plan.enums.ErrorCodeConstants.WEBCAD_ORDER_IMPORT_PLATE_NOT_EXIST_ERROR;
|
||||||
import static com.cf.imes.module.plan.enums.ErrorCodeConstants.WEBCAD_ORDER_IMPORT_ROOMBODY_EMPTY_ERROR;
|
|
||||||
import static com.cf.imes.module.plan.enums.ErrorCodeConstants.WEBCAD_ORDER_IMPORT_SAVEDATA_ERROR;
|
import static com.cf.imes.module.plan.enums.ErrorCodeConstants.WEBCAD_ORDER_IMPORT_SAVEDATA_ERROR;
|
||||||
import static com.cf.imes.module.plan.enums.ErrorCodeConstants.WEBCAD_ORDER_IMPORT_SEAL_NOT_EXIST_ERROR;
|
import static com.cf.imes.module.plan.enums.ErrorCodeConstants.WEBCAD_ORDER_IMPORT_SEAL_NOT_EXIST_ERROR;
|
||||||
import static com.cf.imes.module.plan.enums.ErrorCodeConstants.WEBCAD_ORDER_NOT_EXISTS_ERROR;
|
import static com.cf.imes.module.plan.enums.ErrorCodeConstants.WEBCAD_ORDER_NOT_EXISTS_ERROR;
|
||||||
@@ -265,7 +263,7 @@ public class WebCadOrderImportFactory {
|
|||||||
*/
|
*/
|
||||||
private void analyzeMaterials(List<WebCadDataMaterialReqVO> materialReqVOS, List<WebCadDataBlockReqVO> blockReqVOS) {
|
private void analyzeMaterials(List<WebCadDataMaterialReqVO> materialReqVOS, List<WebCadDataBlockReqVO> blockReqVOS) {
|
||||||
if (CollUtil.isEmpty(materialReqVOS)) {
|
if (CollUtil.isEmpty(materialReqVOS)) {
|
||||||
throw new ServiceException(WEBCAD_ORDER_IMPORT_MATERIALS_EMPTY_ERROR);
|
return;
|
||||||
}
|
}
|
||||||
for (WebCadDataMaterialReqVO materialReqVO : materialReqVOS) {
|
for (WebCadDataMaterialReqVO materialReqVO : materialReqVOS) {
|
||||||
String plateGoodsId = materialReqVO.getId();
|
String plateGoodsId = materialReqVO.getId();
|
||||||
@@ -411,7 +409,7 @@ public class WebCadOrderImportFactory {
|
|||||||
*/
|
*/
|
||||||
private void analyzeRoomBody(List<WebCadDataDoubleRoomTreeReqVO> douleRoomTree) {
|
private void analyzeRoomBody(List<WebCadDataDoubleRoomTreeReqVO> douleRoomTree) {
|
||||||
if (CollUtil.isEmpty(douleRoomTree)) {
|
if (CollUtil.isEmpty(douleRoomTree)) {
|
||||||
throw new ServiceException(WEBCAD_ORDER_IMPORT_ROOMBODY_EMPTY_ERROR);
|
return;
|
||||||
}
|
}
|
||||||
for (WebCadDataDoubleRoomTreeReqVO room : douleRoomTree) {
|
for (WebCadDataDoubleRoomTreeReqVO room : douleRoomTree) {
|
||||||
String roomName = room.getName();
|
String roomName = room.getName();
|
||||||
@@ -432,6 +430,9 @@ public class WebCadOrderImportFactory {
|
|||||||
* @param blockList
|
* @param blockList
|
||||||
*/
|
*/
|
||||||
private void analyzeBlockList(List<WebCadDataBlockReqVO> blockList) {
|
private void analyzeBlockList(List<WebCadDataBlockReqVO> blockList) {
|
||||||
|
if (CollUtil.isEmpty(blockList)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
// 基于房间名分组
|
// 基于房间名分组
|
||||||
Map<String, List<WebCadDataBlockReqVO>> roomCollect = blockList.stream()
|
Map<String, List<WebCadDataBlockReqVO>> roomCollect = blockList.stream()
|
||||||
.collect(Collectors.groupingBy(WebCadDataBlockReqVO::getRoomName, Collectors.toList()));
|
.collect(Collectors.groupingBy(WebCadDataBlockReqVO::getRoomName, Collectors.toList()));
|
||||||
@@ -643,8 +644,6 @@ public class WebCadOrderImportFactory {
|
|||||||
private void analyzeBlockProcessGroup(OrderBodyDO orderBodyDO, WebCadDataBlockReqVO block, Long plateId) {
|
private void analyzeBlockProcessGroup(OrderBodyDO orderBodyDO, WebCadDataBlockReqVO block, Long plateId) {
|
||||||
Long bodyId = orderBodyDO.getId();
|
Long bodyId = orderBodyDO.getId();
|
||||||
Long roomId = orderBodyDO.getRoomId();
|
Long roomId = orderBodyDO.getRoomId();
|
||||||
String roomName = orderBodyDO.getRoomName();
|
|
||||||
String bodyName = orderBodyDO.getName();
|
|
||||||
Boolean isSpecialShape = block.getIsSpecialShape();
|
Boolean isSpecialShape = block.getIsSpecialShape();
|
||||||
|
|
||||||
List<WebCadDataBlockReqVO.GroupInfo> groupInfos = block.getGroupInfos();
|
List<WebCadDataBlockReqVO.GroupInfo> groupInfos = block.getGroupInfos();
|
||||||
@@ -728,7 +727,14 @@ public class WebCadOrderImportFactory {
|
|||||||
* @param parts
|
* @param parts
|
||||||
*/
|
*/
|
||||||
private void analyzeParts(WebCadDataPartsReqVO parts) {
|
private void analyzeParts(WebCadDataPartsReqVO parts) {
|
||||||
|
if (ObjectUtil.isNull(parts)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
List<WebCadDataPartsReqVO.BlockObjectListDTO> blockObjectList = parts.getBlockObjectList();
|
List<WebCadDataPartsReqVO.BlockObjectListDTO> blockObjectList = parts.getBlockObjectList();
|
||||||
|
if (CollUtil.isEmpty(blockObjectList)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// 配件对应列表
|
// 配件对应列表
|
||||||
matchLeftEdge(parts, blockObjectList);
|
matchLeftEdge(parts, blockObjectList);
|
||||||
|
|
||||||
@@ -756,21 +762,32 @@ public class WebCadOrderImportFactory {
|
|||||||
// 房间+柜体不在成倍缓存中, 再检查bodyMap, 再没有创建房间,缓存房间到bodyMap
|
// 房间+柜体不在成倍缓存中, 再检查bodyMap, 再没有创建房间,缓存房间到bodyMap
|
||||||
createPartsUnknownBody(roomId, roomName, bodyName, listBody);
|
createPartsUnknownBody(roomId, roomName, bodyName, listBody);
|
||||||
} else {
|
} else {
|
||||||
// 成倍数量
|
multipleCreateProcessGroup(cadBody, roomNameKey, listBody);
|
||||||
Integer bodyMultipleNum = cadBody.getCount();
|
|
||||||
for (int j = 0; j < bodyMultipleNum; j++) {
|
|
||||||
// 获取板材已经创建的柜体,缓存key:房间名+柜体名+成倍序号
|
|
||||||
OrderBodyDO orderBodyDO = bodyMap.get(roomNameKey + j);
|
|
||||||
// 解析配件的加工组,创建对应的orderItem
|
|
||||||
for (WebCadDataPartsReqVO.BlockObjectListDTO part : listBody) {
|
|
||||||
analyzePartProcessGroup(orderBodyDO, part);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 成倍创建配件加工组和item
|
||||||
|
*
|
||||||
|
* @param cadBody
|
||||||
|
* @param roomNameKey
|
||||||
|
* @param listBody
|
||||||
|
*/
|
||||||
|
private void multipleCreateProcessGroup(WebCadDataDoubleRoomTreeReqVO.ChildrenDTO cadBody, String roomNameKey, List<WebCadDataPartsReqVO.BlockObjectListDTO> listBody) {
|
||||||
|
// 成倍数量
|
||||||
|
Integer bodyMultipleNum = cadBody.getCount();
|
||||||
|
for (int j = 0; j < bodyMultipleNum; j++) {
|
||||||
|
// 获取板材已经创建的柜体,缓存key:房间名+柜体名+成倍序号
|
||||||
|
OrderBodyDO orderBodyDO = bodyMap.get(roomNameKey + j);
|
||||||
|
// 解析配件的加工组,创建对应的orderItem
|
||||||
|
for (WebCadDataPartsReqVO.BlockObjectListDTO part : listBody) {
|
||||||
|
analyzePartProcessGroup(orderBodyDO, part);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建不需要成倍的房间柜体以及其下的板件
|
* 创建不需要成倍的房间柜体以及其下的板件
|
||||||
*
|
*
|
||||||
@@ -803,8 +820,6 @@ public class WebCadOrderImportFactory {
|
|||||||
private void analyzePartProcessGroup(OrderBodyDO orderBodyDO, WebCadDataPartsReqVO.BlockObjectListDTO part) {
|
private void analyzePartProcessGroup(OrderBodyDO orderBodyDO, WebCadDataPartsReqVO.BlockObjectListDTO part) {
|
||||||
Long bodyId = orderBodyDO.getId();
|
Long bodyId = orderBodyDO.getId();
|
||||||
Long roomId = orderBodyDO.getRoomId();
|
Long roomId = orderBodyDO.getRoomId();
|
||||||
String roomName = orderBodyDO.getRoomName();
|
|
||||||
String bodyName = orderBodyDO.getName();
|
|
||||||
|
|
||||||
// 遍历加工组信息,生成对应的orderItem
|
// 遍历加工组信息,生成对应的orderItem
|
||||||
List<WebCadDataBlockReqVO.GroupInfo> groupInfos = part.getGroupInfos();
|
List<WebCadDataBlockReqVO.GroupInfo> groupInfos = part.getGroupInfos();
|
||||||
@@ -953,17 +968,17 @@ public class WebCadOrderImportFactory {
|
|||||||
.color(EMPTY_STRING)
|
.color(EMPTY_STRING)
|
||||||
.category(type)
|
.category(type)
|
||||||
.type(type)
|
.type(type)
|
||||||
.goodsId(StringUtils.isNotEmpty(goodsId) ? goodsId : EMPTY_STRING)
|
.goodsId(getEmpty(goodsId))
|
||||||
.length(NumberUtil.parseDouble(part.getHeight()))
|
.length(NumberUtil.parseDouble(part.getHeight()))
|
||||||
.width(NumberUtil.parseDouble(part.getWidth()))
|
.width(NumberUtil.parseDouble(part.getWidth()))
|
||||||
.thickness(NumberUtil.parseDouble(part.getThickness()))
|
.thickness(NumberUtil.parseDouble(part.getThickness()))
|
||||||
.isComposite(part.getIsComposite())
|
.isComposite(part.getIsComposite())
|
||||||
.name(part.getName())
|
.name(part.getName())
|
||||||
.material(EMPTY_STRING)
|
.material(EMPTY_STRING)
|
||||||
.model(StringUtils.isNotEmpty(model) ? model : EMPTY_STRING)
|
.model(getEmpty(model))
|
||||||
.spec(StringUtils.isNotEmpty(spec) ? spec : EMPTY_STRING)
|
.spec(getEmpty(spec))
|
||||||
.brand(StringUtils.isNotEmpty(brand) ? brand : EMPTY_STRING)
|
.brand(getEmpty(brand))
|
||||||
.factory(StringUtils.isNotEmpty(factory) ? factory : EMPTY_STRING)
|
.factory(getEmpty(factory))
|
||||||
.unit(part.getUnit())
|
.unit(part.getUnit())
|
||||||
.price(0.0)
|
.price(0.0)
|
||||||
.subparts(EMPTY_STRING)
|
.subparts(EMPTY_STRING)
|
||||||
@@ -1018,6 +1033,16 @@ public class WebCadOrderImportFactory {
|
|||||||
orderInfoBatchInsertWithinThreshold(orderPartsMapper, orderPartsDOS, true);
|
orderInfoBatchInsertWithinThreshold(orderPartsMapper, orderPartsDOS, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* value为空返回EMPTY_STRING
|
||||||
|
*
|
||||||
|
* @param value
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private String getEmpty(String value) {
|
||||||
|
return StringUtils.isNotEmpty(value) ? value : EMPTY_STRING;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 配件对应
|
* 配件对应
|
||||||
*
|
*
|
||||||
@@ -1112,15 +1137,6 @@ public class WebCadOrderImportFactory {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// /**
|
|
||||||
// * 数据保存入库
|
|
||||||
// */
|
|
||||||
// private void saveData() {
|
|
||||||
// orderInfoBatchInsertWithinThreshold(orderBodyMapper, bodyMap.values().stream().toList(), true);
|
|
||||||
// orderInfoBatchInsertWithinThreshold(orderItemMapper, orderItemDOS, true);
|
|
||||||
// orderInfoBatchInsertWithinThreshold(orderGroupMapper, orderGroupDOS, true);
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 数据保存入库
|
* 数据保存入库
|
||||||
|
|||||||
Reference in New Issue
Block a user