场景修改

parent 1a1e87d2
...@@ -11,7 +11,6 @@ import io.swagger.v3.oas.annotations.tags.Tag; ...@@ -11,7 +11,6 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.util.List; import java.util.List;
@RestController @RestController
...@@ -30,25 +29,23 @@ public class LanuchController { ...@@ -30,25 +29,23 @@ public class LanuchController {
/** /**
* 启动工单 * 启动工单
* *
* @param sceneName 场景名称 * @param sceneId 场景名称
* @param username 用户名 * @param userId 用户名
* @return 处理结果 * @return 处理结果
*/ */
@PostMapping("/execute") @PostMapping("/execute")
public R<String> lanuch( public R<String> lanuch(
@RequestParam String sceneName, @RequestParam String sceneId,
@RequestHeader(required = false) String username) { @RequestHeader(required = false) String userId) {
if (username == null || username.isEmpty()) {
username = "system";
}
return lanuchService.lanuch(sceneName, username);
return lanuchService.lanuch(sceneId, userId);
} }
@GetMapping("/schedule") @GetMapping("/schedule")
public Chromosome schedule(@RequestParam String sceneID,@RequestParam LocalDateTime baseTime) { public Chromosome schedule(@RequestParam String sceneId) {
// 调用 PlanResultService 获取 ScheduleChromosome 列表 // 调用 PlanResultService 获取 ScheduleChromosome 列表
Chromosome scheduleChromosomes = planResultService.schedule(sceneID,baseTime); Chromosome scheduleChromosomes = planResultService.schedule(sceneId);
// 提取所有场景ID // 提取所有场景ID
return scheduleChromosomes; return scheduleChromosomes;
...@@ -57,31 +54,36 @@ public class LanuchController { ...@@ -57,31 +54,36 @@ public class LanuchController {
@PostMapping("/copyScene") @PostMapping("/copyScene")
public R<String> copyScene( public R<String> copyScene(
@RequestParam String newSceneName,@RequestParam String oldSceneName, @RequestParam String newSceneId,@RequestParam String oldSceneId,
@RequestHeader(required = false) String username) { @RequestHeader(required = false) String userId) {
if (username == null || username.isEmpty()) {
username = "system";
}
return lanuchService.copyScene(oldSceneName,username,newSceneName); return lanuchService.copyScene(oldSceneId,userId,newSceneId);
} }
@GetMapping("/exportPlan") @GetMapping("/exportPlan")
public R<String> exportPlan(@RequestParam String sceneID) { public R<String> exportPlan(@RequestParam String sceneId) {
// 调用 PlanResultService 获取 ScheduleChromosome 列表 // 调用 PlanResultService 获取 ScheduleChromosome 列表
return lanuchService.exportPlan(sceneID); return lanuchService.exportPlan(sceneId);
} }
@GetMapping("/deleteScene") @GetMapping("/deleteScene")
public R<Boolean> deleteScene(@RequestParam String sceneID) { public R<Boolean> deleteScene(@RequestParam String sceneId) {
// 调用 PlanResultService 获取 ScheduleChromosome 列表 // 调用 PlanResultService 获取 ScheduleChromosome 列表
return R.ok(prodSceneConfigService.deleteSceneById(sceneID)); return R.ok(prodSceneConfigService.deleteSceneById(sceneId));
} }
@GetMapping("/getAllScene")
public R<List<ProdSceneConfig>> getAllScene(@RequestParam String userId) {
// 调用 PlanResultService 获取 ScheduleChromosome 列表
return R.ok(prodSceneConfigService.lambdaQuery()
.eq(ProdSceneConfig::getCreateUser,userId)
.list());
}
} }
\ No newline at end of file
...@@ -32,7 +32,7 @@ public class ResourceGanttController { ...@@ -32,7 +32,7 @@ public class ResourceGanttController {
@Autowired @Autowired
private PlanSchedulerService schedulingService; private PlanSchedulerService schedulingService;
@Autowired @Autowired
private PlanResultService planResultService; private PlanResultService planResultService;
...@@ -43,7 +43,7 @@ public class ResourceGanttController { ...@@ -43,7 +43,7 @@ public class ResourceGanttController {
public List<ResourceGanttVO> getResourceGantt1(@RequestParam(required = false, defaultValue = "1") Long sceneId) { public List<ResourceGanttVO> getResourceGantt1(@RequestParam(required = false, defaultValue = "1") Long sceneId) {
// 从PlanResultService获取ScheduleChromosome列表 // 从PlanResultService获取ScheduleChromosome列表
List<ScheduleChromosome> scheduleChromosomes = planResultService.execute(); List<ScheduleChromosome> scheduleChromosomes = planResultService.execute();
// 根据sceneId查找对应的ScheduleChromosome // 根据sceneId查找对应的ScheduleChromosome
ScheduleChromosome targetChromosome = null; ScheduleChromosome targetChromosome = null;
for (ScheduleChromosome chromosome : scheduleChromosomes) { for (ScheduleChromosome chromosome : scheduleChromosomes) {
...@@ -52,26 +52,26 @@ public class ResourceGanttController { ...@@ -52,26 +52,26 @@ public class ResourceGanttController {
break; break;
} }
} }
// 如果找不到对应的场景,返回空列表 // 如果找不到对应的场景,返回空列表
if (targetChromosome == null) { if (targetChromosome == null) {
return new ArrayList<>(); return new ArrayList<>();
} }
// 转换为 ResourceGanttVO 格式 // 转换为 ResourceGanttVO 格式
List<ResourceGanttVO> resourceGanttVOList = new ArrayList<>(); List<ResourceGanttVO> resourceGanttVOList = new ArrayList<>();
List<ResourceGanttVO> resourceGanttVOs = convertToResourceGanttVO(targetChromosome); List<ResourceGanttVO> resourceGanttVOs = convertToResourceGanttVO(targetChromosome);
resourceGanttVOList.addAll(resourceGanttVOs); resourceGanttVOList.addAll(resourceGanttVOs);
return resourceGanttVOList; return resourceGanttVOList;
} }
@GetMapping("/productGantt1") @GetMapping("/productGantt1")
@Operation(summary = "获取产品甘特图数据", description = "获取产品甘特图数据") @Operation(summary = "获取产品甘特图数据", description = "获取产品甘特图数据")
public List<ProductGanttVO> getProductGantt1(@RequestParam String sceneId) { public List<ProductGanttVO> getProductGantt1(@RequestParam String sceneId) {
// 从PlanResultService获取ScheduleChromosome列表 // 从PlanResultService获取ScheduleChromosome列表
List<ScheduleChromosome> scheduleChromosomes = planResultService.execute(); List<ScheduleChromosome> scheduleChromosomes = planResultService.execute();
// 根据sceneId查找对应的ScheduleChromosome // 根据sceneId查找对应的ScheduleChromosome
ScheduleChromosome targetChromosome = null; ScheduleChromosome targetChromosome = null;
for (ScheduleChromosome chromosome : scheduleChromosomes) { for (ScheduleChromosome chromosome : scheduleChromosomes) {
...@@ -80,17 +80,17 @@ public class ResourceGanttController { ...@@ -80,17 +80,17 @@ public class ResourceGanttController {
break; break;
} }
} }
// 如果找不到对应的场景,返回空列表 // 如果找不到对应的场景,返回空列表
if (targetChromosome == null) { if (targetChromosome == null) {
return new ArrayList<>(); return new ArrayList<>();
} }
// 转换为 ProductGanttVO 格式 // 转换为 ProductGanttVO 格式
List<ProductGanttVO> productGanttVOList = new ArrayList<>(); List<ProductGanttVO> productGanttVOList = new ArrayList<>();
List<ProductGanttVO> productGanttVOs = convertToProductGanttVO(targetChromosome); List<ProductGanttVO> productGanttVOs = convertToProductGanttVO(targetChromosome);
productGanttVOList.addAll(productGanttVOs); productGanttVOList.addAll(productGanttVOs);
return productGanttVOList; return productGanttVOList;
} }
...@@ -135,11 +135,11 @@ public class ResourceGanttController { ...@@ -135,11 +135,11 @@ public class ResourceGanttController {
@GetMapping("/operationMove") @GetMapping("/operationMove")
public Chromosome OperationMove(String SceneId,int opid,LocalDateTime newStartTime, public Chromosome OperationMove(String SceneId,int opid,LocalDateTime newStartTime,
Long newMachineId) { Long newMachineId) {
// opid=1; // opid=1;
// newStartTime= LocalDateTime.of(2025, 12, 7, 0, 0); // newStartTime= LocalDateTime.of(2025, 12, 7, 0, 0);
// newMachineId=3402L; // newMachineId=3402L;
// SceneId="B571EF6682DB463AB2977B1055A74112"; // SceneId="B571EF6682DB463AB2977B1055A74112";
// 调用 PlanResultService 获取 ScheduleChromosome 列表 // 调用 PlanResultService 获取 ScheduleChromosome 列表
Chromosome scheduleChromosomes = planResultService.Move(SceneId,opid,newStartTime,newMachineId); Chromosome scheduleChromosomes = planResultService.Move(SceneId,opid,newStartTime,newMachineId);
...@@ -148,7 +148,7 @@ public class ResourceGanttController { ...@@ -148,7 +148,7 @@ public class ResourceGanttController {
} }
@PostMapping("/operationedit") @PostMapping("/operationedit")
public Chromosome editOperation(@RequestParam String SceneId, public Chromosome editOperation(@RequestParam String SceneId,
@RequestBody Entry operation) { @RequestBody Entry operation) {
Chromosome scheduleChromosomes = planResultService.EditOperation(SceneId,operation); Chromosome scheduleChromosomes = planResultService.EditOperation(SceneId,operation);
// 提取所有场景ID // 提取所有场景ID
...@@ -157,7 +157,7 @@ public class ResourceGanttController { ...@@ -157,7 +157,7 @@ public class ResourceGanttController {
@PostMapping("/changebasetime") @PostMapping("/changebasetime")
public Chromosome ChangeBaseTime(@RequestParam String SceneId, public Chromosome ChangeBaseTime(@RequestParam String SceneId,
@RequestParam LocalDateTime BaseTime) { @RequestParam LocalDateTime BaseTime) {
Chromosome scheduleChromosomes = planResultService.ChangeBaseTime(SceneId,BaseTime); Chromosome scheduleChromosomes = planResultService.ChangeBaseTime(SceneId,BaseTime);
// 提取所有场景ID // 提取所有场景ID
...@@ -172,7 +172,7 @@ public class ResourceGanttController { ...@@ -172,7 +172,7 @@ public class ResourceGanttController {
opid=1; opid=1;
// newStartTime= LocalDateTime.of(2025, 12, 7, 0, 0); // newStartTime= LocalDateTime.of(2025, 12, 7, 0, 0);
// newMachineId=3402L; // newMachineId=3402L;
splitCounts=new ArrayList<>(); splitCounts=new ArrayList<>();
splitCounts.add(20000d); splitCounts.add(20000d);
splitCounts.add(30000d); splitCounts.add(30000d);
SceneId="B571EF6682DB463AB2977B1055A74112"; SceneId="B571EF6682DB463AB2977B1055A74112";
...@@ -185,7 +185,7 @@ public class ResourceGanttController { ...@@ -185,7 +185,7 @@ public class ResourceGanttController {
} }
@PostMapping("/operationdel") @PostMapping("/operationdel")
public Chromosome DelOperation(@RequestParam String SceneId, public Chromosome DelOperation(@RequestParam String SceneId,
@RequestParam int opid) { @RequestParam int opid) {
opid=1; opid=1;
SceneId="B571EF6682DB463AB2977B1055A74112"; SceneId="B571EF6682DB463AB2977B1055A74112";
...@@ -197,7 +197,7 @@ public class ResourceGanttController { ...@@ -197,7 +197,7 @@ public class ResourceGanttController {
} }
@PostMapping("/operationlocked") @PostMapping("/operationlocked")
public Chromosome LockedOperation(@RequestParam String SceneId, public Chromosome LockedOperation(@RequestParam String SceneId,
@RequestParam int opid,@RequestParam boolean isLocked) { @RequestParam int opid,@RequestParam boolean isLocked) {
opid=1; opid=1;
SceneId="B571EF6682DB463AB2977B1055A74112"; SceneId="B571EF6682DB463AB2977B1055A74112";
...@@ -210,8 +210,8 @@ public class ResourceGanttController { ...@@ -210,8 +210,8 @@ public class ResourceGanttController {
@PostMapping("/orderspilt") @PostMapping("/orderspilt")
public Chromosome SpiltOrder(@RequestParam String SceneId, public Chromosome SpiltOrder(@RequestParam String SceneId,
@RequestParam String orderid, @RequestParam String orderid,
@RequestBody List<Double> splitCounts) { @RequestBody List<Double> splitCounts) {
orderid="fcc0892a-0483-4da7-8414-9ce98be36e53"; orderid="fcc0892a-0483-4da7-8414-9ce98be36e53";
// newStartTime= LocalDateTime.of(2025, 12, 7, 0, 0); // newStartTime= LocalDateTime.of(2025, 12, 7, 0, 0);
// newMachineId=3402L; // newMachineId=3402L;
...@@ -221,10 +221,10 @@ public class ResourceGanttController { ...@@ -221,10 +221,10 @@ public class ResourceGanttController {
splitCounts.add(10000d); splitCounts.add(10000d);
SceneId="B571EF6682DB463AB2977B1055A74112"; SceneId="B571EF6682DB463AB2977B1055A74112";
// 数组第一个是0,为复制 // 数组第一个是0,为复制
//splitCounts=new ArrayList<>(); //splitCounts=new ArrayList<>();
// splitCounts.add(0); // splitCounts.add(0);
// splitCounts.add(50000d); // splitCounts.add(50000d);
// 调用 PlanResultService 获取 ScheduleChromosome 列表 // 调用 PlanResultService 获取 ScheduleChromosome 列表
Chromosome scheduleChromosomes = planResultService.SpiltOrder(SceneId,orderid,splitCounts.toArray(new Double[0])); Chromosome scheduleChromosomes = planResultService.SpiltOrder(SceneId,orderid,splitCounts.toArray(new Double[0]));
...@@ -240,7 +240,7 @@ public class ResourceGanttController { ...@@ -240,7 +240,7 @@ public class ResourceGanttController {
targetorderid="2a0f23d2429f4e5da7b3929da75a803d"; targetorderid="2a0f23d2429f4e5da7b3929da75a803d";
SceneId="B571EF6682DB463AB2977B1055A74112"; SceneId="B571EF6682DB463AB2977B1055A74112";
// 调用 PlanResultService 获取 ScheduleChromosome 列表 // 调用 PlanResultService 获取 ScheduleChromosome 列表
...@@ -251,7 +251,7 @@ public class ResourceGanttController { ...@@ -251,7 +251,7 @@ public class ResourceGanttController {
} }
/** /**
* 将 ScheduleChromosome 转换为 ResourceGanttVO 列表 * 将 ScheduleChromosome 转换为 ResourceGanttVO 列表
* @param scheduleChromosome 调度结果 * @param scheduleChromosome 调度结果
...@@ -259,12 +259,12 @@ public class ResourceGanttController { ...@@ -259,12 +259,12 @@ public class ResourceGanttController {
*/ */
private List<ResourceGanttVO> convertToResourceGanttVO(ScheduleChromosome scheduleChromosome) { private List<ResourceGanttVO> convertToResourceGanttVO(ScheduleChromosome scheduleChromosome) {
List<ResourceGanttVO> resourceGanttVOList = new ArrayList<>(); List<ResourceGanttVO> resourceGanttVOList = new ArrayList<>();
// 遍历所有机器资源 // 遍历所有机器资源
if (scheduleChromosome.getMachines() != null) { if (scheduleChromosome.getMachines() != null) {
for (int i = 0; i < scheduleChromosome.getMachines().size(); i++) { for (int i = 0; i < scheduleChromosome.getMachines().size(); i++) {
Machine machine = scheduleChromosome.getMachines().get(i); Machine machine = scheduleChromosome.getMachines().get(i);
ResourceGanttVO resourceGanttVO = new ResourceGanttVO(); ResourceGanttVO resourceGanttVO = new ResourceGanttVO();
resourceGanttVO.setId(machine.getId()); resourceGanttVO.setId(machine.getId());
resourceGanttVO.setName(machine.getName() != null ? machine.getName() : "设备-" + machine.getId()); resourceGanttVO.setName(machine.getName() != null ? machine.getName() : "设备-" + machine.getId());
...@@ -276,7 +276,7 @@ public class ResourceGanttController { ...@@ -276,7 +276,7 @@ public class ResourceGanttController {
resourceGanttVO.setShopName(machine.getId()+"车间"); // 默认值 resourceGanttVO.setShopName(machine.getId()+"车间"); // 默认值
resourceGanttVO.setShopId(machine.getId()); // 默认值 resourceGanttVO.setShopId(machine.getId()); // 默认值
resourceGanttVO.setCode("设备编码-" + machine.getId()); // 默认值 resourceGanttVO.setCode("设备编码-" + machine.getId()); // 默认值
resourceGanttVO.setShift(convertToVO(machine)); resourceGanttVO.setShift(convertToVO(machine));
// 转换任务列表 // 转换任务列表
List<TaskVO> taskVOList = new ArrayList<>(); List<TaskVO> taskVOList = new ArrayList<>();
if (scheduleChromosome.getGenes() != null) { if (scheduleChromosome.getGenes() != null) {
...@@ -284,10 +284,10 @@ public class ResourceGanttController { ...@@ -284,10 +284,10 @@ public class ResourceGanttController {
List<Gene> machineGenes = scheduleChromosome.getGenes().stream() List<Gene> machineGenes = scheduleChromosome.getGenes().stream()
.filter(gene -> gene.getMachineId()==(machine.getId())) .filter(gene -> gene.getMachineId()==(machine.getId()))
.collect(Collectors.toList()); .collect(Collectors.toList());
// 按开始时间排序 // 按开始时间排序
machineGenes.sort((g1, g2) -> Integer.compare(g1.getStartTime(), g2.getStartTime())); machineGenes.sort((g1, g2) -> Integer.compare(g1.getStartTime(), g2.getStartTime()));
for (Gene gene : machineGenes) { for (Gene gene : machineGenes) {
TaskVO taskVO = new TaskVO(); TaskVO taskVO = new TaskVO();
taskVO.setId(String.valueOf(gene.getId())); // 临时处理 taskVO.setId(String.valueOf(gene.getId())); // 临时处理
...@@ -323,29 +323,29 @@ public class ResourceGanttController { ...@@ -323,29 +323,29 @@ public class ResourceGanttController {
taskVO.setAbsoluteStart(scheduleChromosome.getBaseTime().plusMinutes(gene.getStartTime())); taskVO.setAbsoluteStart(scheduleChromosome.getBaseTime().plusMinutes(gene.getStartTime()));
taskVO.setAbsoluteEnd(scheduleChromosome.getBaseTime().plusMinutes(gene.getEndTime())); taskVO.setAbsoluteEnd(scheduleChromosome.getBaseTime().plusMinutes(gene.getEndTime()));
taskVOList.add(taskVO); taskVOList.add(taskVO);
// 调试:检查machine中的shifts状态 // 调试:检查machine中的shifts状态
// if (machine.getShifts() != null) { // if (machine.getShifts() != null) {
// for (Shift shift : machine.getShifts()) { // for (Shift shift : machine.getShifts()) {
// System.out.println("Before setting shifts - Shift status: " + shift.getStatus()); // System.out.println("Before setting shifts - Shift status: " + shift.getStatus());
// } // }
// } // }
taskVO.setAbsolutePreparationTime(gene.getTeardownTime()); taskVO.setAbsolutePreparationTime(gene.getTeardownTime());
} }
} }
resourceGanttVO.setList(taskVOList); resourceGanttVO.setList(taskVOList);
resourceGanttVOList.add(resourceGanttVO); resourceGanttVOList.add(resourceGanttVO);
} }
} }
return resourceGanttVOList; return resourceGanttVOList;
} }
/** /**
* 将 ScheduleChromosome 转换为 ProductGanttVO 列表 * 将 ScheduleChromosome 转换为 ProductGanttVO 列表
* @param scheduleChromosome 调度结果 * @param scheduleChromosome 调度结果
...@@ -353,88 +353,88 @@ public class ResourceGanttController { ...@@ -353,88 +353,88 @@ public class ResourceGanttController {
*/ */
private List<ProductGanttVO> convertToProductGanttVO(ScheduleChromosome scheduleChromosome) { private List<ProductGanttVO> convertToProductGanttVO(ScheduleChromosome scheduleChromosome) {
List<ProductGanttVO> productGanttVOList = new ArrayList<>(); List<ProductGanttVO> productGanttVOList = new ArrayList<>();
// 按产品ID和工单ID分组基因 // 按产品ID和工单ID分组基因
if (scheduleChromosome.getGenes() != null) { if (scheduleChromosome.getGenes() != null) {
// 按工单ID分组 // 按工单ID分组
scheduleChromosome.getGenes().stream() scheduleChromosome.getGenes().stream()
.collect(Collectors.groupingBy(Gene::getOrderId)) .collect(Collectors.groupingBy(Gene::getOrderId))
.forEach((orderId, genes) -> { .forEach((orderId, genes) -> {
if (!genes.isEmpty()) { if (!genes.isEmpty()) {
ProductGanttVO productGanttVO = new ProductGanttVO(); ProductGanttVO productGanttVO = new ProductGanttVO();
Gene firstGene = genes.get(0); Gene firstGene = genes.get(0);
productGanttVO.setId(String.valueOf(firstGene.getId())); productGanttVO.setId(String.valueOf(firstGene.getId()));
productGanttVO.setProductName("产品"+firstGene.getProductId()); // 默认值,实际应从订单数据获取 productGanttVO.setProductName("产品"+firstGene.getProductId()); // 默认值,实际应从订单数据获取
productGanttVO.setProductType(0); productGanttVO.setProductType(0);
productGanttVO.setProductId(String.valueOf(firstGene.getProductId())); productGanttVO.setProductId(String.valueOf(firstGene.getProductId()));
// 计算总数量(假设同一批次) // 计算总数量(假设同一批次)
productGanttVO.setQuantity(firstGene.getBatchSize()); productGanttVO.setQuantity(firstGene.getBatchSize());
productGanttVO.setCode("编号"+firstGene.getProductId()); // 默认值 productGanttVO.setCode("编号"+firstGene.getProductId()); // 默认值
productGanttVO.setShopId(firstGene.getMachineId()); // 默认值 productGanttVO.setShopId(firstGene.getMachineId()); // 默认值
productGanttVO.setShopName(firstGene.getMachineId()+"号线"); // 默认值 productGanttVO.setShopName(firstGene.getMachineId()+"号线"); // 默认值
productGanttVO.setStatus("已发布"); productGanttVO.setStatus("已发布");
productGanttVO.setHeaderId(firstGene.getProductId()); productGanttVO.setHeaderId(firstGene.getProductId());
productGanttVO.setHeaderName("工艺"+firstGene.getProductId()); // 默认值 productGanttVO.setHeaderName("工艺"+firstGene.getProductId()); // 默认值
// 计算开始和结束时间 // 计算开始和结束时间
int minStartTime = genes.stream() int minStartTime = genes.stream()
.mapToInt(Gene::getStartTime) .mapToInt(Gene::getStartTime)
.min() .min()
.orElse(0); .orElse(0);
int maxEndTime = genes.stream() int maxEndTime = genes.stream()
.mapToInt(Gene::getEndTime) .mapToInt(Gene::getEndTime)
.max() .max()
.orElse(0); .orElse(0);
productGanttVO.setStartDate(scheduleChromosome.getBaseTime().plusMinutes(minStartTime)); productGanttVO.setStartDate(scheduleChromosome.getBaseTime().plusMinutes(minStartTime));
productGanttVO.setEndDate(scheduleChromosome.getBaseTime().plusMinutes(maxEndTime)); productGanttVO.setEndDate(scheduleChromosome.getBaseTime().plusMinutes(maxEndTime));
// 转换任务列表 // 转换任务列表
List<TaskVO> taskVOList = new ArrayList<>(); List<TaskVO> taskVOList = new ArrayList<>();
// 按工序顺序排序 // 按工序顺序排序
genes.sort((g1, g2) -> Integer.compare(g1.getSequenceId(), g2.getSequenceId())); genes.sort((g1, g2) -> Integer.compare(g1.getSequenceId(), g2.getSequenceId()));
for (int i = 0; i < genes.size(); i++) { for (int i = 0; i < genes.size(); i++) {
Gene gene = genes.get(i); Gene gene = genes.get(i);
TaskVO taskVO = new TaskVO(); TaskVO taskVO = new TaskVO();
taskVO.setId(String.valueOf(gene.getId())); // 生成唯一ID taskVO.setId(String.valueOf(gene.getId())); // 生成唯一ID
taskVO.setPlanId(String.valueOf(orderId)); taskVO.setPlanId(String.valueOf(orderId));
taskVO.setProductType(0); taskVO.setProductType(0);
taskVO.setProductName("产品"+gene.getProductId()); taskVO.setProductName("产品"+gene.getProductId());
taskVO.setProductId(String.valueOf(gene.getProductId())); taskVO.setProductId(String.valueOf(gene.getProductId()));
taskVO.setQuantity(gene.getBatchSize()); taskVO.setQuantity(gene.getBatchSize());
taskVO.setStart(scheduleChromosome.getBaseTime().plusMinutes(gene.getAbsoluteStartTime())); taskVO.setStart(scheduleChromosome.getBaseTime().plusMinutes(gene.getAbsoluteStartTime()));
taskVO.setEnd(scheduleChromosome.getBaseTime().plusMinutes(gene.getAbsoluteEndTime())); taskVO.setEnd(scheduleChromosome.getBaseTime().plusMinutes(gene.getAbsoluteEndTime()));
taskVO.setSetup(gene.getAbsolutePreparationTime()*60); // 默认值 taskVO.setSetup(gene.getAbsolutePreparationTime()*60); // 默认值
taskVO.setTeardown(gene.getAbsoluteTeardownTime()*60); // 默认值 taskVO.setTeardown(gene.getAbsoluteTeardownTime()*60); // 默认值
taskVO.setEquipChange(gene.getSetupTime()*60); // 默认值 taskVO.setEquipChange(gene.getSetupTime()*60); // 默认值
taskVO.setEquipCooling(0); // 默认值 taskVO.setEquipCooling(0); // 默认值
// taskVO.setEquipType("PTT-" + (i+1) + "-" + gene.getOperationName().toUpperCase().substring(0, Math.min(3, gene.getOperationName().length()))); // taskVO.setEquipType("PTT-" + (i+1) + "-" + gene.getOperationName().toUpperCase().substring(0, Math.min(3, gene.getOperationName().length())));
// taskVO.setEquipName(gene.getOperationName()); // taskVO.setEquipName(gene.getOperationName());
taskVO.setDuration(calculateDuration( taskVO.setDuration(calculateDuration(
scheduleChromosome.getBaseTime().plusMinutes(gene.getStartTime()), scheduleChromosome.getBaseTime().plusMinutes(gene.getStartTime()),
scheduleChromosome.getBaseTime().plusMinutes(gene.getEndTime()))); scheduleChromosome.getBaseTime().plusMinutes(gene.getEndTime())));
taskVO.setEquipId(gene.getMachineId()); // 生成设备ID taskVO.setEquipId(gene.getMachineId()); // 生成设备ID
taskVO.setShopId(gene.getMachineId()); taskVO.setShopId(gene.getMachineId());
taskVO.setShopName(gene.getMachineId()+"车间"); taskVO.setShopName(gene.getMachineId()+"车间");
taskVO.setStatus(0); taskVO.setStatus(0);
taskVO.setDetailId((long) gene.getProductId() * 1000 + gene.getOperationId()); taskVO.setDetailId((long) gene.getProductId() * 1000 + gene.getOperationId());
taskVO.setHeaderId(gene.getProductId()); taskVO.setHeaderId(gene.getProductId());
taskVO.setHeaderName("工艺"+gene.getProductId()); taskVO.setHeaderName("工艺"+gene.getProductId());
taskVO.setSeq(gene.getSequenceId()); taskVO.setSeq(gene.getSequenceId());
taskVO.setSeqName("工序名称"+gene.getSequenceId()); taskVO.setSeqName("工序名称"+gene.getSequenceId());
taskVO.setAbsoluteStart(scheduleChromosome.getBaseTime().plusMinutes(gene.getStartTime())); taskVO.setAbsoluteStart(scheduleChromosome.getBaseTime().plusMinutes(gene.getStartTime()));
taskVO.setAbsoluteEnd(scheduleChromosome.getBaseTime().plusMinutes(gene.getEndTime())); taskVO.setAbsoluteEnd(scheduleChromosome.getBaseTime().plusMinutes(gene.getEndTime()));
taskVOList.add(taskVO); taskVOList.add(taskVO);
}
productGanttVO.setList(taskVOList);
productGanttVOList.add(productGanttVO);
} }
});
productGanttVO.setList(taskVOList);
productGanttVOList.add(productGanttVO);
}
});
} }
return productGanttVOList; return productGanttVOList;
} }
...@@ -488,7 +488,7 @@ public class ResourceGanttController { ...@@ -488,7 +488,7 @@ public class ResourceGanttController {
// 转换为 ResourceGanttVO 格式 // 转换为 ResourceGanttVO 格式
List<ResourceGanttVO> resourceGanttVOList = new ArrayList<>(); List<ResourceGanttVO> resourceGanttVOList = new ArrayList<>();
List<ResourceGanttVO> resourceGanttVOs = convertToResourceGanttVO1(schedule); List<ResourceGanttVO> resourceGanttVOs = convertToResourceGanttVO1(schedule,sceneId);
resourceGanttVOList.addAll(resourceGanttVOs); resourceGanttVOList.addAll(resourceGanttVOs);
return resourceGanttVOList; return resourceGanttVOList;
...@@ -497,10 +497,13 @@ public class ResourceGanttController { ...@@ -497,10 +497,13 @@ public class ResourceGanttController {
private List<ResourceGanttVO> convertToResourceGanttVO1(Chromosome scheduleChromosome) { private List<ResourceGanttVO> convertToResourceGanttVO1(Chromosome scheduleChromosome,String sceneId) {
List<ResourceGanttVO> resourceGanttVOList = new ArrayList<>(); List<ResourceGanttVO> resourceGanttVOList = new ArrayList<>();
List<Machine> machineList = planResultService.InitCalendarToAllMachines1(scheduleChromosome.getScenarioID()); List<Machine> machineList = planResultService.InitCalendarToAllMachines1(sceneId);
// 遍历所有机器资源 // 遍历所有机器资源
if (machineList != null) { if (machineList != null) {
for (int i = 0; i < machineList.size(); i++) { for (int i = 0; i < machineList.size(); i++) {
...@@ -508,69 +511,70 @@ public class ResourceGanttController { ...@@ -508,69 +511,70 @@ public class ResourceGanttController {
ResourceGanttVO resourceGanttVO = new ResourceGanttVO(); ResourceGanttVO resourceGanttVO = new ResourceGanttVO();
resourceGanttVO.setId(machine.getId()); resourceGanttVO.setId(machine.getId());
resourceGanttVO.setName(machine.getId()+"号设备"); resourceGanttVO.setName(machine.getId() + "号设备");
resourceGanttVO.setShift(convertToVO(machine)); resourceGanttVO.setShift(convertToVO(machine));
// 转换任务列表 // 转换任务列表
List<TaskVO> taskVOList = new ArrayList<>(); List<TaskVO> taskVOList = new ArrayList<>();
if (scheduleChromosome.getResult() != null) {
// 筛选出属于当前设备的任务
List<GAScheduleResult> machineGenes = scheduleChromosome.getResult().stream()
.filter(gene -> gene.getMachineId()==(machine.getId()))
.collect(Collectors.toList());
// 按开始时间排序 if (scheduleChromosome != null){
machineGenes.sort((g1, g2) -> Integer.compare(g1.getStartTime(), g2.getStartTime())); if (scheduleChromosome.getResult() != null ) {
// 筛选出属于当前设备的任务
List<GAScheduleResult> machineGenes = scheduleChromosome.getResult().stream()
.filter(gene -> gene.getMachineId() == (machine.getId()))
.collect(Collectors.toList());
for (GAScheduleResult gene : machineGenes) { // 按开始时间排序
TaskVO taskVO = new TaskVO(); machineGenes.sort((g1, g2) -> Integer.compare(g1.getStartTime(), g2.getStartTime()));
for (GAScheduleResult gene : machineGenes) {
TaskVO taskVO = new TaskVO();
// taskVO.setId(gene.getId()); // 临时处理 // taskVO.setId(gene.getId()); // 临时处理
taskVO.setPlanId(gene.getOrderId()); // 默认值 taskVO.setPlanId(gene.getOrderId()); // 默认值
// taskVO.setProductType(0); // 默认值 // taskVO.setProductType(0); // 默认值
// taskVO.setProductName("产品"+gene.getProductId()); // taskVO.setProductName("产品"+gene.getProductId());
taskVO.setProductId(gene.getProductId()); // 默认值 taskVO.setProductId(gene.getProductId()); // 默认值
taskVO.setQuantity(gene.getQuantity()); taskVO.setQuantity(gene.getQuantity());
taskVO.setStart(scheduleChromosome.getBaseTime().plusSeconds(gene.getStartTime())); taskVO.setStart(scheduleChromosome.getBaseTime().plusSeconds(gene.getStartTime()));
taskVO.setEnd(scheduleChromosome.getBaseTime().plusSeconds(gene.getEndTime())); taskVO.setEnd(scheduleChromosome.getBaseTime().plusSeconds(gene.getEndTime()));
taskVO.setSetup(0); // 默认值 taskVO.setSetup(0); // 默认值
taskVO.setTeardown(gene.getTeardownTime()); // 默认值 taskVO.setTeardown(gene.getTeardownTime()); // 默认值
taskVO.setEquipChange(gene.getChangeoverTime()); // 默认值 taskVO.setEquipChange(gene.getChangeoverTime()); // 默认值
taskVO.setEquipCooling(0); // 默认值 taskVO.setEquipCooling(0); // 默认值
taskVO.setEquipType(resourceGanttVO.getType()); taskVO.setEquipType(resourceGanttVO.getType());
taskVO.setEquipName(resourceGanttVO.getName()); taskVO.setEquipName(resourceGanttVO.getName());
// taskVO.setDuration(calculateDuration( // taskVO.setDuration(calculateDuration(
// scheduleChromosome.getBaseTime().plusMinutes(gene.getStartTime()), // scheduleChromosome.getBaseTime().plusMinutes(gene.getStartTime()),
// scheduleChromosome.getBaseTime().plusMinutes(gene.getEndTime()))); // 计算持续时间 // scheduleChromosome.getBaseTime().plusMinutes(gene.getEndTime()))); // 计算持续时间
taskVO.setDuration(0); // taskVO.setDuration(0); //
taskVO.setEquipId(machine.getId()); taskVO.setEquipId(machine.getId());
taskVO.setShopId(machine.getId()); taskVO.setShopId(machine.getId());
taskVO.setShopName(resourceGanttVO.getShopName()); taskVO.setShopName(resourceGanttVO.getShopName());
taskVO.setStatus(0); // 默认值 taskVO.setStatus(0); // 默认值
taskVO.setDetailId((long) gene.getStartTime()); // 将productId和operationID组合为detailId taskVO.setDetailId((long) gene.getStartTime()); // 将productId和operationID组合为detailId
taskVO.setHeaderId(gene.getEndTime()); // 默认值 taskVO.setHeaderId(gene.getEndTime()); // 默认值
// taskVO.setHeaderName("工艺"+gene.getProductId()); // 默认值 // taskVO.setHeaderName("工艺"+gene.getProductId()); // 默认值
// taskVO.setSeq(gene.getSequenceId()); // 使用工序ID // taskVO.setSeq(gene.getSequenceId()); // 使用工序ID
// taskVO.setSeqName( "工序名称"+gene.getSequenceId()); // taskVO.setSeqName( "工序名称"+gene.getSequenceId());
taskVO.setProcessingTime(gene.getProcessingTime()); taskVO.setProcessingTime(gene.getProcessingTime());
// taskVO.setAbsoluteStart(scheduleChromosome.getBaseTime().plusMinutes(gene.getStartTime())); // taskVO.setAbsoluteStart(scheduleChromosome.getBaseTime().plusMinutes(gene.getStartTime()));
// taskVO.setAbsoluteEnd(scheduleChromosome.getBaseTime().plusMinutes(gene.getEndTime())); // taskVO.setAbsoluteEnd(scheduleChromosome.getBaseTime().plusMinutes(gene.getEndTime()));
taskVOList.add(taskVO); taskVOList.add(taskVO);
// 调试:检查machine中的shifts状态 // 调试:检查machine中的shifts状态
// if (machine.getShifts() != null) { // if (machine.getShifts() != null) {
// for (Shift shift : machine.getShifts()) { // for (Shift shift : machine.getShifts()) {
// System.out.println("Before setting shifts - Shift status: " + shift.getStatus()); // System.out.println("Before setting shifts - Shift status: " + shift.getStatus());
// } // }
// } // }
taskVO.setAbsolutePreparationTime(gene.getTeardownTime()); taskVO.setAbsolutePreparationTime(gene.getTeardownTime());
}
} }
} }
resourceGanttVO.setList(taskVOList); resourceGanttVO.setList(taskVOList);
resourceGanttVOList.add(resourceGanttVO); resourceGanttVOList.add(resourceGanttVO);
} }
...@@ -592,86 +596,89 @@ public class ResourceGanttController { ...@@ -592,86 +596,89 @@ public class ResourceGanttController {
List<ProductGanttVO> productGanttVOList = new ArrayList<>(); List<ProductGanttVO> productGanttVOList = new ArrayList<>();
// 按产品ID和工单ID分组基因 // 按产品ID和工单ID分组基因
if (scheduleChromosome.getResult() != null) {
// 按工单ID分组
scheduleChromosome.getResult().stream()
.collect(Collectors.groupingBy(GAScheduleResult::getOrderId))
.forEach((orderId, genes) -> {
if (!genes.isEmpty()) {
ProductGanttVO productGanttVO = new ProductGanttVO();
GAScheduleResult firstGene = genes.get(0);
productGanttVO.setId(firstGene.getOrderId());
productGanttVO.setProductName("产品"+firstGene.getProductId()); // 默认值,实际应从订单数据获取
productGanttVO.setProductType(0);
productGanttVO.setProductId(firstGene.getProductId());
// 计算总数量(假设同一批次)
productGanttVO.setQuantity(firstGene.getQuantity());
productGanttVO.setCode("编号"+firstGene.getProductId()); // 默认值
productGanttVO.setShopId(firstGene.getMachineId()); // 默认值
productGanttVO.setShopName(firstGene.getMachineId()+"号线"); // 默认值
productGanttVO.setStatus("已发布");
// productGanttVO.setHeaderId(firstGene.getProductId());
productGanttVO.setHeaderName("工艺"+firstGene.getProductId()); // 默认值
// 计算开始和结束时间
int minStartTime = genes.stream()
.mapToInt(GAScheduleResult::getStartTime)
.min()
.orElse(0);
int maxEndTime = genes.stream()
.mapToInt(GAScheduleResult::getEndTime)
.max()
.orElse(0);
productGanttVO.setStartDate(scheduleChromosome.getBaseTime().plusMinutes(minStartTime)); if (scheduleChromosome!= null) {
productGanttVO.setEndDate(scheduleChromosome.getBaseTime().plusMinutes(maxEndTime)); if (scheduleChromosome.getResult() != null) {
// 按工单ID分组
// 转换任务列表 scheduleChromosome.getResult().stream()
List<TaskVO> taskVOList = new ArrayList<>(); .collect(Collectors.groupingBy(GAScheduleResult::getOrderId))
.forEach((orderId, genes) -> {
if (!genes.isEmpty()) {
ProductGanttVO productGanttVO = new ProductGanttVO();
GAScheduleResult firstGene = genes.get(0);
productGanttVO.setId(firstGene.getOrderId());
productGanttVO.setProductName("产品" + firstGene.getProductId()); // 默认值,实际应从订单数据获取
productGanttVO.setProductType(0);
productGanttVO.setProductId(firstGene.getProductId());
// 计算总数量(假设同一批次)
productGanttVO.setQuantity(firstGene.getQuantity());
productGanttVO.setCode("编号" + firstGene.getProductId()); // 默认值
productGanttVO.setShopId(firstGene.getMachineId()); // 默认值
productGanttVO.setShopName(firstGene.getMachineId() + "号线"); // 默认值
productGanttVO.setStatus("已发布");
// productGanttVO.setHeaderId(firstGene.getProductId());
productGanttVO.setHeaderName("工艺" + firstGene.getProductId()); // 默认值
// 计算开始和结束时间
int minStartTime = genes.stream()
.mapToInt(GAScheduleResult::getStartTime)
.min()
.orElse(0);
int maxEndTime = genes.stream()
.mapToInt(GAScheduleResult::getEndTime)
.max()
.orElse(0);
productGanttVO.setStartDate(scheduleChromosome.getBaseTime().plusMinutes(minStartTime));
productGanttVO.setEndDate(scheduleChromosome.getBaseTime().plusMinutes(maxEndTime));
// 转换任务列表
List<TaskVO> taskVOList = new ArrayList<>();
// // 按工序顺序排序 // // 按工序顺序排序
// genes.sort((g1, g2) -> Integer.compare(g1.getSequenceId(), g2.getSequenceId())); // genes.sort((g1, g2) -> Integer.compare(g1.getSequenceId(), g2.getSequenceId()));
for (int i = 0; i < genes.size(); i++) { for (int i = 0; i < genes.size(); i++) {
GAScheduleResult gene = genes.get(i); GAScheduleResult gene = genes.get(i);
TaskVO taskVO = new TaskVO(); TaskVO taskVO = new TaskVO();
taskVO.setId(gene.getOrderId()); // 生成唯一ID taskVO.setId(gene.getOrderId()); // 生成唯一ID
taskVO.setPlanId(String.valueOf(orderId)); taskVO.setPlanId(String.valueOf(orderId));
taskVO.setProductType(0); taskVO.setProductType(0);
taskVO.setProductName("产品"+gene.getProductId()); taskVO.setProductName("产品" + gene.getProductId());
taskVO.setProductId(String.valueOf(gene.getProductId())); taskVO.setProductId(String.valueOf(gene.getProductId()));
taskVO.setQuantity(gene.getQuantity()); taskVO.setQuantity(gene.getQuantity());
taskVO.setStart(scheduleChromosome.getBaseTime().plusSeconds(gene.getStartTime())); taskVO.setStart(scheduleChromosome.getBaseTime().plusSeconds(gene.getStartTime()));
taskVO.setEnd(scheduleChromosome.getBaseTime().plusSeconds(gene.getEndTime())); taskVO.setEnd(scheduleChromosome.getBaseTime().plusSeconds(gene.getEndTime()));
taskVO.setSetup(0); // 默认值 taskVO.setSetup(0); // 默认值
taskVO.setTeardown(gene.getTeardownTime()); // 默认值 taskVO.setTeardown(gene.getTeardownTime()); // 默认值
taskVO.setEquipChange(gene.getChangeoverTime()); // 默认值 taskVO.setEquipChange(gene.getChangeoverTime()); // 默认值
taskVO.setEquipCooling(0); // 默认值 taskVO.setEquipCooling(0); // 默认值
// taskVO.setEquipType("PTT-" + (i+1) + "-" + gene.getOperationName().toUpperCase().substring(0, Math.min(3, gene.getOperationName().length()))); // taskVO.setEquipType("PTT-" + (i+1) + "-" + gene.getOperationName().toUpperCase().substring(0, Math.min(3, gene.getOperationName().length())));
// taskVO.setEquipName(gene.getOperationName()); // taskVO.setEquipName(gene.getOperationName());
taskVO.setDuration(calculateDuration( taskVO.setDuration(calculateDuration(
scheduleChromosome.getBaseTime().plusMinutes(gene.getStartTime()), scheduleChromosome.getBaseTime().plusMinutes(gene.getStartTime()),
scheduleChromosome.getBaseTime().plusMinutes(gene.getEndTime()))); scheduleChromosome.getBaseTime().plusMinutes(gene.getEndTime())));
taskVO.setEquipId(gene.getMachineId()); // 生成设备ID taskVO.setEquipId(gene.getMachineId()); // 生成设备ID
taskVO.setShopId(gene.getMachineId()); taskVO.setShopId(gene.getMachineId());
taskVO.setShopName(gene.getMachineId()+"车间"); taskVO.setShopName(gene.getMachineId() + "车间");
taskVO.setStatus(0); taskVO.setStatus(0);
// taskVO.setDetailId((long) gene.getProductId() * 1000 + gene.getOperationId()); // taskVO.setDetailId((long) gene.getProductId() * 1000 + gene.getOperationId());
// taskVO.setHeaderId(gene.getProductId()); // taskVO.setHeaderId(gene.getProductId());
taskVO.setHeaderName("工艺"+gene.getProductId()); taskVO.setHeaderName("工艺" + gene.getProductId());
// taskVO.setSeq(gene.getSequenceId()); // taskVO.setSeq(gene.getSequenceId());
// taskVO.setSeqName("工序名称"+gene.getSequenceId()); // taskVO.setSeqName("工序名称"+gene.getSequenceId());
// taskVO.setAbsoluteStart(scheduleChromosome.getBaseTime().plusMinutes(gene.getStartTime())); // taskVO.setAbsoluteStart(scheduleChromosome.getBaseTime().plusMinutes(gene.getStartTime()));
// taskVO.setAbsoluteEnd(scheduleChromosome.getBaseTime().plusMinutes(gene.getEndTime())); // taskVO.setAbsoluteEnd(scheduleChromosome.getBaseTime().plusMinutes(gene.getEndTime()));
taskVOList.add(taskVO); taskVOList.add(taskVO);
} }
productGanttVO.setList(taskVOList); productGanttVO.setList(taskVOList);
productGanttVOList.add(productGanttVO); productGanttVOList.add(productGanttVO);
} }
}); });
}
} }
return productGanttVOList; return productGanttVOList;
} }
......
...@@ -28,7 +28,7 @@ private Long equipid; ...@@ -28,7 +28,7 @@ private Long equipid;
private String equipname; private String equipname;
private Long measureparameterid; private Long measureparameterid;
private String measureparametername; private String measureparametername;
private BigDecimal measureduration; private Long measureduration;
private String measureunit; private String measureunit;
private Long measureunitid; private Long measureunitid;
private BigDecimal duration; private BigDecimal duration;
......
...@@ -99,7 +99,7 @@ public class LanuchServiceImpl implements LanuchService { ...@@ -99,7 +99,7 @@ public class LanuchServiceImpl implements LanuchService {
// 1. 创建场景 // 1. 创建场景
String sceneId = createScene(sceneName); String sceneId = createScene(sceneName, username);
if (sceneId == null) { if (sceneId == null) {
return R.failed("场景名称已存在"); return R.failed("场景名称已存在");
} }
...@@ -170,7 +170,7 @@ public class LanuchServiceImpl implements LanuchService { ...@@ -170,7 +170,7 @@ public class LanuchServiceImpl implements LanuchService {
return R.failed("源场景不存在"); return R.failed("源场景不存在");
} }
// 创建场景 // 创建场景
String newSceneId = createScene(newSceneName); String newSceneId = createScene(newSceneName, username);
if (newSceneId == null) { if (newSceneId == null) {
return R.failed("场景名称已存在"); return R.failed("场景名称已存在");
} }
...@@ -346,13 +346,13 @@ public class LanuchServiceImpl implements LanuchService { ...@@ -346,13 +346,13 @@ public class LanuchServiceImpl implements LanuchService {
launchOrder.setSerie(order.getSeries()); launchOrder.setSerie(order.getSeries());
launchOrder.setCreateUser(String.valueOf(order.getCreatoruserid())); launchOrder.setCreateUser(String.valueOf(order.getCreatoruserid()));
launchOrder.setMaterialCode(order.getMmcode()); launchOrder.setMaterialCode(order.getMmcode());
launchOrder.setStartDate(order.getBegintime()); // launchOrder.setStartDate(order.get);
launchOrder.setEndDate(order.getDeliverytime()); launchOrder.setEndDate(order.getDeliverytime());
// launchOrder.setOrderPriority(order.getPrioritry()); // launchOrder.setOrderPriority(order.getPrioritry());
launchOrder.setOrderPriority(1); launchOrder.setOrderPriority(1);
launchOrder.setQuantity(order.getQuantity()); launchOrder.setQuantity(order.getQuantity());
launchOrder.setMaterialId(order.getMmid()); launchOrder.setMaterialId(order.getMmid());
launchOrder.setOrderCode(order.getCode());
String mmid = order.getMmid(); String mmid = order.getMmid();
// // 通过mmid查找对应的工艺 // // 通过mmid查找对应的工艺
// if (mmid != null && !mmid.isEmpty()) { // if (mmid != null && !mmid.isEmpty()) {
...@@ -388,7 +388,7 @@ public class LanuchServiceImpl implements LanuchService { ...@@ -388,7 +388,7 @@ public class LanuchServiceImpl implements LanuchService {
◦ @return 场景ID,如果场景已存在则返回null ◦ @return 场景ID,如果场景已存在则返回null
*/ */
private String createScene(String sceneName) { private String createScene(String sceneName,String userId) {
// 检查场景名称是否已存在 // 检查场景名称是否已存在
boolean exists = prodSceneConfigService.lambdaQuery() boolean exists = prodSceneConfigService.lambdaQuery()
.eq(ProdSceneConfig::getSceneName, sceneName) .eq(ProdSceneConfig::getSceneName, sceneName)
...@@ -406,7 +406,7 @@ public class LanuchServiceImpl implements LanuchService { ...@@ -406,7 +406,7 @@ public class LanuchServiceImpl implements LanuchService {
sceneConfig.setSceneName(sceneName); sceneConfig.setSceneName(sceneName);
sceneConfig.setSceneStatus((short) 1); sceneConfig.setSceneStatus((short) 1);
sceneConfig.setCreateTime(LocalDateTime.now()); sceneConfig.setCreateTime(LocalDateTime.now());
sceneConfig.setCreateUser(userId);
prodSceneConfigService.save(sceneConfig); prodSceneConfigService.save(sceneConfig);
log.info("创建新场景成功,场景ID:{},名称:{}", sceneId, sceneName); log.info("创建新场景成功,场景ID:{},名称:{}", sceneId, sceneName);
...@@ -1190,4 +1190,7 @@ public class LanuchServiceImpl implements LanuchService { ...@@ -1190,4 +1190,7 @@ public class LanuchServiceImpl implements LanuchService {
} }
} }
\ No newline at end of file
...@@ -493,12 +493,13 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0)); ...@@ -493,12 +493,13 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
public Chromosome schedule(String SceneId,LocalDateTime baseTime) { public Chromosome schedule(String SceneId) {
try { try {
ScheduleParams param = new ScheduleParams(); ScheduleParams param = new ScheduleParams();
param.setBaseTime(baseTime); // param.setBaseTime(baseTime);
param.setBaseTime(LocalDateTime.of(2025, 11, 1, 0, 0, 0));
// 1. 读取数据 // 1. 读取数据
......
package com.aps.demo;
import com.aps.entity.Algorithm.GAScheduleResult;
import com.aps.entity.DiscreteParameterDuration;
import com.aps.entity.RoutingDiscreteParam;
import com.aps.entity.basic.Entry;
import com.aps.entity.basic.Machine;
import com.aps.service.DiscreteParameterDurationService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.ApplicationContext;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@SpringBootTest
public class DiscreteParameterDurationTest {
// 使用依赖注入而不是直接new
@Autowired
private DiscreteParameterDurationService calculator;
@Autowired
private ApplicationContext applicationContext;
@Test
public void testChangeoverRules() {
System.out.println("=== 离散参数换型时间计算测试 ===\n");
// 1. 创建测试数据
List<GAScheduleResult> existingGenes = createTestTasks();
List<Entry> allOperations = createTestOperations();
Machine machine = createMachine();
List<DiscreteParameterDuration> parameterDurations = createParameterConfigs();
// 2. 测试场景1:工作时间长规则
testWorkingDurationRule(existingGenes, allOperations, machine, parameterDurations);
// 3. 测试场景2:绝对工作时间长规则
testAbsoluteDurationRule(existingGenes, allOperations, machine, parameterDurations);
// 4. 测试场景3:工作最大间隔规则
testMaxIntervalRule(existingGenes, allOperations, machine, parameterDurations);
// 5. 测试场景4:工单数量规则
testOrderCountRule(existingGenes, allOperations, machine, parameterDurations);
// 6. 测试场景5:累计数量规则
testAccumulatedQuantityRule(existingGenes, allOperations, machine, parameterDurations);
// 7. 测试场景6:参数切换换型
testParameterChangeoverRule(existingGenes, allOperations, machine, parameterDurations);
}
/**
* 测试场景1:工作时间长规则
* 规则:工作时间超过7200秒(2小时)需要换型
*/
private void testWorkingDurationRule(List<GAScheduleResult> existingGenes,
List<Entry> allOperations,
Machine machine,
List<DiscreteParameterDuration> parameterDurations) {
System.out.println("=== 测试场景1:工作时间长规则 ===");
// 创建一个新的任务D
Entry taskD = createOperation("TaskD", "001");
taskD.setId(4);
taskD.setExecId("D");
// 计算换型时间
double changeoverTime = calculator.calculateChangeoverTime(
existingGenes, taskD, machine, allOperations, 36000); // 10小时后
System.out.println("场景描述:A(2h)+B(2h)+C(2h)累计6小时 > 2小时阈值");
System.out.println("任务D需要的换型时间:" + changeoverTime + "分钟");
System.out.println("预期结果:需要换型\n");
}
/**
* 测试场景2:绝对工作时间长规则
* 规则:绝对工作时间超过14400秒(4小时)需要换型
*/
private void testAbsoluteDurationRule(List<GAScheduleResult> existingGenes,
List<Entry> allOperations,
Machine machine,
List<DiscreteParameterDuration> parameterDurations) {
System.out.println("=== 测试场景2:绝对工作时间长规则 ===");
Entry taskD = createOperation("TaskD", "001");
taskD.setId(4);
taskD.setExecId("D");
double changeoverTime = calculator.calculateChangeoverTime(
existingGenes, taskD, machine, allOperations, 21600); // 6小时后
System.out.println("场景描述:从A开始到现在6小时 > 4小时阈值");
System.out.println("任务D需要的换型时间:" + changeoverTime + "分钟");
System.out.println("预期结果:需要换型\n");
}
/**
* 测试场景3:工作最大间隔规则
* 规则:任务间隔超过7200秒(2小时)需要换型
*/
private void testMaxIntervalRule(List<GAScheduleResult> existingGenes,
List<Entry> allOperations,
Machine machine,
List<DiscreteParameterDuration> parameterDurations) {
System.out.println("=== 测试场景3:工作最大间隔规则 ===");
Entry taskD = createOperation("TaskD", "001");
taskD.setId(4);
taskD.setExecId("D");
// 设置任务D的开始时间在C之后3小时
double changeoverTime = calculator.calculateChangeoverTime(
existingGenes, taskD, machine, allOperations, 28800); // 8小时后(C结束2小时后)
System.out.println("场景描述:C在6h结束,D在8h开始,间隔2小时=阈值");
System.out.println("任务D需要的换型时间:" + changeoverTime + "分钟");
System.out.println("预期结果:不需要换型(刚好等于阈值)\n");
}
/**
* 测试场景4:工单数量规则
* 规则:连续生产3个任务需要换型
*/
private void testOrderCountRule(List<GAScheduleResult> existingGenes,
List<Entry> allOperations,
Machine machine,
List<DiscreteParameterDuration> parameterDurations) {
System.out.println("=== 测试场景4:工单数量规则 ===");
Entry taskD = createOperation("TaskD", "001");
taskD.setId(4);
taskD.setExecId("D");
double changeoverTime = calculator.calculateChangeoverTime(
existingGenes, taskD, machine, allOperations, 21600);
System.out.println("场景描述:A(1)+B(2)+C(3)+D(4)=连续4个相同参数任务");
System.out.println("任务D需要的换型时间:" + changeoverTime + "分钟");
System.out.println("预期结果:需要换型\n");
}
/**
* 测试场景5:累计数量规则
* 规则:累计数量达到3000个需要换型
*/
private void testAccumulatedQuantityRule(List<GAScheduleResult> existingGenes,
List<Entry> allOperations,
Machine machine,
List<DiscreteParameterDuration> parameterDurations) {
System.out.println("=== 测试场景5:累计数量规则 ===");
Entry taskD = createOperation("TaskD", "001");
taskD.setId(4);
taskD.setExecId("D");
// 修正:使用Double类型
taskD.setQuantity(1000.0);
double changeoverTime = calculator.calculateChangeoverTime(
existingGenes, taskD, machine, allOperations, 21600);
System.out.println("场景描述:A(1000)+B(1000)+C(8000)累计10000个 > 3000阈值");
System.out.println("任务D需要的换型时间:" + changeoverTime + "分钟");
System.out.println("预期结果:需要换型\n");
}
/**
* 测试场景6:参数切换换型
* 规则:参数001切换到002需要换型
*/
private void testParameterChangeoverRule(List<GAScheduleResult> existingGenes,
List<Entry> allOperations,
Machine machine,
List<DiscreteParameterDuration> parameterDurations) {
System.out.println("=== 测试场景6:参数切换换型规则 ===");
// 创建参数不同的任务D
Entry taskD = createOperation("TaskD", "002"); // 参数从001变为002
taskD.setId(4);
taskD.setExecId("D");
double changeoverTime = calculator.calculateChangeoverTime(
existingGenes, taskD, machine, allOperations, 21600);
System.out.println("场景描述:A/B/C使用参数001,D使用参数002");
System.out.println("任务D需要的换型时间:" + changeoverTime + "分钟");
System.out.println("预期结果:需要换型(参数变化)\n");
}
/**
* 创建测试任务(基于您的JSON数据)
*/
private List<GAScheduleResult> createTestTasks() {
List<GAScheduleResult> tasks = new ArrayList<>();
// 任务A:0-7200秒(2小时),数量1000
tasks.add(createTask("A", 0, 7200, 1, 1000.0));
// 任务B:7200-14400秒(2小时),数量1000
tasks.add(createTask("B", 7200, 14400, 1, 1000.0));
// 任务C:14400-21600秒(2小时),数量8000
tasks.add(createTask("C", 14400, 21600, 1, 8000.0));
return tasks;
}
/**
* 创建测试工序
*/
private List<Entry> createTestOperations() {
List<Entry> operations = new ArrayList<>();
// 任务A
Entry taskA = createOperation("TaskA", "001");
taskA.setId(1);
taskA.setExecId("A");
// 修正:使用Double类型
taskA.setQuantity(1000.0);
operations.add(taskA);
// 任务B
Entry taskB = createOperation("TaskB", "001");
taskB.setId(2);
taskB.setExecId("B");
taskB.setQuantity(1000.0);
operations.add(taskB);
// 任务C
Entry taskC = createOperation("TaskC", "001");
taskC.setId(3);
taskC.setExecId("C");
taskC.setQuantity(8000.0);
operations.add(taskC);
return operations;
}
/**
* 创建测试设备
*/
private Machine createMachine() {
Machine machine = new Machine();
machine.setId(1L); // Machine的ID可能是Long类型
machine.setName("设备A");
return machine;
}
/**
* 创建参数配置
*/
private List<DiscreteParameterDuration> createParameterConfigs() {
List<DiscreteParameterDuration> configs = new ArrayList<>();
// 工作时间长规则:2小时=7200秒
configs.add(createConfig("001", "WorkingDuration", null,
new BigDecimal("7200.0"), new BigDecimal("30.0")));
// 绝对工作时间长规则:4小时=14400秒
configs.add(createConfig("001", "AbsoluteDuration", null,
new BigDecimal("14400.0"), new BigDecimal("30.0")));
// 工作最大间隔规则:2小时=7200秒
configs.add(createConfig("001", "MaxInterval", null,
new BigDecimal("7200.0"), new BigDecimal("30.0")));
// 工单数量规则:3个任务
configs.add(createConfig("001", "OrderCount", null,
new BigDecimal("3.0"), new BigDecimal("30.0")));
// 累计数量规则:3000个
configs.add(createConfig("001", "AccumulatedQuantity", null,
new BigDecimal("3000.0"), new BigDecimal("30.0")));
// 参数切换换型:参数001切换到002需要30分钟
configs.add(createConfig("001", null, "002",
null, new BigDecimal("30.0")));
return configs;
}
/**
* 创建GAScheduleResult任务
*/
private GAScheduleResult createTask(String execId, int startTime, int endTime,
int machineId, Double quantity) {
GAScheduleResult task = new GAScheduleResult();
task.setExecId(execId);
task.setStartTime(startTime);
task.setEndTime(endTime);
task.setMachineId(machineId);
task.setChangeoverTime(0);
// 注意:GAScheduleResult的quantity字段也需要是Double类型
// 如果GAScheduleResult的quantity是BigDecimal,需要转换
// task.setQuantity(new BigDecimal(quantity.toString()));
return task;
}
/**
* 创建Entry工序
*/
private Entry createOperation(String name, String parameterId) {
Entry entry = new Entry();
// 添加离散参数
List<RoutingDiscreteParam> discreteParams = new ArrayList<>();
RoutingDiscreteParam param = new RoutingDiscreteParam();
param.setGroupId("参数组一");
param.setParameterId(parameterId);
discreteParams.add(param);
entry.setDiscreteParameter(discreteParams);
return entry;
}
/**
* 创建参数配置
*/
private DiscreteParameterDuration createConfig(String parameterId, String exp1,
String exp2, BigDecimal measureduration,
BigDecimal duration) {
DiscreteParameterDuration config = new DiscreteParameterDuration();
config.setId(java.util.UUID.randomUUID().toString());
config.setCreationtime(LocalDateTime.now());
config.setCreatoruserid(1L);
config.setLastmodificationtime(LocalDateTime.now());
config.setLastmodifieruserid(1L);
config.setIsdeleted(0L);
config.setGroupid("参数组一");
config.setGroupname("参数组一");
config.setParameterid(parameterId);
config.setParametername("参数" + parameterId);
config.setExp1(exp1);
config.setExp2(exp2);
if (measureduration != null) {
config.setMeasureduration(measureduration.longValue());
}
if (duration != null) {
config.setDuration(duration);
}
config.setUnit("分钟");
config.setUnitid(1L);
config.setMeasureunit("秒");
config.setMeasureunitid(2L);
return config;
}
/**
* 测试数据验证方法
*/
@Test
public void testDataValidation() {
System.out.println("=== 测试数据验证 ===");
List<DiscreteParameterDuration> configs = createParameterConfigs();
printConfigInfo(configs);
// 验证数据类型
for (DiscreteParameterDuration config : configs) {
System.out.printf("配置验证 - ID: %s, 参数ID: %s, 规则类型: %s%n",
config.getId(), config.getParameterid(), config.getExp1());
System.out.printf(" 阈值: %s %s, 换型时间: %s %s%n",
config.getMeasureduration(), config.getMeasureunit(),
config.getDuration(), config.getUnit());
System.out.println(" 数据类型验证通过 ✓");
}
}
/**
* 边界条件测试
*/
@Test
public void testBoundaryConditions() {
System.out.println("=== 边界条件测试 ===");
// 测试1:刚好达到阈值
testBoundaryScenario("刚好达到阈值", 7200.0, 7200.0);
// 测试2:刚好超过阈值
testBoundaryScenario("刚好超过阈值", 7201.0, 7200.0);
// 测试3:刚好低于阈值
testBoundaryScenario("刚好低于阈值", 7199.0, 7200.0);
}
private void testBoundaryScenario(String scenario, Double actual, Double threshold) {
System.out.printf("场景: %s, 实际值: %s, 阈值: %s%n", scenario, actual, threshold);
if (actual >= threshold) {
System.out.println(" 结果: 需要换型 ✓");
} else {
System.out.println(" 结果: 不需要换型 ✓");
}
}
/**
* 辅助方法:打印配置信息
*/
private void printConfigInfo(List<DiscreteParameterDuration> configs) {
System.out.println("=== 当前配置信息 ===");
for (DiscreteParameterDuration config : configs) {
System.out.printf("参数: %s, 规则: %s, 阈值: %s, 换型时间: %s%n",
config.getParameterid(),
config.getExp1(),
config.getMeasureduration() != null ? config.getMeasureduration() + config.getMeasureunit() : "N/A",
config.getDuration() != null ? config.getDuration() + config.getUnit() : "N/A");
}
System.out.println();
}
}
\ 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