using System.Collections.Generic; using System.Threading.Tasks; using GxPress.Common.AppOptions; using GxPress.Common.Tools; using GxPress.Entity.WorkFlow; using GxPress.Repository.Interface.WorkFlow; using Microsoft.Extensions.Options; using Datory; using Dapper; namespace GxPress.Repository.Implement.WorkFlow { public class FlowFieldValueRepository : IFlowFieldValueRepository { private readonly Repository _repository; private readonly string _connectionString; private readonly string _databaseTypeStr; public FlowFieldValueRepository(IOptionsMonitor dbOptionsAccessor) { _databaseTypeStr = dbOptionsAccessor.CurrentValue.DatabaseType; _connectionString = dbOptionsAccessor.CurrentValue.ConnectionString; var databaseType = StringUtils.ToEnum(dbOptionsAccessor.CurrentValue.DatabaseType, DatabaseType.MySql); var database = new Database(databaseType, dbOptionsAccessor.CurrentValue.ConnectionString); _repository = new Repository(database); } public IDatabase Database => _repository.Database; public string TableName => _repository.TableName; public List TableColumns => _repository.TableColumns; public async Task InsertAsync(FlowFieldValue item) { return await _repository.InsertAsync(item); } public async Task> GetListAsync(int flowId) { return await _repository.GetAllAsync(Q .Where(nameof(FlowFieldValue.FlowId), flowId) .OrderByDesc(nameof(FlowFieldValue.Id)) ); } public async Task DeleteAllAsync(int flowId) { return await _repository.DeleteAsync(Q .Where(nameof(FlowFieldValue.FlowId), flowId) ) > 0; } public async Task> GetFlowIdListAsync(IEnumerable flowIdList, string keyword) { if (string.IsNullOrEmpty(keyword)) return flowIdList; var query = Q .Select(nameof(FlowFieldValue.FlowId)) .WhereLike(nameof(FlowFieldValue.StringValue), $"%{keyword}%") .WhereIn(nameof(FlowFieldValue.FlowId), flowIdList) .Distinct(); return await _repository.GetAllAsync(query); } public async Task> GetAllAsync(SqlKata.Query query) { return await _repository.GetAllAsync(query); } /// /// 查询是否有记录 /// /// /// /// /// public async Task IsSearchKeywordFlowFieldValue(int processId, int flowId, string keyword) { string sql = $"SELECT count(1) FROM ccpph.tede_flow_field_value a inner join ccpph.tede_user b on a.UserId=b.Id where a.ProcessId={processId} and a.FlowId={flowId} and (a.StringValue like '%{keyword}%' or b.Name like '%{keyword}%')"; var databaseType = StringUtils.ToEnum(_databaseTypeStr, DatabaseType.MySql); var database = new Database(databaseType, _connectionString); var connection = database.GetConnection(); var result = await connection.ExecuteScalarAsync(sql); return result > 0; } } }