当然你用activity也是也可以的。那首先看一下两者的区别。
Activiti7是 Salaboy团队开发的。activiti6以及activiti5代码目前有 Salaboy团队进行维护。
flowable和activiti6是同一个团队开发的,activiti先,flowable后
所以,flowable 算是 activiti6的升级版
一,系统界面演示
二,系统核心代码演示
/** * 参数配置 信息操作处理 * * @author 小孟VX:jishulearn */ @RestController @RequestMapping("/system/config") public class SysConfigController extends BaseController { @Autowired private ISysConfigService configService; /** * 获取参数配置列表 */ @PreAuthorize("@ss.hasPermi('system:config:list')") @GetMapping("/list") public TableDataInfo list(SysConfig config) { startPage(); List<SysConfig> list = configService.selectConfigList(config); return getDataTable(list); } @Log(title = "参数管理", businessType = BusinessType.EXPORT) @PreAuthorize("@ss.hasPermi('system:config:export')") @GetMapping("/export") public AjaxResult export(SysConfig config) { List<SysConfig> list = configService.selectConfigList(config); ExcelUtil<SysConfig> util = new ExcelUtil<SysConfig>(SysConfig.class); return util.exportExcel(list, "参数数据"); } /** * 根据参数编号获取详细信息 */ @PreAuthorize("@ss.hasPermi('system:config:query')") @GetMapping(value = "/{configId}") public AjaxResult getInfo(@PathVariable Long configId) { return AjaxResult.success(configService.selectConfigById(configId)); } /** * 根据参数键名查询参数值 */ @GetMapping(value = "/configKey/{configKey}") public AjaxResult getConfigKey(@PathVariable String configKey) { return AjaxResult.success(configService.selectConfigByKey(configKey)); } /** * 新增参数配置 */ @PreAuthorize("@ss.hasPermi('system:config:add')") @Log(title = "参数管理", businessType = BusinessType.INSERT) @PostMapping @RepeatSubmit public AjaxResult add(@Validated @RequestBody SysConfig config) { if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) { return AjaxResult.error("新增参数'" + config.getConfigName() + "'失败,参数键名已存在"); } config.setCreateBy(SecurityUtils.getUsername()); return toAjax(configService.insertConfig(config)); } /** * 修改参数配置 */ @PreAuthorize("@ss.hasPermi('system:config:edit')") @Log(title = "参数管理", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@Validated @RequestBody SysConfig config) { if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) { return AjaxResult.error("修改参数'" + config.getConfigName() + "'失败,参数键名已存在"); } config.setUpdateBy(SecurityUtils.getUsername()); return toAjax(configService.updateConfig(config)); } /** * 删除参数配置 */ @PreAuthorize("@ss.hasPermi('system:config:remove')") @Log(title = "参数管理", businessType = BusinessType.DELETE) @DeleteMapping("/{configIds}") public AjaxResult remove(@PathVariable Long[] configIds) { return toAjax(configService.deleteConfigByIds(configIds)); } /** * 清空缓存 */ @PreAuthorize("@ss.hasPermi('system:config:remove')") @Log(title = "参数管理", businessType = BusinessType.CLEAN) @DeleteMapping("/clearCache") public AjaxResult clearCache() { configService.clearCache(); return AjaxResult.success(); } }
/** * 部门信息 * * @author 小孟vx:jishulearn * */ @RestController @RequestMapping("/system/dept") public class SysDeptController extends BaseController { @Autowired private ISysDeptService deptService; /** * 获取部门列表 */ @PreAuthorize("@ss.hasPermi('system:dept:list')") @GetMapping("/list") public AjaxResult list(SysDept dept) { List<SysDept> depts = deptService.selectDeptList(dept); return AjaxResult.success(depts); } /** * 查询部门列表(排除节点) */ @PreAuthorize("@ss.hasPermi('system:dept:list')") @GetMapping("/list/exclude/{deptId}") public AjaxResult excludeChild(@PathVariable(value = "deptId", required = false) Long deptId) { List<SysDept> depts = deptService.selectDeptList(new SysDept()); Iterator<SysDept> it = depts.iterator(); while (it.hasNext()) { SysDept d = (SysDept) it.next(); if (d.getDeptId().intValue() == deptId || ArrayUtils.contains(StringUtils.split(d.getAncestors(), ","), deptId + "")) { it.remove(); } } return AjaxResult.success(depts); } /** * 根据部门编号获取详细信息 */ @PreAuthorize("@ss.hasPermi('system:dept:query')") @GetMapping(value = "/{deptId}") public AjaxResult getInfo(@PathVariable Long deptId) { return AjaxResult.success(deptService.selectDeptById(deptId)); } /** * 获取部门下拉树列表 */ @GetMapping("/treeselect") public AjaxResult treeselect(SysDept dept) { List<SysDept> depts = deptService.selectDeptList(dept); return AjaxResult.success(deptService.buildDeptTreeSelect(depts)); } /** * 加载对应角色部门列表树 */ @GetMapping(value = "/roleDeptTreeselect/{roleId}") public AjaxResult roleDeptTreeselect(@PathVariable("roleId") Long roleId) { List<SysDept> depts = deptService.selectDeptList(new SysDept()); AjaxResult ajax = AjaxResult.success(); ajax.put("checkedKeys", deptService.selectDeptListByRoleId(roleId)); ajax.put("depts", deptService.buildDeptTreeSelect(depts)); return ajax; } /** * 新增部门 */ @PreAuthorize("@ss.hasPermi('system:dept:add')") @Log(title = "部门管理", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@Validated @RequestBody SysDept dept) { if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))) { return AjaxResult.error("新增部门'" + dept.getDeptName() + "'失败,部门名称已存在"); } dept.setCreateBy(SecurityUtils.getUsername()); return toAjax(deptService.insertDept(dept)); } /** * 修改部门 */ @PreAuthorize("@ss.hasPermi('system:dept:edit')") @Log(title = "部门管理", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@Validated @RequestBody SysDept dept) { if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))) { return AjaxResult.error("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在"); } else if (dept.getParentId().equals(dept.getDeptId())) { return AjaxResult.error("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己"); } else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus()) && deptService.selectNormalChildrenDeptById(dept.getDeptId()) > 0) { return AjaxResult.error("该部门包含未停用的子部门!"); } dept.setUpdateBy(SecurityUtils.getUsername()); return toAjax(deptService.updateDept(dept)); } /** * 删除部门 */ @PreAuthorize("@ss.hasPermi('system:dept:remove')") @Log(title = "部门管理", businessType = BusinessType.DELETE) @DeleteMapping("/{deptId}") public AjaxResult remove(@PathVariable Long deptId) { if (deptService.hasChildByDeptId(deptId)) { return AjaxResult.error("存在下级部门,不允许删除"); } if (deptService.checkDeptExistUser(deptId)) { return AjaxResult.error("部门存在用户,不允许删除"); } return toAjax(deptService.deleteDeptById(deptId)); } }
/** * 数据字典信息 * * @author 小孟vx:jishulearn */ @RestController @RequestMapping("/system/dict/data") public class SysDictDataController extends BaseController { @Autowired private ISysDictDataService dictDataService; @Autowired private ISysDictTypeService dictTypeService; @PreAuthorize("@ss.hasPermi('system:dict:list')") @GetMapping("/list") public TableDataInfo list(SysDictData dictData) { startPage(); List<SysDictData> list = dictDataService.selectDictDataList(dictData); return getDataTable(list); } @Log(title = "字典数据", businessType = BusinessType.EXPORT) @PreAuthorize("@ss.hasPermi('system:dict:export')") @GetMapping("/export") public AjaxResult export(SysDictData dictData) { List<SysDictData> list = dictDataService.selectDictDataList(dictData); ExcelUtil<SysDictData> util = new ExcelUtil<SysDictData>(SysDictData.class); return util.exportExcel(list, "字典数据"); } /** * 查询字典数据详细 */ @PreAuthorize("@ss.hasPermi('system:dict:query')") @GetMapping(value = "/{dictCode}") public AjaxResult getInfo(@PathVariable Long dictCode) { return AjaxResult.success(dictDataService.selectDictDataById(dictCode)); } /** * 根据字典类型查询字典数据信息 */ @GetMapping(value = "/type/{dictType}") public AjaxResult dictType(@PathVariable String dictType) { List<SysDictData> data = dictTypeService.selectDictDataByType(dictType); if (StringUtils.isNull(data)) { data = new ArrayList<SysDictData>(); } return AjaxResult.success(data); } /** * 新增字典类型 */ @PreAuthorize("@ss.hasPermi('system:dict:add')") @Log(title = "字典数据", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@Validated @RequestBody SysDictData dict) { dict.setCreateBy(SecurityUtils.getUsername()); return toAjax(dictDataService.insertDictData(dict)); } /** * 修改保存字典类型 */ @PreAuthorize("@ss.hasPermi('system:dict:edit')") @Log(title = "字典数据", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@Validated @RequestBody SysDictData dict) { dict.setUpdateBy(SecurityUtils.getUsername()); return toAjax(dictDataService.updateDictData(dict)); } /** * 删除字典类型 */ @PreAuthorize("@ss.hasPermi('system:dict:remove')") @Log(title = "字典类型", businessType = BusinessType.DELETE) @DeleteMapping("/{dictCodes}") public AjaxResult remove(@PathVariable Long[] dictCodes) { return toAjax(dictDataService.deleteDictDataByIds(dictCodes)); } }
三,核心数据表设计
-- ---------------------------- -- Table structure for `act_evt_log` -- ---------------------------- DROP TABLE IF EXISTS `act_evt_log`; CREATE TABLE `act_evt_log` ( `LOG_NR_` bigint(20) NOT NULL AUTO_INCREMENT, `TYPE_` varchar(64) COLLATE utf8_bin DEFAULT NULL, `PROC_DEF_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, `PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, `EXECUTION_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, `TASK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, `TIME_STAMP_` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `USER_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, `DATA_` longblob, `LOCK_OWNER_` varchar(255) COLLATE utf8_bin DEFAULT NULL, `LOCK_TIME_` timestamp(3) NULL DEFAULT NULL, `IS_PROCESSED_` tinyint(4) DEFAULT '0', PRIMARY KEY (`LOG_NR_`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; -- ---------------------------- -- Records of act_evt_log -- ---------------------------- -- ---------------------------- -- Table structure for `act_ge_bytearray` -- ---------------------------- DROP TABLE IF EXISTS `act_ge_bytearray`; CREATE TABLE `act_ge_bytearray` ( `ID_` varchar(64) COLLATE utf8_bin NOT NULL, `REV_` int(11) DEFAULT NULL, `NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL, `DEPLOYMENT_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, `BYTES_` longblob, `GENERATED_` tinyint(4) DEFAULT NULL, PRIMARY KEY (`ID_`), KEY `ACT_FK_BYTEARR_DEPL` (`DEPLOYMENT_ID_`), CONSTRAINT `ACT_FK_BYTEARR_DEPL` FOREIGN KEY (`DEPLOYMENT_ID_`) REFERENCES `act_re_deployment` (`ID_`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; -- ---------------------------- DROP TABLE IF EXISTS `act_ge_property`; CREATE TABLE `act_ge_property` ( `NAME_` varchar(64) COLLATE utf8_bin NOT NULL, `VALUE_` varchar(300) COLLATE utf8_bin DEFAULT NULL, `REV_` int(11) DEFAULT NULL, PRIMARY KEY (`NAME_`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; -- ---------------------------- DROP TABLE IF EXISTS `act_hi_actinst`; CREATE TABLE `act_hi_actinst` ( `ID_` varchar(64) COLLATE utf8_bin NOT NULL, `REV_` int(11) DEFAULT '1', `PROC_DEF_ID_` varchar(64) COLLATE utf8_bin NOT NULL, `PROC_INST_ID_` varchar(64) COLLATE utf8_bin NOT NULL, `EXECUTION_ID_` varchar(64) COLLATE utf8_bin NOT NULL, `ACT_ID_` varchar(255) COLLATE utf8_bin NOT NULL, `TASK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, `CALL_PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, `ACT_NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL, `ACT_TYPE_` varchar(255) COLLATE utf8_bin NOT NULL, `ASSIGNEE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, `START_TIME_` datetime(3) NOT NULL, `END_TIME_` datetime(3) DEFAULT NULL, `TRANSACTION_ORDER_` int(11) DEFAULT NULL, `DURATION_` bigint(20) DEFAULT NULL, `DELETE_REASON_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '', PRIMARY KEY (`ID_`), KEY `ACT_IDX_HI_ACT_INST_START` (`START_TIME_`), KEY `ACT_IDX_HI_ACT_INST_END` (`END_TIME_`), KEY `ACT_IDX_HI_ACT_INST_PROCINST` (`PROC_INST_ID_`,`ACT_ID_`), KEY `ACT_IDX_HI_ACT_INST_EXEC` (`EXECUTION_ID_`,`ACT_ID_`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
-- ---------------------------- DROP TABLE IF EXISTS `act_hi_attachment`; CREATE TABLE `act_hi_attachment` ( `ID_` varchar(64) COLLATE utf8_bin NOT NULL, `REV_` int(11) DEFAULT NULL, `USER_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, `NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL, `DESCRIPTION_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, `TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, `TASK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, `PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, `URL_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, `CONTENT_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, `TIME_` datetime(3) DEFAULT NULL, PRIMARY KEY (`ID_`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; -- ---------------------------- -- Records of act_hi_attachment -- ---------------------------- -- ---------------------------- -- Table structure for `act_hi_comment` -- ---------------------------- DROP TABLE IF EXISTS `act_hi_comment`; CREATE TABLE `act_hi_comment` ( `ID_` varchar(64) COLLATE utf8_bin NOT NULL, `TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, `TIME_` datetime(3) NOT NULL, `USER_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, `TASK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, `PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, `ACTION_` varchar(255) COLLATE utf8_bin DEFAULT NULL, `MESSAGE_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, `FULL_MSG_` longblob, PRIMARY KEY (`ID_`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; -- ----------------------------