|
|
|
@ -47,6 +47,9 @@ public class SubController {
|
|
|
|
|
//计算结果数据
|
|
|
|
|
private static List<GGrpCalRslt> gltGGrpCalRslt = Collections.synchronizedList(new ArrayList<>());
|
|
|
|
|
|
|
|
|
|
//选择结果数据
|
|
|
|
|
private static List<GGrpCalRslt> gltSelGGrpCalRslt = Collections.synchronizedList(new ArrayList<>());
|
|
|
|
|
|
|
|
|
|
//组板板坯表
|
|
|
|
|
private static List<PmPdSlabDO> pmPdSlabDOList = new ArrayList<>();
|
|
|
|
|
//大板粗切位置表
|
|
|
|
@ -156,7 +159,7 @@ public class SubController {
|
|
|
|
|
|
|
|
|
|
@ApiOperation("数据处理")
|
|
|
|
|
@PostMapping("SubData")
|
|
|
|
|
public JsonData SubData() {
|
|
|
|
|
public JsonData SubData(String strSlab) {
|
|
|
|
|
|
|
|
|
|
//获取所有数据
|
|
|
|
|
GetDataInfo(null);
|
|
|
|
@ -178,8 +181,10 @@ public class SubController {
|
|
|
|
|
|
|
|
|
|
if (gltGCalGrp.size() > 0) {
|
|
|
|
|
gltGGrpCalRslt = new ArrayList<>();
|
|
|
|
|
SetGroupCalRslt(p);
|
|
|
|
|
|
|
|
|
|
gltSelGGrpCalRslt= new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
SetGroupCalRslt(p);
|
|
|
|
|
|
|
|
|
|
logger.info("结果数据板坯号:{};数量:{}", p.getSlabNo(), gltGGrpCalRslt.size());
|
|
|
|
|
}
|
|
|
|
@ -466,6 +471,7 @@ public class SubController {
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception e1) {
|
|
|
|
|
log.error("化学成分", e1);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
try {
|
|
|
|
|
//低倍检测 low-power check
|
|
|
|
@ -474,6 +480,7 @@ public class SubController {
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception e1) {
|
|
|
|
|
log.error("低倍检测", e1);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//GCG.setLtInfoGPreOrder(new ArrayList<>());
|
|
|
|
@ -564,7 +571,7 @@ public class SubController {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//订单要求化学成分
|
|
|
|
|
// logger.info("化学成分订单号:" + GrpOrd.getOrderNo());
|
|
|
|
|
// logger.info("化学成分订单号:" + GrpOrd.getOrderNo());
|
|
|
|
|
List<QdToLineupResultCheDO> ltLrc = new ArrayList<>();
|
|
|
|
|
int intOrd = plistQdToLineupResultCheDO.stream().filter(p -> p.getOrderNo().equals(null)).collect(Collectors.toList()).size();
|
|
|
|
|
int intRX = plistQdToLineupResultCheDO.stream().filter(p -> p.getCheType().equals(null)).collect(Collectors.toList()).size();
|
|
|
|
@ -1436,6 +1443,8 @@ public class SubController {
|
|
|
|
|
.multiply(BigDecimal.valueOf(p.getCal_Len()))
|
|
|
|
|
.divide(SInfo.getSlabActThk().multiply(SInfo.getSlabActWid()), 0, RoundingMode.CEILING);
|
|
|
|
|
p.setVirtualSlab_Len(virtualSlabLen.intValue());
|
|
|
|
|
//板坯重量
|
|
|
|
|
p.setVirtualSlab_Wgt(p.getVirtualSlab_Thk().multiply(BigDecimal.valueOf(p.getVirtualSlab_Len())).multiply(BigDecimal.valueOf(p.getVirtualSlab_Wid()) ).multiply(BigDecimal.valueOf(7.85)));
|
|
|
|
|
|
|
|
|
|
//成材率计算
|
|
|
|
|
BigDecimal rolledVolume = p.getCal_Thk()
|
|
|
|
@ -1453,29 +1462,23 @@ public class SubController {
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//判断结算结果长度和成材率是否可用
|
|
|
|
|
gltGGrpCalRslt.parallelStream().forEach(p -> {
|
|
|
|
|
|
|
|
|
|
//没有成材率
|
|
|
|
|
if (p.getRate() == null) {
|
|
|
|
|
p.setIntUseFlg(1);
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
p.setIntUseFlg(0);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//成材率大于90%
|
|
|
|
|
if (p.getRate().compareTo(BigDecimal.valueOf(0.9)) >= 0) {
|
|
|
|
|
p.setIntUseFlg(1);
|
|
|
|
|
} else {
|
|
|
|
|
if (p.getRate().compareTo(BigDecimal.valueOf(0.9)) <= 0) {
|
|
|
|
|
p.setIntUseFlg(0);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
int minWid = Math.min(p.getVirtualSlab_Wid(), p.getVirtualSlab_Len());
|
|
|
|
|
int maxLen = Math.min(p.getVirtualSlab_Wid(), p.getVirtualSlab_Len());
|
|
|
|
|
int maxLen = Math.max(p.getVirtualSlab_Wid(), p.getVirtualSlab_Len());
|
|
|
|
|
// 板坯厚度起止SLAB_THICK_FROM/TO包含余坯实际厚度;
|
|
|
|
|
// 板坯宽度起止SLAB_WIDTH_FROM/TO包含余坯实际宽度;
|
|
|
|
|
// 加热炉类型为‘C’,轧制产线号等于产线号后两位,连铸机类型等于1;
|
|
|
|
@ -1484,7 +1487,7 @@ public class SubController {
|
|
|
|
|
&& e.getSlabWidthFrom().compareTo(BigDecimal.valueOf(minWid)) <= 0
|
|
|
|
|
&& e.getSlabWidthTo().compareTo(BigDecimal.valueOf(minWid)) >= 0
|
|
|
|
|
&& e.getFurType().equals("C")
|
|
|
|
|
&& e.getRollLineNo().equals(SInfo.getRollerLineNo().substring(SInfo.getRollerLineNo().length() - 2))
|
|
|
|
|
&& e.getRollLineNo().equals(SInfo.getMscLineNo().substring(SInfo.getMscLineNo().length() - 2))
|
|
|
|
|
&& e.getCcType().equals("1")
|
|
|
|
|
).count() > 0) {
|
|
|
|
|
int intSlanLenMin = plistPmSlabSpecBtDO.stream().filter(e -> e.getSlabThickFrom().compareTo(p.getVirtualSlab_Thk()) <= 0
|
|
|
|
@ -1492,7 +1495,7 @@ public class SubController {
|
|
|
|
|
&& e.getSlabWidthFrom().compareTo(BigDecimal.valueOf(minWid)) <= 0
|
|
|
|
|
&& e.getSlabWidthTo().compareTo(BigDecimal.valueOf(minWid)) >= 0
|
|
|
|
|
&& e.getFurType().equals("C")
|
|
|
|
|
&& e.getRollLineNo().equals(SInfo.getRollerLineNo().substring(SInfo.getRollerLineNo().length() - 2))
|
|
|
|
|
&& e.getRollLineNo().equals(SInfo.getMscLineNo().substring(SInfo.getMscLineNo().length() - 2))
|
|
|
|
|
&& e.getCcType().equals("1")
|
|
|
|
|
).findFirst().orElse(null).getSlabMinLen().intValue();
|
|
|
|
|
int intSlanLenMax = plistPmSlabSpecBtDO.stream().filter(e -> e.getSlabThickFrom().compareTo(p.getVirtualSlab_Thk()) <= 0
|
|
|
|
@ -1500,7 +1503,7 @@ public class SubController {
|
|
|
|
|
&& e.getSlabWidthFrom().compareTo(BigDecimal.valueOf(minWid)) <= 0
|
|
|
|
|
&& e.getSlabWidthTo().compareTo(BigDecimal.valueOf(minWid)) >= 0
|
|
|
|
|
&& e.getFurType().equals("C")
|
|
|
|
|
&& e.getRollLineNo().equals(SInfo.getRollerLineNo().substring(SInfo.getRollerLineNo().length() - 2))
|
|
|
|
|
&& e.getRollLineNo().equals(SInfo.getMscLineNo().substring(SInfo.getMscLineNo().length() - 2))
|
|
|
|
|
&& e.getCcType().equals("1")
|
|
|
|
|
).findFirst().orElse(null).getSlabMaxLen().intValue();
|
|
|
|
|
|
|
|
|
@ -1516,17 +1519,47 @@ public class SubController {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//数据可用
|
|
|
|
|
p.setIntUseFlg(1);
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
//数据不可用
|
|
|
|
|
p.setIntUseFlg(0);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//数据可用
|
|
|
|
|
p.setIntUseFlg(1);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
//选择最优结果
|
|
|
|
|
ChosBestRsl(SInfo);
|
|
|
|
|
|
|
|
|
|
//小于最小入炉尺寸
|
|
|
|
|
if (SInfo.getRemLen().intValue() <2200)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}else{
|
|
|
|
|
SetGroupCalRslt(SInfo);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void ChosBestRsl(SlabInfoDO SInfo) {
|
|
|
|
|
|
|
|
|
|
// 筛选 UseFlg == 1 的数据
|
|
|
|
|
List<GGrpCalRslt> filteredList = gltGGrpCalRslt.stream()
|
|
|
|
|
.filter(g -> g.getIntUseFlg()== 1)
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
// 找到重量最大成材率最大的数据
|
|
|
|
|
Optional<GGrpCalRslt> maxWeightMaxYieldRate = filteredList.stream()
|
|
|
|
|
.max(Comparator.comparing((GGrpCalRslt g) -> g.getVirtualSlab_Wgt())
|
|
|
|
|
.thenComparing(GGrpCalRslt::getRate));
|
|
|
|
|
|
|
|
|
|
// 将筛选出的数据添加到 gltSelGGrpCalRslt 中
|
|
|
|
|
maxWeightMaxYieldRate.ifPresent(gltSelGGrpCalRslt::add);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//设置保存数据
|
|
|
|
|