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

no message

parent 6d48937d
package com.ibeetl.admin.console.service;
import com.ibeetl.admin.core.entity.DictType;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import org.apache.commons.lang3.StringUtils;
import org.beetl.sql.core.engine.PageQuery;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -186,8 +188,9 @@ public class UserConsoleService extends CoreBaseService<CoreUser> {
CoreDict dict = dictService.findCoreDict(CoreDictType.USER_STATE, user.getState());
userItem.setStateText(dict.getName());
if (StringUtils.isNotEmpty(user.getJobType1())) {
dict = dictService.findCoreDict("job_type", user.getJobType1());
String dictValue = Optional.ofNullable(user.getJobType1()).map(DictType::getValue).orElse(null);
if (StringUtils.isNotEmpty(dictValue)) {
dict = dictService.findCoreDict(CoreDictType.JOB_TYPE, dictValue);
userItem.setJobType1Text(dict.getName());
}
......
......@@ -2,12 +2,11 @@ package processor;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.MapBuilder;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ClassUtil;
import cn.hutool.core.util.ObjectUtil;
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.PropertyDescriptor;
import java.sql.ResultSet;
......
......@@ -21,7 +21,7 @@ public @interface ElColumn {
String name();
/**
* 该列的类型。{@link }
* 该列的类型。{@link com.ibeetl.admin.core.util.enums.ElColumnType}
* @return
* */
String type();
......
......@@ -4,8 +4,10 @@ import cn.hutool.core.util.CharsetUtil;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ibeetl.admin.core.conf.JasonConfig;
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.processor.JsonBeanProcessor;
import com.ibeetl.admin.core.entity.DictType;
import com.ibeetl.admin.core.rbac.DataAccess;
import com.ibeetl.admin.core.rbac.DataAccessFactory;
import com.ibeetl.admin.core.service.CorePlatformService;
......@@ -104,6 +106,7 @@ public class BeetlConf {
typeHandlerMap.remove(Date.class);
typeHandlerMap.put(Date.class, new DateTypeHandler());
typeHandlerMap.put(ZonedDateTime.class, new ZonedDateTimeTypeHandler());
typeHandlerMap.put(DictType.class, new DictTypeHandler());
/*拦截器*/
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;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
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.util.List;
import java.util.Map;
......
......@@ -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.GridMapping;
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.PropertyDescriptor;
import java.lang.reflect.Field;
......
package com.ibeetl.admin.core.entity;
import com.ibeetl.admin.core.annotation.ElColumn;
import com.ibeetl.admin.core.util.enums.ElColumnType;
import java.util.Date;
import javax.validation.constraints.NotBlank;
......@@ -24,24 +25,24 @@ public class CoreUser extends BaseEntity {
@NotNull(message = "ID不能为空", groups = ValidateConfig.UPDATE.class)
@SeqID(name = ORACLE_CORE_SEQ_NAME)
@ElColumn(name = "ID", type = "string")
@ElColumn(name = "ID", type = ElColumnType.STRING)
@AutoID
protected Long id;
// 删除标识
@JsonIgnore protected Integer delFlag = 0;
// 创建时间
@ElColumn(name = "创建时间", type = "date")
@ElColumn(name = "创建时间", type = ElColumnType.DATE)
protected Date createTime;
// 登录名,编号
@NotBlank(message = "用户编号不能为空", groups = ValidateConfig.ADD.class)
@Null(message = "用户编号不能为空", groups = ValidateConfig.UPDATE.class)
@ElColumn(name = "用户名", type = "string")
@ElColumn(name = "用户名", type = ElColumnType.STRING)
private String code;
// 用户姓名
@NotBlank(message = "用户名不能为空")
@ElColumn(name = "姓名", type = "string")
@ElColumn(name = "姓名", type = ElColumnType.STRING)
private String name;
// 组织机构id
......@@ -52,17 +53,17 @@ public class CoreUser extends BaseEntity {
@JsonIgnore private String password;
@Dict(type = CoreDictType.USER_STATE)
@ElColumn(name = "状态", type = "string")
@ElColumn(name = "状态", type = ElColumnType.STRING)
private String state;
// 扩展例子
@Dict(type = "job_type")
@ElColumn(name = "职位", type = "string")
private String jobType0;
@ElColumn(name = "职位", type = ElColumnType.DICT)
private DictType jobType0;
@Dict(type = "job_type")
@ElColumn(name = "职位", type = "string")
private String jobType1;
@ElColumn(name = "职位", type = ElColumnType.DICT)
private DictType jobType1;
private Date updateTime;
......@@ -125,19 +126,19 @@ public class CoreUser extends BaseEntity {
this.createTime = createTime;
}
public String getJobType0() {
public DictType getJobType0() {
return jobType0;
}
public void setJobType0(String jobType0) {
public void setJobType0(DictType jobType0) {
this.jobType0 = jobType0;
}
public String getJobType1() {
public DictType getJobType1() {
return jobType1;
}
public void setJobType1(String jobType1) {
public void setJobType1(DictType 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;
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.ParameterizedType;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import org.beetl.sql.core.SQLManager;
import org.beetl.sql.core.TailBean;
import org.beetl.sql.core.engine.PageQuery;
import org.springframework.beans.factory.annotation.Autowired;
import com.ibeetl.admin.core.annotation.Dict;
......@@ -195,4 +211,33 @@ public class CoreBaseService<T> {
c = c.getSuperclass();
} 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;
@Service
@Transactional
public class CoreUserService {
public class CoreUserService extends CoreBaseService {
@Autowired CoreUserDao userDao;
@Autowired CoreOrgDao orgDao;
......@@ -72,10 +72,12 @@ public class CoreUserService {
}
public PageQuery<CoreUser> getAllUsers(@NotNull Integer page, @NotNull Integer limit) {
return sqlManagerBaseDao
PageQuery<CoreUser> pageQuery = sqlManagerBaseDao
.getSQLManager()
.lambdaQuery(CoreUser.class)
.page(page, limit);
processObjectsDictField(pageQuery);
return pageQuery;
}
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.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;
/** @author : xiandafu */
public class CoreDictType {
public static final String JOB_TYPE = "job_type";
public static final String ORG_TYPE = "org_type";
public static final String USER_STATE = "user_state";
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