using Google.Protobuf; using Grpc.Core; using Grpc.Net.Client; using HotelPms.Data.Common; using HotelPms.Data.UseInfo; using HotelPms.Share.Util; using System; using System.Data; using System.Threading.Tasks; using HotelPms.Data; using System.Collections.Generic; using HotelPms.Data.Common.Pagination; using System.Text.Json; using System.Threading; using HotelPms.Data.Client; namespace HotelPms.DataAccessGrpc.Client { internal class UseAlloAccess : IDisposable { /// /// チャネル /// public GrpcChannel Channel { get; private set; } = null; public UseAlloCore.UseAlloCoreClient Client { get; private set; } = null; public UseAlloAccess(GrpcChannel channel) { Channel = channel; Client = new UseAlloCore.UseAlloCoreClient(Channel); } public void Dispose() { } public async Task Exists(int pID,int pDetailID,DateTime pUseDate,int pPersonID) { return await GrpcClient.ExecuteScalar(Channel, $"IF EXISTS(SELECT 1 FROM D_UseAllo WHERE ID = {pID} AND DetailID = {pDetailID} AND UseDate = {CConvert.ToSqlValue(pUseDate)} AND PersonID = {pPersonID}) SELECT 1 ELSE SELECT 0") == "1"; } public async Task OutputStream(PagingRequest request) { FileGrpcData data = null; request.Table = "D_UseAllo"; string json = JsonSerializer.Serialize(request); using (var call = Client.OutputStream(GrpcClient.CreateDataRequest(2, json))) { var reaponseStream = call.ResponseStream; //データの取得 while (await reaponseStream.MoveNext(CancellationToken.None)) { data = reaponseStream.Current; } } return data; } public async Task GetPageData(PagingRequest request) { request.Table = "D_UseAllo"; string json = JsonSerializer.Serialize(request); return await Client.GetDataAsync(GrpcClient.CreateDataRequest(1, json)); } public DataTable GetMasterGridData(string where) { GrpcTable table = GrpcClient.GetTable(Channel, (int)ETableActionType.BuildingMasterGrid, where); return table.ToDataTable(); } /// /// 同期データ取得 /// /// /// public UseAlloTable GetData(string where) { return Client.GetData(GrpcClient.CreateDataRequest(0, where)); } public async Task GetDataAsync(string where) { return await Client.GetDataAsync(GrpcClient.CreateDataRequest(0, where)); } /// /// データ取得 /// /// public UseAllo GetItem(int pID,int pDetailID,DateTime pUseDate,int pPersonID) { UseAlloTable table = GetData($"ID = {pID} AND DetailID = {pDetailID} AND UseDate = {CConvert.ToSqlValue(pUseDate)} AND PersonID = {pPersonID}"); if(table == null || table.ErrNo != 0 || table.Rows.Count == 0) { return null; } return table.Rows[0]; } public async Task GetDataStream() { return await GetDataStream(string.Empty); } /// /// データ取得 /// /// public async Task GetDataStream(string where) { UseAlloTable table = null; using (var call = Client.GetDataStream()) { await call.RequestStream.WriteAsync(GrpcClient.CreateDataRequest(0, where)); await call.RequestStream.CompleteAsync(); // Finish call and report results //データの取得 await foreach (var message in call.ResponseStream.ReadAllAsync()) { table = message; break; } } return table; } public async Task AddAsync(UseAllo data) { return await Client.AddAsync(data); } public DataResult Add(UseAllo data) { return Client.Add(data); } public async Task UpdateAsync(UseAllo data) { return await Client.UpdateAsync(data); } public DataResult Update(UseAllo data) { return Client.Update(data); } /// /// 追加若しくは更新 /// /// /// /// private async Task AddOrUpdateStream(UseAllo data, bool add) { DataResult result = null; using (var call = add ? Client.AddStream() : Client.UpdateStream()) { await call.RequestStream.WriteAsync(data); await call.RequestStream.CompleteAsync(); // Finish call and report results //データの取得 await foreach (var message in call.ResponseStream.ReadAllAsync()) { result = message; break; } } return result; } /// /// 追加 /// /// /// public async Task AddStream(UseAllo data) { return await AddOrUpdateStream(data, true); } /// /// 更新 /// /// /// public async Task UpdateStream(UseAllo data) { return await AddOrUpdateStream(data, true); } public DataResult Remove(string where) { SqlWhere data = new SqlWhere() { Data = ByteString.CopyFromUtf8(where) }; return Client.Remove(data); } public async Task RemoveAsync(string where) { SqlWhere data = new SqlWhere() { Data = ByteString.CopyFromUtf8(where) }; return await Client.RemoveAsync(data); } /// /// 削除 /// /// /// public async Task RemoveStream(string where) { DataResult result = null; SqlWhere data = new SqlWhere() { Data = ByteString.CopyFromUtf8(where) }; using (var call = Client.RemoveStream()) { await call.RequestStream.WriteAsync(data); await call.RequestStream.CompleteAsync(); // Finish call and report results //データの取得 await foreach (var message in call.ResponseStream.ReadAllAsync()) { result = message; break; } } return result; } public DataResult SetData(UseAlloTable table) { return Client.SetData(table); } /// /// バッチ更新 /// /// /// public async Task SetDataStream(UseAlloTable table) { DataResult result = null; using (var call = Client.SetDataStream()) { await call.RequestStream.WriteAsync(table); await call.RequestStream.CompleteAsync(); // Finish call and report results //データの取得 await foreach (var message in call.ResponseStream.ReadAllAsync()) { result = message; break; } } return result; } } }