/// <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 );
}
}
}
/// 自动验证处理
/// </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 );
}
}
}