@ -1,6 +1,12 @@
package com.ibeetl.admin.core.service ;
import cn.hutool.core.exceptions.UtilException ;
import cn.hutool.core.util.ObjectUtil ;
import cn.hutool.core.util.ReflectUtil ;
import cn.hutool.core.util.StrUtil ;
import com.ibeetl.admin.core.annotation.Dict ;
import com.ibeetl.admin.core.annotation.DictDeep ;
import com.ibeetl.admin.core.annotation.DictEnum ;
import com.ibeetl.admin.core.entity.CoreDict ;
import com.ibeetl.admin.core.util.PlatformException ;
import com.ibeetl.admin.core.util.enums.DelFlagEnum ;
@ -9,6 +15,7 @@ import org.beetl.sql.core.TailBean;
import javax.annotation.Resource ;
import java.lang.reflect.Field ;
import java.lang.reflect.Method ;
import java.lang.reflect.ParameterizedType ;
import java.util.ArrayList ;
import java.util.HashMap ;
@ -26,75 +33,80 @@ public class CoreBaseService<T> {
protected CoreDictService dictUtil ;
@Resource
protected SQLManager sqlManager ;
/ * *
* 根 据 id 查 询 对 象 , 如 果 主 键 ID 不 存 在
*
* @param id
* @return
* /
public T queryById ( Object id ) {
T t = sqlManager . single ( getCurrentEntityClassz ( ) , id ) ;
queryEntityAfter ( ( Object ) t ) ;
queryEntityAfter ( ( Object ) t ) ;
return t ;
}
/ * *
* 根 据 实 体 查 询 实 体 对 象 List
*
* @param paras
* @return
* /
public < T > List < T > queryObjectList ( Object paras ) {
if ( ! ( paras instanceof TailBean ) ) {
throw new PlatformException ( "指定的pojo" + paras . getClass ( ) + " 不能获取数据字典, 需要继承TailBean" ) ;
if ( ! ( paras instanceof TailBean ) ) {
throw new PlatformException ( "指定的pojo" + paras . getClass ( ) + " 不能获取数据字典, 需要继承TailBean" ) ;
}
return ( List < T > ) sqlManager . template ( paras ) ;
}
/ * *
* 根 据 实 体 查 询 实 体 对 象 List
*
* @param paras
* @return
* /
public < T > List < T > queryByObject ( Object paras , String orderBy ) {
if ( ! ( paras instanceof TailBean ) ) {
throw new PlatformException ( "指定的pojo" + paras . getClass ( ) + " 不能获取数据字典, 需要继承TailBean" ) ;
public < T > List < T > queryByObject ( Object paras , String orderBy ) {
if ( ! ( paras instanceof TailBean ) ) {
throw new PlatformException ( "指定的pojo" + paras . getClass ( ) + " 不能获取数据字典, 需要继承TailBean" ) ;
}
TailBean ext = ( TailBean ) paras ;
TailBean ext = ( TailBean ) paras ;
Class c = ext . getClass ( ) ;
return ( List < T > ) sqlManager . template ( c ) ;
}
/ * *
* 根 据 实 体 查 询 实 体 对 象 List
*
* @param paras
* @return
* /
public < T > T queryObject ( T paras ) {
if ( ! ( paras instanceof TailBean ) ) {
throw new PlatformException ( "指定的pojo" + paras . getClass ( ) + " 不能获取数据字典, 需要继承TailBean" ) ;
if ( ! ( paras instanceof TailBean ) ) {
throw new PlatformException ( "指定的pojo" + paras . getClass ( ) + " 不能获取数据字典, 需要继承TailBean" ) ;
}
List < T > list = ( List < T > ) sqlManager . template ( paras ) ;
T t = null ;
if ( list . size ( ) > 0 ) {
t = list . get ( 0 ) ;
if ( list . size ( ) > 0 ) {
t = list . get ( 0 ) ;
}
return t ;
}
/ * *
* 根 据 实 体 或 map 查 询 List
*
* @param paras
* @return
* /
public < T > List < T > queryByObject ( Class c , Object paras , String orderBy ) {
public < T > List < T > queryByObject ( Class c , Object paras , String orderBy ) {
return ( List < T > ) sqlManager . template ( c ) ;
}
/ * *
* 根 据 id 查 询
*
* @param classz 返 回 的 对 象 类 型
* @param id 主 键 id
* @return
@ -107,6 +119,7 @@ public class CoreBaseService<T> {
/ * *
* 新 增 一 条 数 据
*
* @param model 实 体 类
* @return
* /
@ -116,21 +129,23 @@ public class CoreBaseService<T> {
/ * *
* 新 增 一 条 数 据 后 将 ID 存 入 实 体
*
* @param model 实 体 类
* @return
* /
public boolean insert ( T model ) {
return sqlManager . insert ( model ) > 0 ;
return sqlManager . insert ( model ) > 0 ;
}
/ * *
* 批 量 新 增 数 据
*
* @param list 实 体 集 合
* @return
* /
public boolean saveBatch ( List < T > list ) {
if ( list . size ( ) > 0 ) {
return sqlManager . insertBatch ( list . get ( 0 ) . getClass ( ) , list ) . length > 0 ;
public boolean saveBatch ( List < T > list ) {
if ( list . size ( ) > 0 ) {
return sqlManager . insertBatch ( list . get ( 0 ) . getClass ( ) , list ) . length > 0 ;
} else {
return false ;
}
@ -138,20 +153,23 @@ public class CoreBaseService<T> {
/ * *
* 批 量 新 增 数 据 后 将 ID 存 入 实 体
*
* @param list 实 体 集 合
* @return
* /
public boolean insertBatch ( List < T > list ) {
public boolean insertBatch ( List < T > list ) {
return insertBatch ( list , true ) ;
}
/ * *
* 批 量 新 增 数 据 后 将 ID 存 入 实 体
*
* @param list 实 体 集 合
* @return
* /
public boolean insertBatch ( List < T > list , Boolean autoDbAssignKey ) {
if ( list . size ( ) > 0 ) {
return sqlManager . insertBatch ( list . get ( 0 ) . getClass ( ) , list ) . length > 0 ;
public boolean insertBatch ( List < T > list , Boolean autoDbAssignKey ) {
if ( list . size ( ) > 0 ) {
return sqlManager . insertBatch ( list . get ( 0 ) . getClass ( ) , list ) . length > 0 ;
} else {
return false ;
}
@ -159,6 +177,7 @@ public class CoreBaseService<T> {
/ * *
* 删 除 数 据 ( 一 般 为 逻 辑 删 除 , 更 新 del_flag 字 段 为 1 )
*
* @param ids
* @return
* /
@ -188,20 +207,22 @@ public class CoreBaseService<T> {
map . put ( "id" , id ) ;
map . put ( "delFlag" , DelFlagEnum . DELETED . getValue ( ) ) ;
int ret = sqlManager . updateTemplateById ( getCurrentEntityClassz ( ) , map ) ;
return ret = = 1 ;
return ret = = 1 ;
}
public boolean deleteById ( Long id ) {
Map map = new HashMap ( ) ;
// always id,delFlag for pojo
map . put ( "id" , id ) ;
map . put ( "delFlag" , DelFlagEnum . DELETED . getValue ( ) ) ;
int ret = sqlManager . updateTemplateById ( getCurrentEntityClassz ( ) , map ) ;
return ret = = 1 ;
Map map = new HashMap ( ) ;
// always id,delFlag for pojo
map . put ( "id" , id ) ;
map . put ( "delFlag" , DelFlagEnum . DELETED . getValue ( ) ) ;
int ret = sqlManager . updateTemplateById ( getCurrentEntityClassz ( ) , map ) ;
return ret = = 1 ;
}
/ * *
* 根 据 id 删 除 数 据
*
* @param id 主 键 值
* @return
* /
@ -211,6 +232,7 @@ public class CoreBaseService<T> {
/ * *
* 根 据 id 删 除 数 据
*
* @param id 主 键 值
* @return
* /
@ -220,29 +242,32 @@ public class CoreBaseService<T> {
/ * *
* 更 新 , 只 更 新 不 为 空 的 字 段
*
* @param model
* @return
* /
public boolean updateTemplate ( T model ) {
return sqlManager . updateTemplateById ( model ) > 0 ;
return sqlManager . updateTemplateById ( model ) > 0 ;
}
/ * *
* 更 新 所 有 字 段
*
* @param model
* @return
* /
public boolean update ( T model ) {
return sqlManager . updateById ( model ) > 0 ;
return sqlManager . updateById ( model ) > 0 ;
}
/ * *
* 批 量 更 新 所 有 字 段
*
* @param list
* @return
* /
public boolean updateBatch ( List < T > list ) {
if ( list . size ( ) > 0 ) {
if ( list . size ( ) > 0 ) {
return sqlManager . updateByIdBatch ( list ) . length > 0 ;
} else {
return false ;
@ -251,21 +276,22 @@ public class CoreBaseService<T> {
/ * *
* 批 量 更 新 , 只 更 新 不 为 空 的 字 段
*
* @param list
* @return
* /
public boolean updateBatchTemplate ( List < T > list ) {
if ( list . size ( ) > 0 ) {
return sqlManager . updateBatchTemplateById ( list . get ( 0 ) . getClass ( ) , list ) . length > 0 ;
if ( list . size ( ) > 0 ) {
return sqlManager . updateBatchTemplateById ( list . get ( 0 ) . getClass ( ) , list ) . length > 0 ;
} else {
return false ;
}
}
/ * *
* 获 取 当 前 注 入 泛 型 T 的 类 型
*
* @return 具 体 类 型
* /
@SuppressWarnings ( "unchecked" )
@ -280,16 +306,16 @@ public class CoreBaseService<T> {
}
}
public void queryEntityAfter ( Object bean ) {
public void queryEntityAfter ( Object bean ) {
if ( bean = = null ) {
return ;
}
if ( ! ( bean instanceof TailBean ) ) {
throw new PlatformException ( "指定的pojo" + bean . getClass ( ) + " 不能获取数据字典, 需要继承TailBean" ) ;
if ( ! ( bean instanceof TailBean ) ) {
throw new PlatformException ( "指定的pojo" + bean . getClass ( ) + " 不能获取数据字典, 需要继承TailBean" ) ;
}
TailBean ext = ( TailBean ) bean ;
TailBean ext = ( TailBean ) bean ;
Class c = ext . getClass ( ) ;
do {
Field [ ] fields = c . getDeclaredFields ( ) ;
@ -297,26 +323,65 @@ public class CoreBaseService<T> {
if ( field . isAnnotationPresent ( Dict . class ) ) {
field . setAccessible ( true ) ;
Dict dict = field . getAnnotation ( Dict . class ) ;
try {
String display = "" ;
Object fieldValue = field . get ( ext ) ;
if ( fieldValue ! = null ) {
CoreDict dbDict = dict . type ( ) . contains ( "." ) ? dictUtil . findCoreDictByTable ( dict . type ( ) , fieldValue . toString ( ) ) : dictUtil . findCoreDict ( dict . type ( ) , fieldValue . toString ( ) ) ;
display = dbDict ! = null ? dbDict . getName ( ) : null ;
CoreDict dbDict = dict . type ( ) . contains ( "." ) ? dictUtil . findCoreDictByTable ( dict . type ( ) , fieldValue . toString ( ) ) : dictUtil . findCoreDict ( dict . type ( ) , fieldValue . toString ( ) ) ;
display = dbDict ! = null ? dbDict . getName ( ) : null ;
}
ext . set ( field . getName ( ) + dict . suffix ( ) , display ) ;
} catch ( Exception e ) {
e . printStackTrace ( ) ;
} finally {
field . setAccessible ( false ) ;
}
}
}
c = c . getSuperclass ( ) ;
} while ( c ! = TailBean . class ) ;
}
// 深度解析注解
if ( field . isAnnotationPresent ( DictDeep . class ) ) {
field . setAccessible ( true ) ;
try {
Object res = field . get ( ext ) ;
if ( res instanceof List ) {
queryListAfter ( ( List ) res ) ;
} else {
queryEntityAfter ( res ) ;
}
} catch ( Exception e ) {
e . printStackTrace ( ) ;
} finally {
field . setAccessible ( false ) ;
}
}
// 枚举自动转换中文
if ( field . isAnnotationPresent ( DictEnum . class ) ) {
field . setAccessible ( true ) ;
DictEnum dict = field . getAnnotation ( DictEnum . class ) ;
try {
String display = "" ;
Method methodByName = ReflectUtil . getMethodByName ( field . getType ( ) , "get" + StrUtil . upperFirst ( dict . value ( ) ) ) ;
Object enumValue = ReflectUtil . invoke ( field . get ( ext ) , methodByName ) ;
if ( ObjectUtil . isNotEmpty ( enumValue ) ) {
display = String . valueOf ( enumValue ) ;
}
ext . set ( field . getName ( ) + dict . suffix ( ) , display ) ;
} catch ( UtilException e ) {
throw new RuntimeException ( field . getName ( ) + " 缺少getter方法" ) ;
} catch ( Exception e ) {
e . printStackTrace ( ) ;
} finally {
field . setAccessible ( false ) ;
}
}
}
c = c . getSuperclass ( ) ;
} while ( c ! = TailBean . class ) ;
}
}