diff --git a/metis-applicant/pom.xml b/metis-applicant/pom.xml index fb0a0cd..27099fa 100644 --- a/metis-applicant/pom.xml +++ b/metis-applicant/pom.xml @@ -25,12 +25,15 @@ metis-starter ${project.version} - com.github.xiaoymin knife4j-openapi3-jakarta-spring-boot-starter 4.4.0 + + org.springdoc + springdoc-openapi-starter-webmvc-api + diff --git a/metis-starter/pom.xml b/metis-starter/pom.xml index 23b1cdf..6f9d18a 100644 --- a/metis-starter/pom.xml +++ b/metis-starter/pom.xml @@ -74,8 +74,8 @@ lombok-mapstruct-binding - org.springdoc - springdoc-openapi-starter-webmvc-api + io.swagger.core.v3 + swagger-annotations-jakarta diff --git a/metis-starter/src/main/java/com/metis/constant/BaseConstant.java b/metis-starter/src/main/java/com/metis/constant/BaseConstant.java index bfac152..9eb934b 100644 --- a/metis-starter/src/main/java/com/metis/constant/BaseConstant.java +++ b/metis-starter/src/main/java/com/metis/constant/BaseConstant.java @@ -2,5 +2,5 @@ package com.metis.constant; public interface BaseConstant { - Integer DEFAULT_VERSION = 0; + Integer DEFAULT_VERSION = 1; } diff --git a/metis-starter/src/main/java/com/metis/controller/ProcessDefinitionController.java b/metis-starter/src/main/java/com/metis/controller/ProcessDefinitionController.java index 8f16bc5..e7fe793 100644 --- a/metis-starter/src/main/java/com/metis/controller/ProcessDefinitionController.java +++ b/metis-starter/src/main/java/com/metis/controller/ProcessDefinitionController.java @@ -1,12 +1,19 @@ package com.metis.controller; -import com.metis.domain.bo.ProcessBo; +import com.metis.domain.bo.AppBO; +import com.metis.domain.query.AppQuery; +import com.metis.domain.vo.AppVo; import com.metis.facade.ProcessDefinitionFacade; -import com.metis.domain.entity.App; import com.metis.result.Result; +import com.metis.result.page.TableDataInfo; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; +import java.util.List; + +@Tag(name = "流程定义") @RestController @RequiredArgsConstructor @RequestMapping("/process/definition") @@ -15,25 +22,43 @@ public class ProcessDefinitionController { private final ProcessDefinitionFacade processDefinitionFacade; - @PostMapping("/create") - public Result create(@RequestBody ProcessBo processBo) { - Long workflowId = processDefinitionFacade.create(processBo); - return Result.ok(workflowId); - } - - @PutMapping("/update") - public Result update(@RequestBody ProcessBo processBo) { - processDefinitionFacade.update(processBo); - return Result.ok(); - } - - + @Operation(summary = "根据部署ID获取流程定义") @GetMapping("/{deploymentId}") - public Result getByDeploymentId(@PathVariable Long deploymentId) { - App app = processDefinitionFacade.getByDeploymentId(deploymentId); + public Result getByDeploymentId(@PathVariable Long deploymentId) { + AppVo app = processDefinitionFacade.getByDeploymentId(deploymentId); return Result.ok(app); } + @Operation(summary = "列表查询") + @GetMapping("/list") + public Result> list(AppQuery query) { + List table = processDefinitionFacade.list(query); + return Result.ok(table); + } + + + @Operation(summary = "分页查询") + @GetMapping("/page") + public Result> page(AppQuery query) { + TableDataInfo table = processDefinitionFacade.listPage(query); + return Result.ok(table); + } + + @Operation(summary = "创建流程定义") + @PostMapping("/create") + public Result create(@RequestBody AppBO appBO) { + Long workflowId = processDefinitionFacade.create(appBO); + return Result.ok(workflowId); + } + + @Operation(summary = "更新流程定义") + @PutMapping("/update") + public Result update(@RequestBody AppBO appBO) { + Long workflowId = processDefinitionFacade.update(appBO); + return Result.ok(workflowId); + } + + @Operation(summary = "删除流程定义") @DeleteMapping("/{appId}") public Result delete(@PathVariable Long appId) { processDefinitionFacade.delete(appId); diff --git a/metis-starter/src/main/java/com/metis/convert/AppConvert.java b/metis-starter/src/main/java/com/metis/convert/AppConvert.java new file mode 100644 index 0000000..8188149 --- /dev/null +++ b/metis-starter/src/main/java/com/metis/convert/AppConvert.java @@ -0,0 +1,35 @@ +package com.metis.convert; + + +import com.metis.domain.entity.App; +import com.metis.domain.vo.AppVo; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +@Mapper +public interface AppConvert { + + AppConvert INSTANCE = Mappers.getMapper(AppConvert.class); + + + /** + * 对签证官 + * + * @param app 应用程序 + * @return {@link AppVo } + */ + AppVo toVo(App app); + + + /** + * 列举… + * + * @param appList 应用程序列表 + * @return {@link List }<{@link AppVo }> + */ + List toListVo(List appList); + + +} diff --git a/metis-starter/src/main/java/com/metis/convert/BaseAppConvert.java b/metis-starter/src/main/java/com/metis/convert/BaseAppConvert.java index 7a1122b..8c34f46 100644 --- a/metis-starter/src/main/java/com/metis/convert/BaseAppConvert.java +++ b/metis-starter/src/main/java/com/metis/convert/BaseAppConvert.java @@ -25,7 +25,6 @@ public interface BaseAppConvert { * @return {@link App } */ @Mappings({ - @Mapping(target = "id", ignore = true), @Mapping(target = "workflowId", ignore = true), @Mapping(target = "createTime", ignore = true), @Mapping(target = "version", ignore = true), @@ -56,7 +55,6 @@ public interface BaseAppConvert { @Mapping(target = "createTime", ignore = true), @Mapping(target = "updateTime", ignore = true), @Mapping(target = "isDeleted", ignore = true), - @Mapping(target = "id", ignore = true), @Mapping(target = "createUserId", ignore = true), @Mapping(target = "defaultUse", ignore = true) }) @@ -88,9 +86,6 @@ public interface BaseAppConvert { * @param updateApp 更新应用程序 * @return {@link BuildApp } */ - @Mappings({ - @Mapping(target = "userId", ignore = true) - }) BuildApp toBuildApp(UpdateApp updateApp); } diff --git a/metis-starter/src/main/java/com/metis/convert/GraphConvert.java b/metis-starter/src/main/java/com/metis/convert/GraphConvert.java index da2fa78..b81e606 100644 --- a/metis-starter/src/main/java/com/metis/convert/GraphConvert.java +++ b/metis-starter/src/main/java/com/metis/convert/GraphConvert.java @@ -12,6 +12,12 @@ public interface GraphConvert { GraphConvert INSTANCE = Mappers.getMapper(GraphConvert.class); + /** + * 实体 + * + * @param graph 图 + * @return {@link Graph } + */ Graph toEntity(GraphBO graph); } diff --git a/metis-starter/src/main/java/com/metis/domain/bo/ProcessBo.java b/metis-starter/src/main/java/com/metis/domain/bo/AppBO.java similarity index 80% rename from metis-starter/src/main/java/com/metis/domain/bo/ProcessBo.java rename to metis-starter/src/main/java/com/metis/domain/bo/AppBO.java index c0075af..d944339 100644 --- a/metis-starter/src/main/java/com/metis/domain/bo/ProcessBo.java +++ b/metis-starter/src/main/java/com/metis/domain/bo/AppBO.java @@ -1,11 +1,10 @@ package com.metis.domain.bo; import com.metis.enums.YesOrNoEnum; -import com.metis.domain.bo.GraphBO; import lombok.Data; @Data -public class ProcessBo { +public class AppBO { private Long appId; diff --git a/metis-starter/src/main/java/com/metis/domain/entity/App.java b/metis-starter/src/main/java/com/metis/domain/entity/App.java index ef48d44..1d0c819 100644 --- a/metis-starter/src/main/java/com/metis/domain/entity/App.java +++ b/metis-starter/src/main/java/com/metis/domain/entity/App.java @@ -13,7 +13,7 @@ public class App { /** * 主键 */ - private Long id; + private Long appId; /** * 部署id diff --git a/metis-starter/src/main/java/com/metis/domain/vo/AppVo.java b/metis-starter/src/main/java/com/metis/domain/vo/AppVo.java new file mode 100644 index 0000000..0bf9f85 --- /dev/null +++ b/metis-starter/src/main/java/com/metis/domain/vo/AppVo.java @@ -0,0 +1,60 @@ +package com.metis.domain.vo; + +import com.metis.enums.YesOrNoEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +@Schema(description = "应用") +public class AppVo { + + /** + * 主键 + */ + @Schema(description = "appId, 应用id") + private Long appId; + + /** + * 部署id + */ + @Schema(description = "部署id") + private Long workflowId; + + /** + * 名称 + */ + @Schema(description = "名称") + private String name; + + /** + * 描述 + */ + @Schema(description = "描述") + private String description; + + /** + * 图 + */ + @Schema(description = "图") + private GraphVo graph; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + private LocalDateTime createTime; + + /** + * 版本 + */ + @Schema(description = "版本") + private Integer version; + + /** + * 默认使用 + */ + @Schema(description = "默认使用") + private YesOrNoEnum defaultUse; +} diff --git a/metis-starter/src/main/java/com/metis/domain/vo/EdgeVo.java b/metis-starter/src/main/java/com/metis/domain/vo/EdgeVo.java new file mode 100644 index 0000000..f31cba0 --- /dev/null +++ b/metis-starter/src/main/java/com/metis/domain/vo/EdgeVo.java @@ -0,0 +1,70 @@ +package com.metis.domain.vo; + +import com.metis.enums.EdgeType; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +@Schema(description = "连线") +public class EdgeVo { + + /** + * 唯一标识符 + */ + @Schema(description = "唯一标识符") + private String id; + + /** + * 标签 + */ + @Schema(description = "标签") + private String label; + + /** + * 节点类型 + */ + @Schema(description = "节点类型") + private EdgeType type; + + /** + * 源节点ID,对应节点id + */ + @Schema(description = "源节点ID,对应节点id") + private Long source; + + /** + * 目标节点ID,对应节点id + */ + @Schema(description = "目标节点ID,对应节点id") + private Long target; + /** + * 源句柄id + */ + @Schema(description = "源句柄id") + private Long sourceHandle; + + /** + * 目标句柄id + */ + @Schema(description = "目标句柄id") + private Long targetHandle; + + /** + * 边是否动画true/false + */ + @Schema(description = "边是否动画true/false") + private Boolean animated; + + /** + * 开始标志 + */ + @Schema(description = "开始标志") + private String markerStart; + + /** + * 结束标记 + */ + @Schema(description = "结束标记") + private String markerEnd; + +} diff --git a/metis-starter/src/main/java/com/metis/domain/vo/GraphVo.java b/metis-starter/src/main/java/com/metis/domain/vo/GraphVo.java new file mode 100644 index 0000000..b50ef86 --- /dev/null +++ b/metis-starter/src/main/java/com/metis/domain/vo/GraphVo.java @@ -0,0 +1,44 @@ +package com.metis.domain.vo; + +import com.metis.domain.entity.base.Viewport; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + + +@Data +public class GraphVo { + + /** + * 边缘 + */ + @Schema(description = "边缘") + private List edges; + + /** + * 节点 + */ + @Schema(description = "节点") + private List nodes; + + /** + * 位置 + */ + @Schema(description = "位置") + private List position; + + /** + * 变焦 + */ + @Schema(description = "变焦") + private Double zoom; + + /** + * 视窗 + */ + @Schema(description = "视窗") + private Viewport viewport; + + +} diff --git a/metis-starter/src/main/java/com/metis/domain/vo/HandleVo.java b/metis-starter/src/main/java/com/metis/domain/vo/HandleVo.java new file mode 100644 index 0000000..bb6d85d --- /dev/null +++ b/metis-starter/src/main/java/com/metis/domain/vo/HandleVo.java @@ -0,0 +1,34 @@ +package com.metis.domain.vo; + +import com.metis.enums.HandleType; +import com.metis.enums.PositionType; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +@Schema(description = "句柄") +public class HandleVo { + /** + * 句柄id + */ + @Schema(description = "句柄id") + private Long id; + + /** + * 句柄类型 + */ + @Schema(description = "句柄类型") + private HandleType type; + + /** + * 句柄位置 + */ + @Schema(description = "句柄位置") + private PositionType position; + + /** + * 是否可以连接 + */ + @Schema(description = "是否可以连接") + private Boolean connectable; +} diff --git a/metis-starter/src/main/java/com/metis/domain/vo/NodeDataVo.java b/metis-starter/src/main/java/com/metis/domain/vo/NodeDataVo.java new file mode 100644 index 0000000..e133f32 --- /dev/null +++ b/metis-starter/src/main/java/com/metis/domain/vo/NodeDataVo.java @@ -0,0 +1,45 @@ +package com.metis.domain.vo; + +import com.alibaba.fastjson2.JSONObject; +import com.metis.enums.PositionType; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +@Data +@Schema(description = "节点业务数据") +public class NodeDataVo { + + /** + * 标签 + */ + @Schema(description = "标签") + private String label; + + /** + * 图标 + */ + @Schema(description = "图标") + private String icon; + + /** + * 工具栏位置 + */ + @Schema(description = "工具栏位置") + private PositionType toolbarPosition; + + + /** + * 配置 + */ + @Schema(description = "配置") + private JSONObject config; + + /** + * 句柄列表 + */ + @Schema(description = "句柄列表") + private List handles; + +} diff --git a/metis-starter/src/main/java/com/metis/domain/vo/NodeVo.java b/metis-starter/src/main/java/com/metis/domain/vo/NodeVo.java new file mode 100644 index 0000000..d92f76e --- /dev/null +++ b/metis-starter/src/main/java/com/metis/domain/vo/NodeVo.java @@ -0,0 +1,55 @@ +package com.metis.domain.vo; + +import com.metis.enums.NodeType; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class NodeVo { + + /** + * id + */ + @Schema(description = "节点id") + private Long id; + + /** + * 类型 + */ + @Schema(description = "节点类型") + private NodeType type; + + + @Schema(description = "自定义类型") + private String customType; + + /** + * 位置 + */ + @Schema(description = "节点位置") + private PositionVo position; + + /** + * 业务数据 + */ + @Schema(description = "节点业务数据") + private NodeDataVo data; + + /** + * 宽度 + */ + @Schema(description = "节点宽度") + private Integer width; + + /** + * 高度 + */ + @Schema(description = "节点高度") + private Integer height; + + /** + * 节点是否选中 + */ + @Schema(description = "节点是否选中") + private Boolean selected; +} diff --git a/metis-starter/src/main/java/com/metis/domain/vo/PositionVo.java b/metis-starter/src/main/java/com/metis/domain/vo/PositionVo.java new file mode 100644 index 0000000..91efb23 --- /dev/null +++ b/metis-starter/src/main/java/com/metis/domain/vo/PositionVo.java @@ -0,0 +1,20 @@ +package com.metis.domain.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +@Schema(description = "位置") +public class PositionVo { + /** + * x坐标 + */ + @Schema(description = "x坐标") + private Double x; + + /** + * y坐标 + */ + @Schema(description = "y坐标") + private Double y; +} diff --git a/metis-starter/src/main/java/com/metis/engine/AppEngineService.java b/metis-starter/src/main/java/com/metis/engine/AppEngineService.java index dac3ee6..43467b0 100644 --- a/metis-starter/src/main/java/com/metis/engine/AppEngineService.java +++ b/metis-starter/src/main/java/com/metis/engine/AppEngineService.java @@ -5,6 +5,7 @@ import com.metis.domain.bo.CreateApp; import com.metis.domain.bo.UpdateApp; import com.metis.domain.entity.App; import com.metis.domain.query.AppQuery; +import com.metis.result.page.TableDataInfo; import java.util.List; @@ -16,7 +17,7 @@ public interface AppEngineService { * @param query 查询 * @return {@link List }<{@link App }> */ - List listPage(AppQuery query); + TableDataInfo listPage(AppQuery query); /** * 列表 @@ -30,10 +31,11 @@ public interface AppEngineService { /** * 通过应用id获取 * - * @param appId 应用程序id + * @param appId 应用程序id + * @param defaultUse 默认使用 * @return {@link App } */ - App getByAppId(Long appId); + App getByAppId(Long appId, boolean defaultUse); /** * 按身份证领取 diff --git a/metis-starter/src/main/java/com/metis/engine/impl/AppEngineServiceImpl.java b/metis-starter/src/main/java/com/metis/engine/impl/AppEngineServiceImpl.java index 0a3a993..c90e9db 100644 --- a/metis-starter/src/main/java/com/metis/engine/impl/AppEngineServiceImpl.java +++ b/metis-starter/src/main/java/com/metis/engine/impl/AppEngineServiceImpl.java @@ -3,6 +3,7 @@ package com.metis.engine.impl; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.metis.constant.BaseConstant; import com.metis.convert.BaseAppConvert; import com.metis.domain.bo.BuildApp; @@ -13,7 +14,9 @@ import com.metis.domain.entity.BaseApp; import com.metis.domain.query.AppQuery; import com.metis.engine.AppEngineService; import com.metis.enums.YesOrNoEnum; +import com.metis.result.page.TableDataInfo; import com.metis.service.BaseAppService; +import com.metis.utils.PageConditionUtil; import com.metis.validator.ValidatorService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -32,9 +35,9 @@ public class AppEngineServiceImpl implements AppEngineService { @Override - public List listPage(AppQuery query) { - List list = baseAppService.listPage(query); - return BaseAppConvert.INSTANCE.toApps(list); + public TableDataInfo listPage(AppQuery query) { + IPage page = baseAppService.listPage(query); + return PageConditionUtil.convertDataTable(page, BaseAppConvert.INSTANCE::toApp); } @Override @@ -44,8 +47,13 @@ public class AppEngineServiceImpl implements AppEngineService { } @Override - public App getByAppId(Long appId) { - BaseApp baseApp = baseAppService.getByAppId(appId); + public App getByAppId(Long appId, boolean defaultUse) { + BaseApp baseApp; + if (defaultUse) { + baseApp = baseAppService.getDefaultByAppId(appId); + } else { + baseApp = baseAppService.getLastByAppId(appId); + } return BaseAppConvert.INSTANCE.toApp(baseApp); } @@ -84,7 +92,7 @@ public class AppEngineServiceImpl implements AppEngineService { @Override @Transactional(rollbackFor = Exception.class) public synchronized App update(UpdateApp updateApp) { - BaseApp entity = baseAppService.getByAppId(updateApp.getAppId()); + BaseApp entity = baseAppService.getLastByAppId(updateApp.getAppId()); Assert.isTrue(ObjectUtil.isNotNull(entity), "app不存在"); BuildApp buildApp = BaseAppConvert.INSTANCE.toBuildApp(updateApp); // 校验 @@ -119,7 +127,7 @@ public class AppEngineServiceImpl implements AppEngineService { */ private App creatApp(BaseApp baseApp, BuildApp buildApp) { App app = BaseAppConvert.INSTANCE.toApp(buildApp); - app.setId(baseApp.getId()); + app.setAppId(baseApp.getId()); app.setWorkflowId(baseApp.getId()); app.setDefaultUse(baseApp.getDefaultUse()); return app; diff --git a/metis-starter/src/main/java/com/metis/engine/impl/AppFlowEngineRunnerServiceImpl.java b/metis-starter/src/main/java/com/metis/engine/impl/AppFlowEngineRunnerServiceImpl.java index 9f64f8f..daa4ec8 100644 --- a/metis-starter/src/main/java/com/metis/engine/impl/AppFlowEngineRunnerServiceImpl.java +++ b/metis-starter/src/main/java/com/metis/engine/impl/AppFlowEngineRunnerServiceImpl.java @@ -45,7 +45,7 @@ public class AppFlowEngineRunnerServiceImpl implements AppFlowEngineRunnerServic // 构建系统上下文信息 SysContext sysContext = SysContext.builder() .files(context.getFiles()) - .appId(app.getId()) + .appId(app.getAppId()) .workflowId(app.getWorkflowId()) .instanceId(instanceId) .build(); @@ -100,34 +100,6 @@ public class AppFlowEngineRunnerServiceImpl implements AppFlowEngineRunnerServic } - private void doRunning(Set readyRunningNode, Map> edgeMap, RunningContext runningContext) { - Set nextRunningNodeId = new HashSet<>(); - for (Node runningNode : readyRunningNode) { - // 当前节点接下来的连接线信息 - List edges = edgeMap.getOrDefault(runningNode.getId(), new ArrayList<>()); - // 执行 - NodeRunner nodeRunner = getNodeRunner(runningNode); - runningNode.setConfigClass(GenericInterfacesUtils.getClass(nodeRunner)); - // 获取到返回结果 - RunningResult result = nodeRunner.run(runningContext, runningNode, edges); - // 节点执行结果参数放入上下文中 - if (ObjectUtil.isNotNull(result.getNodeContext())) { - runningContext.addNodeRunningContext(runningNode.getId(), result.getNodeContext()); - } - if (CollUtil.isNotEmpty(result.getNextRunNodeId())) { - nextRunningNodeId.addAll(result.getNextRunNodeId()); - } - } - } - - - private RunningResult doRunning(RunningContext runningContext, Node node, List edges) { - NodeRunner nodeRunner = getNodeRunner(node); - node.setConfigClass(GenericInterfacesUtils.getClass(nodeRunner)); - // 获取到返回结果 - return nodeRunner.run(runningContext, node, edges); - } - /** * 获取节点运行程序 @@ -154,6 +126,6 @@ public class AppFlowEngineRunnerServiceImpl implements AppFlowEngineRunnerServic if (ObjectUtil.isNotNull(context.getWorkflowId())) { return appEngineService.getByWorkflowId(context.getWorkflowId()); } - return appEngineService.getByAppId(context.getAppId()); + return appEngineService.getByAppId(context.getAppId(), true); } } diff --git a/metis-starter/src/main/java/com/metis/facade/ProcessDefinitionFacade.java b/metis-starter/src/main/java/com/metis/facade/ProcessDefinitionFacade.java index 7926301..0fbab34 100644 --- a/metis-starter/src/main/java/com/metis/facade/ProcessDefinitionFacade.java +++ b/metis-starter/src/main/java/com/metis/facade/ProcessDefinitionFacade.java @@ -1,15 +1,22 @@ package com.metis.facade; +import com.metis.convert.AppConvert; import com.metis.convert.GraphConvert; import com.metis.domain.bo.CreateApp; -import com.metis.domain.bo.ProcessBo; +import com.metis.domain.bo.AppBO; import com.metis.domain.bo.UpdateApp; import com.metis.domain.entity.App; import com.metis.domain.entity.base.Graph; +import com.metis.domain.query.AppQuery; +import com.metis.domain.vo.AppVo; import com.metis.engine.AppEngineService; +import com.metis.result.page.TableDataInfo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; @Slf4j @Service @@ -18,36 +25,80 @@ public class ProcessDefinitionFacade { private final AppEngineService appEngineService; + /** + * 通过部署id获取 + * + * @param deploymentId 部署id + * @return {@link App } + */ + public AppVo getByDeploymentId(Long deploymentId) { + App app = appEngineService.getByWorkflowId(deploymentId); + return AppConvert.INSTANCE.toVo(app); + } + + + /** + * 列表 + * + * @param query 查询 + * @return {@link TableDataInfo }<{@link AppVo }> + */ + public List list(AppQuery query) { + List list = appEngineService.list(query); + return AppConvert.INSTANCE.toListVo(list); + } + + + /** + * 列表页面 + * + * @param query 查询 + * @return {@link TableDataInfo }<{@link AppVo }> + */ + public TableDataInfo listPage(AppQuery query) { + TableDataInfo dataInfo = appEngineService.listPage(query); + return dataInfo.convertDataTable(AppConvert.INSTANCE::toVo); + } + /** * 创建 * - * @param processBo 过程业务对象 + * @param appBO 过程业务对象 */ - public Long create(ProcessBo processBo) { - Graph graph = GraphConvert.INSTANCE.toEntity(processBo.getGraph()); + @Transactional(rollbackFor = Exception.class) + public Long create(AppBO appBO) { + Graph graph = GraphConvert.INSTANCE.toEntity(appBO.getGraph()); CreateApp createApp = CreateApp.builder() - .name(processBo.getName()) + .name(appBO.getName()) .graph(graph) .build(); App app = appEngineService.create(createApp); return app.getWorkflowId(); } - public App getByDeploymentId(Long deploymentId) { - return appEngineService.getByWorkflowId(deploymentId); - } - - public void update(ProcessBo processBo) { - Graph graph = GraphConvert.INSTANCE.toEntity(processBo.getGraph()); - appEngineService.update(UpdateApp.builder() - .defaultUse(processBo.getDefaultUse()) - .appId(processBo.getAppId()) - .name(processBo.getName()) + /** + * 更新 + * + * @param appBO 过程业务对象 + */ + @Transactional(rollbackFor = Exception.class) + public Long update(AppBO appBO) { + Graph graph = GraphConvert.INSTANCE.toEntity(appBO.getGraph()); + App update = appEngineService.update(UpdateApp.builder() + .defaultUse(appBO.getDefaultUse()) + .appId(appBO.getAppId()) + .name(appBO.getName()) .graph(graph) .build()); - + return update.getWorkflowId(); } + /** + * 删除 + * + * @param appId 应用程序id + */ + @Transactional(rollbackFor = Exception.class) public void delete(Long appId) { appEngineService.delete(appId); } diff --git a/metis-starter/src/main/java/com/metis/result/page/TableDataInfo.java b/metis-starter/src/main/java/com/metis/result/page/TableDataInfo.java index a715c8f..0ae3a2e 100644 --- a/metis-starter/src/main/java/com/metis/result/page/TableDataInfo.java +++ b/metis-starter/src/main/java/com/metis/result/page/TableDataInfo.java @@ -1,10 +1,12 @@ package com.metis.result.page; +import cn.hutool.core.collection.CollUtil; import lombok.Data; import java.io.Serializable; import java.util.List; +import java.util.function.Function; /** * 表格分页数据对象 @@ -42,4 +44,14 @@ public class TableDataInfo implements Serializable { this.total = total; } + + public TableDataInfo convertDataTable(Function function) { + TableDataInfo tableDataInfo = new TableDataInfo<>(); + if (CollUtil.isNotEmpty(this.rows)) { + tableDataInfo.setRows(this.rows.stream().map(function).toList()); + } + tableDataInfo.setTotal(this.total); + return tableDataInfo; + } + } diff --git a/metis-starter/src/main/java/com/metis/service/BaseAppService.java b/metis-starter/src/main/java/com/metis/service/BaseAppService.java index 96d1c31..160b3b6 100644 --- a/metis-starter/src/main/java/com/metis/service/BaseAppService.java +++ b/metis-starter/src/main/java/com/metis/service/BaseAppService.java @@ -1,5 +1,6 @@ package com.metis.service; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.metis.enums.YesOrNoEnum; import com.metis.domain.query.AppQuery; import com.metis.domain.entity.BaseApp; @@ -16,19 +17,27 @@ import java.util.List; public interface BaseAppService extends IService { + /** + * 获取默认当前使用 + * + * @param appId 应用程序id + * @return {@link BaseApp } + */ + BaseApp getDefaultByAppId(Long appId); + /** * 通过应用id获取 * * @param appId 应用程序id * @return {@link BaseApp } */ - BaseApp getByAppId(Long appId); + BaseApp getLastByAppId(Long appId); /** * 通过id和版本获取 * - * @param appId id + * @param appId id * @param version 版本 * @return {@link BaseApp } */ @@ -40,7 +49,7 @@ public interface BaseAppService extends IService { * @param query 查询 * @return {@link List }<{@link BaseApp }> */ - List listPage(AppQuery query); + IPage listPage(AppQuery query); /** * 列表查询 diff --git a/metis-starter/src/main/java/com/metis/service/impl/BaseAppServiceImpl.java b/metis-starter/src/main/java/com/metis/service/impl/BaseAppServiceImpl.java index c9263ab..9a2b231 100644 --- a/metis-starter/src/main/java/com/metis/service/impl/BaseAppServiceImpl.java +++ b/metis-starter/src/main/java/com/metis/service/impl/BaseAppServiceImpl.java @@ -25,8 +25,18 @@ import java.util.List; public class BaseAppServiceImpl extends ServiceImpl implements BaseAppService { + @Override - public BaseApp getByAppId(Long appId) { + public BaseApp getDefaultByAppId(Long appId) { + return this.lambdaQuery() + .eq(BaseApp::getAppId, appId) + .eq(BaseApp::getDefaultUse, YesOrNoEnum.YES) + .last("limit 1") + .one(); + } + + @Override + public BaseApp getLastByAppId(Long appId) { return this.lambdaQuery() .eq(BaseApp::getAppId, appId) .orderByDesc(BaseApp::getVersion) @@ -45,10 +55,10 @@ public class BaseAppServiceImpl extends ServiceImpl } @Override - public List listPage(AppQuery query) { + public IPage listPage(AppQuery query) { IPage page = PageConditionUtil.getPage(); LambdaQueryWrapper wrapper = buildQuery(query); - return baseMapper.selectList(page, wrapper); + return baseMapper.selectPage(page, wrapper); } @@ -92,9 +102,10 @@ public class BaseAppServiceImpl extends ServiceImpl LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.select(BaseApp::getId, BaseApp::getAppId, BaseApp::getName, BaseApp::getDescription, BaseApp::getVersion, BaseApp::getIsDeleted, - BaseApp::getCreateTime, BaseApp::getUpdateTime) + BaseApp::getCreateTime, BaseApp::getUpdateTime, BaseApp::getDefaultUse) .like(StrUtil.isNotBlank(query.getName()), BaseApp::getName, query.getName()) - .like(StrUtil.isNotBlank(query.getDescription()), BaseApp::getDescription, query.getDescription()); + .like(StrUtil.isNotBlank(query.getDescription()), BaseApp::getDescription, query.getDescription()) + .orderByDesc(BaseApp::getCreateTime); if (ObjectUtil.isNotNull(query.getAppId())) { wrapper.eq(BaseApp::getAppId, query.getAppId()); } else { diff --git a/pom.xml b/pom.xml index 07afc33..12a1df8 100644 --- a/pom.xml +++ b/pom.xml @@ -96,12 +96,15 @@ springdoc-openapi-starter-webmvc-api 2.2.0 + + io.swagger.core.v3 + swagger-annotations-jakarta + 2.2.15 + - - scm:git:http://git.feashow.cn/clay/metis.git scm:git:http://git.feashow.cn/clay/metis.git http://git.feashow.cn/clay/metis.git