Commit eac8f075 by guoxw

物理表异常字段查询和同步

parent 9893840e
......@@ -9,8 +9,11 @@ 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.enums.DataSourceType;
import com.tbyf.his.common.utils.StringUtils;
import com.tbyf.his.common.utils.bean.BeanUtils;
import com.tbyf.his.framework.datasource.DataSourceUtil;
import com.tbyf.his.system.service.ISysDatasourceService;
import com.tbyf.his.web.dataImport.DataImportUtils;
import com.tbyf.his.web.dataImport.core.DiConfig;
import com.tbyf.his.web.dataImport.domain.param.AddFieldParam;
......@@ -19,6 +22,7 @@ import com.tbyf.his.web.dataImport.domain.param.QueryMetaFieldParam;
import com.tbyf.his.web.dataImport.domain.param.UpdateFieldParam;
import com.tbyf.his.web.dataImport.domain.vo.CreateFieldVO;
import com.tbyf.his.web.dataImport.domain.vo.FieldDbDiffVO;
import com.tbyf.his.web.dataImport.domain.vo.FieldErrorVo;
import com.tbyf.his.web.dataImport.entity.*;
import com.tbyf.his.web.dataImport.mapper.MetaFieldMapper;
import com.tbyf.his.web.dataImport.service.*;
......@@ -383,18 +387,18 @@ public class DataFieldController {
// 查询绑定了此字段的所有模板
LambdaQueryWrapper<DataField> wrapper = Wrappers.lambdaQuery(DataField.class).eq(DataField::getField, metaField.getId());
List<DataField> fieldList = dataFieldService.list(wrapper);
if (CollectionUtils.isEmpty(fieldList)){
if (CollectionUtils.isEmpty(fieldList)) {
return AjaxResult.success(Collections.emptyList());
}
LambdaQueryWrapper<DataTemplate> queryWrapper = Wrappers.lambdaQuery(DataTemplate.class).in(DataTemplate::getId, fieldList.stream().map(DataField::getTemplateId).toArray());
List<DataTemplate> templateList = dataTemplateService.list(queryWrapper);
if (CollectionUtils.isEmpty(fieldList)){
if (CollectionUtils.isEmpty(fieldList)) {
return AjaxResult.success(Collections.emptyList());
}
List<FieldDbDiffVO> list = new ArrayList<>();
templateList.forEach(item->{
templateList.forEach(item -> {
Optional<FieldDbDiffVO> first = list.stream().filter(l -> StringUtils.equalsIgnoreCase(item.getDataSourceId(), item.getTableName())).findFirst();
if (!first.isPresent()){
if (!first.isPresent()) {
FieldDbDiffVO vo = new FieldDbDiffVO();
vo.setDatasourceId(item.getDataSourceId());
vo.setTableName(item.getTableName().toUpperCase());
......@@ -404,33 +408,33 @@ public class DataFieldController {
FieldDbDiffVO vo2 = new FieldDbDiffVO();
vo2.setDatasourceId(item.getDataSourceId());
vo2.setTableName(item.getTableName().toUpperCase()+"_TEMP");
vo2.setTableName(item.getTableName().toUpperCase() + "_TEMP");
vo2.setColumnName(metaField.getFieldName().toUpperCase());
vo2.setMetaType(metaField.getFieldType());
list.add(vo2);
}
});
if (CollectionUtils.isEmpty(list)){
if (CollectionUtils.isEmpty(list)) {
return AjaxResult.success(Collections.emptyList());
}
return AjaxResult.success(list.stream().peek(item->{
return AjaxResult.success(list.stream().peek(item -> {
try {
DataSourceService.switchDb(item.getDatasourceId());
List<FieldDbDiffVO> vos = metaFieldMapper.selectFieldDbDiffVO(item.getTableName().toUpperCase(), item.getColumnName().toUpperCase());
if (!CollectionUtils.isEmpty(vos)){
if (!CollectionUtils.isEmpty(vos)) {
FieldDbDiffVO diffVO = vos.get(0);
item.setColumnType(diffVO.getColumnType());
item.setColumnLength(diffVO.getColumnLength());
item.setColumnPrecision(diffVO.getColumnPrecision());
item.setColumnScale(diffVO.getColumnScale());
item.setMergeSql(StrFormatter.format("ALTER TABLE {} MODIFY ( {} {} )",
item.getTableName().toUpperCase(),item.getColumnName().toUpperCase(),item.getMetaType().toUpperCase()));
item.getTableName().toUpperCase(), item.getColumnName().toUpperCase(), item.getMetaType().toUpperCase()));
}
}catch (Exception ignored){}
finally {
} catch (Exception ignored) {
} finally {
DataSourceService.switchDefault();
}
}).filter(item->StringUtils.isNotBlank(item.getColumnType()))
}).filter(item -> StringUtils.isNotBlank(item.getColumnType()))
.collect(Collectors.toList()));
}
......
......@@ -4,15 +4,22 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.tbyf.his.common.annotation.IgnoreWebSecurity;
import com.tbyf.his.common.core.domain.AjaxResult;
import com.tbyf.his.common.core.text.StrFormatter;
import com.tbyf.his.common.enums.DataSourceType;
import com.tbyf.his.common.utils.StringUtils;
import com.tbyf.his.common.utils.bean.BeanUtils;
import com.tbyf.his.framework.datasource.DataSourceUtil;
import com.tbyf.his.web.dataImport.domain.param.*;
import com.tbyf.his.web.dataImport.domain.vo.FieldErrorVo;
import com.tbyf.his.web.dataImport.entity.*;
import com.tbyf.his.web.dataImport.mapper.MetaFieldMapper;
import com.tbyf.his.web.dataImport.service.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.util.CollectionUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
......@@ -47,6 +54,12 @@ public class DataTemplateController {
@Autowired
private ExcelDataService excelDataService;
@Autowired
private MetaFieldMapper metaFieldMapper;
@Autowired
private JdbcTemplate jdbcTemplate;
@IgnoreWebSecurity
@GetMapping()
@ApiOperation("模板查询")
......@@ -54,6 +67,63 @@ public class DataTemplateController {
return AjaxResult.success(dataTemplateService.queryTemplate(param));
}
@IgnoreWebSecurity
@GetMapping("/fieldError")
@ApiOperation("物理表异常字段查询")
public AjaxResult fieldError(@RequestParam String templateId) {
List<FieldErrorVo> resultList = new ArrayList<>();
List<FieldErrorVo> fieldErrorVos = metaFieldMapper.selectFieldErrorVO(templateId);
if (!CollectionUtils.isEmpty(fieldErrorVos) && StringUtils.isNotBlank(fieldErrorVos.get(0).getTableName())) {
try {
DataSourceUtil.switchDs(DataSourceType.SLAVE.name());
if (metaFieldMapper.selectTableCount(fieldErrorVos.get(0).getTableName()) == 0) return AjaxResult.success(resultList);
fieldErrorVos.forEach(item -> {
String fieldType = item.getFieldType();
String columnType = "";
if (fieldType.contains("NUMBER")) {
columnType = metaFieldMapper.selectNumberFieldType(item.getTableName(), item.getFieldName());
} else {
columnType = metaFieldMapper.selectFieldType(item.getTableName(), item.getFieldName());
}
if (!StringUtils.equals(fieldType, columnType)) {
item.setColumnType(columnType);
resultList.add(item);
}
});
} finally {
DataSourceUtil.switchDefaultDs();
}
}
return AjaxResult.success(resultList);
}
@IgnoreWebSecurity
@PostMapping("/syncFieldError")
@ApiOperation("物理表异常字段同步")
public AjaxResult fieldErrorUpdate(@RequestBody List<FieldErrorVo> fieldErrorVos) {
//ALTER TABLE T0801_HEALTHCENTER_TEMP MODIFY ( ORG_NAME VARCHAR2(256) )
final String alterSql = "ALTER TABLE {} MODIFY ( {} {} )";
try {
DataSourceUtil.switchDs(DataSourceType.SLAVE.name());
fieldErrorVos.forEach(item -> {
String fieldType = item.getFieldType();
String fieldName = item.getFieldName();
String tableName = item.getTableName();
String sql = StrFormatter.format(alterSql, tableName, fieldName, fieldType);
try {
jdbcTemplate.execute(sql);
} catch (DataAccessException e) {
log.error("alter table's fieldType error");
e.printStackTrace();
}
});
} finally {
DataSourceUtil.switchDefaultDs();
}
return AjaxResult.success();
}
@IgnoreWebSecurity
@GetMapping("/allField")
@ApiOperation("查询模板的所有字段数据")
......
package com.tbyf.his.web.dataImport.domain.vo;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class FieldErrorVo {
/**
* 字段名
*/
private String fieldName;
/**
* 字段标题
*/
private String title;
/**
* 元字段类型
*/
private String fieldType;
/**
* 物理表字段类型
*/
private String columnType;
/**
* 表名
*/
private String tableName;
}
......@@ -2,6 +2,7 @@ package com.tbyf.his.web.dataImport.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tbyf.his.web.dataImport.domain.vo.FieldDbDiffVO;
import com.tbyf.his.web.dataImport.domain.vo.FieldErrorVo;
import com.tbyf.his.web.dataImport.entity.MetaField;
import org.apache.ibatis.annotations.Param;
......@@ -16,4 +17,11 @@ public interface MetaFieldMapper extends BaseMapper<MetaField> {
List<FieldDbDiffVO> selectFieldDbDiffVO(@Param("tableName") String tableName, @Param("columnName") String columnName);
int selectTableCount(@Param("tableName") String tableName);
List<FieldErrorVo> selectFieldErrorVO(@Param("templateId") String templateId);
String selectFieldType(@Param("tableName") String tableName, @Param("columnName") String columnName);
String selectNumberFieldType(@Param("tableName") String tableName, @Param("columnName") String columnName);
}
......@@ -4,19 +4,19 @@ spring:
druid:
# 主库数据源
master:
url: jdbc:mysql://centos:3306/his_base?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
url: jdbc:mysql://192.168.0.71:13306/hip_import?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: 123456
password: Esb@123456
driverClassName: com.mysql.cj.jdbc.Driver
# 从库数据源
slave:
# 从数据源开关/默认关闭
enabled: true
# url: jdbc:oracle:thin:@192.168.0.39:1521:orcl
url: jdbc:oracle:thin:@centos:1521:helowin
url: jdbc:oracle:thin:@192.168.0.71:11523:helowin
# username: xhyy
username: liuzz
password: 123456
username: test_import
password: data
driverClassName: oracle.jdbc.OracleDriver
# 初始连接数
initialSize: 5
......
......@@ -38,6 +38,7 @@ logging:
level:
com.tbyf.his.**.mapper: error
org.springframework: error
org.springframework.jdbc.core.JdbcTemplate: debug
# Spring配置
spring:
......@@ -46,7 +47,7 @@ spring:
# 国际化资源文件路径
basename: i18n/messages
profiles:
active: zyy
active: druid
# 文件上传
servlet:
multipart:
......@@ -64,9 +65,9 @@ spring:
redis:
# 地址
# host: 81.68.90.14
host: centos
host: 192.168.0.71
# 端口,默认为6379
port: 6379
port: 16379
# port: 6379
# port: 6379
# 数据库索引
......
......@@ -15,4 +15,35 @@
WHERE TABLE_NAME = #{tableName}
AND COLUMN_NAME = #{columnName}
</select>
<select id="selectTableCount" resultType="java.lang.Integer">
select COUNT(*) from user_tables WHERE TABLE_NAME = #{tableName}
</select>
<select id="selectFieldErrorVO" resultType="com.tbyf.his.web.dataImport.domain.vo.FieldErrorVo">
SELECT mf.field_name fieldName,
df.title title,
mf.field_type fieldType,
dt.table_name tableName
FROM data_field df
LEFT JOIN meta_field mf ON df.field = mf.id
LEFT JOIN data_template dt ON df.template_id = dt.id
WHERE df.field IS NOT NULL
AND df.template_id = #{templateId}
</select>
<select id="selectFieldType" resultType="java.lang.String">
SELECT DATA_TYPE || '(' || DATA_LENGTH || ')' columnType
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = #{tableName}
AND COLUMN_NAME = #{columnName}
</select>
<select id="selectNumberFieldType" resultType="java.lang.String">
SELECT DATA_TYPE || '(' || DATA_PRECISION || ',' || DATA_SCALE || ')' columnType
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = #{tableName}
AND COLUMN_NAME = #{columnName}
</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