diff --git a/src/main/java/com/bellmann/common/enums/PlanStatusEnum.java b/src/main/java/com/bellmann/common/enums/PlanStatusEnum.java new file mode 100644 index 0000000..07d2091 --- /dev/null +++ b/src/main/java/com/bellmann/common/enums/PlanStatusEnum.java @@ -0,0 +1,9 @@ +package com.bellmann.common.enums; + +public enum PlanStatusEnum { + INIT,//初始状态 + WAITING,//等待执行 + RUNNING,//执行中 + FINISHED,//结束 + ERROR;//异常结束 +} diff --git a/src/main/java/com/bellmann/config/JsonTypeHandlerObject.java b/src/main/java/com/bellmann/config/JsonTypeHandlerObject.java new file mode 100644 index 0000000..658c4c6 --- /dev/null +++ b/src/main/java/com/bellmann/config/JsonTypeHandlerObject.java @@ -0,0 +1,43 @@ +package com.bellmann.config; + +import com.alibaba.fastjson.JSON; +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.MappedTypes; +import org.postgresql.util.PGobject; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + + +@MappedTypes(Object.class) +public class JsonTypeHandlerObject extends BaseTypeHandler { + + private static final PGobject jsonObject = new PGobject(); + + @Override + public void setNonNullParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException { + jsonObject.setType("jsonb"); + jsonObject.setValue(JSON.toJSONString(parameter)); + ps.setObject(i, jsonObject); + } + + @Override + public T getNullableResult(ResultSet resultSet, String columnName) throws SQLException { + return (T) resultSet.getString(columnName); + + } + + @Override + public T getNullableResult(ResultSet resultSet, int columnIndex) throws SQLException { + return (T) resultSet.getString(columnIndex); + + } + + @Override + public T getNullableResult(CallableStatement callableStatement, int columnIndex) throws SQLException { + return (T) callableStatement.getString(columnIndex); + } +} diff --git a/src/main/java/com/bellmann/controller/PlanCollectorController.java b/src/main/java/com/bellmann/controller/PlanCollectorController.java new file mode 100644 index 0000000..90ade1d --- /dev/null +++ b/src/main/java/com/bellmann/controller/PlanCollectorController.java @@ -0,0 +1,48 @@ +package com.bellmann.controller; + + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.bellmann.common.result.PageResult; +import com.bellmann.common.result.Result; +import com.bellmann.model.form.PlanFilterConfigForm; +import com.bellmann.model.query.SelectQuery; +import com.bellmann.model.vo.WorkFlowVO; +import com.bellmann.service.PlanCollectorService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +@Tag(name = "36.工作流管理") +@RestController +@RequestMapping("/api/workflow/v1") +@RequiredArgsConstructor +public class PlanCollectorController { + private final PlanCollectorService planCollectorService; + + + @PostMapping("add") + @Operation(summary = "新增工作流") + public Result addWorkflow(@RequestBody PlanFilterConfigForm form){ + boolean result = planCollectorService.addWorkflow(form); + return Result.judge(result); + } + @PostMapping("page") + @Operation(summary = "工作流分页") + public PageResult workflowPage(@RequestBody SelectQuery query){ + Page result = planCollectorService.workflowPage(query); + return PageResult.success(result); + } + @DeleteMapping("/{planId}") + @Operation(summary = "删除工作流") + public Result removeWorkflow(@PathVariable Long planId){ + boolean result = planCollectorService.removeWorkflow(planId); + return Result.judge(result); + } + @PutMapping("/status/{planId}/{status}") + @Operation(summary = "修改工作流状态") + public Result updateWorkflowStatus(@PathVariable Long planId, @PathVariable Integer status){ + boolean result = planCollectorService.updateWorkflowStatus(planId,status); + return Result.judge(result); + } +} diff --git a/src/main/java/com/bellmann/controller/PlanFilterConfigController.java b/src/main/java/com/bellmann/controller/PlanFilterConfigController.java new file mode 100644 index 0000000..4263ac7 --- /dev/null +++ b/src/main/java/com/bellmann/controller/PlanFilterConfigController.java @@ -0,0 +1,29 @@ +package com.bellmann.controller; + + +import com.bellmann.common.result.Result; +import com.bellmann.model.vo.PlanFilterConfigOption; +import com.bellmann.service.PlanFilterConfigService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@Tag(name = "34.工作流配置") +@RestController +@RequestMapping("/api/plan_filter_config/v1") +@RequiredArgsConstructor +public class PlanFilterConfigController { + private final PlanFilterConfigService planFilterConfigService; + + @GetMapping("option") + @Operation(summary = "工作流动态配置选项") + public Result> configOption(){ + List list = planFilterConfigService.configOption(); + return Result.success(list); + } +} diff --git a/src/main/java/com/bellmann/converter/PlanCollectorConverter.java b/src/main/java/com/bellmann/converter/PlanCollectorConverter.java new file mode 100644 index 0000000..3495e3d --- /dev/null +++ b/src/main/java/com/bellmann/converter/PlanCollectorConverter.java @@ -0,0 +1,14 @@ +package com.bellmann.converter; + +import com.bellmann.model.entity.PlanCollector; +import com.bellmann.model.form.WorkFlowForm; +import org.mapstruct.Mapper; + + +@Mapper(componentModel = "spring") +public interface PlanCollectorConverter { + + + PlanCollector form2Entity(WorkFlowForm workFlowForm); + +} \ No newline at end of file diff --git a/src/main/java/com/bellmann/mapper/PlanCollectorMapper.java b/src/main/java/com/bellmann/mapper/PlanCollectorMapper.java new file mode 100644 index 0000000..ef9151c --- /dev/null +++ b/src/main/java/com/bellmann/mapper/PlanCollectorMapper.java @@ -0,0 +1,13 @@ +package com.bellmann.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.bellmann.model.entity.PlanCollector; +import com.bellmann.model.vo.WorkFlowVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +@Mapper +public interface PlanCollectorMapper extends BaseMapper { + Page workflowPage(Page page, @Param("column") String selectName, @Param("value") Object selectValue); +} diff --git a/src/main/java/com/bellmann/mapper/PlanFilterConfigMapper.java b/src/main/java/com/bellmann/mapper/PlanFilterConfigMapper.java new file mode 100644 index 0000000..36db499 --- /dev/null +++ b/src/main/java/com/bellmann/mapper/PlanFilterConfigMapper.java @@ -0,0 +1,13 @@ +package com.bellmann.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.bellmann.model.entity.PlanFilterConfig; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface PlanFilterConfigMapper extends BaseMapper { + List groupByFilterName(@Param("filterName") String filterName); +} diff --git a/src/main/java/com/bellmann/model/entity/PlanCollector.java b/src/main/java/com/bellmann/model/entity/PlanCollector.java new file mode 100644 index 0000000..f284db7 --- /dev/null +++ b/src/main/java/com/bellmann/model/entity/PlanCollector.java @@ -0,0 +1,37 @@ +package com.bellmann.model.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.bellmann.config.JsonTypeHandlerObject; +import lombok.Data; + +import java.util.Date; + +@Data +@TableName("itms_plan_collector") +public class PlanCollector { + + @TableId(type = IdType.AUTO) + private Long planId; + + private Date startTime; + + private Date endTime; + + private Integer planStatus; + + private Integer maxConcurrency; + + private String planName; + + private String planDesc; + + private String createUser; + + @TableField(value = "plan_filter",typeHandler = JsonTypeHandlerObject.class) + private Object planFilter; + + private Date createTime; +} diff --git a/src/main/java/com/bellmann/model/entity/PlanFilterConfig.java b/src/main/java/com/bellmann/model/entity/PlanFilterConfig.java new file mode 100644 index 0000000..a8d1686 --- /dev/null +++ b/src/main/java/com/bellmann/model/entity/PlanFilterConfig.java @@ -0,0 +1,24 @@ +package com.bellmann.model.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +@Data +@TableName("itms_plan_filter_config") +public class PlanFilterConfig { + + private String displayName; + + private String propertyId; + + private String value; + + private String propertyIdAndValueSql; + + private String filterName; + + @TableId(type = IdType.AUTO) + private Long filterId; +} diff --git a/src/main/java/com/bellmann/model/form/PlanFilterConfigForm.java b/src/main/java/com/bellmann/model/form/PlanFilterConfigForm.java new file mode 100644 index 0000000..ec2a175 --- /dev/null +++ b/src/main/java/com/bellmann/model/form/PlanFilterConfigForm.java @@ -0,0 +1,14 @@ +package com.bellmann.model.form; + +import lombok.Data; +import lombok.ToString; + +import java.util.List; + +@Data +@ToString +public class PlanFilterConfigForm { + private List planFilterForm; + + private WorkFlowForm workFlowForm; +} diff --git a/src/main/java/com/bellmann/model/form/PlanFilterForm.java b/src/main/java/com/bellmann/model/form/PlanFilterForm.java new file mode 100644 index 0000000..d908d80 --- /dev/null +++ b/src/main/java/com/bellmann/model/form/PlanFilterForm.java @@ -0,0 +1,15 @@ +package com.bellmann.model.form; + +import lombok.Data; +import lombok.ToString; + +import java.util.List; + +@Data +@ToString +public class PlanFilterForm { + private String filterName; + + + private List values; +} diff --git a/src/main/java/com/bellmann/model/form/WorkFlowForm.java b/src/main/java/com/bellmann/model/form/WorkFlowForm.java new file mode 100644 index 0000000..51c50b1 --- /dev/null +++ b/src/main/java/com/bellmann/model/form/WorkFlowForm.java @@ -0,0 +1,24 @@ +package com.bellmann.model.form; + +import lombok.Data; +import lombok.ToString; + +import java.util.Date; + +@Data +@ToString +public class WorkFlowForm { + + private Long planId; + + + private Date startTime; + + private Date endTime; + + private Integer maxConcurrency; + + private String planName; + + private String planDesc; +} diff --git a/src/main/java/com/bellmann/model/vo/PlanFilterConfigOption.java b/src/main/java/com/bellmann/model/vo/PlanFilterConfigOption.java new file mode 100644 index 0000000..27cc898 --- /dev/null +++ b/src/main/java/com/bellmann/model/vo/PlanFilterConfigOption.java @@ -0,0 +1,16 @@ +package com.bellmann.model.vo; + +import com.bellmann.common.model.Option; +import lombok.Data; + +import java.util.List; + +@Data +public class PlanFilterConfigOption { + + private String displayName; + + private String filterName; + + private List> options; +} diff --git a/src/main/java/com/bellmann/model/vo/WorkFlowVO.java b/src/main/java/com/bellmann/model/vo/WorkFlowVO.java new file mode 100644 index 0000000..af2e32e --- /dev/null +++ b/src/main/java/com/bellmann/model/vo/WorkFlowVO.java @@ -0,0 +1,23 @@ +package com.bellmann.model.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +@Data +public class WorkFlowVO { + private Long planId; + @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss") + private Date startTime; + @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss") + private Date endTime; + @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss") + private Date createTime; + + private String planName; + + private Integer planStatus; + + private String createUser; +} diff --git a/src/main/java/com/bellmann/service/PlanCollectorService.java b/src/main/java/com/bellmann/service/PlanCollectorService.java new file mode 100644 index 0000000..387ebf9 --- /dev/null +++ b/src/main/java/com/bellmann/service/PlanCollectorService.java @@ -0,0 +1,16 @@ +package com.bellmann.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.bellmann.model.form.PlanFilterConfigForm; +import com.bellmann.model.query.SelectQuery; +import com.bellmann.model.vo.WorkFlowVO; + +public interface PlanCollectorService { + boolean addWorkflow(PlanFilterConfigForm form); + + Page workflowPage(SelectQuery query); + + boolean removeWorkflow(Long planId); + + boolean updateWorkflowStatus(Long planId, Integer status); +} diff --git a/src/main/java/com/bellmann/service/PlanFilterConfigService.java b/src/main/java/com/bellmann/service/PlanFilterConfigService.java new file mode 100644 index 0000000..59b5537 --- /dev/null +++ b/src/main/java/com/bellmann/service/PlanFilterConfigService.java @@ -0,0 +1,11 @@ +package com.bellmann.service; + +import com.bellmann.model.vo.PlanFilterConfigOption; + +import java.util.List; + +public interface PlanFilterConfigService { + List configOption(); + + +} diff --git a/src/main/java/com/bellmann/service/impl/PlanCollectorServiceImpl.java b/src/main/java/com/bellmann/service/impl/PlanCollectorServiceImpl.java new file mode 100644 index 0000000..863cd3a --- /dev/null +++ b/src/main/java/com/bellmann/service/impl/PlanCollectorServiceImpl.java @@ -0,0 +1,67 @@ +package com.bellmann.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.bellmann.common.enums.PlanStatusEnum; +import com.bellmann.converter.PlanCollectorConverter; +import com.bellmann.mapper.PlanCollectorMapper; +import com.bellmann.model.entity.PlanCollector; +import com.bellmann.model.form.PlanFilterConfigForm; +import com.bellmann.model.form.PlanFilterForm; +import com.bellmann.model.form.WorkFlowForm; +import com.bellmann.model.query.SelectQuery; +import com.bellmann.model.vo.WorkFlowVO; +import com.bellmann.security.util.SecurityUtils; +import com.bellmann.service.PlanCollectorService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +@Service +@RequiredArgsConstructor +public class PlanCollectorServiceImpl implements PlanCollectorService { + private final PlanCollectorConverter planCollectorConverter; + + private final PlanCollectorMapper planCollectorMapper; + @Override + public boolean addWorkflow(PlanFilterConfigForm form) { + WorkFlowForm workFlowForm = form.getWorkFlowForm(); + List filterFormList = form.getPlanFilterForm(); + PlanCollector planCollector = planCollectorConverter.form2Entity(workFlowForm); + planCollector.setPlanFilter(filterFormList); + planCollector.setCreateUser(SecurityUtils.getUsername()); + planCollector.setPlanStatus(PlanStatusEnum.INIT.ordinal()); + planCollector.setCreateTime(new Date()); + int rows = planCollectorMapper.insert(planCollector); + return rows>0; + } + + @Override + public Page workflowPage(SelectQuery query) { + int pageNum = query.getPageNum(); + int pageSize = query.getPageSize(); + Page page = new Page<>(pageNum,pageSize); + return planCollectorMapper.workflowPage(page,query.getSelectName(),query.getSelectValue()); + + } + + @Override + public boolean removeWorkflow(Long planId) { + int rows = planCollectorMapper.delete(new LambdaQueryWrapper() + .eq(PlanCollector::getPlanId, planId) + ); + return rows>0; + } + + @Override + public boolean updateWorkflowStatus(Long planId, Integer status) { + int rows = planCollectorMapper.update(null, new LambdaUpdateWrapper() + .eq(PlanCollector::getPlanId, planId) + .set(PlanCollector::getPlanStatus, status) + ); + return rows>0; + } +} diff --git a/src/main/java/com/bellmann/service/impl/PlanFilterConfigServiceImpl.java b/src/main/java/com/bellmann/service/impl/PlanFilterConfigServiceImpl.java new file mode 100644 index 0000000..3d6d3b0 --- /dev/null +++ b/src/main/java/com/bellmann/service/impl/PlanFilterConfigServiceImpl.java @@ -0,0 +1,70 @@ +package com.bellmann.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.bellmann.common.model.Option; +import com.bellmann.mapper.PlanFilterConfigMapper; +import com.bellmann.model.entity.PlanFilterConfig; +import com.bellmann.model.vo.PlanFilterConfigOption; +import com.bellmann.service.PlanFilterConfigService; +import lombok.RequiredArgsConstructor; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +@RequiredArgsConstructor +public class PlanFilterConfigServiceImpl implements PlanFilterConfigService { + private final PlanFilterConfigMapper planFilterConfigMapper; + + private final JdbcTemplate jdbcTemplate; + @Override + public List configOption() { + List list = new ArrayList<>(); + List planFilterConfigs = planFilterConfigMapper.selectList(new LambdaQueryWrapper<>()); + if (planFilterConfigs.isEmpty()){ + return list; + } + for (PlanFilterConfig planFilterConfig:planFilterConfigs){ + if (!planFilterConfig.getPropertyIdAndValueSql().isEmpty()){ + List> maps = jdbcTemplate.queryForList(planFilterConfig.getPropertyIdAndValueSql()); +// List> maps = SqlRunner.db().selectList(planFilterConfig.getPropertyIdAndValueSql()); + List> options = maps.stream().map(obj -> { + String value = obj.get("property_id").toString(); + String label = obj.get("value").toString(); + Option option = new Option<>(); + option.setLabel(label); + option.setValue(value); + return option; + }).collect(Collectors.toList()); + PlanFilterConfigOption planFilterConfigOption = new PlanFilterConfigOption(); + planFilterConfigOption.setDisplayName(planFilterConfig.getDisplayName()); + planFilterConfigOption.setFilterName(planFilterConfig.getFilterName()); + planFilterConfigOption.setOptions(options); + list.add(planFilterConfigOption); + }else { + List filterConfigs = planFilterConfigMapper.groupByFilterName(planFilterConfig.getFilterName()); + for (PlanFilterConfig config:filterConfigs){ + List planFilterConfigList = planFilterConfigMapper.selectList(new LambdaQueryWrapper() + .eq(PlanFilterConfig::getFilterName, config.getFilterName()) + ); + List> options = planFilterConfigList.stream().map(obj -> { + Option option = new Option<>(); + option.setLabel(obj.getPropertyId()); + option.setValue(obj.getValue()); + return option; + }).collect(Collectors.toList()); + PlanFilterConfigOption planFilterConfigOption = new PlanFilterConfigOption(); + planFilterConfigOption.setDisplayName(config.getDisplayName()); + planFilterConfigOption.setFilterName(config.getFilterName()); + planFilterConfigOption.setOptions(options); + list.add(planFilterConfigOption); + } + } + } + return list; + } +} diff --git a/src/main/resources/mapper/PlanCollectorMapper.xml b/src/main/resources/mapper/PlanCollectorMapper.xml new file mode 100644 index 0000000..0b48108 --- /dev/null +++ b/src/main/resources/mapper/PlanCollectorMapper.xml @@ -0,0 +1,24 @@ + + + + + + diff --git a/src/main/resources/mapper/PlanFilterConfigMapper.xml b/src/main/resources/mapper/PlanFilterConfigMapper.xml new file mode 100644 index 0000000..b8e4df6 --- /dev/null +++ b/src/main/resources/mapper/PlanFilterConfigMapper.xml @@ -0,0 +1,10 @@ + + + + + +