zoukankan      html  css  js  c++  java
  • springboot异步接口

    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;
        }
    }
  • 相关阅读:
    Java 多线程概述
    Java 线程的创建和启动
    状态模式
    Spring 依赖注入
    Spring IOC
    在JavaEE中使用Mybatis框架
    Active Reports 补空白行
    SpreadForWin 清空Sheet
    日期格式转换
    Select Case 的实现
  • 原文地址:https://www.cnblogs.com/jiawen010/p/13965169.html
Copyright © 2011-2022 走看看