场景修改

parent 1a1e87d2
......@@ -11,7 +11,6 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.util.List;
@RestController
......@@ -30,25 +29,23 @@ public class LanuchController {
/**
* 启动工单
*
* @param sceneName 场景名称
* @param username 用户名
* @param sceneId 场景名称
* @param userId 用户名
* @return 处理结果
*/
@PostMapping("/execute")
public R<String> lanuch(
@RequestParam String sceneName,
@RequestHeader(required = false) String username) {
if (username == null || username.isEmpty()) {
username = "system";
}
@RequestParam String sceneId,
@RequestHeader(required = false) String userId) {
return lanuchService.lanuch(sceneName, username);
return lanuchService.lanuch(sceneId, userId);
}
@GetMapping("/schedule")
public Chromosome schedule(@RequestParam String sceneID,@RequestParam LocalDateTime baseTime) {
public Chromosome schedule(@RequestParam String sceneId) {
// 调用 PlanResultService 获取 ScheduleChromosome 列表
Chromosome scheduleChromosomes = planResultService.schedule(sceneID,baseTime);
Chromosome scheduleChromosomes = planResultService.schedule(sceneId);
// 提取所有场景ID
return scheduleChromosomes;
......@@ -57,31 +54,36 @@ public class LanuchController {
@PostMapping("/copyScene")
public R<String> copyScene(
@RequestParam String newSceneName,@RequestParam String oldSceneName,
@RequestHeader(required = false) String username) {
if (username == null || username.isEmpty()) {
username = "system";
}
@RequestParam String newSceneId,@RequestParam String oldSceneId,
@RequestHeader(required = false) String userId) {
return lanuchService.copyScene(oldSceneName,username,newSceneName);
return lanuchService.copyScene(oldSceneId,userId,newSceneId);
}
@GetMapping("/exportPlan")
public R<String> exportPlan(@RequestParam String sceneID) {
public R<String> exportPlan(@RequestParam String sceneId) {
// 调用 PlanResultService 获取 ScheduleChromosome 列表
return lanuchService.exportPlan(sceneID);
return lanuchService.exportPlan(sceneId);
}
@GetMapping("/deleteScene")
public R<Boolean> deleteScene(@RequestParam String sceneID) {
public R<Boolean> deleteScene(@RequestParam String sceneId) {
// 调用 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 {
@Autowired
private PlanSchedulerService schedulingService;
@Autowired
private PlanResultService planResultService;
......@@ -43,7 +43,7 @@ public class ResourceGanttController {
public List<ResourceGanttVO> getResourceGantt1(@RequestParam(required = false, defaultValue = "1") Long sceneId) {
// 从PlanResultService获取ScheduleChromosome列表
List<ScheduleChromosome> scheduleChromosomes = planResultService.execute();
// 根据sceneId查找对应的ScheduleChromosome
ScheduleChromosome targetChromosome = null;
for (ScheduleChromosome chromosome : scheduleChromosomes) {
......@@ -52,26 +52,26 @@ public class ResourceGanttController {
break;
}
}
// 如果找不到对应的场景,返回空列表
if (targetChromosome == null) {
return new ArrayList<>();
}
// 转换为 ResourceGanttVO 格式
List<ResourceGanttVO> resourceGanttVOList = new ArrayList<>();
List<ResourceGanttVO> resourceGanttVOs = convertToResourceGanttVO(targetChromosome);
resourceGanttVOList.addAll(resourceGanttVOs);
return resourceGanttVOList;
}
@GetMapping("/productGantt1")
@Operation(summary = "获取产品甘特图数据", description = "获取产品甘特图数据")
public List<ProductGanttVO> getProductGantt1(@RequestParam String sceneId) {
// 从PlanResultService获取ScheduleChromosome列表
List<ScheduleChromosome> scheduleChromosomes = planResultService.execute();
// 根据sceneId查找对应的ScheduleChromosome
ScheduleChromosome targetChromosome = null;
for (ScheduleChromosome chromosome : scheduleChromosomes) {
......@@ -80,17 +80,17 @@ public class ResourceGanttController {
break;
}
}
// 如果找不到对应的场景,返回空列表
if (targetChromosome == null) {
return new ArrayList<>();
}
// 转换为 ProductGanttVO 格式
List<ProductGanttVO> productGanttVOList = new ArrayList<>();
List<ProductGanttVO> productGanttVOs = convertToProductGanttVO(targetChromosome);
productGanttVOList.addAll(productGanttVOs);
return productGanttVOList;
}
......@@ -135,11 +135,11 @@ public class ResourceGanttController {
@GetMapping("/operationMove")
public Chromosome OperationMove(String SceneId,int opid,LocalDateTime newStartTime,
Long newMachineId) {
Long newMachineId) {
// opid=1;
// newStartTime= LocalDateTime.of(2025, 12, 7, 0, 0);
// newMachineId=3402L;
// SceneId="B571EF6682DB463AB2977B1055A74112";
// SceneId="B571EF6682DB463AB2977B1055A74112";
// 调用 PlanResultService 获取 ScheduleChromosome 列表
Chromosome scheduleChromosomes = planResultService.Move(SceneId,opid,newStartTime,newMachineId);
......@@ -148,7 +148,7 @@ public class ResourceGanttController {
}
@PostMapping("/operationedit")
public Chromosome editOperation(@RequestParam String SceneId,
@RequestBody Entry operation) {
@RequestBody Entry operation) {
Chromosome scheduleChromosomes = planResultService.EditOperation(SceneId,operation);
// 提取所有场景ID
......@@ -157,7 +157,7 @@ public class ResourceGanttController {
@PostMapping("/changebasetime")
public Chromosome ChangeBaseTime(@RequestParam String SceneId,
@RequestParam LocalDateTime BaseTime) {
@RequestParam LocalDateTime BaseTime) {
Chromosome scheduleChromosomes = planResultService.ChangeBaseTime(SceneId,BaseTime);
// 提取所有场景ID
......@@ -172,7 +172,7 @@ public class ResourceGanttController {
opid=1;
// newStartTime= LocalDateTime.of(2025, 12, 7, 0, 0);
// newMachineId=3402L;
splitCounts=new ArrayList<>();
splitCounts=new ArrayList<>();
splitCounts.add(20000d);
splitCounts.add(30000d);
SceneId="B571EF6682DB463AB2977B1055A74112";
......@@ -185,7 +185,7 @@ public class ResourceGanttController {
}
@PostMapping("/operationdel")
public Chromosome DelOperation(@RequestParam String SceneId,
@RequestParam int opid) {
@RequestParam int opid) {
opid=1;
SceneId="B571EF6682DB463AB2977B1055A74112";
......@@ -197,7 +197,7 @@ public class ResourceGanttController {
}
@PostMapping("/operationlocked")
public Chromosome LockedOperation(@RequestParam String SceneId,
@RequestParam int opid,@RequestParam boolean isLocked) {
@RequestParam int opid,@RequestParam boolean isLocked) {
opid=1;
SceneId="B571EF6682DB463AB2977B1055A74112";
......@@ -210,8 +210,8 @@ public class ResourceGanttController {
@PostMapping("/orderspilt")
public Chromosome SpiltOrder(@RequestParam String SceneId,
@RequestParam String orderid,
@RequestBody List<Double> splitCounts) {
@RequestParam String orderid,
@RequestBody List<Double> splitCounts) {
orderid="fcc0892a-0483-4da7-8414-9ce98be36e53";
// newStartTime= LocalDateTime.of(2025, 12, 7, 0, 0);
// newMachineId=3402L;
......@@ -221,10 +221,10 @@ public class ResourceGanttController {
splitCounts.add(10000d);
SceneId="B571EF6682DB463AB2977B1055A74112";
// 数组第一个是0,为复制
// 数组第一个是0,为复制
//splitCounts=new ArrayList<>();
// splitCounts.add(0);
// splitCounts.add(50000d);
// splitCounts.add(0);
// splitCounts.add(50000d);
// 调用 PlanResultService 获取 ScheduleChromosome 列表
Chromosome scheduleChromosomes = planResultService.SpiltOrder(SceneId,orderid,splitCounts.toArray(new Double[0]));
......@@ -240,7 +240,7 @@ public class ResourceGanttController {
targetorderid="2a0f23d2429f4e5da7b3929da75a803d";
SceneId="B571EF6682DB463AB2977B1055A74112";
SceneId="B571EF6682DB463AB2977B1055A74112";
// 调用 PlanResultService 获取 ScheduleChromosome 列表
......@@ -251,7 +251,7 @@ public class ResourceGanttController {
}
/**
* 将 ScheduleChromosome 转换为 ResourceGanttVO 列表
* @param scheduleChromosome 调度结果
......@@ -259,12 +259,12 @@ public class ResourceGanttController {
*/
private List<ResourceGanttVO> convertToResourceGanttVO(ScheduleChromosome scheduleChromosome) {
List<ResourceGanttVO> resourceGanttVOList = new ArrayList<>();
// 遍历所有机器资源
if (scheduleChromosome.getMachines() != null) {
for (int i = 0; i < scheduleChromosome.getMachines().size(); i++) {
Machine machine = scheduleChromosome.getMachines().get(i);
ResourceGanttVO resourceGanttVO = new ResourceGanttVO();
resourceGanttVO.setId(machine.getId());
resourceGanttVO.setName(machine.getName() != null ? machine.getName() : "设备-" + machine.getId());
......@@ -276,7 +276,7 @@ public class ResourceGanttController {
resourceGanttVO.setShopName(machine.getId()+"车间"); // 默认值
resourceGanttVO.setShopId(machine.getId()); // 默认值
resourceGanttVO.setCode("设备编码-" + machine.getId()); // 默认值
resourceGanttVO.setShift(convertToVO(machine));
resourceGanttVO.setShift(convertToVO(machine));
// 转换任务列表
List<TaskVO> taskVOList = new ArrayList<>();
if (scheduleChromosome.getGenes() != null) {
......@@ -284,10 +284,10 @@ public class ResourceGanttController {
List<Gene> machineGenes = scheduleChromosome.getGenes().stream()
.filter(gene -> gene.getMachineId()==(machine.getId()))
.collect(Collectors.toList());
// 按开始时间排序
machineGenes.sort((g1, g2) -> Integer.compare(g1.getStartTime(), g2.getStartTime()));
for (Gene gene : machineGenes) {
TaskVO taskVO = new TaskVO();
taskVO.setId(String.valueOf(gene.getId())); // 临时处理
......@@ -323,29 +323,29 @@ public class ResourceGanttController {
taskVO.setAbsoluteStart(scheduleChromosome.getBaseTime().plusMinutes(gene.getStartTime()));
taskVO.setAbsoluteEnd(scheduleChromosome.getBaseTime().plusMinutes(gene.getEndTime()));
taskVOList.add(taskVO);
// 调试:检查machine中的shifts状态
// if (machine.getShifts() != null) {
// for (Shift shift : machine.getShifts()) {
// System.out.println("Before setting shifts - Shift status: " + shift.getStatus());
// }
// }
taskVO.setAbsolutePreparationTime(gene.getTeardownTime());
}
}
resourceGanttVO.setList(taskVOList);
resourceGanttVOList.add(resourceGanttVO);
}
}
return resourceGanttVOList;
}
/**
* 将 ScheduleChromosome 转换为 ProductGanttVO 列表
* @param scheduleChromosome 调度结果
......@@ -353,88 +353,88 @@ public class ResourceGanttController {
*/
private List<ProductGanttVO> convertToProductGanttVO(ScheduleChromosome scheduleChromosome) {
List<ProductGanttVO> productGanttVOList = new ArrayList<>();
// 按产品ID和工单ID分组基因
if (scheduleChromosome.getGenes() != null) {
// 按工单ID分组
scheduleChromosome.getGenes().stream()
.collect(Collectors.groupingBy(Gene::getOrderId))
.forEach((orderId, genes) -> {
if (!genes.isEmpty()) {
ProductGanttVO productGanttVO = new ProductGanttVO();
Gene firstGene = genes.get(0);
productGanttVO.setId(String.valueOf(firstGene.getId()));
productGanttVO.setProductName("产品"+firstGene.getProductId()); // 默认值,实际应从订单数据获取
productGanttVO.setProductType(0);
productGanttVO.setProductId(String.valueOf(firstGene.getProductId()));
// 计算总数量(假设同一批次)
productGanttVO.setQuantity(firstGene.getBatchSize());
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(Gene::getStartTime)
.min()
.orElse(0);
int maxEndTime = genes.stream()
.mapToInt(Gene::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()));
for (int i = 0; i < genes.size(); i++) {
Gene gene = genes.get(i);
TaskVO taskVO = new TaskVO();
taskVO.setId(String.valueOf(gene.getId())); // 生成唯一ID
taskVO.setPlanId(String.valueOf(orderId));
taskVO.setProductType(0);
taskVO.setProductName("产品"+gene.getProductId());
taskVO.setProductId(String.valueOf(gene.getProductId()));
taskVO.setQuantity(gene.getBatchSize());
taskVO.setStart(scheduleChromosome.getBaseTime().plusMinutes(gene.getAbsoluteStartTime()));
taskVO.setEnd(scheduleChromosome.getBaseTime().plusMinutes(gene.getAbsoluteEndTime()));
taskVO.setSetup(gene.getAbsolutePreparationTime()*60); // 默认值
taskVO.setTeardown(gene.getAbsoluteTeardownTime()*60); // 默认值
taskVO.setEquipChange(gene.getSetupTime()*60); // 默认值
taskVO.setEquipCooling(0); // 默认值
.collect(Collectors.groupingBy(Gene::getOrderId))
.forEach((orderId, genes) -> {
if (!genes.isEmpty()) {
ProductGanttVO productGanttVO = new ProductGanttVO();
Gene firstGene = genes.get(0);
productGanttVO.setId(String.valueOf(firstGene.getId()));
productGanttVO.setProductName("产品"+firstGene.getProductId()); // 默认值,实际应从订单数据获取
productGanttVO.setProductType(0);
productGanttVO.setProductId(String.valueOf(firstGene.getProductId()));
// 计算总数量(假设同一批次)
productGanttVO.setQuantity(firstGene.getBatchSize());
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(Gene::getStartTime)
.min()
.orElse(0);
int maxEndTime = genes.stream()
.mapToInt(Gene::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()));
for (int i = 0; i < genes.size(); i++) {
Gene gene = genes.get(i);
TaskVO taskVO = new TaskVO();
taskVO.setId(String.valueOf(gene.getId())); // 生成唯一ID
taskVO.setPlanId(String.valueOf(orderId));
taskVO.setProductType(0);
taskVO.setProductName("产品"+gene.getProductId());
taskVO.setProductId(String.valueOf(gene.getProductId()));
taskVO.setQuantity(gene.getBatchSize());
taskVO.setStart(scheduleChromosome.getBaseTime().plusMinutes(gene.getAbsoluteStartTime()));
taskVO.setEnd(scheduleChromosome.getBaseTime().plusMinutes(gene.getAbsoluteEndTime()));
taskVO.setSetup(gene.getAbsolutePreparationTime()*60); // 默认值
taskVO.setTeardown(gene.getAbsoluteTeardownTime()*60); // 默认值
taskVO.setEquipChange(gene.getSetupTime()*60); // 默认值
taskVO.setEquipCooling(0); // 默认值
// taskVO.setEquipType("PTT-" + (i+1) + "-" + gene.getOperationName().toUpperCase().substring(0, Math.min(3, gene.getOperationName().length())));
// taskVO.setEquipName(gene.getOperationName());
taskVO.setDuration(calculateDuration(
scheduleChromosome.getBaseTime().plusMinutes(gene.getStartTime()),
scheduleChromosome.getBaseTime().plusMinutes(gene.getEndTime())));
taskVO.setEquipId(gene.getMachineId()); // 生成设备ID
taskVO.setShopId(gene.getMachineId());
taskVO.setShopName(gene.getMachineId()+"车间");
taskVO.setStatus(0);
taskVO.setDetailId((long) gene.getProductId() * 1000 + gene.getOperationId());
taskVO.setHeaderId(gene.getProductId());
taskVO.setHeaderName("工艺"+gene.getProductId());
taskVO.setSeq(gene.getSequenceId());
taskVO.setSeqName("工序名称"+gene.getSequenceId());
taskVO.setAbsoluteStart(scheduleChromosome.getBaseTime().plusMinutes(gene.getStartTime()));
taskVO.setAbsoluteEnd(scheduleChromosome.getBaseTime().plusMinutes(gene.getEndTime()));
taskVO.setDuration(calculateDuration(
scheduleChromosome.getBaseTime().plusMinutes(gene.getStartTime()),
scheduleChromosome.getBaseTime().plusMinutes(gene.getEndTime())));
taskVO.setEquipId(gene.getMachineId()); // 生成设备ID
taskVO.setShopId(gene.getMachineId());
taskVO.setShopName(gene.getMachineId()+"车间");
taskVO.setStatus(0);
taskVO.setDetailId((long) gene.getProductId() * 1000 + gene.getOperationId());
taskVO.setHeaderId(gene.getProductId());
taskVO.setHeaderName("工艺"+gene.getProductId());
taskVO.setSeq(gene.getSequenceId());
taskVO.setSeqName("工序名称"+gene.getSequenceId());
taskVO.setAbsoluteStart(scheduleChromosome.getBaseTime().plusMinutes(gene.getStartTime()));
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;
}
......@@ -488,7 +488,7 @@ public class ResourceGanttController {
// 转换为 ResourceGanttVO 格式
List<ResourceGanttVO> resourceGanttVOList = new ArrayList<>();
List<ResourceGanttVO> resourceGanttVOs = convertToResourceGanttVO1(schedule);
List<ResourceGanttVO> resourceGanttVOs = convertToResourceGanttVO1(schedule,sceneId);
resourceGanttVOList.addAll(resourceGanttVOs);
return resourceGanttVOList;
......@@ -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<Machine> machineList = planResultService.InitCalendarToAllMachines1(scheduleChromosome.getScenarioID());
List<Machine> machineList = planResultService.InitCalendarToAllMachines1(sceneId);
// 遍历所有机器资源
if (machineList != null) {
for (int i = 0; i < machineList.size(); i++) {
......@@ -508,69 +511,70 @@ public class ResourceGanttController {
ResourceGanttVO resourceGanttVO = new ResourceGanttVO();
resourceGanttVO.setId(machine.getId());
resourceGanttVO.setName(machine.getId()+"号设备");
resourceGanttVO.setName(machine.getId() + "号设备");
resourceGanttVO.setShift(convertToVO(machine));
// 转换任务列表
List<TaskVO> taskVOList = new ArrayList<>();
if (scheduleChromosome.getResult() != null) {
// 筛选出属于当前设备的任务
List<GAScheduleResult> machineGenes = scheduleChromosome.getResult().stream()
.filter(gene -> gene.getMachineId()==(machine.getId()))
.collect(Collectors.toList());
// 按开始时间排序
machineGenes.sort((g1, g2) -> Integer.compare(g1.getStartTime(), g2.getStartTime()));
if (scheduleChromosome != null){
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.setPlanId(gene.getOrderId()); // 默认值
taskVO.setPlanId(gene.getOrderId()); // 默认值
// taskVO.setProductType(0); // 默认值
// taskVO.setProductName("产品"+gene.getProductId());
taskVO.setProductId(gene.getProductId()); // 默认值
taskVO.setQuantity(gene.getQuantity());
taskVO.setStart(scheduleChromosome.getBaseTime().plusSeconds(gene.getStartTime()));
taskVO.setEnd(scheduleChromosome.getBaseTime().plusSeconds(gene.getEndTime()));
taskVO.setSetup(0); // 默认值
taskVO.setTeardown(gene.getTeardownTime()); // 默认值
taskVO.setEquipChange(gene.getChangeoverTime()); // 默认值
taskVO.setEquipCooling(0); // 默认值
taskVO.setEquipType(resourceGanttVO.getType());
taskVO.setEquipName(resourceGanttVO.getName());
taskVO.setProductId(gene.getProductId()); // 默认值
taskVO.setQuantity(gene.getQuantity());
taskVO.setStart(scheduleChromosome.getBaseTime().plusSeconds(gene.getStartTime()));
taskVO.setEnd(scheduleChromosome.getBaseTime().plusSeconds(gene.getEndTime()));
taskVO.setSetup(0); // 默认值
taskVO.setTeardown(gene.getTeardownTime()); // 默认值
taskVO.setEquipChange(gene.getChangeoverTime()); // 默认值
taskVO.setEquipCooling(0); // 默认值
taskVO.setEquipType(resourceGanttVO.getType());
taskVO.setEquipName(resourceGanttVO.getName());
// taskVO.setDuration(calculateDuration(
// scheduleChromosome.getBaseTime().plusMinutes(gene.getStartTime()),
// scheduleChromosome.getBaseTime().plusMinutes(gene.getEndTime()))); // 计算持续时间
taskVO.setDuration(0); //
taskVO.setEquipId(machine.getId());
taskVO.setShopId(machine.getId());
taskVO.setShopName(resourceGanttVO.getShopName());
taskVO.setStatus(0); // 默认值
taskVO.setDuration(0); //
taskVO.setEquipId(machine.getId());
taskVO.setShopId(machine.getId());
taskVO.setShopName(resourceGanttVO.getShopName());
taskVO.setStatus(0); // 默认值
taskVO.setDetailId((long) gene.getStartTime()); // 将productId和operationID组合为detailId
taskVO.setHeaderId(gene.getEndTime()); // 默认值
taskVO.setDetailId((long) gene.getStartTime()); // 将productId和operationID组合为detailId
taskVO.setHeaderId(gene.getEndTime()); // 默认值
// taskVO.setHeaderName("工艺"+gene.getProductId()); // 默认值
// taskVO.setSeq(gene.getSequenceId()); // 使用工序ID
// taskVO.setSeqName( "工序名称"+gene.getSequenceId());
taskVO.setProcessingTime(gene.getProcessingTime());
taskVO.setProcessingTime(gene.getProcessingTime());
// taskVO.setAbsoluteStart(scheduleChromosome.getBaseTime().plusMinutes(gene.getStartTime()));
// taskVO.setAbsoluteEnd(scheduleChromosome.getBaseTime().plusMinutes(gene.getEndTime()));
taskVOList.add(taskVO);
taskVOList.add(taskVO);
// 调试:检查machine中的shifts状态
// 调试:检查machine中的shifts状态
// if (machine.getShifts() != null) {
// for (Shift shift : machine.getShifts()) {
// System.out.println("Before setting shifts - Shift status: " + shift.getStatus());
// }
// }
taskVO.setAbsolutePreparationTime(gene.getTeardownTime());
taskVO.setAbsolutePreparationTime(gene.getTeardownTime());
}
}
}
resourceGanttVO.setList(taskVOList);
resourceGanttVOList.add(resourceGanttVO);
}
......@@ -592,86 +596,89 @@ public class ResourceGanttController {
List<ProductGanttVO> productGanttVOList = new ArrayList<>();
// 按产品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));
productGanttVO.setEndDate(scheduleChromosome.getBaseTime().plusMinutes(maxEndTime));
// 转换任务列表
List<TaskVO> taskVOList = new ArrayList<>();
if (scheduleChromosome!= null) {
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));
productGanttVO.setEndDate(scheduleChromosome.getBaseTime().plusMinutes(maxEndTime));
// 转换任务列表
List<TaskVO> taskVOList = new ArrayList<>();
// // 按工序顺序排序
// genes.sort((g1, g2) -> Integer.compare(g1.getSequenceId(), g2.getSequenceId()));
for (int i = 0; i < genes.size(); i++) {
GAScheduleResult gene = genes.get(i);
TaskVO taskVO = new TaskVO();
taskVO.setId(gene.getOrderId()); // 生成唯一ID
taskVO.setPlanId(String.valueOf(orderId));
taskVO.setProductType(0);
taskVO.setProductName("产品"+gene.getProductId());
taskVO.setProductId(String.valueOf(gene.getProductId()));
taskVO.setQuantity(gene.getQuantity());
taskVO.setStart(scheduleChromosome.getBaseTime().plusSeconds(gene.getStartTime()));
taskVO.setEnd(scheduleChromosome.getBaseTime().plusSeconds(gene.getEndTime()));
taskVO.setSetup(0); // 默认值
taskVO.setTeardown(gene.getTeardownTime()); // 默认值
taskVO.setEquipChange(gene.getChangeoverTime()); // 默认值
taskVO.setEquipCooling(0); // 默认值
for (int i = 0; i < genes.size(); i++) {
GAScheduleResult gene = genes.get(i);
TaskVO taskVO = new TaskVO();
taskVO.setId(gene.getOrderId()); // 生成唯一ID
taskVO.setPlanId(String.valueOf(orderId));
taskVO.setProductType(0);
taskVO.setProductName("产品" + gene.getProductId());
taskVO.setProductId(String.valueOf(gene.getProductId()));
taskVO.setQuantity(gene.getQuantity());
taskVO.setStart(scheduleChromosome.getBaseTime().plusSeconds(gene.getStartTime()));
taskVO.setEnd(scheduleChromosome.getBaseTime().plusSeconds(gene.getEndTime()));
taskVO.setSetup(0); // 默认值
taskVO.setTeardown(gene.getTeardownTime()); // 默认值
taskVO.setEquipChange(gene.getChangeoverTime()); // 默认值
taskVO.setEquipCooling(0); // 默认值
// taskVO.setEquipType("PTT-" + (i+1) + "-" + gene.getOperationName().toUpperCase().substring(0, Math.min(3, gene.getOperationName().length())));
// taskVO.setEquipName(gene.getOperationName());
taskVO.setDuration(calculateDuration(
scheduleChromosome.getBaseTime().plusMinutes(gene.getStartTime()),
scheduleChromosome.getBaseTime().plusMinutes(gene.getEndTime())));
taskVO.setEquipId(gene.getMachineId()); // 生成设备ID
taskVO.setShopId(gene.getMachineId());
taskVO.setShopName(gene.getMachineId()+"车间");
taskVO.setStatus(0);
taskVO.setDuration(calculateDuration(
scheduleChromosome.getBaseTime().plusMinutes(gene.getStartTime()),
scheduleChromosome.getBaseTime().plusMinutes(gene.getEndTime())));
taskVO.setEquipId(gene.getMachineId()); // 生成设备ID
taskVO.setShopId(gene.getMachineId());
taskVO.setShopName(gene.getMachineId() + "车间");
taskVO.setStatus(0);
// taskVO.setDetailId((long) gene.getProductId() * 1000 + gene.getOperationId());
// taskVO.setHeaderId(gene.getProductId());
taskVO.setHeaderName("工艺"+gene.getProductId());
taskVO.setHeaderName("工艺" + gene.getProductId());
// taskVO.setSeq(gene.getSequenceId());
// taskVO.setSeqName("工序名称"+gene.getSequenceId());
// taskVO.setAbsoluteStart(scheduleChromosome.getBaseTime().plusMinutes(gene.getStartTime()));
// 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;
}
......
......@@ -28,7 +28,7 @@ private Long equipid;
private String equipname;
private Long measureparameterid;
private String measureparametername;
private BigDecimal measureduration;
private Long measureduration;
private String measureunit;
private Long measureunitid;
private BigDecimal duration;
......
......@@ -99,7 +99,7 @@ public class LanuchServiceImpl implements LanuchService {
// 1. 创建场景
String sceneId = createScene(sceneName);
String sceneId = createScene(sceneName, username);
if (sceneId == null) {
return R.failed("场景名称已存在");
}
......@@ -170,7 +170,7 @@ public class LanuchServiceImpl implements LanuchService {
return R.failed("源场景不存在");
}
// 创建场景
String newSceneId = createScene(newSceneName);
String newSceneId = createScene(newSceneName, username);
if (newSceneId == null) {
return R.failed("场景名称已存在");
}
......@@ -346,13 +346,13 @@ public class LanuchServiceImpl implements LanuchService {
launchOrder.setSerie(order.getSeries());
launchOrder.setCreateUser(String.valueOf(order.getCreatoruserid()));
launchOrder.setMaterialCode(order.getMmcode());
launchOrder.setStartDate(order.getBegintime());
// launchOrder.setStartDate(order.get);
launchOrder.setEndDate(order.getDeliverytime());
// launchOrder.setOrderPriority(order.getPrioritry());
// launchOrder.setOrderPriority(order.getPrioritry());
launchOrder.setOrderPriority(1);
launchOrder.setQuantity(order.getQuantity());
launchOrder.setMaterialId(order.getMmid());
launchOrder.setOrderCode(order.getCode());
String mmid = order.getMmid();
// // 通过mmid查找对应的工艺
// if (mmid != null && !mmid.isEmpty()) {
......@@ -388,7 +388,7 @@ public class LanuchServiceImpl implements LanuchService {
◦ @return 场景ID,如果场景已存在则返回null
*/
private String createScene(String sceneName) {
private String createScene(String sceneName,String userId) {
// 检查场景名称是否已存在
boolean exists = prodSceneConfigService.lambdaQuery()
.eq(ProdSceneConfig::getSceneName, sceneName)
......@@ -406,7 +406,7 @@ public class LanuchServiceImpl implements LanuchService {
sceneConfig.setSceneName(sceneName);
sceneConfig.setSceneStatus((short) 1);
sceneConfig.setCreateTime(LocalDateTime.now());
sceneConfig.setCreateUser(userId);
prodSceneConfigService.save(sceneConfig);
log.info("创建新场景成功,场景ID:{},名称:{}", sceneId, sceneName);
......@@ -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));
public Chromosome schedule(String SceneId,LocalDateTime baseTime) {
public Chromosome schedule(String SceneId) {
try {
ScheduleParams param = new ScheduleParams();
param.setBaseTime(baseTime);
// param.setBaseTime(baseTime);
param.setBaseTime(LocalDateTime.of(2025, 11, 1, 0, 0, 0));
// 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