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
f0698511
Commit
f0698511
authored
Mar 26, 2026
by
DESKTOP-VKRD9QF\Administration
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
插单修改
parent
9fab7eca
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
31 additions
and
23 deletions
+31
-23
ScheduleOperationService.java
...a/com/aps/service/Algorithm/ScheduleOperationService.java
+31
-23
No files found.
src/main/java/com/aps/service/Algorithm/ScheduleOperationService.java
View file @
f0698511
...
...
@@ -1246,7 +1246,6 @@ if(targetOp.getSequence()>1) {
}
newEntry
.
setIsInterrupt
(
processExec
.
getCanInterrupt
());
// 这里保留资源组ID(设备类型)
newEntry
.
setEquipTypeID
(
processExec
.
getMachineId
());
if
(
processExec
.
getRuntime
()
!=
null
)
{
...
...
@@ -1255,6 +1254,7 @@ if(targetOp.getSequence()>1) {
if
(
processExec
.
getSingleOut
()
!=
null
)
{
newEntry
.
setSingleOut
(
processExec
.
getSingleOut
());
}
newEntry
.
setPriority
(
newLaunchOrder
.
getOrderPriority
()
!=
null
?
newLaunchOrder
.
getOrderPriority
()
:
1
);
if
(
processExec
.
getSetupTime
()
!=
null
)
{
...
...
@@ -1268,12 +1268,12 @@ if(targetOp.getSequence()>1) {
newEntry
.
setEquipTypeName
(
processExec
.
getEquipTypeName
());
newEntry
.
setEquipTypeCode
(
processExec
.
getEquipTypeCode
());
// 与
InitEntrys对齐:machineOptions来源于ProdEquipment(execId -> equipId
)
// 与
InitEntrys 对齐:设备来源于 prod_equipment(真实设备ID
)
List
<
MachineOption
>
machineOptions
=
newProdEquipments
.
stream
()
.
filter
(
pe
->
pe
.
getExecId
()
!=
null
&&
pe
.
getExecId
().
equals
(
processExec
.
getExecId
()))
.
map
(
pe
->
{
MachineOption
mo
=
new
MachineOption
();
mo
.
setMachineId
(
pe
.
getEquipId
());
// 真实设备ID
mo
.
setMachineId
(
pe
.
getEquipId
());
mo
.
setRuntime
(
pe
.
getRuntime
()
!=
null
?
pe
.
getRuntime
()
:
BigDecimal
.
ZERO
);
mo
.
setSingleOut
(
pe
.
getSingleOut
()
!=
null
?
pe
.
getSingleOut
()
:
BigDecimal
.
ONE
);
mo
.
setEquipCode
(
pe
.
getEquipCode
());
...
...
@@ -1289,11 +1289,12 @@ if(targetOp.getSequence()>1) {
}
newEntry
.
setMachineOptions
(
machineOptions
);
newEntry
.
setSelectMachineID
(
null
);
// 后面按
bestSeq
回填
newEntry
.
setSelectMachineID
(
null
);
// 后面按
最优序号
回填
newEntrys
.
add
(
newEntry
);
}
// 建工序链
for
(
int
i
=
0
;
i
<
newEntrys
.
size
();
i
++)
{
Entry
entry
=
newEntrys
.
get
(
i
);
if
(
i
==
0
)
{
...
...
@@ -1382,13 +1383,13 @@ if(targetOp.getSequence()>1) {
boolean
originalIsCheckSf
=
globalParam
.
isIsCheckSf
();
globalParam
.
setIsCheckSf
(
false
);
// 第一次解码
// 第一次解码
:先拿到首工序所在设备
if
(
anchorTime
!=
null
&&
firstEntry
!=
null
)
{
firstEntry
.
setDesignatedStartTime
(
anchorTime
);
}
redecode
(
chromosome
,
chromosome
.
getBaseTime
(),
globalParam
);
// 第二次调整:
锚点占位后推 + 新工单前移
// 第二次调整:
按冻结锚点插位
if
(
anchorTime
!=
null
&&
firstOperationId
>
0
)
{
GAScheduleResult
firstResult
=
chromosome
.
getResult
().
stream
()
.
filter
(
r
->
r
.
getOperationId
()
==
firstOperationId
)
...
...
@@ -1400,16 +1401,20 @@ if(targetOp.getSequence()>1) {
int
anchorSeconds
=
(
int
)
java
.
time
.
temporal
.
ChronoUnit
.
SECONDS
.
between
(
chromosome
.
getBaseTime
(),
anchorTime
);
int
firstDuration
=
Math
.
max
(
1
,
firstResult
.
getEndTime
()
-
firstResult
.
getStartTime
());
// 该设备老任务(不含新工单)
List
<
GAScheduleResult
>
machineOldResults
=
chromosome
.
getResult
().
stream
()
.
filter
(
r
->
r
.
getMachineId
()
==
machineId
)
.
filter
(
r
->
r
.
getGroupId
()
!=
firstResult
.
getGroupId
())
.
sorted
(
Comparator
.
comparingInt
(
GAScheduleResult:
:
getStartTime
))
.
collect
(
Collectors
.
toList
());
// 锚点处占位任务(跨锚点)
GAScheduleResult
pivot
=
machineOldResults
.
stream
()
.
filter
(
r
->
r
.
getStartTime
()
<=
anchorSeconds
&&
r
.
getEndTime
()
>
anchorSeconds
)
.
findFirst
()
.
orElse
(
null
);
// 若锚点没被跨,则取锚点后第一任务
if
(
pivot
==
null
)
{
pivot
=
machineOldResults
.
stream
()
.
filter
(
r
->
r
.
getStartTime
()
>=
anchorSeconds
)
...
...
@@ -1417,6 +1422,7 @@ if(targetOp.getSequence()>1) {
.
orElse
(
null
);
}
// 锚点前最后一单
GAScheduleResult
prev
=
machineOldResults
.
stream
()
.
filter
(
r
->
r
.
getEndTime
()
<=
anchorSeconds
)
.
reduce
((
a
,
b
)
->
b
)
...
...
@@ -1425,18 +1431,23 @@ if(targetOp.getSequence()>1) {
int
newDesignatedStart
;
if
(
pivot
!=
null
)
{
if
(
pivot
.
getStartTime
()
<=
anchorSeconds
&&
pivot
.
getEndTime
()
>
anchorSeconds
)
{
newDesignatedStart
=
pivot
.
getStartTime
();
// 锚点被占:应从占位任务结束后开始
newDesignatedStart
=
pivot
.
getEndTime
();
}
else
{
newDesignatedStart
=
prev
!=
null
?
prev
.
getEndTime
()
:
0
;
// 锚点后有任务:插到该任务前
newDesignatedStart
=
pivot
.
getStartTime
();
}
}
else
{
newDesignatedStart
=
prev
!=
null
?
prev
.
getEndTime
()
:
0
;
// 锚点后无任务:从锚点或锚点前最后一单结束后开始
newDesignatedStart
=
prev
!=
null
?
Math
.
max
(
anchorSeconds
,
prev
.
getEndTime
())
:
anchorSeconds
;
}
if
(
newDesignatedStart
<
0
)
{
newDesignatedStart
=
0
;
// 不能早于冻结边界
if
(
newDesignatedStart
<
anchorSeconds
)
{
newDesignatedStart
=
anchorSeconds
;
}
// 锁新工单首工序起点
Entry
firstEntryRef
=
chromosome
.
getAllOperations
().
stream
()
.
filter
(
e
->
e
.
getId
()
==
firstOperationId
)
.
findFirst
()
...
...
@@ -1454,17 +1465,16 @@ if(targetOp.getSequence()>1) {
firstLock
.
setLockStartTime
(
1
);
}
if
(
pivot
!=
null
)
{
int
pivotStart
=
pivot
.
getStartTime
()
;
// 仅后移 newDesignatedStart 及其后的老任务
int
finalNewDesignatedStart
=
newDesignatedStart
;
List
<
GAScheduleResult
>
needShift
=
machineOldResults
.
stream
()
.
filter
(
r
->
r
.
getStartTime
()
>=
pivot
Start
)
.
filter
(
r
->
r
.
getStartTime
()
>=
finalNewDesignated
Start
)
.
collect
(
Collectors
.
toList
());
for
(
GAScheduleResult
oldResult
:
needShift
)
{
oldResult
.
setDesignatedStartTime
(
oldResult
.
getStartTime
()
+
firstDuration
);
oldResult
.
setLockStartTime
(
1
);
}
}
redecode
(
chromosome
,
chromosome
.
getBaseTime
(),
globalParam
);
}
...
...
@@ -1548,8 +1558,6 @@ if(targetOp.getSequence()>1) {
public
void
MergeOrder
(
Chromosome
chromosome
,
String
sourceorderId
,
String
targetorderId
,
GlobalParam
globalParam
)
{
List
<
Entry
>
allOperations
=
chromosome
.
getAllOperations
();
List
<
GlobalOperationInfo
>
globalOpList
=
chromosome
.
getGlobalOpList
();
...
...
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