Commit 21546471 by liuzz

转换规则开发

parent 2ba2b5d2
...@@ -178,10 +178,6 @@ public class DataImportController { ...@@ -178,10 +178,6 @@ public class DataImportController {
dataImportService.updateById(updateTemplate);*/ dataImportService.updateById(updateTemplate);*/
} else { } else {
// oracle // oracle
final Integer count = jdbcTemplate.queryForObject(StrFormatter.format("select count(*) from user_tables where table_name =upper('{}')", tableName), Integer.class);
if (count > 0) {
return AjaxResult.error("此表已存在");
}
List<String> prodSqlList = new ArrayList<>(); List<String> prodSqlList = new ArrayList<>();
List<String> tempSqlList = new ArrayList<>(); List<String> tempSqlList = new ArrayList<>();
final String tempTableName = tableName + "_TEMP"; final String tempTableName = tableName + "_TEMP";
...@@ -210,8 +206,14 @@ public class DataImportController { ...@@ -210,8 +206,14 @@ public class DataImportController {
String[] temp = new String[tempSqlList.size()]; String[] temp = new String[tempSqlList.size()];
prodSqlList.toArray(prod); prodSqlList.toArray(prod);
tempSqlList.toArray(temp); tempSqlList.toArray(temp);
jdbcTemplate.batchUpdate(prod); final Integer prodCount = jdbcTemplate.queryForObject(StrFormatter.format("select count(*) from user_tables where table_name =upper('{}')", tableName), Integer.class);
jdbcTemplate.batchUpdate(temp); if (prodCount == 0) {
jdbcTemplate.batchUpdate(prod);
}
final Integer tempCount = jdbcTemplate.queryForObject(StrFormatter.format("select count(*) from user_tables where table_name =upper('{}')", tempTableName), Integer.class);
if (tempCount == 0) {
jdbcTemplate.batchUpdate(temp);
}
// 修改模板表绑定的表名 // 修改模板表绑定的表名
final DataTemplate updateTemplate = new DataTemplate(); final DataTemplate updateTemplate = new DataTemplate();
updateTemplate.setId(template.getId()); updateTemplate.setId(template.getId());
......
package com.tbyf.his.web.controller.dataImport; package com.tbyf.his.web.controller.dataImport;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
...@@ -65,7 +66,7 @@ public class DataRuleController { ...@@ -65,7 +66,7 @@ public class DataRuleController {
final LambdaQueryWrapper<DataRule> queryWrapper = Wrappers.lambdaQuery(DataRule.class); final LambdaQueryWrapper<DataRule> queryWrapper = Wrappers.lambdaQuery(DataRule.class);
queryWrapper.like(StringUtils.isNotBlank(param.getName()), DataRule::getName, param.getName()) queryWrapper.like(StringUtils.isNotBlank(param.getName()), DataRule::getName, param.getName())
.eq(StringUtils.isNotBlank(param.getType()), DataRule::getType, param.getType()) .eq(StringUtils.isNotBlank(param.getType()), DataRule::getType, param.getType())
.in(DataRule::getType, "基础规则", "组合规则"); .in(DataRule::getType, "基础规则", "组合规则","转换规则");
final Page<DataRule> templatePage = dataRuleService.page(page, queryWrapper); final Page<DataRule> templatePage = dataRuleService.page(page, queryWrapper);
return param.convert(templatePage); return param.convert(templatePage);
} }
...@@ -75,7 +76,7 @@ public class DataRuleController { ...@@ -75,7 +76,7 @@ public class DataRuleController {
@ApiOperation("规则字典") @ApiOperation("规则字典")
public AjaxResult queryRuleDict() { public AjaxResult queryRuleDict() {
final LambdaQueryWrapper<DataRule> queryWrapper = Wrappers.lambdaQuery(DataRule.class); final LambdaQueryWrapper<DataRule> queryWrapper = Wrappers.lambdaQuery(DataRule.class);
queryWrapper.in(DataRule::getType, "基础规则", "组合规则") queryWrapper.in(DataRule::getType, "基础规则", "组合规则","转换规则")
.select(DataRule::getId, DataRule::getName); .select(DataRule::getId, DataRule::getName);
return AjaxResult.success(dataRuleService.list(queryWrapper)); return AjaxResult.success(dataRuleService.list(queryWrapper));
} }
...@@ -113,12 +114,15 @@ public class DataRuleController { ...@@ -113,12 +114,15 @@ public class DataRuleController {
@PostMapping("/test") @PostMapping("/test")
@ApiOperation("规则测试") @ApiOperation("规则测试")
public AjaxResult testRule(@RequestBody @Validated RuleVO test) { public AjaxResult testRule(@RequestBody @Validated RuleVO test) {
if (StrUtil.equals(test.getType(),"转换规则")){
return AjaxResult.success(StrUtil.format("转换结果为:[{}]",DiConfig.valueConvert(test)));
}
final RuleValidator validator = DiConfig.getValidator(test.getMode()); final RuleValidator validator = DiConfig.getValidator(test.getMode());
validator.validate(test); validator.validate(test);
if (StringUtils.isNotBlank(test.getResult())) { if (StringUtils.isNotBlank(test.getResult())) {
return AjaxResult.error(test.getResult()); return AjaxResult.error(test.getResult());
} }
return AjaxResult.success(); return AjaxResult.success("测试通过");
} }
@IgnoreWebSecurity @IgnoreWebSecurity
......
...@@ -30,6 +30,21 @@ public class DiConfig { ...@@ -30,6 +30,21 @@ public class DiConfig {
public static final Map<String, RuleValidator> VALIDATOR_MAP = new ConcurrentHashMap<>(8); public static final Map<String, RuleValidator> VALIDATOR_MAP = new ConcurrentHashMap<>(8);
private static final List<ValueConvert> CONVERT_LIST = new ArrayList<>();
/**
* 转换规则处理
* @param vo
* @return
*/
public static String valueConvert(RuleVO vo){
for (ValueConvert convert : CONVERT_LIST){
if (convert.support(vo)){
return convert.convert(vo);
}
}
return vo.getValue();
}
/** /**
* 获取对应列的数据起始位置 * 获取对应列的数据起始位置
...@@ -92,6 +107,8 @@ public class DiConfig { ...@@ -92,6 +107,8 @@ public class DiConfig {
public void init() { public void init() {
final Map<String, RuleValidator> validatorMap = applicationContext.getBeansOfType(RuleValidator.class); final Map<String, RuleValidator> validatorMap = applicationContext.getBeansOfType(RuleValidator.class);
VALIDATOR_MAP.putAll(validatorMap); VALIDATOR_MAP.putAll(validatorMap);
Map<String, ValueConvert> convertMap = applicationContext.getBeansOfType(ValueConvert.class);
CONVERT_LIST.addAll(convertMap.values());
} }
/** /**
......
...@@ -3,6 +3,7 @@ package com.tbyf.his.web.dataImport.core; ...@@ -3,6 +3,7 @@ package com.tbyf.his.web.dataImport.core;
import com.tbyf.his.web.dataImport.entity.DataRule; import com.tbyf.his.web.dataImport.entity.DataRule;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors;
/** /**
* @author lzz * @author lzz
...@@ -10,6 +11,7 @@ import lombok.Data; ...@@ -10,6 +11,7 @@ import lombok.Data;
*/ */
@Data @Data
@Accessors(chain = true)
public class RuleVO { public class RuleVO {
......
package com.tbyf.his.web.dataImport.core;
public interface ValueConvert {
/**
* 值域转换
* @param vo
* @return
*/
String convert(RuleVO vo);
/**
* 是否支持此转换
* @param vo
* @return
*/
boolean support(RuleVO vo);
}
package com.tbyf.his.web.dataImport.core.convert;
import cn.hutool.core.util.StrUtil;
import com.tbyf.his.web.dataImport.core.DiConstants;
import com.tbyf.his.web.dataImport.core.RuleVO;
import com.tbyf.his.web.dataImport.core.ValueConvert;
import org.springframework.stereotype.Service;
@Service
public class RangeConvert implements ValueConvert {
@Override
public String convert(RuleVO vo) {
if (StrUtil.isNotBlank(vo.getValue())){
String[] dictArr = vo.getContent().split(DiConstants.SEPARATOR);
for (String dict : dictArr){
if (StrUtil.isNotBlank(dict) && StrUtil.contains(dict,"-")){
String[] split = dict.split("-");
if (StrUtil.equalsIgnoreCase(split[0],vo.getValue())){
return split[1];
}
}
}
}
return vo.getValue();
}
@Override
public boolean support(RuleVO vo) {
return StrUtil.equals(vo.getMode(),"值域转换") && StrUtil.equals(vo.getType(),"转换规则");
}
}
package com.tbyf.his.web.dataImport.core.convert;
import cn.hutool.core.util.StrUtil;
import com.tbyf.his.web.dataImport.core.RuleVO;
import com.tbyf.his.web.dataImport.core.ValueConvert;
import org.springframework.stereotype.Service;
@Service
public class RegConvert implements ValueConvert {
@Override
public String convert(RuleVO vo) {
if (StrUtil.isNotBlank(vo.getValue())){
String[] split = vo.getValue().split(vo.getContent());
return String.valueOf(split.length);
}
return "0";
}
@Override
public boolean support(RuleVO vo) {
return StrUtil.equals(vo.getMode(),"正则分割") && StrUtil.equals(vo.getType(),"转换规则");
}
}
...@@ -27,7 +27,6 @@ import com.tbyf.his.web.dataImport.service.DataDictService; ...@@ -27,7 +27,6 @@ import com.tbyf.his.web.dataImport.service.DataDictService;
import com.tbyf.his.web.dataImport.service.DataSourceService; import com.tbyf.his.web.dataImport.service.DataSourceService;
import com.tbyf.his.web.dataImport.service.DataTemplateService; import com.tbyf.his.web.dataImport.service.DataTemplateService;
import com.tbyf.his.web.dataImport.service.ExcelDataService; import com.tbyf.his.web.dataImport.service.ExcelDataService;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.compress.archivers.ArchiveEntry; import org.apache.commons.compress.archivers.ArchiveEntry;
import org.apache.commons.compress.archivers.zip.Zip64Mode; import org.apache.commons.compress.archivers.zip.Zip64Mode;
...@@ -52,7 +51,8 @@ import java.io.InputStream; ...@@ -52,7 +51,8 @@ import java.io.InputStream;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.util.*; import java.util.*;
import java.util.concurrent.*; import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -127,6 +127,9 @@ public class ExcelDataServiceImpl extends ServiceImpl<ExcelDataMapper, ExcelData ...@@ -127,6 +127,9 @@ public class ExcelDataServiceImpl extends ServiceImpl<ExcelDataMapper, ExcelData
for (int i = 0; i < item.getValues().size(); i++) { for (int i = 0; i < item.getValues().size(); i++) {
for (int j = 0; j < item.getRules().size(); j++) { for (int j = 0; j < item.getRules().size(); j++) {
final RuleVO vo = item.getRules().get(j); final RuleVO vo = item.getRules().get(j);
if (StrUtil.equals(vo.getType(),"转换规则")){
continue;
}
vo.setValue(item.getValues().get(i)); vo.setValue(item.getValues().get(i));
// 置空错误信息 // 置空错误信息
vo.setResult(null); vo.setResult(null);
...@@ -600,6 +603,16 @@ public class ExcelDataServiceImpl extends ServiceImpl<ExcelDataMapper, ExcelData ...@@ -600,6 +603,16 @@ public class ExcelDataServiceImpl extends ServiceImpl<ExcelDataMapper, ExcelData
+ ",DORDER,YEAROOFDATARECORD,ROWCODE ) VALUES ({})"; + ",DORDER,YEAROOFDATARECORD,ROWCODE ) VALUES ({})";
//String[] sqlArr = new String[length]; //String[] sqlArr = new String[length];
List<String> sqlList = new ArrayList<>(length + 100); List<String> sqlList = new ArrayList<>(length + 100);
// 数据转换规则
verifyList.forEach(v->{
if (!CollectionUtils.isEmpty(v.getRules())){
Optional<RuleVO> ruleVO = v.getRules().stream().filter(item -> StrUtil.equals(item.getType(), "转换规则")).findFirst();
if (ruleVO.isPresent()){
RuleVO vo = ruleVO.get();
v.setValues(v.getValues().stream().map(item->DiConfig.valueConvert(vo.setValue(item))).collect(Collectors.toList()));
}
}
});
for (int i = 0; i < length; i++) { for (int i = 0; i < length; i++) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
for (VerifyVO v : verifyList) { for (VerifyVO v : verifyList) {
...@@ -675,8 +688,4 @@ public class ExcelDataServiceImpl extends ServiceImpl<ExcelDataMapper, ExcelData ...@@ -675,8 +688,4 @@ public class ExcelDataServiceImpl extends ServiceImpl<ExcelDataMapper, ExcelData
return DiConfig.getWord(columnStart + index) + "," + coords[1]; return DiConfig.getWord(columnStart + index) + "," + coords[1];
} }
@SneakyThrows
public static void main(String[] args) {
System.out.println("1,".split(",").length);
}
} }
...@@ -4,19 +4,19 @@ spring: ...@@ -4,19 +4,19 @@ spring:
druid: druid:
# 主库数据源 # 主库数据源
master: master:
url: jdbc:mysql://192.168.0.71:13306/hip_import?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 url: jdbc:mysql://centos:3306/emport?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root username: root
password: Esb@123456 password: 123456
driverClassName: com.mysql.cj.jdbc.Driver driverClassName: com.mysql.cj.jdbc.Driver
# 从库数据源 # 从库数据源
slave: slave:
# 从数据源开关/默认关闭 # 从数据源开关/默认关闭
enabled: true enabled: true
# url: jdbc:oracle:thin:@192.168.0.39:1521:orcl # url: jdbc:oracle:thin:@192.168.0.39:1521:orcl
url: jdbc:oracle:thin:@192.168.0.71:11523:helowin url: jdbc:oracle:thin:@centos:1521:helowin
# username: xhyy # username: xhyy
username: test_import username: liuzz
password: data password: LDF980420
driverClassName: oracle.jdbc.OracleDriver driverClassName: oracle.jdbc.OracleDriver
# 初始连接数 # 初始连接数
initialSize: 5 initialSize: 5
......
...@@ -47,7 +47,7 @@ spring: ...@@ -47,7 +47,7 @@ spring:
# 国际化资源文件路径 # 国际化资源文件路径
basename: i18n/messages basename: i18n/messages
profiles: profiles:
active: zyy active: druid
# 文件上传 # 文件上传
servlet: servlet:
multipart: multipart:
......
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