From f087279d5ea91145fc92128274345870442950ef Mon Sep 17 00:00:00 2001 From: qinoy Date: Thu, 25 May 2023 17:52:10 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E7=AB=AF=E5=88=B0=E7=AB=AF=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=20=E8=8A=82=E7=82=B9=E5=B1=95=E5=BC=80=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E4=BB=A3=E7=A0=81=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...oft.apps.coe.method.process.subprocess.jar | Bin 42555 -> 45688 bytes .../process.subprocess/diagram.schema.tpl | 2 +- .../subprocess/SubProcessController.java | 20 ++--- .../graph/GraphNodeExpandHandle.java | 59 +++++++++++++ .../process/subprocess/web/SubProcessWeb.java | 59 ++++++++++++- .../action.xml | 4 + .../extend/css/subprocess/iconfont.css | 35 ++++++++ .../extend/css/subprocess/iconfont.js | 1 + .../extend/css/subprocess/iconfont.json | 44 ++++++++++ .../extend/css/subprocess/iconfont.ttf | Bin 0 -> 2732 bytes .../extend/css/subprocess/iconfont.woff | Bin 0 -> 1676 bytes .../extend/css/subprocess/iconfont.woff2 | Bin 0 -> 1192 bytes .../diagraming/designer.method.subprocess.js | 79 ++++++++++++++++++ 13 files changed, 286 insertions(+), 17 deletions(-) create mode 100644 com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/GraphNodeExpandHandle.java create mode 100644 com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/css/subprocess/iconfont.css create mode 100644 com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/css/subprocess/iconfont.js create mode 100644 com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/css/subprocess/iconfont.json create mode 100644 com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/css/subprocess/iconfont.ttf create mode 100644 com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/css/subprocess/iconfont.woff create mode 100644 com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/css/subprocess/iconfont.woff2 create mode 100644 com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.method.subprocess.js diff --git a/com.actionsoft.apps.coe.method.process.subprocess/lib/com.actionsoft.apps.coe.method.process.subprocess.jar b/com.actionsoft.apps.coe.method.process.subprocess/lib/com.actionsoft.apps.coe.method.process.subprocess.jar index 75f32ca81b0b7de5066cc54da629bdb0479514da..72c830fe5caea16db3db67e389992bc930313b40 100644 GIT binary patch delta 12458 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 z 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 diff --git a/com.actionsoft.apps.coe.method.process.subprocess/method/process.subprocess/diagram.schema.tpl b/com.actionsoft.apps.coe.method.process.subprocess/method/process.subprocess/diagram.schema.tpl index 67a1fa03..7c15a6fa 100644 --- a/com.actionsoft.apps.coe.method.process.subprocess/method/process.subprocess/diagram.schema.tpl +++ b/com.actionsoft.apps.coe.method.process.subprocess/method/process.subprocess/diagram.schema.tpl @@ -546,7 +546,7 @@ path:[ {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"roundRectangle"}} ]}); -Schema.addShape({name:"scopeLimitation", title:"", text:"", category:"process_subprocess", groupName:"", props:{w:100, h:70}, +Schema.addShape({name:"scopeLimitation", title:"展开范围标注", text:"", category:"process_subprocess", groupName:"", props:{w:100, h:70}, fillStyle:{type:"none"}, path:[ {lineStyle:{lineWidth:1, lineStyle:"dashed",lineColor:"184,184,184"}, actions:{ref:"roundRectangle"}}, diff --git a/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/SubProcessController.java b/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/SubProcessController.java index 107ceb96..ca4a35d2 100644 --- a/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/SubProcessController.java +++ b/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/SubProcessController.java @@ -113,20 +113,6 @@ public class SubProcessController { } } - /** - * 生成图->前置处理 - * 前置流程或后置流程是否在所选的范围内 - * @param uc - * @param processIdJsonArr - * @param excludeProcessIdJsonArr - * @return - */ - @Mapping("com.actionsoft.apps.coe.method.process.subprocess.lead_rear_node_pre_handle") - public String vertexPreHandle2(UserContext uc, String processIdJsonArr, String excludeProcessIdJsonArr){ - - return null; - } - /** * 功能->生成图 * @param uc @@ -143,4 +129,10 @@ public class SubProcessController { return ResponseObject.newOkResponse().toString(); } + @Mapping("com.actionsoft.apps.coe.method.process.subprocess.shape_expand") + public String shapeExpand(UserContext uc, String repositoryId, String shapeId){ + + return ResponseObject.newOkResponse("展开成功").toString(); + } + } diff --git a/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/GraphNodeExpandHandle.java b/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/GraphNodeExpandHandle.java new file mode 100644 index 00000000..be455b1c --- /dev/null +++ b/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/GraphNodeExpandHandle.java @@ -0,0 +1,59 @@ +package com.actionsoft.apps.coe.method.process.subprocess.graph; + +import com.actionsoft.apps.coe.method.process.subprocess.constant.SubProcessConst; +import com.actionsoft.apps.coe.pal.pal.repository.designer.manage.CoeDesignerAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.designer.model.BaseModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.cache.DesignerShapeRelationCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapeRelationModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.ShapeUtil; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.exception.AWSException; +import com.alibaba.fastjson.JSONObject; + +import java.util.List; + +/** + * 图节点展开处理 + */ +public class GraphNodeExpandHandle { + + private String repositoryId; + private String shapeId; + private CoeDesignerAPIManager apiManager; + private String childProcessDefine; + + public GraphNodeExpandHandle(String repositoryId, String shapeId) { + this.repositoryId = repositoryId; + this.shapeId = shapeId; + + apiManager = CoeDesignerAPIManager.getInstance(); + } + + public void readChildProcessDefine() throws AWSException{ + List childProcessModelList = DesignerShapeRelationCache.getListByAttrId(repositoryId, shapeId, SubProcessConst.CHILD_PROCESS); + DesignerShapeRelationModel relationModel = childProcessModelList.stream().findFirst().orElse(null); + if (relationModel == null) + throw new AWSException("未找到当前节点所标识的子流程文件信息"); + String relationFileId = relationModel.getRelationFileId(); + childProcessDefine = apiManager.getChildProcessDefine(repositoryId, 0, relationFileId); + if (UtilString.isEmpty(childProcessDefine)){ // 初次展开 去源文件目录读取 + BaseModel childProcessBaseModel = apiManager.getDefinition(relationFileId, 0); + childProcessDefine = childProcessBaseModel.getDefinition(); + } + } + + /** + * 组装范围限制框 + * @return 范围限制框 + */ + public JSONObject toAssembleScopeLimitationShape(){ + JSONObject scopeLimitationShape = ShapeUtil.getProcessShapeDefinition(SubProcessConst.SUB_PROCESS_METHOD_ID, "展开范围标注"); + JSONObject childProcessDefineObj = JSONObject.parseObject(childProcessDefine); + JSONObject childProcessPage = childProcessDefineObj.getJSONObject("page"); + // 当前节点所标识的子流程文件的 画布宽度与高度 减去边距 + double childProcessPageWidth = childProcessPage.getDoubleValue("width") - childProcessPage.getDoubleValue("padding") * 2; + double childProcessPageHeight = childProcessPage.getDoubleValue("height") - childProcessPage.getDoubleValue("padding") * 2; + + return scopeLimitationShape; + } +} diff --git a/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/web/SubProcessWeb.java b/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/web/SubProcessWeb.java index d8bb5c4a..d98d09ae 100644 --- a/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/web/SubProcessWeb.java +++ b/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/web/SubProcessWeb.java @@ -243,6 +243,15 @@ public class SubProcessWeb extends ActionWeb { return (JSONObject) JSON.toJSON(vertexPreHandle.collectIndependentNode(processIdList)); } + /** + * 生成图 + * @param processIdJsonArr 选择的子流程 + * @param locationId 位置 + * @param direction 排布方向 + * @param modelName 总图名称 + * @param excludeProcessIdArr 过滤的子流程 + * @throws AWSException + */ public void generatorEndToEndModel(String processIdJsonArr, String locationId, String direction, String modelName, String excludeProcessIdArr) throws AWSException{ // 忽略独立的节点 @@ -285,12 +294,58 @@ public class SubProcessWeb extends ActionWeb { CoeProcessLevelDaoFacotory.createCoeProcessLevel().insert(model); GraphRender graphRender = new GraphRender(model, nodeList, graphLayout.getCanvasWidth(), graphLayout.getCanvasHeight()); - // 连线渲染 - graphRender.handShapeLinkerRender(linkers); + // 节点渲染 graphRender.handleShapeNodeRender(position); + // 连线渲染 + graphRender.handShapeLinkerRender(linkers); + + } + public void shapeNodeExpand(String repositoryId, String shapeId){ + + /* + * 以当前节点展开涉及到动作拆分: + * + * 0、判断当前节点是否展开过了,初次展开的话去源文件中找,否则去备份的文件中找 + * + * 1、准备范围限制框元素,该元素坐标与当前被展开的节点坐标一致,宽度与高度与子流程标识的模型画布-边距的宽度、高度一致 + * 同时,子流程标识的模型内的所有元素 以当前被展开的节点坐标为准,下移、右移 被展开节点坐标距离原点的距离 + * + * 2、找到x大于等于、y大于等于当前被展开节点的所有子流程节点,将这些节点下移、右移到范围框之外 + * + * 3、根据与当前节点的连线,找到总图中所有与当前被展开节点的相连的前置节点与后置节点 + * + * 4、将子流程模型备份一份,为后续对展开后的节点做删除等操作 + * + * */ + + // 获取子流程标识的文件存储信息 + List childProcessModelList = DesignerShapeRelationCache.getListByAttrId(repositoryId, shapeId, SubProcessConst.CHILD_PROCESS); + DesignerShapeRelationModel relationModel = childProcessModelList.stream().findFirst().orElse(null); + if (relationModel == null) + throw new AWSException("未找到当前节点所标识的子流程文件信息"); + String relationFileId = relationModel.getRelationFileId(); + CoeDesignerAPIManager apiManager = CoeDesignerAPIManager.getInstance(); + BaseModel childProcessBaseModel = apiManager.getDefinition(relationFileId, 0); + String childProcessDefinition = childProcessBaseModel.getDefinition(); + JSONObject childProcessDefineObj = JSONObject.parseObject(childProcessDefinition); + JSONObject childProcessPage = childProcessDefineObj.getJSONObject("page"); + // 当前节点所标识的子流程文件的 画布宽度与高度 减去边距 + double childProcessPageWidth = childProcessPage.getDoubleValue("width") - childProcessPage.getDoubleValue("padding") * 2; + double childProcessPageHeight = childProcessPage.getDoubleValue("height") - childProcessPage.getDoubleValue("padding") * 2; + + // 获取总图的存储数据 + BaseModel baseModel = CoeDesignerAPIManager.getInstance().getDefinition(repositoryId, 0); + String definition = baseModel.getDefinition(); + JSONObject defineJsonObj = JSONObject.parseObject(definition); + JSONObject elements = defineJsonObj.getJSONObject("elements"); + JSONObject shapeObj = elements.getJSONObject(shapeId); + JSONObject shapeProps = shapeObj.getJSONObject("props"); + // 当前节点的坐标 + double x = shapeProps.getDoubleValue("x"); + double y = shapeProps.getDoubleValue("y"); } diff --git a/com.actionsoft.apps.coe.method.process.subprocess/web/com.actionsoft.apps.coe.method.process.subprocess/action.xml b/com.actionsoft.apps.coe.method.process.subprocess/web/com.actionsoft.apps.coe.method.process.subprocess/action.xml index 5afc1f7f..fd2d64bd 100644 --- a/com.actionsoft.apps.coe.method.process.subprocess/web/com.actionsoft.apps.coe.method.process.subprocess/action.xml +++ b/com.actionsoft.apps.coe.method.process.subprocess/web/com.actionsoft.apps.coe.method.process.subprocess/action.xml @@ -27,4 +27,8 @@ + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/css/subprocess/iconfont.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/css/subprocess/iconfont.css new file mode 100644 index 00000000..e899c001 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/css/subprocess/iconfont.css @@ -0,0 +1,35 @@ +@font-face { + font-family: "iconfont"; /* Project id 3589612 */ + src: url('iconfont.woff2?t=1684980356184') format('woff2'), + url('iconfont.woff?t=1684980356184') format('woff'), + url('iconfont.ttf?t=1684980356184') format('truetype'); +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-zhankaishousuo:before { + content: "\e6cb"; +} + +.icon-ICON-:before { + content: "\e664"; +} + +.icon-icon_list_shouqi:before { + content: "\e61c"; +} + +.icon-quanpingshouqi:before { + content: "\e66f"; +} + +.icon-shuzhuangtu_o:before { + content: "\ebb3"; +} + diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/css/subprocess/iconfont.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/css/subprocess/iconfont.js new file mode 100644 index 00000000..e3fe5b58 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/css/subprocess/iconfont.js @@ -0,0 +1 @@ +window._iconfont_svg_string_3589612='',function(l){var t=(t=document.getElementsByTagName("script"))[t.length-1],e=t.getAttribute("data-injectcss"),t=t.getAttribute("data-disable-injectsvg");if(!t){var a,i,n,o,c,h=function(t,e){e.parentNode.insertBefore(t,e)};if(e&&!l.__iconfont__svg__cssinject__){l.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(t){console&&console.log(t)}}a=function(){var t,e=document.createElement("div");e.innerHTML=l._iconfont_svg_string_3589612,(e=e.getElementsByTagName("svg")[0])&&(e.setAttribute("aria-hidden","true"),e.style.position="absolute",e.style.width=0,e.style.height=0,e.style.overflow="hidden",e=e,(t=document.body).firstChild?h(e,t.firstChild):t.appendChild(e))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(a,0):(i=function(){document.removeEventListener("DOMContentLoaded",i,!1),a()},document.addEventListener("DOMContentLoaded",i,!1)):document.attachEvent&&(n=a,o=l.document,c=!1,s(),o.onreadystatechange=function(){"complete"==o.readyState&&(o.onreadystatechange=null,d())})}function d(){c||(c=!0,n())}function s(){try{o.documentElement.doScroll("left")}catch(t){return void setTimeout(s,50)}d()}}(window); \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/css/subprocess/iconfont.json b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/css/subprocess/iconfont.json new file mode 100644 index 00000000..5969f973 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/css/subprocess/iconfont.json @@ -0,0 +1,44 @@ +{ + "id": "3589612", + "name": "炎黄", + "font_family": "iconfont", + "css_prefix_text": "icon-", + "description": "", + "glyphs": [ + { + "icon_id": "1057312", + "name": "展开收缩", + "font_class": "zhankaishousuo", + "unicode": "e6cb", + "unicode_decimal": 59083 + }, + { + "icon_id": "1760316", + "name": "收起", + "font_class": "ICON-", + "unicode": "e664", + "unicode_decimal": 58980 + }, + { + "icon_id": "14197982", + "name": "收起", + "font_class": "icon_list_shouqi", + "unicode": "e61c", + "unicode_decimal": 58908 + }, + { + "icon_id": "29519761", + "name": "全屏收起", + "font_class": "quanpingshouqi", + "unicode": "e66f", + "unicode_decimal": 58991 + }, + { + "icon_id": "5388006", + "name": "树状图_o", + "font_class": "shuzhuangtu_o", + "unicode": "ebb3", + "unicode_decimal": 60339 + } + ] +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/css/subprocess/iconfont.ttf b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/css/subprocess/iconfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..bb97297b93fb179dd175616b0ff00cab84af2a8f GIT binary patch literal 2732 zcmd^BZ)j6j6hG&^m!x@3)Ar>xZES2~ViIUwV$(Do&Oc+$x((5xwx2e-G|fMkT7dF^3FL{)T7WZ+nI|h82fI!) zu1F6+L#K_EL|6}-fqQXm$6jz2l4=Q7u^{xu>>tHg$Y+z}->^iIF)0!UX&r+r2!O|d z^2fc$v5XuuW}Jr@k|hTgp14nFuV%JQ!))CAF(CHh-Z(d09@8meG*3n-5!sBOl0CM7Hn$ zdvoXs*kPuDvQqaNozx$7?3G3I4&T2D%!RUGo0mk41EaT_+H+j_0GOv-N zZaS&p8jdC6p+U5D$?jNU6Lz~}qeF>!*y6XY#&F1Q8?ws%81P$V_j5Qp5)a)w;glrj zJ(uK_ZrfMcMG;RqO?0a%;$}(ey2lhx+!94nyRw9Cnp8+tKO|#lwkMKe}bBKZ>Ea>k$FLhXVZdvfV3-Ux{A%qUg0>7G*CHIxRBERguv$ zlW;SaM7dYIB)Ys;M4G%V8hRJLV+=xaug>k2nTW+l@40ykw1Jv2QSEKC2P?VAt3XjASqr;X6I0E<(yT`@b_?s;r zmtYeR9TL~+krCe^(C)C{>1Fc8#tQl3>&xW-*?!@^01JTKE!gf6EjR4g;Sq)VwD3o5 z64&84(%}$j#lEMDFFsxTFV^_k0xKCi-;L}1r+maX-@&kXz}b0TI^u~qn&~m5N zlQ<-bh25aQpW`&>hX90O5TXFV;jX~Q@W`4ja~>h8E6}w>y8>OqNIhtFZgBj@cmrra zhHzlw=0pPqG;Q&wrg7sm-_SJrv39OGAPg*OgRHR-03^6$-rn@e6K#A2*q6p-Vh(K3 zYhs@GeiI9X2TW|C_cUf=EAcm(Sfrh8GjS_`e0st2+$Rn7P^6{YAKBY){aLGhI<%D!|;jpS6dydfH8 z>o9&Kr4(T+R3HsW`umZFY4E`m9HKD~DNvvU8GTeAqj!^b7HUu+%gSTYmDUraU4bg; zF`quVEF*L!t<>61S|wd`Wi(Z~xUy6}m7WaQXULlZMM7g{d})fLK-fnGWU_taCq>#3 zy7ZV;88*-XjxOz|sUOkzSv0>bRCV^B=t<3r9P%ij1+8cU=S(hHdNY}?=9F5srdVFy rx@+e%9jqdgg?v?=Wc>Yk=l)u-uXvwz5l;XoC!Dv05A>6b%O9W`EqZv_Zb@k{gbx{E^*6zpzeIrpCbW#JaA2PkiU@3dOD2;FKAPeDg~8bKj~9XS=ig?%UT-K5C1a!;khk@EF(zz$7iZn)Cl?vVUeAeGmTlwyu`B3WW?CbtNzIv#IQ@f*I zKaGFc)8+V;{s6k&A}(wo8Bf>WU;i$(J+b21YMkZw7@~40My1}wE?cBI>q&=~^Sg$S z^mWIqm0tgIO4SeG*cl{NSSUGRwD7ouBf-bHd#TFYq9uxiGbzz1<)eQAXmbSCn z9l5_)-rP+uY;arlz46Gjd!fqhY)PntAI-VP9{ivrBd(GULXk6u-RI-PO=?wTur>5E~&2@E_2${LwOB6Xz0 zU<|+zO7B*A0yki>ux8l$*1!CBj!D!45L5v0)2@A}OblkTBSj6^*$Zoi=DC6+(Q;QE zZfOS}DctW>X%`-7v0qoQAtcuL-1_F0y5!dr%|D;BAr3o!e4Vd1tMP&npG{v>}D%RB1IcqOsL>$R~6n;y)Uz31B?# zsa#09zCzLSep%!E$UdadKOtklch?L5G3w2fwmHY0H9bWh+N|1{(dxdUChU1J(|W#T zOfcuh(8Z9-@La0MoqT1_jOGUzKab-~`dYyP%Kqx7;hPEGbIm<9#uvHPaOS{grmc_V ztivB)w+fl}O<*33?k&o+6Q1ioNokng<~;sgP3ADd^2={A?8dw0dZ|8r{0-P>UQE!| z{Zi5ZYqj6ft_gU8LIGEhFSsTs=6rv^6mR2%mmD(vu~BMQ`qR)8rFW2tt>aM}7juc! p%*gEX0!7f-qJkiP;n&!yr5$u(U>LxCe9CKP+0Xze!0gfi{sQs2&shKf literal 0 HcmV?d00001 diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/css/subprocess/iconfont.woff2 b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/css/subprocess/iconfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..bafda04365f2359655a99df57f3244dc292db285 GIT binary patch literal 1192 zcmV;Z1XufaPew8T0RR9100gK23jhEB01B)C00dkB0RR9100000000000000000000 z0000SR0d!GgGdU8bcRR)HUcCA7z+*n1Rw>3X9si}FbPpqPcmdb4sx=S6;7iHDZG6a ziUk`Qr|A(yYi0GoKBEefB*&nlqnOqO&BrBOYXtEYPLp{~{>FKu^SaCt&S z#+Heh;z_aNo-tpx#Z~l@e!{q;K)-HDS(slaT&P)i^ku)(Atup0pjY%&XlY!VAKYzhmH*aZLgJ5R(TYJf=I53E`NhtpHpc*X+qCI>$=359#DgFJ>Snxir<>M}W0hLVZp#VPyg3ro{ZP6hg+13|)>)D8D5r4I7Jm&%a%zj6=MPD2OushrI{Ct&LyV&qw7R0Oq7i)`^v-2)z zmWzK|IJe;|=V!GMd3PCtjdL|85c)*Mr-%)JE`B{M8$;I>e1>o~g#5=)3~9kIltL|Z zs1qtdo0-uNK<7NYGR(%SALmWONC5J>0e-^Y1D~1(^K-1y|8+AP1^gSmU0_28i`?=F zDpeMIu*ypn5sMt8DWv}93W3H)J&)5yuRg>V>KXOhm1?ZA!aqVa7DCcx4zg~mPzARM zsy@4*(QO~}+U($TpE1UmC_Px`13(z|3CW=EkPZ7r72FS0lm4JF>>qkvjDhR=tc!Bb zQqELi@rJ6@y)e}5PI^nyx4F%VK9Y3`hA|1_WcrADvTf{e&oX5eD6H=AkbWGstwv+@ zkV+0~X0sYag7hL`sXN$XksKoxRCt4wlGYP8GRME(Eh2fXoUMp@v{?@G(c~x*iYuUw z6n&+>6PfKilTwTcyh^aN4my-=q}3A|GUP==q{KpXgP5@@LP(;jA{<`To#HX*r9Dd% zDRPvk(L|TQM|IvexpKAk&g+RIdsmmi@^0h}TIF~^TK1$CZ~DA9s+Upef@AaVbuwSF GA7}u8A|%ED literal 0 HcmV?d00001 diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.method.subprocess.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.method.subprocess.js new file mode 100644 index 00000000..fc7fc945 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.method.subprocess.js @@ -0,0 +1,79 @@ +$(function(){ + // 1. 子流程展开 事件:获取当前子流程所代表的模型文件 + (function (Model, ruuid, sid) { + const subProcess = new SubProcess(Model, ruuid, sid); + subProcess.shapeIconRender(); + + $('.shape_box.linker_box').css({ + 'pointer-events': 'none' + }); + + })(Model, ruuid, sid); +}); + +class SubProcess { + // 构造函数 + constructor(Model, ruuid, sid){ + this.Model = Model; + this.repositoryId = ruuid; + this.sid = sid; + } + + // 图形图标渲染 并绑定节点展开或者关闭事件 + shapeIconRender(){ + let elements = this.Model.define.elements; + for (let shapeId in elements) { + let shape = elements[shapeId]; + if (shape.name == 'linker') continue; // 当前元素为连线的话 直接略过 + if (shape.name == 'subProcess') { // 当前元素为子流程节点 渲染展开图标 并绑定展开事件 + let expandIcon = ""; + $('#'+shapeId).append(expandIcon); + $('#icon_'+shapeId).on('click', '', {shapeId: shapeId, Model: this.Model, repositoryId: this.repositoryId, sid: this.sid}, this.shapeExpand); + }else { // 当前元素为虚线范围限制框的话 渲染关闭图标 并绑定关闭事件 + let closeIcon = ""; + $('#'+shapeId).append(closeIcon); + $('#icon_'+shapeId).on('click', '', {shapeId: shapeId, Model: this.Model, repositoryId: this.repositoryId, sid: this.sid}, this.shapeClose); + } + } + } + + // 节点展开事件 + shapeExpand(event){ + let param = event.data; + alert('节点展开事件 ' + param.Model.define.elements[event.data.shapeId].text); + // 1、同时只能支持一个子流程节点展开 + let elements = param.Model.define.elements; + for (let key in elements) { + let shape = elements[key]; + if (shape.name == 'linker') continue; + if (shape.name == 'scopeLimitation') { + $.simpleAlert("同一时间仅支持一个子流程节点展开", "warning"); + return; + } + } + // 2、传递当前模型文件ID、子流程节点ID + awsui.ajax.request({ + url: './jd', + method: 'POST', + data: { + cmd: 'com.actionsoft.apps.coe.method.process.subprocess.shape_expand', + sid: param.sid, + repositoryId: param.repositoryId, + shapeId: param.shapeId + }, + ok: function(r){ + console.log(r); + }, + err: function(r){ + $.simpleAlert(r.msg); + } + }); + // 3、刷新当前画布 + } + + // 节点关闭事件 + shapeClose(event){ + console.log('sss') + } +} + From b6c23fdcfe7bddc62e2e23040523f48df214e0fa Mon Sep 17 00:00:00 2001 From: yhyd Date: Fri, 26 May 2023 17:37:57 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E7=AB=AF=E5=88=B0=E7=AB=AF=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=20=E8=8A=82=E7=82=B9=E5=B1=95=E5=BC=80=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E4=BB=A3=E7=A0=81=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...oft.apps.coe.method.process.subprocess.jar | Bin 45688 -> 40922 bytes .../graph/ForceDirectedGraphLayout.java | 131 ------------ .../graph/GraphNodeExpandHandle.java | 80 ++++++- .../subprocess/graph/PageRankLayout.java | 197 ------------------ .../designer/dao/CoeDesignerDefaultDao.java | 30 +++ .../designer/io/file/CoeDesignerFile.java | 81 +++++++ .../manage/CoeDesignerAPIManager.java | 14 ++ .../page/pal.pl.repository.designer.htm | 2 + .../diagraming/designer.method.subprocess.js | 3 + 9 files changed, 203 insertions(+), 335 deletions(-) delete mode 100644 com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/ForceDirectedGraphLayout.java delete mode 100644 com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/PageRankLayout.java diff --git a/com.actionsoft.apps.coe.method.process.subprocess/lib/com.actionsoft.apps.coe.method.process.subprocess.jar b/com.actionsoft.apps.coe.method.process.subprocess/lib/com.actionsoft.apps.coe.method.process.subprocess.jar index 72c830fe5caea16db3db67e389992bc930313b40..c4d5d81f7d1b0db0d0f78631de8f1bac9035da93 100644 GIT binary patch delta 3722 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 Ts^Vk9La-1ABn09L{80P{LCaqA delta 8346 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 childProcessModelList = DesignerShapeRelationCache.getListByAttrId(repositoryId, shapeId, SubProcessConst.CHILD_PROCESS); DesignerShapeRelationModel relationModel = childProcessModelList.stream().findFirst().orElse(null); if (relationModel == null) throw new AWSException("未找到当前节点所标识的子流程文件信息"); - String relationFileId = relationModel.getRelationFileId(); + relationFileId = relationModel.getRelationFileId(); childProcessDefine = apiManager.getChildProcessDefine(repositoryId, 0, relationFileId); if (UtilString.isEmpty(childProcessDefine)){ // 初次展开 去源文件目录读取 BaseModel childProcessBaseModel = apiManager.getDefinition(relationFileId, 0); @@ -43,10 +52,22 @@ public class GraphNodeExpandHandle { } /** - * 组装范围限制框 - * @return 范围限制框 + * 读取当前总图的存储信息 + * @throws AWSException */ - public JSONObject toAssembleScopeLimitationShape(){ + public void readCurrentProcessDefine() throws AWSException{ + BaseModel baseModel = apiManager.getDefinition(repositoryId, 0); + if (baseModel == null) + throw new AWSException("未找到当前总图存储的模型信息"); + endToEndProcessDefine = baseModel.getDefinition(); + } + + /** + * 组装范围标注框 + * @return 范围标注框 + * @throws AWSException + */ + public JSONObject toAssembleScopeLimitationShape() throws AWSException{ JSONObject scopeLimitationShape = ShapeUtil.getProcessShapeDefinition(SubProcessConst.SUB_PROCESS_METHOD_ID, "展开范围标注"); JSONObject childProcessDefineObj = JSONObject.parseObject(childProcessDefine); JSONObject childProcessPage = childProcessDefineObj.getJSONObject("page"); @@ -54,6 +75,51 @@ public class GraphNodeExpandHandle { double childProcessPageWidth = childProcessPage.getDoubleValue("width") - childProcessPage.getDoubleValue("padding") * 2; double childProcessPageHeight = childProcessPage.getDoubleValue("height") - childProcessPage.getDoubleValue("padding") * 2; + JSONObject endToEndProcessDefineObj = JSONObject.parseObject(endToEndProcessDefine); + JSONObject elements = endToEndProcessDefineObj.getJSONObject("elements"); + // 找到当前要展开的子流程节点 + JSONObject currentExpandShape = elements.getJSONObject(shapeId); + if (currentExpandShape == null) + throw new AWSException("未找到当前要展开的子流程节点信息"); + JSONObject props = currentExpandShape.getJSONObject("props"); + double x = props.getDoubleValue("x"); + double y = props.getDoubleValue("y"); + // 当前要展开的子流程节点的坐标赋给范围标注框 + JSONObject scopeShapeProps = scopeLimitationShape.getJSONObject("props"); + scopeShapeProps.put("x", x); + scopeShapeProps.put("y", y); + scopeShapeProps.put("w", childProcessPageWidth); + scopeShapeProps.put("h", childProcessPageHeight); + scopeShapeProps.put("zindex", 1); return scopeLimitationShape; } + + /** + * 处理子流程中所有节点的坐标 + */ + public void handleRelationModelNodePosition(){ + + // 范围标注框 坐标 + JSONObject scopeLimitationShape = toAssembleScopeLimitationShape(); + JSONObject scopeShapeProps = scopeLimitationShape.getJSONObject("props"); + double scopeShapeX = scopeShapeProps.getDoubleValue("x"); + double scopeShapeY = scopeShapeProps.getDoubleValue("y"); + + // 根据范围标注框的坐标 调整子流程所有元素的坐标 + JSONObject childProcessDefineObj = JSONObject.parseObject(childProcessDefine); + JSONObject elements = childProcessDefineObj.getJSONObject("elements"); + for (String key : elements.keySet()) { + JSONObject ele = elements.getJSONObject(key); + + } + } + + /** + * 存储子流程模型信息 + * 在总图存储的同一级目录下 + */ + public void storeChildProcessDefine(){ + BaseModel baseModel = apiManager.getDefinition(relationFileId, 0); + apiManager.storeChildProcessDefine(baseModel, relationFileId, childProcessDefine); + } } diff --git a/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/PageRankLayout.java b/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/PageRankLayout.java deleted file mode 100644 index d06687cd..00000000 --- a/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/PageRankLayout.java +++ /dev/null @@ -1,197 +0,0 @@ -package com.actionsoft.apps.coe.method.process.subprocess.graph; - -import java.util.Arrays; - -/** - * 图模型节点布局 - * 采用 PageRank 算法 - * @author oYang - * @create 2023-05-16 11:10 - */ -public class PageRankLayout { - - private int[][] matrix; // 邻接矩阵 - private double width; // 画布宽度 - private double height; // 画布高度 - private int maxIter; // 最大迭代次数 - private double damp; // 阻尼因子 - private int nodeSize; // 节点数 - private double[] pageRankVal; // PageRank数据 - private final double shapeInterval = 80.0; // 图形节点在画布上的间隔 - private final double nodeW = 100.0; // 图形节点默认宽度 - private final double nodeH = 70.0; // 图形节点默认高度 - - public PageRankLayout(int[][] matrix, int maxIter) { - this.matrix = matrix; - this.maxIter = maxIter; - this.damp = 0.85; - this.nodeSize = matrix.length; - this.pageRankVal = new double[nodeSize]; - - this.width = matrix.length * (shapeInterval + nodeW); - this.height = matrix.length * (shapeInterval + nodeH); - - // 初始化每个节点的 PageRank 值为 1/N - Arrays.fill(pageRankVal, 1.0/nodeSize); - } - - /** - * 计算每个节点的入度加权平均值 - */ - public void calculatePageRankVal(){ - for (int iter = 0; iter < maxIter; iter++) { - double[] nextPR = new double[nodeSize]; - for (int i = 0; i < nodeSize; i++) { - double sum = 0.0; - for (int j = 0; j < nodeSize; j++) { - if (matrix[j][i] == 1) { - sum += pageRankVal[j] / countOutLinks(j); - } - } - nextPR[i] = (1 - damp) / nodeSize + damp * sum; - } - pageRankVal = nextPR; - } - // 输出结果 - for (int i = 0; i < nodeSize; i++) { - System.out.printf("Node %d: PageRank = %.3f\n", i, pageRankVal[i]); - } - } - - - /** - * 根据节点邻接矩阵计算节点的出度 - * @param nodeIndex - * @return - */ - private int countOutLinks(int nodeIndex){ - int count = 0; - for (int i = 0; i < matrix[nodeIndex].length; i++) { - if (matrix[nodeIndex][i] == 1) { - count++; - } - } - return count; - } - - /** - * 根据节点邻接矩阵计算节点入度 - * @param nodeIndex - * @return - */ - private int countInputLinks(int nodeIndex){ - int count = 0; - for (int i = 0; i < matrix.length; i++) { - if (matrix[i][nodeIndex] == 1){ - count++; - } - } - return count; - } - - private void layOut(){ - int n = pageRankVal.length; - // 计算 PageRank 值最大的节点,将该节点定位在画布的中心 - int maxIndex = 0; - double maxPageRank = pageRankVal[0]; - for (int i = 1; i < n; i++) { - if (pageRankVal[i] > maxPageRank) { - maxIndex = i; - maxPageRank = pageRankVal[i]; - } - } - double centerX = width / 2; - double centerY = height / 2; - - // 计算其它节点相对于最大节点的 PageRank 值的比例关系,以及节点数量的平方根 - double scale = Math.sqrt(n); - double[] distX = new double[n]; - double[] distY = new double[n]; - for (int i = 0; i < n; i++) { - if (i == maxIndex) { - distX[i] = 0; - distY[i] = 0; - } else { - double ratio = pageRankVal[i] / pageRankVal[maxIndex]; - distX[i] = ratio * Math.cos(2 * Math.PI * i / n); - distY[i] = ratio * Math.sin(2 * Math.PI * i / n); - } - } - - // 将节点的 PageRank 值乘以比例关系和节点数量的平方根,得到节点在横向和竖向上的缩放比例 - double[] scaleX = new double[n]; - double[] scaleY = new double[n]; - for (int i = 0; i < n; i++) { - scaleX[i] = distX[i] * scale; - scaleY[i] = distY[i] * scale; - } - - // 将横向和竖向上的缩放比例分别乘以画布的宽度和高度,得到节点在画布上的实际坐标 - double[] x = new double[n]; - double[] y = new double[n]; - for (int i = 0; i < n; i++) { - x[i] = centerX + (int)(scaleX[i] * 200); - y[i] = centerY + (int)(scaleY[i] * 200); - } - - for (int i = 0; i < nodeSize; i++) { - System.out.printf("NodeIndex %d: Position [%f%n,%f%n]", i, x[i], y[i]); - } - } - - /** - * 根据节点 PageRank 值计算节点坐标 - * - * @param pageRank 节点 PageRank 值 - * @param canvasWidth 画布宽度 - * @param canvasHeight 画布高度 - * @return 节点坐标数组,每个点都是 (x, y) 形式 - */ - public double[][] computeNodeCoordinates() { - int n = pageRankVal.length; - double[][] nodeCoords = new double[n][2]; - - double maxPageRank = Double.NEGATIVE_INFINITY; - for (double x : pageRankVal) { - maxPageRank = Math.max(maxPageRank, x); - } - - double centerX = width / 2.0; - double centerY = height / 2.0; - double radius = Math.min(centerX, centerY) - 50; // 保留一些边距避免节点被切掉 - for (int i = 0; i < n; i++) { - double angle = 2 * Math.PI * i / n; - double x = centerX + (pageRankVal[i] / maxPageRank) * radius * Math.cos(angle); - double y = centerY + (pageRankVal[i] / maxPageRank) * radius * Math.sin(angle); - nodeCoords[i][0] = x; - nodeCoords[i][1] = y; - } - - return nodeCoords; - } - - - public static void main(String[] args) { - // 生成邻接矩阵 - int[][] matrix = { - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - }; - PageRankLayout pageRankLayout = new PageRankLayout(matrix, 100); - pageRankLayout.calculatePageRankVal(); - double[][] nodeCoords = pageRankLayout.computeNodeCoordinates(); - - // 输出每个节点在直角坐标系中的坐标 - for (int i = 0; i < nodeCoords.length; i++) { - System.out.printf("(%.2f, %.2f)\n", nodeCoords[i][0], nodeCoords[i][1]); - } - } -} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/dao/CoeDesignerDefaultDao.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/dao/CoeDesignerDefaultDao.java index c1df89c8..f56010ac 100755 --- a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/dao/CoeDesignerDefaultDao.java +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/dao/CoeDesignerDefaultDao.java @@ -47,6 +47,18 @@ public class CoeDesignerDefaultDao { return CoeDesignerConstant.ANSWER_SUCESS; } + /** + * 存储子流程文件信息 + * @param model + * @param childProcessId + * @param childProcessDefine + */ + public void storeChildProcess(BaseModel model, String childProcessId, String childProcessDefine){ + storer = new CoeDesignerFile(model); + final CoeDesignerFile storerModel = storer; + storerModel.store(childProcessId, childProcessDefine); + } + /** * 将操作记入日志 */ @@ -148,6 +160,24 @@ public class CoeDesignerDefaultDao { return model; } + /** + * 端到端功能 + * 获取与总图存放在一起的展开过的子流程模型信息 + * @param uuid + * @param ver + * @param childProcessId + * @return + */ + public String get(String uuid, int ver, String childProcessId){ + BaseModel baseModel = CoeDesignerUtil.createModel(uuid, ver); + storer = new CoeDesignerFile(baseModel); + String define = storer.readChildProcessDefinition(childProcessId); + if (UtilString.isEmpty(define)){ + return ""; + } + return define; + } + /** * @Deprecated * @param model diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/io/file/CoeDesignerFile.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/io/file/CoeDesignerFile.java index 2e15e150..1169724b 100755 --- a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/io/file/CoeDesignerFile.java +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/io/file/CoeDesignerFile.java @@ -58,6 +58,23 @@ public class CoeDesignerFile { return JSONArray.parseArray(JSON.toJSONString(list)); } + /** + * 保存子流程文件 + * @param childProcessId + * @param childProcessDefine + * @throws AWSException + */ + public void store(String childProcessId, String childProcessDefine) throws AWSException{ + checkChildProcessFile(childProcessId); + String childProcessPathName = getChildProcessPathName(childProcessId); + UtilFile childProcessDefineFile = new UtilFile(childProcessPathName); + try { + childProcessDefineFile.write(childProcessDefine.getBytes("UTF8")); + } catch (UnsupportedEncodingException e) { + throw new AWSException("子流程文件保存失败"); + } + } + /** * 读取define * @@ -74,6 +91,22 @@ public class CoeDesignerFile { return define; } + /** + * 端到端功能 + * 读取与总图存放在一起的展开过的子流程模型 define 信息 + * @param childProcessId + * @return + */ + public String readChildProcessDefinition(String childProcessId){ + if (!childProcessIsExist(childProcessId)){ + return ""; + } + String childProcessPath = getChildProcessPathName(childProcessId); + UtilFile utilFile = new UtilFile(childProcessPath); + String define = utilFile.readStrUTF8(); + return define; + } + /** * 读取draw * @@ -154,6 +187,26 @@ public class CoeDesignerFile { } + /** + * 子流程文件不存在 创建 + * @param childProcessId + * @throws AWSException + */ + protected void checkChildProcessFile(String childProcessId) throws AWSException{ + File dir = new File(model.getPath()); + if (!dir.exists()) { + dir.mkdirs(); + } + UtilFile utilFile = new UtilFile(getChildProcessPathName(childProcessId)); + if (!utilFile.exists()){ + try { + utilFile.createNewFile(); + } catch (IOException e) { + throw new AWSException("子流程文件创建失败"); + } + } + } + /** * 获取文件存放路径名 * @@ -168,6 +221,16 @@ public class CoeDesignerFile { return model.getPath() + model.getUUID() + _ver + type; } + /** + * 端到端功能 + * 获取与总图存放在一起的展开过的子流程模型信息 + * @param childProcessId + * @return + */ + public String getChildProcessPathName(String childProcessId){ + return model.getPath() + childProcessId; + } + /** * 获取文件存放路径名 * @@ -195,6 +258,24 @@ public class CoeDesignerFile { return true; } + /** + * 端到端功能 + * 判断与总图存放在一起的展开过的子流程模型文件是否存在 + * @param childProcessId + * @return + */ + public boolean childProcessIsExist(String childProcessId){ + File dir = new File(model.getPath()); + if (!dir.exists()){ + dir.mkdirs(); + } + UtilFile utilFile = new UtilFile(getChildProcessPathName(childProcessId)); + if (!utilFile.exists()){ + return false; + } + return true; + } + /** * 存储日志文件 */ diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/manage/CoeDesignerAPIManager.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/manage/CoeDesignerAPIManager.java index 082ba4fb..9a9fb952 100755 --- a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/manage/CoeDesignerAPIManager.java +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/manage/CoeDesignerAPIManager.java @@ -22,6 +22,16 @@ public class CoeDesignerAPIManager { return new CoeDesignerDefaultDao().store(model); } + /** + * 存储子流程模型信息 + * @param model + * @param childProcessId + * @param childProcessDefine + */ + public void storeChildProcessDefine(BaseModel model, String childProcessId, String childProcessDefine){ + new CoeDesignerDefaultDao().storeChildProcess(model, childProcessId, childProcessDefine); + } + public int storeDefinitionOfBpmn(BPMNModel model) { return new BPMNDao().store(model); } @@ -37,6 +47,10 @@ public class CoeDesignerAPIManager { } + public String getChildProcessDefine(String uuid, int ver, String childProcessId){ + return new CoeDesignerDefaultDao().get(uuid, ver, childProcessId); + } + public BPMNModel getDefinitionOfBpmn(String uuid, int ver) { return new BPMNDao().get(uuid, ver); } diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.htm b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.htm index af1c3ab1..9f60139a 100755 --- a/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.htm +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.htm @@ -74,6 +74,7 @@ } + @@ -258,6 +259,7 @@ + diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.method.subprocess.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.method.subprocess.js index fc7fc945..1b092267 100644 --- a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.method.subprocess.js +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.method.subprocess.js @@ -1,4 +1,7 @@ $(function(){ + if (methodId != 'process.subprocess') { // 如果当前打开的模型不是端到端总图 那么整个js也没有执行的必要 + return; + } // 1. 子流程展开 事件:获取当前子流程所代表的模型文件 (function (Model, ruuid, sid) { const subProcess = new SubProcess(Model, ruuid, sid);