C#自动轮回调用数据库

  /// <summary>
    /// 自动验证处理
    /// </summary>
    public class AutoValidateService
    {
        private static System.Threading.Timer timer;
        private static int dueTimeValidate=300; //单位 秒


        /// <summary>
        /// 主线程
        /// </summary>
        public void _AutoValidateMain()
        {
            try
            {
                dueTimeValidate= int.TryParse( WebConfigurationManager.AppSettings["DBSelectTime"], out dueTimeValidate )?dueTimeValidate:300;


                LoggerFactory.Create( "Both" ).Write( "_AutoValidateMain方法 启动:"+DateTime.Now,infoLevel:LevelEnum.Debug );


            }
            catch ( Exception ex )
            {
                LoggerFactory.Create( "Both" ).Write( ex, 0 );
                LoggerFactory.Create( "Both" ).Write( "AutoValidateMain方法,web.Config配置 dueTimeValidate加载异常" );
            }
            timer = new System.Threading.Timer( _AutoValidateDyn, null, dueTimeValidate*1000, Timeout.Infinite );
        }




        public void _AutoValidateDyn( object stateObject )
        {
            bool ValidateUseThreadPool=false;
            try
            {
                ValidateUseThreadPool=bool.TryParse( WebConfigurationManager.AppSettings["ValidateUseThreadPool"], out ValidateUseThreadPool )?ValidateUseThreadPool:false;
            }
            catch ( Exception ex )
            {
                LoggerFactory.Create( "Both" ).Write( ex, 0 );
                LoggerFactory.Create( "Both" ).Write( "AutoValidateDyn方法,web.Config配置 ValidateUseThreadPool加载异常" );
            }
            _AutoValidateTask( ValidateUseThreadPool );
        }


        /// <summary>
        /// 自动验证任务
        /// </summary>
        /// <param name="UseThreadPool"></param>
        public void _AutoValidateTask( bool ValidateUseThreadPool=true )
        {
            if ( ValidateUseThreadPool )
            {
                var task=Task.Factory.StartNew( () => _ValidateExecute( ValidateUseThreadPool ) );
            }
            else
            {
                _ValidateExecute( ValidateUseThreadPool );      
            }
        }


        /// <summary>
        /// 验证执行
        /// </summary>
        /// <param name="ValidateUseThreadPool"></param>
        public void _ValidateExecute( bool ValidateUseThreadPool=true )
        {
            TradeOrder tradeOrder=new TradeOrder();


            StringBuilder where=new StringBuilder();
            where.Append( string.Format( " ApplyStatus in ({0}) ", string.Join( ",", (int)TradeApplyStatusEnum.OrderSubmit, (int)TradeApplyStatusEnum.Verifying, (int)TradeApplyStatusEnum.VerifyFialed, (int)TradeApplyStatusEnum.Verifyed, 


(int)TradeApplyStatusEnum.PayCreate, (int)TradeApplyStatusEnum.PayCreate, (int)TradeApplyStatusEnum.Paying,  (int)TradeApplyStatusEnum.PartnerTransing, (int)TradeApplyStatusEnum.PREConfirming, (int)TradeApplyStatusEnum.PayFialed,(int)


TradeApplyStatusEnum.PREFreezedFialed ) ) ); //查询的状态
            where.Append( " AND (TradeTimeOutTime > DATEADD(minute, 10, GETDATE())) " ); //订单超时时间 小于 当前时间
            where.Append( " AND (UpdateTime > DATEADD(day, - 1, GETDATE()))" ); //1天以内有更新更新
            try
            {
                LoggerFactory.Create( "Both" ).Write( where.ToString(), infoLevel: LevelEnum.Trace );


            //    IEnumerable<TradeOrderEO> tradeOrderList=tradeOrder.GetTopSort( where.ToString(), -1, string.Empty ); 
                
                //with (readpast) 不查询锁住的记录
                IEnumerable<TradeOrderEO> tradeOrderList=tradeOrder.GetTopSort( where.ToString(), -1, string.Empty,"READPAST",null );


                
                if ( tradeOrderList!=null && tradeOrderList.Count()>0 )
                {


                    LoggerFactory.Create( "Both" ).Write( "_ValidateExecute方法 tradeOrderList数量:"+tradeOrderList.Count().ToString(), infoLevel:LevelEnum.Debug);


                    if ( ValidateUseThreadPool )
                    {
                        Parallel.ForEach( tradeOrderList, ( i ) => { _ValidateDB( i ); } );
                    }
                    else
                    {
                        foreach ( TradeOrderEO orderEO in tradeOrderList )
                        {
                            _ValidateDB( orderEO );
                        }
                    }
                }
            }
            catch ( Exception ex )
            {
                LoggerFactory.Create( "Both" ).Write( ex,0 );
                LoggerFactory.Create( "Both" ).Write( where.ToString(),infoLevel:LevelEnum.Error);
            }
            finally
            {
                timer.Change( dueTimeValidate*1000, Timeout.Infinite );
            }
        }


        public void stop()
        {
            if ( timer!=null )
            {
                timer.Dispose();
            }
        }


        /// <summary>
        /// 数据库操作
        /// </summary>
        /// <param name="tradeOrderEO"></param>
        public void _ValidateDB( TradeOrderEO tradeOrderEO )
        {
            try
            {
                //读写数据库
            }
            catch ( Exception ex)
            {
                LoggerFactory.Create( "Both" ).Write( ex, 0 );
                LoggerFactory.Create( "Both" ).Write( "_ValidateDB方法执行异常:"+ex.Message+ex.InnerException );
            }
           
        }


    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值