using System.Collections.Generic; using System.Threading.Tasks; using System.Transactions; using AutoMapper; using GxPress.Common.AppOptions; using GxPress.Common.Exceptions; using GxPress.Common.Page; using GxPress.Common.Tools; using GxPress.Entity; using GxPress.Repository.Interface; using GxPress.Request.Thesaurus; using Microsoft.Extensions.Options; using Datory; using Dapper; namespace GxPress.Repository.Implement { public class ThesaurusRepository : IThesaurusRepository { private readonly Repository _repository; private readonly IMapper _mapper; private readonly string _connectionString; private readonly string _databaseTypeStr; public ThesaurusRepository(IOptionsMonitor dbOptionsAccessor, IMapper mapper) { _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); _mapper = mapper; } public IDatabase Database => _repository.Database; public string TableName => _repository.TableName; public List TableColumns => _repository.TableColumns; /// /// 查询词库名称是否存在 /// /// /// public async Task ExistsAsync(string account) { return await _repository.ExistsAsync(Q.Where(nameof(Thesaurus.ThesaurusName), account)); } /// /// /// /// public async Task GetAsync(int id) { return await _repository.GetAsync(id); } public async Task InsertAsync(Thesaurus thesaurus) { using (TransactionScope transactionScope = new TransactionScope()) { foreach (var item in StringUtils.StringCollectionToStringList(thesaurus.ThesaurusName)) { thesaurus.ThesaurusName = item; await _repository.InsertAsync(thesaurus); } transactionScope.Complete(); } return true; } public async Task UpdateAsync(Thesaurus thesaurus) { return await _repository.UpdateAsync(thesaurus); } /// /// 获取词库分页数据 /// /// /// public async Task> GetPageList(ThesaurusPageSearchRequest request) { var pagedList = new PagedList { Total = await GetCountAsync(request) }; var list = await GetPageListAsync(request); pagedList.Items = list; return pagedList; } /// /// 获取词库分页结果 /// /// /// public async Task> GetPageListAsync(ThesaurusPageSearchRequest request) { var query = Q.NewQuery(); if (!string.IsNullOrEmpty(request.ThesaurusName)) query.WhereLike(nameof(Thesaurus.ThesaurusName), request.ThesaurusName); if (request.ThesaurusType > 0) query.Where(nameof(Thesaurus.ThesaurusType), request.ThesaurusType); query.ForPage(request.Page, request.PerPage); return await _repository.GetAllAsync(query); } /// /// 获取词库条数 /// /// /// public async Task GetCountAsync(ThesaurusPageSearchRequest request) { var query = Q.NewQuery(); if (!string.IsNullOrEmpty(request.ThesaurusName)) query.WhereLike(nameof(Thesaurus.ThesaurusName), request.ThesaurusName); if (request.ThesaurusType > 0) query.Where(nameof(Thesaurus.ThesaurusType), request.ThesaurusType); query.ForPage(request.Page, request.PerPage); return await _repository.CountAsync(query); } /// /// 获取随机数 /// /// /// public async Task> GetTopListAsync(ThesaurusSearchRequest request) { var sql = $"SELECT * FROM ccpph.tede_thesaurus where ThesaurusType={request.ThesaurusType} ORDER BY rand() LIMIT 3"; var databaseType = StringUtils.ToEnum(_databaseTypeStr, DatabaseType.MySql); var database = new Database(databaseType, _connectionString); var connection = database.GetConnection(); var items = await connection .QueryAsync(sql); return items; } public async Task DeleteAsync(int id) { return await _repository.DeleteAsync(id); } public async Task GetDetailAsync(int id) { return await _repository.GetAsync(id); } public async Task UpdateAsync(int id, Thesaurus request) { var thesaurus = await GetAsync(id); if (thesaurus == null) throw new BusinessException("词库不存在!"); if (!string.IsNullOrEmpty(request.ThesaurusName)) thesaurus.ThesaurusName = request.ThesaurusName; if (request.ThesaurusType > 0) thesaurus.ThesaurusType = request.ThesaurusType; return await _repository.UpdateAsync(thesaurus); } } }