Commit 653269ef authored by Tong Li's avatar Tong Li

订单配套

parent 9e01001a
...@@ -116,25 +116,9 @@ public class ResourceGanttController { ...@@ -116,25 +116,9 @@ public class ResourceGanttController {
} }
@GetMapping("/getScene")
@Operation(summary = "获取所有场景ID", description = "获取所有场景ID")
public Chromosome getScene() {
// 调用 PlanResultService 获取 ScheduleChromosome 列表
Chromosome scheduleChromosomes = planResultService.execute1();
// 提取所有场景ID
return scheduleChromosomes;
}
@GetMapping("/getScene2")
@Operation(summary = "获取所有场景ID", description = "获取所有场景ID")
public Chromosome getScene2() {
// 调用 PlanResultService 获取 ScheduleChromosome 列表
Chromosome scheduleChromosomes = planResultService.execute2("B571EF6682DB463AB2977B1055A74112");
// 提取所有场景ID
return scheduleChromosomes;
}
@GetMapping("/SyncMaterials") @GetMapping("/SyncMaterials")
@Operation(summary = "更新物料信息缓存", description = "更新物料信息缓存") @Operation(summary = "更新物料信息缓存", description = "更新物料信息缓存")
......
...@@ -15,7 +15,7 @@ private Long lastmodifieruserid; ...@@ -15,7 +15,7 @@ private Long lastmodifieruserid;
private Long isdeleted; private Long isdeleted;
private LocalDateTime deletiontime; private LocalDateTime deletiontime;
private Long deleteruserid; private Long deleteruserid;
private Long routingHeaderId; private Integer routingHeaderId;
private Long routingDetailId; private Long routingDetailId;
private String materialId; private String materialId;
private String materialType; private String materialType;
......
...@@ -52,6 +52,5 @@ private List<Integer> FinishOrderId ; ...@@ -52,6 +52,5 @@ private List<Integer> FinishOrderId ;
private List<Integer> TargetFinishedOperationId; private List<Integer> TargetFinishedOperationId;
private double delayHours;//延迟时间 private double delayHours;//延迟时间
//物料需求
private List<OrderMaterialRequirement> materialRequirementList;
} }
\ No newline at end of file
...@@ -44,8 +44,10 @@ public class GeneticAlgorithm { ...@@ -44,8 +44,10 @@ public class GeneticAlgorithm {
private SceneService _sceneService; private SceneService _sceneService;
private String sceneId;
public GeneticAlgorithm(GlobalParam globalParam,List<Machine> machines, List<Order> orders, public GeneticAlgorithm(GlobalParam globalParam,List<Machine> machines, List<Order> orders,
List<Material> materials, MachineSchedulerService machineScheduler,List<GroupResult> entryRel,MaterialRequirementService _materialRequirementService,SceneService sceneService) { List<Material> materials, MachineSchedulerService machineScheduler,List<GroupResult> entryRel,MaterialRequirementService _materialRequirementService,SceneService sceneService,String _sceneId) {
this.machines = machines; this.machines = machines;
this.orders = orders; this.orders = orders;
this.materials = materials; this.materials = materials;
...@@ -54,7 +56,7 @@ public class GeneticAlgorithm { ...@@ -54,7 +56,7 @@ public class GeneticAlgorithm {
_entryRel=entryRel; _entryRel=entryRel;
materialRequirementService=_materialRequirementService; materialRequirementService=_materialRequirementService;
_sceneService=sceneService; _sceneService=sceneService;
sceneId=_sceneId;
} }
public void Init(double[] customWeights, boolean pureNSGAIIMode) { public void Init(double[] customWeights, boolean pureNSGAIIMode) {
...@@ -299,19 +301,15 @@ public class GeneticAlgorithm { ...@@ -299,19 +301,15 @@ public class GeneticAlgorithm {
FileHelper.writeLogFile(String.format("排产-----------方案数量---%d-------",0 )); FileHelper.writeLogFile(String.format("排产-----------方案数量---%d-------",0 ));
return population; return population;
} }
population = population.stream()
.collect(Collectors.toMap(
Chromosome::getGeneStr, // key:去重的字段(GeneStr)
u -> u, // value:Chromosome对象
// population = population.stream() (u1, u2) -> u1 // 重复时保留第一个元素
// .collect(Collectors.toMap( ))
// Chromosome::getGeneStr, // key:去重的字段(GeneStr) .values() // 获取去重后的
// u -> u, // value:Chromosome对象 .stream()
// (u1, u2) -> u1 // 重复时保留第一个元素 .collect(Collectors.toList());
// ))
// .values() // 获取去重后的
// .stream()
// .collect(Collectors.toList());
return population; return population;
} }
...@@ -372,7 +370,7 @@ return population; ...@@ -372,7 +370,7 @@ return population;
{ {
FileHelper.writeLogFile("解码---------------"+population.size() ); FileHelper.writeLogFile("解码---------------"+population.size() );
GeneticDecoder decoder = new GeneticDecoder(_GlobalParam, param.getBaseTime(), machines, orders, materials, machineScheduler,orderMaterials); GeneticDecoder decoder = new GeneticDecoder(_GlobalParam, param.getBaseTime(), machines, orders, materials, machineScheduler,materialRequirementService, sceneId);
boolean ismore=true; boolean ismore=true;
if(ismore) { if(ismore) {
CompletableFuture.allOf(population.stream() CompletableFuture.allOf(population.stream()
......
...@@ -47,13 +47,17 @@ public class GeneticDecoder { ...@@ -47,13 +47,17 @@ public class GeneticDecoder {
private GlobalParam _globalParam; private GlobalParam _globalParam;
private MachineCalculator machineCalculator; private MachineCalculator machineCalculator;
private List<OrderMaterialRequirement> orderMaterials; private MaterialRequirementService materialRequirementService;
private DiscreteParameterMatrixService discreteParameterMatrixService; private DiscreteParameterMatrixService discreteParameterMatrixService;
private String sceneId;
public GeneticDecoder(GlobalParam globalParam,LocalDateTime baseTime, List<Machine> machines, List<Order> orders, public GeneticDecoder(GlobalParam globalParam,LocalDateTime baseTime, List<Machine> machines, List<Order> orders,
List<Material> materials, MachineSchedulerService machineScheduler, List<OrderMaterialRequirement> _orderMaterials) { List<Material> materials, MachineSchedulerService machineScheduler, MaterialRequirementService _materialRequirementService,String _sceneId) {
this.baseTime = baseTime; this.baseTime = baseTime;
this.machines = machines; this.machines = machines;
this.orders = orders; this.orders = orders;
...@@ -62,7 +66,8 @@ public class GeneticDecoder { ...@@ -62,7 +66,8 @@ public class GeneticDecoder {
this.machineScheduler = machineScheduler; this.machineScheduler = machineScheduler;
_globalParam=globalParam; _globalParam=globalParam;
machineCalculator=new MachineCalculator(baseTime,machines,machineScheduler); machineCalculator=new MachineCalculator(baseTime,machines,machineScheduler);
orderMaterials=_orderMaterials; materialRequirementService=_materialRequirementService;
sceneId=_sceneId;
// this.orderMaxID = orders.stream().mapToInt(Order::getId).max().orElse(0); // this.orderMaxID = orders.stream().mapToInt(Order::getId).max().orElse(0);
} }
...@@ -71,6 +76,10 @@ public class GeneticDecoder { ...@@ -71,6 +76,10 @@ public class GeneticDecoder {
// FileHelper.writeLogFile("解码-----------开始-------"+chromosome.getID()+":"+cacheKey ); // FileHelper.writeLogFile("解码-----------开始-------"+chromosome.getID()+":"+cacheKey );
_allOperations=chromosome.getAllOperations(); _allOperations=chromosome.getAllOperations();
List<OrderMaterialRequirement> orderMaterials = materialRequirementService.buildMultiLevelRequirementNetwork(sceneId, baseTime);
if(orderMaterials!=null&&orderMaterials.size()>0&&_globalParam.isIsCheckSf()) { if(orderMaterials!=null&&orderMaterials.size()>0&&_globalParam.isIsCheckSf()) {
CreateNewOpSequence(chromosome); CreateNewOpSequence(chromosome);
} }
...@@ -619,6 +628,7 @@ if(finishedOrder==null||finishedOrder.size()==0) ...@@ -619,6 +628,7 @@ if(finishedOrder==null||finishedOrder.size()==0)
private int getOperationBOMTime(Entry currentOp, Chromosome chromosome) { private int getOperationBOMTime(Entry currentOp, Chromosome chromosome) {
List<OrderMaterialRequirement> orderMaterials= chromosome.getOrderMaterials();
if(orderMaterials==null) if(orderMaterials==null)
{ {
return 0; return 0;
......
...@@ -25,6 +25,7 @@ import java.math.BigDecimal; ...@@ -25,6 +25,7 @@ import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -97,54 +98,64 @@ public class MaterialRequirementService { ...@@ -97,54 +98,64 @@ public class MaterialRequirementService {
globalParam=_GlobalParam; globalParam=_GlobalParam;
} }
private Map<String, List<RoutingHeader>> routingHeaderCache = new HashMap<>(); private static final int cachetimeout = 60;
private Map<String, List<Routingsupporting>> routingsupportingCache = new HashMap<>(); private String cacheKey="_MR_";
private Map<String, List<RoutingSupportingReplace>> routingSupportingReplaceCache = new HashMap<>(); private String routingHeaderCacheKey=cacheKey+ "RoutingHeader";
private Map<String, List<RoutingDetail>> allRoutingDetailsCache=new HashMap<>(); private String routingsupportingCacheKey=cacheKey+ "Routingsupporting";
private Map<String, List<RoutingDetailEquip>> allroutingDetailEquipsCache=new HashMap<>(); private String routingSupportingReplaceCacheKey=cacheKey+ "RoutingSupportingReplace";
private Map<String,List<RoutingDetailConnect>> allroutingDetailconnectionsCache=new HashMap<>();
private Map<String, List<RoutingDiscreteParam>> allroutingDiscreteParamsCache=new HashMap<>();
public List<Long> preloadRoutingCache(String sceneId,List<Order> _orders,List<Material> materials,boolean isIsCheckSf) { private String routingDetailCacheKey=cacheKey+ "RoutingDetail";
private String routingDetailEquipCacheKey=cacheKey+ "RoutingDetailEquip";
private String routingDetailConnectCacheKey=cacheKey+ "RoutingDetailConnect";
private String routingDiscreteParamCacheKey=cacheKey+ "RoutingDiscreteParam";
public Map<Integer,Object> preloadRoutingCache(String sceneId,List<Order> _orders,List<Material> materials,boolean isIsCheckSf) {
Map<Integer,Object> reslte=new HashMap<>(2);
reslte.put(1,null);
reslte.put(2,null);
this._materials=materials;
List<Integer> routingIds= _orders.stream() List<Integer> routingIds= _orders.stream()
.filter(t->t.getRoutingId()!=null) .filter(t->t.getRoutingId()!=null)
.map(Order::getRoutingId) .map(Order::getRoutingId)
.distinct() .distinct()
.collect(Collectors.toList()); .collect(Collectors.toList());
List<RoutingHeader> routingHeaders=null;
if (!routingHeaderCache.containsKey(sceneId)) {
LambdaQueryWrapper<RoutingHeader> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<RoutingHeader> wrapper = new LambdaQueryWrapper<>();
wrapper.in(RoutingHeader::getId, routingIds); wrapper.in(RoutingHeader::getId, routingIds);
// .eq(RoutingHeader::getIsDeleted, 0) // .eq(RoutingHeader::getIsDeleted, 0)
// .eq(RoutingHeader::getApprovalStatus, 1); // .eq(RoutingHeader::getApprovalStatus, 1);
List<RoutingHeader> routingHeaders = routingHeaderMapper.selectList(wrapper); routingHeaders = routingHeaderMapper.selectList(wrapper);
routingHeaderCache.put(sceneId, routingHeaders);
}
List<Routingsupporting> routingsupportings=null; List<Routingsupporting> routingsupportings=null;
// 查询并缓存Routingsupporting // 查询并缓存Routingsupporting
if (!routingsupportingCache.containsKey(sceneId)) {
LambdaQueryWrapper<Routingsupporting> routingsupportingwrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<Routingsupporting> routingsupportingwrapper = new LambdaQueryWrapper<>();
routingsupportingwrapper.in(Routingsupporting::getRoutingHeaderId, routingIds) routingsupportingwrapper.in(Routingsupporting::getRoutingHeaderId, routingIds)
.eq(Routingsupporting::getIsdeleted, 0); .eq(Routingsupporting::getIsdeleted, 0);
routingsupportings = routingsupportingMapper.selectList(routingsupportingwrapper); routingsupportings = routingsupportingMapper.selectList(routingsupportingwrapper);
routingsupportingCache.put(sceneId, routingsupportings);
}
// 查询并缓存RoutingSupportingReplace // 查询并缓存RoutingSupportingReplace
List<Routingsupporting> cachedSupportings = routingsupportingCache.get(sceneId); List<RoutingSupportingReplace> replaces=null;
if (cachedSupportings != null && !cachedSupportings.isEmpty()) { if (routingsupportings != null && !routingsupportings.isEmpty()) {
List<String> routingsupportingids = cachedSupportings.stream() List<String> routingsupportingids = routingsupportings.stream()
.map(Routingsupporting::getStrId) .map(Routingsupporting::getStrId)
.distinct() .distinct()
.collect(Collectors.toList()); .collect(Collectors.toList());
if (!routingSupportingReplaceCache.containsKey(sceneId)) {
LambdaQueryWrapper<RoutingSupportingReplace> routingsupportingreplacewrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<RoutingSupportingReplace> routingsupportingreplacewrapper = new LambdaQueryWrapper<>();
routingsupportingreplacewrapper.in(RoutingSupportingReplace::getStrsupid, routingsupportingids) routingsupportingreplacewrapper.in(RoutingSupportingReplace::getStrsupid, routingsupportingids)
.eq(RoutingSupportingReplace::getIsdeleted, 0); .eq(RoutingSupportingReplace::getIsdeleted, 0);
List<RoutingSupportingReplace> replaces = routingSupportingReplaceMapper.selectList(routingsupportingreplacewrapper); replaces = routingSupportingReplaceMapper.selectList(routingsupportingreplacewrapper);
routingSupportingReplaceCache.put(sceneId, replaces);
}
} }
List<Material> useMaterials=new ArrayList<>();
Set<String> useMaterialids=new HashSet<>();
if(routingsupportings!=null&&routingsupportings.size()>0) if(routingsupportings!=null&&routingsupportings.size()>0)
{ {
List<String> materialIds=new ArrayList<>(); List<String> materialIds=new ArrayList<>();
...@@ -164,35 +175,81 @@ public class MaterialRequirementService { ...@@ -164,35 +175,81 @@ public class MaterialRequirementService {
.findFirst() .findFirst()
.orElse(null); .orElse(null);
if (material != null) { if (material != null) {
OrderMaterialRequirement orderMaterial = new OrderMaterialRequirement(); if(!useMaterialids.contains(materialId)) {
orderMaterial.setRoutingDetailId(component.getRoutingDetailId()); useMaterials.add(material);
orderMaterial.setMaterialCode(material.getCode()); useMaterialids.add(materialId);
orderMaterial.setMaterialName(material.getName()); }
orderMaterial.setMaterialTypeName(material.getMaterialTypeName()); // OrderMaterialRequirement orderMaterial = new OrderMaterialRequirement();
orderMaterial.setMaterialId(material.getId()); // orderMaterial.setRoutingDetailId(component.getRoutingDetailId());
materialRequirementList.add(orderMaterial); // orderMaterial.setMaterialCode(material.getCode());
// orderMaterial.setMaterialName(material.getName());
// orderMaterial.setMaterialTypeName(material.getMaterialTypeName());
// orderMaterial.setMaterialId(material.getId());
// materialRequirementList.add(orderMaterial);
if(!material.getMaterialTypeName().equals("MP")&&isIsCheckSf) if(!material.getMaterialTypeName().equals("MP")&&isIsCheckSf)
{ {
materialIds.add(materialId); materialIds.add(materialId);
} }
} }
order.setMaterialRequirementList(materialRequirementList); // order.setMaterialRequirementList(materialRequirementList);
} }
} }
} }
if(replaces!=null&&replaces.size()>0) {
for (RoutingSupportingReplace routingSupportingReplace : replaces) {
String materialID1 = routingSupportingReplace.getMaterialid();
if (!useMaterialids.contains(materialID1)) {
Material material = _materials.stream()
.filter(m -> m.getId().equals(materialID1))
.findFirst()
.orElse(null);
if (material != null) {
useMaterials.add(material);
useMaterialids.add(materialID1);
}
}
}
}
if(materialIds!=null&&materialIds.size()>0) if(materialIds!=null&&materialIds.size()>0)
{ {
List<Long> routingIds1= preloadSfRoutingBomCache(materialIds, headers, routingsupportings, routingsupportingreplaces); Map<Integer,Object> reslte1=preloadSfRoutingBomCache(materialIds, routingHeaders, routingsupportings, replaces);
return preloadSfRoutingCache(sceneId,routingIds1); List<Long> routingIds1=(List<Long>) reslte1.get(1);
if(routingIds1!=null)
{
List<Long> equipids= preloadSfRoutingCache(sceneId,routingIds1);
reslte.put(1,equipids);
}
List<Material> useMaterials1=(List<Material>) reslte1.get(2);
if(useMaterials1!=null) {
for (Material m:useMaterials1) {
String materialID1= m.getId();
if(!useMaterialids.contains(materialID1)) {
useMaterials.add(m);
useMaterialids.add(materialID1);
}
}
}
reslte.put(2,useMaterials);
} }
return null;
} }
return null;
SaveBomCache(sceneId, routingHeaders, routingsupportings, replaces);
return reslte;
} }
private List<Long> preloadSfRoutingBomCache(List<String> materialIDs,List<RoutingHeader> headers,List<Routingsupporting> routingsupportings,List<RoutingSupportingReplace> routingsupportingreplaces) {
private Map<Integer,Object> preloadSfRoutingBomCache(List<String> materialIDs,List<RoutingHeader> headers,List<Routingsupporting> routingsupportings,List<RoutingSupportingReplace> routingsupportingreplaces) {
Map<Integer,Object> reslte=new HashMap<>(2);
reslte.put(1,null);
reslte.put(2,null);
List<Material> useMaterials=new ArrayList<>();
Set<String> useMaterialids=new HashSet<>();
List<Long> routingIds=new ArrayList<>(); List<Long> routingIds=new ArrayList<>();
List<Long> routingIds1=new ArrayList<>(); List<Long> routingIds1=new ArrayList<>();
Long routingId = 0l; Long routingId = 0l;
...@@ -251,21 +308,54 @@ public class MaterialRequirementService { ...@@ -251,21 +308,54 @@ public class MaterialRequirementService {
.filter(m -> m.getId().equals(materialID1)) .filter(m -> m.getId().equals(materialID1))
.findFirst() .findFirst()
.orElse(null); .orElse(null);
if (material != null&&!material.getMaterialTypeName().equals("MP")) { if (material != null) {
materialIds.add(materialID1); if(!useMaterialids.contains(materialID1)) {
useMaterials.add(material);
useMaterialids.add(materialID1);
}
if(!material.getMaterialTypeName().equals("MP")) {
materialIds.add(materialID1);
}
}
}
for (RoutingSupportingReplace routingSupportingReplace:routingsupportingreplaces1) {
String materialID1= routingSupportingReplace.getMaterialid();
if(!useMaterialids.contains(materialID1)) {
Material material = _materials.stream()
.filter(m -> m.getId().equals(materialID1))
.findFirst()
.orElse(null);
if (material != null) {
useMaterials.add(material);
useMaterialids.add(materialID1);
}
} }
} }
List<Long> routingIds2= preloadSfRoutingBomCache(materialIds, headers, routingsupportings, routingsupportingreplaces);
Map<Integer,Object> r1=preloadSfRoutingBomCache(materialIds, headers, routingsupportings, routingsupportingreplaces);
List<Long> routingIds2=(List<Long>) r1.get(1);
List<Material> useMaterials2=( List<Material>) r1.get(2);
if(routingIds2!=null) if(routingIds2!=null)
{ {
routingIds.addAll(routingIds2); routingIds.addAll(routingIds2);
} }
if(useMaterials2!=null&&useMaterials2.size()>0) {
for (Material m:useMaterials2) {
String materialID1= m.getId();
if(!useMaterialids.contains(materialID1)) {
useMaterials.add(m);
useMaterialids.add(materialID1);
}
}
}
} }
if(routingIds1!=null) if(routingIds1!=null)
{ {
routingIds.addAll(routingIds1); routingIds.addAll(routingIds1);
} }
return routingIds; reslte.put(1,routingIds);
reslte.put(2,useMaterials);
return reslte;
} }
...@@ -275,35 +365,37 @@ public class MaterialRequirementService { ...@@ -275,35 +365,37 @@ public class MaterialRequirementService {
List<RoutingDetail> RoutingDetails = null; List<RoutingDetail> RoutingDetails = null;
List<RoutingDetailEquip> routingDetailEquips = null; List<RoutingDetailEquip> routingDetailEquips = null;
List<RoutingDetailConnect> connections = null; List<RoutingDetailConnect> connections = null;
if (routingIds == null || routingIds.size() == 0) { List<RoutingDiscreteParam> routingDiscreteParams=null;
if (routingIds != null || routingIds.size() > 0) {
RoutingDetails = lanuchService.getRoutingDetails(routingIds); RoutingDetails = lanuchService.getRoutingDetails(routingIds);
if (RoutingDetails == null && RoutingDetails.size() == 0) { if (RoutingDetails == null && RoutingDetails.size() == 0) {
return null; return null;
} }
allRoutingDetailsCache.put(sceneId, RoutingDetails);
routingDetailEquips = lanuchService.getRoutingDetailEquip(routingIds); routingDetailEquips = lanuchService.getRoutingDetailEquip(routingIds);
allroutingDetailEquipsCache.put(sceneId, routingDetailEquips);
LambdaQueryWrapper<RoutingDetailConnect> routingDetailConnectwrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<RoutingDetailConnect> routingDetailConnectwrapper = new LambdaQueryWrapper<>();
routingDetailConnectwrapper.in(RoutingDetailConnect::getRoutingHeaderId, routingIds) routingDetailConnectwrapper.in(RoutingDetailConnect::getRoutingHeaderId, routingIds)
.eq(RoutingDetailConnect::getIsdeleted, 0); // 添加 isdeleted=0 过滤条件 .eq(RoutingDetailConnect::getIsdeleted, 0); // 添加 isdeleted=0 过滤条件
connections = routingDetailConnectService.list(routingDetailConnectwrapper); connections = routingDetailConnectService.list(routingDetailConnectwrapper);
allroutingDetailconnectionsCache.put(sceneId, connections);
List<Long> routingDetailIds = RoutingDetails.stream() List<Long> routingDetailIds = RoutingDetails.stream()
.map(RoutingDetail::getId) .map(RoutingDetail::getId)
.distinct() .distinct()
.collect(Collectors.toList()); .collect(Collectors.toList());
List<RoutingDiscreteParam> routingDiscreteParams = _routingDiscreteParamService.lambdaQuery() routingDiscreteParams = _routingDiscreteParamService.lambdaQuery()
.in(RoutingDiscreteParam::getRoutingDetailId, routingDetailIds) .in(RoutingDiscreteParam::getRoutingDetailId, routingDetailIds)
.eq(RoutingDiscreteParam::getIsDeleted, 0) .eq(RoutingDiscreteParam::getIsDeleted, 0)
.list(); .list();
allroutingDiscreteParamsCache.put(sceneId, routingDiscreteParams);
SaveDetailCache(sceneId,RoutingDetails,routingDetailEquips,connections,routingDiscreteParams);
if (routingDetailEquips != null && routingDetailEquips.size() > 0) { if (routingDetailEquips != null && routingDetailEquips.size() > 0) {
...@@ -313,7 +405,6 @@ public class MaterialRequirementService { ...@@ -313,7 +405,6 @@ public class MaterialRequirementService {
.collect(Collectors.toList()); .collect(Collectors.toList());
return equipIds; return equipIds;
} }
} }
return null; return null;
} }
...@@ -323,7 +414,7 @@ public class MaterialRequirementService { ...@@ -323,7 +414,7 @@ public class MaterialRequirementService {
* 构建多级BOM需求网络 * 构建多级BOM需求网络
* @return 所有物料需求列表 * @return 所有物料需求列表
*/ */
public List<OrderMaterialRequirement> buildMultiLevelRequirementNetwork(LocalDateTime _baseTime) { public List<OrderMaterialRequirement> buildMultiLevelRequirementNetwork(String sceneId,LocalDateTime _baseTime) {
baseTime=_baseTime; baseTime=_baseTime;
List<OrderMaterialRequirement> allRequirements = new ArrayList<>(); List<OrderMaterialRequirement> allRequirements = new ArrayList<>();
List<Order> childorders = new ArrayList<>(); List<Order> childorders = new ArrayList<>();
...@@ -334,36 +425,10 @@ public class MaterialRequirementService { ...@@ -334,36 +425,10 @@ public class MaterialRequirementService {
.map(Entry::getRoutingId) .map(Entry::getRoutingId)
.distinct() .distinct()
.collect(Collectors.toList()); .collect(Collectors.toList());
if(routingIds.size()==0) if(routingIds.size()==0)
{
return null;
}
LambdaQueryWrapper<RoutingHeader> wrapper = new LambdaQueryWrapper<>();
wrapper.in(RoutingHeader::getId, routingIds)
.eq(RoutingHeader::getIsDeleted, 0)
.eq(RoutingHeader::getApprovalStatus, 1); // 添加 is_deleted=0 过滤条件
headers = routingHeaderMapper.selectList(wrapper);
LambdaQueryWrapper<Routingsupporting> routingsupportingwrapper = new LambdaQueryWrapper<>();
routingsupportingwrapper.in(Routingsupporting::getRoutingHeaderId, routingIds)
.eq(Routingsupporting::getIsdeleted, 0);
routingsupportings = routingsupportingMapper.selectList(routingsupportingwrapper);
if(routingsupportings==null||routingsupportings.size()==0)
{ {
return null; return null;
} }
List<String> routingsupportingids = routingsupportings.stream()
.map(Routingsupporting::getStrId)
.distinct()
.collect(Collectors.toList());
LambdaQueryWrapper<RoutingSupportingReplace> routingsupportingreplacewrapper = new LambdaQueryWrapper<>();
routingsupportingreplacewrapper.in(RoutingSupportingReplace::getStrsupid, routingsupportingids)
.eq(RoutingSupportingReplace::getIsdeleted, 0);
routingsupportingreplaces = routingSupportingReplaceMapper.selectList(routingsupportingreplacewrapper);
for (Order demand : orders) { for (Order demand : orders) {
...@@ -408,6 +473,7 @@ if(routingIds.size()==0) ...@@ -408,6 +473,7 @@ if(routingIds.size()==0)
public BOMBuildResult buildOrderBOM(int parent, String materialID, String mainorderId, public BOMBuildResult buildOrderBOM(int parent, String materialID, String mainorderId,
String childorderId, double parentQuantity, int level,Order forder,int finishOpertionID) { String childorderId, double parentQuantity, int level,Order forder,int finishOpertionID) {
forder.setCreateBom(true); forder.setCreateBom(true);
RoutingHeader routingHeaders= headers.stream() RoutingHeader routingHeaders= headers.stream()
.filter(t->t.getId()==parent|| t.getMaterialId().equals(materialID)) .filter(t->t.getId()==parent|| t.getMaterialId().equals(materialID))
.findFirst() .findFirst()
...@@ -416,7 +482,7 @@ if(routingIds.size()==0) ...@@ -416,7 +482,7 @@ if(routingIds.size()==0)
// 若未找到产品,返回空结果(根据业务可调整为抛出异常) // 若未找到产品,返回空结果(根据业务可调整为抛出异常)
if (routingHeaders==null) { if (routingHeaders==null) {
return null;
} }
List<OrderMaterialRequirement> materialRequirements = new ArrayList<>(); List<OrderMaterialRequirement> materialRequirements = new ArrayList<>();
...@@ -666,6 +732,7 @@ if(routingIds.size()==0) ...@@ -666,6 +732,7 @@ if(routingIds.size()==0)
List<Order> _childorders = new ArrayList<>(); List<Order> _childorders = new ArrayList<>();
List<Entry> _newEntrys = new ArrayList<>(); List<Entry> _newEntrys = new ArrayList<>();
List<Machine> _newMachines = new ArrayList<>(); List<Machine> _newMachines = new ArrayList<>();
List<Routingsupporting> MaterialRequirements= routingsupportings.stream() List<Routingsupporting> MaterialRequirements= routingsupportings.stream()
.filter(t->t.getRoutingDetailId().equals(operation.getRoutingDetailId())) .filter(t->t.getRoutingDetailId().equals(operation.getRoutingDetailId()))
.collect(Collectors.toList()); .collect(Collectors.toList());
...@@ -673,7 +740,6 @@ if(routingIds.size()==0) ...@@ -673,7 +740,6 @@ if(routingIds.size()==0)
if (MaterialRequirements != null&&MaterialRequirements.size()>0) { if (MaterialRequirements != null&&MaterialRequirements.size()>0) {
for (Routingsupporting component : MaterialRequirements) { for (Routingsupporting component : MaterialRequirements) {
double allneeded = parentQuantity * component.getMainQty().doubleValue(); double allneeded = parentQuantity * component.getMainQty().doubleValue();
double needed = allneeded; double needed = allneeded;
...@@ -890,16 +956,7 @@ if(routingIds.size()==0) ...@@ -890,16 +956,7 @@ if(routingIds.size()==0)
orderMaterial.setOperationId(operation.getId()); orderMaterial.setOperationId(operation.getId());
orderMaterial.setChildOrderId(StringUtils.isBlank(childorderId) ? orderId : childorderId); orderMaterial.setChildOrderId(StringUtils.isBlank(childorderId) ? orderId : childorderId);
orderMaterial.setRequiredQuantity(allneeded); orderMaterial.setRequiredQuantity(allneeded);
if (material == null) {
material = _materials.stream()
.filter(m -> m.getId().equals(materialId))
.findFirst()
.orElse(null);
if (material == null) {
return null;
}
}
double availableNow = material.getCurrentStock(); double availableNow = material.getCurrentStock();
orderMaterial.setMaterialCode(material.getCode()); orderMaterial.setMaterialCode(material.getCode());
orderMaterial.setMaterialName(material.getName()); orderMaterial.setMaterialName(material.getName());
...@@ -954,14 +1011,148 @@ if(routingIds.size()==0) ...@@ -954,14 +1011,148 @@ if(routingIds.size()==0)
orderMaterial.setArrivalTime(earliestTime); orderMaterial.setArrivalTime(earliestTime);
} }
public void clearCache() { private void SaveBomCache(String sceneId,List<RoutingHeader> routingHeaders,List<Routingsupporting> routingsupportings,List<RoutingSupportingReplace> replaces)
routingHeaderCache.clear(); {
routingsupportingCache.clear(); redisUtils.set(sceneId+routingHeaderCacheKey,routingHeaders);
routingSupportingReplaceCache.clear(); GlobalCacheUtil.put(sceneId+routingHeaderCacheKey,routingHeaders, cachetimeout, TimeUnit.MINUTES);
// 清空其他缓存集合(如allRoutingDetails等)
allRoutingDetailsCache.clear(); redisUtils.set(sceneId+routingsupportingCacheKey,routingsupportings);
allroutingDetailEquipsCache.clear(); GlobalCacheUtil.put(sceneId+routingsupportingCacheKey,routingsupportings, cachetimeout, TimeUnit.MINUTES);
allroutingDetailconnectionsCache.clear();
allroutingDiscreteParamsCache.clear(); redisUtils.set(sceneId+routingSupportingReplaceCacheKey,replaces);
GlobalCacheUtil.put(sceneId+routingSupportingReplaceCacheKey,replaces, cachetimeout, TimeUnit.MINUTES);
}
private void SaveDetailCache(String sceneId,List<RoutingDetail> RoutingDetails,List<RoutingDetailEquip> routingDetailEquips,List<RoutingDetailConnect> connections,List<RoutingDiscreteParam> routingDiscreteParams)
{
redisUtils.set(sceneId+routingDetailCacheKey,RoutingDetails);
GlobalCacheUtil.put(sceneId+routingDetailCacheKey,RoutingDetails, cachetimeout, TimeUnit.MINUTES);
redisUtils.set(sceneId+routingDetailEquipCacheKey,routingDetailEquips);
GlobalCacheUtil.put(sceneId+routingDetailEquipCacheKey,routingDetailEquips, cachetimeout, TimeUnit.MINUTES);
redisUtils.set(sceneId+routingDetailConnectCacheKey,connections);
GlobalCacheUtil.put(sceneId+routingDetailConnectCacheKey,connections, cachetimeout, TimeUnit.MINUTES);
redisUtils.set(sceneId+routingDiscreteParamCacheKey,routingDiscreteParams);
GlobalCacheUtil.put(sceneId+routingDiscreteParamCacheKey,routingDiscreteParams, cachetimeout, TimeUnit.MINUTES);
}
private List<RoutingHeader> GetRoutingHeader(String sceneId) {
List<RoutingHeader> RoutingHeaders=(List<RoutingHeader>)GlobalCacheUtil.get(sceneId+routingHeaderCacheKey);
if(RoutingHeaders==null)
{
RoutingHeaders=(List<RoutingHeader>)redisUtils.get(sceneId+routingHeaderCacheKey);
if(RoutingHeaders!=null)
{
GlobalCacheUtil.put(sceneId+routingHeaderCacheKey,RoutingHeaders, cachetimeout, TimeUnit.MINUTES);
}
}
return RoutingHeaders;
}
private List<Routingsupporting> GetRoutingsupportings(String sceneId) {
List<Routingsupporting> Routingsupportings=(List<Routingsupporting>)GlobalCacheUtil.get(sceneId+routingsupportingCacheKey);
if(Routingsupportings==null)
{
Routingsupportings=(List<Routingsupporting>)redisUtils.get(sceneId+routingsupportingCacheKey);
if(Routingsupportings!=null)
{
GlobalCacheUtil.put(sceneId+routingsupportingCacheKey,Routingsupportings, cachetimeout, TimeUnit.MINUTES);
}
}
return Routingsupportings;
}
private List<RoutingSupportingReplace> GetRoutingSupportingReplaces(String sceneId) {
List<RoutingSupportingReplace> RoutingSupportingReplaces=(List<RoutingSupportingReplace>)GlobalCacheUtil.get(sceneId+routingSupportingReplaceCacheKey);
if(RoutingSupportingReplaces==null)
{
RoutingSupportingReplaces=(List<RoutingSupportingReplace>)redisUtils.get(sceneId+routingSupportingReplaceCacheKey);
if(RoutingSupportingReplaces!=null)
{
GlobalCacheUtil.put(sceneId+routingSupportingReplaceCacheKey,RoutingSupportingReplaces, cachetimeout, TimeUnit.MINUTES);
}
}
return RoutingSupportingReplaces;
}
private List<RoutingDetail> GetRoutingDetails(String sceneId) {
List<RoutingDetail> RoutingDetails=(List<RoutingDetail>)GlobalCacheUtil.get(sceneId+routingDetailCacheKey);
if(RoutingDetails==null)
{
RoutingDetails=(List<RoutingDetail>)redisUtils.get(sceneId+routingDetailCacheKey);
if(RoutingDetails!=null)
{
GlobalCacheUtil.put(sceneId+routingDetailCacheKey,RoutingDetails, cachetimeout, TimeUnit.MINUTES);
}
}
return RoutingDetails;
}
private List<RoutingDetailEquip> GetRoutingDetailEquips(String sceneId) {
List<RoutingDetailEquip> RoutingDetailEquips=(List<RoutingDetailEquip>)GlobalCacheUtil.get(sceneId+routingDetailEquipCacheKey);
if(RoutingDetailEquips==null)
{
RoutingDetailEquips=(List<RoutingDetailEquip>)redisUtils.get(sceneId+routingDetailEquipCacheKey);
if(RoutingDetailEquips!=null)
{
GlobalCacheUtil.put(sceneId+routingDetailEquipCacheKey,RoutingDetailEquips, cachetimeout, TimeUnit.MINUTES);
}
}
return RoutingDetailEquips;
}
private List<RoutingDetailConnect> GetRoutingDetailConnect(String sceneId) {
List<RoutingDetailConnect> RoutingDetailConnects=(List<RoutingDetailConnect>)GlobalCacheUtil.get(sceneId+routingDetailConnectCacheKey);
if(RoutingDetailConnects==null)
{
RoutingDetailConnects=(List<RoutingDetailConnect>)redisUtils.get(sceneId+routingDetailConnectCacheKey);
if(RoutingDetailConnects!=null)
{
GlobalCacheUtil.put(sceneId+routingDetailConnectCacheKey,RoutingDetailConnects, cachetimeout, TimeUnit.MINUTES);
}
}
return RoutingDetailConnects;
}
private List<RoutingDiscreteParam> GetRoutingDiscreteParam(String sceneId) {
List<RoutingDiscreteParam> RoutingDiscreteParams=(List<RoutingDiscreteParam>)GlobalCacheUtil.get(sceneId+routingDiscreteParamCacheKey);
if(RoutingDiscreteParams==null)
{
RoutingDiscreteParams=(List<RoutingDiscreteParam>)redisUtils.get(sceneId+routingDiscreteParamCacheKey);
if(RoutingDiscreteParams!=null)
{
GlobalCacheUtil.put(sceneId+routingDiscreteParamCacheKey,RoutingDiscreteParams, cachetimeout, TimeUnit.MINUTES);
}
}
return RoutingDiscreteParams;
}
public void clearCache(String sceneId) {
redisUtils.del(sceneId+routingHeaderCacheKey);
GlobalCacheUtil.remove(sceneId+routingHeaderCacheKey);
redisUtils.del(sceneId+routingsupportingCacheKey);
GlobalCacheUtil.remove(sceneId+routingsupportingCacheKey);
redisUtils.del(sceneId+routingSupportingReplaceCacheKey);
GlobalCacheUtil.remove(sceneId+routingSupportingReplaceCacheKey);
redisUtils.del(sceneId+routingDetailCacheKey);
GlobalCacheUtil.remove(sceneId+routingDetailCacheKey);
redisUtils.del(sceneId+routingDetailEquipCacheKey);
GlobalCacheUtil.remove(sceneId+routingDetailEquipCacheKey);
redisUtils.del(sceneId+routingDetailConnectCacheKey);
GlobalCacheUtil.remove(sceneId+routingDetailConnectCacheKey);
redisUtils.del(sceneId+routingDiscreteParamCacheKey);
GlobalCacheUtil.remove(sceneId+routingDiscreteParamCacheKey);
} }
} }
...@@ -1181,7 +1181,7 @@ if(targetOp.getSequence()>1) { ...@@ -1181,7 +1181,7 @@ if(targetOp.getSequence()>1) {
chromosome.setMachines(ProductionDeepCopyUtil.deepCopyList(chromosome.getInitMachines(),Machine.class) ); chromosome.setMachines(ProductionDeepCopyUtil.deepCopyList(chromosome.getInitMachines(),Machine.class) );
GeneticDecoder decoder = new GeneticDecoder(globalParam,baseTime, chromosome.getMachines(), GeneticDecoder decoder = new GeneticDecoder(globalParam,baseTime, chromosome.getMachines(),
chromosome.getOrders(), null, machineScheduler,chromosome.getOrderMaterials()); chromosome.getOrders(), null, machineScheduler,null,chromosome.getScenarioID());
chromosome.setResultOld(ProductionDeepCopyUtil.deepCopyList(chromosome.getResult(),GAScheduleResult.class)); chromosome.setResultOld(ProductionDeepCopyUtil.deepCopyList(chromosome.getResult(),GAScheduleResult.class));
chromosome.getResult().clear(); chromosome.getResult().clear();
......
...@@ -128,124 +128,8 @@ public class PlanResultService { ...@@ -128,124 +128,8 @@ public class PlanResultService {
public Chromosome execute1() {
try {
//List<ScheduleResultDetail> details=new ArrayList<>();
// ScheduleResultDetail detail1=new ScheduleResultDetail();
//
// detail1.setOneTime(100);//单件工时
//
//
// ScheduleResultDetail detail2=new ScheduleResultDetail();
//
// detail2.setOneTime(200);//单件工时
// details.add(detail1);
// details.add(detail2);
// mergeSegmentsWithDifferentOneTime(details, 50);
// 1. 读取数据
List<Machine> machines = loadData("machines.json", Machine.class);
List<Product> products = loadData("products.json", Product.class);
List<Order> orders = loadData("orders.json", Order.class);
// 设置机器信息到班次中
for (Machine machine : machines) {
if (machine.getShifts() != null) {
for (Shift shift : machine.getShifts()) {
shift.setMachineId(machine.getId());
shift.setMachineName(machine.getName());
}
}
// 调试:打印机器和班次信息
System.out.println("Machine: " + machine.getId() + ", Name: " + machine.getName());
if (machine.getShifts() != null) {
for (Shift shift : machine.getShifts()) {
System.out.println(" Shift: " + shift.getStartTime() + " - " + shift.getEndTime() +
", Status: " + shift.getStatus() +
", MachineId: " + shift.getMachineId() +
", MachineName: " + shift.getMachineName());
}
}
}
ScheduleParams param = new ScheduleParams();
param.setBaseTime(LocalDateTime.of(2025, 11, 1, 0, 0, 0));
// List<MesHoliday> holidays= _MesHolidayService.list();
// 创建节假日
// 将节假日添加到所有设备中
// addHolidaysToAllMachines(machines);
// 3. 创建调度服务
MachineSchedulerService machineScheduler = new MachineSchedulerService(
param.getBaseTime());
// 4. 初始化机器时间线
for (Machine machine : machines) {
MachineTimeline timeline = machineScheduler.getOrCreateTimeline(machine);
machine.setAvailability(timeline.getSegments());
}
// 3. 构建订单-工序数据
List<Entry> allOperations = new ArrayList<>();
Random rnd = new Random(); // 注意:此处变量声明但未使用,可根据实际需求保留或移除
int id = 1;
for (Order order : orders) {
order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
// 假设products是一个List<Product>,根据Product的Id查找对应的产品
Product product = products.stream()
.filter(p -> p.getId() == order.getProductId())
.findFirst()
.orElseThrow(() -> new IllegalArgumentException("未找到对应产品: " + order.getProductId()));
int sequence = 1;
for (Operation o : product.getOperations()) { // 假设Product类有getOperations()方法返回工序列表
Entry entry = new Entry();
entry.setId(id);
// entry.setGroupId(order.getId());
entry.setSequence(sequence);
entry.setMachineOptions(o.getMachineOptions()); // 假设Operation类有获取机器选项的方法
entry.setPriority(order.getPriority());
entry.setQuantity(order.getQuantity());
// entry.setMaterialRequirements(o.getMaterialRequirements()); // 假设Operation类有获取物料需求的方法
if (sequence != 1) {
OperationDependency od=new OperationDependency();
od.setPrevOperationId(id - 1);
entry.getPrevEntryIds().add(od); // 假设Entry类有getPrevEntryIds()返回List<Integer>
}
allOperations.add(entry);
sequence++;
id++;
}
}
GlobalParam globalParam=new GlobalParam();
// 5. 执行调度算法
param.initAdaptiveParams(allOperations.size());
GeneticAlgorithm scheduler =new GeneticAlgorithm(globalParam,machines,orders,null,machineScheduler,null,materialRequirementService,_sceneService); //new GeneticAlgorithm(products, machines, orders, machineScheduler);
Chromosome Chromosomes =scheduler.Run(param,allOperations);
WriteScheduleSummary(Chromosomes);
ScheduleOperationService ScheduleOperation=new ScheduleOperationService();
LocalDateTime ds= LocalDateTime.of(2025, 12, 7, 23, 59);
// ScheduleOperation.moveOperation(Chromosomes,3, (int)ChronoUnit.SECONDS.between(param.getBaseTime(), ds),(Long)2,param.getBaseTime(), globalParam);
WriteScheduleSummary(Chromosomes);
return Chromosomes;
} catch (Exception e) {
throw new RuntimeException("调度执行失败", e);
}
}
public Chromosome execute2(String SceneId) { public Chromosome execute2(String SceneId) {
try { try {
...@@ -284,14 +168,14 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0)); ...@@ -284,14 +168,14 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
List<GroupResult> entryRel=(List<GroupResult>)list.get(2); List<GroupResult> entryRel=(List<GroupResult>)list.get(2);
Map<Long,Double> machineIds=(Map<Long,Double>)list.get(3); Map<Long,Double> machineIds=(Map<Long,Double>)list.get(3);
Map<Integer,Object> reslte=materialRequirementService.preloadRoutingCache(SceneId,orders,Materials,globalParam.isIsCheckSf());
List<Long> equipIDs=(List<Long>) reslte.get(1);
// List<Long> equipIDs= materialRequirementService.preloadRoutingCache(SceneId,orders,Materials,globalParam.isIsCheckSf()); List<Long> machineIds1=machineIds.keySet().stream().collect(Collectors.toList());
if(equipIDs!=null&&equipIDs.size()>0)
Set machineIds1=machineIds.keySet(); {
// if(equipIDs!=null&&equipIDs.size()>0) machineIds1.addAll(equipIDs);
// { }
// machineIds1.addAll(equipIDs);
// }
machines= machines.stream().filter(t->machineIds1.contains(t.getId())).collect(Collectors.toList()); machines= machines.stream().filter(t->machineIds1.contains(t.getId())).collect(Collectors.toList());
...@@ -313,7 +197,7 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0)); ...@@ -313,7 +197,7 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
// 5. 执行调度算法 // 5. 执行调度算法
GeneticAlgorithm scheduler =new GeneticAlgorithm(globalParam,machines,orders,Materials,machineScheduler,entryRel,materialRequirementService,_sceneService); //new GeneticAlgorithm(products, machines, orders, machineScheduler); GeneticAlgorithm scheduler =new GeneticAlgorithm(globalParam,machines,orders,Materials,machineScheduler,entryRel,materialRequirementService,_sceneService,SceneId); //new GeneticAlgorithm(products, machines, orders, machineScheduler);
param.initAdaptiveParams(entrys.size()); param.initAdaptiveParams(entrys.size());
double[] customWeights = new double[] { 0.4, 0.1, 0.1, 0.1, 0.3 }; // 延迟时间权重提升到0.5 double[] customWeights = new double[] { 0.4, 0.1, 0.1, 0.1, 0.3 }; // 延迟时间权重提升到0.5
//完工时间、总流程时间、总换型时间、机器负载标准差、延迟时间 //完工时间、总流程时间、总换型时间、机器负载标准差、延迟时间
...@@ -866,7 +750,7 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0)); ...@@ -866,7 +750,7 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
machines= machines.stream().filter(t->machineIds.contains(t.getId())).collect(Collectors.toList()); machines= machines.stream().filter(t->machineIds.contains(t.getId())).collect(Collectors.toList());
// 5. 执行调度算法 // 5. 执行调度算法
GeneticAlgorithm scheduler =new GeneticAlgorithm(globalParam,machines,orders,Materials,machineScheduler,entryRel,materialRequirementService,_sceneService); //new GeneticAlgorithm(products, machines, orders, machineScheduler); GeneticAlgorithm scheduler =new GeneticAlgorithm(globalParam,machines,orders,Materials,machineScheduler,entryRel,materialRequirementService,_sceneService,SceneId); //new GeneticAlgorithm(products, machines, orders, machineScheduler);
param.initAdaptiveParams(entrys.size()); param.initAdaptiveParams(entrys.size());
double[] customWeights = new double[] { 0.4, 0.1, 0.1, 0.1, 0.3 }; // 延迟时间权重提升到0.5 double[] customWeights = new double[] { 0.4, 0.1, 0.1, 0.1, 0.3 }; // 延迟时间权重提升到0.5
//完工时间、总流程时间、总换型时间、机器负载标准差、延迟时间 //完工时间、总流程时间、总换型时间、机器负载标准差、延迟时间
......
...@@ -37,7 +37,7 @@ public class PlanResultServiceTest { ...@@ -37,7 +37,7 @@ public class PlanResultServiceTest {
// NSGAIIUtils nsgaiiUtils=new NSGAIIUtils(); // NSGAIIUtils nsgaiiUtils=new NSGAIIUtils();
// nsgaiiUtils.Test(); // nsgaiiUtils.Test();
planResultService.execute2("0DCB1301C57C48B68154789B0FAB8B98"); planResultService.execute2("83D729F5E0694F25A71614B1991D7457");
// planResultService.execute2("726D4C1A712B4B1393175BD44B775B66"); // planResultService.execute2("726D4C1A712B4B1393175BD44B775B66");
// planResultService.execute2("265F24B6DF3C40E4B17D193B0CC8AAF2"); // planResultService.execute2("265F24B6DF3C40E4B17D193B0CC8AAF2");
// LocalDateTime t= LocalDateTime.of(2026, 02, 14, 1, 25, 52); // LocalDateTime t= LocalDateTime.of(2026, 02, 14, 1, 25, 52);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment