ホテル管理システム
ogi
yesterday 1a1c8e71fcd14858f595029f089b2d4a00202b32
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
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
    }
}