1、cad拆单支持造型数据压缩存入mysql;2、未排单数据、计算用板量、优化生产接口支持mysql造型数据替换es造型数据;

This commit is contained in:
gaoqr
2026-05-12 09:50:18 +08:00
parent ba914beb16
commit 9f9941e71e
19 changed files with 291 additions and 98 deletions
@@ -7,6 +7,7 @@ import com.cf.imes.module.plan.dal.elasticsearch.HoleDetail;
import com.cf.imes.module.plan.dal.elasticsearch.ModelDetail;
import com.cf.imes.module.plan.dal.elasticsearch.PartsInfo;
import com.cf.imes.module.plan.dal.elasticsearch.PointDetail;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
@@ -25,9 +26,9 @@ import java.util.Map;
@Builder
@AllArgsConstructor
@NoArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class OrderModelDO extends ESDocument {
/*@Schema(description = "组织id")
private Long organId;*/
@Schema(description = "订单id")
private Long orderId;
@Schema(description = "小板id")
@@ -247,4 +247,10 @@ public class PlateDO extends BaseDO {
* cad自定义板编号
*/
private String cadPlateNo;
/**
* 造型数据
*/
@TableField(exist = false)
private String modelData;
}
@@ -1,5 +1,6 @@
package com.cf.imes.module.plan.dal.elasticsearch;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@@ -12,6 +13,7 @@ import lombok.NoArgsConstructor;
@Builder
@AllArgsConstructor
@NoArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class BasePosition {
private String basePoint;// 基准点
@@ -1,5 +1,6 @@
package com.cf.imes.module.plan.dal.elasticsearch;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
@@ -13,6 +14,7 @@ import lombok.NoArgsConstructor;
@Builder
@AllArgsConstructor
@NoArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class HoleDetail {
@Schema(description = "孔ID")
@@ -1,5 +1,6 @@
package com.cf.imes.module.plan.dal.elasticsearch;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
@@ -17,6 +18,7 @@ import java.util.List;
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = false) // 设置 chain = false,避免订单导入有问
@JsonInclude(JsonInclude.Include.NON_NULL)
public class IOriginModelingData {
@Schema(description = "刀半径")
@@ -44,8 +46,4 @@ public class IOriginModelingData {
@Schema(description = "槽加深")
private Double addDepth;
// ============ 启用 api =============
// @Schema(description = "造型点列表")
// private List<PointList> pointList;
}
@@ -1,5 +1,6 @@
package com.cf.imes.module.plan.dal.elasticsearch;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
@@ -16,6 +17,7 @@ import java.util.List;
@AllArgsConstructor
@NoArgsConstructor
@Schema(description = "管理后台 - 造型信息")
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ModelDetail {
@Schema(description = "造型ID")
@@ -52,9 +54,6 @@ public class ModelDetail {
@Schema(description = "角度(二维刀路V型刀提角/清角用)")
private Double tangentAngle; // 目前只在xml中
// @Schema(description = "造型数量")
// private Integer count;
@Schema(description = "造像使用刀具名称")
private String knifeName;
@Schema(description = "刀号")
@@ -1,5 +1,6 @@
package com.cf.imes.module.plan.dal.elasticsearch;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
@@ -17,6 +18,7 @@ import lombok.experimental.Accessors;
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = false) // 设置 chain = false,避免订单导入有问
@JsonInclude(JsonInclude.Include.NON_NULL)
public class OffSetList {
@Schema(description = "偏移刀路ID")
@@ -1,5 +1,6 @@
package com.cf.imes.module.plan.dal.elasticsearch;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@@ -12,6 +13,7 @@ import lombok.NoArgsConstructor;
@Builder
@AllArgsConstructor
@NoArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class PartsInfo {
private Long id; // 配件标识
@@ -1,5 +1,6 @@
package com.cf.imes.module.plan.dal.elasticsearch;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
@@ -17,6 +18,7 @@ import java.math.BigDecimal;
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = false) // 设置 chain = false,避免订单导入有问
@JsonInclude(JsonInclude.Include.NON_NULL)
public class PointDetail {
@Schema(description = "点id")
@@ -1,5 +1,6 @@
package com.cf.imes.module.plan.dal.elasticsearch;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
@@ -15,6 +16,7 @@ import lombok.experimental.Accessors;
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = false) // 设置 chain = false,避免订单导入有问
@JsonInclude(JsonInclude.Include.NON_NULL)
public class PointList {
@Schema(description = "纹路Id")
@@ -130,8 +130,9 @@ public class WebCadOrderImportServiceImpl implements WebCadOrderImportService {
JsonFactory factory = new JsonFactory();
Long cadViewFileId = null;
try (GZIPInputStream gzipInputStream = new GZIPInputStream(file.getInputStream());
JsonParser parser = factory.createParser(gzipInputStream)) {
try (
// GZIPInputStream gzipInputStream = new GZIPInputStream(file.getInputStream());
JsonParser parser = factory.createParser(file.getInputStream())) {
factory.disable(JsonParser.Feature.AUTO_CLOSE_SOURCE);
int plateCount = 0;
@@ -17,6 +17,7 @@ import com.cf.imes.framework.common.exception.ErrorCode;
import com.cf.imes.framework.common.exception.ServiceException;
import com.cf.imes.framework.common.pojo.CommonResult;
import com.cf.imes.framework.common.util.Assert.AssertUtils;
import com.cf.imes.framework.common.util.json.JsonUtils;
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;
@@ -135,9 +136,6 @@ public class WebCadOrderImportAsyncFactory {
// 是否入库的第一块板件
private boolean isFirstPlate;
// 是否有插入es数据
private boolean esInsert;
private CustomPlateNoGenerateConfigVO plateNoGenerateConfigVO;
// 操作人
@@ -172,7 +170,6 @@ public class WebCadOrderImportAsyncFactory {
private List<PlateDO> plateDOS = new ArrayList<>();
private List<OrderItemDO> orderItemDOS = new ArrayList<>();
private List<OrderPartsDO> orderPartsDOS = new ArrayList<>();
private List<OrderModelDO> orderModelDOS = ListUtils.newArrayListWithExpectedSize(BATCH_THRESHOLD_NUMBER);
private List<GoodsDO> goodsDOS = new ArrayList<>();
private List<OrderComponentDO> orderComponentDOS = new ArrayList<>();
private List<SystemConfigSealEdgeRespDTO> sealEdgeConfigList;
@@ -833,8 +830,9 @@ public class WebCadOrderImportAsyncFactory {
plateDOS.add(plateDO);
orderPlateBatchInsertWithinThreshold(plateDOS, false);
// 创建es造型数据
// createModel(plateDO, block, plateRemark);
// 创建造型数据
OrderModelDO orderModelDO = createModel(plateDO, block, plateRemark);
plateDO.setModelData(JsonUtils.toJsonString(orderModelDO));
// 遍历加工组信息,生成对应的加工组和item
analyzeBlockProcessGroup(orderBodyDO, block, plateId);
@@ -946,7 +944,7 @@ public class WebCadOrderImportAsyncFactory {
/**
* 创建板件造型es数据
*/
private void createModel(PlateDO plateDO, WebCadDataBlockReqVO block, WebCadDataBlockRemarkVO plateRemark) {
private OrderModelDO createModel(PlateDO plateDO, WebCadDataBlockReqVO block, WebCadDataBlockRemarkVO plateRemark) {
// 点阵信息
WebCadDataBlockReqVO.PointInfoDTO pointInfo = block.getPointInfo();
@@ -988,11 +986,7 @@ public class WebCadOrderImportAsyncFactory {
orderModelDO.setGoodsId(block.getGoodsCode());
orderModelDO.setPlateGoodsId(plateDO.getGoodsId());
orderModelDO.setOrganId(organId);
orderModelDOS.add(orderModelDO);
if (!esInsert) {
esInsert = true;
}
return orderModelDO;
}
/**
@@ -2009,7 +2003,7 @@ public class WebCadOrderImportAsyncFactory {
private void orderPlateBatchInsertWithinThreshold(List<PlateDO> list, boolean isLast) {
// 达到批量的阈值就做一次插入
if (CollUtil.isNotEmpty(list) && (list.size() >= BATCH_THRESHOLD_NUMBER || isLast)) {
String sql = "INSERT INTO order_plate (id,organ_id,order_id,name,plate_no,type,goods_id,width,height,thickness,split_width,split_height,split_thickness,seal_left,seal_right,seal_up,seal_down,area,texture,hole_face,hole_arrange,unregular_point_count,front_hole_count,back_hole_count,side_hole_count,front_model_count,back_model_count,is_door,open_door_type,offset_x,offset_y,is_arc_across,module_type_id,is_special_shaped,is_sculpt,is_side_sculpt,is_2v,is_side_2v,is_row_hole,is_optimized,is_cutted,filter_type,remark,is_cancel,deleted,custom_plate_no,create_time,update_time,creator,updater, cad_plate_no) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
String sql = "INSERT INTO order_plate (id,organ_id,order_id,name,plate_no,type,goods_id,width,height,thickness,split_width,split_height,split_thickness,seal_left,seal_right,seal_up,seal_down,area,texture,hole_face,hole_arrange,unregular_point_count,front_hole_count,back_hole_count,side_hole_count,front_model_count,back_model_count,is_door,open_door_type,offset_x,offset_y,is_arc_across,module_type_id,is_special_shaped,is_sculpt,is_side_sculpt,is_2v,is_side_2v,is_row_hole,is_optimized,is_cutted,filter_type,remark,is_cancel,deleted,custom_plate_no,create_time,update_time,creator,updater, cad_plate_no, model_data) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int index) throws SQLException {
@@ -2021,17 +2015,17 @@ public class WebCadOrderImportAsyncFactory {
ps.setString(5, item.getPlateNo());
ps.setInt(6, item.getType());
ps.setLong(7, item.getGoodsId());
ps.setBigDecimal(8, item.getWidth());
ps.setBigDecimal(9, item.getHeight());
ps.setBigDecimal(10, item.getThickness());
ps.setBigDecimal(11, item.getSplitWidth());
ps.setBigDecimal(12, item.getSplitHeight());
ps.setBigDecimal(13, item.getSplitThickness());
ps.setBigDecimal(14, item.getSealLeft());
ps.setBigDecimal(15, item.getSealRight());
ps.setBigDecimal(16, item.getSealUp());
ps.setBigDecimal(17, item.getSealDown());
ps.setBigDecimal(18, item.getArea());
setSqlDefaultBigDecimal(ps, 8, item.getWidth());
setSqlDefaultBigDecimal(ps, 9, item.getHeight());
setSqlDefaultBigDecimal(ps, 10, item.getThickness());
setSqlDefaultBigDecimal(ps, 11, item.getSplitWidth());
setSqlDefaultBigDecimal(ps, 12, item.getSplitHeight());
setSqlDefaultBigDecimal(ps, 13, item.getSplitThickness());
setSqlDefaultBigDecimal(ps, 14, item.getSealLeft());
setSqlDefaultBigDecimal(ps, 15, item.getSealRight());
setSqlDefaultBigDecimal(ps, 16, item.getSealUp());
setSqlDefaultBigDecimal(ps, 17, item.getSealDown());
setSqlDefaultBigDecimal(ps, 18, item.getArea());
ps.setInt(19, item.getTexture());
ps.setInt(20, item.getHoleFace());
ps.setInt(21, item.getHoleArrange());
@@ -2065,6 +2059,13 @@ public class WebCadOrderImportAsyncFactory {
ps.setString(49, item.getCreator());
ps.setString(50, item.getUpdater());
ps.setString(51, item.getCadPlateNo());
String modelData = item.getModelData();
if (StringUtils.isNotEmpty(modelData)) {
ps.setBytes(52, JsonUtils.zip(modelData));
} else {
ps.setNull(52, Types.BLOB);
}
}
@Override
@@ -2421,7 +2422,6 @@ public class WebCadOrderImportAsyncFactory {
plateDOS = null;
orderItemDOS = null;
orderPartsDOS = null;
orderModelDOS = null;
goodsDOS = null;
orderComponentDOS = null;
sealEdgeConfigList = null;
@@ -2498,4 +2498,13 @@ public class WebCadOrderImportAsyncFactory {
}
}
}
private void setSqlDefaultBigDecimal(PreparedStatement ps, int index, BigDecimal value) throws SQLException {
if (value == null) {
ps.setBigDecimal(index, BigDecimal.ZERO);
} else {
ps.setBigDecimal(index, value);
}
}
}
@@ -15,6 +15,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.cf.imes.framework.common.exception.ErrorCode;
import com.cf.imes.framework.common.exception.ServiceException;
import com.cf.imes.framework.common.pojo.CommonResult;
import com.cf.imes.framework.common.util.json.JsonUtils;
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;
@@ -123,9 +124,6 @@ public class WebCadOrderImportFactory {
// 是否入库的第一块板件
private boolean isFirstPlate;
// 是否有插入es数据
private boolean esInsert;
private CustomPlateNoGenerateConfigVO plateNoGenerateConfigVO;
// 操作人
@@ -160,7 +158,6 @@ public class WebCadOrderImportFactory {
private List<PlateDO> plateDOS = new ArrayList<>();
private List<OrderItemDO> orderItemDOS = new ArrayList<>();
private List<OrderPartsDO> orderPartsDOS = new ArrayList<>();
private List<OrderModelDO> orderModelDOS = ListUtils.newArrayListWithExpectedSize(BATCH_THRESHOLD_NUMBER);
private List<GoodsDO> goodsDOS = new ArrayList<>();
private List<OrderComponentDO> orderComponentDOS = new ArrayList<>();
private List<SystemConfigSealEdgeRespDTO> sealEdgeConfigList;
@@ -213,7 +210,6 @@ public class WebCadOrderImportFactory {
this.systemConfigApi = systemConfigApi;
operatorName = SecurityFrameworkUtils.getLoginUser().getNickname();
now = LocalDateTime.now();
batchId = (Long) snowFlakeGenerator.nextId(null);
sealEdgeConfigList = new ArrayList<>();
this.cadImportPlateNumThreshold = cadImportPlateNumThreshold;
this.jdbcTemplate = jdbcTemplate;
@@ -773,12 +769,13 @@ public class WebCadOrderImportFactory {
orderBodyDO.setPlateNum(orderBodyDO.getPlateNum() + 1);
orderBodyDO.setUnregularNum(orderBodyDO.getUnregularNum() + BooleanUtil.toInt(isSpecialShape));
// 创建造型数据
OrderModelDO orderModelDO = createModel(plateDO, block, plateRemark);
plateDO.setModelData(JsonUtils.toJsonString(orderModelDO));
plateDOS.add(plateDO);
orderPlateBatchInsertWithinThreshold(plateDOS, false);
// 创建es造型数据
// createModel(plateDO, block, plateRemark);
// 遍历加工组信息,生成对应的加工组和item
analyzeBlockProcessGroup(orderBodyDO, block, plateId);
}
@@ -786,14 +783,12 @@ public class WebCadOrderImportFactory {
/**
* 创建板件造型es数据
*/
private void createModel(PlateDO plateDO, WebCadDataBlockReqVO block, WebCadDataBlockRemarkVO plateRemark) {
private OrderModelDO createModel(PlateDO plateDO, WebCadDataBlockReqVO block, WebCadDataBlockRemarkVO plateRemark) {
// 点阵信息
WebCadDataBlockReqVO.PointInfoDTO pointInfo = block.getPointInfo();
OrderModelDO orderModelDO = OrderModelDO.builder()
.orderId(orderId)
.plateId(plateDO.getId())
.batchId(batchId)
.texture(block.getTexture())
.typographicFace(block.getHoleArrange())
.openDoorType(block.getOpenDoorType())
@@ -828,11 +823,7 @@ public class WebCadOrderImportFactory {
orderModelDO.setGoodsId(block.getGoodsCode());
orderModelDO.setPlateGoodsId(plateDO.getGoodsId());
orderModelDO.setOrganId(organId);
orderModelDOS.add(orderModelDO);
if (!esInsert) {
esInsert = true;
}
return orderModelDO;
}
/**
@@ -1845,7 +1836,7 @@ public class WebCadOrderImportFactory {
private void orderPlateBatchInsertWithinThreshold(List<PlateDO> list, boolean isLast) {
// 达到批量的阈值就做一次插入
if (CollUtil.isNotEmpty(list) && (list.size() >= BATCH_THRESHOLD_NUMBER || isLast)) {
String sql = "INSERT INTO order_plate (id,organ_id,order_id,name,plate_no,type,goods_id,width,height,thickness,split_width,split_height,split_thickness,seal_left,seal_right,seal_up,seal_down,area,texture,hole_face,hole_arrange,unregular_point_count,front_hole_count,back_hole_count,side_hole_count,front_model_count,back_model_count,is_door,open_door_type,offset_x,offset_y,is_arc_across,module_type_id,is_special_shaped,is_sculpt,is_side_sculpt,is_2v,is_side_2v,is_row_hole,is_optimized,is_cutted,filter_type,remark,is_cancel,deleted,custom_plate_no,create_time,update_time,creator,updater, cad_plate_no) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
String sql = "INSERT INTO order_plate (id,organ_id,order_id,name,plate_no,type,goods_id,width,height,thickness,split_width,split_height,split_thickness,seal_left,seal_right,seal_up,seal_down,area,texture,hole_face,hole_arrange,unregular_point_count,front_hole_count,back_hole_count,side_hole_count,front_model_count,back_model_count,is_door,open_door_type,offset_x,offset_y,is_arc_across,module_type_id,is_special_shaped,is_sculpt,is_side_sculpt,is_2v,is_side_2v,is_row_hole,is_optimized,is_cutted,filter_type,remark,is_cancel,deleted,custom_plate_no,create_time,update_time,creator,updater, cad_plate_no, model_data) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int index) throws SQLException {
@@ -1857,17 +1848,17 @@ public class WebCadOrderImportFactory {
ps.setString(5, item.getPlateNo());
ps.setInt(6, item.getType());
ps.setLong(7, item.getGoodsId());
ps.setBigDecimal(8, item.getWidth());
ps.setBigDecimal(9, item.getHeight());
ps.setBigDecimal(10, item.getThickness());
ps.setBigDecimal(11, item.getSplitWidth());
ps.setBigDecimal(12, item.getSplitHeight());
ps.setBigDecimal(13, item.getSplitThickness());
ps.setBigDecimal(14, item.getSealLeft());
ps.setBigDecimal(15, item.getSealRight());
ps.setBigDecimal(16, item.getSealUp());
ps.setBigDecimal(17, item.getSealDown());
ps.setBigDecimal(18, item.getArea());
setSqlDefaultBigDecimal(ps, 8, item.getWidth());
setSqlDefaultBigDecimal(ps, 9, item.getHeight());
setSqlDefaultBigDecimal(ps, 10, item.getThickness());
setSqlDefaultBigDecimal(ps, 11, item.getSplitWidth());
setSqlDefaultBigDecimal(ps, 12, item.getSplitHeight());
setSqlDefaultBigDecimal(ps, 13, item.getSplitThickness());
setSqlDefaultBigDecimal(ps, 14, item.getSealLeft());
setSqlDefaultBigDecimal(ps, 15, item.getSealRight());
setSqlDefaultBigDecimal(ps, 16, item.getSealUp());
setSqlDefaultBigDecimal(ps, 17, item.getSealDown());
setSqlDefaultBigDecimal(ps, 18, item.getArea());
ps.setInt(19, item.getTexture());
ps.setInt(20, item.getHoleFace());
ps.setInt(21, item.getHoleArrange());
@@ -1901,6 +1892,13 @@ public class WebCadOrderImportFactory {
ps.setString(49, item.getCreator());
ps.setString(50, item.getUpdater());
ps.setString(51, item.getCadPlateNo());
String modelData = item.getModelData();
if (StringUtils.isNotEmpty(modelData)) {
ps.setBytes(52, JsonUtils.zip(modelData));
} else {
ps.setNull(52, Types.BLOB);
}
}
@Override
@@ -2293,6 +2291,14 @@ public class WebCadOrderImportFactory {
}
}
private void setSqlDefaultBigDecimal(PreparedStatement ps, int index, BigDecimal value) throws SQLException {
if (value == null) {
ps.setBigDecimal(index, BigDecimal.ZERO);
} else {
ps.setBigDecimal(index, value);
}
}
/**
* 清空所有列表
*/
@@ -2309,7 +2315,6 @@ public class WebCadOrderImportFactory {
plateDOS = null;
orderItemDOS = null;
orderPartsDOS = null;
orderModelDOS = null;
goodsDOS = null;
orderComponentDOS = null;
sealEdgeConfigList = null;