Exemplo n.º 1
0
        protected SyncData(OracleDbOperation targetDb, OracleDbOperation localDb, string targetCode,
            string localCode, FtpHelper targetFtp, FtpHelper localFtp, StringBuilder sbLog)
        {
            this.targetDb = targetDb;
            this.localDb = localDb;
            this.targetCode = targetCode;
            this.localCode = localCode;
            this.targetFtp = targetFtp;
            this.localFtp = localFtp;
            this.sbLog = sbLog;

            dtOperation = new DataTableOperation();

            deleteAction = () =>
            {
                LogOperation.Append(sbLog, "删除成功");
            };
            totalAction = (tableName, count) =>
            {
                LogOperation.Append(sbLog, "统计:" + tableName + "表共同步了" + count + "条数据");
            };
            deleteFileAction = (itemCode,fileName) =>
            {
                LogOperation.Append(sbLog, string.Format("项目编号:{0}, 删除文件:{1}", itemCode, fileName));
            };

            ftpCopyAction = (itemCode, fileCount) =>
            {
                LogOperation.Append(sbLog, string.Format("项目编号:{0}, 拷贝文件数:{1}", itemCode, fileCount.ToString()));
            };
        }
Exemplo n.º 2
0
        protected void SyncByAddAfterDelete(OracleDbOperation sourceDbOperation, OracleDbOperation targetDbOperation,
                                            string tableName, string condition, Action deleteAction, Action <DataRow> actionDetail, Action <string, int> actionCompleted)
        {
            string whereCondition = string.IsNullOrEmpty(condition) ? string.Empty : " where " + condition;
            string selectNoneSql  = "select * from " + tableName + " where 1 <> 1";
            string selectSql      = "select * from " + tableName + whereCondition;
            string deleteSql      = "delete from " + tableName + whereCondition;

            targetDbOperation.ExecuteNonQuery(deleteSql, null);
            DataTable dtSource = sourceDbOperation.ExecuteDataTable(selectSql, tableName, null);
            DataTable dtTarget = targetDbOperation.ExecuteDataTable(selectNoneSql, tableName, null);

            foreach (DataRow drSource in dtSource.Rows)
            {
                DataRow newTargetDr = dtTarget.NewRow();
                Copy(drSource, newTargetDr);
                dtTarget.Rows.Add(newTargetDr);
                if (actionDetail != null)
                {
                    actionDetail(newTargetDr);
                }
            }
            targetDbOperation.UpdateDataTable(dtTarget);
            if (actionCompleted != null)
            {
                actionCompleted(tableName, dtTarget.Rows.Count);
            }
        }
Exemplo n.º 3
0
        protected SyncData(OracleDbOperation targetDb, OracleDbOperation localDb, string targetCode,
                           string localCode, FtpHelper targetFtp, FtpHelper localFtp, StringBuilder sbLog)
        {
            this.targetDb   = targetDb;
            this.localDb    = localDb;
            this.targetCode = targetCode;
            this.localCode  = localCode;
            this.targetFtp  = targetFtp;
            this.localFtp   = localFtp;
            this.sbLog      = sbLog;

            dtOperation = new DataTableOperation();

            deleteAction = () =>
            {
                LogOperation.Append(sbLog, "删除成功");
            };
            totalAction = (tableName, count) =>
            {
                LogOperation.Append(sbLog, "统计:" + tableName + "表共同步了" + count + "条数据");
            };
            deleteFileAction = (itemCode, fileName) =>
            {
                LogOperation.Append(sbLog, string.Format("项目编号:{0}, 删除文件:{1}", itemCode, fileName));
            };

            ftpCopyAction = (itemCode, fileCount) =>
            {
                LogOperation.Append(sbLog, string.Format("项目编号:{0}, 拷贝文件数:{1}", itemCode, fileCount.ToString()));
            };
        }
Exemplo n.º 4
0
        public void UpdateSyncLog(OracleDbOperation oracleDb, SyncDataLog syncLog)
        {
            syncLog.Succ = 0;
            string strSql = SqlBuilder.BuildUpdateSql(syncLog);

            oracleDb.ExecuteNonQuery(strSql, null);
        }
Exemplo n.º 5
0
        /// <summary>
        /// 删除消息。
        /// </summary>
        /// <param name="type"></param>
        /// <param name="xxbh"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        public bool DelMessage(int type, string xxbh, string userId)
        {
            DataTableOperation dtOperation = new DataTableOperation();
            OracleDbOperation  dbOperation = new OracleDbOperation(OracleHelper.ConnectionString);

            dbOperation.BeginTransaction();

            string tableName;
            string sql;
            List <OracleParameter> parameters = new List <OracleParameter>();

            tableName = "xtxx";
            sql       = "select * from " + tableName + " a where a.xxbh = :xxbh";
            parameters.Clear();
            parameters.Add(new OracleParameter("xxbh", xxbh));
            DataTable dtXtxx = dbOperation.ExecuteDataTable(sql, tableName, parameters);

            if (dtXtxx.Rows.Count > 0)
            {
                DataRow drXtxx = dtXtxx.Rows[0];

                tableName = "xtxxjs";
                sql       = "select * from " + tableName + " a where a.jsxxbh = :jsxxbh";
                parameters.Clear();
                parameters.Add(new OracleParameter("jsxxbh", xxbh));
                DataTable dtXtxxjs = dbOperation.ExecuteDataTable(sql, tableName, parameters);
                switch (type)
                {
                case 0:
                    var drXtxxjs = (from DataRow dr in dtXtxxjs.Rows
                                    where dr["JSR"].ToString() == userId
                                    select dr).First();
                    drXtxxjs["jsrsc"] = "1";
                    break;

                case 1:
                    drXtxx["fsrsc"] = "1";
                    break;
                }
                int xtxxjsUndeleteCount = (from DataRow dr in dtXtxxjs.Rows
                                           where dr["jsrsc"].ToString() == "0"
                                           select dr).Count();
                string xtxxDeleteState = drXtxx["fsrsc"].ToString();
                if (xtxxjsUndeleteCount == 0 && xtxxDeleteState == "1")
                {
                    dtOperation.ClearDbDataTable(dtXtxx);
                    dtOperation.ClearDbDataTable(dtXtxxjs);
                    DeleteMessageFile(xxbh, null);
                }
                dbOperation.UpdateDataTable(dtXtxx);
                dbOperation.UpdateDataTable(dtXtxxjs);
                dbOperation.Commit();
            }
            else
            {
                dbOperation.Rollback();
                return(false);
            }
            return(true);
        }
Exemplo n.º 6
0
        /// <summary>
        /// 删除消息。
        /// </summary>
        /// <param name="type"></param>
        /// <param name="xxbh"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        public bool DelMessage(int type, string xxbh, string userId)
        {
            DataTableOperation dtOperation = new DataTableOperation();
            OracleDbOperation dbOperation = new OracleDbOperation(OracleHelper.ConnectionString);

            dbOperation.BeginTransaction();

            string tableName;
            string sql;
            List<OracleParameter> parameters = new List<OracleParameter>();

            tableName = "xtxx";
            sql = "select * from " + tableName + " a where a.xxbh = :xxbh";
            parameters.Clear();
            parameters.Add(new OracleParameter("xxbh", xxbh));
            DataTable dtXtxx = dbOperation.ExecuteDataTable(sql, tableName, parameters);
            if (dtXtxx.Rows.Count > 0)
            {
                DataRow drXtxx = dtXtxx.Rows[0];

                tableName = "xtxxjs";
                sql = "select * from " + tableName + " a where a.jsxxbh = :jsxxbh";
                parameters.Clear();
                parameters.Add(new OracleParameter("jsxxbh", xxbh));
                DataTable dtXtxxjs = dbOperation.ExecuteDataTable(sql, tableName, parameters);
                switch (type)
                {
                    case 0:
                        var drXtxxjs = (from DataRow dr in dtXtxxjs.Rows
                                        where dr["JSR"].ToString() == userId
                                        select dr).First();
                        drXtxxjs["jsrsc"] = "1";
                        break;
                    case 1:
                        drXtxx["fsrsc"] = "1";
                        break;
                }
                int xtxxjsUndeleteCount = (from DataRow dr in dtXtxxjs.Rows
                                           where dr["jsrsc"].ToString() == "0"
                                           select dr).Count();
                string xtxxDeleteState = drXtxx["fsrsc"].ToString();
                if (xtxxjsUndeleteCount == 0 && xtxxDeleteState == "1")
                {
                    dtOperation.ClearDbDataTable(dtXtxx);
                    dtOperation.ClearDbDataTable(dtXtxxjs);
                    DeleteMessageFile(xxbh, null);
                }
                dbOperation.UpdateDataTable(dtXtxx);
                dbOperation.UpdateDataTable(dtXtxxjs);
                dbOperation.Commit();
            }
            else
            {
                dbOperation.Rollback();
                return false;
            }
            return true;
        }
Exemplo n.º 7
0
 public SyncDataLog GetSyncLogInfo(OracleDbOperation oracleDb, string code)
 {
     SyncDataLog dataInfo = null;
     string strSql = "select * from syncdataLog where ccode = '{0}' and syncType = {1} order by syncdate desc";
     strSql = string.Format(strSql, code, ((int)SyncDataType.System).ToString());
     DataTable dt = oracleDb.ExecuteDataTable(strSql);
     if (dt.Rows.Count > 0)
     {
         dataInfo = (SyncDataLog)new DataTableOperation().ConvertFromDataRowToEntity(dt.Rows[0], typeof(SyncDataLog));
     }
     return dataInfo;
 }
Exemplo n.º 8
0
        public SyncDataLog GetSyncLogInfo(OracleDbOperation oracleDb, string code)
        {
            SyncDataLog dataInfo = null;
            string      strSql   = "select * from syncdataLog where ccode = '{0}' and syncType = {1} order by syncdate desc";

            strSql = string.Format(strSql, code, ((int)SyncDataType.System).ToString());
            DataTable dt = oracleDb.ExecuteDataTable(strSql);

            if (dt.Rows.Count > 0)
            {
                dataInfo = (SyncDataLog) new DataTableOperation().ConvertFromDataRowToEntity(dt.Rows[0], typeof(SyncDataLog));
            }
            return(dataInfo);
        }
Exemplo n.º 9
0
 /// <summary>
 /// 插入失败的记录
 /// </summary>
 /// <param name="localDb"></param>
 /// <param name="targetConfig"></param>
 /// <param name="dataType"></param>
 public SyncDataLog InsertSyncLog(OracleDbOperation oracleDb, SyncConfigTarget targetConfig, SyncDataType dataType, string fileName)
 {
     SyncDataLog syncLog = new SyncDataLog();
     syncLog.LogId = Guid.NewGuid().ToString();
     syncLog.CCode = targetConfig.Code;
     syncLog.CName = targetConfig.Name;
     syncLog.Synctype = dataType;
     syncLog.SyncDate = System.DateTime.Now;
     syncLog.FileName = fileName;
     syncLog.Succ = 1;
     string strSql = SqlBuilder.BuildInsertSql(syncLog);
     oracleDb.ExecuteNonQuery(strSql, null);
     return syncLog;
 }
Exemplo n.º 10
0
        /// <summary>
        /// 插入失败的记录
        /// </summary>
        /// <param name="localDb"></param>
        /// <param name="targetConfig"></param>
        /// <param name="dataType"></param>
        public SyncDataLog InsertSyncLog(OracleDbOperation oracleDb, SyncConfigTarget targetConfig, SyncDataType dataType, string fileName)
        {
            SyncDataLog syncLog = new SyncDataLog();

            syncLog.LogId    = Guid.NewGuid().ToString();
            syncLog.CCode    = targetConfig.Code;
            syncLog.CName    = targetConfig.Name;
            syncLog.Synctype = dataType;
            syncLog.SyncDate = System.DateTime.Now;
            syncLog.FileName = fileName;
            syncLog.Succ     = 1;
            string strSql = SqlBuilder.BuildInsertSql(syncLog);

            oracleDb.ExecuteNonQuery(strSql, null);
            return(syncLog);
        }
Exemplo n.º 11
0
        /// <summary>
        /// 同步。
        /// </summary>
        /// <param name="setting">同步配置。</param>
        /// <param name="log">日志信息。</param>
        /// <returns>同步是否成功。</returns>
        public bool Sync(SyncConfig syncConfig, SyncConfigTarget targetConfig, SyncConfigLocal localConfig, ref StringBuilder sbLog)
        {
            bool result = false;

            LogOperation.Append(sbLog, string.Format("开始同步数据:{0}({1})  开始时间:{2}", targetConfig.Name, targetConfig.Code, DateTime.Now));

            OracleDbOperation localDb  = new OracleDbOperation(localConfig.DbConfig.ConnStr);
            FtpHelper         localFtp = new FtpHelper(localConfig.FtpConfig.Ip, localConfig.FtpConfig.Port, localConfig.FtpConfig.Username, localConfig.FtpConfig.Password);

            OracleDbOperation targetDb  = new OracleDbOperation(targetConfig.DbConfig.ConnStr);
            FtpHelper         targetFtp = new FtpHelper(targetConfig.FtpConfig.Ip, targetConfig.FtpConfig.Port, targetConfig.FtpConfig.Username, targetConfig.FtpConfig.Password);

            try
            {
                targetDb.BeginTransaction();
                localDb.BeginTransaction();

                List <SyncData> syncDataList = new List <SyncData>();
                ////系统数据
                syncDataList.Add(new SyncDataSystemInfo(targetDb, localDb, targetConfig.Code, localConfig.Code, targetFtp, localFtp, sbLog));
                ////项目数据
                syncDataList.Add(new SyncDataItem(syncConfig, targetDb, localDb, targetConfig.Code, localConfig.Code, targetFtp, localFtp, sbLog));
                ////流程数据
                syncDataList.Add(new SyncDataWorkflow(targetDb, localDb, targetConfig.Code, localConfig.Code, targetFtp, localFtp, sbLog));
                ////Syncs.Add(new SyncXtxx(targetDbOperation, localDbOperation, targetSetting.Code, localSetting.Code, targetFtpOperation, localFtpOperation, sbLog));

                foreach (var syncData in syncDataList)
                {
                    syncData.Sync();
                }

                targetDb.Commit();
                localDb.Commit();
                result = true;
            }
            catch (Exception e)
            {
                targetDb.Rollback();
                localDb.Rollback();
                LogOperation.WriteExceptionLog(sbLog, e);
            }

            sbLog.AppendLine();
            sbLog.AppendLine("结束时间:" + DateTime.Now);
            return(result);
        }
Exemplo n.º 12
0
 protected void SyncByAddAfterDelete(OracleDbOperation sourceDbOperation, OracleDbOperation targetDbOperation,
     string tableName, string condition, Action deleteAction, Action<DataRow> actionDetail, Action<string, int> actionCompleted)
 {
     string whereCondition = string.IsNullOrEmpty(condition) ? string.Empty : " where " + condition;
     string selectNoneSql = "select * from " + tableName + " where 1 <> 1";
     string selectSql = "select * from " + tableName + whereCondition;
     string deleteSql = "delete from " + tableName + whereCondition;
     targetDbOperation.ExecuteNonQuery(deleteSql, null);
     DataTable dtSource = sourceDbOperation.ExecuteDataTable(selectSql, tableName, null);
     DataTable dtTarget = targetDbOperation.ExecuteDataTable(selectNoneSql, tableName, null);
     foreach (DataRow drSource in dtSource.Rows)
     {
         DataRow newTargetDr = dtTarget.NewRow();
         Copy(drSource, newTargetDr);
         dtTarget.Rows.Add(newTargetDr);
         if (actionDetail != null)
         {
             actionDetail(newTargetDr);
         }
     }
     targetDbOperation.UpdateDataTable(dtTarget);
     if (actionCompleted != null)
     {
         actionCompleted(tableName, dtTarget.Rows.Count);
     }
 }
Exemplo n.º 13
0
        private void SyncXxbh(OracleDbOperation sourceDbOperation, OracleDbOperation targetDbOperation, string targetCode,
            Action<DataRow> actionAddTargetMessageFile, Action<DataRow> actionDeleteSourceMessageFile, Action<DataRow> actionDeleteTargetMessageFile)
        {
            string sql;
            List<OracleParameter> parameters = new List<OracleParameter>();
            DataTable dt;

            //用指定的行政区代码去系统信息接收表中查询所有与接收人行政区代码相等的记录,即需要同步的信息编号。
            sql = "select distinct(jsxxbh) from xtxxjs where jsrxzdm = :jsrxzdm";
            parameters.Clear();
            parameters.Add(new OracleParameter("jsrxzdm", targetCode));
            dt = sourceDbOperation.ExecuteDataTable(sql, "temp", parameters);
            var xxbhs = (from DataRow dr in dt.Rows
                         select "'" + dr[0] + "'").ToArray();

            if (xxbhs.Length > 0)
            {
                //分别取源系统和目标系统取出需要同步的信息接收数据。
                string xxbhsCondition = string.Join(",", xxbhs);
                sql = "select * from xtxxjs where jsxxbh in (" + xxbhsCondition + ")";
                DataTable dtSourceXtxxjs = sourceDbOperation.ExecuteDataTable(sql, "xtxxjs", null);
                DataTable dtTargetXtxxjs = targetDbOperation.ExecuteDataTable(sql, "xtxxjs", null);

                string xtxxCondition = "xxbh in (" + xxbhsCondition + ")";

                //进行比对同步。
                LogOperation.WriteSyncTableTitle(sbLog, "xtxx", SyncType.Comparer, xtxxCondition);
                SyncByComparer(sourceDbOperation, targetDbOperation, "xtxx", xtxxCondition, new List<string>() { "xxbh" }, true,
                    (dr) =>
                    {
                        string xxbh = dr["xxbh"].ToString();
                        LogOperation.Append(sbLog, "添加目标系统信息!信息编号:" + xxbh);
                        foreach (var needAddXtxxjs in dtSourceXtxxjs.Select("jsxxbh = '" + xxbh + "' and jsrxzdm = '" + targetCode + "'"))
                        {
                            DataRow newXtxxjs = dtTargetXtxxjs.NewRow();
                            Copy(needAddXtxxjs, newXtxxjs);
                            dtTargetXtxxjs.Rows.Add(newXtxxjs);
                        }
                        if (actionAddTargetMessageFile != null)
                        {
                            actionAddTargetMessageFile(dr);
                        }
                    },
                    (dr) =>
                    {
                        LogOperation.Append(sbLog, "删除垃圾系统信息!信息编号:" + dr["XXBH"]);
                    },
                    (drSource, drTarget) =>
                    {
                        string xxbh = drSource["XXBH"].ToString();
                        LogOperation.Append(sbLog, "更新系统信息!信息编号:" + xxbh);

                        if (actionAddTargetMessageFile != null)
                        {
                            actionAddTargetMessageFile(drSource);
                        }

                        //判断是否需要删除邮件。
                        if (drSource["FSRSC"].ToString() == "1")
                        {
                            var querySource = from DataRow dr in dtSourceXtxxjs.Rows
                                              where dr["JSXXBH"].ToString() == xxbh
                                              select dr;
                            var queryTarget = from DataRow dr in dtTargetXtxxjs.Rows
                                              where dr["JSXXBH"].ToString() == xxbh
                                              select dr;
                            bool needDelete = true;
                            foreach (var itemSource in querySource)
                            {
                                string jsr = itemSource["JSR"].ToString();
                                var queryTargetJsr = (from dr in queryTarget
                                                      where dr["JSR"].ToString() == jsr
                                                      select dr).FirstOrDefault();
                                if (queryTargetJsr == null)
                                {
                                    if (itemSource["JSRSC"].ToString() == "0")
                                    {
                                        needDelete = false;
                                        break;
                                    }
                                }
                                else
                                {
                                    if (queryTargetJsr["JSRSC"].ToString() == "0")
                                    {
                                        needDelete = false;
                                        break;
                                    }
                                }
                            }

                            //删除邮件。
                            if (needDelete)
                            {
                                dtOperation.DeleteDbDataRow(drSource, (dr) =>
                                {
                                    dtOperation.DeleteDbDataRows(querySource, null);
                                    LogOperation.Append(sbLog, "删除源系统信息,因为收发双方都已删除此信息!信息编号:" + xxbh);
                                    actionDeleteSourceMessageFile(drSource);
                                });
                                dtOperation.DeleteDbDataRow(drTarget, (dr) =>
                                {
                                    dtOperation.DeleteDbDataRows(queryTarget, null);
                                    LogOperation.Append(sbLog, "删除目标系统信息,因为收发双方都已删除此信息!信息编号:" + xxbh);
                                    actionDeleteSourceMessageFile(drTarget);
                                });
                            }
                        }
                    });

                //保存信息接收信息。
                sourceDbOperation.UpdateDataTable(dtSourceXtxxjs);
                targetDbOperation.UpdateDataTable(dtTargetXtxxjs);
            }
        }
Exemplo n.º 14
0
 public SyncDataSystemInfo(OracleDbOperation targetDbOperation, OracleDbOperation localDbOperation, string targetCode,
     string localCode, FtpHelper targetFtpOperation, FtpHelper localFtpOperation, StringBuilder sbLog)
     : base(targetDbOperation, localDbOperation, targetCode, localCode, targetFtpOperation, localFtpOperation, sbLog)
 {
 }
Exemplo n.º 15
0
        private Gis_Data <Gis_Dk> getGisdata(string strSql, string conStr, bool allData)
        {
            Gis_Data <Gis_Dk> dataList = null;
            OracleDbOperation oracleDb = new OracleDbOperation(conStr);
            DataTable         dt       = oracleDb.ExecuteDataTable(strSql);

            if (dt.Rows.Count == 1)
            {
                dataList = (Gis_Data <Gis_Dk>) new DataTableOperation().ConvertFromDataRowToEntity(dt.Rows[0], typeof(Gis_Data <Gis_Dk>));

                strSql = "select * from gis_dk where gisId = " + dataList.GisId;

                dt = oracleDb.ExecuteDataTable(strSql);

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    Gis_Dk dk = (Gis_Dk) new DataTableOperation().ConvertFromDataRowToEntity(dt.Rows[i], typeof(Gis_Dk));
                    dk.GeoID = i;

                    ////界址点
                    strSql = "select * from gis_jzd where gisid = '{0}' and dkid = '{1}' order by dkqh,xh ";
                    strSql = string.Format(strSql, dataList.GisId, dk.DkId);
                    DataTable dtJzd = oracleDb.ExecuteDataTable(strSql);

                    string   dkqh = string.Empty;
                    Gis_Jzqy jzqy = null;
                    for (int j = 0; j < dtJzd.Rows.Count; j++)
                    {
                        if ((dtJzd.Rows[j]["dkqh"].ToString() != dkqh && jzqy != null) || j == dtJzd.Rows.Count - 1)
                        {
                            dk.RingList.Add(jzqy);
                        }
                        if (dtJzd.Rows[j]["dkqh"].ToString() != dkqh)
                        {
                            jzqy       = new Gis_Jzqy();
                            jzqy.GeoID = int.Parse(dtJzd.Rows[j]["dkqh"].ToString());
                        }
                        Gis_Jzd jzd = (Gis_Jzd) new DataTableOperation().ConvertFromDataRowToEntity(dtJzd.Rows[j], typeof(Gis_Jzd));
                        jzd.GeoID = jzd.XH;
                        jzqy.PointList.Add(jzd);

                        dkqh = dtJzd.Rows[j]["dkqh"].ToString();
                    }
                    if (allData)
                    {
                        ////地类图斑
                        strSql = "select * from gis_dltb where gisId = {0} and dkId = '{1}'";
                        strSql = string.Format(strSql, dataList.GisId, dk.DkId);
                        DataTable dtDltb = oracleDb.ExecuteDataTable(strSql);
                        for (int j = 0; j < dtDltb.Rows.Count; j++)
                        {
                            Gis_Dltb dltb = (Gis_Dltb) new DataTableOperation().ConvertFromDataRowToEntity(dtDltb.Rows[j], typeof(Gis_Dltb));
                            dk.DLTBList.Add(dltb);
                        }

                        ////线状地物
                        strSql = "select * from gis_xzdw where gisId = {0} and dkId = '{1}'";
                        strSql = string.Format(strSql, dataList.GisId, dk.DkId);
                        DataTable dtXzdw = oracleDb.ExecuteDataTable(strSql);
                        for (int j = 0; j < dtXzdw.Rows.Count; j++)
                        {
                            Gis_Xzdw xzdw = (Gis_Xzdw) new DataTableOperation().ConvertFromDataRowToEntity(dtXzdw.Rows[j], typeof(Gis_Xzdw));
                            dk.XZDWList.Add(xzdw);
                        }
                    }
                    dataList.DkList.Add(dk);
                }
            }
            return(dataList);
        }
Exemplo n.º 16
0
        private void SyncXxbh(OracleDbOperation sourceDbOperation, OracleDbOperation targetDbOperation, string targetCode,
                              Action <DataRow> actionAddTargetMessageFile, Action <DataRow> actionDeleteSourceMessageFile, Action <DataRow> actionDeleteTargetMessageFile)
        {
            string sql;
            List <OracleParameter> parameters = new List <OracleParameter>();
            DataTable dt;

            //用指定的行政区代码去系统信息接收表中查询所有与接收人行政区代码相等的记录,即需要同步的信息编号。
            sql = "select distinct(jsxxbh) from xtxxjs where jsrxzdm = :jsrxzdm";
            parameters.Clear();
            parameters.Add(new OracleParameter("jsrxzdm", targetCode));
            dt = sourceDbOperation.ExecuteDataTable(sql, "temp", parameters);
            var xxbhs = (from DataRow dr in dt.Rows
                         select "'" + dr[0] + "'").ToArray();

            if (xxbhs.Length > 0)
            {
                //分别取源系统和目标系统取出需要同步的信息接收数据。
                string xxbhsCondition = string.Join(",", xxbhs);
                sql = "select * from xtxxjs where jsxxbh in (" + xxbhsCondition + ")";
                DataTable dtSourceXtxxjs = sourceDbOperation.ExecuteDataTable(sql, "xtxxjs", null);
                DataTable dtTargetXtxxjs = targetDbOperation.ExecuteDataTable(sql, "xtxxjs", null);

                string xtxxCondition = "xxbh in (" + xxbhsCondition + ")";

                //进行比对同步。
                LogOperation.WriteSyncTableTitle(sbLog, "xtxx", SyncType.Comparer, xtxxCondition);
                SyncByComparer(sourceDbOperation, targetDbOperation, "xtxx", xtxxCondition, new List <string>()
                {
                    "xxbh"
                }, true,
                               (dr) =>
                {
                    string xxbh = dr["xxbh"].ToString();
                    LogOperation.Append(sbLog, "添加目标系统信息!信息编号:" + xxbh);
                    foreach (var needAddXtxxjs in dtSourceXtxxjs.Select("jsxxbh = '" + xxbh + "' and jsrxzdm = '" + targetCode + "'"))
                    {
                        DataRow newXtxxjs = dtTargetXtxxjs.NewRow();
                        Copy(needAddXtxxjs, newXtxxjs);
                        dtTargetXtxxjs.Rows.Add(newXtxxjs);
                    }
                    if (actionAddTargetMessageFile != null)
                    {
                        actionAddTargetMessageFile(dr);
                    }
                },
                               (dr) =>
                {
                    LogOperation.Append(sbLog, "删除垃圾系统信息!信息编号:" + dr["XXBH"]);
                },
                               (drSource, drTarget) =>
                {
                    string xxbh = drSource["XXBH"].ToString();
                    LogOperation.Append(sbLog, "更新系统信息!信息编号:" + xxbh);

                    if (actionAddTargetMessageFile != null)
                    {
                        actionAddTargetMessageFile(drSource);
                    }

                    //判断是否需要删除邮件。
                    if (drSource["FSRSC"].ToString() == "1")
                    {
                        var querySource = from DataRow dr in dtSourceXtxxjs.Rows
                                          where dr["JSXXBH"].ToString() == xxbh
                                          select dr;
                        var queryTarget = from DataRow dr in dtTargetXtxxjs.Rows
                                          where dr["JSXXBH"].ToString() == xxbh
                                          select dr;
                        bool needDelete = true;
                        foreach (var itemSource in querySource)
                        {
                            string jsr         = itemSource["JSR"].ToString();
                            var queryTargetJsr = (from dr in queryTarget
                                                  where dr["JSR"].ToString() == jsr
                                                  select dr).FirstOrDefault();
                            if (queryTargetJsr == null)
                            {
                                if (itemSource["JSRSC"].ToString() == "0")
                                {
                                    needDelete = false;
                                    break;
                                }
                            }
                            else
                            {
                                if (queryTargetJsr["JSRSC"].ToString() == "0")
                                {
                                    needDelete = false;
                                    break;
                                }
                            }
                        }

                        //删除邮件。
                        if (needDelete)
                        {
                            dtOperation.DeleteDbDataRow(drSource, (dr) =>
                            {
                                dtOperation.DeleteDbDataRows(querySource, null);
                                LogOperation.Append(sbLog, "删除源系统信息,因为收发双方都已删除此信息!信息编号:" + xxbh);
                                actionDeleteSourceMessageFile(drSource);
                            });
                            dtOperation.DeleteDbDataRow(drTarget, (dr) =>
                            {
                                dtOperation.DeleteDbDataRows(queryTarget, null);
                                LogOperation.Append(sbLog, "删除目标系统信息,因为收发双方都已删除此信息!信息编号:" + xxbh);
                                actionDeleteSourceMessageFile(drTarget);
                            });
                        }
                    }
                });

                //保存信息接收信息。
                sourceDbOperation.UpdateDataTable(dtSourceXtxxjs);
                targetDbOperation.UpdateDataTable(dtTargetXtxxjs);
            }
        }
Exemplo n.º 17
0
 public SyncDataItem(SyncConfig SyncConfig, OracleDbOperation targetDb, OracleDbOperation localDb,
                     string targetCode, string localCode, FtpHelper targetFtp, FtpHelper localFtp, StringBuilder sbLog)
     : base(targetDb, localDb, targetCode, localCode, targetFtp, localFtp, sbLog)
 {
     this.syncConfig = SyncConfig;
 }
Exemplo n.º 18
0
        private Gis_Data<Gis_Dk> getGisdata(string strSql, string conStr, bool allData)
        {
            Gis_Data<Gis_Dk> dataList = null;
            OracleDbOperation oracleDb = new OracleDbOperation(conStr);
            DataTable dt = oracleDb.ExecuteDataTable(strSql);
            if (dt.Rows.Count == 1)
            {
                dataList = (Gis_Data<Gis_Dk>)new DataTableOperation().ConvertFromDataRowToEntity(dt.Rows[0], typeof(Gis_Data<Gis_Dk>));

                strSql = "select * from gis_dk where gisId = " + dataList.GisId;

                dt = oracleDb.ExecuteDataTable(strSql);

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    Gis_Dk dk = (Gis_Dk)new DataTableOperation().ConvertFromDataRowToEntity(dt.Rows[i], typeof(Gis_Dk));
                    dk.GeoID = i;

                    ////界址点
                    strSql = "select * from gis_jzd where gisid = '{0}' and dkid = '{1}' order by dkqh,xh ";
                    strSql = string.Format(strSql, dataList.GisId, dk.DkId);
                    DataTable dtJzd = oracleDb.ExecuteDataTable(strSql);

                    string dkqh = string.Empty;
                    Gis_Jzqy jzqy = null;
                    for (int j = 0; j < dtJzd.Rows.Count; j++)
                    {
                        if ((dtJzd.Rows[j]["dkqh"].ToString() != dkqh && jzqy != null) || j == dtJzd.Rows.Count - 1)
                        {
                            dk.RingList.Add(jzqy);
                        }
                        if (dtJzd.Rows[j]["dkqh"].ToString() != dkqh)
                        {
                            jzqy = new Gis_Jzqy();
                            jzqy.GeoID = int.Parse(dtJzd.Rows[j]["dkqh"].ToString());
                        }
                        Gis_Jzd jzd = (Gis_Jzd)new DataTableOperation().ConvertFromDataRowToEntity(dtJzd.Rows[j], typeof(Gis_Jzd));
                        jzd.GeoID = jzd.XH;
                        jzqy.PointList.Add(jzd);

                        dkqh = dtJzd.Rows[j]["dkqh"].ToString();
                    }
                    if (allData)
                    {
                        ////地类图斑
                        strSql = "select * from gis_dltb where gisId = {0} and dkId = '{1}'";
                        strSql = string.Format(strSql, dataList.GisId, dk.DkId);
                        DataTable dtDltb = oracleDb.ExecuteDataTable(strSql);
                        for (int j = 0; j < dtDltb.Rows.Count; j++)
                        {
                            Gis_Dltb dltb = (Gis_Dltb)new DataTableOperation().ConvertFromDataRowToEntity(dtDltb.Rows[j], typeof(Gis_Dltb));
                            dk.DLTBList.Add(dltb);
                        }

                        ////线状地物
                        strSql = "select * from gis_xzdw where gisId = {0} and dkId = '{1}'";
                        strSql = string.Format(strSql, dataList.GisId, dk.DkId);
                        DataTable dtXzdw = oracleDb.ExecuteDataTable(strSql);
                        for (int j = 0; j < dtXzdw.Rows.Count; j++)
                        {
                            Gis_Xzdw xzdw = (Gis_Xzdw)new DataTableOperation().ConvertFromDataRowToEntity(dtXzdw.Rows[j], typeof(Gis_Xzdw));
                            dk.XZDWList.Add(xzdw);
                        }
                    }
                    dataList.DkList.Add(dk);
                }
            }
            return dataList;
        }
Exemplo n.º 19
0
 public SyncDataMessage(OracleDbOperation targetDbOperation, OracleDbOperation localDbOperation, string targetCode,
                        string localCode, FtpHelper targetFtpOperation, FtpHelper localFtpOperation, StringBuilder sbLog)
     : base(targetDbOperation, localDbOperation, targetCode, localCode, targetFtpOperation, localFtpOperation, sbLog)
 {
 }
Exemplo n.º 20
0
        protected void SyncByComparer(OracleDbOperation sourceDbOperation, OracleDbOperation targetDbOperation,
                                      string tableName, string condition, List <string> Pks, bool isDelete,
                                      Action <DataRow> actionAdd, Action <DataRow> actionDelete, Action <DataRow, DataRow> actionModify, Action <DataRow, DataRow> actionDetail)
        {
            string whereCondition = string.IsNullOrEmpty(condition) ? string.Empty : " where " + condition;
            string orderCondition = string.Empty;

            if (Pks.Count > 0)
            {
                orderCondition = " order by " + string.Join(",", Pks.ToArray());
            }
            string         selectSql   = "select * from " + tableName + whereCondition + orderCondition;
            DataTable      dtSource    = sourceDbOperation.ExecuteDataTable(selectSql, tableName, null);
            DataTable      dtTarget    = targetDbOperation.ExecuteDataTable(selectSql, tableName, null);
            List <DataRow> needDeletes = new List <DataRow>();

            if (isDelete)
            {
                foreach (DataRow drTarget in dtTarget.Rows)
                {
                    needDeletes.Add(drTarget);
                }
            }
            foreach (DataRow drSource in dtSource.Rows)
            {
                DataRow drTarget = null;
                foreach (DataRow drTargetTemp in dtTarget.Rows)
                {
                    bool equals = true;
                    foreach (var pk in Pks)
                    {
                        if (drSource[pk].ToString() != drTargetTemp[pk].ToString())
                        {
                            equals = false;
                            break;
                        }
                    }
                    if (equals)
                    {
                        drTarget = drTargetTemp;
                    }
                }
                if (drTarget == null)
                {
                    DataRow newDrTarget = dtTarget.NewRow();
                    Copy(drSource, newDrTarget);
                    dtTarget.Rows.Add(newDrTarget);
                    if (actionAdd != null)
                    {
                        actionAdd(newDrTarget);
                    }
                    if (actionDetail != null)
                    {
                        actionDetail(drSource, newDrTarget);
                    }
                }
                else
                {
                    Copy(drSource, drTarget);
                    if (actionModify != null)
                    {
                        actionModify(drSource, drTarget);
                    }
                    if (actionDetail != null)
                    {
                        actionDetail(drSource, drTarget);
                    }
                    if (isDelete)
                    {
                        needDeletes.Remove(drTarget);
                    }
                }
            }
            if (isDelete)
            {
                dtOperation.DeleteDbDataRows(needDeletes, actionDelete);
            }
            sourceDbOperation.UpdateDataTable(dtSource);
            targetDbOperation.UpdateDataTable(dtTarget);
        }
Exemplo n.º 21
0
        /// <summary>
        /// 同步。
        /// </summary>
        /// <param name="setting">同步配置。</param>
        /// <param name="log">日志信息。</param>
        /// <returns>同步是否成功。</returns>
        public bool Sync(SyncConfig syncConfig, SyncConfigTarget targetConfig, SyncConfigLocal localConfig, ref StringBuilder sbLog)
        {
            bool result = false;

            LogOperation.Append(sbLog, string.Format("开始同步数据:{0}({1})  开始时间:{2}", targetConfig.Name, targetConfig.Code, DateTime.Now));

            OracleDbOperation localDb = new OracleDbOperation(localConfig.DbConfig.ConnStr);
            FtpHelper localFtp = new FtpHelper(localConfig.FtpConfig.Ip, localConfig.FtpConfig.Port, localConfig.FtpConfig.Username, localConfig.FtpConfig.Password);

            OracleDbOperation targetDb = new OracleDbOperation(targetConfig.DbConfig.ConnStr);
            FtpHelper targetFtp = new FtpHelper(targetConfig.FtpConfig.Ip, targetConfig.FtpConfig.Port, targetConfig.FtpConfig.Username, targetConfig.FtpConfig.Password);
            try
            {
                targetDb.BeginTransaction();
                localDb.BeginTransaction();

                List<SyncData> syncDataList = new List<SyncData>();
                ////系统数据
                syncDataList.Add(new SyncDataSystemInfo(targetDb, localDb, targetConfig.Code, localConfig.Code, targetFtp, localFtp, sbLog));
                ////项目数据
                syncDataList.Add(new SyncDataItem(syncConfig, targetDb, localDb, targetConfig.Code, localConfig.Code, targetFtp, localFtp, sbLog));
                ////流程数据
                syncDataList.Add(new SyncDataWorkflow(targetDb, localDb, targetConfig.Code, localConfig.Code, targetFtp, localFtp, sbLog));
                ////Syncs.Add(new SyncXtxx(targetDbOperation, localDbOperation, targetSetting.Code, localSetting.Code, targetFtpOperation, localFtpOperation, sbLog));

                foreach (var syncData in syncDataList)
                {
                    syncData.Sync();
                }

                targetDb.Commit();
                localDb.Commit();
                result = true;
            }
            catch (Exception e)
            {
                targetDb.Rollback();
                localDb.Rollback();
                LogOperation.WriteExceptionLog(sbLog, e);
            }

            sbLog.AppendLine();
            sbLog.AppendLine("结束时间:" + DateTime.Now);
            return result;
        }
Exemplo n.º 22
0
 protected void SyncByComparer(OracleDbOperation sourceDbOperation, OracleDbOperation targetDbOperation,
                               string tableName, string condition, List <string> Pks, bool isDelete,
                               Action <DataRow> actionAdd, Action <DataRow> actionDelete, Action <DataRow, DataRow> actionModify)
 {
     SyncByComparer(sourceDbOperation, targetDbOperation, tableName, condition, Pks, isDelete, actionAdd, actionDelete, actionModify, null);
 }
Exemplo n.º 23
0
 public SyncDataItem(SyncConfig SyncConfig, OracleDbOperation targetDb, OracleDbOperation localDb,
     string targetCode, string localCode, FtpHelper targetFtp, FtpHelper localFtp, StringBuilder sbLog)
     : base(targetDb, localDb, targetCode, localCode, targetFtp, localFtp, sbLog)
 {
     this.syncConfig = SyncConfig;
 }
Exemplo n.º 24
0
 public void UpdateSyncLog(OracleDbOperation oracleDb, SyncDataLog syncLog)
 {
     syncLog.Succ = 0;
     string strSql = SqlBuilder.BuildUpdateSql(syncLog);
     oracleDb.ExecuteNonQuery(strSql, null);
 }
Exemplo n.º 25
0
 protected void SyncByComparer(OracleDbOperation sourceDbOperation, OracleDbOperation targetDbOperation,
     string tableName, string condition, List<string> Pks, bool isDelete,
     Action<DataRow> actionAdd, Action<DataRow> actionDelete, Action<DataRow, DataRow> actionModify, Action<DataRow, DataRow> actionDetail)
 {
     string whereCondition = string.IsNullOrEmpty(condition) ? string.Empty : " where " + condition;
     string orderCondition = string.Empty;
     if (Pks.Count > 0) orderCondition = " order by " + string.Join(",", Pks.ToArray());
     string selectSql = "select * from " + tableName + whereCondition + orderCondition;
     DataTable dtSource = sourceDbOperation.ExecuteDataTable(selectSql, tableName, null);
     DataTable dtTarget = targetDbOperation.ExecuteDataTable(selectSql, tableName, null);
     List<DataRow> needDeletes = new List<DataRow>();
     if (isDelete)
     {
         foreach (DataRow drTarget in dtTarget.Rows)
         {
             needDeletes.Add(drTarget);
         }
     }
     foreach (DataRow drSource in dtSource.Rows)
     {
         DataRow drTarget = null;
         foreach (DataRow drTargetTemp in dtTarget.Rows)
         {
             bool equals = true;
             foreach (var pk in Pks)
             {
                 if (drSource[pk].ToString() != drTargetTemp[pk].ToString())
                 {
                     equals = false;
                     break;
                 }
             }
             if (equals)
             {
                 drTarget = drTargetTemp;
             }
         }
         if (drTarget == null)
         {
             DataRow newDrTarget = dtTarget.NewRow();
             Copy(drSource, newDrTarget);
             dtTarget.Rows.Add(newDrTarget);
             if (actionAdd != null)
             {
                 actionAdd(newDrTarget);
             }
             if (actionDetail != null)
             {
                 actionDetail(drSource, newDrTarget);
             }
         }
         else
         {
             Copy(drSource, drTarget);
             if (actionModify != null)
             {
                 actionModify(drSource, drTarget);
             }
             if (actionDetail != null)
             {
                 actionDetail(drSource, drTarget);
             }
             if (isDelete)
             {
                 needDeletes.Remove(drTarget);
             }
         }
     }
     if (isDelete)
     {
         dtOperation.DeleteDbDataRows(needDeletes, actionDelete);
     }
     sourceDbOperation.UpdateDataTable(dtSource);
     targetDbOperation.UpdateDataTable(dtTarget);
 }
Exemplo n.º 26
0
 protected void SyncByComparer(OracleDbOperation sourceDbOperation, OracleDbOperation targetDbOperation,
     string tableName, string condition, List<string> Pks, bool isDelete,
     Action<DataRow> actionAdd, Action<DataRow> actionDelete, Action<DataRow, DataRow> actionModify)
 {
     SyncByComparer(sourceDbOperation, targetDbOperation, tableName, condition, Pks, isDelete, actionAdd, actionDelete, actionModify, null);
 }