Bläddra i källkod

流程编辑器后端接口调试

zhenglingfeng 8 år sedan
förälder
incheckning
c27d6036b0

+ 7 - 3
src/main/java/com/yihu/hos/system/controller/ProcessController.java

@ -1,5 +1,6 @@
package com.yihu.hos.system.controller;
import com.yihu.hos.core.datatype.StringUtil;
import com.yihu.hos.system.service.ProcessManager;
import com.yihu.hos.web.framework.model.Result;
import com.yihu.hos.web.framework.util.controller.BaseController;
@ -52,12 +53,15 @@ public class ProcessController  extends BaseController {
    @ResponseBody
    public Result formatJson(String code, String name, String positionJson, String flowJson) {
        try {
            String fileName = processManager.formatJson(flowJson);
            String fileName = processManager.generateFile(code, name, flowJson);
            if (StringUtil.isEmpty(fileName)) {
                return Result.error("生成业务流程失败");
            }
            processManager.saveProcess(code, name, fileName, positionJson);
            return Result.error("生成模板成功");
            return Result.error("生成业务流程成功");
        } catch (Exception e) {
            return Result.error("生成模板失败");
            return Result.error("生成业务流程失败");
        }
    }
}

+ 55 - 0
src/main/java/com/yihu/hos/system/service/FlowManager.java

@ -644,6 +644,61 @@ public class FlowManager {
        return null;
    }
    public Boolean sendAddRoute(String code, String name, String javaName, String packageName, String fileInfo) throws Exception {
        String fileName = javaName + ".java";
        String filePath = this.getClass().getProtectionDomain().getClassLoader().getResource("").getPath() + "temp/" + fileName;
        boolean succ = FileUtil.writeFile(filePath, fileInfo, "UTF-8");
        if (succ) {
            fileName = GridFSUtil.uploadFile(filePath, fileName, null);
        } else {
            return false;
        }
        SystemServiceFlow systemServiceFlow = new SystemServiceFlow();
        systemServiceFlow.setName(name);
        systemServiceFlow.setCode(code);
        systemServiceFlow.setCreateDate(new Date());
        systemServiceFlow.setValid(1);
        systemServiceFlow.setFileType(ServiceFlowConstant.JAVA);
        flowDao.saveEntity(systemServiceFlow);
        String enFileName = DES.encrypt(fileName, DES.COMMON_PASSWORD);//加密文件名
        if (fileName != null) {
            ServiceFlow serviceFlow = new ServiceFlow();
            serviceFlow.setRouteCode(code);
            serviceFlow.setFlowType(ServiceFlowConstant.CLASS);
            ServiceFlow.HandleFile handleFile = new ServiceFlow.HandleFile();
            handleFile.setRouteCode(code);
            handleFile.setFileType(ServiceFlowConstant.JAVA);
            handleFile.setPackageName(packageName);
            handleFile.setClassName(javaName);
            handleFile.setFilePath(enFileName);
            handleFile.setUsage(ServiceFlowConstant.FLOW_TYPE_ROUTE);
            ArrayList<ServiceFlow.HandleFile> handleFiles = new ArrayList<>();
            handleFiles.add(handleFile);
            serviceFlow.setHandleFiles(handleFiles);
            serviceFlowEventService.serviceFlowModifiedAdd(serviceFlow);
        } else {
            System.out.println("生成route的java文件过程出错");
            return false;
        }
        String enClassName = DES.encrypt(javaName + ".class", DES.COMMON_PASSWORD);//生成加密过的classPath
        SystemServiceFlowClass flowClass = new SystemServiceFlowClass();
        flowClass.setPackageName(packageName);
        flowClass.setClassName(javaName);
        flowClass.setClassPath(enClassName);
        flowClass.setFlowId(systemServiceFlow.getId());
        flowClass.setType(ServiceFlowConstant.FLOW_TYPE_ROUTE);
        flowClass.setIsUpdate("1");
        flowClassDao.saveEntity(flowClass);
        return true;
    }
    public Integer sendAddProcessor(String jobId, Integer flowId, Long timestamp) throws Exception {
        List<SystemServiceFlowTemp> flowTempRouters = flowTempDao.getFlowTemps(flowId, ServiceFlowConstant.FLOW_TYPE_ROUTE);
        List<SystemServiceFlowTemp> flowTempProces = flowTempDao.getFlowTemps(flowId, ServiceFlowConstant.FLOW_TYPE_PROCESSOR);

+ 7 - 43
src/main/java/com/yihu/hos/system/service/ProcessEditor.java

@ -22,23 +22,14 @@ public class ProcessEditor {
    private StringBuilder packageBuilder = new StringBuilder();
    private StringBuilder otherRouteBuilder = new StringBuilder();
    public String generate() throws IOException {
    public String generate(String javaName, String packageName) throws IOException {
        Boolean isFirstNodeFlg = true;
        StringBuilder allBuilder = new StringBuilder();
        String javaName = toUpperCaseFirstOne(code)+"Route";
        packageBuilder.append("package "+code+".route;\n\n");
        packageBuilder.append("package " + packageName + ";\n\n");
//        packageBuilder.append("import org.apache.camel.Exchange;\n");
        packageBuilder.append("import org.apache.camel.builder.RouteBuilder;\n");
        for (String key : nodeMap.keySet()) {
            JsonNode node = nodeMap.get(key);
            String nodeType = node.get("nodeType").asText();
            if (nodeType.equals("processor")) {
                packageBuilder.append("import " + node.get("value").asText() + ";\n");
            }
        }
        bodyBuilder.append("public class "+javaName+" extends RouteBuilder {\n");
        bodyBuilder.append("public void configure() throws Exception {\n");
        String nodeName = "";
@ -61,35 +52,7 @@ public class ProcessEditor {
        bodyBuilder.append("\n}\n}");
        allBuilder.append(packageBuilder).append(bodyBuilder);
        System.out.println(allBuilder.toString());
//        String packageFilePath = System.getProperty("user.dir");
//
//        String filePath = packageFilePath + "/" + javaName + ".java";
//        File file = new File(filePath);
//
//        FileWriter fw = new FileWriter(file);
//        fw.write(bodyBuilder.toString());
//        fw.flush();
//        fw.close();//这里只是产生一个JAVA文件,简单的IO操作
//
//        //upload to mongo
//        String newFileName;
//        try {
//            newFileName = GridFSUtil.uploadFile(filePath, file.getName(), null);
//            if (!StringUtil.isEmpty(newFileName)) {
//                return newFileName;
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
        return "";
    }
    //首字母转大写
    public static String toUpperCaseFirstOne(String s) {
        if(Character.isUpperCase(s.charAt(0)))
            return s;
        else
            return (new StringBuilder()).append(Character.toUpperCase(s.charAt(0))).append(s.substring(1)).toString();
        return allBuilder.toString();
    }
    public StringBuilder montage(String nodeName) {
@ -105,12 +68,13 @@ public class ProcessEditor {
                bodyBuilder.append(".routeId(\""+code+"\")");
            }
        } else if (nodeType.equals("processor")) {
            packageBuilder.append("import " + node.get("value").asText() + ";\n");
            String className = value.substring(value.lastIndexOf(".") + 1, value.length());
            packageBuilder.append("import " + value + ";\n");
            JsonNode param = node.get("param");
            if (param == null) {
                bodyBuilderTemp.append("\n.process(new "+name+"())");
                bodyBuilderTemp.append("\n.process(new "+className+"())");
            } else {
                bodyBuilderTemp.append("\n.process(new "+name+"("+param+"))");
                bodyBuilderTemp.append("\n.process(new "+className+"("+param+"))");
            }
        } else if (nodeType.equals("judgement")) {
            judgement(value, nodeName, bodyBuilderTemp);

+ 26 - 36
src/main/java/com/yihu/hos/system/service/ProcessManager.java

@ -3,8 +3,8 @@ package com.yihu.hos.system.service;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.hos.common.graph.DGraphImpl;
import com.yihu.hos.common.graph.IDGraph;
import com.yihu.hos.common.graph.Edge;
import com.yihu.hos.common.graph.IDGraph;
import com.yihu.hos.core.datatype.StringUtil;
import com.yihu.hos.system.dao.AppDao;
import com.yihu.hos.system.dao.AppServiceDao;
@ -32,6 +32,8 @@ public class ProcessManager {
    private ProcessorDao processorDao;
    @Resource(name = FlowProcessDao.BEAN_ID)
    private FlowProcessDao processDao;
    @Resource(name = FlowManager.BEAN_ID)
    private FlowManager flowManager;
    private ObjectMapper objectMapper = new ObjectMapper();
@ -79,7 +81,7 @@ public class ProcessManager {
        for (SystemServiceFlowProcessor processor : processorList) {
            ProcessResultModel resultModel = new ProcessResultModel();
            resultModel.setName(processor.getName());
            resultModel.setValue(processor.getClassName());
            resultModel.setValue(processor.getPackageName() + "." + processor.getClassName());
            resultModelList.add(resultModel);
        }
        String result = objectMapper.writeValueAsString(resultModelList);
@ -97,7 +99,6 @@ public class ProcessManager {
    public static void main(String[] args) throws Exception {
        String flowJsonStr = "{\n" +
                "    \"code\": \"crawler\",\n" +
                "    \"nodes\": {\n" +
                "        \"node_1\": {\n" +
                "            \"name\": \"Quartz\",\n" +
@ -105,7 +106,7 @@ public class ProcessManager {
                "            \"nodeType\": \"default\"\n" +
                "        },\n" +
                "        \"node_2\": {\n" +
                "           \"name\": \"DefaultHttpProcessor\",\n" +
                "           \"name\": \"常用HTTP转换器\",\n" +
                "            \"value\": \"com.yihu.hos.broker.common.processor.DefaultHttpProcessor\",\n" +
                "\t\t\t\"param\": \"{\\\"jobId\\\":\\\"5ad5c11655d443c30155d477a6b10000\\\"}\",\n" +
                "            \"nodeType\": \"processor\"\n" +
@ -114,22 +115,6 @@ public class ProcessManager {
                "            \"name\": \"Crawler0\",\n" +
                "            \"value\": \"http4://localhost:8088/crawler/patientList?method=post\",\n" +
                "            \"nodeType\": \"service\"\n" +
                "        },\n" +
                "        \"node_4\": {\n" +
                "            \"name\": \"Circle\",\n" +
                "            \"value\": \"splitJsonArray\",\n" +
                "            \"nodeType\": \"circle\"\n" +
                "        },\n" +
                "        \"node_5\": {\n" +
                "            \"name\": \"HttpProcessor\",\n" +
                "            \"value\": \"com.yihu.hos.broker.common.processor.HttpProcessor\",\n" +
                "\t\t\t\"param\": \"str\",\n" +
                "            \"nodeType\": \"processor\"\n" +
                "        },\n" +
                "        \"node_6\": {\n" +
                "            \"name\": \"Crawler2\",\n" +
                "            \"value\": \"http4://localhost:8088/crawler/collect?method=post\",\n" +
                "            \"nodeType\": \"service\"\n" +
                "        }\n" +
                "    },\n" +
                "    \"lines\": {\n" +
@ -140,29 +125,16 @@ public class ProcessManager {
                "        \"line_2\": {\n" +
                "            \"from\": \"node_2\",\n" +
                "            \"to\": \"node_3\"\n" +
                "        },\n" +
                "        \"line_3\": {\n" +
                "            \"from\": \"node_3\",\n" +
                "            \"to\": \"node_4\"\n" +
                "        },\n" +
                "        \"line_4\": {\n" +
                "            \"from\": \"node_4\",\n" +
                "            \"to\": \"node_5\"\n" +
                "        },\n" +
                "        \"line_5\": {\n" +
                "            \"from\": \"node_5\",\n" +
                "            \"to\": \"node_6\"\n" +
                "        }\n" +
                "    }\n" +
                "}";
        formatJson(flowJsonStr);
//        generateFile("crawler", "业务流程图", flowJsonStr);
    }
    public static String formatJson(String flowJsonStr) throws Exception {
    public String generateFile(String code, String name, String flowJsonStr) throws Exception {
        String root = "";
        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode flowJson = objectMapper.readValue(flowJsonStr, JsonNode.class);
        String code = flowJson.get("code").asText();
        //sort flow by lines
        JsonNode lines = flowJson.get("lines");
@ -199,6 +171,24 @@ public class ProcessManager {
        editor.setLineMap(lineMap);
        editor.setNodeMap(nodeMap);
        //generate the java code
        return editor.generate();
        String javaName = toUpperCaseFirstOne(code)+"Route";
        String packageName = code+".route";
        String fileInfo = editor.generate(javaName, packageName);
        Boolean flag = flowManager.sendAddRoute(code, name, javaName, packageName, fileInfo);
        if (flag) {
            return javaName;
        } else {
            return null;
        }
    }
    //首字母转大写
    public static String toUpperCaseFirstOne(String s) {
        if(Character.isUpperCase(s.charAt(0)))
            return s;
        else
            return (new StringBuilder()).append(Character.toUpperCase(s.charAt(0))).append(s.substring(1)).toString();
    }
}