From c1adf0c20ee9d716d315948224080b75e5debe11 Mon Sep 17 00:00:00 2001 From: sunhao <479527147@qq.com> Date: Thu, 23 Jan 2025 16:43:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=A0=E5=8F=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shopmanager/controller/SubController.java | 125 +++++++++++++++++- .../shopmanager/model/GGrpCalRslt.java | 2 + .../xdclass/shopmanager/model/PmSubHisDO.java | 52 +++++++- .../xdclass/shopmanager/model/PmSubOrdDO.java | 28 +++- .../shopmanager/MyBatisPlusGenerator.java | 2 +- 5 files changed, 193 insertions(+), 16 deletions(-) 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 248a486..d51e0a2 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 @@ -19,6 +19,7 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.util.*; import java.util.concurrent.*; +import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; import static net.xdclass.shopmanager.model.PmSmallPltPosDO.SMALL_PLATE_DIV_NO; @@ -69,6 +70,8 @@ public class SubController { //命令小板表 private static List pmCmdSmallPltDOList = new ArrayList<>(); + // 全局变量,使用 ConcurrentHashMap 和 AtomicInteger 确保线程安全 + private final ConcurrentHashMap counterMap = new ConcurrentHashMap<>(); private static int intOrdNum = 0; @@ -128,6 +131,10 @@ public class SubController { private static List plistPmPdSlabInfoDO; //TODO 需要添加此表信息的查询 //TODO 需要添加 QD_TO_PO_ORDER 的查询记录 private static Date now; + //组板履历表 + private static List plistpmSubHisDO=new ArrayList<>(); + //组板订单详细表 + private static List plistpmSubOrdDO=new ArrayList<>(); // //加热炉板坯最小长度 // private static int gintSlabMinLen; @@ -1406,6 +1413,9 @@ public class SubController { p.setWid_Add(maxAddWidth.orElse(0)); //切边余量 p.setTrimming(intTrimWid); + //切缝 + p.setPlate_Cut_Wid(intPlateCutWidth); + //订单合计长度+切缝 TODO:取样长度是否加入计算,后续再优化 int intSumOrderLen = p.getLtActInfoGPreOrder().stream().mapToInt(GPreOrder::getLen).sum(); int intSumPlateCutWid = p.getLtActInfoGPreOrder().size() * intPlateCutWidth; @@ -1534,13 +1544,14 @@ public class SubController { //选择最优结果 ChosBestRsl(SInfo); - //小于最小入炉尺寸 - if (SInfo.getRemLen().intValue() <2200) - { - - }else{ - SetGroupCalRslt(SInfo); - } + //递归 +// //小于最小入炉尺寸 +// if (SInfo.getRemLen().intValue() <2200) +// { +// +// }else{ +// SetGroupCalRslt(SInfo); +// } } public void ChosBestRsl(SlabInfoDO SInfo) { @@ -1558,8 +1569,108 @@ public class SubController { // 将筛选出的数据添加到 gltSelGGrpCalRslt 中 maxWeightMaxYieldRate.ifPresent(gltSelGGrpCalRslt::add); + if (maxWeightMaxYieldRate.isPresent()) { + + GGrpCalRslt maxRate = maxWeightMaxYieldRate.get(); + + PmSubHisDO pmSubHisDO = new PmSubHisDO(); + pmSubHisDO.setSlabNo(SInfo.getSlabNo()); // 板坯号 + // 生成虚拟板坯号 + String virtualSlabNo = generateVirtualSlabNo(SInfo.getPono()); + pmSubHisDO.setVirtualSlabNo(virtualSlabNo); // 虚拟板坯号 + + // 手动为每个字段赋值 + pmSubHisDO.setSlabThick(maxRate.getVirtualSlab_Thk()); // 厚度 + pmSubHisDO.setSlabWid(BigDecimal.valueOf(maxRate.getVirtualSlab_Wid())); // 宽度 + pmSubHisDO.setSlabLen(BigDecimal.valueOf(maxRate.getVirtualSlab_Len())); // 长度 + pmSubHisDO.setSlabWt(maxRate.getVirtualSlab_Wgt()); // 重量 + pmSubHisDO.setSubYield(maxRate.getRate()); // 替代率 + pmSubHisDO.setRelYield(maxRate.getRate()); // 利用率,假设没有对应字段,设置为默认值 + pmSubHisDO.setSubResult(""); // 处理结果,假设没有对应字段,设置为默认值 + pmSubHisDO.setSubInfo(""); // 处理内容,假设没有对应字段,设置为默认值 + pmSubHisDO.setProcessCode(""); // 进程代码,假设没有对应字段,设置为默认值 + pmSubHisDO.setFormPlateMode(""); // 组板方式,假设没有对应字段,设置为默认值 + pmSubHisDO.setStNo(""); // 内部钢种,假设没有对应字段,设置为默认值 + pmSubHisDO.setSubTime(new Date()); // 替代时间,假设没有对应字段,设置为当前时间 + pmSubHisDO.setCreationDate(new Date()); // 创建时间 + pmSubHisDO.setCreatedBy(BigDecimal.valueOf(781L)); // 创建人ID,假设没有对应字段,设置为默认值 + pmSubHisDO.setLastUpdatedBy(BigDecimal.valueOf(781L)); // 最近更新人ID,假设没有对应字段,设置为默认值 + pmSubHisDO.setLastUpdateDate(new Date()); // 最近更新时间 + pmSubHisDO.setTenantId(BigDecimal.ZERO); // 租户ID,假设没有对应字段,设置为默认值 + pmSubHisDO.setObjectVersionNumber(BigDecimal.ZERO); // 行版本号,用来处理锁,假设没有对应字段,设置为默认值 + pmSubHisDO.setAttribute1(""); // 假设没有对应字段,设置为默认值 + pmSubHisDO.setAttribute2(""); // 假设没有对应字段,设置为默认值 + pmSubHisDO.setAttribute3(""); // 假设没有对应字段,设置为默认值 + pmSubHisDO.setAttribute4(""); // 假设没有对应字段,设置为默认值 + pmSubHisDO.setAttribute5(""); // 假设没有对应字段,设置为默认值 + pmSubHisDO.setRollThk(maxRate.getVirtualSlab_Thk()); // 轧件厚 + pmSubHisDO.setRollWid(BigDecimal.valueOf(maxRate.getVirtualSlab_Wid())); // 轧件宽 + pmSubHisDO.setRollLen(BigDecimal.valueOf(maxRate.getVirtualSlab_Len())); // 轧件长 + pmSubHisDO.setHeadCut(BigDecimal.valueOf(maxRate.getHead_Len())); // 头部切舍量 + pmSubHisDO.setTailCut(BigDecimal.valueOf(maxRate.getTail_Len())); // 尾部切舍量 + pmSubHisDO.setWidCut(BigDecimal.valueOf(maxRate.getTrimming())); // 切边宽度,假设没有对应字段,设置为默认值 + pmSubHisDO.setSlitLen(BigDecimal.valueOf(maxRate.getPlate_Cut_Wid())); // 切缝长度 + pmSubHisDO.setNeedSlabLen(BigDecimal.valueOf(maxRate.getVirtualSlab_Len())); // 必要板坯长度 + pmSubHisDO.setNeedSlabWt(maxRate.getVirtualSlab_Wgt()); // 必要板坯重量 + + plistpmSubHisDO.add(pmSubHisDO); + //子表信息 + // 使用 AtomicInteger 获取索引 + AtomicInteger index = new AtomicInteger(0); + AtomicInteger intX = new AtomicInteger(maxRate.getHead_Len()); + maxRate.getLtActInfoGPreOrder().forEach( + gPreOrder -> { + int currentIndex = index.getAndIncrement(); + + // 实例化 PmSubOrdDO 对象 + PmSubOrdDO pmSubOrdDO = new PmSubOrdDO(); + + // 生成虚拟板坯号 + pmSubOrdDO.setVirtualSlabNo(virtualSlabNo); // 虚拟板坯号 + + // 手动为每个字段赋值 + pmSubOrdDO.setOrderNo(gPreOrder.getOrderNo()); // 合同号 + pmSubOrdDO.setSgSign(gPreOrder.getInfoPmProContProdAttrDO().getSgSign()); // 牌号 + pmSubOrdDO.setStNo(SInfo.getStNo()); // 内部钢种 + pmSubOrdDO.setOrderThick(gPreOrder.getThk()); // 订货厚度 + pmSubOrdDO.setOrderWidth(BigDecimal.valueOf(gPreOrder.getWid())); // 订货宽度 + pmSubOrdDO.setLenAim(BigDecimal.valueOf(gPreOrder.getIntActLen())); // 订货长度 + + pmSubOrdDO.setPosX(BigDecimal.valueOf( intX.intValue())); // X坐标,假设默认为0 + intX.addAndGet(gPreOrder.getLen()+5);//X坐标 + pmSubOrdDO.setPosY(BigDecimal.valueOf(maxRate.getTrimming()+gPreOrder.getWid())); // Y坐标,假设默认为0 + + pmSubOrdDO.setDelivyDate(new Date()); // 交货日期,假设默认为当前时间 + pmSubOrdDO.setAxisOrd(gPreOrder.getOrderNo()); // 轴合同 + pmSubOrdDO.setLackNum(BigDecimal.ZERO); // 欠量,假设默认为0 + pmSubOrdDO.setOverNum(BigDecimal.ZERO); // 超投,假设默认为0 + pmSubOrdDO.setCreationDate(new Date()); // 创建时间 + pmSubOrdDO.setCreatedBy(BigDecimal.valueOf(781L)); // 创建人ID,假设默认为781 + pmSubOrdDO.setLastUpdatedBy(BigDecimal.valueOf(781L)); // 最近更新人ID,假设默认为781 + pmSubOrdDO.setLastUpdateDate(new Date()); // 最近更新时间 + pmSubOrdDO.setTenantId(BigDecimal.ZERO); // 租户ID,假设默认为0 + pmSubOrdDO.setObjectVersionNumber(BigDecimal.ZERO); // 行版本号,假设默认为0 + pmSubOrdDO.setAttribute1(""); // 假设没有对应字段,设置为默认值 + pmSubOrdDO.setAttribute2(""); // 假设没有对应字段,设置为默认值 + pmSubOrdDO.setAttribute3(""); // 假设没有对应字段,设置为默认值 + pmSubOrdDO.setAttribute4(""); // 假设没有对应字段,设置为默认值 + pmSubOrdDO.setAttribute5(""); // 假设没有对应字段,设置为默认值 + pmSubOrdDO.setOrderSeqNo(String.valueOf(currentIndex)); // 合同顺序号,假设使用合同号作为顺序号 + + // 将 PmSubOrdDO 对象添加到列表中 + plistpmSubOrdDO.add(pmSubOrdDO); + } + ); + } + + } + // 生成虚拟板坯号的方法 + private String generateVirtualSlabNo(String pono) { + AtomicInteger counter = counterMap.computeIfAbsent(pono, k -> new AtomicInteger(0)); + int currentCounter = counter.incrementAndGet(); + return pono + "S9" + String.format("%03d", currentCounter); } //设置保存数据 diff --git a/1024shop-manager/1024shop-manager/src/main/java/net/xdclass/shopmanager/model/GGrpCalRslt.java b/1024shop-manager/1024shop-manager/src/main/java/net/xdclass/shopmanager/model/GGrpCalRslt.java index ea83ec0..6869183 100644 --- a/1024shop-manager/1024shop-manager/src/main/java/net/xdclass/shopmanager/model/GGrpCalRslt.java +++ b/1024shop-manager/1024shop-manager/src/main/java/net/xdclass/shopmanager/model/GGrpCalRslt.java @@ -58,6 +58,8 @@ public class GGrpCalRslt { private int Head_Len; //切尾长度 private int Tail_Len; + //切缝 + private int Plate_Cut_Wid; //取样长度 private int Smp_Len; //补长 diff --git a/1024shop-manager/1024shop-manager/src/main/java/net/xdclass/shopmanager/model/PmSubHisDO.java b/1024shop-manager/1024shop-manager/src/main/java/net/xdclass/shopmanager/model/PmSubHisDO.java index 2459d57..140d0b6 100644 --- a/1024shop-manager/1024shop-manager/src/main/java/net/xdclass/shopmanager/model/PmSubHisDO.java +++ b/1024shop-manager/1024shop-manager/src/main/java/net/xdclass/shopmanager/model/PmSubHisDO.java @@ -13,7 +13,7 @@ import lombok.EqualsAndHashCode; *

* * @author SunH - * @since 2024-12-18 + * @since 2025-01-23 */ @Data @EqualsAndHashCode(callSuper = false) @@ -132,5 +132,55 @@ public class PmSubHisDO implements Serializable { private String attribute5; + /** + * 虚拟板坯号 + */ + private String virtualSlabNo; + + /** + * 轧件厚 + */ + private BigDecimal rollThk; + + /** + * 轧件宽 + */ + private BigDecimal rollWid; + + /** + * 轧件长 + */ + private BigDecimal rollLen; + + /** + * 头部切舍量 + */ + private BigDecimal headCut; + + /** + * 尾部切舍量 + */ + private BigDecimal tailCut; + + /** + * 切边宽度 + */ + private BigDecimal widCut; + + /** + * 切缝长度 + */ + private BigDecimal slitLen; + + /** + * 必要板坯长度 + */ + private BigDecimal needSlabLen; + + /** + * 必要板坯重量 + */ + private BigDecimal needSlabWt; + } diff --git a/1024shop-manager/1024shop-manager/src/main/java/net/xdclass/shopmanager/model/PmSubOrdDO.java b/1024shop-manager/1024shop-manager/src/main/java/net/xdclass/shopmanager/model/PmSubOrdDO.java index 597e817..d7c63f0 100644 --- a/1024shop-manager/1024shop-manager/src/main/java/net/xdclass/shopmanager/model/PmSubOrdDO.java +++ b/1024shop-manager/1024shop-manager/src/main/java/net/xdclass/shopmanager/model/PmSubOrdDO.java @@ -13,7 +13,7 @@ import lombok.EqualsAndHashCode; *

* * @author SunH - * @since 2024-12-18 + * @since 2025-01-23 */ @Data @EqualsAndHashCode(callSuper = false) @@ -32,6 +32,11 @@ public class PmSubOrdDO implements Serializable { */ private String orderNo; + /** + * 虚拟板坯号 + */ + private String virtualSlabNo; + /** * 牌号 */ @@ -57,6 +62,16 @@ public class PmSubOrdDO implements Serializable { */ private BigDecimal lenAim; + /** + * X坐标 + */ + private BigDecimal posX; + + /** + * Y坐标 + */ + private BigDecimal posY; + /** * 交货日期 */ @@ -97,14 +112,8 @@ public class PmSubOrdDO implements Serializable { */ private Date lastUpdateDate; - /** - * 租户ID - */ private BigDecimal tenantId; - /** - * 行版本号,用来处理锁 - */ private BigDecimal objectVersionNumber; private String attribute1; @@ -117,5 +126,10 @@ public class PmSubOrdDO implements Serializable { private String attribute5; + /** + * 合同顺序号 + */ + private String orderSeqNo; + } diff --git a/1024shop-manager/1024shop-manager/src/test/java/net/xdclass/shopmanager/MyBatisPlusGenerator.java b/1024shop-manager/1024shop-manager/src/test/java/net/xdclass/shopmanager/MyBatisPlusGenerator.java index ef7765d..1340f2b 100644 --- a/1024shop-manager/1024shop-manager/src/test/java/net/xdclass/shopmanager/MyBatisPlusGenerator.java +++ b/1024shop-manager/1024shop-manager/src/test/java/net/xdclass/shopmanager/MyBatisPlusGenerator.java @@ -96,7 +96,7 @@ public class MyBatisPlusGenerator { //.setInclude("QE_TQ_HEATCHE_STAND_RESULT","QE_TQ_PONO_WAIT_TEST","QE_TQ_SLAB_MACRO_RESULT") - //.setInclude("QD_TO_LINEUP_RESULT_CHE","QD_TO_LINEUP_RESULT_SLABPHY") + //.setInclude("PM_SUB_HIS","PM_SUB_ORD") // 生成的表, 支持多表一起生成,以数组形式填写 //TODO TODO TODO TODO 两个方式,直接写,或者使用命令行输入