From 0a42c651aad6894425432421e5662f6d1ea2e000 Mon Sep 17 00:00:00 2001 From: yubaolee Date: Fri, 23 Mar 2018 17:47:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E6=AD=A3=E5=B8=B8=E5=8F=91?= =?UTF-8?q?=E8=B5=B7=E4=B8=80=E4=B8=AA=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OpenAuth.App/Flow/FlowNode.cs | 10 +++ OpenAuth.App/Flow/FlowRuntime.cs | 10 +-- OpenAuth.App/Flow/FlowRuntimeModel.cs | 2 +- OpenAuth.App/FlowInstanceApp.cs | 103 +++++++++++++------------- OpenAuth.Mvc/Web.config | 2 +- OpenAuth.Mvc/js/flow/GooFlow.js | 1 + OpenAuth.Mvc/js/flowlayout.js | 6 +- 建表&初始化数据.sql | Bin 280044 -> 267076 bytes 8 files changed, 71 insertions(+), 63 deletions(-) diff --git a/OpenAuth.App/Flow/FlowNode.cs b/OpenAuth.App/Flow/FlowNode.cs index 7e007802..af9566c0 100644 --- a/OpenAuth.App/Flow/FlowNode.cs +++ b/OpenAuth.App/Flow/FlowNode.cs @@ -21,6 +21,11 @@ /// /// The set information. public Setinfo setInfo { get; set; } + + public FlowNode() + { + setInfo = new Setinfo(); + } } public class Setinfo @@ -28,6 +33,11 @@ public Nodedesignatedata NodeDesignateData { get; set; } public string NodeCode { get; set; } public string NodeName { get; set; } + + public Setinfo() + { + NodeDesignateData = new Nodedesignatedata(); + } } /// diff --git a/OpenAuth.App/Flow/FlowRuntime.cs b/OpenAuth.App/Flow/FlowRuntime.cs index 46b9cf07..c4667aa3 100644 --- a/OpenAuth.App/Flow/FlowRuntime.cs +++ b/OpenAuth.App/Flow/FlowRuntime.cs @@ -444,14 +444,14 @@ namespace OpenAuth.App.Flow public void MakeTagNode(string nodeId, int flag, string userId, string description = "") { int i = 0; - foreach (var item in _runtimeModel.schemeContentJson.Flow.nodes) + foreach (var item in _runtimeModel.schemeContentJson.nodes) { if (item.id.Value == nodeId) { - _runtimeModel.schemeContentJson.Flow.nodes[i].setInfo.Taged = flag; - _runtimeModel.schemeContentJson.Flow.nodes[i].setInfo.UserId = userId; - _runtimeModel.schemeContentJson.Flow.nodes[i].setInfo.description = description; - _runtimeModel.schemeContentJson.Flow.nodes[i].setInfo.TagedTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm"); + _runtimeModel.schemeContentJson.nodes[i].setInfo.Taged = flag; + _runtimeModel.schemeContentJson.nodes[i].setInfo.UserId = userId; + _runtimeModel.schemeContentJson.nodes[i].setInfo.description = description; + _runtimeModel.schemeContentJson.nodes[i].setInfo.TagedTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm"); break; } i++; diff --git a/OpenAuth.App/Flow/FlowRuntimeModel.cs b/OpenAuth.App/Flow/FlowRuntimeModel.cs index 5f028038..9f4f57cf 100644 --- a/OpenAuth.App/Flow/FlowRuntimeModel.cs +++ b/OpenAuth.App/Flow/FlowRuntimeModel.cs @@ -24,7 +24,7 @@ namespace OpenAuth.App.Flow /// /// 当前节点的对象 /// - public dynamic currentNode { get { return nodes[currentNodeId]; } } + public FlowNode currentNode { get { return nodes[currentNodeId]; } } /// /// 下一个节点 /// diff --git a/OpenAuth.App/FlowInstanceApp.cs b/OpenAuth.App/FlowInstanceApp.cs index c4b07fc5..30f0807d 100644 --- a/OpenAuth.App/FlowInstanceApp.cs +++ b/OpenAuth.App/FlowInstanceApp.cs @@ -14,7 +14,7 @@ namespace OpenAuth.App /// /// ʵ /// - public class FlowInstanceApp :BaseApp + public class FlowInstanceApp : BaseApp { #region ύ @@ -26,12 +26,12 @@ namespace OpenAuth.App /// /// /// - public int SaveProcess(FlowInstance processInstanceEntity, - FlowInstanceOperationHistory processOperationHistoryEntity, FlowInstanceTransitionHistory processTransitionHistoryEntity = null) + public int SaveProcess(FlowInstance processInstanceEntity, + FlowInstanceOperationHistory processOperationHistoryEntity, FlowInstanceTransitionHistory processTransitionHistoryEntity = null) { try { - processInstanceEntity.Id=(processInstanceEntity.Id); + processInstanceEntity.Id = (processInstanceEntity.Id); UnitWork.Update(processInstanceEntity); processOperationHistoryEntity.InstanceId = processInstanceEntity.Id; @@ -42,7 +42,7 @@ namespace OpenAuth.App processTransitionHistoryEntity.InstanceId = processInstanceEntity.Id; UnitWork.Add(processTransitionHistoryEntity); } - + UnitWork.Save(); return 1; } @@ -62,11 +62,11 @@ namespace OpenAuth.App /// /// /// - public int SaveProcess(string sql,string dbbaseId, FlowInstance processInstanceEntity, FlowInstanceOperationHistory processOperationHistoryEntity, FlowInstanceTransitionHistory processTransitionHistoryEntity = null) + public int SaveProcess(string sql, string dbbaseId, FlowInstance processInstanceEntity, FlowInstanceOperationHistory processOperationHistoryEntity, FlowInstanceTransitionHistory processTransitionHistoryEntity = null) { try { - processInstanceEntity.Id=(processInstanceEntity.Id); + processInstanceEntity.Id = (processInstanceEntity.Id); UnitWork.Update(processInstanceEntity); processOperationHistoryEntity.InstanceId = processInstanceEntity.Id; @@ -77,7 +77,7 @@ namespace OpenAuth.App processTransitionHistoryEntity.InstanceId = processInstanceEntity.Id; UnitWork.Add(processTransitionHistoryEntity); } - + //if (!string.IsNullOrEmpty(dbbaseId) && !string.IsNullOrEmpty(sql))//Իִsql //{ // DataBaseLinkEntity dataBaseLinkEntity = dataBaseLinkService.GetEntity(dbbaseId);//ȡ @@ -94,7 +94,7 @@ namespace OpenAuth.App #endregion - + #region ̴API /// /// һʵ @@ -146,7 +146,7 @@ namespace OpenAuth.App { InstanceId = flowInstance.Id, FromNodeId = wfruntime.runtimeModel.currentNodeId, - FromNodeName = wfruntime.runtimeModel.currentNode.name.Value, + FromNodeName = wfruntime.runtimeModel.currentNode.name, FromNodeType = wfruntime.runtimeModel.currentNodeType, ToNodeId = wfruntime.runtimeModel.nextNodeId, ToNodeName = wfruntime.runtimeModel.nextNode.name, @@ -155,7 +155,7 @@ namespace OpenAuth.App }; processTransitionHistoryEntity.IsFinish = (processTransitionHistoryEntity.ToNodeType == 4 ? 1 : 0); #endregion - + UnitWork.Add(flowInstance); UnitWork.Add(processOperationHistoryEntity); UnitWork.Add(processTransitionHistoryEntity); @@ -220,7 +220,8 @@ namespace OpenAuth.App string _Confluenceres = wfruntime.NodeConfluence(_VerificationNodeId, flag, AuthUtil.GetCurrentUser().User.Id, description); var _data = new { - SchemeContent = wfruntime.runtimeModel.schemeContentJson.ToString(), wfruntime.runtimeModel.frmData + SchemeContent = wfruntime.runtimeModel.schemeContentJson.ToString(), + wfruntime.runtimeModel.frmData }; switch (_Confluenceres) { @@ -235,12 +236,12 @@ namespace OpenAuth.App FlowInstance.ActivityType = wfruntime.runtimeModel.nextNodeType;//-1޷,0ǩʼ,1ǩ,2һڵ,4н FlowInstance.ActivityName = wfruntime.runtimeModel.nextNode.name; FlowInstance.IsFinish = (wfruntime.runtimeModel.nextNodeType == 4 ? 1 : 0); - FlowInstance.MakerList = (wfruntime.runtimeModel.nextNodeType == 4 ?"": GetMakerList(wfruntime) );//ǰڵִеϢ + FlowInstance.MakerList = (wfruntime.runtimeModel.nextNodeType == 4 ? "" : GetMakerList(wfruntime));//ǰڵִеϢ #region ת¼ processTransitionHistoryEntity = new FlowInstanceTransitionHistory(); processTransitionHistoryEntity.FromNodeId = wfruntime.runtimeModel.currentNodeId; - processTransitionHistoryEntity.FromNodeName = wfruntime.runtimeModel.currentNode.name.Value; + processTransitionHistoryEntity.FromNodeName = wfruntime.runtimeModel.currentNode.name; processTransitionHistoryEntity.FromNodeType = wfruntime.runtimeModel.currentNodeType; processTransitionHistoryEntity.ToNodeId = wfruntime.runtimeModel.nextNodeId; processTransitionHistoryEntity.ToNodeName = wfruntime.runtimeModel.nextNode.name; @@ -248,14 +249,7 @@ namespace OpenAuth.App processTransitionHistoryEntity.TransitionSate = 0; processTransitionHistoryEntity.IsFinish = (processTransitionHistoryEntity.ToNodeType == 4 ? 1 : 0); #endregion - - - - if (wfruntime.runtimeModel.currentNode.setInfo != null && wfruntime.runtimeModel.currentNode.setInfo.NodeSQL != null) - { - _sqlstr = wfruntime.runtimeModel.currentNode.setInfo.NodeSQL.Value; - _dbbaseId = wfruntime.runtimeModel.currentNode.setInfo.NodeDataBaseToSQL.Value; - } + break; } } @@ -283,7 +277,7 @@ namespace OpenAuth.App processTransitionHistoryEntity = new FlowInstanceTransitionHistory { FromNodeId = wfruntime.runtimeModel.currentNodeId, - FromNodeName = wfruntime.runtimeModel.currentNode.name.Value, + FromNodeName = wfruntime.runtimeModel.currentNode.name, FromNodeType = wfruntime.runtimeModel.currentNodeType, ToNodeId = wfruntime.runtimeModel.nextNodeId, ToNodeName = wfruntime.runtimeModel.nextNode.name, @@ -293,14 +287,7 @@ namespace OpenAuth.App processTransitionHistoryEntity.IsFinish = (processTransitionHistoryEntity.ToNodeType == 4 ? 1 : 0); #endregion - - - if (wfruntime.runtimeModel.currentNode.setInfo != null && wfruntime.runtimeModel.currentNode.setInfo.NodeSQL != null) - { - _sqlstr = wfruntime.runtimeModel.currentNode.setInfo.NodeSQL.Value; - _dbbaseId = wfruntime.runtimeModel.currentNode.setInfo.NodeDataBaseToSQL.Value; - } - + FlowInstanceOperationHistory.Content = "" + "todo name" + "" + wfruntime.runtimeModel.currentNode.name + "" + DateTime.Now.ToString("yyyy-MM-dd HH:mm") + "ͬ,ע" + description; } else @@ -312,7 +299,8 @@ namespace OpenAuth.App } var data = new { - SchemeContent = wfruntime.runtimeModel.schemeContentJson.ToString(), wfruntime.runtimeModel.frmData + SchemeContent = wfruntime.runtimeModel.schemeContentJson.ToString(), + wfruntime.runtimeModel.frmData }; } #endregion @@ -340,7 +328,7 @@ namespace OpenAuth.App FlowInstance flowInstance = Get(processId); FlowInstanceOperationHistory flowInstanceOperationHistory = new FlowInstanceOperationHistory(); FlowInstanceTransitionHistory processTransitionHistoryEntity = null; - + FlowRuntime wfruntime = new FlowRuntime(flowInstance); @@ -365,7 +353,7 @@ namespace OpenAuth.App #region ת¼ processTransitionHistoryEntity = new FlowInstanceTransitionHistory(); processTransitionHistoryEntity.FromNodeId = wfruntime.runtimeModel.currentNodeId; - processTransitionHistoryEntity.FromNodeName = wfruntime.runtimeModel.currentNode.name.Value; + processTransitionHistoryEntity.FromNodeName = wfruntime.runtimeModel.currentNode.name; processTransitionHistoryEntity.FromNodeType = wfruntime.runtimeModel.currentNodeType; processTransitionHistoryEntity.ToNodeId = wfruntime.runtimeModel.nextNodeId; processTransitionHistoryEntity.ToNodeName = wfruntime.runtimeModel.nextNode.name; @@ -448,7 +436,7 @@ namespace OpenAuth.App /// /// /// - private string GetMakerList(dynamic node, string processId) + private string GetMakerList(FlowNode node, string processId) { try { @@ -460,22 +448,22 @@ namespace OpenAuth.App } else { - if (node.setInfo.NodeDesignate.Value == "NodeDesignateType1")//гԱ - { - makerlsit = "1"; - } - else if (node.setInfo.NodeDesignate.Value == "NodeDesignateType2")//ָԱ - { - makerlsit = ArrwyToString(node.setInfo.NodeDesignateData.role, makerlsit); - makerlsit = ArrwyToString(node.setInfo.NodeDesignateData.post, makerlsit); - makerlsit = ArrwyToString(node.setInfo.NodeDesignateData.usergroup, makerlsit); - makerlsit = ArrwyToString(node.setInfo.NodeDesignateData.user, makerlsit); + //if (node.setInfo.NodeDesignate.Value == "NodeDesignateType1")//гԱ + //{ + // makerlsit = "1"; + //} + //else if (node.setInfo.NodeDesignate.Value == "NodeDesignateType2")//ָԱ + //{ + makerlsit = ArrayToString(node.setInfo.NodeDesignateData.role, makerlsit); + // makerlsit = ArrwyToString(node.setInfo.NodeDesignateData.post, makerlsit); + // makerlsit = ArrwyToString(node.setInfo.NodeDesignateData.usergroup, makerlsit); + makerlsit = ArrayToString(node.setInfo.NodeDesignateData.users, makerlsit); - if (makerlsit == "") - { - makerlsit = "-1"; - } + if (makerlsit == "") + { + makerlsit = "-1"; } + // } //else if (node.setInfo.NodeDesignate.Value == "NodeDesignateType3")//쵼 //{ // UserEntity userEntity = userService.GetEntity(OperatorProvider.Provider.Current().UserId); @@ -543,7 +531,7 @@ namespace OpenAuth.App /// /// /// - private string ArrwyToString(dynamic data, string Str) + private string ArrayToString(dynamic data, string Str) { string resStr = Str; foreach (var item in data) @@ -552,7 +540,16 @@ namespace OpenAuth.App { resStr += ","; } - resStr += item.Value; + + if (item is string) + { + resStr += item; + } + else + { + resStr += item.Value; + + } } return resStr; } @@ -594,11 +591,11 @@ namespace OpenAuth.App throw; } } - + public void Update(FlowInstance flowScheme) { - Repository.Update(u => u.Id == flowScheme.Id, u => new FlowInstance()); + Repository.Update(u => u.Id == flowScheme.Id, u => new FlowInstance()); } public TableData Load(QueryFlowInstanceListReq request) diff --git a/OpenAuth.Mvc/Web.config b/OpenAuth.Mvc/Web.config index 2a797910..f02da70b 100644 --- a/OpenAuth.Mvc/Web.config +++ b/OpenAuth.Mvc/Web.config @@ -60,7 +60,7 @@ - + diff --git a/OpenAuth.Mvc/js/flow/GooFlow.js b/OpenAuth.Mvc/js/flow/GooFlow.js index e6e077a5..a9ab5159 100644 --- a/OpenAuth.Mvc/js/flow/GooFlow.js +++ b/OpenAuth.Mvc/js/flow/GooFlow.js @@ -1991,6 +1991,7 @@ GooFlow.prototype={ else this.$lineData[id].type="sl";//默认为直线 this.$lineData[id].from=json.from; this.$lineData[id].to = json.to; + this.$lineData[id].id = json.id; //赋值ID this.$lineData[id].setInfo = json.setInfo; this.$lineData[id].name=json.name; if(json.marked) this.$lineData[id].marked=json.marked; diff --git a/OpenAuth.Mvc/js/flowlayout.js b/OpenAuth.Mvc/js/flowlayout.js index a29e897d..ba31e262 100644 --- a/OpenAuth.Mvc/js/flowlayout.js +++ b/OpenAuth.Mvc/js/flowlayout.js @@ -330,13 +330,13 @@ } _rowstr = ""; - for (var i in item.setInfo.NodeDesignateData.user) { - var _postitem = item.setInfo.NodeDesignateData.user[i]; + for (var i in item.setInfo.NodeDesignateData.users) { + var _postitem = item.setInfo.NodeDesignateData.users[i]; var _one = clientuserData[_postitem]; _rowstr += ' ' + (_one == undefined ? _postitem : _one.RealName) + ''; - if (i == item.setInfo.NodeDesignateData.user.length - 1) { + if (i == item.setInfo.NodeDesignateData.users.length - 1) { _popoverhtml += '
  • 用户:' + _rowstr + '
  • '; } } diff --git a/建表&初始化数据.sql b/建表&初始化数据.sql index fb35b8a668a82fde42b1ef20962a07b28d6036dd..5108cc7e248569b4189d9eeaaea0b003c88e94e4 100644 GIT binary patch delta 5249 zcmeHLeN0r@6~FI27zYG)7@2`VKHiKh><0+UFdtYdxGL5!K33R-#Z{3R3If9@-^(Jp zvW;EMRyi|3-2sOTB5ydj<4bWO!U(s*UHnqS5% zuS>UHs8X59+$Lpg|1c7Jw&BwlIHpUY-fm6@MVUHUl_uzxyhL&_w(IH0Nq!j>JzOkY z)5pS{e`!sPq>HqW9{hKae%t^z3CiZL5KPhX1H82?-5@IiVYdUO6 zii0bydI2Xx;pz1Fa+GN&>qrBtY=DDpnRIo&kOs4-w9zsP{yuDmzBWC)*BS?+F&4_3 zGw3Q07Y9|nHHqbgMr*}6gz+WEzJ@|9ts0ha{9OvQ820Y=#^2mc@J5t>;#fDcKall@0W@F;+;hwLL zY^chSy;ebTkY^`WygG5N6Ll%~BGjzNSRYEhUGHj+G>^?hP4Jqx4u0RMH@6{zCUleq z^NkZ%$;D9@I>0AWiZKH%?MSZ{(OTwkFQOIExh6p~Gk33ZS*aB*R(`fAftAIF;V`5w{VB_m;<$V{|@GwvigRzBj#A!8b_4qYtjW z6Y++#!hw4@-_ur%kz)A4KGVjzzK-l;7kZsVg<~-v!q%<2KK%Q$8GrJQ9K8AT~CKWHGeI2R3Q&6hN=iLvGawf z?2%Eilw(1ZEYUFB%pdjSCE&V~1t%HA6S`tOvj~$5*@@m){Pq3Lx9UTB6`nP~V={w* zlUjhTHwX0G4N$BPDYgK` zhLp`vGi20Uu8XfpeE@rgGBi)u`8+s0Ib^|%ScFl&8~+7zrj;gE==UbZ^OcYX&ASw zo#fDlMlO?Td%5p$x$Nw2hOCxnSaVSVxy`I18R1+{S}@&L!2RBo4Gvt5DP>od9a-*X zXlyc4md#o2X6Wp=d>$@bgt%FzXLpxuWfR$rkzrV0N=k`Uw2GzVG>$^!+c^G*OerO| z$=9g+j{Fq7=aXR8$60jEY2G}~US@SUaf10&J$?VTA!DMIy4q1I7y`BOYG!(X_-vhE zf>*wb1-GcfR3^fdXp--@MHB4*QVZ^MJ(QVaWg3@aphX@|k2O$n3OlI92(t-)%2qK9 zE~F_1tx0wYD`y_$=i$E?-C>g**ob#LZ0JN6bIQ=dWD+b6N~y9vJQShCSr|Al|84nG z4w`(W&-QaBgNw`!AeJ?q7(mRS;wQX@mc7U8r0Lcw-d&8guykxi%L>tkJhYlUHOZDU zl2;)fo5Vn`$g~ zXPAS7-N9q5#>+$XX+bq+omjNo%lt1Y@?ywLgYsK}N>#4KsyyegJ+8X*WcSwiV8O9s z?pQ-JC%7Ccet~Z zcg>w-{x^h?D+V|=Atr{x$01k5LhM&6!%)qq>ZI8#tGGkP&-}*ExO0CD|7P$1(;5Ds zD&I#a@;1{qe#0B-u5)~bziEaaRuT0-ka)8YehG@aZ6_)Ok!JjoUq?SZ&s+QnKj*)v zqDm3RFEV}<|0IIYT0hp;(-8!|eLPo7cU;DTi10T`U)in2s)y8qY(ew3rLAM@GlgP4OBe8FRJzQLFH@$qoN{0~0#;K#g~p7;a5;}QDX z*ZCDR`*Z$96?&@w(&zkiZIsXBZS?OF1uaK?wL%ovPOI~UaeAp&n5MT@3T}EdPxz_! zRO8)>9outuQSlx>LB%|wjjqcV-i>4Qt(D#(^PZva&e3wdP#A8QKgqum1fH8WfxbU3 N{M*0!hr;yP{{VxgXhHx0 delta 16880 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