Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gjjs-bd-common
Overview
Overview
Details
Activity
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
s_guodong
gjjs-bd-common
Commits
98cfe477
Commit
98cfe477
authored
Oct 18, 2023
by
吴佳
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
兼容ZK saveData\loadData
ModuleList数据读/写适配 空格处理
parent
8b53728d
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
100 additions
and
22 deletions
+100
-22
MdaUtils.java
...in/java/com/brilliance/mda/runtime/mda/util/MdaUtils.java
+100
-22
No files found.
gjjs-bd-runtime/src/main/java/com/brilliance/mda/runtime/mda/util/MdaUtils.java
View file @
98cfe477
package
com
.
brilliance
.
mda
.
runtime
.
mda
.
util
;
import
com.brilliance.mda.runtime.mda.*
;
import
com.brilliance.mda.runtime.mda.impl.ModuleList
;
import
com.brilliance.mda.runtime.mda.driver.I18NImpl
;
import
com.brilliance.mda.runtime.mda.driver.MdaDriver
;
import
com.brilliance.mda.runtime.mda.driver.MdaEnv
;
...
...
@@ -45,6 +46,17 @@ import static com.brilliance.mda.runtime.mda.Constants.NO_ERROR;
public
class
MdaUtils
{
private
static
final
Logger
log
=
LoggerFactory
.
getLogger
(
MdaUtils
.
class
);
public
static
final
int
MAX
=
200
;
// 防止StackOver Overflow
private
static
final
String
FORMATDATE
=
"yyyyMMddHHmmssSSS"
;
private
static
final
String
FORMATINT
=
"0.00"
;
private
static
final
char
CR
=
'\r'
;
private
static
final
char
STRING
=
'S'
;
private
static
final
char
INTEGER
=
'I'
;
private
static
final
char
BIGDECIMAL
=
'B'
;
private
static
final
char
DATE
=
'D'
;
private
static
final
char
MODULELIST
=
'M'
;
private
static
final
char
EQUALS
=
'='
;
private
static
final
char
DATA
=
'#'
;
static
final
Format
format
=
new
DecimalFormat
(
"#.######"
);
static
final
Format
dateFormat
=
new
SimpleDateFormat
(
"yyyy/MM/dd"
);
...
...
@@ -961,19 +973,20 @@ public class MdaUtils {
**/
public
static
void
saveMdlData
(
IModule
module
,
IStream
os
)
{
//在第一行写入module 名字
os
.
insertLine
(
0
,
module
.
getName
());
// os.insertLine(0,module.getName());
try
{
os
.
getOutputStream
().
write
((
"\r"
+
module
.
getName
()
).
getBytes
(
StandardCharsets
.
UTF_8
));
os
.
getOutputStream
().
write
((
module
.
getName
()+
CR
).
getBytes
(
StandardCharsets
.
UTF_8
));
}
catch
(
IOException
e
){
log
.
error
(
"流数据写入失败"
);
}
writeData
(
""
,
module
,
os
);
writeData
(
""
,
module
,
os
,
0
);
}
/**
* 递归保存模型中的叶子节点
**/
private
static
void
writeData
(
String
parentDir
,
IModule
module
,
IStream
os
)
{
private
static
int
writeData
(
String
parentDir
,
IModule
module
,
IStream
os
,
int
deep
)
{
String
thisDir
=
""
;
if
(
parentDir
.
length
()
!=
0
){
thisDir
=
parentDir
+
File
.
separator
;
...
...
@@ -997,26 +1010,61 @@ public class MdaUtils {
fieldVal
=
method
.
invoke
(
module
);
if
(!
MdaUtils
.
isEmpty
(
fieldVal
)
&&
!(
fieldVal
instanceof
IControl
))
{
//如果是IMODULE 属性 ,递归获取
if
(
fieldVal
instanceof
IModule
)
{
if
(
fieldVal
instanceof
IModule
&&
!(
fieldVal
instanceof
IModuleList
)
)
{
String
subDir
=
thisDir
+
fieldName
;
writeData
(
subDir
,
(
IModule
)
fieldVal
,
os
);
}
else
{
deep
=
writeData
(
subDir
,
(
IModule
)
fieldVal
,
os
,
deep
);
}
else
{
//如果是ModuleList
if
(
field
.
getType
().
getName
().
equals
(
"com.brilliance.mda.runtime.mda.impl.ModuleList"
)){
IModuleList
<
IModule
>
list
=
(
IModuleList
)
fieldVal
;
if
(!
list
.
isEmpty
()
&&
list
.
size
()
>
0
)
{
String
subDir
=
thisDir
+
fieldName
;
String
line
=
thisDir
+
fieldName
+
EQUALS
+
MODULELIST
+
list
.
size
();
try
{
os
.
getOutputStream
().
write
((
line
+
CR
).
getBytes
(
StandardCharsets
.
UTF_8
));
deep
++;
}
catch
(
IOException
e
){
log
.
error
(
"流数据写入失败"
);
}
deep
=
0
;
// 设置ModuleList可将读取栈清空
for
(
int
i
=
0
;
i
<
list
.
size
();
i
++)
{
String
subDirIdx
=
subDir
+
"["
+
i
+
"]"
;
deep
=
writeData
(
subDirIdx
,
(
IModule
)
(
list
.
get
(
i
)),
os
,
deep
);
}
}
//叶子节点
}
else
if
(
fieldVal
instanceof
String
||
fieldVal
instanceof
Number
||
fieldVal
instanceof
Date
){
String
newFieldVal
=
""
;
//数值类型 ,值为0的 不保存
if
(
fieldVal
instanceof
Number
&&
((
Number
)
fieldVal
).
doubleValue
()
==
0
)
{
return
deep
;
}
if
(
field
.
getType
().
getName
().
equals
(
"java.util.Date"
)){
SimpleDateFormat
simpleDateFormat
=
new
SimpleDateFormat
(
"yyyyMMddHHmmss"
);
newFieldVal
=
"D"
+
simpleDateFormat
.
format
((
Date
)
fieldVal
)
+
"000"
;
SimpleDateFormat
simpleDateFormat
=
new
SimpleDateFormat
(
FORMATDATE
);
newFieldVal
=
DATE
+
simpleDateFormat
.
format
((
Date
)
fieldVal
)
;
}
else
if
(
field
.
getType
().
getName
().
equals
(
"java.lang.Integer"
)){
newFieldVal
=
INTEGER
+
fieldVal
.
toString
();
}
else
if
(
field
.
getType
().
getName
().
equals
(
"java.math.BigDecimal"
)){
newFieldVal
=
"B"
+
fieldVal
.
toString
(
);
}
else
{
newFieldVal
=
"S"
+
fieldVal
.
toString
(
);
newFieldVal
=
BIGDECIMAL
+
new
DecimalFormat
(
FORMATINT
).
format
(
new
BigDecimal
(
fieldVal
.
toString
())
);
}
else
if
(
field
.
getType
().
getName
().
equals
(
"java.lang.String"
))
{
newFieldVal
=
STRING
+
fieldVal
.
toString
().
replaceAll
(
"(\r\n)|\r|\n"
,
"\r"
+
DATA
);
}
String
line
=
thisDir
+
fieldName
+
"="
+
newFieldVal
;
// os.insertLine(0,line);
String
line
=
thisDir
+
fieldName
+
EQUALS
+
newFieldVal
;
try
{
os
.
getOutputStream
().
write
((
"\r"
+
line
).
getBytes
(
StandardCharsets
.
UTF_8
));
os
.
getOutputStream
().
write
((
line
+
CR
).
getBytes
(
StandardCharsets
.
UTF_8
));
deep
++;
if
(
deep
==
MAX
)
{
os
.
getOutputStream
().
write
(
CR
);
// 多写一个回车便于LoadModule为退出loadline的循环调用
deep
=
0
;
}
}
catch
(
IOException
e
){
log
.
error
(
"流数据写入失败"
);
}
}
else
{
return
0
;
}
}
}
}
catch
(
IllegalAccessException
e
)
{
...
...
@@ -1027,6 +1075,7 @@ public class MdaUtils {
log
.
error
(
"方法{}未找到"
,
getMethodName
);
}
}
return
deep
;
}
public
static
String
getCodetableLabel
(
String
codetable
,
String
key
)
{
...
...
@@ -1050,7 +1099,7 @@ public class MdaUtils {
//去除空格
line
.
trim
();
//空行和#开头的注释行 跳过
if
(
line
.
length
()
==
0
||
line
.
indexOf
(
"#"
)
==
0
){
if
(
line
.
length
()
==
0
||
line
.
indexOf
(
DATA
)
==
0
){
continue
;
}
//读取到本模型模型名相同数据的行,开始获取模型数据
...
...
@@ -1080,7 +1129,8 @@ public class MdaUtils {
String
moduleName
=
moduleClass
.
getName
();
Method
getMethod
=
null
;
Method
setMethod
=
null
;
if
(
key
.
indexOf
(
File
.
separator
)
==
-
1
){
//叶子节点赋值
//叶子节点赋值
if
(
key
.
indexOf
(
File
.
separator
)
==
-
1
){
//获取setXXX方法名
fieldName
=
key
;
String
setMethodName
=
"set"
+
fieldName
.
substring
(
0
,
1
).
toUpperCase
()
+
fieldName
.
substring
(
1
);
...
...
@@ -1091,17 +1141,22 @@ public class MdaUtils {
setMethod
=
moduleClass
.
getDeclaredMethod
(
setMethodName
,
field
.
getType
());
//根据类型 对数据进行处理
Object
val
=
null
;
if
(
field
.
getType
().
getName
().
equals
(
"java.math.BigDecimal"
)){
if
(
oldval
.
indexOf
(
MODULELIST
)==
0
){
return
;
}
if
(
oldval
.
indexOf
(
BIGDECIMAL
)
==
0
){
val
=
new
BigDecimal
(
oldval
.
substring
(
1
));
}
else
if
(
field
.
getType
().
getName
().
equals
(
"java.util.Date"
)
){
}
else
if
(
oldval
.
indexOf
(
DATE
)
==
0
){
//String转Date
SimpleDateFormat
simpleDateFormat
=
new
SimpleDateFormat
(
"yyyyMMddHHmmss"
);
SimpleDateFormat
simpleDateFormat
=
new
SimpleDateFormat
(
FORMATDATE
);
try
{
val
=
simpleDateFormat
.
parse
(
oldval
.
substring
(
1
,
14
));
val
=
simpleDateFormat
.
parse
(
oldval
.
substring
(
1
));
}
catch
(
ParseException
e
)
{
log
.
error
(
"日期{}格式不正确"
,
oldval
);
}
}
else
{
}
else
if
(
oldval
.
indexOf
(
INTEGER
)
==
0
){
val
=
new
Integer
(
oldval
.
substring
(
1
));
}
else
if
(
oldval
.
indexOf
(
STRING
)
==
0
){
val
=
oldval
.
substring
(
1
).
toString
();
}
setMethod
.
invoke
(
module
,
val
);
...
...
@@ -1119,6 +1174,13 @@ public class MdaUtils {
}
else
{
//非叶子节点继续迭代
//获取setXXX方法名
fieldName
=
key
.
substring
(
0
,
key
.
indexOf
(
File
.
separator
));
//moduleList 的数据包含 [?]
int
index
=
-
1
;
if
(
fieldName
.
indexOf
(
"["
)
>
0
){
String
[]
fieldNameArr
=
fieldName
.
split
(
"\\["
);
fieldName
=
fieldNameArr
[
0
];
index
=
Integer
.
parseInt
(
fieldNameArr
[
1
].
replace
(
"]"
,
""
));
}
String
newKey
=
key
.
substring
(
key
.
indexOf
(
File
.
separator
)+
1
);
String
getMethodName
=
"get"
+
fieldName
.
substring
(
0
,
1
).
toUpperCase
()
+
fieldName
.
substring
(
1
);
try
{
...
...
@@ -1126,7 +1188,23 @@ public class MdaUtils {
getMethod
=
moduleClass
.
getDeclaredMethod
(
getMethodName
);
//获取下次递归的模型
IModule
subModule
=
(
IModule
)
getMethod
.
invoke
(
module
);
if
(
subModule
instanceof
ModuleList
){
if
(
subModule
==
null
){
subModule
=
new
ModuleList
();
}
IModuleList
<
IModule
>
list
=
(
IModuleList
)
subModule
;
if
(
list
.
size
()
-
1
<
index
){
try
{
list
.
add
(((
ModuleList
<?>)
subModule
).
getDataClass
().
newInstance
());
}
catch
(
InstantiationException
e
)
{
e
.
printStackTrace
();
}
}
readData
(
list
.
get
(
index
),
newKey
,
oldval
);
}
else
{
readData
(
subModule
,
newKey
,
oldval
);
}
}
catch
(
IllegalAccessException
e
)
{
log
.
error
(
"模型{}中执行方法{}时出错"
,
moduleName
,
getMethodName
);
}
catch
(
InvocationTargetException
e
)
{
...
...
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