Esempio n. 1
0
        /// <summary>
        /// 此处执行业务操作逻辑,数据库可以直接使用小平台连接ESB数据库,进行读写操作。
        /// 如果非得要自己取sql连接,请去config.ApplicationName的值(注册表键)。自己获取。
        /// </summary>
        private void DoWork()
        {
            //此处实现代码...

            //MyTrace.Write(TraceCategory.AsyncService, TraceLevel.Error,
            //             "自定义作业操作:作业测试: " + DateTime.Now.ToString());


            WriteMsg("调度开始");
            try
            {
                //获取ERP业务对象
                ERPObjectBusiness erpObjectBusiness = new ERPObjectBusiness();
                var erpObjectList = erpObjectBusiness.GetERPObjectList();

                //初始化配置数据
                //ERPConfigBusiness erpConfigBusiness = new ERPConfigBusiness();
                //var _erpConfig = erpConfigBusiness.ErpConfigs;

                string item = ConfigurationManager.AppSettings["ApplicationName"];
                if (item == null)
                {
                    WriteMsg("ApplicationName为空");
                }
                var strConnection = (new MyDbConnection(item)).GetConnectionString();
                //if (!string.IsNullOrEmpty(item))
                //{
                //    Initializer.UnSafeInit(strConnection);
                //}

                string str        = "SELECT ProviderID,ProviderName,DisplayName,Description,ProviderType, IsMainSite AS Protocol,DbServer,DBUserName,DbPassword,DbName FROM esb_Provider WHERE (1=1)";
                var    _erpConfig = CPQuery.From(str).ToList <EsbProvider>();


                ////获取主系统数据
                var mainConfig = _erpConfig.SingleOrDefault(t => t.Protocol == "1");

                strConnection = string.Format("server={0};uid={1};pwd={2};database={3}", mainConfig.DbServer, mainConfig.DBUserName, mainConfig.DbPassword, mainConfig.DbName);

                SqlExecuteHelper sqlHelper = new SqlExecuteHelper(strConnection);

                //获取子系统数据
                var otherConfig = _erpConfig.Where(t => t.Protocol == "0" && t.DbName != mainConfig.DbName);
                otherConfig = DataTableHelper.DistinctBy(otherConfig, p => p.DbName);

                string SelectSQL = string.Empty;

                //业务系统
                DataSet _dsResult = new DataSet();
                foreach (var erpObject in erpObjectList)
                {
                    foreach (var erpTable in erpObject.ERPTables)
                    {
                        //得到主库数据
                        SelectSQL = string.Format("SELECT {0},'' as CheckAction FROM {1}", "*", erpTable.TableName);

                        DataTable mainTable = new DataTable();
                        mainTable = sqlHelper.GetDataTable(SelectSQL, erpTable.TableName, erpObject.ObjectName);

                        DataTable itemTable = new DataTable();

                        foreach (var itemConfig in otherConfig)
                        {
                            DataTable diffTable = new DataTable();
                            //得到子库数据

                            strConnection = string.Format("server={0};uid={1};pwd={2};database={3}", itemConfig.DbServer, itemConfig.DBUserName, itemConfig.DbPassword, itemConfig.DbName);

                            SqlExecuteHelper itemSqlHelper = new SqlExecuteHelper(strConnection);
                            itemTable = itemSqlHelper.GetDataTable(SelectSQL, erpTable.TableName, erpObject.ObjectName);

                            //现默认两个DataTable需要对比的字段是一样的
                            DataTableHelper.CompareTable(mainTable, itemTable, out diffTable, erpTable.TableKey, erpTable.TableProps);

                            //写入日志
                            var filePath = string.Format(@"{0}\{1}\{2}\{3}\{4}", System.AppDomain.CurrentDomain.BaseDirectory, "InspectionLog", itemConfig.DisplayName, DateTime.Now.ToString("yyyyMMdd"), erpObject.ObjectName);

                            if (!Directory.Exists(filePath))
                            {
                                Directory.CreateDirectory(filePath);
                            }

                            diffTable.WriteXml(string.Format(@"{0}\{1}\{2}\{3}\{4}\{5}.xml", System.AppDomain.CurrentDomain.BaseDirectory, "InspectionLog", itemConfig.DisplayName, DateTime.Now.ToString("yyyyMMdd"), erpObject.ObjectName, erpTable.TableName));
                        }
                    }
                }
            }
            catch (Exception err)
            {
                WriteMsg(err.ToString());
            }

            WriteMsg("调度结束");
        }