SpecificTableDto.java
package com.mycim.valueobject.table;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.valueobject.bas.Relation;
import com.mycim.valueobject.bas.TransactionLog;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* @author yibing.liu
* @version 1.0
* @date 2021/4/13
*/
public abstract class SpecificTableDto implements Serializable {
String tableName;
String transId;
String historyTableName;
/**
* 添加 INSERT 时 需要插入的 字段
*/
private List<TableFieldDto> fieldList = new ArrayList<>();
/**
* 添加 主键 字段,一般用于 UPDATE 和 DELETE时
*/
private List<TableFieldDto> primaryKeyFieldList = new ArrayList<>();
/**
* 添加 需要修改的 字段
*/
private List<TableFieldDto> updateFieldList = new ArrayList<>();
public SpecificTableDto() {
}
public SpecificTableDto(String tableName, String transId) {
this.tableName = tableName;
this.transId = transId;
}
public SpecificTableDto(String historyTableName, String mainTableName, String transId) {
this.historyTableName = historyTableName;
this.tableName = mainTableName;
this.transId = transId;
}
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public String getTransId() {
return transId;
}
public void setTransId(String transId) {
this.transId = transId;
}
public List<TableFieldDto> getFieldList() {
return fieldList;
}
public void setFieldList(List<TableFieldDto> fieldList) {
this.fieldList = fieldList;
}
public List<TableFieldDto> getPrimaryKeyFieldList() {
return primaryKeyFieldList;
}
public void setPrimaryKeyFieldList(List<TableFieldDto> primaryKeyFieldList) {
this.primaryKeyFieldList = primaryKeyFieldList;
}
public List<TableFieldDto> getUpdateFieldList() {
return updateFieldList;
}
public void setUpdateFieldList(List<TableFieldDto> updateFieldList) {
this.updateFieldList = updateFieldList;
}
public String getHistoryTableName() {
return historyTableName;
}
public void setHistoryTableName(String historyTableName) {
this.historyTableName = historyTableName;
}
public void addField(String columnName, Object columnValue) {
TableFieldDto newTfd = new TableFieldDto(columnName, columnValue);
if (!fieldList.contains(newTfd)) {
fieldList.add(newTfd);
}
}
public void addField(TableFieldDto... tableFieldList) {
for (TableFieldDto newTfd : tableFieldList) {
if (!fieldList.contains(newTfd)) {
fieldList.add(newTfd);
}
}
}
public void removeField(String columnName) {
fieldList.remove(new TableFieldDto(columnName, null));
}
public void removePrimaryKeyField(String columnName) {
primaryKeyFieldList.remove(new TableFieldDto(columnName, null));
}
/**
* 用于历史表组装SQL用 前提条件:主表的字段与历史表一致,若不一致时,选择重载方法指定列名
*
* @param columnName
*/
public void addFieldBySelectMainTable(String columnName) {
fieldList.add(new TableFieldDto(columnName, columnName, true));
}
void addFieldBySelectMainTable(String... columnName) {
for (String column : columnName) {
fieldList.add(new TableFieldDto(column, column, true));
}
}
public void addFieldBySelectMainTable(String columnName, String specifyColumn) {
fieldList.add(new TableFieldDto(columnName, specifyColumn, true));
}
public void addUpdateField(String columnName, Object columnValue) {
if (columnValue != null) {//仅修改不为null的数据
updateFieldList.add(new TableFieldDto(columnName, columnValue));
}
}
private void addPrimaryKeyAndField(String columnName, Object columnValue) {
fieldList.add(new TableFieldDto(columnName, columnValue));
primaryKeyFieldList.add(new TableFieldDto(columnName, columnValue));
}
void addPrimaryKeyList(Relation relation) {
//原关系表Relation中通用的主键
if (relation.getFromRrn() > 0) {
addPrimaryKeyAndField("FROM_RRN", relation.getFromRrn()); //Relation的主键一
} else {
addFieldBySelectMainTable("FROM_RRN");
}
if (relation.getToRrn() > 0) {
addPrimaryKeyAndField("TO_RRN", relation.getToRrn()); //Relation的主键二
} else {
addFieldBySelectMainTable("TO_RRN");
}
if (StringUtils.isNotBlank(relation.getLinkType())) {
addPrimaryKeyAndField("LINK_TYPE", relation.getLinkType()); //Relation的主键三
} else {
addFieldBySelectMainTable("LINK_TYPE");
}
}
void addNormalFieldList(Relation relation) {
//原关系表Relation中通用的字段
addField("SEQUENCE_NUMBER", relation.getSequenceNumber());
addField("STATUS", relation.getStatus());
addField("ATTRIBUTE_DATA_1", relation.getAttributedata1());
addField("ATTRIBUTE_DATA_2", relation.getAttributedata2());
addField("ATTRIBUTE_DATA_3", relation.getAttributedata3());
addField("ATTRIBUTE_DATA_4", relation.getAttributedata4());
addField("ATTRIBUTE_DATA_5", relation.getAttributedata5());
addField("ATTRIBUTE_DATA_6", relation.getAttributedata6());
addField("ATTRIBUTE_DATA_7", relation.getAttributedata7());
}
void addUpdatePrimaryKeyList(Relation relation) {
//原关系表Relation中通用的主键
if (relation.getFromRrn() > 0) {
primaryKeyFieldList.add(new TableFieldDto("FROM_RRN", relation.getFromRrn())); //Relation的主键一
}
if (relation.getFromRrn() > 0) {
primaryKeyFieldList.add(new TableFieldDto("TO_RRN", relation.getToRrn())); //Relation的主键二
}
if (StringUtils.isNotBlank(relation.getLinkType())) {
primaryKeyFieldList.add(new TableFieldDto("LINK_TYPE", relation.getLinkType())); //Relation的主键三
}
}
/**
* 添加 Insert时需要插入的字段,以及字段对应的值。以便执行通用SQL
*
* @param relation
* @param transactionLog
*/
abstract void setInsertFields(Relation relation, TransactionLog transactionLog);
/**
* 添加 Update时需要修改的字段,以及字段对应的值。以便执行通用SQL
*
* @param relation
* @param transactionLog
*/
abstract void setUpdateFields(Relation relation, TransactionLog transactionLog);
/**
* 添加 Delete 时需要的主键字段,以及字段对应的值。以便执行通用SQL
*
* @param relation
* @param transactionLog
*/
abstract void setDeleteFields(Relation relation, TransactionLog transactionLog);
@Override
public String toString() {
return "SpecificTableDto{" + "tableName='" + tableName + '\'' + ", transId='" + transId + '\'' + ", " +
"historyTableName='" + historyTableName + '\'' + ", fieldList=" + fieldList + ", primaryKeyFieldList" +
"=" + primaryKeyFieldList + ", updateFieldList=" + updateFieldList + '}';
}
}