diff --git a/1024shop-manager/1024shop-manager/pom.xml b/1024shop-manager/1024shop-manager/pom.xml
index 789fe59..e7b6864 100644
--- a/1024shop-manager/1024shop-manager/pom.xml
+++ b/1024shop-manager/1024shop-manager/pom.xml
@@ -22,6 +22,7 @@
org.springframework.boot
spring-boot-starter-web
+
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 4d61552..fcf5f6a 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
@@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
+import java.math.RoundingMode;
import java.util.*;
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;
@@ -43,6 +44,9 @@ public class SubController {
//二次计算分组
private static List gltGCalGrp = new CopyOnWriteArrayList<>();
+ //计算结果数据
+ private static List gltGGrpCalRslt = new CopyOnWriteArrayList<>();
+
private static int intOrdNum = 0;
private static int intGrpNum = 0;
@@ -139,6 +143,8 @@ public class SubController {
if (gltGCalGrp.size()>0){
+ SetGroupCalRslt(p);
+
}
logger.info("***二次分组数量*** " + gltGCalGrp.size());
@@ -987,7 +993,7 @@ public class SubController {
GGOF.setIDValue(intGrpNum++);
GGOF.setWid(p.getInfoPmProContProdAttrDO().getOrderWidth());
GGOF.setThk(p.getInfoPmProContProdAttrDO().getOrderThick());
-// GGOF.setLen(p.getInfoPmProContProdAttrDO().getOrderLen());
+ //GGOF.setLen(p.getInfoPmProContProdAttrDO().getOrderLen());
GGOF.setSG_STD(p.getInfoPmProContProdAttrDO().getSgStd());
GGOF.setLtInfoGPreOrder(new ArrayList<>()); // Initialize the list
@@ -999,51 +1005,151 @@ public class SubController {
//endregion
- //region 单线程 调试用
-// if (gltOrder.size() > 0) {
-// for (GPreOrder p : gltOrder) {
-// boolean found = false;
-//
-// // Iterate over gltGrpOrderFir to find a matching GGrpOrderFir
-// for (GGrpOrderFir e : gltGrpOrderFir) {
-// if (e.getWid().equals(p.getInfoPmProContProdAttrDO().getOrderWidth()) &&
-// e.getThk().equals(p.getInfoPmProContProdAttrDO().getOrderThick()) &&
-// e.getLen().equals(p.getInfoPmProContProdAttrDO().getOrderLen()) &&
-// e.getSG_STD().equals(p.getInfoPmProContProdAttrDO().getSgStd())) {
-// if (e.getLtInfoGPreOrder() == null) {
-// e.setLtInfoGPreOrder(new ArrayList<>()); // Ensure the list is initialized
-// }
-// // If a match is found, add the order to LtInfoGPreOrder
-// e.getLtInfoGPreOrder().add(p);
-// found = true;
-// break; // Exit loop once a match is found
-// }
-// }
-//
-// // If no match was found, create a new GGrpOrderFir and add the order
-// if (!found) {
-// GGrpOrderFir GGOF = new GGrpOrderFir();
-// GGOF.setIDValue(intGrpNum++);
-// GGOF.setWid(p.getInfoPmProContProdAttrDO().getOrderWidth());
-// GGOF.setThk(p.getInfoPmProContProdAttrDO().getOrderThick());
-// GGOF.setLen(p.getInfoPmProContProdAttrDO().getOrderLen());
-// GGOF.setSG_STD(p.getInfoPmProContProdAttrDO().getSgStd());
-//
-// GGOF.setLtInfoGPreOrder(new ArrayList<>()); // Initialize the list
-// GGOF.getLtInfoGPreOrder().add(p);
-// gltGrpOrderFir.add(GGOF);
-// }
-// }
-// }
-//endregion
+ //region 单线程 调试用
+ // if (gltOrder.size() > 0) {
+ // for (GPreOrder p : gltOrder) {
+ // boolean found = false;
+ //
+ // // Iterate over gltGrpOrderFir to find a matching GGrpOrderFir
+ // for (GGrpOrderFir e : gltGrpOrderFir) {
+ // if (e.getWid().equals(p.getInfoPmProContProdAttrDO().getOrderWidth()) &&
+ // e.getThk().equals(p.getInfoPmProContProdAttrDO().getOrderThick()) &&
+ // e.getLen().equals(p.getInfoPmProContProdAttrDO().getOrderLen()) &&
+ // e.getSG_STD().equals(p.getInfoPmProContProdAttrDO().getSgStd())) {
+ // if (e.getLtInfoGPreOrder() == null) {
+ // e.setLtInfoGPreOrder(new ArrayList<>()); // Ensure the list is initialized
+ // }
+ // // If a match is found, add the order to LtInfoGPreOrder
+ // e.getLtInfoGPreOrder().add(p);
+ // found = true;
+ // break; // Exit loop once a match is found
+ // }
+ // }
+ //
+ // // If no match was found, create a new GGrpOrderFir and add the order
+ // if (!found) {
+ // GGrpOrderFir GGOF = new GGrpOrderFir();
+ // GGOF.setIDValue(intGrpNum++);
+ // GGOF.setWid(p.getInfoPmProContProdAttrDO().getOrderWidth());
+ // GGOF.setThk(p.getInfoPmProContProdAttrDO().getOrderThick());
+ // GGOF.setLen(p.getInfoPmProContProdAttrDO().getOrderLen());
+ // GGOF.setSG_STD(p.getInfoPmProContProdAttrDO().getSgStd());
+ //
+ // GGOF.setLtInfoGPreOrder(new ArrayList<>()); // Initialize the list
+ // GGOF.getLtInfoGPreOrder().add(p);
+ // gltGrpOrderFir.add(GGOF);
+ // }
+ // }
+ // }
+ //endregion
System.out.println("初始分组数量:" + gltGrpOrderFir.size());
}
- public void SetGroupCalRslt(){
+ public void SetGroupCalRslt(SlabInfoDO SInfo){
+
+ //轧机最大长度
+ int intRollMaxLen = plistPmPdConstBtDO.stream().filter(p->p.getRollLineNo()=="30").findFirst().orElse(null).getHpmMaxPLen().intValue();
+ //轧机最小长度
+ int intRollMinLen = plistPmPdConstBtDO.stream().filter(p->p.getRollLineNo()=="30").findFirst().orElse(null).getHpmMinPLen().intValue();
+
+ gltGCalGrp.parallelStream().forEach(e->{
+ //实例化计算结果数组
+ GGrpCalRslt GGCR=new GGrpCalRslt();
+ //可轧制最大长度
+ int intMaxLen =0;
+ //轧制最大宽度
+ int intWid= e.getWid();
+ //轧制最大厚度
+ BigDecimal intThk = e.getThk();
+ //板坯长度
+ int intSlabLen =SInfo.getSlabActLen().intValue();
+
+ //判断可轧制最大长度 TODO:厚度计算Decimal取整计算,会有误差,后续判断误差值修正计算
+ if ((BigDecimal.valueOf(intSlabLen).divide(intThk.multiply(BigDecimal.valueOf(intWid)), RoundingMode.HALF_UP)).compareTo(BigDecimal.valueOf(intRollMaxLen))>0 ){
+ intMaxLen=intRollMaxLen;
+ }else {
+ intMaxLen=(BigDecimal.valueOf(intSlabLen).divide(intThk.multiply(BigDecimal.valueOf(intWid)), RoundingMode.HALF_UP)).intValue();
+ }
+ //不能小于可轧制的最小长度
+ if (intMaxLen{
+
+ // 测试数据
+ // 生成 values 和 weights 数组
+ long[] values = new long[p.getLtInfoGPreOrder().size()];
+ long[][] weights = new long[0][p.getLtInfoGPreOrder().size()];
+
+ for (int i = 0; i < p.getLtInfoGPreOrder().size(); i++) {
+ values[i] = p.getLtInfoGPreOrder().get(i).getIDValue(); // 从订单中获取 value
+ weights[0][i] = (long)p.getLtInfoGPreOrder().get(i).getInfoPmProContProdAttrDO().getOrderLen()+5; // 从订单中获取 weights
+ }
+
+ //是否展宽
+ //String brnNeed="";
+ //if (p.getCal_Wid()>SInfo.getSlabActWid().intValue()){
+ // brnNeed="1";//展宽
+ //}else {
+ // brnNeed="0";//不展宽
+ //}
+
+ //TODO:轧制方向,轧制模式 没有其他值暂不考虑,之后数据完善后需要考虑
+ PmPlateCutLenBtDO PPCLB = plistPmPlateCutLenBtDO.stream().
+ filter(f -> f.getMscLineNo() == "1030"
+ && f.getBrrNeed() ==((p.getCal_Wid()>SInfo.getSlabActWid().intValue())?"1":"0")
+ && f.getPlateThickFrom().compareTo(p.getCal_Thk())<=0
+ && f.getPlateThickTo().compareTo(p.getCal_Thk())>=0
+ && f.getSlabThickFrom().compareTo(SInfo.getSlabActThk())<=0
+ && f.getSlabThickFrom().compareTo(SInfo.getSlabActThk())>=0
+ && f.getCombinePlateWidthFrom().compareTo(BigDecimal.valueOf(p.getCal_Wid()))<=0
+ && f.getCombinePlateWidthTo().compareTo(BigDecimal.valueOf(p.getCal_Wid()))<=0
+ ).findFirst().orElse(null);
+ //切头
+ int intHead = PPCLB.getHeadCut().intValue();
+ //切尾
+ int intTail=PPCLB.getTailCut().intValue();
+ //去掉切头尾长度
+ int intCap =p.getCal_Len()-intHead-intTail;
+
+ long[] capacities = {intCap};
+
+ //初始化方案
+ Loader.loadNativeLibraries();
+
+ // 调用 solve 方法来解决问题
+ ArrayList ltInt = solve(values, weights, capacities);
+
+ //循环返回的订单插入到实际数组中
+ for (int i = 0; i < ltInt.size(); i++) {
+
+ //实例化实际订单号
+ p.setLtActInfoGPreOrder(new ArrayList<>());
+ int indexi=i;
+ p.getLtActInfoGPreOrder().add(p.getLtInfoGPreOrder().stream().filter(m-> m.getIDValue()== ltInt.get(indexi)).collect(Collectors.toList()).get(0));
+
+ }
+
+ //根据实际订单再计算
+
+
+
+ });
}
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 d97be99..c21becb 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,28 +13,35 @@ public class GCalGrp {
//合同号
private int IDValue;
//宽度
- private BigDecimal Wid;
+ private int Wid;
//厚度
private BigDecimal Thk;
//长度
- private Integer Len;
+ private int Len;
//标准
private String SG_STD;
-
+ //宽度余量
+ private int Wid_Add;
//最大轧制长度
+ private int Max_Roll_Len;
//实际最大轧制长度
+ private int Roll_Len;
//有效长度
+ private int Eff_Len;
//增益
+ private int Ben_Add;
//成材率
+ private int Rate;
//切边
- //轧制厚
- //轧制宽
- //轧制长
+ private int Trimming;
//切头长度
+ private int Head_Len;
//切尾长度
+ private int Tail_Len;
//取样长度
+ private int Smp_Len;
//补长
-
+ private int Rep_Len;
//全部合同信息
private List LtInfoGPreOrder;