/// <summary> /// 保à?ê存??节¨2点ì?执??行D记?录? /// </summary> /// <param name="node"></param> /// <param name="recordInfo"></param> /// <param name="result"></param> public virtual void SaveCheckPointFlowingWater(WF_ProcessNode node, ProcessRecord recordInfo, bool result) { var temp = EngineContext.Current.Resolve <IWF_FlowProcess>(); Parking.Core.Model.WF_FlowProcess model = new Parking.Core.Model.WF_FlowProcess(); model.ID = Guid.NewGuid().ToString("N"); model.CarNo = recordInfo.INOUT_RECODE.VEHICLE_NO; model.FlowCode = node.FlowID; model.NodeCode = node.ID; model.Result = result; model.ExecutionTime = DateTime.Now; model.Remark = node.NodeName; model.RecordID = recordInfo.INOUT_RECODE.ID; temp.Add(model); }
/// <summary> /// 执行节点 /// </summary> /// <param name="recordInfo"></param> public void Process(ProcessRecord recordInfo) { try { WF_ProcessNode tempNode = null; var flow = EngineContext.Current.Resolve <IWF_ProcessNode>(); enumFlowType flowType = enumFlowType.In; if (recordInfo.CHANNEL_TYPE == enumChannelType.chn_in) { flowType = enumFlowType.In; } else if (recordInfo.CHANNEL_TYPE == enumChannelType.chn_out) { flowType = enumFlowType.Out; } else { flowType = enumFlowType.Center; } var flowList = flow.GetNodesByWFType(flowType); if (flowList.Count > 0) { if (!dicChargeInfo.ContainsKey(recordInfo.INOUT_RECODE.VEHICLE_NO)) { dicChargeInfo.Add(recordInfo.INOUT_RECODE.VEHICLE_NO, new AutoResetEvent(false)); while (true) { tempNode = tempNode ?? flowList.First <WF_ProcessNode>(x => x.PN_Flag); if (!string.IsNullOrEmpty(tempNode.NodeCode) && null != tempNode && tempNode.PN_Flag) { ICheck checkPoint = EngineContext.Current.Resolve <ICheck>(tempNode.NodeCode); checkPoint.Process(recordInfo); checkPoint.SaveCheckPointFlowingWater(tempNode, recordInfo, recordInfo.CheckPointResult); if (recordInfo.CheckPointResult) { if (!string.IsNullOrEmpty(tempNode.NextNode)) { //////////////////执行下一节点////////////////// var nextNode = flowList.Where(x => x.ID == tempNode.NextNode).FirstOrDefault(); if (null != nextNode) { if (nextNode.PN_Flag) { checkPoint = EngineContext.Current.Resolve <ICheck>(nextNode.NodeCode); } tempNode = nextNode; } else { LogHelper.Log.Error("下一节点为空"); } } else { break; } } else { if (!string.IsNullOrEmpty(tempNode.JumpNode)) { //////////////////执行跳转节点////////////////// var jumpNode = flowList.Where(x => x.ID == tempNode.JumpNode).FirstOrDefault(); if (null != jumpNode) { if (jumpNode.PN_Flag) { checkPoint = EngineContext.Current.Resolve <ICheck>(jumpNode.NodeCode); } tempNode = jumpNode; } else { LogHelper.Log.Error("跳转节点为空"); } } else { break; } } } else { var nextNode = flowList.Where(x => x.ID == tempNode.NextNode).FirstOrDefault(); if (null != nextNode) { tempNode = nextNode; } else { break; } } } } } } catch (Exception ex) { if (dicChargeInfo.ContainsKey(recordInfo.INOUT_RECODE.VEHICLE_NO)) { dicChargeInfo.Remove(recordInfo.INOUT_RECODE.VEHICLE_NO); } LogHelper.Log.Error(ex.StackTrace); } finally { if (dicChargeInfo.ContainsKey(recordInfo.INOUT_RECODE.VEHICLE_NO)) { dicChargeInfo.Remove(recordInfo.INOUT_RECODE.VEHICLE_NO); } } }