2025-02-24

main
sunhao 3 months ago
parent 83aebaf50d
commit ea232bde92

@ -134,6 +134,8 @@ public class SubController {
private static List<QeTqSlabMacroResultDO> plistQeTqSlabMacroResultDO; private static List<QeTqSlabMacroResultDO> plistQeTqSlabMacroResultDO;
//连铸板坯生产规格基准表 //连铸板坯生产规格基准表
private static List<PmSlabSpecBtDO> plistPmSlabSpecBtDO; private static List<PmSlabSpecBtDO> plistPmSlabSpecBtDO;
//钢板厚度余量基准表
private static List<PmThickAddvBtDO> plistPmThickAddvBtDO;
//板坯信息表 //板坯信息表
private static List<PmPdSlabInfoDO> plistPmPdSlabInfoDO; //TODO 需要添加此表信息的查询 private static List<PmPdSlabInfoDO> plistPmPdSlabInfoDO; //TODO 需要添加此表信息的查询
//合约信息 //合约信息
@ -440,7 +442,7 @@ public class SubController {
//region ***多线程获取基础数据*** //region ***多线程获取基础数据***
// 创建线程池 // 创建线程池
ExecutorService executorService = Executors.newFixedThreadPool(31); ExecutorService executorService = Executors.newFixedThreadPool(32);
//初始化方案 //初始化方案
Loader.loadNativeLibraries(); Loader.loadNativeLibraries();
@ -658,6 +660,12 @@ public class SubController {
return null; return null;
}); });
//32厚度余量追加值
tasks.add(() -> {
plistPmThickAddvBtDO = subService.getPmThickAddvBt();
return null;
});
// 执行所有任务 // 执行所有任务
try { try {
executorService.invokeAll(tasks); executorService.invokeAll(tasks);
@ -748,7 +756,7 @@ public class SubController {
*/ */
public void SetGrpDataBySlab(SlabInfoDO SInfo) { public void SetGrpDataBySlab(SlabInfoDO SInfo) {
gltGrpOrderFir.forEach(e -> { gltGrpOrderFir.parallelStream().forEach(e -> {
// gltGCalGrp 产生可计算分组 // gltGCalGrp 产生可计算分组
@ -762,13 +770,20 @@ public class SubController {
GCG.setLtInfoGPreOrder(new CopyOnWriteArrayList<>()); GCG.setLtInfoGPreOrder(new CopyOnWriteArrayList<>());
e.getLtInfoGPreOrder().forEach(f -> { e.getLtInfoGPreOrder().forEach(f -> {
//同钢种判断
if (!SInfo.getStNo().equals(f.getInfoPmContMscTechDO().getStNo()))
{
return;
}
try { try {
//同钢种判断
if (!SInfo.getStNo().equals(f.getInfoPmContMscTechDO().getStNo()))
{
return;
}
//产线相同
if (!SInfo.getMscLineNo().equals(f.getInfoPmContMscTechDO().getMscLineNo()))
{
return;
}
// 化学成分 chemical composition // 化学成分 chemical composition
if (!ChkChemical(SInfo, f)) { if (!ChkChemical(SInfo, f)) {
return; return;
@ -811,36 +826,93 @@ public class SubController {
Optional<BigDecimal> maxTolThkMin = GCG.getLtInfoGPreOrder().stream() Optional<BigDecimal> maxTolThkMin = GCG.getLtInfoGPreOrder().stream()
.map(GPreOrder::getThickTolMin) .map(GPreOrder::getThickTolMin)
.reduce(BigDecimal::max); .reduce(BigDecimal::max);
//厚度追加值
BigDecimal decThkAdd= BigDecimal.ZERO;
//轧制厚度 厚度+厚度公差下限最大值 String strThkTolType;
BigDecimal decThk = e.getThk().add(maxTolThkMin.orElse(BigDecimal.ZERO)); 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 intWid = maxWidth.orElse(0) + maxAddWidth.orElse(0);
//切边 //切边
int intTrimWid = 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();
}
//切边量 //切边量
if (plistPmPlateTrimBtDO.stream().anyMatch(p -> p.getMscLineNo().equals("1030") String finalStrWithSideFlag = strWithSideFlag;
if (plistPmPlateTrimBtDO.stream().anyMatch(p -> p.getMscLineNo().equals(SInfo.getMscLineNo())
&& p.getPlateThickFrom().compareTo(decThk) <= 0 && p.getPlateThickFrom().compareTo(decThk) <= 0
&& p.getPlateThickTo().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.getCombinePlateWidthFrom().compareTo(BigDecimal.valueOf(maxWidth.orElse(0) + maxAddWidth.orElse(0))) <= 0
&& p.getCombinePlateWidthTo().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.getWidenFrom().compareTo(decWidRate) <= 0
&& p.getWidenTo().compareTo(decWidRate) >= 0 && p.getWidenTo().compareTo(decWidRate) >= 0
&& p.getWithSideFlag().equals(finalStrWithSideFlag)
)) { )) {
intTrimWid = plistPmPlateTrimBtDO.stream().filter(p -> p.getMscLineNo().equals("1030") String finalStrWithSideFlag1 = strWithSideFlag;
intTrimWid = plistPmPlateTrimBtDO.stream().filter(p -> p.getMscLineNo().equals(SInfo.getMscLineNo())
&& p.getPlateThickFrom().compareTo(decThk) <= 0 && p.getPlateThickFrom().compareTo(decThk) <= 0
&& p.getPlateThickTo().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.getCombinePlateWidthFrom().compareTo(BigDecimal.valueOf(maxWidth.orElse(0) + maxAddWidth.orElse(0))) <= 0
&& p.getCombinePlateWidthTo().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.getWidenFrom().compareTo(decWidRate) <= 0
&& p.getWidenTo().compareTo(decWidRate) >= 0 && p.getWidenTo().compareTo(decWidRate) >= 0
&& p.getWithSideFlag().equals(finalStrWithSideFlag1)
).collect(Collectors.toList()).get(0).getTrimWidth().intValue(); ).collect(Collectors.toList()).get(0).getTrimWidth().intValue();
} }
//轧制宽度= 最大宽度 + 最大宽度余量 + 切边量 //轧制宽度= 最大宽度 + 最大宽度余量 + 切边量
intWid = intWid + intTrimWid; intWid = intWid + intTrimWid;
//宽度 //宽度
GCG.setWid(intWid); GCG.setWid(intWid);
@ -1372,7 +1444,7 @@ public class SubController {
* @param ppcpa * @param ppcpa
* @param pcmt * @param pcmt
*/ */
public static synchronized void SetAllOrder(PmProContDO prPmProContDO, PmProContProdAttrDO ppcpa, PmContMscTechDO pcmt) { public static synchronized void SetAllOrder(PmProContDO prPmProContDO, PmProContProdAttrDO ppcpa, PmContMscTechDO pcmt,QdToPoOrderDO qtpo) {
// 获取缺乏的数量 // 获取缺乏的数量
BigDecimal lackNum =prPmProContDO.getPdTotQty().add(prPmProContDO.getPdLackQty()); BigDecimal lackNum =prPmProContDO.getPdTotQty().add(prPmProContDO.getPdLackQty());
@ -1403,6 +1475,8 @@ public class SubController {
GPO.setInfoPmProContProdAttrDO(ppcpa); GPO.setInfoPmProContProdAttrDO(ppcpa);
// 关联订单次要技术信息对象 // 关联订单次要技术信息对象
GPO.setInfoPmContMscTechDO(pcmt); GPO.setInfoPmContMscTechDO(pcmt);
//合同
GPO.setInfoQdToPoOrderDO(qtpo);
// 将创建的订单对象添加到全局订单列表中 // 将创建的订单对象添加到全局订单列表中
gltOrder.add(GPO); gltOrder.add(GPO);
@ -1425,6 +1499,7 @@ public class SubController {
PmContMscTechDO pcmt = new PmContMscTechDO(); PmContMscTechDO pcmt = new PmContMscTechDO();
QdToPoOrderDO qtpo = new QdToPoOrderDO();
try { try {
//判断是否在不可组板订单范围内 plistpmIrsubableContDO 中存在就返回return //判断是否在不可组板订单范围内 plistpmIrsubableContDO 中存在就返回return
@ -1452,7 +1527,10 @@ public class SubController {
if (plistPmContMscTechDO.stream().filter(p -> p.getOrderNo().equals(i.getOrderNo()) && p.getMscLineNo().equals("1030")).count() > 0) { if (plistPmContMscTechDO.stream().filter(p -> p.getOrderNo().equals(i.getOrderNo()) && p.getMscLineNo().equals("1030")).count() > 0) {
// 可能抛出异常的代码 // 可能抛出异常的代码
pcmt = plistPmContMscTechDO.stream().filter(p -> p.getOrderNo().equals(i.getOrderNo())).findFirst().orElseThrow(() -> new NoSuchElementException("No PmContMscTechDO found with name Charlie " + i.getOrderNo())); pcmt = plistPmContMscTechDO.stream().filter(p -> p.getOrderNo().equals(i.getOrderNo())).findFirst().orElseThrow(() -> new NoSuchElementException("No PmContMscTechDO found with name Charlie " + i.getOrderNo()));
SetAllOrder(i, ppcpa, pcmt);
qtpo=plistQdToPoOrderDO.stream().filter(p -> p.getOrderNo().equals(i.getOrderNo())).findFirst().orElseThrow(() -> new NoSuchElementException("No PmContMscTechDO found with name Charlie " + i.getOrderNo()));
SetAllOrder(i, ppcpa, pcmt,qtpo);
} else { } else {
// logger.info("缺少产线信息:" + i.getOrderNo()); // logger.info("缺少产线信息:" + i.getOrderNo());
} }
@ -1483,7 +1561,7 @@ public class SubController {
//region 多线程 数据流处理订单分组 //region 多线程 数据流处理订单分组
gltOrder.parallelStream().forEach(p -> { gltOrder.forEach(p -> {
// 检查当前订单是否与已有的分组匹配 // 检查当前订单是否与已有的分组匹配
if (gltGrpOrderFir.stream().anyMatch(e -> e.getWid().equals(p.getInfoPmProContProdAttrDO().getOrderWidth()) && if (gltGrpOrderFir.stream().anyMatch(e -> e.getWid().equals(p.getInfoPmProContProdAttrDO().getOrderWidth()) &&
@ -1654,7 +1732,7 @@ public class SubController {
//TODO轧制方向轧制模式 没有其他值暂不考虑,之后数据完善后需要考虑 //TODO轧制方向轧制模式 没有其他值暂不考虑,之后数据完善后需要考虑
PmPlateCutLenBtDO PPCLB = plistPmPlateCutLenBtDO.stream(). PmPlateCutLenBtDO PPCLB = plistPmPlateCutLenBtDO.stream().
filter(f -> f.getMscLineNo().equals("1030") filter(f -> f.getMscLineNo().equals(SInfo.getMscLineNo())
&& f.getBrrNeed().equals((p.getCal_Wid() > SInfo.getRemWid().intValue()) ? "1" : "0") && f.getBrrNeed().equals((p.getCal_Wid() > SInfo.getRemWid().intValue()) ? "1" : "0")
&& f.getPlateThickFrom().compareTo(p.getCal_Thk()) <= 0 && f.getPlateThickFrom().compareTo(p.getCal_Thk()) <= 0
&& f.getPlateThickTo().compareTo(p.getCal_Thk()) >= 0 && f.getPlateThickTo().compareTo(p.getCal_Thk()) >= 0
@ -1726,30 +1804,89 @@ public class SubController {
.map(GPreOrder::getThickTolMin) .map(GPreOrder::getThickTolMin)
.reduce(BigDecimal::max); .reduce(BigDecimal::max);
//厚度追加值
BigDecimal decThkAdd= BigDecimal.ZERO;
String strThkTolType;
if (p.getLtInfoGPreOrder().get(0).getInfoQdToPoOrderDO().getThkTolType() != null) {
strThkTolType = p.getLtInfoGPreOrder().get(0).getInfoQdToPoOrderDO().getThkTolType();
} else {
strThkTolType = "*";
}
//存在数据,判断热处理模式
if (plistPmThickAddvBtDO.stream().anyMatch(e -> e.getMscLineNo().equals(SInfo.getMscLineNo())
&& e.getTolTypeCode().equals(strThkTolType)
// && e.getTolTypeCode().equals(p.getLtInfoGPreOrder().get(0).getInfoQdToPoOrderDO().getThkTolType())
&& e.getPlateThickFrom().compareTo(p.getLtInfoGPreOrder().get(0).getThk()) <= 0
&& e.getPlateThickTo().compareTo(p.getLtInfoGPreOrder().get(0).getThk()) >= 0
&& e.getCombinePlateWidthFrom().compareTo(BigDecimal.valueOf(maxWidth.orElse(0) + maxAddWidth.orElse(0))) <= 0
&& e.getCombinePlateWidthTo().compareTo(BigDecimal.valueOf(maxWidth.orElse(0) + maxAddWidth.orElse(0))) >= 0
)) {
if (p.getLtInfoGPreOrder().get(0).getInfoPmContMscTechDO().getWholeHeatTreatmentType().contains("Q")) {
decThkAdd = plistPmThickAddvBtDO.stream().filter(e -> e.getMscLineNo().equals(SInfo.getMscLineNo())
&& e.getTolTypeCode().equals(strThkTolType)
// && e.getTolTypeCode().equals(p.getLtInfoGPreOrder().get(0).getInfoQdToPoOrderDO().getThkTolType())
&& e.getWholeHeatTreatmentType().equals("Q")
&& e.getPlateThickFrom().compareTo(p.getLtInfoGPreOrder().get(0).getThk()) <= 0
&& e.getPlateThickTo().compareTo(p.getLtInfoGPreOrder().get(0).getThk()) >= 0
&& e.getCombinePlateWidthFrom().compareTo(BigDecimal.valueOf(maxWidth.orElse(0) + maxAddWidth.orElse(0))) <= 0
&& e.getCombinePlateWidthTo().compareTo(BigDecimal.valueOf(maxWidth.orElse(0) + maxAddWidth.orElse(0))) >= 0
).collect(Collectors.toList()).get(0).getThickAddv();
} else {
decThkAdd = plistPmThickAddvBtDO.stream().filter(e -> e.getMscLineNo().equals(SInfo.getMscLineNo())
&& e.getTolTypeCode().equals(strThkTolType)
// && e.getTolTypeCode().equals(p.getLtInfoGPreOrder().get(0).getInfoQdToPoOrderDO().getThkTolType())
&& e.getWholeHeatTreatmentType().equals("*")
&& e.getPlateThickFrom().compareTo(p.getLtInfoGPreOrder().get(0).getThk()) <= 0
&& e.getPlateThickTo().compareTo(p.getLtInfoGPreOrder().get(0).getThk()) >= 0
&& e.getCombinePlateWidthFrom().compareTo(BigDecimal.valueOf(maxWidth.orElse(0) + maxAddWidth.orElse(0))) <= 0
&& e.getCombinePlateWidthTo().compareTo(BigDecimal.valueOf(maxWidth.orElse(0) + maxAddWidth.orElse(0))) >= 0
).collect(Collectors.toList()).get(0).getThickAddv();
}
}
//轧制厚度 厚度+厚度公差下限最大值 //轧制厚度 厚度+厚度公差下限最大值
BigDecimal decThk = p.getThk().add(maxTolThkMin.orElse(BigDecimal.ZERO)); BigDecimal decThk = p.getThk().add(maxTolThkMin.orElse(BigDecimal.ZERO)).add(decThkAdd);
//轧制宽度 最大宽度+宽度余量 //轧制宽度 最大宽度+宽度余量
int intWid = maxWidth.orElse(0) + maxAddWidth.orElse(0); int intWid = maxWidth.orElse(0) + maxAddWidth.orElse(0);
//切边 //切边
int intTrimWid = 0; int intTrimWid = 0;
String strWithSideFlag = "C";
if (p.getLtInfoGPreOrder().get(0).getInfoPmProContProdAttrDO().getProdAMark()==null
|| p.getLtInfoGPreOrder().get(0).getInfoPmProContProdAttrDO().getProdAMark().equals(""))
{
strWithSideFlag="C";
}else{
strWithSideFlag=p.getLtInfoGPreOrder().get(0).getInfoPmProContProdAttrDO().getProdAMark();
}
//切边量
String finalStrWithSideFlag = strWithSideFlag;
//切边量 //切边量
if (plistPmPlateTrimBtDO.stream().anyMatch(f -> f.getMscLineNo().equals("1030") if (plistPmPlateTrimBtDO.stream().anyMatch(f -> f.getMscLineNo().equals(SInfo.getMscLineNo())
&& f.getPlateThickFrom().compareTo(decThk) <= 0 && f.getPlateThickFrom().compareTo(decThk) <= 0
&& f.getPlateThickTo().compareTo(decThk) >= 0 && f.getPlateThickTo().compareTo(decThk) >= 0
&& f.getSmallPlateLenFrom().compareTo(BigDecimal.valueOf(p.getLtInfoGPreOrder().get(0).getLen())) <= 0
&& f.getSmallPlateLenTo().compareTo(BigDecimal.valueOf(p.getLtInfoGPreOrder().get(0).getLen())) >= 0
&& f.getCombinePlateWidthFrom().compareTo(BigDecimal.valueOf(maxWidth.orElse(0) + maxAddWidth.orElse(0))) <= 0 && f.getCombinePlateWidthFrom().compareTo(BigDecimal.valueOf(maxWidth.orElse(0) + maxAddWidth.orElse(0))) <= 0
&& f.getCombinePlateWidthTo().compareTo(BigDecimal.valueOf(maxWidth.orElse(0) + maxAddWidth.orElse(0))) >= 0 && f.getCombinePlateWidthTo().compareTo(BigDecimal.valueOf(maxWidth.orElse(0) + maxAddWidth.orElse(0))) >= 0
&& f.getWidenFrom().compareTo(decWidRate) <= 0 && f.getWidenFrom().compareTo(decWidRate) <= 0
&& f.getWidenTo().compareTo(decWidRate) >= 0 && f.getWidenTo().compareTo(decWidRate) >= 0
&& f.getWithSideFlag().equals(finalStrWithSideFlag)
)) { )) {
intTrimWid = plistPmPlateTrimBtDO.stream().filter(f -> f.getMscLineNo().equals("1030") intTrimWid = plistPmPlateTrimBtDO.stream().filter(f -> f.getMscLineNo().equals(SInfo.getMscLineNo())
&& f.getPlateThickFrom().compareTo(decThk) <= 0 && f.getPlateThickFrom().compareTo(decThk) <= 0
&& f.getPlateThickTo().compareTo(decThk) >= 0 && f.getPlateThickTo().compareTo(decThk) >= 0
&& f.getSmallPlateLenFrom().compareTo(BigDecimal.valueOf(p.getLtInfoGPreOrder().get(0).getLen())) <= 0
&& f.getSmallPlateLenTo().compareTo(BigDecimal.valueOf(p.getLtInfoGPreOrder().get(0).getLen())) >= 0
&& f.getCombinePlateWidthFrom().compareTo(BigDecimal.valueOf(maxWidth.orElse(0) + maxAddWidth.orElse(0))) <= 0 && f.getCombinePlateWidthFrom().compareTo(BigDecimal.valueOf(maxWidth.orElse(0) + maxAddWidth.orElse(0))) <= 0
&& f.getCombinePlateWidthTo().compareTo(BigDecimal.valueOf(maxWidth.orElse(0) + maxAddWidth.orElse(0))) >= 0 && f.getCombinePlateWidthTo().compareTo(BigDecimal.valueOf(maxWidth.orElse(0) + maxAddWidth.orElse(0))) >= 0
&& f.getWidenFrom().compareTo(decWidRate) <= 0 && f.getWidenFrom().compareTo(decWidRate) <= 0
&& f.getWidenTo().compareTo(decWidRate) >= 0 && f.getWidenTo().compareTo(decWidRate) >= 0
&& f.getWithSideFlag().equals(finalStrWithSideFlag)
).collect(Collectors.toList()).get(0).getTrimWidth().intValue(); ).collect(Collectors.toList()).get(0).getTrimWidth().intValue();
} }
//轧制宽度= 最大宽度 + 最大宽度余量 + 切边量 //轧制宽度= 最大宽度 + 最大宽度余量 + 切边量
@ -1786,12 +1923,19 @@ public class SubController {
return; return;
} }
//订单最大切头
int intOrdHeadMax= p.getLtActInfoGPreOrder().stream().mapToInt(GPreOrder::getCutHeadLen).max().orElse(0);
//订单最大切尾
int intOrdTailMax= p.getLtActInfoGPreOrder().stream().mapToInt(GPreOrder::getCutTailLen).max().orElse(0);
//切头 //切头
p.setHead_Len(PPCLB_Act.getHeadCut().intValue()); p.setHead_Len(PPCLB_Act.getHeadCut().intValue());
//切尾 //切尾
p.setTail_Len(PPCLB_Act.getTailCut().intValue()); p.setTail_Len(PPCLB_Act.getTailCut().intValue());
//轧制长度 //轧制长度
p.setCal_Len(p.getEff_Len() + PPCLB_Act.getHeadCut().intValue() + PPCLB_Act.getTailCut().intValue()); p.setCal_Len((int) ((p.getEff_Len() + PPCLB_Act.getHeadCut().intValue() + PPCLB_Act.getTailCut().intValue()+intOrdHeadMax+intOrdTailMax)/0.99));
//轧制长度
p.setNeedCal_Len((int) ((p.getEff_Len() + PPCLB_Act.getHeadCut().intValue() + PPCLB_Act.getTailCut().intValue()+intOrdHeadMax+intOrdTailMax)/0.99));
//板坯厚度 //板坯厚度
p.setVirtualSlab_Thk(SInfo.getSlabActThk()); p.setVirtualSlab_Thk(SInfo.getSlabActThk());
@ -1806,6 +1950,11 @@ public class SubController {
//板坯重量 //板坯重量
p.setVirtualSlab_Wgt(p.getVirtualSlab_Thk().multiply(BigDecimal.valueOf(p.getVirtualSlab_Len())).multiply(BigDecimal.valueOf(p.getVirtualSlab_Wid())).multiply(BigDecimal.valueOf(7.85)).divide(BigDecimal.valueOf(1000000000), 2, RoundingMode.HALF_UP)); p.setVirtualSlab_Wgt(p.getVirtualSlab_Thk().multiply(BigDecimal.valueOf(p.getVirtualSlab_Len())).multiply(BigDecimal.valueOf(p.getVirtualSlab_Wid())).multiply(BigDecimal.valueOf(7.85)).divide(BigDecimal.valueOf(1000000000), 2, RoundingMode.HALF_UP));
//需要板坯长度
p.setNeedSlab_Len(virtualSlabLen.intValue());
//需要板坯重量
p.setNeedSlab_Wgt(p.getVirtualSlab_Thk().multiply(BigDecimal.valueOf(p.getVirtualSlab_Len())).multiply(BigDecimal.valueOf(p.getVirtualSlab_Wid())).multiply(BigDecimal.valueOf(7.85)).divide(BigDecimal.valueOf(1000000000), 2, RoundingMode.HALF_UP));
//板坯可轧最大长度 //板坯可轧最大长度
int intSlabMaxLen=(SInfo.getRemLen().multiply(SInfo.getSlabActThk()).multiply(SInfo.getRemWid()).divide(decThk.multiply(BigDecimal.valueOf(intWid)), RoundingMode.HALF_UP)).intValue(); int intSlabMaxLen=(SInfo.getRemLen().multiply(SInfo.getSlabActThk()).multiply(SInfo.getRemWid()).divide(decThk.multiply(BigDecimal.valueOf(intWid)), RoundingMode.HALF_UP)).intValue();
@ -1843,7 +1992,7 @@ public class SubController {
.multiply(SInfo.getRemWid()) .multiply(SInfo.getRemWid())
.multiply(BigDecimal.valueOf(p.getVirtualSlab_Len())); .multiply(BigDecimal.valueOf(p.getVirtualSlab_Len()));
BigDecimal yieldRate = rolledVolume.divide(slabVolume, 2, RoundingMode.HALF_UP); // 保留4位小数 BigDecimal yieldRate = rolledVolume.divide(slabVolume, 4, RoundingMode.HALF_UP); // 保留4位小数
// 设置成材率到 p 对象中 // 设置成材率到 p 对象中
p.setRate(yieldRate); p.setRate(yieldRate);
@ -1960,7 +2109,8 @@ public class SubController {
// 找到重量最大成材率最大的数据 // 找到重量最大成材率最大的数据
Optional<GGrpCalRslt> maxWeightMaxYieldRate = filteredList.stream() Optional<GGrpCalRslt> maxWeightMaxYieldRate = filteredList.stream()
.max(Comparator.comparing((GGrpCalRslt g) -> g.getVirtualSlab_Wgt()) .max(Comparator.comparing((GGrpCalRslt g) -> g.getVirtualSlab_Wgt())
.thenComparing(GGrpCalRslt::getRate)); .thenComparing(GGrpCalRslt::getRate)
.thenComparing(GGrpCalRslt::getVirtualSlab_Len));
// 将筛选出的数据添加到 gltSelGGrpCalRslt 中 // 将筛选出的数据添加到 gltSelGGrpCalRslt 中
maxWeightMaxYieldRate.ifPresent(gltSelGGrpCalRslt::add); maxWeightMaxYieldRate.ifPresent(gltSelGGrpCalRslt::add);

@ -143,4 +143,6 @@ public interface SubMapper extends BaseMapper<Map> {
void insertPmCmdCont(PmCmdContDO pmCmdContDO); void insertPmCmdCont(PmCmdContDO pmCmdContDO);
String GetMaxSeq(String pono); String GetMaxSeq(String pono);
List<PmThickAddvBtDO> getPmThickAddvBt();
} }

@ -28,15 +28,23 @@ public class GGrpCalRslt {
//虚拟板坯厚度 //虚拟板坯厚度
private BigDecimal VirtualSlab_Thk; private BigDecimal VirtualSlab_Thk;
//虚拟板坯重量 //虚拟板坯重量
private BigDecimal VirtualSlab_Wgt; private BigDecimal VirtualSlab_Wgt;
//轧制宽度 //需要板坯长度
private int Cal_Wid; private int needSlab_Len;
//需要板坯重量
private BigDecimal needSlab_Wgt;
//轧制宽度
private int Cal_Wid;
//厚度 //厚度
private BigDecimal Cal_Thk; private BigDecimal Cal_Thk;
//长度 //长度
private int Cal_Len; private int Cal_Len;
//长度
private int NeedCal_Len;
//宽度 //宽度
private int Wid; private int Wid;
//厚度 //厚度
@ -67,6 +75,7 @@ public class GGrpCalRslt {
private int Smp_Len; private int Smp_Len;
//补长 //补长
private int Rep_Len; private int Rep_Len;
//全部合同信息 //全部合同信息
private List<GPreOrder> LtInfoGPreOrder; private List<GPreOrder> LtInfoGPreOrder;
//实际合同信息 //实际合同信息

@ -38,6 +38,11 @@ public class GPreOrder {
//厚度公差下限 //厚度公差下限
private BigDecimal thickTolMin; private BigDecimal thickTolMin;
//切头
private int CutHeadLen;
//切尾
private int CutTailLen;
//合同信息 //合同信息
private PmProContDO infoPmProContDo; private PmProContDO infoPmProContDo;
@ -47,4 +52,7 @@ public class GPreOrder {
//合同产线工艺参数表 //合同产线工艺参数表
private PmContMscTechDO infoPmContMscTechDO; private PmContMscTechDO infoPmContMscTechDO;
//合同
private QdToPoOrderDO infoQdToPoOrderDO;
} }

@ -121,4 +121,6 @@ public interface SubService {
void batchInsertPmCmdCont(List<PmCmdContDO> pmCmdContDOList); void batchInsertPmCmdCont(List<PmCmdContDO> pmCmdContDOList);
String GetMaxSeq(String pono); String GetMaxSeq(String pono);
List<PmThickAddvBtDO> getPmThickAddvBt();
} }

@ -360,5 +360,10 @@ public class SubServiceImpl implements SubService {
return subMapper.GetMaxSeq(pono); return subMapper.GetMaxSeq(pono);
} }
@Override
public List<PmThickAddvBtDO> getPmThickAddvBt() {
return subMapper.getPmThickAddvBt();
}
} }

@ -28,7 +28,7 @@
LEFT JOIN PM_PD_SLAB PPS ON PPS.SLAB_NO = MS.SLAB_NO --PM_PD_SLAB 组板板坯表 LEFT JOIN PM_PD_SLAB PPS ON PPS.SLAB_NO = MS.SLAB_NO --PM_PD_SLAB 组板板坯表
LEFT JOIN PM_PD_CONST_BT PPCB ON PPCB.ROLL_LINE_NO = SUBSTR(MS.MSC_LINE_NO, 3, 2) LEFT JOIN PM_PD_CONST_BT PPCB ON PPCB.ROLL_LINE_NO = SUBSTR(MS.MSC_LINE_NO, 3, 2)
WHERE 1 = 1 WHERE 1 = 1
AND MS.MSC_LINE_NO = '1030' --5米轧线 -- AND MS.MSC_LINE_NO = '1030' --5米轧线
-- AND MS.SLAB_NO = 'C50015130500' -- AND MS.SLAB_NO = 'C50015130500'
-- AND MS.SLAB_NO = 'C50015130100' -- AND MS.SLAB_NO = 'C50015130100'
<if test="slabNo != null and slabNo != ''">AND MS.SLAB_NO = #{slabNo}</if> <if test="slabNo != null and slabNo != ''">AND MS.SLAB_NO = #{slabNo}</if>
@ -54,7 +54,7 @@
LEFT JOIN PM_PD_SLAB_INFO PPSI ON PPSI.SLAB_NO = MS.SLAB_NO --PM_PD_SLAB 组板板坯表 LEFT JOIN PM_PD_SLAB_INFO PPSI ON PPSI.SLAB_NO = MS.SLAB_NO --PM_PD_SLAB 组板板坯表
LEFT JOIN PM_PD_CONST_BT PPCB ON PPCB.ROLL_LINE_NO = SUBSTR(MS.MSC_LINE_NO, 3, 2) LEFT JOIN PM_PD_CONST_BT PPCB ON PPCB.ROLL_LINE_NO = SUBSTR(MS.MSC_LINE_NO, 3, 2)
WHERE 1 = 1 WHERE 1 = 1
AND MS.MSC_LINE_NO = '1030' --5米轧线 -- AND MS.MSC_LINE_NO = '1030' --5米轧线
-- AND MS.SLAB_NO = 'C50015130500' -- AND MS.SLAB_NO = 'C50015130500'
-- AND MS.SLAB_NO = 'C50015130100' -- AND MS.SLAB_NO = 'C50015130100'
<if test="slabNo != null and slabNo != ''">AND MS.SLAB_NO = #{slabNo}</if> <if test="slabNo != null and slabNo != ''">AND MS.SLAB_NO = #{slabNo}</if>
@ -82,8 +82,8 @@
AND ppc.PRO_CONT_ID = pcmt.PRO_CONT_ID AND ppc.PRO_CONT_ID = pcmt.PRO_CONT_ID
-- AND cm.MSC_LINE_NO = pcmt.MSC_LINE_NO --PM_PRO_CONT没有MSC_LINE_NO -- AND cm.MSC_LINE_NO = pcmt.MSC_LINE_NO --PM_PRO_CONT没有MSC_LINE_NO
WHERE 1=1 WHERE 1=1
AND pcmt.MSC_LINE_NO = '1030' --5米轧线 -- AND pcmt.MSC_LINE_NO = '1030' --5米轧线
-- AND ppc.ORDER_NO IN ('52500037002') AND ppc.ORDER_NO IN ('J2502001208')
AND PCMT.FUR_TYPE ='C' --加热炉类型 C 没有注解C和S 都代表什么 AND PCMT.FUR_TYPE ='C' --加热炉类型 C 没有注解C和S 都代表什么
AND ppcpa.ORDER_TYPE_CODE != 'QFH' AND ppcpa.ORDER_TYPE_CODE != 'QFH'
AND PPC.ON_PD_FLAG != 1 --不用验证操作者 AND PPC.ON_PD_FLAG != 1 --不用验证操作者
@ -103,7 +103,7 @@
AND ppc.PRO_CONT_ID = pcmt.PRO_CONT_ID AND ppc.PRO_CONT_ID = pcmt.PRO_CONT_ID
-- AND cm.MSC_LINE_NO = pcmt.MSC_LINE_NO --PM_PRO_CONT没有MSC_LINE_NO -- AND cm.MSC_LINE_NO = pcmt.MSC_LINE_NO --PM_PRO_CONT没有MSC_LINE_NO
WHERE 1=1 WHERE 1=1
AND pcmt.MSC_LINE_NO = '1030' --5米轧线 -- AND pcmt.MSC_LINE_NO = '1030' --5米轧线
-- AND ppc.ORDER_NO IN ('52500037002') -- AND ppc.ORDER_NO IN ('52500037002')
AND PCMT.FUR_TYPE ='C' --加热炉类型 C 没有注解C和S 都代表什么 AND PCMT.FUR_TYPE ='C' --加热炉类型 C 没有注解C和S 都代表什么
AND ppcpa.ORDER_TYPE_CODE != 'QFH' AND ppcpa.ORDER_TYPE_CODE != 'QFH'
@ -280,6 +280,12 @@
</select> </select>
<select id="getPmThickAddvBt" resultType="net.xdclass.shopmanager.model.PmThickAddvBtDO">
SELECT *
FROM PM_THICK_ADDV_BT
</select>
<select id="GetMaxSeq" resultType="java.lang.String" parameterType="java.lang.String"> <select id="GetMaxSeq" resultType="java.lang.String" parameterType="java.lang.String">
SELECT NVL(MAX(VIRTUAL_SLAB_NO), 0) SELECT NVL(MAX(VIRTUAL_SLAB_NO), 0)
FROM PM_PD_SLAB FROM PM_PD_SLAB

Loading…
Cancel
Save