zoukankan      html  css  js  c++  java
  • 一个典型的记录同步任务

    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);
            }
        }
    }
    View Code
  • 相关阅读:
    三次请求(读-改-读)引出nibernate 一级缓存
    算法竞赛入门经典第一、二章摘记
    uva 10905 Children's Game
    uva 11205 The broken pedometer
    uva 10160 Servicing stations
    uva 208 Firetruck
    uva 167 The Sultan's Successors
    zoj 1016 Parencodings
    uva 307 Sticks
    uva 216 Getting in Line
  • 原文地址:https://www.cnblogs.com/wdfrog/p/9171256.html
Copyright © 2011-2022 走看看