!640 发布 5.3.0 新春版 祝大家新年快乐
Merge pull request !640 from 疯狂的狮子Li/dev
| | |
| | | <configuration default="false" name="ruoyi-monitor-admin" type="docker-deploy" factoryName="dockerfile" server-name="Docker"> |
| | | <deployment type="dockerfile"> |
| | | <settings> |
| | | <option name="imageTag" value="ruoyi/ruoyi-monitor-admin:5.3.0-BETA" /> |
| | | <option name="imageTag" value="ruoyi/ruoyi-monitor-admin:5.3.0" /> |
| | | <option name="buildOnly" value="true" /> |
| | | <option name="sourceFilePath" value="ruoyi-extend/ruoyi-monitor-admin/Dockerfile" /> |
| | | </settings> |
| | |
| | | <configuration default="false" name="ruoyi-server" type="docker-deploy" factoryName="dockerfile" server-name="Docker"> |
| | | <deployment type="dockerfile"> |
| | | <settings> |
| | | <option name="imageTag" value="ruoyi/ruoyi-server:5.3.0-BETA" /> |
| | | <option name="imageTag" value="ruoyi/ruoyi-server:5.3.0" /> |
| | | <option name="buildOnly" value="true" /> |
| | | <option name="sourceFilePath" value="ruoyi-admin/Dockerfile" /> |
| | | </settings> |
| | |
| | | <configuration default="false" name="ruoyi-snailjob-server" type="docker-deploy" factoryName="dockerfile" server-name="Docker"> |
| | | <deployment type="dockerfile"> |
| | | <settings> |
| | | <option name="imageTag" value="ruoyi/ruoyi-snailjob-server:5.3.0-BETA" /> |
| | | <option name="imageTag" value="ruoyi/ruoyi-snailjob-server:5.3.0" /> |
| | | <option name="buildOnly" value="true" /> |
| | | <option name="sourceFilePath" value="ruoyi-extend/ruoyi-snailjob-server/Dockerfile" /> |
| | | </settings> |
| | |
| | | [](https://gitee.com/dromara/RuoYi-Vue-Plus/blob/master/LICENSE) |
| | | [](https://www.jetbrains.com/?from=RuoYi-Vue-Plus) |
| | | <br> |
| | | [](https://gitee.com/dromara/RuoYi-Vue-Plus) |
| | | [](https://gitee.com/dromara/RuoYi-Vue-Plus) |
| | | []() |
| | | []() |
| | | []() |
| | |
| | | > ç³»ç»æ¼ç¤º: [ä¼ éé¨](https://plus-doc.dromara.org/#/common/demo_system) |
| | | |
| | | > 宿¹å端项ç®å°å: [plus-ui](https://gitee.com/JavaLionLi/plus-ui)<br> |
| | | > æåå端项ç®å°å: åºäºvben [ruoyi-plus-vben](https://gitee.com/dapppp/ruoyi-plus-vben)<br> |
| | | > æåå端项ç®å°å: åºäºvben5 [ruoyi-plus-vben5](https://gitee.com/dapppp/ruoyi-plus-vben5) |
| | | |
| | | > ææ¡£å°å: [plus-doc](https://plus-doc.dromara.org) |
| | |
| | | <description>Dromara RuoYi-Vue-Pluså¤ç§æ·ç®¡çç³»ç»</description> |
| | | |
| | | <properties> |
| | | <revision>5.3.0-BETA</revision> |
| | | <revision>5.3.0</revision> |
| | | <spring-boot.version>3.4.1</spring-boot.version> |
| | | <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |
| | | <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> |
| | |
| | | <redisson.version>3.43.0</redisson.version> |
| | | <lock4j.version>2.2.7</lock4j.version> |
| | | <dynamic-ds.version>4.3.1</dynamic-ds.version> |
| | | <snailjob.version>1.3.0-beta1.1</snailjob.version> |
| | | <snailjob.version>1.3.0</snailjob.version> |
| | | <mapstruct-plus.version>1.4.6</mapstruct-plus.version> |
| | | <mapstruct-plus.lombok.version>0.2.0</mapstruct-plus.lombok.version> |
| | | <lombok.version>1.18.36</lombok.version> |
| | |
| | | <!-- é¢åè¿è¡æ¶çD-ORMä¾èµ --> |
| | | <anyline.version>8.7.2-20250101</anyline.version> |
| | | <!--工使µé
ç½®--> |
| | | <warm-flow.version>1.6.0-m5</warm-flow.version> |
| | | <warm-flow.version>1.6.6</warm-flow.version> |
| | | |
| | | <!-- æä»¶çæ¬ --> |
| | | <maven-jar-plugin.version>3.2.2</maven-jar-plugin.version> |
| | |
| | | </description> |
| | | |
| | | <properties> |
| | | <revision>5.3.0-BETA</revision> |
| | | <revision>5.3.0</revision> |
| | | </properties> |
| | | |
| | | <dependencyManagement> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.common.core.domain.dto; |
| | | |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serial; |
| | | import java.io.Serializable; |
| | | |
| | | /** |
| | | * å¯å¨æµç¨è¿å对象 |
| | | * |
| | | * @author Lion Li |
| | | */ |
| | | @Data |
| | | public class StartProcessReturnDTO implements Serializable { |
| | | |
| | | @Serial |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * æµç¨å®ä¾id |
| | | */ |
| | | private Long processInstanceId; |
| | | |
| | | /** |
| | | * ä»»å¡id |
| | | */ |
| | | private Long taskId; |
| | | |
| | | } |
| | |
| | | |
| | | import java.io.Serial; |
| | | import java.io.Serializable; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * æ»ä½æµç¨çå¬ |
| | |
| | | private String status; |
| | | |
| | | /** |
| | | * åçåæ° |
| | | */ |
| | | private Map<String, Object> params; |
| | | |
| | | /** |
| | | * å½ä¸ºtrueæ¶ä¸ºç³è¯·äººèç¹åç |
| | | */ |
| | | private boolean submit; |
| | |
| | | |
| | | import org.dromara.common.core.domain.dto.CompleteTaskDTO; |
| | | import org.dromara.common.core.domain.dto.StartProcessDTO; |
| | | import org.dromara.common.core.domain.dto.StartProcessReturnDTO; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | |
| | | void setVariable(Long instanceId, Map<String, Object> variable); |
| | | |
| | | /** |
| | | * è·åæµç¨åé |
| | | * |
| | | * @param instanceId æµç¨å®ä¾id |
| | | */ |
| | | Map<String, Object> instanceVariable(Long instanceId); |
| | | |
| | | /** |
| | | * æç
§ä¸å¡idæ¥è¯¢æµç¨å®ä¾id |
| | | * |
| | | * @param businessId ä¸å¡id |
| | |
| | | * @param startProcess åæ° |
| | | * @return ç»æ |
| | | */ |
| | | Map<String, Object> startWorkFlow(StartProcessDTO startProcess); |
| | | StartProcessReturnDTO startWorkFlow(StartProcessDTO startProcess); |
| | | |
| | | /** |
| | | * åçä»»å¡ |
| | |
| | | * @param categoryBo æµç¨åç±» |
| | | */ |
| | | @GetMapping("/categoryTree") |
| | | public R<List<Tree<Long>>> categoryTree(FlowCategoryBo categoryBo) { |
| | | public R<List<Tree<String>>> categoryTree(FlowCategoryBo categoryBo) { |
| | | return R.ok(flwCategoryService.selectCategoryTreeList(categoryBo)); |
| | | } |
| | | |
| | |
| | | * @param instanceId æµç¨å®ä¾id |
| | | */ |
| | | @GetMapping("/instanceVariable/{instanceId}") |
| | | public R<Map<String, Object>> instanceVariable(@PathVariable String instanceId) { |
| | | public R<Map<String, Object>> instanceVariable(@PathVariable Long instanceId) { |
| | | return R.ok(flwInstanceService.instanceVariable(instanceId)); |
| | | } |
| | | |
| | |
| | | |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.dromara.common.core.domain.R; |
| | | import org.dromara.common.core.domain.dto.StartProcessReturnDTO; |
| | | import org.dromara.common.core.domain.dto.UserDTO; |
| | | import org.dromara.common.core.validate.AddGroup; |
| | | import org.dromara.common.idempotent.annotation.RepeatSubmit; |
| | |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * ä»»å¡ç®¡ç æ§å¶å± |
| | |
| | | @Log(title = "ä»»å¡ç®¡ç", businessType = BusinessType.INSERT) |
| | | @RepeatSubmit() |
| | | @PostMapping("/startWorkFlow") |
| | | public R<Map<String, Object>> startWorkFlow(@Validated(AddGroup.class) @RequestBody StartProcessBo startProcessBo) { |
| | | Map<String, Object> map = flwTaskService.startWorkFlow(startProcessBo); |
| | | return R.ok("æäº¤æå", map); |
| | | public R<StartProcessReturnDTO> startWorkFlow(@Validated(AddGroup.class) @RequestBody StartProcessBo startProcessBo) { |
| | | StartProcessReturnDTO startProcessReturn = flwTaskService.startWorkFlow(startProcessBo); |
| | | return R.ok("æäº¤æå", startProcessReturn); |
| | | } |
| | | |
| | | /** |
| | |
| | | private Long taskId; |
| | | |
| | | /** |
| | | * éä»¶id |
| | | */ |
| | | private String fileId; |
| | | |
| | | /** |
| | | * æ¶æ¯ç±»å |
| | | */ |
| | | private List<String> messageType; |
| | |
| | | import com.alibaba.excel.annotation.ExcelProperty; |
| | | import io.github.linpeilie.annotations.AutoMapper; |
| | | import lombok.Data; |
| | | import org.dromara.common.excel.annotation.ExcelDictFormat; |
| | | import org.dromara.common.excel.convert.ExcelDictConvert; |
| | | import org.dromara.workflow.domain.FlowCategory; |
| | | |
| | | import java.io.Serial; |
| | |
| | | import org.dromara.workflow.common.ConditionalOnEnable; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * æµç¨çå¬æå¡ |
| | | * |
| | |
| | | * @param status ç¶æ |
| | | * @param submit å½ä¸ºtrueæ¶ä¸ºç³è¯·äººèç¹åç |
| | | */ |
| | | public void processHandler(String flowCode, String businessId, String status, boolean submit) { |
| | | public void processHandler(String flowCode, String businessId, String status, Map<String, Object> params, boolean submit) { |
| | | String tenantId = TenantHelper.getTenantId(); |
| | | log.info("å叿µç¨äºä»¶ï¼ç§æ·ID: {}, æµç¨ç¶æ: {}, æµç¨ç¼ç : {}, ä¸å¡ID: {}, æ¯å¦ç³è¯·äººèç¹åç: {}", tenantId, status, flowCode, businessId, submit); |
| | | ProcessEvent processEvent = new ProcessEvent(); |
| | |
| | | processEvent.setFlowCode(flowCode); |
| | | processEvent.setBusinessId(businessId); |
| | | processEvent.setStatus(status); |
| | | processEvent.setParams(params); |
| | | processEvent.setSubmit(submit); |
| | | SpringUtils.context().publishEvent(processEvent); |
| | | } |
| | |
| | | import org.dromara.workflow.service.IFlwTaskService; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * å
¨å±ä»»å¡åççå¬ |
| | |
| | | Definition definition = listenerVariable.getDefinition(); |
| | | String businessId = instance.getBusinessId(); |
| | | String flowStatus = instance.getFlowStatus(); |
| | | Map<String, Object> params = new HashMap<>(); |
| | | // åå²ä»»å¡æ©å±(é常为éä»¶) |
| | | params.put("hisTaskExt", listenerVariable.getFlowParams().getHisTaskExt()); |
| | | // åç人 |
| | | params.put("handler", listenerVariable.getFlowParams().getHandler()); |
| | | // åçæè§ |
| | | params.put("message", listenerVariable.getFlowParams().getMessage()); |
| | | // 夿æµç¨ç¶æï¼åå¸ï¼æ¤éï¼éåï¼ä½åºï¼ç»æ¢ï¼å·²å®æäºä»¶ï¼ |
| | | String status = determineFlowStatus(instance, flowStatus); |
| | | if (StringUtils.isNotBlank(status)) { |
| | | flowProcessEventHandler.processHandler(definition.getFlowCode(), businessId, status, false); |
| | | flowProcessEventHandler.processHandler(definition.getFlowCode(), businessId, status, params, false); |
| | | } |
| | | } |
| | | |
| | |
| | | * @param categoryId æµç¨åç±»ID |
| | | * @return æµç¨åç±»åç§° |
| | | */ |
| | | String selectCategoryNameById(String categoryId); |
| | | String selectCategoryNameById(Long categoryId); |
| | | |
| | | /** |
| | | * æ¥è¯¢ç¬¦åæ¡ä»¶çæµç¨åç±»å表 |
| | |
| | | * @param category æµç¨åç±»ä¿¡æ¯ |
| | | * @return æµç¨åç±»æ ä¿¡æ¯éå |
| | | */ |
| | | List<Tree<Long>> selectCategoryTreeList(FlowCategoryBo category); |
| | | List<Tree<String>> selectCategoryTreeList(FlowCategoryBo category); |
| | | |
| | | /** |
| | | * æ ¡éªæµç¨åç±»æ¯å¦ææ°æ®æé |
| | |
| | | * @param instanceId å®ä¾id |
| | | * @return ç»æ |
| | | */ |
| | | Map<String, Object> instanceVariable(String instanceId); |
| | | Map<String, Object> instanceVariable(Long instanceId); |
| | | |
| | | /** |
| | | * 设置æµç¨åé |
| | |
| | | package org.dromara.workflow.service; |
| | | |
| | | import org.dromara.common.core.domain.dto.StartProcessReturnDTO; |
| | | import org.dromara.common.core.domain.dto.UserDTO; |
| | | import org.dromara.common.mybatis.core.page.PageQuery; |
| | | import org.dromara.common.mybatis.core.page.TableDataInfo; |
| | |
| | | * @param startProcessBo å¯å¨æµç¨åæ° |
| | | * @return ç»æ |
| | | */ |
| | | Map<String, Object> startWorkFlow(StartProcessBo startProcessBo); |
| | | StartProcessReturnDTO startWorkFlow(StartProcessBo startProcessBo); |
| | | |
| | | /** |
| | | * åçä»»å¡ |
| | |
| | | package org.dromara.workflow.service.impl; |
| | | |
| | | import cn.hutool.core.convert.Convert; |
| | | import lombok.RequiredArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.dromara.common.translation.annotation.TranslationType; |
| | |
| | | |
| | | @Override |
| | | public String translation(Object key, String other) { |
| | | Long id = null; |
| | | if (key instanceof String categoryId) { |
| | | return flwCategoryService.selectCategoryNameById(categoryId); |
| | | id = Convert.toLong(categoryId); |
| | | } else if (key instanceof Long categoryId) { |
| | | id = categoryId; |
| | | } |
| | | return null; |
| | | return flwCategoryService.selectCategoryNameById(id); |
| | | } |
| | | } |
| | |
| | | */ |
| | | @Cacheable(cacheNames = FlowConstant.FLOW_CATEGORY_NAME, key = "#categoryId") |
| | | @Override |
| | | public String selectCategoryNameById(String categoryId) { |
| | | if (StringUtils.isBlank(categoryId)) { |
| | | public String selectCategoryNameById(Long categoryId) { |
| | | if (ObjectUtil.isNull(categoryId)) { |
| | | return null; |
| | | } |
| | | FlowCategory category = baseMapper.selectOne(new LambdaQueryWrapper<FlowCategory>() |
| | |
| | | * @return æµç¨åç±»æ ä¿¡æ¯éå |
| | | */ |
| | | @Override |
| | | public List<Tree<Long>> selectCategoryTreeList(FlowCategoryBo category) { |
| | | public List<Tree<String>> selectCategoryTreeList(FlowCategoryBo category) { |
| | | LambdaQueryWrapper<FlowCategory> lqw = buildQueryWrapper(category); |
| | | List<FlowCategoryVo> categorys = baseMapper.selectVoList(lqw); |
| | | if (CollUtil.isEmpty(categorys)) { |
| | | return CollUtil.newArrayList(); |
| | | } |
| | | // è·åå½ååè¡¨ä¸æ¯ä¸ä¸ªèç¹çparentIdï¼ç¶åå¨åè¡¨ä¸æ¥æ¾æ¯å¦æidä¸å
¶parentId对åºï¼è¥æ 对åºï¼åè¡¨ææ¤æ¶èç¹å表ä¸ï¼è¯¥èç¹å¨å½åå表ä¸å±äºé¡¶çº§èç¹ |
| | | List<Tree<Long>> treeList = CollUtil.newArrayList(); |
| | | List<Tree<String>> treeList = CollUtil.newArrayList(); |
| | | for (FlowCategoryVo d : categorys) { |
| | | Long parentId = d.getParentId(); |
| | | FlowCategoryVo categoryVo = StreamUtils.findFirst(categorys, it -> it.getCategoryId().longValue() == parentId); |
| | | String parentId = d.getParentId().toString(); |
| | | FlowCategoryVo categoryVo = StreamUtils.findFirst(categorys, it -> it.getCategoryId().toString().equals(parentId)); |
| | | if (ObjectUtil.isNull(categoryVo)) { |
| | | List<Tree<Long>> trees = TreeBuildUtils.build(categorys, parentId, (dept, tree) -> |
| | | tree.setId(dept.getCategoryId()) |
| | | .setParentId(dept.getParentId()) |
| | | List<Tree<String>> trees = TreeBuildUtils.build(categorys, parentId, (dept, tree) -> |
| | | tree.setId(dept.getCategoryId().toString()) |
| | | .setParentId(dept.getParentId().toString()) |
| | | .setName(dept.getCategoryName()) |
| | | .setWeight(dept.getOrderNum())); |
| | | Tree<Long> tree = StreamUtils.findFirst(trees, it -> it.getId().longValue() == d.getCategoryId()); |
| | | Tree<String> tree = StreamUtils.findFirst(trees, it -> it.getId().equals(d.getCategoryId().toString())); |
| | | treeList.add(tree); |
| | | } |
| | | } |
| | |
| | | wrapper.like(StringUtils.isNotBlank(flowDefinition.getFlowName()), FlowDefinition::getFlowName, flowDefinition.getFlowName()); |
| | | if (StringUtils.isNotBlank(flowDefinition.getCategory())) { |
| | | List<Long> categoryIds = flwCategoryMapper.selectCategoryIdsByParentId(Convert.toLong(flowDefinition.getCategory())); |
| | | wrapper.in(FlowDefinition::getCategory, categoryIds); |
| | | wrapper.in(FlowDefinition::getCategory, StreamUtils.toList(categoryIds, Convert::toStr)); |
| | | } |
| | | wrapper.orderByDesc(FlowDefinition::getCreateTime); |
| | | return wrapper; |
| | |
| | | queryWrapper.like(StringUtils.isNotBlank(flowInstanceBo.getFlowCode()), "fd.flow_code", flowInstanceBo.getFlowCode()); |
| | | if (StringUtils.isNotBlank(flowInstanceBo.getCategory())) { |
| | | List<Long> categoryIds = flwCategoryMapper.selectCategoryIdsByParentId(Convert.toLong(flowInstanceBo.getCategory())); |
| | | queryWrapper.in("fd.category", categoryIds); |
| | | queryWrapper.in("fd.category", StreamUtils.toList(categoryIds, Convert::toStr)); |
| | | } |
| | | queryWrapper.eq(StringUtils.isNotBlank(flowInstanceBo.getBusinessId()), "fi.business_id", flowInstanceBo.getBusinessId()); |
| | | queryWrapper.in(CollUtil.isNotEmpty(flowInstanceBo.getCreateByIds()), "fi.create_by", flowInstanceBo.getCreateByIds()); |
| | |
| | | * @param instanceId å®ä¾id |
| | | */ |
| | | @Override |
| | | public Map<String, Object> instanceVariable(String instanceId) { |
| | | public Map<String, Object> instanceVariable(Long instanceId) { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | FlowInstance flowInstance = flowInstanceMapper.selectById(instanceId); |
| | | Map<String, Object> variableMap = flowInstance.getVariableMap(); |
| | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import lombok.RequiredArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.dromara.common.core.domain.dto.StartProcessReturnDTO; |
| | | import org.dromara.common.core.domain.dto.UserDTO; |
| | | import org.dromara.common.core.enums.BusinessStatusEnum; |
| | | import org.dromara.common.core.exception.ServiceException; |
| | |
| | | */ |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Map<String, Object> startWorkFlow(StartProcessBo startProcessBo) { |
| | | public StartProcessReturnDTO startWorkFlow(StartProcessBo startProcessBo) { |
| | | String businessId = startProcessBo.getBusinessId(); |
| | | if (StringUtils.isBlank(businessId)) { |
| | | throw new ServiceException("å¯å¨å·¥ä½æµæ¶å¿
é¡»å
å«ä¸å¡ID"); |
| | |
| | | if (ObjectUtil.isNotNull(flowInstance)) { |
| | | BusinessStatusEnum.checkStartStatus(flowInstance.getFlowStatus()); |
| | | List<Task> taskList = taskService.list(new FlowTask().setInstanceId(flowInstance.getId())); |
| | | return Map.of(PROCESS_INSTANCE_ID, taskList.get(0).getInstanceId(), TASK_ID, taskList.get(0).getId()); |
| | | StartProcessReturnDTO dto = new StartProcessReturnDTO(); |
| | | dto.setProcessInstanceId(taskList.get(0).getInstanceId()); |
| | | dto.setTaskId(taskList.get(0).getId()); |
| | | return dto; |
| | | } |
| | | FlowParams flowParams = new FlowParams(); |
| | | flowParams.flowCode(startProcessBo.getFlowCode()); |
| | |
| | | if (taskList.size() > 1) { |
| | | throw new ServiceException("è¯·æ£æ¥æµç¨ç¬¬ä¸ä¸ªç¯èæ¯å¦ä¸ºç³è¯·äººï¼"); |
| | | } |
| | | return Map.of(PROCESS_INSTANCE_ID, instance.getId(), TASK_ID, taskList.get(0).getId()); |
| | | StartProcessReturnDTO dto = new StartProcessReturnDTO(); |
| | | dto.setProcessInstanceId(instance.getId()); |
| | | dto.setTaskId(taskList.get(0).getId()); |
| | | return dto; |
| | | } |
| | | |
| | | /** |
| | |
| | | Definition definition = defService.getById(flowTask.getDefinitionId()); |
| | | // æ£æ¥æµç¨ç¶ææ¯å¦ä¸ºè稿ãå·²æ¤éæå·²éåç¶æï¼è¥æ¯åæ§è¡æµç¨æäº¤çå¬ |
| | | if (BusinessStatusEnum.isDraftOrCancelOrBack(ins.getFlowStatus())) { |
| | | flowProcessEventHandler.processHandler(definition.getFlowCode(), ins.getBusinessId(), ins.getFlowStatus(), true); |
| | | flowProcessEventHandler.processHandler(definition.getFlowCode(), ins.getBusinessId(), ins.getFlowStatus(), null, true); |
| | | } |
| | | // æå»ºæµç¨åæ°ï¼å
æ¬åéã跳转类åãæ¶æ¯ãå¤ç人ãæéçä¿¡æ¯ |
| | | FlowParams flowParams = new FlowParams(); |
| | |
| | | wrapper.in(CollUtil.isNotEmpty(flowTaskBo.getCreateByIds()), "t.create_by", flowTaskBo.getCreateByIds()); |
| | | if (StringUtils.isNotBlank(flowTaskBo.getCategory())) { |
| | | List<Long> categoryIds = flwCategoryMapper.selectCategoryIdsByParentId(Convert.toLong(flowTaskBo.getCategory())); |
| | | wrapper.in("t.category", categoryIds); |
| | | wrapper.in("t.category", StreamUtils.toList(categoryIds, Convert::toStr)); |
| | | } |
| | | wrapper.orderByDesc("t.create_time"); |
| | | return wrapper; |
| | |
| | | flowParams.skipType(SkipType.REJECT.getKey()); |
| | | flowParams.flowStatus(applyNodeCode.equals(bo.getNodeCode()) ? TaskStatusEnum.BACK.getStatus() : TaskStatusEnum.WAITING.getStatus()) |
| | | .hisStatus(TaskStatusEnum.BACK.getStatus()); |
| | | flowParams.hisTaskExt(bo.getFileId()); |
| | | taskService.skip(task.getId(), flowParams); |
| | | |
| | | Instance instance = insService.getById(inst.getId()); |
| | |
| | | package org.dromara.workflow.service.impl; |
| | | |
| | | import cn.hutool.core.convert.Convert; |
| | | import cn.hutool.core.date.DateUtil; |
| | | import cn.hutool.core.map.MapUtil; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * 请åServiceä¸å¡å±å¤ç |
| | |
| | | log.info("å½å任塿§è¡äº{}", processEvent.toString()); |
| | | TestLeave testLeave = baseMapper.selectById(Long.valueOf(processEvent.getBusinessId())); |
| | | testLeave.setStatus(processEvent.getStatus()); |
| | | // ç¨äºä¾å¦å®¡æ¹éä»¶ å®¡æ¹æè§ç åå¨å°ä¸å¡è¡¨å
èªè¡æ ¹æ®ä¸å¡å®ç°å卿µç¨ |
| | | Map<String, Object> params = processEvent.getParams(); |
| | | if (MapUtil.isNotEmpty(params)) { |
| | | // åå²ä»»å¡æ©å±(é常为éä»¶) |
| | | String hisTaskExt = Convert.toStr(params.get("hisTaskExt")); |
| | | // åç人 |
| | | String handler = Convert.toStr(params.get("handler")); |
| | | // åçæè§ |
| | | String message = Convert.toStr(params.get("message")); |
| | | } |
| | | if (processEvent.isSubmit()) { |
| | | testLeave.setStatus(BusinessStatusEnum.WAITING.getStatus()); |
| | | } |
| | |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.dromara.common.core.domain.dto.CompleteTaskDTO; |
| | | import org.dromara.common.core.domain.dto.StartProcessDTO; |
| | | import org.dromara.common.core.domain.dto.StartProcessReturnDTO; |
| | | import org.dromara.common.core.service.WorkflowService; |
| | | import org.dromara.common.core.utils.StringUtils; |
| | | import org.dromara.warm.flow.orm.entity.FlowInstance; |
| | |
| | | } |
| | | |
| | | /** |
| | | * è·åæµç¨åé |
| | | * |
| | | * @param instanceId æµç¨å®ä¾id |
| | | */ |
| | | @Override |
| | | public Map<String, Object> instanceVariable(Long instanceId) { |
| | | return flwInstanceService.instanceVariable(instanceId); |
| | | } |
| | | |
| | | /** |
| | | * æç
§ä¸å¡idæ¥è¯¢æµç¨å®ä¾id |
| | | * |
| | | * @param businessId ä¸å¡id |
| | |
| | | * @param startProcess åæ° |
| | | */ |
| | | @Override |
| | | public Map<String, Object> startWorkFlow(StartProcessDTO startProcess) { |
| | | public StartProcessReturnDTO startWorkFlow(StartProcessDTO startProcess) { |
| | | return flwTaskService.startWorkFlow(BeanUtil.toBean(startProcess, StartProcessBo.class)); |
| | | } |
| | | |
| | |
| | | network_mode: "host" |
| | | |
| | | ruoyi-server1: |
| | | image: ruoyi/ruoyi-server:5.3.0-BETA |
| | | image: ruoyi/ruoyi-server:5.3.0 |
| | | container_name: ruoyi-server1 |
| | | environment: |
| | | # æ¶åºä¸æµ· |
| | |
| | | network_mode: "host" |
| | | |
| | | ruoyi-server2: |
| | | image: ruoyi/ruoyi-server:5.3.0-BETA |
| | | image: ruoyi/ruoyi-server:5.3.0 |
| | | container_name: ruoyi-server2 |
| | | environment: |
| | | # æ¶åºä¸æµ· |
| | |
| | | network_mode: "host" |
| | | |
| | | ruoyi-monitor-admin: |
| | | image: ruoyi/ruoyi-monitor-admin:5.3.0-BETA |
| | | image: ruoyi/ruoyi-monitor-admin:5.3.0 |
| | | container_name: ruoyi-monitor-admin |
| | | environment: |
| | | # æ¶åºä¸æµ· |
| | |
| | | network_mode: "host" |
| | | |
| | | ruoyi-snailjob-server: |
| | | image: ruoyi/ruoyi-snailjob-server:5.3.0-BETA |
| | | image: ruoyi/ruoyi-snailjob-server:5.3.0 |
| | | container_name: ruoyi-snailjob-server |
| | | environment: |
| | | # æ¶åºä¸æµ· |
| | |
| | | insert into sys_role_menu values ('3', '106'); |
| | | insert into sys_role_menu values ('3', '107'); |
| | | insert into sys_role_menu values ('3', '108'); |
| | | insert into sys_role_menu values ('3', '118'); |
| | | insert into sys_role_menu values ('3', '123'); |
| | | insert into sys_role_menu values ('3', '500'); |
| | | insert into sys_role_menu values ('3', '501'); |
| | | insert into sys_role_menu values ('3', '1001'); |
| | |
| | | insert into sys_role_menu values ('3', '1043'); |
| | | insert into sys_role_menu values ('3', '1044'); |
| | | insert into sys_role_menu values ('3', '1045'); |
| | | insert into sys_role_menu values ('3', '1050'); |
| | | insert into sys_role_menu values ('3', '1061'); |
| | | insert into sys_role_menu values ('3', '1062'); |
| | | insert into sys_role_menu values ('3', '1063'); |
| | | insert into sys_role_menu values ('3', '1064'); |
| | | insert into sys_role_menu values ('3', '1065'); |
| | | insert into sys_role_menu values ('3', '1500'); |
| | | insert into sys_role_menu values ('3', '1501'); |
| | | insert into sys_role_menu values ('3', '1502'); |
| | |
| | | insert into sys_role_menu values ('3', '1509'); |
| | | insert into sys_role_menu values ('3', '1510'); |
| | | insert into sys_role_menu values ('3', '1511'); |
| | | insert into sys_role_menu values ('3', '1600'); |
| | | insert into sys_role_menu values ('3', '1601'); |
| | | insert into sys_role_menu values ('3', '1602'); |
| | | insert into sys_role_menu values ('3', '1603'); |
| | | insert into sys_role_menu values ('3', '1620'); |
| | | insert into sys_role_menu values ('3', '1621'); |
| | | insert into sys_role_menu values ('3', '1622'); |
| | | insert into sys_role_menu values ('3', '1623'); |
| | | insert into sys_role_menu values ('3', '11618'); |
| | | insert into sys_role_menu values ('3', '11619'); |
| | | insert into sys_role_menu values ('3', '11629'); |
| | | insert into sys_role_menu values ('3', '11632'); |
| | | insert into sys_role_menu values ('3', '11633'); |
| | | insert into sys_role_menu values ('3', '11638'); |
| | | insert into sys_role_menu values ('3', '11639'); |
| | | insert into sys_role_menu values ('3', '11640'); |
| | | insert into sys_role_menu values ('3', '11641'); |
| | | insert into sys_role_menu values ('3', '11642'); |
| | | insert into sys_role_menu values ('3', '11643'); |
| | | insert into sys_role_menu values ('4', '5'); |
| | | insert into sys_role_menu values ('4', '1500'); |
| | | insert into sys_role_menu values ('4', '1501'); |
| | |
| | | insert into sys_role_menu values ('3', '106'); |
| | | insert into sys_role_menu values ('3', '107'); |
| | | insert into sys_role_menu values ('3', '108'); |
| | | insert into sys_role_menu values ('3', '118'); |
| | | insert into sys_role_menu values ('3', '123'); |
| | | insert into sys_role_menu values ('3', '500'); |
| | | insert into sys_role_menu values ('3', '501'); |
| | | insert into sys_role_menu values ('3', '1001'); |
| | |
| | | insert into sys_role_menu values ('3', '1043'); |
| | | insert into sys_role_menu values ('3', '1044'); |
| | | insert into sys_role_menu values ('3', '1045'); |
| | | insert into sys_role_menu values ('3', '1050'); |
| | | insert into sys_role_menu values ('3', '1061'); |
| | | insert into sys_role_menu values ('3', '1062'); |
| | | insert into sys_role_menu values ('3', '1063'); |
| | | insert into sys_role_menu values ('3', '1064'); |
| | | insert into sys_role_menu values ('3', '1065'); |
| | | insert into sys_role_menu values ('3', '1500'); |
| | | insert into sys_role_menu values ('3', '1501'); |
| | | insert into sys_role_menu values ('3', '1502'); |
| | |
| | | insert into sys_role_menu values ('3', '1509'); |
| | | insert into sys_role_menu values ('3', '1510'); |
| | | insert into sys_role_menu values ('3', '1511'); |
| | | insert into sys_role_menu values ('3', '1600'); |
| | | insert into sys_role_menu values ('3', '1601'); |
| | | insert into sys_role_menu values ('3', '1602'); |
| | | insert into sys_role_menu values ('3', '1603'); |
| | | insert into sys_role_menu values ('3', '1620'); |
| | | insert into sys_role_menu values ('3', '1621'); |
| | | insert into sys_role_menu values ('3', '1622'); |
| | | insert into sys_role_menu values ('3', '1623'); |
| | | insert into sys_role_menu values ('3', '11618'); |
| | | insert into sys_role_menu values ('3', '11619'); |
| | | insert into sys_role_menu values ('3', '11629'); |
| | | insert into sys_role_menu values ('3', '11632'); |
| | | insert into sys_role_menu values ('3', '11633'); |
| | | insert into sys_role_menu values ('3', '11638'); |
| | | insert into sys_role_menu values ('3', '11639'); |
| | | insert into sys_role_menu values ('3', '11640'); |
| | | insert into sys_role_menu values ('3', '11641'); |
| | | insert into sys_role_menu values ('3', '11642'); |
| | | insert into sys_role_menu values ('3', '11643'); |
| | | insert into sys_role_menu values ('4', '5'); |
| | | insert into sys_role_menu values ('4', '1500'); |
| | | insert into sys_role_menu values ('4', '1501'); |
| | |
| | | variable text NULL, -- ä»»å¡åé |
| | | flow_status varchar(20) NOT NULL, -- æµç¨ç¶æï¼0å¾
æäº¤ 1审æ¹ä¸ 2 审æ¹éè¿ 8已宿 9å·²éå 10失æï¼ |
| | | activity_status int2 NOT NULL DEFAULT 1, -- æµç¨æ¿æ´»ç¶æï¼0æèµ· 1æ¿æ´»ï¼ |
| | | def_json text NULL, -- æµç¨å®ä¹json |
| | | create_by varchar(64) NULL DEFAULT '':: character varying, -- å建è
|
| | | create_time timestamp NULL, -- å建æ¶é´ |
| | | update_time timestamp NULL, -- æ´æ°æ¶é´ |
| | |
| | | COMMENT ON COLUMN flow_instance.variable IS 'ä»»å¡åé'; |
| | | COMMENT ON COLUMN flow_instance.flow_status IS 'æµç¨ç¶æï¼0å¾
æäº¤ 1审æ¹ä¸ 2 审æ¹éè¿ 3èªå¨éè¿ 4ç»æ¢ 5ä½åº 6æ¤é 7åå 8已宿 9å·²éå 10失æï¼'; |
| | | COMMENT ON COLUMN flow_instance.activity_status IS 'æµç¨æ¿æ´»ç¶æï¼0æèµ· 1æ¿æ´»ï¼'; |
| | | COMMENT ON COLUMN flow_instance.def_json IS 'æµç¨å®ä¹json'; |
| | | COMMENT ON COLUMN flow_instance.create_by IS 'å建è
'; |
| | | COMMENT ON COLUMN flow_instance.create_time IS 'å建æ¶é´'; |
| | | COMMENT ON COLUMN flow_instance.update_time IS 'æ´æ°æ¶é´'; |
| | |
| | | definition_id int8 NOT NULL, -- 对åºflow_definition表çid |
| | | instance_id int8 NOT NULL, -- 对åºflow_instance表çid |
| | | task_id int8 NOT NULL, -- 对åºflow_task表çid |
| | | node_code varchar(100) NULL, -- å¼å§èç¹ç¼ç |
| | | node_name varchar(100) NULL, -- å¼å§èç¹åç§° |
| | | node_code varchar(200) NULL, -- å¼å§èç¹ç¼ç |
| | | node_name varchar(200) NULL, -- å¼å§èç¹åç§° |
| | | node_type int2 NULL, -- å¼å§èç¹ç±»åï¼0å¼å§èç¹ 1ä¸é´èç¹ 2ç»æèç¹ 3äºæ¥ç½å
³ 4å¹¶è¡ç½å
³ï¼ |
| | | target_node_code varchar(200) NULL, -- ç®æ èç¹ç¼ç |
| | | target_node_name varchar(200) NULL, -- ç»æèç¹åç§° |
| | |
| | | insert into sys_role_menu values ('3', '106'); |
| | | insert into sys_role_menu values ('3', '107'); |
| | | insert into sys_role_menu values ('3', '108'); |
| | | insert into sys_role_menu values ('3', '118'); |
| | | insert into sys_role_menu values ('3', '123'); |
| | | insert into sys_role_menu values ('3', '500'); |
| | | insert into sys_role_menu values ('3', '501'); |
| | | insert into sys_role_menu values ('3', '1001'); |
| | |
| | | insert into sys_role_menu values ('3', '1043'); |
| | | insert into sys_role_menu values ('3', '1044'); |
| | | insert into sys_role_menu values ('3', '1045'); |
| | | insert into sys_role_menu values ('3', '1050'); |
| | | insert into sys_role_menu values ('3', '1061'); |
| | | insert into sys_role_menu values ('3', '1062'); |
| | | insert into sys_role_menu values ('3', '1063'); |
| | | insert into sys_role_menu values ('3', '1064'); |
| | | insert into sys_role_menu values ('3', '1065'); |
| | | insert into sys_role_menu values ('3', '1500'); |
| | | insert into sys_role_menu values ('3', '1501'); |
| | | insert into sys_role_menu values ('3', '1502'); |
| | |
| | | insert into sys_role_menu values ('3', '1509'); |
| | | insert into sys_role_menu values ('3', '1510'); |
| | | insert into sys_role_menu values ('3', '1511'); |
| | | insert into sys_role_menu values ('3', '1600'); |
| | | insert into sys_role_menu values ('3', '1601'); |
| | | insert into sys_role_menu values ('3', '1602'); |
| | | insert into sys_role_menu values ('3', '1603'); |
| | | insert into sys_role_menu values ('3', '1620'); |
| | | insert into sys_role_menu values ('3', '1621'); |
| | | insert into sys_role_menu values ('3', '1622'); |
| | | insert into sys_role_menu values ('3', '1623'); |
| | | insert into sys_role_menu values ('3', '11618'); |
| | | insert into sys_role_menu values ('3', '11619'); |
| | | insert into sys_role_menu values ('3', '11629'); |
| | | insert into sys_role_menu values ('3', '11632'); |
| | | insert into sys_role_menu values ('3', '11633'); |
| | | insert into sys_role_menu values ('3', '11638'); |
| | | insert into sys_role_menu values ('3', '11639'); |
| | | insert into sys_role_menu values ('3', '11640'); |
| | | insert into sys_role_menu values ('3', '11641'); |
| | | insert into sys_role_menu values ('3', '11642'); |
| | | insert into sys_role_menu values ('3', '11643'); |
| | | insert into sys_role_menu values ('4', '5'); |
| | | insert into sys_role_menu values ('4', '1500'); |
| | | insert into sys_role_menu values ('4', '1501'); |
| | |
| | | GO |
| | | INSERT sys_dict_data VALUES (19, N'000000', 2, N'ä¿®æ¹', N'2', N'sys_oper_type', N'', N'info', N'N', 103, 1, getdate(), NULL, NULL, N'ä¿®æ¹æä½') |
| | | GO |
| | | INSERT sys_dict_data VALUES (20, N'000000', 3, N'å é¤', N'3', N'sys_oper_type', N'', N'danger', N'N', 103, 1, getdate(), NULL, NULL, N'å 餿ä½') |
| | | INSERT sys_dict_data VALUES (20, N'000000', 3, N'å é¤', N3, N'sys_oper_type', N'', N'danger', N'N', 103, 1, getdate(), NULL, NULL, N'å 餿ä½') |
| | | GO |
| | | INSERT sys_dict_data VALUES (21, N'000000', 4, N'ææ', N'4', N'sys_oper_type', N'', N'primary', N'N', 103, 1, getdate(), NULL, NULL, N'æææä½') |
| | | GO |
| | |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 108); |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 118); |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 123); |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 500); |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 501); |
| | |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 1045); |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 1050); |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 1061); |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 1062); |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 1063); |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 1064); |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 1065); |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 1500); |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 1501); |
| | |
| | | INSERT sys_role_menu VALUES (3, 1510); |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 1511); |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 1600); |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 1601); |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 1602); |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 1603); |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 1620); |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 1621); |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 1622); |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 1623); |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 11618); |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 11619); |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 11629); |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 11632); |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 11633); |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 11638); |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 11639); |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 11640); |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 11641); |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 11642); |
| | | GO |
| | | INSERT sys_role_menu VALUES (3, 11643); |
| | | GO |
| | | INSERT sys_role_menu VALUES (4, 5); |
| | | GO |
| | |
| | | GO |
| | | INSERT INTO sys_oss_config VALUES (N'2', N'000000', N'qiniu', N'XXXXXXXXXXXXXXXX', N'XXXXXXXXXXXXXXX', N'ruoyi', N'', N's3-cn-north-1.qiniucs.com', N'',N'N', N'', N'1', N'1', N'', 103, 1, getdate(), 1, getdate(), NULL) |
| | | GO |
| | | INSERT INTO sys_oss_config VALUES (N'3', N'000000', N'aliyun', N'XXXXXXXXXXXXXXX', N'XXXXXXXXXXXXXXX', N'ruoyi', N'', N'oss-cn-beijing.aliyuncs.com', N'',N'N', N'', N'1', N'1', N'', 103, 1, getdate(), 1, getdate(), NULL) |
| | | INSERT INTO sys_oss_config VALUES (N3, N'000000', N'aliyun', N'XXXXXXXXXXXXXXX', N'XXXXXXXXXXXXXXX', N'ruoyi', N'', N'oss-cn-beijing.aliyuncs.com', N'',N'N', N'', N'1', N'1', N'', 103, 1, getdate(), 1, getdate(), NULL) |
| | | GO |
| | | INSERT INTO sys_oss_config VALUES (N'4', N'000000', N'qcloud', N'XXXXXXXXXXXXXXX', N'XXXXXXXXXXXXXXX', N'ruoyi-1250000000', N'', N'cos.ap-beijing.myqcloud.com', N'',N'N', N'ap-beijing', N'1', N'1', N'', 103, 1, getdate(), 1, getdate(), NULL) |
| | | GO |