parameters = HttpKit.getRequestParameters();
msg = BeanUtil.parseMutiKey(parameters);
}
LogManager.me().executeLog(LogTaskFactory.bussinessLog(idUser, bussinessName, className, methodName, msg));
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/aop/PermissionAop.java
================================================
/**
* Copyright (c) 2015-2017, Chill Zhuang 庄骞 (smallchill@163.com).
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.enilu.material.aop;
import cn.enilu.material.bean.core.Permission;
import cn.enilu.material.shiro.check.PermissionCheckManager;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import javax.naming.NoPermissionException;
import java.lang.reflect.Method;
/**
* AOP 权限自定义检查
*/
@Aspect
@Component
public class PermissionAop {
@Pointcut(value = "@annotation(cn.enilu.material.bean.core.Permission)")
private void cutPermission() {
}
@Around("cutPermission()")
public Object doPermission(ProceedingJoinPoint point) throws Throwable {
MethodSignature ms = (MethodSignature) point.getSignature();
Method method = ms.getMethod();
Permission permission = method.getAnnotation(Permission.class);
Object[] permissions = permission.value();
if (permissions == null || permissions.length == 0) {
//检查全体角色
boolean result = PermissionCheckManager.checkAll();
if (result) {
return point.proceed();
} else {
throw new NoPermissionException();
}
} else {
//检查指定角色
boolean result = PermissionCheckManager.check(permissions);
if (result) {
return point.proceed();
} else {
throw new NoPermissionException();
}
}
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/constant/Const.java
================================================
package cn.enilu.material.bean.constant;
/**
* 系统常量
*
* @author fengshuonan
* @date 2017年2月12日 下午9:42:53
*/
public interface Const {
long SYSTEM_USER_ID=-1;
/**
* 用户密码加密key
*/
String CRYPT_DES_KEY = "sc123456";
/**
* 系统默认的管理员密码
*/
String DEFAULT_PWD = "111111";
/**
* 管理员角色的名字
*/
String ADMIN_NAME = "administrator";
/**
* 管理员id
*/
Integer ADMIN_ID = 1;
/**
* 超级管理员角色id
*/
Integer ADMIN_ROLE_ID = 1;
/**
* 接口文档的菜单名
*/
String API_MENU_NAME = "接口文档";
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/constant/cache/Cache.java
================================================
package cn.enilu.material.bean.constant.cache;
/**
* 所有缓存名称的集合
*
* @author fengshuonan
* @date 2017-04-24 21:56
*/
public interface Cache {
/**
* 常量缓存
*/
String CONSTANT = "CONSTANT";
String APPLICATION = "APPLICATION";
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/constant/cache/CacheKey.java
================================================
package cn.enilu.material.bean.constant.cache;
/**
* 缓存的key集合
*
* @author fengshuonan
* @date 2017-04-25 9:37
*/
public interface CacheKey {
/**
* ConstantFactory中的缓存
*/
String ROLES_NAME = "roles_name_";
String SINGLE_ROLE_NAME = "single_role_name_";
String SINGLE_ROLE_TIP = "single_role_tip_";
String DEPT_NAME = "dept_name_";
String DICT_NAME = "dict_name_";
String DICT = "dict_";
String COURSE_NAME = "course_name_";
String ORG_NAME = "org_name_";
String DIC_ALL = "dic_all_";
String CFG = "cfg_";
String MENU_NAME = "menu_name_" ;
String SYS_USER_NAME = "SYS_USER_NAME" ;
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/constant/factory/PageFactory.java
================================================
package cn.enilu.material.bean.constant.factory;
import cn.enilu.material.bean.constant.state.Order;
import cn.enilu.material.utils.HttpKit;
import cn.enilu.material.utils.StringUtils;
import cn.enilu.material.bean.vo.query.Page;
import cn.enilu.material.utils.ToolUtil;
import javax.servlet.http.HttpServletRequest;
/**
* BootStrap Table默认的分页参数创建
*
* @author fengshuonan
* @date 2017-04-05 22:25
*/
public class PageFactory {
public Page defaultPage() {
HttpServletRequest request = HttpKit.getRequest();
//每页多少条数据
int limit = Integer.valueOf(request.getParameter("limit"));
String pageNum = request.getParameter("page");
//每页的偏移量(本页当前有多少条)
int offset = 0;
if(StringUtils.isNotEmpty(pageNum)){
offset = (Integer.valueOf(pageNum)-1)*limit;
}else {
offset = Integer.valueOf(request.getParameter("offset"));
}
//排序字段名称
String sort = request.getParameter("sort");
//asc或desc(升序或降序)
String order = request.getParameter("order");
if (ToolUtil.isEmpty(sort)) {
Page page = new Page<>((offset / limit + 1), limit);
page.setOpenSort(false);
return page;
} else {
Page page = new Page<>((offset / limit + 1), limit, sort);
if (Order.ASC.getDes().equals(order)) {
page.setAsc(true);
} else {
page.setAsc(false);
}
return page;
}
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/constant/package-info.java
================================================
/**
* Created on 2018/3/28 0028.
*
* @author enilu
*/
package cn.enilu.material.bean.constant;
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/constant/state/BizLogType.java
================================================
package cn.enilu.material.bean.constant.state;
/**
* 业务日志类型
*
* @author fengshuonan
* @Date 2017年1月22日 下午12:14:59
*/
public enum BizLogType {
ALL(0, null),//全部日志
BUSSINESS(1, "业务日志"),
EXCEPTION(2, "异常日志");
Integer val;
String message;
BizLogType(Integer val, String message) {
this.val = val;
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Integer getVal() {
return val;
}
public void setVal(Integer val) {
this.val = val;
}
public static String valueOf(Integer value) {
if (value == null) {
return null;
} else {
for (BizLogType bizLogType : BizLogType.values()) {
if (bizLogType.getVal().equals(value)) {
return bizLogType.getMessage();
}
}
return null;
}
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/constant/state/LogSucceed.java
================================================
package cn.enilu.material.bean.constant.state;
/**
* 业务是否成功的日志记录
*
* @author fengshuonan
* @Date 2017年1月22日 下午12:14:59
*/
public enum LogSucceed {
SUCCESS("成功"),
FAIL("失败");
String message;
LogSucceed(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/constant/state/LogType.java
================================================
package cn.enilu.material.bean.constant.state;
/**
* 日志类型
*
* @author fengshuonan
* @Date 2017年1月22日 下午12:14:59
*/
public enum LogType {
LOGIN("登录日志"),
LOGIN_FAIL("登录失败日志"),
EXIT("退出日志"),
EXCEPTION("异常日志"),
BUSSINESS("业务日志");
String message;
LogType(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/constant/state/ManagerStatus.java
================================================
package cn.enilu.material.bean.constant.state;
/**
* 管理员的状态
*
* @author fengshuonan
* @Date 2017年1月10日 下午9:54:13
*/
public enum ManagerStatus {
OK(1, "启用"), FREEZED(2, "冻结"), DELETED(3, "被删除");
int code;
String message;
ManagerStatus(int code, String message) {
this.code = code;
this.message = message;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public static String valueOf(Integer value) {
if (value == null) {
return "";
} else {
for (ManagerStatus ms : ManagerStatus.values()) {
if (ms.getCode() == value) {
return ms.getMessage();
}
}
return "";
}
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/constant/state/MenuStatus.java
================================================
package cn.enilu.material.bean.constant.state;
/**
* 菜单的状态
*
* @author fengshuonan
* @Date 2017年1月22日 下午12:14:59
*/
public enum MenuStatus {
ENABLE(1, "启用"),
DISABLE(0, "禁用");
int code;
String message;
MenuStatus(int code, String message) {
this.code = code;
this.message = message;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public static String valueOf(Integer status) {
if (status == null) {
return "";
} else {
for (MenuStatus s : MenuStatus.values()) {
if (s.getCode() == status) {
return s.getMessage();
}
}
return "";
}
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/constant/state/Order.java
================================================
package cn.enilu.material.bean.constant.state;
/**
* 数据库排序
*
* @author fengshuonan
* @Date 2017年5月31日20:48:41
*/
public enum Order {
ASC("asc"), DESC("desc");
private String des;
Order(String des) {
this.des = des;
}
public String getDes() {
return des;
}
public void setDes(String des) {
this.des = des;
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/core/BussinessLog.java
================================================
package cn.enilu.material.bean.core;
import cn.enilu.material.bean.dictmap.base.AbstractDictMap;
import cn.enilu.material.bean.dictmap.SystemDict;
import java.lang.annotation.*;
/**
* 标记需要做业务日志的方法
*
* @author fengshuonan
* @date 2017-03-31 12:46
*/
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface BussinessLog {
/**
* 业务的名称,例如:"修改菜单"
*/
String value() default "";
/**
* 被修改的实体的唯一标识,例如:菜单实体的唯一标识为"id"
*/
String key() default "id";
/**
* 字典(用于查找key的中文名称和字段的中文名称)
*/
Class extends AbstractDictMap> dict() default SystemDict.class;
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/core/Permission.java
================================================
package cn.enilu.material.bean.core;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 权限注解 用于检查权限 规定访问权限
*
* @example @Permission({roleID1,roleID2})
* @example @Permission
*/
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Permission {
String[] value() default {};
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/core/ShiroUser.java
================================================
package cn.enilu.material.bean.core;
import cn.enilu.material.bean.entity.system.User;
import cn.enilu.material.bean.vo.node.MenuNode;
import java.io.Serializable;
import java.util.List;
/**
* 自定义Authentication对象,使得Subject除了携带用户的登录名外还可以携带更多信息
*
* @author fengshuonan
* @date 2016年12月5日 上午10:26:43
*/
public class ShiroUser implements Serializable {
private static final long serialVersionUID = 1L;
private Long id; // 主键ID
private String account; // 账号
private String name; // 姓名
private Long deptId; // 部门id
private List roleList; // 角色集
private String deptName; // 部门名称
private List roleNames; // 角色名称集
private List roleCodes;//角色编码
private User profile;//用户详细资料
private List titles;//用户可用菜单资源
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Long getDeptId() {
return deptId;
}
public void setDeptId(Long deptId) {
this.deptId = deptId;
}
public List getRoleList() {
return roleList;
}
public void setRoleList(List roleList) {
this.roleList = roleList;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
public List getRoleNames() {
return roleNames;
}
public void setRoleNames(List roleNames) {
this.roleNames = roleNames;
}
public List getRoleCodes() {
return roleCodes;
}
public void setRoleCodes(List roleCodes) {
this.roleCodes = roleCodes;
}
public User getProfile() {
return profile;
}
public void setProfile(User profile) {
this.profile = profile;
}
public List getTitles() {
return titles;
}
public void setTitles(List titles) {
this.titles = titles;
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/dictmap/CfgDict.java
================================================
package cn.enilu.material.bean.dictmap;
import cn.enilu.material.bean.dictmap.base.AbstractDictMap;
/**
* 字典map
*
* @author fengshuonan
* @date 2017-05-06 15:43
*/
public class CfgDict extends AbstractDictMap {
@Override
public void init() {
put("cfgId","参数id");
put("cfgName","参数名称");
}
@Override
protected void initBeWrapped() {
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/dictmap/CommonDict.java
================================================
package cn.enilu.material.bean.dictmap;
import cn.enilu.material.bean.dictmap.base.AbstractDictMap;
public class CommonDict extends AbstractDictMap {
@Override
public void init() {
put("id","ID");
put("name","名称");
put("code","编码");
put("title","标题");
put("remark","备注");
put("descript","备注");
}
@Override
protected void initBeWrapped() {
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/dictmap/DeleteDict.java
================================================
package cn.enilu.material.bean.dictmap;
import cn.enilu.material.bean.dictmap.base.AbstractDictMap;
/**
* 用于删除业务的字典
*
* @author fengshuonan
* @date 2017-05-06 15:01
*/
public class DeleteDict extends AbstractDictMap {
@Override
public void init() {
put("roleId","角色名称");
put("deptId", "部门名称");
put("menuId", "菜单名称");
put("dictId", "字典名称");
put("noticeId", "标题");
}
@Override
protected void initBeWrapped() {
putFieldWrapperMethodName("roleId","getCacheObject");
putFieldWrapperMethodName("deptId","getCacheObject");
putFieldWrapperMethodName("menuId","getCacheObject");
putFieldWrapperMethodName("dictId","getCacheObject");
putFieldWrapperMethodName("noticeId","getCacheObject");
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/dictmap/DeptDict.java
================================================
package cn.enilu.material.bean.dictmap;
import cn.enilu.material.bean.dictmap.base.AbstractDictMap;
/**
* 部门的映射
*
* @author fengshuonan
* @date 2017-05-06 15:01
*/
public class DeptDict extends AbstractDictMap {
@Override
public void init() {
put("deptId", "部门名称");
put("id","部门名称");
put("num", "部门排序");
put("pid", "上级名称");
put("simplename", "部门简称");
put("fullname", "部门全称");
put("tips", "备注");
}
@Override
protected void initBeWrapped() {
putFieldWrapperMethodName("deptId", "getDeptName");
putFieldWrapperMethodName("pid", "getDeptName");
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/dictmap/DictMap.java
================================================
package cn.enilu.material.bean.dictmap;
import cn.enilu.material.bean.dictmap.base.AbstractDictMap;
/**
* 字典map
*
* @author fengshuonan
* @date 2017-05-06 15:43
*/
public class DictMap extends AbstractDictMap {
@Override
public void init() {
put("dictId","字典名称");
put("dictName","字典名称");
put("dictValues","字典内容");
}
@Override
protected void initBeWrapped() {
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/dictmap/LogDict.java
================================================
package cn.enilu.material.bean.dictmap;
import cn.enilu.material.bean.dictmap.base.AbstractDictMap;
/**
* 日志的字典
*
* @author fengshuonan
* @date 2017-05-06 15:01
*/
public class LogDict extends AbstractDictMap {
@Override
public void init() {
put("tips","备注");
}
@Override
protected void initBeWrapped() {
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/dictmap/MenuDict.java
================================================
package cn.enilu.material.bean.dictmap;
import cn.enilu.material.bean.dictmap.base.AbstractDictMap;
/**
* 菜单的字典
*
* @author fengshuonan
* @date 2017-05-06 15:01
*/
public class MenuDict extends AbstractDictMap {
@Override
public void init() {
put("menuId","菜单id");
put("id","菜单id");
put("code","菜单编号");
put("pcode","菜单父编号");
put("name","菜单名称");
put("icon","菜单图标");
put("url","url地址");
put("num","菜单排序号");
put("levels","菜单层级");
put("tips","备注");
put("status","菜单状态");
put("isopen","是否打开");
put("","");
}
@Override
protected void initBeWrapped() {
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/dictmap/NoticeMap.java
================================================
package cn.enilu.material.bean.dictmap;
import cn.enilu.material.bean.dictmap.base.AbstractDictMap;
/**
* 通知的映射
*
* @author fengshuonan
* @date 2017-05-06 15:01
*/
public class NoticeMap extends AbstractDictMap {
@Override
public void init() {
put("title", "标题");
put("content", "内容");
}
@Override
protected void initBeWrapped() {
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/dictmap/RoleDict.java
================================================
package cn.enilu.material.bean.dictmap;
import cn.enilu.material.bean.dictmap.base.AbstractDictMap;
/**
* 角色的字典
*
* @author fengshuonan
* @date 2017-05-06 15:01
*/
public class RoleDict extends AbstractDictMap {
@Override
public void init() {
put("roleId","角色名称");
put("num","角色排序");
put("pid","角色的父级");
put("name","角色名称");
put("deptid","部门名称");
put("tips","备注");
put("ids","资源名称");
}
@Override
protected void initBeWrapped() {
putFieldWrapperMethodName("pid","getSingleRoleName");
putFieldWrapperMethodName("deptid","getDeptName");
putFieldWrapperMethodName("roleId","getSingleRoleName");
putFieldWrapperMethodName("ids","getMenuNames");
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/dictmap/SystemDict.java
================================================
package cn.enilu.material.bean.dictmap;
import cn.enilu.material.bean.dictmap.base.AbstractDictMap;
/**
* 系统相关的字典
*
* @author fengshuonan
* @date 2017-05-06 15:48
*/
public class SystemDict extends AbstractDictMap {
@Override
public void init() {
}
@Override
protected void initBeWrapped() {
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/dictmap/TaskDict.java
================================================
package cn.enilu.material.bean.dictmap;
import cn.enilu.material.bean.dictmap.base.AbstractDictMap;
/**
* 字典map
*
* @author fengshuonan
* @date 2017-05-06 15:43
*/
public class TaskDict extends AbstractDictMap {
@Override
public void init() {
put("taskId","任务id");
put("name","任务名称");
}
@Override
protected void initBeWrapped() {
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/dictmap/UserDict.java
================================================
package cn.enilu.material.bean.dictmap;
import cn.enilu.material.bean.dictmap.base.AbstractDictMap;
/**
* 用户的字典
*
* @author fengshuonan
* @date 2017-05-06 15:01
*/
public class UserDict extends AbstractDictMap {
@Override
public void init() {
put("userId","账号");
put("avatar","头像");
put("account","账号");
put("name","名字");
put("birthday","生日");
put("sex","性别");
put("email","电子邮件");
put("phone","电话");
put("roleid","角色名称");
put("deptid","部门名称");
put("roleIds","角色名称集合");
}
@Override
protected void initBeWrapped() {
putFieldWrapperMethodName("sex","getSexName");
putFieldWrapperMethodName("deptid","getDeptName");
putFieldWrapperMethodName("roleid","getSingleRoleName");
putFieldWrapperMethodName("userId","getUserAccountById");
putFieldWrapperMethodName("roleIds","getRoleName");
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/dictmap/base/AbstractDictMap.java
================================================
package cn.enilu.material.bean.dictmap.base;
import java.util.HashMap;
/**
* 字典映射抽象类
*
* @author fengshuonan
* @date 2017-05-06 14:58
*/
public abstract class AbstractDictMap {
protected HashMap dictory = new HashMap<>();
protected HashMap fieldWarpperDictory = new HashMap<>();
public AbstractDictMap(){
put("id","主键id");
init();
initBeWrapped();
}
/**
* 初始化字段英文名称和中文名称对应的字典
*
* @author enilu.cn
* @Date 2017/5/9 19:39
*/
public abstract void init();
/**
* 初始化需要被包装的字段(例如:性别为1:男,2:女,需要被包装为汉字)
*
* @author enilu.cn
* @Date 2017/5/9 19:35
*/
protected abstract void initBeWrapped();
public String get(String key) {
return this.dictory.get(key);
}
public void put(String key, String value) {
this.dictory.put(key, value);
}
public String getFieldWarpperMethodName(String key){
return this.fieldWarpperDictory.get(key);
}
public void putFieldWrapperMethodName(String key,String methodName){
this.fieldWarpperDictory.put(key,methodName);
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/dto/UserDto.java
================================================
package cn.enilu.material.bean.dto;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
* 用户传输bean
*
* @author enilu.cn
* @Date 2017/5/5 22:40
*/
@Data
public class UserDto{
private Long id;
private String account;
private String password;
private String salt;
private String name;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birthday;
private Integer sex;
private String email;
private String phone;
private String roleid;
private Long deptid;
private Long eduorgid;
private Integer status;
private Date createtime;
private Integer version;
private String avatar;
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/entity/BaseEntity.java
================================================
package cn.enilu.material.bean.entity;
import lombok.Data;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import java.io.Serializable;
import java.util.Date;
/**
* Created on 2019/1/8 0002.
*
* @author enilu
*/
@MappedSuperclass
@Data
public abstract class BaseEntity implements Serializable {
@Id
@GeneratedValue
private Long id;
@CreatedDate
@Column(name = "create_time",columnDefinition="DATETIME COMMENT '创建时间/注册时间'")
private Date createTime;
@Column(name = "create_by",columnDefinition="bigint COMMENT '创建人'")
@CreatedBy
private Long createBy;
@LastModifiedDate
@Column(name = "modify_time",columnDefinition="DATETIME COMMENT '最后更新时间'")
private Date modifyTime;
@LastModifiedBy
@Column(name = "modify_by",columnDefinition="bigint COMMENT '最后更新人'")
private Long modifyBy;
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/entity/message/Message.java
================================================
package cn.enilu.material.bean.entity.message;
import cn.enilu.material.bean.entity.BaseEntity;
import lombok.Data;
import org.hibernate.annotations.Table;
import javax.persistence.Column;
import javax.persistence.Entity;
/**
* 历史消息
*/
@Data
@Entity(name="t_message")
@Table(appliesTo = "t_message",comment = "历史消息")
public class Message extends BaseEntity {
@Column(name="tpl_code",columnDefinition = "VARCHAR(32) COMMENT '模板编码'")
private String tplCode;
@Column(name="content",columnDefinition = "TEXT COMMENT '消息内容'")
private String content;
@Column(name="receiver",columnDefinition = "VARCHAR(64) COMMENT '接收者'")
private String receiver;
@Column(name="type",columnDefinition = "VARCHAR(32) COMMENT '消息类型,0:短信,1:邮件'")
private Integer type;
@Column(name="state",columnDefinition = "VARCHAR(32) COMMENT '消息类型,0:初始,1:成功,2:失败'")
private Integer state;
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/entity/message/MessageSender.java
================================================
package cn.enilu.material.bean.entity.message;
import cn.enilu.material.bean.entity.BaseEntity;
import lombok.Data;
import org.hibernate.annotations.Table;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.validation.constraints.NotBlank;
/**
* 消息发送者
*/
@Data
@Entity(name="t_message_sender")
@Table(appliesTo = "t_message_sender",comment = "消息发送者")
public class MessageSender extends BaseEntity {
@Column(name="name",columnDefinition = "VARCHAR(64) COMMENT '名称'")
@NotBlank(message = "名称并能为空")
private String name;
@Column(name="class_name",columnDefinition = "VARCHAR(64) COMMENT '发送类'")
@NotBlank(message = "发送类不能为空")
private String className;
@Column(name="tpl_code",columnDefinition = "VARCHAR(64) COMMENT '短信运营商模板编号'")
private String tplCode;
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/entity/message/MessageTemplate.java
================================================
package cn.enilu.material.bean.entity.message;
import cn.enilu.material.bean.entity.BaseEntity;
import lombok.Data;
import org.hibernate.annotations.Table;
import javax.persistence.*;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* 消息模板
*/
@Data
@Entity(name="t_message_template")
@Table(appliesTo = "t_message_template",comment = "消息模板")
public class MessageTemplate extends BaseEntity {
@Column(name="code",columnDefinition = "VARCHAR(32) COMMENT '编号'")
@NotBlank(message = "编号不能为空")
private String code;
@NotBlank(message = "标题不能为空")
@Column(name="title",columnDefinition = "VARCHAR(64) COMMENT '标题'")
private String title;
@NotBlank(message = "内容并能为空")
@Column(name="content",columnDefinition = "TEXT COMMENT '内容'")
private String content;
@Column(name="cond",columnDefinition = "VARCHAR(32) COMMENT '发送条件'")
private String cond;
@Column(name="id_message_sender",columnDefinition = "BIGINT COMMENT '发送者id'")
@NotNull(message = "发送器不能为空")
private Long idMessageSender;
@Column(name="type",columnDefinition = "VARCHAR(32) COMMENT '消息类型,0:短信,1:邮件'")
private Integer type;
@JoinColumn(name="id_message_sender", referencedColumnName = "id", columnDefinition = "BIGINT comment '发送者id'", insertable = false, updatable = false,foreignKey = @ForeignKey(name="none",value = ConstraintMode.NO_CONSTRAINT))
@ManyToOne(fetch = FetchType.EAGER)
private MessageSender messageSender;
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/entity/system/Cfg.java
================================================
package cn.enilu.material.bean.entity.system;
import cn.enilu.material.bean.entity.BaseEntity;
import lombok.Data;
import org.hibernate.annotations.Table;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.validation.constraints.NotBlank;
/**
* Created on 2018/4/2 0002.
*
* @author enilu
*/
@Entity(name="t_sys_cfg")
@Table(appliesTo = "t_sys_cfg",comment = "系统参数")
@Data
@EntityListeners(AuditingEntityListener.class)
public class Cfg extends BaseEntity {
@Column(name = "cfg_name",columnDefinition = "VARCHAR(256) COMMENT '参数名'")
@NotBlank(message = "参数名不能为空")
private String cfgName;
@Column(name = "cfg_value",columnDefinition = "VARCHAR(512) COMMENT '参数值'")
@NotBlank(message = "参数值不能为空")
private String cfgValue;
@Column(name = "cfg_desc",columnDefinition = "TEXT COMMENT '备注'")
private String cfgDesc;
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/entity/system/Dept.java
================================================
package cn.enilu.material.bean.entity.system;
import cn.enilu.material.bean.entity.BaseEntity;
import lombok.Data;
import org.hibernate.annotations.Table;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
/**
* Created on 2018/4/2 0002.
*
* @author enilu
*/
@Entity(name="t_sys_dept")
@Table(appliesTo = "t_sys_dept",comment = "部门")
@Data
@EntityListeners(AuditingEntityListener.class)
public class Dept extends BaseEntity {
@Column
private Integer num;
@Column
private Long pid;
@Column
private String pids;
@Column
private String simplename;
@Column
private String fullname;
@Column
private String tips;
@Column
private Integer version;
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/entity/system/Dict.java
================================================
package cn.enilu.material.bean.entity.system;
import cn.enilu.material.bean.entity.BaseEntity;
import lombok.Data;
import org.hibernate.annotations.Table;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
/**
* Created on 2018/4/2 0002.
*
* @author enilu
*/
@Entity(name="t_sys_dict")
@Table(appliesTo = "t_sys_dict",comment = "字典")
@Data
@EntityListeners(AuditingEntityListener.class)
public class Dict extends BaseEntity {
@Column(columnDefinition = "BIGINT COMMENT '字典组id'")
private Long pid;
@Column(columnDefinition = "VARCHAR(32) COMMENT '字典值'")
private String value;
@Column(columnDefinition = "VARCHAR(32) COMMENT '字典显示值'")
private String name;
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/entity/system/FileInfo.java
================================================
package cn.enilu.material.bean.entity.system;
import cn.enilu.material.bean.entity.BaseEntity;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Transient;
@Data
@Entity
@Table(name="t_sys_file_info")
public class FileInfo extends BaseEntity {
@Column
private String originalFileName;
@Column
private String realFileName;
@Transient
private String ablatePath;
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/entity/system/LoginLog.java
================================================
package cn.enilu.material.bean.entity.system;
import lombok.Data;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.Table;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.util.Date;
/**
* Created on 2018/4/2 0002.
*
* @author enilu
*/
@Entity(name="t_sys_login_log")
@Table(appliesTo = "t_sys_login_log",comment = "登录日志")
@Data
public class LoginLog {
@Id
@GeneratedValue
private Integer id;
@Column
private String logname;
@Column
private Integer userid;
@Column
private String succeed;
@Column
private String message;
@Column
private String ip;
@CreationTimestamp
@Column(name = "create_time",columnDefinition="DATETIME COMMENT '创建时间'")
private Date createTime;
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/entity/system/Menu.java
================================================
package cn.enilu.material.bean.entity.system;
import cn.enilu.material.bean.entity.BaseEntity;
import lombok.Data;
import org.hibernate.annotations.Table;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
/**
* Created on 2018/4/2 0002.
*
* @author enilu
*/
@Entity(name = "t_sys_menu")
@Table(appliesTo = "t_sys_menu",comment = "菜单")
@Data
@EntityListeners(AuditingEntityListener.class)
public class Menu extends BaseEntity {
@Column
private String code;
@Column
private String pcode;
@Column
private String pcodes;
@Column
private String name;
@Column
private String icon;
@Column
private String url;
@Column
private Integer num;
@Column
private Integer levels;
@Column
private Integer ismenu;
@Column
private String tips;
@Column
private Integer status;
@Column
private Integer isopen;
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/entity/system/Notice.java
================================================
package cn.enilu.material.bean.entity.system;
import cn.enilu.material.bean.entity.BaseEntity;
import lombok.Data;
import org.hibernate.annotations.Table;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
/**
* Created on 2018/4/2 0002.
*
* @author enilu
*/
@Entity(name="t_sys_notice")
@Table(appliesTo = "t_sys_notice",comment = "系统通知")
@Data
@EntityListeners(AuditingEntityListener.class)
public class Notice extends BaseEntity {
@Column
private String title;
@Column
private Integer type;
@Column
private String content;
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/entity/system/OperationLog.java
================================================
package cn.enilu.material.bean.entity.system;
import lombok.Data;
import org.hibernate.annotations.Table;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.util.Date;
/**
* Created on 2018/4/2 0002.
*
* @author enilu
*/
@Entity(name = "t_sys_operation_log")
@Table(appliesTo= "t_sys_operation_log",comment = "操作日志")
@Data
public class OperationLog {
@Id
@GeneratedValue
private Long id;
@Column
private String logtype;
@Column
private String logname;
@Column
private Integer userid;
@Column
private String classname;
@Column
private String method;
@Column(name="create_time")
private Date createTime;
@Column
private String succeed;
@Column(columnDefinition = "TEXT COMMENT '详细信息'")
private String message;
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/entity/system/Relation.java
================================================
package cn.enilu.material.bean.entity.system;
import lombok.Data;
import org.hibernate.annotations.Table;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
/**
* Created on 2018/4/2 0002.
*
* @author enilu
*/
@Entity(name="t_sys_relation")
@Table(appliesTo = "t_sys_relation",comment = "角色菜单关系")
@Data
public class Relation {
@Id
@GeneratedValue
private Long id;
@Column
private Long menuid;
@Column
private Long roleid;
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/entity/system/Role.java
================================================
package cn.enilu.material.bean.entity.system;
import cn.enilu.material.bean.entity.BaseEntity;
import lombok.Data;
import org.hibernate.annotations.Table;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
/**
* Created on 2018/4/2 0002.
*
* @author enilu
*/
@Entity(name="t_sys_role")
@Table(appliesTo = "t_sys_role",comment = "角色")
@Data
@EntityListeners(AuditingEntityListener.class)
public class Role extends BaseEntity {
@Column
private Integer num;
@Column
private Long pid;
@Column
private String name;
@Column
private Long deptid;
@Column
private String tips;
@Column
private Integer version;
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/entity/system/Task.java
================================================
package cn.enilu.material.bean.entity.system;
import cn.enilu.material.bean.entity.BaseEntity;
import lombok.Data;
import org.hibernate.annotations.Table;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.validation.constraints.NotBlank;
import java.util.Date;
@Table(appliesTo="t_sys_task",comment = "定时任务")
@Entity(name="t_sys_task")
@Data
@EntityListeners(AuditingEntityListener.class)
public class Task extends BaseEntity {
@Column(columnDefinition = "VARCHAR(50) COMMENT '任务名'")
@NotBlank(message = "任务名不能为空")
private String name;
@Column(name="job_group", columnDefinition = "VARCHAR(50) COMMENT '任务组名'")
private String jobGroup;
@Column(name="job_class", columnDefinition = "VARCHAR(255) COMMENT '执行类'")
@NotBlank(message = "执行类不能为空")
private String jobClass;
@Column(name="note", columnDefinition = "VARCHAR(255) COMMENT '任务说明'")
private String note;
@Column(name="cron", columnDefinition = "VARCHAR(50) COMMENT '定时规则'")
@NotBlank(message = "定时规则不能为空")
private String cron;
@Column(name="concurrent", columnDefinition = "TINYINT COMMENT '是否允许并发'")
private boolean concurrent;
@Column(name="data", columnDefinition = "TEXT COMMENT '执行参数'")
private String data;
@Column(name="exec_at", columnDefinition = "DateTime COMMENT '执行时间'")
private Date execAt;
@Column(name="exec_result", columnDefinition = "text COMMENT '执行结果'")
private String execResult;
@Column(name="disabled", columnDefinition = "TINYINT COMMENT '是否禁用'")
private boolean disabled;
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/entity/system/TaskLog.java
================================================
package cn.enilu.material.bean.entity.system;
import lombok.Data;
import org.hibernate.annotations.Table;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.util.Date;
/**
*
* User: Yao
* Date: 2017-06-22 11:12:48
*/
@Table(appliesTo="t_sys_task_log",comment = "定时任务日志")
@Entity(name="t_sys_task_log")
@Data
public class TaskLog{
public static final int EXE_FAILURE_RESULT = 0;
public static final int EXE_SUCCESS_RESULT = 1;
@Id
@GeneratedValue
private Long id;
@Column
private Long idTask;
@Column(columnDefinition = "VARCHAR(50) COMMENT '任务名'")
private String name;
@Column(columnDefinition = "DATETime COMMENT '执行时间'")
private Date execAt;
@Column(columnDefinition = "INTEGER COMMENT '执行结果(成功:1、失败:0)'")
private int execSuccess;
@Column(columnDefinition = "VARCHAR(500) COMMENT '抛出异常'")
private String jobException;
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/entity/system/User.java
================================================
package cn.enilu.material.bean.entity.system;
import cn.enilu.material.bean.entity.BaseEntity;
import lombok.Data;
import org.hibernate.annotations.Table;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import java.util.Date;
/**
* Created on 2018/4/2 0002.
*
* @author enilu
*/
@Entity(name = "t_sys_user")
@Table(appliesTo = "t_sys_user",comment = "系统管理员")
@Data
@EntityListeners(AuditingEntityListener.class)
public class User extends BaseEntity {
@Column
private String avatar="";
@Column
private String account;
@Column
private String password;
@Column
private String salt;
@Column
private String name;
@Column
private Date birthday;
@Column
private Integer sex;
@Column
private String email;
@Column
private String phone;
@Column
private String roleid;
@Column
private Long deptid;
@Column
private Integer status;
@Column
private Integer version;
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/entity/test/Boy.java
================================================
package cn.enilu.material.bean.entity.test;
import cn.enilu.material.bean.entity.BaseEntity;
import lombok.Data;
import org.hibernate.annotations.Table;
import javax.persistence.Column;
import javax.persistence.Entity;
/**
* 该实体用于测试生成代码
*/
@Entity(name="t_test_boy")
@Table(appliesTo = "t_test_boy",comment = "男孩")
@Data
public class Boy extends BaseEntity {
@Column(columnDefinition = "VARCHAR(32) COMMENT '姓名'")
private String name;
@Column(columnDefinition = "INT COMMENT '年龄'")
private Integer age;
@Column(columnDefinition = "VARCHAR(12) COMMENT '生日'")
private String birthday;
@Column(name = "has_girl_friend",columnDefinition = "TINYINT COMMENT '是否有女朋友'")
private Boolean hasGirFriend;
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/enumeration/BizExceptionEnum.java
================================================
package cn.enilu.material.bean.enumeration;
import cn.enilu.material.bean.exception.ServiceExceptionEnum;
/**
* @Description 所有业务异常的枚举
* @author fengshuonan
* @date 2016年11月12日 下午5:04:51
*/
public enum BizExceptionEnum implements ServiceExceptionEnum {
/**
* 字典
*/
DICT_EXISTED(400,"字典已经存在"),
ERROR_CREATE_DICT(500,"创建字典失败"),
ERROR_WRAPPER_FIELD(500,"包装字典属性失败"),
/**
* 文件上传
*/
FILE_READING_ERROR(400,"FILE_READING_ERROR!"),
FILE_NOT_FOUND(400,"FILE_NOT_FOUND!"),
NOT_ALLOW(400, "不允许该操作"),
UPLOAD_ERROR(500,"上传图片出错"),
/**
* 权限和数据问题
*/
DB_RESOURCE_NULL(400,"数据库中没有该资源"),
NO_PERMITION(405, "没有该操作权限"),
REQUEST_INVALIDATE(400,"请求数据格式不正确"),
INVALID_KAPTCHA(400,"验证码不正确"),
CANT_DELETE_ADMIN(600,"不能删除超级管理员"),
CANT_FREEZE_ADMIN(600,"不能冻结超级管理员"),
CANT_CHANGE_ADMIN(600,"不能修改超级管理员"),
/**
* 账户问题
*/
USER_ALREADY_REG(401,"该用户已经注册"),
NO_THIS_USER(400,"没有此用户"),
USER_NOT_EXISTED(400, "没有此用户"),
ACCOUNT_FREEZED(401, "账号被冻结"),
OLD_PWD_NOT_RIGHT(402, "原密码不正确"),
TWO_PWD_NOT_MATCH(405, "两次输入密码不一致"),
/**
* 错误的请求
*/
MENU_PCODE_COINCIDENCE(400,"菜单编号和副编号不能一致"),
EXISTED_THE_MENU(400,"菜单编号重复,不能添加"),
DICT_MUST_BE_NUMBER(400,"字典的值必须为数字"),
REQUEST_NULL(400, "请求有错误"),
SESSION_TIMEOUT(400, "会话超时"),
SERVER_ERROR(500, "服务器异常"),
CAN_NOT_DELETE(400,"数据被引用,无法删除");
BizExceptionEnum(int code, String message) {
this.code = code;
this.message = message;
}
private Integer code;
private String message;
@Override
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
@Override
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/enumeration/ConfigKeyEnum.java
================================================
package cn.enilu.material.bean.enumeration;
public enum ConfigKeyEnum {
SYSTEM_FILE_UPLOAD_PATH("system.file.upload.path"),
SYSTEM_APP_NAME("system.app.name"),
SYSTEM_RESOURCE_VERSION("system.resource.version"),
/**
* 腾讯sms接口appid
*/
API_TENCENT_SMS_APPID("api.tencent.sms.appid"),
/**
* 腾讯sms接口appkey
*/
API_TENCENT_SMS_APPKEY("api.tencent.sms.appkey"),
/**
* 腾讯sms接口签名参数
*/
API_TENCENT_SMS_SIGN("api.tencent.sms.sign");
private String value;
ConfigKeyEnum(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/enumeration/ProjectEnum.java
================================================
package cn.enilu.material.bean.enumeration;
/**
* Created by deanyule on 17/8/16.
*/
public enum ProjectEnum {
SCORE_CARD("ScoreCard"),
DOLPHIN_PROD("dolphin"),
SNOW_PRODUCT("PRJ_SNOW_PRODUCT");
private String value;
ProjectEnum(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/enumeration/RedisQueueName.java
================================================
package cn.enilu.material.bean.enumeration;
/**
* redis队列名称
* Created by zt on 2017/8/25 0015.
*/
public enum RedisQueueName {
CREDIT_LIMIT("credit_limit"),COLLECTION_TAG("collection_tag");
private String value;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
RedisQueueName(String value) {
this.value = value;
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/enumeration/SerialNumberEnum.java
================================================
package cn.enilu.material.bean.enumeration;
/**
* Created by deanyule on 17/4/13.
* 系统各种编号枚举
*/
public enum SerialNumberEnum {
//交易编号
TR_DFYW_KLT("TRDFYWKLT", "代付-开联通"),
TR_DFYW_CJ0("TRDFYWCJ0", "代付-畅捷"),
TR_DFYW_LL0("TRDFYWLL0", "代付-连连"),
TR_DFYW_RB0("TRDFYWRB0", "代付-融宝"),
TR_DFYW_YSB("TRDFYWYSB", "代付-银生宝"),
TR_DSYW_CJ0("TRDSYWCJ0", "代收-畅捷"),
TR_DSYW_YSB("TRDSYWYSB", "代收-银生宝"),
TR_DSYW_CPCN("TRDSYWCPC", "代收-中金"),
TR_DSYW_BAOFU("TRDSYWBF", "代收-宝付"),
TR_DSYW_FY0("TRDSYWFY0", "代收-富友"),
TR_KJWG_CJ0("TRKJWGCJ0", "快捷-畅捷"),
TR_KJWG_FY0("TRFY", "快捷-富友"),
TR_KJWG_LL0("TRKJWGLL0", "快捷-连连"),
TR_KJWG_WX0("TRKJWGWX0", "快捷-微信"),
TR_KJTK_CJ0("TRKJTKCJ0", "快捷-退款-畅捷"),
TR_KJZL_KLT("TRKJZLKLT", "快捷-直连-开联通"),
/**第三方抽成*/
TR_CCSN_000("TRCCSN000", "第三方抽成"),
TR_MANUL_000("TRMANUL00", "手工还款记账"),
//借款申请编号
JK_SQC("JKSQC", "借款申请客户为Company"),
JK_SQP("JKSQP", "借款申请客户为PC"),
JK_SQS("JKSQS", "借款申请客户为ShareTransfer"),
JK_SQM("JKSQM", "借款申请客户为Mobile"),
JK_SQH("JKSQH", "借款申请客户为person on H5"),
//协议模板编号
XDXY_L_C("XDXYLC","借款项目Lending Company"),
XDXY_L_P("XDXYLP", "借款项目Lending Person"),
XDXY_M_J("XDXYMJ", "居间协议M 借款居间J"),
XDXY_R("XDXYR0", "注册协议R 0补位"),
XDXY_Z("XDXYZ0", "征信协议Z 0补位"),
//协议子编号
XDXY_L_P_0001("XDXYLP0001", "协议编号,借款项目Lending Person"),
XDXY_R_P_0001("XDXYRP0001", "协议编号,代收协议签约"),
//消息发送编号
XX_E("XXE", "发送方式Email"),
XX_S("XXS", "发送方式SMS"),
XX_L("XXL", "发送方式Letter"),
XX_W("XXW", "发送方式微信"),
//消息模板编号
XXMB_CL("XXMBCL","credit lending个人信贷"),
XXMB_MC("XXMBMC", "小贷"),
XXMB_YX("XXMBYX", "营销类"),
//用户ID编号
US_JK_C("USJKC", "借款JK来源Company"),
US_JK_P("USJKP", "借款JK 来源Person on PC"),
US_JK_S("USJKS", "借款JK 来源Share transfer"),
US_JK_M("USJKM", "借款JK 来源person on Mobile"),
US_JK_H("USJKH", "借款JK 来源person on H5")
;
private String code;
private String desc;
private SerialNumberEnum(String code, String desc) {
this.code = code;
this.desc = desc;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/enumeration/TypeEnum.java
================================================
package cn.enilu.material.bean.enumeration;
public class TypeEnum {
/**
* 输入数据的html类型
*/
public enum DataItemShowType {
/**
* 0为文本框;1为下拉框;2为日期框
*/
TEXT(0), SELECT(1), DATE(2);
private int value;
private DataItemShowType(int value) {
this.value = value;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
/**
* 调用类型枚举类
*/
public enum InvokeTypeEnum {
/**
* 1:本地;1:远程
*/
LOCAL("local"), REMOTE("remote");
private String value;
private InvokeTypeEnum(String value) {
this.value = value;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
/**
* 调用结果枚举类
*/
public enum InvokeStateEnum {
/**
* 1:查询成功;-1:查询无数据;2:查询异常
*/
SUCCESS(1, "0000"), NO_DATA(-1, "0001"), ERROR(2, "9999"), ERROR_NO_WARN(2, "9999");
private int value;
private String code;
private InvokeStateEnum(int value, String code) {
this.value = value;
this.code = code;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public static boolean isError(InvokeStateEnum invokeState) {
return InvokeStateEnum.ERROR == invokeState || InvokeStateEnum.ERROR_NO_WARN == invokeState;
}
public static boolean isNeedWarning(InvokeStateEnum invokeState) {
return InvokeStateEnum.ERROR == invokeState;
}
public static InvokeStateEnum getNoData() {
return InvokeStateEnum.NO_DATA;
}
public static InvokeStateEnum getSuccess() {
return InvokeStateEnum.SUCCESS;
}
public static InvokeStateEnum getError() {
return InvokeStateEnum.ERROR;
}
public static InvokeStateEnum getErrorNoWarn() {
return InvokeStateEnum.ERROR_NO_WARN;
}
}
/**
* 订单来源枚举类
*/
public enum OrderChannelEnum {
WEB(0, "web"), WS(1, "接口");
private int value;
private String name;
private OrderChannelEnum(int value, String name) {
this.value = value;
this.name = name;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public enum AdminType {
/**
* 0为普通用户;1为超级管理员;2为机构管理员
*/
NORMAL(0), SUPERADMIN(1), ORGADMIN(2);
private int value;
private AdminType(int value) {
this.value = value;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
public enum MatchType {
/**
* 0为模糊匹配;1为精确匹配;
*/
FUZZY(0), EXACT(1);
private int value;
private MatchType(int value) {
this.value = value;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
public enum MessageType {
/**
* 0为系统通知;1为订阅通知;2为用户发送
*/
NOTIFY(0), SUBSCRIBE(1), SEND(2);
private int value;
private MessageType(int value) {
this.value = value;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
public enum Aspect {
AFTERPAY("afterPay"),
EVENTTRACK("eventTrack"),
SNOWLOG("snowlog"),
AFTERACTION("afterAction"),
ENTERFINAL("enterFinal"),
QUARTZJOB("quartzJob"),
AUTOTRIGGER("autoTrigger"),
PAYLIMIT("payLimit");
private String value;
private Aspect(String value) {
this.value = value;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
public enum JobStatus {
NONE("NONE", "未知"),
NORMAL("NORMAL", "正常运行"),
PAUSED("PAUSED", "暂停状态"),
COMPLETE("COMPLETE", "运行完成"),
ERROR("ERROR", "错误状态"),
BLOCKED("BLOCKED", "锁定状态");
private JobStatus(String index, String name) {
this.name = name;
this.index = index;
}
private String index;
private String name;
public String getName() {
return name;
}
public String getIndex() {
return index;
}
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/enumeration/cms/BannerTypeEnum.java
================================================
package cn.enilu.material.bean.enumeration.cms;
public enum BannerTypeEnum {
INDEX("index"),
NEWS("news"),
CASE ("case"),
PRODUCT("product"),
SOLUTION("solution");
private String value;
BannerTypeEnum(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/enumeration/cms/ChannelEnum.java
================================================
package cn.enilu.material.bean.enumeration.cms;
public enum ChannelEnum {
NEWS(1L,"news"),
PRODUCT(2L,"product"),
SOLUTION(3L,"solution"),
CASE(4L,"case");
private String value;
private Long id;
ChannelEnum(Long id,String value) {
this.id = id;
this.value = value;
}
public String getValue() {
return value;
}
public Long getId(){
return id;
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/exception/ApplicationException.java
================================================
package cn.enilu.material.bean.exception;
/**
* 封装异常
*
* @author fengshuonan
* @Date 2017/12/28 下午10:32
*/
public class ApplicationException extends RuntimeException {
private Integer code;
private String message;
public ApplicationException(ServiceExceptionEnum serviceExceptionEnum) {
this.code = serviceExceptionEnum.getCode();
this.message = serviceExceptionEnum.getMessage();
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
@Override
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/exception/ExceptionEnum.java
================================================
package cn.enilu.material.bean.exception;
/**
* 异常枚举
*
* @author fengshuonan
* @Date 2017/12/28 下午10:33
*/
public enum ExceptionEnum implements ServiceExceptionEnum{
/**
* 其他
*/
WRITE_ERROR(500,"渲染界面错误"),
/**
* 文件上传
*/
FILE_READING_ERROR(400,"FILE_READING_ERROR!"),
FILE_NOT_FOUND(400,"FILE_NOT_FOUND!"),
/**
* 错误的请求
*/
REQUEST_NULL(400, "请求有错误"),
SERVER_ERROR(500, "服务器异常"),
TEST_NOT_ALLOWED(400, "演示环境不允许该操作"),
ONLY_DEMO_ACCOUNT(400,"演示环境不能试用其他账号的登录"),
TASK_CONFIG_ERROR(500, "定时任务配置错误");
ExceptionEnum(int code, String message) {
this.code = code;
this.message = message;
}
private Integer code;
private String message;
@Override
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
@Override
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/exception/InvalidKaptchaException.java
================================================
package cn.enilu.material.bean.exception;
/**
* 验证码错误异常
*
* @author fengshuonan
* @date 2017-05-05 23:52
*/
public class InvalidKaptchaException extends RuntimeException {
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/exception/MailException.java
================================================
package cn.enilu.material.bean.exception;
public class MailException extends Exception {
public MailException(String msg) {
super(msg);
}
public MailException(String msg, Throwable e) {
super(msg, e);
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/exception/ParamException.java
================================================
package cn.enilu.material.bean.exception;
public class ParamException extends Exception {
public ParamException(String msg) {
super(msg);
}
public ParamException(String msg, Throwable e) {
super(msg, e);
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/exception/ServiceExceptionEnum.java
================================================
package cn.enilu.material.bean.exception;
/**
* 抽象接口
*
* @author fengshuonan
* @date 2017-12-28-下午10:27
*/
public interface ServiceExceptionEnum {
/**
* 获取异常编码
*/
Integer getCode();
/**
* 获取异常信息
*/
String getMessage();
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/exception/SlConnectException.java
================================================
package cn.enilu.material.bean.exception;
import java.util.List;
public class SlConnectException extends Exception {
private static final long serialVersionUID = 1L;
private String errorCode;
private List details;
public SlConnectException(String errorCode, String errorMessage) {
super(errorMessage);
this.errorCode = errorCode;
}
public String getErrorCode() {
return errorCode;
}
public List getDetails() {
return details;
}
public void setDetails(List details) {
this.details = details;
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/exception/SlEvalException.java
================================================
package cn.enilu.material.bean.exception;
import java.util.List;
public class SlEvalException extends Exception {
private static final long serialVersionUID = 1L;
private String errorCode;
private List details;
public SlEvalException(String errorCode, String errorMessage) {
super(errorMessage);
this.errorCode = errorCode;
}
public String getErrorCode() {
return errorCode;
}
public List getDetails() {
return details;
}
public void setDetails(List details) {
this.details = details;
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/exception/ValidException.java
================================================
package cn.enilu.material.bean.exception;
public class ValidException extends RuntimeException {
public ValidException(String msg) {
super(msg);
}
public ValidException(String msg, Throwable e) {
super(msg, e);
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/exception/XSException.java
================================================
package cn.enilu.material.bean.exception;
/**
* 定义通用异常
* code 存储异常代码
* @author czhou
*/
public class XSException extends Exception {
private static final long serialVersionUID = 1L;
private String code;
public String getCode() {
return this.code;
}
public XSException(String code, String message, Throwable t) {
super(message, t);
this.code = code;
}
public XSException(String code, String message) {
this(code, message, null);
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/exception/XSRuntimeException.java
================================================
package cn.enilu.material.bean.exception;
@SuppressWarnings("serial")
public class XSRuntimeException extends RuntimeException {
public XSRuntimeException(String msg) {
super(msg);
}
public XSRuntimeException(String msg, Throwable e) {
super(msg, e);
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/vo/DictVo.java
================================================
package cn.enilu.material.bean.vo;
/**
* DictVo
*
* @author enilu
* @version 2018/8/14 0014
*/
public class DictVo {
private String key;
private String value;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public DictVo() {
}
public DictVo(String key, String value) {
this.key = key;
this.value = value;
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/vo/QuartzJob.java
================================================
package cn.enilu.material.bean.vo;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.Date;
import java.util.Map;
@Getter
@Setter
public class QuartzJob implements Serializable {
private String jobId;
private String jobName;
private String jobGroup;
private String jobClass;
private String description;
private String cronExpression;
private boolean concurrent;
private String jobStatus;
private Date nextTime;
private Date previousTime;
private boolean disabled;
private Map dataMap;
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/vo/SpringContextHolder.java
================================================
package cn.enilu.material.bean.vo;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
/**
* Spring的ApplicationContext的持有者,可以用静态方法的方式获取spring容器中的bean
*
* @author fengshuonan
* @date 2016年11月27日 下午3:32:11
*/
@Component
public class SpringContextHolder implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringContextHolder.applicationContext = applicationContext;
}
public static ApplicationContext getApplicationContext() {
assertApplicationContext();
return applicationContext;
}
@SuppressWarnings("unchecked")
public static T getBean(String beanName) {
assertApplicationContext();
return (T) applicationContext.getBean(beanName);
}
public static T getBean(Class requiredType) {
assertApplicationContext();
return applicationContext.getBean(requiredType);
}
private static void assertApplicationContext() {
if (SpringContextHolder.applicationContext == null) {
throw new RuntimeException("applicaitonContext属性为null,请检查是否注入了SpringContextHolder!");
}
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/vo/front/Ret.java
================================================
package cn.enilu.material.bean.vo.front;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class Ret {
private Integer code;
private String msg;
private T data;
private boolean success;
public Ret() {
}
public Ret(Integer code, String msg, T data) {
this.code = code;
this.msg = msg;
this.data = data;
this.success = "0000".equals(code);
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("{");
builder.append("'code':").append(code).append(",");
builder.append("'msg':").append(msg).append(",");
builder.append("'success':").append(success).append(",");
builder.append("}");
return builder.toString();
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/vo/front/Rets.java
================================================
package cn.enilu.material.bean.vo.front;
public class Rets {
public static final Integer SUCCESS = 20000;
public static final Integer FAILURE = 9999;
public static final Integer TOKEN_EXPIRE=50014;
public static Ret success(Object data) {
return new Ret(Rets.SUCCESS, "成功", data);
}
public static Ret failure(String msg) {
return new Ret(Rets.FAILURE, msg, null);
}
public static Ret success() {
return new Ret(Rets.SUCCESS, "成功", null);
}
public static Ret expire(){
return new Ret(Rets.TOKEN_EXPIRE,"token 过期",null);
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/vo/node/DeptNode.java
================================================
package cn.enilu.material.bean.vo.node;
import cn.enilu.material.bean.entity.system.Dept;
import java.util.ArrayList;
import java.util.List;
/**
* DeptNode
*
* @author enilu
* @version 2018/9/15 0015
*/
public class DeptNode extends Dept {
private List children = new ArrayList<>(10);
public List getChildren() {
return children;
}
public void setChildren(List children) {
this.children = children;
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/vo/node/IsMenu.java
================================================
package cn.enilu.material.bean.vo.node;
/**
* 是否是菜单的枚举
*
* @author fengshuonan
* @date 2017年6月1日22:50:11
*/
public enum IsMenu {
YES(1, "是"),
NO(0, "不是");//不是菜单的是按钮
int code;
String message;
IsMenu(int code, String message) {
this.code = code;
this.message = message;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public static String valueOf(Integer status) {
if (status == null) {
return "";
} else {
for (IsMenu s : IsMenu.values()) {
if (s.getCode() == status) {
return s.getMessage();
}
}
return "";
}
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/vo/node/MenuNode.java
================================================
package cn.enilu.material.bean.vo.node;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
/**
* @author fengshuonan
* @Description 菜单的节点
* @date 2016年12月6日 上午11:34:17
*/
public class MenuNode implements Comparable , Serializable {
/**
* 节点id
*/
private Long id;
/**
* 父节点
*/
private Long parentId;
/**
* 节点名称
*/
private String name;
/**
* 按钮级别
*/
private Integer levels;
/**
* 按钮级别
*/
private Integer ismenu;
private String isMenuName;
private Integer status;
private String statusName;
/**
* 按钮的排序
*/
private Integer num;
/**
* 节点的url
*/
private String url;
/**
* 节点图标
*/
private String icon;
/**
* 菜单编码
*/
private String code;
/**
* 子节点的集合
*/
private List children = new ArrayList<>(10);
/**
* 查询子节点时候的临时集合
*/
private List linkedList = new ArrayList();
public MenuNode() {
super();
}
public MenuNode(Long id, Long parentId) {
super();
this.id = id;
this.parentId = parentId;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public Integer getLevels() {
return levels;
}
public void setLevels(Integer levels) {
this.levels = levels;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public static MenuNode createRoot() {
return new MenuNode(0L, -1L);
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getParentId() {
return parentId;
}
public void setParentId(Long parentId) {
this.parentId = parentId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public List getChildren() {
return children;
}
public void setChildren(List children) {
this.children = children;
}
public Integer getNum() {
return num;
}
public void setNum(Integer num) {
this.num = num;
}
public Integer getIsmenu() {
return ismenu;
}
public void setIsmenu(Integer ismenu) {
this.ismenu = ismenu;
}
public String getIsMenuName() {
return ismenu == 1 ?"是":"否";
}
public void setIsMenuName(String isMenuName) {
this.isMenuName = isMenuName;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getStatusName() {
return status == 1 ?"启用":"禁用";
}
public void setStatusName(String statusName) {
this.statusName = statusName;
}
@Override
public String toString() {
return "MenuNode{" +
"id=" + id +
", parentId=" + parentId +
", name='" + name + '\'' +
", levels=" + levels +
", num=" + num +
", url='" + url + '\'' +
", icon='" + icon + '\'' +
", children=" + children +
", linkedList=" + linkedList +
'}';
}
@Override
public int compareTo(Object o) {
MenuNode menuNode = (MenuNode) o;
Integer num = menuNode.getNum();
if (num == null) {
num = 0;
}
return this.num.compareTo(num);
}
/**
* 构建整个菜单树
*
* @author fengshuonan
*/
public void buildNodeTree(List nodeList) {
for (MenuNode treeNode : nodeList) {
List linkedList = treeNode.findChildNodes(nodeList, treeNode.getId());
if (linkedList.size() > 0) {
treeNode.setChildren(linkedList);
}
}
}
/**
* 查询子节点的集合
*
* @author fengshuonan
*/
public List findChildNodes(List nodeList, Long parentId) {
if (nodeList == null && parentId == null)
return null;
for (Iterator iterator = nodeList.iterator(); iterator.hasNext(); ) {
MenuNode node = (MenuNode) iterator.next();
// 根据传入的某个父节点ID,遍历该父节点的所有子节点
if (node.getParentId() != 0 && parentId.equals(node.getParentId())) {
recursionFn(nodeList, node, parentId);
}
}
return linkedList;
}
/**
* 遍历一个节点的子节点
*
* @author fengshuonan
*/
public void recursionFn(List nodeList, MenuNode node, Long pId) {
List childList = getChildList(nodeList, node);// 得到子节点列表
if (childList.size() > 0) {// 判断是否有子节点
if (node.getParentId().equals(pId)) {
linkedList.add(node);
}
Iterator it = childList.iterator();
while (it.hasNext()) {
MenuNode n = (MenuNode) it.next();
recursionFn(nodeList, n, pId);
}
} else {
if (node.getParentId().equals(pId)) {
linkedList.add(node);
}
}
}
/**
* 得到子节点列表
*
* @author fengshuonan
*/
private List getChildList(List list, MenuNode node) {
List nodeList = new ArrayList();
Iterator it = list.iterator();
while (it.hasNext()) {
MenuNode n = (MenuNode) it.next();
if (n.getParentId().equals(node.getId())) {
nodeList.add(n);
}
}
return nodeList;
}
/**
* 清除掉按钮级别的资源
*
* @date 2017年2月19日 下午11:04:11
*/
public static List clearBtn(List nodes) {
ArrayList noBtns = new ArrayList();
for (MenuNode node : nodes) {
if(node.getIsmenu() == IsMenu.YES.getCode()){
noBtns.add(node);
}
}
return noBtns;
}
/**
* 清除所有二级菜单
*
* @date 2017年2月19日 下午11:18:19
*/
public static List clearLevelTwo(List nodes) {
ArrayList results = new ArrayList();
for (MenuNode node : nodes) {
Integer levels = node.getLevels();
if (levels.equals(1)) {
results.add(node);
}
}
return results;
}
/**
* 构建菜单列表
*
* @date 2017年2月19日 下午11:18:19
*/
public static List buildTitle(List nodes) {
List clearBtn = clearBtn(nodes);
new MenuNode().buildNodeTree(clearBtn);
List menuNodes = clearLevelTwo(clearBtn);
//对菜单排序
Collections.sort(menuNodes);
//对菜单的子菜单进行排序
for (MenuNode menuNode : menuNodes) {
if (menuNode.getChildren() != null && menuNode.getChildren().size() > 0) {
Collections.sort(menuNode.getChildren());
}
}
return menuNodes;
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/vo/node/Node.java
================================================
package cn.enilu.material.bean.vo.node;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* Node
*
* @author enilu
* @version 2018/11/24 0024
*/
@Data
public class Node {
private Long id;
private Long pid;
private String name;
private Boolean checked;
private List children = new ArrayList<>(10);
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/vo/node/ZTreeNode.java
================================================
package cn.enilu.material.bean.vo.node;
/**
*
* jquery ztree 插件的节点
*
* @author fengshuonan
* @date 2017年2月17日 下午8:25:14
*/
public class ZTreeNode {
private Long id; //节点id
private Long pId;//父节点id
private String code;//编号
private String name;//节点名称
private Boolean open;//是否打开节点
private Boolean checked;//是否被选中
private Object nodeData;//自定义数据
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getpId() {
return pId;
}
public void setpId(Long pId) {
this.pId = pId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Boolean getOpen() {
return open;
}
public void setOpen(Boolean open) {
this.open = open;
}
public Boolean getIsOpen() {
return open;
}
public void setIsOpen(Boolean open) {
this.open = open;
}
public Boolean getChecked() {
return checked;
}
public void setChecked(Boolean checked) {
this.checked = checked;
}
public Object getNodeData() {
return nodeData;
}
public void setNodeData(Object nodeData) {
this.nodeData = nodeData;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public static ZTreeNode createParent(){
ZTreeNode zTreeNode = new ZTreeNode();
zTreeNode.setChecked(true);
zTreeNode.setId(0L);
zTreeNode.setName("顶级");
zTreeNode.setOpen(true);
zTreeNode.setpId(0L);
zTreeNode.setCode("");
return zTreeNode;
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/vo/query/DynamicSpecifications.java
================================================
package cn.enilu.material.bean.vo.query;
import cn.enilu.material.utils.Lists;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.jpa.domain.Specification;
import javax.persistence.criteria.*;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* descript
*
* @author :enilu
* @date :Created in 2019/6/30 16:04
*/
public class DynamicSpecifications {
public static Specification bySearchFilter(final Collection filters, final Class entityClazz) {
return new Specification() {
@Override
public Predicate toPredicate(Root root, CriteriaQuery> query, CriteriaBuilder builder) {
if (filters!=null && !filters.isEmpty()) {
List predicates = Lists.newArrayList();
for (SearchFilter filter : filters) {
// nested path translate, 如Task的名为"user.name"的filedName, 转换为Task.user.name属性
String[] names = StringUtils.split(filter.fieldName, ".");
Path expression = root.get(names[0]);
for (int i = 1; i < names.length; i++) {
expression = expression.get(names[i]);
}
// logic operator
switch (filter.operator) {
case EQ:
predicates.add(builder.equal(expression, filter.value));
break;
case LIKE:
predicates.add(builder.like(expression, "%" + filter.value + "%"));
break;
case GT:
predicates.add(builder.greaterThan(expression, (Comparable) filter.value));
break;
case LT:
predicates.add(builder.lessThan(expression, (Comparable) filter.value));
break;
case GTE:
predicates.add(builder.greaterThanOrEqualTo(expression, (Comparable) filter.value));
break;
case LTE:
predicates.add(builder.lessThanOrEqualTo(expression, (Comparable) filter.value));
break;
case IN:
if(filter.value.getClass().isArray()){
predicates.add(expression.in((Object[]) filter.value));
}else {
predicates.add(expression.in((ArrayList) filter.value));
}
break;
case ISNULL:
predicates.add(expression.isNull());
break;
case ISNOTNULL:
predicates.add(expression.isNotNull());
break;
}
}
// 将所有条件用 and 联合起来
if (!predicates.isEmpty()) {
return builder.and(predicates.toArray(new Predicate[predicates.size()]));
}
}
return builder.conjunction();
}
};
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/vo/query/MutiStrFactory.java
================================================
package cn.enilu.material.bean.vo.query;
import cn.enilu.material.utils.ToolUtil;
import cn.enilu.material.utils.StrKit;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 组合字符串生产者
*
* @author fengshuonan
* @date 2017-04-27 16:42
*/
public class MutiStrFactory {
/**
* 每个条目之间的分隔符
*/
public static final String ITEM_SPLIT = ";";
/**
* 属性之间的分隔符
*/
public static final String ATTR_SPLIT = ":";
/**
* 拼接字符串的id
*/
public static final String MUTI_STR_ID = "ID";
/**
* 拼接字符串的key
*/
public static final String MUTI_STR_KEY = "KEY";
/**
* 拼接字符串的value
*/
public static final String MUTI_STR_VALUE = "VALUE";
/**
* 解析一个组合字符串(例如: "1:启用;2:禁用;3:冻结" 这样的字符串)
*
* @author fengshuonan
* @Date 2017/4/27 16:44
*/
public static List> parseKeyValue(String mutiString){
if(ToolUtil.isEmpty(mutiString)){
return new ArrayList<>();
}else{
ArrayList> results = new ArrayList<>();
String[] items = StrKit.split(StrKit.removeSuffix(mutiString, ITEM_SPLIT), ITEM_SPLIT);
for (String item : items) {
String[] attrs = item.split(ATTR_SPLIT);
HashMap itemMap = new HashMap<>();
itemMap.put(MUTI_STR_KEY,attrs[0]);
itemMap.put(MUTI_STR_VALUE,attrs[1]);
results.add(itemMap);
}
return results;
}
}
/**
* 解析id:key:value这样类型的字符串
*
* @author fengshuonan
* @Date 2017/4/28 11:06
*/
public static List> parseIdKeyValue(String mutiString){
if(ToolUtil.isEmpty(mutiString)){
return new ArrayList<>();
}else{
ArrayList> results = new ArrayList<>();
String[] items = StrKit.split(StrKit.removeSuffix(mutiString, ITEM_SPLIT), ITEM_SPLIT);
for (String item : items) {
String[] attrs = item.split(ATTR_SPLIT);
HashMap itemMap = new HashMap<>();
itemMap.put(MUTI_STR_ID,attrs[0]);
itemMap.put(MUTI_STR_KEY,attrs[1]);
itemMap.put(MUTI_STR_VALUE,attrs[2]);
results.add(itemMap);
}
return results;
}
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/vo/query/Page.java
================================================
package cn.enilu.material.bean.vo.query;
import cn.enilu.material.utils.Lists;
import cn.enilu.material.utils.StringUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
/**
* Created on 2018/3/22 0022.
*
* @author enilu
*/
public class Page {
/**
* 该操作只是为了忽略RowBounds属性
*
*
*/
private transient int offset;
/**
* 该操作只是为了忽略RowBounds属性
*
*
*/
private transient int limit;
/**
* 总数
*/
private int total;
/**
* 每页显示条数,默认 10
*/
private int size = 10;
/**
* 总页数
*/
private int pages;
/**
* 当前页
*/
private int current = 1;
/**
* 查询总记录数(默认 true)
*/
private transient boolean searchCount = true;
/**
* 开启排序(默认 true) 只在代码逻辑判断 并不截取sql分析
*
*
**/
private transient boolean openSort = true;
/**
*
* SQL 排序 ASC 集合
*
*/
private transient List ascs;
/**
*
* SQL 排序 DESC 集合
*
*/
private transient List descs;
/**
* 是否为升序 ASC( 默认: true )
*
* @see #ascs
* @see #descs
*/
private transient boolean isAsc = true;
/**
*
* SQL 排序 ORDER BY 字段,例如: id DESC(根据id倒序查询)
*
*
* DESC 表示按倒序排序(即:从大到小排序)
* ASC 表示按正序排序(即:从小到大排序)
*
* @see #ascs
* @see #descs
*
*/
private transient String orderByField;
public Page() {
}
public Page(int current, int size, String orderByField) {
this.setOrderByField(orderByField);
}
public Page(int current, int size, String orderByField, boolean isAsc) {
this(current, size, orderByField);
this.setAsc(isAsc);
}
/**
*
* 分页构造函数
*
*
* @param current 当前页
* @param size 每页显示条数
*/
public Page(int current, int size) {
this(current,size,true);
}
public Page(int current, int size, boolean searchCount) {
this(current, size, searchCount, true);
}
public Page(int current, int size, boolean searchCount, boolean openSort) {
setOffset(offsetCurrent(current, size));
setLimit(size);
if (current > 1) {
this.current = current;
}
this.size = size;
this.searchCount = searchCount;
this.openSort = openSort;
}
protected static int offsetCurrent(int current, int size) {
if (current > 0) {
return (current - 1) * size;
}
return 0;
}
public int offsetCurrent() {
return offsetCurrent(this.current, this.size);
}
public boolean hasPrevious() {
return this.current > 1;
}
public boolean hasNext() {
return this.current < this.pages;
}
public int getTotal() {
return total;
}
public Page setTotal(int total) {
this.total = total;
return this;
}
public int getSize() {
return size;
}
public Page setSize(int size) {
this.size = size;
return this;
}
public int getPages() {
if (this.size == 0) {
return 0;
}
this.pages = this.total / this.size;
if (this.total % this.size != 0) {
this.pages++;
}
return this.pages;
}
public int getCurrent() {
return current;
}
public Page setCurrent(int current) {
this.current = current;
return this;
}
public boolean isSearchCount() {
return searchCount;
}
public Page setSearchCount(boolean searchCount) {
this.searchCount = searchCount;
return this;
}
/**
* @see #ascs
* @see #descs
*/
@Deprecated
public String getOrderByField() {
return orderByField;
}
/**
* @see #ascs
* @see #descs
*/
public Page setOrderByField(String orderByField) {
if (StringUtils.isNotEmpty(orderByField)) {
this.orderByField = orderByField;
}
return this;
}
public boolean isOpenSort() {
return openSort;
}
public Page setOpenSort(boolean openSort) {
this.openSort = openSort;
return this;
}
public List getAscs() {
return orders(isAsc, ascs);
}
private List orders(boolean condition, List columns) {
if (condition && StringUtils.isNotEmpty(orderByField)) {
if (columns == null) {
columns = new ArrayList<>();
}
if (!columns.contains(orderByField)) {
columns.add(orderByField);
}
}
return columns;
}
public Page setAscs(List ascs) {
this.ascs = ascs;
return this;
}
public List getDescs() {
return orders(!isAsc, descs);
}
public Page setDescs(List descs) {
this.descs = descs;
return this;
}
/**
* @see #ascs
* @see #descs
*/
@Deprecated
public boolean isAsc() {
return isAsc;
}
/**
* @see #ascs
* @see #descs
*/
public Page setAsc(boolean isAsc) {
this.isAsc = isAsc;
return this;
}
public int getOffset() {
return offset;
}
public Page setOffset(int offset) {
this.offset = offset;
return this;
}
public int getLimit() {
return limit;
}
public Page setLimit(int limit) {
this.limit = limit;
return this;
}
/**
* 查询数据列表
*/
private List records = Collections.emptyList();
/**
* 查询参数
*/
private transient Map condition;
private transient List filters;
public List getRecords() {
return records;
}
public Page setRecords(List records) {
this.records = records;
return this;
}
public Map getCondition() {
return condition;
}
public Page setCondition(Map condition) {
this.condition = condition;
return this;
}
public List getFilters() {
return filters;
}
public void setFilters(List filters) {
this.filters = filters;
}
public void addFilter(SearchFilter filter){
if(filter==null){
return ;
}
if(filters==null){
filters = Lists.newArrayList();
}
filters.add(filter);
}
public void addFilter(String fieldName, SearchFilter.Operator operator, Object value){
if(!StringUtils.isNullOrEmpty(value)){
addFilter(SearchFilter.build(fieldName,operator,value));
}
}
public void addFilter(String fieldName, SearchFilter.Operator operator){
addFilter(SearchFilter.build(fieldName,operator));
}
@Override
public String toString() {
StringBuilder pg = new StringBuilder();
pg.append(" Page:{ [").append(super.toString()).append("], ");
if (records != null) {
pg.append("records-size:").append(records.size());
} else {
pg.append("records is null");
}
return pg.append(" }").toString();
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/bean/vo/query/SearchFilter.java
================================================
package cn.enilu.material.bean.vo.query;
import cn.enilu.material.utils.Maps;
import org.apache.commons.lang3.StringUtils;
import java.util.Map;
/**
* descript
*
* @author :enilu
* @date :Created in 2019/6/30 16:02
*/
public class SearchFilter {
public enum Operator {
EQ, LIKE, GT, LT, GTE, LTE,IN,ISNULL,ISNOTNULL
}
public String fieldName;
public Object value;
public Operator operator = Operator.EQ;
public static SearchFilter build(String fieldName, Operator operator, Object value){
return new SearchFilter(fieldName,operator,value);
}
public static SearchFilter build(String fieldName, Object val){
return new SearchFilter(fieldName,Operator.EQ,val);
}
public SearchFilter(String fieldName, Object val) {
this.fieldName = fieldName;
this.value = val;
}
public SearchFilter(String fieldName, Operator operator, Object value) {
this.fieldName = fieldName;
this.value = value;
this.operator = operator;
}
/**
* searchParams中key的格式为OPERATOR_FIELDNAME
*/
public static Map parse(Map searchParams) {
Map filters = Maps.newHashMap();
for (Map.Entry entry : searchParams.entrySet()) {
// 过滤掉空值
String key = entry.getKey();
Object value = entry.getValue();
/*if (StringUtils.isBlank((String) value)) {
continue;
}*/
// 拆分operator与filedAttribute
String[] names = StringUtils.split(key, "_");
if (names.length != 2) {
throw new IllegalArgumentException(key + " is not a valid search filter name");
}
String filedName = names[1];
Operator operator = Operator.valueOf(names[0]);
// 创建searchFilter
SearchFilter filter = new SearchFilter(filedName, operator, value);
filters.put(key, filter);
}
return filters;
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/dao/BaseRepository.java
================================================
package cn.enilu.material.dao;
import cn.enilu.material.bean.vo.query.SearchFilter;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
/**
* 封装基础的dao接口
*
* @author :enilu
* @date :Created in 2019/6/29 12:50
*/
@NoRepositoryBean
public interface BaseRepository extends JpaRepository
, PagingAndSortingRepository
, JpaSpecificationExecutor {
List queryBySql(String sql);
List queryBySql(String sql, List filter);
List query(String sql);
Object getBySql(String sql);
T get(String sql);
int execute(String sql);
Class getDataClass();
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/dao/BaseRepositoryFactoryBean.java
================================================
package cn.enilu.material.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.support.JpaEntityInformation;
import org.springframework.data.jpa.repository.support.JpaRepositoryFactory;
import org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean;
import org.springframework.data.jpa.repository.support.JpaRepositoryImplementation;
import org.springframework.data.repository.core.RepositoryInformation;
import org.springframework.data.repository.core.RepositoryMetadata;
import org.springframework.data.repository.core.support.RepositoryFactorySupport;
import org.springframework.util.Assert;
import javax.persistence.EntityManager;
import java.io.Serializable;
/**
* 自定义repository工厂类
*
* @author :enilu
* @date :Created in 2019/6/29 12:59
*/
public class BaseRepositoryFactoryBean, T, ID extends Serializable>
extends JpaRepositoryFactoryBean {
public BaseRepositoryFactoryBean(Class extends JR> repositoryInterface) {
super(repositoryInterface);
}
@Override
protected RepositoryFactorySupport createRepositoryFactory(EntityManager entityManager) {
return new BaseRepositoryFactory(entityManager);
}
private static class BaseRepositoryFactory extends JpaRepositoryFactory {
private final EntityManager entityManager;
public BaseRepositoryFactory(EntityManager entityManager) {
super(entityManager);
this.entityManager = entityManager;
}
@Override
protected JpaRepositoryImplementation, ?> getTargetRepository(RepositoryInformation information, EntityManager entityManager) {
JpaEntityInformation, Serializable> entityInformation = this.getEntityInformation(information.getDomainType());
Object repository = this.getTargetRepositoryViaReflection(information, new Object[]{entityInformation, entityManager});
Assert.isInstanceOf(BaseRepositoryImpl.class, repository);
return (JpaRepositoryImplementation)repository;
}
@Override
protected Class> getRepositoryBaseClass(RepositoryMetadata metadata) {
return BaseRepositoryImpl.class;
}
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/dao/BaseRepositoryImpl.java
================================================
package cn.enilu.material.dao;
import cn.enilu.material.bean.vo.query.SearchFilter;
import org.hibernate.SQLQuery;
import org.hibernate.query.internal.NativeQueryImpl;
import org.hibernate.transform.Transformers;
import org.springframework.data.jpa.repository.support.JpaEntityInformation;
import org.springframework.data.jpa.repository.support.SimpleJpaRepository;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
/**
* 基础dao实现类
*
* @author :enilu
* @date :Created in 2019/6/29 12:53
*/
public class BaseRepositoryImpl
extends SimpleJpaRepository
implements BaseRepository {
private final EntityManager entityManager;
private Class klass;
BaseRepositoryImpl(JpaEntityInformation entityInformation,
EntityManager entityManager) {
super(entityInformation, entityManager);
this.entityManager = entityManager;
this.klass = (Class) entityInformation.getJavaType();
}
@Override
public List queryBySql(String sql) {
return queryBySql(sql,null);
}
@Override
public List queryBySql(String sql, List filters) {
Query query = entityManager.createNativeQuery(sql);
query.unwrap(NativeQueryImpl.class)
.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
if(filters!=null&&!filters.isEmpty()) {
for (SearchFilter filter : filters) {
query.setParameter(filter.fieldName, filter.value);
}
}
List list = query.getResultList();
return list;
}
@Override
public Object getBySql(String sql) {
List list = entityManager.createNativeQuery(sql).getResultList();
if(list.isEmpty()){
return null;
}
return list.get(0);
}
@Override
public T get(String sql) {
List list = entityManager.createNativeQuery(sql,klass).getResultList();
return list.get(0);
}
@Override
public int execute(String sql) {
return entityManager.createNativeQuery(sql).executeUpdate();
}
@Override
public Class getDataClass() {
return klass;
}
@Override
public List query(String sql) {
return entityManager.createNativeQuery(sql,klass).getResultList();
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/dao/DaoConfiguration.java
================================================
package cn.enilu.material.dao;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
/**
* Name: DabConfiguration
* User: Yao
* Date: 2018/2/27
* Time: 13:54
*/
@Configuration
@EnableJpaRepositories("cn.enilu.material.dao")
public class DaoConfiguration {
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/dao/cache/BaseCache.java
================================================
package cn.enilu.material.dao.cache;
import cn.enilu.material.bean.vo.SpringContextHolder;
import cn.enilu.material.service.system.impl.ConstantFactory;
/**
* @author :enilu
* @date :Created in 2020/4/26 19:07
*/
public abstract class BaseCache implements Cache {
@Override
public void cache() {
SpringContextHolder.getBean(ConstantFactory.class).cleanLocalCache();
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/dao/cache/Cache.java
================================================
package cn.enilu.material.dao.cache;
/**
* 顶级缓存接口
*/
public interface Cache {
/**
* 将数据库中的数据加载到缓存中
*/
void cache();
/**
* 获取缓存数据
*
* @param key
* @return
*/
Object get(String key);
/**
* 设置缓存数据
*
* @param key
* @param val
*/
void set(String key, Object val);
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/dao/cache/CacheDao.java
================================================
package cn.enilu.material.dao.cache;
import java.io.Serializable;
/**
* CacheDao
*
* @author enilu
* @version 2018/9/12 0012
*/
public interface CacheDao {
/**
* 设置hash key值
*
* @param key
* @param k
* @param val
*/
void hset(Serializable key, Serializable k, Object val);
/**
* 获取hash key值
*
* @param key
* @param k
* @return
*/
Serializable hget(Serializable key, Serializable k);
/**
* 获取hash key值
* @param key
* @param k
* @param klass
* @param
* @return
*/
T hget(Serializable key, Serializable k,Class klass);
/**
* 设置key值,超时失效
*
* @param key
* @param val
*/
void set(Serializable key, Object val);
/**
* 获取key值
*
* @param key
* @return
*/
T get(Serializable key,Class klass);
String get(Serializable key);
void del(Serializable key);
void hdel(Serializable key, Serializable k);
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/dao/cache/ConfigCache.java
================================================
package cn.enilu.material.dao.cache;
/**
* 全局配置数据访问
*/
public interface ConfigCache extends Cache {
/**
* 获取全局配置参数值,可选本地缓存
* @param key
* @return
*/
String get(String key, boolean local);
/**
* 获取全局配置参数值(带默认值)
*
* @param key the key
* @param def the default value
* @return the config
*/
String get(String key, String def);
/**
* 删除缓存
* @param key
* @param val
*/
void del(String key, String val);
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/dao/cache/DictCache.java
================================================
package cn.enilu.material.dao.cache;
import cn.enilu.material.bean.entity.system.Dict;
import java.util.List;
/**
* 字典缓存
*
* @author zt
* @version 2018/12/23 0023
*/
public interface DictCache extends Cache{
List getDictsByPname(String dictName);
String getDict(Long dictId);
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/dao/cache/TokenCache.java
================================================
package cn.enilu.material.dao.cache;
import cn.enilu.material.bean.core.ShiroUser;
import cn.enilu.material.dao.cache.impl.EhcacheDao;
import cn.enilu.material.utils.HttpKit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* 用户登录时,生成的Token与用户ID的对应关系
*/
@Service
public class TokenCache {
@Autowired
private EhcacheDao ehcacheDao;
public void put(String token, Long idUser) {
ehcacheDao.hset(EhcacheDao.SESSION,token, idUser);
}
public Long get(String token) {
return ehcacheDao.hget(EhcacheDao.SESSION,token,Long.class);
}
public Long getIdUser(){
return ehcacheDao.hget(EhcacheDao.SESSION,HttpKit.getToken(),Long.class );
}
public void remove(String token) {
ehcacheDao.hdel(EhcacheDao.SESSION,token);
}
public void setUser(String token, ShiroUser shiroUser){
ehcacheDao.hset(EhcacheDao.SESSION,token+"user",shiroUser);
}
public ShiroUser getUser(String token){
return ehcacheDao.hget(EhcacheDao.SESSION,token+"user",ShiroUser.class);
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/dao/cache/impl/ConfigCacheImpl.java
================================================
package cn.enilu.material.dao.cache.impl;
import cn.enilu.material.bean.entity.system.Cfg;
import cn.enilu.material.dao.cache.BaseCache;
import cn.enilu.material.dao.cache.CacheDao;
import cn.enilu.material.dao.cache.ConfigCache;
import cn.enilu.material.dao.system.CfgRepository;
import cn.enilu.material.utils.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 全局参数缓存实现类
*
* @author enilu
* @version 2018/12/20 0020
*/
@Service
public class ConfigCacheImpl extends BaseCache implements ConfigCache {
private static final Logger logger = LoggerFactory.getLogger(ConfigCacheImpl.class);
@Autowired
private CfgRepository cfgRepository;
@Autowired
private CacheDao cacheDao;
@Override
public Object get(String key) {
return (String) cacheDao.hget(EhcacheDao.CONSTANT,key);
}
@Override
public String get(String key, boolean local) {
String ret = null;
if(local) {
ret = (String) get(key);
}else{
ret = cfgRepository.findByCfgName(key).getCfgValue();
set(key,ret);
}
return ret;
}
@Override
public String get(String key, String def) {
String ret = (String) get(key);
if(StringUtils.isEmpty(ret)){
return ret;
}
return ret;
}
@Override
public void set(String key, Object val) {
cacheDao.hset(EhcacheDao.CONSTANT,key,val);
}
@Override
public void del(String key, String val) {
cacheDao.hdel(EhcacheDao.CONSTANT,val);
}
@Override
public void cache() {
super.cache();
logger.info("reset config cache");
List list = cfgRepository.findAll();
if (list != null && !list.isEmpty()) {
for (Cfg cfg : list) {
if (StringUtils.isNotEmpty(cfg.getCfgName()) && StringUtils.isNotEmpty(cfg.getCfgValue())) {
set(cfg.getCfgName(),cfg.getCfgValue());
}
}
}
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/dao/cache/impl/DictCacheImpl.java
================================================
package cn.enilu.material.dao.cache.impl;
import cn.enilu.material.bean.constant.cache.CacheKey;
import cn.enilu.material.bean.entity.system.Dict;
import cn.enilu.material.dao.cache.BaseCache;
import cn.enilu.material.dao.cache.CacheDao;
import cn.enilu.material.dao.cache.DictCache;
import cn.enilu.material.dao.system.DictRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* DictCacheImpl
*
* @author zt
* @version 2018/12/23 0023
*/
@Component
public class DictCacheImpl extends BaseCache implements DictCache {
@Autowired
private DictRepository dictRepository;
@Autowired
private CacheDao cacheDao;
@Override
public List getDictsByPname(String dictName) {
return (List) cacheDao.hget(EhcacheDao.CONSTANT, CacheKey.DICT + dictName, List.class);
}
@Override
public String getDict(Long dictId) {
return (String) get(CacheKey.DICT_NAME + String.valueOf(dictId));
}
@Override
public void cache() {
super.cache();
List list = dictRepository.findByPid(0L);
for (Dict dict : list) {
List children = dictRepository.findByPid(dict.getId());
if (children.isEmpty()) {
continue;
}
set(String.valueOf(dict.getId()), children);
set(dict.getName(), children);
for (Dict child : children) {
set(CacheKey.DICT_NAME + String.valueOf(child.getId()), child.getName());
}
}
}
@Override
public Object get(String key) {
return cacheDao.hget(EhcacheDao.CONSTANT, CacheKey.DICT + key);
}
@Override
public void set(String key, Object val) {
cacheDao.hset(EhcacheDao.CONSTANT, CacheKey.DICT + key, val);
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/dao/cache/impl/EhcacheDao.java
================================================
package cn.enilu.material.dao.cache.impl;
import cn.enilu.material.dao.cache.CacheDao;
import org.springframework.cache.Cache;
import org.springframework.cache.CacheManager;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.Serializable;
/**
* EhcacheDao
*
* @author enilu
* @version 2018/9/12 0012
*/
@Component
public class EhcacheDao implements CacheDao {
//缓存常量,永不过期
public static final String CONSTANT = "CONSTANT";
public static final String SESSION = "SESSION";
@Resource
private CacheManager cacheManager;
@Override
public void hset(Serializable key, Serializable k, Object val) {
Cache cache = cacheManager.getCache(String.valueOf(key));
cache.put(k,val);
}
@Override
public Serializable hget(Serializable key, Serializable k) {
Cache cache = cacheManager.getCache(String.valueOf(key));
return cache.get(k,String.class);
}
@Override
public T hget(Serializable key, Serializable k,Class klass) {
Cache cache = cacheManager.getCache(String.valueOf(key));
return cache.get(k,klass);
}
@Override
public void set(Serializable key, Object val) {
Cache cache = cacheManager.getCache(CONSTANT);
cache.put(key,val);
}
@Override
public T get(Serializable key,Class klass) {
return cacheManager.getCache(CONSTANT).get(String.valueOf(key),klass);
}
@Override
public String get(Serializable key) {
return cacheManager.getCache(CONSTANT).get(String.valueOf(key),String.class);
}
@Override
public void del(Serializable key) {
cacheManager.getCache(CONSTANT).put(String.valueOf(key),null);
}
@Override
public void hdel(Serializable key, Serializable k) {
cacheManager.getCache(String.valueOf(key)).put(String.valueOf(k),null);
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/dao/cache/package-info.java
================================================
/**
* package-info
*
* @version 2018/9/11 0011
* @author enilu
*/
package cn.enilu.material.dao.cache;
================================================
FILE: material-core/src/main/java/cn/enilu/material/dao/message/MessageRepository.java
================================================
package cn.enilu.material.dao.message;
import cn.enilu.material.bean.entity.message.Message;
import cn.enilu.material.dao.BaseRepository;
import java.util.ArrayList;
public interface MessageRepository extends BaseRepository {
void deleteAllByIdIn(ArrayList list);
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/dao/message/MessagesenderRepository.java
================================================
package cn.enilu.material.dao.message;
import cn.enilu.material.bean.entity.message.MessageSender;
import cn.enilu.material.dao.BaseRepository;
public interface MessagesenderRepository extends BaseRepository {
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/dao/message/MessagetemplateRepository.java
================================================
package cn.enilu.material.dao.message;
import cn.enilu.material.bean.entity.message.MessageTemplate;
import cn.enilu.material.dao.BaseRepository;
import java.util.List;
public interface MessagetemplateRepository extends BaseRepository {
MessageTemplate findByCode(String code);
List findByIdMessageSender(Long idMessageSender);
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/dao/system/CfgRepository.java
================================================
package cn.enilu.material.dao.system;
import cn.enilu.material.bean.entity.system.Cfg;
import cn.enilu.material.dao.BaseRepository;
public interface CfgRepository extends BaseRepository {
Cfg findByCfgName(String cfgName);
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/dao/system/DeptRepository.java
================================================
package cn.enilu.material.dao.system;
import cn.enilu.material.bean.entity.system.Dept;
import cn.enilu.material.dao.BaseRepository;
import org.springframework.data.jpa.repository.Query;
import java.util.List;
/**
* Created on 2018/3/21 0021.
*
* @author enilu
*/
public interface DeptRepository extends BaseRepository {
List findByPidsLike(String pid);
@Query(nativeQuery = true,value = "SELECT id, pid AS pId, simplename AS NAME, ( CASE WHEN (pId = 0 OR pId IS NULL) THEN 'true' ELSE 'false' END ) AS isOpen FROM t_sys_dept")
List tree();
List findBySimplenameLikeOrFullnameLike(String name,String name2);
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/dao/system/DictRepository.java
================================================
package cn.enilu.material.dao.system;
import cn.enilu.material.bean.entity.system.Dict;
import cn.enilu.material.dao.BaseRepository;
import java.util.List;
public interface DictRepository extends BaseRepository {
List findByPid(Long pid);
List findByNameAndPid(String name,Long pid);
List findByNameLike(String name);
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/dao/system/FileInfoRepository.java
================================================
package cn.enilu.material.dao.system;
import cn.enilu.material.bean.entity.system.FileInfo;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
public interface FileInfoRepository extends PagingAndSortingRepository
, JpaRepository, JpaSpecificationExecutor {
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/dao/system/LoginLogRepository.java
================================================
package cn.enilu.material.dao.system;
import cn.enilu.material.bean.entity.system.LoginLog;
import cn.enilu.material.dao.BaseRepository;
/**
* Created on 2018/3/21 0021.
*
* @author enilu
*/
public interface LoginLogRepository extends BaseRepository{
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/dao/system/MenuRepository.java
================================================
package cn.enilu.material.dao.system;
import cn.enilu.material.bean.entity.system.Menu;
import cn.enilu.material.dao.BaseRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* Created on 2018/3/21 0021.
*
* @author enilu
*/
public interface MenuRepository extends BaseRepository {
Menu findByCode(String code);
List findByPcodesLike(String code);
List findByNameLikeAndLevels(String name,Integer levels);
@Query(nativeQuery = true,value="SELECT m1.id AS id, m1.icon AS icon, ( CASE WHEN (m2.id = 0 OR m2.id IS NULL) " +
"THEN 0 ELSE m2.id END ) AS parentId, m1. NAME AS NAME, m1.url AS url, m1.levels AS levels, m1.ismenu AS " +
"ismenu, m1.num AS num,m1.code as code,m1.status as status FROM t_sys_menu m1 LEFT JOIN t_sys_menu m2 ON " +
"m1.pcode = " +
"m2. " +
"CODE " +
"INNER " +
"JOIN ( SELECT ID FROM t_sys_menu WHERE ID IN ( SELECT menuid FROM t_sys_relation rela WHERE rela.roleid IN (?1))) m3 ON m1.id = m3.id WHERE m1.ismenu = 1 and m1.status = 1 ORDER BY levels, num ASC")
List getMenusByRoleIds(List roleList);
@Query(nativeQuery = true,value="SELECT m1.id AS id, m1.icon AS icon, ( CASE WHEN (m2.id = 0 OR m2.id IS NULL) " +
"THEN 0 ELSE m2.id END ) AS parentId, m1. NAME AS NAME, m1.url AS url, m1.levels AS levels, m1.ismenu AS " +
"ismenu, m1.num AS num, m1. CODE AS CODE,m1.status as status FROM t_sys_menu m1 LEFT JOIN t_sys_menu m2 " +
"ON " +
"m1.pcode = m2. CODE ORDER BY levels, num ASC")
List getMenus();
@Query(nativeQuery = true,value="select menuid from t_sys_relation where roleid=?1")
List getMenuIdsByRoleId(Integer roleId);
@Query(nativeQuery = true,value = "SELECT m1.id AS id, ( CASE WHEN (m2.id = 0 OR m2.id IS NULL) THEN 0 ELSE m2.id END ) AS pId, m1. NAME AS NAME, ( CASE WHEN (m2.id = 0 OR m2.id IS NULL) THEN 'true' ELSE 'false' END ) AS isOpen, m1.code FROM t_sys_menu m1 LEFT JOIN t_sys_menu m2 ON m1.pcode = m2. CODE ORDER BY m1.id ASC")
List menuTreeList();
@Query(nativeQuery = true,value = "SELECT m1.id AS id, ( CASE WHEN (m2.id = 0 OR m2.id IS NULL) THEN 0 ELSE m2.id END ) AS pId, m1. NAME AS NAME, ( CASE WHEN (m2.id = 0 OR m2.id IS NULL) THEN 'true' ELSE 'false' END ) AS isOpen, ( CASE WHEN (m3.ID = 0 OR m3.ID IS NULL) THEN 'false' ELSE 'true' END ) \"checked\" FROM t_sys_menu m1 LEFT JOIN t_sys_menu m2 ON m1.pcode = m2. CODE LEFT JOIN ( SELECT ID FROM t_sys_menu WHERE ID IN (?1)) m3 ON m1.id = m3.id ORDER BY m1.id ASC")
List menuTreeListByMenuIds(List menuIds);
@Modifying
@Transactional
@Query(nativeQuery = true,value = "delete from t_sys_relation where menuid=?1")
void deleteRelationByMenu(Long menuId);
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/dao/system/OperationLogRepository.java
================================================
package cn.enilu.material.dao.system;
import cn.enilu.material.bean.entity.system.OperationLog;
import cn.enilu.material.dao.BaseRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import javax.transaction.Transactional;
/**
* Created on 2018/3/21 0021.
*
* @author enilu
*/
public interface OperationLogRepository extends BaseRepository {
@Modifying
@Transactional
@Query(nativeQuery = true,value = "delete from t_sys_operation_log")
int clear();
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/dao/system/RelationRepository.java
================================================
package cn.enilu.material.dao.system;
import cn.enilu.material.bean.entity.system.Relation;
import cn.enilu.material.dao.BaseRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional;
/**
* Created on 2018/3/21 0021.
*
* @author enilu
*/
public interface RelationRepository extends BaseRepository {
@Transactional
@Modifying
@Query(nativeQuery = true,value = "delete from t_sys_relation where roleid=?1")
int deleteByRoleId(Long roleId);
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/dao/system/RoleRepository.java
================================================
package cn.enilu.material.dao.system;
import cn.enilu.material.bean.entity.system.Role;
import cn.enilu.material.dao.BaseRepository;
import org.springframework.data.jpa.repository.Query;
import java.util.List;
/**
* Created on 2018/3/21 0021.
*
* @author enilu
*/
public interface RoleRepository extends BaseRepository {
@Query(nativeQuery = true,value = "SELECT id, pId, NAME, ( CASE WHEN (pId = 0 OR pId IS NULL) THEN 'true' ELSE 'false' END ) OPEN FROM t_sys_role")
List roleTreeList();
@Query(nativeQuery = true,value="SELECT r.id AS id, pId AS pId, NAME AS NAME, ( CASE WHEN (pId = 0 OR pId IS NULL) THEN 'true' ELSE 'false' END ) \"open\", ( CASE WHEN (r1.ID = 0 OR r1.ID IS NULL) THEN 'false' ELSE 'true' END ) AS checked FROM t_sys_role r LEFT JOIN ( SELECT ID FROM t_sys_role WHERE ID IN (?1)) r1 ON r.ID = r1.ID ORDER BY pId, num ASC")
List roleTreeListByRoleId(Long[] ids);
List findByName(String roleName);
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/dao/system/SysNoticeRepository.java
================================================
package cn.enilu.material.dao.system;
import cn.enilu.material.bean.entity.system.Notice;
import cn.enilu.material.dao.BaseRepository;
import java.util.List;
/**
* Created on 2018/3/21 0021.
*
* @author enilu
*/
public interface SysNoticeRepository extends BaseRepository {
List findByTitleLike(String name);
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/dao/system/TaskLogRepository.java
================================================
package cn.enilu.material.dao.system;
import cn.enilu.material.bean.entity.system.TaskLog;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
public interface TaskLogRepository extends PagingAndSortingRepository
,JpaSpecificationExecutor
,JpaRepository {
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/dao/system/TaskRepository.java
================================================
package cn.enilu.material.dao.system;
import cn.enilu.material.bean.entity.system.Task;
import cn.enilu.material.dao.BaseRepository;
import java.util.List;
public interface TaskRepository extends BaseRepository {
long countByNameLike(String name);
List findByNameLike(String name);
List findAllByDisabled(boolean disable);
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/dao/system/UserRepository.java
================================================
package cn.enilu.material.dao.system;
import cn.enilu.material.bean.entity.system.User;
import cn.enilu.material.dao.BaseRepository;
import java.util.List;
/**
* Created on 2018/3/21 0021.
*
* @author enilu
*/
public interface UserRepository extends BaseRepository {
User findByAccount(String account);
List findByRoleid(String idRole);
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/factory/DictFieldWarpperFactory.java
================================================
package cn.enilu.material.factory;
import cn.enilu.material.bean.enumeration.BizExceptionEnum;
import cn.enilu.material.bean.exception.ApplicationException;
import cn.enilu.material.service.system.IConstantFactory;
import cn.enilu.material.service.system.impl.ConstantFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.reflect.Method;
/**
* 字段的包装创建工厂
*
* @author fengshuonan
* @date 2017-05-06 15:12
*/
public class DictFieldWarpperFactory {
private static Logger logger = LoggerFactory.getLogger(DictFieldWarpperFactory.class);
public static Object createFieldWarpper(Object field, String methodName) {
IConstantFactory me = ConstantFactory.me();
try {
Method method = IConstantFactory.class.getMethod(methodName, field.getClass());
Object result = method.invoke(me, field);
return result;
} catch (Exception e) {
logger.error("field:{},methodName:{}",field,methodName);
try {
Method method = IConstantFactory.class.getMethod(methodName, Long.class);
Object result = method.invoke(me, Long.valueOf(field.toString()));
return result;
} catch (Exception e1) {
throw new ApplicationException(BizExceptionEnum.ERROR_WRAPPER_FIELD);
}
}
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/factory/UserFactory.java
================================================
package cn.enilu.material.factory;
import cn.enilu.material.bean.dto.UserDto;
import cn.enilu.material.bean.entity.system.User;
import org.springframework.beans.BeanUtils;
/**
* 用户创建工厂
*
* @author fengshuonan
* @date 2017-05-05 22:43
*/
public class UserFactory {
public static User createUser(UserDto userDto, User user){
if(userDto == null){
return null;
}else{
BeanUtils.copyProperties(userDto,user);
return user;
}
}
public static User updateUser(UserDto userDto,User user){
if(userDto == null){
return null;
}else{
user.setName(userDto.getName());
user.setDeptid(userDto.getDeptid());
user.setSex(userDto.getSex());
user.setPhone(userDto.getPhone());
user.setEmail(userDto.getEmail());
user.setBirthday(userDto.getBirthday());
user.setAvatar(userDto.getAvatar());
if(userDto.getStatus()!=null){
user.setStatus(userDto.getStatus());
}
return user;
}
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/platform/package-info.java
================================================
/**
* package-info
*
* @version 2018/9/11 0011
* @author enilu
*/
package cn.enilu.material.platform;
================================================
FILE: material-core/src/main/java/cn/enilu/material/service/BaseService.java
================================================
package cn.enilu.material.service;
import cn.enilu.material.bean.constant.cache.Cache;
import cn.enilu.material.bean.vo.query.DynamicSpecifications;
import cn.enilu.material.bean.vo.query.Page;
import cn.enilu.material.bean.vo.query.SearchFilter;
import cn.enilu.material.dao.BaseRepository;
import cn.enilu.material.utils.Lists;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;
import java.io.Serializable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
*
* @author :enilu
* @date :Created in 2019/6/29 22:32
*/
public abstract class BaseService>
implements CrudService {
@Autowired
private R dao;
@Override
@CacheEvict(value = Cache.APPLICATION ,key = "#root.targetClass.simpleName+':'+#id")
public void delete(ID id) {
dao.deleteById(id);
}
@Override
public void delete(Iterable ids) {
Iterator iterator = ids.iterator();
while (iterator.hasNext()) {
ID id = iterator.next();
dao.deleteById(id);
}
}
@Override
public T insert(T record) {
return dao.save(record);
}
@Override
@Cacheable(value = Cache.APPLICATION ,key = "#root.targetClass.simpleName+':'+#id")
public T get(ID id) {
return dao.findById(id).get();
}
@Override
public T get(SearchFilter filter) {
List list = queryAll(filter);
return list.isEmpty()?null:list.get(0);
}
@Override
public T get(List filters) {
List list = queryAll(filters);
return list.isEmpty()?null:list.get(0);
}
@Override
public List query(Iterable ids) {
return dao.findAllById(ids);
}
@Override
public List queryAll() {
return dao.findAll();
}
@Override
public Page queryPage(Page page) {
Pageable pageable = null;
if(page.isOpenSort()) {
pageable = new PageRequest(page.getCurrent()-1, page.getSize(), page.isAsc() ? Sort.Direction.ASC : Sort.Direction.DESC, page.getOrderByField());
}else{
pageable = new PageRequest(page.getCurrent()-1,page.getSize(), Sort.Direction.DESC,"id");
}
Specification specification = DynamicSpecifications.bySearchFilter(page.getFilters(),dao.getDataClass());
org.springframework.data.domain.Page pageResult = dao.findAll(specification,pageable);
page.setTotal(Integer.valueOf(pageResult.getTotalElements()+""));
page.setRecords(pageResult.getContent());
return page;
}
@Override
public List queryAll(List filters) {
return queryAll(filters,null);
}
@Override
public List queryAll(SearchFilter filter) {
return queryAll(filter,null);
}
@Override
public List queryAll(List filters, Sort sort) {
Specification specification = DynamicSpecifications.bySearchFilter(filters,dao.getDataClass());
if(sort==null){
return dao.findAll(specification);
}
return dao.findAll(specification,sort);
}
@Override
public List queryAll(SearchFilter filter, Sort sort) {
if(filter!=null){
return queryAll(Lists.newArrayList(filter),sort);
}else {
return queryAll(Lists.newArrayList(), sort);
}
}
@Override
public List queryBySql(String sql){
return queryBySql(sql,Lists.newArrayList());
}
@Override
public List queryBySql(String sql, SearchFilter filter){
return dao.queryBySql(sql,Lists.newArrayList(filter));
}
@Override
public List queryBySql(String sql, List filter){
return dao.queryBySql(sql,filter);
}
@Override
public long count(SearchFilter filter) {
return count(Lists.newArrayList(filter));
}
@Override
public long count(List filters) {
Specification specification = DynamicSpecifications.bySearchFilter(filters,dao.getDataClass());
return dao.count(specification);
}
@Override
@CacheEvict(value = Cache.APPLICATION ,key = "#root.targetClass.simpleName+':'+#record.id")
public T update(T record) {
return dao.save(record);
}
@Override
public void clear() {
dao.deleteAllInBatch();
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/service/CrudService.java
================================================
package cn.enilu.material.service;
/**
*
* @author :enilu
* @date :Created in 2019/6/29 22:31
*/
public interface CrudService extends
InsertService,
UpdateService,
DeleteService,
SelectService {
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/service/DeleteService.java
================================================
package cn.enilu.material.service;
/**
*
* @author :enilu
* @date :Created in 2019/6/29 22:29
*/
public interface DeleteService {
/**
* 根据主键删除记录
*
* @param id 主键
*/
void delete(ID id);
/**
* 根据主键删除记录
*
* @param ids 主键集合
*/
void delete(Iterable ids);
/**
* 清空表数据
*/
void clear();
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/service/InsertService.java
================================================
package cn.enilu.material.service;
/**
*
* @author :enilu
* @date :Created in 2019/6/29 22:28
*/
public interface InsertService {
/**
* 添加一条数据
*
* @param record 要添加的数据
* @return 添加后生成的主键
*/
T insert(T record);
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/service/SelectService.java
================================================
package cn.enilu.material.service;
import cn.enilu.material.bean.vo.query.SearchFilter;
import cn.enilu.material.bean.vo.query.Page;
import org.springframework.data.domain.Sort;
import java.util.List;
import java.util.Map;
/**
*
* @author :enilu
* @date :Created in 2019/6/29 22:30
*/
public interface SelectService {
/**
* 根据主键查询
* @param id 主键
* @return 查询结果,无结果时返回{@code null}
*/
T get(ID id);
T get(SearchFilter filter);
T get(List filters);
/**
* 根据多个主键查询
* @param ids 主键集合
* @return 查询结果,如果无结果返回空集合
*/
List query(Iterable ids);
/**
* 查询所有结果
* @return 所有结果,如果无结果则返回空集合
*/
List queryAll();
/**
* 查询所有结果
* @return 获取分页结果
*/
Page queryPage(Page page);
/**
* 根据多个条件查询列表数据
* @param filters
* @return
*/
List queryAll(List filters);
/**
* 根据多个条件查询列表数据,并排序
* @param filters
* @param sort
* @return
*/
List queryAll(List filters, Sort sort);
/**
* 根据的单个条件查询列表数据
* @param filter
* @return
*/
List queryAll(SearchFilter filter);
/**
* 根据的单个条件查询列表数据
* @param filter
* @param sort
* @return
*/
List queryAll(SearchFilter filter,Sort sort);
/**
* 根据原生sql查询数据列表,
* 例:select sum(a.1+a.2) from a where a.c=:c
* @param sql
* @return
*/
List queryBySql(String sql);
/**
* 根据原生sql查询数据列表
* @param sql
* @param filter
* @return
*/
List queryBySql(String sql, SearchFilter filter);
/**
* 根据原生sql查询数据列表
* @param sql
* @param filter
* @return
*/
List queryBySql(String sql, List filter);
/**
* 查询记录数
* @param filter
* @return
*/
long count(SearchFilter filter);
/**
* 查询记录数
* @param filters
* @return
*/
long count(List filters);
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/service/UpdateService.java
================================================
package cn.enilu.material.service;
/**
*
* @author :enilu
* @date :Created in 2019/6/29 22:30
*/
public interface UpdateService {
/**
* 修改记录信息
*
* @param record 要修改的对象
* @return 返回修改的记录
*/
T update(T record);
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/service/message/MessageService.java
================================================
package cn.enilu.material.service.message;
import cn.enilu.material.bean.entity.message.Message;
import cn.enilu.material.bean.entity.message.MessageSender;
import cn.enilu.material.bean.entity.message.MessageTemplate;
import cn.enilu.material.bean.vo.SpringContextHolder;
import cn.enilu.material.dao.message.MessageRepository;
import cn.enilu.material.dao.message.MessagesenderRepository;
import cn.enilu.material.dao.message.MessagetemplateRepository;
import cn.enilu.material.service.BaseService;
import cn.enilu.material.service.message.email.EmailSender;
import cn.enilu.material.service.message.sms.SmsSender;
import cn.enilu.material.utils.StringUtils;
import com.google.common.base.Splitter;
import com.google.common.collect.Lists;
import org.apache.commons.lang3.text.StrSubstitutor;
import org.nutz.lang.Lang;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.InputStreamSource;
import org.springframework.stereotype.Service;
import java.text.MessageFormat;
import java.util.*;
/**
* MessageService
*
* @author enilu
* @version 2019/05/17 0017
*/
@Service
public class MessageService extends BaseService {
private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private MessageRepository messageRepository;
@Autowired
private MessagesenderRepository messagesenderRepository;
@Autowired
private MessagetemplateRepository messagetemplateRepository;
public boolean delete(String ids) {
final ArrayList list = Lists.newArrayList(Splitter.on(',').split(ids));
messageRepository.deleteAllByIdIn(list);
return true;
}
/**
* 发送复杂模板的邮件
* @param tplCode
* @param from
* @param to
* @param cc
* @param title
* @param dataMap
*/
public void sendTplEmail(String tplCode, String from, String to, String cc, String title, Map dataMap) {
MessageTemplate messageTemplate = messagetemplateRepository.findByCode(tplCode);
String content = getContent(messageTemplate.getContent(), dataMap);
sendEmailMessage(tplCode,from,to,cc,title,content,messageTemplate,null,null);
}
/**
* 发送带附件的邮件
* @param tplCode
* @param from
* @param to
* @param cc
* @param title
* @param attachmentFilename
* @param inputStreamSource
* @param dataMap
*/
public void sendTplEmail(String tplCode, String from, String to, String cc, String title,
String attachmentFilename, InputStreamSource inputStreamSource,
Map dataMap) {
MessageTemplate messageTemplate = messagetemplateRepository.findByCode(tplCode);
String content = getContent(messageTemplate.getContent(), dataMap);
sendEmailMessage(tplCode,from,to,cc,title,content,messageTemplate,attachmentFilename,inputStreamSource);
}
/**
* 发送简单模板邮件
* @param tplCode
* @param from
* @param to
* @param cc
* @param title
* @param args
*/
public void sendSimpleEmail(String tplCode, String from, String to, String cc, String title, String... args) {
MessageTemplate messageTemplate = messagetemplateRepository.findByCode(tplCode);
String content = getContent(messageTemplate.getContent(), args);
sendEmailMessage(tplCode,from,to,cc,title,content,messageTemplate,null,null);
}
/**
* 发送短信
* @param tplCode
* @param receiver
* @param args
*/
public void sendSms(String tplCode, String receiver, String... args) {
MessageTemplate messageTemplate = messagetemplateRepository.findByCode(tplCode);
String content = getContent(messageTemplate.getContent(), args);
boolean isSuccess = false;
try {
isSuccess = this.sendSmsMessage(receiver, content, messageTemplate, args);
}catch (Exception e){
logger.error(e.getMessage(), e);
}
saveMessage(0,tplCode,receiver,content,isSuccess);
}
private void sendEmailMessage(String tplCode, String from, String to, String cc, String title,
String content,MessageTemplate messageTemplate,
String attachmentFilename, InputStreamSource inputStreamSource){
try {
EmailSender emailSender = getEmailSender(messageTemplate);
boolean isSuccess = false;
if(inputStreamSource!=null){
isSuccess = emailSender.sendEmail(from, to, cc, title, content,attachmentFilename,inputStreamSource);
}else {
isSuccess = emailSender.sendEmail(from, to, cc, title, content);
}
saveMessage(1, tplCode, to, content, isSuccess);
}catch (Exception e){
logger.error(e.getMessage(), e);
saveMessage(1, tplCode, to, content, false);
}
}
private String getContent(String template, String... args) {
List argList = new ArrayList<>();
argList.add("");
if (args != null) {
Collections.addAll(argList, args);
}
String content = MessageFormat.format(template, Lang.collection2array(argList));
return content;
}
private String getContent(String template, Map dataMap) {
return StrSubstitutor.replace(template, dataMap);
}
private void saveMessage(Integer type, String tplCode, String receiver, String content, Boolean sendResult) {
Message message = new Message();
message.setType(type);
message.setTplCode(tplCode);
message.setType(0);
message.setState(sendResult ? 1 : 2);
message.setReceiver(receiver);
message.setCreateTime(new Date());
message.setContent(content);
messageRepository.save(message);
}
private boolean sendSmsMessage( String receiver, String content, MessageTemplate messageTemplate,String... args) throws Exception {
String tplCode = getTpl(messageTemplate);
SmsSender smsSender = getSmsSender(messageTemplate);
boolean success = false;
String[] receivers = receiver.split(",|;", -1);
for (String oneReceiver : receivers) {
try {
if (StringUtils.isNotEmpty(oneReceiver)) {
success = smsSender.sendSms(tplCode, oneReceiver, args, content);
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
return success;
}
private SmsSender getSmsSender(MessageTemplate messageTemplate) throws Exception {
MessageSender messageSender = messagesenderRepository.findById(messageTemplate.getIdMessageSender()).get();
if (messageSender != null) {
try {
return SpringContextHolder.getBean(messageSender.getClassName());
} catch (Exception e) {
logger.error("获取SmsService实现类失败", e);
throw new Exception("smsService名称配置失败:" + messageSender.getClassName());
}
} else {
throw new Exception("未配置运营商模版id");
}
}
private EmailSender getEmailSender(MessageTemplate messageTemplate) throws Exception {
MessageSender messageSender = messagesenderRepository.findById(messageTemplate.getIdMessageSender()).get();
if (messageSender != null) {
try {
return SpringContextHolder.getBean(messageSender.getClassName());
} catch (Exception e) {
logger.error("获取SmsService实现类失败", e);
throw new Exception("smsService名称配置失败:" + messageSender.getClassName());
}
} else {
throw new Exception("未配置运营商模版id");
}
}
private String getTpl(MessageTemplate messageTemplate) {
MessageSender messageSender = messagesenderRepository.findById(messageTemplate.getIdMessageSender()).get();
if (messageSender != null && StringUtils.isNotEmpty(messageSender.getTplCode())) {
return messageSender.getTplCode();
} else {
return null;
}
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/service/message/MessagesenderService.java
================================================
package cn.enilu.material.service.message;
import cn.enilu.material.bean.entity.message.MessageSender;
import cn.enilu.material.bean.entity.message.MessageTemplate;
import cn.enilu.material.bean.enumeration.BizExceptionEnum;
import cn.enilu.material.bean.exception.ApplicationException;
import cn.enilu.material.dao.message.MessagesenderRepository;
import cn.enilu.material.dao.message.MessagetemplateRepository;
import cn.enilu.material.service.BaseService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* MessagesenderService
*
* @author enilu
* @version 2019/05/17 0017
*/
@Service
public class MessagesenderService extends BaseService {
private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private MessagesenderRepository messageSenderRepository;
@Autowired
private MessagetemplateRepository messagetemplateRepository;
public void save(MessageSender messageSender){
messageSenderRepository.save(messageSender);
}
@Override
public void delete(Long id) throws ApplicationException {
List templateList = messagetemplateRepository.findByIdMessageSender(id);
if(templateList.isEmpty()) {
messageSenderRepository.deleteById(id);
}else{
throw new ApplicationException(BizExceptionEnum.CAN_NOT_DELETE);
}
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/service/message/MessagetemplateService.java
================================================
package cn.enilu.material.service.message;
import cn.enilu.material.bean.entity.message.MessageTemplate;
import cn.enilu.material.dao.message.MessagetemplateRepository;
import cn.enilu.material.service.BaseService;
import org.springframework.stereotype.Service;
/**
* MessagetemplateService
*
* @author enilu
* @version 2019/05/17 0017
*/
@Service
public class MessagetemplateService extends BaseService {
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/service/message/email/DefaultEmailSender.java
================================================
package cn.enilu.material.service.message.email;
import cn.enilu.material.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.InputStreamSource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import javax.mail.internet.MimeMessage;
/**
* 默认的邮件发送服务类
*
* @author :enilu
* @date :Created in 2019/6/11 15:19
*/
@Service
public class DefaultEmailSender implements EmailSender{
@Autowired
private JavaMailSender javaMailSender;
@Override
public boolean sendEmail(String from, String to, String cc, String title, String content){
return sendEmail(from,to,cc,title,content,null,null);
}
@Override
public boolean sendEmail(String from, String to, String cc, String title, String content, String attachmentFilename, InputStreamSource inputStreamSource) {
MimeMessage message = null;
try {
message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(to);
if(StringUtils.isNotEmpty(cc)) {
helper.setCc(cc);
}
helper.setSubject(title);
helper.setText(content, true);
if(inputStreamSource!=null) {
helper.addAttachment(attachmentFilename, inputStreamSource);
}
javaMailSender.send(message);
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/service/message/email/EmailSender.java
================================================
package cn.enilu.material.service.message.email;
import org.springframework.core.io.InputStreamSource;
/**
* 邮件发送接口
*
* @author :enilu
* @date :Created in 2019/6/17 19:33
*/
public interface EmailSender {
/**
* 发送邮件
* @param from
* @param to
* @param cc
* @param title
* @param content
* @return
*/
boolean sendEmail(String from, String to, String cc, String title, String content);
/**
* 发送带附件的邮件
* @param from
* @param to
* @param cc
* @param title
* @param content
* @param attachmentFilename
* @param inputStreamSource
* @return
*/
boolean sendEmail(String from, String to, String cc, String title, String content, String attachmentFilename, InputStreamSource inputStreamSource);
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/service/message/sms/SmsSender.java
================================================
package cn.enilu.material.service.message.sms;
public interface SmsSender {
/**
* 发送短信,如果内容content不为空,则直接发送内容
* @param tplCode 短信运营商模板号码
* @param receiver
* @param args
* @param content
* @return
*/
boolean sendSms(String tplCode, String receiver, String[] args, String content);
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/service/message/sms/tencent/TencentSmsSender.java
================================================
package cn.enilu.material.service.message.sms.tencent;
import cn.enilu.material.bean.enumeration.ConfigKeyEnum;
import cn.enilu.material.dao.cache.ConfigCache;
import cn.enilu.material.service.message.sms.SmsSender;
import cn.enilu.material.utils.StringUtils;
import com.github.qcloudsms.SmsSingleSender;
import com.github.qcloudsms.SmsSingleSenderResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class TencentSmsSender implements SmsSender {
private Logger logger = LoggerFactory.getLogger(TencentSmsSender.class);
@Autowired
private ConfigCache configCache;
@Override
public boolean sendSms(String tplCode, String receiver, String[] args, String content) {
Integer appid = Integer.valueOf((String) configCache.get(ConfigKeyEnum.API_TENCENT_SMS_APPID.getValue()));
String appkey = (String) configCache.get(ConfigKeyEnum.API_TENCENT_SMS_APPKEY.getValue());
String smsSign = (String) configCache.get(ConfigKeyEnum.API_TENCENT_SMS_SIGN.getValue());
SmsSingleSender ssender = new SmsSingleSender(appid, appkey);
SmsSingleSenderResult result = null;
try{
if(StringUtils.isNotEmpty(tplCode)){
//根据指定模板id发送短信
// 签名参数未提供或者为空时,会使用默认签名发送短信
result = ssender.sendWithParam("86", receiver,
Integer.valueOf(tplCode), args, smsSign, "", "");
}else {
//发送固定内容短信
result = ssender.send(0, "86", receiver,
content, "", "");
}
logger.info(result.errMsg);
return result.result == 0;
} catch (Exception e) {
logger.error("发送短信异常",e);
}
return false;
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/service/system/AccountService.java
================================================
package cn.enilu.material.service.system;
import cn.enilu.material.bean.core.ShiroUser;
import cn.enilu.material.bean.entity.system.User;
import cn.enilu.material.dao.cache.TokenCache;
import cn.enilu.material.platform.log.LogManager;
import cn.enilu.material.platform.log.LogTaskFactory;
import cn.enilu.material.service.system.impl.ConstantFactory;
import cn.enilu.material.utils.Convert;
import cn.enilu.material.utils.HttpKit;
import com.google.common.collect.Lists;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.UUID;
/**
* AccountService
*
* @author enilu
* @version 2018/9/12 0012
*/
@Service
public class AccountService {
@Autowired
private TokenCache tokenCache;
@Autowired
private UserService userService;
public String login(Long idUser) {
String token = UUID.randomUUID().toString();
tokenCache.put(token, idUser);
LogManager.me().executeLog(LogTaskFactory.loginLog(idUser, HttpKit.getIp()));
User user = userService.get(idUser);
Long[] roleArray = Convert.toLongArray(true,Convert.toStrArray(",", user.getRoleid()));
ShiroUser shiroUser = new ShiroUser();
shiroUser.setAccount(user.getAccount());
shiroUser.setDeptId(user.getDeptid());
shiroUser.setDeptName(ConstantFactory.me().getDeptName(user.getDeptid()));
shiroUser.setId(idUser);
shiroUser.setName(user.getName());
shiroUser.setRoleList(Lists.newArrayList(roleArray));
List roleNames = Lists.newArrayList();
List roleCodes = Lists.newArrayList();
for (Long roleId : roleArray) {
roleCodes.add(ConstantFactory.me().getSingleRoleTip(roleId));
roleNames.add(ConstantFactory.me().getSingleRoleName(roleId));
}
shiroUser.setRoleNames(roleNames);
shiroUser.setRoleCodes(roleCodes);
tokenCache.setUser(token,shiroUser);
return token;
}
public void logout(String token) {
tokenCache.remove(token);
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/service/system/CfgService.java
================================================
package cn.enilu.material.service.system;
import cn.enilu.material.bean.entity.system.Cfg;
import cn.enilu.material.dao.cache.ConfigCache;
import cn.enilu.material.dao.system.CfgRepository;
import cn.enilu.material.service.BaseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* CfgService
*
* @author enilu
* @version 2018/11/17 0017
*/
@Service
public class CfgService extends BaseService {
@Autowired
private ConfigCache configCache;
public Cfg saveOrUpdate(Cfg cfg) {
if(cfg.getId()==null){
insert(cfg);
}else{
update(cfg);
}
configCache.cache();
return cfg;
}
@Override
public void delete(Long id) {
super.delete(id);
configCache.cache();
}
}
================================================
FILE: material-core/src/main/java/cn/enilu/material/service/system/DeptService.java
================================================
package cn.enilu.material.service.system;
import cn.enilu.material.bean.entity.system.Dept;
import cn.enilu.material.bean.vo.node.DeptNode;
import cn.enilu.material.bean.vo.node.ZTreeNode;
import cn.enilu.material.dao.system.DeptRepository;
import cn.enilu.material.service.BaseService;
import cn.enilu.material.utils.ToolUtil;
import com.google.common.base.Strings;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
/**
* Created on 2018/3/21 0021.
*
* @author enilu
*/
@Service
public class DeptService extends BaseService {
@Autowired
private DeptRepository deptRepository;
public List tree() {
List