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