using HotelPms.Data;
|
using HotelPms.Data.Common;
|
using HotelPms.GrpcService.Util;
|
using HotelPms.Share.Data;
|
using HotelPms.Share.IO;
|
using HotelPms.Share.Util;
|
using Google.Protobuf;
|
using Grpc.Core;
|
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Logging;
|
using System;
|
using System.Collections.Generic;
|
using System.Data;
|
using System.Data.SqlClient;
|
using System.IO;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using NPOI.SS.UserModel;
|
|
namespace HotelPms.GrpcService
|
{
|
public class GrpcSetService : GrpcSetCore.GrpcSetCoreBase
|
{
|
private readonly ILogger<GrpcTableService> _logger;
|
private IConfiguration m_Configuration;
|
|
public GrpcSetService(ILogger<GrpcTableService> logger, IConfiguration configuration)
|
{
|
_logger = logger;
|
m_Configuration = configuration;
|
}
|
|
public async override Task GetDataStream(IAsyncStreamReader<DataRequest> requestStream, IServerStreamWriter<GrpcSet> responseStream, ServerCallContext context)
|
{
|
DataRequest request = null;
|
await foreach (var message in requestStream.ReadAllAsync())
|
{
|
request = message;
|
break;
|
}
|
|
//データ送信
|
GrpcSet set = Get(request);
|
await responseStream.WriteAsync(set);
|
}
|
|
public override Task<GrpcSet> GetData(DataRequest request, ServerCallContext context)
|
{
|
return Task.FromResult(Get(request));
|
}
|
|
private string GetDB(DataRequest request)
|
{
|
//if (request.ActionType == (int)ETableActionType.ReportMaster)
|
//{
|
// return Setting.HotelCommonDB;
|
//}
|
//else
|
//{
|
return Setting.HotelPmsDB;
|
//}
|
}
|
|
private string GetSql(DataRequest request)
|
{
|
string[] fields;
|
StringBuilder sql = new StringBuilder();
|
if (request.ActionType == (int)ESetActionType.CustomSql)
|
{
|
sql.Append(request.Data);
|
}
|
else if (request.ActionType == (int)ESetActionType.ColSetting)
|
{
|
fields = request.Data.Split(new char[] { ',' }); //@MachineName,@UserName,@ID
|
sql.Append($"EXECUTE GetColSetting '{fields[0]}','{fields[1]}',{fields[2]}");
|
}
|
else if (request.ActionType == (int)ESetActionType.RoomView)
|
{
|
fields = request.Data.Split(new char[] { ',' });
|
sql.Append($"EXECUTE GetRoomView {(fields[0] == "NULL" ? "NULL" : $"'{fields[0]}'")},{fields[1]},{fields[2]}");
|
}
|
return sql.ToString();
|
}
|
|
|
private GrpcSet Get(DataRequest request)
|
{
|
GrpcSet set = new GrpcSet() { ErrNo = 0, ErrData = string.Empty };
|
OperationLog.Instance.WriteLog(request.ToString());
|
|
using MsSqlNet msSqlNet = new MsSqlNet(GetDB(request));
|
using SqlConnection dbConnect = msSqlNet.Open();
|
string sql = GetSql(request);
|
using SqlCommand command = new SqlCommand(sql, dbConnect);
|
OperationLog.Instance.WriteLog(sql);
|
command.CommandTimeout = 60000 * 100;
|
using SqlDataReader reader = command.ExecuteReader(CommandBehavior.Default);
|
//エラーまだ対応していない
|
if (reader == null)
|
{
|
OperationLog.Instance.WriteLog("SqlDataReader=null");
|
set.ErrNo = msSqlNet.ErrNo;
|
set.ErrData = msSqlNet.ErrInfo;
|
}
|
else
|
{
|
while (true)
|
{
|
GrpcTable table = new GrpcTable();
|
set.Tables.Add(table);
|
GrpcTableService.SetTable(table, reader);
|
if (!reader.NextResult()) { break; }
|
}
|
}
|
reader.Close();
|
return set;
|
} //←全てusingはここにDispose
|
}
|
}
|