悟空CRM采用全新的前后端分离模式,本仓库代码中已集成前端vue打包后文件,可免去打包操作

如需调整前端代码,请单独下载前端代码,前端代码在根目录的ux文件夹中

主要技术栈

核心框架:jfinal3.8

缓存:redis caffeine

数据库连接池:Druid

工具类:hutool,fastjson,poi-ooxml

定时任务:jfinal-cron

项目构建工具:maven

Web容器:tomcat,undertow(默认)

前端MVVM框架:Vue.JS 2.5.x

路由:Vue-Router 3.x

数据交互:Axios

UI框架:Element-UI 2.6.3

悟空CRM是一个基于jfinal的开源crm系统,采用前后端分离的开发模式,提供了Aop,查询缓存,数据库连接池,定时器,excel导入导出等功能。

项目中主要有CRM,OA,项目管理,BI等模块,通过角色,部门,菜单实现了按钮级的功能权限控制和数据权限控制,通过将用户登录信息保存至redis来实现支持项目的热重启和分布式部署。

项目还拥有如下特性:

项目通过jfinal强大的AOP将权限判断从代码中抽离出来,用户无需手动判断登陆角色是否拥有权限,以下为通过权限注解在拦截器判断用户是否拥有访问权限

@Override

public void intercept(Invocation invocation) {

//TODO 权限功能后台拦截

Permissions permissions=invocation.getMethod().getAnnotation(Permissions.class);

if(permissions!=null&&permissions.value().length>0){

JSONObject jsonObject= Aop.get(AdminRoleService.class).auth(BaseUtil.getUserId());

//组装应有权限列表

List arr=queryAuth(jsonObject, "");

boolean isRelease=false;

for (String key : permissions.value()) {

if(!isRelease){

if(arr.contains(key)){

isRelease=true;

}

}

}

if(!isRelease){

invocation.getController().renderJson(R.error("无权访问"));

return;

}

}

invocation.invoke();

}

通过AOP和注解对数据进行非空校验,无需一个个判断参数是否为空,数据为空直接返回 自定义分页数据接收,自动处理分页参数和数据对象,给controller方法加上参数 BasePageRequest,T为对象类型,然后参数就会自动组装成分页参数和定义的对象类,以下为实现代码:

public class PageParaGetter extends ParaGetter {

public PageParaGetter(String parameterName, String defaultValue) {

super(parameterName, defaultValue);

}

@Override

protected BasePageRequest to(String s) {

return null;

}

@Override

@SuppressWarnings("unchecked")

public BasePageRequest get(Action action, Controller controller) {

Parameter[] parameters=action.getMethod().getParameters();

Class clazz=null;

for (Parameter parameter:parameters){

if(BasePageRequest.class.isAssignableFrom(parameter.getType())){

Type parameterizedType=parameter.getParameterizedType();

if (parameterizedType instanceof ParameterizedType) {

Type[] params = ((ParameterizedType) parameterizedType).getActualTypeArguments();

clazz= TypeUtils.getClass(params[0]);

}

break;

}

}

boolean isJson=controller.getHeader("Content-Type")!=null&&controller.getHeader("Content-Type").toLowerCase().contains("application/json");

return isJson?new BasePageRequest(controller.getRawData(),clazz):new BasePageRequest(controller.getKv(),clazz);

}

自定义json工厂,实现对数据的个性化解析返回,如实现将数据返回时将数据转成驼峰规则,自定义某种类型的对象的返回格式等。

可以自定义错误处理模板,在出现错误或者其他异常的情况下,可以给予用户一个清晰的提示,避免用户看到一些无用的错误信息等功能

文件可以上传到项目目录之外,避免了重新打包项目后文件的丢失

@Override

public void configConstant(Constants me) {

me.setDevMode(prop.getBoolean("jfinal.devMode", true));

me.setInjectDependency(true);

//设置上传文件到哪个目录

me.setBaseUploadPath(BaseConstant.UPLOAD_PATH);

me.setBaseDownloadPath(BaseConstant.UPLOAD_PATH);

//自定义json工厂

me.setJsonFactory(new ErpJsonFactory());

//限制上传100M

me.setMaxPostSize(104857600);

}

采用项目分层化的设计,职责分工明确,降低代码的耦合性Hander->对指定规则的url进行捕获或者放心Interceptor->环绕式AOP拦截,对访问权限,数据权限,参数等进行校验,可以配置在全局,单个路由,单个controller,单个方法等上面,可进行自定义实现,对数据进行处理

Router->对不同规则的数据进行分发,不同url进入不同路由和controller

Controller->对参数进行组装,将数据传入到service处理后进行render返回

Service->对业务代码进行处理,并将数据转入Db处理或缓存 Db->对数据库进行操作 Render->将service返回的数据在controller进行返回,以及出错后通过

SQL模板功能,将sql写入到xx.sql文件中,如果sql文件有变动,无需重新编译打包,直接改动sql文件中的sql即可,以下为自动扫描指定路径下sql文件的代码:

private void getSqlTemplate(String path, ActiveRecordPlugin arp) {

File file = new File(path);

if (file.exists()) {

File[] files = file.listFiles();

if (files != null && files.length > 0) {

for (File childFile : files) {

if (childFile.isDirectory()) {

getSqlTemplate(childFile.getAbsolutePath(), arp);

} else {

if (childFile.getName().toLowerCase().endsWith(".sql")) {

arp.addSqlTemplate(childFile.getAbsolutePath().replace(PathKit.getRootClassPath(), "").replace("\\", "/"));

}

}

}

}

}

}

以下是系统的部分截图:以下为悟空CRM9.0 JAVA版部分功能系统截图

悟空crm前端php,悟空CRM(基于Jfinal+vue+ElementUI)核心代码讲解相关推荐

  1. 基于ThinkPhp6+Vue+ElementUI低代码开发平台

    项目介绍 一款 PHP 语言基于 ThinkPhp6.x + Vue + ElementUI等框架精心打造的一款模块化.插件化.高性能的前后端分离架构敏捷开发框架,可用于快速搭建前后端分离后台管理系统 ...

  2. 悟空CRM java版(基于jfinal+vue+ElementUI的前后端分离CRM系统)

    CRM9.0(JAVA版) 软件长期为企业提供企业管理软件(CRM/HRM/OA/ERP等)的研发.实施.营销.咨询.培训.服务于一体的信息化服务.悟空软件以高科技为起点,以技术为核心.以完善的售后服 ...

  3. 悟空CRM(基于jfinal+vue+ElementUI的前后端分离的开源CRM系统)

    https://www.jfinal.com/share/1591 官网:http://www.5kcrm.com 官网:http://www.72crm.com 论坛:http://bbs.72cr ...

  4. 悟空CRM (基于jfinal+vue+ElementUI的前后端分离CRM系统)

    悟空CRM9.0(JAVA版) 悟空软件长期为企业提供企业管理软件(CRM/HRM/OA/ERP等)的研发.实施.营销.咨询.培训.服务于一体的信息化服务.悟空软件以高科技为起点,以技术为核心.以完善 ...

  5. 悟空CRM JAVA版 (基于jfinal+vue+ElementUI的前后端分离CRM系统)

    悟空CRM9.0(JAVA版) 悟空软件长期为企业提供企业管理软件(CRM/HRM/OA/ERP等)的研发.实施.营销.咨询.培训.服务于一体的信息化服务.悟空软件以高科技为起点,以技术为核心.以完善 ...

  6. 基于ruoyi+vue+elementUI实现列表,新增,附件上传,tab+springBoot+mybatis+oracle序列+批量新增

    基于ruoyi+vue+elementUI实现列表,新增,附件上传,tab+springBoot+mybatis+oracle序列+批量新增 页面效果 列表页面 新增页面 详情页面 代码实现 列表+新 ...

  7. java基于ssm+vue+elementui楼盘房屋销售系统 前后端分离

    楼盘房屋是人类居住是必须的一个环境.且因为我国城镇化比例比较高,所以当前有很多的人希望到城市购买相关的楼盘和房屋.以更方便享受城市的教育和医疗资源.也能够让需要房屋销售相关信息的人更快的获取到更加全面 ...

  8. java计算机毕业设计基于springboot+vue+elementUI的旅游网站(源码+数据库+Lw文档)

    项目介绍 旅游管理平台采用B/S模式,促进了旅游管理平台的安全.快捷.高效的发展.传统的管理模式还处于手工处理阶段,管理效率极低,随着用户的不断增多,传统基于手工管理模式已经无法满足当前用户需求,随着 ...

  9. 计算机毕业设计基于springboot+vue+elementUI的网吧管理系统(源码+系统+mysql数据库+Lw文档)

    项目介绍 随着我国的经济发展,人们的生活水平也有了一定程度的提高,对网络的要求也越来越高,很多家庭都有了自己的电脑,但是很多时候大家在家里玩电脑的时候找不到那种玩耍的气氛和氛围,这个时候大家就都选择了 ...

最新文章

  1. “新一代城市大脑建设与发展“专家研讨会
  2. Ignoring unused library classes...java.io.IOException: You have to specify '-keep' options for the s
  3. c#_Func和Action委托简介
  4. 删除word菜单栏上的adobe comments的终极办法
  5. 记一次WiFi芯片W600上串口只能回显的问题
  6. 神奇的互换身体术--java的类型擦除
  7. 在springboot项目中如何创建子项目
  8. protocol_buffers简易操作
  9. python脚本简化jar操作命令
  10. linux make乱码,linux乱码
  11. shell中变量的引用(两种方式:$变量名,${变量名})。
  12. 使用这个,自定义AlertDialog在你手里都不是问题
  13. 【尚未完成,不建议参考】马氏距离,汉明距离
  14. 人生的一切问题,归根结底就是这三点:无知!恐惧!延迟!
  15. web前端大作业:游戏动漫网页设计(HTML+CSS+JavaScript)
  16. 弗兰克赫兹实验计算机仿真实验报告,大学物理实验
  17. google插件查看源码
  18. EasyNVR查看直播视频流显示黑屏原因排查
  19. 最早的计算机网络游戏,手机网络游戏早期发展史——图文游戏
  20. 新能源汽车:选择“内卷”还是抓住大势东风?

热门文章

  1. 共有n种图案的印章,每种图案的出现概率相同。小A买了m张印章,求小A集齐n种印章的概率。
  2. 微信支付通知方法-附上部分代码
  3. SQL性能优化中的底层概念,时间复杂度,算法和数据结构,数据库组成,查询优化和表关联原理.
  4. git本地切换远程分支
  5. php随机生成数字字母,PHP_php随机生成数字字母组合的方法,本文实例讲述了php随机生成数 - phpStudy...
  6. 获取高德POI兴趣点的详细信息
  7. Android王者荣耀模拟金牌,王者荣耀:金牌算法大改,掌握这几点,让你金牌拿到手软...
  8. python实现查看微信消息撤回
  9. 1.安卓访问驱动-实现简单驱动
  10. element-UI中NavMenu导航菜单默认打开问题