Commit 4b6184fa by 刘泽志

字段元/同步其它年份字典功能

parent 6241d020
......@@ -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();
}
}
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("指标", "指标%"));
}
}
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;
}
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;
}
......@@ -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() {
......
......@@ -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;
}
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);
}
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> {
}
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);
}
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> {
}
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);
}
}
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 {
}
<?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>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment