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
e3f49a1d
Commit
e3f49a1d
authored
Dec 11, 2025
by
DESKTOP-VKRD9QF\Administration
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
策略转化
parent
b0d9e31b
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
266 additions
and
8 deletions
+266
-8
EnhancedJsonConversionUtil.java
.../java/com/aps/common/util/EnhancedJsonConversionUtil.java
+160
-0
Config.java
src/main/java/com/aps/entity/Config.java
+5
-2
ConfigSetting.java
src/main/java/com/aps/entity/ConfigSetting.java
+2
-1
StrategyScheduling.java
src/main/java/com/aps/entity/StrategyScheduling.java
+5
-1
ConfigService.java
src/main/java/com/aps/service/ConfigService.java
+5
-1
StrategyRuleService.java
src/main/java/com/aps/service/StrategyRuleService.java
+13
-1
ConfigServiceImpl.java
src/main/java/com/aps/service/impl/ConfigServiceImpl.java
+49
-1
StrategyRuleServiceImpl.java
...in/java/com/aps/service/impl/StrategyRuleServiceImpl.java
+27
-1
No files found.
src/main/java/com/aps/common/util/EnhancedJsonConversionUtil.java
0 → 100644
View file @
e3f49a1d
package
com
.
aps
.
common
.
util
;
import
com.aps.entity.StrategyScheduling
;
import
com.aps.entity.ConfigSetting
;
import
com.fasterxml.jackson.databind.DeserializationFeature
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.fasterxml.jackson.databind.PropertyNamingStrategy
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
java.util.*
;
import
java.util.concurrent.ConcurrentHashMap
;
/**
* 增强版JSON转换工具类,支持字段映射配置
*/
public
class
EnhancedJsonConversionUtil
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
EnhancedJsonConversionUtil
.
class
);
// 字段映射配置
private
static
final
Map
<
String
,
String
>
FIELD_MAPPINGS
=
new
ConcurrentHashMap
<>();
static
{
// 初始化字段映射
FIELD_MAPPINGS
.
put
(
"_X_ROW_KEY"
,
"rowKey"
);
FIELD_MAPPINGS
.
put
(
"row_key"
,
"rowKey"
);
FIELD_MAPPINGS
.
put
(
"ROW_KEY"
,
"rowKey"
);
// 可以添加更多映射
}
/**
* 添加自定义字段映射
*/
public
static
void
addFieldMapping
(
String
sourceField
,
String
targetField
)
{
FIELD_MAPPINGS
.
put
(
sourceField
,
targetField
);
}
/**
* 转换JSON数组到实体列表,支持字段映射
*/
public
static
<
T
>
List
<
T
>
convertJsonToEntities
(
String
jsonArray
,
Map
<
String
,
String
>
customMappings
,
Class
<
T
>
targetType
)
{
if
(
jsonArray
==
null
||
jsonArray
.
trim
().
isEmpty
())
{
return
Collections
.
emptyList
();
}
try
{
ObjectMapper
mapper
=
new
ObjectMapper
();
// 忽略未知属性
mapper
.
configure
(
DeserializationFeature
.
FAIL_ON_UNKNOWN_PROPERTIES
,
false
);
List
<
Map
<
String
,
Object
>>
rawList
=
mapper
.
readValue
(
jsonArray
,
new
com
.
fasterxml
.
jackson
.
core
.
type
.
TypeReference
<
List
<
Map
<
String
,
Object
>>>()
{}
);
List
<
T
>
result
=
new
ArrayList
<>();
for
(
Map
<
String
,
Object
>
rawMap
:
rawList
)
{
T
entity
=
convertMapToEntity
(
rawMap
,
customMappings
,
targetType
);
if
(
entity
!=
null
)
{
result
.
add
(
entity
);
}
}
return
result
;
}
catch
(
Exception
e
)
{
logger
.
error
(
"JSON转换失败"
,
e
);
return
Collections
.
emptyList
();
}
}
/**
* 转换Map到实体,应用字段映射
*/
private
static
<
T
>
T
convertMapToEntity
(
Map
<
String
,
Object
>
sourceMap
,
Map
<
String
,
String
>
customMappings
,
Class
<
T
>
targetType
)
{
if
(
sourceMap
==
null
)
{
return
null
;
}
try
{
// 合并映射配置
Map
<
String
,
String
>
allMappings
=
new
HashMap
<>(
FIELD_MAPPINGS
);
if
(
customMappings
!=
null
)
{
allMappings
.
putAll
(
customMappings
);
}
// 创建目标Map(应用字段映射)
Map
<
String
,
Object
>
targetMap
=
new
HashMap
<>();
for
(
Map
.
Entry
<
String
,
Object
>
entry
:
sourceMap
.
entrySet
())
{
String
targetField
=
allMappings
.
getOrDefault
(
entry
.
getKey
(),
entry
.
getKey
());
targetMap
.
put
(
targetField
,
entry
.
getValue
());
}
// 转换为实体
ObjectMapper
mapper
=
new
ObjectMapper
();
// 忽略未知属性
mapper
.
configure
(
DeserializationFeature
.
FAIL_ON_UNKNOWN_PROPERTIES
,
false
);
return
mapper
.
convertValue
(
targetMap
,
targetType
);
}
catch
(
Exception
e
)
{
logger
.
error
(
"Map转换实体失败"
,
e
);
return
null
;
}
}
/**
* 批量转换(性能优化版)
*/
public
static
<
T
>
List
<
T
>
batchConvert
(
List
<
Map
<
String
,
Object
>>
sourceList
,
Class
<
T
>
targetType
)
{
if
(
sourceList
==
null
||
sourceList
.
isEmpty
())
{
return
Collections
.
emptyList
();
}
List
<
T
>
result
=
new
ArrayList
<>(
sourceList
.
size
());
ObjectMapper
mapper
=
new
ObjectMapper
();
// 忽略未知属性
mapper
.
configure
(
DeserializationFeature
.
FAIL_ON_UNKNOWN_PROPERTIES
,
false
);
for
(
Map
<
String
,
Object
>
sourceMap
:
sourceList
)
{
try
{
// 应用字段映射
Map
<
String
,
Object
>
processedMap
=
processFieldMappings
(
sourceMap
);
T
entity
=
mapper
.
convertValue
(
processedMap
,
targetType
);
result
.
add
(
entity
);
}
catch
(
Exception
e
)
{
logger
.
warn
(
"跳过转换失败的数据: {}"
,
sourceMap
);
}
}
return
result
;
}
/**
* 处理字段映射
*/
private
static
Map
<
String
,
Object
>
processFieldMappings
(
Map
<
String
,
Object
>
sourceMap
)
{
Map
<
String
,
Object
>
result
=
new
HashMap
<>();
for
(
Map
.
Entry
<
String
,
Object
>
entry
:
sourceMap
.
entrySet
())
{
String
key
=
entry
.
getKey
();
Object
value
=
entry
.
getValue
();
// 应用映射规则
String
mappedKey
=
FIELD_MAPPINGS
.
getOrDefault
(
key
,
key
);
result
.
put
(
mappedKey
,
value
);
}
return
result
;
}
// 为了向后兼容,保留原有的方法
public
static
List
<
StrategyScheduling
>
convertJsonToEntities
(
String
jsonArray
,
Map
<
String
,
String
>
customMappings
)
{
return
convertJsonToEntities
(
jsonArray
,
customMappings
,
StrategyScheduling
.
class
);
}
}
\ No newline at end of file
src/main/java/com/aps/entity/Config.java
View file @
e3f49a1d
package
com
.
aps
.
entity
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.time.LocalDateTime
;
import
java.io.Serializable
;
import
java.time.LocalDateTime
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
@Data
public
class
Config
{
@TableId
(
value
=
"id"
,
type
=
IdType
.
AUTO
)
private
Long
id
;
private
String
page
;
private
String
component
;
...
...
src/main/java/com/aps/entity/ConfigSetting.java
View file @
e3f49a1d
...
...
@@ -12,4 +12,5 @@ public class ConfigSetting {
private
String
title
;
private
boolean
value
;
private
String
content
;
}
private
int
upid
;
}
\ No newline at end of file
src/main/java/com/aps/entity/StrategyScheduling.java
View file @
e3f49a1d
package
com
.
aps
.
entity
;
import
lombok.Data
;
/**
* 作者:佟礼
* 时间:2025-12-10
*/
@Data
public
class
StrategyScheduling
{
private
String
name
;
private
String
title
;
private
String
content
;
private
int
amplitude
;
private
boolean
value
;
}
}
\ No newline at end of file
src/main/java/com/aps/service/ConfigService.java
View file @
e3f49a1d
package
com
.
aps
.
service
;
import
com.aps.entity.Config
;
import
com.aps.entity.ConfigSetting
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
java.util.List
;
/**
* <p>
* 用户配置 服务类
...
...
@@ -13,4 +16,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public
interface
ConfigService
extends
IService
<
Config
>
{
}
List
<
ConfigSetting
>
getComponentSettingsByPageAndNote
(
Long
id
,
String
component
);
}
\ No newline at end of file
src/main/java/com/aps/service/StrategyRuleService.java
View file @
e3f49a1d
package
com
.
aps
.
service
;
import
com.aps.entity.StrategyRule
;
import
com.aps.entity.StrategyScheduling
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
java.util.List
;
/**
* <p>
* 策略规则 服务类
...
...
@@ -12,5 +15,14 @@ import com.baomidou.mybatisplus.extension.service.IService;
* @since 2025-12-10
*/
public
interface
StrategyRuleService
extends
IService
<
StrategyRule
>
{
/**
* 根据策略规则ID获取其前向调度配置并转换为StrategyScheduling实体列表
*
* @param ruleId 策略规则ID
* @return StrategyScheduling实体列表
*/
List
<
StrategyScheduling
>
getForwardSchedulingByRuleId
(
Long
ruleId
);
}
}
\ No newline at end of file
src/main/java/com/aps/service/impl/ConfigServiceImpl.java
View file @
e3f49a1d
package
com
.
aps
.
service
.
impl
;
import
com.aps.entity.Config
;
import
com.aps.entity.ConfigSetting
;
import
com.aps.mapper.ConfigMapper
;
import
com.aps.service.ConfigService
;
import
com.aps.common.util.EnhancedJsonConversionUtil
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
org.springframework.stereotype.Service
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
java.util.List
;
/**
* <p>
...
...
@@ -16,5 +24,45 @@ import org.springframework.stereotype.Service;
*/
@Service
public
class
ConfigServiceImpl
extends
ServiceImpl
<
ConfigMapper
,
Config
>
implements
ConfigService
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
ConfigServiceImpl
.
class
);
/**
* 简单校验是否为有效的JSON数组格式
* @param jsonString 待校验的字符串
* @return 是否为有效的JSON数组
*/
private
boolean
isValidJsonArray
(
String
jsonString
)
{
if
(
jsonString
==
null
||
jsonString
.
trim
().
isEmpty
())
{
return
false
;
}
String
trimmed
=
jsonString
.
trim
();
return
trimmed
.
startsWith
(
"["
)
&&
trimmed
.
endsWith
(
"]"
);
}
@Override
public
List
<
ConfigSetting
>
getComponentSettingsByPageAndNote
(
Long
id
,
String
component
)
{
Config
config
=
this
.
lambdaQuery
()
.
eq
(
Config:
:
getId
,
id
)
.
eq
(
Config:
:
getComponent
,
component
)
.
one
();
if
(
config
!=
null
&&
config
.
getContent
()
!=
null
&&
!
config
.
getContent
().
isEmpty
())
{
try
{
// 使用EnhancedJsonConversionUtil将JSON字符串转换为ConfigSetting实体列表
return
EnhancedJsonConversionUtil
.
convertJsonToEntities
(
config
.
getContent
(),
null
,
ConfigSetting
.
class
);
}
catch
(
Exception
e
)
{
logger
.
error
(
"解析配置组件数据时发生错误"
);
}
}
return
null
;
}
}
}
\ No newline at end of file
src/main/java/com/aps/service/impl/StrategyRuleServiceImpl.java
View file @
e3f49a1d
...
...
@@ -3,9 +3,15 @@ package com.aps.service.impl;
import
com.aps.entity.StrategyRule
;
import
com.aps.mapper.StrategyRuleMapper
;
import
com.aps.service.StrategyRuleService
;
import
com.aps.entity.StrategyScheduling
;
import
com.aps.common.util.EnhancedJsonConversionUtil
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
org.springframework.stereotype.Service
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
* <p>
* 策略规则 服务实现类
...
...
@@ -16,5 +22,25 @@ import org.springframework.stereotype.Service;
*/
@Service
public
class
StrategyRuleServiceImpl
extends
ServiceImpl
<
StrategyRuleMapper
,
StrategyRule
>
implements
StrategyRuleService
{
/**
* 根据策略规则ID获取其前向调度配置并转换为StrategyScheduling实体列表
*
* @param ruleId 策略规则ID
* @return StrategyScheduling实体列表
*/
public
List
<
StrategyScheduling
>
getForwardSchedulingByRuleId
(
Long
ruleId
)
{
// 从数据库查询StrategyRule
StrategyRule
strategyRule
=
this
.
getById
(
ruleId
);
if
(
strategyRule
!=
null
&&
strategyRule
.
getForwardScheduling
()
!=
null
)
{
// 使用EnhancedJsonConversionUtil将JSON字符串转换为StrategyScheduling实体列表
return
EnhancedJsonConversionUtil
.
convertJsonToEntities
(
strategyRule
.
getForwardScheduling
(),
null
,
StrategyScheduling
.
class
);
}
return
null
;
}
}
}
\ 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