结果数据判断成材率与结果是否可用

main
sunhao 3 months ago
parent 922db3e1bf
commit 1bef65f620

@ -119,11 +119,18 @@ public class SubController {
private static List<QeTqPonoWaitTestDO> plistQeTqPonoWaitTestDO;
//坯料低倍委托实绩表
private static List<QeTqSlabMacroResultDO> plistQeTqSlabMacroResultDO;
//连铸板坯生产规格基准表
private static List<PmSlabSpecBtDO> plistPmSlabSpecBtDO;
//板坯信息表
private static List<PmPdSlabInfoDO> plistPmPdSlabInfoDO; //TODO 需要添加此表信息的查询
//TODO 需要添加 QD_TO_PO_ORDER 的查询记录
private static Date now;
// //加热炉板坯最小长度
// private static int gintSlabMinLen;
// //加热炉板坯最大长度
// private static int gintSlabMaxLen;
//endregion
@ApiOperation("求解处理")
@ -172,6 +179,8 @@ public class SubController {
if (gltGCalGrp.size() > 0) {
gltGGrpCalRslt = new ArrayList<>();
SetGroupCalRslt(p);
logger.info("结果数据板坯号:{};数量:{}", p.getSlabNo(), gltGGrpCalRslt.size());
}
// if (gltGGrpCalRslt.size() > 0) {
@ -179,7 +188,7 @@ public class SubController {
// SetSaveDate(p);
// }
} catch (Exception e) {
logger.error("An error occurred", e);
logger.error("板坯报错:" + p.getSlabNo(), e);
}
logger.info("*************板坯结束{}************* ", p.getSlabNo());
logger.info("");
@ -196,7 +205,7 @@ public class SubController {
*
*
*
* */
*/
public void GetDataInfo(Optional<SubParams> args) {
logger.info("*****开始获取数据******");
@ -204,7 +213,7 @@ public class SubController {
//region ***多线程获取基础数据***
// 创建线程池
ExecutorService executorService = Executors.newFixedThreadPool(23);
ExecutorService executorService = Executors.newFixedThreadPool(24);
//初始化方案
Loader.loadNativeLibraries();
@ -374,6 +383,13 @@ public class SubController {
return null;
});
//24连铸板坯生产规格基准表
tasks.add(() -> {
plistPmSlabSpecBtDO = subService.getPmSlabSpecBt();
// logger.info("******23连铸板坯生产规格基准表数据获取完毕*******");
return null;
});
// 执行所有任务
try {
executorService.invokeAll(tasks);
@ -403,6 +419,7 @@ public class SubController {
logger.info("20:炉次工序成分代表实绩表:" + plistQeTqHeatcheStandResultDO.size());
logger.info("21:炉次待委托表:" + plistQeTqPonoWaitTestDO.size());
logger.info("22:坯料低倍委托实绩表:" + plistQeTqSlabMacroResultDO.size());
logger.info("23:连铸板坯生产规格基准表:" + plistPmSlabSpecBtDO.size());
// 关闭线程池
executorService.shutdown();
@ -413,7 +430,7 @@ public class SubController {
/**
*
* */
*/
public void SetPreData() {
//订单数据处理
SetOrderLackData();
@ -425,7 +442,7 @@ public class SubController {
/**
*
* */
*/
public void SetGrpDataBySlab(SlabInfoDO SInfo) {
gltGrpOrderFir.parallelStream().forEach(e -> {
@ -442,15 +459,22 @@ public class SubController {
GCG.setLtInfoGPreOrder(new ArrayList<>());
e.getLtInfoGPreOrder().parallelStream().forEach(f -> {
try {
//化学成分 chemical composition
if (!ChkChemical(SInfo, f)) {
return;
}
} catch (Exception e1) {
log.error("化学成分", e1);
}
try {
//低倍检测 low-power check
if (!ChkLowPower(SInfo, f)) {
return;
}
} catch (Exception e1) {
log.error("低倍检测", e1);
}
//GCG.setLtInfoGPreOrder(new ArrayList<>());
GCG.getLtInfoGPreOrder().add(f);//添加订单信息
@ -526,7 +550,7 @@ public class SubController {
/**
*
* */
*/
public boolean ChkChemical(SlabInfoDO SInfo, GPreOrder GrpOrd) {
// - 炉次工序成分代表实绩表QE_TQ_HEATCHE_STAND_RESULT => 制造命令号PONO
@ -579,7 +603,7 @@ public class SubController {
/**
*
* */
*/
public boolean ChkLowPower(SlabInfoDO SInfo, GPreOrder GrpOrd) {
// - 委托 QE_TQ_PONO_WAIT_TEST => 制造命令号PONO
@ -989,7 +1013,7 @@ public class SubController {
/**
*
*
* <p>
*
*
*
@ -998,8 +1022,7 @@ public class SubController {
* @return truefalse
*/
public boolean ChkCompress(SlabInfoDO SInfo, GPreOrder GrpOrd) {
try
{
try {
//判断GGrpOrderFir的压缩比下限
BigDecimal decCompressRate = new BigDecimal(0);
@ -1021,9 +1044,7 @@ public class SubController {
/**
*
*
*
* */
*/
public boolean ChkWid(SlabInfoDO SInfo, GPreOrder GrpOrd) {
@ -1078,7 +1099,7 @@ public class SubController {
/**
*
* */
*/
public void SetOrderLackData() {
//TODO:箭头函数订单多线程处理数据,升序,降序,重组。
@ -1205,9 +1226,13 @@ public class SubController {
if (intMaxLen < intRollMinLen) {
return;
}
//轧制宽度
GGCR.setCal_Wid(intWid);
//轧制厚度
GGCR.setCal_Thk(intThk);
//订单厚度
GGCR.setThk(e.getLtInfoGPreOrder().get(0).getThk());
//最大长度
GGCR.setCal_Len(intMaxLen);
GGCR.setLtInfoGPreOrder(e.getLtInfoGPreOrder());
@ -1286,6 +1311,7 @@ public class SubController {
int intHead = PPCLB.getHeadCut().intValue();
//切尾
int intTail = PPCLB.getTailCut().intValue();
//去掉切头尾长度
int intCap = p.getCal_Len() - intHead - intTail;
@ -1315,8 +1341,7 @@ public class SubController {
//根据实际订单再计算
//
if (p.getLtActInfoGPreOrder().size()==0)
{
if (p.getLtActInfoGPreOrder().size() == 0) {
return;
}
@ -1376,8 +1401,8 @@ public class SubController {
p.setTrimming(intTrimWid);
//订单合计长度+切缝 TODO取样长度是否加入计算后续再优化
int intSumOrderLen = p.getLtActInfoGPreOrder().stream().mapToInt(GPreOrder::getLen).sum();
int intSumPlateCutWid =p.getLtActInfoGPreOrder().size()*intPlateCutWidth;
p.setEff_Len(intSumOrderLen+intSumPlateCutWid);
int intSumPlateCutWid = p.getLtActInfoGPreOrder().size() * intPlateCutWidth;
p.setEff_Len(intSumOrderLen + intSumPlateCutWid);
PmPlateCutLenBtDO PPCLB_Act = plistPmPlateCutLenBtDO.stream().
filter(f -> f.getMscLineNo().equals("1030")
@ -1399,22 +1424,8 @@ public class SubController {
//切尾
p.setTail_Len(PPCLB_Act.getTailCut().intValue());
//轧制长度
p.setCal_Len( p.getEff_Len() + PPCLB_Act.getHeadCut().intValue() + PPCLB_Act.getTailCut().intValue());
p.setCal_Len(p.getEff_Len() + PPCLB_Act.getHeadCut().intValue() + PPCLB_Act.getTailCut().intValue());
//成材率
// 成材率计算
BigDecimal rolledVolume = p.getCal_Thk()
.multiply(BigDecimal.valueOf(p.getCal_Wid()))
.multiply(BigDecimal.valueOf(p.getCal_Len()));
BigDecimal slabVolume = SInfo.getSlabActThk()
.multiply(SInfo.getSlabActWid())
.multiply(BigDecimal.valueOf(p.getVirtualSlab_Len()));
BigDecimal yieldRate = rolledVolume.divide(slabVolume, 4, RoundingMode.HALF_UP); // 保留4位小数
// 设置成材率到 p 对象中
p.setRate(yieldRate);
//板坯厚度
p.setVirtualSlab_Thk(SInfo.getSlabActThk());
//板坯宽度
@ -1423,13 +1434,99 @@ public class SubController {
BigDecimal virtualSlabLen = p.getCal_Thk()
.multiply(BigDecimal.valueOf(p.getCal_Wid()))
.multiply(BigDecimal.valueOf(p.getCal_Len()))
.divide(SInfo.getSlabActThk().multiply(SInfo.getSlabActWid()), RoundingMode.CEILING);
.divide(SInfo.getSlabActThk().multiply(SInfo.getSlabActWid()), 0, RoundingMode.CEILING);
p.setVirtualSlab_Len(virtualSlabLen.intValue());
//成材率计算
BigDecimal rolledVolume = p.getCal_Thk()
.multiply(BigDecimal.valueOf(p.getCal_Wid()))
.multiply(BigDecimal.valueOf(p.getEff_Len()));
BigDecimal slabVolume = SInfo.getSlabActThk()
.multiply(SInfo.getSlabActWid())
.multiply(BigDecimal.valueOf(p.getVirtualSlab_Len()));
BigDecimal yieldRate = rolledVolume.divide(slabVolume, 2, RoundingMode.HALF_UP); // 保留4位小数
// 设置成材率到 p 对象中
p.setRate(yieldRate);
});
//判断结算结果长度和成材率是否可用
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 {
p.setIntUseFlg(0);
return;
}
int minWid = Math.min(p.getVirtualSlab_Wid(), p.getVirtualSlab_Len());
int maxLen = Math.min(p.getVirtualSlab_Wid(), p.getVirtualSlab_Len());
// 板坯厚度起止SLAB_THICK_FROM/TO包含余坯实际厚度;
// 板坯宽度起止SLAB_WIDTH_FROM/TO包含余坯实际宽度;
// 加热炉类型为C轧制产线号等于产线号后两位连铸机类型等于1
if (plistPmSlabSpecBtDO.stream().filter(e -> e.getSlabThickFrom().compareTo(p.getVirtualSlab_Thk()) <= 0
&& e.getSlabThickTo().compareTo(p.getVirtualSlab_Thk()) >= 0
&& 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.getCcType().equals("1")
).count() > 0) {
int intSlanLenMin = plistPmSlabSpecBtDO.stream().filter(e -> e.getSlabThickFrom().compareTo(p.getVirtualSlab_Thk()) <= 0
&& e.getSlabThickTo().compareTo(p.getVirtualSlab_Thk()) >= 0
&& 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.getCcType().equals("1")
).findFirst().orElse(null).getSlabMinLen().intValue();
int intSlanLenMax = plistPmSlabSpecBtDO.stream().filter(e -> e.getSlabThickFrom().compareTo(p.getVirtualSlab_Thk()) <= 0
&& e.getSlabThickTo().compareTo(p.getVirtualSlab_Thk()) >= 0
&& 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.getCcType().equals("1")
).findFirst().orElse(null).getSlabMaxLen().intValue();
//不能小于最小值
if (maxLen <= intSlanLenMin) {
p.setIntUseFlg(0);
return;
}
//不能大于最大值
if (maxLen >= intSlanLenMax) {
p.setIntUseFlg(0);
return;
}
//数据可用
p.setIntUseFlg(1);
} else {
//数据不可用
p.setIntUseFlg(0);
return;
}
});
}
//设置保存数据

@ -75,4 +75,7 @@ public interface SubMapper extends BaseMapper<Map> {
// 坯料低倍委托实绩表
List<QeTqSlabMacroResultDO> getQeTqSlabMacroResult();
// 连铸板坯生产规格基准表
List<PmSlabSpecBtDO> getPmSlabSpecBt();
}

@ -72,5 +72,6 @@ public interface SubService {
//坯料低倍委托实绩表
List<QeTqSlabMacroResultDO> getQeTqSlabMacroResult();
//坯料低倍委托实绩表
List<PmSlabSpecBtDO> getPmSlabSpecBt();
}

@ -181,5 +181,9 @@ public class SubServiceImpl implements SubService {
return subMapper.getQeTqSlabMacroResult();
}
//连铸板坯生产规格基准表
@Override
public List<PmSlabSpecBtDO> getPmSlabSpecBt(){
return subMapper.getPmSlabSpecBt();
}
}

@ -28,6 +28,7 @@
LEFT JOIN PM_PD_CONST_BT PPCB ON PPCB.ROLL_LINE_NO = SUBSTR(MS.MSC_LINE_NO,3,2)
WHERE 1=1
AND MS.MSC_LINE_NO='1030' --5米轧线
AND MS.SLAB_NO = 'C40022070400'
-- AND MS.SLAB_NO = 'C40022070500'
-- AND ((SELECT SUM(NVL(P1.NEED_SLAB_WT,0)) FROM PM_PD_SLAB P1 WHERE P1.SLAB_NO = MS.SLAB_NO)= MS.SLAB_ACT_WGT
-- OR (SELECT SUM(NVl(P1.NEED_SLAB_WT,0)) FROM PM_PD_SLAB P1 WHERE P1.SLAB_NO = MS.SLAB_NO) = 0)--重量相同
@ -233,4 +234,12 @@
XISC_QE.QE_TQ_SLAB_MACRO_RESULT
</select>
<!--连铸板坯生产规格基准表-->
<select id="getPmSlabSpecBt" resultType="net.xdclass.shopmanager.model.PmSlabSpecBtDO">
SELECT
*
FROM
PM_SLAB_SPEC_BT
</select>
</mapper>

Loading…
Cancel
Save