Commit 0666fbe8 authored by trumansdo's avatar trumansdo
Browse files

no message

parent 6d48937d
package com.ibeetl.admin.console.service; package com.ibeetl.admin.console.service;
import com.ibeetl.admin.core.entity.DictType;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Optional;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.beetl.sql.core.engine.PageQuery; import org.beetl.sql.core.engine.PageQuery;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -186,8 +188,9 @@ public class UserConsoleService extends CoreBaseService<CoreUser> { ...@@ -186,8 +188,9 @@ public class UserConsoleService extends CoreBaseService<CoreUser> {
CoreDict dict = dictService.findCoreDict(CoreDictType.USER_STATE, user.getState()); CoreDict dict = dictService.findCoreDict(CoreDictType.USER_STATE, user.getState());
userItem.setStateText(dict.getName()); userItem.setStateText(dict.getName());
if (StringUtils.isNotEmpty(user.getJobType1())) { String dictValue = Optional.ofNullable(user.getJobType1()).map(DictType::getValue).orElse(null);
dict = dictService.findCoreDict("job_type", user.getJobType1()); if (StringUtils.isNotEmpty(dictValue)) {
dict = dictService.findCoreDict(CoreDictType.JOB_TYPE, dictValue);
userItem.setJobType1Text(dict.getName()); userItem.setJobType1Text(dict.getName());
} }
......
...@@ -2,12 +2,11 @@ package processor; ...@@ -2,12 +2,11 @@ package processor;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.MapBuilder;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ClassUtil; import cn.hutool.core.util.ClassUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.ibeetl.admin.core.util.CacheUtil; import com.ibeetl.admin.core.util.cache.CacheUtil;
import java.beans.IntrospectionException; import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor; import java.beans.PropertyDescriptor;
import java.sql.ResultSet; import java.sql.ResultSet;
......
...@@ -21,7 +21,7 @@ public @interface ElColumn { ...@@ -21,7 +21,7 @@ public @interface ElColumn {
String name(); String name();
/** /**
* 该列的类型。{@link } * 该列的类型。{@link com.ibeetl.admin.core.util.enums.ElColumnType}
* @return * @return
* */ * */
String type(); String type();
......
...@@ -4,8 +4,10 @@ import cn.hutool.core.util.CharsetUtil; ...@@ -4,8 +4,10 @@ import cn.hutool.core.util.CharsetUtil;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.ibeetl.admin.core.conf.JasonConfig; import com.ibeetl.admin.core.conf.JasonConfig;
import com.ibeetl.admin.core.conf.beetl.handler.DateTypeHandler; import com.ibeetl.admin.core.conf.beetl.handler.DateTypeHandler;
import com.ibeetl.admin.core.conf.beetl.handler.DictTypeHandler;
import com.ibeetl.admin.core.conf.beetl.handler.ZonedDateTimeTypeHandler; import com.ibeetl.admin.core.conf.beetl.handler.ZonedDateTimeTypeHandler;
import com.ibeetl.admin.core.conf.beetl.processor.JsonBeanProcessor; import com.ibeetl.admin.core.conf.beetl.processor.JsonBeanProcessor;
import com.ibeetl.admin.core.entity.DictType;
import com.ibeetl.admin.core.rbac.DataAccess; import com.ibeetl.admin.core.rbac.DataAccess;
import com.ibeetl.admin.core.rbac.DataAccessFactory; import com.ibeetl.admin.core.rbac.DataAccessFactory;
import com.ibeetl.admin.core.service.CorePlatformService; import com.ibeetl.admin.core.service.CorePlatformService;
...@@ -104,6 +106,7 @@ public class BeetlConf { ...@@ -104,6 +106,7 @@ public class BeetlConf {
typeHandlerMap.remove(Date.class); typeHandlerMap.remove(Date.class);
typeHandlerMap.put(Date.class, new DateTypeHandler()); typeHandlerMap.put(Date.class, new DateTypeHandler());
typeHandlerMap.put(ZonedDateTime.class, new ZonedDateTimeTypeHandler()); typeHandlerMap.put(ZonedDateTime.class, new ZonedDateTimeTypeHandler());
typeHandlerMap.put(DictType.class, new DictTypeHandler());
/*拦截器*/ /*拦截器*/
manager.setInters(new Interceptor[] {new StarterDebugInterceptor()}); manager.setInters(new Interceptor[] {new StarterDebugInterceptor()});
}; };
......
package com.ibeetl.admin.core.conf.beetl.handler;
import cn.hutool.core.util.ObjectUtil;
import com.ibeetl.admin.core.entity.DictType;
import java.sql.SQLException;
import org.beetl.sql.core.mapping.type.JavaSqlTypeHandler;
import org.beetl.sql.core.mapping.type.TypeParameter;
/**
* 字典字段的映射处理器
* */
public class DictTypeHandler extends JavaSqlTypeHandler {
@Override
public Object getValue(TypeParameter typePara) throws SQLException {
if (ObjectUtil.isNull(typePara.getRs().getObject(typePara.getIndex()))) {
return null;
}
String val = typePara.getRs().getString(typePara.getIndex());
return new DictType(val);
}
}
...@@ -4,7 +4,7 @@ import cn.hutool.core.map.MapUtil; ...@@ -4,7 +4,7 @@ import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.ibeetl.admin.core.conf.beetl.resultmap.GridMapping; import com.ibeetl.admin.core.conf.beetl.resultmap.GridMapping;
import com.ibeetl.admin.core.util.CacheUtil; import com.ibeetl.admin.core.util.cache.CacheUtil;
import java.io.StringWriter; import java.io.StringWriter;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
......
...@@ -10,7 +10,7 @@ import com.ibeetl.admin.core.conf.beetl.resultmap.GridColumn; ...@@ -10,7 +10,7 @@ import com.ibeetl.admin.core.conf.beetl.resultmap.GridColumn;
import com.ibeetl.admin.core.conf.beetl.resultmap.GridHeader; import com.ibeetl.admin.core.conf.beetl.resultmap.GridHeader;
import com.ibeetl.admin.core.conf.beetl.resultmap.GridMapping; import com.ibeetl.admin.core.conf.beetl.resultmap.GridMapping;
import com.ibeetl.admin.core.conf.beetl.resultmap.GridRow; import com.ibeetl.admin.core.conf.beetl.resultmap.GridRow;
import com.ibeetl.admin.core.util.CacheUtil; import com.ibeetl.admin.core.util.cache.CacheUtil;
import java.beans.IntrospectionException; import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor; import java.beans.PropertyDescriptor;
import java.lang.reflect.Field; import java.lang.reflect.Field;
......
package com.ibeetl.admin.core.entity; package com.ibeetl.admin.core.entity;
import com.ibeetl.admin.core.annotation.ElColumn; import com.ibeetl.admin.core.annotation.ElColumn;
import com.ibeetl.admin.core.util.enums.ElColumnType;
import java.util.Date; import java.util.Date;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
...@@ -24,24 +25,24 @@ public class CoreUser extends BaseEntity { ...@@ -24,24 +25,24 @@ public class CoreUser extends BaseEntity {
@NotNull(message = "ID不能为空", groups = ValidateConfig.UPDATE.class) @NotNull(message = "ID不能为空", groups = ValidateConfig.UPDATE.class)
@SeqID(name = ORACLE_CORE_SEQ_NAME) @SeqID(name = ORACLE_CORE_SEQ_NAME)
@ElColumn(name = "ID", type = "string") @ElColumn(name = "ID", type = ElColumnType.STRING)
@AutoID @AutoID
protected Long id; protected Long id;
// 删除标识 // 删除标识
@JsonIgnore protected Integer delFlag = 0; @JsonIgnore protected Integer delFlag = 0;
// 创建时间 // 创建时间
@ElColumn(name = "创建时间", type = "date") @ElColumn(name = "创建时间", type = ElColumnType.DATE)
protected Date createTime; protected Date createTime;
// 登录名,编号 // 登录名,编号
@NotBlank(message = "用户编号不能为空", groups = ValidateConfig.ADD.class) @NotBlank(message = "用户编号不能为空", groups = ValidateConfig.ADD.class)
@Null(message = "用户编号不能为空", groups = ValidateConfig.UPDATE.class) @Null(message = "用户编号不能为空", groups = ValidateConfig.UPDATE.class)
@ElColumn(name = "用户名", type = "string") @ElColumn(name = "用户名", type = ElColumnType.STRING)
private String code; private String code;
// 用户姓名 // 用户姓名
@NotBlank(message = "用户名不能为空") @NotBlank(message = "用户名不能为空")
@ElColumn(name = "姓名", type = "string") @ElColumn(name = "姓名", type = ElColumnType.STRING)
private String name; private String name;
// 组织机构id // 组织机构id
...@@ -52,17 +53,17 @@ public class CoreUser extends BaseEntity { ...@@ -52,17 +53,17 @@ public class CoreUser extends BaseEntity {
@JsonIgnore private String password; @JsonIgnore private String password;
@Dict(type = CoreDictType.USER_STATE) @Dict(type = CoreDictType.USER_STATE)
@ElColumn(name = "状态", type = "string") @ElColumn(name = "状态", type = ElColumnType.STRING)
private String state; private String state;
// 扩展例子 // 扩展例子
@Dict(type = "job_type") @Dict(type = "job_type")
@ElColumn(name = "职位", type = "string") @ElColumn(name = "职位", type = ElColumnType.DICT)
private String jobType0; private DictType jobType0;
@Dict(type = "job_type") @Dict(type = "job_type")
@ElColumn(name = "职位", type = "string") @ElColumn(name = "职位", type = ElColumnType.DICT)
private String jobType1; private DictType jobType1;
private Date updateTime; private Date updateTime;
...@@ -125,19 +126,19 @@ public class CoreUser extends BaseEntity { ...@@ -125,19 +126,19 @@ public class CoreUser extends BaseEntity {
this.createTime = createTime; this.createTime = createTime;
} }
public String getJobType0() { public DictType getJobType0() {
return jobType0; return jobType0;
} }
public void setJobType0(String jobType0) { public void setJobType0(DictType jobType0) {
this.jobType0 = jobType0; this.jobType0 = jobType0;
} }
public String getJobType1() { public DictType getJobType1() {
return jobType1; return jobType1;
} }
public void setJobType1(String jobType1) { public void setJobType1(DictType jobType1) {
this.jobType1 = jobType1; this.jobType1 = jobType1;
} }
......
package com.ibeetl.admin.core.entity;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 用于数据库表的字典字段映射到本对象中的value字段<br>
* pojo中字典字段必须使用该类定义<br>
* 处理最终的字典值由{@link com.ibeetl.admin.core.service.CoreBaseService#processDictField} 方法提供
*/
@Data
@NoArgsConstructor
public class DictType {
private String value;
private String name;
private String type;
public DictType(String value) {
this.value = value;
}
public DictType(String type, String value) {
this(value);
this.type = type;
}
}
package com.ibeetl.admin.core.service; package com.ibeetl.admin.core.service;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ClassUtil;
import cn.hutool.core.util.ReflectUtil;
import cn.hutool.core.util.StrUtil;
import com.ibeetl.admin.core.entity.DictType;
import com.ibeetl.admin.core.util.AnnotationUtil;
import com.ibeetl.admin.core.util.FileDownloadUtil;
import com.ibeetl.admin.core.util.cache.DictCacheUtil;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType; import java.lang.reflect.ParameterizedType;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional;
import org.beetl.sql.core.SQLManager; import org.beetl.sql.core.SQLManager;
import org.beetl.sql.core.TailBean; import org.beetl.sql.core.TailBean;
import org.beetl.sql.core.engine.PageQuery;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import com.ibeetl.admin.core.annotation.Dict; import com.ibeetl.admin.core.annotation.Dict;
...@@ -195,4 +211,33 @@ public class CoreBaseService<T> { ...@@ -195,4 +211,33 @@ public class CoreBaseService<T> {
c = c.getSuperclass(); c = c.getSuperclass();
} while (c != TailBean.class); } while (c != TailBean.class);
} }
public void processObjectsDictField(PageQuery pageQuery){
processObjectsDictField(pageQuery.getList());
}
public void processObjectsDictField(Collection collection){
for (Object o : collection) {
processDictField(o);
}
}
public void processDictField(Object object) {
Field[] fields = ReflectUtil.getFields(object.getClass());
for (Field field : fields) {
Class<?> fieldDeclaringClass = field.getType();
if (!fieldDeclaringClass.getCanonicalName().equals(DictType.class.getCanonicalName())) {
continue;
}
Dict dictAnnotation = field.getDeclaredAnnotation(Dict.class);
String type = dictAnnotation.type();
DictType dictType = (DictType) ReflectUtil.getFieldValue(object, field);
if (dictType == null || StrUtil.isBlank(dictType.getValue())) {
continue;
}
DictType key = new DictType(type, dictType.getValue());
dictType = DictCacheUtil.get(key);
ReflectUtil.setFieldValue(object, field, dictType);
}
}
} }
...@@ -19,7 +19,7 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -19,7 +19,7 @@ import org.springframework.transaction.annotation.Transactional;
@Service @Service
@Transactional @Transactional
public class CoreUserService { public class CoreUserService extends CoreBaseService {
@Autowired CoreUserDao userDao; @Autowired CoreUserDao userDao;
@Autowired CoreOrgDao orgDao; @Autowired CoreOrgDao orgDao;
...@@ -72,10 +72,12 @@ public class CoreUserService { ...@@ -72,10 +72,12 @@ public class CoreUserService {
} }
public PageQuery<CoreUser> getAllUsers(@NotNull Integer page, @NotNull Integer limit) { public PageQuery<CoreUser> getAllUsers(@NotNull Integer page, @NotNull Integer limit) {
return sqlManagerBaseDao PageQuery<CoreUser> pageQuery = sqlManagerBaseDao
.getSQLManager() .getSQLManager()
.lambdaQuery(CoreUser.class) .lambdaQuery(CoreUser.class)
.page(page, limit); .page(page, limit);
processObjectsDictField(pageQuery);
return pageQuery;
} }
public CoreUser getUserByCode(String userName) { public CoreUser getUserByCode(String userName) {
......
package com.ibeetl.admin.core.util;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
@Component
public class SpringUtil {
@Autowired private ApplicationContext applicationContext;
private static SpringUtil springUtil;
@PostConstruct
public void init() {
springUtil=this;
springUtil.applicationContext = this.applicationContext;
}
public static ApplicationContext getApplicationContext() {
return springUtil.applicationContext;
}
public static <T> T getBean(Class<T> cls, Object... args) {
return getApplicationContext().getBean(cls, args);
}
public static <T> T getBean(Class<T> cls) {
return getApplicationContext().getBean(cls);
}
}
package com.ibeetl.admin.core.util; package com.ibeetl.admin.core.util.cache;
import com.github.benmanes.caffeine.cache.Cache; import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine; import com.github.benmanes.caffeine.cache.Caffeine;
......
package com.ibeetl.admin.core.util.cache;
import cn.hutool.core.lang.Assert;
import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import com.ibeetl.admin.core.entity.CoreDict;
import com.ibeetl.admin.core.entity.DictType;
import com.ibeetl.admin.core.service.CoreDictService;
import com.ibeetl.admin.core.util.SpringUtil;
import java.util.ArrayList;
import java.util.List;
public class DictCacheUtil {
private static final Cache<String, Object> CACHE =
Caffeine.newBuilder().maximumSize(1024).recordStats().build();
public static DictType get(DictType dictType) {
checkKey(dictType);
CoreDictService bean = SpringUtil.getBean(CoreDictService.class);
return (DictType)
CACHE.get(
getKey(dictType),
key -> {
CoreDict coreDict = bean.findCoreDict(dictType.getType(), dictType.getValue());
return convertToDictType(coreDict);
});
}
public static List<DictType> get(String type) {
Assert.notBlank(type);
CoreDictService bean = SpringUtil.getBean(CoreDictService.class);
return (List<DictType>)
CACHE.get(
type,
key -> {
List<CoreDict> coreDictList = bean.findAllByType(type);
return convertToDictTypeList(coreDictList);
});
}
public static String getKey(DictType dictType) {
return dictType.getType() + ":" + dictType.getValue();
}
public static void checkKey(DictType dictType) {
Assert.notNull(dictType);
Assert.notBlank(dictType.getType(), "dict type can't is blank.");
Assert.notBlank(dictType.getValue(), "dict value can't is blank.");
}
public static DictType convertToDictType(CoreDict coreDict) {
DictType dictType = new DictType();
dictType.setType(coreDict.getType());
dictType.setValue(coreDict.getValue());
dictType.setName(coreDict.getName());
return dictType;
}
public static List<DictType> convertToDictTypeList(List<CoreDict> coreDictList) {
Assert.notNull(coreDictList);
List<DictType> dictTypeList = new ArrayList<>(coreDictList.size());
for (CoreDict coreDict : coreDictList) {
dictTypeList.add(convertToDictType(coreDict));
}
return dictTypeList;
}
}
...@@ -3,6 +3,7 @@ package com.ibeetl.admin.core.util.enums; ...@@ -3,6 +3,7 @@ package com.ibeetl.admin.core.util.enums;
/** @author : xiandafu */ /** @author : xiandafu */
public class CoreDictType { public class CoreDictType {
public static final String JOB_TYPE = "job_type";
public static final String ORG_TYPE = "org_type"; public static final String ORG_TYPE = "org_type";
public static final String USER_STATE = "user_state"; public static final String USER_STATE = "user_state";
public static final String DEL_FLAG = "del_flag"; public static final String DEL_FLAG = "del_flag";
......
package com.ibeetl.admin.core.util.enums;
import com.ibeetl.admin.core.annotation.ElColumn;
/** 注解{@link ElColumn#type()} 字段的常量值 */
public interface ElColumnType {
/** 前端页面输入框 */
String STRING = "string";
/** 前端页面下拉选择器 */
String DICT = "dict";
/** 前端页面的日期选择器 */
String DATE = "date";
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment