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
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
367 additions
and
3 deletions
+367
-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
+0
-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
This diff is collapsed.
Click to expand it.
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