Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
nnjcy-data-model
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
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ljb
nnjcy-data-model
Commits
ca96da48
Commit
ca96da48
authored
Sep 28, 2023
by
wqc
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
新增组件跟组件接口
parent
ff4ffe7a
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
425 additions
and
3 deletions
+425
-3
dataoperation-server/src/main/java/com/zq/dataoperation/controller/ComponentRunController.java
+26
-2
dataoperation-server/src/main/java/com/zq/dataoperation/service/CommonQueryService.java
+79
-1
dataoperation-server/src/main/java/com/zq/dataoperation/utils/IdentityUtils.java
+88
-0
spider-flow-core/src/main/java/com/zq/spiderflow/core/executor/shape/CutStringExecutor.java
+58
-0
spider-flow-core/src/main/java/com/zq/spiderflow/core/executor/shape/DataEliminateExecutor.java
+58
-0
spider-flow-core/src/main/java/com/zq/spiderflow/core/executor/shape/GroupingMetaExecutor.java
+58
-0
spider-flow-core/src/main/java/com/zq/spiderflow/core/executor/shape/TableLeftJoinExecutor.java
+58
-0
No files found.
dataoperation-server/src/main/java/com/zq/dataoperation/controller/ComponentRunController.java
View file @
ca96da48
...
...
@@ -9,7 +9,7 @@ import org.springframework.web.bind.annotation.*;
import
javax.annotation.Resource
;
import
java.util.Map
;
@Api
(
tags
=
"
通用查询
"
)
@Api
(
tags
=
"
组件执行接口
"
)
@RestController
@RequestMapping
(
value
=
"/data/execute"
)
public
class
ComponentRunController
{
...
...
@@ -18,9 +18,33 @@ public class ComponentRunController {
private
CommonQueryService
commonQueryService
;
@ApiOperation
(
"去重执行"
)
@PostMapping
(
"/remove"
)
@PostMapping
(
"/remove
Repeat
"
)
public
ResultVo
removeRepeat
(
@RequestBody
Map
<
String
,
Object
>
body
)
throws
Exception
{
return
ResultVo
.
success
(
commonQueryService
.
removeRepeat
(
body
));
}
@ApiOperation
(
"身份证清洗"
)
@PostMapping
(
"/identityClean"
)
public
ResultVo
identityClean
(
@RequestBody
Map
<
String
,
Object
>
body
)
throws
Exception
{
return
ResultVo
.
success
(
commonQueryService
.
identityClean
(
body
));
}
@ApiOperation
(
"字符串替换"
)
@PostMapping
(
"/replaceString"
)
public
ResultVo
replaceString
(
@RequestBody
Map
<
String
,
Object
>
body
)
throws
Exception
{
return
ResultVo
.
success
(
commonQueryService
.
replaceString
(
body
));
}
@ApiOperation
(
"记录排序"
)
@PostMapping
(
"/SortRecord"
)
public
ResultVo
SortRecord
(
@RequestBody
Map
<
String
,
Object
>
body
)
throws
Exception
{
return
ResultVo
.
success
(
commonQueryService
.
SortRecord
(
body
));
}
@ApiOperation
(
"记录排序"
)
@PostMapping
(
"/cutString"
)
public
ResultVo
CutString
(
@RequestBody
Map
<
String
,
Object
>
body
)
throws
Exception
{
return
ResultVo
.
success
(
commonQueryService
.
CutString
(
body
));
}
}
dataoperation-server/src/main/java/com/zq/dataoperation/service/CommonQueryService.java
View file @
ca96da48
...
...
@@ -5,6 +5,7 @@ import cn.hutool.json.JSONUtil;
import
com.alibaba.druid.pool.DruidPooledConnection
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.jcraft.jsch.Logger
;
import
com.zq.common.exception.BusinessException
;
import
com.zq.common.vo.PageVo
;
import
com.zq.common.vo.ResultVo
;
...
...
@@ -15,7 +16,9 @@ import com.zq.dataoperation.entity.CommonQuerySetting;
import
com.zq.dataoperation.entity.MetaDataMapping
;
import
com.zq.dataoperation.entity.QueryDb
;
import
com.zq.dataoperation.utils.ConnectionUtil
;
import
com.zq.dataoperation.utils.IdentityUtils
;
import
com.zq.dataoperation.utils.SqlUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.jdbc.core.JdbcTemplate
;
import
org.springframework.stereotype.Service
;
import
org.springframework.web.bind.annotation.RequestBody
;
...
...
@@ -180,12 +183,87 @@ public class CommonQueryService extends ServiceImpl<CommonQuerySettingDao, Commo
return
commonQuery
(
sql
,
id
);
}
//----------------------------------组件接口----------------------------------------------------------
//去重
public
Object
removeRepeat
(
Map
<
String
,
Object
>
body
)
throws
Exception
{
JSONObject
jsonObject
=
JSONUtil
.
parseObj
(
body
);
Long
datasourceId
=
Long
.
valueOf
(
jsonObject
.
get
(
"datasourceId"
).
toString
());
String
tableName
=
jsonObject
.
get
(
"tableName"
).
toString
();
String
metaData
=
jsonObject
.
get
(
"metaData"
).
toString
();
String
sql
=
"SELECT DISTINCT "
+
metaData
+
",m.* FROM "
+
tableName
+
" m"
;
String
sql1
=
"SELECT "
+
metaData
+
" FROM "
+
tableName
+
" GROUP BY "
+
metaData
+
" HAVING COUNT("
+
metaData
+
")>1;"
;
List
<
Map
>
mapList
=
commonQuery
(
sql1
,
datasourceId
);
if
(
mapList
==
null
){
return
"该字段没有重复值"
;
}
else
{
String
sql
=
"SELECT * FROM "
+
tableName
+
" WHERE id not in (SELECT MIN(id) FROM "
+
tableName
+
" GROUP BY "
+
metaData
+
" HAVING COUNT("
+
metaData
+
")>1);"
;
return
commonQuery
(
sql
,
datasourceId
);
}
}
//身份证清洗
public
Object
identityClean
(
Map
<
String
,
Object
>
body
)
throws
Exception
{
JSONObject
jsonObject
=
JSONUtil
.
parseObj
(
body
);
Long
datasourceId
=
Long
.
valueOf
(
jsonObject
.
get
(
"datasourceId"
).
toString
());
String
tableName
=
jsonObject
.
get
(
"tableName"
).
toString
();
String
metaData
=
jsonObject
.
get
(
"metaData"
).
toString
();
String
sql
=
"SELECT * FROM "
+
tableName
;
if
(
StringUtils
.
isNotBlank
(
metaData
))
{
return
"字段为身份证且不为空!"
;
}
if
(
IdentityUtils
.
isLegalIdCard
(
metaData
)!=
true
){
return
"身份证号不符"
;
}
else
if
(
IdentityUtils
.
is15BitLegalIdCard
(
metaData
)!=
true
){
return
"身份证不满15位!"
;
}
else
if
(
IdentityUtils
.
is18BitLegalIdCard
(
metaData
)!=
true
){
return
"身份证不满18位!"
;
}
else
{
return
commonQuery
(
sql
,
datasourceId
);
}
}
//字符串替换
public
Object
replaceString
(
Map
<
String
,
Object
>
body
)
throws
Exception
{
JSONObject
jsonObject
=
JSONUtil
.
parseObj
(
body
);
Long
datasourceId
=
Long
.
valueOf
(
jsonObject
.
get
(
"datasourceId"
).
toString
());
String
tableName
=
jsonObject
.
get
(
"tableName"
).
toString
();
String
metaData
=
jsonObject
.
get
(
"metaData"
).
toString
();
String
originStr
=
jsonObject
.
get
(
"originStr"
).
toString
();
String
replaceStr
=
jsonObject
.
get
(
"replaceStr"
).
toString
();
String
sql
=
"UPDATE "
+
tableName
+
" SET "
+
metaData
+
"=REPLACE("
+
metaData
+
",'"
+
originStr
+
"','"
+
replaceStr
+
"');"
;
if
(
StringUtils
.
isNotBlank
(
metaData
)&&
StringUtils
.
isNotBlank
(
tableName
)&&
StringUtils
.
isNotBlank
(
originStr
)&&
StringUtils
.
isNotBlank
(
replaceStr
))
{
return
"传入参数不能为空"
;
}
else
{
return
commonQuery
(
sql
,
datasourceId
);
}
}
public
Object
SortRecord
(
Map
<
String
,
Object
>
body
)
throws
Exception
{
JSONObject
jsonObject
=
JSONUtil
.
parseObj
(
body
);
Long
datasourceId
=
Long
.
valueOf
(
jsonObject
.
get
(
"datasourceId"
).
toString
());
String
tableName
=
jsonObject
.
get
(
"tableName"
).
toString
();
String
metaData
=
jsonObject
.
get
(
"metaData"
).
toString
();
String
sortStr
=
jsonObject
.
get
(
"sortStr"
).
toString
();
if
(
sortStr
.
equals
(
"1"
)){
sortStr
=
"ASC"
;
}
else
{
sortStr
=
"DESC"
;
}
String
sql
=
"SELECT * FROM "
+
tableName
+
" ORDER BY "
+
metaData
+
" "
+
sortStr
;
return
commonQuery
(
sql
,
datasourceId
);
}
public
Object
CutString
(
Map
<
String
,
Object
>
body
)
throws
Exception
{
JSONObject
jsonObject
=
JSONUtil
.
parseObj
(
body
);
Long
datasourceId
=
Long
.
valueOf
(
jsonObject
.
get
(
"datasourceId"
).
toString
());
String
tableName
=
jsonObject
.
get
(
"tableName"
).
toString
();
String
beginStr
=
jsonObject
.
get
(
"beginStr"
).
toString
();
String
indexStr
=
jsonObject
.
get
(
"indexStr"
).
toString
();
String
metaData
=
jsonObject
.
get
(
"metaData"
).
toString
();
String
sql
=
"SELECT *,"
+
" SUBSTR("
+
metaData
+
","
+
beginStr
+
","
+
indexStr
+
") AS "
+
metaData
+
"1 FROM "
+
tableName
;
if
(
StringUtils
.
isNotBlank
(
metaData
)&&
StringUtils
.
isNotBlank
(
tableName
)&&
StringUtils
.
isNotBlank
(
beginStr
)&&
StringUtils
.
isNotBlank
(
indexStr
))
{
return
"传入参数不能为空"
;
}
else
{
return
commonQuery
(
sql
,
datasourceId
);
}
}
}
dataoperation-server/src/main/java/com/zq/dataoperation/utils/IdentityUtils.java
0 → 100644
View file @
ca96da48
package
com
.
zq
.
dataoperation
.
utils
;
import
java.util.stream.IntStream
;
/**
* 身份证号码验证
* 1、号码的结构
* 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。从左至右依次为:六位数字地址码,
* 八位数字出生日期码,三位数字顺序码和一位数字校验码。
* 2、地址码(前六位数)
* 表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。
* 3、出生日期码(第七位至十四位)
* 表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。
* 4、顺序码(第十五位至十七位)
* 表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,
* 顺序码的奇数分配给男性,偶数分配给女性。
* 5、校验码(第十八位数)
* (1)十七位数字本体码加权求和公式 S = Sum(Ai Wi), i = 0, , 16 ,先对前17位数字的权求和 ;
* Ai:表示第i位置上的身份证号码数字值; Wi:表示第i位置上的加权因子 Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
* (2)计算模 Y = mod(S, 11)
* (3)通过模( 0 1 2 3 4 5 6 7 8 9 10)得到对应的校验码 Y:1 0 X 9 8 7 6 5 4 3 2
*
*/
public
class
IdentityUtils
{
/**
* 身份证校验码
*/
private
static
final
int
[]
COEFFICIENT_ARRAY
=
{
7
,
9
,
10
,
5
,
8
,
4
,
2
,
1
,
6
,
3
,
7
,
9
,
10
,
5
,
8
,
4
,
2
};
/**
* 身份证号的尾数规则
*/
private
static
final
String
[]
IDENTITY_MANTISSA
=
{
"1"
,
"0"
,
"X"
,
"9"
,
"8"
,
"7"
,
"6"
,
"5"
,
"4"
,
"3"
,
"2"
};
private
static
final
String
IDENTITY_PATTERN_15
=
"^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0-2]\\d)|3[0-1])\\d{3}$"
;
// 修改前未做X位的校验:"^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0-2]\\d)|3[0-1])\\d{4}$";
// 修改后:"^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0-2]\\d)|3[0-1])\\d{3}[0-9Xx]$";
private
static
final
String
IDENTITY_PATTERN_18
=
"^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0-2]\\d)|3[0-1])\\d{3}[0-9Xx]$"
;
/**
* 身份证号校验
*/
public
static
boolean
isLegalIdCard
(
String
identity
)
{
if
(
identity
==
null
)
{
return
false
;
}
if
(
identity
.
length
()
==
15
)
{
return
is15BitLegalIdCard
(
identity
);
}
if
(
identity
.
length
()
==
18
)
{
return
is18BitLegalIdCard
(
identity
);
}
return
false
;
}
public
static
boolean
is15BitLegalIdCard
(
String
identity
)
{
return
identity
.
matches
(
IDENTITY_PATTERN_15
);
}
public
static
boolean
is18BitLegalIdCard
(
String
identity
)
{
if
(
identity
.
length
()
!=
18
)
{
return
false
;
}
if
(!
identity
.
matches
(
IDENTITY_PATTERN_18
))
{
return
false
;
}
// 将字符串对象中的字符转换为一个字符数组
char
[]
chars
=
identity
.
toCharArray
();
long
sum
=
IntStream
.
range
(
0
,
17
).
map
(
index
->
{
char
ch
=
chars
[
index
];
// 通俗理解:digit()是个边界值判断,不过边界返回字符数字本身数值,超过边界即返回 -1.
int
digit
=
Character
.
digit
(
ch
,
10
);
int
coefficient
=
COEFFICIENT_ARRAY
[
index
];
return
digit
*
coefficient
;
}).
summaryStatistics
().
getSum
();
// 计算出的尾数索引
int
mantissaIndex
=
(
int
)
(
sum
%
11
);
String
mantissa
=
IDENTITY_MANTISSA
[
mantissaIndex
];
String
lastChar
=
identity
.
substring
(
17
);
return
lastChar
.
equalsIgnoreCase
(
mantissa
);
}
}
spider-flow-core/src/main/java/com/zq/spiderflow/core/executor/shape/CutStringExecutor.java
0 → 100644
View file @
ca96da48
package
com
.
zq
.
spiderflow
.
core
.
executor
.
shape
;
import
com.zq.spiderflow.context.SpiderContext
;
import
com.zq.spiderflow.executor.ShapeExecutor
;
import
com.zq.spiderflow.model.Shape
;
import
com.zq.spiderflow.model.SpiderNode
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.stereotype.Component
;
import
java.util.Map
;
/**
* @author Administrator
*/
@Component
public
class
CutStringExecutor
implements
ShapeExecutor
{
public
static
final
String
DATASOURCE_ID
=
"datasourceId"
;
public
static
final
String
META_DATA
=
"metaData"
;
public
static
final
String
TABLE_NAME
=
"tableName"
;
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
ExecuteSQLExecutor
.
class
);
@Override
public
Shape
shape
()
{
Shape
shape
=
new
Shape
();
//web界面上显示的图标
shape
.
setImage
(
"data:image/png;base64,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"
);
//拖放至容器里时默认的节点名称
shape
.
setLabel
(
"CutString"
);
//模板文件名
shape
.
setName
(
"CutString"
);
//鼠标移动至图标上显示的名称
shape
.
setTitle
(
"剪切字符串"
);
return
shape
;
}
@Override
public
String
supportShape
()
{
return
"CutString"
;
}
@Override
public
void
execute
(
SpiderNode
node
,
SpiderContext
context
,
Map
<
String
,
Object
>
variables
)
{
}
@Override
public
boolean
allowExecuteNext
(
SpiderNode
node
,
SpiderContext
context
,
Map
<
String
,
Object
>
variables
)
{
return
false
;
}
@Override
public
boolean
isThread
()
{
return
false
;
}
}
spider-flow-core/src/main/java/com/zq/spiderflow/core/executor/shape/DataEliminateExecutor.java
0 → 100644
View file @
ca96da48
package
com
.
zq
.
spiderflow
.
core
.
executor
.
shape
;
import
com.zq.spiderflow.context.SpiderContext
;
import
com.zq.spiderflow.executor.ShapeExecutor
;
import
com.zq.spiderflow.model.Shape
;
import
com.zq.spiderflow.model.SpiderNode
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.stereotype.Component
;
import
java.util.Map
;
/**
* @author Administrator
*/
@Component
public
class
DataEliminateExecutor
implements
ShapeExecutor
{
public
static
final
String
DATASOURCE_ID
=
"datasourceId"
;
public
static
final
String
META_DATA
=
"metaData"
;
public
static
final
String
TABLE_NAME
=
"tableName"
;
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
ExecuteSQLExecutor
.
class
);
@Override
public
Shape
shape
()
{
Shape
shape
=
new
Shape
();
//web界面上显示的图标
shape
.
setImage
(
"data:image/png;base64,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"
);
//拖放至容器里时默认的节点名称
shape
.
setLabel
(
"DataEliminate"
);
//模板文件名
shape
.
setName
(
"DataEliminate"
);
//鼠标移动至图标上显示的名称
shape
.
setTitle
(
"数据剔除"
);
return
shape
;
}
@Override
public
String
supportShape
()
{
return
"DataEliminate"
;
}
@Override
public
void
execute
(
SpiderNode
node
,
SpiderContext
context
,
Map
<
String
,
Object
>
variables
)
{
}
@Override
public
boolean
allowExecuteNext
(
SpiderNode
node
,
SpiderContext
context
,
Map
<
String
,
Object
>
variables
)
{
return
false
;
}
@Override
public
boolean
isThread
()
{
return
false
;
}
}
spider-flow-core/src/main/java/com/zq/spiderflow/core/executor/shape/GroupingMetaExecutor.java
0 → 100644
View file @
ca96da48
package
com
.
zq
.
spiderflow
.
core
.
executor
.
shape
;
import
com.zq.spiderflow.context.SpiderContext
;
import
com.zq.spiderflow.executor.ShapeExecutor
;
import
com.zq.spiderflow.model.Shape
;
import
com.zq.spiderflow.model.SpiderNode
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.stereotype.Component
;
import
java.util.Map
;
/**
* @author Administrator
*/
@Component
public
class
GroupingMetaExecutor
implements
ShapeExecutor
{
public
static
final
String
DATASOURCE_ID
=
"datasourceId"
;
public
static
final
String
META_DATA
=
"metaData"
;
public
static
final
String
TABLE_NAME
=
"tableName"
;
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
ExecuteSQLExecutor
.
class
);
@Override
public
Shape
shape
()
{
Shape
shape
=
new
Shape
();
//web界面上显示的图标
shape
.
setImage
(
"data:image/png;base64,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"
);
//拖放至容器里时默认的节点名称
shape
.
setLabel
(
"GroupingMeta"
);
//模板文件名
shape
.
setName
(
"GroupingMeta"
);
//鼠标移动至图标上显示的名称
shape
.
setTitle
(
"字段分组"
);
return
shape
;
}
@Override
public
String
supportShape
()
{
return
"GroupingMeta"
;
}
@Override
public
void
execute
(
SpiderNode
node
,
SpiderContext
context
,
Map
<
String
,
Object
>
variables
)
{
}
@Override
public
boolean
allowExecuteNext
(
SpiderNode
node
,
SpiderContext
context
,
Map
<
String
,
Object
>
variables
)
{
return
false
;
}
@Override
public
boolean
isThread
()
{
return
false
;
}
}
spider-flow-core/src/main/java/com/zq/spiderflow/core/executor/shape/TableLeftJoinExecutor.java
0 → 100644
View file @
ca96da48
package
com
.
zq
.
spiderflow
.
core
.
executor
.
shape
;
import
com.zq.spiderflow.context.SpiderContext
;
import
com.zq.spiderflow.executor.ShapeExecutor
;
import
com.zq.spiderflow.model.Shape
;
import
com.zq.spiderflow.model.SpiderNode
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.stereotype.Component
;
import
java.util.Map
;
/**
* @author Administrator
*/
@Component
public
class
TableLeftJoinExecutor
implements
ShapeExecutor
{
public
static
final
String
DATASOURCE_ID
=
"datasourceId"
;
public
static
final
String
META_DATA
=
"metaData"
;
public
static
final
String
TABLE_NAME
=
"tableName"
;
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
ExecuteSQLExecutor
.
class
);
@Override
public
Shape
shape
()
{
Shape
shape
=
new
Shape
();
//web界面上显示的图标
shape
.
setImage
(
"data:image/png;base64,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"
);
//拖放至容器里时默认的节点名称
shape
.
setLabel
(
"TableLeftJoin"
);
//模板文件名
shape
.
setName
(
"TableLeftJoin"
);
//鼠标移动至图标上显示的名称
shape
.
setTitle
(
"表关联"
);
return
shape
;
}
@Override
public
String
supportShape
()
{
return
"TableLeftJoin"
;
}
@Override
public
void
execute
(
SpiderNode
node
,
SpiderContext
context
,
Map
<
String
,
Object
>
variables
)
{
}
@Override
public
boolean
allowExecuteNext
(
SpiderNode
node
,
SpiderContext
context
,
Map
<
String
,
Object
>
variables
)
{
return
false
;
}
@Override
public
boolean
isThread
()
{
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