@ -134,6 +134,8 @@ public class SubController {
private static List < QeTqSlabMacroResultDO > plistQeTqSlabMacroResultDO ;
//连铸板坯生产规格基准表
private static List < PmSlabSpecBtDO > plistPmSlabSpecBtDO ;
//钢板厚度余量基准表
private static List < PmThickAddvBtDO > plistPmThickAddvBtDO ;
//板坯信息表
private static List < PmPdSlabInfoDO > plistPmPdSlabInfoDO ; //TODO 需要添加此表信息的查询
//合约信息
@ -440,7 +442,7 @@ public class SubController {
//region ***多线程获取基础数据***
// 创建线程池
ExecutorService executorService = Executors . newFixedThreadPool ( 3 1 ) ;
ExecutorService executorService = Executors . newFixedThreadPool ( 3 2 ) ;
//初始化方案
Loader . loadNativeLibraries ( ) ;
@ -658,6 +660,12 @@ public class SubController {
return null ;
} ) ;
//32厚度余量追加值
tasks . add ( ( ) - > {
plistPmThickAddvBtDO = subService . getPmThickAddvBt ( ) ;
return null ;
} ) ;
// 执行所有任务
try {
executorService . invokeAll ( tasks ) ;
@ -748,7 +756,7 @@ public class SubController {
* /
public void SetGrpDataBySlab ( SlabInfoDO SInfo ) {
gltGrpOrderFir . forEach( e - > {
gltGrpOrderFir . parallelStream( ) . forEach( e - > {
// gltGCalGrp 产生可计算分组
@ -762,13 +770,20 @@ public class SubController {
GCG . setLtInfoGPreOrder ( new CopyOnWriteArrayList < > ( ) ) ;
e . getLtInfoGPreOrder ( ) . forEach ( f - > {
//同钢种判断
if ( ! SInfo . getStNo ( ) . equals ( f . getInfoPmContMscTechDO ( ) . getStNo ( ) ) )
{
return ;
}
try {
//同钢种判断
if ( ! SInfo . getStNo ( ) . equals ( f . getInfoPmContMscTechDO ( ) . getStNo ( ) ) )
{
return ;
}
//产线相同
if ( ! SInfo . getMscLineNo ( ) . equals ( f . getInfoPmContMscTechDO ( ) . getMscLineNo ( ) ) )
{
return ;
}
// 化学成分 chemical composition
if ( ! ChkChemical ( SInfo , f ) ) {
return ;
@ -811,36 +826,93 @@ public class SubController {
Optional < BigDecimal > maxTolThkMin = GCG . getLtInfoGPreOrder ( ) . stream ( )
. map ( GPreOrder : : getThickTolMin )
. reduce ( BigDecimal : : max ) ;
//厚度追加值
BigDecimal decThkAdd = BigDecimal . ZERO ;
//轧制厚度 厚度+厚度公差下限最大值
BigDecimal decThk = e . getThk ( ) . add ( maxTolThkMin . orElse ( 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 ( ) ;
}
//切边量
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 . 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 )
) ) {
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 . 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 ) ;
@ -1372,7 +1444,7 @@ public class SubController {
* @param ppcpa 订 单 产 品 属 性 对 象 , 包 含 订 单 产 品 的 详 细 属 性
* @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 ( ) ) ;
@ -1403,6 +1475,8 @@ public class SubController {
GPO . setInfoPmProContProdAttrDO ( ppcpa ) ;
// 关联订单次要技术信息对象
GPO . setInfoPmContMscTechDO ( pcmt ) ;
//合同
GPO . setInfoQdToPoOrderDO ( qtpo ) ;
// 将创建的订单对象添加到全局订单列表中
gltOrder . add ( GPO ) ;
@ -1425,6 +1499,7 @@ public class SubController {
PmContMscTechDO pcmt = new PmContMscTechDO ( ) ;
QdToPoOrderDO qtpo = new QdToPoOrderDO ( ) ;
try {
//判断是否在不可组板订单范围内 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 ) {
// 可能抛出异常的代码
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 {
// logger.info("缺少产线信息:" + i.getOrderNo());
}
@ -1483,7 +1561,7 @@ public class SubController {
//region 多线程 数据流处理订单分组
gltOrder . parallelStream( ) . forEach( p - > {
gltOrder . forEach( p - > {
// 检查当前订单是否与已有的分组匹配
if ( gltGrpOrderFir . stream ( ) . anyMatch ( e - > e . getWid ( ) . equals ( p . getInfoPmProContProdAttrDO ( ) . getOrderWidth ( ) ) & &
@ -1654,7 +1732,7 @@ public class SubController {
//TODO: 轧制方向, 轧制模式 没有其他值暂不考虑,之后数据完善后需要考虑
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 . getPlateThickFrom ( ) . compareTo ( p . getCal_Thk ( ) ) < = 0
& & f . getPlateThickTo ( ) . compareTo ( p . getCal_Thk ( ) ) > = 0
@ -1726,30 +1804,89 @@ public class SubController {
. map ( GPreOrder : : getThickTolMin )
. 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 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 . 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 . getCombinePlateWidthTo ( ) . compareTo ( BigDecimal . valueOf ( maxWidth . orElse ( 0 ) + maxAddWidth . orElse ( 0 ) ) ) > = 0
& & f . getWidenFrom ( ) . 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 . 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 . getCombinePlateWidthTo ( ) . compareTo ( BigDecimal . valueOf ( maxWidth . orElse ( 0 ) + maxAddWidth . orElse ( 0 ) ) ) > = 0
& & f . getWidenFrom ( ) . compareTo ( decWidRate ) < = 0
& & f . getWidenTo ( ) . compareTo ( decWidRate ) > = 0
& & f . getWithSideFlag ( ) . equals ( finalStrWithSideFlag )
) . collect ( Collectors . toList ( ) ) . get ( 0 ) . getTrimWidth ( ) . intValue ( ) ;
}
//轧制宽度= 最大宽度 + 最大宽度余量 + 切边量
@ -1786,12 +1923,19 @@ public class SubController {
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 . 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 ( ) ) ;
@ -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 . 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 ( ) ;
@ -1843,7 +1992,7 @@ public class SubController {
. multiply ( SInfo . getRemWid ( ) )
. 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 . setRate ( yieldRate ) ;
@ -1960,7 +2109,8 @@ public class SubController {
// 找到重量最大成材率最大的数据
Optional < GGrpCalRslt > maxWeightMaxYieldRate = filteredList . stream ( )
. max ( Comparator . comparing ( ( GGrpCalRslt g ) - > g . getVirtualSlab_Wgt ( ) )
. thenComparing ( GGrpCalRslt : : getRate ) ) ;
. thenComparing ( GGrpCalRslt : : getRate )
. thenComparing ( GGrpCalRslt : : getVirtualSlab_Len ) ) ;
// 将筛选出的数据添加到 gltSelGGrpCalRslt 中
maxWeightMaxYieldRate . ifPresent ( gltSelGGrpCalRslt : : add ) ;