Commit b8789253 authored by Tong Li's avatar Tong Li

Merge remote-tracking branch 'origin/tl'

parents 5abf2c44 485980ba
package com.aps.entity.Algorithm; package com.aps.entity.Algorithm;
import com.aps.common.util.FileHelper;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
......
...@@ -24,9 +24,14 @@ public class GlobalParam { ...@@ -24,9 +24,14 @@ public class GlobalParam {
private boolean IsUseCalendar = true; private boolean IsUseCalendar = true;
/// <summary> /// <summary>
/// 是否启动设备日历 /// 是否启动原材料约束
/// </summary>
private boolean IsCheckMp = true;
/// <summary>
/// 是否启动半成品约束
/// </summary> /// </summary>
private boolean IsCheckBom = true; private boolean IsCheckSf = true;
/// <summary> /// <summary>
/// 是否重叠 /// 是否重叠
......
...@@ -62,8 +62,8 @@ public class GeneticAlgorithm { ...@@ -62,8 +62,8 @@ public class GeneticAlgorithm {
} }
public Chromosome Run(ScheduleParams param, List<Entry> allOperations) { public Chromosome Run(ScheduleParams param, List<Entry> allOperations) {
if(_GlobalParam.isIsCheckBom()&&materials!=null&&materials.size()>0) { if(materials!=null&&materials.size()>0) {
materialRequirementService.init(materials, orders, allOperations, _entryRel, machineScheduler, machines); materialRequirementService.init(materials, orders, allOperations, _entryRel, machineScheduler, machines,_GlobalParam);
orderMaterials = materialRequirementService.buildMultiLevelRequirementNetwork(param.getBaseTime()); orderMaterials = materialRequirementService.buildMultiLevelRequirementNetwork(param.getBaseTime());
} }
......
...@@ -63,7 +63,7 @@ public class GeneticDecoder { ...@@ -63,7 +63,7 @@ public class GeneticDecoder {
FileHelper.writeLogFile("解码-----------开始-------"+chromosome.getID()+":"+cacheKey ); FileHelper.writeLogFile("解码-----------开始-------"+chromosome.getID()+":"+cacheKey );
_allOperations=chromosome.getAllOperations(); _allOperations=chromosome.getAllOperations();
if(_globalParam.isIsCheckBom()&&orderMaterials!=null&&orderMaterials.size()>0) { if(orderMaterials!=null&&orderMaterials.size()>0) {
CreateNewOpSequence(chromosome); CreateNewOpSequence(chromosome);
} }
...@@ -128,7 +128,10 @@ public class GeneticDecoder { ...@@ -128,7 +128,10 @@ public class GeneticDecoder {
.distinct() .distinct()
.collect(Collectors.toList()); .collect(Collectors.toList());
if(finishedOrder==null||finishedOrder.size()==0)
{
return;
}
List<Integer> oldSequence=chromosome.getOperationSequencing(); List<Integer> oldSequence=chromosome.getOperationSequencing();
List<Integer> finalSequence = new ArrayList<>(); List<Integer> finalSequence = new ArrayList<>();
...@@ -577,7 +580,7 @@ public class GeneticDecoder { ...@@ -577,7 +580,7 @@ public class GeneticDecoder {
private int getOperationBOMTime(Entry currentOp, Chromosome chromosome) { private int getOperationBOMTime(Entry currentOp, Chromosome chromosome) {
if(!_globalParam.isIsCheckBom()||orderMaterials==null) if(orderMaterials==null)
{ {
return 0; return 0;
} }
...@@ -588,13 +591,15 @@ public class GeneticDecoder { ...@@ -588,13 +591,15 @@ public class GeneticDecoder {
int rawTime = 0, sfTime = 0; int rawTime = 0, sfTime = 0;
if (opboms != null && !opboms.isEmpty()) { if (opboms != null && !opboms.isEmpty()) {
// 计算RawTime // 计算RawTime
if(_globalParam.isIsCheckMp()) {
Optional<LocalDateTime> rawDateOpt = opboms.stream() Optional<LocalDateTime> rawDateOpt = opboms.stream()
.filter(t -> t.getMaterialTypeName().equals("MP") ) .filter(t -> t.getMaterialTypeName().equals("MP"))
.map(OrderMaterialRequirement::getUseTime) .map(OrderMaterialRequirement::getUseTime)
.max(LocalDateTime::compareTo); .max(LocalDateTime::compareTo);
if (rawDateOpt.isPresent()) { if (rawDateOpt.isPresent()) {
rawTime = (int) Duration.between(baseTime, rawDateOpt.get()).getSeconds(); rawTime = (int) Duration.between(baseTime, rawDateOpt.get()).getSeconds();
} }
}
// 计算SFTime // 计算SFTime
List<OrderMaterialRequirement> sfBoms = opboms.stream() List<OrderMaterialRequirement> sfBoms = opboms.stream()
...@@ -602,7 +607,7 @@ public class GeneticDecoder { ...@@ -602,7 +607,7 @@ public class GeneticDecoder {
&& t.getProductOrderID() != null && !t.getProductOrderID().isEmpty()) && t.getProductOrderID() != null && !t.getProductOrderID().isEmpty())
.collect(Collectors.toList()); .collect(Collectors.toList());
if (!sfBoms.isEmpty()) { if (!sfBoms.isEmpty()&&sfBoms.size()>0) {
for (OrderMaterialRequirement sf : sfBoms) { for (OrderMaterialRequirement sf : sfBoms) {
for (int orderid : sf.getProductOrderID()) { for (int orderid : sf.getProductOrderID()) {
int sfTime1 = 0; int sfTime1 = 0;
......
...@@ -78,7 +78,11 @@ public class MaterialRequirementService { ...@@ -78,7 +78,11 @@ public class MaterialRequirementService {
private MachineSchedulerService machineScheduler; private MachineSchedulerService machineScheduler;
public void init(List<Material> materials,List<Order> _orders,List<Entry> allOperations,List<GroupResult> entryRel,MachineSchedulerService _machineScheduler,List<Machine> machines)
private GlobalParam globalParam;
public void init(List<Material> materials,List<Order> _orders,List<Entry> allOperations,List<GroupResult> entryRel,MachineSchedulerService _machineScheduler,List<Machine> machines,GlobalParam _GlobalParam)
{ {
orders = _orders; orders = _orders;
...@@ -87,6 +91,7 @@ public class MaterialRequirementService { ...@@ -87,6 +91,7 @@ public class MaterialRequirementService {
_entryRel=entryRel; _entryRel=entryRel;
machineScheduler=_machineScheduler; machineScheduler=_machineScheduler;
_Machines=machines; _Machines=machines;
globalParam=_GlobalParam;
} }
/** /**
...@@ -356,7 +361,7 @@ if(routingIds.size()==0) ...@@ -356,7 +361,7 @@ if(routingIds.size()==0)
Map<Integer, Object> list=_routingDataService.CreateEntry( sceneId, ProdEquipmentList, ProdLaunchOrders, routingDiscreteParams, ProdOrderProcesslist, processExecList,_entryRel ); Map<Integer, Object> list=_routingDataService.CreateEntry( sceneId, ProdEquipmentList, ProdLaunchOrders, routingDiscreteParams, ProdOrderProcesslist, processExecList,_entryRel );
List<Machine> machines= _routingDataService.InitCalendarToAllMachines(sceneId,ProdEquipmentList,machineScheduler); List<Machine> machines= _routingDataService.InitCalendarToAllMachines(sceneId,ProdEquipmentList,machineScheduler, globalParam.isIsUseCalendar());
if(list.get(1)!=null) if(list.get(1)!=null)
...@@ -536,6 +541,7 @@ if(routingIds.size()==0) ...@@ -536,6 +541,7 @@ if(routingIds.size()==0)
if (order.getFinishOrderId().size() == 1) { if (order.getFinishOrderId().size() == 1) {
// 递归构建BOM // 递归构建BOM
int l = level + 1; int l = level + 1;
BOMBuildResult childResult = buildOrderBOM(0, material.getId(), BOMBuildResult childResult = buildOrderBOM(0, material.getId(),
orderId, order.getOrderId(), orderId, order.getOrderId(),
order.getQuantity(), l,order); order.getQuantity(), l,order);
...@@ -556,7 +562,7 @@ if(routingIds.size()==0) ...@@ -556,7 +562,7 @@ if(routingIds.size()==0)
orderMaterial.setYpQty(allneeded - needed); orderMaterial.setYpQty(allneeded - needed);
orderMaterial.setQjQty(needed); orderMaterial.setQjQty(needed);
if (needed > 0) { if (needed > 0&&globalParam.isIsCheckSf()) {
// 创建新的子订单 // 创建新的子订单
Order childorder = new Order(); Order childorder = new Order();
String OrderId = UUID.randomUUID().toString().replace("-", ""); String OrderId = UUID.randomUUID().toString().replace("-", "");
......
...@@ -14,6 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -14,6 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -236,7 +237,7 @@ public class RoutingDataService { ...@@ -236,7 +237,7 @@ public class RoutingDataService {
} }
public List<Machine> InitCalendarToAllMachines(String SceneId, List<ProdEquipment> ProdEquipments, MachineSchedulerService machineScheduler) { public List<Machine> InitCalendarToAllMachines(String SceneId, List<ProdEquipment> ProdEquipments, MachineSchedulerService machineScheduler,boolean IsUseCalendar) {
// 按设备分组 // 按设备分组
List<Long> MachineIds = ProdEquipments.stream() List<Long> MachineIds = ProdEquipments.stream()
...@@ -245,30 +246,27 @@ public class RoutingDataService { ...@@ -245,30 +246,27 @@ public class RoutingDataService {
.sorted() .sorted()
.collect(Collectors.toList()); .collect(Collectors.toList());
List<Machine> machines=new ArrayList<>(); List<Machine> machines = new ArrayList<>();
List<PlanResource> PlanResources= _PlanResourceService.lambdaQuery() List<PlanResource> PlanResources = _PlanResourceService.lambdaQuery()
.eq(PlanResource::getIsdeleted,0) .eq(PlanResource::getIsdeleted, 0)
.list(); .list();
for (Long id : MachineIds) { for (Long id : MachineIds) {
Machine machine=new Machine(); Machine machine = new Machine();
machine.setId(id); machine.setId(id);
machines.add(machine); machines.add(machine);
} }
//节假日 //节假日
// List<MesHoliday> holidays= _MesHolidayService.list(); // List<MesHoliday> holidays= _MesHolidayService.list();
if (IsUseCalendar) {
LambdaQueryWrapper<ProdEquipSpecialCal> ProdEquipSpecialCalWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<ProdEquipSpecialCal> ProdEquipSpecialCalWrapper = new LambdaQueryWrapper<>();
ProdEquipSpecialCalWrapper.eq(ProdEquipSpecialCal::getSceneId, SceneId); ProdEquipSpecialCalWrapper.eq(ProdEquipSpecialCal::getSceneId, SceneId);
List<ProdEquipSpecialCal> ProdEquipSpecialCals = _prodEquipSpecialCalService.list(ProdEquipSpecialCalWrapper);
List<MesShiftWorkSched> MesShiftWorkScheds = _MesShiftWorkSchedService.lambdaQuery()
.eq(MesShiftWorkSched::getIsdeleted, 0).list();
List<ProdEquipSpecialCal> ProdEquipSpecialCals= _prodEquipSpecialCalService.list(ProdEquipSpecialCalWrapper);
List<MesShiftWorkSched> MesShiftWorkScheds= _MesShiftWorkSchedService.lambdaQuery()
.eq(MesShiftWorkSched::getIsdeleted,0).list();
if (machines == null) { if (machines == null) {
...@@ -281,9 +279,9 @@ public class RoutingDataService { ...@@ -281,9 +279,9 @@ public class RoutingDataService {
machine.setMaintenanceWindows(new ArrayList<>()); machine.setMaintenanceWindows(new ArrayList<>());
} }
List<ProdEquipSpecialCal> machineProdEquipSpecialCals = ProdEquipSpecialCals.stream() List<ProdEquipSpecialCal> machineProdEquipSpecialCals = ProdEquipSpecialCals.stream()
.filter(t ->t.getPlanResourceId()!=null&& t.getPlanResourceId() == machine.getId()&&t.getReferenceType()==1) .filter(t -> t.getPlanResourceId() != null && t.getPlanResourceId() == machine.getId() && t.getReferenceType() == 1)
.collect(Collectors.toList()); .collect(Collectors.toList());
List<Shift> shifts1=new ArrayList<>(); List<Shift> shifts1 = new ArrayList<>();
for (ProdEquipSpecialCal machineProdEquipSpecialCal : machineProdEquipSpecialCals) { for (ProdEquipSpecialCal machineProdEquipSpecialCal : machineProdEquipSpecialCals) {
List<MesShiftWorkSched> ShiftWorkScheds = MesShiftWorkScheds.stream() List<MesShiftWorkSched> ShiftWorkScheds = MesShiftWorkScheds.stream()
...@@ -301,8 +299,7 @@ public class RoutingDataService { ...@@ -301,8 +299,7 @@ public class RoutingDataService {
PlanResource PlanResource = PlanResources.stream() PlanResource PlanResource = PlanResources.stream()
.filter(t -> t.getId() == machine.getId()) .filter(t -> t.getId() == machine.getId())
.findFirst().orElse(null); .findFirst().orElse(null);
if(PlanResource!=null) if (PlanResource != null) {
{
machine.setCode(PlanResource.getCode()); machine.setCode(PlanResource.getCode());
machine.setName(PlanResource.getTitle()); machine.setName(PlanResource.getTitle());
List<MesShiftWorkSched> ShiftWorkScheds = MesShiftWorkScheds.stream() List<MesShiftWorkSched> ShiftWorkScheds = MesShiftWorkScheds.stream()
...@@ -312,28 +309,28 @@ public class RoutingDataService { ...@@ -312,28 +309,28 @@ public class RoutingDataService {
for (Shift shift : Shifts) { for (Shift shift : Shifts) {
shift.setMachineId(machine.getId()); shift.setMachineId(machine.getId());
shift.setStartDate(LocalDateTime.of(2000, 1, 1, 0, 0, 0)); shift.setStartDate(LocalDateTime.of(2000, 1, 1, 0, 0, 0));
shift.setEndDate(LocalDateTime.of(2000, 1, 1, 0, 0, 0)); shift.setEndDate(LocalDateTime.of(2000, 1, 1, 0, 0, 0));
shifts1.add(shift); shifts1.add(shift);
} }
}else { } else {
machine.setCode(Long.toString(machine.getId()) ); machine.setCode(Long.toString(machine.getId()));
} }
if(shifts1==null||shifts1.size()==0) if (shifts1 == null || shifts1.size() == 0) {
{ throw new RuntimeException(String.format("设备%s没有工作日历", machine.getCode().concat("_").concat(machine.getName())));
throw new RuntimeException(String.format("设备%s没有工作日历",machine.getCode().concat("_").concat(machine.getName())) );
} }
machine.setShifts(shifts1); machine.setShifts(shifts1);
List<ProdEquipSpecialCal> Holidays = ProdEquipSpecialCals.stream() List<ProdEquipSpecialCal> Holidays = ProdEquipSpecialCals.stream()
.filter(t -> t.getEquipId() == machine.getId()&&t.getReferenceType()==2) .filter(t -> t.getEquipId() == machine.getId() && t.getReferenceType() == 2)
.collect(Collectors.toList()); .collect(Collectors.toList());
List<Holiday> Holidays1=new ArrayList<>(); List<Holiday> Holidays1 = new ArrayList<>();
for (ProdEquipSpecialCal machineProdEquipSpecialCal : Holidays) { for (ProdEquipSpecialCal machineProdEquipSpecialCal : Holidays) {
Holiday holiday=new Holiday(); Holiday holiday = new Holiday();
holiday.setStart(machineProdEquipSpecialCal.getStartDate()); holiday.setStart(machineProdEquipSpecialCal.getStartDate());
holiday.setEnd(machineProdEquipSpecialCal.getEndDate()); holiday.setEnd(machineProdEquipSpecialCal.getEndDate());
Holidays1.add(holiday); Holidays1.add(holiday);
...@@ -341,9 +338,29 @@ public class RoutingDataService { ...@@ -341,9 +338,29 @@ public class RoutingDataService {
machine.setHolidays(Holidays1); machine.setHolidays(Holidays1);
} }
} else {
for (Machine machine : machines) {
List<Shift> shifts1 = new ArrayList<>();
Shift shift=new Shift();
shift.setMachineId(machine.getId());
shift.setStartTime(LocalTime.of(0,0,0));
shift.setEndTime(LocalTime.of(23,59,59));
HashSet days= new HashSet<>();
days.add(1);
days.add(2);
days.add(3);
days.add(4);
days.add(5);
days.add(6);
days.add(0);
shift.setDays(days);
shift.setStartDate(LocalDateTime.of(2000, 1, 1, 0, 0, 0));
shift.setEndDate(LocalDateTime.of(2000, 1, 1, 0, 0, 0));
shifts1.add(shift);
machine.setShifts(shifts1);
}
}
// 4. 初始化机器时间线 // 4. 初始化机器时间线
for (Machine machine : machines) { for (Machine machine : machines) {
...@@ -366,11 +383,14 @@ public class RoutingDataService { ...@@ -366,11 +383,14 @@ public class RoutingDataService {
for (MesShiftWorkSched data : originalList) { for (MesShiftWorkSched data : originalList) {
// 用shiftStart+shiftEnd作为分组key // 用shiftStart+shiftEnd作为分组key
String groupKey = data.getShiftStart().toString() + "_" + data.getShiftEnd().toString(); String groupKey = data.getShiftStart().toString() + "_" + data.getShiftEnd().toString();
// 将中文的星期几转换为英文格式(周日是0,周一到周日依次为0-6)
// 假设数据库中startWeekDay是1-7(周一到周日),需要转换为0-6(周日到周六)
int engDay = (data.getStartWeekDay() % 7); // 将1-7转换为0-6,其中周日为0
if (groupMap.containsKey(groupKey)) { if (groupMap.containsKey(groupKey)) {
// 已存在分组:添加serialNumber到列表 // 已存在分组:添加serialNumber到列表
Shift merged = groupMap.get(groupKey); Shift merged = groupMap.get(groupKey);
merged.getDays().add(data.getStartWeekDay()); merged.getDays().add(engDay);
} else { } else {
// 新分组:创建MergedShiftData并初始化 // 新分组:创建MergedShiftData并初始化
Shift merged = new Shift(); Shift merged = new Shift();
...@@ -381,7 +401,7 @@ public class RoutingDataService { ...@@ -381,7 +401,7 @@ public class RoutingDataService {
// 初始化序号列表 // 初始化序号列表
Set<Integer> serials =new HashSet<>(); Set<Integer> serials =new HashSet<>();
serials.add(data.getStartWeekDay()); serials.add(engDay);
merged.setDays(serials); merged.setDays(serials);
groupMap.put(groupKey, merged); groupMap.put(groupKey, merged);
} }
......
...@@ -79,6 +79,9 @@ public class PlanResultService { ...@@ -79,6 +79,9 @@ public class PlanResultService {
@Autowired @Autowired
private ConfigMapper configMapper; private ConfigMapper configMapper;
@Autowired
private ApsTimeConfigMapper apsTimeConfigMapper;
@Autowired @Autowired
private RedisUtils redisUtils; private RedisUtils redisUtils;
...@@ -301,9 +304,7 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0)); ...@@ -301,9 +304,7 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
try { try {
ScheduleParams param = new ScheduleParams(); ScheduleParams param = InitScheduleParams();
param.setBaseTime(LocalDateTime.of(2025, 11, 1, 0, 0, 0));
// 1. 读取数据 // 1. 读取数据
...@@ -318,10 +319,11 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0)); ...@@ -318,10 +319,11 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
List<ProdLaunchOrder> ProdLaunchOrders= _prodLaunchOrderService.lambdaQuery() List<ProdLaunchOrder> ProdLaunchOrders= _prodLaunchOrderService.lambdaQuery()
.eq(ProdLaunchOrder::getSceneId,SceneId) .eq(ProdLaunchOrder::getSceneId,SceneId)
.list(); .list();
GlobalParam globalParam=InitGlobalParam();
// 3. 创建调度服务 // 3. 创建调度服务
MachineSchedulerService machineScheduler = new MachineSchedulerService( MachineSchedulerService machineScheduler = new MachineSchedulerService(
param.getBaseTime()); param.getBaseTime());
List<Machine> machines= InitCalendarToAllMachines(SceneId, ProdEquipments,machineScheduler); List<Machine> machines= InitCalendarToAllMachines(SceneId, ProdEquipments,machineScheduler,globalParam.isIsUseCalendar());
// 3. 构建订单-工序数据 // 3. 构建订单-工序数据
List<Order> orders=InitOrder(ProdLaunchOrders); List<Order> orders=InitOrder(ProdLaunchOrders);
...@@ -331,15 +333,9 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0)); ...@@ -331,15 +333,9 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
List<Entry> entrys=(List<Entry>)list.get(1); List<Entry> entrys=(List<Entry>)list.get(1);
List<GroupResult> entryRel=(List<GroupResult>)list.get(2); List<GroupResult> entryRel=(List<GroupResult>)list.get(2);
GlobalParam globalParam=InitGlobalParam();
// 5. 执行调度算法 // 5. 执行调度算法
GeneticAlgorithm scheduler =new GeneticAlgorithm(globalParam,machines,orders,Materials,machineScheduler,entryRel,materialRequirementService); //new GeneticAlgorithm(products, machines, orders, machineScheduler); GeneticAlgorithm scheduler =new GeneticAlgorithm(globalParam,machines,orders,Materials,machineScheduler,entryRel,materialRequirementService); //new GeneticAlgorithm(products, machines, orders, machineScheduler);
param.initAdaptiveParams(entrys.size()); param.initAdaptiveParams(entrys.size());
...@@ -537,12 +533,7 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0)); ...@@ -537,12 +533,7 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
public Chromosome schedule(String SceneId) { public Chromosome schedule(String SceneId) {
try { try {
ScheduleParams param = new ScheduleParams(); ScheduleParams param = InitScheduleParams();
// param.setBaseTime(baseTime);
param.setBaseTime(LocalDateTime.of(2025, 11, 1, 0, 0, 0));
...@@ -558,25 +549,25 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0)); ...@@ -558,25 +549,25 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
List<ProdEquipment> ProdEquipments= _prodEquipmentService.lambdaQuery() List<ProdEquipment> ProdEquipments= _prodEquipmentService.lambdaQuery()
.eq(ProdEquipment::getSceneId,SceneId) .eq(ProdEquipment::getSceneId,SceneId)
.list(); .list();
GlobalParam globalParam=InitGlobalParam();
List<ProdLaunchOrder> ProdLaunchOrders= _prodLaunchOrderService.lambdaQuery() List<ProdLaunchOrder> ProdLaunchOrders= _prodLaunchOrderService.lambdaQuery()
.eq(ProdLaunchOrder::getSceneId,SceneId) .eq(ProdLaunchOrder::getSceneId,SceneId)
.list(); .list();
// 3. 创建调度服务 // 3. 创建调度服务
MachineSchedulerService machineScheduler = new MachineSchedulerService( MachineSchedulerService machineScheduler = new MachineSchedulerService(
param.getBaseTime()); param.getBaseTime());
List<Machine> machines= InitCalendarToAllMachines(SceneId, ProdEquipments,machineScheduler); List<Machine> machines= InitCalendarToAllMachines(SceneId, ProdEquipments,machineScheduler,globalParam.isIsUseCalendar());
// 3. 构建订单-工序数据 // 3. 构建订单-工序数据
List<Order> orders=InitOrder(ProdLaunchOrders); List<Order> orders=InitOrder(ProdLaunchOrders);
List<Material> Materials=null; //InitMaterial(); List<Material> Materials=InitMaterial();
Map<Integer,Object> list= InitEntrys(SceneId,ProdEquipments,orders); Map<Integer,Object> list= InitEntrys(SceneId,ProdEquipments,orders);
List<Entry> entrys=(List<Entry>)list.get(1); List<Entry> entrys=(List<Entry>)list.get(1);
List<GroupResult> entryRel=(List<GroupResult>)list.get(2); List<GroupResult> entryRel=(List<GroupResult>)list.get(2);
GlobalParam globalParam=InitGlobalParam();
// 5. 执行调度算法 // 5. 执行调度算法
GeneticAlgorithm scheduler =new GeneticAlgorithm(globalParam,machines,orders,Materials,machineScheduler,entryRel,materialRequirementService); //new GeneticAlgorithm(products, machines, orders, machineScheduler); GeneticAlgorithm scheduler =new GeneticAlgorithm(globalParam,machines,orders,Materials,machineScheduler,entryRel,materialRequirementService); //new GeneticAlgorithm(products, machines, orders, machineScheduler);
param.initAdaptiveParams(entrys.size()); param.initAdaptiveParams(entrys.size());
...@@ -704,16 +695,40 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0)); ...@@ -704,16 +695,40 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
} }
} }
private List<Machine> InitCalendarToAllMachines(String SceneId,List<ProdEquipment> ProdEquipments,MachineSchedulerService machineScheduler) { private List<Machine> InitCalendarToAllMachines(String SceneId,List<ProdEquipment> ProdEquipments,MachineSchedulerService machineScheduler,boolean IsUseCalendar) {
// 按设备分组 // 按设备分组
return _routingDataService.InitCalendarToAllMachines(SceneId,ProdEquipments,machineScheduler); FileHelper.writeLogFile("初始化设备日历-----------开始-------");
List<Machine> machines= _routingDataService.InitCalendarToAllMachines(SceneId,ProdEquipments,machineScheduler,IsUseCalendar);
FileHelper.writeLogFile("初始化设备日历-----------结束-------");
return machines;
}
private ScheduleParams InitScheduleParams()
{
FileHelper.writeLogFile("初始化排产参数-----------开始-------");
LambdaQueryWrapper<ApsTimeConfig> queryWrapper = new LambdaQueryWrapper<ApsTimeConfig>();
Page<ApsTimeConfig> page = new Page<>(1, 1);
ApsTimeConfig apsTimeConfig= apsTimeConfigMapper.selectOne( queryWrapper);
ScheduleParams param = new ScheduleParams();
param.setBaseTime(LocalDateTime.of(2025, 11, 1, 0, 0, 0));
if(apsTimeConfig!=null) {
if(apsTimeConfig.getBaseTime()!=null)
{
param.setBaseTime(apsTimeConfig.getBaseTime());
}
}
FileHelper.writeLogFile("初始化排产参数-----------结束-------");
return param;
} }
private GlobalParam InitGlobalParam() private GlobalParam InitGlobalParam()
{ {
FileHelper.writeLogFile("初始化约束-----------开始-------");
GlobalParam globalParam=new GlobalParam(); GlobalParam globalParam=new GlobalParam();
...@@ -734,23 +749,31 @@ private GlobalParam InitGlobalParam() ...@@ -734,23 +749,31 @@ private GlobalParam InitGlobalParam()
List<ConfigSetting> configs= _configService.getComponentSettingsByPageAndNote(config.getId(),"setting"); List<ConfigSetting> configs= _configService.getComponentSettingsByPageAndNote(config.getId(),"setting");
for (ConfigSetting c : configs) { for (ConfigSetting c : configs) {
if(c.getTitle().equals("日历")) if(c.getTitle().contains("日历"))
{ {
globalParam.setIsUseCalendar(c.isValue()); globalParam.setIsUseCalendar(c.isValue());
} }
else if(c.getTitle().equals("设置时间")) else if(c.getTitle().contains("设置时间"))
{ {
globalParam.setIsUseCalendar(c.isValue()); globalParam.setIsUseCalendar(c.isValue());
}else if(c.getTitle().equals("原材料")) }
else if(c.getTitle().contains("原材料"))
{ {
globalParam.setIsCheckBom(c.isValue()); globalParam.setIsCheckMp(c.isValue());
} }
else if(c.getTitle().equals("设置时间平滑")) else if(c.getTitle().contains("后台任务设置"))
{ {
globalParam.set_smoothSetup(c.isValue()); globalParam.set_smoothSetup(c.isValue());
} }
else if(c.getTitle().contains("设置时间平滑"))
{
globalParam.set_smoothSetup(c.isValue());
} }
}
FileHelper.writeLogFile("初始化约束-----------结束-------");
return globalParam; return globalParam;
} }
private List<Order> InitOrder(List<ProdLaunchOrder> ProdLaunchOrders) private List<Order> InitOrder(List<ProdLaunchOrder> ProdLaunchOrders)
...@@ -915,6 +938,7 @@ private GlobalParam InitGlobalParam() ...@@ -915,6 +938,7 @@ private GlobalParam InitGlobalParam()
private List<Material> InitMaterial() { private List<Material> InitMaterial() {
List<Material> materials=new ArrayList<>(); List<Material> materials=new ArrayList<>();
FileHelper.writeLogFile("初始化物料-----------开始-------");
// List<MaterialInfo> materiallist= materialInfoService.lambdaQuery() // List<MaterialInfo> materiallist= materialInfoService.lambdaQuery()
// .eq(MaterialInfo::getIsdeleted,0) // .eq(MaterialInfo::getIsdeleted,0)
...@@ -938,6 +962,7 @@ private GlobalParam InitGlobalParam() ...@@ -938,6 +962,7 @@ private GlobalParam InitGlobalParam()
GlobalCacheUtil.put("material",materials, 10, TimeUnit.MINUTES); GlobalCacheUtil.put("material",materials, 10, TimeUnit.MINUTES);
FileHelper.writeLogFile("初始化物料-----------结束-------");
return materials; return materials;
} }
...@@ -1049,7 +1074,10 @@ private GlobalParam InitGlobalParam() ...@@ -1049,7 +1074,10 @@ private GlobalParam InitGlobalParam()
private Map<Integer, Object> InitEntrys(String SceneId,List<ProdEquipment> ProdEquipments,List<Order> ProdLaunchOrders) private Map<Integer, Object> InitEntrys(String SceneId,List<ProdEquipment> ProdEquipments,List<Order> ProdLaunchOrders)
{ {
return _routingDataService.InitEntrys(SceneId,ProdEquipments,ProdLaunchOrders); FileHelper.writeLogFile("初始化工单-----------开始-------");
Map<Integer, Object> entrys= _routingDataService.InitEntrys(SceneId,ProdEquipments,ProdLaunchOrders);
FileHelper.writeLogFile("初始化工单-----------结束-------");
return entrys;
} }
......
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