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
|
{
|
/// <summary>
|
/// ■攻略
|
/// 1.Use.proto(message:Use、UseTable;Service:UseCore) ⇒ projectファイルのInclude
|
/// 2.Use.cs(両方)
|
/// 3.UseTable.cs(両方)
|
/// 4.UseService.cs(サーバー側) ⇒ StartupでMapGrpcServiceの処理が必要
|
/// 5.UseAccess.cs(クライアント側)
|
/// </summary>
|
public class UseService : UseCore.UseCoreBase
|
{
|
#region ★★★★★ Declartions ★★★★★
|
|
private static string TableName = "D_Use";
|
private readonly ILogger<UseService> _logger;
|
private IConfiguration m_Configuration;
|
|
#endregion
|
|
#region ★★★★★ Property ★★★★★
|
#endregion
|
|
#region ★★★★★ Class Event ★★★★★
|
|
public UseService(ILogger<UseService> logger, IConfiguration configuration)
|
{
|
_logger = logger;
|
m_Configuration = configuration;
|
}
|
|
#endregion
|
|
#region ★★★★★ Private Function ★★★★★
|
|
/// <summary>
|
/// 利用情報取得
|
/// </summary>
|
/// <param name="request"></param>
|
/// <returns></returns>
|
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;
|
}
|
}
|
|
/// <summary>
|
/// 利用データ更新
|
/// </summary>
|
/// <param name="use"></param>
|
/// <returns></returns>
|
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 ★★★★★
|
|
/// <summary>
|
/// 同期実行
|
/// </summary>
|
/// <param name="request"></param>
|
/// <param name="context"></param>
|
/// <returns></returns>
|
public override Task<Use?> GetData(DataRequest request, ServerCallContext context)
|
{
|
return Task.FromResult(Get(request));
|
}
|
|
public async override Task GetDataStream(IAsyncStreamReader<DataRequest> requestStream, IServerStreamWriter<Use> 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<DataResult> SetData(Use request, ServerCallContext context)
|
{
|
return Task.FromResult(Set(request));
|
}
|
|
public async override Task SetDataStream(IAsyncStreamReader<Use> requestStream, IServerStreamWriter<DataResult> 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
|
}
|
}
|