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
45ee5031
Commit
45ee5031
authored
Feb 10, 2026
by
Tong Li
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改字段
parent
f5e8c691
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
33 additions
and
33 deletions
+33
-33
Entry.java
src/main/java/com/aps/entity/basic/Entry.java
+16
-16
GeneticDecoder.java
src/main/java/com/aps/service/Algorithm/GeneticDecoder.java
+7
-7
MaterialRequirementService.java
...com/aps/service/Algorithm/MaterialRequirementService.java
+2
-2
ScheduleOperationService.java
...a/com/aps/service/Algorithm/ScheduleOperationService.java
+8
-8
No files found.
src/main/java/com/aps/entity/basic/Entry.java
View file @
45ee5031
...
@@ -21,7 +21,7 @@ import java.util.List;
...
@@ -21,7 +21,7 @@ import java.util.List;
@Data
@Data
public
class
Entry
{
public
class
Entry
{
public
Entry
()
{
public
Entry
()
{
P
revEntryIds
=
new
ArrayList
<
OperationDependency
>();
p
revEntryIds
=
new
ArrayList
<
OperationDependency
>();
}
}
/**
/**
...
@@ -57,29 +57,29 @@ public class Entry {
...
@@ -57,29 +57,29 @@ public class Entry {
/**
/**
* 工单ID
* 工单ID
*/
*/
p
ublic
String
E
xecId
;
p
rivate
String
e
xecId
;
/**
/**
* 工单ID
* 工单ID
*/
*/
p
ublic
String
M
ainId
;
p
rivate
String
m
ainId
;
/**
/**
* 离散参数
* 离散参数
*/
*/
p
ublic
List
<
RoutingDiscreteParam
>
D
iscreteParameter
;
p
rivate
List
<
RoutingDiscreteParam
>
d
iscreteParameter
;
/**
/**
* 基因编号
* 基因编号
*/
*/
p
ublic
double
P
riority
=
1
;
p
rivate
double
p
riority
=
1
;
/**
/**
* 数量
* 数量
*/
*/
p
ublic
double
Q
uantity
;
p
rivate
double
q
uantity
;
/**
/**
* 工序顺序
* 工序顺序
*/
*/
p
ublic
int
S
equence
;
p
rivate
int
s
equence
;
/**
/**
* 可选设备列表
* 可选设备列表
*/
*/
...
@@ -93,22 +93,22 @@ public class Entry {
...
@@ -93,22 +93,22 @@ public class Entry {
/**
/**
* 前工单ID
* 前工单ID
*/
*/
p
ublic
List
<
OperationDependency
>
P
revEntryIds
;
//前工序
p
rivate
List
<
OperationDependency
>
p
revEntryIds
;
//前工序
/**
/**
* 后工单ID
* 后工单ID
*/
*/
p
ublic
List
<
OperationDependency
>
N
extEntryIds
;
//后工序
p
rivate
List
<
OperationDependency
>
n
extEntryIds
;
//后工序
/**
/**
* 数据状态 1 拆分 2 新建
* 数据状态 1 拆分 2 新建
*/
*/
p
ublic
Integer
state
;
p
rivate
Integer
state
;
/**
/**
* 是否可中断,间缝插针
* 是否可中断,间缝插针
*/
*/
public
Long
I
sInterrupt
=
1
l
;
private
Long
i
sInterrupt
=
1
l
;
/**
/**
* 所需物料
* 所需物料
...
@@ -121,26 +121,26 @@ public class Entry {
...
@@ -121,26 +121,26 @@ public class Entry {
* 设备资源组
* 设备资源组
*/
*/
p
ublic
Long
E
quipTypeID
;
p
rivate
Long
e
quipTypeID
;
/// <summary>
/// <summary>
/// 当前工序依赖的前置工序ID(半成品工序→成品工序)
/// 当前工序依赖的前置工序ID(半成品工序→成品工序)
/// </summary>
/// </summary>
p
ublic
List
<
Integer
>
D
ependentOnOrderIds
=
new
ArrayList
<>();
p
rivate
List
<
Integer
>
d
ependentOnOrderIds
=
new
ArrayList
<>();
/// <summary>
/// <summary>
/// 关联的成品工序ID(核心:明确该半成品服务于哪个成品工序)
/// 关联的成品工序ID(核心:明确该半成品服务于哪个成品工序)
/// </summary>
/// </summary>
p
ublic
List
<
Integer
>
T
argetFinishedOperationId
;
p
rivate
List
<
Integer
>
t
argetFinishedOperationId
;
p
ublic
boolean
newCreate
=
false
;
p
rivate
boolean
newCreate
=
false
;
/// <summary>
/// <summary>
/// 半成品最晚完工时间(即成品工序开始时间-1天)
/// 半成品最晚完工时间(即成品工序开始时间-1天)
/// </summary>
/// </summary>
p
ublic
LocalDateTime
L
atestCompletionTime
;
p
rivate
LocalDateTime
l
atestCompletionTime
;
private
String
equipTypeName
;
//资源组名称
private
String
equipTypeName
;
//资源组名称
...
...
src/main/java/com/aps/service/Algorithm/GeneticDecoder.java
View file @
45ee5031
...
@@ -566,13 +566,13 @@ if(finishedOrder==null||finishedOrder.size()==0)
...
@@ -566,13 +566,13 @@ if(finishedOrder==null||finishedOrder.size()==0)
if
(
setupTime
==
0
)
if
(
setupTime
==
0
)
{
{
geneDetails
=
machineCalculator
.
getNextAvailableTime
(
machine
,
earliestStartTime
,
-
1
,
geneDetails
=
machineCalculator
.
getNextAvailableTime
(
machine
,
earliestStartTime
,
-
1
,
processingTimeTotal
,
machineTasks
,
operation
.
IsInterrupt
!=
1
,
true
,
processingTime
,
operation
.
getQuantity
(),
true
);
processingTimeTotal
,
machineTasks
,
operation
.
getIsInterrupt
()
!=
1
,
true
,
processingTime
,
operation
.
getQuantity
(),
true
);
}
else
{
}
else
{
CopyOnWriteArrayList
<
TimeSegment
>
AvailableTimeSegment
=
(
CopyOnWriteArrayList
<
TimeSegment
>)
reslte
.
get
(
6
);
CopyOnWriteArrayList
<
TimeSegment
>
AvailableTimeSegment
=
(
CopyOnWriteArrayList
<
TimeSegment
>)
reslte
.
get
(
6
);
Map
<
Integer
,
Object
>
result
=
machineCalculator
.
CreateScheduleResult
(
machine
,
processingTimeTotal
,
earliestStartTime
,
Map
<
Integer
,
Object
>
result
=
machineCalculator
.
CreateScheduleResult
(
machine
,
processingTimeTotal
,
earliestStartTime
,
AvailableTimeSegment
,
processingTime
,
operation
.
getQuantity
(),
operation
.
IsInterrupt
!=
1
,
setupTime
,
_globalParam
.
is_smoothChangeOverInWeek
(),
setupStartTime
);
AvailableTimeSegment
,
processingTime
,
operation
.
getQuantity
(),
operation
.
getIsInterrupt
()
!=
1
,
setupTime
,
_globalParam
.
is_smoothChangeOverInWeek
(),
setupStartTime
);
...
@@ -582,7 +582,7 @@ if(finishedOrder==null||finishedOrder.size()==0)
...
@@ -582,7 +582,7 @@ if(finishedOrder==null||finishedOrder.size()==0)
}
}
}
else
{
}
else
{
geneDetails
=
machineCalculator
.
getNextAvailableTime
(
machine
,
earliestStartTime
,
-
1
,
geneDetails
=
machineCalculator
.
getNextAvailableTime
(
machine
,
earliestStartTime
,
-
1
,
processingTimeTotal
,
machineTasks
,
operation
.
IsInterrupt
!=
1
,
true
,
processingTime
,
operation
.
getQuantity
(),
true
);
processingTimeTotal
,
machineTasks
,
operation
.
getIsInterrupt
()
!=
1
,
true
,
processingTime
,
operation
.
getQuantity
(),
true
);
}
}
...
@@ -1270,7 +1270,7 @@ if(MaterialRequirements==null||MaterialRequirements.size()==0)
...
@@ -1270,7 +1270,7 @@ if(MaterialRequirements==null||MaterialRequirements.size()==0)
{
{
CopyOnWriteArrayList
<
TimeSegment
>
AvailableTimeSegment
=
machineCalculator
.
getMachineAvailableTime
(
machine
,
earliestStartTime
+
setupTime
,
CopyOnWriteArrayList
<
TimeSegment
>
AvailableTimeSegment
=
machineCalculator
.
getMachineAvailableTime
(
machine
,
earliestStartTime
+
setupTime
,
processingTimeTotal
,
null
,
operation
.
IsInterrupt
!=
1
);
processingTimeTotal
,
null
,
operation
.
getIsInterrupt
()
!=
1
);
if
(
AvailableTimeSegment
!=
null
)
{
if
(
AvailableTimeSegment
!=
null
)
{
reslte
.
put
(
6
,
AvailableTimeSegment
);
reslte
.
put
(
6
,
AvailableTimeSegment
);
...
@@ -1294,7 +1294,7 @@ if(MaterialRequirements==null||MaterialRequirements.size()==0)
...
@@ -1294,7 +1294,7 @@ if(MaterialRequirements==null||MaterialRequirements.size()==0)
//如果是前提供任务是相同的则跳出
//如果是前提供任务是相同的则跳出
CopyOnWriteArrayList
<
TimeSegment
>
AvailableTimeSegment
=
machineCalculator
.
getMachineAvailableTime
(
machine
,
earliestStartTime
,
CopyOnWriteArrayList
<
TimeSegment
>
AvailableTimeSegment
=
machineCalculator
.
getMachineAvailableTime
(
machine
,
earliestStartTime
,
processingTimeTotal
+
setupTime
,
null
,
operation
.
IsInterrupt
!=
1
);
processingTimeTotal
+
setupTime
,
null
,
operation
.
getIsInterrupt
()
!=
1
);
if
(
AvailableTimeSegment
!=
null
)
{
if
(
AvailableTimeSegment
!=
null
)
{
reslte
.
put
(
6
,
AvailableTimeSegment
);
reslte
.
put
(
6
,
AvailableTimeSegment
);
...
@@ -1337,7 +1337,7 @@ if(MaterialRequirements==null||MaterialRequirements.size()==0)
...
@@ -1337,7 +1337,7 @@ if(MaterialRequirements==null||MaterialRequirements.size()==0)
if
(
lastGeneOnMachine
.
getEndTime
()>
earliestStartTime
)
if
(
lastGeneOnMachine
.
getEndTime
()>
earliestStartTime
)
{
{
CopyOnWriteArrayList
<
TimeSegment
>
AvailableTimeSegment
=
machineCalculator
.
getMachineAvailableTime
(
machine
,
earliestStartTime
,
CopyOnWriteArrayList
<
TimeSegment
>
AvailableTimeSegment
=
machineCalculator
.
getMachineAvailableTime
(
machine
,
earliestStartTime
,
processingTimeTotal
,
machineTasks
,
operation
.
IsInterrupt
!=
1
);
processingTimeTotal
,
machineTasks
,
operation
.
getIsInterrupt
()
!=
1
);
if
(
AvailableTimeSegment
!=
null
)
{
if
(
AvailableTimeSegment
!=
null
)
{
reslte
.
put
(
6
,
AvailableTimeSegment
);
reslte
.
put
(
6
,
AvailableTimeSegment
);
...
@@ -1359,7 +1359,7 @@ if(MaterialRequirements==null||MaterialRequirements.size()==0)
...
@@ -1359,7 +1359,7 @@ if(MaterialRequirements==null||MaterialRequirements.size()==0)
}
}
}
else
{
}
else
{
CopyOnWriteArrayList
<
TimeSegment
>
AvailableTimeSegment
=
machineCalculator
.
getMachineAvailableTime
(
machine
,
earliestStartTime
,
CopyOnWriteArrayList
<
TimeSegment
>
AvailableTimeSegment
=
machineCalculator
.
getMachineAvailableTime
(
machine
,
earliestStartTime
,
processingTimeTotal
,
machineTasks
,
operation
.
IsInterrupt
!=
1
);
processingTimeTotal
,
machineTasks
,
operation
.
getIsInterrupt
()
!=
1
);
if
(
AvailableTimeSegment
!=
null
)
{
if
(
AvailableTimeSegment
!=
null
)
{
reslte
.
put
(
6
,
AvailableTimeSegment
);
reslte
.
put
(
6
,
AvailableTimeSegment
);
int
start
=
(
int
)
ChronoUnit
.
SECONDS
.
between
(
baseTime
,
AvailableTimeSegment
.
get
(
0
).
getStart
());
int
start
=
(
int
)
ChronoUnit
.
SECONDS
.
between
(
baseTime
,
AvailableTimeSegment
.
get
(
0
).
getStart
());
...
...
src/main/java/com/aps/service/Algorithm/MaterialRequirementService.java
View file @
45ee5031
...
@@ -177,10 +177,10 @@ public class MaterialRequirementService {
...
@@ -177,10 +177,10 @@ public class MaterialRequirementService {
{
{
throw
new
RuntimeException
(
"配套数据有问题,需求数量为空,请检查数据,"
+
component
.
getMaterialNumber
());
throw
new
RuntimeException
(
"配套数据有问题,需求数量为空,请检查数据,"
+
component
.
getMaterialNumber
());
}
}
double
allneeded
=
component
.
getSpentQty
().
doubleValue
()/
component
.
getMainQty
().
doubleValue
()
*
operation
.
Quantity
;
double
allneeded
=
component
.
getSpentQty
().
doubleValue
()/
component
.
getMainQty
().
doubleValue
()
*
operation
.
getQuantity
()
;
OrderMaterialRequirement
orderMaterialRequirement
=
CreateMaterialRequirement
(
material
,
orderId
,
""
,
operation
,
OrderMaterialRequirement
orderMaterialRequirement
=
CreateMaterialRequirement
(
material
,
orderId
,
""
,
operation
,
allneeded
,
component
.
getSpentQty
().
doubleValue
(),
component
.
getMainQty
().
doubleValue
(),
operation
.
Quantity
);
allneeded
,
component
.
getSpentQty
().
doubleValue
(),
component
.
getMainQty
().
doubleValue
(),
operation
.
getQuantity
()
);
orderMaterialRequirement
.
setBomId
(
component
.
getStrId
());
orderMaterialRequirement
.
setBomId
(
component
.
getStrId
());
if
(!
material
.
getMaterialTypeName
().
equals
(
"MP"
)
&&
isIsCheckSf
)
{
if
(!
material
.
getMaterialTypeName
().
equals
(
"MP"
)
&&
isIsCheckSf
)
{
materialIds
.
add
(
materialId
);
//半成品ID
materialIds
.
add
(
materialId
);
//半成品ID
...
...
src/main/java/com/aps/service/Algorithm/ScheduleOperationService.java
View file @
45ee5031
...
@@ -76,7 +76,7 @@ int newStartTime=0;
...
@@ -76,7 +76,7 @@ int newStartTime=0;
int
GroupId
=
targetOp1
.
getGroupId
();
int
GroupId
=
targetOp1
.
getGroupId
();
OptionalInt
OperationIndex
=
IntStream
.
range
(
0
,
OperationSequencing
.
size
())
OptionalInt
OperationIndex
=
IntStream
.
range
(
0
,
OperationSequencing
.
size
())
.
filter
(
i
->
OperationSequencing
.
get
(
i
).
equals
(
GroupId
))
// 过滤出值为1的索引
.
filter
(
i
->
OperationSequencing
.
get
(
i
).
equals
(
GroupId
))
// 过滤出值为1的索引
.
skip
(
targetOp1
.
Sequence
-
1
)
// 跳过第一个匹配项
.
skip
(
targetOp1
.
getSequence
()
-
1
)
// 跳过第一个匹配项
.
findFirst
();
// 取第二个匹配项
.
findFirst
();
// 取第二个匹配项
targetopIndex1
=
OperationIndex
.
getAsInt
();
targetopIndex1
=
OperationIndex
.
getAsInt
();
if
(
isfront
)
if
(
isfront
)
...
@@ -121,7 +121,7 @@ int newStartTime=0;
...
@@ -121,7 +121,7 @@ int newStartTime=0;
if
(
targetopId
!=
0
)
{
if
(
targetopId
!=
0
)
{
OptionalInt
OperationIndex
=
IntStream
.
range
(
0
,
OperationSequencing
.
size
())
OptionalInt
OperationIndex
=
IntStream
.
range
(
0
,
OperationSequencing
.
size
())
.
filter
(
i
->
OperationSequencing
.
get
(
i
).
equals
(
targetOp
.
getGroupId
()))
// 过滤出值为1的索引
.
filter
(
i
->
OperationSequencing
.
get
(
i
).
equals
(
targetOp
.
getGroupId
()))
// 过滤出值为1的索引
.
skip
(
targetOp
.
Sequence
-
1
)
// 跳过第一个匹配项
.
skip
(
targetOp
.
getSequence
()
-
1
)
// 跳过第一个匹配项
.
findFirst
();
// 取第二个匹配项
.
findFirst
();
// 取第二个匹配项
int
targetOpIndex
=
OperationIndex
.
getAsInt
();
int
targetOpIndex
=
OperationIndex
.
getAsInt
();
opsIndexs
.
add
(
targetOpIndex
);
opsIndexs
.
add
(
targetOpIndex
);
...
@@ -135,7 +135,7 @@ int newStartTime=0;
...
@@ -135,7 +135,7 @@ int newStartTime=0;
for
(
Entry
targetOp4:
targetOp2s
)
{
for
(
Entry
targetOp4:
targetOp2s
)
{
OptionalInt
OperationIndex1
=
IntStream
.
range
(
0
,
OperationSequencing
.
size
())
OptionalInt
OperationIndex1
=
IntStream
.
range
(
0
,
OperationSequencing
.
size
())
.
filter
(
i
->
OperationSequencing
.
get
(
i
).
equals
(
targetOp
.
getGroupId
()))
// 过滤出值为1的索引
.
filter
(
i
->
OperationSequencing
.
get
(
i
).
equals
(
targetOp
.
getGroupId
()))
// 过滤出值为1的索引
.
skip
(
targetOp4
.
Sequence
-
1
)
// 跳过第一个匹配项
.
skip
(
targetOp4
.
getSequence
()
-
1
)
// 跳过第一个匹配项
.
findFirst
();
// 取第二个匹配项
.
findFirst
();
// 取第二个匹配项
int
targetOpIndex2
=
OperationIndex1
.
getAsInt
();
int
targetOpIndex2
=
OperationIndex1
.
getAsInt
();
if
(
targetOpIndex2
<
targetopIndex1
)
//后面的工序位置比目标位置靠前
if
(
targetOpIndex2
<
targetopIndex1
)
//后面的工序位置比目标位置靠前
...
@@ -190,7 +190,7 @@ int newStartTime=0;
...
@@ -190,7 +190,7 @@ int newStartTime=0;
int
GroupId
=
targetOp1
.
getGroupId
();
int
GroupId
=
targetOp1
.
getGroupId
();
OptionalInt
OperationIndex
=
IntStream
.
range
(
0
,
OperationSequencing
.
size
())
OptionalInt
OperationIndex
=
IntStream
.
range
(
0
,
OperationSequencing
.
size
())
.
filter
(
i
->
OperationSequencing
.
get
(
i
).
equals
(
GroupId
))
// 过滤出值为1的索引
.
filter
(
i
->
OperationSequencing
.
get
(
i
).
equals
(
GroupId
))
// 过滤出值为1的索引
.
skip
(
targetOp1
.
Sequence
-
1
)
// 跳过第一个匹配项
.
skip
(
targetOp1
.
getSequence
()
-
1
)
// 跳过第一个匹配项
.
findFirst
();
// 取第二个匹配项
.
findFirst
();
// 取第二个匹配项
int
targetOpIndex
=
OperationIndex
.
getAsInt
();
int
targetOpIndex
=
OperationIndex
.
getAsInt
();
if
(!
isfront
)
if
(!
isfront
)
...
@@ -629,7 +629,7 @@ if(targetOp.getSequence()>1) {
...
@@ -629,7 +629,7 @@ if(targetOp.getSequence()>1) {
String
newId
=
UUID
.
randomUUID
().
toString
().
replace
(
"-"
,
""
);
String
newId
=
UUID
.
randomUUID
().
toString
().
replace
(
"-"
,
""
);
if
(
i
==
0
)
{
if
(
i
==
0
)
{
newids
.
put
(
targetOp
.
ExecId
,
splitCounts
[
i
]);
newids
.
put
(
targetOp
.
getExecId
()
,
splitCounts
[
i
]);
}
else
{
}
else
{
newids
.
put
(
newId
,
splitCounts
[
i
]);
newids
.
put
(
newId
,
splitCounts
[
i
]);
// 添加新节点
// 添加新节点
...
@@ -656,7 +656,7 @@ if(targetOp.getSequence()>1) {
...
@@ -656,7 +656,7 @@ if(targetOp.getSequence()>1) {
List
<
Integer
>
OperationSequencing
=
chromosome
.
getOperationSequencing
();
List
<
Integer
>
OperationSequencing
=
chromosome
.
getOperationSequencing
();
OptionalInt
OperationIndex
=
IntStream
.
range
(
0
,
OperationSequencing
.
size
())
OptionalInt
OperationIndex
=
IntStream
.
range
(
0
,
OperationSequencing
.
size
())
.
filter
(
i
->
OperationSequencing
.
get
(
i
).
equals
(
targetOp
.
getGroupId
()))
// 过滤出值为1的索引
.
filter
(
i
->
OperationSequencing
.
get
(
i
).
equals
(
targetOp
.
getGroupId
()))
// 过滤出值为1的索引
.
skip
(
targetOp
.
Sequence
-
1
)
// 跳过第一个匹配项
.
skip
(
targetOp
.
getSequence
()
-
1
)
// 跳过第一个匹配项
.
findFirst
();
// 取第二个匹配项
.
findFirst
();
// 取第二个匹配项
int
targetOpIndex
=
OperationIndex
.
getAsInt
()+
1
;
int
targetOpIndex
=
OperationIndex
.
getAsInt
()+
1
;
for
(
NodeInfo
nodeInfo
:
nodeInfoList
)
{
for
(
NodeInfo
nodeInfo
:
nodeInfoList
)
{
...
@@ -913,7 +913,7 @@ if(targetOp.getSequence()>1) {
...
@@ -913,7 +913,7 @@ if(targetOp.getSequence()>1) {
OptionalInt
OperationIndex
=
IntStream
.
range
(
0
,
OperationSequencing
.
size
())
OptionalInt
OperationIndex
=
IntStream
.
range
(
0
,
OperationSequencing
.
size
())
.
filter
(
i
->
OperationSequencing
.
get
(
i
).
equals
(
entry
.
getGroupId
()))
// 过滤出值为1的索引
.
filter
(
i
->
OperationSequencing
.
get
(
i
).
equals
(
entry
.
getGroupId
()))
// 过滤出值为1的索引
.
skip
(
entry
.
Sequence
-
1
)
// 跳过第一个匹配项
.
skip
(
entry
.
getSequence
()
-
1
)
// 跳过第一个匹配项
.
findFirst
();
.
findFirst
();
int
targetOpIndex
=
OperationIndex
.
getAsInt
()+
1
;
int
targetOpIndex
=
OperationIndex
.
getAsInt
()+
1
;
for
(
int
i
=
maxgroupId
;
i
<
OperatRels
.
size
();
i
++)
{
for
(
int
i
=
maxgroupId
;
i
<
OperatRels
.
size
();
i
++)
{
...
@@ -1089,7 +1089,7 @@ if(targetOp.getSequence()>1) {
...
@@ -1089,7 +1089,7 @@ if(targetOp.getSequence()>1) {
//拆分的工序数量补齐到其他的
//拆分的工序数量补齐到其他的
Entry
main
=
entrys
.
stream
().
Entry
main
=
entrys
.
stream
().
filter
(
t
->
t
.
MainId
.
equals
(
entry
.
getMainId
())
&&
t
.
getId
()!=
entry
.
getId
())
filter
(
t
->
t
.
getMainId
()
.
equals
(
entry
.
getMainId
())
&&
t
.
getId
()!=
entry
.
getId
())
.
findFirst
()
.
findFirst
()
.
orElse
(
null
);
.
orElse
(
null
);
if
(
main
!=
null
)
{
if
(
main
!=
null
)
{
...
...
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