-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
297 lines (282 loc) · 11.7 KB
/
main.go
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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
package main
import (
logger "log"
"os"
"regexp"
"runtime"
"strings"
"time"
"github.com/nats-io/nats"
)
var log *logger.Logger
func matchString(pattern, text string) (result bool) {
result, _ = regexp.MatchString(pattern, text)
return
}
// OnTextMessage ...
func onTextMessage(text string) (strResult string) {
log.Printf("Receive Text: %s\n", text)
strAfterCut := strings.ToUpper(text)
strResult = "目前系統功能如下\n" +
"利率(預設為台幣),外幣利率\n" +
"匯率(預設為總表),美元,日圓與人民幣匯率\n" +
"台外幣各類存款餘額\n" +
"及信用卡功能"
switch {
// 利匯率服務
case matchString("外幣+.*利率+.*", strAfterCut):
strResult = "常用外幣利率表\n 美元 定存 2.3% 活存 1.8% \n 日圓 定存 0.1% 活存 0.1%"
break
case matchString("台幣+.*利率+.*", strAfterCut):
case matchString("利率.*", strAfterCut):
strResult = "台幣活存利率表 \n 活存 0.5% 活儲 0.6% \n 定存\n 三個月 0.76% 六個月 0.78% 一年 0.80% 三年 0.80%\n https://www.skbank.com.tw/RAT/RAT2_TWSaving.aspx"
break
case matchString("(美元|美金|USD)+.*歷史+.*匯率+.*", strAfterCut):
strResult = "美元歷史匯率參考 http://tw.exchange-rateorg/history/TWD/USD/T"
break
case matchString("(日圓|日元|日幣|JPY)+.*歷史+.*匯率+.*", strAfterCut):
strResult = "日元歷史匯率參考 http://tw.exchange-rateorg/history/TWD/JPY/T"
break
case matchString("(人民幣|RMB)+.*歷史+.*匯率+.*", strAfterCut):
strResult = "人民幣歷史匯率參考 http://tw.exchange-rateorg/history/TWD/CNY/T"
break
case matchString("歷史+.*匯率+.*", strAfterCut):
strResult = "歷史匯率參考 http://tw.exchange-rateorg/history/TWD/USD/T"
break
case matchString("(美元|美金|USD)+.*匯率+.*", strAfterCut):
strResult = "美金匯率\n" +
"現金買入 " + exRates["美金"].inCashRate + "\n" +
"現金賣出 " + exRates["美金"].outCashRate + "\n" +
"即期買入 " + exRates["美金"].inRate + "\n" +
"即期賣出 " + exRates["美金"].outRate
break
case matchString("(日圓|日元|日幣|JPY)+.*匯率+.*", strAfterCut):
strResult = "日圓匯率\n" +
"現金買入 " + exRates["日圓"].inCashRate + "\n" +
"現金賣出 " + exRates["日圓"].outCashRate + "\n" +
"即期買入 " + exRates["日圓"].inRate + "\n" +
"即期賣出 " + exRates["日圓"].outRate
break
case matchString("(人民幣|RMB)+.*匯率+.*", strAfterCut):
strResult = "人民幣匯率\n" +
"現金買入 " + exRates["人民幣"].inCashRate + "\n" +
"現金賣出 " + exRates["人民幣"].outCashRate + "\n" +
"即期買入 " + exRates["人民幣"].inRate + "\n" +
"即期賣出 " + exRates["人民幣"].outRate
break
case matchString("(港幣|HKD)+.*匯率+.*", strAfterCut):
strResult = "港幣匯率\n" +
"現金買入 " + exRates["港幣"].inCashRate + "\n" +
"現金賣出 " + exRates["港幣"].outCashRate + "\n" +
"即期買入 " + exRates["港幣"].inRate + "\n" +
"即期賣出 " + exRates["港幣"].outRate
break
case matchString("(英鎊|GBP)+.*匯率+.*", strAfterCut):
strResult = "英鎊匯率\n" +
"現金買入 " + exRates["英鎊"].inCashRate + "\n" +
"現金賣出 " + exRates["英鎊"].outCashRate + "\n" +
"即期買入 " + exRates["英鎊"].inRate + "\n" +
"即期賣出 " + exRates["英鎊"].outRate
break
case matchString("(歐元|EUR)+.*匯率+.*", strAfterCut):
strResult = "歐元匯率\n" +
"現金買入 " + exRates["歐元"].inCashRate + "\n" +
"現金賣出 " + exRates["歐元"].outCashRate + "\n" +
"即期買入 " + exRates["歐元"].inRate + "\n" +
"即期賣出 " + exRates["歐元"].outRate
break
case matchString("匯率+.*(美元|美金|USD)+.*", strAfterCut):
strResult = "美金匯率\n" +
"現金買入 " + exRates["美金"].inCashRate + "\n" +
"現金賣出 " + exRates["美金"].outCashRate + "\n" +
"即期買入 " + exRates["美金"].inRate + "\n" +
"即期賣出 " + exRates["美金"].outRate
break
case matchString("匯率+.*(日圓|日元|日幣|JPY)+.*", strAfterCut):
strResult = "日圓匯率\n" +
"現金買入 " + exRates["日圓"].inCashRate + "\n" +
"現金賣出 " + exRates["日圓"].outCashRate + "\n" +
"即期買入 " + exRates["日圓"].inRate + "\n" +
"即期賣出 " + exRates["日圓"].outRate
break
case matchString("匯率+.*(人民幣|RMB)+.*", strAfterCut):
strResult = "人民幣匯率\n" +
"現金買入 " + exRates["人民幣"].inCashRate + "\n" +
"現金賣出 " + exRates["人民幣"].outCashRate + "\n" +
"即期買入 " + exRates["人民幣"].inRate + "\n" +
"即期賣出 " + exRates["人民幣"].outRate
break
case matchString("匯率+.*(港幣|HKD)+.*", strAfterCut):
strResult = "港幣匯率\n" +
"現金買入 " + exRates["港幣"].inCashRate + "\n" +
"現金賣出 " + exRates["港幣"].outCashRate + "\n" +
"即期買入 " + exRates["港幣"].inRate + "\n" +
"即期賣出 " + exRates["港幣"].outRate
break
case matchString("匯率+.*(英鎊|GBP)+.*", strAfterCut):
strResult = "英鎊匯率\n" +
"現金買入 " + exRates["英鎊"].inCashRate + "\n" +
"現金賣出 " + exRates["英鎊"].outCashRate + "\n" +
"即期買入 " + exRates["英鎊"].inRate + "\n" +
"即期賣出 " + exRates["英鎊"].outRate
break
case matchString("匯率+.*(歐元|EUR)+.*", strAfterCut):
strResult = "歐元匯率\n" +
"現金買入 " + exRates["歐元"].inCashRate + "\n" +
"現金賣出 " + exRates["歐元"].outCashRate + "\n" +
"即期買入 " + exRates["歐元"].inRate + "\n" +
"即期賣出 " + exRates["歐元"].outRate
break
case matchString("匯率+.*", strAfterCut):
strResult = ""
break
//存款服務
case matchString("(美元|美金|USD)+.*(活存|存款)+.*(餘額)?.*", strAfterCut):
strResult = "您的美元活存帳戶餘額為: 233,188.66 美元"
break
case matchString("(日圓|日元|日幣|JPY)+.*(活存|存款)+.*(餘額)?.*", strAfterCut):
strResult = "您的日元活存帳戶餘額為: 233,188.66 日元"
break
case matchString("(人民幣|RMB)+.*(活存|存款)+.*餘額?.*", strAfterCut):
strResult = "您沒有人民幣帳戶,若要開立請點連結 https://virtual.bank"
break
case matchString("(美元|美金|USD)+.*(定存|存單)+.*(餘額)?.*", strAfterCut):
strResult = "您的美元定存帳戶餘額為: 1,000.00 美元"
break
case matchString("(日圓|日元|日幣|JPY)+.*(定存|存單)+.*(餘額)?.*", strAfterCut):
strResult = "您沒有日元定存帳戶,若要開立請點連結 https://virtual.bank"
break
case matchString("(人民幣|RMB)+.*(定存|存單)+.*(餘額)?.*", strAfterCut):
strResult = "您沒有人民幣帳戶,若要開立請點連結 https://virtual.bank"
break
case matchString("(存款|活存|帳戶)+.*(餘額)?.*", strAfterCut):
strResult = "您的台幣活存帳戶餘額為: 233,188.66 元\n "
break
case matchString("(定存|存單)+.*(餘額)?.*", strAfterCut):
strResult = "您的台幣定存帳戶餘額為: 1,000,000.00 元\n"
break
// 只有幣別就直接給匯率
case matchString("(美元|美金|USD)+.*", strAfterCut):
strResult = "美金匯率\n" +
"現金買入 " + exRates["美金"].inCashRate + "\n" +
"現金賣出 " + exRates["美金"].outCashRate + "\n" +
"即期買入 " + exRates["美金"].inRate + "\n" +
"即期賣出 " + exRates["美金"].outRate
break
case matchString("(日圓|日元|日幣|JPY)+.*", strAfterCut):
strResult = "日圓匯率\n" +
"現金買入 " + exRates["日圓"].inCashRate + "\n" +
"現金賣出 " + exRates["日圓"].outCashRate + "\n" +
"即期買入 " + exRates["日圓"].inRate + "\n" +
"即期賣出 " + exRates["日圓"].outRate
break
case matchString("(人民幣|RMB)+.*", strAfterCut):
strResult = "人民幣匯率\n" +
"現金買入 " + exRates["人民幣"].inCashRate + "\n" +
"現金賣出 " + exRates["人民幣"].outCashRate + "\n" +
"即期買入 " + exRates["人民幣"].inRate + "\n" +
"即期賣出 " + exRates["人民幣"].outRate
break
case matchString("(港幣|HKD)+.*", strAfterCut):
strResult = "港幣匯率\n" +
"現金買入 " + exRates["港幣"].inCashRate + "\n" +
"現金賣出 " + exRates["港幣"].outCashRate + "\n" +
"即期買入 " + exRates["港幣"].inRate + "\n" +
"即期賣出 " + exRates["港幣"].outRate
break
case matchString("(英鎊|GBP)+.*", strAfterCut):
strResult = "英鎊匯率\n" +
"現金買入 " + exRates["英鎊"].inCashRate + "\n" +
"現金賣出 " + exRates["英鎊"].outCashRate + "\n" +
"即期買入 " + exRates["英鎊"].inRate + "\n" +
"即期賣出 " + exRates["英鎊"].outRate
break
case matchString("(歐元|EUR)+.*", strAfterCut):
strResult = "歐元匯率\n" +
"現金買入 " + exRates["歐元"].inCashRate + "\n" +
"現金賣出 " + exRates["歐元"].outCashRate + "\n" +
"即期買入 " + exRates["歐元"].inRate + "\n" +
"即期賣出 " + exRates["歐元"].outRate
break
// 信用卡服務
case matchString("信用卡+.*最低應繳+.*", strAfterCut):
strResult = "您這個月的信用卡帳單\n" +
"最低應繳金額: 1,234 元\n" +
" 繳款截止日: 5月28號"
break
case matchString("信用卡+.*應繳+.*", strAfterCut):
strResult = "您這個月的信用卡帳單\n" +
"應繳金額: 12,345 元\n" +
" 繳款截止日: 5月28號"
break
case matchString("(補寄|郵寄)?.*(上個月|上月|上一期|上期|前期)+.*(帳單)+.*", strAfterCut):
strResult = "您申請的上個月信用卡帳單\n" +
"已經排入郵寄系統,麻煩您注意最近的郵局信件"
break
case matchString("補寄+.*帳單+.*", strAfterCut):
strResult = "如果您要申請補寄帳單可以使用以下指令作業\n" +
"\"郵寄x月帳單\"系統將會自動郵寄該月帳單\n" +
"\"傳真x月帳單到0xxxxxxxxx\"系統會將該月帳單傳真至指定號碼\n" +
"\"電郵x月帳單\"系統會將該月電子帳單發送至設定的電子郵件信箱"
break
case matchString("(這個月|當月|這一期|當期)+.*信用卡+.*帳單+.*", strAfterCut):
case matchString("信用卡+.*帳單+.*", strAfterCut):
strResult = "您這個月的信用卡帳單\n" +
"應繳金額: 12,345 元\n" +
"最低應繳金額: 1,234 元\n" +
" 繳款截止日: 5月28號"
break
case matchString("信用卡+.*餘額+.*", strAfterCut):
strResult = "您目前信用卡\n" +
"可用餘額: 13,655 元\n" +
"可臨時調整額度為: 8,000 元"
break
case matchString("信用卡+.*額度+.*", strAfterCut):
strResult = "您目前信用卡\n" +
"可用總額度: 50,000 元\n" +
"可用餘額: 13,655 元"
break
case matchString("信用卡+.*(最近|最新)+.*交易+.*", strAfterCut):
strResult = "您信用卡最近五筆\n" +
"Paypal: 5.00(USD) , 約 165.03 元\n" +
"新光三越站前店美食: 180.00 元\n" +
"新光三越站前店美食: 380.00 元\n" +
"新光人壽保險費: 24,000.00 元\n" +
"所得稅: 18,180.00 元"
break
}
log.Printf("Return text: %s\n", strResult)
return
}
func main() {
f, err := os.OpenFile("./textservice.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0660)
if err != nil {
log.Fatalf("Can't open log file: %v\n", err)
}
log = new(logger.Logger)
log.SetOutput(f)
urls := "nats://localhost:4222"
showTime := true
ticker := time.NewTicker(1 * 60 * time.Second)
exRates = make(map[string]exrate, 0)
crawer()
go func() {
for range ticker.C {
crawer()
}
}()
nc, err := nats.Connect(urls)
if err != nil {
log.Fatalf("Can't connect to NATS: %v\n", err)
}
var subj = "aitc.text.service"
nc.Subscribe(subj, func(msg *nats.Msg) {
reply := onTextMessage(string(msg.Data))
nc.Publish(msg.Reply, []byte(reply))
})
log.Printf("Listening on [%s]\n", subj)
if showTime {
log.SetFlags(logger.LstdFlags)
}
runtime.Goexit()
}