From bd2bfed32fea05f4c9cb4a8f7d0597d1e7ddc4b0 Mon Sep 17 00:00:00 2001 From: charlesxie <408737515@qq.com> Date: Sat, 2 Apr 2022 17:47:59 +0800 Subject: [PATCH] =?UTF-8?q?feature:=E7=BD=91=E5=85=B3=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E5=BC=84=E5=87=BA=E6=9D=A5=E4=BA=86=20=E5=93=88=E5=93=88?= =?UTF-8?q?=E5=93=88=E5=93=88=E5=93=88=E5=93=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../flow/__pycache__/models.cpython-36.pyc | Bin 4654 -> 4765 bytes .../__pycache__/serializers.cpython-36.pyc | Bin 9066 -> 9236 bytes .../flow/__pycache__/views.cpython-36.pyc | Bin 5658 -> 5204 bytes applications/flow/models.py | 10 ++- applications/flow/serializers.py | 8 +- applications/flow/views.py | 45 ++++-------- .../__pycache__/dag_helper.cpython-36.pyc | Bin 7508 -> 10480 bytes applications/utils/dag_helper.py | 69 +++++++++++++++++- dj_flow/__pycache__/urls.cpython-36.pyc | Bin 1114 -> 1181 bytes dj_flow/urls.py | 2 + .../views/job_flow_mgmt/single_job_flow.vue | 6 +- .../single_job_flow/preFlowCanvas.vue | 1 + .../single_job_flow/taskMake.vue | 12 +-- 13 files changed, 109 insertions(+), 44 deletions(-) diff --git a/applications/flow/__pycache__/models.cpython-36.pyc b/applications/flow/__pycache__/models.cpython-36.pyc index ae5994271b3219c176f01534e19d71bdaa3d90a4..778c2775394d977fcec2bdac0ab410b6b33c2080 100644 GIT binary patch delta 753 zcmZWlyKWOf6x~_B_Py(O>^wH%Z3R()f=gtt9kY?M8?v^9rilo5g+M&SEEP=((wb&E zBuXfeP=195L`4TxBpT?rGd3a;8qJw|&Y64W?tZxN_M(2nwhjON_TlG`dQd#NL=+`e zC;^44KxhtBnui=MK%N$%Kuf9iNQWYnK*Oca^3;%ufr<&%EJsbrZOKh}!$QRd2Yq*@ zQU{p}9@d0)-J1Rp3FU}h)(yjuLjaA8N3s#fY>uDVt(8OmO(#^@(ru3H147r4g z4J{m5jL?#-y8##Cva%p+GIDkCpg&Sz4g6yT{8uVnhxJ71Y<$uB_p&s4 z1}Ve;rhJ#6iYg}{kHDXnUUQ-aJk&nHHVT>WHNv*=h&mh0!jsto90Y14livR1Ac_Y= zstu#TqS}f3^U6!6{e!*zI2b0$TycUp8ibQDjwI)|^lxN~pO%|#wuy;XaA(&LG?M?j zR2~{Xt34EVge&IMh(lP9$L4P@K*~%30|CR6yOu>fF*~aY7zwz|U)awJA(k=!VV@@< zwzl|XXZOE$e(Ypqm;Z9ElZSlMy-CLW(Cv~3{Egc+WvWPFBmUL(Ng@VsurVt4ac4yY yF`A~bG4FUURd$uX^G@nh)F1!5P$3p!Q~so!dE%>>OcWs~o|e0%b6%lR^YlOAf}(8z delta 605 zcmZWkJ!lj`6y7&?w>SGgxA&JzP6H+)*Pf8;LUI=)rx+wwE=aiKtw9mQS!`@lXp`cq z2O@%Ekvbr0EX3A2RY0t?N}bBiH^ZTV4D;>xeeZp5-oCqfyzE_%BLDNzaQDeaZ{&&; zXd8h z2G$J>PrimBsFC4y116(y(9h^uWs~Wc?#D~8$>zr;E6NTeP3_VUOM>D=?UNMF0Q* diff --git a/applications/flow/__pycache__/serializers.cpython-36.pyc b/applications/flow/__pycache__/serializers.cpython-36.pyc index 2a1ef1675dd9e4a99cd8766fc323984487cc9eeb..b37489cc1577bf88a3ce0056576f4685894bfbc9 100644 GIT binary patch delta 2727 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 aXqVy?elY<*b#$8busa+I_k^DbJO2V>1n_MD diff --git a/applications/flow/__pycache__/views.cpython-36.pyc b/applications/flow/__pycache__/views.cpython-36.pyc index 0de4588944f6a605c7a94b7466dadaaa0d387157..d80d953b8f5fb8624d6003f8f4265ba0a1938bae 100644 GIT binary patch delta 2161 zcmZuyO>7%Q6rR~#@2>4#du`{>X_}@@+Qv-^{ZUCvOGQdTTPR7|AV5pe%JFQX-8ySC z9*0I+D?%l5|_C5*6q{rLI``vfJ|3A0$? z0bvE#@K3^+gi(QU3dWRsqO04}U{hozuqlBIZ7Lv7*{4C?$NE9u4{O5@xy*&aMz)_@%%iA3uDbh!Sks7v@-oWid3-59@(2#iosI>JN$`W_Bsd4Z=Zg z!zZHbkuF^(6>A~RG1$+(L1+V37 zRO=qA3YWnVifXJN@?p^1>Ixp?xmeqYEY^btbDi~SGuEGsR%_ga4U&kW&(l-m+(3JE)vJRvR@+V7pUdbe15hdQvFMld)YeH@*y*N| z#Nl#YL5qtBmr!FpuNZEOsq@MIiIZ&3qu5M>N7I#d{a&2yMH;wJ?^r=yoO1BhD==31 zGRHFWBLEml3%wJ`pgKO1O5p*_!6?#EssQ%U937z+9hD-QbuNyBJ;z2)eC#>iJ3~GK zT4;UJ!rstTL(Fo0IC~hs8$~!0Eg2)_F`WMQ25{WqM)a96yLbz=?;tE7t$Hh@rqX76rPbnBlA%;OJ2rvy5lu=+A+L3l= zvXF%2%S>j~;-?&SSF4B%J#{KkD+ko6T|-r9$TduVB(XHhM03`K(;4IukxwYj z!c9WSFR&~#w&gJEr3vn8msS%)^>IKcVXhlQC znXTANyvzrz=R)@6KUM#mZ{E@yQy@TIZs>rSY)|Ac-LVxB(b4`9dMLWu?^KW(I5q*tZb&X`^3A^PN;W+f{oH?M WqK_JK4lZ@?Q73V(8dheXO#2s|efB~C delta 2614 zcmZ8i&2JmW72jEsyZqSYwNI{qQ5s%WWglnxAQ*c&3iL% z-ursx4;PoN*>?6{`AF zc*(W=WsD0LD;Q0TRrmZf-CBcAnOC4w0grT6z)!UzbeE#v@()p4N@?!Q`!D zwh8uMWI?gd$s$kl47Se8k}UbvV0>f^E|w_U<5OmJdJZ$ z>}rtPP%hMQv(F)WrvI9aD?8e_y1x~geq&0}z4HrwY>#JniI<;h;f#OgkPl~SGaGvx6lAfC^&=J zf3r8a*O8t6?%?ga(Kp78N$y*>#3=CojV)m@yWN(ZhtAOZ%#91OFWWr_Qm4}&1rlE0 zgrVk2tKxpYI_^eCdV8LH5+^=v!-b!|w{dqXHoRakf@c{zg_V8)d$GCW%C?juPTocw zvAI3+dK_M7)x?p)js9q^n?^^th&K9%xmJsf(SSl12?{z3XwHho=yG~(qOR3EI@ma^ z+}v#sS|*;lgM$(8P?#yaf5c`Fyn);E0z@KQw^clG9}ZWlc9dh6* z;Ars#Nk;djgl`ewRxS{ajy+Bi8K)fj9Og!YOi+S|(*R1NA^E837E7}-t1*LNrf2m$ zs62QWdX~+zEGz2@-URt)i8!s z`_hJ`r!!(9`cvkww@#7H8wBKAGkIueh8VO!REf*PBF!7epp4SKA4boz8}~Q~T!Jn^ zp5TWBI|L62l#>mby#i&$1Mg=T!z3V`uyo-?7jl1QtI^+cOKd&*Pwq|jD7s=bf1rGL z04?zm!OsD$oM;Ce`Q7t|GENS?o#1u*6yT>(WHrD4nwKi_23dLq$|D~<2VAw|V{`5$609FQ7}5{YuEte2Qo= zmaL+GP-&h)NVcr`vmqK3FR5Z)Ln|Vxj80O4b{_J2Xg?sM*m@q_YT>A&SGU9(&I^fm z5ucXTZFd~1S5#D9(u+hLzJ!ms40xF$onp5=l#aXac1F^5{Qh?IcA<$ZdRVx|E=A7^ zs~c25v5wxdP_O!^pex385}p!2BH@n-?hw37@DqZ&fM~V&<_BVv$SZ)@?DT^GbvV{# zzm*2D=ZYOyya!n;yM^a}ZzNF+RXr8&)3PmEmKq2TRn{a1CB3*8eO3JKyejYXKAT0M zvixI`eF}&cOHE6(i9D=E(I=&a`3BJnD97Stx7YvW2(#h!C@L+Ty}=CBj5*Ylv~K8m zy{s2?@f7mrx}d}sy%*n= 0', @@ -139,8 +125,7 @@ def flow(request): end = EmptyEndEvent() - start.extend(act).extend(eg).connect(act2, act3).to(eg).converge(pg).connect(act4, act5).to(pg).converge(cg).extend( - end) + start.extend(act).extend(eg).connect(act2, act3).to(act2).extend(act4).extend(act5).to(eg).converge(end) # 全局变量 pipeline_data = Data() pipeline_data.inputs['${exe_res}'] = NodeOutput(type=Var.PLAIN, source_act=act.id, source_key='exe_res') diff --git a/applications/utils/__pycache__/dag_helper.cpython-36.pyc b/applications/utils/__pycache__/dag_helper.cpython-36.pyc index d7669bfc980426dde791165a442b95d7e1c76518..c1cb94447119421d9c93734493119fd00932985b 100644 GIT binary patch literal 10480 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 delta 2329 zcma)7U1%It6rMXXJDHhmx|_CXyXjU!(!XtENE?4@8`B^9r$|e+HL@zhcJJ+W)7jbW zok^OM4Ni-!)x+C9IZKbc8eKa=XQtMxN90+>Y1Z_WHTaot93K==XPghr8sb0b`)0 zQTz^EY#)*yCB__e#3(Xb-7$Wcuz`H+1a&UFpi~nw4QuIi zjElGJ66YREK zRWMAN+<}IWdvMmOL8!y(SLZ>VqBdbXjvYbC9C!sw+UiGlbesZ)@ZJ_QJ%DK`u*Du} zcR~&K$Io^m3VN(hOvc7Fu>`H{;!pq%!9#c2ho+V5wZ_aPwLd*|7=zYYPkT}pCOm>b z6O?X9!9`hwVO@q7)ZO&`X^N)4n+W`Pq@)CbaC!Yk5JpmzYO|{!4Yb$PJGx z*{I&A`}In-T=G3AAS(1F{Y$D=KV`;8+g$b|64A|+eBbL*4n396{xObW#116diT*Ay z1-7pLm@IdLxv3@x4@?kYJ=w0SZ#yB;1vm0VX+eYwtG5Twv6Vi^j!o!fm^`C6F|k_> zs~}$~D2t>z=i*XBoRYFG

1e48dQ~t;ka2s>iG4D7FJ}gB~V{lUj7RXwWiDhPG2o zQn7PI)@zVxl%uBdHoY}M+*!i?(O8KT-&Ox?`imwIdXHihUDyEB7eN$KS9=Edp)*|( zfmm$FnGe;@A@5KJbWP3nC}cV~ZMqcLQTC4ddT8<}sYx?nEtLFuI8B}g4uC{w*?O&y z!1Z>C)gU@VkJA4|c?|zkNjskeUp|j!5=`vAio1~D|JkHFuyPn; z@2ar5c;&KlFbkwEo+lEYLph-y z6zg_xXWStGlm&DgfhEFh44 K(~Q0bEdK@P`_}FN diff --git a/applications/utils/dag_helper.py b/applications/utils/dag_helper.py index 357bcc8..a862588 100644 --- a/applications/utils/dag_helper.py +++ b/applications/utils/dag_helper.py @@ -1,6 +1,10 @@ from collections import OrderedDict, defaultdict from copy import copy, deepcopy +from applications.flow.models import Process, Node +from bamboo_engine.builder import EmptyStartEvent, EmptyEndEvent, ExclusiveGateway, ServiceActivity, Var, builder, Data, \ + ParallelGateway, ConvergeGateway, ConditionalParallelGateway + class DAG(object): """ Directed acyclic graph implementation. """ @@ -195,10 +199,73 @@ def instance_dag(dag_dict, process_run_uuid): new_dag_dict = defaultdict(list) for k, v_list in dag_dict.items(): for v in v_list: - new_dag_dict[process_run_uuid[k]].append(process_run_uuid[v]) + new_dag_dict[process_run_uuid[k].id].append(process_run_uuid[v].id) return dict(new_dag_dict) +class PipelineBuilder: + def __init__(self, process_id): + self.process_id = process_id + self.process = Process.objects.filter(id=process_id).first() + self.node_map = Node.objects.filter(process_id=process_id).in_bulk(field_name="uuid") + self.dag_obj = self.setup_dag() + self.instance = self.setup_instance() + + def setup_instance(self): + pipeline_instance = {} + for p_id, node in self.node_map.items(): + if node.node_type == Node.START_NODE: + pipeline_instance[p_id] = EmptyStartEvent() + elif node.node_type == Node.END_NODE: + pipeline_instance[p_id] = EmptyEndEvent() + elif node.node_type == Node.CONDITION_NODE: + pipeline_instance[p_id] = ExclusiveGateway( + conditions={ + 0: '1==0', + 1: '0==0' + }, + name='act_2 or act_3' + ) + elif node.node_type == Node.PARALLEL_NODE: + pipeline_instance[p_id] = ParallelGateway() + elif node.node_type == Node.CONVERGE_NODE: + pipeline_instance[p_id] = ConvergeGateway() + elif node.node_type == Node.CONDITION_PARALLEL_NODE: + pipeline_instance[p_id] = ConditionalParallelGateway( + conditions={ + 0: '1==0', + 1: '1==1', + 2: '2==2' + }, + name='[act_2] or [act_3 and act_4]' + ) + else: + act = ServiceActivity(component_code="http_request") + act.component.inputs.inputs = Var(type=Var.PLAIN, value=node.inputs) + pipeline_instance[p_id] = act + return pipeline_instance + + def setup_dag(self): + dag_obj = DAG() + dag_obj.from_dict(self.process.dag) + return dag_obj + + def get_inst(self, p_id): + return self.instance.get(p_id) + + def get_inst_list(self, p_ids): + return [self.instance.get(p_id) for p_id in p_ids] + + def build(self): + start = self.dag_obj.ind_nodes()[0] + for _in, out_list in self.dag_obj.graph.items(): + for _out in out_list: + self.get_inst(_in).extend(self.get_inst(_out)) + pipeline_data = Data() + pipeline = builder.build_tree(self.get_inst(start), data=pipeline_data) + return pipeline + + if __name__ == '__main__': dag = DAG() dag.add_node("a") diff --git a/dj_flow/__pycache__/urls.cpython-36.pyc b/dj_flow/__pycache__/urls.cpython-36.pyc index 30ae917aa13c05caa47babf916a4df08265752cd..118159b824c1569bc6884e0dd08c823f8fe83a37 100644 GIT binary patch delta 262 zcmcb`F_%->n3tDp5}QYo3=0FpV+JI^4rDt3adF2)WqZFA#uT<3?p&TI9!7>#mK63> zrYznpzGfyMnNEGcZMOj+DnJk3l%HhU@; znC3`jO=Sm)F@kxVKpqE#m(CK!o5B^$pvk>)!)m6<$;^t(ewuufdzd3kc~i3D({l35 z^~y3+%ZrOZ_S|AA&MZm2#Zp?7Q+$gXNERfPl%y8r6|ZC{;seST@l7^o@e>gMGFcdT Q7zKckhna_wgOQIB062gxb^rhX diff --git a/dj_flow/urls.py b/dj_flow/urls.py index 699f0cc..5256afc 100644 --- a/dj_flow/urls.py +++ b/dj_flow/urls.py @@ -16,6 +16,7 @@ Including another URLconf from django.contrib import admin from django.urls import path, include from applications.flow.urls import flow_router, node_router +from applications.flow.views import flow from dj_flow.views import index urlpatterns = [ @@ -23,5 +24,6 @@ urlpatterns = [ path('', index), path("process/", include(flow_router.urls)), path("node/", include(node_router.urls)), + path("tt/", flow), ] diff --git a/web/src/views/job_flow_mgmt/single_job_flow.vue b/web/src/views/job_flow_mgmt/single_job_flow.vue index 38b6539..e82f75f 100644 --- a/web/src/views/job_flow_mgmt/single_job_flow.vue +++ b/web/src/views/job_flow_mgmt/single_job_flow.vue @@ -297,9 +297,11 @@ }, // 处理渲染,true为详情方式渲染,false为编辑或新增方式渲染 handleRender(detail) { + console.log('handlerender') this.mainLoading = true const _this = this setTimeout(() => { + console.log('handlerender2222') const data = { edges: _this.jobFlowFrom.pipeline_tree.lines.map(line => { const item = { @@ -326,7 +328,7 @@ lineWidth: 1, r: 24 } - } else if (node.type === 4 || node.type === 5) { + } else if (node.type === '4' || node.type === 5) { style = { fill: '#fff', stroke: '#DCDEE5', @@ -354,7 +356,7 @@ x: node.left, y: node.top, nodeType: node.type, - type: (node.type === 0 || node.type === 1 || node.type === 4) ? 'circle-node' : 'rect-node', + type: (node.type === 0 || node.type === 1 || node.type === '4') ? 'circle-node' : 'rect-node', labelCfg: { style: { textAlign: (node.type === 0 || node.type === 1) ? 'center' : 'left' diff --git a/web/src/views/job_flow_mgmt/single_job_flow/preFlowCanvas.vue b/web/src/views/job_flow_mgmt/single_job_flow/preFlowCanvas.vue index baa7c2d..8de4ae4 100644 --- a/web/src/views/job_flow_mgmt/single_job_flow/preFlowCanvas.vue +++ b/web/src/views/job_flow_mgmt/single_job_flow/preFlowCanvas.vue @@ -99,6 +99,7 @@ }) }, handleRender(detail) { + console.log('pre render') this.mainLoading = true const _this = this setTimeout(() => { diff --git a/web/src/views/job_flow_mgmt/single_job_flow/taskMake.vue b/web/src/views/job_flow_mgmt/single_job_flow/taskMake.vue index 5f75e19..7029962 100644 --- a/web/src/views/job_flow_mgmt/single_job_flow/taskMake.vue +++ b/web/src/views/job_flow_mgmt/single_job_flow/taskMake.vue @@ -84,24 +84,24 @@ 'id': 46, 'creator': 'product', 'name': '并行网关', - 'type': 4, - 'nodeType': 4, + 'type': 6, + 'nodeType': 6, 'icon': 'e6d9' }, { 'id': 47, 'creator': 'product', 'name': '汇聚网关', - 'type': 4, - 'nodeType': 4, + 'type': 5, + 'nodeType': 5, 'icon': 'e6d9' }, { 'id': 48, 'creator': 'product', 'name': '条件并行网关', - 'type': 4, - 'nodeType': 4, + 'type': 7, + 'nodeType': 7, 'icon': 'e6d9' } ]