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 _logger; private IConfiguration m_Configuration; public GrpcSetService(ILogger logger, IConfiguration configuration) { _logger = logger; m_Configuration = configuration; } public async override Task GetDataStream(IAsyncStreamReader requestStream, IServerStreamWriter 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 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 } }