框架继承注意要点 === 1. 在本框架中搭建工作流模块,重新设计工作流模块 (包括用户对审批节点配置增减;待办、已办、已发、监控、草稿的设计;流程过程中加签;发起时可配置人员节点选择; 每个人显示自己关联的流程图+显示流程节点对应的办理人;节点未到时发起人可修改已配置的审批人员等等) 2. 所有与工作流相关的表都使用`activiti_`开头 3. 熟悉后端的双语操作(预留但不开发,仅中文即可) 4. 熟悉文档库属性配置相关代码(重汽需要将文档库标签扩充成 国内标准法规标签、海外标准法规标签、企业标准标签三部分),补充注释 5. 去除无效的application配置项 6. 分析代码,删掉不用的代码和包,为后续开发搭好基础。留下相关接口为:文档管理-文档库、文档工具-文档拆分、文档工具-文档对比、业务支持-对外报告管理(改名为资料中心)、 信息中心-文档动态、信息中心-我的消息、个人中心-我的收藏、日志中心-操作日志、系统管理(全部)、开发工具全部(仅给开发用) 7. 分析结果由项目二组提供excel说明项目框架各部分范围(高嵩负责) 中间件要求 === 1. 数据库 Mysql 5.7 2. 缓存 Redis 7.0 3. 搜索引擎 EasticSearch 7.9 4. 文件上传 Minio 任意版本 5. 支持K8S部署 docker 6. 工作流 Activiti 6.0.0 jero-boot 低代码开发平台 =============== 当前最新版本: 2.5.1(发布日期:20210126) ## 后端技术架构 - 基础框架:Spring Boot 2.3.5.RELEASE - 持久层框架:Mybatis-plus 3.4.1 - 安全框架:Apache Shiro 1.7.0,Jwt 3.11.0 - 数据库连接池:阿里巴巴Druid 1.1.22 - 缓存框架:redis - 日志打印:logback - 其他:fastjson,poi,Swagger-ui,quartz, lombok(简化代码)等。 ## 开发环境 - 语言:Java 8 - IDE(JAVA):IDEA安装lombok插件 - 依赖管理:Maven - 数据库:MySQL5.7+ - 缓存:Redis ## 数据库设计规范 - 数据库表名全部使用小写,多个单词之间使用 _ 隔开 - 字段内容全部使用小写,多个单词之间使用 _ 隔开,并且每个字段需要有注释 - 每个表中都需要有id,用varchar(36) - 新建的表中必须要有创建人(create_by)、创建时间(create_time)、更新人(update_by)、更新时间(update_time)、所属部门(sys_code)五个字段 - create_by 和 update_by 存用户账号 - id的增长规则设定保持统一,统一按照框架生成的内容形成 ## 系统规范 - 日志记录 方法中使用`@AutoLog` 记录日志 - 异常处理 所有异常使用`JeroBootException`抛出 - 权限控制 需要进行数据权限控制 - 项目模块创建 后续创建模块在`jero-boot-modules.com.jero.modules.laws` 和`jero-boot-modules.com.jero.modules.project`下创建 - 系统导入 系统导入使用注解`@ExcelImport`进行字段校验 - 系统常量定义在`com.jero.common.constant.CommonConstant`下 ## 专项文档 #### 一、查询过滤器用法 ``` QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(?, req.getParameterMap()); ``` 代码示例: ``` @GetMapping(value = "/list") public Result> list(JeroDemo jeroDemo, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { Result> result = new Result>(); //调用QueryGenerator的initQueryWrapper QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(jeroDemo, req.getParameterMap()); Page page = new Page(pageNo, pageSize); IPage pageList = JeroDemoService.page(page, queryWrapper); result.setSuccess(true); result.setResult(pageList); return result; } ``` - 查询规则 (本规则不适用于高级查询,高级查询有自己对应的查询类型可以选择 ) | 查询模式 | 用法 | 说明 | |---------- |-------------------------------------------------------|------------------| | 模糊查询 | 支持左右模糊和全模糊 需要在查询输入框内前或后带\*或是前后全部带\* | | | 取非查询 | 在查询输入框前面输入! 则查询该字段不等于输入值的数据(数值类型不支持此种查询,可以将数值字段定义为字符串类型的) | | | \> \>= < <= | 同取非查询 在输入框前面输入对应特殊字符即表示走对应规则查询 | | | in查询 | 若传入的数据带,(逗号) 则表示该查询为in查询 | | | 多选字段模糊查询 | 上述4 有一个特例,若某一查询字段前后都带逗号 则会将其视为走这种查询方式 ,该查询方式是将查询条件以逗号分割再遍历数组 将每个元素作like查询 用or拼接,例如 现在name传入值 ,a,b,c, 那么结果sql就是 name like '%a%' or name like '%b%' or name like '%c%' | | #### 三、代码生成器 > 功能说明: 一键生成的代码(包括:controller、service、dao、mapper、entity、vue) - 模板位置: src/main/resources/jero/code-template - 文件配置路径: jero-boot/jero-boot-single-startup/src/main/resources/jero/jero_config.properties #### 四、特殊注意事项 ##### 1、树形组织架构导入校验问题 > 树形组织架构导入校验与Id转换可使用ImportUtil.class下的指定方法 ```java // 准备部门校验的数据 List departList = sysDepartService.list(); Map> sysDeaprtMap = departList.stream() .collect(Collectors.groupingBy(SysDepart::getDepartName)); Map sysDepartPathMap = SysDepart.buildPaths(departList); // 相关校验转换逻辑 /** * cellValue为需要校验的单元格中的内容 */ if (!this.multiOrgValid(cellValue, sysDepartMap, sysDepartPathMap)) { // TODO 校验失败,执行报错提示逻辑 } else { // 校验成功 将部门名称转换为id cellValue = this.convertMultiOrgId(cellValue, sysDepartMap, sysDepartPathMap); } ``` - 为避免每次校验都重复准备部门相关数据,可将准备数据逻辑放入循环外,只执行一次 - 校验逻辑:如果部门名称唯一,则不需要填写全路径也可成功转换,如果出现重名,则必须填写全路径才能转换