using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EC.Model;
namespace EC_DataSync
{
class ECSyncProducePlan
{
public void Do()
{
var logId = 0L;
try
{
#region
WriteInfo("启动数据同步," + DateTime.Now);
using (var ctx = DBCtx.GetCtx())
{
WriteInfo("加载同步信息");
var it = ctx.EC_PlanSyncLog.Where(ent => ent.Status == "完成").OrderByDescending(ent => ent.RecId).Take(1).FirstOrDefault();
if (it == null) throw new Exception("未发现有效的前导记录!");
var maxPlsh = it.Plsh;
#region 写同步日志
var syncLog = new EC_PlanSyncLog();
syncLog.BTime = DateTime.Now;
syncLog.Status = "执行中...";
syncLog.AddTime = DateTime.Now;
syncLog.Plsh = maxPlsh;
ctx.EC_PlanSyncLog.AddObject(syncLog);
ctx.SaveChanges();
logId = syncLog.RecId;
#endregion
WriteInfo(string.Format("检索Plsh>{0}的记录",it.Plsh));
var list = DownloadList(it);
WriteInfo("发现" + list.Count + "条记录");
if (list.Count > 0)
{
maxPlsh= list.Max(ent => ent.Plsh);
}
int saveCount = 0;
WriteInfo("保存数据...");
foreach (var item in list)
{
if (ctx.EC_ProducePlan.Any(ent => ent.Plsh == item.Plsh)) continue;
var tInfo = new EC_ProducePlan();
AssignPlan(tInfo, item);
ctx.EC_ProducePlan.AddObject(tInfo);
saveCount++;
if ((saveCount % 100) == 0) ctx.SaveChanges();
}
ctx.SaveChanges();
WriteInfo("更新同步日志...");
syncLog.Status = "完成";
syncLog.ETime = DateTime.Now;
syncLog.Plsh = maxPlsh.Trim();
ctx.SaveChanges();
}
WriteInfo("完成," + DateTime.Now);
#endregion
}
catch (Exception ex)
{
WriteInfo("错误:" + ex.Message);
WriteErr(ex, logId);
}
}
private void AssignPlan(EC_ProducePlan plan, p_productplan item)
{
plan.PlanID = item.PlanID;
plan.P8code = item.P8code;
plan.Pname = item.Pname;
plan.PlanType = item.PlanType;
plan.Ppname = item.Ppname;
plan.Psetting = item.Psetting;
plan.batno = item.batno;
plan.P_yw = item.P_yw;
plan.Poutput = item.Poutput;
plan.Pdate = item.Pdate;
//设置默认列
plan.Pweek1 = item.Pweek1;
plan.Pplanner = item.Pplanner;
plan.Pmanger = item.Pmanger;
plan.Pcheckreust = item.Pcheckreust;
plan.Pcheckdate = item.Pcheckdate;
plan.Ptype = item.Ptype;
plan.Pday1 = item.Pday1;
plan.Plsh = item.Plsh;
}
private List<p_productplan> DownloadList(EC_PlanSyncLog it)
{
using (var ctx = DBCtx.GetMFGCtx())
{
var list = ctx.p_productplan.Where(ent => string.Compare(ent.Plsh, it.Plsh, true) > 0).OrderBy(ent => ent.Plsh).Take(200).ToList();
return list;
}
}
private void WriteErr(Exception ex, long logId)
{
try
{
using (var ctx = DBCtx.GetCtx())
{
var it = ctx.EC_PlanSyncLog.FirstOrDefault(ent => ent.RecId == logId);
if (it == null) return;
it.Status = "完成_错误";
it.Msg = ex.Message;
ctx.SaveChanges();
}
}
catch (Exception)
{
}
}
private void WriteInfo(string msg)
{
Console.WriteLine(msg);
}
}
}