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
c561b222
Commit
c561b222
authored
Apr 17, 2026
by
DESKTOP-VKRD9QF\Administration
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
读取文件速度
parent
36968d43
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
89 additions
and
135 deletions
+89
-135
SceneService.java
src/main/java/com/aps/service/plan/SceneService.java
+89
-135
No files found.
src/main/java/com/aps/service/plan/SceneService.java
View file @
c561b222
...
...
@@ -4,6 +4,7 @@ import com.aps.common.util.redis.RedisUtils;
import
com.aps.entity.Algorithm.Chromosome
;
import
com.aps.entity.Schedule.SceneChromsome
;
import
com.aps.entity.Schedule.SceneDetail
;
import
com.fasterxml.jackson.databind.DeserializationFeature
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.fasterxml.jackson.databind.SerializationFeature
;
import
com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
;
...
...
@@ -17,11 +18,7 @@ import java.util.List;
import
java.util.stream.Collectors
;
/**
* SceneService.java
*
* @author jdt
* @description 场景保存修改
* @since 2025-12-01
* 场景结果文件读写服务
*/
@Service
public
class
SceneService
{
...
...
@@ -31,20 +28,15 @@ public class SceneService {
@Autowired
private
RedisUtils
redisUtils
;
// 统一配置 ObjectMapper
private
ObjectMapper
createObjectMapper
()
{
ObjectMapper
objectMapper
=
new
ObjectMapper
();
objectMapper
.
registerModule
(
new
JavaTimeModule
());
objectMapper
.
disable
(
SerializationFeature
.
WRITE_DATES_AS_TIMESTAMPS
);
objectMapper
.
enable
(
SerializationFeature
.
INDENT_OUTPUT
);
// 忽略未知属性,防止反序列化时出错
objectMapper
.
configure
(
com
.
fasterxml
.
jackson
.
databind
.
DeserializationFeature
.
FAIL_ON_UNKNOWN_PROPERTIES
,
false
);
objectMapper
.
disable
(
SerializationFeature
.
INDENT_OUTPUT
);
objectMapper
.
configure
(
DeserializationFeature
.
FAIL_ON_UNKNOWN_PROPERTIES
,
false
);
return
objectMapper
;
}
/**
* 获取文件存储目录
*/
private
File
getResultDirectory
()
{
File
resultDir
=
new
File
(
"result"
);
if
(!
resultDir
.
exists
())
{
...
...
@@ -57,23 +49,20 @@ public class SceneService {
return
resultDir
;
}
/**
* 获取文件路径
*/
private
File
getChromosomeFile
(
String
sceneId
)
{
File
resultDir
=
getResultDirectory
();
String
fileName
=
"chromosome_result_"
+
sceneId
+
".json"
;
return
new
File
(
resultDir
,
fileName
);
}
private
File
getChromosomeFile
(
String
sceneId
,
String
ver
)
{
private
File
getChromosomeFile
(
String
sceneId
,
String
version
)
{
File
resultDir
=
getResultDirectory
();
String
fileName
=
"chromosome_result_"
+
sceneId
+
"_"
+
ver
+
"_.json"
;
String
fileName
=
"chromosome_result_"
+
sceneId
+
"_"
+
version
+
"_.json"
;
return
new
File
(
resultDir
,
fileName
);
}
/**
* 从文件中读取
Chromosome对象
* 从文件中读取
Chromosome 对象,并拆分文件读取与反序列化耗时。
*/
public
Chromosome
loadChromosomeFromFile
(
String
sceneId
)
{
if
(
sceneId
==
null
||
sceneId
.
trim
().
isEmpty
())
{
...
...
@@ -82,41 +71,51 @@ public class SceneService {
}
try
{
long
totalStart
=
System
.
nanoTime
();
ObjectMapper
objectMapper
=
createObjectMapper
();
SceneChromsome
sceneChromsome
=(
SceneChromsome
)
redisUtils
.
get
(
"SceneId."
+
sceneId
);
SceneChromsome
sceneChromsome
=
(
SceneChromsome
)
redisUtils
.
get
(
"SceneId."
+
sceneId
);
File
file
;
if
(
sceneChromsome
==
null
)
{
if
(
sceneChromsome
==
null
)
{
file
=
getChromosomeFile
(
sceneId
);
}
else
{
file
=
getChromosomeFile
(
sceneId
,
sceneChromsome
.
getVersion
().
toString
());
}
else
{
file
=
getChromosomeFile
(
sceneId
,
sceneChromsome
.
getVersion
().
toString
());
}
if
(!
file
.
exists
())
{
logger
.
warn
(
"染色体文件不存在: {}"
,
file
.
getAbsolutePath
());
return
null
;
}
if
(
file
.
length
()
==
0
)
{
long
fileSize
=
file
.
length
();
if
(
fileSize
==
0
)
{
logger
.
warn
(
"染色体文件为空: {}"
,
file
.
getAbsolutePath
());
return
null
;
}
logger
.
info
(
"正在从文件加载染色体: {}"
,
file
.
getAbsolutePath
());
Chromosome
chromosome
=
objectMapper
.
readValue
(
file
,
Chromosome
.
class
);
logger
.
info
(
"染色体加载成功,场景ID: {}"
,
sceneId
);
logger
.
info
(
"正在从文件加载染色体: {}, sceneId={}, fileSize={} bytes"
,
file
.
getAbsolutePath
(),
sceneId
,
fileSize
);
return
chromosome
;
long
fileReadStart
=
System
.
nanoTime
();
byte
[]
fileBytes
=
Files
.
readAllBytes
(
file
.
toPath
());
long
fileReadMs
=
(
System
.
nanoTime
()
-
fileReadStart
)
/
1_000_000
;
long
deserializeStart
=
System
.
nanoTime
();
Chromosome
chromosome
=
objectMapper
.
readValue
(
fileBytes
,
Chromosome
.
class
);
long
deserializeMs
=
(
System
.
nanoTime
()
-
deserializeStart
)
/
1_000_000
;
long
totalMs
=
(
System
.
nanoTime
()
-
totalStart
)
/
1_000_000
;
logger
.
info
(
"染色体加载成功,场景ID: {}, fileSize={} bytes, fileRead={} ms, deserialize={} ms, total={} ms"
,
sceneId
,
fileSize
,
fileReadMs
,
deserializeMs
,
totalMs
);
return
chromosome
;
}
catch
(
Exception
e
)
{
// 正确的错误日志写法
logger
.
error
(
"加载染色体文件失败,场景ID: "
+
sceneId
,
e
);
throw
new
RuntimeException
(
"加载染色体文件失败: "
+
e
.
getMessage
(),
e
);
}
}
/**
* 将染色体结果保存到
JSON
文件
* 将染色体结果保存到
JSON
文件
*/
public
boolean
saveChromosomeToFile
(
Chromosome
chromosome
,
String
sceneId
)
{
if
(
chromosome
==
null
)
{
...
...
@@ -132,45 +131,35 @@ public class SceneService {
try
{
ObjectMapper
objectMapper
=
createObjectMapper
();
SceneChromsome
sceneChromsome
=(
SceneChromsome
)
redisUtils
.
get
(
"SceneId."
+
sceneId
);
if
(
sceneChromsome
==
null
)
{
sceneChromsome
=
new
SceneChromsome
();
SceneChromsome
sceneChromsome
=
(
SceneChromsome
)
redisUtils
.
get
(
"SceneId."
+
sceneId
);
if
(
sceneChromsome
==
null
)
{
sceneChromsome
=
new
SceneChromsome
();
sceneChromsome
.
setSceneID
(
sceneId
);
sceneChromsome
.
setVersion
(
1
);
}
else
{
Integer
v
=
sceneChromsome
.
getVersion
();
// 回退后编辑,会清除后续版本,重新生成
List
<
SceneDetail
>
nexts
=
sceneChromsome
.
getSceneDetails
().
stream
()
.
filter
(
t
->
t
.
getVersion
()
>
v
)
}
else
{
Integer
currentVersion
=
sceneChromsome
.
getVersion
();
List
<
SceneDetail
>
nextVersions
=
sceneChromsome
.
getSceneDetails
().
stream
()
.
filter
(
detail
->
detail
.
getVersion
()
>
currentVersion
)
.
collect
(
Collectors
.
toList
());
if
(
nexts
!=
null
&&
nexts
.
size
()>
0
)
{
for
(
SceneDetail
d:
nexts
)
{
File
file1
=
getChromosomeFile
(
sceneId
,
d
.
getVersion
().
toString
());
Files
.
deleteIfExists
(
file1
.
toPath
());
if
(!
nextVersions
.
isEmpty
())
{
for
(
SceneDetail
detail
:
nextVersions
)
{
File
nextFile
=
getChromosomeFile
(
sceneId
,
detail
.
getVersion
().
toString
());
Files
.
deleteIfExists
(
nextFile
.
toPath
());
}
}
sceneChromsome
.
getSceneDetails
().
removeIf
(
t
->
t
.
getVersion
()
>
v
);
sceneChromsome
.
getSceneDetails
().
removeIf
(
detail
->
detail
.
getVersion
()
>
currentVersion
);
sceneChromsome
.
setVersion
(
sceneChromsome
.
getVersion
()
+
1
);
}
SceneDetail
sceneDetail
=
new
SceneDetail
();
SceneDetail
sceneDetail
=
new
SceneDetail
();
sceneDetail
.
setVersion
(
sceneChromsome
.
getVersion
());
sceneChromsome
.
getSceneDetails
().
add
(
sceneDetail
);
redisUtils
.
set
(
"SceneId."
+
sceneId
,
sceneChromsome
);
redisUtils
.
set
(
"SceneId."
+
sceneId
,
sceneChromsome
);
File
file
=
getChromosomeFile
(
sceneId
,
sceneChromsome
.
getVersion
().
toString
());
File
file
=
getChromosomeFile
(
sceneId
,
sceneChromsome
.
getVersion
().
toString
());
File
tempFile
=
new
File
(
file
.
getParentFile
(),
file
.
getName
()
+
".tmp"
);
chromosome
.
setVersion
(
sceneChromsome
.
getVersion
());
objectMapper
.
writeValue
(
tempFile
,
chromosome
);
if
(
tempFile
.
length
()
==
0
)
{
...
...
@@ -179,7 +168,6 @@ public class SceneService {
return
false
;
}
// 验证文件内容
try
{
Chromosome
verifyChromosome
=
objectMapper
.
readValue
(
tempFile
,
Chromosome
.
class
);
if
(
verifyChromosome
==
null
)
{
...
...
@@ -191,7 +179,6 @@ public class SceneService {
return
false
;
}
// 替换原文件
if
(
file
.
exists
())
{
Files
.
deleteIfExists
(
file
.
toPath
());
}
...
...
@@ -199,78 +186,56 @@ public class SceneService {
logger
.
info
(
"染色体保存成功,场景ID: {}, 文件: {}"
,
sceneId
,
file
.
getAbsolutePath
());
return
true
;
}
catch
(
Exception
e
)
{
logger
.
error
(
"保存染色体文件失败,场景ID: "
+
sceneId
,
e
);
return
false
;
}
}
public
SceneChromsome
getSceneChromsome
(
String
sceneId
)
{
SceneChromsome
sceneChromsome
=(
SceneChromsome
)
redisUtils
.
get
(
"SceneId."
+
sceneId
);
return
sceneChromsome
;
public
SceneChromsome
getSceneChromsome
(
String
sceneId
)
{
return
(
SceneChromsome
)
redisUtils
.
get
(
"SceneId."
+
sceneId
);
}
public
Chromosome
moveChromosome
(
String
sceneId
,
Integer
version
)
{
SceneChromsome
sceneChromsome
=(
SceneChromsome
)
redisUtils
.
get
(
"SceneId."
+
sceneId
);
if
(
sceneChromsome
==
null
)
{
public
Chromosome
moveChromosome
(
String
sceneId
,
Integer
version
)
{
SceneChromsome
sceneChromsome
=
(
SceneChromsome
)
redisUtils
.
get
(
"SceneId."
+
sceneId
);
if
(
sceneChromsome
==
null
)
{
return
null
;
}
else
{
}
int
prev
Version
=
sceneChromsome
.
getVersion
()
-
1
;
if
(
prev
Version
==
0
)
{
throw
new
RuntimeException
(
"无法撤销,当前已
是第一个版本"
);
int
previous
Version
=
sceneChromsome
.
getVersion
()
-
1
;
if
(
previous
Version
==
0
)
{
throw
new
RuntimeException
(
"无法撤销,当前已经
是第一个版本"
);
}
sceneChromsome
.
setVersion
(
prevVersion
);
redisUtils
.
set
(
"SceneId."
+
sceneId
,
sceneChromsome
);
Chromosome
chromosome
=
loadChromosomeFromFile
(
sceneId
);
sceneChromsome
.
setVersion
(
previousVersion
);
redisUtils
.
set
(
"SceneId."
+
sceneId
,
sceneChromsome
);
Chromosome
chromosome
=
loadChromosomeFromFile
(
sceneId
);
if
(
chromosome
==
null
)
{
sceneChromsome
.
setVersion
(
sceneChromsome
.
getVersion
()
+
1
);
redisUtils
.
set
(
"SceneId."
+
sceneId
,
sceneChromsome
);
redisUtils
.
set
(
"SceneId."
+
sceneId
,
sceneChromsome
);
throw
new
RuntimeException
(
"撤销操作失败,未找到上一个版本"
);
}
return
chromosome
;
}
public
Chromosome
revertVersion
(
String
sceneId
,
Integer
version
)
{
SceneChromsome
sceneChromsome
=
(
SceneChromsome
)
redisUtils
.
get
(
"SceneId."
+
sceneId
);
if
(
sceneChromsome
==
null
)
{
return
null
;
}
public
Chromosome
revertVersion
(
String
sceneId
,
Integer
version
)
{
SceneChromsome
sceneChromsome
=(
SceneChromsome
)
redisUtils
.
get
(
"SceneId."
+
sceneId
);
Integer
currentVersion
=
sceneChromsome
.
getVersion
();
if
(
sceneChromsome
==
null
)
{
return
null
;
}
else
{
sceneChromsome
.
setVersion
(
version
);
redisUtils
.
set
(
"SceneId."
+
sceneId
,
sceneChromsome
);
redisUtils
.
set
(
"SceneId."
+
sceneId
,
sceneChromsome
);
Chromosome
chromosome
=
loadChromosomeFromFile
(
sceneId
);
if
(
chromosome
==
null
)
{
sceneChromsome
.
setVersion
(
currentVersion
);
redisUtils
.
set
(
"SceneId."
+
sceneId
,
sceneChromsome
);
throw
new
RuntimeException
(
"撤销操作失败,未找到上一版本"
);
redisUtils
.
set
(
"SceneId."
+
sceneId
,
sceneChromsome
);
throw
new
RuntimeException
(
"恢复版本失败,未找到对应版本"
);
}
return
chromosome
;
}
}
/**
* 检查染色体文件是否存在
*/
...
...
@@ -278,12 +243,12 @@ public class SceneService {
if
(
sceneId
==
null
||
sceneId
.
trim
().
isEmpty
())
{
return
false
;
}
SceneChromsome
sceneChromsome
=(
SceneChromsome
)
redisUtils
.
get
(
"SceneId."
+
sceneId
);
SceneChromsome
sceneChromsome
=
(
SceneChromsome
)
redisUtils
.
get
(
"SceneId."
+
sceneId
);
File
file
;
if
(
sceneChromsome
==
null
)
{
if
(
sceneChromsome
==
null
)
{
file
=
getChromosomeFile
(
sceneId
);
}
else
{
file
=
getChromosomeFile
(
sceneId
,
sceneChromsome
.
getVersion
().
toString
());
}
else
{
file
=
getChromosomeFile
(
sceneId
,
sceneChromsome
.
getVersion
().
toString
());
}
return
file
.
exists
()
&&
file
.
length
()
>
0
;
}
...
...
@@ -293,11 +258,9 @@ public class SceneService {
*/
public
boolean
deleteChromosomeFile
(
String
sceneId
)
{
try
{
SceneChromsome
sceneChromsome
=(
SceneChromsome
)
redisUtils
.
get
(
"SceneId."
+
sceneId
);
SceneChromsome
sceneChromsome
=
(
SceneChromsome
)
redisUtils
.
get
(
"SceneId."
+
sceneId
);
File
file
;
if
(
sceneChromsome
==
null
)
{
if
(
sceneChromsome
==
null
)
{
file
=
getChromosomeFile
(
sceneId
);
if
(
file
.
exists
())
{
boolean
deleted
=
Files
.
deleteIfExists
(
file
.
toPath
());
...
...
@@ -305,22 +268,20 @@ public class SceneService {
logger
.
info
(
"删除染色体文件成功: {}"
,
file
.
getAbsolutePath
());
}
}
}
else
{
for
(
SceneDetail
d
:
sceneChromsome
.
getSceneDetails
())
{
file
=
getChromosomeFile
(
sceneId
,
d
.
getVersion
().
toString
());
}
else
{
for
(
SceneDetail
d
etail
:
sceneChromsome
.
getSceneDetails
())
{
file
=
getChromosomeFile
(
sceneId
,
detail
.
getVersion
().
toString
());
if
(
file
.
exists
())
{
boolean
deleted
=
Files
.
deleteIfExists
(
file
.
toPath
());
if
(
deleted
)
{
logger
.
info
(
"删除染色体文件成功: {}"
,
file
.
getAbsolutePath
());
}
}
}
}
// 删除Redis中的场景信息
redisUtils
.
del
(
"SceneId."
+
sceneId
);
logger
.
info
(
"删除Redis场景信息成功: {}"
,
"SceneId."
+
sceneId
);
redisUtils
.
del
(
"SceneId."
+
sceneId
);
logger
.
info
(
"删除Redis场景信息成功: {}"
,
"SceneId."
+
sceneId
);
return
true
;
}
catch
(
Exception
e
)
{
...
...
@@ -331,8 +292,6 @@ public class SceneService {
/**
* 清理历史版本的排产结果文件,只保留当前版本
* @param sceneId 场景ID
* @return 是否清理成功
*/
public
boolean
cleanupHistoricalVersions
(
String
sceneId
)
{
try
{
...
...
@@ -355,12 +314,11 @@ public class SceneService {
for
(
SceneDetail
detail
:
sceneDetails
)
{
Integer
version
=
detail
.
getVersion
();
if
(
version
<
currentVersion
)
{
// 删除历史版本的文件
File
file
=
getChromosomeFile
(
sceneId
,
version
.
toString
());
if
(
file
.
exists
())
{
boolean
deleted
=
Files
.
deleteIfExists
(
file
.
toPath
());
if
(
deleted
)
{
logger
.
info
(
"删除历史版本排产结果文件成功: {}
,
版本: {}"
,
file
.
getAbsolutePath
(),
version
);
logger
.
info
(
"删除历史版本排产结果文件成功: {}
,
版本: {}"
,
file
.
getAbsolutePath
(),
version
);
}
}
}
...
...
@@ -374,8 +332,4 @@ public class SceneService {
return
false
;
}
}
}
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