FlowFieldValueRepository.cs 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using System.Collections.Generic;
  2. using System.Threading.Tasks;
  3. using GxPress.Common.AppOptions;
  4. using GxPress.Common.Tools;
  5. using GxPress.Entity.WorkFlow;
  6. using GxPress.Repository.Interface.WorkFlow;
  7. using Microsoft.Extensions.Options;
  8. using Datory;
  9. using Dapper;
  10. namespace GxPress.Repository.Implement.WorkFlow
  11. {
  12. public class FlowFieldValueRepository : IFlowFieldValueRepository
  13. {
  14. private readonly Repository<FlowFieldValue> _repository;
  15. private readonly string _connectionString;
  16. private readonly string _databaseTypeStr;
  17. public FlowFieldValueRepository(IOptionsMonitor<DatabaseOptions> dbOptionsAccessor)
  18. {
  19. _databaseTypeStr = dbOptionsAccessor.CurrentValue.DatabaseType;
  20. _connectionString = dbOptionsAccessor.CurrentValue.ConnectionString;
  21. var databaseType = StringUtils.ToEnum<DatabaseType>(dbOptionsAccessor.CurrentValue.DatabaseType, DatabaseType.MySql);
  22. var database = new Database(databaseType, dbOptionsAccessor.CurrentValue.ConnectionString);
  23. _repository = new Repository<FlowFieldValue>(database);
  24. }
  25. public IDatabase Database => _repository.Database;
  26. public string TableName => _repository.TableName;
  27. public List<TableColumn> TableColumns => _repository.TableColumns;
  28. public async Task<int> InsertAsync(FlowFieldValue item)
  29. {
  30. return await _repository.InsertAsync(item);
  31. }
  32. public async Task<IEnumerable<FlowFieldValue>> GetListAsync(int flowId)
  33. {
  34. return await _repository.GetAllAsync(Q
  35. .Where(nameof(FlowFieldValue.FlowId), flowId)
  36. .OrderByDesc(nameof(FlowFieldValue.Id))
  37. );
  38. }
  39. public async Task<bool> DeleteAllAsync(int flowId)
  40. {
  41. return await _repository.DeleteAsync(Q
  42. .Where(nameof(FlowFieldValue.FlowId), flowId)
  43. ) > 0;
  44. }
  45. public async Task<IEnumerable<int>> GetFlowIdListAsync(IEnumerable<int> flowIdList, string keyword)
  46. {
  47. if (string.IsNullOrEmpty(keyword)) return flowIdList;
  48. var query = Q
  49. .Select(nameof(FlowFieldValue.FlowId))
  50. .WhereLike(nameof(FlowFieldValue.StringValue), $"%{keyword}%")
  51. .WhereIn(nameof(FlowFieldValue.FlowId), flowIdList)
  52. .Distinct();
  53. return await _repository.GetAllAsync<int>(query);
  54. }
  55. public async Task<IEnumerable<FlowFieldValue>> GetAllAsync(SqlKata.Query query)
  56. {
  57. return await _repository.GetAllAsync(query);
  58. }
  59. /// <summary>
  60. /// 查询是否有记录
  61. /// </summary>
  62. /// <param name="processId"></param>
  63. /// <param name="flowId"></param>
  64. /// <param name="keyword"></param>
  65. /// <returns></returns>
  66. public async Task<bool> IsSearchKeywordFlowFieldValue(int processId, int flowId, string keyword)
  67. {
  68. 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}%')";
  69. var databaseType = StringUtils.ToEnum<DatabaseType>(_databaseTypeStr, DatabaseType.MySql);
  70. var database = new Database(databaseType, _connectionString);
  71. var connection = database.GetConnection();
  72. var result =
  73. await connection.ExecuteScalarAsync<int>(sql);
  74. return result > 0;
  75. }
  76. }
  77. }