diff --git a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/controller/admin/orderImport/webcad/vo/WebCadDataBlockRemarkVO.java b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/controller/admin/orderImport/webcad/vo/WebCadDataBlockRemarkVO.java new file mode 100644 index 000000000..24c5d0509 --- /dev/null +++ b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/controller/admin/orderImport/webcad/vo/WebCadDataBlockRemarkVO.java @@ -0,0 +1,32 @@ +package com.cf.imes.module.plan.controller.admin.orderImport.webcad.vo; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @author Gqr + * @since 2025/4/1 15:04 + */ +@NoArgsConstructor +@Data +public class WebCadDataBlockRemarkVO { + + /** + * 通用备注 + */ + private List remarks; + + /** + * extra备注 + */ + private JSONObject extraObject; + + /** + * drills备注 + */ + private JSONArray drillsObj; +} diff --git a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/controller/admin/orderImport/webcad/vo/WebCadDataBlockReqVO.java b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/controller/admin/orderImport/webcad/vo/WebCadDataBlockReqVO.java index 964de14cb..0a833fd81 100644 --- a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/controller/admin/orderImport/webcad/vo/WebCadDataBlockReqVO.java +++ b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/controller/admin/orderImport/webcad/vo/WebCadDataBlockReqVO.java @@ -56,7 +56,7 @@ public class WebCadDataBlockReqVO { private Double cabinetWidth; private Double cabinetHeight; private BoadrData boardData; - private Object pointInfo; + private PointInfoDTO pointInfo; private Long plateGoodsId; private String goodsId; @@ -66,7 +66,6 @@ public class WebCadDataBlockReqVO { @NoArgsConstructor @Data public static class GroupInfo { - private Integer groupId; private String groupTypeName; private String groupName; private Double width; @@ -435,4 +434,205 @@ public class WebCadDataBlockReqVO { } } } + + + @NoArgsConstructor + @Data + public static class PointInfoDTO { + @JsonProperty("PointDetail") + private List pointDetail; + @JsonProperty("OrgPointDetail") + private List orgPointDetail; + @JsonProperty("HoleDetail") + private List holeDetail; + @JsonProperty("SideHoleDetail") + private List sideHoleDetail; + @JsonProperty("SideModelDetail") + private List sideModelDetail; + @JsonProperty("ModelDetail") + private List modelDetail; + + @NoArgsConstructor + @Data + public static class PointDetailDTO { + @JsonProperty("PointID") + private Integer pointID; + @JsonProperty("PointX") + private Double pointX; + @JsonProperty("PointY") + private Double pointY; + @JsonProperty("Curve") + private Double curve; + @JsonProperty("SealSize") + private Integer sealSize; + @JsonProperty("SealColor") + private String sealColor; + @JsonProperty("ReservedEdge") + private Integer reservedEdge; + } + + @NoArgsConstructor + @Data + public static class OrgPointDetailDTO { + @JsonProperty("PointID") + private Integer pointID; + @JsonProperty("PointX") + private Double pointX; + @JsonProperty("PointY") + private Double pointY; + @JsonProperty("Curve") + private Double curve; + @JsonProperty("SealSize") + private Integer sealSize; + @JsonProperty("SealColor") + private String sealColor; + @JsonProperty("ReservedEdge") + private Integer reservedEdge; + } + + @NoArgsConstructor + @Data + public static class HoleDetailDTO { + @JsonProperty("HoleID") + private Integer holeID; + @JsonProperty("HoleType") + private Integer holeType; + @JsonProperty("Face") + private Integer face; + @JsonProperty("PointX") + private Double pointX; + @JsonProperty("PointY") + private Double pointY; + @JsonProperty("PointZ") + private Integer pointZ; + @JsonProperty("Radius") + private Double radius; + @JsonProperty("Depth") + private Double depth; + @JsonProperty("EndPoint") + private String endPoint; + @JsonProperty("Angle") + private Integer angle; + } + + @NoArgsConstructor + @Data + public static class SideHoleDetailDTO { + @JsonProperty("HoleID") + private Integer holeID; + @JsonProperty("HoleType") + private Integer holeType; + @JsonProperty("Face") + private Integer face; + @JsonProperty("PointX") + private Double pointX; + @JsonProperty("PointY") + private Double pointY; + @JsonProperty("PointZ") + private Double pointZ; + @JsonProperty("Radius") + private Double radius; + @JsonProperty("Depth") + private Double depth; + @JsonProperty("EndPoint") + private String endPoint; + @JsonProperty("PointX2") + private Double pointX2; + @JsonProperty("PointY2") + private Double pointY2; + } + + @NoArgsConstructor + @Data + public static class ModelDetailDTO { + @JsonProperty("ModelID") + private Integer modelID; + @JsonProperty("LineID") + private Integer lineID; + @JsonProperty("Face") + private Integer face; + @JsonProperty("KnifeName") + private String knifeName; + @JsonProperty("KnifeRadius") + private Double knifeRadius; + @JsonProperty("Depth") + private Double depth; + @JsonProperty("PointList") + private List pointList; + @JsonProperty("OriginModeling") + private OriginModelingDTO originModeling; + @JsonProperty("ModelType") + private Integer modelType; + @JsonProperty("OffSetList") + private List offSetList; + + + @NoArgsConstructor + @Data + public static class OriginModelingDTO { + @JsonProperty("outline") + private OutlineDTO outline; + @JsonProperty("holes") + private List holes; + @JsonProperty("addLen") + private Double addLen; + @JsonProperty("addWidth") + private Double addWidth; + @JsonProperty("addDepth") + private Double addDepth; + + @NoArgsConstructor + @Data + public static class OutlineDTO { + @JsonProperty("pts") + private List pts; + @JsonProperty("buls") + private List buls; + + @NoArgsConstructor + @Data + public static class PtsDTO { + @JsonProperty("x") + private Double x; + @JsonProperty("y") + private Double y; + } + } + } + + @NoArgsConstructor + @Data + public static class PointListDTO { + @JsonProperty("LineID") + private Integer lineID; + @JsonProperty("PointID") + private Integer pointID; + @JsonProperty("PointX") + private Double pointX; + @JsonProperty("PointY") + private Double pointY; + @JsonProperty("Depth") + private Double depth; + @JsonProperty("Curve") + private Double curve; + @JsonProperty("Radius") + private Double radius; + } + + @NoArgsConstructor + @Data + public static class OffSetListDTO { + @JsonProperty("Value") + private Double value; + @JsonProperty("Deep") + private Double deep; + @JsonProperty("Angle") + private Double angle; + @JsonProperty("Name") + private String name; + @JsonProperty("Radius") + private Double radius; + } + } + } } diff --git a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/dal/dataobject/orderBody/OrderBodyDO.java b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/dal/dataobject/orderBody/OrderBodyDO.java index 281f43b2c..1a616682b 100644 --- a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/dal/dataobject/orderBody/OrderBodyDO.java +++ b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/dal/dataobject/orderBody/OrderBodyDO.java @@ -90,4 +90,10 @@ public class OrderBodyDO extends BaseDO { * 是否删除 */ private Boolean deleted; + + /** + * 成倍拆单的房间柜体名,如:房间1柜体1,成倍的时候会是:房间11柜体11、房间12柜体12 + */ + @TableField(exist = false) + private String multiRoomBodyName; } \ No newline at end of file diff --git a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/dal/elasticsearch/ModelDetail.java b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/dal/elasticsearch/ModelDetail.java index eceb2b617..8bbaa3bb9 100644 --- a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/dal/elasticsearch/ModelDetail.java +++ b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/dal/elasticsearch/ModelDetail.java @@ -19,7 +19,7 @@ import java.util.List; public class ModelDetail { @Schema(description = "造型ID") - private Integer id; + private Integer modelID; @Schema(description = "刀路ID") private Integer lineID; diff --git a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/factory/DefaultXmlOrderImportFactory.java b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/factory/DefaultXmlOrderImportFactory.java index c2ca81406..c3587e2c6 100644 --- a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/factory/DefaultXmlOrderImportFactory.java +++ b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/factory/DefaultXmlOrderImportFactory.java @@ -1050,7 +1050,7 @@ public class DefaultXmlOrderImportFactory { subIDs = Arrays.stream(grooveXmlVO.getSubIDs().split(",")).map(String::valueOf).toArray(String[]::new); } return ModelDetail.builder() - .id(Integer.valueOf(grooveXmlVO.getId())) + .modelID(Integer.valueOf(grooveXmlVO.getId())) .subIDs(subIDs) .type(grooveXmlVO.getType()) .grooveFace(grooveXmlVO.getFace()) diff --git a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/factory/WebCadOrderImportFactory.java b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/factory/WebCadOrderImportFactory.java index 183edcbc1..64db2122e 100644 --- a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/factory/WebCadOrderImportFactory.java +++ b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/factory/WebCadOrderImportFactory.java @@ -21,6 +21,7 @@ import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; import com.cf.imes.module.executor.enums.DataTypeEnum; import com.cf.imes.module.executor.enums.OrderItemTypeEnum; import com.cf.imes.module.executor.enums.OrderStatusEnum; +import com.cf.imes.module.plan.controller.admin.orderImport.webcad.vo.WebCadDataBlockRemarkVO; import com.cf.imes.module.plan.controller.admin.orderImport.webcad.vo.WebCadDataBlockReqVO; import com.cf.imes.module.plan.controller.admin.orderImport.webcad.vo.WebCadDataDoubleRoomTreeReqVO; import com.cf.imes.module.plan.controller.admin.orderImport.webcad.vo.WebCadDataMaterialReqVO; @@ -38,6 +39,14 @@ import com.cf.imes.module.plan.dal.dataobject.ordermodel.OrderModelDO; import com.cf.imes.module.plan.dal.dataobject.plate.PlateDO; import com.cf.imes.module.plan.dal.dataobject.plate.PlateGoodDO; import com.cf.imes.module.plan.dal.dataobject.rawgoods.RawGoodsDO; +import com.cf.imes.module.plan.dal.elasticsearch.HoleDetail; +import com.cf.imes.module.plan.dal.elasticsearch.IContourData; +import com.cf.imes.module.plan.dal.elasticsearch.IOriginModelingData; +import com.cf.imes.module.plan.dal.elasticsearch.ModelDetail; +import com.cf.imes.module.plan.dal.elasticsearch.OffSetList; +import com.cf.imes.module.plan.dal.elasticsearch.Point; +import com.cf.imes.module.plan.dal.elasticsearch.PointDetail; +import com.cf.imes.module.plan.dal.elasticsearch.PointList; import com.cf.imes.module.plan.dal.mysql.goods.GoodsMapper; import com.cf.imes.module.plan.dal.mysql.order.OrderMapper; import com.cf.imes.module.plan.dal.mysql.orderBody.OrderBodyMapper; @@ -151,8 +160,8 @@ public class WebCadOrderImportFactory { // 柜体缓存 private Map bodyMap = new HashMap<>(); - // 加工组map - private Map groupMap = new HashMap<>(); + // 房间名+柜体名+加工组名 + private Map orderGroupMap = new HashMap<>(); private List plateDOS = ListUtils.newArrayListWithExpectedSize(BATCH_THRESHOLD_NUMBER); private List orderItemDOS = ListUtils.newArrayListWithExpectedSize(BATCH_THRESHOLD_NUMBER); @@ -434,7 +443,6 @@ public class WebCadOrderImportFactory { // brId 板件序号获取板件 WebCadDataBlockReqVO webCadDataBlockReqVO = blockReqVOS.get(brId - 1); WebCadDataBlockReqVO.GroupInfo groupInfo = new WebCadDataBlockReqVO.GroupInfo(); - groupInfo.setGroupId(project.getGroupID()); groupInfo.setGroupTypeName(groupTypeName); groupInfo.setGroupName(project.getProjName()); groupInfo.setWidth(project.getBoxSize().getWidth()); @@ -459,7 +467,6 @@ public class WebCadOrderImportFactory { // objId 配件序号获取配件 WebCadDataPartsReqVO.BlockObjectListDTO part = partsReqVO.getBlockObjectList().get(objId - 1); WebCadDataBlockReqVO.GroupInfo groupInfo = new WebCadDataBlockReqVO.GroupInfo(); - groupInfo.setGroupId(project.getGroupID()); groupInfo.setGroupTypeName(groupTypeName); groupInfo.setGroupName(project.getProjName()); groupInfo.setWidth(project.getBoxSize().getWidth()); @@ -545,7 +552,9 @@ public class WebCadOrderImportFactory { orderBodyDO.setUpdateTime(now); // 缓存成倍的柜体信息 - bodyMap.put(roomBodyKey + i, orderBodyDO); + String multiRoomBodyName = roomBodyKey + i; + orderBodyDO.setMultiRoomBodyName(multiRoomBodyName); + bodyMap.put(multiRoomBodyName, orderBodyDO); listBody.forEach(block -> { // 创建板件相关数据:order_plate、order_item、es.orderModels @@ -620,6 +629,16 @@ public class WebCadOrderImportFactory { long plateNo = idWorker.nextId(); long obtainingTime = idWorker.obtainingTime(); + // 从info.remarks中获取备注相关 + WebCadDataBlockRemarkVO plateRemark = getPlateRemark(blockInfo); + List remarks = plateRemark.getRemarks(); + StringBuffer remark = new StringBuffer(); + if (CollUtil.isNotEmpty(remarks)) { + for (String remarkStr : remarks) { + remark.append(remarkStr).append(","); + } + remark.deleteCharAt(remark.length() - 1); + } String splitHeight = blockInfo.getSpliteHeight(); String spliteWidth = blockInfo.getSpliteWidth(); @@ -665,7 +684,7 @@ public class WebCadOrderImportFactory { .sealRight(BigDecimal.ZERO) .sealUp(BigDecimal.ZERO) .sealDown(BigDecimal.ZERO) - .remark(getPlateRemark(blockInfo)) + .remark(remark.toString()) .deleted(false) .organId(organId) .build(); @@ -682,18 +701,61 @@ public class WebCadOrderImportFactory { // 获取封边厚度 calculateSealThickness(plateDO, boardData.getSealing()); - //批量保存板件 plateDOS.add(plateDO); orderInfoBatchInsertWithinThreshold(plateMapper, plateDOS, false); + // 创建es造型数据 + createModel(plateDO, block, blockInfo, plateRemark); + // 批量插入造型数据 + orderModelsBatchInsertWithinThreshold(false); + + // 遍历加工组信息,生成对应的加工组和item + analyzeBlockProcessGroup(orderBodyDO, block, blockInfo, plateId); + } + + /** + * 创建板件造型es数据 + */ + private void createModel(PlateDO plateDO, WebCadDataBlockReqVO block, WebCadDataBlockReqVO.InfoDTO blockInfo, WebCadDataBlockRemarkVO plateRemark) { + // 点阵信息 + WebCadDataBlockReqVO.PointInfoDTO pointInfo = block.getPointInfo(); + OrderModelDO orderModelDO = OrderModelDO.builder() .orderId(orderId) - .plateId(plateId) + .plateId(plateDO.getId()) .batchId(batchId) - .boardData(JSON.toJSONString(boardData)) - .pointInfo(JSON.toJSONString(block.getPointInfo())) + .texture(block.getTexture()) + .typographicFace(block.getHoleArrange()) + .openDoorType(block.getOpenDoorType()) + .splitLength(BigDecimal.valueOf(blockInfo.getKaiLiaoHeight())) + .splitWidth(BigDecimal.valueOf(blockInfo.getKaiLiaoWidth())) + .offsetX(BigDecimal.valueOf(block.getOffsetX())) + .offsetY(BigDecimal.valueOf(block.getOffsetY())) + .pointDetail(getPointDetail(pointInfo.getPointDetail())) + .rawPointDetail(getRawPointDetail(pointInfo.getOrgPointDetail())) + .holeDetail(getHoleDetail(pointInfo.getHoleDetail())) + .sideHoleDetail(getSideHoleDetail(pointInfo.getSideHoleDetail())) + .contourDetail(getContourDetail(pointInfo.getModelDetail())) + .sideRemark(getSideRemark(plateRemark.getRemarks())) .build(); + + // 处理备注信息 + JSONObject plateExtraRemark = new JSONObject(); + JSONObject extraObject = plateRemark.getExtraObject(); + if (ObjectUtil.isNotNull(extraObject)) { + orderModelDO.setBoardType(extraObject.getString("boardType")); + orderModelDO.setHas2DModel(extraObject.getBoolean("has2DModel")); + orderModelDO.setHas3DModel(extraObject.getBoolean("has3DModel")); + plateExtraRemark.put("extra", extraObject); + } + + JSONArray drillsObj = plateRemark.getDrillsObj(); + if (ObjectUtil.isNotNull(drillsObj)) { + plateExtraRemark.put("drills", drillsObj); + } + orderModelDO.setPlateExtraRemark(plateExtraRemark); + orderModelDO.setGoodsId(block.getGoodsId()); orderModelDO.setPlateGoodsId(plateDO.getGoodsId()); orderModelDO.setOrganId(organId); @@ -703,34 +765,268 @@ public class WebCadOrderImportFactory { if (!esInsert) { esInsert = true; } - // 批量插入造型数据 - orderModelsBatchInsertWithinThreshold(false); - - // 遍历加工组信息,生成对应的加工组和item - analyzeBlockProcessGroup(orderBodyDO, block, blockInfo, plateId); } + /** + * 获取生产封边备注 + * + * @param remarks + * @return + */ + private Map getSideRemark(List remarks) { + if (CollUtil.isNotEmpty(remarks)) { + Map sideRemarkMap = new HashMap<>(); + for (int i = 1; i <= remarks.size(); i++) { + sideRemarkMap.put("Remark" + i, remarks.get(i - 1)); + } + return sideRemarkMap; + } + return null; + } + + /** + * 获取板件点明细 + * + * @param cadPointDetailList + * @return + */ + private List getPointDetail(List cadPointDetailList) { + List pointDetails = new ArrayList<>(); + if (CollUtil.isNotEmpty(cadPointDetailList)) { + for (WebCadDataBlockReqVO.PointInfoDTO.PointDetailDTO cadPointDetail : cadPointDetailList) { + PointDetail pointDetail = new PointDetail(); + pointDetail.setPointX(cadPointDetail.getPointX()); + pointDetail.setPointY(cadPointDetail.getPointY()); + pointDetail.setCurve(cadPointDetail.getCurve()); + pointDetails.add(pointDetail); + } + } + return pointDetails; + } + + /** + * 获取板件原始点明细 + * + * @param orgPointDetail + * @return + */ + private List getRawPointDetail(List orgPointDetail) { + List pointDetails = new ArrayList<>(); + if (CollUtil.isNotEmpty(orgPointDetail)) { + for (WebCadDataBlockReqVO.PointInfoDTO.OrgPointDetailDTO cadPointDetail : orgPointDetail) { + PointDetail pointDetail = new PointDetail(); + pointDetail.setPointX(cadPointDetail.getPointX()); + pointDetail.setPointY(cadPointDetail.getPointY()); + pointDetail.setCurve(cadPointDetail.getCurve()); + pointDetail.setSealSize(BigDecimal.valueOf(cadPointDetail.getSealSize())); + pointDetails.add(pointDetail); + } + } + return pointDetails; + } + + + /** + * 获取板件孔明细列表 + * + * @param cadHoleDetailList + * @return + */ + private List getHoleDetail(List cadHoleDetailList) { + List holeDetails = new ArrayList<>(); + if (CollUtil.isNotEmpty(cadHoleDetailList)) { + for (WebCadDataBlockReqVO.PointInfoDTO.HoleDetailDTO cadHoleDetail : cadHoleDetailList) { + HoleDetail holeDetail = new HoleDetail(); + holeDetail.setId(String.valueOf(cadHoleDetail.getHoleID())); + holeDetail.setFaceType(cadHoleDetail.getFace()); + holeDetail.setHoleType(cadHoleDetail.getHoleType()); + holeDetail.setStartX(cadHoleDetail.getPointX()); + holeDetail.setStartY(cadHoleDetail.getPointY()); + holeDetail.setRadius(cadHoleDetail.getRadius()); + holeDetail.setDepth(cadHoleDetail.getDepth()); + holeDetails.add(holeDetail); + } + } + return holeDetails; + } + + /** + * 获取侧面孔明细 + * + * @param cadSideHoleDetailList + * @return + */ + private List getSideHoleDetail(List cadSideHoleDetailList) { + List holeDetails = new ArrayList<>(); + if (CollUtil.isNotEmpty(cadSideHoleDetailList)) { + for (WebCadDataBlockReqVO.PointInfoDTO.SideHoleDetailDTO cadHoleDetail : cadSideHoleDetailList) { + HoleDetail holeDetail = new HoleDetail(); + holeDetail.setFaceType(cadHoleDetail.getFace()); + holeDetail.setStartX(cadHoleDetail.getPointX()); + holeDetail.setStartY(cadHoleDetail.getPointY()); + holeDetail.setStartZ(cadHoleDetail.getPointZ()); + holeDetail.setRadius(cadHoleDetail.getRadius()); + holeDetail.setEndX(cadHoleDetail.getPointX2()); + holeDetail.setEndY(cadHoleDetail.getPointY2()); + holeDetail.setEndZ(cadHoleDetail.getPointZ()); + holeDetail.setDepth(cadHoleDetail.getDepth()); + holeDetails.add(holeDetail); + } + } + return holeDetails; + } + + /** + * 获取造型明细 + * + * @param cadModelDetailList + * @return + */ + private List getContourDetail(List cadModelDetailList) { + List modelDetails = new ArrayList<>(); + if (CollUtil.isNotEmpty(cadModelDetailList)) { + for (WebCadDataBlockReqVO.PointInfoDTO.ModelDetailDTO cadModelDetail : cadModelDetailList) { + ModelDetail modelDetail = new ModelDetail(); + modelDetail.setModelID(cadModelDetail.getModelID()); + modelDetail.setLineID(cadModelDetail.getLineID()); + modelDetail.setFaceType(cadModelDetail.getFace()); + modelDetail.setDepth(cadModelDetail.getDepth()); + modelDetail.setKnifeName(cadModelDetail.getKnifeName()); + modelDetail.setKnifeRadius(cadModelDetail.getKnifeRadius()); + + WebCadDataBlockReqVO.PointInfoDTO.ModelDetailDTO.OriginModelingDTO cadOriginModeling = cadModelDetail.getOriginModeling(); + if (ObjectUtil.isNotNull(cadOriginModeling)) { + IOriginModelingData originModelingData = new IOriginModelingData(); + originModelingData.setAddLen(cadOriginModeling.getAddLen()); + originModelingData.setAddWidth(cadOriginModeling.getAddWidth()); + originModelingData.setAddDepth(cadOriginModeling.getAddDepth()); + + WebCadDataBlockReqVO.PointInfoDTO.ModelDetailDTO.OriginModelingDTO.OutlineDTO cadOutline = cadOriginModeling.getOutline(); + originModelingData.setOutline(getOriginModelingOutlineList(cadOutline)); + + modelDetail.setOriginModeling(originModelingData); + } + List pointList = cadModelDetail.getPointList(); + modelDetail.setPointList(getModelDetailPointList(pointList)); + + List offSetList = cadModelDetail.getOffSetList(); + modelDetail.setOffSetList(getModelDetailOffsetList(offSetList)); + + modelDetails.add(modelDetail); + } + } + return modelDetails; + } + + /** + * 获取造型偏移量列表 + * + * @param cadOffSetList + * @return + */ + private List getModelDetailOffsetList(List cadOffSetList) { + List offSetLists = new ArrayList<>(); + if (CollUtil.isNotEmpty(cadOffSetList)) { + for (WebCadDataBlockReqVO.PointInfoDTO.ModelDetailDTO.OffSetListDTO cadOffset : cadOffSetList) { + OffSetList offSet = new OffSetList(); + offSet.setValue(cadOffset.getValue()); + offSet.setDepth(cadOffset.getDeep()); + offSet.setAngle(cadOffset.getAngle()); + offSet.setName(cadOffset.getName()); + offSet.setRadius(cadOffset.getRadius()); + + offSetLists.add(offSet); + } + } + return offSetLists; + } + + /** + * 获取造型点列表 + * + * @param cadPointList + * @return + */ + private List getModelDetailPointList(List cadPointList) { + List pointList = new ArrayList<>(); + if (CollUtil.isNotEmpty(cadPointList)) { + for (WebCadDataBlockReqVO.PointInfoDTO.ModelDetailDTO.PointListDTO cadPoint : cadPointList) { + PointList point = new PointList(); + point.setPointX(cadPoint.getPointX()); + point.setPointY(cadPoint.getPointY()); + point.setCurve(cadPoint.getCurve()); + point.setDepth(cadPoint.getDepth()); + point.setRadius(cadPoint.getRadius()); + + pointList.add(point); + } + } + return pointList; + } + + /** + * 获取造型轮廓 + * + * @param cadOutline + * @return + */ + private List getOriginModelingOutlineList(WebCadDataBlockReqVO.PointInfoDTO.ModelDetailDTO.OriginModelingDTO.OutlineDTO cadOutline) { + List outlineList = new ArrayList<>(); + if (ObjectUtil.isNull(cadOutline)) { + return outlineList; + } + + List buls = cadOutline.getBuls(); + List pts = cadOutline.getPts(); + if (CollUtil.isNotEmpty(pts) && CollUtil.isNotEmpty(buls)) { + for (int i = 0; i < pts.size(); i++) { + IContourData iContourData = new IContourData(); + Point point = new Point(); + point.setX(pts.get(i).getX()); + point.setY(pts.get(i).getY()); + iContourData.setPts(point); + iContourData.setBuls(buls.get(i)); + outlineList.add(iContourData); + } + } + return outlineList; + } + + /** * 获取板件备注 * * @param infoDTO * @return */ - private String getPlateRemark(WebCadDataBlockReqVO.InfoDTO infoDTO) { + private WebCadDataBlockRemarkVO getPlateRemark(WebCadDataBlockReqVO.InfoDTO infoDTO) { + WebCadDataBlockRemarkVO blockRemark = new WebCadDataBlockRemarkVO(); if (ObjectUtil.isNull(infoDTO)) { - return EMPTY_STRING; + return blockRemark; } List> remarks = infoDTO.getRemarks(); if (CollUtil.isEmpty(remarks)) { - return EMPTY_STRING; + return blockRemark; } - return remarks.stream() - .filter(remark -> CollUtil.isNotEmpty(remark) && remark.size() == 2) - .filter(remark -> !"#extra".equals(remark.get(0)) && !"#drills".equals(remark.get(0))) - .map(remark -> remark.get(1)) - .collect(Collectors.joining(",")); + List blockRemarkList = new ArrayList<>(); + for (List remark : remarks) { + if (CollUtil.isNotEmpty(remark) && remark.size() == 2) { + String key = remark.get(0); + String value = remark.get(1); + + if ("#extra".equals(key)) { + blockRemark.setExtraObject(JSON.parseObject(value)); + } else if ("#drills".equals(key)) { + blockRemark.setDrillsObj(JSON.parseArray(value)); + } else { + blockRemarkList.add(value); + } + } + } + blockRemark.setRemarks(blockRemarkList); + return blockRemark; } /** @@ -771,9 +1067,9 @@ public class WebCadOrderImportFactory { if (CollUtil.isNotEmpty(groupInfos)) { // 加工组缓存存在,一个加工组一个orderGroup+orderItem for (WebCadDataBlockReqVO.GroupInfo groupInfo : groupInfos) { - Integer cadGroupId = groupInfo.getGroupId(); - OrderGroupDO orderGroupDO = groupMap.get(cadGroupId); - // cadGroupId存在累加板件和异形数量,不存在新增groupDO和orderGroupMap缓存 + String groupMapKey = orderBodyDO.getMultiRoomBodyName() + groupInfo.getGroupName(); + OrderGroupDO orderGroupDO = orderGroupMap.get(groupMapKey); + // 房间+柜体+加工组名称存在累加板件和异形数量,不存在新增groupDO和orderGroupMap缓存 if (ObjectUtil.isNull(orderGroupDO)) { orderGroupDO = OrderGroupDO .builder() @@ -799,7 +1095,7 @@ public class WebCadOrderImportFactory { orderGroupDO.setCreateTime(now); orderGroupDO.setUpdateTime(now); - groupMap.put(cadGroupId, orderGroupDO); + orderGroupMap.put(groupMapKey, orderGroupDO); orderGroupDOS.add(orderGroupDO); } else { orderGroupDO.setPlateNum(orderGroupDO.getPlateNum() + 1); @@ -955,9 +1251,9 @@ public class WebCadOrderImportFactory { // 带加工组的配件增加item只记录配件id和数量 partNum += part.getNum(); for (WebCadDataBlockReqVO.GroupInfo groupInfo : groupInfos) { - Integer cadGroupId = groupInfo.getGroupId(); - OrderGroupDO orderGroupDO = groupMap.get(cadGroupId); - // cadGroupId存在累加板件和异形数量,不存在新增groupDO和orderGroupMap缓存 + String groupMapKey = orderBodyDO.getMultiRoomBodyName() + groupInfo.getGroupName(); + OrderGroupDO orderGroupDO = orderGroupMap.get(groupMapKey); + // 房间+柜体+加工组名称存在累加配件item,不存在新增groupDO和orderGroupMap缓存 if (ObjectUtil.isNull(orderGroupDO)) { orderGroupDO = OrderGroupDO .builder() @@ -983,7 +1279,7 @@ public class WebCadOrderImportFactory { orderGroupDO.setCreateTime(now); orderGroupDO.setUpdateTime(now); - groupMap.put(cadGroupId, orderGroupDO); + orderGroupMap.put(groupMapKey, orderGroupDO); orderGroupDOS.add(orderGroupDO); } @@ -1080,6 +1376,8 @@ public class WebCadOrderImportFactory { material = partGroupData.getMaterial(); // 封边条宽度从系统配置中获取宽度对应 sealEdgeWidthMatch(part); + // 规格可能修改,再获取一次 + spec = part.getSpec(); } String type = changePartType(partType, part.getIsComposite()); @@ -1161,54 +1459,45 @@ public class WebCadOrderImportFactory { * @param part */ private void sealEdgeWidthMatch(WebCadDataPartsReqVO.BlockObjectListDTO part) { - // 从spec中解析宽度、厚度 - String spec = part.getSpec(); - Double widthFromSpec = getWidthFromSpec(spec); - part.setThickness(getThicknessFromSpec(spec)); - if (ObjectUtil.isNull(widthFromSpec)) { - return; - } - for (SystemConfigSealEdgeRespDTO configSealEdgeRespDTO : sealEdgeConfigList) { - // 宽度处于配置范围,宽取值作为最终配件宽度 - if (widthFromSpec >= configSealEdgeRespDTO.getWidthMin() && widthFromSpec <= configSealEdgeRespDTO.getWidthMax()) { - part.setWidth(String.valueOf(configSealEdgeRespDTO.getWidthValue())); - break; + // 获取宽度、厚度 + WebCadDataPartsReqVO.BlockObjectListDTO.GroupDataDTO partGroupData = part.getGroupData(); + + if (ObjectUtil.isNotNull(partGroupData)) { + part.setThickness(String.valueOf(partGroupData.getSize())); + Integer thickness = partGroupData.getThickness(); + + // 是否匹配上系统配置的封边条宽度配置,对应上了需要同步修改spec的中的内容 + boolean sealEdgeConfigMatch = false; + String matchWidth = null; + for (SystemConfigSealEdgeRespDTO configSealEdgeRespDTO : sealEdgeConfigList) { + // 宽度处于配置范围,宽取值作为最终配件宽度 + if (thickness >= configSealEdgeRespDTO.getWidthMin() && thickness <= configSealEdgeRespDTO.getWidthMax()) { + matchWidth = String.valueOf(configSealEdgeRespDTO.getWidthValue()); + part.setWidth(matchWidth); + sealEdgeConfigMatch = true; + break; + } + } + if (sealEdgeConfigMatch) { + part.setSpec(modifySealEdgeSpec(part.getSpec(), matchWidth)); } } } /** - * 从规格中获取宽度,例:1mm-18mm + * @param spec + * @param width + * @return */ - private Double getWidthFromSpec(String spec) { + private String modifySealEdgeSpec(String spec, String width) { if (StringUtils.isNotEmpty(spec)) { String[] specSplit = spec.split("-"); - if (specSplit.length >= 2) { - String widthInSpec = specSplit[1]; - String[] widthSplit = widthInSpec.split("mm"); - if (widthSplit.length == 1) { - return NumberUtil.parseDouble(widthSplit[0]); - } + // 例:9mm-18mm-经典檀木 + if (specSplit.length == 3) { + return specSplit[0] + "-" + width + "mm-" + specSplit[2]; } } - return null; - } - - /** - * 从规格中获取厚度,例:1mm-18mm - */ - private String getThicknessFromSpec(String spec) { - if (StringUtils.isNotEmpty(spec)) { - String[] specSplit = spec.split("-"); - if (specSplit.length >= 2) { - String widthInSpec = specSplit[0]; - String[] widthSplit = widthInSpec.split("mm"); - if (widthSplit.length == 1) { - return widthSplit[0]; - } - } - } - return null; + return spec; } /** @@ -1397,7 +1686,7 @@ public class WebCadOrderImportFactory { private void clearAll() { orderPartsDOS.clear(); orderGroupDOS.clear(); - groupMap.clear(); + orderGroupMap.clear(); plateDOS.clear(); orderItemDOS.clear(); orderModelDOS.clear();