Exemplo n.º 1
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.º 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
        /// <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.º 4
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.º 5
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.º 6
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.º 7
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.º 8
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);
            }
        }