|
|
|
@ -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<BigDecimal> 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);
|
|
|
|
|