using Grpc.Core; using HotelPms.Data; using HotelPms.Data.UseInfo; using HotelPms.GrpcService.Util; using HotelPms.Share.Data; using HotelPms.Share.IO; using HotelPms.Share.Util; namespace HotelPms.GrpcService { /// /// ■攻略 /// 1.Use.proto(message:Use、UseTable;Service:UseCore) ⇒ projectファイルのInclude /// 2.Use.cs(両方) /// 3.UseTable.cs(両方) /// 4.UseService.cs(サーバー側) ⇒ StartupでMapGrpcServiceの処理が必要 /// 5.UseAccess.cs(クライアント側) /// public class UseService : UseCore.UseCoreBase { #region ★★★★★ Declartions ★★★★★ private static string TableName = "D_Use"; private readonly ILogger _logger; private IConfiguration m_Configuration; #endregion #region ★★★★★ Property ★★★★★ #endregion #region ★★★★★ Class Event ★★★★★ public UseService(ILogger logger, IConfiguration configuration) { _logger = logger; m_Configuration = configuration; } #endregion #region ★★★★★ Private Function ★★★★★ /// /// 利用情報取得 /// /// /// private Use? Get(DataRequest request) { try { OperationLog.Instance.WriteLog($"データ請求:{request.ToString()}"); using MsSqlNet msSqlNet = new(Setting.HotelPmsDB); Use? item = Use.Get(CConvert.ToInt(request.Data), msSqlNet); OperationLog.Instance.WriteLog("データ読込完了"); return item; } catch(Exception ex) { OperationLog.Instance.WriteLog($"UseService.Get({request.Data}):{ex.Message}"); return null; } } /// /// 利用データ更新 /// /// /// private DataResult Set(Use use) { DataResult result = new() { ErrNo = 0, ErrData = string.Empty }; try { OperationLog.Instance.WriteLog($"■利用情報保存開始:{use.ID}"); string sql = use.ToSql(); OperationLog.Instance.WriteLog($"利用情報保存Sql生成:{sql}"); using MsSqlNet msSqlNet = new(Setting.HotelPmsDB); if (!msSqlNet.ExecuteNonQueryWithTran(sql)) { result.ErrNo = msSqlNet.ErrNo; result.ErrData = msSqlNet.ErrInfo; } OperationLog.Instance.WriteLog($"利用情報保存結果:{result.ErrNo}.{result.ErrData}"); //非同期実行 if (result.ErrNo == 0) { Task.Run(() => { OperationLog.Instance.WriteLog($"非同期更新:{use.ID}"); using MsSqlNet msSqlNet = new(Setting.HotelPmsDB); int cnt = msSqlNet.ExecuteNonQuery($"EXECUTE SaveUseAfterAsync {use.ID}"); OperationLog.Instance.WriteLog($"非同期更新結果:{cnt},ErrNo:{msSqlNet.ErrNo},ErrInfo:{msSqlNet.ErrInfo}"); }); } } catch(Exception ex) { OperationLog.Instance.WriteLog($"UseService.Set():{ex.Message}"); result.ErrNo = 999999; result.ErrData = ex.Message; } return result; } #endregion #region ★★★★★ Public Function ★★★★★ /// /// 同期実行 /// /// /// /// public override Task GetData(DataRequest request, ServerCallContext context) { return Task.FromResult(Get(request)); } public async override Task GetDataStream(IAsyncStreamReader requestStream, IServerStreamWriter responseStream, ServerCallContext context) { DataRequest request = null; await foreach (var message in requestStream.ReadAllAsync()) { request = message; break; } Use? use = Get(request); await responseStream.WriteAsync(use); //データ送信 } public override Task SetData(Use request, ServerCallContext context) { return Task.FromResult(Set(request)); } public async override Task SetDataStream(IAsyncStreamReader requestStream, IServerStreamWriter responseStream, ServerCallContext context) { Use table = null; await foreach (var message in requestStream.ReadAllAsync()) { table = message; break; } DataResult result = Set(table); //データ送信 await responseStream.WriteAsync(result); } #endregion } }