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
8396797c
Commit
8396797c
authored
Jun 26, 2026
by
DESKTOP-VKRD9QF\Administration
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
日志
parent
7c25b0fe
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
79 additions
and
3 deletions
+79
-3
KpiCalculator.java
src/main/java/com/aps/service/Algorithm/KpiCalculator.java
+77
-1
MaterialRequirementService.java
...com/aps/service/Algorithm/MaterialRequirementService.java
+2
-2
No files found.
src/main/java/com/aps/service/Algorithm/KpiCalculator.java
View file @
8396797c
...
@@ -9,6 +9,7 @@ import com.aps.entity.basic.Order;
...
@@ -9,6 +9,7 @@ import com.aps.entity.basic.Order;
import
com.aps.entity.basic.TimeSegment
;
import
com.aps.entity.basic.TimeSegment
;
import
java.time.Duration
;
import
java.time.Duration
;
import
java.time.LocalDate
;
import
java.time.LocalDateTime
;
import
java.time.LocalDateTime
;
import
java.util.*
;
import
java.util.*
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
...
@@ -95,6 +96,9 @@ public class KpiCalculator {
...
@@ -95,6 +96,9 @@ public class KpiCalculator {
double
OrderProductTime
=
Math
.
round
(
orderSumProductTime
/
chromosome
.
getOrders
().
size
()
*
100.0
)
/
100.0
;
double
OrderProductTime
=
Math
.
round
(
orderSumProductTime
/
chromosome
.
getOrders
().
size
()
*
100.0
)
/
100.0
;
addKpi
(
kpiMetrics
,
"平均生产周期"
,
OrderProductTime
,
"订单在计划中的实际存续时长"
,
2
,
1
);
addKpi
(
kpiMetrics
,
"平均生产周期"
,
OrderProductTime
,
"订单在计划中的实际存续时长"
,
2
,
1
);
double
wip
=
calculateAverageDailyEndWipQuantity
();
addKpi
(
kpiMetrics
,
"平均WIP"
,
wip
,
"每天23:59已开始未完成工序的产品数量平均值,单位为数量"
,
1
,
1
);
//最大流量
//最大流量
double
orderMaxFlow
=
chromosome
.
getOrders
().
stream
()
double
orderMaxFlow
=
chromosome
.
getOrders
().
stream
()
.
mapToDouble
(
Order:
:
getOrderFlow
)
.
mapToDouble
(
Order:
:
getOrderFlow
)
...
@@ -116,7 +120,6 @@ public class KpiCalculator {
...
@@ -116,7 +120,6 @@ public class KpiCalculator {
//平均流量
//平均流量
double
OrderFlow
=
Math
.
round
(
orderSumFlow
/
chromosome
.
getOrders
().
size
()
*
100.0
)
/
100.0
;
double
OrderFlow
=
Math
.
round
(
orderSumFlow
/
chromosome
.
getOrders
().
size
()
*
100.0
)
/
100.0
;
addKpi
(
kpiMetrics
,
"平均流量"
,
OrderFlow
,
"订单的最短理论耗时与其在计划中的实际耗时的比值"
,
0
,
1
);
addKpi
(
kpiMetrics
,
"平均流量"
,
OrderFlow
,
"订单的最短理论耗时与其在计划中的实际耗时的比值"
,
0
,
1
);
chromosome
.
setKpiMetrics
(
kpiMetrics
);
//总换型
//总换型
...
@@ -130,6 +133,7 @@ public class KpiCalculator {
...
@@ -130,6 +133,7 @@ public class KpiCalculator {
.
filter
(
changeOverTime
->
changeOverTime
>
0
)
.
filter
(
changeOverTime
->
changeOverTime
>
0
)
.
count
();
.
count
();
addKpi
(
kpiMetrics
,
"换型次数"
,
changeOverTimeCount
,
"总的换型次数"
,
1
,
1
);
addKpi
(
kpiMetrics
,
"换型次数"
,
changeOverTimeCount
,
"总的换型次数"
,
1
,
1
);
chromosome
.
setKpiMetrics
(
kpiMetrics
);
}
}
...
@@ -308,6 +312,78 @@ public class KpiCalculator {
...
@@ -308,6 +312,78 @@ public class KpiCalculator {
return
totalSeconds
;
return
totalSeconds
;
}
}
/**
* 计算日末快照平均WIP:每天23:59已开始且未完成工序的产品数量。
*/
private
double
calculateAverageDailyEndWipQuantity
()
{
List
<
GAScheduleResult
>
results
=
chromosome
.
getResult
();
if
(
results
==
null
||
results
.
isEmpty
())
{
return
0
;
}
int
firstTaskStart
=
results
.
stream
()
.
mapToInt
(
GAScheduleResult:
:
getStartTime
)
.
min
()
.
orElse
(
0
);
int
lastTaskEnd
=
results
.
stream
()
.
mapToInt
(
GAScheduleResult:
:
getEndTime
)
.
max
()
.
orElse
(
0
);
if
(
lastTaskEnd
<=
firstTaskStart
)
{
return
0
;
}
if
(
baseTime
==
null
)
{
return
calculateAverageDailyEndWipQuantityByRelativeDay
(
results
,
firstTaskStart
,
lastTaskEnd
);
}
LocalDate
firstDate
=
baseTime
.
plusSeconds
(
firstTaskStart
).
toLocalDate
();
LocalDate
lastDate
=
baseTime
.
plusSeconds
(
lastTaskEnd
).
toLocalDate
();
double
totalSnapshotQuantity
=
0
;
int
dayCount
=
0
;
for
(
LocalDate
date
=
firstDate
;
!
date
.
isAfter
(
lastDate
);
date
=
date
.
plusDays
(
1
))
{
long
snapshotSecond
=
Duration
.
between
(
baseTime
,
date
.
atTime
(
23
,
59
)).
getSeconds
();
double
snapshotQuantity
=
results
.
stream
()
.
filter
(
result
->
result
.
getEndTime
()
>
result
.
getStartTime
())
.
filter
(
result
->
result
.
getStartTime
()
<=
snapshotSecond
&&
snapshotSecond
<
result
.
getEndTime
())
.
mapToDouble
(
GAScheduleResult:
:
getQuantity
)
.
sum
();
totalSnapshotQuantity
+=
snapshotQuantity
;
dayCount
++;
}
if
(
dayCount
==
0
)
{
return
0
;
}
return
Math
.
round
(
totalSnapshotQuantity
/
dayCount
*
100.0
)
/
100.0
;
}
private
double
calculateAverageDailyEndWipQuantityByRelativeDay
(
List
<
GAScheduleResult
>
results
,
int
firstTaskStart
,
int
lastTaskEnd
)
{
final
int
secondsPerDay
=
24
*
60
*
60
;
final
int
snapshotSecondOfDay
=
23
*
60
*
60
+
59
*
60
;
int
firstDayStart
=
Math
.
floorDiv
(
firstTaskStart
,
secondsPerDay
)
*
secondsPerDay
;
int
lastDayStart
=
Math
.
floorDiv
(
lastTaskEnd
,
secondsPerDay
)
*
secondsPerDay
;
double
totalSnapshotQuantity
=
0
;
int
dayCount
=
0
;
for
(
int
dayStart
=
firstDayStart
;
dayStart
<=
lastDayStart
;
dayStart
+=
secondsPerDay
)
{
int
snapshotSecond
=
dayStart
+
snapshotSecondOfDay
;
double
snapshotQuantity
=
results
.
stream
()
.
filter
(
result
->
result
.
getEndTime
()
>
result
.
getStartTime
())
.
filter
(
result
->
result
.
getStartTime
()
<=
snapshotSecond
&&
snapshotSecond
<
result
.
getEndTime
())
.
mapToDouble
(
GAScheduleResult:
:
getQuantity
)
.
sum
();
totalSnapshotQuantity
+=
snapshotQuantity
;
dayCount
++;
}
if
(
dayCount
==
0
)
{
return
0
;
}
return
Math
.
round
(
totalSnapshotQuantity
/
dayCount
*
100.0
)
/
100.0
;
}
private
void
addKpi
(
List
<
KpiMetrics
>
kpiList
,
String
name
,
double
value
,
String
tip
,
int
type
,
int
status
)
{
private
void
addKpi
(
List
<
KpiMetrics
>
kpiList
,
String
name
,
double
value
,
String
tip
,
int
type
,
int
status
)
{
...
...
src/main/java/com/aps/service/Algorithm/MaterialRequirementService.java
View file @
8396797c
...
@@ -718,7 +718,7 @@ if(demand==null)
...
@@ -718,7 +718,7 @@ if(demand==null)
childorder
.
setOrderId
(
OrderId
);
childorder
.
setOrderId
(
OrderId
);
childorder
.
setMaterialId
(
orderMaterial
.
getMaterialId
());
childorder
.
setMaterialId
(
orderMaterial
.
getMaterialId
());
childorder
.
setMaterialCode
(
orderMaterial
.
getMaterialCode
());
childorder
.
setMaterialCode
(
orderMaterial
.
getMaterialCode
());
childorder
.
setMaterialName
(
orderMaterial
.
getMaterial
Type
Name
());
childorder
.
setMaterialName
(
orderMaterial
.
getMaterialName
());
childorder
.
setOrderCode
(
"M_"
+
orderMaterial
.
getMaterialCode
());
childorder
.
setOrderCode
(
"M_"
+
orderMaterial
.
getMaterialCode
());
childorder
.
setQuantity
((
int
)
orderMaterial
.
getQjQty
());
childorder
.
setQuantity
((
int
)
orderMaterial
.
getQjQty
());
childorder
.
setFinishOrderId
(
new
ArrayList
<>());
childorder
.
setFinishOrderId
(
new
ArrayList
<>());
...
@@ -985,7 +985,7 @@ if(demand==null)
...
@@ -985,7 +985,7 @@ if(demand==null)
childorder
.
setOrderId
(
OrderId
);
childorder
.
setOrderId
(
OrderId
);
childorder
.
setMaterialId
(
orderMaterial
.
getMaterialId
());
childorder
.
setMaterialId
(
orderMaterial
.
getMaterialId
());
childorder
.
setMaterialCode
(
orderMaterial
.
getMaterialCode
());
childorder
.
setMaterialCode
(
orderMaterial
.
getMaterialCode
());
childorder
.
setMaterialName
(
orderMaterial
.
getMaterial
Type
Name
());
childorder
.
setMaterialName
(
orderMaterial
.
getMaterialName
());
childorder
.
setOrderCode
(
"M_"
+
orderMaterial
.
getMaterialCode
());
childorder
.
setOrderCode
(
"M_"
+
orderMaterial
.
getMaterialCode
());
childorder
.
setQuantity
((
int
)
orderMaterial
.
getQjQty
());
childorder
.
setQuantity
((
int
)
orderMaterial
.
getQjQty
());
childorder
.
setFinishOrderId
(
new
ArrayList
<>());
childorder
.
setFinishOrderId
(
new
ArrayList
<>());
...
...
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