Giter VIP home page Giter VIP logo

gyb's Introduction

面向在校大学生的分布式短期雇佣任务管理系统,基于NutzWK,主要实现:

  • 基于Dubbo与Zookeeper的微服务治理
  • 基于RabbitMq的消息推送服务
  • 基于Shiro的用户角色权限管理
  • 基于Quartz的任务调度服务

环境依赖

  • JDK 8 181 + 或 OpenJDK 11 +
  • Maven 3.5.3 +
  • Redis 4.0.8 +
  • MySql 5.7 + 或 MariaDB 10.3.10 +
  • Zookeeper 3.4.11 +

技术选型

  • 微服务框架:Nutzboot
  • 分布式框架:Dubbo、Zookeeper、Sentinel
  • 安全框架:Shiro
  • 任务调度:Quartz
  • 数据库连接池:Druid
  • 缓存框架:Redis、Ehcache、Wkcache
  • 订阅发布:Redis
  • 消息队列-Rabbitmq

模块说明

名称 介绍
gyb-nb-dubbo-sys 基础服务,提供用户权限管理基础服务
gyb-nb-dubbo-msg: 提供邮件传输等消息消费服务,需要进行邮箱配置
gyb-nb-dubbo-library 任务,技能信息管理
gyb-nb-dubbo-gy 雇员认证,雇员基础等数据管理
gyb-nb-dubbo-xm 提供雇佣交易服务,维护阶段性任务流程。
gyb-nb-dubbo-web 提供Web界面管理
gyb-nb-task 基于quartz进行自定任务调度
gyb-nb-cms CMS服务
gyb-nb-web-api API支持

系统架构图

建议启用DubboOps项目

Dubbo看板

使用说明

  • 确保 MySql、Redis、Zookeeper 默认配置并已启动好[application.properties 可更改配置项]。

  • MySql 创建名为 gyb_nb 的空数据库,项目启动时会自动建表,同时初始化数据。

  • 项目根目录执行 mvn clean install -Dmaven.test.skip=true

  • 在单个NB模块下执行 mvn compile nutzboot:run 运行或 mvn package nutzboot:shade 生成可执行jar包

  • 在项目根目录执行 mvn -Dnutzboot.dst=E:/dst clean package nutzboot:shade 将所有可运行jar包生成到指定位置

  • 可选择使用运行参数 -Dnutz.profiles.active=prod 加载 application-prod.properties 配置文件

  • 正常启动后访问 http://127.0.0.1:8080/sysadmin 用户名 superadmin 密码 1

脚本

bin目录下包括基于maven构建和apidoc插件的相关脚本(需要在根目录下执行),主要内容如下:

  • 构建:sh ./bin/build.sh
# jardata shade打包
.
├── gyb-nb-service-cms.jar
├── gyb-nb-service-gy.jar
├── gyb-nb-service-library.jar
├── gyb-nb-service-msg.jar
├── gyb-nb-service-sys.jar
├── gyb-nb-service-xm.jar
├── gyb-nb-task.jar
├── gyb-nb-web-api.jar
└── gyb-nb-web-platform.jar
  • 启动停止:sh ./bin/gyb.sh start|stop

  • 单个服务启停:sh ./bin/jar.sh 1,1对应gyb-nb-service-sys,具体看sh

  • api生成:sh ./bin/apidoc.sh,主要生成gyb-nb-web-api的文档,相关配置设置见apidoc.json

  • api文档ftp上传:sh ./bin/apisync.sh,脚本中可以自行设置服务器相关信息。

在启用过程之中,建议按照需要进行启动,且按照上表的模块顺序进行启动。

注意

如果出现java.lang.SecurityException: JCE cannot authenticate the provider BC,编辑文件 ${JAVA_HOME}/jre/lib/security/java.security,在9下面添加 security.provider.10=org.bouncycastle.jce.provider.BouncyCastleProvider

拷贝 bin/bcprov-jdk16-140.jar${JAVA_HOME}/jre/lib/ext 目录下。

界面

p1

界面

p3

gyb's People

Contributors

jianmingwang avatar longshishui avatar marveliu avatar smallpocket avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

gyb's Issues

websocket和雇员模块

websocket

关于服务器推送消息到客户端的需求,我选择使用websocket
查看了一下nutz有websocket的plug,于是拿了用了一下,结果发现了bug。

[这里要非常的感谢wendal,和友好的社区,社区中提问很快就得到了回答,也让我理解了一下他的原理

  1. AbstractWsChatEndpoint 是单例的,是websocket的入口,维护全局的信息,接管open,error,close
  2. handler 类是多例的每个ws连接对应一个,接管onMessage 专注于信息的路由发送
  3. provider类主要是用于缓存全局的长连接信息,以供handler类能够方便检索、路由的

雇员模块

以前的写法真的是稀烂,估计以后看我自己也是稀烂。我修改了如下部分:

  1. 添加雇员技能,这本来就是需求之一。
  2. 雇员子模块完善service,底层封装一些功能函数,从而提高代码复用,能少写就少写。
  3. 雇员service完善,区分service和controller,controller是针对view的交互,而service是面向子模块进行封装,避免controller里面业务逻辑过于混乱。并且会开发api做准备。
  4. 一些工具类,包括状态码,编码生产等自用工具,什么时候才能写出Lang这样厉害的自用工具...
  5. 前端页面进行修改,jstree等。

加油吧!

vue下的前端界面重构

简单的看了一下vue的文档,考虑到实际开发的需求,我没有选择使用webpack,而是直接的引用js,结合beelt渲染数据。使用过程中发现,非常好用。

消息推送模块设计

推送所有注册的未读消息

我需要定义一个对象,类似于日志,作为消息对象

  1. 消息状态:已读,和未读。
    • 推送的时候状态不变。
    • 当发出ajax类的详细信息请求的时候,这变成已读。
  2. 消息状态定期执行,定时job

消息是面向事务的,粒度较大,是面向用户的功能。比如:邮件,系统推送消息,项目关键信息等,一般是需要被注册的。

注册的消息是要被消费的,被消费的方式有两种:

  1. 主动消费。
  2. 被动消费,即是推送。

设计两点:

  • 消息方式type:邮件,平台推送,手机短信等。
  • 消息标签tags:消息种类,例如项目消息,认证消息等等。
  1. 注册的方式:直接插入数据库,并且记录日志。
  2. 消费的方式:ajax被消费,websocket

都是设计的时候脑子进的水

现在吃的苦和坑都是当时脑袋进的水。

代码review发现自己写的真的是垃圾。
接口混乱,层次不清晰,数据库设计有问题。

本质上讲主要是

  1. 技术不熟悉,不够熟悉框架。
  2. 需求,这个地方真的要吐槽。
  3. 自己数据库的设计,也是没有文档,想到哪里是哪里。

这个写完之后,我就只负责维护这个的业务流程,其他的好好研究一下基本的技术。

与bug为伴

今天是高德纳的80岁生日,致敬这位大佬!
总结一下今天的坑。

  1. 能从session里面获取的值就不要从request中获得,因为可能是假的。
  2. whaleAdapter,nutz上传的适配器。看了一下注解,非常好奇注解的原理。
  3. 数据库设计还是有一点问题,auth应该和inf合并,因为单独拿出来没有太大的用途。
  4. 代码写完,我还是要好好的反思一下我的问题。

201810任务清单

  • 工作流程准确性校验
  • 界面美化与确认
  • 模块整合和文档
  • 邮箱验证,消息中心
  • 部署设置

认证体系

之前讨论的技能认证体系,是针对于平台的技能库而提出的一种认证制度,比如说:张三,在PS技能中认证多少等级,在PPT中认证多少等级。

但是雇员整体的认证等级是如何反映的呢?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.