跳到主要内容

代码结构

整体架构

1692351999738

后端结构

后端采用模块化的架构,按照功能拆分成多个 Maven Module,提升开发与研发的效率,带来更好的可维护性。

一共有四类 Maven Module:

Maven Module作用描述
surveyking-dependenciesMaven 依赖版本管理该模块是一个 Maven Bom,只有一个 pom.xml 文件,定义项目中所有 Maven 依赖的版本号,解决依赖冲突问题。
surveyking-frameworkJava 框架拓展
surveyking-module-infra基础设置功能的 Module 模块
surveyking-module-report报表打印功能的 Module 模块
surveyking-module-survey问卷功能的 Module 模块
surveyking-module-system系统功能的 Module 模块
surveyking-server管理后台

surveyking-framework

技术组件:技术相关的组件封装,例如说 MyBatis、Redis 等等。

Maven Module作用
surveyking-common定义基础 pojo 类、枚举、工具类等
surveyking-spring-boot-starter-banner控制台 Banner,启动打印各种提示
surveyking-spring-boot-starter-webWeb 封装,提供全局异常、访问日志等
surveyking-spring-boot-starter-security认证授权,基于 Spring Security 实现
surveyking-spring-boot-starter-mybatis数据库操作,基于 MyBatis Plus 实现
surveyking-spring-boot-starter-redis缓存操作,基于 Spring Data Redis + Redisson 实现
surveyking-spring-boot-starter-mq消息队列,基于 Redis 实现,支持集群消费和广播消费
surveyking-spring-boot-starter-job定时任务,基于 Quartz 实现,支持集群模式
surveyking-spring-boot-starter-file文件客户端,支持将文件存储到 S3(MinIO、阿里云、腾讯云、七牛云)、本地、FTP、SFTP、数据库等
surveyking-spring-boot-starter-excelExcel 导入导出,基于 EasyExcel 实现
surveyking-spring-boot-starter-captcha验证码 Captcha,提供滑块验证码
surveyking-spring-boot-starter-test单元测试,基于 Junit + Mockito 实现

| surveyking-spring-boot-starter-desensitize | 脱敏组件:支持 JSON 返回数据时,将邮箱、手机等字段进行脱敏 |

② 业务组件:业务相关的组件封装,例如说数据字典、操作日志等等。如果是业务组件,名字会包含 biz 关键字。

surveyking-framework

每个 Maven Module 都是一个组件,分成两种类型:

① 技术组件:技术相关的组件封装,例如说 MyBatis、Redis 等等。

Maven Module作用
surveyking-common定义基础 pojo 类、枚举、工具类等
surveyking-spring-boot-starter-webWeb 封装,提供全局异常、访问日志等
surveyking-spring-boot-starter-security认证授权,基于 Spring Security 实现
surveyking-spring-boot-starter-mybatis数据库操作,基于 MyBatis Plus 实现
surveyking-spring-boot-starter-redis缓存操作,基于 Spring Data Redis + Redisson 实现
surveyking-spring-boot-starter-mq消息队列,基于 Redis 实现,支持集群消费和广播消费
surveyking-spring-boot-starter-job定时任务,基于 Quartz 实现,支持集群模式
surveyking-spring-boot-starter-flowable工作流,基于 Flowable 实现
surveyking-spring-boot-starter-file文件客户端,支持将文件存储到 S3(MinIO、阿里云、腾讯云、七牛云)、本地、FTP、SFTP、数据库等
surveyking-spring-boot-starter-excelExcel 导入导出,基于 EasyExcel 实现
surveyking-spring-boot-starter-monitor服务监控,提供链路追踪、日志服务、指标收集等功能
surveyking-spring-boot-starter-captcha验证码 Captcha,提供滑块验证码
surveyking-spring-boot-starter-test单元测试,基于 Junit + Mockito 实现
surveyking-spring-boot-starter-banner控制台 Banner,启动打印各种提示
surveyking-spring-boot-starter-spss用于问卷导出 spss 格式的数据
surveyking-spring-boot-starter-ocr用于用卷内部 OCR 识别

② 业务组件:业务相关的组件封装,例如说数据字典、操作日志等等。如果是业务组件,名字会包含 biz 关键字。

Maven Module作用
surveyking-spring-boot-starter-biz-data-permissionn数据权限
surveyking-spring-boot-starter-biz-dict数据字典
surveyking-spring-boot-starter-biz-operatelog操作日志
surveyking-spring-boot-starter-biz-sms短信客户端,对接阿里云、腾讯云等短信服务
surveyking-spring-boot-starter-biz-social社交客户端,对接微信公众号、小程序、企业微信、钉钉等三方授权平台
surveyking-spring-boot-starter-biz-weixin微信客户端,对接微信的公众号、开放平台等
surveyking-spring-boot-starter-biz-error-code全局错误码

每个组件,包含两部分:

  1. core 包:组件的核心封装,拓展相关的功能。
  2. config 包:组件的 Spring Boot 自动配置。

surveyking-module-xxx

该模块是 XXX 功能的 Module 模块,目前内置了 3 个模块。

项目说明是否必须
surveyking-module-system系统功能
surveyking-module-infra基础设施
surveyking-module-survey问卷模块x
surveyking-module-report问卷报表打印模块x

每个模块包含两个 Maven Module,分别是:

Maven Module作用
surveyking-module-xxx-api提供给其它模块的 API 定义
surveyking-module-xxx-biz模块的功能的具体实现

例如说,surveyking-module-infra 想要访问 surveyking-module-system 的用户、部门等数据,需要引入 surveyking-module-system-api 子模块。

survey-module-survey

.
├── .vscode # vscode 配置
├── public # 静态资源
├── src # 项目代码
│ ├── controller # 控制类
│ │ ├── answer # 数据操作
│ │ | ├── vo # dto 类
│ │ | └── AnswerController #
│ │ ├── dict # 问卷字典
│ │ ├── project # 我的项目
│ │ ├── repo # 模板操作
│ │ ├── report # 报表统计
│ │ ├── survey # C端答卷页面接口
│ │ ├── task # 首页我的任务
│ │ └── template # 模板管理
│ ├── service # 业务实现
└── #

前端结构

.
├── .vscode # vscode 配置
├── public # 静态资源
├── src # 项目代码
│ ├── assets # 静态资源
│ ├── components # 公用组件
│ │ ├── Answer # 问卷组件,根据 SurveySchema 渲染出整个问卷
│ │ | ├── components # 公共的组件
│ │ | | ├─── GlobalLogicField.tsx # 全局逻辑处理
│ │ | | └─── Question.tsx # 问题字段以及公共的问题逻辑处理(非视图)
│ │ | ├── hooks # 一些公共 hooks
│ │ | ├── models # 问卷数据模型,含一些逻辑处理
│ │ | ├── rules # 问题校验规则
│ │ | ├── shared # 一些通用的工具类
│ │ | ├── themes # 我的项目
│ │ | | ├─── antd # 问卷 PC 端主题
│ │ | | | ├───components # 当前主题下的一些公共组件
│ │ | | | ├───decorator # 问卷、题组、问题的视图装饰器,如统一渲染问题标题和校验提示信息
│ │ | | | ├───previews # 问卷只读模式(阅读模式)下的视图渲染
│ │ | | | ├───questions # 所有问卷组件的视图渲染
│ │ | | | └───index.tsx # 入口文件
│ │ | | ├─── antdForm # Form主题,如用于公开查询的查询表单
│ │ | | ├─── antdMobile # 问卷手机端主题
│ │ | | └─── index.tsx # 入口文件
│ │ | └── index.tsx # 入口文件
│ │ ├── AudioRecord # 录音
│ │ ├── CanvasDatagrid # canvas 数据表格
│ │ ├── QuillEditor # 富文本编辑器,含一些自定义插件
│ │ ├── HtmlRender # 根据html代码渲染
│ │ ├── FormulaEditor # 公式编辑器
│ │ ├── FortuneSheet # 在线excel编辑,用于自定义打印报表
│ │ ├── ImportText # 问卷内文本导入
│ │ ├── QrScanner # 问卷内二维码扫描
│ │ └── UserSelectBox # 用户选择
│ ├── layouts # 布局组件
│ ├── pages # 页面视图 通常目录名大写的表示一个具体的页面或者组件,小写的则通常表示目录
│ │ ├── Home # 首页
│ │ ├── Survey # C端答卷页面
│ │ ├── Template # 模板广场
│ │ ├── infra # 基础设置
│ │ ├── project # 我的项目
│ │ | ├── Data # 我的项目
│ │ | ├── List # 我的项目
│ │ | ├── Navigator # 我的项目
│ │ | ├── Poster # 海报(此模块不完善,你废弃)
│ │ | ├── Report # 项目报表页面
│ │ | ├── Setting # 项目设置页面
│ │ | ├── SurveyEditor # 问卷编辑器
│ │ | | ├─── assets # 一些静态资源
│ │ | | ├─── attributes # 所有属性集合,对应 SurveySchema 里面的 attribute
│ │ | | ├─── data # 一些数据模板,如问题拖拽对应的数据模板schema
│ │ | | ├─── formily #
│ │ | | ├─── hooks # 编辑器内常用的 hooks
│ │ | | ├─── icons # 问卷内部图标
│ │ | | ├─── models # 编辑器数据模型、状态管理
│ │ | | ├─── panels # 问卷面板
│ │ | | ├─── preview # 问卷预览
│ │ | | ├─── questions # 对应编辑器内的每一个问题组件,对应 SurveySchema
│ │ | | ├─── shared # 编辑器内部的一些工具类
│ │ | | ├─── widgets # 问卷内的一些公共组件
│ │ | | └─── index.tsx # 入口文件
│ │ | ├── shared # 一些公共工具类
│ │ | ├── index.less #
│ │ | └── index.tsx # 入口文件
│ │ ├── repo # 题库中心
│ │ ├── system # 系统管理
│ │ ├── user # 用户登录注册
│ │ ├── 404.tsx # 页面视图
│ │ ├── Loading.tsx # 页面视图
│ │ └── loading.less # 页面视图
│ ├── services # API请求
│ ├── shared # 全局工具类
│ ├── store # 状态管理
│ ├── utils # 全局工具类
│ ├── views # 路由页面
│ ├── app.less # 全局样式
│ ├── app.tsx # 入口文件
│ ├── loading.less # 全局 loading 样式
│ └── loading.tsx # 全局loading
├── .umirc.ts # UMI全局配置文件,含路由配置,https://umijs.org/docs/api/config
├── .umirc.prod.ts # 打包到生产环境 环境变量配置
├── .eslintrc.js # eslint 配置
├── .gitignore # git 跳过配置
├── .prettierignore # prettier 跳过检测配置
├── commitlint.config.js # git commit 提交规范配置
├── package.json
├── prettier.config.js # prettier 配置
├── tsconfig.json # typescript 配置
└── typings.d.ts # 全局 ts 类型定义