ProcessManager.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. package com.yihu.hos.system.service;
  2. import com.fasterxml.jackson.databind.JsonNode;
  3. import com.fasterxml.jackson.databind.ObjectMapper;
  4. import com.yihu.hos.common.graph.DGraphImpl;
  5. import com.yihu.hos.common.graph.Edge;
  6. import com.yihu.hos.common.graph.IDGraph;
  7. import com.yihu.hos.core.datatype.StringUtil;
  8. import com.yihu.hos.system.dao.AppDao;
  9. import com.yihu.hos.system.dao.AppServiceDao;
  10. import com.yihu.hos.system.dao.FlowProcessDao;
  11. import com.yihu.hos.system.dao.ProcessorDao;
  12. import com.yihu.hos.system.model.*;
  13. import com.yihu.hos.web.framework.model.Result;
  14. import net.sf.json.JSONArray;
  15. import net.sf.json.JSONObject;
  16. import org.springframework.stereotype.Service;
  17. import javax.annotation.Resource;
  18. import java.util.*;
  19. @Service("ProcessManager")
  20. public class ProcessManager {
  21. public static final String BEAN_ID = "ProcessManager";
  22. @Resource(name = AppDao.BEAN_ID)
  23. private AppDao appDao;
  24. @Resource(name = AppServiceDao.BEAN_ID)
  25. private AppServiceDao appServiceDao;
  26. @Resource(name = ProcessorDao.BEAN_ID)
  27. private ProcessorDao processorDao;
  28. @Resource(name = FlowProcessDao.BEAN_ID)
  29. private FlowProcessDao processDao;
  30. @Resource(name = FlowManager.BEAN_ID)
  31. private FlowManager flowManager;
  32. private ObjectMapper objectMapper = new ObjectMapper();
  33. public Result getAllEndpoints(String endpointName) throws Exception {
  34. List<SystemServiceEndpoint> serviceEndpointList = appServiceDao.getListByName(endpointName);
  35. List<String> appIdList = new ArrayList<>();
  36. Map<String, List<ProcessResultModel>> appServiceMap = new HashMap<>();
  37. for (SystemServiceEndpoint endpoint : serviceEndpointList) {
  38. ProcessResultModel resultModel = new ProcessResultModel();
  39. resultModel.setName(endpoint.getName());
  40. resultModel.setValue(endpoint.getEndpoint());
  41. resultModel.setNodeType("service");
  42. appIdList.add(endpoint.getAppId());
  43. List<ProcessResultModel> endpointList;
  44. if (appServiceMap.get(endpoint.getAppId()) != null) {
  45. endpointList = appServiceMap.get(endpoint.getAppId());
  46. } else {
  47. endpointList = new ArrayList<>();
  48. }
  49. endpointList.add(resultModel);
  50. appServiceMap.put(endpoint.getAppId(), endpointList);
  51. }
  52. List<SystemApp> appList = appDao.getAllByIdList(appIdList);
  53. JSONArray jsonArray = new JSONArray();
  54. for (SystemApp app : appList) {
  55. JSONObject jsonObject = new JSONObject();
  56. jsonObject.put("title", app.getName());
  57. List<ProcessResultModel> resultModelList = appServiceMap.get(app.getId());
  58. List<ProcessResultModel> resultModelListListTemp = new ArrayList<>();
  59. if (app.getName().equals("起始端点")) {
  60. for (ProcessResultModel resultModel : resultModelList) {
  61. resultModel.setNodeType("default");
  62. resultModelListListTemp.add(resultModel);
  63. }
  64. jsonObject.put("list", resultModelListListTemp);
  65. jsonArray.add(0, jsonObject);
  66. } else {
  67. resultModelListListTemp = resultModelList;
  68. jsonObject.put("list", resultModelListListTemp);
  69. jsonArray.add(jsonObject);
  70. }
  71. }
  72. return Result.success(jsonArray.toString());
  73. }
  74. // public Result getAppServiceByAppId(String appId) throws Exception {
  75. // String hql = "from SystemServiceEndpoint where appId = "+appId+"";
  76. // List<SystemServiceEndpoint> serviceEndpointList = appServiceDao.getEntityList(SystemServiceEndpoint.class, hql);
  77. // String result = objectMapper.writeValueAsString(serviceEndpointList);
  78. // return Result.success(result);
  79. // }
  80. public String getFlowchart(Integer flowId) throws Exception {
  81. SystemServiceFlowProcess serviceFlowProcess = processDao.getFlowProcessByFlowId(flowId);
  82. JSONObject jsonObject = new JSONObject();
  83. jsonObject.put("code", serviceFlowProcess.getCode());
  84. jsonObject.put("name", serviceFlowProcess.getName());
  85. jsonObject.put("flowId", serviceFlowProcess.getFlowId());
  86. jsonObject.put("result", serviceFlowProcess.getResult());
  87. return jsonObject.toString();
  88. }
  89. public Result getAllProcessor(String processorName) throws Exception {
  90. List<SystemServiceFlowProcessor> processorList = processorDao.getListByName(processorName);
  91. List<ProcessResultModel> resultModelList = new ArrayList<>();
  92. for (SystemServiceFlowProcessor processor : processorList) {
  93. ProcessResultModel resultModel = new ProcessResultModel();
  94. resultModel.setName(processor.getName());
  95. resultModel.setValue(processor.getPackageName() + "." + processor.getClassName());
  96. resultModel.setNodeType("processor");
  97. resultModelList.add(resultModel);
  98. }
  99. String result = objectMapper.writeValueAsString(resultModelList);
  100. return Result.success(result);
  101. }
  102. public void saveProcess(String code, String name, Integer flowId, String positionJsonStr) throws Exception {
  103. SystemServiceFlowProcess process = new SystemServiceFlowProcess();
  104. process.setCode(code);
  105. process.setName(name);
  106. process.setResult(positionJsonStr);
  107. process.setFlowId(flowId);
  108. processDao.saveEntity(process);
  109. }
  110. public static void main(String[] args) throws Exception {
  111. String flowJsonStr = "{\n" +
  112. " \"nodes\": {\n" +
  113. " \"esb_node_0\": {\n" +
  114. " \"name\": \"SDf\",\n" +
  115. " \"value\": \"sd\",\n" +
  116. " \"nodeType\": \"default\"\n" +
  117. " },\n" +
  118. " \"esb_node_1\": {\n" +
  119. " \"name\": \"crawler转换器\",\n" +
  120. " \"value\": \"CrawlerProcessor0\",\n" +
  121. " \"nodeType\": \"processor\"\n" +
  122. " },\n" +
  123. " \"esb_node_2\": {\n" +
  124. " \"name\": \"判断\",\n" +
  125. " \"value\": \"\",\n" +
  126. " \"nodeType\": \"judgement\"\n" +
  127. " },\n" +
  128. " \"esb_node_3\": {\n" +
  129. " \"name\": \"循环\",\n" +
  130. " \"value\": \"\",\n" +
  131. " \"nodeType\": \"circle\"\n" +
  132. " },\n" +
  133. " \"esb_node_4\": {\n" +
  134. " \"name\": \"全流程-用户信息\",\n" +
  135. " \"value\": \"全流程-用户信息\",\n" +
  136. " \"nodeType\": \"service\"\n" +
  137. " },\n" +
  138. " \"esb_node_5\": {\n" +
  139. " \"name\": \"全流程-就诊信息\",\n" +
  140. " \"value\": \"jetty:http://localhost:8080/clinicInfo\",\n" +
  141. " \"nodeType\": \"service\"\n" +
  142. " },\n" +
  143. " \"esb_node_6\": {\n" +
  144. " \"name\": \"分流\",\n" +
  145. " \"value\": \"\",\n" +
  146. " \"nodeType\": \"multicast\"\n" +
  147. " },\n" +
  148. " \"esb_node_7\": {\n" +
  149. " \"name\": \"crawler转换器\",\n" +
  150. " \"value\": \"CrawlerProcessor0\",\n" +
  151. " \"nodeType\": \"processor\"\n" +
  152. " },\n" +
  153. " \"esb_node_8\": {\n" +
  154. " \"name\": \"crawler转换器\",\n" +
  155. " \"value\": \"CrawlerProcessor0\",\n" +
  156. " \"nodeType\": \"processor\"\n" +
  157. " },\n" +
  158. " \"esb_node_9\": {\n" +
  159. " \"name\": \"crawler转换器\",\n" +
  160. " \"value\": \"CrawlerProcessor0\",\n" +
  161. " \"nodeType\": \"processor\"\n" +
  162. " },\n" +
  163. " \"esb_node_10\": {\n" +
  164. " \"name\": \"聚合\",\n" +
  165. " \"value\": \"\",\n" +
  166. " \"nodeType\": \"aggregate\"\n" +
  167. " }\n" +
  168. " },\n" +
  169. " \"lines\": {\n" +
  170. " \"esb_line_0\": {\n" +
  171. " \"from\": \"esb_node_0\",\n" +
  172. " \"to\": \"esb_node_1\",\n" +
  173. " \"value\": \"\"\n" +
  174. " },\n" +
  175. " \"esb_line_1\": {\n" +
  176. " \"from\": \"esb_node_1\",\n" +
  177. " \"to\": \"esb_node_2\",\n" +
  178. " \"value\": \"\"\n" +
  179. " },\n" +
  180. " \"esb_line_2\": {\n" +
  181. " \"from\": \"esb_node_2\",\n" +
  182. " \"to\": \"esb_node_3\",\n" +
  183. " \"value\": \"correct\"\n" +
  184. " },\n" +
  185. " \"esb_line_3\": {\n" +
  186. " \"from\": \"esb_node_3\",\n" +
  187. " \"to\": \"esb_node_5\",\n" +
  188. " \"value\": \"自定义内容\"\n" +
  189. " },\n" +
  190. " \"esb_line_4\": {\n" +
  191. " \"from\": \"esb_node_3\",\n" +
  192. " \"to\": \"esb_node_4\",\n" +
  193. " \"value\": \"自定义内容\"\n" +
  194. " },\n" +
  195. " \"esb_line_5\": {\n" +
  196. " \"from\": \"esb_node_2\",\n" +
  197. " \"to\": \"esb_node_6\",\n" +
  198. " \"value\": \"自定义内容\"\n" +
  199. " },\n" +
  200. " \"esb_line_6\": {\n" +
  201. " \"from\": \"esb_node_6\",\n" +
  202. " \"to\": \"esb_node_8\",\n" +
  203. " \"value\": \"\"\n" +
  204. " },\n" +
  205. " \"esb_line_7\": {\n" +
  206. " \"from\": \"esb_node_6\",\n" +
  207. " \"to\": \"esb_node_7\",\n" +
  208. " \"value\": \"\"\n" +
  209. " },\n" +
  210. " \"esb_line_8\": {\n" +
  211. " \"from\": \"esb_node_6\",\n" +
  212. " \"to\": \"esb_node_9\",\n" +
  213. " \"value\": \"\"\n" +
  214. " },\n" +
  215. " \"esb_line_9\": {\n" +
  216. " \"from\": \"esb_node_9\",\n" +
  217. " \"to\": \"esb_node_10\",\n" +
  218. " \"value\": \"\"\n" +
  219. " }\n" +
  220. " }\n" +
  221. "}";
  222. // generateFlow("crawler", "业务流程图", flowJsonStr);
  223. }
  224. public Integer generateFlow(String code, String name, String flowJsonStr) throws Exception {
  225. String root = "";
  226. ObjectMapper objectMapper = new ObjectMapper();
  227. JsonNode flowJson = objectMapper.readValue(flowJsonStr, JsonNode.class);
  228. //sort flow by lines
  229. JsonNode lines = flowJson.get("lines");
  230. Iterator<Map.Entry<String, JsonNode>> lineIterator = lines.fields();
  231. //get nodeMap by nodes
  232. JsonNode nodes = flowJson.get("nodes");
  233. Iterator<Map.Entry<String, JsonNode>> nodeIterator = nodes.fields();
  234. //for the java code import processor class
  235. Map<String, JsonNode> nodeMap = new HashMap<>();
  236. Map<String, JsonNode> lineMap = new HashMap<>();
  237. IDGraph<String> mDG = new DGraphImpl<String>();
  238. while (nodeIterator.hasNext()) {
  239. Map.Entry<String, JsonNode> map = nodeIterator.next();
  240. nodeMap.put(map.getKey(), map.getValue());
  241. String type = map.getValue().get("nodeType").asText();
  242. if (StringUtil.isEmpty(root) && type.equals("default")) {
  243. root = map.getKey();
  244. }
  245. mDG.add(map.getKey());
  246. }
  247. while (lineIterator.hasNext()) {
  248. Map.Entry<String, JsonNode> map = lineIterator.next();
  249. lineMap.put(map.getKey(), map.getValue());
  250. String nodeNameFrom = map.getValue().get("from").asText();
  251. String nodeNameTo = map.getValue().get("to").asText();
  252. mDG.add(new Edge<>(nodeNameFrom, nodeNameTo, map.getKey()));
  253. }
  254. ProcessEditor editor = new ProcessEditor();
  255. Iterator<String> nodeIt = mDG.iterator(root);
  256. editor.setCode(code);
  257. editor.setNodeIt(nodeIt);
  258. editor.setmDG(mDG);
  259. editor.setLineMap(lineMap);
  260. editor.setNodeMap(nodeMap);
  261. //generate the java code
  262. String javaName = toUpperCaseFirstOne(code)+"Route";
  263. String packageName = code+".route";
  264. String fileInfo = editor.generate(javaName, packageName);
  265. // Integer flowId = flowManager.sendAddRoute(code, name, javaName, packageName, fileInfo);
  266. return null;
  267. }
  268. //首字母转大写
  269. public static String toUpperCaseFirstOne(String s) {
  270. if(Character.isUpperCase(s.charAt(0)))
  271. return s;
  272. else
  273. return (new StringBuilder()).append(Character.toUpperCase(s.charAt(0))).append(s.substring(1)).toString();
  274. }
  275. }