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
baeaecee
Commit
baeaecee
authored
Dec 09, 2025
by
Tong Li
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
遗传算法
parent
f0f39d4c
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
815 additions
and
169 deletions
+815
-169
BOMBuildResult.java
src/main/java/com/aps/entity/Algorithm/BOMBuildResult.java
+27
-0
OrderMaterialRequirement.java
...va/com/aps/entity/Algorithm/OrderMaterialRequirement.java
+76
-0
Entry.java
src/main/java/com/aps/entity/basic/Entry.java
+1
-1
Material.java
src/main/java/com/aps/entity/basic/Material.java
+4
-1
MaterialRequirement.java
src/main/java/com/aps/entity/basic/MaterialRequirement.java
+2
-2
Order.java
src/main/java/com/aps/entity/basic/Order.java
+4
-0
GeneticDecoder.java
src/main/java/com/aps/service/Algorithm/GeneticDecoder.java
+2
-0
MaterialRequirementService.java
...com/aps/service/Algorithm/MaterialRequirementService.java
+452
-0
RoutingDataService.java
...in/java/com/aps/service/Algorithm/RoutingDataService.java
+225
-0
LanuchServiceImpl.java
src/main/java/com/aps/service/impl/LanuchServiceImpl.java
+15
-12
PlanResultService.java
src/main/java/com/aps/service/plan/PlanResultService.java
+7
-153
No files found.
src/main/java/com/aps/entity/Algorithm/BOMBuildResult.java
0 → 100644
View file @
baeaecee
package
com
.
aps
.
entity
.
Algorithm
;
import
com.aps.entity.basic.Order
;
import
java.util.List
;
/**
* 作者:佟礼
* 时间:2025-12-08
*/
public
class
BOMBuildResult
{
private
List
<
OrderMaterialRequirement
>
materialRequirements
;
private
List
<
Order
>
childOrders
;
public
BOMBuildResult
(
List
<
OrderMaterialRequirement
>
materialRequirements
,
List
<
Order
>
childOrders
)
{
this
.
materialRequirements
=
materialRequirements
;
this
.
childOrders
=
childOrders
;
}
public
List
<
OrderMaterialRequirement
>
getMaterialRequirements
()
{
return
materialRequirements
;
}
public
List
<
Order
>
getChildOrders
()
{
return
childOrders
;
}
}
src/main/java/com/aps/entity/Algorithm/OrderMaterialRequirement.java
0 → 100644
View file @
baeaecee
package
com
.
aps
.
entity
.
Algorithm
;
import
com.aps.entity.basic.MaterialType
;
import
lombok.Data
;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
import
java.util.List
;
/**
* 订单物料需求
*/
@Data
public
class
OrderMaterialRequirement
{
private
String
orderId
;
private
int
operationId
;
private
String
childorderId
;
private
String
materialId
;
private
MaterialType
materialType
;
/**
* 需求总数
*/
private
double
requiredQuantity
;
/**
* 已配数量
*/
private
double
ypQty
;
/**
* 缺件数量
*/
private
double
qjQty
;
/**
* 占用库存
*/
private
double
useStock
;
/**
* 占用在途数量
*/
private
double
useTransit
;
/**
* 层级
*/
private
int
level
;
/**
* 预计到货时间
*/
private
LocalDateTime
arrivalTime
;
/**
* 预计可用时间
*/
private
LocalDateTime
useTime
;
/**
* 采购开始时间
*/
private
LocalDateTime
purchaseStartTime
;
/**
* 采购结束时间
*/
private
LocalDateTime
purchaseEndTime
;
/**
* 创建或使用的半成品订单ID
*/
private
List
<
Integer
>
productOrderID
;
}
src/main/java/com/aps/entity/basic/Entry.java
View file @
baeaecee
...
...
@@ -30,7 +30,7 @@ public class Entry {
* 原订单ID
*/
public
String
OrderId
;
private
Integer
routingId
;
private
Long
routingDetailId
;
private
Long
taskSeq
;
private
String
routingDetailName
;
...
...
src/main/java/com/aps/entity/basic/Material.java
View file @
baeaecee
package
com
.
aps
.
entity
.
basic
;
import
lombok.Data
;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.List
;
...
...
@@ -12,7 +14,7 @@ public class Material {
/**
* 物料ID
*/
private
int
Id
;
private
String
Id
;
/**
* 物料名称
...
...
@@ -35,6 +37,7 @@ public class Material {
private
int
PurchaseLeadTime
;
/**
* 物料类型
*/
...
...
src/main/java/com/aps/entity/basic/MaterialRequirement.java
View file @
baeaecee
...
...
@@ -17,7 +17,7 @@ public class MaterialRequirement {
/**
* 物料ID
*/
private
int
MaterialId
;
private
String
MaterialId
;
/**
* 物料类型
...
...
@@ -27,7 +27,7 @@ public class MaterialRequirement {
/**
* 该工序需要的物料数量
*/
private
BigDecimal
RequiredQuantity
;
private
double
RequiredQuantity
;
@Override
public
String
toString
()
{
...
...
src/main/java/com/aps/entity/basic/Order.java
View file @
baeaecee
...
...
@@ -4,6 +4,7 @@ import lombok.Data;
import
java.time.LocalDateTime
;
import
java.time.OffsetDateTime
;
import
java.util.List
;
/**
* 订单定义
...
...
@@ -14,6 +15,7 @@ public class Order {
private
String
OrderId
;
private
int
productId
;
private
String
materialId
;
private
Integer
routingId
;
private
double
quantity
=
100
;
// 100个
private
double
sYQuantity
;
...
...
@@ -26,4 +28,6 @@ public class Order {
private
boolean
canInterrupt
=
false
;
private
double
actualPriority
;
private
String
mainId
;
/*使用这个半成品的成品工单*/
public
List
<
String
>
FinishOrderId
;
}
\ No newline at end of file
src/main/java/com/aps/service/Algorithm/GeneticDecoder.java
View file @
baeaecee
...
...
@@ -271,6 +271,8 @@ public class GeneticDecoder {
int
machineAvailableTime
=
lastGeneOnMachine
.
getEndTime
();
if
(
setupTime
>
0
)
{
if
(
_globalParam
.
is_smoothSetup
())
{
...
...
src/main/java/com/aps/service/Algorithm/MaterialRequirementService.java
0 → 100644
View file @
baeaecee
This diff is collapsed.
Click to expand it.
src/main/java/com/aps/service/Algorithm/RoutingDataService.java
0 → 100644
View file @
baeaecee
package
com
.
aps
.
service
.
Algorithm
;
import
com.aps.entity.*
;
import
com.aps.entity.Algorithm.DependencyType
;
import
com.aps.entity.Algorithm.IDAndChildID.GroupResult
;
import
com.aps.entity.Algorithm.IDAndChildID.NodeInfo
;
import
com.aps.entity.Algorithm.OperationDependency
;
import
com.aps.entity.basic.Entry
;
import
com.aps.entity.basic.MachineOption
;
import
com.aps.service.*
;
import
com.aps.service.plan.SceneService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.*
;
import
java.util.stream.Collectors
;
/**
* 作者:佟礼
* 时间:2025-12-09
*/
@Service
public
class
RoutingDataService
{
@Autowired
private
ProdLaunchOrderService
_prodLaunchOrderService
;
@Autowired
private
ProdProcessExecService
_prodProcessExecService
;
@Autowired
private
ProdEquipmentService
_prodEquipmentService
;
@Autowired
private
PlanResourceService
_PlanResourceService
;
@Autowired
private
SceneService
_sceneService
;
@Autowired
private
ProdOrderProcessService
_prodOrderProcessService
;
@Autowired
private
RoutingDiscreteParamService
_routingDiscreteParamService
;
@Autowired
private
DiscreteParameterMatrixService
_discreteParameterMatrixService
;
public
Map
<
Integer
,
Object
>
InitEntrys
(
String
SceneId
,
List
<
ProdEquipment
>
ProdEquipments
,
List
<
ProdLaunchOrder
>
ProdLaunchOrders
)
{
Map
<
Integer
,
Object
>
list
=
new
HashMap
<>();
List
<
ProdProcessExec
>
ProdProcessExecs
=
_prodProcessExecService
.
lambdaQuery
()
.
eq
(
ProdProcessExec:
:
getSceneId
,
SceneId
)
.
list
();
// 获取op列表中所有的routingDetailId
List
<
Long
>
routingDetailIds
=
ProdProcessExecs
.
stream
()
.
map
(
ProdProcessExec:
:
getRoutingDetailId
)
.
filter
(
Objects:
:
nonNull
)
.
distinct
()
.
collect
(
Collectors
.
toList
());
// 查询RoutingDiscreteParam中routingDetailId在上述列表中的所有记录
List
<
RoutingDiscreteParam
>
routingDiscreteParams
=
_routingDiscreteParamService
.
lambdaQuery
()
.
in
(
RoutingDiscreteParam:
:
getRoutingDetailId
,
routingDetailIds
)
.
eq
(
RoutingDiscreteParam:
:
getIsDeleted
,
0
)
.
list
();
List
<
ProdOrderProcess
>
ProdOrderProcesss
=
_prodOrderProcessService
.
lambdaQuery
()
.
eq
(
ProdOrderProcess:
:
getSceneId
,
SceneId
)
.
list
();
return
CreateEntry
(
SceneId
,
ProdEquipments
,
ProdLaunchOrders
,
routingDiscreteParams
,
ProdOrderProcesss
,
ProdProcessExecs
,
null
);
}
public
Map
<
Integer
,
Object
>
CreateEntry
(
String
SceneId
,
List
<
ProdEquipment
>
ProdEquipments
,
List
<
ProdLaunchOrder
>
ProdLaunchOrders
,
List
<
RoutingDiscreteParam
>
routingDiscreteParams
,
List
<
ProdOrderProcess
>
ProdOrderProcesss
,
List
<
ProdProcessExec
>
ProdProcessExecs
,
List
<
GroupResult
>
existingResults
)
{
Map
<
Integer
,
Object
>
list
=
new
HashMap
<>();
List
<
String
>
soutceExecId
=
ProdOrderProcesss
.
stream
()
.
map
(
ProdOrderProcess:
:
getExecId
)
.
distinct
()
// 提取Exec_ID
.
collect
(
Collectors
.
toList
());
List
<
String
>
targetExecId
=
ProdOrderProcesss
.
stream
()
.
map
(
ProdOrderProcess:
:
getTargetExecId
)
.
distinct
()
// 提取TARGET_Exec_ID
.
collect
(
Collectors
.
toList
());
List
<
String
>
ExecIdNoChild
=
ProdProcessExecs
.
stream
()
.
filter
(
e
->
!
soutceExecId
.
contains
(
e
.
getExecId
())&&!
targetExecId
.
contains
(
e
.
getExecId
()))
// 过滤条件
.
map
(
ProdProcessExec:
:
getExecId
)
.
distinct
()
.
collect
(
Collectors
.
toList
());
if
(
ExecIdNoChild
!=
null
&&
ExecIdNoChild
.
size
()>
0
)
{
for
(
String
ExecId
:
ExecIdNoChild
)
{
soutceExecId
.
add
(
ExecId
);
targetExecId
.
add
(
""
);
}
}
List
<
GroupResult
>
results
;
int
index
=
0
;
if
(
existingResults
==
null
||
existingResults
.
size
()==
0
)
{
results
=
IdGroupingWithDualSerial
.
groupAndOrderIds
(
soutceExecId
,
targetExecId
);
}
else
{
index
=
existingResults
.
size
();
results
=
IdGroupingWithDualSerial
.
addNewDataWithIsolatedGroup
(
existingResults
,
soutceExecId
,
targetExecId
);
}
List
<
Entry
>
entrys
=
new
ArrayList
<>();
for
(
int
i
=
index
;
i
<
results
.
size
();
i
++)
{
GroupResult
groupResult
=
results
.
get
(
i
);
List
<
NodeInfo
>
nodeInfoList
=
groupResult
.
getNodeInfoList
();
// System.out.println("分组" + (i + 1) + "顺序:" + nodeInfoList);
for
(
NodeInfo
nodeInfo
:
nodeInfoList
)
{
// System.out.printf("原始ID:%s → 全局序号:%d,分组内序号:%d,新父ID列表:%s,新子ID列表:%s%n",
// nodeInfo.getOriginalId(),
// nodeInfo.getGlobalSerial(),
// nodeInfo.getGroupSerial(),
// nodeInfo.getNewParentIds().isEmpty() ? "无" : nodeInfo.getNewParentIds(),
// nodeInfo.getNewChildIds());
Entry
entry
=
new
Entry
();
entry
.
setId
(
nodeInfo
.
getGlobalSerial
());
entry
.
setGroupId
(
i
+
1
);
entry
.
setSequence
(
nodeInfo
.
getGroupSerial
());
entry
.
setExecId
(
nodeInfo
.
getOriginalId
());
ProdProcessExec
op
=
ProdProcessExecs
.
stream
()
.
filter
(
t
->
t
.
getExecId
().
equals
(
entry
.
getExecId
()))
.
findFirst
().
orElse
(
null
);
if
(
nodeInfo
.
getNewParentIds
()!=
null
)
{
List
<
OperationDependency
>
OperationDependency
=
new
ArrayList
<>();
for
(
int
id
:
nodeInfo
.
getNewParentIds
())
{
OperationDependency
od
=
new
OperationDependency
();
od
.
setPrevOperationId
(
id
);
if
(
op
!=
null
)
{
od
.
setDependencyType
(
DependencyType
.
fromValueSafe
(
op
.
getConnectProperty
()));
}
else
{
od
.
setDependencyType
(
DependencyType
.
FinishToStart
);
}
OperationDependency
.
add
(
od
);
}
entry
.
setPrevEntryIds
(
OperationDependency
);
}
if
(
nodeInfo
.
getNewChildIds
()!=
null
)
{
List
<
OperationDependency
>
OperationDependency
=
new
ArrayList
<>();
for
(
int
id
:
nodeInfo
.
getNewChildIds
())
{
OperationDependency
od
=
new
OperationDependency
();
od
.
setNextOperationId
(
id
);
// 记录属性
if
(
op
!=
null
)
{
od
.
setDependencyType
(
DependencyType
.
fromValueSafe
(
op
.
getConnectProperty
()));
}
else
{
od
.
setDependencyType
(
DependencyType
.
FinishToStart
);
}
OperationDependency
.
add
(
od
);
}
entry
.
setNextEntryIds
(
OperationDependency
);
}
if
(
op
!=
null
)
{
entry
.
setDiscreteParameter
(
routingDiscreteParams
.
stream
().
filter
(
t
->
t
.
getRoutingDetailId
().
equals
(
op
.
getRoutingDetailId
())).
collect
(
Collectors
.
toList
()));
entry
.
setEquipTypeID
(
op
.
getMachineId
());
entry
.
setOrderId
(
op
.
getOrderId
());
entry
.
setQuantity
(
op
.
getPlanQty
());
entry
.
setRoutingId
(
op
.
getRoutingId
());
entry
.
setRoutingDetailId
(
op
.
getRoutingDetailId
());
entry
.
setTaskSeq
(
op
.
getTaskSeq
());
entry
.
setRoutingDetailName
(
op
.
getRoutingDetailName
());
ProdLaunchOrder
order
=
ProdLaunchOrders
.
stream
()
.
filter
(
t
->
t
.
getOrderId
().
equals
(
op
.
getOrderId
()))
.
findFirst
().
orElse
(
null
);
if
(
order
!=
null
)
{
entry
.
setProductId
(
order
.
getMaterialId
());
}
List
<
ProdEquipment
>
Equipments
=
ProdEquipments
.
stream
()
.
filter
(
t
->
t
.
getExecId
().
equals
(
op
.
getExecId
()))
.
collect
(
Collectors
.
toList
());
if
(
Equipments
!=
null
&&
Equipments
.
size
()
>
0
)
{
List
<
MachineOption
>
mos
=
new
ArrayList
<>();
for
(
ProdEquipment
e
:
Equipments
)
{
MachineOption
mo
=
new
MachineOption
();
mo
.
setMachineId
(
e
.
getEquipId
());
mo
.
setProcessingTime
(
e
.
getSpeed
());
mo
.
setContantTime
(
op
.
getConstTime
());
mo
.
setSetupTime
(
op
.
getChangeLineTime
());
mo
.
setTeardownTime
(
op
.
getPostprocessingTime
());
mo
.
setPreTime
(
e
.
getSetupTime
());
mos
.
add
(
mo
);
}
entry
.
setMachineOptions
(
mos
);
}
}
entry
.
setPriority
(
1
);
entrys
.
add
(
entry
);
}
// 输出每个节点的详细信息
System
.
out
.
println
(
"------------------------"
);
}
list
.
put
(
1
,
entrys
);
list
.
put
(
2
,
results
);
return
list
;
}
}
src/main/java/com/aps/service/impl/LanuchServiceImpl.java
View file @
baeaecee
...
...
@@ -633,7 +633,7 @@ public class LanuchServiceImpl implements LanuchService {
◦ @return 工序列表
*/
p
rivate
List
<
RoutingDetail
>
getRoutingDetails
(
Integer
routingHeaderId
)
{
p
ublic
List
<
RoutingDetail
>
getRoutingDetails
(
Integer
routingHeaderId
)
{
LambdaQueryWrapper
<
RoutingDetail
>
wrapper
=
new
LambdaQueryWrapper
<>();
wrapper
.
eq
(
RoutingDetail:
:
getRoutingHeaderId
,
routingHeaderId
)
.
eq
(
RoutingDetail:
:
getIsDeleted
,
0
)
// 添加 is_deleted=0 过滤条件
...
...
@@ -661,7 +661,7 @@ public class LanuchServiceImpl implements LanuchService {
◦ @param sceneId 场景ID
*/
p
rivate
void
batchInsertProcessExec
(
ProdLaunchOrder
prodOrderMain
,
p
ublic
void
batchInsertProcessExec
(
ProdLaunchOrder
prodOrderMain
,
List
<
RoutingDetail
>
routingDetails
,
String
sceneId
,
List
<
RoutingDetailEquip
>
routingDetailEquip
)
{
...
...
@@ -670,7 +670,7 @@ public class LanuchServiceImpl implements LanuchService {
.
map
(
detail
->
createProcessExec
(
prodOrderMain
,
detail
,
sceneId
))
.
collect
(
Collectors
.
toList
());
batchInsertEquipMent
(
routingDetailEquip
,
sceneId
,
processExecList
);
batchInsertEquipMent
(
routingDetailEquip
,
sceneId
,
processExecList
,
true
);
// 批量插入
if
(!
CollectionUtils
.
isEmpty
(
processExecList
))
{
...
...
@@ -699,7 +699,7 @@ public class LanuchServiceImpl implements LanuchService {
◦ @return 工序执行记录
*/
p
rivate
ProdProcessExec
createProcessExec
(
ProdLaunchOrder
prodOrderMain
,
p
ublic
ProdProcessExec
createProcessExec
(
ProdLaunchOrder
prodOrderMain
,
RoutingDetail
detail
,
String
sceneId
)
{
ProdProcessExec
prodProcessExec
=
new
ProdProcessExec
();
...
...
@@ -790,6 +790,10 @@ public class LanuchServiceImpl implements LanuchService {
log
.
info
(
"完成{}个工单的工序关系生成"
,
prodOrderMains
.
size
());
}
/**
◦ 生成工序关联关系
...
...
@@ -873,7 +877,7 @@ public class LanuchServiceImpl implements LanuchService {
◦ @return 工序关系
*/
p
rivate
ProdOrderProcess
createProcessRelation
(
ProdLaunchOrder
prodOrderMain
,
p
ublic
ProdOrderProcess
createProcessRelation
(
ProdLaunchOrder
prodOrderMain
,
RoutingDetailConnect
connection
,
String
sceneId
,
Map
<
Long
,
String
>
routingDetailIdToExecIdMap
)
{
...
...
@@ -934,14 +938,14 @@ public class LanuchServiceImpl implements LanuchService {
◦ 设备对照表
*/
p
rivate
void
batchInsertEquipMent
(
p
ublic
List
<
ProdEquipment
>
batchInsertEquipMent
(
List
<
RoutingDetailEquip
>
routingDetailEquips
,
String
sceneId
,
List
<
ProdProcessExec
>
processExecList
)
{
String
sceneId
,
List
<
ProdProcessExec
>
processExecList
,
Boolean
isSave
)
{
if
(
CollectionUtils
.
isEmpty
(
routingDetailEquips
))
{
log
.
warn
(
"工艺设备列表为空,跳过设备对照表生成"
);
return
;
return
null
;
}
...
...
@@ -997,12 +1001,11 @@ public class LanuchServiceImpl implements LanuchService {
}
// 批量保存
if
(!
prodEquipments
.
isEmpty
())
{
if
(!
prodEquipments
.
isEmpty
()
&&
isSave
)
{
prodEquipmentService
.
saveBatch
(
prodEquipments
);
}
return
prodEquipments
;
}
/**
...
...
@@ -1014,7 +1017,7 @@ public class LanuchServiceImpl implements LanuchService {
◦ @return 工序列表
*/
p
rivate
List
<
RoutingDetailEquip
>
getRoutingDetailEquip
(
Integer
routingHeaderId
)
{
p
ublic
List
<
RoutingDetailEquip
>
getRoutingDetailEquip
(
Integer
routingHeaderId
)
{
List
<
RoutingDetailEquip
>
detailEquips
=
routingDetailEquipService
.
lambdaQuery
()
...
...
src/main/java/com/aps/service/plan/PlanResultService.java
View file @
baeaecee
...
...
@@ -15,6 +15,7 @@ import com.aps.entity.basic.*;
import
com.aps.service.*
;
import
com.aps.service.Algorithm.GeneticAlgorithm
;
import
com.aps.service.Algorithm.IdGroupingWithDualSerial
;
import
com.aps.service.Algorithm.RoutingDataService
;
import
com.aps.service.Algorithm.ScheduleOperationService
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -69,6 +70,9 @@ public class PlanResultService {
@Autowired
private
DiscreteParameterMatrixService
_discreteParameterMatrixService
;
@Autowired
private
RoutingDataService
_routingDataService
;
private
LocalDateTime
baseTime
=
LocalDateTime
.
of
(
2025
,
11
,
1
,
0
,
0
,
0
);
public
List
<
ScheduleChromosome
>
execute
()
{
...
...
@@ -289,7 +293,9 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
List
<
Order
>
orders
=
new
ArrayList
<>();
for
(
ProdLaunchOrder
lo
:
ProdLaunchOrders
)
{
Order
order
=
new
Order
();
order
.
setOrderId
(
lo
.
getOrderId
());
order
.
setRoutingId
(
lo
.
getRoutingId
());
order
.
setMaterialId
(
lo
.
getMaterialId
());
order
.
setDueDate
(
lo
.
getEndDate
());
order
.
setQuantity
(
lo
.
getQuantity
());
...
...
@@ -752,161 +758,9 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
private
Map
<
Integer
,
Object
>
InitEntrys
(
String
SceneId
,
List
<
ProdEquipment
>
ProdEquipments
,
List
<
ProdLaunchOrder
>
ProdLaunchOrders
)
{
Map
<
Integer
,
Object
>
list
=
new
HashMap
<>();
List
<
ProdProcessExec
>
ProdProcessExecs
=
_prodProcessExecService
.
lambdaQuery
()
.
eq
(
ProdProcessExec:
:
getSceneId
,
SceneId
)
.
list
();
// 获取op列表中所有的routingDetailId
List
<
Long
>
routingDetailIds
=
ProdProcessExecs
.
stream
()
.
map
(
ProdProcessExec:
:
getRoutingDetailId
)
.
filter
(
Objects:
:
nonNull
)
.
distinct
()
.
collect
(
Collectors
.
toList
());
// 查询RoutingDiscreteParam中routingDetailId在上述列表中的所有记录
List
<
RoutingDiscreteParam
>
routingDiscreteParams
=
_routingDiscreteParamService
.
lambdaQuery
()
.
in
(
RoutingDiscreteParam:
:
getRoutingDetailId
,
routingDetailIds
)
.
eq
(
RoutingDiscreteParam:
:
getIsDeleted
,
0
)
.
list
();
List
<
ProdOrderProcess
>
ProdOrderProcesss
=
_prodOrderProcessService
.
lambdaQuery
()
.
eq
(
ProdOrderProcess:
:
getSceneId
,
SceneId
)
.
list
();
List
<
String
>
soutceExecId
=
ProdOrderProcesss
.
stream
()
.
map
(
ProdOrderProcess:
:
getExecId
)
.
distinct
()
// 提取Exec_ID
.
collect
(
Collectors
.
toList
());
List
<
String
>
targetExecId
=
ProdOrderProcesss
.
stream
()
.
map
(
ProdOrderProcess:
:
getTargetExecId
)
.
distinct
()
// 提取TARGET_Exec_ID
.
collect
(
Collectors
.
toList
());
List
<
String
>
ExecIdNoChild
=
ProdProcessExecs
.
stream
()
.
filter
(
e
->
!
soutceExecId
.
contains
(
e
.
getExecId
())&&!
targetExecId
.
contains
(
e
.
getExecId
()))
// 过滤条件
.
map
(
ProdProcessExec:
:
getExecId
)
.
distinct
()
.
collect
(
Collectors
.
toList
());
if
(
ExecIdNoChild
!=
null
&&
ExecIdNoChild
.
size
()>
0
)
{
for
(
String
ExecId
:
ExecIdNoChild
)
{
soutceExecId
.
add
(
ExecId
);
targetExecId
.
add
(
""
);
}
}
List
<
GroupResult
>
results
=
IdGroupingWithDualSerial
.
groupAndOrderIds
(
soutceExecId
,
targetExecId
);
List
<
Entry
>
entrys
=
new
ArrayList
<>();
return
_routingDataService
.
InitEntrys
(
SceneId
,
ProdEquipments
,
ProdLaunchOrders
);
for
(
int
i
=
0
;
i
<
results
.
size
();
i
++)
{
GroupResult
groupResult
=
results
.
get
(
i
);
List
<
NodeInfo
>
nodeInfoList
=
groupResult
.
getNodeInfoList
();
// System.out.println("分组" + (i + 1) + "顺序:" + nodeInfoList);
for
(
NodeInfo
nodeInfo
:
nodeInfoList
)
{
// System.out.printf("原始ID:%s → 全局序号:%d,分组内序号:%d,新父ID列表:%s,新子ID列表:%s%n",
// nodeInfo.getOriginalId(),
// nodeInfo.getGlobalSerial(),
// nodeInfo.getGroupSerial(),
// nodeInfo.getNewParentIds().isEmpty() ? "无" : nodeInfo.getNewParentIds(),
// nodeInfo.getNewChildIds());
Entry
entry
=
new
Entry
();
entry
.
setId
(
nodeInfo
.
getGlobalSerial
());
entry
.
setGroupId
(
i
+
1
);
entry
.
setSequence
(
nodeInfo
.
getGroupSerial
());
entry
.
setExecId
(
nodeInfo
.
getOriginalId
());
if
(
nodeInfo
.
getNewParentIds
()!=
null
)
{
List
<
OperationDependency
>
OperationDependency
=
new
ArrayList
<>();
for
(
int
id
:
nodeInfo
.
getNewParentIds
())
{
OperationDependency
od
=
new
OperationDependency
();
od
.
setPrevOperationId
(
id
);
OperationDependency
.
add
(
od
);
}
entry
.
setPrevEntryIds
(
OperationDependency
);
}
ProdProcessExec
op
=
ProdProcessExecs
.
stream
()
.
filter
(
t
->
t
.
getExecId
().
equals
(
entry
.
getExecId
()))
.
findFirst
().
orElse
(
null
);
if
(
nodeInfo
.
getNewChildIds
()!=
null
)
{
List
<
OperationDependency
>
OperationDependency
=
new
ArrayList
<>();
for
(
int
id
:
nodeInfo
.
getNewChildIds
())
{
OperationDependency
od
=
new
OperationDependency
();
od
.
setNextOperationId
(
id
);
// 记录属性
if
(
op
!=
null
)
{
od
.
setDependencyType
(
DependencyType
.
fromValueSafe
(
op
.
getConnectProperty
()));
}
else
{
od
.
setDependencyType
(
DependencyType
.
FinishToStart
);
}
OperationDependency
.
add
(
od
);
}
entry
.
setNextEntryIds
(
OperationDependency
);
}
if
(
op
!=
null
)
{
entry
.
setDiscreteParameter
(
routingDiscreteParams
.
stream
().
filter
(
t
->
t
.
getRoutingDetailId
().
equals
(
op
.
getRoutingDetailId
())).
collect
(
Collectors
.
toList
()));
entry
.
setEquipTypeID
(
op
.
getMachineId
());
entry
.
setOrderId
(
op
.
getOrderId
());
entry
.
setQuantity
(
op
.
getPlanQty
());
entry
.
setRoutingDetailId
(
op
.
getRoutingDetailId
());
entry
.
setTaskSeq
(
op
.
getTaskSeq
());
entry
.
setRoutingDetailName
(
op
.
getRoutingDetailName
());
ProdLaunchOrder
order
=
ProdLaunchOrders
.
stream
()
.
filter
(
t
->
t
.
getOrderId
().
equals
(
op
.
getOrderId
()))
.
findFirst
().
orElse
(
null
);
if
(
order
!=
null
)
{
entry
.
setProductId
(
order
.
getMaterialId
());
}
List
<
ProdEquipment
>
Equipments
=
ProdEquipments
.
stream
()
.
filter
(
t
->
t
.
getExecId
().
equals
(
op
.
getExecId
()))
.
collect
(
Collectors
.
toList
());
if
(
Equipments
!=
null
&&
Equipments
.
size
()
>
0
)
{
List
<
MachineOption
>
mos
=
new
ArrayList
<>();
for
(
ProdEquipment
e
:
Equipments
)
{
MachineOption
mo
=
new
MachineOption
();
mo
.
setMachineId
(
e
.
getEquipId
());
mo
.
setProcessingTime
(
e
.
getSpeed
());
mo
.
setContantTime
(
op
.
getConstTime
());
mo
.
setSetupTime
(
op
.
getChangeLineTime
());
mo
.
setTeardownTime
(
op
.
getPostprocessingTime
());
mo
.
setPreTime
(
e
.
getSetupTime
());
mos
.
add
(
mo
);
}
entry
.
setMachineOptions
(
mos
);
}
}
entry
.
setPriority
(
1
);
entrys
.
add
(
entry
);
}
// 输出每个节点的详细信息
System
.
out
.
println
(
"------------------------"
);
}
list
.
put
(
1
,
entrys
);
list
.
put
(
2
,
results
);
return
list
;
}
...
...
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