/// <summary>
        /// 操作
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        public IActionResult OnPostBusinessDetailsForm(Data_Business_Details item)
        {
            var info = new WriteReturn();

            using (var db = new DataContext(AppEtl.Db))
            {
                var table  = IFast.Query <Data_Business>(a => a.Id == item.Id).ToItem <Data_Business>(db);
                var source = IFast.Query <Data_Source>(a => a.Id == item.DataSourceId).ToItem <Data_Source>(db);
                var key    = string.Format(AppEtl.CacheKey.Column, source.Host, item.TableName);
                var colunm = RedisInfo.Get <List <CacheColumn> >(key, AppEtl.CacheDb).Find(a => a.Name == item.ColumnName);

                db.BeginTrans();
                if (IFast.Query <Data_Business_Details>(a => a.FieldId == item.FieldId).ToCount(db) == 0)
                {
                    item.FieldId = Guid.NewGuid().ToStr();
                    info         = IFast.Add(item);
                    if (info.IsSuccess)
                    {
                        info = DataSchema.AddColumn(db, table, item, colunm, source);
                        if (info.IsSuccess)
                        {
                            DataSchema.UpdateColumnComment(db, table, item, colunm, source);
                        }
                    }
                }
                else
                {
                    info = IFast.Update <Data_Business_Details>(item, a => a.FieldId == item.FieldId);
                    if (info.IsSuccess)
                    {
                        info.IsSuccess = DataSchema.UpdateColumn(db, table, item, colunm, source);
                        if (info.IsSuccess)
                        {
                            DataSchema.UpdateColumnComment(db, table, item, colunm, source);
                        }
                    }
                }

                if (info.IsSuccess)
                {
                    db.SubmitTrans();
                    return(new JsonResult(new { success = true, msg = "操作成功" }));
                }
                else
                {
                    db.RollbackTrans();
                    return(new JsonResult(new { success = false, msg = "操作失败" }));
                }
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 保存业务配置
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Btn_SaveData(object sender, RoutedEventArgs e)
        {
            using (var db = new DataContext())
            {
                var isUpdateTable = false;
                var isSuccess     = true;
                db.BeginTrans();
                var main = Bussiness.SelectedItem as Data_Business;

                if (main == null || string.IsNullOrEmpty(main.Name))
                {
                    CodeBox.Show("业务名称不能为空", this);
                    return;
                }

                if (string.IsNullOrEmpty(main.TableName))
                {
                    CodeBox.Show("业务表名不能为空", this);
                    return;
                }

                #region 业务
                if (string.IsNullOrEmpty(main.Id))
                {
                    //默认每天更新
                    main.UpdateDay = 1;

                    //默认晚上2点更新
                    main.UpdateTime = 2;

                    //默认更新条数1万
                    main.UpdateCount = 1;

                    //默认上次更新时间
                    main.LastUpdateTime = DateTime.Now;

                    //关联主键策略(1=重复删除,0=重复保留,2=重复更新)
                    main.Policy = "1";

                    //增加业务
                    main.Id   = Guid.NewGuid().ToString();
                    isSuccess = db.Add(main).writeReturn.IsSuccess;

                    //创建表
                    if (isSuccess)
                    {
                        isSuccess = DataSchema.CreateTable(db, main);
                    }

                    //表备注
                    if (isSuccess)
                    {
                        isSuccess = DataSchema.UpdateTableComment(db, main);
                    }
                }
                else
                {
                    //修改业务
                    if (isSuccess)
                    {
                        var oldTableName = FastRead.Query <Data_Business>(a => a.Id == main.Id, a => new { a.Name }).ToDic(db).GetValue("name").ToString();
                        isSuccess = db.Update <Data_Business>(main, a => a.Id == main.Id, a => new { a.Name }).writeReturn.IsSuccess;

                        if (oldTableName != main.TableName)
                        {
                            if (DataSchema.IsExistsTable(db, oldTableName))
                            {
                                isUpdateTable = true;

                                //修改表名
                                if (isSuccess)
                                {
                                    isSuccess = DataSchema.UpdateTableName(db, main, oldTableName);
                                }

                                //修改表备注
                                if (isSuccess)
                                {
                                    isSuccess = DataSchema.UpdateTableComment(db, main);
                                }
                            }
                            else
                            {
                                DataSchema.CreateTable(db, main);
                            }
                        }
                    }
                }
                #endregion

                #region 业务明细
                foreach (var temp in BussinessDetails.Items)
                {
                    var leaf = temp as Data_Business_Details;

                    if (leaf == null)
                    {
                        continue;
                    }

                    if (string.IsNullOrEmpty(leaf.FieldName))
                    {
                        continue;
                    }

                    //数据源id
                    if (Common.GetTemplateColumn <ComboBox>(BussinessDetails, 1, "DataSourceBox", temp).SelectedItem == null)
                    {
                        continue;
                    }
                    var dataSource = (Common.GetTemplateColumn <ComboBox>(BussinessDetails, 1, "DataSourceBox", temp).SelectedItem as Data_Source);
                    leaf.DataSourceId = dataSource.Id;

                    //表名
                    if (Common.GetTemplateColumn <ComboBox>(BussinessDetails, 2, "TabelBox", temp).SelectedItem != null)
                    {
                        leaf.TableName = (Common.GetTemplateColumn <ComboBox>(BussinessDetails, 2, "TabelBox", temp).SelectedItem as Cache_Table).Name;
                    }

                    //源列名
                    var columnInfo = new Cache_Column();
                    if (Common.GetTemplateColumn <ComboBox>(BussinessDetails, 3, "ColumnBox", temp).SelectedItem != null)
                    {
                        columnInfo      = Common.GetTemplateColumn <ComboBox>(BussinessDetails, 3, "ColumnBox", temp).SelectedItem as Cache_Column;
                        leaf.ColumnName = columnInfo.Name;
                    }

                    //主键
                    if (Common.GetTemplateColumn <ComboBox>(BussinessDetails, 4, "KeyBox", temp).SelectedItem != null)
                    {
                        columnInfo = Common.GetTemplateColumn <ComboBox>(BussinessDetails, 4, "KeyBox", temp).SelectedItem as Cache_Column;
                        leaf.Key   = columnInfo.Name;
                    }

                    //排序
                    if (Common.GetTemplateColumn <ComboBox>(BussinessDetails, 5, "OrderByBox", temp).SelectedItem != null)
                    {
                        columnInfo   = Common.GetTemplateColumn <ComboBox>(BussinessDetails, 5, "OrderByBox", temp).SelectedItem as Cache_Column;
                        leaf.OrderBy = columnInfo.Name;
                    }

                    //字典
                    if (Common.GetTemplateColumn <ComboBox>(BussinessDetails, 6, "DicBox", temp).SelectedItem != null)
                    {
                        var dic = Common.GetTemplateColumn <ComboBox>(BussinessDetails, 6, "DicBox", temp).SelectedItem as Data_Dic;
                        if (dic != null && !string.IsNullOrEmpty(dic.Id))
                        {
                            leaf.Dic = dic.Id;
                        }
                    }

                    //sql
                    leaf.Sql = (temp as Data_Business_Details).Sql;

                    if (string.IsNullOrEmpty(leaf.FieldId))
                    {
                        leaf.FieldId = Guid.NewGuid().ToString();
                        leaf.Id      = main.Id;

                        //增加业务明细
                        if (isSuccess)
                        {
                            isSuccess = db.Add(leaf).writeReturn.IsSuccess;
                        }

                        //增加列
                        columnInfo = Common.GetTemplateColumn <ComboBox>(BussinessDetails, 3, "ColumnBox", temp).SelectedItem as Cache_Column;
                        if (isSuccess)
                        {
                            isSuccess = DataSchema.AddColumn(db, main, leaf, columnInfo, dataSource);
                        }

                        //修改备注
                        if (isSuccess)
                        {
                            isSuccess = DataSchema.UpdateColumnComment(db, main, leaf, columnInfo, dataSource);
                        }
                    }
                    else
                    {
                        //修改业务明细
                        if (isSuccess)
                        {
                            isSuccess = db.Update <Data_Business_Details>(leaf, a => a.FieldId == leaf.FieldId, a => new { a.FieldName, a.DataSourceId, a.ColumnName, a.Key, a.OrderBy, a.TableName, a.Dic, a.Sql }).writeReturn.IsSuccess;
                        }

                        //列增加修改
                        if (isSuccess)
                        {
                            if (DataSchema.IsExistsColumn(db, main.Name, leaf.FieldName))
                            {
                                isSuccess = DataSchema.UpdateColumn(db, main, leaf, columnInfo, dataSource);
                            }
                            else
                            {
                                isSuccess = DataSchema.AddColumn(db, main, leaf, columnInfo, dataSource);
                            }
                        }
                    }
                }
                #endregion

                if (isSuccess)
                {
                    if (isUpdateTable)
                    {
                        Bussiness.ItemsSource = AppCache.GetAllBusiness;
                        Common.UpdateWindow();
                    }

                    db.SubmitTrans();
                    CodeBox.Show("保存业务成功", this);
                }
                else
                {
                    db.RollbackTrans();
                    CodeBox.Show("保存业务失败", this);
                }
            }
        }
        /// <summary>
        /// 操作
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        public IActionResult OnPostBusinessFormList(Data_Business_List item)
        {
            var result = new WriteReturn();

            result.IsSuccess = true;

            using (var db = new DataContext(AppEtl.Db))
            {
                if (IFast.Query <Data_Source>(a => a.Id == item.DataId).ToCount(db) == 0)
                {
                    return(new JsonResult(new { success = false, msg = "数据源不存在" }));
                }

                var data     = IFast.Query <Data_Source>(a => a.Id == item.DataId).ToItem <Data_Source>(db);
                var tableKey = string.Format(AppEtl.CacheKey.Table, data.Host);
                if (!RedisInfo.Exists(tableKey, AppEtl.CacheDb))
                {
                    DataSchema.InitTable(data, false);
                }

                var tableList = RedisInfo.Get <List <CacheTable> >(tableKey, AppEtl.CacheDb);
                foreach (var table in tableList)
                {
                    var columnKey = string.Format(AppEtl.CacheKey.Column, data.Host, table.Name);
                    if (!RedisInfo.Exists(columnKey, AppEtl.CacheDb))
                    {
                        DataSchema.InitColumn(data, false, table.Name);
                    }

                    var tableModel = BaseMap.CopyModel <Data_Business, Data_Business_List>(item);
                    tableModel.Id        = Guid.NewGuid().ToStr();
                    tableModel.Name      = string.IsNullOrEmpty(table.Comments) ? table.Name : table.Comments;
                    tableModel.TableName = table.Name;

                    if (result.IsSuccess)
                    {
                        result = db.Add(tableModel).writeReturn;
                    }

                    if (result.IsSuccess)
                    {
                        result = DataSchema.CreateTable(db, tableModel);
                    }


                    var columnList = RedisInfo.Get <List <CacheColumn> >(columnKey, AppEtl.CacheDb);
                    var keyName    = columnList.Find(a => a.IsKey == true)?.Name;
                    var keyList    = columnList.FindAll(a => a.IsKey == true);

                    columnList.ForEach(column => {
                        var columnModel          = new Data_Business_Details();
                        columnModel.FieldId      = Guid.NewGuid().ToStr();
                        columnModel.Id           = tableModel.Id;
                        columnModel.DataSourceId = data.Id;
                        columnModel.TableName    = table.Name;
                        columnModel.ColumnName   = column.Name;
                        columnModel.FieldName    = column.Name;
                        columnModel.Key          = keyName;

                        if (result.IsSuccess)
                        {
                            result = db.Add(columnModel).writeReturn;
                        }
                        else
                        {
                            BaseLog.SaveLog(string.Format("tableName:{0},error:", table.Name, result.Message), "Error_CreateTable");
                        }

                        if (result.IsSuccess)
                        {
                            if ((keyList.Count > 1 && keyList.Exists(a => a.Name == columnModel.FieldName)))
                            {
                                result = DataSchema.AddColumn(db, tableModel, columnModel, column, data, false);
                            }
                            else
                            {
                                result = DataSchema.AddColumn(db, tableModel, columnModel, column, data);
                            }
                            if (result.IsSuccess)
                            {
                                DataSchema.UpdateColumnComment(db, tableModel, columnModel, column, data);
                            }
                        }
                        result.IsSuccess = true;
                    });

                    if (keyList.Count > 1)
                    {
                        DataSchema.AddColumnMoreKey(db, tableModel, keyList);
                    }
                }

                if (result.IsSuccess)
                {
                    return(new JsonResult(new { success = true, msg = "操作成功" }));
                }
                else
                {
                    return(new JsonResult(new { success = false, msg = result.Message }));
                }
            }
        }