Commit 0fadb312 by guoxw

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

parent 43bf81ab
...@@ -27,6 +27,8 @@ import org.springframework.web.bind.annotation.*; ...@@ -27,6 +27,8 @@ import org.springframework.web.bind.annotation.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -55,10 +57,10 @@ public class DataTemplateController { ...@@ -55,10 +57,10 @@ public class DataTemplateController {
private ExcelDataService excelDataService; private ExcelDataService excelDataService;
@Autowired @Autowired
private MetaFieldMapper metaFieldMapper; private JdbcTemplate jdbcTemplate;
@Autowired @Autowired
private JdbcTemplate jdbcTemplate; private MetaFieldMapper metaFieldMapper;
@IgnoreWebSecurity @IgnoreWebSecurity
@GetMapping() @GetMapping()
...@@ -71,53 +73,21 @@ public class DataTemplateController { ...@@ -71,53 +73,21 @@ public class DataTemplateController {
@IgnoreWebSecurity @IgnoreWebSecurity
@GetMapping("/fieldError") @GetMapping("/fieldError")
@ApiOperation("物理表异常字段查询") @ApiOperation("物理表异常字段查询")
public AjaxResult fieldError(@RequestParam String templateId) { public AjaxResult fieldError(@RequestParam String templateId) throws ExecutionException, InterruptedException {
List<FieldErrorVo> fieldErrorVos1 = metaFieldMapper.selectFieldErrorVO(templateId); List<FieldErrorVo> fieldErrorVos = metaFieldMapper.selectFieldErrorVO(templateId);
List<FieldErrorVo> fieldErrorVos2 = metaFieldMapper.selectFieldErrorVO(templateId);
ArrayList<FieldErrorVo> resultList = new ArrayList<>(); ArrayList<FieldErrorVo> resultList = new ArrayList<>();
if (!CollectionUtils.isEmpty(fieldErrorVos1) && StringUtils.isNotBlank(fieldErrorVos1.get(0).getTableName())) { if (!CollectionUtils.isEmpty(fieldErrorVos) && StringUtils.isNotBlank(fieldErrorVos.get(0).getTableName())) {
List<FieldErrorVo> list1 = getTableFieldError(fieldErrorVos1, fieldErrorVos1.get(0).getTableName()); CompletableFuture<List<FieldErrorVo>> future1 = dataTemplateService.getTableFieldError(fieldErrorVos, fieldErrorVos.get(0).getTableName());
List<FieldErrorVo> list2 = getTableFieldError(fieldErrorVos2, fieldErrorVos2.get(0).getTableName() + "_TEMP"); CompletableFuture<List<FieldErrorVo>> future2 = dataTemplateService.getTableFieldError(fieldErrorVos, fieldErrorVos.get(0).getTableName() + "_TEMP");
resultList.addAll(list1); resultList.addAll(list2); resultList.addAll(future1.get()); resultList.addAll(future2.get());
} }
return AjaxResult.success(resultList); 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 @IgnoreWebSecurity
@PostMapping("/syncFieldError") @PostMapping("/syncFieldError")
@ApiOperation("物理表异常字段同步") @ApiOperation("物理表异常字段同步")
public AjaxResult fieldErrorUpdate(@RequestBody List<FieldErrorVo> fieldErrorVos) { public AjaxResult fieldErrorUpdate(@RequestBody List<FieldErrorVo> fieldErrorVos) {
//ALTER TABLE T0801_HEALTHCENTER_TEMP MODIFY ( ORG_NAME VARCHAR2(256) )
final String alterSql = "ALTER TABLE {} MODIFY ( {} {} )"; final String alterSql = "ALTER TABLE {} MODIFY ( {} {} )";
try { try {
DataSourceUtil.switchDs(DataSourceType.SLAVE.name()); DataSourceUtil.switchDs(DataSourceType.SLAVE.name());
...@@ -249,7 +219,7 @@ public class DataTemplateController { ...@@ -249,7 +219,7 @@ public class DataTemplateController {
.ne(DataTemplate::getYear, template.getYear()) .ne(DataTemplate::getYear, template.getYear())
.select(DataTemplate::getYear); .select(DataTemplate::getYear);
List<DataTemplate> list = dataTemplateService.list(queryWrapper); 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; ...@@ -3,12 +3,14 @@ package com.tbyf.his.web.dataImport.service;
import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.tbyf.his.web.dataImport.domain.param.QueryTemplateParam; 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.TemplateVO;
import com.tbyf.his.web.dataImport.domain.vo.VerifyVO; import com.tbyf.his.web.dataImport.domain.vo.VerifyVO;
import com.tbyf.his.web.dataImport.entity.DataRule; import com.tbyf.his.web.dataImport.entity.DataRule;
import com.tbyf.his.web.dataImport.entity.DataTemplate; import com.tbyf.his.web.dataImport.entity.DataTemplate;
import java.util.List; import java.util.List;
import java.util.concurrent.CompletableFuture;
/** /**
* @author lzz * @author lzz
...@@ -42,4 +44,12 @@ public interface DataTemplateService extends IService<DataTemplate> { ...@@ -42,4 +44,12 @@ public interface DataTemplateService extends IService<DataTemplate> {
* @return * @return
*/ */
List<DataRule> getAllRule(String templateId); 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; ...@@ -5,18 +5,25 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.tbyf.his.common.annotation.DataSource; import com.tbyf.his.common.annotation.DataSource;
import com.tbyf.his.common.enums.DataSourceType; import com.tbyf.his.common.enums.DataSourceType;
import com.tbyf.his.common.utils.StringUtils; 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.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.TemplateVO;
import com.tbyf.his.web.dataImport.domain.vo.VerifyVO; import com.tbyf.his.web.dataImport.domain.vo.VerifyVO;
import com.tbyf.his.web.dataImport.entity.DataRule; import com.tbyf.his.web.dataImport.entity.DataRule;
import com.tbyf.his.web.dataImport.entity.DataTemplate; import com.tbyf.his.web.dataImport.entity.DataTemplate;
import com.tbyf.his.web.dataImport.mapper.DataTemplateMapper; 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 com.tbyf.his.web.dataImport.service.DataTemplateService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.CompletableFuture;
/** /**
* @author lzz * @author lzz
...@@ -30,6 +37,9 @@ public class DataTemplateServiceImpl extends ServiceImpl<DataTemplateMapper, Dat ...@@ -30,6 +37,9 @@ public class DataTemplateServiceImpl extends ServiceImpl<DataTemplateMapper, Dat
@Autowired @Autowired
private DataTemplateMapper dataTemplateMapper; private DataTemplateMapper dataTemplateMapper;
@Autowired
private MetaFieldMapper metaFieldMapper;
@Override @Override
public List<TemplateVO> queryTemplate(QueryTemplateParam param) { public List<TemplateVO> queryTemplate(QueryTemplateParam param) {
return dataTemplateMapper.queryTemplate(param); return dataTemplateMapper.queryTemplate(param);
...@@ -57,4 +67,38 @@ public class DataTemplateServiceImpl extends ServiceImpl<DataTemplateMapper, Dat ...@@ -57,4 +67,38 @@ public class DataTemplateServiceImpl extends ServiceImpl<DataTemplateMapper, Dat
public List<DataRule> getAllRule(String templateId) { public List<DataRule> getAllRule(String templateId) {
return dataTemplateMapper.getAllRule(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