JEEPlatform

一款企业信息化开发基础平台,可以用于快速构建企业后台管理系统,集成了OA(办公自动化)、SCM(供应链系统)、ERP(企业资源管理系统)、CMS(内容管理系统)、CRM(客户关系管理系统)等企业系统的通用业务功能。Github链接:https://github.com/u014427391/jeeplatform

欢迎下载或者star(收藏)

JeePlatform项目是一款以Activiti为工作流引擎,以Spring Framework为核心框架,集ORM框架Mybatis,Web层框架SpringMVC和多种开源组件框架而成的一款通用基础平台,基于本平台可以实现快速开发,实现企业信息管理的高效、高性能开发。系统追求安全、性能方面的有效实现。

系统设计

系统管理(模块名称jeeplatform-admin)

管理系统登录页面,采用Shiro登录验证

管理系统主页前端,可以适配移动端页面

管理系统主页采用开源前端模板,具有换肤功能

管理系统主页,获取用户具有的权限,显示菜单

角色进行授权,只有超级管理员才具有权限

角色进行配置,可以学习一下RBAC(基于角色的权限控制)

使用JavaEmail插件实现邮件发送,记得需要开启SSl验证

OA管理系统(待开发)

CMS管理系统(待开发)

系统升级

单点登录基础(模块名称jeeplatform-sso)(开发中)

项目采用CAS登录登录实现,单点登录集群搭建可以参考博客:

http://blog.csdn.net/u014427391/article/details/78653482

项目单点登录:使用nginx作为负载均衡,使用redis存储tomcat session,来实现集群中tomcat session的共享,使用redis作为cas ticket的仓库,来实现集群中cas ticket的一致性。

单点登录集群如图

SpringBoot集成Redis缓存处理(Spring AOP实现)

先从Redis里获取缓存,查询不到,就查询MySQL数据库,然后再保存到Redis缓存里,下次查询时直接调用Redis缓存

package org.muses.jeeplatform.cache;

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.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component; /**
* AOP实现Redis缓存处理
*/
@Component
@Aspect
public class RedisAspect { private static final Logger LOGGER = LoggerFactory.getLogger(RedisAspect.class); @Autowired
@Qualifier("redisCache")
private RedisCache redisCache; /**
* 拦截所有元注解RedisCache注解的方法
*/
@Pointcut("@annotation(org.muses.jeeplatform.annotation.RedisCache)")
public void pointcutMethod(){ } /**
* 环绕处理,先从Redis里获取缓存,查询不到,就查询MySQL数据库,
* 然后再保存到Redis缓存里
* @param joinPoint
* @return
*/
@Around("pointcutMethod()")
public Object around(ProceedingJoinPoint joinPoint){
//前置:从Redis里获取缓存
//先获取目标方法参数
long startTime = System.currentTimeMillis();
String applId = null;
Object[] args = joinPoint.getArgs();
if (args != null && args.length > 0) {
applId = String.valueOf(args[0]);
} //获取目标方法所在类
String target = joinPoint.getTarget().toString();
String className = target.split("@")[0]; //获取目标方法的方法名称
String methodName = joinPoint.getSignature().getName(); //redis中key格式: applId:方法名称
String redisKey = applId + ":" + className + "." + methodName; Object obj = redisCache.getDataFromRedis(redisKey); if(obj!=null){
LOGGER.info("**********从Redis中查到了数据**********");
LOGGER.info("Redis的KEY值:"+redisKey);
LOGGER.info("REDIS的VALUE值:"+obj.toString());
return obj;
}
long endTime = System.currentTimeMillis();
LOGGER.info("Redis缓存AOP处理所用时间:"+(endTime-startTime));
LOGGER.info("**********没有从Redis查到数据**********");
try{
obj = joinPoint.proceed();
}catch(Throwable e){
e.printStackTrace();
}
LOGGER.info("**********开始从MySQL查询数据**********");
//后置:将数据库查到的数据保存到Redis
String code = redisCache.saveDataToRedis(redisKey,obj);
if(code.equals("OK")){
LOGGER.info("**********数据成功保存到Redis缓存!!!**********");
LOGGER.info("Redis的KEY值:"+redisKey);
LOGGER.info("REDIS的VALUE值:"+obj.toString());
}
return obj;
} }

可以看到Redis里保存到了缓存

业务方案

系统管理通用功能

  • 用户管理: 系统用户 OK
  • 角色管理: 按照企业系统职能进行角色分配,每个角色具有不同的系统操作权限 OK
  • 权限管理: 权限管理细分到系统按钮权限,菜单权限,管理员可以对权限进行细分控制
  • 在线管理:管理在线用户,可以强制下线
  • 菜单管理:系统可以配置系统菜单,并分配不同的权限 OK
  • 报表统计:数据报表、用户分析
  • 系统监控:数据监控、系统日志(用户登录记录)
  • 通用接口:SMS(短信)、系统邮件、Excel表导出导入操作...

OA系统通用功能(待开发)

  • 考勤管理:请假流程
  • 人事管理:机构管理、部门管理、员工管理

CMS系统通用功能(待开发)

  • 信息管理:文章管理、文章审核

    ...

技术方案

后台技术

  • 工作流引擎:Activiti5
  • ORM框架:Mybatis/Hibernate JPA
  • Web框架:SpringMVC
  • 核心框架:Spring Framework4.0
  • 任务调度:Spring Task
  • 权限安全:Apache Shiro/Spring Security
  • 全文搜索引擎:Lucene/Solr
  • 页面静态化处理:Freemark/Velocity
  • 服务器页面包含技术:SSI
  • 网页即时通讯:long polling/websocket
  • 连接池:Druid(阿里开源)
  • 日志处理:SLF4J
  • 缓存处理:Redis、EhCache
  • Excel表处理:POI

前端技术

  • 文件上传:JQuery uploadify
  • 树形结构:EasyUI Tree
  • 日期插件:JQuery Date
  • 弹窗框架:zDialog
  • Cookie保存:JQuery Cookie
  • 富文本编辑器:Baidu UEDitor
  • 前端框架:Twitter Bootstrap、ExtJS

服务器

  • 负载均衡:Nginx
  • 分布式:alibaba Dubbo
  • 中间件:RocketMQ

项目测试

  • DeBug:Junit、FindBugs、EclEmma
  • 程序质量:Jdepend4eclipse
  • 压力测试:JMeter

工具软件

  • 服务器:SecureCRT
  • Java:IntelliJ IDEA/Eclipse
  • 远程控制:TeamViewer
  • 版本控制:Git
  • Jar管理:Maven
  • UML建模:ArgoUML
  • Eclipse测试插件:EclEmma
  • 程序质量检查插件:Jdepend4eclipse(Eclipse平台)

Github链接:https://github.com/u014427391/jeeplatform

欢迎下载或者star(收藏)

Github开源项目(企业信息化基础平台)的更多相关文章

  1. SpringBoot开源项目(企业信息化基础平台)

    JEEPlatform 一款企业信息化开发基础平台,可以用于快速构建企业后台管理系统,集成了OA(办公自动化).SCM(供应链系统).ERP(企业资源管理系统).CMS(内容管理系统).CRM(客户关 ...

  2. 基于RBAC模型的权限系统设计(Github开源项目)

    RBAC(基于角色的访问控制):英文名称Rose base Access Controller.本博客介绍这种模型的权限系统设计.取消了用户和权限的直接关联,改为通过用户关联角色.角色关联权限的方法来 ...

  3. 如何参与一个 GitHub 开源项目?

    最近一年开源项目特别的热,很多技术大会或论坛都以开源项目作为主题进行探讨,可见这是一种趋势.而Github作为开源项目的著名托管地,可谓无 人不知,越来越多的个人和公司纷纷加入到Github的大家族里 ...

  4. 如何参与一个GitHub开源项目

    Github作为开源项目的著名托管地,可谓无人不知,越来越多的个人和公司纷纷加入到Github的大家族里来,为开源尽一份绵薄之力.对于个人来讲,你把自己的项目托管到Github上并不表示你参与了Git ...

  5. 开源项目福利-github开源项目免费使用Azure PipeLine

    微软收购Github后,很多人猜想微软可能会砍掉VSTS,然而事实VSTS并没有砍掉,关于Azure Devops的详细信息可以查看 这篇博客,如果想查看原文也可以从链接里提供的原始地址里查看. 今天 ...

  6. 如何参与一个GitHub开源项目?

    如何参与一个GitHub开源项目? 摘要:本文是Github官如何参与一个GitHub开源项目方给出的参与Github上开源项目的一些指导,对希望加入开源社区的开发者是一个不错的参考. 最近一年开源项 ...

  7. 2015-2016最火的Android开源项目--github开源项目集锦(不看你就out了)

    标签: Android开发开源项目最火Android项目github 2015-2016最火的Android开源项目 本文整理与集结了近期github上使用最广泛最火热与最流行的开源项目,想要充电与提 ...

  8. Android笔记——导入Github开源项目CircleRefreshLayout

    百度n久都找不到android studio导入第三方类库的正确方法,纠结睡不着 ,最后终于蒙到了方法,原来想太多了  ---------------------------------------- ...

  9. Android Hawk数据库 github开源项目

    Android Hawk数据库 github开源项目 Hawk 是一个很便捷的数据库  . 操作数据库仅仅需一行代码 , 能存不论什么数据类型 . github 地址: https://github. ...

随机推荐

  1. 我的第一个python web开发框架(16)——产品分类管理

    产品分类管理的html页面之前忘记做了,这次附件里补上. 好了先上图 从页面效果图来看,我们需要开发列表获取接口.添加接口.单条记录获取接口.编辑接口和删除接口 对于产品分类列表,我们将使用jqgri ...

  2. .net core 同时实现网站管理员后台、会员、WebApi登录及权限控制

    我们在开网站信息系统时,常常有这样几个角色,如后台的管理员,前台的会员,以及我们各种应用的WebAPI 都需要进行登录操作及权限控制,那么在.net core如何进行设计呢. 首先我使用的是.net ...

  3. 前端面试题系列(1):doctype作用 标准模式与兼容模式

    1.doctype作用 <!DOCTYPE>声明位于HTML文档的第一行.处于<HTML>标签之前.告知浏览器的解析器用什么文档标准解析这个文档.DOCYTYPE不存在或格式不 ...

  4. spring boot系列02--Thymeleaf+Bootstrap构建页面

    上一篇说了一下怎么构建spring boot 项目 接下来我们开始讲实际应用中需要用到的 先从页面说起 页面侧打算用Thymeleaf+Bootstrap来做 先共通模板页 <!DOCTYPE ...

  5. 常见的Mysql数据库优化总结

    索引 1.主键索引 作用:唯一约束和提高查询速度 #建表时创建主键索引 create table `table_name`( `id` int unsigned not null auto_incre ...

  6. python 小白(无编程基础,无计算机基础)的开发之路 day2

    本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 ...

  7. 33.Linux-实现U盘自动挂载(详解)

    1.当我们每次插入u盘后,都会自动创键U盘的设备节点/dev/sda%d 这是因为里面调用了device_create()实现的, busybox的mdev机制就会根据主次设备号等信息,在/dev下创 ...

  8. ##2.基础服务(SQl,RabbitMQ)-- openstack pike

    2-基础服务(SQl,RabbitMQ) openstack pike 安装 目录汇总 http://www.cnblogs.com/elvi/p/7613861.html ##.基础服务(Mysql ...

  9. Python函数篇(2)-递归函数、匿名函数及高阶函数

    1.全局变量和局部变量 一般定义在程序的最开始的变量称为函数变量,在子程序中定义的变量称为局部变量,可以简单的理解为,无缩进的为全局变量,有缩进的是局部变量,全局变量的作用域是整个程序,而局部变量的作 ...

  10. CCF-201503-3-节日

    问题描述 试题编号: 201503-3 试题名称: 节日 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 有一类节日的日期并不是固定的,而是以"a月的第b个星期c&q ...