diff --git a/src/com/engine/salary/elog/annotation/handle/ElogTableScanner.java b/src/com/engine/salary/elog/annotation/handle/ElogTableScanner.java index a024d3478..709e8e0cb 100644 --- a/src/com/engine/salary/elog/annotation/handle/ElogTableScanner.java +++ b/src/com/engine/salary/elog/annotation/handle/ElogTableScanner.java @@ -1,156 +1,156 @@ -package com.engine.salary.elog.annotation.handle; - -import com.engine.salary.elog.annotation.ElogField; -import com.engine.salary.elog.annotation.ElogTable; -import com.engine.salary.elog.entity.dto.DataTypeEnum; -import com.engine.salary.elog.entity.dto.TableColumnBean; -import com.engine.salary.elog.util.ElogUtils; -import lombok.extern.slf4j.Slf4j; -import org.reflections.Reflections; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.lang.reflect.Field; -import java.util.*; -import java.util.stream.Collectors; - -/** - * @ClassName: ElogTableScanner - * @Description 日志操作表扫描 - * @Author tanghj - * @Date 2021/3/12 13:31 - */ -@Slf4j -public class ElogTableScanner { - private Logger logger = LoggerFactory.getLogger(this.getClass()); - -// private TableCheckerMapper tableCheckerMapper; - -// @Override - public void run() throws Exception { - - // todo 需要考虑集群下,控制一台机器来跑 - scanElogTable(); - - } - - private void scanElogTable() { - // todo 是否还需要扫描Elog(因为可能不需要本地存储) ELogDetailTable, -// Map tableBeans = this.applicationContext.getBeansWithAnnotation(ElogTable.class); - Reflections reflections = new Reflections("com.engine.salary.elog"); - Set> tableBeans = reflections.getTypesAnnotatedWith(ElogTable.class); - - - List baseColumns = new ArrayList<>(); - - Map> tableColumns = elogTableHandle(tableBeans,baseColumns); - - for(String tableName : tableColumns.keySet()) { - - // todo 需要处理明细表,如果没有直接初始化原始明细表,如果有加上自定义的 - List columns = tableColumns.get(tableName); - if(columns == null) { - columns = baseColumns; - } else { - columns.addAll(baseColumns); - } - tableCheck(tableName, columns); - } - - } - - private Map> elogTableHandle(Set> tableBeans, List baseColumns) { - Map> tableMap = new HashMap<>(); - for (Class aClass :tableBeans) {//遍历每个controller层 - - List list = new ArrayList<>(); - - ElogTable elogTable = aClass.getAnnotation(ElogTable.class); - - List fields = Arrays.asList(aClass.getDeclaredFields());//获取方法 - for (Field f : fields) { - - ElogField field = f.getAnnotation(ElogField.class); - if(field == null) { - continue; - } - - TableColumnBean tableColumnBean = new TableColumnBean(); - - tableColumnBean.setColumnName(f.getName()); - tableColumnBean.setColumnComment(field.comment()); - tableColumnBean.setColumnDefault(field.defaultValue()); - tableColumnBean.setFieldLength(field.length()); - tableColumnBean.setDataType(field.dataType()); - tableColumnBean.setNullable(field.isNull()); - list.add(tableColumnBean); - } - if(!ElogUtils.BASE_TABLE.equals(elogTable.module())) { - tableMap.put(ElogUtils.getTableName(elogTable.module(), elogTable.function()), list); - } else { - baseColumns.addAll(list); - } - } - - return tableMap; - } - - private void tableCheck(String tableName, List columns) { - List oldColumns = new ArrayList<>(); -// List oldColumns = tableCheckerMapper.getTableStructure(tableName); - - // 表不存在 - if(oldColumns == null || oldColumns.size() == 0) { - createTable(tableName,columns ); - } else { - Map newcolMap = new HashMap<>(); - Map oldcolMap = new HashMap<>(); - - columns.stream().forEach(tableColumnBean -> newcolMap.put(tableColumnBean.getColumnName().toLowerCase(), tableColumnBean)); - oldColumns.stream().forEach(tableColumnBean -> { - tableColumnBean.setDataType(ElogUtils.getEnumFromString(DataTypeEnum.class, tableColumnBean.getDataTypeStr())); - tableColumnBean.setNullable("YES".equalsIgnoreCase(tableColumnBean.getIsNullableStr())); - oldcolMap.put(tableColumnBean.getColumnName().toLowerCase(), tableColumnBean); - }); - // 只增加或者修改,不删除字段 - for(String key : newcolMap.keySet()) { - if(oldcolMap.containsKey(key)) { - // 字段变动则修改 - if(!(newcolMap.get(key).toSql()).equals(oldcolMap.get(key).toSql())) - this.modifyColumn(tableName, newcolMap.get(key)); - } else { - this.addColumn(tableName, newcolMap.get(key)); - } - } - } - - } - - private void createTable(String tableName, List columns) { - StringBuilder sb = new StringBuilder("create table ").append(tableName).append(" ( "); - sb.append(columns.stream().map( bean -> bean.toSql()).collect(Collectors.joining(","))); - sb.append(")"); - logger.info("创建sql:{}",sb.toString()); -// tableCheckerMapper.createElogTable(sb.toString()); - } - - private void addColumn(String tableName, TableColumnBean tableColumnBean) { - StringBuilder sb = new StringBuilder("alter table ") - .append(tableName).append(" ") - .append(" add ") - .append(" column ") - .append(tableColumnBean.toSql()); - logger.info("新增字段sql:{}",sb.toString()); -// tableCheckerMapper.createElogTable(sb.toString()); - } - - private void modifyColumn(String tableName, TableColumnBean tableColumnBean) { - StringBuilder sb = new StringBuilder("alter table ") - .append(tableName).append(" ") - .append(" modify ") - .append(" column ") - .append(tableColumnBean.toSql()); - logger.info("修改字段sql:{}",sb.toString()); -// tableCheckerMapper.createElogTable(sb.toString()); - } -} +//package com.engine.salary.elog.annotation.handle; +// +//import com.engine.salary.elog.annotation.ElogField; +//import com.engine.salary.elog.annotation.ElogTable; +//import com.engine.salary.elog.entity.dto.DataTypeEnum; +//import com.engine.salary.elog.entity.dto.TableColumnBean; +//import com.engine.salary.elog.util.ElogUtils; +//import lombok.extern.slf4j.Slf4j; +//import org.reflections.Reflections; +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +// +//import java.lang.reflect.Field; +//import java.util.*; +//import java.util.stream.Collectors; +// +///** +// * @ClassName: ElogTableScanner +// * @Description 日志操作表扫描 +// * @Author tanghj +// * @Date 2021/3/12 13:31 +// */ +//@Slf4j +//public class ElogTableScanner { +// private Logger logger = LoggerFactory.getLogger(this.getClass()); +// +//// private TableCheckerMapper tableCheckerMapper; +// +//// @Override +// public void run() throws Exception { +// +// // todo 需要考虑集群下,控制一台机器来跑 +// scanElogTable(); +// +// } +// +// private void scanElogTable() { +// // todo 是否还需要扫描Elog(因为可能不需要本地存储) ELogDetailTable, +//// Map tableBeans = this.applicationContext.getBeansWithAnnotation(ElogTable.class); +// Reflections reflections = new Reflections("com.engine.salary.elog"); +// Set> tableBeans = reflections.getTypesAnnotatedWith(ElogTable.class); +// +// +// List baseColumns = new ArrayList<>(); +// +// Map> tableColumns = elogTableHandle(tableBeans,baseColumns); +// +// for(String tableName : tableColumns.keySet()) { +// +// // todo 需要处理明细表,如果没有直接初始化原始明细表,如果有加上自定义的 +// List columns = tableColumns.get(tableName); +// if(columns == null) { +// columns = baseColumns; +// } else { +// columns.addAll(baseColumns); +// } +// tableCheck(tableName, columns); +// } +// +// } +// +// private Map> elogTableHandle(Set> tableBeans, List baseColumns) { +// Map> tableMap = new HashMap<>(); +// for (Class aClass :tableBeans) {//遍历每个controller层 +// +// List list = new ArrayList<>(); +// +// ElogTable elogTable = aClass.getAnnotation(ElogTable.class); +// +// List fields = Arrays.asList(aClass.getDeclaredFields());//获取方法 +// for (Field f : fields) { +// +// ElogField field = f.getAnnotation(ElogField.class); +// if(field == null) { +// continue; +// } +// +// TableColumnBean tableColumnBean = new TableColumnBean(); +// +// tableColumnBean.setColumnName(f.getName()); +// tableColumnBean.setColumnComment(field.comment()); +// tableColumnBean.setColumnDefault(field.defaultValue()); +// tableColumnBean.setFieldLength(field.length()); +// tableColumnBean.setDataType(field.dataType()); +// tableColumnBean.setNullable(field.isNull()); +// list.add(tableColumnBean); +// } +// if(!ElogUtils.BASE_TABLE.equals(elogTable.module())) { +// tableMap.put(ElogUtils.getTableName(elogTable.module(), elogTable.function()), list); +// } else { +// baseColumns.addAll(list); +// } +// } +// +// return tableMap; +// } +// +// private void tableCheck(String tableName, List columns) { +// List oldColumns = new ArrayList<>(); +//// List oldColumns = tableCheckerMapper.getTableStructure(tableName); +// +// // 表不存在 +// if(oldColumns == null || oldColumns.size() == 0) { +// createTable(tableName,columns ); +// } else { +// Map newcolMap = new HashMap<>(); +// Map oldcolMap = new HashMap<>(); +// +// columns.stream().forEach(tableColumnBean -> newcolMap.put(tableColumnBean.getColumnName().toLowerCase(), tableColumnBean)); +// oldColumns.stream().forEach(tableColumnBean -> { +// tableColumnBean.setDataType(ElogUtils.getEnumFromString(DataTypeEnum.class, tableColumnBean.getDataTypeStr())); +// tableColumnBean.setNullable("YES".equalsIgnoreCase(tableColumnBean.getIsNullableStr())); +// oldcolMap.put(tableColumnBean.getColumnName().toLowerCase(), tableColumnBean); +// }); +// // 只增加或者修改,不删除字段 +// for(String key : newcolMap.keySet()) { +// if(oldcolMap.containsKey(key)) { +// // 字段变动则修改 +// if(!(newcolMap.get(key).toSql()).equals(oldcolMap.get(key).toSql())) +// this.modifyColumn(tableName, newcolMap.get(key)); +// } else { +// this.addColumn(tableName, newcolMap.get(key)); +// } +// } +// } +// +// } +// +// private void createTable(String tableName, List columns) { +// StringBuilder sb = new StringBuilder("create table ").append(tableName).append(" ( "); +// sb.append(columns.stream().map( bean -> bean.toSql()).collect(Collectors.joining(","))); +// sb.append(")"); +// logger.info("创建sql:{}",sb.toString()); +//// tableCheckerMapper.createElogTable(sb.toString()); +// } +// +// private void addColumn(String tableName, TableColumnBean tableColumnBean) { +// StringBuilder sb = new StringBuilder("alter table ") +// .append(tableName).append(" ") +// .append(" add ") +// .append(" column ") +// .append(tableColumnBean.toSql()); +// logger.info("新增字段sql:{}",sb.toString()); +//// tableCheckerMapper.createElogTable(sb.toString()); +// } +// +// private void modifyColumn(String tableName, TableColumnBean tableColumnBean) { +// StringBuilder sb = new StringBuilder("alter table ") +// .append(tableName).append(" ") +// .append(" modify ") +// .append(" column ") +// .append(tableColumnBean.toSql()); +// logger.info("修改字段sql:{}",sb.toString()); +//// tableCheckerMapper.createElogTable(sb.toString()); +// } +//}