2025-03-26

main
sunhao 3 weeks ago
parent c9826c3e96
commit d9548802b5

@ -197,34 +197,6 @@ public class SubController {
private static List<ChkLowResult> plistLowChkRsult= new ArrayList<>(); private static List<ChkLowResult> plistLowChkRsult= new ArrayList<>();
//endregion //endregion
@ApiOperation("求解处理")
@PostMapping("Solver")
@Permission(level = ResourceLevel.ORGANIZATION)
public JsonData Solver(@RequestBody PmSubHis pmSubHis) {
// 测试数据
long[] values = {360, 83, 59, 130, 431, 67, 230, 52, 93, 125, 670, 892, 600, 38, 48, 147,
78, 256, 63, 17, 120, 164, 432, 35, 92, 110, 22, 42, 50, 323, 514, 28, 87, 73, 78, 15, 26,
78, 210, 36, 85, 189, 274, 43, 33, 10, 19, 389, 276, 312};
long[][] weights = {{7, 1, 30, 22, 80, 94, 11, 81, 70, 64, 59, 18, 1, 36, 3, 8, 15, 42, 9,
1, 42, 47, 52, 32, 26, 48, 55, 6, 29, 84, 2, 4, 18, 56, 7, 29, 93, 44, 71, 3, 86, 66, 31,
65, 1, 79, 20, 65, 52, 13}};
long[] capacities = {7};
//初始化方案
Loader.loadNativeLibraries();
// 调用 solve 方法来解决问题
ArrayList<Long> ltInt = solve(values, weights, capacities);
for (int i = 0; i < ltInt.size(); i++) {
System.out.println(ltInt.get(i));
}
JsonData xx = new JsonData();
xx.setCode(0);
xx.setData(ltInt);
xx.setMsg("成功");
return xx;
}
@ApiOperation("数据处理") @ApiOperation("数据处理")
@PostMapping("/SubData1") @PostMapping("/SubData1")
@Permission(level = ResourceLevel.ORGANIZATION) @Permission(level = ResourceLevel.ORGANIZATION)
@ -353,210 +325,222 @@ public class SubController {
@PostMapping("/SubData") @PostMapping("/SubData")
@Permission(level = ResourceLevel.ORGANIZATION) @Permission(level = ResourceLevel.ORGANIZATION)
public JsonData SubData( PmSubHis pmSubHis, @PathVariable Long organizationId) { public JsonData SubData( PmSubHis pmSubHis, @PathVariable Long organizationId) {
SecurityTokenHelper.validTokenIgnoreInsert(pmSubHis);
String strSlab = pmSubHis.getSlabNo();
long subMode = 1; // @RequestBody
if (strSlab == null || strSlab == "") { return subService.SubData(pmSubHis, organizationId);
subMode = 2;
}
long finalSubMode = subMode;
SubParams subParams = new SubParams(); }
//
subParams.setSlabNo(strSlab); // @ApiOperation("数据处理")
// @PostMapping("/SubData")
// //测试阶段需要指定板坯号 // @Permission(level = ResourceLevel.ORGANIZATION)
// if (strSlab==null || strSlab=="") // public JsonData SubData( PmSubHis pmSubHis, @PathVariable Long organizationId) {
//
// SecurityTokenHelper.validTokenIgnoreInsert(pmSubHis);
// String strSlab = pmSubHis.getSlabNo();
//
// long subMode = 1;
//
// if (strSlab == null || strSlab == "") {
// subMode = 2;
// }
//
// long finalSubMode = subMode;
//
// SubParams subParams = new SubParams();
//
// subParams.setSlabNo(strSlab);
//
//// //测试阶段需要指定板坯号
//// if (strSlab==null || strSlab=="")
//// {
//// return null;
//// }
//
// //获取所有数据
// GetDataInfo(subParams);
//
// //数据预处理
// SetPreData();
//
// logger.info("***初次分组数量*** " + gltGrpOrderFir.size());
//
// //被使用的订单数据实例化
// plistOrdHis = new ArrayList<>();
//// int intSlabCount = 0;
// // 使用 AtomicInteger 替代 int 类型
// AtomicInteger intSlabCount = new AtomicInteger(0);
// //循环板坯
// plistSlab.forEach(p -> {
//
// PmSubLog subLog = new PmSubLog();
// subLog.setSlabNo(p.getSlabNo());
// subLog.setSubMode(finalSubMode);
// subLog.setSubRslt("成功");
// subLog.setTenantId(organizationId);
//
// String subLogStr = "";
// // 获取当前计数值
// int intSlabCountAdd = intSlabCount.getAndIncrement();
//
// logger.info("*************{}--板坯开始{}************* ",intSlabCountAdd, p.getSlabNo());
//
// logger.info("***板坯信息:{} 厚宽长:{}*{}*{} 钢种:{} ", p.getSlabNo(), p.getSlabActThk(), p.getSlabActWid(), p.getSlabActLen(), p.getStNo());
// //执行日志保存
// subLogStr = "板坯信息 厚宽长:" + p.getSlabActThk() + "*" + p.getSlabActWid() + "*" + p.getSlabActLen();
//
// // 判断板坯的长度是否在plistpmAutoSubSettingDO配置的范围内
// if (p.getSlabActLen().compareTo(plistpmAutoSubSettingDO.get(0).getMatLenMin()) < 0 && p.getSlabActLen().compareTo(plistpmAutoSubSettingDO.get(0).getMatLenMax()) > 0) {
// logger.info("***板坯信息被排除:{} 长度不在范围内 ", p.getSlabNo());
// return;
// }
//
// // 判断板坯的宽度是否在plistpmAutoSubSettingDO配置的范围内
// if (p.getSlabActWid().compareTo(plistpmAutoSubSettingDO.get(0).getMatWidthMin()) < 0 && p.getSlabActWid().compareTo(plistpmAutoSubSettingDO.get(0).getMatWidthMax()) > 0) {
// logger.info("***板坯信息被排除:{} 宽度不在范围内 ", p.getSlabNo());
// return;
// }
//
// // 判断板坯的厚度是否在plistpmAutoSubSettingDO配置的范围内
// if (p.getSlabActThk().compareTo(plistpmAutoSubSettingDO.get(0).getMatThickMin()) < 0 && p.getSlabActThk().compareTo(plistpmAutoSubSettingDO.get(0).getMatThickMax()) > 0) {
// logger.info("***板坯信息被排除:{} 厚度不在范围内 ", p.getSlabNo());
// return;
// }
//
// //判断plistpmIrsubableSlabDO是否包含P.SlabNO范围内
// if (plistpmIrsubableSlabDO.stream().anyMatch(x -> x.getSlabNo().equals(p.getSlabNo()))) {
// logger.info("***板坯信息被排除:{} 不可组板 ", p.getSlabNo());
// return;
// }
//
// //判断plistpmRetainStDO是否包含P的钢种判断这个板坯的钢种是否可组板
// if (plistpmRetainStDO.stream().anyMatch(x -> x.getStNo().equals(p.getStNo()))) {
// logger.info("***板坯信息被排除:{} 不可组板 ", p.getSlabNo());
// return;
// }
//
// try {
//
// gltGCalGrp = new ArrayList<>();
//
// gltGCal2Grp = new ArrayList<>();
//
// //低倍化学成分验证
// chkChmAndLowApi(organizationId,p);
//
// //二次分组
// SetGrpDataBySlab(p);
//
// logger.info("***一次次分组1数量*** " + gltGCalGrp.size());
//
// //数据小的情况,计算拼板。数据量大不计算
// if (gltGCalGrp.size()<=100)
// { // {
// return null; // try {
// SetGrpConBinDataBySlab(p);
// } catch (Exception e) {
//
// } // }
// }
//获取所有数据 ////
GetDataInfo(subParams); //// logger.info("***二次分组1数量*** " + gltGCalGrp.size());
//数据预处理
SetPreData();
logger.info("***初次分组数量*** " + gltGrpOrderFir.size());
//被使用的订单数据实例化
plistOrdHis = new ArrayList<>();
// int intSlabCount = 0;
// 使用 AtomicInteger 替代 int 类型
AtomicInteger intSlabCount = new AtomicInteger(0);
//循环板坯
plistSlab.forEach(p -> {
PmSubLog subLog = new PmSubLog();
subLog.setSlabNo(p.getSlabNo());
subLog.setSubMode(finalSubMode);
subLog.setSubRslt("成功");
subLog.setTenantId(organizationId);
String subLogStr = "";
// 获取当前计数值
int intSlabCountAdd = intSlabCount.getAndIncrement();
logger.info("*************{}--板坯开始{}************* ",intSlabCountAdd, p.getSlabNo());
logger.info("***板坯信息:{} 厚宽长:{}*{}*{} 钢种:{} ", p.getSlabNo(), p.getSlabActThk(), p.getSlabActWid(), p.getSlabActLen(), p.getStNo());
//执行日志保存
subLogStr = "板坯信息 厚宽长:" + p.getSlabActThk() + "*" + p.getSlabActWid() + "*" + p.getSlabActLen();
// 判断板坯的长度是否在plistpmAutoSubSettingDO配置的范围内
if (p.getSlabActLen().compareTo(plistpmAutoSubSettingDO.get(0).getMatLenMin()) < 0 && p.getSlabActLen().compareTo(plistpmAutoSubSettingDO.get(0).getMatLenMax()) > 0) {
logger.info("***板坯信息被排除:{} 长度不在范围内 ", p.getSlabNo());
return;
}
// 判断板坯的宽度是否在plistpmAutoSubSettingDO配置的范围内
if (p.getSlabActWid().compareTo(plistpmAutoSubSettingDO.get(0).getMatWidthMin()) < 0 && p.getSlabActWid().compareTo(plistpmAutoSubSettingDO.get(0).getMatWidthMax()) > 0) {
logger.info("***板坯信息被排除:{} 宽度不在范围内 ", p.getSlabNo());
return;
}
// 判断板坯的厚度是否在plistpmAutoSubSettingDO配置的范围内
if (p.getSlabActThk().compareTo(plistpmAutoSubSettingDO.get(0).getMatThickMin()) < 0 && p.getSlabActThk().compareTo(plistpmAutoSubSettingDO.get(0).getMatThickMax()) > 0) {
logger.info("***板坯信息被排除:{} 厚度不在范围内 ", p.getSlabNo());
return;
}
//判断plistpmIrsubableSlabDO是否包含P.SlabNO范围内
if (plistpmIrsubableSlabDO.stream().anyMatch(x -> x.getSlabNo().equals(p.getSlabNo()))) {
logger.info("***板坯信息被排除:{} 不可组板 ", p.getSlabNo());
return;
}
//判断plistpmRetainStDO是否包含P的钢种判断这个板坯的钢种是否可组板
if (plistpmRetainStDO.stream().anyMatch(x -> x.getStNo().equals(p.getStNo()))) {
logger.info("***板坯信息被排除:{} 不可组板 ", p.getSlabNo());
return;
}
try {
gltGCalGrp = new ArrayList<>();
gltGCal2Grp = new ArrayList<>();
//低倍化学成分验证
chkChmAndLowApi(organizationId,p);
//二次分组
SetGrpDataBySlab(p);
logger.info("***一次次分组1数量*** " + gltGCalGrp.size());
//数据小的情况,计算拼板。数据量大不计算
if (gltGCalGrp.size()<=100)
{
try {
SetGrpConBinDataBySlab(p);
} catch (Exception e) {
}
}
// //
// logger.info("***二次分组1数量*** " + gltGCalGrp.size()); // //执行日志保存
// subLogStr += "-----二次分组1数量" + gltGCalGrp.size();
//执行日志保存 //
subLogStr += "-----二次分组1数量" + gltGCalGrp.size(); // logger.info("***二次分组2数量*** " + gltGCal2Grp.size());
//
logger.info("***二次分组2数量*** " + gltGCal2Grp.size()); // //执行日志保存
// subLogStr += "-----二次分组2数量" + gltGCal2Grp.size();
//执行日志保存 //
subLogStr += "-----二次分组2数量" + gltGCal2Grp.size(); // gltGCalGrp.addAll(gltGCal2Grp);
//
gltGCalGrp.addAll(gltGCal2Grp); // //分组设置ID
// for (int i = 0; i < gltGCalGrp.size(); i++) {
//分组设置ID //
for (int i = 0; i < gltGCalGrp.size(); i++) { // gltGCalGrp.get(i).setIDValue(i + 1);
//
gltGCalGrp.get(i).setIDValue(i + 1); // }
//
} // gltGGrpCalRslt = new ArrayList<>();
//
gltGGrpCalRslt = new ArrayList<>(); // gltSelGGrpCalRslt = new ArrayList<>();
//
gltSelGGrpCalRslt = new ArrayList<>(); // plistpmSubHisDO= new ArrayList<>();
//
plistpmSubHisDO= new ArrayList<>(); // plistpmSubOrdDO = new ArrayList<>();
//
plistpmSubOrdDO = new ArrayList<>(); // pmPdSlabDOList = new ArrayList<>();
//
pmPdSlabDOList = new ArrayList<>(); // pmPdPlateCutDOList = new ArrayList<>();
//
pmPdPlateCutDOList = new ArrayList<>(); // pmPdBlockPosDOList = new ArrayList<>();
//
pmPdBlockPosDOList = new ArrayList<>(); // pmPdContSumDOList = new ArrayList<>();
//
pmPdContSumDOList = new ArrayList<>(); // pmSmallPltPosDOList = new ArrayList<>();
//
pmSmallPltPosDOList = new ArrayList<>(); // pmCmdSlabDOList = new ArrayList<>();
//
pmCmdSlabDOList = new ArrayList<>(); // pmCmdLargePltDOList = new ArrayList<>();
//
pmCmdLargePltDOList = new ArrayList<>(); // pmCmdContDOList = new ArrayList<>();
//
pmCmdContDOList = new ArrayList<>(); // pmCmdSmallPltDOList = new ArrayList<>();
//
pmCmdSmallPltDOList = new ArrayList<>(); // if (gltGCalGrp.size() > 0) {
//
if (gltGCalGrp.size() > 0) { // //板坯长度和宽度调换
// if (p.getSlabActLen().compareTo(p.getSlabActWid()) <= 0) {
//板坯长度和宽度调换 // // 当 p.getSlabActLen() 小于或等于 p.getSlabActWid() 时执行的代码
if (p.getSlabActLen().compareTo(p.getSlabActWid()) <= 0) { // p.setRemLen(p.getSlabActWid());
// 当 p.getSlabActLen() 小于或等于 p.getSlabActWid() 时执行的代码 // p.setRemWid(p.getSlabActLen());
p.setRemLen(p.getSlabActWid()); // } else {
p.setRemWid(p.getSlabActLen()); // p.setRemLen(p.getSlabActLen());
} else { // p.setRemWid(p.getSlabActWid());
p.setRemLen(p.getSlabActLen()); // }
p.setRemWid(p.getSlabActWid()); //
} // SetGroupCalRslt(p);
//
SetGroupCalRslt(p); // logger.info("所有结果数据板坯号:{};数量:{}", p.getSlabNo(), gltGGrpCalRslt.size());
// logger.info("选择结果数据板坯号:{};数量:{}", p.getSlabNo(), gltSelGGrpCalRslt.size());
logger.info("所有结果数据板坯号:{};数量:{}", p.getSlabNo(), gltGGrpCalRslt.size()); // //执行日志保存
logger.info("选择结果数据板坯号:{};数量:{}", p.getSlabNo(), gltSelGGrpCalRslt.size()); // subLogStr += "-----结果数据数量1" + gltGGrpCalRslt.size() + "-----结果数据数量2" + gltSelGGrpCalRslt.size();
//执行日志保存 // }
subLogStr += "-----结果数据数量1" + gltGGrpCalRslt.size() + "-----结果数据数量2" + gltSelGGrpCalRslt.size(); // subLog.setSubLog(subLogStr);
} // if (gltSelGGrpCalRslt.size() > 0) {
subLog.setSubLog(subLogStr); // now = new Date();
if (gltSelGGrpCalRslt.size() > 0) { // //存储数据,组板结果
now = new Date(); // SaveHisData(p);
//存储数据,组板结果 // //数据整理
SaveHisData(p); // SetSaveDate(p,organizationId);
//数据整理 // //开启事务
SetSaveDate(p,organizationId); // //TransactionStatus transactionStatus = transactionService.begin();
//开启事务 // try {
//TransactionStatus transactionStatus = transactionService.begin(); // //保存数据
try { // SaveData(p,organizationId,subLog);
//保存数据 // //transactionService.commit(transactionStatus);
SaveData(p,organizationId,subLog); // } catch (Exception e) {
//transactionService.commit(transactionStatus); // logger.error("保存事务回滚:" + p.getSlabNo(), e);
} catch (Exception e) { // //回滚事务
logger.error("保存事务回滚:" + p.getSlabNo(), e); // //transactionService.rollback(transactionStatus);
//回滚事务 // }
//transactionService.rollback(transactionStatus); // }
} //
} // } catch (Exception e) {
// logger.error("板坯报错:" + p.getSlabNo(), e);
} catch (Exception e) { // }
logger.error("板坯报错:" + p.getSlabNo(), e); // logger.info("*************板坯结束{}************* ", p.getSlabNo());
} // logger.info("");
logger.info("*************板坯结束{}************* ", p.getSlabNo()); // }
logger.info(""); //
} // );
// logger.info("*****处理结束*****");
); // logger.info("");
logger.info("*****处理结束*****"); //
logger.info(""); // return JsonData.buildSuccess();
// }
return JsonData.buildSuccess();
}
public void SaveHisData(SlabInfoDO SInfo) { public void SaveHisData(SlabInfoDO SInfo) {
String strMaxSeq = subService.GetMaxSeq(SInfo.getPono()); String strMaxSeq = subService.GetMaxSeq(SInfo.getPono());
@ -578,13 +562,13 @@ public class SubController {
//获取虚拟板坯号 //获取虚拟板坯号
plistpmSubHisDO.get(i).setVirtualSlabNo(virtualSlabNo); plistpmSubHisDO.get(i).setVirtualSlabNo(virtualSlabNo);
// subService.InsertPmSubHisDO(plistpmSubHisDO.get(i)); // InsertPmSubHisDO(plistpmSubHisDO.get(i));
//删选plistpmSubOrdDO中虚拟板坯号等于strGuid的信息 //删选plistpmSubOrdDO中虚拟板坯号等于strGuid的信息
plistpmSubOrdDO.stream() plistpmSubOrdDO.stream()
.filter(f -> f.getRelKey().equals(strGuid)) .filter(f -> f.getRelKey().equals(strGuid))
.collect(Collectors.toList()).forEach(m -> { .collect(Collectors.toList()).forEach(m -> {
m.setVirtualSlabNo(virtualSlabNo); m.setVirtualSlabNo(virtualSlabNo);
// subService.InsertPmSubOrdDO(m); // InsertPmSubOrdDO(m);
}); });
gltSelGGrpCalRslt.stream() gltSelGGrpCalRslt.stream()
.filter(f -> f.getRelKey().equals(strGuid)) .filter(f -> f.getRelKey().equals(strGuid))
@ -606,13 +590,13 @@ public class SubController {
// //获取虚拟板坯号 // //获取虚拟板坯号
// e.setVirtualSlabNo(virtualSlabNo); // e.setVirtualSlabNo(virtualSlabNo);
// //
// subService.InsertPmSubHisDO(e); // InsertPmSubHisDO(e);
// //删选plistpmSubOrdDO中虚拟板坯号等于strGuid的信息 // //删选plistpmSubOrdDO中虚拟板坯号等于strGuid的信息
// plistpmSubOrdDO.stream() // plistpmSubOrdDO.stream()
// .filter(f -> !f.getRelKey().equals(strGuid)) // .filter(f -> !f.getRelKey().equals(strGuid))
// .collect(Collectors.toList()).forEach(m -> { // .collect(Collectors.toList()).forEach(m -> {
// m.setVirtualSlabNo(virtualSlabNo); // m.setVirtualSlabNo(virtualSlabNo);
// subService.InsertPmSubOrdDO(m); // InsertPmSubOrdDO(m);
// }); // });
// gltSelGGrpCalRslt.stream() // gltSelGGrpCalRslt.stream()
// .filter(f -> !f.getRelKey().equals(strGuid)) // .filter(f -> !f.getRelKey().equals(strGuid))
@ -677,7 +661,7 @@ public class SubController {
//5生产合同产品属性表 //5生产合同产品属性表
tasks.add(() -> { tasks.add(() -> {
// plistPmProContProdAttrDO = subService.getPmProCountProdAttr(); // plistPmProContProdAttrDO = getPmProCountProdAttr();
Thread.sleep(1000); // 休眠1秒钟 Thread.sleep(1000); // 休眠1秒钟
//logger.info("******5生产合同产品属性表数据获取完毕*******"); //logger.info("******5生产合同产品属性表数据获取完毕*******");
return null; return null;

@ -3,13 +3,17 @@ package com.xisc.pm.app.service;
import com.xisc.pm.api.dto.PmPdRecDTO; import com.xisc.pm.api.dto.PmPdRecDTO;
import com.xisc.pm.api.dto.model.*; import com.xisc.pm.api.dto.model.*;
import com.xisc.pm.domain.entity.*; import com.xisc.pm.domain.entity.*;
import com.xisc.pm.domain.vo.util.JsonData;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PathVariable;
import java.util.List; import java.util.List;
public interface SubService { public interface SubService {
JsonData SubData(PmSubHis pmSubHis, Long organizationId);
//获取板坯信息 //获取板坯信息
List<SlabInfoDO> getSlabInfo(SubParams subParams); List<SlabInfoDO> getSlabInfo(SubParams subParams);

Loading…
Cancel
Save