ホテル管理システム
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
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
    }
}