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、封边条非必须对应修复;2、es回滚批次数据增加异步两次等待删除;3、多次拆单已有板材对应处理;
This commit is contained in:
+23
-5
@@ -92,14 +92,32 @@ public class OrderInputProcessor {
|
||||
public void deleteByOrderIdBatch(Long orderId, Long batchId, String index) {
|
||||
DeleteByQueryRequest.Builder builder = new DeleteByQueryRequest.Builder();
|
||||
builder.index(index);
|
||||
builder.query(q -> q.term(t -> t.field(FIELD_ORDER_ID).value(orderId)));
|
||||
builder.query(q -> q.term(t -> t.field(FIELD_BATCH_ID).value(batchId)));
|
||||
builder.query(q -> q.bool(b -> b
|
||||
.must(must -> must.term(t -> t.field(FIELD_ORDER_ID).value(orderId)))
|
||||
.must(must -> must.term(t -> t.field(FIELD_BATCH_ID).value(batchId)))
|
||||
));
|
||||
|
||||
try {
|
||||
DeleteByQueryResponse response = elasticsearchClient.deleteByQuery(builder.build());
|
||||
log.info("Deleted {} documents with planId {}", response.deleted(), orderId);
|
||||
DeleteByQueryRequest deleteBuild = builder.build();
|
||||
// es刚插入有可能无法马上查询删除(默认1s的可见时间),线程每1s删除一次,再删除两次
|
||||
DeleteByQueryResponse response = elasticsearchClient.deleteByQuery(deleteBuild);
|
||||
if (response.deleted() == 0) {
|
||||
for (int i = 0; i < 2; i++) {
|
||||
response = elasticsearchClient.deleteByQuery(deleteBuild);
|
||||
// 删除成功,不再继续
|
||||
if (response.deleted() > 0) {
|
||||
break;
|
||||
}
|
||||
try {
|
||||
Thread.sleep(1000);
|
||||
} catch (InterruptedException e) {
|
||||
log.error("====================【线程中断异常】====================");
|
||||
}
|
||||
}
|
||||
}
|
||||
log.info("Deleted {} documents with orderId {}", response.deleted(), orderId);
|
||||
} catch (IOException | ElasticsearchException e) {
|
||||
log.error("Error deleting documents with planId {}: {}", orderId, e.getMessage());
|
||||
log.error("Error deleting documents with orderId {}: {}", orderId, e.getMessage());
|
||||
throw new ServiceException(INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
+77
-53
@@ -60,6 +60,7 @@ import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
@@ -127,6 +128,9 @@ public class WebCadOrderImportFactory {
|
||||
// 是否入库的第一块板件
|
||||
private boolean isFirstPlate;
|
||||
|
||||
// 是否有插入es数据
|
||||
private boolean esInsert;
|
||||
|
||||
private CustomPlateNoGenerateConfigVO plateNoGenerateConfigVO;
|
||||
|
||||
// 操作人
|
||||
@@ -221,8 +225,12 @@ public class WebCadOrderImportFactory {
|
||||
saveData();
|
||||
|
||||
} catch (Exception e) {
|
||||
// 数据库数据回滚,此时删除 ES 里的数据
|
||||
orderInputProcessor.deleteByOrderIdBatch(orderId, batchId, ORDER_PLATE_MODEL);
|
||||
if (esInsert) {
|
||||
CompletableFuture.runAsync(() -> {
|
||||
// 数据库数据回滚,此时删除 ES 里的数据
|
||||
orderInputProcessor.deleteByOrderIdBatch(orderId, batchId, ORDER_PLATE_MODEL);
|
||||
});
|
||||
}
|
||||
throw e;
|
||||
} finally {
|
||||
// 清理数据
|
||||
@@ -269,54 +277,65 @@ public class WebCadOrderImportFactory {
|
||||
String plateGoodsId = materialReqVO.getId();
|
||||
String plateGoodsGoodsId = materialReqVO.getGoodsId();
|
||||
PlateGoodDO plateGoodDO = plateGoodMapper.selectById(plateGoodsId);
|
||||
// 检查板材库
|
||||
if (ObjectUtil.isNull(plateGoodDO)) {
|
||||
throw ServiceExceptionUtil.exception(WEBCAD_ORDER_IMPORT_PLATE_NOT_EXIST_ERROR, plateGoodsId);
|
||||
}
|
||||
// 创建设计端商品
|
||||
Long rawGoodsId = (Long) snowFlakeGenerator.nextId(null);
|
||||
RawGoodsDO rawGoodsDO = RawGoodsDO.builder()
|
||||
.id(rawGoodsId)
|
||||
.orderId(orderId)
|
||||
.rawGoodsId(plateGoodsGoodsId)
|
||||
.goodsName(plateGoodDO.getGoodsName())
|
||||
.material(plateGoodDO.getMaterial())
|
||||
.texture(plateGoodDO.getTexture())
|
||||
.color(plateGoodDO.getColor())
|
||||
.colorBlack(StringUtils.isNotEmpty(plateGoodDO.getColorBlack()) ? plateGoodDO.getColorBlack() : EMPTY_STRING)
|
||||
.thickness(plateGoodDO.getThickness())
|
||||
.spec(plateGoodDO.getSpec())
|
||||
.brand(plateGoodDO.getBrand())
|
||||
.price(0.00)
|
||||
.deleted(false)
|
||||
.organId(organId)
|
||||
.build();
|
||||
Long orderGoodsId = (Long) snowFlakeGenerator.nextId(null);
|
||||
// 检查生产单下是否已经有板材下的order_goods,有不再创建
|
||||
List<GoodsDO> existOrderGoods = goodsMapper.selectList(new LambdaUpdateWrapper<GoodsDO>()
|
||||
.eq(GoodsDO::getGoodsId, plateGoodsGoodsId)
|
||||
.eq(GoodsDO::getOrderId, orderId)
|
||||
.eq(GoodsDO::getOrganId, organId));
|
||||
Long orderGoodsId;
|
||||
if (CollUtil.isNotEmpty(existOrderGoods)) {
|
||||
orderGoodsId = existOrderGoods.get(0).getId();
|
||||
} else {
|
||||
// 创建设计端商品
|
||||
Long rawGoodsId = (Long) snowFlakeGenerator.nextId(null);
|
||||
RawGoodsDO rawGoodsDO = RawGoodsDO.builder()
|
||||
.id(rawGoodsId)
|
||||
.orderId(orderId)
|
||||
.rawGoodsId(plateGoodsGoodsId)
|
||||
.goodsName(plateGoodDO.getGoodsName())
|
||||
.material(plateGoodDO.getMaterial())
|
||||
.texture(plateGoodDO.getTexture())
|
||||
.color(plateGoodDO.getColor())
|
||||
.colorBlack(StringUtils.isNotEmpty(plateGoodDO.getColorBlack()) ? plateGoodDO.getColorBlack() : EMPTY_STRING)
|
||||
.thickness(plateGoodDO.getThickness())
|
||||
.spec(plateGoodDO.getSpec())
|
||||
.brand(plateGoodDO.getBrand())
|
||||
.price(0.00)
|
||||
.deleted(false)
|
||||
.organId(organId)
|
||||
.build();
|
||||
orderGoodsId = (Long) snowFlakeGenerator.nextId(null);
|
||||
|
||||
// 创建生产单商品
|
||||
GoodsDO goodsDO = GoodsDO.builder()
|
||||
.id(orderGoodsId)
|
||||
.orderId(orderId)
|
||||
.rawGoodsId(String.valueOf(rawGoodsId))
|
||||
.goodsId(plateGoodsGoodsId)
|
||||
.goodsName(plateGoodDO.getGoodsName())
|
||||
.material(plateGoodDO.getMaterial())
|
||||
.texture(plateGoodDO.getTexture())
|
||||
.color(plateGoodDO.getColor())
|
||||
.colorBlack(StringUtils.isNotEmpty(plateGoodDO.getColorBlack()) ? plateGoodDO.getColorBlack() : EMPTY_STRING)
|
||||
.width(BigDecimal.valueOf(plateGoodDO.getWidth()))
|
||||
.height(BigDecimal.valueOf(plateGoodDO.getHeight()))
|
||||
.thickness(BigDecimal.valueOf(plateGoodDO.getThickness()))
|
||||
.spec(plateGoodDO.getSpec())
|
||||
.brand(plateGoodDO.getBrand())
|
||||
.remark(EMPTY_STRING)
|
||||
.planId(0L)
|
||||
.price(0.00)
|
||||
.deleted(false)
|
||||
.organId(organId)
|
||||
.build();
|
||||
// 创建生产单商品
|
||||
GoodsDO goodsDO = GoodsDO.builder()
|
||||
.id(orderGoodsId)
|
||||
.orderId(orderId)
|
||||
.rawGoodsId(String.valueOf(rawGoodsId))
|
||||
.goodsId(plateGoodsGoodsId)
|
||||
.goodsName(plateGoodDO.getGoodsName())
|
||||
.material(plateGoodDO.getMaterial())
|
||||
.texture(plateGoodDO.getTexture())
|
||||
.color(plateGoodDO.getColor())
|
||||
.colorBlack(StringUtils.isNotEmpty(plateGoodDO.getColorBlack()) ? plateGoodDO.getColorBlack() : EMPTY_STRING)
|
||||
.width(BigDecimal.valueOf(plateGoodDO.getWidth()))
|
||||
.height(BigDecimal.valueOf(plateGoodDO.getHeight()))
|
||||
.thickness(BigDecimal.valueOf(plateGoodDO.getThickness()))
|
||||
.spec(plateGoodDO.getSpec())
|
||||
.brand(plateGoodDO.getBrand())
|
||||
.remark(EMPTY_STRING)
|
||||
.planId(0L)
|
||||
.price(0.00)
|
||||
.deleted(false)
|
||||
.organId(organId)
|
||||
.build();
|
||||
|
||||
goodsDOS.add(goodsDO);
|
||||
rawGoodsDOS.add(rawGoodsDO);
|
||||
goodsDOS.add(goodsDO);
|
||||
rawGoodsDOS.add(rawGoodsDO);
|
||||
}
|
||||
for (Integer blockIndex : materialReqVO.getOrginIds()) {
|
||||
// blockIndex序号获取对应板件a
|
||||
WebCadDataBlockReqVO webCadDataBlockReqVO = blockReqVOS.get(blockIndex - 1);
|
||||
@@ -631,6 +650,9 @@ public class WebCadOrderImportFactory {
|
||||
orderModelDO.setCreator(operatorName);
|
||||
orderModelDO.setUpdater(operatorName);
|
||||
orderModelDOS.add(orderModelDO);
|
||||
if (!esInsert) {
|
||||
esInsert = true;
|
||||
}
|
||||
// 批量插入造型数据
|
||||
orderModelsBatchInsertWithinThreshold(false);
|
||||
|
||||
@@ -999,14 +1021,16 @@ public class WebCadOrderImportFactory {
|
||||
if (PART_CATEGORY_ONE.equals(partType)) {
|
||||
// 封边对应查询配件库中的封边条配件,使用配件库的model、spec、brand、factory
|
||||
String sealPartId = part.getPartId();
|
||||
PartsDO partsDO = partsMapper.selectById(sealPartId);
|
||||
if (ObjectUtil.isNotNull(partsDO)) {
|
||||
model = partsDO.getModel();
|
||||
spec = partsDO.getSpec();
|
||||
brand = partsDO.getBrand();
|
||||
factory = partsDO.getFactory();
|
||||
} else {
|
||||
throw ServiceExceptionUtil.exception(WEBCAD_ORDER_IMPORT_SEAL_NOT_EXIST_ERROR, sealPartId);
|
||||
if (ObjectUtil.isNotNull(sealPartId)) {
|
||||
PartsDO partsDO = partsMapper.selectById(sealPartId);
|
||||
if (ObjectUtil.isNotNull(partsDO)) {
|
||||
model = partsDO.getModel();
|
||||
spec = partsDO.getSpec();
|
||||
brand = partsDO.getBrand();
|
||||
factory = partsDO.getFactory();
|
||||
} else {
|
||||
throw ServiceExceptionUtil.exception(WEBCAD_ORDER_IMPORT_SEAL_NOT_EXIST_ERROR, sealPartId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user