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
b8789253
Commit
b8789253
authored
Dec 25, 2025
by
Tong Li
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/tl'
parents
5abf2c44
485980ba
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
181 additions
and
115 deletions
+181
-115
ScheduleParams.java
src/main/java/com/aps/entity/Algorithm/ScheduleParams.java
+2
-0
GlobalParam.java
src/main/java/com/aps/entity/basic/GlobalParam.java
+7
-2
GeneticAlgorithm.java
...main/java/com/aps/service/Algorithm/GeneticAlgorithm.java
+2
-2
GeneticDecoder.java
src/main/java/com/aps/service/Algorithm/GeneticDecoder.java
+15
-10
MaterialRequirementService.java
...com/aps/service/Algorithm/MaterialRequirementService.java
+9
-3
RoutingDataService.java
...in/java/com/aps/service/Algorithm/RoutingDataService.java
+89
-69
PlanResultService.java
src/main/java/com/aps/service/plan/PlanResultService.java
+57
-29
No files found.
src/main/java/com/aps/entity/Algorithm/ScheduleParams.java
View file @
b8789253
package
com
.
aps
.
entity
.
Algorithm
;
package
com
.
aps
.
entity
.
Algorithm
;
import
com.aps.common.util.FileHelper
;
import
java.text.DecimalFormat
;
import
java.text.DecimalFormat
;
import
java.time.LocalDateTime
;
import
java.time.LocalDateTime
;
...
...
src/main/java/com/aps/entity/basic/GlobalParam.java
View file @
b8789253
...
@@ -24,9 +24,14 @@ public class GlobalParam {
...
@@ -24,9 +24,14 @@ public class GlobalParam {
private
boolean
IsUseCalendar
=
true
;
private
boolean
IsUseCalendar
=
true
;
/// <summary>
/// <summary>
/// 是否启动设备日历
/// 是否启动原材料约束
/// </summary>
private
boolean
IsCheckMp
=
true
;
/// <summary>
/// 是否启动半成品约束
/// </summary>
/// </summary>
private
boolean
IsCheck
Bom
=
true
;
private
boolean
IsCheck
Sf
=
true
;
/// <summary>
/// <summary>
/// 是否重叠
/// 是否重叠
...
...
src/main/java/com/aps/service/Algorithm/GeneticAlgorithm.java
View file @
b8789253
...
@@ -62,8 +62,8 @@ public class GeneticAlgorithm {
...
@@ -62,8 +62,8 @@ public class GeneticAlgorithm {
}
}
public
Chromosome
Run
(
ScheduleParams
param
,
List
<
Entry
>
allOperations
)
{
public
Chromosome
Run
(
ScheduleParams
param
,
List
<
Entry
>
allOperations
)
{
if
(
_GlobalParam
.
isIsCheckBom
()&&
materials
!=
null
&&
materials
.
size
()>
0
)
{
if
(
materials
!=
null
&&
materials
.
size
()>
0
)
{
materialRequirementService
.
init
(
materials
,
orders
,
allOperations
,
_entryRel
,
machineScheduler
,
machines
);
materialRequirementService
.
init
(
materials
,
orders
,
allOperations
,
_entryRel
,
machineScheduler
,
machines
,
_GlobalParam
);
orderMaterials
=
materialRequirementService
.
buildMultiLevelRequirementNetwork
(
param
.
getBaseTime
());
orderMaterials
=
materialRequirementService
.
buildMultiLevelRequirementNetwork
(
param
.
getBaseTime
());
}
}
...
...
src/main/java/com/aps/service/Algorithm/GeneticDecoder.java
View file @
b8789253
...
@@ -63,7 +63,7 @@ public class GeneticDecoder {
...
@@ -63,7 +63,7 @@ public class GeneticDecoder {
FileHelper
.
writeLogFile
(
"解码-----------开始-------"
+
chromosome
.
getID
()+
":"
+
cacheKey
);
FileHelper
.
writeLogFile
(
"解码-----------开始-------"
+
chromosome
.
getID
()+
":"
+
cacheKey
);
_allOperations
=
chromosome
.
getAllOperations
();
_allOperations
=
chromosome
.
getAllOperations
();
if
(
_globalParam
.
isIsCheckBom
()&&
orderMaterials
!=
null
&&
orderMaterials
.
size
()>
0
)
{
if
(
orderMaterials
!=
null
&&
orderMaterials
.
size
()>
0
)
{
CreateNewOpSequence
(
chromosome
);
CreateNewOpSequence
(
chromosome
);
}
}
...
@@ -128,7 +128,10 @@ public class GeneticDecoder {
...
@@ -128,7 +128,10 @@ public class GeneticDecoder {
.
distinct
()
.
distinct
()
.
collect
(
Collectors
.
toList
());
.
collect
(
Collectors
.
toList
());
if
(
finishedOrder
==
null
||
finishedOrder
.
size
()==
0
)
{
return
;
}
List
<
Integer
>
oldSequence
=
chromosome
.
getOperationSequencing
();
List
<
Integer
>
oldSequence
=
chromosome
.
getOperationSequencing
();
List
<
Integer
>
finalSequence
=
new
ArrayList
<>();
List
<
Integer
>
finalSequence
=
new
ArrayList
<>();
...
@@ -577,7 +580,7 @@ public class GeneticDecoder {
...
@@ -577,7 +580,7 @@ public class GeneticDecoder {
private
int
getOperationBOMTime
(
Entry
currentOp
,
Chromosome
chromosome
)
{
private
int
getOperationBOMTime
(
Entry
currentOp
,
Chromosome
chromosome
)
{
if
(
!
_globalParam
.
isIsCheckBom
()||
orderMaterials
==
null
)
if
(
orderMaterials
==
null
)
{
{
return
0
;
return
0
;
}
}
...
@@ -588,13 +591,15 @@ public class GeneticDecoder {
...
@@ -588,13 +591,15 @@ public class GeneticDecoder {
int
rawTime
=
0
,
sfTime
=
0
;
int
rawTime
=
0
,
sfTime
=
0
;
if
(
opboms
!=
null
&&
!
opboms
.
isEmpty
())
{
if
(
opboms
!=
null
&&
!
opboms
.
isEmpty
())
{
// 计算RawTime
// 计算RawTime
if
(
_globalParam
.
isIsCheckMp
())
{
Optional
<
LocalDateTime
>
rawDateOpt
=
opboms
.
stream
()
Optional
<
LocalDateTime
>
rawDateOpt
=
opboms
.
stream
()
.
filter
(
t
->
t
.
getMaterialTypeName
().
equals
(
"MP"
)
)
.
filter
(
t
->
t
.
getMaterialTypeName
().
equals
(
"MP"
)
)
.
map
(
OrderMaterialRequirement:
:
getUseTime
)
.
map
(
OrderMaterialRequirement:
:
getUseTime
)
.
max
(
LocalDateTime:
:
compareTo
);
.
max
(
LocalDateTime:
:
compareTo
);
if
(
rawDateOpt
.
isPresent
())
{
if
(
rawDateOpt
.
isPresent
())
{
rawTime
=
(
int
)
Duration
.
between
(
baseTime
,
rawDateOpt
.
get
()).
getSeconds
();
rawTime
=
(
int
)
Duration
.
between
(
baseTime
,
rawDateOpt
.
get
()).
getSeconds
();
}
}
}
// 计算SFTime
// 计算SFTime
List
<
OrderMaterialRequirement
>
sfBoms
=
opboms
.
stream
()
List
<
OrderMaterialRequirement
>
sfBoms
=
opboms
.
stream
()
...
@@ -602,7 +607,7 @@ public class GeneticDecoder {
...
@@ -602,7 +607,7 @@ public class GeneticDecoder {
&&
t
.
getProductOrderID
()
!=
null
&&
!
t
.
getProductOrderID
().
isEmpty
())
&&
t
.
getProductOrderID
()
!=
null
&&
!
t
.
getProductOrderID
().
isEmpty
())
.
collect
(
Collectors
.
toList
());
.
collect
(
Collectors
.
toList
());
if
(!
sfBoms
.
isEmpty
())
{
if
(!
sfBoms
.
isEmpty
()
&&
sfBoms
.
size
()>
0
)
{
for
(
OrderMaterialRequirement
sf
:
sfBoms
)
{
for
(
OrderMaterialRequirement
sf
:
sfBoms
)
{
for
(
int
orderid
:
sf
.
getProductOrderID
())
{
for
(
int
orderid
:
sf
.
getProductOrderID
())
{
int
sfTime1
=
0
;
int
sfTime1
=
0
;
...
...
src/main/java/com/aps/service/Algorithm/MaterialRequirementService.java
View file @
b8789253
...
@@ -78,7 +78,11 @@ public class MaterialRequirementService {
...
@@ -78,7 +78,11 @@ public class MaterialRequirementService {
private
MachineSchedulerService
machineScheduler
;
private
MachineSchedulerService
machineScheduler
;
public
void
init
(
List
<
Material
>
materials
,
List
<
Order
>
_orders
,
List
<
Entry
>
allOperations
,
List
<
GroupResult
>
entryRel
,
MachineSchedulerService
_machineScheduler
,
List
<
Machine
>
machines
)
private
GlobalParam
globalParam
;
public
void
init
(
List
<
Material
>
materials
,
List
<
Order
>
_orders
,
List
<
Entry
>
allOperations
,
List
<
GroupResult
>
entryRel
,
MachineSchedulerService
_machineScheduler
,
List
<
Machine
>
machines
,
GlobalParam
_GlobalParam
)
{
{
orders
=
_orders
;
orders
=
_orders
;
...
@@ -87,6 +91,7 @@ public class MaterialRequirementService {
...
@@ -87,6 +91,7 @@ public class MaterialRequirementService {
_entryRel
=
entryRel
;
_entryRel
=
entryRel
;
machineScheduler
=
_machineScheduler
;
machineScheduler
=
_machineScheduler
;
_Machines
=
machines
;
_Machines
=
machines
;
globalParam
=
_GlobalParam
;
}
}
/**
/**
...
@@ -356,7 +361,7 @@ if(routingIds.size()==0)
...
@@ -356,7 +361,7 @@ if(routingIds.size()==0)
Map
<
Integer
,
Object
>
list
=
_routingDataService
.
CreateEntry
(
sceneId
,
ProdEquipmentList
,
ProdLaunchOrders
,
routingDiscreteParams
,
ProdOrderProcesslist
,
processExecList
,
_entryRel
);
Map
<
Integer
,
Object
>
list
=
_routingDataService
.
CreateEntry
(
sceneId
,
ProdEquipmentList
,
ProdLaunchOrders
,
routingDiscreteParams
,
ProdOrderProcesslist
,
processExecList
,
_entryRel
);
List
<
Machine
>
machines
=
_routingDataService
.
InitCalendarToAllMachines
(
sceneId
,
ProdEquipmentList
,
machineScheduler
);
List
<
Machine
>
machines
=
_routingDataService
.
InitCalendarToAllMachines
(
sceneId
,
ProdEquipmentList
,
machineScheduler
,
globalParam
.
isIsUseCalendar
()
);
if
(
list
.
get
(
1
)!=
null
)
if
(
list
.
get
(
1
)!=
null
)
...
@@ -536,6 +541,7 @@ if(routingIds.size()==0)
...
@@ -536,6 +541,7 @@ if(routingIds.size()==0)
if
(
order
.
getFinishOrderId
().
size
()
==
1
)
{
if
(
order
.
getFinishOrderId
().
size
()
==
1
)
{
// 递归构建BOM
// 递归构建BOM
int
l
=
level
+
1
;
int
l
=
level
+
1
;
BOMBuildResult
childResult
=
buildOrderBOM
(
0
,
material
.
getId
(),
BOMBuildResult
childResult
=
buildOrderBOM
(
0
,
material
.
getId
(),
orderId
,
order
.
getOrderId
(),
orderId
,
order
.
getOrderId
(),
order
.
getQuantity
(),
l
,
order
);
order
.
getQuantity
(),
l
,
order
);
...
@@ -556,7 +562,7 @@ if(routingIds.size()==0)
...
@@ -556,7 +562,7 @@ if(routingIds.size()==0)
orderMaterial
.
setYpQty
(
allneeded
-
needed
);
orderMaterial
.
setYpQty
(
allneeded
-
needed
);
orderMaterial
.
setQjQty
(
needed
);
orderMaterial
.
setQjQty
(
needed
);
if
(
needed
>
0
)
{
if
(
needed
>
0
&&
globalParam
.
isIsCheckSf
()
)
{
// 创建新的子订单
// 创建新的子订单
Order
childorder
=
new
Order
();
Order
childorder
=
new
Order
();
String
OrderId
=
UUID
.
randomUUID
().
toString
().
replace
(
"-"
,
""
);
String
OrderId
=
UUID
.
randomUUID
().
toString
().
replace
(
"-"
,
""
);
...
...
src/main/java/com/aps/service/Algorithm/RoutingDataService.java
View file @
b8789253
...
@@ -14,6 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired;
...
@@ -14,6 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
java.time.LocalDateTime
;
import
java.time.LocalDateTime
;
import
java.time.LocalTime
;
import
java.util.*
;
import
java.util.*
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
...
@@ -236,7 +237,7 @@ public class RoutingDataService {
...
@@ -236,7 +237,7 @@ public class RoutingDataService {
}
}
public
List
<
Machine
>
InitCalendarToAllMachines
(
String
SceneId
,
List
<
ProdEquipment
>
ProdEquipments
,
MachineSchedulerService
machineScheduler
)
{
public
List
<
Machine
>
InitCalendarToAllMachines
(
String
SceneId
,
List
<
ProdEquipment
>
ProdEquipments
,
MachineSchedulerService
machineScheduler
,
boolean
IsUseCalendar
)
{
// 按设备分组
// 按设备分组
List
<
Long
>
MachineIds
=
ProdEquipments
.
stream
()
List
<
Long
>
MachineIds
=
ProdEquipments
.
stream
()
...
@@ -245,30 +246,27 @@ public class RoutingDataService {
...
@@ -245,30 +246,27 @@ public class RoutingDataService {
.
sorted
()
.
sorted
()
.
collect
(
Collectors
.
toList
());
.
collect
(
Collectors
.
toList
());
List
<
Machine
>
machines
=
new
ArrayList
<>();
List
<
Machine
>
machines
=
new
ArrayList
<>();
List
<
PlanResource
>
PlanResources
=
_PlanResourceService
.
lambdaQuery
()
List
<
PlanResource
>
PlanResources
=
_PlanResourceService
.
lambdaQuery
()
.
eq
(
PlanResource:
:
getIsdeleted
,
0
)
.
eq
(
PlanResource:
:
getIsdeleted
,
0
)
.
list
();
.
list
();
for
(
Long
id
:
MachineIds
)
{
for
(
Long
id
:
MachineIds
)
{
Machine
machine
=
new
Machine
();
Machine
machine
=
new
Machine
();
machine
.
setId
(
id
);
machine
.
setId
(
id
);
machines
.
add
(
machine
);
machines
.
add
(
machine
);
}
}
//节假日
//节假日
// List<MesHoliday> holidays= _MesHolidayService.list();
// List<MesHoliday> holidays= _MesHolidayService.list();
if
(
IsUseCalendar
)
{
LambdaQueryWrapper
<
ProdEquipSpecialCal
>
ProdEquipSpecialCalWrapper
=
new
LambdaQueryWrapper
<>();
LambdaQueryWrapper
<
ProdEquipSpecialCal
>
ProdEquipSpecialCalWrapper
=
new
LambdaQueryWrapper
<>();
ProdEquipSpecialCalWrapper
.
eq
(
ProdEquipSpecialCal:
:
getSceneId
,
SceneId
);
ProdEquipSpecialCalWrapper
.
eq
(
ProdEquipSpecialCal:
:
getSceneId
,
SceneId
);
List
<
ProdEquipSpecialCal
>
ProdEquipSpecialCals
=
_prodEquipSpecialCalService
.
list
(
ProdEquipSpecialCalWrapper
);
List
<
MesShiftWorkSched
>
MesShiftWorkScheds
=
_MesShiftWorkSchedService
.
lambdaQuery
()
.
eq
(
MesShiftWorkSched:
:
getIsdeleted
,
0
).
list
();
List
<
ProdEquipSpecialCal
>
ProdEquipSpecialCals
=
_prodEquipSpecialCalService
.
list
(
ProdEquipSpecialCalWrapper
);
List
<
MesShiftWorkSched
>
MesShiftWorkScheds
=
_MesShiftWorkSchedService
.
lambdaQuery
()
.
eq
(
MesShiftWorkSched:
:
getIsdeleted
,
0
).
list
();
if
(
machines
==
null
)
{
if
(
machines
==
null
)
{
...
@@ -281,9 +279,9 @@ public class RoutingDataService {
...
@@ -281,9 +279,9 @@ public class RoutingDataService {
machine
.
setMaintenanceWindows
(
new
ArrayList
<>());
machine
.
setMaintenanceWindows
(
new
ArrayList
<>());
}
}
List
<
ProdEquipSpecialCal
>
machineProdEquipSpecialCals
=
ProdEquipSpecialCals
.
stream
()
List
<
ProdEquipSpecialCal
>
machineProdEquipSpecialCals
=
ProdEquipSpecialCals
.
stream
()
.
filter
(
t
->
t
.
getPlanResourceId
()!=
null
&&
t
.
getPlanResourceId
()
==
machine
.
getId
()&&
t
.
getReferenceType
()==
1
)
.
filter
(
t
->
t
.
getPlanResourceId
()
!=
null
&&
t
.
getPlanResourceId
()
==
machine
.
getId
()
&&
t
.
getReferenceType
()
==
1
)
.
collect
(
Collectors
.
toList
());
.
collect
(
Collectors
.
toList
());
List
<
Shift
>
shifts1
=
new
ArrayList
<>();
List
<
Shift
>
shifts1
=
new
ArrayList
<>();
for
(
ProdEquipSpecialCal
machineProdEquipSpecialCal
:
machineProdEquipSpecialCals
)
{
for
(
ProdEquipSpecialCal
machineProdEquipSpecialCal
:
machineProdEquipSpecialCals
)
{
List
<
MesShiftWorkSched
>
ShiftWorkScheds
=
MesShiftWorkScheds
.
stream
()
List
<
MesShiftWorkSched
>
ShiftWorkScheds
=
MesShiftWorkScheds
.
stream
()
...
@@ -301,8 +299,7 @@ public class RoutingDataService {
...
@@ -301,8 +299,7 @@ public class RoutingDataService {
PlanResource
PlanResource
=
PlanResources
.
stream
()
PlanResource
PlanResource
=
PlanResources
.
stream
()
.
filter
(
t
->
t
.
getId
()
==
machine
.
getId
())
.
filter
(
t
->
t
.
getId
()
==
machine
.
getId
())
.
findFirst
().
orElse
(
null
);
.
findFirst
().
orElse
(
null
);
if
(
PlanResource
!=
null
)
if
(
PlanResource
!=
null
)
{
{
machine
.
setCode
(
PlanResource
.
getCode
());
machine
.
setCode
(
PlanResource
.
getCode
());
machine
.
setName
(
PlanResource
.
getTitle
());
machine
.
setName
(
PlanResource
.
getTitle
());
List
<
MesShiftWorkSched
>
ShiftWorkScheds
=
MesShiftWorkScheds
.
stream
()
List
<
MesShiftWorkSched
>
ShiftWorkScheds
=
MesShiftWorkScheds
.
stream
()
...
@@ -312,28 +309,28 @@ public class RoutingDataService {
...
@@ -312,28 +309,28 @@ public class RoutingDataService {
for
(
Shift
shift
:
Shifts
)
{
for
(
Shift
shift
:
Shifts
)
{
shift
.
setMachineId
(
machine
.
getId
());
shift
.
setMachineId
(
machine
.
getId
());
shift
.
setStartDate
(
LocalDateTime
.
of
(
2000
,
1
,
1
,
0
,
0
,
0
));
shift
.
setStartDate
(
LocalDateTime
.
of
(
2000
,
1
,
1
,
0
,
0
,
0
));
shift
.
setEndDate
(
LocalDateTime
.
of
(
2000
,
1
,
1
,
0
,
0
,
0
));
shift
.
setEndDate
(
LocalDateTime
.
of
(
2000
,
1
,
1
,
0
,
0
,
0
));
shifts1
.
add
(
shift
);
shifts1
.
add
(
shift
);
}
}
}
else
{
}
else
{
machine
.
setCode
(
Long
.
toString
(
machine
.
getId
())
);
machine
.
setCode
(
Long
.
toString
(
machine
.
getId
())
);
}
}
if
(
shifts1
==
null
||
shifts1
.
size
()==
0
)
if
(
shifts1
==
null
||
shifts1
.
size
()
==
0
)
{
{
throw
new
RuntimeException
(
String
.
format
(
"设备%s没有工作日历"
,
machine
.
getCode
().
concat
(
"_"
).
concat
(
machine
.
getName
())));
throw
new
RuntimeException
(
String
.
format
(
"设备%s没有工作日历"
,
machine
.
getCode
().
concat
(
"_"
).
concat
(
machine
.
getName
()))
);
}
}
machine
.
setShifts
(
shifts1
);
machine
.
setShifts
(
shifts1
);
List
<
ProdEquipSpecialCal
>
Holidays
=
ProdEquipSpecialCals
.
stream
()
List
<
ProdEquipSpecialCal
>
Holidays
=
ProdEquipSpecialCals
.
stream
()
.
filter
(
t
->
t
.
getEquipId
()
==
machine
.
getId
()&&
t
.
getReferenceType
()==
2
)
.
filter
(
t
->
t
.
getEquipId
()
==
machine
.
getId
()
&&
t
.
getReferenceType
()
==
2
)
.
collect
(
Collectors
.
toList
());
.
collect
(
Collectors
.
toList
());
List
<
Holiday
>
Holidays1
=
new
ArrayList
<>();
List
<
Holiday
>
Holidays1
=
new
ArrayList
<>();
for
(
ProdEquipSpecialCal
machineProdEquipSpecialCal
:
Holidays
)
{
for
(
ProdEquipSpecialCal
machineProdEquipSpecialCal
:
Holidays
)
{
Holiday
holiday
=
new
Holiday
();
Holiday
holiday
=
new
Holiday
();
holiday
.
setStart
(
machineProdEquipSpecialCal
.
getStartDate
());
holiday
.
setStart
(
machineProdEquipSpecialCal
.
getStartDate
());
holiday
.
setEnd
(
machineProdEquipSpecialCal
.
getEndDate
());
holiday
.
setEnd
(
machineProdEquipSpecialCal
.
getEndDate
());
Holidays1
.
add
(
holiday
);
Holidays1
.
add
(
holiday
);
...
@@ -341,9 +338,29 @@ public class RoutingDataService {
...
@@ -341,9 +338,29 @@ public class RoutingDataService {
machine
.
setHolidays
(
Holidays1
);
machine
.
setHolidays
(
Holidays1
);
}
}
}
else
{
for
(
Machine
machine
:
machines
)
{
List
<
Shift
>
shifts1
=
new
ArrayList
<>();
Shift
shift
=
new
Shift
();
shift
.
setMachineId
(
machine
.
getId
());
shift
.
setStartTime
(
LocalTime
.
of
(
0
,
0
,
0
));
shift
.
setEndTime
(
LocalTime
.
of
(
23
,
59
,
59
));
HashSet
days
=
new
HashSet
<>();
days
.
add
(
1
);
days
.
add
(
2
);
days
.
add
(
3
);
days
.
add
(
4
);
days
.
add
(
5
);
days
.
add
(
6
);
days
.
add
(
0
);
shift
.
setDays
(
days
);
shift
.
setStartDate
(
LocalDateTime
.
of
(
2000
,
1
,
1
,
0
,
0
,
0
));
shift
.
setEndDate
(
LocalDateTime
.
of
(
2000
,
1
,
1
,
0
,
0
,
0
));
shifts1
.
add
(
shift
);
machine
.
setShifts
(
shifts1
);
}
}
// 4. 初始化机器时间线
// 4. 初始化机器时间线
for
(
Machine
machine
:
machines
)
{
for
(
Machine
machine
:
machines
)
{
...
@@ -366,11 +383,14 @@ public class RoutingDataService {
...
@@ -366,11 +383,14 @@ public class RoutingDataService {
for
(
MesShiftWorkSched
data
:
originalList
)
{
for
(
MesShiftWorkSched
data
:
originalList
)
{
// 用shiftStart+shiftEnd作为分组key
// 用shiftStart+shiftEnd作为分组key
String
groupKey
=
data
.
getShiftStart
().
toString
()
+
"_"
+
data
.
getShiftEnd
().
toString
();
String
groupKey
=
data
.
getShiftStart
().
toString
()
+
"_"
+
data
.
getShiftEnd
().
toString
();
// 将中文的星期几转换为英文格式(周日是0,周一到周日依次为0-6)
// 假设数据库中startWeekDay是1-7(周一到周日),需要转换为0-6(周日到周六)
int
engDay
=
(
data
.
getStartWeekDay
()
%
7
);
// 将1-7转换为0-6,其中周日为0
if
(
groupMap
.
containsKey
(
groupKey
))
{
if
(
groupMap
.
containsKey
(
groupKey
))
{
// 已存在分组:添加serialNumber到列表
// 已存在分组:添加serialNumber到列表
Shift
merged
=
groupMap
.
get
(
groupKey
);
Shift
merged
=
groupMap
.
get
(
groupKey
);
merged
.
getDays
().
add
(
data
.
getStartWeekDay
()
);
merged
.
getDays
().
add
(
engDay
);
}
else
{
}
else
{
// 新分组:创建MergedShiftData并初始化
// 新分组:创建MergedShiftData并初始化
Shift
merged
=
new
Shift
();
Shift
merged
=
new
Shift
();
...
@@ -381,7 +401,7 @@ public class RoutingDataService {
...
@@ -381,7 +401,7 @@ public class RoutingDataService {
// 初始化序号列表
// 初始化序号列表
Set
<
Integer
>
serials
=
new
HashSet
<>();
Set
<
Integer
>
serials
=
new
HashSet
<>();
serials
.
add
(
data
.
getStartWeekDay
()
);
serials
.
add
(
engDay
);
merged
.
setDays
(
serials
);
merged
.
setDays
(
serials
);
groupMap
.
put
(
groupKey
,
merged
);
groupMap
.
put
(
groupKey
,
merged
);
}
}
...
...
src/main/java/com/aps/service/plan/PlanResultService.java
View file @
b8789253
...
@@ -79,6 +79,9 @@ public class PlanResultService {
...
@@ -79,6 +79,9 @@ public class PlanResultService {
@Autowired
@Autowired
private
ConfigMapper
configMapper
;
private
ConfigMapper
configMapper
;
@Autowired
private
ApsTimeConfigMapper
apsTimeConfigMapper
;
@Autowired
@Autowired
private
RedisUtils
redisUtils
;
private
RedisUtils
redisUtils
;
...
@@ -301,9 +304,7 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
...
@@ -301,9 +304,7 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
try
{
try
{
ScheduleParams
param
=
new
ScheduleParams
();
ScheduleParams
param
=
InitScheduleParams
();
param
.
setBaseTime
(
LocalDateTime
.
of
(
2025
,
11
,
1
,
0
,
0
,
0
));
// 1. 读取数据
// 1. 读取数据
...
@@ -318,10 +319,11 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
...
@@ -318,10 +319,11 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
List
<
ProdLaunchOrder
>
ProdLaunchOrders
=
_prodLaunchOrderService
.
lambdaQuery
()
List
<
ProdLaunchOrder
>
ProdLaunchOrders
=
_prodLaunchOrderService
.
lambdaQuery
()
.
eq
(
ProdLaunchOrder:
:
getSceneId
,
SceneId
)
.
eq
(
ProdLaunchOrder:
:
getSceneId
,
SceneId
)
.
list
();
.
list
();
GlobalParam
globalParam
=
InitGlobalParam
();
// 3. 创建调度服务
// 3. 创建调度服务
MachineSchedulerService
machineScheduler
=
new
MachineSchedulerService
(
MachineSchedulerService
machineScheduler
=
new
MachineSchedulerService
(
param
.
getBaseTime
());
param
.
getBaseTime
());
List
<
Machine
>
machines
=
InitCalendarToAllMachines
(
SceneId
,
ProdEquipments
,
machineScheduler
);
List
<
Machine
>
machines
=
InitCalendarToAllMachines
(
SceneId
,
ProdEquipments
,
machineScheduler
,
globalParam
.
isIsUseCalendar
()
);
// 3. 构建订单-工序数据
// 3. 构建订单-工序数据
List
<
Order
>
orders
=
InitOrder
(
ProdLaunchOrders
);
List
<
Order
>
orders
=
InitOrder
(
ProdLaunchOrders
);
...
@@ -331,15 +333,9 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
...
@@ -331,15 +333,9 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
List
<
Entry
>
entrys
=(
List
<
Entry
>)
list
.
get
(
1
);
List
<
Entry
>
entrys
=(
List
<
Entry
>)
list
.
get
(
1
);
List
<
GroupResult
>
entryRel
=(
List
<
GroupResult
>)
list
.
get
(
2
);
List
<
GroupResult
>
entryRel
=(
List
<
GroupResult
>)
list
.
get
(
2
);
GlobalParam
globalParam
=
InitGlobalParam
();
// 5. 执行调度算法
// 5. 执行调度算法
GeneticAlgorithm
scheduler
=
new
GeneticAlgorithm
(
globalParam
,
machines
,
orders
,
Materials
,
machineScheduler
,
entryRel
,
materialRequirementService
);
//new GeneticAlgorithm(products, machines, orders, machineScheduler);
GeneticAlgorithm
scheduler
=
new
GeneticAlgorithm
(
globalParam
,
machines
,
orders
,
Materials
,
machineScheduler
,
entryRel
,
materialRequirementService
);
//new GeneticAlgorithm(products, machines, orders, machineScheduler);
param
.
initAdaptiveParams
(
entrys
.
size
());
param
.
initAdaptiveParams
(
entrys
.
size
());
...
@@ -537,12 +533,7 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
...
@@ -537,12 +533,7 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
public
Chromosome
schedule
(
String
SceneId
)
{
public
Chromosome
schedule
(
String
SceneId
)
{
try
{
try
{
ScheduleParams
param
=
new
ScheduleParams
();
ScheduleParams
param
=
InitScheduleParams
();
// param.setBaseTime(baseTime);
param
.
setBaseTime
(
LocalDateTime
.
of
(
2025
,
11
,
1
,
0
,
0
,
0
));
...
@@ -558,25 +549,25 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
...
@@ -558,25 +549,25 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
List
<
ProdEquipment
>
ProdEquipments
=
_prodEquipmentService
.
lambdaQuery
()
List
<
ProdEquipment
>
ProdEquipments
=
_prodEquipmentService
.
lambdaQuery
()
.
eq
(
ProdEquipment:
:
getSceneId
,
SceneId
)
.
eq
(
ProdEquipment:
:
getSceneId
,
SceneId
)
.
list
();
.
list
();
GlobalParam
globalParam
=
InitGlobalParam
();
List
<
ProdLaunchOrder
>
ProdLaunchOrders
=
_prodLaunchOrderService
.
lambdaQuery
()
List
<
ProdLaunchOrder
>
ProdLaunchOrders
=
_prodLaunchOrderService
.
lambdaQuery
()
.
eq
(
ProdLaunchOrder:
:
getSceneId
,
SceneId
)
.
eq
(
ProdLaunchOrder:
:
getSceneId
,
SceneId
)
.
list
();
.
list
();
// 3. 创建调度服务
// 3. 创建调度服务
MachineSchedulerService
machineScheduler
=
new
MachineSchedulerService
(
MachineSchedulerService
machineScheduler
=
new
MachineSchedulerService
(
param
.
getBaseTime
());
param
.
getBaseTime
());
List
<
Machine
>
machines
=
InitCalendarToAllMachines
(
SceneId
,
ProdEquipments
,
machineScheduler
);
List
<
Machine
>
machines
=
InitCalendarToAllMachines
(
SceneId
,
ProdEquipments
,
machineScheduler
,
globalParam
.
isIsUseCalendar
()
);
// 3. 构建订单-工序数据
// 3. 构建订单-工序数据
List
<
Order
>
orders
=
InitOrder
(
ProdLaunchOrders
);
List
<
Order
>
orders
=
InitOrder
(
ProdLaunchOrders
);
List
<
Material
>
Materials
=
null
;
//
InitMaterial();
List
<
Material
>
Materials
=
InitMaterial
();
Map
<
Integer
,
Object
>
list
=
InitEntrys
(
SceneId
,
ProdEquipments
,
orders
);
Map
<
Integer
,
Object
>
list
=
InitEntrys
(
SceneId
,
ProdEquipments
,
orders
);
List
<
Entry
>
entrys
=(
List
<
Entry
>)
list
.
get
(
1
);
List
<
Entry
>
entrys
=(
List
<
Entry
>)
list
.
get
(
1
);
List
<
GroupResult
>
entryRel
=(
List
<
GroupResult
>)
list
.
get
(
2
);
List
<
GroupResult
>
entryRel
=(
List
<
GroupResult
>)
list
.
get
(
2
);
GlobalParam
globalParam
=
InitGlobalParam
();
// 5. 执行调度算法
// 5. 执行调度算法
GeneticAlgorithm
scheduler
=
new
GeneticAlgorithm
(
globalParam
,
machines
,
orders
,
Materials
,
machineScheduler
,
entryRel
,
materialRequirementService
);
//new GeneticAlgorithm(products, machines, orders, machineScheduler);
GeneticAlgorithm
scheduler
=
new
GeneticAlgorithm
(
globalParam
,
machines
,
orders
,
Materials
,
machineScheduler
,
entryRel
,
materialRequirementService
);
//new GeneticAlgorithm(products, machines, orders, machineScheduler);
param
.
initAdaptiveParams
(
entrys
.
size
());
param
.
initAdaptiveParams
(
entrys
.
size
());
...
@@ -704,16 +695,40 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
...
@@ -704,16 +695,40 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
}
}
}
}
private
List
<
Machine
>
InitCalendarToAllMachines
(
String
SceneId
,
List
<
ProdEquipment
>
ProdEquipments
,
MachineSchedulerService
machineScheduler
)
{
private
List
<
Machine
>
InitCalendarToAllMachines
(
String
SceneId
,
List
<
ProdEquipment
>
ProdEquipments
,
MachineSchedulerService
machineScheduler
,
boolean
IsUseCalendar
)
{
// 按设备分组
// 按设备分组
return
_routingDataService
.
InitCalendarToAllMachines
(
SceneId
,
ProdEquipments
,
machineScheduler
);
FileHelper
.
writeLogFile
(
"初始化设备日历-----------开始-------"
);
List
<
Machine
>
machines
=
_routingDataService
.
InitCalendarToAllMachines
(
SceneId
,
ProdEquipments
,
machineScheduler
,
IsUseCalendar
);
FileHelper
.
writeLogFile
(
"初始化设备日历-----------结束-------"
);
return
machines
;
}
private
ScheduleParams
InitScheduleParams
()
{
FileHelper
.
writeLogFile
(
"初始化排产参数-----------开始-------"
);
LambdaQueryWrapper
<
ApsTimeConfig
>
queryWrapper
=
new
LambdaQueryWrapper
<
ApsTimeConfig
>();
Page
<
ApsTimeConfig
>
page
=
new
Page
<>(
1
,
1
);
ApsTimeConfig
apsTimeConfig
=
apsTimeConfigMapper
.
selectOne
(
queryWrapper
);
ScheduleParams
param
=
new
ScheduleParams
();
param
.
setBaseTime
(
LocalDateTime
.
of
(
2025
,
11
,
1
,
0
,
0
,
0
));
if
(
apsTimeConfig
!=
null
)
{
if
(
apsTimeConfig
.
getBaseTime
()!=
null
)
{
param
.
setBaseTime
(
apsTimeConfig
.
getBaseTime
());
}
}
FileHelper
.
writeLogFile
(
"初始化排产参数-----------结束-------"
);
return
param
;
}
}
private
GlobalParam
InitGlobalParam
()
private
GlobalParam
InitGlobalParam
()
{
{
FileHelper
.
writeLogFile
(
"初始化约束-----------开始-------"
);
GlobalParam
globalParam
=
new
GlobalParam
();
GlobalParam
globalParam
=
new
GlobalParam
();
...
@@ -734,23 +749,31 @@ private GlobalParam InitGlobalParam()
...
@@ -734,23 +749,31 @@ private GlobalParam InitGlobalParam()
List
<
ConfigSetting
>
configs
=
_configService
.
getComponentSettingsByPageAndNote
(
config
.
getId
(),
"setting"
);
List
<
ConfigSetting
>
configs
=
_configService
.
getComponentSettingsByPageAndNote
(
config
.
getId
(),
"setting"
);
for
(
ConfigSetting
c
:
configs
)
{
for
(
ConfigSetting
c
:
configs
)
{
if
(
c
.
getTitle
().
equal
s
(
"日历"
))
if
(
c
.
getTitle
().
contain
s
(
"日历"
))
{
{
globalParam
.
setIsUseCalendar
(
c
.
isValue
());
globalParam
.
setIsUseCalendar
(
c
.
isValue
());
}
}
else
if
(
c
.
getTitle
().
equal
s
(
"设置时间"
))
else
if
(
c
.
getTitle
().
contain
s
(
"设置时间"
))
{
{
globalParam
.
setIsUseCalendar
(
c
.
isValue
());
globalParam
.
setIsUseCalendar
(
c
.
isValue
());
}
else
if
(
c
.
getTitle
().
equals
(
"原材料"
))
}
else
if
(
c
.
getTitle
().
contains
(
"原材料"
))
{
{
globalParam
.
setIsCheck
Bom
(
c
.
isValue
());
globalParam
.
setIsCheck
Mp
(
c
.
isValue
());
}
}
else
if
(
c
.
getTitle
().
equals
(
"设置时间平滑
"
))
else
if
(
c
.
getTitle
().
contains
(
"后台任务设置
"
))
{
{
globalParam
.
set_smoothSetup
(
c
.
isValue
());
globalParam
.
set_smoothSetup
(
c
.
isValue
());
}
}
else
if
(
c
.
getTitle
().
contains
(
"设置时间平滑"
))
{
globalParam
.
set_smoothSetup
(
c
.
isValue
());
}
}
}
FileHelper
.
writeLogFile
(
"初始化约束-----------结束-------"
);
return
globalParam
;
return
globalParam
;
}
}
private
List
<
Order
>
InitOrder
(
List
<
ProdLaunchOrder
>
ProdLaunchOrders
)
private
List
<
Order
>
InitOrder
(
List
<
ProdLaunchOrder
>
ProdLaunchOrders
)
...
@@ -915,6 +938,7 @@ private GlobalParam InitGlobalParam()
...
@@ -915,6 +938,7 @@ private GlobalParam InitGlobalParam()
private
List
<
Material
>
InitMaterial
()
{
private
List
<
Material
>
InitMaterial
()
{
List
<
Material
>
materials
=
new
ArrayList
<>();
List
<
Material
>
materials
=
new
ArrayList
<>();
FileHelper
.
writeLogFile
(
"初始化物料-----------开始-------"
);
// List<MaterialInfo> materiallist= materialInfoService.lambdaQuery()
// List<MaterialInfo> materiallist= materialInfoService.lambdaQuery()
// .eq(MaterialInfo::getIsdeleted,0)
// .eq(MaterialInfo::getIsdeleted,0)
...
@@ -938,6 +962,7 @@ private GlobalParam InitGlobalParam()
...
@@ -938,6 +962,7 @@ private GlobalParam InitGlobalParam()
GlobalCacheUtil
.
put
(
"material"
,
materials
,
10
,
TimeUnit
.
MINUTES
);
GlobalCacheUtil
.
put
(
"material"
,
materials
,
10
,
TimeUnit
.
MINUTES
);
FileHelper
.
writeLogFile
(
"初始化物料-----------结束-------"
);
return
materials
;
return
materials
;
}
}
...
@@ -1049,7 +1074,10 @@ private GlobalParam InitGlobalParam()
...
@@ -1049,7 +1074,10 @@ private GlobalParam InitGlobalParam()
private
Map
<
Integer
,
Object
>
InitEntrys
(
String
SceneId
,
List
<
ProdEquipment
>
ProdEquipments
,
List
<
Order
>
ProdLaunchOrders
)
private
Map
<
Integer
,
Object
>
InitEntrys
(
String
SceneId
,
List
<
ProdEquipment
>
ProdEquipments
,
List
<
Order
>
ProdLaunchOrders
)
{
{
return
_routingDataService
.
InitEntrys
(
SceneId
,
ProdEquipments
,
ProdLaunchOrders
);
FileHelper
.
writeLogFile
(
"初始化工单-----------开始-------"
);
Map
<
Integer
,
Object
>
entrys
=
_routingDataService
.
InitEntrys
(
SceneId
,
ProdEquipments
,
ProdLaunchOrders
);
FileHelper
.
writeLogFile
(
"初始化工单-----------结束-------"
);
return
entrys
;
}
}
...
...
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