package com.common.core.utils;
|
|
import com.alibaba.fastjson.JSONObject;
|
import com.common.core.constant.Constants;
|
import com.common.core.domain.BaseModel;
|
import com.common.security.utils.SecurityUtils;
|
import com.jfinal.plugin.activerecord.Model;
|
import com.jfinal.plugin.activerecord.TableMapping;
|
import lombok.extern.slf4j.Slf4j;
|
|
import java.lang.reflect.Field;
|
import java.math.BigDecimal;
|
import java.time.*;
|
import java.util.Date;
|
import java.util.Map;
|
import java.util.Set;
|
|
/**
|
* @Author: 廖振钦
|
* @description: ModelUtils
|
* @date 2022-01-03:10:36
|
* */
|
@Slf4j
|
public class ModelUtils {
|
|
public static <T extends BaseModel> T MapToModel(Map<String, Object> map, T t){
|
for(String key : map.keySet()){
|
t.set(key, map.get(key));
|
}
|
return t;
|
}
|
|
public static <T extends BaseModel> T ObjectToModel(Object object, T t) {
|
Field[] declaredFields = object.getClass().getDeclaredFields();
|
for (int i = 0; i < declaredFields.length; i++) {
|
String name = declaredFields[i].getName();
|
Field f = declaredFields[i];
|
f.setAccessible(true);
|
try {
|
t.set(name, f.get(object));
|
} catch (IllegalAccessException e) {
|
log.error(e.getMessage(), e);
|
}
|
}
|
return t;
|
}
|
|
public static <T extends BaseModel> T JsonToModel(JSONObject json, T t) {
|
for(String key : json.keySet()){
|
if(json.get(key)==null){
|
continue;
|
}
|
if(key.equalsIgnoreCase("dataid")){
|
t.set("id", json.get(key));
|
}else if(isPrimitive(json.get(key).getClass())){
|
if(recordAttrHas(BeanHelper.propertyToColumn(key),t.getClass())){
|
t.set(BeanHelper.propertyToColumn(key), json.get(key));
|
}else if(recordAttrHas(key,t.getClass())){
|
t.set(key, json.get(key));
|
}
|
}else {
|
if(recordAttrHas(BeanHelper.propertyToColumn(key),t.getClass())){
|
t.set(BeanHelper.propertyToColumn(key), JSONObject.toJSONString(json.get(key)));
|
}else if(recordAttrHas(key,t.getClass())){
|
t.set(key, JSONObject.toJSONString(json.get(key)));
|
}
|
}
|
}
|
return t;
|
}
|
|
private static Boolean recordAttrHas(String columnName,Class<? extends Model> clz){
|
Set<String> names = TableMapping.me().getTable(clz).getColumnNameSet();
|
if(names.contains(columnName)){
|
return true;
|
}
|
return false;
|
}
|
/**
|
* 基本数据类型和String类型判断
|
*
|
* @param clz
|
* @return
|
*/
|
public static boolean isPrimitive(Class<?> clz) {
|
try {
|
if (String.class.isAssignableFrom(clz) || Date.class.isAssignableFrom(clz)|| BigDecimal.class.isAssignableFrom(clz) || LocalDateTime.class.isAssignableFrom(clz)
|
|| LocalDate.class.isAssignableFrom(clz) || LocalTime.class.isAssignableFrom(clz) || Year.class.isAssignableFrom(clz)
|
|| YearMonth.class.isAssignableFrom(clz) || Month.class.isAssignableFrom(clz) || clz.isPrimitive()) {
|
return true;
|
} else {
|
return ((Class) clz.getField("TYPE").get(null)).isPrimitive();
|
}
|
} catch (Exception e) {
|
return false;
|
}
|
}
|
|
/**
|
* 设置公共信息
|
* @param baseModel
|
* @param action
|
*/
|
public static void generateCommonInfo(BaseModel baseModel,String action){
|
String appid = SecurityUtils.byId();
|
if (action.equals(Constants.ACTION_CREATE)) {
|
baseModel.setCreateBy(appid);
|
baseModel.setCreateTime(DateUtils.now());
|
baseModel.setUpdateTime(DateUtils.now());
|
baseModel.setUpdateBy(appid);
|
baseModel.setIsDelete(0);
|
}else if(action.equals(Constants.ACTION_UPDATE)){
|
baseModel.setUpdateTime(DateUtils.now());
|
baseModel.setUpdateBy(appid);
|
}else {
|
baseModel.setUpdateTime(new Date());
|
baseModel.setUpdateBy(appid);
|
}
|
}
|
}
|