Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
H
HYH.APSJ
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
佟礼
HYH.APSJ
Commits
2c8b8b29
Commit
2c8b8b29
authored
Dec 12, 2025
by
DESKTOP-VKRD9QF\Administration
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
场景修改
parent
1a1e87d2
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
675 additions
and
240 deletions
+675
-240
LanuchController.java
src/main/java/com/aps/controller/LanuchController.java
+23
-21
ResourceGanttController.java
...ava/com/aps/controller/gantt/ResourceGanttController.java
+216
-209
DiscreteParameterDuration.java
src/main/java/com/aps/entity/DiscreteParameterDuration.java
+1
-1
LanuchServiceImpl.java
src/main/java/com/aps/service/impl/LanuchServiceImpl.java
+10
-7
PlanResultService.java
src/main/java/com/aps/service/plan/PlanResultService.java
+3
-2
DiscreteParameterDurationTest.java
...test/java/com/aps/demo/DiscreteParameterDurationTest.java
+422
-0
No files found.
src/main/java/com/aps/controller/LanuchController.java
View file @
2c8b8b29
...
@@ -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 scene
Name
场景名称
* @param scene
Id
场景名称
* @param user
name
用户名
* @param user
Id
用户名
* @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
sceneI
D
,
@RequestParam
LocalDateTime
baseTime
)
{
public
Chromosome
schedule
(
@RequestParam
String
sceneI
d
)
{
// 调用 PlanResultService 获取 ScheduleChromosome 列表
// 调用 PlanResultService 获取 ScheduleChromosome 列表
Chromosome
scheduleChromosomes
=
planResultService
.
schedule
(
sceneI
D
,
baseTime
);
Chromosome
scheduleChromosomes
=
planResultService
.
schedule
(
sceneI
d
);
// 提取所有场景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
(
oldScene
Name
,
username
,
newSceneName
);
return
lanuchService
.
copyScene
(
oldScene
Id
,
userId
,
newSceneId
);
}
}
@GetMapping
(
"/exportPlan"
)
@GetMapping
(
"/exportPlan"
)
public
R
<
String
>
exportPlan
(
@RequestParam
String
sceneI
D
)
{
public
R
<
String
>
exportPlan
(
@RequestParam
String
sceneI
d
)
{
// 调用 PlanResultService 获取 ScheduleChromosome 列表
// 调用 PlanResultService 获取 ScheduleChromosome 列表
return
lanuchService
.
exportPlan
(
sceneI
D
);
return
lanuchService
.
exportPlan
(
sceneI
d
);
}
}
@GetMapping
(
"/deleteScene"
)
@GetMapping
(
"/deleteScene"
)
public
R
<
Boolean
>
deleteScene
(
@RequestParam
String
sceneI
D
)
{
public
R
<
Boolean
>
deleteScene
(
@RequestParam
String
sceneI
d
)
{
// 调用 PlanResultService 获取 ScheduleChromosome 列表
// 调用 PlanResultService 获取 ScheduleChromosome 列表
return
R
.
ok
(
prodSceneConfigService
.
deleteSceneById
(
sceneI
D
));
return
R
.
ok
(
prodSceneConfigService
.
deleteSceneById
(
sceneI
d
));
}
}
@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
src/main/java/com/aps/controller/gantt/ResourceGanttController.java
View file @
2c8b8b29
...
@@ -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
(
20000
d
);
splitCounts
.
add
(
20000
d
);
splitCounts
.
add
(
30000
d
);
splitCounts
.
add
(
30000
d
);
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
(
10000
d
);
splitCounts
.
add
(
10000
d
);
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
;
}
}
...
...
src/main/java/com/aps/entity/DiscreteParameterDuration.java
View file @
2c8b8b29
...
@@ -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
;
...
...
src/main/java/com/aps/service/impl/LanuchServiceImpl.java
View file @
2c8b8b29
...
@@ -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
src/main/java/com/aps/service/plan/PlanResultService.java
View file @
2c8b8b29
...
@@ -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. 读取数据
...
...
src/test/java/com/aps/demo/DiscreteParameterDurationTest.java
0 → 100644
View file @
2c8b8b29
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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment