package com.common.core.domain;
|
|
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.annotation.JSONType;
|
import com.common.core.exception.BizException;
|
import com.common.core.utils.DateUtils;
|
import com.common.security.utils.SecurityUtils;
|
import com.jfinal.plugin.activerecord.TableMapping;
|
import lombok.extern.slf4j.Slf4j;
|
import java.lang.reflect.Field;
|
import java.util.*;
|
import java.util.regex.Matcher;
|
import java.util.regex.Pattern;
|
|
/**
|
* @author 廖振钦
|
* @date 2022-01-29
|
*/
|
@Slf4j
|
@JSONType(ignores = {"tableName","id","isDelete","updateTime","createTime","createBy","updateBy"})
|
public abstract class EntityModel<M extends EntityModel> extends BaseModel<M> {
|
|
@Override
|
public boolean save(){
|
Field[] fields = getClass().getDeclaredFields();
|
for(Field f : fields){
|
f.setAccessible(true);
|
try {
|
Object o = f.get(this);
|
if(null != o) {
|
if (RecordAttrHas(humpToLine2(f.getName()))) {
|
set(humpToLine2(f.getName()), f.get(this));
|
} else if (RecordAttrHas(f.getName())) {
|
set(f.getName(), f.get(this));
|
}
|
}
|
} catch (IllegalAccessException e) {
|
|
}
|
}
|
String appid = SecurityUtils.byId();
|
setIsDelete(0);
|
setCreateTime(DateUtils.now());
|
setUpdateTime(DateUtils.now());
|
setCreateBy(appid);
|
setUpdateBy(appid);
|
return super.save();
|
}
|
|
@Override
|
public boolean update(){
|
Field[] fields = getClass().getDeclaredFields();
|
for(Field f : fields){
|
f.setAccessible(true);
|
if(!"id".equals(f.getName())) {
|
try {
|
Object o = f.get(this);
|
if(null != o) {
|
if (RecordAttrHas(humpToLine2(f.getName()))) {
|
set(humpToLine2(f.getName()), f.get(this));
|
} else if (RecordAttrHas(f.getName())) {
|
set(f.getName(), f.get(this));
|
}
|
}
|
} catch (IllegalAccessException e) {
|
log.error(e.getMessage(), e);
|
}
|
}
|
}
|
String appid = SecurityUtils.byId();
|
setIsDelete(0);
|
setCreateTime(DateUtils.now());
|
setUpdateTime(DateUtils.now());
|
setCreateBy(appid);
|
setUpdateBy(appid);
|
return super.update();
|
}
|
|
@Override
|
public boolean saveOrUpdate(){
|
if(null == getId()){
|
return this.save();
|
} else{
|
return this.update();
|
}
|
}
|
|
@Override
|
public M findFirst(String sql){
|
M m = super.findFirst(sql);
|
if(null == m){
|
return null;
|
}
|
RelectionField(m);
|
return m;
|
}
|
|
@Override
|
public M findFirst(String sql,Object...params){
|
M m = super.findFirst(sql, params);
|
if(null == m){
|
return null;
|
}
|
RelectionField(m);
|
return m;
|
}
|
|
@Override
|
public M findById(Object id){
|
return this.findFirst("select * from "+getTableName()+" where id = ? and is_delete='0'",id);
|
}
|
|
@Override
|
public List<M> findAll(){
|
List<M> list = super.findAll();
|
List<M> returnlist = new ArrayList<M>();
|
for(M m : list){
|
RelectionField(m);
|
returnlist.add(m);
|
}
|
return returnlist;
|
}
|
|
@Override
|
public List<M> find(String sql){
|
List<M> list = super.find(sql);
|
List<M> returnlist = Collections.emptyList();
|
for(M m : list){
|
RelectionField(m);
|
returnlist.add(m);
|
}
|
return returnlist;
|
}
|
|
@Override
|
public List<M> find(String sql,Object...params){
|
List<M> list = super.find(sql, params);
|
List<M> returnlist = new ArrayList<M>();
|
for(M m : list){
|
RelectionField(m);
|
returnlist.add(m);
|
}
|
return returnlist;
|
}
|
|
private void RelectionField(M m){
|
Field[] fields = m.getClass().getDeclaredFields();
|
for(Field f : fields) {
|
f.setAccessible(true);
|
try {
|
if(RecordAttrHas(humpToLine2(f.getName()))){
|
f.set(m, m.get(humpToLine2(f.getName())));
|
}else if(RecordAttrHas(f.getName())){
|
f.set(m, m.get(f.getName()));
|
}
|
} catch (IllegalAccessException e) {
|
|
}
|
}
|
}
|
|
|
|
|
private String humpToLine2(String str) {
|
Pattern humpPattern = Pattern.compile("[A-Z]");
|
Matcher matcher = humpPattern.matcher(str);
|
StringBuffer sb = new StringBuffer();
|
while (matcher.find()) {
|
matcher.appendReplacement(sb, "_" + matcher.group(0).toLowerCase());
|
}
|
matcher.appendTail(sb);
|
return sb.toString();
|
|
}
|
|
private String lineToHump(String str) {
|
Pattern linePattern = Pattern.compile("_(\\w)");
|
str = str.toLowerCase();
|
Matcher matcher = linePattern.matcher(str);
|
StringBuffer sb = new StringBuffer();
|
while (matcher.find()) {
|
matcher.appendReplacement(sb, matcher.group(1).toUpperCase());
|
}
|
matcher.appendTail(sb);
|
return sb.toString();
|
}
|
|
private Boolean RecordAttrHas(String columnName){
|
Set<String> names = TableMapping.me().getTable(this.getClass()).getColumnNameSet();
|
if(names.contains(columnName)){
|
return true;
|
}
|
return false;
|
}
|
|
public String json(){
|
return JSONObject.toJSONString(this);
|
}
|
|
public JSONObject jsonObject(){
|
return JSONObject.parseObject(json());
|
}
|
|
}
|