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;
        }
    }
  • 相关阅读:
    tensorflow 2.0 学习 (十) 拟合与过拟合问题
    tensorflow 2.0 学习 (九) tensorboard可视化功能认识
    tensorflow 2.0 学习 (八) keras模块的认识
    tensorflow 2.0 学习 (七) 反向传播代码逐步实现
    tensorflow 2.0 学习 (六) Himmelblua函数求极值
    tensorflow 2.0 学习 (五)MPG全连接网络训练与测试
    arp协议简单介绍
    Pthread spinlock自旋锁
    线程和进程状态
    内核态(内核空间)和用户态(用户空间)的区别和联系·
  • 原文地址:https://www.cnblogs.com/jiawen010/p/13965169.html
Copyright © 2011-2022 走看看