Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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);
                }
            }
        }