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 MapToModel(Map map, T t){ for(String key : map.keySet()){ t.set(key, map.get(key)); } return t; } public static 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 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 clz){ Set 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); } } }