using System;
using System.ComponentModel;
using System.Linq;
using CK.SCP.Models;
using CK.SCP.Models.Enums;
using CK.SCP.Models.UniApiEntity;
using CK.SCP.GrupUniApi.Controller;
using System.Transactions;
using System.Data.Entity.Core;
using CK.SCP.UniApi.Controller;
using ChangKeTec.Utils;
namespace CK.SCP.GrupUniApi
{
public class QadOdbcApi : IApi
{
private readonly BackgroundWorker _bgwGet = new BackgroundWorker();
private readonly BackgroundWorker _bgwPut = new BackgroundWorker();
private readonly BackgroundWorker _bgwMail = new BackgroundWorker();
private readonly BackgroundWorker _bgwOrderMail = new BackgroundWorker();
public QadOdbcApi()
{
InitBgw();
}
private void InitBgw()
{
_bgwGet.DoWork += BgwGetDoWork;
_bgwGet.RunWorkerCompleted += BgwGetRunWorkerCompleted;
//回传给QAD
_bgwPut.DoWork += BgwPutDoWork;
_bgwPut.RunWorkerCompleted += BgwPutRunWorkerCompleted;
//发邮件
_bgwMail.DoWork += BgwMailDoWork;
_bgwMail.RunWorkerCompleted += BgwMailRunWorkerCompleted;
// 发送材料订单邮件
_bgwOrderMail.DoWork += bgwOrderMail;
_bgwOrderMail.RunWorkerCompleted += BgwOrderMailRunWorkerCompleted;
}
private void BgwPutRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
Console.WriteLine(@"Odbc接口数据发送完成<<<<<<<<<<");
}
private void BgwMailRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
Console.WriteLine(@"邮件发送完成<<<<<<<<<<");
}
private void BgwOrderMailRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
Console.WriteLine(@"材料订单邮件发送完成<<<<<<<<<<");
}
private void BgwPutDoWork(object sender, DoWorkEventArgs e)
{
var idb = EntitiesFactory.CreateUniApiInstance();
var wdb = EntitiesFactory.CreateScpInstance();
try
{
var apiList = UniApiController.GetNewInterfaceList(wdb);
OdbcApiScpController.PutAll(wdb, idb, apiList);
apiList = apiList.Where(p => p.State == (int)FormState.关闭).ToList();
var apiHisList = apiList.Select(uniApi => uniApi.ToHis()).ToList();
using (var scope =
new TransactionScope(TransactionScopeOption.Required, new TransactionOptions()
{
IsolationLevel = System.Transactions.IsolationLevel.Serializable,
Timeout = new TimeSpan(0, 20, 0)
}))
{
var list=idb.xxscm_inv_det.ToList();
UniApiController.AddHisList(wdb, apiHisList);
UniApiController.RemoveList(wdb, apiList);
EntitiesFactory.SaveDb(idb);
EntitiesFactory.SaveDb(wdb);
scope.Complete();
}
}
catch (System.Data.Entity.Validation.DbEntityValidationException dbEx)//捕获实体验证异常
{
Console.WriteLine(dbEx);
}
catch (OptimisticConcurrencyException ex)//并发冲突异常
{
Console.WriteLine(ex);
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
///
/// 邮件
///
///
///
private void BgwMailDoWork(object sender, DoWorkEventArgs e)
{
try
{
MailController.GetNewCtrlList();
}
catch (Exception ex)
{
Console.WriteLine(string.Format("错误:{0}", ex.InnerException.Message));
}
}
///
/// 材料订单发邮件
///
///
///
private void bgwOrderMail(object sender, DoWorkEventArgs e)
{
try
{
MailController.SendOrderMail();
}
catch (Exception ex)
{
Console.WriteLine(string.Format("错误:{0}", ex.InnerException.Message));
}
}
private void BgwGetRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
Console.WriteLine(@"Odbc接口数据接收完成<<<<<<<<<<");
}
private void BgwGetDoWork(object sender, DoWorkEventArgs e)
{
try
{
OdbcApiQadController.GetNewCtrlList(); //取QAD数据
OdbcApiWmsController.GetNewCtrlList(); //取WMS数据
}
catch (Exception ex)
{
Console.WriteLine(string.Format("错误:{0}", ex.Message));
//MessageHelper.ShowError(ex);
}
}
public void Get()
{
try
{
if (_bgwGet.IsBusy) return;
Console.WriteLine(@"Odbc接口数据接收开始>>>>>>>>>>");
_bgwGet.RunWorkerAsync();
}
catch (ScpException ex)
{
Console.WriteLine(ex);
}
}
public void Put()
{
try
{
if (_bgwPut.IsBusy) return;
Console.WriteLine(@"Odbc接口数据发送开始>>>>>>>>>>");
_bgwPut.RunWorkerAsync();
}
catch (ScpException ex)
{
Console.WriteLine(ex);
}
}
public void Mail()
{
try
{
if (_bgwMail.IsBusy) return;
Console.WriteLine(@"发送邮件>>>>>>>>>>");
_bgwMail.RunWorkerAsync();
}
catch (ScpException ex)
{
Console.WriteLine(ex);
}
}
public void OrderMail()
{
try
{
if (_bgwOrderMail.IsBusy) return;
Console.WriteLine(@"发送材料订单邮件>>>>>>>>>>");
_bgwOrderMail.RunWorkerAsync();
}
catch (ScpException ex)
{
Console.WriteLine(ex);
}
}
}
}