import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import net.dreamlu.mica.core.utils.$;
import org.apache.commons.lang.StringUtils;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;/**
* canal rabbitmq 消息解析成dml
*
* @author : Lee
* @date : 2021-01-04*/@Slf4j
@AllArgsConstructorpublic class MysqlDmlFieldData extends LinkedHashMap{private MysqlDmlFieldData(Mapdata) {
super();
super.putAll(data);
}public staticMysqlDmlFieldData fromJsonString(String json) {return new MysqlDmlFieldData($.readJsonAsMap(json, String.class, Object.class));
}publicString getTable() {return super.containsKey("table") ? (String) super.get("table") : StringUtils.EMPTY;
}publicString getType() {return super.containsKey("type") ? (String) super.get("type") : StringUtils.EMPTY;
}publicString getDmlSql() {
String type= this.getType();switch(type) {case "INSERT":returngetInsertSql();case "UPDATE":returngetUpdateSql();default:
log.warn("不支持该DML操作type:", type);
}return "";
}publicString getInsertSql() {
String insertSql= "insert into" + getTable() +insColAndVal();returninsertSql;
}publicString getUpdateSql() {
String updateSql= "update" + getTable() + "set" +updColAndVal();returnupdateSql;
}public MapgetData() {
String json= $.toJson(super.get("data"));return $.readJsonAsList(json, Map.class).get(0);
}publicString updColAndVal() {
String updColAndVal= "";
Map dataMap = this.getData();for(String key : dataMap.keySet()) {if($.equalsSafe(key, getPkNames())) {continue;
}
updColAndVal+= key + "='" + dataMap.get(key) + "',";
}
updColAndVal= StringUtils.substringBeforeLast(updColAndVal, ",");
updColAndVal+= "where" + getPkNames() + "='" + dataMap.get(getPkNames()) + "'";returnupdColAndVal;
}publicString insColAndVal() {
Map sqlType = this.getData();
Set set =sqlType.keySet();
String columns= StringUtils.join(set.iterator(), ",");
String values= StringUtils.join(sqlType.values(), "','");return "(" + columns + ") values ('" + values + "')";
}publicString getPkNames() {
String json= $.toJson(super.get("pkNames"));
$.readJsonAsList(json, String.class);return $.readJsonAsList(json, String.class).get(0);
}publicString getMysqlType() {return super.containsKey("mysqlType") ? (String) super.get("mysqlType") : StringUtils.EMPTY;
}
}