From 0de5bcc3041a69b15ffcbdc05142365afefff2fe Mon Sep 17 00:00:00 2001 From: sunhao <479527147@qq.com> Date: Thu, 27 Feb 2025 15:14:35 +0800 Subject: [PATCH] 2025-02-27 --- .../shopmanager/controller/SubController.java | 206 +++++++++++++++++- .../xdclass/shopmanager/model/GCalGrp.java | 10 +- .../xdclass/shopmanager/model/GComBOrder.java | 23 ++ .../shopmanager/model/GGrpOrderFir.java | 17 +- .../xdclass/shopmanager/model/GPreOrder.java | 1 + 5 files changed, 244 insertions(+), 13 deletions(-) create mode 100644 1024shop-manager/1024shop-manager/src/main/java/net/xdclass/shopmanager/model/GComBOrder.java diff --git a/1024shop-manager/1024shop-manager/src/main/java/net/xdclass/shopmanager/controller/SubController.java b/1024shop-manager/1024shop-manager/src/main/java/net/xdclass/shopmanager/controller/SubController.java index a354326..949e297 100644 --- a/1024shop-manager/1024shop-manager/src/main/java/net/xdclass/shopmanager/controller/SubController.java +++ b/1024shop-manager/1024shop-manager/src/main/java/net/xdclass/shopmanager/controller/SubController.java @@ -359,7 +359,6 @@ public class SubController { return JsonData.buildSuccess(); } - public void SaveHisData(SlabInfoDO SInfo) { String strMaxSeq = subService.GetMaxSeq(SInfo.getPono()); @@ -435,8 +434,6 @@ public class SubController { */ public void GetDataInfo(SubParams subParams) { - - logger.info("*****开始获取数据******"); //region ***多线程获取基础数据*** @@ -770,6 +767,186 @@ public class SubController { GCG.setLtInfoGPreOrder(new CopyOnWriteArrayList<>()); e.getLtInfoGPreOrder().forEach(f -> { + try { + //同钢种判断 + if (!SInfo.getStNo().equals(f.getInfoPmContMscTechDO().getStNo())) + { + return; + } + + //产线相同 + if (!SInfo.getMscLineNo().equals(f.getInfoPmContMscTechDO().getMscLineNo())) + { + return; + } + + //化学成分 chemical composition + if (!ChkChemical(SInfo, f)) { + return; + } + } catch (Exception e1) { + log.error("化学成分", e1); + return; + } + try { + //低倍检测 low-power check + if (!ChkLowPower(SInfo, f)) { + return; + } + } catch (Exception e1) { + log.error("低倍检测", e1); + return; + } + + //GCG.setLtInfoGPreOrder(new ArrayList<>()); + GCG.getLtInfoGPreOrder().add(f);//添加订单信息 + }); + + //存在订单,添加可计算分组 + if (GCG.getLtInfoGPreOrder().size() > 0) { + + //GCG.getLtInfoGPreOrder().stream().filter(e->e.) + //最大宽度 + OptionalInt maxWidth = GCG.getLtInfoGPreOrder().stream() + .mapToInt(GPreOrder::getWid) + .max(); + //最大宽度余量 + OptionalInt maxAddWidth = GCG.getLtInfoGPreOrder().stream() + .mapToInt(GPreOrder::getWidthAddv) + .max(); + + //宽展比 保留2位小数 + BigDecimal decWidRate = BigDecimal.valueOf(maxWidth.orElse(0)).divide(SInfo.getSlabActWid(), 2, RoundingMode.HALF_UP); + + //最大厚度公差最小值 + Optional maxTolThkMin = GCG.getLtInfoGPreOrder().stream() + .map(GPreOrder::getThickTolMin) + .reduce(BigDecimal::max); + //厚度追加值 + BigDecimal decThkAdd= BigDecimal.ZERO; + + String strThkTolType; + if (GCG.getLtInfoGPreOrder().get(0).getInfoQdToPoOrderDO().getThkTolType() != null) { + strThkTolType = GCG.getLtInfoGPreOrder().get(0).getInfoQdToPoOrderDO().getThkTolType(); + } else { + strThkTolType = "*"; + } + //存在数据,判断热处理模式 + if (plistPmThickAddvBtDO.stream().anyMatch(p -> p.getMscLineNo().equals(SInfo.getMscLineNo()) + && p.getTolTypeCode().equals(strThkTolType) + && p.getPlateThickFrom().compareTo(GCG.getLtInfoGPreOrder().get(0).getThk()) <= 0 + && p.getPlateThickTo().compareTo(GCG.getLtInfoGPreOrder().get(0).getThk()) >= 0 + && p.getCombinePlateWidthFrom().compareTo(BigDecimal.valueOf(maxWidth.orElse(0) + maxAddWidth.orElse(0))) <= 0 + && p.getCombinePlateWidthTo().compareTo(BigDecimal.valueOf(maxWidth.orElse(0) + maxAddWidth.orElse(0))) >= 0 + )) { + if (GCG.getLtInfoGPreOrder().get(0).getInfoPmContMscTechDO().getWholeHeatTreatmentType().contains("Q")) { + decThkAdd = plistPmThickAddvBtDO.stream().filter(p -> p.getMscLineNo().equals(SInfo.getMscLineNo()) + && p.getTolTypeCode().equals(strThkTolType) + && p.getWholeHeatTreatmentType().equals("Q") + && p.getPlateThickFrom().compareTo(GCG.getLtInfoGPreOrder().get(0).getThk()) <= 0 + && p.getPlateThickTo().compareTo(GCG.getLtInfoGPreOrder().get(0).getThk()) >= 0 + && p.getCombinePlateWidthFrom().compareTo(BigDecimal.valueOf(maxWidth.orElse(0) + maxAddWidth.orElse(0))) <= 0 + && p.getCombinePlateWidthTo().compareTo(BigDecimal.valueOf(maxWidth.orElse(0) + maxAddWidth.orElse(0))) >= 0 + ).collect(Collectors.toList()).get(0).getThickAddv(); + } else { + decThkAdd = plistPmThickAddvBtDO.stream().filter(p -> p.getMscLineNo().equals(SInfo.getMscLineNo()) + && p.getTolTypeCode().equals(strThkTolType) + && p.getWholeHeatTreatmentType().equals("*") + && p.getPlateThickFrom().compareTo(GCG.getLtInfoGPreOrder().get(0).getThk()) <= 0 + && p.getPlateThickTo().compareTo(GCG.getLtInfoGPreOrder().get(0).getThk()) >= 0 + && p.getCombinePlateWidthFrom().compareTo(BigDecimal.valueOf(maxWidth.orElse(0) + maxAddWidth.orElse(0))) <= 0 + && p.getCombinePlateWidthTo().compareTo(BigDecimal.valueOf(maxWidth.orElse(0) + maxAddWidth.orElse(0))) >= 0 + ).collect(Collectors.toList()).get(0).getThickAddv(); + } + + } + + //轧制厚度 厚度+厚度公差下限最大值+厚度追加值 + BigDecimal decThk = e.getThk().add(maxTolThkMin.orElse(BigDecimal.ZERO)).add(decThkAdd); + + //轧制宽度 最大宽度+宽度余量 + int intWid = maxWidth.orElse(0) + maxAddWidth.orElse(0); + + //切边 + int intTrimWid = 0; + + String strWithSideFlag = "C"; + if (GCG.getLtInfoGPreOrder().get(0).getInfoPmProContProdAttrDO().getProdAMark()==null + || GCG.getLtInfoGPreOrder().get(0).getInfoPmProContProdAttrDO().getProdAMark().equals("")) + { + strWithSideFlag="C"; + }else{ + strWithSideFlag=GCG.getLtInfoGPreOrder().get(0).getInfoPmProContProdAttrDO().getProdAMark(); + } + //切边量 + String finalStrWithSideFlag = strWithSideFlag; + if (plistPmPlateTrimBtDO.stream().anyMatch(p -> p.getMscLineNo().equals(SInfo.getMscLineNo()) + && p.getPlateThickFrom().compareTo(decThk) <= 0 + && p.getPlateThickTo().compareTo(decThk) >= 0 + && p.getSmallPlateLenFrom().compareTo(BigDecimal.valueOf(GCG.getLtInfoGPreOrder().get(0).getLen())) <= 0 + && p.getSmallPlateLenTo().compareTo(BigDecimal.valueOf(GCG.getLtInfoGPreOrder().get(0).getLen())) >= 0 + && p.getCombinePlateWidthFrom().compareTo(BigDecimal.valueOf(maxWidth.orElse(0) + maxAddWidth.orElse(0))) <= 0 + && p.getCombinePlateWidthTo().compareTo(BigDecimal.valueOf(maxWidth.orElse(0) + maxAddWidth.orElse(0))) >= 0 + && p.getWidenFrom().compareTo(decWidRate) <= 0 + && p.getWidenTo().compareTo(decWidRate) >= 0 + && p.getWithSideFlag().equals(finalStrWithSideFlag) + )) { + + String finalStrWithSideFlag1 = strWithSideFlag; + intTrimWid = plistPmPlateTrimBtDO.stream().filter(p -> p.getMscLineNo().equals(SInfo.getMscLineNo()) + && p.getPlateThickFrom().compareTo(decThk) <= 0 + && p.getPlateThickTo().compareTo(decThk) >= 0 + && p.getSmallPlateLenFrom().compareTo(BigDecimal.valueOf(GCG.getLtInfoGPreOrder().get(0).getLen())) <= 0 + && p.getSmallPlateLenTo().compareTo(BigDecimal.valueOf(GCG.getLtInfoGPreOrder().get(0).getLen())) >= 0 + && p.getCombinePlateWidthFrom().compareTo(BigDecimal.valueOf(maxWidth.orElse(0) + maxAddWidth.orElse(0))) <= 0 + && p.getCombinePlateWidthTo().compareTo(BigDecimal.valueOf(maxWidth.orElse(0) + maxAddWidth.orElse(0))) >= 0 + && p.getWidenFrom().compareTo(decWidRate) <= 0 + && p.getWidenTo().compareTo(decWidRate) >= 0 + && p.getWithSideFlag().equals(finalStrWithSideFlag1) + ).collect(Collectors.toList()).get(0).getTrimWidth().intValue(); + } + + //轧制宽度= 最大宽度 + 最大宽度余量 + 切边量 + intWid = intWid + intTrimWid; + + //宽度 + GCG.setWid(intWid); + + //厚度 + GCG.setThk(decThk); + + //切边 + GCG.setWid_Add(intTrimWid); + + gltGCalGrp.add(GCG); + } + + }); + + } + + /** + * 二次分组根据板坯性能删选分组-组合 + */ + public void SetGrpConBinDataBySlab(SlabInfoDO SInfo) { + + //1.筛选记录过的结果(化学成分和低倍的判断)压缩比和宽展比验证 + + //2. + + gltGrpOrderFir.parallelStream().forEach(e -> { + + // gltGCalGrp 产生可计算分组 + + //压缩比 Compression ratio + + //宽展比 Wide ratio + + //钢种标准对比 + + GCalGrp GCG = new GCalGrp(); + GCG.setLtInfoGPreOrder(new CopyOnWriteArrayList<>()); + e.getLtInfoGPreOrder().forEach(f -> { try { //同钢种判断 @@ -784,7 +961,7 @@ public class SubController { return; } -// 化学成分 chemical composition + //化学成分 chemical composition if (!ChkChemical(SInfo, f)) { return; } @@ -1569,12 +1746,17 @@ public class SubController { // 检查当前订单是否与已有的分组匹配 if (gltGrpOrderFir.stream().anyMatch(e -> e.getWid().equals(p.getInfoPmProContProdAttrDO().getOrderWidth()) && e.getThk().equals(p.getInfoPmProContProdAttrDO().getOrderThick()) && - e.getSG_STD().equals(p.getInfoPmProContProdAttrDO().getSgStd()))) { + e.getST_NO().equals(p.getInfoPmContMscTechDO().getStNo()) && + e.getTHK_MIN().equals(p.getInfoPmProContProdAttrDO().getThickTolMin()) && + e.getTHK_MAX().equals(p.getInfoPmProContProdAttrDO().getThickTolMax()) + )) { // 如果匹配成功,将订单添加到相应的分组中 - GGrpOrderFir GGOF = gltGrpOrderFir.stream().filter(e -> e.getWid().equals(p.getInfoPmProContProdAttrDO().getOrderWidth()) - && e.getThk().equals(p.getInfoPmProContProdAttrDO().getOrderThick()) - && e.getSG_STD().equals(p.getInfoPmProContProdAttrDO().getSgStd()) + GGrpOrderFir GGOF = gltGrpOrderFir.stream().filter(e -> e.getWid().equals(p.getInfoPmProContProdAttrDO().getOrderWidth()) && + e.getThk().equals(p.getInfoPmProContProdAttrDO().getOrderThick()) && + e.getST_NO().equals(p.getInfoPmContMscTechDO().getStNo()) && + e.getTHK_MIN().equals(p.getInfoPmProContProdAttrDO().getThickTolMin()) && + e.getTHK_MAX().equals(p.getInfoPmProContProdAttrDO().getThickTolMax()) ).findFirst().orElse(null); if (GGOF.getLtInfoGPreOrder() == null) { GGOF.setLtInfoGPreOrder(new ArrayList<>()); // 确保列表已初始化 @@ -1589,7 +1771,13 @@ public class SubController { GGOF.setWid(p.getInfoPmProContProdAttrDO().getOrderWidth()); GGOF.setThk(p.getInfoPmProContProdAttrDO().getOrderThick()); //GGOF.setLen(p.getInfoPmProContProdAttrDO().getOrderLen()); - GGOF.setSG_STD(p.getInfoPmProContProdAttrDO().getSgStd()); + //GGOF.setSG_STD(p.getInfoPmProContProdAttrDO().getSgStd()); + //内部钢种 + GGOF.setST_NO(p.getInfoPmContMscTechDO().getStNo()); + //厚度公差下限 + GGOF.setTHK_MIN(p.getInfoPmProContProdAttrDO().getThickTolMin()); + //厚度公差上限 + GGOF.setTHK_MAX(p.getInfoPmProContProdAttrDO().getThickTolMax()); GGOF.setLtInfoGPreOrder(new ArrayList<>()); // 初始化列表 GGOF.getLtInfoGPreOrder().add(p); diff --git a/1024shop-manager/1024shop-manager/src/main/java/net/xdclass/shopmanager/model/GCalGrp.java b/1024shop-manager/1024shop-manager/src/main/java/net/xdclass/shopmanager/model/GCalGrp.java index aee4377..1836a8f 100644 --- a/1024shop-manager/1024shop-manager/src/main/java/net/xdclass/shopmanager/model/GCalGrp.java +++ b/1024shop-manager/1024shop-manager/src/main/java/net/xdclass/shopmanager/model/GCalGrp.java @@ -13,10 +13,8 @@ public class GCalGrp { //板坯号 private String SlabNo; - //虚拟号 private String VirtualSlabNo; - //合同号 private int IDValue; //宽度 @@ -27,6 +25,8 @@ public class GCalGrp { private int Len; //标准 private String SG_STD; + //内部钢种 + private String ST_NO; //宽度余量 private int Wid_Add; //最大轧制长度 @@ -51,9 +51,13 @@ public class GCalGrp { private int Rep_Len; //全部合同信息 private List LtInfoGPreOrder; - //实际合同信息 private List LtActInfoGPreOrder; + //组合标识 + private int CombinationFlag; + //组合信息 + private List LtInfoCombGPreOrder; + } diff --git a/1024shop-manager/1024shop-manager/src/main/java/net/xdclass/shopmanager/model/GComBOrder.java b/1024shop-manager/1024shop-manager/src/main/java/net/xdclass/shopmanager/model/GComBOrder.java new file mode 100644 index 0000000..a69db2a --- /dev/null +++ b/1024shop-manager/1024shop-manager/src/main/java/net/xdclass/shopmanager/model/GComBOrder.java @@ -0,0 +1,23 @@ +package net.xdclass.shopmanager.model; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.util.List; + +@Data +@EqualsAndHashCode(callSuper = false) +public class GComBOrder { + + //订单X坐标 + private int X_POS_ORD; + + //订单Y坐标 + private int Y_POS_ORD; + + //订单信息 + private GPreOrder infoGPreOrder; + +} diff --git a/1024shop-manager/1024shop-manager/src/main/java/net/xdclass/shopmanager/model/GGrpOrderFir.java b/1024shop-manager/1024shop-manager/src/main/java/net/xdclass/shopmanager/model/GGrpOrderFir.java index 8a42809..653cfe0 100644 --- a/1024shop-manager/1024shop-manager/src/main/java/net/xdclass/shopmanager/model/GGrpOrderFir.java +++ b/1024shop-manager/1024shop-manager/src/main/java/net/xdclass/shopmanager/model/GGrpOrderFir.java @@ -13,17 +13,32 @@ public class GGrpOrderFir { //合同号 private int IDValue; + //宽度 private BigDecimal Wid; + //厚度 private BigDecimal Thk; + //长度 private Integer Len; + //标准 private String SG_STD; + //内部钢种 + private String ST_NO; + + //厚度公差下限 + private BigDecimal THK_MIN; + + //厚度公差上限 + private BigDecimal THK_MAX; + + //轴合同排他标记 + private int AXLE_FLG; + //合同信息 private List LtInfoGPreOrder; - } \ No newline at end of file diff --git a/1024shop-manager/1024shop-manager/src/main/java/net/xdclass/shopmanager/model/GPreOrder.java b/1024shop-manager/1024shop-manager/src/main/java/net/xdclass/shopmanager/model/GPreOrder.java index 5e7a24e..bce330f 100644 --- a/1024shop-manager/1024shop-manager/src/main/java/net/xdclass/shopmanager/model/GPreOrder.java +++ b/1024shop-manager/1024shop-manager/src/main/java/net/xdclass/shopmanager/model/GPreOrder.java @@ -55,4 +55,5 @@ public class GPreOrder { //合同 private QdToPoOrderDO infoQdToPoOrderDO; + }