boot-admin整合flowable官方editor-app源码进行BPMN2-0建模(续)
书接上回
boot-admin 是一款采用前后端分离模式、基于SpringCloud微服务架构的SaaS后台管理框架。系统内置基础管理、权限管理、运行管理、定义管理、代码生成器和办公管理6个功能模块,集成分布式事务Seata、工作流引擎Flowable、业务规则引擎Drools、后台作业调度框架Quartz等,技术栈包括Mybatis-plus、Redis、Nacos、Seata、Flowable、Drools、Quartz、SpringCloud、Springboot Admin Gateway、Liquibase、jwt、Openfeign、I18n等。
在上一篇博文中,已经介绍了 boot-admin 对 editor-app 前端代码的集成改造,接下来我们看看后端代码。
提供汉化资源json数据
/**
* 获取汉化资源
* @return
*/
@RequestMapping(value = "/editor/stencilset", method = RequestMethod.GET, produces = "application/json;charset=utf-8")
public String getStencilset() {
InputStream stencilsetStream = this.getClass().getClassLoader().getResourceAsStream("stencilset.json");
try {
return IOUtils.toString(stencilsetStream, "utf-8");
} catch (Exception e) {
throw new FlowableException("Error while loading stencil set", e);
}
}
资源包stencilset.json需放在resources文夹下,这里提供下载:点击下载汉化包
分页获取模型列表
controller:
@RequestMapping("/api/workflow/auth/activiti")
@RestController
@Slf4j
public class ModelController extends BaseController {
@Resource
private FormValidator formValidator;
@Autowired
private MyModelService modelService;
@PostMapping("/model/page")
@ApiOperation("分页获取项目数据表列表")
public ResultDTO getTablePage(@Valid @RequestBody ModelQueryVO queryVO, BindingResult bindingResult) throws Exception {
if (bindingResult.hasErrors()) {
return formValidator.generateMessage(bindingResult);
}
return modelService.getPage(queryVO);
}
}
service:
@Override
public ResultDTO getPage(ModelQueryVO queryVO) throws Exception {
int offset = (queryVO.getCurrentPage() - 1) * queryVO.getPageSize() + 0;
List<Model> list = repositoryService.createModelQuery().listPage(offset
, queryVO.getPageSize());
int total = (int) repositoryService.createModelQuery().count();
Page<Model> page = new Page<>();
page.setRecords(list);
page.setTotal(total);
return ResultDTO.success(page);
}
读取模型数据
controller:
@RequestMapping("/api/workflow/auth/activiti")
@RestController
@Slf4j
public class ModelController extends BaseController {
@Autowired
private RepositoryService repositoryService;
@Autowired
private ObjectMapper objectMapper;
/**
* 获取用于编辑的模型JSON数据
* @param modelId 模型ID
* @return
*/
@GetMapping(value = "/model/json")
public ObjectNode getEditorJson(@RequestParam("modelId") String modelId) {
ObjectNode modelNode = null;
Model model = repositoryService.getModel(modelId);
if (model != null) {
try {
if (StringUtils.isNotEmpty(model.getMetaInfo())) {
modelNode = (ObjectNode) objectMapper.readTree(model.getMetaInfo());
} else {
modelNode = objectMapper.createObjectNode();
modelNode.put(MODEL_NAME, model.getName());
}
modelNode.put(MODEL_ID, model.getId());
ObjectNode editorJsonNode = (ObjectNode) objectMapper.readTree(
new String(repositoryService.getModelEditorSource(model.getId()), "utf-8"));
modelNode.put("model", editorJsonNode);
} catch (Exception e) {
log.error("Error creating model JSON", e);
throw new FlowableException("Error creating model JSON", e);