Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
emport-api
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
刘泽志
emport-api
Commits
4b6184fa
Commit
4b6184fa
authored
Feb 17, 2023
by
刘泽志
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
字段元/同步其它年份字典功能
parent
6241d020
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
506 additions
and
38 deletions
+506
-38
DataFieldController.java
...yf/his/web/controller/dataImport/DataFieldController.java
+107
-9
DataImportUtils.java
...ain/java/com/tbyf/his/web/dataImport/DataImportUtils.java
+86
-0
QueryMetaFieldParam.java
.../his/web/dataImport/domain/param/QueryMetaFieldParam.java
+29
-0
DataFieldVO.java
...va/com/tbyf/his/web/dataImport/domain/vo/DataFieldVO.java
+47
-0
DataField.java
...in/java/com/tbyf/his/web/dataImport/entity/DataField.java
+20
-28
MetaField.java
...in/java/com/tbyf/his/web/dataImport/entity/MetaField.java
+3
-1
DataFieldMapper.java
...a/com/tbyf/his/web/dataImport/mapper/DataFieldMapper.java
+23
-0
MetaFieldMapper.java
...a/com/tbyf/his/web/dataImport/mapper/MetaFieldMapper.java
+12
-0
DataFieldService.java
...com/tbyf/his/web/dataImport/service/DataFieldService.java
+31
-0
MetaFieldService.java
...com/tbyf/his/web/dataImport/service/MetaFieldService.java
+12
-0
DataFieldServiceImpl.java
...his/web/dataImport/service/impl/DataFieldServiceImpl.java
+64
-0
MetaFieldServiceImpl.java
...his/web/dataImport/service/impl/MetaFieldServiceImpl.java
+20
-0
DataFieldMapper.xml
admin-api/src/main/resources/mapper/DataFieldMapper.xml
+52
-0
No files found.
admin-api/src/main/java/com/tbyf/his/web/controller/dataImport/DataFieldController.java
View file @
4b6184fa
...
...
@@ -6,18 +6,19 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import
com.tbyf.his.common.annotation.IgnoreWebSecurity
;
import
com.tbyf.his.common.core.domain.AjaxResult
;
import
com.tbyf.his.common.core.page.TableDataInfo
;
import
com.tbyf.his.common.core.text.StrFormatter
;
import
com.tbyf.his.common.utils.StringUtils
;
import
com.tbyf.his.common.utils.bean.BeanUtils
;
import
com.tbyf.his.web.dataImport.core.DiConfig
;
import
com.tbyf.his.web.dataImport.domain.param.AddFieldParam
;
import
com.tbyf.his.web.dataImport.domain.param.QueryFieldParam
;
import
com.tbyf.his.web.dataImport.domain.param.QueryMetaFieldParam
;
import
com.tbyf.his.web.dataImport.domain.param.UpdateFieldParam
;
import
com.tbyf.his.web.dataImport.entity.BindRule
;
import
com.tbyf.his.web.dataImport.entity.DataField
;
import
com.tbyf.his.web.dataImport.entity.ExcelData
;
import
com.tbyf.his.web.dataImport.service.BindRuleService
;
import
com.tbyf.his.web.dataImport.service.DataFieldService
;
import
com.tbyf.his.web.dataImport.service.ExcelDataService
;
import
com.tbyf.his.web.dataImport.entity.MetaField
;
import
com.tbyf.his.web.dataImport.service.*
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
...
...
@@ -26,6 +27,7 @@ import org.apache.poi.ss.usermodel.Sheet;
import
org.apache.poi.ss.usermodel.Workbook
;
import
org.apache.poi.ss.usermodel.WorkbookFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.jdbc.core.JdbcTemplate
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
...
...
@@ -33,8 +35,7 @@ import org.springframework.web.bind.annotation.*;
import
java.io.ByteArrayInputStream
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.*
;
import
java.util.stream.Collectors
;
/**
...
...
@@ -56,19 +57,25 @@ public class DataFieldController {
@Autowired
private
ExcelDataService
excelDataService
;
@Autowired
private
MetaFieldService
metaFieldService
;
@Autowired
private
JdbcTemplate
jdbcTemplate
;
@IgnoreWebSecurity
@GetMapping
(
""
)
@ApiOperation
(
"字段查询"
)
public
TableDataInfo
queryField
(
@Validated
QueryFieldParam
param
)
{
final
Page
<
DataField
>
page
=
Page
.
of
(
param
.
getPageNum
(),
param
.
getPageSize
());
/*
final Page<DataField> page = Page.of(param.getPageNum(), param.getPageSize());
final LambdaQueryWrapper<DataField> queryWrapper = Wrappers.lambdaQuery(DataField.class);
queryWrapper.eq(StringUtils.isNotBlank(param.getTemplateId()), DataField::getTemplateId, param.getTemplateId())
.like(StringUtils.isNotBlank(param.getCode()), DataField::getCode, param.getCode())
.like(StringUtils.isNotBlank(param.getTitle()), DataField::getTitle, param.getTitle())
.like(StringUtils.isNotBlank(param.getCoordinate()), DataField::getCoordinate, param.getCoordinate())
.like(StringUtils.isNotBlank(param.getField()), DataField::getField, param.getField());
final
Page
<
DataField
>
templatePage
=
dataFieldService
.
page
(
page
,
queryWrapper
);
return
param
.
convert
(
templatePage
);
final Page<DataField> templatePage = dataFieldService.page(page, queryWrapper);
*/
return
param
.
convert
(
dataFieldService
.
queryField
(
param
)
);
}
@IgnoreWebSecurity
...
...
@@ -105,6 +112,9 @@ public class DataFieldController {
@ApiOperation
(
"根据基础模板重置字段"
)
public
AjaxResult
resetField
(
@RequestParam
String
excelId
)
{
final
ExcelData
excelData
=
excelDataService
.
getById
(
excelId
);
// 获取待匹配的字段
final
List
<
MetaField
>
metaFields
=
metaFieldService
.
list
();
List
<
DataField
>
fieldMatchList
=
dataFieldService
.
listFieldMatchList
(
excelData
.
getTemplateId
());
final
LambdaQueryWrapper
<
DataField
>
wrapper
=
Wrappers
.
lambdaQuery
(
DataField
.
class
).
eq
(
DataField:
:
getTemplateId
,
excelData
.
getTemplateId
());
final
List
<
DataField
>
list
=
dataFieldService
.
list
(
wrapper
);
if
(!
CollectionUtils
.
isEmpty
(
list
))
{
...
...
@@ -135,7 +145,8 @@ public class DataFieldController {
// TODO 这里坐标修改为i+1是因为excel文件中展示的第一行号是1,符合直觉
dataField
.
setCoordinate
(
"F,"
+
(
i
+
1
));
dataField
.
setSort
(
i
+
1
);
dataField
.
createField
();
// 字段绑定需要进行模糊匹配
dataFieldService
.
fieldMatch
(
metaFields
,
dataField
,
fieldMatchList
);
fieldList
.
add
(
dataField
);
}
dataFieldService
.
saveBatch
(
fieldList
);
...
...
@@ -145,4 +156,91 @@ public class DataFieldController {
return
AjaxResult
.
success
();
}
@IgnoreWebSecurity
@GetMapping
(
"/meta"
)
@ApiOperation
(
"元字段查询"
)
public
TableDataInfo
queryField
(
@Validated
QueryMetaFieldParam
param
)
{
final
Page
<
MetaField
>
page
=
Page
.
of
(
param
.
getPageNum
(),
param
.
getPageSize
());
final
LambdaQueryWrapper
<
MetaField
>
queryWrapper
=
Wrappers
.
lambdaQuery
(
MetaField
.
class
);
queryWrapper
.
like
(
StringUtils
.
isNotBlank
(
param
.
getFieldName
()),
MetaField:
:
getFieldName
,
param
.
getFieldName
())
.
like
(
StringUtils
.
isNotBlank
(
param
.
getFieldType
()),
MetaField:
:
getFieldType
,
param
.
getFieldType
())
.
like
(
StringUtils
.
isNotBlank
(
param
.
getFieldComment
()),
MetaField:
:
getFieldComment
,
param
.
getFieldComment
());
final
Page
<
MetaField
>
templatePage
=
metaFieldService
.
page
(
page
,
queryWrapper
);
return
param
.
convert
(
templatePage
);
}
@IgnoreWebSecurity
@PostMapping
(
"/meta"
)
@ApiOperation
(
"元字段新增"
)
public
AjaxResult
addMetaField
(
@RequestBody
@Validated
MetaField
field
)
{
metaFieldService
.
save
(
field
);
return
AjaxResult
.
success
();
}
@IgnoreWebSecurity
@PostMapping
(
"/meta/update"
)
@ApiOperation
(
"修改元字段"
)
public
AjaxResult
updateMeatField
(
@RequestBody
@Validated
MetaField
field
)
{
metaFieldService
.
updateById
(
field
);
return
AjaxResult
.
success
();
}
@IgnoreWebSecurity
@GetMapping
(
"/meta/delete"
)
@ApiOperation
(
"删除元字段"
)
public
AjaxResult
deleteMetaField
(
@RequestParam
String
fieldId
)
{
metaFieldService
.
removeById
(
fieldId
);
return
AjaxResult
.
success
();
}
@IgnoreWebSecurity
@GetMapping
(
"/meta/dict"
)
@ApiOperation
(
"查询元字段字典"
)
public
AjaxResult
getMetaFieldDict
()
{
return
AjaxResult
.
success
(
metaFieldService
.
list
());
}
@IgnoreWebSecurity
//@GetMapping("/testQuick")
//@ApiOperation("查询原来模板的字段")
public
AjaxResult
testQuick
()
{
try
{
DataSourceService
.
switchDb
(
"datacenter"
);
final
List
<
String
>
list
=
Arrays
.
asList
(
"T0801_SERVERCENTER"
,
"T0801_HEALTHCENTER"
,
"T0801_SERSTATION"
,
"T0801_CLINIC"
,
"T0801_TCMHOSP"
);
String
sql
=
"SELECT UCO.TABLE_NAME ,UCO.COMMENTS, UCO.COLUMN_NAME,UTO.DATA_TYPE,UTO.DATA_LENGTH,UTO.DATA_PRECISION,UTO.DATA_SCALE FROM\n"
+
"USER_COL_COMMENTS UCO LEFT JOIN USER_TAB_COLUMNS UTO ON UCO.COLUMN_NAME = UTO.COLUMN_NAME\n"
+
"WHERE UCO.TABLE_NAME = UPPER('{}') AND UTO.TABLE_NAME = UPPER('{}')"
;
List
<
MetaField
>
metaFieldList
=
new
ArrayList
<>();
list
.
forEach
(
item
->
{
final
List
<
Map
<
String
,
Object
>>
mapList
=
jdbcTemplate
.
queryForList
(
StrFormatter
.
format
(
sql
,
item
,
item
));
mapList
.
forEach
(
v
->
{
final
MetaField
metaField
=
new
MetaField
();
metaField
.
setRemarks
(
String
.
valueOf
(
v
.
get
(
"TABLE_NAME"
)));
metaField
.
setFieldName
(
String
.
valueOf
(
v
.
get
(
"COLUMN_NAME"
)));
String
fieldType
=
String
.
valueOf
(
v
.
get
(
"DATA_TYPE"
));
if
(
Objects
.
isNull
(
v
.
get
(
"DATA_PRECISION"
)))
{
metaField
.
setFieldType
(
fieldType
+
"("
+
v
.
get
(
"DATA_LENGTH"
)
+
")"
);
}
else
{
fieldType
=
fieldType
+
"("
+
v
.
get
(
"DATA_PRECISION"
)
+
(
Objects
.
isNull
(
v
.
get
(
"DATA_SCALE"
))
?
")"
:
","
+
v
.
get
(
"DATA_SCALE"
)
+
")"
);
metaField
.
setFieldType
(
fieldType
);
}
metaField
.
setFieldComment
(
StringUtils
.
trim
((
String
)
v
.
get
(
"COMMENTS"
)));
metaFieldList
.
add
(
metaField
);
});
});
List
<
MetaField
>
fieldList
=
metaFieldList
.
stream
()
.
filter
(
DataImportController
.
distinctByKey
(
MetaField:
:
getFieldName
))
.
distinct
().
collect
(
Collectors
.
toList
());
DataSourceService
.
switchDefault
();
metaFieldService
.
saveBatch
(
fieldList
);
}
finally
{
DataSourceService
.
switchDefault
();
}
return
AjaxResult
.
success
();
}
}
admin-api/src/main/java/com/tbyf/his/web/dataImport/DataImportUtils.java
0 → 100644
View file @
4b6184fa
package
com
.
tbyf
.
his
.
web
.
dataImport
;
/**
* @author lzz
* @date 2023/2/17 16:01
*/
public
class
DataImportUtils
{
/**
* 比较两个字符串的相识度
* 核心算法:用一个二维数组记录每个字符串是否相同,如果相同记为0,不相同记为1,每行每列相同个数累加
* 则数组最后一个数为不相同的总数,从而判断这两个字符的相识度
*
* @param str
* @param target
* @return
*/
private
static
int
compare
(
String
str
,
String
target
)
{
int
d
[][];
// 矩阵
int
n
=
str
.
length
();
int
m
=
target
.
length
();
int
i
;
// 遍历str的
int
j
;
// 遍历target的
char
ch1
;
// str的
char
ch2
;
// target的
int
temp
;
// 记录相同字符,在某个矩阵位置值的增量,不是0就是1
if
(
n
==
0
)
{
return
m
;
}
if
(
m
==
0
)
{
return
n
;
}
d
=
new
int
[
n
+
1
][
m
+
1
];
// 初始化第一列
for
(
i
=
0
;
i
<=
n
;
i
++)
{
d
[
i
][
0
]
=
i
;
}
// 初始化第一行
for
(
j
=
0
;
j
<=
m
;
j
++)
{
d
[
0
][
j
]
=
j
;
}
for
(
i
=
1
;
i
<=
n
;
i
++)
{
// 遍历str
ch1
=
str
.
charAt
(
i
-
1
);
// 去匹配target
for
(
j
=
1
;
j
<=
m
;
j
++)
{
ch2
=
target
.
charAt
(
j
-
1
);
if
(
ch1
==
ch2
||
ch1
==
ch2
+
32
||
ch1
+
32
==
ch2
)
{
temp
=
0
;
}
else
{
temp
=
1
;
}
// 左边+1,上边+1, 左上角+temp取最小
d
[
i
][
j
]
=
min
(
d
[
i
-
1
][
j
]
+
1
,
d
[
i
][
j
-
1
]
+
1
,
d
[
i
-
1
][
j
-
1
]
+
temp
);
}
}
return
d
[
n
][
m
];
}
/**
* 获取最小的值
*/
private
static
int
min
(
int
one
,
int
two
,
int
three
)
{
return
(
one
=
one
<
two
?
one
:
two
)
<
three
?
one
:
three
;
}
/**
* 获取两字符串的相似度
*/
public
static
float
getSimilarityRatio
(
String
str
,
String
target
)
{
int
max
=
Math
.
max
(
str
.
length
(),
target
.
length
());
return
1
-
(
float
)
compare
(
str
,
target
)
/
max
;
}
public
static
void
main
(
String
[]
args
)
{
System
.
out
.
println
(
getSimilarityRatio
(
"123"
,
"21321"
));
System
.
out
.
println
(
getSimilarityRatio
(
"123"
,
"123"
));
System
.
out
.
println
(
getSimilarityRatio
(
"中医院"
,
"省中医院"
));
System
.
out
.
println
(
getSimilarityRatio
(
"name"
,
"age"
));
System
.
out
.
println
(
getSimilarityRatio
(
"指标"
,
"指标%"
));
}
}
admin-api/src/main/java/com/tbyf/his/web/dataImport/domain/param/QueryMetaFieldParam.java
0 → 100644
View file @
4b6184fa
package
com
.
tbyf
.
his
.
web
.
dataImport
.
domain
.
param
;
import
com.tbyf.his.web.dataImport.domain.ParamMp
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.experimental.Accessors
;
/**
* @author lzz
* @date 2023/1/10 17:01
*/
@EqualsAndHashCode
(
callSuper
=
true
)
@Data
@Accessors
(
chain
=
true
)
@ApiModel
(
value
=
"元字段查询参数"
,
description
=
"元字段查询参数"
)
public
class
QueryMetaFieldParam
extends
ParamMp
{
@ApiModelProperty
(
value
=
"字段名 ORG_CODE"
)
private
String
fieldName
;
@ApiModelProperty
(
value
=
"字段类型 VARCHAR(32) NUMBER"
)
private
String
fieldType
;
@ApiModelProperty
(
value
=
"字段注释/指标名称"
)
private
String
fieldComment
;
}
admin-api/src/main/java/com/tbyf/his/web/dataImport/domain/vo/DataFieldVO.java
0 → 100644
View file @
4b6184fa
package
com
.
tbyf
.
his
.
web
.
dataImport
.
domain
.
vo
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.io.Serializable
;
/**
* @author lzz
* @date 2023/1/10 15:36
*/
@Data
@Accessors
(
chain
=
true
)
@ApiModel
(
value
=
"数据字段表"
,
description
=
"数据字段表"
)
public
class
DataFieldVO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
value
=
"字段ID"
)
private
String
id
;
@ApiModelProperty
(
value
=
"模板ID"
)
private
String
templateId
;
@ApiModelProperty
(
value
=
"代码"
)
private
String
code
;
@ApiModelProperty
(
value
=
"指标名称"
)
private
String
title
;
@ApiModelProperty
(
value
=
"计量单位"
)
private
String
unit
;
@ApiModelProperty
(
value
=
"数据起始坐标,例如 C,4"
)
private
String
coordinate
;
@ApiModelProperty
(
value
=
"排序字段"
)
private
Integer
sort
;
@ApiModelProperty
(
value
=
"数据库字段名"
)
private
String
field
;
private
String
fieldName
;
}
admin-api/src/main/java/com/tbyf/his/web/dataImport/entity/DataField.java
View file @
4b6184fa
...
...
@@ -5,16 +5,11 @@ import com.baomidou.mybatisplus.annotation.TableField;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.tbyf.his.common.utils.StringUtils
;
import
com.tbyf.his.web.dataImport.DataImportUtils
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.SneakyThrows
;
import
lombok.experimental.Accessors
;
import
net.sourceforge.pinyin4j.PinyinHelper
;
import
net.sourceforge.pinyin4j.format.HanyuPinyinCaseType
;
import
net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat
;
import
net.sourceforge.pinyin4j.format.HanyuPinyinToneType
;
import
net.sourceforge.pinyin4j.format.HanyuPinyinVCharType
;
import
java.io.Serializable
;
import
java.util.stream.Collectors
;
...
...
@@ -64,29 +59,26 @@ public class DataField implements Serializable {
@TableField
(
"field"
)
private
String
field
;
@SneakyThrows
public
void
createField
()
{
if
(
StringUtils
.
equalsAny
(
title
,
"统一社会信用代码"
,
"统一社会信用代码:"
,
"统一社会信用代码:"
))
{
field
=
"UNIFIED_CODE"
;
}
else
if
(
StringUtils
.
equalsAny
(
title
,
"组织机构代码"
,
"组织机构代码:"
,
"组织机构代码:"
))
{
field
=
"ORG_CODE"
;
}
else
if
(
StringUtils
.
equalsAny
(
title
,
"机构名称"
,
"机构名称:"
,
"机构名称:"
))
{
field
=
"ORG_NAME"
;
}
else
if
(
StringUtils
.
equalsAny
(
title
,
"行政区划代码"
,
"行政区划代码:"
,
"行政区划代码:"
))
{
field
=
"REGION_CODE"
;
}
else
{
final
HanyuPinyinOutputFormat
format
=
new
HanyuPinyinOutputFormat
();
format
.
setCaseType
(
HanyuPinyinCaseType
.
UPPERCASE
);
format
.
setVCharType
(
HanyuPinyinVCharType
.
WITH_V
);
format
.
setToneType
(
HanyuPinyinToneType
.
WITHOUT_TONE
);
for
(
int
i
=
0
;
i
<
title
.
length
();
i
++)
{
final
String
[]
array
=
PinyinHelper
.
toHanyuPinyinStringArray
(
title
.
charAt
(
i
),
format
);
if
(
array
!=
null
&&
array
.
length
>
0
)
{
field
=
array
[
0
].
charAt
(
0
)
+
""
+
sort
;
break
;
}
}
transient
private
float
ratio
;
public
float
getSimilarityRatio
(
DataField
dataField
)
{
float
result
=
0
;
if
(
StringUtils
.
isNotBlank
(
this
.
getCode
())
&&
StringUtils
.
isNotBlank
(
dataField
.
getCode
()))
{
result
+=
DataImportUtils
.
getSimilarityRatio
(
this
.
getCode
(),
dataField
.
getCode
());
}
else
if
(
StringUtils
.
equals
(
this
.
getCode
(),
dataField
.
getCode
()))
{
result
+=
1
;
}
if
(
StringUtils
.
isNotBlank
(
this
.
getTitle
())
&&
StringUtils
.
isNotBlank
(
dataField
.
getTitle
()))
{
result
+=
DataImportUtils
.
getSimilarityRatio
(
this
.
getTitle
(),
dataField
.
getTitle
());
}
else
if
(
StringUtils
.
equals
(
this
.
getTitle
(),
dataField
.
getTitle
()))
{
result
+=
1
;
}
if
(
StringUtils
.
isNotBlank
(
this
.
getUnit
())
&&
StringUtils
.
isNotBlank
(
dataField
.
getUnit
()))
{
result
+=
DataImportUtils
.
getSimilarityRatio
(
this
.
getUnit
(),
dataField
.
getUnit
());
}
else
if
(
StringUtils
.
equals
(
this
.
getUnit
(),
dataField
.
getUnit
()))
{
result
+=
1
;
}
return
result
;
}
public
String
createComment
()
{
...
...
admin-api/src/main/java/com/tbyf/his/web/dataImport/entity/MetaField.java
View file @
4b6184fa
...
...
@@ -20,7 +20,7 @@ import java.io.Serializable;
@Data
@Accessors
(
chain
=
true
)
@TableName
(
value
=
"meta_
data
"
,
autoResultMap
=
true
)
@TableName
(
value
=
"meta_
field
"
,
autoResultMap
=
true
)
@ApiModel
(
value
=
"元字段信息"
,
description
=
"元字段信息"
)
public
class
MetaField
implements
Serializable
{
...
...
@@ -46,4 +46,6 @@ public class MetaField implements Serializable {
@TableField
(
"remarks"
)
private
String
remarks
;
transient
private
float
ratio
;
}
admin-api/src/main/java/com/tbyf/his/web/dataImport/mapper/DataFieldMapper.java
View file @
4b6184fa
package
com
.
tbyf
.
his
.
web
.
dataImport
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.tbyf.his.web.dataImport.domain.param.QueryFieldParam
;
import
com.tbyf.his.web.dataImport.domain.vo.DataFieldVO
;
import
com.tbyf.his.web.dataImport.entity.DataField
;
import
org.apache.ibatis.annotations.Param
;
import
java.util.List
;
/**
* @author lzz
...
...
@@ -9,4 +15,21 @@ import com.tbyf.his.web.dataImport.entity.DataField;
*/
public
interface
DataFieldMapper
extends
BaseMapper
<
DataField
>
{
/**
* 查询字段
*
* @param page
* @param param
* @return
*/
IPage
<
DataFieldVO
>
queryField
(
@Param
(
"page"
)
IPage
<
DataFieldVO
>
page
,
@Param
(
"param"
)
QueryFieldParam
param
);
/**
* 查询待匹配的其它年份的字段
*
* @param templateId
* @return
*/
List
<
DataField
>
listFieldMatchList
(
String
templateId
);
}
admin-api/src/main/java/com/tbyf/his/web/dataImport/mapper/MetaFieldMapper.java
0 → 100644
View file @
4b6184fa
package
com
.
tbyf
.
his
.
web
.
dataImport
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.tbyf.his.web.dataImport.entity.MetaField
;
/**
* @author lzz
* @date 2023/2/7 11:22
*/
public
interface
MetaFieldMapper
extends
BaseMapper
<
MetaField
>
{
}
admin-api/src/main/java/com/tbyf/his/web/dataImport/service/DataFieldService.java
View file @
4b6184fa
package
com
.
tbyf
.
his
.
web
.
dataImport
.
service
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.tbyf.his.web.dataImport.domain.param.QueryFieldParam
;
import
com.tbyf.his.web.dataImport.domain.vo.DataFieldVO
;
import
com.tbyf.his.web.dataImport.entity.DataField
;
import
com.tbyf.his.web.dataImport.entity.MetaField
;
import
java.util.List
;
/**
* @author lzz
...
...
@@ -9,4 +15,29 @@ import com.tbyf.his.web.dataImport.entity.DataField;
*/
public
interface
DataFieldService
extends
IService
<
DataField
>
{
/**
* 字段列表查询
*
* @param param
* @return
*/
Page
<
DataFieldVO
>
queryField
(
QueryFieldParam
param
);
/**
* 字段匹配
*
* @param list
* @param field
* @param fieldMatchList
*/
void
fieldMatch
(
List
<
MetaField
>
list
,
DataField
field
,
List
<
DataField
>
fieldMatchList
);
/**
* 获取待匹配的字段
*
* @return
*/
List
<
DataField
>
listFieldMatchList
(
String
templateId
);
}
admin-api/src/main/java/com/tbyf/his/web/dataImport/service/MetaFieldService.java
0 → 100644
View file @
4b6184fa
package
com
.
tbyf
.
his
.
web
.
dataImport
.
service
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.tbyf.his.web.dataImport.entity.MetaField
;
/**
* @author lzz
* @date 2023/2/7 11:23
*/
public
interface
MetaFieldService
extends
IService
<
MetaField
>
{
}
admin-api/src/main/java/com/tbyf/his/web/dataImport/service/impl/DataFieldServiceImpl.java
View file @
4b6184fa
package
com
.
tbyf
.
his
.
web
.
dataImport
.
service
.
impl
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.tbyf.his.common.annotation.DataSource
;
import
com.tbyf.his.common.enums.DataSourceType
;
import
com.tbyf.his.common.utils.StringUtils
;
import
com.tbyf.his.web.dataImport.DataImportUtils
;
import
com.tbyf.his.web.dataImport.domain.param.QueryFieldParam
;
import
com.tbyf.his.web.dataImport.domain.vo.DataFieldVO
;
import
com.tbyf.his.web.dataImport.entity.DataField
;
import
com.tbyf.his.web.dataImport.entity.MetaField
;
import
com.tbyf.his.web.dataImport.mapper.DataFieldMapper
;
import
com.tbyf.his.web.dataImport.service.DataFieldService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
import
java.util.Comparator
;
import
java.util.List
;
import
java.util.Optional
;
/**
* @author lzz
...
...
@@ -17,4 +29,56 @@ import org.springframework.stereotype.Service;
@Service
@DataSource
(
DataSourceType
.
MASTER
)
public
class
DataFieldServiceImpl
extends
ServiceImpl
<
DataFieldMapper
,
DataField
>
implements
DataFieldService
{
@Autowired
private
DataFieldMapper
dataFieldMapper
;
@Override
public
Page
<
DataFieldVO
>
queryField
(
QueryFieldParam
param
)
{
final
Page
<
DataFieldVO
>
page
=
Page
.
of
(
param
.
getPageNum
(),
param
.
getPageSize
());
return
(
Page
<
DataFieldVO
>)
dataFieldMapper
.
queryField
(
page
,
param
);
}
@Override
public
void
fieldMatch
(
List
<
MetaField
>
list
,
DataField
field
,
List
<
DataField
>
fieldMatchList
)
{
// 先查询元字段里面有没有相互匹配的
final
Optional
<
MetaField
>
first
=
list
.
stream
().
filter
(
item
->
{
if
(
StringUtils
.
isNotBlank
(
item
.
getFieldComment
()))
{
return
field
.
getTitle
().
contains
(
item
.
getFieldComment
());
}
return
false
;
}).
findFirst
();
if
(
first
.
isPresent
())
{
field
.
setField
(
first
.
get
().
getId
());
return
;
}
if
(!
CollectionUtils
.
isEmpty
(
fieldMatchList
))
{
fieldMatchList
.
forEach
(
item
->
{
item
.
setRatio
(
item
.
getSimilarityRatio
(
field
));
});
final
Optional
<
DataField
>
max
=
fieldMatchList
.
stream
().
max
(
Comparator
.
comparing
(
DataField:
:
getRatio
));
if
(
max
.
isPresent
())
{
if
(
max
.
get
().
getRatio
()
>
2.2
)
{
field
.
setField
(
max
.
get
().
getId
());
return
;
}
}
}
list
.
forEach
(
item
->
{
if
(
StringUtils
.
isNotBlank
(
field
.
getTitle
())
&&
StringUtils
.
isNotBlank
(
item
.
getFieldComment
()))
{
item
.
setRatio
(
DataImportUtils
.
getSimilarityRatio
(
field
.
getTitle
(),
item
.
getFieldComment
()));
}
});
final
Optional
<
MetaField
>
max
=
list
.
stream
().
max
(
Comparator
.
comparing
(
MetaField:
:
getRatio
));
if
(
max
.
isPresent
())
{
if
(
max
.
get
().
getRatio
()
>
0.5
)
{
field
.
setField
(
max
.
get
().
getId
());
}
}
}
@Override
public
List
<
DataField
>
listFieldMatchList
(
String
templateId
)
{
return
dataFieldMapper
.
listFieldMatchList
(
templateId
);
}
}
admin-api/src/main/java/com/tbyf/his/web/dataImport/service/impl/MetaFieldServiceImpl.java
0 → 100644
View file @
4b6184fa
package
com
.
tbyf
.
his
.
web
.
dataImport
.
service
.
impl
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.tbyf.his.common.annotation.DataSource
;
import
com.tbyf.his.common.enums.DataSourceType
;
import
com.tbyf.his.web.dataImport.entity.MetaField
;
import
com.tbyf.his.web.dataImport.mapper.MetaFieldMapper
;
import
com.tbyf.his.web.dataImport.service.MetaFieldService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Service
;
/**
* @author lzz
* @date 2023/2/7 11:24
*/
@Slf4j
@Service
@DataSource
(
DataSourceType
.
MASTER
)
public
class
MetaFieldServiceImpl
extends
ServiceImpl
<
MetaFieldMapper
,
MetaField
>
implements
MetaFieldService
{
}
admin-api/src/main/resources/mapper/DataFieldMapper.xml
0 → 100644
View file @
4b6184fa
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.tbyf.his.web.dataImport.mapper.DataFieldMapper"
>
<select
id=
"queryField"
resultType=
"com.tbyf.his.web.dataImport.domain.vo.DataFieldVO"
>
select df.id,
df.template_id,
df.code,
df.title,
df.unit,
df.coordinate,
df.sort,
df.field,
mf.field_name as fieldName
from data_field df
left join meta_field mf on df.field = mf.id
<where>
<if
test=
"param.templateId != null and param.templateId != ''"
>
and df.template_id = #{param.templateId}
</if>
<if
test=
"param.code != null and param.code != ''"
>
and df.code like concat('%', #{param.code}, '%')
</if>
<if
test=
"param.title != null and param.title != ''"
>
and df.title like concat('%', #{param.title}, '%')
</if>
<if
test=
"param.coordinate != null and param.coordinate != ''"
>
and df.coordinate like concat('%', #{param.coordinate}, '%')
</if>
<if
test=
"param.field != null and param.field != ''"
>
and df.field like concat('%', #{param.field}, '%')
</if>
</where>
</select>
<select
id=
"listFieldMatchList"
resultType=
"com.tbyf.his.web.dataImport.entity.DataField"
>
SELECT df.id,
df.template_id,
df.coordinate,
df.code,
df.title,
df.unit,
df.sort,
df.field
FROM data_template dt
LEFT JOIN data_field df ON dt.id = df.template_id
WHERE dt.org_name = (SELECT org_name FROM data_template WHERE id = #{templateId})
AND dt.id != #{templateId}
AND df.field is not null
</select>
</mapper>
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