示例#1
0
        public override UpdateAction Where(TableFilter filter)
        {
            if (this.UpdateColumns.Count == 0)
            {
                throw new Exception("no update columns");
            }

            #region update columns
            string columnStr = string.Empty;
            foreach (var col in this.UpdateColumns)
            {
                var p = new DBParam(col.Key, col.Value);
                ParamCollection.Add(p);
                columnStr += string.Format(" {0} ={1},", col.Key, p.ParamName);
            }
            columnStr = columnStr.TrimEnd(',');
            #endregion

            #region where
            string filterCondition = string.Empty, where = string.Empty;
            if (filter != null)
            {
                filterCondition = filter.Build(base.ParamCollection);
                if (!string.IsNullOrWhiteSpace(filterCondition))
                {
                    where = string.Format(" where {0} ", filterCondition);
                }
            }
            #endregion

            base.MainSql = string.Format("update {0} set {1} {2}", base.TableCode, columnStr, where);
            return(this);
        }
示例#2
0
        private string GetSelectTopStatement(int count, TableFilter filter, TableSort sort)
        {
            var sql = new StringBuilder();

            sql.Append($"SELECT TOP {count} ");
            filter.WriteColumnsProjection(sql);
            sql.Append($" FROM {QuotedName} ");

            if (count > 0)
            {
                if (filter != null && filter.IsRowFiltered)
                {
                    sql.Append(" WHERE ");
                    filter.WriteWhereStatement(sql);
                }

                sql.Append(" ORDER BY ");
                if (sort != null && sort.IsSorted)
                {
                    sort.WriteOrderBy(sql);
                }
                else
                {
                    WriteDefaultOrderBy(sql);
                }
            }
            return(sql.ToString());
        }
示例#3
0
        public override DataTable GetData(int startIndex, int count, TableFilter filter, TableSort sort)
        {
            var sql = new StringBuilder();

            sql.Append("SELECT ");

            filter.WriteColumnsProjection(sql);
            sql.Append(" FROM ");
            sql.Append(QuotedName);

            if (filter != null && filter.IsRowFiltered)
            {
                sql.Append(" WHERE ");
                filter.WriteWhereStatement(sql);
            }

            if (sort != null && sort.IsSorted)
            {
                sql.Append(" ORDER BY ");
                sort.WriteOrderBy(sql);
            }

            sql.Append($" ROWS {startIndex + 1} TO {startIndex + count}");

            var data = new DataTable(Name);

            using (var connectionScope = Database.CreateConnectionScope())
                using (var select = Connection.CreateCommand()) {
                    select.CommandText = sql.ToString();
                    using (var reader = select.ExecuteReader()) {
                        data.Load(reader);
                    }
                }
            return(data);
        }
示例#4
0
        public override DataTable GetData(int startIndex, int count, TableFilter filter, TableSort sort)
        {
            var data = new DataTable(this.Name);

            var text = new StringBuilder();

            text.Append("SELECT ");
            filter.WriteColumnsProjection(text);
            text.Append(" FROM ");
            text.Append(this.QuotedName);

            if (filter.IsRowFiltered)
            {
                text.Append(" WHERE ");
                filter.WriteWhereStatement(text);
            }
            if (sort != null && sort.IsSorted)
            {
                text.Append(" ORDER BY ");
                sort.WriteOrderBy(text);
            }
            text.AppendFormat(" LIMIT {0}, {1}", startIndex, count);

            using (var select = this.Connection.CreateCommand()) {
                select.CommandText = text.ToString();
                using (this.Database.CreateConnectionScope()) {
                    using (var adapter = (MySqlDataAdapter)this.Database.CreateAdapter(this, filter)) {
                        adapter.SelectCommand = select;
                        adapter.Fill(data);
                    }
                }
            }
            return(data);
        }
示例#5
0
        public TableDocument(Table table, TableFilter filter)
        {
            InitializeComponent();

            this.tableToolStripMenuItem.DropDown          = this.dataGridView.MainMenu;
            this.autoResizeColumnsDropDownButton.DropDown = this.dataGridView.AutoResizeColumnsMenu;

            this.rowsPerPage            = Settings.Default.RowsPerPage;
            this.rowsPerPageButton.Text = this.rowsPerPage.ToString();

            this.table = table;

            ////this.adapter = table.Database.CreateAdapter(table);
            this.filter = filter ?? new TableFilter(table);
            this.sort   = new TableSort(table);

            ////sort.SortPanel.LoadColumns(table.GetColumnNames());
            ////this.sortToolStripButton.DropDown.Items.Add(sort);

            if (table.IsReadOnly)
            {
                SetReadOnlyTable();
            }

            SetupLoadingPanel();
            HideLoadingPanel();
            dataGridView.AutoGenerateColumns = true;
        }
示例#6
0
        public async Task <int> Count(TableFilter filter)
        {
            IQueryable <TableDAO> Tables = DataContext.Table;

            Tables = DynamicFilter(Tables, filter);
            return(await Tables.CountAsync());
        }
示例#7
0
        public int ProcessWftEvent(uint batchCount)
        {
            var filter = TableFilter.New().Equals("status", 0); //.Equals("waitcallback", 0);
                                                                //#if DEBUG
                                                                //            filter = TableFilter.New().Equals("status", 0).Equals("flowid", "00001F493WJRC0000A01");
                                                                //#endif
            var jobs = _DataAccess.Query(WFTEventEntity.TableCode).FixField("*").Paging(1, batchCount).Where(filter).QueryList <WFTEventEntity>();

            Parallel.ForEach <WFTEventEntity>(jobs,
                                              new ParallelOptions()
            {
                MaxDegreeOfParallelism = Environment.ProcessorCount
            }, (job) =>
            {
                try
                {
                    Run(job);
                }
                catch (HttpRequestException ex)
                {
                    _Logger.LogError($"处理wftevent发升网络错误:{ex.Message}", ex);
                }
                catch (Exception ex)
                {
                    if (ex.InnerException != null)
                    {
                        _Logger.LogError($"处理wftevent发升错误InnerException:{ex.InnerException.Message}", ex.InnerException);
                    }
                    _Logger.LogError($"处理wftevent发升错误:{ex.Message}", ex);
                }
            });
            return(jobs.Count());
        }
示例#8
0
        public int Callback(string mqId)
        {
            var filter      = TableFilter.New().Equals("id", mqId);
            var eventEntity = _DataAccess.Query(WFTEventEntity.TableCode).FixField("*").Where(filter).QueryFirst <WFTEventEntity>();

            if (eventEntity == null)
            {
                throw new Exception($"回调任务{mqId}不存在");
            }
            if (eventEntity.ProcessDate == DateTime.MinValue)
            {
                throw new Exception($"回到任务会处理完毕,请稍后回调");
            }

            var tinsEntity  = _WFTask.GetTinsById(eventEntity.Tinsid);
            var taskEntity  = _WFTask.GetTaskById(eventEntity.Taskid);
            var fins        = _WorkFlowIns.GetFlowInstance(eventEntity.Finsid);
            var bisJsonData = GetBisData(taskEntity, eventEntity.Dataid, fins.ServiceId, eventEntity.Tinsid, out bool isMultipleNextTask);
            var nextTasks   = _WFTask.GetNextTasks(taskEntity, tinsEntity, bisJsonData);

            if (nextTasks.Length != 1)
            {
                throw new Exception("流程配置错误,下个任务节点数量必须是1");
            }
            taskEntity.ReplaceTemplateInfo(bisJsonData);
            using (var tran = TransHelper.BeginTrans())
            {
                //1、更新任务实例状态
                eventEntity.State        = EDBEntityState.Modified;
                eventEntity.Waitcallback = 0;
                eventEntity.Callbackdate = DateTime.Now;
                _DataAccess.Update(eventEntity);

                tinsEntity.State = EDBEntityState.Modified;
                tinsEntity.Edate = DateTime.Now;
                _DataAccess.Update(tinsEntity);

                //2、找下个任务节点,并流转,回调节点不应该有多个下个节点
                //如果下一个节点是聚合节点,则需要加锁,防止与回调冲突。默认等待10S
                if (nextTasks[0].Type == ETaskType.JuHe)
                {
                    var lockKey = $"{MutexConfig.WORKFLOWLOCKPRE}{fins.Dataid}";
                    var success = ExeWithLock(lockKey, MutexConfig.WORKFLOWLOCKTIMEOUT, () =>
                    {
                        ExeNextTask(fins, nextTasks);
                        tran.Commit();
                    });
                    if (!success)
                    {
                        throw new Exception($"未获取独占锁,请重试,dataid:{fins.Dataid }");
                    }
                }
                else
                {
                    ExeNextTask(fins, nextTasks);
                    tran.Commit();
                }
            }
            return(1);
        }
示例#9
0
        private string GetSelectOffsetFetchStatement(int startIndex, int count, TableFilter filter, TableSort sort)
        {
            var sql = new StringBuilder();

            sql.Append("SELECT ");
            filter.WriteColumnsProjection(sql);
            sql.Append(" FROM ");
            sql.Append(QuotedName);

            if (filter.IsRowFiltered)
            {
                sql.Append(" WHERE ");
                filter.WriteWhereStatement(sql);
            }

            sql.Append(" ORDER BY ");
            if (sort != null && sort.IsSorted)
            {
                sort.WriteOrderBy(sql);
            }
            else
            {
                WriteDefaultOrderBy(sql);
            }

            sql.Append($" OFFSET {startIndex} ROWS FETCH NEXT {count} ROWS ONLY");

            return(sql.ToString());
        }
示例#10
0
        private IQueryable <TableDAO> OrFilter(IQueryable <TableDAO> query, TableFilter filter)
        {
            if (filter.OrFilter == null || filter.OrFilter.Count == 0)
            {
                return(query);
            }
            IQueryable <TableDAO> initQuery = query.Where(q => false);

            foreach (TableFilter TableFilter in filter.OrFilter)
            {
                IQueryable <TableDAO> queryable = query;
                if (filter.Id != null)
                {
                    queryable = queryable.Where(q => q.Id, filter.Id);
                }
                if (filter.Code != null)
                {
                    queryable = queryable.Where(q => q.Code, filter.Code);
                }
                if (filter.OrderId != null)
                {
                    queryable = queryable.Where(q => q.OrderId, filter.OrderId);
                }
                initQuery = initQuery.Union(queryable);
            }
            return(initQuery);
        }
示例#11
0
        public override DbDataAdapter CreateAdapter(Table table, TableFilter filter)
        {
            var sqlTable = table as SqlCeTable;

            if (sqlTable == null)
            {
                throw new InvalidOperationException("Table should be an SqlCeTable");
            }
            var adapter = new SqlCeDataAdapter(table.GetBaseSelectCommandText(filter), this.connection);

            if (!table.IsReadOnly)
            {
                var builder = new SqlCeCommandBuilder(adapter);
                builder.ConflictOption = ConflictOption.OverwriteChanges;
                try {
                    adapter.UpdateCommand = builder.GetUpdateCommand();
                    adapter.InsertCommand = builder.GetInsertCommand();
                    adapter.DeleteCommand = builder.GetDeleteCommand();
                } catch (InvalidOperationException) {
                    sqlTable.SetReadOnly(true);
                    return(adapter);
                }
            }
            return(adapter);
        }
示例#12
0
        public WFFinsEntity GetFlowInstance(string finsId)
        {
            var filter = TableFilter.New().Equals("ID", finsId);

            return(_DataAccess.Query(WFFinsEntity.TableCode).FixField("*")
                   .Where(filter).QueryFirst <WFFinsEntity>());
        }
示例#13
0
        public static string[] AsStrings(this TableFilter value)
        {
            var lines = new List <string>();

            for (int i = 0; i < value.Count(); i++)
            {
                var isFirstLine     = (i == 0);
                var isLastLine      = (i == value.Count() - 1);
                var tableFilterLine = value.ElementAt(i);
                var line            = string.Format("{0}={1}({2})", tableFilterLine.FieldName, tableFilterLine.Type.AsString(), tableFilterLine.Value);

                if (isFirstLine)
                {
                    line = string.Format("WHERE({0}", line);
                }
                else
                {
                    line = string.Format("      {0}", line);
                }

                if (isLastLine)
                {
                    line = string.Format("{0})", line);
                }
                else
                {
                    line = string.Format("{0},", line);
                }

                lines.Add(line);
            }

            return(lines.ToArray <string>());
        }
示例#14
0
        public List <WFFlowEntity> GetFlowsByServiceId(string serviceId)
        {
            if (string.IsNullOrWhiteSpace(serviceId))
            {
                throw new ArgumentException($"{nameof(serviceId)} is not null");
            }

            var filter        = TableFilter.New().Equals("id", serviceId);
            var serviceEntity = DataAccess.Query(WFServiceEntity.TableCode).FixField("*").Where(filter).QueryFirst <WFServiceEntity>();

            if (serviceEntity == null)
            {
                throw new Exception("没有找到流程业务");
            }

            filter = TableFilter.New().Equals("serviceId", serviceId).Equals("istemplate", 1);
            var query = DataAccess.Query(WFFlowEntity.TableCode).FixField("*").Sort("version desc").Where(filter);
            var list  = query.QueryList <WFFlowEntity>().ToList();

            var currentFlow = list.Where(flow => flow.ID == serviceEntity.Currentflowid).FirstOrDefault();

            if (currentFlow != null)
            {
                currentFlow.CurrentTag = 1;
            }
            return(list);
        }
示例#15
0
        public WFTaskSettingEntity GetTaskJobInfo(WFTaskEntity taskEntity)
        {
            var filter        = TableFilter.New().Equals("id", taskEntity.ID);
            var settingEntity = DataAccess.Query(WFTaskSettingEntity.TableCode)
                                .FixField("*").Where(filter).QueryFirst <WFTaskSettingEntity>();

            return(settingEntity);
        }
示例#16
0
 public void Set(CalcFormulaMethod method, string tableName, string fieldName, bool reverseSign = false, params CalcFormulaTableFilterLine[] tableFilter)
 {
     Method      = method;
     TableName   = tableName;
     FieldName   = fieldName;
     ReverseSign = reverseSign;
     TableFilter.AddRange(tableFilter);
 }
示例#17
0
        public WFTinsEntity GetTinsById(string tinsId)
        {
            var filter     = TableFilter.New().Equals("id", tinsId);
            var tinsEntity = DataAccess.Query(WFTinsEntity.TableCode)
                             .FixField("*").Where(filter).QueryFirst <WFTinsEntity>();

            return(tinsEntity);
        }
示例#18
0
        /// <summary>
        /// 从数据库或者缓存中获取流程服务的接入url信息
        /// </summary>
        /// <param name="serviceId"></param>
        /// <returns></returns>
        private string GetAppAccessUrl(string serviceId)
        {
            var filter        = TableFilter.New().Equals("id", serviceId);
            var serviceEntity = _dataAccess.Query(WFServiceEntity.TableCode).FixField("id,wfappid").Where(filter).QueryFirst <WFServiceEntity>();

            filter = TableFilter.New().Equals("id", serviceEntity.WfappId);
            return(_dataAccess.Query("wfapp").FixField("url").Where(filter).QueryScalar().ConvertTostring());
        }
示例#19
0
        public WFTaskEntity GetStartTask(string flowId)
        {
            var filter     = TableFilter.New().Equals("flowid", flowId).Equals("type", 1);
            var taskEntity = DataAccess.Query(WFTaskEntity.TableCode)
                             .FixField("*").Where(filter).QueryFirst <WFTaskEntity>();

            return(taskEntity);
        }
示例#20
0
        public bool IsMultipleNextTask(WFTaskEntity preTask)
        {
            var filter = TableFilter.New().Equals("BEGINTASKID", preTask.ID);
            var links  = DataAccess.Query(WFLinkEntity.TableCode)
                         .FixField("*").Where(filter).QueryList <WFLinkEntity>().ToList();

            return(links.Count > 1);
        }
示例#21
0
        public IEnumerable <WFTinsEntity> GetTinssById(string finsId, string[] taskIds)
        {
            var filter      = TableFilter.New().Equals("FINSID", finsId).In("taskid", string.Join(',', taskIds));
            var tinsEntitys = DataAccess.Query(WFTinsEntity.TableCode)
                              .FixField("*").Where(filter).QueryList <WFTinsEntity>();

            return(tinsEntitys);
        }
示例#22
0
        public FilterDialog(TableFilter filter)
        {
            InitializeComponent();
            this.filter = filter;
            columnFilterBindingSource.DataSource = this.filter.ColumnFilters;

            FormExtensions.TrySetSize(this, Settings.Default.FilterDialogSize);
        }
示例#23
0
        protected virtual DataTable GetDataSecuencial(int startIndex, int count, TableFilter filter, TableSort sort)
        {
            var sql = new StringBuilder();

            sql.Append("SELECT ");
            filter.WriteColumnsProjection(sql);
            sql.Append(" FROM ");
            sql.Append(QuotedName);

            if (filter != null && filter.IsRowFiltered)
            {
                sql.Append(" WHERE ");
                filter.WriteWhereStatement(sql);
            }

            if (sort != null && sort.IsSorted)
            {
                sql.Append(" ORDER BY ");
                sort.WriteOrderBy(sql);
            }

            using (var select = Connection.CreateCommand()) {
                select.CommandText = sql.ToString();

                using (Database.CreateConnectionScope()) {
                    using (var reader = select.ExecuteReader(CommandBehavior.SequentialAccess)) {
                        var data = new DataTable(Name);
                        data.BeginLoadData();
                        for (var i = 0; i < reader.FieldCount; i++)
                        {
                            data.Columns.Add(new DataColumn(reader.GetName(i), reader.GetFieldType(i)));
                        }

                        while (startIndex > 0 && reader.Read())
                        {
                            startIndex--;
                        }

                        if (reader.Read())
                        {
                            do
                            {
                                var row = data.NewRow();
                                for (var i = 0; i < reader.FieldCount; i++)
                                {
                                    row[i] = reader[i];
                                }
                                data.Rows.Add(row);
                                count--;
                            } while (reader.Read() && count > 0);
                        }
                        data.EndLoadData();
                        data.AcceptChanges();
                        return(data);
                    }
                }
            }
        }
        public DBCollection <WFTEventEntity> GetList(TableFilter tf)
        {
            var col = this._DataAccess.Query(WFTEventEntity.TableCode)
                      .FixField("*")
                      .Where(tf)
                      .Query <WFTEventEntity>();

            return(col);
        }
        public WFTEventEntity GetById(string id)
        {
            var col = this._DataAccess.Query(WFTEventEntity.TableCode)
                      .FixField("*")
                      .Where(TableFilter.New().Equals("ID", id))
                      .Query <WFTEventEntity>();

            return(col.Data.FirstOrDefault());
        }
示例#26
0
        public DBCollection <WFTDataEntity> GetByFlowIdAndTaskId(TableFilter tf)
        {
            var col = this._da.Query(WFTDataEntity.TableCode)
                      .FixField("*")
                      .Where(tf)
                      .Query <WFTDataEntity>();

            return(col);
        }
        private WFServiceEntity InitData(string key)
        {
            var col = this._da.Query(WFServiceEntity.TableCode)
                      .FixField("*")
                      .Where(TableFilter.New().Equals("ID", key))
                      .Query <WFServiceEntity>();

            return(col.Data.FirstOrDefault());
        }
        public DBCollection <WFFinsEntity> GetRuningData(WFMonitorSearchModel searchModel)
        {
            TableFilter filter = TableFilter.New();

            BuildFilter(filter, searchModel);
            var coll = GetRuningData(searchModel, filter);

            return(coll);
        }
示例#29
0
        public void TestMethod()
        {
            var col = this._da.Query(WFTinsEntity.TableCode)
                      .FixField("*")
                      .Where(TableFilter.New().Equals("ID", "00001Q1FJ6JYK0000A03"))
                      .Query <WFTinsEntity>();

            Console.WriteLine(this.Json.Serialize(col.Data.FirstOrDefault().Edate));
        }
示例#30
0
        public List <WFTinsEntity> GetTinsList(string finsId)
        {
            var col = this.DataAccess.Query(WFTinsEntity.TableCode)
                      .FixField("*")
                      .Where(TableFilter.New().Equals("FINSID", finsId))
                      .Query <WFTinsEntity>();

            return(col.Data.ToList());
        }