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
f96d4ca7
Commit
f96d4ca7
authored
Jan 06, 2026
by
DESKTOP-VKRD9QF\Administration
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
KPI修改
parent
6affdefc
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
220 additions
and
93 deletions
+220
-93
SwaggerMapParamConfig.java
src/main/java/com/aps/config/SwaggerMapParamConfig.java
+12
-0
ChromosomeDataController.java
...a/com/aps/controller/common/ChromosomeDataController.java
+1
-1
ResourceGanttController.java
...ava/com/aps/controller/gantt/ResourceGanttController.java
+12
-6
Chromosome.java
src/main/java/com/aps/entity/Algorithm/Chromosome.java
+41
-37
KpiMetrics.java
src/main/java/com/aps/entity/Algorithm/KpiMetrics.java
+41
-0
KpiCalculator.java
src/main/java/com/aps/service/Algorithm/KpiCalculator.java
+36
-25
ChromosomeDataService.java
...in/java/com/aps/service/common/ChromosomeDataService.java
+12
-23
PlanResultService.java
src/main/java/com/aps/service/plan/PlanResultService.java
+65
-1
No files found.
src/main/java/com/aps/config/SwaggerMapParamConfig.java
View file @
f96d4ca7
...
@@ -468,6 +468,16 @@ public class SwaggerMapParamConfig {
...
@@ -468,6 +468,16 @@ public class SwaggerMapParamConfig {
"}"
"}"
));
));
break
;
break
;
case
"getSceneVersion"
:
properties
.
put
(
"sceneId"
,
new
StringSchema
().
description
(
"场景ID"
).
example
(
"FAADE046165147629931D5EA6A9015E8"
));
examples
.
put
(
"获取场景文件数字示例"
,
createExample
(
"获取指定场景ID的文件数字"
,
"{\n"
+
" \"sceneId\": \"FAADE046165147629931D5EA6A9015E8\"\n"
+
"}"
));
break
;
}
}
if
(!
properties
.
isEmpty
())
{
if
(!
properties
.
isEmpty
())
{
...
@@ -554,6 +564,8 @@ public class SwaggerMapParamConfig {
...
@@ -554,6 +564,8 @@ public class SwaggerMapParamConfig {
return
"更新APS时间配置请求参数"
;
return
"更新APS时间配置请求参数"
;
case
"revert"
:
case
"revert"
:
return
"回退版本请求参数"
;
return
"回退版本请求参数"
;
case
"getSceneVersion"
:
return
"获取场景文件数字请求参数"
;
default
:
default
:
return
"请求参数"
;
return
"请求参数"
;
}
}
...
...
src/main/java/com/aps/controller/common/ChromosomeDataController.java
View file @
f96d4ca7
...
@@ -84,7 +84,7 @@ public class ChromosomeDataController {
...
@@ -84,7 +84,7 @@ public class ChromosomeDataController {
// 直接调用服务层的list查询方法
// 直接调用服务层的list查询方法
List
<
Object
>
result
=
chromosomeDataService
.
queryChromosomeDataList
(
sceneId
,
entityName
,
paged
);
List
<
Object
>
result
=
chromosomeDataService
.
queryChromosomeDataList
(
sceneId
,
entityName
,
paged
);
System
.
out
.
println
(
"查询结果: "
+
result
);
if
(
result
==
null
)
{
if
(
result
==
null
)
{
return
R
.
ok
(
Collections
.
emptyList
(),
"查询成功,但未找到匹配的数据"
);
return
R
.
ok
(
Collections
.
emptyList
(),
"查询成功,但未找到匹配的数据"
);
}
}
...
...
src/main/java/com/aps/controller/gantt/ResourceGanttController.java
View file @
f96d4ca7
...
@@ -532,7 +532,7 @@ public class ResourceGanttController {
...
@@ -532,7 +532,7 @@ public class ResourceGanttController {
taskVO
.
setEnd
(
scheduleChromosome
.
getBaseTime
().
plusMinutes
(
gene
.
getAbsoluteEndTime
()));
taskVO
.
setEnd
(
scheduleChromosome
.
getBaseTime
().
plusMinutes
(
gene
.
getAbsoluteEndTime
()));
taskVO
.
setSetup
(
gene
.
getAbsolutePreparationTime
()*
60
);
// 默认值
taskVO
.
setSetup
(
gene
.
getAbsolutePreparationTime
()*
60
);
// 默认值
taskVO
.
setTeardown
(
gene
.
getAbsoluteTeardownTime
()*
60
);
// 默认值
taskVO
.
setTeardown
(
gene
.
getAbsoluteTeardownTime
()*
60
);
// 默认值
taskVO
.
setEquipChange
(
gene
.
getSetupTime
()*
60
);
// 默认
值
taskVO
.
setEquipChange
(
gene
.
getSetupTime
()*
60
);
// 默认
값
taskVO
.
setEquipCooling
(
0
);
// 默认值
taskVO
.
setEquipCooling
(
0
);
// 默认值
// taskVO.setEquipType("PTT-" + (i+1) + "-" + gene.getOperationName().toUpperCase().substring(0, Math.min(3, gene.getOperationName().length())));
// taskVO.setEquipType("PTT-" + (i+1) + "-" + gene.getOperationName().toUpperCase().substring(0, Math.min(3, gene.getOperationName().length())));
// taskVO.setEquipName(gene.getOperationName());
// taskVO.setEquipName(gene.getOperationName());
...
@@ -628,8 +628,8 @@ public class ResourceGanttController {
...
@@ -628,8 +628,8 @@ public class ResourceGanttController {
taskVO
.
setEnd
(
scheduleChromosome
.
getBaseTime
().
plusSeconds
(
gene
.
getEndTime
()));
taskVO
.
setEnd
(
scheduleChromosome
.
getBaseTime
().
plusSeconds
(
gene
.
getEndTime
()));
taskVO
.
setSetup
(
0
);
// 默认值
taskVO
.
setSetup
(
0
);
// 默认值
taskVO
.
setTeardown
(
gene
.
getTeardownTime
());
// 默认值
taskVO
.
setTeardown
(
gene
.
getTeardownTime
());
// 默认值
taskVO
.
setEquipChange
(
gene
.
getChangeOverTime
());
// 默认
值
taskVO
.
setEquipChange
(
gene
.
getChangeOverTime
());
// 默认
값
taskVO
.
setEquipCooling
(
0
);
// 默认
值
taskVO
.
setEquipCooling
(
0
);
// 默认
값
taskVO
.
setEquipType
(
resourceGanttVO
.
getType
());
taskVO
.
setEquipType
(
resourceGanttVO
.
getType
());
taskVO
.
setEquipName
(
resourceGanttVO
.
getName
());
taskVO
.
setEquipName
(
resourceGanttVO
.
getName
());
// taskVO.setDuration(calculateDuration(
// taskVO.setDuration(calculateDuration(
...
@@ -739,8 +739,8 @@ public class ResourceGanttController {
...
@@ -739,8 +739,8 @@ public class ResourceGanttController {
taskVO
.
setEnd
(
scheduleChromosome
.
getBaseTime
().
plusSeconds
(
gene
.
getEndTime
()));
taskVO
.
setEnd
(
scheduleChromosome
.
getBaseTime
().
plusSeconds
(
gene
.
getEndTime
()));
taskVO
.
setSetup
(
0
);
// 默认值
taskVO
.
setSetup
(
0
);
// 默认值
taskVO
.
setTeardown
(
gene
.
getTeardownTime
());
// 默认值
taskVO
.
setTeardown
(
gene
.
getTeardownTime
());
// 默认值
taskVO
.
setEquipChange
(
gene
.
getChangeOverTime
());
// 默认
值
taskVO
.
setEquipChange
(
gene
.
getChangeOverTime
());
// 默认
값
taskVO
.
setEquipCooling
(
0
);
// 默认
值
taskVO
.
setEquipCooling
(
0
);
// 默认
값
// taskVO.setEquipType("PTT-" + (i+1) + "-" + gene.getOperationName().toUpperCase().substring(0, Math.min(3, gene.getOperationName().length())));
// taskVO.setEquipType("PTT-" + (i+1) + "-" + gene.getOperationName().toUpperCase().substring(0, Math.min(3, gene.getOperationName().length())));
// taskVO.setEquipName(gene.getOperationName());
// taskVO.setEquipName(gene.getOperationName());
taskVO
.
setDuration
(
calculateDuration
(
taskVO
.
setDuration
(
calculateDuration
(
...
@@ -896,6 +896,12 @@ public class ResourceGanttController {
...
@@ -896,6 +896,12 @@ public class ResourceGanttController {
}
}
@PostMapping
(
"/getSceneVersion"
)
@Operation
(
summary
=
"获取版本号"
,
description
=
"获取所有版本号"
)
public
R
<
List
<
Integer
>>
getSceneVersion
(
@RequestBody
Map
<
String
,
Object
>
params
)
{
String
sceneId
=
ParamValidator
.
getString
(
params
,
"sceneId"
,
"场景ID"
);
List
<
Integer
>
numbers
=
planResultService
.
getSceneFileNumbers
(
sceneId
);
return
R
.
ok
(
numbers
);
}
}
}
\ No newline at end of file
src/main/java/com/aps/entity/Algorithm/Chromosome.java
View file @
f96d4ca7
...
@@ -123,44 +123,48 @@ public class Chromosome {
...
@@ -123,44 +123,48 @@ public class Chromosome {
private
String
ScenarioName
;
private
String
ScenarioName
;
private
LocalDateTime
BaseTime
;
// 当前基准时间
private
LocalDateTime
BaseTime
;
// 当前基准时间
//最大设备利用率
private
double
machineMaxRate
;
//最小设备利用率
private
double
machineMinRate
;
//设备等待时长
private
double
machineWaitTime
;
//订单及时完成率
private
double
orderOnTime
;
//最大延迟
private
double
orderMaxDelay
;
//最小延迟
private
double
orderMinDelay
;
//平均延迟
private
double
orderAvgDelay
;
//最长生产周期
private
double
orderMaxProductTime
;
//最短生产周期
private
double
orderMinProductTime
;
//平均生产周期
private
double
orderAvgProductTime
;
//最大流量
private
double
orderMaxFlow
;
//最小流量
private
double
orderMinFlow
;
//平均流量
private
double
orderAvgFlow
;
//
// //最大设备利用率
// private double machineMaxRate;
// //最小设备利用率
// private double machineMinRate;
////设备等待时长
// private double machineWaitTime;
//
//
////订单及时完成率
// private double orderOnTime;
//
// //最大延迟
// private double orderMaxDelay;
//
// //最小延迟
// private double orderMinDelay;
//
// //平均延迟
// private double orderAvgDelay;
//
// //最长生产周期
// private double orderMaxProductTime;
//
// //最短生产周期
// private double orderMinProductTime;
//
// //平均生产周期
// private double orderAvgProductTime;
//
// //最大流量
// private double orderMaxFlow;
//
// //最小流量
// private double orderMinFlow;
//
// //平均流量
// private double orderAvgFlow;
private
List
<
KpiMetrics
>
kpiMetrics
;
}
}
src/main/java/com/aps/entity/Algorithm/KpiMetrics.java
0 → 100644
View file @
f96d4ca7
package
com
.
aps
.
entity
.
Algorithm
;
import
lombok.Data
;
/**
* KPI指标类 - 用于存储调度算法的关键性能指标
*/
@Data
public
class
KpiMetrics
{
/**
* ID
*/
private
String
id
;
/**
* 名称
*/
private
String
name
;
/**
* 提示信息
*/
private
String
tip
;
/**
* 类型 (0 表示某种类型)
*/
private
Integer
type
;
/**
* 状态 (1 启用, 0 禁用)
*/
private
Integer
status
;
/**
* 数值
*/
private
Double
value
;
}
\ No newline at end of file
src/main/java/com/aps/service/Algorithm/KpiCalculator.java
View file @
f96d4ca7
...
@@ -3,16 +3,14 @@ package com.aps.service.Algorithm;
...
@@ -3,16 +3,14 @@ package com.aps.service.Algorithm;
import
com.aps.common.util.ProductionDeepCopyUtil
;
import
com.aps.common.util.ProductionDeepCopyUtil
;
import
com.aps.entity.Algorithm.Chromosome
;
import
com.aps.entity.Algorithm.Chromosome
;
import
com.aps.entity.Algorithm.GAScheduleResult
;
import
com.aps.entity.Algorithm.GAScheduleResult
;
import
com.aps.entity.Algorithm.KpiMetrics
;
import
com.aps.entity.basic.Machine
;
import
com.aps.entity.basic.Machine
;
import
com.aps.entity.basic.Order
;
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.LocalDateTime
;
import
java.time.LocalDateTime
;
import
java.util.Comparator
;
import
java.util.*
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
/**
/**
...
@@ -30,24 +28,25 @@ public class KpiCalculator {
...
@@ -30,24 +28,25 @@ public class KpiCalculator {
public
void
calculatekpi
()
{
public
void
calculatekpi
()
{
calculateMachine
();
calculateMachine
();
calculateOrder
();
calculateOrder
();
List
<
KpiMetrics
>
kpiMetrics
=
new
ArrayList
<>();
//最大设备利用率
//最大设备利用率
double
machineMaxRate
=
chromosome
.
getMachines
().
stream
()
double
machineMaxRate
=
chromosome
.
getMachines
().
stream
()
.
mapToDouble
(
Machine:
:
getRate
)
.
mapToDouble
(
Machine:
:
getRate
)
.
max
()
.
max
()
.
orElse
(
0
);
.
orElse
(
0
);
chromosome
.
setMachineMaxRate
(
machineMaxRate
);
addKpi
(
kpiMetrics
,
"最大设备利用率"
,
machineMaxRate
,
"实际工作时间/计划工作时间 最大"
,
0
,
1
);
//最小设备利用率
//最小设备利用率
double
machineMinRate
=
chromosome
.
getMachines
().
stream
()
double
machineMinRate
=
chromosome
.
getMachines
().
stream
()
.
mapToDouble
(
Machine:
:
getRate
)
.
mapToDouble
(
Machine:
:
getRate
)
.
min
()
.
min
()
.
orElse
(
0
);
.
orElse
(
0
);
chromosome
.
setMachineMinRate
(
machineMinRate
);
addKpi
(
kpiMetrics
,
"最小设备利用率"
,
machineMinRate
,
"实际工作时间/计划工作时间 最小"
,
0
,
1
);
double
machineActualWorkTime
=
chromosome
.
getMachines
().
stream
()
double
machineActualWorkTime
=
chromosome
.
getMachines
().
stream
()
.
mapToDouble
(
Machine:
:
getActualWorkTime
)
.
mapToDouble
(
Machine:
:
getActualWorkTime
)
.
sum
();
.
sum
();
double
machineallWorkTime
=
calculateAllTimeSegmentsTotalDuration
();
double
machineallWorkTime
=
calculateAllTimeSegmentsTotalDuration
();
chromosome
.
setMachineWaitTime
((
machineallWorkTime
-
machineActualWorkTime
)/
60
/
60
);
addKpi
(
kpiMetrics
,
"设备等待时间"
,
(
machineallWorkTime
-
machineActualWorkTime
)/
60
/
60
,
"生产周期内,设备时长 与 (设备所有工序时长+设备停机时长)之间的差值"
,
2
,
1
);
// 订单按时完成的数量
// 订单按时完成的数量
double
orderNoDelayCount
=
chromosome
.
getOrders
().
stream
()
double
orderNoDelayCount
=
chromosome
.
getOrders
().
stream
()
...
@@ -55,67 +54,68 @@ public class KpiCalculator {
...
@@ -55,67 +54,68 @@ public class KpiCalculator {
.
count
();
.
count
();
//
//
double
orderOnTime
=
Math
.
round
(
orderNoDelayCount
/
chromosome
.
getOrders
().
size
()
*
10000
)
/
10000
*
100
;
double
orderOnTime
=
Math
.
round
(
orderNoDelayCount
/
chromosome
.
getOrders
().
size
()
*
10000
)
/
10000
*
100
;
chromosome
.
setOrderOnTime
(
orderOnTime
);
addKpi
(
kpiMetrics
,
"订单按时完成率"
,
orderOnTime
,
"规定时间内交付的订单数量/所有订单数量"
,
0
,
1
);
//最大延迟
//最大延迟
double
OrderMaxDelay
=
chromosome
.
getOrders
().
stream
()
double
OrderMaxDelay
=
chromosome
.
getOrders
().
stream
()
.
mapToDouble
(
Order:
:
getDelayHours
)
.
mapToDouble
(
Order:
:
getDelayHours
)
.
max
()
.
max
()
.
orElse
(
0
);
.
orElse
(
0
);
chromosome
.
setOrderMaxDelay
(
OrderMaxDelay
);
addKpi
(
kpiMetrics
,
"最大延迟"
,
OrderMaxDelay
,
"所有订单的延迟时间最大值"
,
2
,
1
);
//最小延迟
//最小延迟
double
OrderMinDelay
=
chromosome
.
getOrders
().
stream
()
double
OrderMinDelay
=
chromosome
.
getOrders
().
stream
()
.
mapToDouble
(
Order:
:
getDelayHours
)
.
mapToDouble
(
Order:
:
getDelayHours
)
.
min
()
.
min
()
.
orElse
(
0
);
.
orElse
(
0
);
chromosome
.
setOrderMinDelay
(
OrderMinDelay
);
addKpi
(
kpiMetrics
,
"最小延迟"
,
OrderMinDelay
,
"所有订单的延迟时间最小值"
,
2
,
1
);
double
OrderSumDelay
=
chromosome
.
getOrders
().
stream
()
double
OrderSumDelay
=
chromosome
.
getOrders
().
stream
()
.
mapToDouble
(
Order:
:
getDelayHours
)
.
mapToDouble
(
Order:
:
getDelayHours
)
.
sum
();
.
sum
();
//平均延迟
//平均延迟
double
OrderDelay
=
Math
.
round
(
OrderSumDelay
/
chromosome
.
getOrders
().
size
()
*
100
)
/
100
;
double
OrderDelay
=
Math
.
round
(
OrderSumDelay
/
chromosome
.
getOrders
().
size
()
*
100
)
/
100
;
chromosome
.
setOrderAvgDelay
(
OrderDelay
);
addKpi
(
kpiMetrics
,
"平均延迟"
,
OrderDelay
,
"所有订单的延迟时间平均值"
,
2
,
1
);
//最长生产周期
//最长生产周期
double
OrderMaxProductTime
=
chromosome
.
getOrders
().
stream
()
double
OrderMaxProductTime
=
chromosome
.
getOrders
().
stream
()
.
mapToDouble
(
Order:
:
getOrderProductTime
)
.
mapToDouble
(
Order:
:
getOrderProductTime
)
.
max
()
.
max
()
.
orElse
(
0
);
.
orElse
(
0
);
chromosome
.
setOrderMaxProductTime
(
OrderMaxProductTime
);
addKpi
(
kpiMetrics
,
"最长生产周期"
,
OrderMaxProductTime
,
"订单在计划中的实际存续时长"
,
2
,
1
);
//最小生产周期
//最小生产周期
double
OrderMinProductTime
=
chromosome
.
getOrders
().
stream
()
double
OrderMinProductTime
=
chromosome
.
getOrders
().
stream
()
.
mapToDouble
(
Order:
:
getOrderProductTime
)
.
mapToDouble
(
Order:
:
getOrderProductTime
)
.
min
()
.
min
()
.
orElse
(
0
);
.
orElse
(
0
);
chromosome
.
setOrderMinProductTime
(
OrderMinProductTime
);
addKpi
(
kpiMetrics
,
"最短生产周期"
,
OrderMinProductTime
,
"订单在计划中的实际存续时长"
,
2
,
1
);
double
OrderSumProductTime
=
chromosome
.
getOrders
().
stream
()
double
OrderSumProductTime
=
chromosome
.
getOrders
().
stream
()
.
mapToDouble
(
Order:
:
getOrderProductTime
)
.
mapToDouble
(
Order:
:
getOrderProductTime
)
.
sum
();
.
sum
();
//平均生产周期
//平均生产周期
double
OrderProductTime
=
Math
.
round
(
OrderSumProductTime
/
chromosome
.
getOrders
().
size
()
*
100
)
/
100
;
double
OrderProductTime
=
Math
.
round
(
OrderSumProductTime
/
chromosome
.
getOrders
().
size
()
*
100
)
/
100
;
chromosome
.
setOrderAvgProductTime
(
OrderProductTime
);
addKpi
(
kpiMetrics
,
"平均生产周期"
,
OrderProductTime
,
"订单在计划中的实际存续时长"
,
2
,
1
);
//最大流量
//最大流量
double
OrderMaxFlow
=
chromosome
.
getOrders
().
stream
()
double
OrderMaxFlow
=
chromosome
.
getOrders
().
stream
()
.
mapToDouble
(
Order:
:
getOrderFlow
)
.
mapToDouble
(
Order:
:
getOrderFlow
)
.
max
()
.
max
()
.
orElse
(
0
);
.
orElse
(
0
);
chromosome
.
setOrderMaxFlow
(
OrderMaxFlow
);
addKpi
(
kpiMetrics
,
"最大流量"
,
OrderMaxFlow
,
"订单的最短理论耗时与其在计划中的实际耗时的比值最大值"
,
0
,
1
);
//最小流量
//最小流量
double
OrderMinFlow
=
chromosome
.
getOrders
().
stream
()
double
OrderMinFlow
=
chromosome
.
getOrders
().
stream
()
.
mapToDouble
(
Order:
:
getOrderFlow
)
.
mapToDouble
(
Order:
:
getOrderFlow
)
.
min
()
.
min
()
.
orElse
(
0
);
.
orElse
(
0
);
chromosome
.
setOrderMinFlow
(
OrderMinFlow
);
addKpi
(
kpiMetrics
,
"最小流量"
,
OrderMinFlow
,
"订单的最短理论耗时与其在计划中的实际耗时的比值最小值"
,
0
,
1
);
double
OrderSumFlow
=
chromosome
.
getOrders
().
stream
()
double
OrderSumFlow
=
chromosome
.
getOrders
().
stream
()
.
mapToDouble
(
Order:
:
get
DelayHours
)
.
mapToDouble
(
Order:
:
get
OrderFlow
)
.
sum
();
.
sum
();
//平均流量
//平均流量
double
OrderFlow
=
Math
.
round
(
OrderSumFlow
/
chromosome
.
getOrders
().
size
()
*
100
)
/
100
;
double
OrderFlow
=
Math
.
round
(
OrderSumFlow
/
chromosome
.
getOrders
().
size
()
*
100
)
/
100
;
chromosome
.
setOrderAvgFlow
(
OrderFlow
);
addKpi
(
kpiMetrics
,
"平均流量"
,
OrderFlow
,
"订单的最短理论耗时与其在计划中的实际耗时的比值"
,
0
,
1
);
chromosome
.
setKpiMetrics
(
kpiMetrics
);
}
}
...
@@ -136,7 +136,7 @@ public class KpiCalculator {
...
@@ -136,7 +136,7 @@ public class KpiCalculator {
// 计划工作时间:最后一个任务结束时间 - 第一个任务开始时间
// 计划工作时间:最后一个任务结束时间 - 第一个任务开始时间
int
firstTaskStart
=
list
.
stream
()
int
firstTaskStart
=
list
.
stream
()
.
mapToInt
(
GAScheduleResult:
:
getStartTime
)
.
mapToInt
(
GAScheduleResult:
:
getStartTime
)
.
m
ax
()
.
m
in
()
.
orElse
(
0
);
.
orElse
(
0
);
int
lastTaskEnd
=
list
.
stream
()
int
lastTaskEnd
=
list
.
stream
()
.
mapToInt
(
GAScheduleResult:
:
getEndTime
)
.
mapToInt
(
GAScheduleResult:
:
getEndTime
)
...
@@ -175,7 +175,6 @@ public class KpiCalculator {
...
@@ -175,7 +175,6 @@ public class KpiCalculator {
// int lastTaskEnd = sortedTasks.get(sortedTasks.size() - 1).getEndTime();
// int lastTaskEnd = sortedTasks.get(sortedTasks.size() - 1).getEndTime();
// double plannedWorkTime = lastTaskEnd - firstTaskStart;
// double plannedWorkTime = lastTaskEnd - firstTaskStart;
double
rate
=
Math
.
round
((
actualWorkTime
/
plannedWorkTime
)
*
10000
)
/
10000.0
*
100
;
double
rate
=
Math
.
round
((
actualWorkTime
/
plannedWorkTime
)
*
10000
)
/
10000.0
*
100
;
machine
.
setRate
(
rate
);
machine
.
setRate
(
rate
);
}
}
...
@@ -217,7 +216,7 @@ public class KpiCalculator {
...
@@ -217,7 +216,7 @@ public class KpiCalculator {
.
sum
();
.
sum
();
Order
order
=
chromosome
.
getOrders
().
stream
()
Order
order
=
chromosome
.
getOrders
().
stream
()
.
filter
(
t
->
t
.
getOrderId
()
==
orderId
)
.
filter
(
t
->
t
.
getOrderId
()
.
equals
(
orderId
)
)
.
findFirst
()
.
findFirst
()
.
orElse
(
null
);
.
orElse
(
null
);
if
(
order
==
null
)
if
(
order
==
null
)
...
@@ -231,20 +230,20 @@ public class KpiCalculator {
...
@@ -231,20 +230,20 @@ public class KpiCalculator {
order
.
setOrderStart
(
actualStartTime
);
order
.
setOrderStart
(
actualStartTime
);
order
.
setMachineProcessingTime
(
orderProcessingTime
);
order
.
setMachineProcessingTime
(
orderProcessingTime
);
Duration
Orderduration
=
Duration
.
between
(
actual
CompletionTime
,
actualStart
Time
);
Duration
Orderduration
=
Duration
.
between
(
actual
StartTime
,
actualCompletion
Time
);
double
orderProductTime
=
Orderduration
.
getSeconds
();
double
orderProductTime
=
Orderduration
.
getSeconds
();
order
.
setOrderProductTime
(
orderProductTime
/
60
/
60
);
order
.
setOrderProductTime
(
orderProductTime
);
double
flow
=
Math
.
round
(
orderProcessingTime
/
orderProductTime
*
10000
)/
10000
*
100
;
double
flow
=
Math
.
round
(
orderProcessingTime
/
orderProductTime
*
10000
)/
10000
*
100
;
order
.
setOrderFlow
(
flow
);
order
.
setOrderFlow
(
flow
);
// 计算延迟时间(若提前完成则延迟为0)
// 计算延迟时间(若提前完成则延迟为0)
if
(
actualCompletionTime
.
isAfter
(
order
.
getDueDate
()))
{
if
(
actualCompletionTime
.
isAfter
(
order
.
getDueDate
()))
{
Duration
duration
=
Duration
.
between
(
order
.
getDueDate
(),
actualCompletionTime
);
Duration
duration
=
Duration
.
between
(
order
.
getDueDate
(),
actualCompletionTime
);
double
delayHours
=
duration
.
toMinutes
()
/
60.0
;
// 转换为小时
double
delayHours
=
duration
.
getSeconds
();
// 转换为秒
order
.
setDelayHours
(
delayHours
);
order
.
setDelayHours
(
delayHours
);
}
else
{
}
else
{
Duration
duration
=
Duration
.
between
(
actualCompletionTime
,
order
.
getDueDate
());
Duration
duration
=
Duration
.
between
(
actualCompletionTime
,
order
.
getDueDate
());
double
delayHours
=
duration
.
toMinutes
()
/
60.0
;
// 转换为小时
double
delayHours
=
duration
.
getSeconds
();
// 转换为秒
order
.
setDelayHours
(
0
-
delayHours
);
order
.
setDelayHours
(
0
-
delayHours
);
}
}
}
}
...
@@ -290,4 +289,16 @@ public class KpiCalculator {
...
@@ -290,4 +289,16 @@ public class KpiCalculator {
return
totalSeconds
;
return
totalSeconds
;
}
}
private
void
addKpi
(
List
<
KpiMetrics
>
kpiList
,
String
name
,
double
value
,
String
tip
,
int
type
,
int
status
)
{
KpiMetrics
kpi
=
new
KpiMetrics
();
kpi
.
setId
(
UUID
.
randomUUID
().
toString
());
kpi
.
setName
(
name
);
kpi
.
setTip
(
tip
);
kpi
.
setType
(
type
);
kpi
.
setValue
(
value
);
kpi
.
setStatus
(
status
);
kpiList
.
add
(
kpi
);
}
}
}
src/main/java/com/aps/service/common/ChromosomeDataService.java
View file @
f96d4ca7
...
@@ -135,6 +135,13 @@ public class ChromosomeDataService {
...
@@ -135,6 +135,13 @@ public class ChromosomeDataService {
config
.
setEntityName
(
entityName
);
config
.
setEntityName
(
entityName
);
config
.
setDataSource
(
DataSourceType
.
FILE
);
config
.
setDataSource
(
DataSourceType
.
FILE
);
config
.
setFieldName
(
"allOperations"
);
config
.
setFieldName
(
"allOperations"
);
}
// 特殊处理:当实体是KpiMetrics时,映射到kpiMetrics字段
else
if
(
"kpimetrics"
.
equalsIgnoreCase
(
key
))
{
config
=
new
EntityConfig
();
config
.
setEntityName
(
entityName
);
config
.
setDataSource
(
DataSourceType
.
FILE
);
config
.
setFieldName
(
"kpiMetrics"
);
}
else
{
}
else
{
// 自动创建数据库配置(默认行为)
// 自动创建数据库配置(默认行为)
config
=
createDefaultDbConfig
(
entityName
);
config
=
createDefaultDbConfig
(
entityName
);
...
@@ -148,23 +155,6 @@ public class ChromosomeDataService {
...
@@ -148,23 +155,6 @@ public class ChromosomeDataService {
return
config
;
return
config
;
}
}
//
//
// /**
// * 创建默认的数据库配置
// */
// private EntityConfig createDefaultDbConfig(String entityName) {
// EntityConfig config = new EntityConfig();
// config.setEntityName(entityName);
// config.setDataSource(DataSourceType.DATABASE);
//
// // 默认表名与实体名相同
// String tableName = "t_" + entityName.toUpperCase(); // Oracle表名通常大写
// config.setTableName(tableName);
//
// // 如果没有对应的实体类,设置为null,查询返回Map
// config.setEntityClass(null);
//
// return config;
// }
...
@@ -280,6 +270,11 @@ public class ChromosomeDataService {
...
@@ -280,6 +270,11 @@ public class ChromosomeDataService {
return
extractMachineOptionsFromEntries
(
result
);
return
extractMachineOptionsFromEntries
(
result
);
}
}
// 如果实体是KpiMetrics,直接返回结果
if
(
"kpimetrics"
.
equalsIgnoreCase
(
config
.
getEntityName
()))
{
return
result
;
}
return
result
;
return
result
;
}
catch
(
NoSuchFieldException
e
)
{
}
catch
(
NoSuchFieldException
e
)
{
throw
new
RuntimeException
(
"Chromosome类中未找到字段: "
+
config
.
getFieldName
(),
e
);
throw
new
RuntimeException
(
"Chromosome类中未找到字段: "
+
config
.
getFieldName
(),
e
);
...
@@ -929,30 +924,24 @@ public class ChromosomeDataService {
...
@@ -929,30 +924,24 @@ public class ChromosomeDataService {
List
<?>
entryList
=
(
List
<?>)
data
;
List
<?>
entryList
=
(
List
<?>)
data
;
List
<
MachineOption
>
result
=
new
ArrayList
<>();
List
<
MachineOption
>
result
=
new
ArrayList
<>();
System
.
out
.
println
(
"提取MachineOption: Entry列表大小 = "
+
entryList
.
size
());
for
(
Object
obj
:
entryList
)
{
for
(
Object
obj
:
entryList
)
{
if
(
obj
instanceof
Entry
)
{
if
(
obj
instanceof
Entry
)
{
Entry
entry
=
(
Entry
)
obj
;
Entry
entry
=
(
Entry
)
obj
;
if
(
entry
.
getMachineOptions
()
!=
null
)
{
if
(
entry
.
getMachineOptions
()
!=
null
)
{
System
.
out
.
println
(
"Entry ID: "
+
entry
.
getId
()
+
", MachineOptions大小: "
+
entry
.
getMachineOptions
().
size
());
// 返回所有Entry中的MachineOption
// 返回所有Entry中的MachineOption
result
.
addAll
(
entry
.
getMachineOptions
());
result
.
addAll
(
entry
.
getMachineOptions
());
}
else
{
}
else
{
System
.
out
.
println
(
"Entry ID: "
+
entry
.
getId
()
+
", MachineOptions为null"
);
}
}
}
}
}
}
System
.
out
.
println
(
"总共提取到MachineOption数量: "
+
result
.
size
());
return
result
;
return
result
;
}
else
if
(
data
instanceof
Entry
)
{
}
else
if
(
data
instanceof
Entry
)
{
Entry
entry
=
(
Entry
)
data
;
Entry
entry
=
(
Entry
)
data
;
System
.
out
.
println
(
"单个Entry的MachineOptions大小: "
+
(
entry
.
getMachineOptions
()
!=
null
?
entry
.
getMachineOptions
().
size
()
:
0
));
return
entry
.
getMachineOptions
()
!=
null
?
entry
.
getMachineOptions
()
:
new
ArrayList
<>();
return
entry
.
getMachineOptions
()
!=
null
?
entry
.
getMachineOptions
()
:
new
ArrayList
<>();
}
}
System
.
out
.
println
(
"数据类型不是Entry或Entry列表,返回空列表"
);
return
new
ArrayList
<>();
// 如果不是Entry类型,返回空列表
return
new
ArrayList
<>();
// 如果不是Entry类型,返回空列表
}
}
}
}
\ No newline at end of file
src/main/java/com/aps/service/plan/PlanResultService.java
View file @
f96d4ca7
...
@@ -21,6 +21,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
...
@@ -21,6 +21,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
java.io.File
;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.math.BigDecimal
;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
import
java.time.LocalDateTime
;
...
@@ -1953,5 +1954,68 @@ private GlobalParam InitGlobalParam()
...
@@ -1953,5 +1954,68 @@ private GlobalParam InitGlobalParam()
}
}
/**
* 获取指定场景ID的文件数字
* @param sceneId 场景ID
* @return 包含文件名后数字的列表
*/
public
List
<
Integer
>
getSceneFileNumbers
(
String
sceneId
)
{
List
<
Integer
>
numbers
=
new
ArrayList
<>();
SceneChromsome
sceneChromsome
=(
SceneChromsome
)
redisUtils
.
get
(
"SceneId."
+
sceneId
);
if
(
sceneChromsome
==
null
){
return
numbers
;
}
Integer
currultVersion
=
sceneChromsome
.
getVersion
();
}
\ No newline at end of file
// 获取结果目录
File
resultDir
=
new
File
(
"result"
);
if
(!
resultDir
.
exists
()
||
!
resultDir
.
isDirectory
())
{
return
numbers
;
}
// 获取目录中的所有文件
File
[]
files
=
resultDir
.
listFiles
();
if
(
files
==
null
)
{
return
numbers
;
}
// 定义要查找的前缀
String
prefix
=
"chromosome_result_"
+
sceneId
+
"_"
;
String
suffix
=
"_.json"
;
for
(
File
file
:
files
)
{
if
(
file
.
isFile
())
{
String
fileName
=
file
.
getName
();
// 检查文件名是否以指定前缀开始,并以指定后缀结束
if
(
fileName
.
startsWith
(
prefix
)
&&
fileName
.
endsWith
(
suffix
))
{
// 提取前缀和后缀之间的部分
String
middlePart
=
fileName
.
substring
(
prefix
.
length
(),
fileName
.
length
()
-
suffix
.
length
()
);
// 尝试将中间部分解析为数字
try
{
int
number
=
Integer
.
parseInt
(
middlePart
);
// 只添加小于当前版本的数字
if
(
number
<
currultVersion
)
{
numbers
.
add
(
number
);
}
}
catch
(
NumberFormatException
e
)
{
// 如果中间部分不是数字,则跳过该文件
continue
;
}
}
}
}
// 对数字列表进行排序(从小到大)
Collections
.
sort
(
numbers
);
return
numbers
;
}
}
\ No newline at end of file
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