mirror of
http://192.168.1.205:9980/cf_devdept2/cf_imes_server.git
synced 2026-08-12 21:02:08 +08:00
新增webcad生产单导入:1、新增生产单2w片数限制检查;2、暂时移除order_item、order_plate线程池插入操作;
This commit is contained in:
+2
@@ -18,4 +18,6 @@ public class ErrorCodeConstants {
|
||||
public static final ErrorCode WEBCAD_ORDER_IMPORT_SAVEDATA_ERROR = new ErrorCode(1_005_000_008, "导入失败:数据保存异常,请检查拆单数据");
|
||||
public static final ErrorCode WEBCAD_ORDER_IMPORT_GET_ORG_SEALEDGE_ERROR = new ErrorCode(1_005_000_009, "导入失败:获取组织封边对应配置异常,请检查服务");
|
||||
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片,本次拆单超出部分不计入生产单");
|
||||
}
|
||||
|
||||
+5
-1
@@ -25,6 +25,7 @@ import com.cf.imes.module.plan.service.orderImport.factory.WebCadOrderImportFact
|
||||
import com.cf.imes.module.system.api.systemconfig.SystemConfigApi;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
|
||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -101,6 +102,9 @@ public class WebCadOrderImportServiceImpl implements WebCadOrderImportService {
|
||||
@Resource(name = PLAN_IMPOT_THREAD_POOL_TASK_EXECUTOR)
|
||||
private ThreadPoolTaskExecutor threadPoolTaskExecutor;
|
||||
|
||||
@Value("${chenfeng.plan.impot.cadImportPlateNumThreshold:20000}")
|
||||
private int cadImportPlateNumThreshold;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void webCadOrderImport(WebCadDataReqVO webCadDataReqVO) {
|
||||
@@ -117,7 +121,7 @@ public class WebCadOrderImportServiceImpl implements WebCadOrderImportService {
|
||||
throw new ServiceException(ORDER_IMPORT_ORGAN_LOCK_ERROR);
|
||||
}
|
||||
WebCadOrderImportFactory webCadOrderImportFactory = new WebCadOrderImportFactory(organId, orderMapper, snowFlakeGenerator, orderBodyMapper, plateMapper, orderItemMapper, orderGroupMapper,
|
||||
idWorker, orderInputProcessor, orderPartsMapper, goodsMapper, rawGoodsMapper, plateGoodMapper, customPlateNoGenerateService, transactionManager, systemConfigApi, threadPoolTaskExecutor);
|
||||
idWorker, orderInputProcessor, orderPartsMapper, goodsMapper, rawGoodsMapper, plateGoodMapper, customPlateNoGenerateService, transactionManager, systemConfigApi, threadPoolTaskExecutor, cadImportPlateNumThreshold);
|
||||
webCadOrderImportFactory.analyzeTempData(webCadDataReqVO);
|
||||
} catch (ServiceException se) {
|
||||
throw se;
|
||||
|
||||
+52
-42
@@ -1,6 +1,5 @@
|
||||
package com.cf.imes.module.plan.service.orderImport.factory;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.BooleanUtil;
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
@@ -85,6 +84,8 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.cf.imes.module.plan.enums.ErrorCodeConstants.WEBCAD_ORDER_IMPORT_GET_ORG_SEALEDGE_ERROR;
|
||||
import static com.cf.imes.module.plan.enums.ErrorCodeConstants.WEBCAD_ORDER_IMPORT_ORDER_PLATENUM_CHECK_ERROR;
|
||||
import static com.cf.imes.module.plan.enums.ErrorCodeConstants.WEBCAD_ORDER_IMPORT_ORDER_PLATENUM_REACH_THRESHOLD_ERROR;
|
||||
import static com.cf.imes.module.plan.enums.ErrorCodeConstants.WEBCAD_ORDER_IMPORT_ORG_SEALEDGE_ANALYZE_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_SAVEDATA_ERROR;
|
||||
@@ -194,6 +195,15 @@ public class WebCadOrderImportFactory {
|
||||
// 主线程的data_code
|
||||
private String peek;
|
||||
|
||||
// 当前拆单导入的板件数量(初始包含前n次导入的板件总数)
|
||||
private int currentPlateNum;
|
||||
|
||||
// cad拆单板件数量阈值
|
||||
private int cadImportPlateNumThreshold;
|
||||
|
||||
// 板件数量是否已达到阈值
|
||||
private boolean plateNumReachThreshold = false;
|
||||
|
||||
public WebCadOrderImportFactory(Long organId,
|
||||
OrderMapper orderMapper,
|
||||
SnowFlakeGenerator snowFlakeGenerator,
|
||||
@@ -210,7 +220,8 @@ public class WebCadOrderImportFactory {
|
||||
CustomPlateNoGenerateService customPlateNoGenerateService,
|
||||
DataSourceTransactionManager transactionManager,
|
||||
SystemConfigApi systemConfigApi,
|
||||
ThreadPoolTaskExecutor threadPoolTaskExecutor) {
|
||||
ThreadPoolTaskExecutor threadPoolTaskExecutor,
|
||||
int cadImportPlateNumThreshold) {
|
||||
this.organId = organId;
|
||||
this.orderMapper = orderMapper;
|
||||
this.snowFlakeGenerator = snowFlakeGenerator;
|
||||
@@ -233,6 +244,7 @@ public class WebCadOrderImportFactory {
|
||||
batchId = (Long) snowFlakeGenerator.nextId(null);
|
||||
sealEdgeConfigList = new ArrayList<>();
|
||||
peek = DynamicDataSourceContextHolder.peek();
|
||||
this.cadImportPlateNumThreshold = cadImportPlateNumThreshold;
|
||||
}
|
||||
|
||||
public void analyzeTempData(WebCadDataReqVO webCadDataReqVO) {
|
||||
@@ -282,6 +294,8 @@ public class WebCadOrderImportFactory {
|
||||
saveDataAsync();
|
||||
log.debug("====================【cad拆单异步保存结束】====================");
|
||||
|
||||
log.warn(ServiceExceptionUtil.exception(WEBCAD_ORDER_IMPORT_ORDER_PLATENUM_REACH_THRESHOLD_ERROR, orderId).getMessage());
|
||||
|
||||
} catch (Exception e) {
|
||||
if (esInsert) {
|
||||
CompletableFuture.runAsync(() -> {
|
||||
@@ -359,6 +373,19 @@ public class WebCadOrderImportFactory {
|
||||
}
|
||||
orderDO = orderDOFromOrderNo;
|
||||
orderId = orderDOFromOrderNo.getId();
|
||||
|
||||
// 解析已有生产单下板件数量,超过两万不再导入
|
||||
Long existPlateCount = plateMapper.selectCount(new LambdaQueryWrapper<PlateDO>()
|
||||
.eq(PlateDO::getOrderId, orderId)
|
||||
.eq(PlateDO::getOrganId, organId)
|
||||
.eq(PlateDO::getDeleted, false)
|
||||
);
|
||||
// 2万片阻止继续拆单
|
||||
if (existPlateCount >= cadImportPlateNumThreshold) {
|
||||
throw ServiceExceptionUtil.exception(WEBCAD_ORDER_IMPORT_ORDER_PLATENUM_CHECK_ERROR, orderId);
|
||||
} else {
|
||||
currentPlateNum = existPlateCount.intValue();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -629,10 +656,20 @@ public class WebCadOrderImportFactory {
|
||||
orderBodyDO.setMultiRoomBodyName(multiRoomBodyName);
|
||||
bodyMap.put(multiRoomBodyName, orderBodyDO);
|
||||
|
||||
listBody.forEach(block -> {
|
||||
// 创建板件相关数据:order_plate、order_item、es.orderModels
|
||||
createPlate(orderBodyDO, block);
|
||||
});
|
||||
// 达到阈值了不再创建板件
|
||||
if(plateNumReachThreshold) {
|
||||
continue;
|
||||
}
|
||||
|
||||
for (WebCadDataBlockReqVO block : listBody) {
|
||||
if (!plateNumReachThreshold) {
|
||||
// 创建板件相关数据:order_plate、order_item、es.orderModels
|
||||
createPlate(orderBodyDO, block);
|
||||
} else {
|
||||
// 达到阈值了跳出循环,不再创建板件
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -775,6 +812,12 @@ public class WebCadOrderImportFactory {
|
||||
calculateSealThickness(plateDO, boardData.getSealing());
|
||||
|
||||
//批量保存板件
|
||||
// 达到板件数量阈值,停止入库,更新全局参数停止后续入库
|
||||
currentPlateNum+=1;
|
||||
if (currentPlateNum > cadImportPlateNumThreshold) {
|
||||
plateNumReachThreshold = true;
|
||||
return;
|
||||
}
|
||||
plateDOS.add(plateDO);
|
||||
orderPlateBatchInsertWithinThreshold(plateDOS, false);
|
||||
|
||||
@@ -1742,18 +1785,7 @@ public class WebCadOrderImportFactory {
|
||||
private void orderItemBatchInsertWithinThreshold(List<OrderItemDO> list, boolean isLast) {
|
||||
// 达到批量的阈值就做一次插入
|
||||
if (CollUtil.isNotEmpty(list) && (list.size() >= BATCH_THRESHOLD_NUMBER || isLast)) {
|
||||
// 深拷贝list
|
||||
List<OrderItemDO> deepCopyList = list.stream().map(item -> new OrderItemDO(item)).collect(Collectors.toList());
|
||||
threadPoolTaskExecutor.submit(() -> {
|
||||
try {
|
||||
// 子线程同步主线程的多数据源
|
||||
DynamicDataSourceContextHolder.push(peek);
|
||||
orderItemMapper.insertBatchSomeColumn(deepCopyList);
|
||||
deepCopyList.clear();
|
||||
} catch (Exception e) {
|
||||
log.error("WEBCAD import saveItemAsync error", e);
|
||||
}
|
||||
});
|
||||
orderItemMapper.insertBatchSomeColumn(list);
|
||||
if (!isLast) {
|
||||
// 存储完成清理 list
|
||||
list.clear();
|
||||
@@ -1770,18 +1802,7 @@ public class WebCadOrderImportFactory {
|
||||
private void orderPlateBatchInsertWithinThreshold(List<PlateDO> list, boolean isLast) {
|
||||
// 达到批量的阈值就做一次插入
|
||||
if (CollUtil.isNotEmpty(list) && (list.size() >= BATCH_THRESHOLD_NUMBER || isLast)) {
|
||||
// 深拷贝list
|
||||
List<PlateDO> deepCopyList = list.stream().map(item -> new PlateDO(item)).collect(Collectors.toList());
|
||||
threadPoolTaskExecutor.submit(() -> {
|
||||
try {
|
||||
// 子线程同步主线程的多数据源
|
||||
DynamicDataSourceContextHolder.push(peek);
|
||||
plateMapper.insertBatchSomeColumn(deepCopyList);
|
||||
deepCopyList.clear();
|
||||
} catch (Exception e) {
|
||||
log.error("WEBCAD import savePlateAsync error", e);
|
||||
}
|
||||
});
|
||||
plateMapper.insertBatchSomeColumn(list);
|
||||
if (!isLast) {
|
||||
// 存储完成清理 list
|
||||
list.clear();
|
||||
@@ -1798,18 +1819,7 @@ public class WebCadOrderImportFactory {
|
||||
private void orderPartBatchInsertWithinThreshold(List<OrderPartsDO> list, boolean isLast) {
|
||||
// 达到批量的阈值就做一次插入
|
||||
if (CollUtil.isNotEmpty(list) && (list.size() >= BATCH_THRESHOLD_NUMBER || isLast)) {
|
||||
// 深拷贝list
|
||||
List<OrderPartsDO> deepCopyList = list.stream().map(item -> new OrderPartsDO(item)).collect(Collectors.toList());
|
||||
threadPoolTaskExecutor.submit(() -> {
|
||||
try {
|
||||
// 子线程同步主线程的多数据源
|
||||
DynamicDataSourceContextHolder.push(peek);
|
||||
orderPartsMapper.insertBatchSomeColumn(deepCopyList);
|
||||
deepCopyList.clear();
|
||||
} catch (Exception e) {
|
||||
log.error("WEBCAD import savePartAsync error", e);
|
||||
}
|
||||
});
|
||||
orderPartsMapper.insertBatchSomeColumn(list);
|
||||
if (!isLast) {
|
||||
// 存储完成清理 list
|
||||
list.clear();
|
||||
|
||||
Reference in New Issue
Block a user