1服務接口類
public interface AsyncService { public Future<String> taskAddWorkFlowNodes(Map<String, List<BladePower>> workFlowPower); public Future<String> task2(); public Future<String> task3(); }
2.接口實現類
package org.springblade.system.service.impl; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.core.tool.api.R; import org.springblade.system.constant.Constant; import org.springblade.system.entity.BladePower; import org.springblade.system.entity.BladeWorkflow; import org.springblade.system.service.*; import org.springframework.beans.BeanUtils; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.Future; /** * @Autor zhangjiawen * @Date: 2020/5/15 13:20 */ @Service @AllArgsConstructor @Slf4j public class AsyncServiceImpl implements AsyncService { private IBladePowerService powerService; private IBladeWorkflowService workflowService; @Override @Async public Future<String> taskAddWorkFlowNodes(Map<String, List<BladePower>> workFlowPower) { asyncAdd(workFlowPower); return null; } @Override public Future<String> task2() { return null; } @Override public Future<String> task3() { return null; } public void asyncAdd(Map<String, List<BladePower>> workFlowPower){ //返回成功異步處理 //判斷流程id是否存在 Set<Map.Entry<String, List<BladePower>>> entries = workFlowPower.entrySet(); String workFlowId = entries.iterator().next().getKey(); int count = workflowService.count(Wrappers.<BladeWorkflow>query().lambda().eq(BladeWorkflow::getFlowId, workFlowId)); List<BladePower> bladePowers = entries.iterator().next().getValue(); if (bladePowers==null || bladePowers.size()==0){ log.error("流程節點不能為空!workFlowId:"+workFlowId); return; } //不存在 if(count==0){ //添加整個流程 bladePowers.forEach(power -> { power.setSort(System.currentTimeMillis()); power.setPowerType(Constant.WORKFLOW_POWER_TYPE); power.setName(power.getNodeName()); R r = R.status(powerService.save(power)); if(r.isSuccess()){ BladeWorkflow workflow=new BladeWorkflow(); BeanUtils.copyProperties(power,workflow); R.status(workflowService.save(workflow)); } } ); log.info("工作流添加成功!workFlowId:"+workFlowId); }else{ //存在 //遍歷工作流節點 判斷節點是否存在 bladePowers.forEach(power -> { int countNode = workflowService.count(Wrappers.<BladeWorkflow>query().lambda().eq(BladeWorkflow::getNodeId, power.getNodeId())); //不存在 if (countNode==0){ //查詢最大版本號 Integer maxVersion = workflowService.getMaxVersion(workFlowId); //添加節點 最新版本號 power.setSort(System.currentTimeMillis()); power.setPowerType(Constant.WORKFLOW_POWER_TYPE); power.setName(power.getNodeName()); R r=R.status(powerService.save(power)); if(r.isSuccess()){ BladeWorkflow workflow=new BladeWorkflow(); BeanUtils.copyProperties(power,workflow); workflow.setVersion(maxVersion); workflowService.save(workflow); } }else{ //存在 //修改節點 最新版本號 //權限表無需更改 BladeWorkflow workflow=new BladeWorkflow(); BeanUtils.copyProperties(power,workflow); workflowService.updateNode(workflow); } }); log.info("工作流升級成功!workFlowId:"+workFlowId); } } }
3controller
package org.springblade.system.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import io.swagger.annotations.*; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.IResultCode; import org.springblade.core.tool.api.R; import org.springblade.core.tool.api.ResultCode; import org.springblade.core.tool.utils.Func; import org.springblade.system.constant.Constant; import org.springblade.system.entity.*; import org.springblade.system.service.*; import org.springblade.system.user.vo.UserVO; import org.springblade.system.vo.CheckedTreeVO; import org.springblade.system.vo.GrantTreeVO; import org.springblade.system.vo.GrantWorkFlowNodesVO; import org.springblade.system.vo.WorkFlowVO; import org.springframework.beans.BeanUtils; import org.springframework.cache.annotation.CacheEvict; import org.springframework.scheduling.annotation.Async; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import springfox.documentation.annotations.ApiIgnore; import javax.validation.Valid; import java.io.IOException; import java.util.*; import static org.springblade.core.cache.constant.CacheConstant.MENU_CACHE; import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE; @RestController @RequestMapping("/workflow") @AllArgsConstructor @Slf4j public class WorkFlowNodesController { private AsyncService asyncService; private IBladeWorkflowService workflowService; /** * 新增或修改 */ @PostMapping("/submit") @ApiOperationSupport(order = 3) @ApiOperation(value = "新增或修改工作流節點", notes = "傳入 Map<String, List<BladePower>>") public R submit(@Valid @RequestParam String strWorkFlow) { if (StringUtils.isEmpty(strWorkFlow)){ log.error("strWorkFlow不能為空!"); return R.fail("strWorkFlow不能為空!"); } Map<String, List<BladePower>> objectParam = null; try { objectParam = getObjectParam(strWorkFlow); } catch (IOException e) { e.printStackTrace(); } asyncService.taskAddWorkFlowNodes(objectParam); return R.success("接收成功!"); } private Map<String, List<BladePower>> getObjectParam(String params) throws IOException { // String string="{\"xxxxxxx\":[{\"nodeId\":\"asdfaxfg\",\"nodeName\":\"測試\",\"flowId\":\"xxxxxxx\",\"flowName\":\"測試\",\"tenantId\":\"00000\"},{\"nodeId\":\"asdfaxfg1\",\"nodeName\":\"測試1\",\"flowId\":\"xxxxxxx\",\"flowName\":\"測試1\",\"tenantId\":\"00000\"}]}"; ObjectMapper objectMapper = new ObjectMapper(); JsonNode originJson = objectMapper.readTree(params); Map<String, List<BladePower>> bladePowerMap=new HashMap<>(); List<BladePower> list=new ArrayList<>(); String key=""; Iterator<String> stringIterator = originJson.fieldNames(); if (stringIterator.hasNext()){ key=stringIterator.next(); }else { return null; } originJson.forEach(jsonNode ->{ System.out.println(jsonNode); // key=jsonNode. jsonNode.forEach(e-> { BladePower bladePower=new BladePower(); bladePower.setNodeId(String.valueOf(e.get("nodeId")).replace("\"","")); bladePower.setNodeName(String.valueOf(e.get("nodeName")).replace("\"","")); bladePower.setFlowId(String.valueOf(e.get("flowId")).replace("\"","")); bladePower.setFlowName(String.valueOf(e.get("flowName")).replace("\"","")); bladePower.setTenantId(String.valueOf(e.get("tenantId")).replace("\"","")); list.add(bladePower); }); }); bladePowerMap.put(key,list); return bladePowerMap; } }