下发

parent 79e47803
...@@ -60,5 +60,13 @@ public class LanuchController { ...@@ -60,5 +60,13 @@ public class LanuchController {
return lanuchService.copyScene(oldSceneName,username,newSceneName); return lanuchService.copyScene(oldSceneName,username,newSceneName);
} }
@GetMapping("/exportPlan")
public R<String> exportPlan(@RequestParam String sceneID) {
// 调用 PlanResultService 获取 ScheduleChromosome 列表
return lanuchService.exportPlan(sceneID);
}
} }
\ No newline at end of file
...@@ -379,10 +379,11 @@ public class ResourceGanttController { ...@@ -379,10 +379,11 @@ public class ResourceGanttController {
private List<ResourceGanttVO> convertToResourceGanttVO1(Chromosome scheduleChromosome) { private List<ResourceGanttVO> convertToResourceGanttVO1(Chromosome scheduleChromosome) {
List<ResourceGanttVO> resourceGanttVOList = new ArrayList<>(); List<ResourceGanttVO> resourceGanttVOList = new ArrayList<>();
List<Machine> machineList = planResultService.InitCalendarToAllMachines1(scheduleChromosome.getScenarioID());
// 遍历所有机器资源 // 遍历所有机器资源
if (scheduleChromosome.getMachines() != null) { if (machineList != null) {
for (int i = 0; i < scheduleChromosome.getMachines().size(); i++) { for (int i = 0; i < machineList.size(); i++) {
Machine machine = scheduleChromosome.getMachines().get(i); Machine machine = machineList.get(i);
ResourceGanttVO resourceGanttVO = new ResourceGanttVO(); ResourceGanttVO resourceGanttVO = new ResourceGanttVO();
resourceGanttVO.setId(machine.getId()); resourceGanttVO.setId(machine.getId());
......
...@@ -25,4 +25,11 @@ public interface LanuchService { ...@@ -25,4 +25,11 @@ public interface LanuchService {
*/ */
R<String> copyScene( String oldSceneId, String username,String newSceneId); R<String> copyScene( String oldSceneId, String username,String newSceneId);
/**
* 下发场景数据到mes_order
*/
R<String> exportPlan( String sceneId);
} }
\ No newline at end of file
...@@ -4,6 +4,7 @@ import com.aps.common.util.R; ...@@ -4,6 +4,7 @@ import com.aps.common.util.R;
import com.aps.common.util.SnowFlackIdWorker; import com.aps.common.util.SnowFlackIdWorker;
import com.aps.entity.*; import com.aps.entity.*;
import com.aps.entity.Algorithm.Chromosome; import com.aps.entity.Algorithm.Chromosome;
import com.aps.entity.Algorithm.GAScheduleResult;
import com.aps.mapper.RoutingDetailMapper; import com.aps.mapper.RoutingDetailMapper;
import com.aps.mapper.RoutingHeaderMapper; import com.aps.mapper.RoutingHeaderMapper;
import com.aps.service.*; import com.aps.service.*;
...@@ -67,7 +68,10 @@ public class LanuchServiceImpl implements LanuchService { ...@@ -67,7 +68,10 @@ public class LanuchServiceImpl implements LanuchService {
RoutingDetailEquipService routingDetailEquipService; RoutingDetailEquipService routingDetailEquipService;
@Autowired @Autowired
SceneService sceneService; SceneService sceneService;
@Autowired
MesOrderService mesOrderService;
@Autowired
DispatchService dispatchService;
/** /**
◦ 生成场景数据 ◦ 生成场景数据
...@@ -181,6 +185,104 @@ public class LanuchServiceImpl implements LanuchService { ...@@ -181,6 +185,104 @@ public class LanuchServiceImpl implements LanuchService {
/**
*下发计划
* @param sceneId
* @return R<String> Result
*/
@Override
@Transactional(rollbackFor = Exception.class)
public R<String> exportPlan(String sceneId) {
try {
Chromosome chromosome = sceneService.loadChromosomeFromFile(sceneId);
if (chromosome == null || chromosome.getResult() == null || chromosome.getResult().isEmpty()) {
return R.failed("未找到排程结果");
}
List<ProdLaunchOrder> prodLanuchList = prodLaunchOrderService.lambdaQuery()
.eq(ProdLaunchOrder::getSceneId, sceneId)
.list();
List<MesOrder> mesOrderList = new ArrayList<>();
for (ProdLaunchOrder prodLaunchOrder : prodLanuchList) {
MesOrder mesOrder = new MesOrder();
mesOrder.setMesCode(prodLaunchOrder.getOrderId());
mesOrder.setSerie(prodLaunchOrder.getSerie());
mesOrder.setMaterialId(prodLaunchOrder.getMaterialId());
mesOrder.setQuantity((long) prodLaunchOrder.getQuantity());
mesOrder.setDemandStartDate(prodLaunchOrder.getStartDate());
mesOrder.setDemandFinishDate(prodLaunchOrder.getEndDate());
mesOrder.setRoutingId(prodLaunchOrder.getRoutingId() != null ? Long.valueOf(prodLaunchOrder.getRoutingId()) : null);
mesOrder.setProductCode(prodLaunchOrder.getMaterialCode());
mesOrder.setStatus(1L); // Default status
mesOrderList.add(mesOrder);
}
boolean saved = mesOrderService.saveBatch(mesOrderList);
if (saved) {
log.info("插入 {} 条数据到mes_order", mesOrderList.size());
} else {
log.error("插入失败");
return R.failed("插入mes_order失败");
}
List<ProdProcessExec> processExecList = prodProcessExecService.lambdaQuery()
.eq(ProdProcessExec::getSceneId, sceneId)
.list();
// 遍历GAScheduleResult结果并转换为dispatch
List<Dispatch> dispatches = new ArrayList<>();
for (GAScheduleResult gaResult : chromosome.getResult()) {
ProdProcessExec prodProcessExec = processExecList.stream()
.filter(processExec -> processExec.getExecId().equals(gaResult.getExecId()))
.findFirst()
.orElse(null);
Dispatch dispatch = new Dispatch();
// 更新相关字段
dispatch.setENof(gaResult.getOrderId());
dispatch.setQuantity(gaResult.getQuantity());
LocalDateTime baseTime = chromosome.getBaseTime() != null ? chromosome.getBaseTime() : LocalDateTime.now();
dispatch.setBeginTime(baseTime.plusSeconds(gaResult.getStartTime()));
dispatch.setEndTime(baseTime.plusSeconds(gaResult.getEndTime()));
dispatch.setENof(gaResult.getOrderId());
// 设置状态等其他字段
dispatch.setTaskSeq(prodProcessExec.getTaskSeq());
dispatch.setMesCode(gaResult.getOrderId());
dispatch.setRoutingDetailId(prodProcessExec.getRoutingDetailId());
dispatch.setOpe(prodProcessExec.getRoutingDetailName());
// 添加到列表中
dispatches.add(dispatch);
}
// 批量保存到数据库
boolean savedDispatch = dispatchService.saveOrUpdateBatch(dispatches);
if (savedDispatch) {
return R.ok("计划下发成功,共处理 " + dispatches.size() + " 条记录");
} else {
return R.failed("保存到数据库失败");
}
} catch (NumberFormatException e) {
log.error("数据转换失败,场景ID: " + sceneId, e);
return R.failed("数据转换失败,请检查数据格式: " + e.getMessage());
} catch (Exception e) {
log.error("下发计划失败,场景ID: " + sceneId, e);
return R.failed("下发计划失败: " + e.getMessage());
}
}
/** /**
◦ 处理订单数据:批量转换ProdOrderMain到ProdLaunchOrder ◦ 处理订单数据:批量转换ProdOrderMain到ProdLaunchOrder
......
...@@ -26,6 +26,7 @@ import org.springframework.stereotype.Service; ...@@ -26,6 +26,7 @@ import org.springframework.stereotype.Service;
import java.io.IOException; import java.io.IOException;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.*; import java.util.*;
...@@ -775,4 +776,129 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0)); ...@@ -775,4 +776,129 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
// 注意:tasks 字段需要在其他地方设置,因为 Machine 类中没有任务信息 // 注意:tasks 字段需要在其他地方设置,因为 Machine 类中没有任务信息
return machineVO; return machineVO;
} }
public List<Machine> InitCalendarToAllMachines1(String SceneId) {
// 按设备分组
List<ProdEquipment> ProdEquipments= _prodEquipmentService.lambdaQuery()
.eq(ProdEquipment::getSceneId,SceneId)
.list();
List<Long> MachineIds = ProdEquipments.stream()
.map(ProdEquipment::getEquipId)
.distinct()
.sorted()
.collect(Collectors.toList());
List<Machine> machines=new ArrayList<>();
for (Long id : MachineIds) {
Machine machine=new Machine();
machine.setId(id);
machines.add(machine);
}
//节假日
List<MesHoliday> holidays= _MesHolidayService.list();
LambdaQueryWrapper<ProdEquipSpecialCal> ProdEquipSpecialCalWrapper = new LambdaQueryWrapper<>();
ProdEquipSpecialCalWrapper.eq(ProdEquipSpecialCal::getSceneId, SceneId);
List<PlanResource> PlanResources= _PlanResourceService.lambdaQuery()
.eq(PlanResource::getIsdeleted,0)
.list();
List<ProdEquipSpecialCal> ProdEquipSpecialCals= _prodEquipSpecialCalService.list(ProdEquipSpecialCalWrapper);
List<MesShiftWorkSched> MesShiftWorkScheds= _MesShiftWorkSchedService.lambdaQuery()
.eq(MesShiftWorkSched::getIsdeleted,0).list();
if (machines == null) {
return null;
}
for (Machine machine : machines) {
// 确保维护窗口列表不为null
if (machine.getMaintenanceWindows() == null) {
machine.setMaintenanceWindows(new ArrayList<>());
}
List<ProdEquipSpecialCal> machineProdEquipSpecialCals = ProdEquipSpecialCals.stream()
.filter(t -> t.getEquipId() == machine.getId()&&t.getReferenceType()==1)
.collect(Collectors.toList());
List<Shift> shifts1=new ArrayList<>();
for (ProdEquipSpecialCal machineProdEquipSpecialCal : machineProdEquipSpecialCals) {
List<MesShiftWorkSched> ShiftWorkScheds = MesShiftWorkScheds.stream()
.filter(t -> (long) t.getWeekWorkSchedId() == machineProdEquipSpecialCal.getReferenceId())
.collect(Collectors.toList());
List<Shift> Shifts = mergeShiftData(ShiftWorkScheds);
for (Shift shift : Shifts) {
shift.setMachineId(machine.getId());
shift.setStartDate(machineProdEquipSpecialCal.getStartDate());
shift.setEndDate(machineProdEquipSpecialCal.getEndDate());
shifts1.add(shift);
}
}
// 转换为列表返回
List<Shift> result = new ArrayList<>();
for (Shift shift : shifts1) {
// 处理跨天班次(开始时间晚于结束时间的情况,如 7:30 到 3:30)
if (shift.getEndTime().isBefore(shift.getStartTime())) {
// 创建第一天的班次 (开始时间到24:00)
Shift firstShift = new Shift();
firstShift.setStartTime(shift.getStartTime());
firstShift.setEndTime(LocalTime.of(23, 59, 59)); // 23:59:59代替24:00
firstShift.setDays(new HashSet<>(shift.getDays()));
firstShift.setStatus(shift.getStatus());
// 创建第二天的班次 (00:00到结束时间)
Shift secondShift = new Shift();
secondShift.setStartTime(LocalTime.MIDNIGHT);
secondShift.setEndTime(shift.getEndTime());
secondShift.setDays(new HashSet<>(shift.getDays()));
secondShift.setStatus(shift.getStatus());
result.add(firstShift);
result.add(secondShift);
} else {
// 正常班次直接添加
result.add(shift);
}
}
machine.setShifts(result);
List<ProdEquipSpecialCal> Holidays = ProdEquipSpecialCals.stream()
.filter(t -> t.getEquipId() == machine.getId()&&t.getReferenceType()==2)
.collect(Collectors.toList());
List<Holiday> Holidays1=new ArrayList<>();
for (ProdEquipSpecialCal machineProdEquipSpecialCal : Holidays) {
Holiday holiday=new Holiday();
holiday.setStart(machineProdEquipSpecialCal.getStartDate());
holiday.setEnd(machineProdEquipSpecialCal.getEndDate());
Holidays1.add(holiday);
}
machine.setHolidays(Holidays1);
}
return machines;
}
} }
\ No newline at end of file
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