Commit 0fadb312 by guoxw

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

parent 43bf81ab
......@@ -27,6 +27,8 @@ import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.stream.Collectors;
/**
......@@ -55,10 +57,10 @@ public class DataTemplateController {
private ExcelDataService excelDataService;
@Autowired
private MetaFieldMapper metaFieldMapper;
private JdbcTemplate jdbcTemplate;
@Autowired
private JdbcTemplate jdbcTemplate;
private MetaFieldMapper metaFieldMapper;
@IgnoreWebSecurity
@GetMapping()
......@@ -71,53 +73,21 @@ public class DataTemplateController {
@IgnoreWebSecurity
@GetMapping("/fieldError")
@ApiOperation("物理表异常字段查询")
public AjaxResult fieldError(@RequestParam String templateId) {
List<FieldErrorVo> fieldErrorVos1 = metaFieldMapper.selectFieldErrorVO(templateId);
List<FieldErrorVo> fieldErrorVos2 = metaFieldMapper.selectFieldErrorVO(templateId);
public AjaxResult fieldError(@RequestParam String templateId) throws ExecutionException, InterruptedException {
List<FieldErrorVo> fieldErrorVos = metaFieldMapper.selectFieldErrorVO(templateId);
ArrayList<FieldErrorVo> resultList = new ArrayList<>();
if (!CollectionUtils.isEmpty(fieldErrorVos1) && StringUtils.isNotBlank(fieldErrorVos1.get(0).getTableName())) {
List<FieldErrorVo> list1 = getTableFieldError(fieldErrorVos1, fieldErrorVos1.get(0).getTableName());
List<FieldErrorVo> list2 = getTableFieldError(fieldErrorVos2, fieldErrorVos2.get(0).getTableName() + "_TEMP");
resultList.addAll(list1); resultList.addAll(list2);
if (!CollectionUtils.isEmpty(fieldErrorVos) && StringUtils.isNotBlank(fieldErrorVos.get(0).getTableName())) {
CompletableFuture<List<FieldErrorVo>> future1 = dataTemplateService.getTableFieldError(fieldErrorVos, fieldErrorVos.get(0).getTableName());
CompletableFuture<List<FieldErrorVo>> future2 = dataTemplateService.getTableFieldError(fieldErrorVos, fieldErrorVos.get(0).getTableName() + "_TEMP");
resultList.addAll(future1.get()); resultList.addAll(future2.get());
}
return AjaxResult.success(resultList);
}
private List<FieldErrorVo> getTableFieldError(List<FieldErrorVo> fieldErrorVos, String tableName) {
List<FieldErrorVo> resultList = new ArrayList<>();
try {
DataSourceUtil.switchDs(DataSourceType.SLAVE.name());
if (metaFieldMapper.selectTableCount(tableName) > 0) {
fieldErrorVos.forEach(item -> {
String fieldType = item.getFieldType();
String columnType = "";
if (fieldType.contains("NUMBER")) {
columnType = metaFieldMapper.selectNumberFieldType(tableName, item.getFieldName());
} else {
columnType = metaFieldMapper.selectFieldType(tableName, item.getFieldName());
}
if (!StringUtils.equals(fieldType, columnType) && !isVarcharLengthEqual(fieldType, columnType)) {
item.setColumnType(columnType).setTableName(tableName);
resultList.add(item);
}
});
}
} finally {
DataSourceUtil.switchDefaultDs();
}
return resultList;
}
private boolean isVarcharLengthEqual(String fieldType, String columnType) {
return fieldType.contains("VARCHAR") && columnType.contains("VARCHAR") &&
fieldType.substring(fieldType.indexOf("(") + 1, fieldType.indexOf(")")).equals(columnType.substring(columnType.indexOf("(") + 1, columnType.indexOf(")")));
}
@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());
......@@ -249,7 +219,7 @@ public class DataTemplateController {
.ne(DataTemplate::getYear, template.getYear())
.select(DataTemplate::getYear);
List<DataTemplate> list = dataTemplateService.list(queryWrapper);
return AjaxResult.success(list.stream().filter(item-> StringUtils.isNotBlank(item.getYear())).map(DataTemplate::getYear).collect(Collectors.toList()));
return AjaxResult.success(list.stream().map(DataTemplate::getYear).filter(StringUtils::isNotBlank).collect(Collectors.toList()));
}
}
......@@ -3,12 +3,14 @@ package com.tbyf.his.web.dataImport.service;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.service.IService;
import com.tbyf.his.web.dataImport.domain.param.QueryTemplateParam;
import com.tbyf.his.web.dataImport.domain.vo.FieldErrorVo;
import com.tbyf.his.web.dataImport.domain.vo.TemplateVO;
import com.tbyf.his.web.dataImport.domain.vo.VerifyVO;
import com.tbyf.his.web.dataImport.entity.DataRule;
import com.tbyf.his.web.dataImport.entity.DataTemplate;
import java.util.List;
import java.util.concurrent.CompletableFuture;
/**
* @author lzz
......@@ -42,4 +44,12 @@ public interface DataTemplateService extends IService<DataTemplate> {
* @return
*/
List<DataRule> getAllRule(String templateId);
/**
* 获取物理表的错误字段
* @param fieldErrorVos
* @param tableName
* @return
*/
public CompletableFuture<List<FieldErrorVo>> getTableFieldError(List<FieldErrorVo> fieldErrorVos, String tableName);
}
......@@ -5,18 +5,25 @@ 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.common.utils.bean.BeanUtils;
import com.tbyf.his.framework.datasource.DataSourceUtil;
import com.tbyf.his.web.dataImport.domain.param.QueryTemplateParam;
import com.tbyf.his.web.dataImport.domain.vo.FieldErrorVo;
import com.tbyf.his.web.dataImport.domain.vo.TemplateVO;
import com.tbyf.his.web.dataImport.domain.vo.VerifyVO;
import com.tbyf.his.web.dataImport.entity.DataRule;
import com.tbyf.his.web.dataImport.entity.DataTemplate;
import com.tbyf.his.web.dataImport.mapper.DataTemplateMapper;
import com.tbyf.his.web.dataImport.mapper.MetaFieldMapper;
import com.tbyf.his.web.dataImport.service.DataTemplateService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
/**
* @author lzz
......@@ -30,6 +37,9 @@ public class DataTemplateServiceImpl extends ServiceImpl<DataTemplateMapper, Dat
@Autowired
private DataTemplateMapper dataTemplateMapper;
@Autowired
private MetaFieldMapper metaFieldMapper;
@Override
public List<TemplateVO> queryTemplate(QueryTemplateParam param) {
return dataTemplateMapper.queryTemplate(param);
......@@ -57,4 +67,38 @@ public class DataTemplateServiceImpl extends ServiceImpl<DataTemplateMapper, Dat
public List<DataRule> getAllRule(String templateId) {
return dataTemplateMapper.getAllRule(templateId);
}
@Async
public CompletableFuture<List<FieldErrorVo>> getTableFieldError(List<FieldErrorVo> fieldErrorVos, String tableName) {
log.info("start");
List<FieldErrorVo> resultList = new ArrayList<>();
try {
DataSourceUtil.switchDs(DataSourceType.SLAVE.name());
if (metaFieldMapper.selectTableCount(tableName) > 0) {
fieldErrorVos.forEach(item -> {
String fieldType = item.getFieldType();
String columnType;
if (fieldType.contains("NUMBER")) {
columnType = metaFieldMapper.selectNumberFieldType(tableName, item.getFieldName());
} else {
columnType = metaFieldMapper.selectFieldType(tableName, item.getFieldName());
}
//元字段存在、物理表字段可能不存在
if (StringUtils.isNotBlank(columnType) && !StringUtils.equals(fieldType, columnType) && !isVarcharLengthEqual(fieldType, columnType)) {
FieldErrorVo fieldErrorVo = new FieldErrorVo();
BeanUtils.copyBeanProp(fieldErrorVo, item);
resultList.add(fieldErrorVo.setColumnType(columnType).setTableName(tableName));
}
});
}
} finally {
DataSourceUtil.switchDefaultDs();
}
return CompletableFuture.completedFuture(resultList);
}
protected boolean isVarcharLengthEqual(String fieldType, String columnType) {
return fieldType.contains("VARCHAR") && columnType.contains("VARCHAR") &&
fieldType.substring(fieldType.indexOf("(") + 1, fieldType.indexOf(")")).equals(columnType.substring(columnType.indexOf("(") + 1, columnType.indexOf(")")));
}
}
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