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

main
sunhao 3 months ago
parent 922db3e1bf
commit 1bef65f620

@ -119,11 +119,18 @@ public class SubController {
private static List<QeTqPonoWaitTestDO> plistQeTqPonoWaitTestDO; private static List<QeTqPonoWaitTestDO> plistQeTqPonoWaitTestDO;
//坯料低倍委托实绩表 //坯料低倍委托实绩表
private static List<QeTqSlabMacroResultDO> plistQeTqSlabMacroResultDO; private static List<QeTqSlabMacroResultDO> plistQeTqSlabMacroResultDO;
//连铸板坯生产规格基准表
private static List<PmSlabSpecBtDO> plistPmSlabSpecBtDO;
//板坯信息表 //板坯信息表
private static List<PmPdSlabInfoDO> plistPmPdSlabInfoDO; //TODO 需要添加此表信息的查询 private static List<PmPdSlabInfoDO> plistPmPdSlabInfoDO; //TODO 需要添加此表信息的查询
//TODO 需要添加 QD_TO_PO_ORDER 的查询记录 //TODO 需要添加 QD_TO_PO_ORDER 的查询记录
private static Date now; private static Date now;
// //加热炉板坯最小长度
// private static int gintSlabMinLen;
// //加热炉板坯最大长度
// private static int gintSlabMaxLen;
//endregion //endregion
@ApiOperation("求解处理") @ApiOperation("求解处理")
@ -172,6 +179,8 @@ public class SubController {
if (gltGCalGrp.size() > 0) { if (gltGCalGrp.size() > 0) {
gltGGrpCalRslt = new ArrayList<>(); gltGGrpCalRslt = new ArrayList<>();
SetGroupCalRslt(p); SetGroupCalRslt(p);
logger.info("结果数据板坯号:{};数量:{}", p.getSlabNo(), gltGGrpCalRslt.size()); logger.info("结果数据板坯号:{};数量:{}", p.getSlabNo(), gltGGrpCalRslt.size());
} }
// if (gltGGrpCalRslt.size() > 0) { // if (gltGGrpCalRslt.size() > 0) {
@ -179,7 +188,7 @@ public class SubController {
// SetSaveDate(p); // SetSaveDate(p);
// } // }
} catch (Exception e) { } catch (Exception e) {
logger.error("An error occurred", e); logger.error("板坯报错:" + p.getSlabNo(), e);
} }
logger.info("*************板坯结束{}************* ", p.getSlabNo()); logger.info("*************板坯结束{}************* ", p.getSlabNo());
logger.info(""); logger.info("");
@ -196,7 +205,7 @@ public class SubController {
* *
* *
* *
* */ */
public void GetDataInfo(Optional<SubParams> args) { public void GetDataInfo(Optional<SubParams> args) {
logger.info("*****开始获取数据******"); logger.info("*****开始获取数据******");
@ -204,7 +213,7 @@ public class SubController {
//region ***多线程获取基础数据*** //region ***多线程获取基础数据***
// 创建线程池 // 创建线程池
ExecutorService executorService = Executors.newFixedThreadPool(23); ExecutorService executorService = Executors.newFixedThreadPool(24);
//初始化方案 //初始化方案
Loader.loadNativeLibraries(); Loader.loadNativeLibraries();
@ -374,6 +383,13 @@ public class SubController {
return null; return null;
}); });
//24连铸板坯生产规格基准表
tasks.add(() -> {
plistPmSlabSpecBtDO = subService.getPmSlabSpecBt();
// logger.info("******23连铸板坯生产规格基准表数据获取完毕*******");
return null;
});
// 执行所有任务 // 执行所有任务
try { try {
executorService.invokeAll(tasks); executorService.invokeAll(tasks);
@ -403,6 +419,7 @@ public class SubController {
logger.info("20:炉次工序成分代表实绩表:" + plistQeTqHeatcheStandResultDO.size()); logger.info("20:炉次工序成分代表实绩表:" + plistQeTqHeatcheStandResultDO.size());
logger.info("21:炉次待委托表:" + plistQeTqPonoWaitTestDO.size()); logger.info("21:炉次待委托表:" + plistQeTqPonoWaitTestDO.size());
logger.info("22:坯料低倍委托实绩表:" + plistQeTqSlabMacroResultDO.size()); logger.info("22:坯料低倍委托实绩表:" + plistQeTqSlabMacroResultDO.size());
logger.info("23:连铸板坯生产规格基准表:" + plistPmSlabSpecBtDO.size());
// 关闭线程池 // 关闭线程池
executorService.shutdown(); executorService.shutdown();
@ -413,7 +430,7 @@ public class SubController {
/** /**
* *
* */ */
public void SetPreData() { public void SetPreData() {
//订单数据处理 //订单数据处理
SetOrderLackData(); SetOrderLackData();
@ -425,7 +442,7 @@ public class SubController {
/** /**
* *
* */ */
public void SetGrpDataBySlab(SlabInfoDO SInfo) { public void SetGrpDataBySlab(SlabInfoDO SInfo) {
gltGrpOrderFir.parallelStream().forEach(e -> { gltGrpOrderFir.parallelStream().forEach(e -> {
@ -442,14 +459,21 @@ public class SubController {
GCG.setLtInfoGPreOrder(new ArrayList<>()); GCG.setLtInfoGPreOrder(new ArrayList<>());
e.getLtInfoGPreOrder().parallelStream().forEach(f -> { e.getLtInfoGPreOrder().parallelStream().forEach(f -> {
try {
//化学成分 chemical composition //化学成分 chemical composition
if (!ChkChemical(SInfo, f)) { if (!ChkChemical(SInfo, f)) {
return; return;
}
} catch (Exception e1) {
log.error("化学成分", e1);
} }
//低倍检测 low-power check try {
if (!ChkLowPower(SInfo, f)) { //低倍检测 low-power check
return; if (!ChkLowPower(SInfo, f)) {
return;
}
} catch (Exception e1) {
log.error("低倍检测", e1);
} }
//GCG.setLtInfoGPreOrder(new ArrayList<>()); //GCG.setLtInfoGPreOrder(new ArrayList<>());
@ -526,7 +550,7 @@ public class SubController {
/** /**
* *
* */ */
public boolean ChkChemical(SlabInfoDO SInfo, GPreOrder GrpOrd) { public boolean ChkChemical(SlabInfoDO SInfo, GPreOrder GrpOrd) {
// - 炉次工序成分代表实绩表QE_TQ_HEATCHE_STAND_RESULT => 制造命令号PONO // - 炉次工序成分代表实绩表QE_TQ_HEATCHE_STAND_RESULT => 制造命令号PONO
@ -579,7 +603,7 @@ public class SubController {
/** /**
* *
* */ */
public boolean ChkLowPower(SlabInfoDO SInfo, GPreOrder GrpOrd) { public boolean ChkLowPower(SlabInfoDO SInfo, GPreOrder GrpOrd) {
// - 委托 QE_TQ_PONO_WAIT_TEST => 制造命令号PONO // - 委托 QE_TQ_PONO_WAIT_TEST => 制造命令号PONO
@ -989,41 +1013,38 @@ public class SubController {
/** /**
* *
* * <p>
* *
* *
* *
* @param SInfo * @param SInfo
* @param GrpOrd * @param GrpOrd
* @return truefalse * @return truefalse
*/ */
public boolean ChkCompress(SlabInfoDO SInfo, GPreOrder GrpOrd) { public boolean ChkCompress(SlabInfoDO SInfo, GPreOrder GrpOrd) {
try try {
{ //判断GGrpOrderFir的压缩比下限
//判断GGrpOrderFir的压缩比下限 BigDecimal decCompressRate = new BigDecimal(0);
BigDecimal decCompressRate = new BigDecimal(0);
//SInfo的厚度除以GrpOrd的厚度等于压缩比decCompressRate
//SInfo的厚度除以GrpOrd的厚度等于压缩比decCompressRate decCompressRate = GrpOrd.getThk().divide(SInfo.getSlabActThk(), 2, BigDecimal.ROUND_HALF_UP);
decCompressRate = GrpOrd.getThk().divide(SInfo.getSlabActThk(), 2, BigDecimal.ROUND_HALF_UP);
//压下比大于产线要求的下限值
//压下比大于产线要求的下限值 if (decCompressRate.compareTo(GrpOrd.getInfoPmContMscTechDO().getCompressMin()) < 0) {
if (decCompressRate.compareTo(GrpOrd.getInfoPmContMscTechDO().getCompressMin()) < 0) { return false;
return false; } else {
} else { return true;
return true; }
} } catch (Exception e) {
} catch (Exception e) { logger.error("压缩比验证出错", e);
logger.error("压缩比验证出错", e); return false;
return false; }
}
} }
/** /**
* *
* */
*
* */
public boolean ChkWid(SlabInfoDO SInfo, GPreOrder GrpOrd) { public boolean ChkWid(SlabInfoDO SInfo, GPreOrder GrpOrd) {
@ -1037,8 +1058,8 @@ public class SubController {
* 线gltOrder线访 * 线gltOrder线访
* *
* @param prPmProContDO * @param prPmProContDO
* @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) {
@ -1078,7 +1099,7 @@ public class SubController {
/** /**
* *
* */ */
public void SetOrderLackData() { public void SetOrderLackData() {
//TODO:箭头函数订单多线程处理数据,升序,降序,重组。 //TODO:箭头函数订单多线程处理数据,升序,降序,重组。
@ -1205,9 +1226,13 @@ public class SubController {
if (intMaxLen < intRollMinLen) { if (intMaxLen < intRollMinLen) {
return; return;
} }
//轧制宽度
GGCR.setCal_Wid(intWid); GGCR.setCal_Wid(intWid);
//轧制厚度
GGCR.setCal_Thk(intThk); GGCR.setCal_Thk(intThk);
//订单厚度
GGCR.setThk(e.getLtInfoGPreOrder().get(0).getThk());
//最大长度
GGCR.setCal_Len(intMaxLen); GGCR.setCal_Len(intMaxLen);
GGCR.setLtInfoGPreOrder(e.getLtInfoGPreOrder()); GGCR.setLtInfoGPreOrder(e.getLtInfoGPreOrder());
@ -1286,6 +1311,7 @@ public class SubController {
int intHead = PPCLB.getHeadCut().intValue(); int intHead = PPCLB.getHeadCut().intValue();
//切尾 //切尾
int intTail = PPCLB.getTailCut().intValue(); int intTail = PPCLB.getTailCut().intValue();
//去掉切头尾长度 //去掉切头尾长度
int intCap = p.getCal_Len() - intHead - intTail; 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; return;
} }
@ -1375,9 +1400,9 @@ public class SubController {
//切边余量 //切边余量
p.setTrimming(intTrimWid); p.setTrimming(intTrimWid);
//订单合计长度+切缝 TODO取样长度是否加入计算后续再优化 //订单合计长度+切缝 TODO取样长度是否加入计算后续再优化
int intSumOrderLen = p.getLtActInfoGPreOrder().stream().mapToInt(GPreOrder::getLen).sum(); int intSumOrderLen = p.getLtActInfoGPreOrder().stream().mapToInt(GPreOrder::getLen).sum();
int intSumPlateCutWid =p.getLtActInfoGPreOrder().size()*intPlateCutWidth; int intSumPlateCutWid = p.getLtActInfoGPreOrder().size() * intPlateCutWidth;
p.setEff_Len(intSumOrderLen+intSumPlateCutWid); p.setEff_Len(intSumOrderLen + intSumPlateCutWid);
PmPlateCutLenBtDO PPCLB_Act = plistPmPlateCutLenBtDO.stream(). PmPlateCutLenBtDO PPCLB_Act = plistPmPlateCutLenBtDO.stream().
filter(f -> f.getMscLineNo().equals("1030") filter(f -> f.getMscLineNo().equals("1030")
@ -1399,22 +1424,8 @@ public class SubController {
//切尾 //切尾
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(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()); p.setVirtualSlab_Thk(SInfo.getSlabActThk());
//板坯宽度 //板坯宽度
@ -1423,13 +1434,99 @@ public class SubController {
BigDecimal virtualSlabLen = p.getCal_Thk() BigDecimal virtualSlabLen = p.getCal_Thk()
.multiply(BigDecimal.valueOf(p.getCal_Wid())) .multiply(BigDecimal.valueOf(p.getCal_Wid()))
.multiply(BigDecimal.valueOf(p.getCal_Len())) .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()); 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<QeTqSlabMacroResultDO> getQeTqSlabMacroResult();
// 连铸板坯生产规格基准表
List<PmSlabSpecBtDO> getPmSlabSpecBt();
} }

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

@ -181,5 +181,9 @@ public class SubServiceImpl implements SubService {
return subMapper.getQeTqSlabMacroResult(); 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) 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 = 'C40022070400'
-- AND MS.SLAB_NO = 'C40022070500' -- 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 -- 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)--重量相同 -- 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 XISC_QE.QE_TQ_SLAB_MACRO_RESULT
</select> </select>
<!--连铸板坯生产规格基准表-->
<select id="getPmSlabSpecBt" resultType="net.xdclass.shopmanager.model.PmSlabSpecBtDO">
SELECT
*
FROM
PM_SLAB_SPEC_BT
</select>
</mapper> </mapper>

Loading…
Cancel
Save