Showing
11 changed files
with
1876 additions
and
0 deletions
This diff could not be displayed because it is too large.
... | @@ -2466,6 +2466,11 @@ | ... | @@ -2466,6 +2466,11 @@ |
2466 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", | 2466 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", |
2467 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" | 2467 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" |
2468 | }, | 2468 | }, |
2469 | + "python-shell": { | ||
2470 | + "version": "2.0.1", | ||
2471 | + "resolved": "https://registry.npmjs.org/python-shell/-/python-shell-2.0.1.tgz", | ||
2472 | + "integrity": "sha512-Ys+SiCinY9JrldIJxGWd2AMQSQZLU7PFzrCWY7HTawZ73tIthFdlLLU1Y6Y40Hwdutc+TmfMe5TXNU73s07Xyg==" | ||
2473 | + }, | ||
2469 | "qs": { | 2474 | "qs": { |
2470 | "version": "6.5.2", | 2475 | "version": "6.5.2", |
2471 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", | 2476 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", | ... | ... |
source/forensic_tool/src/analysis_calllog.py
0 → 100644
1 | +import base64 | ||
2 | +import sys | ||
3 | +import pymysql | ||
4 | + | ||
5 | +from konlpy.tag import Kkma | ||
6 | + | ||
7 | +conn=pymysql.connect(host='localhost',user='root',password='1234', db='dataextraction', charset='utf8') | ||
8 | + | ||
9 | +def select(): | ||
10 | + curs=conn.cursor() | ||
11 | + #sql="select * from calllog" | ||
12 | + #sql="select * from contact" | ||
13 | + sql="select * from sms" | ||
14 | + curs.execute(sql) | ||
15 | + | ||
16 | + rows=curs.fetchall() | ||
17 | + print(rows[0]) | ||
18 | + #for row in rows: | ||
19 | + #analysis_keyword(row[0]) | ||
20 | + | ||
21 | +def analysis_keyword(text): | ||
22 | + kkma = Kkma() | ||
23 | + result = kkma.nouns(text) | ||
24 | + result = str(result) | ||
25 | + print(base64.b64encode(result.encode('utf-8'))) | ||
26 | + | ||
27 | +select() | ||
28 | + | ||
29 | +conn.close() | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
source/forensic_tool/src/analysis_message.py
0 → 100644
1 | +import base64 | ||
2 | +import sys | ||
3 | +import pymysql | ||
4 | + | ||
5 | +from konlpy.tag import Twitter | ||
6 | + | ||
7 | +conn=pymysql.connect(host='localhost',user='root',password='1234', db='dataextraction', charset='utf8') | ||
8 | + | ||
9 | +def select(): | ||
10 | + curs=conn.cursor() | ||
11 | + sql="select sms.type, sms.address, sms.date, sms.body, contact.name from sms left join contact on sms.address=contact.number;" | ||
12 | + curs.execute(sql) | ||
13 | + | ||
14 | + rows=curs.fetchall() | ||
15 | + for row in rows: | ||
16 | + return_data=" " | ||
17 | + if row[0]==1: | ||
18 | + return_data+="get|" | ||
19 | + else: | ||
20 | + return_data+="send|" | ||
21 | + if row[4] is None: | ||
22 | + return_data+=row[1]+" ( - )|" | ||
23 | + else: | ||
24 | + return_data+=row[1]+" ("+row[4]+")|" | ||
25 | + return_data+=row[2].strftime("%Y-%m-%d %H:%M:%S")+"|" | ||
26 | + return_data+=row[3]+"|" | ||
27 | + analysis_keyword(return_data, row[3]) | ||
28 | + | ||
29 | +def analysis_keyword(return_data, text): | ||
30 | + twitter = Twitter() | ||
31 | + result = twitter.nouns(text) | ||
32 | + result=" ".join(str(x) for x in result) | ||
33 | + result=return_data+result | ||
34 | + print(base64.b64encode(result.encode('utf-8'))) | ||
35 | + | ||
36 | +select() | ||
37 | + | ||
38 | +conn.close() | ||
39 | + |
1 | +import base64 | ||
2 | +import sys | ||
3 | +import pymysql | ||
4 | + | ||
5 | +conn=pymysql.connect(host='localhost',user='root',password='1234', db='dataextraction', charset='utf8') | ||
6 | + | ||
7 | +def select(): | ||
8 | + curs=conn.cursor() | ||
9 | + sql="drop table if exists sms_bank;" | ||
10 | + curs.execute(sql) | ||
11 | + sql="create table sms_bank(date datetime not null, bname text, price int, paymentplan text, sname text, primary key (date));" | ||
12 | + curs.execute(sql) | ||
13 | + sql="select body,date from sms where address in (15881600,16445330,15888900,15881688);" | ||
14 | + curs.execute(sql) | ||
15 | + | ||
16 | + rows=curs.fetchall() | ||
17 | + for row in rows: | ||
18 | + body=row[0].replace("<재난지원금 사용>\n","").replace("누적",":") | ||
19 | + body=" ".join(body.split("\n")) | ||
20 | + body_split=body.split(' ') | ||
21 | + _bname=body_split[1][:-2] | ||
22 | + _price=body_split[3][:-1].replace(",","") | ||
23 | + _paymentplan=body_split[4] | ||
24 | + _date=row[1].strftime("%Y-%m-%d %H:%M:%S") | ||
25 | + _sname=' '.join(body_split[7:]) | ||
26 | + _sname=_sname.split(":")[0] | ||
27 | + curs2=conn.cursor() | ||
28 | + sql2="insert into sms_bank(bname, price, paymentplan, date, sname) values (%s, %s, %s, %s, %s);" | ||
29 | + curs2.execute(sql2, (_bname, _price, _paymentplan, _date, _sname)) | ||
30 | + conn.commit() | ||
31 | + #print(base64.b64encode("Conplete".encode('utf-8'))) | ||
32 | + | ||
33 | +select() | ||
34 | + | ||
35 | +conn.close() | ||
36 | + |
1 | +import base64 | ||
2 | +import sys | ||
3 | +import pymysql | ||
4 | + | ||
5 | +from konlpy.tag import Twitter | ||
6 | +from collections import Counter | ||
7 | + | ||
8 | +conn=pymysql.connect(host='localhost',user='root',password='1234', db='dataextraction', charset='utf8') | ||
9 | + | ||
10 | +def select(): | ||
11 | + curs=conn.cursor() | ||
12 | + sql="select sms.type, sms.address, sms.date, sms.body, contact.name from sms left join contact on sms.address=contact.number;" | ||
13 | + curs.execute(sql) | ||
14 | + | ||
15 | + rows=curs.fetchall() | ||
16 | + data="" | ||
17 | + for row in rows: | ||
18 | + data+=row[3] | ||
19 | + | ||
20 | + analysis_keyword(data) | ||
21 | + | ||
22 | +def analysis_keyword(text): | ||
23 | + twitter = Twitter() | ||
24 | + result = twitter.nouns(text) | ||
25 | + count=Counter(result) | ||
26 | + tag_count=[] | ||
27 | + | ||
28 | + for n, c in count.most_common(20): | ||
29 | + dics={'tag':n, 'count':c} | ||
30 | + tag_count.append(dics) | ||
31 | + for tag in tag_count: | ||
32 | + return_data=tag['tag']+"|"+str(tag['count']) | ||
33 | + print(base64.b64encode(return_data.encode('utf-8'))) | ||
34 | + | ||
35 | +select() | ||
36 | + | ||
37 | +conn.close() | ||
38 | + |
1 | +import base64 | ||
2 | +import sys | ||
3 | +import pymysql | ||
4 | + | ||
5 | +from konlpy.tag import Twitter | ||
6 | +from collections import Counter | ||
7 | + | ||
8 | +conn=pymysql.connect(host='localhost',user='root',password='1234', db='dataextraction', charset='utf8') | ||
9 | + | ||
10 | +def select(): | ||
11 | + curs=conn.cursor() | ||
12 | + sql="select sms.type, sms.address, sms.date, sms.body, contact.name from sms left join contact on sms.address=contact.number where date between '"+sys.argv[1]+"' and '"+sys.argv[2]+"';" | ||
13 | + curs.execute(sql) | ||
14 | + | ||
15 | + rows=curs.fetchall() | ||
16 | + data="" | ||
17 | + for row in rows: | ||
18 | + data+=row[3] | ||
19 | + | ||
20 | + analysis_keyword(data) | ||
21 | + | ||
22 | +def analysis_keyword(text): | ||
23 | + twitter = Twitter() | ||
24 | + result = twitter.nouns(text) | ||
25 | + count=Counter(result) | ||
26 | + tag_count=[] | ||
27 | + | ||
28 | + for n, c in count.most_common(20): | ||
29 | + dics={'tag':n, 'count':c} | ||
30 | + tag_count.append(dics) | ||
31 | + for tag in tag_count: | ||
32 | + return_data=tag['tag']+"|"+str(tag['count']) | ||
33 | + print(base64.b64encode(return_data.encode('utf-8'))) | ||
34 | + | ||
35 | +select() | ||
36 | + | ||
37 | +conn.close() | ||
38 | + |
1 | +import base64 | ||
2 | +import sys | ||
3 | +import pymysql | ||
4 | + | ||
5 | +from konlpy.tag import Twitter | ||
6 | +from collections import Counter | ||
7 | + | ||
8 | +conn=pymysql.connect(host='localhost',user='root',password='1234', db='dataextraction', charset='utf8') | ||
9 | + | ||
10 | +def select(): | ||
11 | + curs=conn.cursor() | ||
12 | + sql="select sms.type, sms.address, sms.date, sms.body, contact.name from sms left join contact on sms.address=contact.number where timestampdiff(month,now(),sms.date)>-1;" | ||
13 | + curs.execute(sql) | ||
14 | + | ||
15 | + rows=curs.fetchall() | ||
16 | + data="" | ||
17 | + for row in rows: | ||
18 | + data+=row[3] | ||
19 | + | ||
20 | + analysis_keyword(data) | ||
21 | + | ||
22 | +def analysis_keyword(text): | ||
23 | + twitter = Twitter() | ||
24 | + result = twitter.nouns(text) | ||
25 | + count=Counter(result) | ||
26 | + tag_count=[] | ||
27 | + | ||
28 | + for n, c in count.most_common(20): | ||
29 | + dics={'tag':n, 'count':c} | ||
30 | + tag_count.append(dics) | ||
31 | + for tag in tag_count: | ||
32 | + return_data=tag['tag']+"|"+str(tag['count']) | ||
33 | + print(base64.b64encode(return_data.encode('utf-8'))) | ||
34 | + | ||
35 | +select() | ||
36 | + | ||
37 | +conn.close() | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | +import base64 | ||
2 | +import sys | ||
3 | +import pymysql | ||
4 | + | ||
5 | +from konlpy.tag import Twitter | ||
6 | +from collections import Counter | ||
7 | + | ||
8 | +conn=pymysql.connect(host='localhost',user='root',password='1234', db='dataextraction', charset='utf8') | ||
9 | + | ||
10 | +def select(): | ||
11 | + curs=conn.cursor() | ||
12 | + sql="select sms.type, sms.address, sms.date, sms.body, contact.name from sms left join contact on sms.address=contact.number where address in ("+sys.argv[1]+");" | ||
13 | + curs.execute(sql) | ||
14 | + | ||
15 | + rows=curs.fetchall() | ||
16 | + data="" | ||
17 | + for row in rows: | ||
18 | + data+=row[3] | ||
19 | + | ||
20 | + analysis_keyword(data) | ||
21 | + | ||
22 | +def analysis_keyword(text): | ||
23 | + twitter = Twitter() | ||
24 | + result = twitter.nouns(text) | ||
25 | + count=Counter(result) | ||
26 | + tag_count=[] | ||
27 | + | ||
28 | + for n, c in count.most_common(20): | ||
29 | + dics={'tag':n, 'count':c} | ||
30 | + tag_count.append(dics) | ||
31 | + for tag in tag_count: | ||
32 | + return_data=tag['tag']+"|"+str(tag['count']) | ||
33 | + print(base64.b64encode(return_data.encode('utf-8'))) | ||
34 | + | ||
35 | +select() | ||
36 | + | ||
37 | +conn.close() | ||
38 | + |
source/forensic_tool/src/menu2.html
0 → 100644
1 | +<!DOCTYPE html> | ||
2 | +<html lang="en"> | ||
3 | + | ||
4 | +<head> | ||
5 | + | ||
6 | + <meta charset="utf-8"> | ||
7 | + <meta http-equiv="X-UA-Compatible" content="IE=edge"> | ||
8 | + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> | ||
9 | + <meta name="description" content=""> | ||
10 | + <meta name="author" content=""> | ||
11 | + | ||
12 | + <title>Menu2</title> | ||
13 | + | ||
14 | + <link rel="stylesheet" href="../assets/css/menu2.css"> | ||
15 | + <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.4.0/Chart.min.js"></script> | ||
16 | + <script src="https://cdnjs.cloudflare.com/ajax/libs/list.js/1.5.0/list.min.js"></script> | ||
17 | + | ||
18 | +</head> | ||
19 | + | ||
20 | +<body id="page-top"> | ||
21 | + <div class="title"> | ||
22 | + <h1 id="cc" onclick="location.href='menu.html'">SMS Analysis</h1> | ||
23 | + </div> | ||
24 | + | ||
25 | + <!-- Page Wrapper --> | ||
26 | + <div id="wrapper"> | ||
27 | + | ||
28 | + <!-- Sidebar --> | ||
29 | + <ul class="navbar-nav bg-gradient-primary sidebar sidebar-dark accordion" id="accordionSidebar"> | ||
30 | + | ||
31 | + <!-- Heading --> | ||
32 | + <div class="sidebar-heading"> | ||
33 | + 키워드 분석 | ||
34 | + </div> | ||
35 | + | ||
36 | + <!-- Nav Item - Dashboard --> | ||
37 | + <li class="nav-item active"> | ||
38 | + <a class="nav-link" id="keyword" style="text-decoration:line-through"> | ||
39 | + <i class="fas fa-fw"></i> | ||
40 | + <span>전체 문자 키워드 목록</span></a> | ||
41 | + </li> | ||
42 | + | ||
43 | + <!-- Nav Item - Dashboard --> | ||
44 | + <li class="nav-item active"> | ||
45 | + <a class="nav-link" id="keyword1" style="text-decoration:line-through"> | ||
46 | + <i class="fas fa-fw"></i> | ||
47 | + <span>최근 키워드 순위</span></a> | ||
48 | + </li> | ||
49 | + | ||
50 | + <!-- Nav Item - Dashboard --> | ||
51 | + <li class="nav-item active"> | ||
52 | + <a class="nav-link" id="keyword2" style="text-decoration:line-through"> | ||
53 | + <i class="fas fa-fw"></i> | ||
54 | + <span>전체 키워드 순위</span></a> | ||
55 | + </li> | ||
56 | + | ||
57 | + <!-- Nav Item - Dashboard --> | ||
58 | + <li class="nav-item active"> | ||
59 | + <a class="nav-link" id="keyword3" style="text-decoration:line-through"> | ||
60 | + <i class="fas fa-fw"></i> | ||
61 | + <span>특정 기간 키워드</span></a> | ||
62 | + </li> | ||
63 | + | ||
64 | + <form name="dateForm" method="post" id="dateForm"> | ||
65 | + <input type="date" id="between_date_start" /> | ||
66 | + ~ | ||
67 | + <input type="date" id="between_date_end" /> | ||
68 | + <input type="button" id="between_date_submit" value="》" onclick="get_date_keyword();" /> | ||
69 | + </form> | ||
70 | + | ||
71 | + <!-- Nav Item - Dashboard --> | ||
72 | + <li class="nav-item active"> | ||
73 | + <a class="nav-link" id="keyword4" style="text-decoration:line-through"> | ||
74 | + <i class="fas fa-fw"></i> | ||
75 | + <span>특정 연락처 키워드</span></a> | ||
76 | + </li> | ||
77 | + | ||
78 | + <form name="numberForm" method="post" id="numberForm"> | ||
79 | + <input type="text" id="number" /> | ||
80 | + <input type="button" id="number_push" value="+" onclick="get_number_push();" /> | ||
81 | + <input type="button" id="number_pop" value="-" onclick="get_number_pop();" /> | ||
82 | + <input type="button" id="number_submit" value="》" onclick="get_number_keyword();" /> | ||
83 | + </form> | ||
84 | + <li class="nav-item active" id="keyword4_list"></li> | ||
85 | + | ||
86 | + <!-- Divider --> | ||
87 | + <hr class="sidebar-divider"> | ||
88 | + | ||
89 | + <!-- Heading --> | ||
90 | + <div class="sidebar-heading"> | ||
91 | + 결제문자 분석 | ||
92 | + </div> | ||
93 | + | ||
94 | + <!-- Nav Item - Dashboard --> | ||
95 | + <li class="nav-item active"> | ||
96 | + <a class="nav-link" id="payment1"> | ||
97 | + <i class="fas fa-fw"></i> | ||
98 | + <span>결제문자 목록</span></a> | ||
99 | + </li> | ||
100 | + | ||
101 | + <!-- Nav Item - Dashboard --> | ||
102 | + <li class="nav-item active"> | ||
103 | + <a class="nav-link" id="payment2"> | ||
104 | + <i class="fas fa-fw"></i> | ||
105 | + <span>전체 사용 금액 통계</span></a> | ||
106 | + </li> | ||
107 | + | ||
108 | + <!-- Nav Item - Dashboard --> | ||
109 | + <li class="nav-item active"> | ||
110 | + <a class="nav-link" id="payment3"> | ||
111 | + <i class="fas fa-fw"></i> | ||
112 | + <span>특정 기간 사용 금액 통계</span></a> | ||
113 | + </li> | ||
114 | + | ||
115 | + <form name="dateForm" method="post" id="dateForm"> | ||
116 | + <input type="date" id="between_amount_date_start" /> | ||
117 | + ~ | ||
118 | + <input type="date" id="between_amount_date_end" /> | ||
119 | + <input type="button" id="between_amount_date_submit" value="》" onclick="get_amount_date_payment();" /> | ||
120 | + </form> | ||
121 | + | ||
122 | + <!-- Nav Item - Dashboard --> | ||
123 | + <li class="nav-item active"> | ||
124 | + <a class="nav-link" id="payment4"> | ||
125 | + <i class="fas fa-fw"></i> | ||
126 | + <span>결제 시간대</span></a> | ||
127 | + </li> | ||
128 | + | ||
129 | + <!-- Nav Item - Dashboard --> | ||
130 | + <li class="nav-item active"> | ||
131 | + <a class="nav-link" id="payment5"> | ||
132 | + <i class="fas fa-fw"></i> | ||
133 | + <span>특정 기간 결제 시간대</span></a> | ||
134 | + </li> | ||
135 | + | ||
136 | + <form name="dateForm" method="post" id="dateForm"> | ||
137 | + <input type="date" id="between_payment_date_start" /> | ||
138 | + ~ | ||
139 | + <input type="date" id="between_payment_date_end" /> | ||
140 | + <input type="button" id="between_payment_date_submit" value="》" onclick="get_payment_date_payment();" /> | ||
141 | + </form> | ||
142 | + | ||
143 | + <!-- Nav Item - Dashboard --> | ||
144 | + <li class="nav-item active"> | ||
145 | + <a class="nav-link" id="payment6"> | ||
146 | + <i class="fas fa-fw"></i> | ||
147 | + <span>카드 이용 순위</span></a> | ||
148 | + </li> | ||
149 | + | ||
150 | + <!-- Nav Item - Dashboard --> | ||
151 | + <li class="nav-item active"> | ||
152 | + <a class="nav-link" id="payment7"> | ||
153 | + <i class="fas fa-fw"></i> | ||
154 | + <span>특정 기간 카드 이용 순위</span></a> | ||
155 | + </li> | ||
156 | + | ||
157 | + <form name="dateForm" method="post" id="dateForm"> | ||
158 | + <input type="date" id="between_card_date_start" /> | ||
159 | + ~ | ||
160 | + <input type="date" id="between_card_date_end" /> | ||
161 | + <input type="button" id="between_card_date_submit" value="》" onclick="get_card_date_payment();" /> | ||
162 | + </form> | ||
163 | + | ||
164 | + <!-- Nav Item - Dashboard --> | ||
165 | + <li class="nav-item active"> | ||
166 | + <a class="nav-link" id="payment8"> | ||
167 | + <i class="fas fa-fw"></i> | ||
168 | + <span>사용처 순위</span></a> | ||
169 | + </li> | ||
170 | + | ||
171 | + <!-- Nav Item - Dashboard --> | ||
172 | + <li class="nav-item active"> | ||
173 | + <a class="nav-link" id="payment9"> | ||
174 | + <i class="fas fa-fw"></i> | ||
175 | + <span>특정 기간 사용처 순위</span></a> | ||
176 | + </li> | ||
177 | + <form name="dateForm" method="post" id="dateForm"> | ||
178 | + <input type="date" id="between_store_date_start" /> | ||
179 | + ~ | ||
180 | + <input type="date" id="between_store_date_end" /> | ||
181 | + <input type="button" id="between_store_date_submit" value="》" onclick="get_store_date_payment();" /> | ||
182 | + </form> | ||
183 | + </ul> | ||
184 | + <!-- End of Sidebar --> | ||
185 | + | ||
186 | + <!-- Content Wrapper --> | ||
187 | + <div id="content-wrapper" class="d-flex flex-column"> | ||
188 | + | ||
189 | + <!-- Main Content --> | ||
190 | + <div id="content"> | ||
191 | + | ||
192 | + <!-- Begin Page Content --> | ||
193 | + <div class="container-fluid"> | ||
194 | + | ||
195 | + <!-- Page Heading --> | ||
196 | + <div class="d-sm-flex align-items-center justify-content-between mb-4"> | ||
197 | + <h1 class="h3 mb-0 text-gray-800" id="menu_name"></h1> | ||
198 | + </div> | ||
199 | + | ||
200 | + <div class="row"> | ||
201 | + <div id="choice" style="display:none;"> | ||
202 | + <ul id="choiceul"> | ||
203 | + <li class="cr" id="type1"></li> | ||
204 | + <li class="cr" id="type2"></li> | ||
205 | + </ul> | ||
206 | + </div> | ||
207 | + </div> | ||
208 | + <!-- Content Row --> | ||
209 | + | ||
210 | + <div class="row"> | ||
211 | + | ||
212 | + <!-- Area Chart --> | ||
213 | + <div class="col-xl-8 col-lg-7" id="chart" style="display:none;"> | ||
214 | + <div class="card shadow mb-4"> | ||
215 | + <!-- Card Header - Dropdown --> | ||
216 | + <div class="card-header py-3 d-flex flex-row align-items-center justify-content-between"> | ||
217 | + <h6 class="m-0 font-weight-bold text-primary" id="box_name"></h6> | ||
218 | + <div class="dropdown no-arrow"> | ||
219 | + <a class="dropdown-toggle" href="#" role="button" id="dropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> | ||
220 | + <i class="fas fa-ellipsis-v fa-sm fa-fw text-gray-400"></i> | ||
221 | + </a> | ||
222 | + <div class="dropdown-menu dropdown-menu-right shadow animated--fade-in" aria-labelledby="dropdownMenuLink"> | ||
223 | + <div class="dropdown-header">Dropdown Header:</div> | ||
224 | + <a class="dropdown-item" href="#">Action</a> | ||
225 | + <a class="dropdown-item" href="#">Another action</a> | ||
226 | + <div class="dropdown-divider"></div> | ||
227 | + <a class="dropdown-item" href="#">Something else here</a> | ||
228 | + </div> | ||
229 | + </div> | ||
230 | + </div> | ||
231 | + <!-- Card Body --> | ||
232 | + <div class="card-body"> | ||
233 | + <div class="chart-area"> | ||
234 | + <canvas id="myChart" width="710" height="350" style="margin-left:4px; margin-top:4px;"></canvas> | ||
235 | + </div> | ||
236 | + </div> | ||
237 | + </div> | ||
238 | + </div> | ||
239 | + </div> | ||
240 | + | ||
241 | + <div class="row"> | ||
242 | + <div id="keywordspace" style="display:none;"> | ||
243 | + <div id="myList"> | ||
244 | + <form class="d-none d-sm-inline-block form-inline mr-auto ml-md-3 my-2 my-md-0 mw-100 navbar-search"> | ||
245 | + <div class="input-group"> | ||
246 | + <input type="text" class="search form-control bg-light border-0 small" placeholder="Search"> | ||
247 | + </div> | ||
248 | + </form> | ||
249 | + <div id="myList_in"> | ||
250 | + <li class="sort" data-sort="date"># 시간순</li> | ||
251 | + <li class="filterlabel"># 수신 | ||
252 | + <input type="checkbox" class="filter0" id="filter0" data_value=" get" /> | ||
253 | + </li> | ||
254 | + <li class="filterlabel"># 발신 | ||
255 | + <input type="checkbox" class="filter0" id="filter0" data_value=" send" /> | ||
256 | + </li> | ||
257 | + </div> | ||
258 | + </div> | ||
259 | + <ol class="list"></ol> | ||
260 | + </div> | ||
261 | + | ||
262 | + <div id="keyword1space" style="display:none;"> | ||
263 | + <div id="myList"> | ||
264 | + <form class="d-none d-sm-inline-block form-inline mr-auto ml-md-3 my-2 my-md-0 mw-100 navbar-search"> | ||
265 | + <div class="input-group"> | ||
266 | + <input type="text" class="search form-control bg-light border-0 small" placeholder="Search"> | ||
267 | + </div> | ||
268 | + </form> | ||
269 | + <div id="myList_in"> | ||
270 | + <li class="sort" data-sort="date"># 시간순</li> | ||
271 | + <li class="filterlabel"># 수신 | ||
272 | + <input type="checkbox" class="filter1" id="filter1" data_value=" get" /> | ||
273 | + </li> | ||
274 | + <li class="filterlabel"># 발신 | ||
275 | + <input type="checkbox" class="filter1" id="filter1" data_value=" send" /> | ||
276 | + </li> | ||
277 | + </div> | ||
278 | + </div> | ||
279 | + <ol class="list"></ol> | ||
280 | + </div> | ||
281 | + | ||
282 | + <div id="keyword2space" style="display:none;"> | ||
283 | + <div id="myList"> | ||
284 | + <form class="d-none d-sm-inline-block form-inline mr-auto ml-md-3 my-2 my-md-0 mw-100 navbar-search"> | ||
285 | + <div class="input-group"> | ||
286 | + <input type="text" class="search form-control bg-light border-0 small" placeholder="Search"> | ||
287 | + </div> | ||
288 | + </form> | ||
289 | + <div id="myList_in"> | ||
290 | + <li class="sort" data-sort="date"># 시간순</li> | ||
291 | + <li class="filterlabel"># 수신 | ||
292 | + <input type="checkbox" class="filter2" id="filter2" data_value=" get" /> | ||
293 | + </li> | ||
294 | + <li class="filterlabel"># 발신 | ||
295 | + <input type="checkbox" class="filter2" id="filter2" data_value=" send" /> | ||
296 | + </li> | ||
297 | + </div> | ||
298 | + </div> | ||
299 | + <ol class="list"></ol> | ||
300 | + </div> | ||
301 | + | ||
302 | + <div id="keyword3space" style="display:none;"> | ||
303 | + <div id="myList"> | ||
304 | + <form class="d-none d-sm-inline-block form-inline mr-auto ml-md-3 my-2 my-md-0 mw-100 navbar-search"> | ||
305 | + <div class="input-group"> | ||
306 | + <input type="text" class="search form-control bg-light border-0 small" placeholder="Search"> | ||
307 | + </div> | ||
308 | + </form> | ||
309 | + <div id="myList_in"> | ||
310 | + <li class="sort" data-sort="date"># 시간순</li> | ||
311 | + <li class="filterlabel"># 수신 | ||
312 | + <input type="checkbox" class="filter3" id="filter3" data_value=" get" /> | ||
313 | + </li> | ||
314 | + <li class="filterlabel"># 발신 | ||
315 | + <input type="checkbox" class="filter3" id="filter3" data_value=" send" /> | ||
316 | + </li> | ||
317 | + </div> | ||
318 | + </div> | ||
319 | + <ol class="list"></ol> | ||
320 | + </div> | ||
321 | + | ||
322 | + <div id="keyword4space" style="display:none;"> | ||
323 | + <div id="myList"> | ||
324 | + <form class="d-none d-sm-inline-block form-inline mr-auto ml-md-3 my-2 my-md-0 mw-100 navbar-search"> | ||
325 | + <div class="input-group"> | ||
326 | + <input type="text" class="search form-control bg-light border-0 small" placeholder="Search"> | ||
327 | + </div> | ||
328 | + </form> | ||
329 | + <div id="myList_in"> | ||
330 | + <li class="sort" data-sort="date"># 시간순</li> | ||
331 | + <li class="filterlabel"># 수신 | ||
332 | + <input type="checkbox" class="filter4" id="filter4" data_value=" get" /> | ||
333 | + </li> | ||
334 | + <li class="filterlabel"># 발신 | ||
335 | + <input type="checkbox" class="filter4" id="filter4" data_value=" send" /> | ||
336 | + </li> | ||
337 | + </div> | ||
338 | + </div> | ||
339 | + <ol class="list"></ol> | ||
340 | + </div> | ||
341 | + | ||
342 | + <div id="paymentspace" style="display:none;"> | ||
343 | + <div id="myList"> | ||
344 | + <form class="d-none d-sm-inline-block form-inline mr-auto ml-md-3 my-2 my-md-0 mw-100 navbar-search"> | ||
345 | + <div class="input-group"> | ||
346 | + <input type="text" class="search form-control bg-light border-0 small" placeholder="Search"> | ||
347 | + </div> | ||
348 | + </form> | ||
349 | + <div id="myList_in"> | ||
350 | + <li class="sort" data-sort="date"># 시간순</li> | ||
351 | + <li class="filterlabel"># 체크 | ||
352 | + <input type="checkbox" class="filter5" id="filter5" data_filter="payment_" data_value="체크" /> | ||
353 | + </li> | ||
354 | + <li class="filterlabel"># 일시불 | ||
355 | + <input type="checkbox" class="filter5" id="filter5" data_filter="payment_" data_value="일시불" /> | ||
356 | + </li> | ||
357 | + <li class="filterlabel"># 할부 | ||
358 | + <input type="checkbox" class="filter5" id="filter5" data_filter="payment_" data_value="할부" /> | ||
359 | + </li> | ||
360 | + <li class="filterlabel"># ~5만원 | ||
361 | + <input type="checkbox" class="filter5" id="filter5" data_filter="amount" data_value="less5" /> | ||
362 | + </li> | ||
363 | + <li class="filterlabel"># 5~10만원 | ||
364 | + <input type="checkbox" class="filter5" id="filter5" data_filter="amount" data_value="5to10" /> | ||
365 | + </li> | ||
366 | + <li class="filterlabel"># 10만원~ | ||
367 | + <input type="checkbox" class="filter5" id="filter5" data_filter="amount" data_value="more10" /> | ||
368 | + </li> | ||
369 | + </div> | ||
370 | + </div> | ||
371 | + <ol class="list"></ol> | ||
372 | + </div> | ||
373 | + </div> | ||
374 | + </div> | ||
375 | + <!-- /.container-fluid --> | ||
376 | + | ||
377 | + </div> | ||
378 | + <!-- End of Main Content --> | ||
379 | + | ||
380 | + <!-- Footer --> | ||
381 | + <footer class="sticky-footer bg-white"> | ||
382 | + <div class="container my-auto"> | ||
383 | + <div class="copyright text-center my-auto"> | ||
384 | + <span>Copyright © Mobile Forensic Tool / F-out</span> | ||
385 | + </div> | ||
386 | + </div> | ||
387 | + </footer> | ||
388 | + <!-- End of Footer --> | ||
389 | + | ||
390 | + </div> | ||
391 | + <!-- End of Content Wrapper --> | ||
392 | + | ||
393 | + </div> | ||
394 | + <!-- End of Page Wrapper --> | ||
395 | + | ||
396 | + <!-- Bootstrap core JavaScript--> | ||
397 | + <script src="../assets/jquery/jquery.min.js"></script> | ||
398 | + <script src="../assets/bootstrap/js/bootstrap.bundle.min.js"></script> | ||
399 | + | ||
400 | + <!-- Core plugin JavaScript--> | ||
401 | + <script src="../assets/jquery-easing/jquery.easing.min.js"></script> | ||
402 | + | ||
403 | + <!-- Custom scripts for all pages--> | ||
404 | + <script src="menu2.js"></script> | ||
405 | + | ||
406 | + <script> | ||
407 | + var myChart = new Chart(ctx, options_chart_1); | ||
408 | + window.myChart.destroy(); | ||
409 | + </script> | ||
410 | +</body> | ||
411 | + | ||
412 | +</html> |
source/forensic_tool/src/menu2.js
0 → 100644
1 | +const {PythonShell}=require('python-shell'); | ||
2 | + | ||
3 | +var choosed_menu=""; | ||
4 | +var title_text=""; | ||
5 | +var label_text_1=[]; | ||
6 | +var label_text_2=[]; | ||
7 | +var label_data_text_1=""; | ||
8 | +var label_data_text_2=""; | ||
9 | +var label_data_1=[]; | ||
10 | +var label_data_2=[]; | ||
11 | + | ||
12 | + | ||
13 | +var date_start=""; | ||
14 | +var date_end=""; | ||
15 | +var number=[]; | ||
16 | + | ||
17 | +var keyword_1_list=[]; | ||
18 | +var keyword_1_count=[]; | ||
19 | +var keyword_all_list=[]; | ||
20 | +var keyword_all_count=[]; | ||
21 | +var keyword_between_list=[]; | ||
22 | +var keyword_between_count=[]; | ||
23 | +var keyword_with_list=[]; | ||
24 | +var keyword_with_count=[]; | ||
25 | + | ||
26 | +var payment_1_list=[]; | ||
27 | +var payment_1_count=[]; | ||
28 | +var payment_2_list=[]; | ||
29 | +var payment_2_count=[]; | ||
30 | +var payment_3_list=[]; | ||
31 | +var payment_3_count=[]; | ||
32 | +var payment_4_list=[]; | ||
33 | +var payment_4_count=[]; | ||
34 | +var payment_5_list=[]; | ||
35 | +var payment_5_count=[]; | ||
36 | +var payment_6_list=[]; | ||
37 | +var payment_6_count=[]; | ||
38 | +var payment_7_list=[]; | ||
39 | +var payment_7_count=[]; | ||
40 | +var payment_8_list=[]; | ||
41 | +var payment_8_count=[]; | ||
42 | +var payment_9_list=[]; | ||
43 | +var payment_9_count=[]; | ||
44 | +var payment_10_list=[]; | ||
45 | +var payment_10_count=[]; | ||
46 | +var payment_11_list=[]; | ||
47 | +var payment_11_count=[]; | ||
48 | +var payment_12_list=[]; | ||
49 | +var payment_12_count=[]; | ||
50 | +var payment_13_list=[]; | ||
51 | +var payment_13_count=[]; | ||
52 | +var payment_14_list=[]; | ||
53 | +var payment_14_count=[]; | ||
54 | + | ||
55 | +const canvas = document.getElementById("myChart") | ||
56 | +const ctx=canvas.getContext('2d'); | ||
57 | +const choicespace = document.getElementById("choice"); | ||
58 | +const chartspace = document.getElementById("chart"); | ||
59 | +const keywordspace = document.getElementById("keywordspace"); | ||
60 | +const keyword1space = document.getElementById("keyword1space"); | ||
61 | +const keyword2space = document.getElementById("keyword2space"); | ||
62 | +const keyword3space = document.getElementById("keyword3space"); | ||
63 | +const keyword4space = document.getElementById("keyword4space"); | ||
64 | +const between_submit = document.getElementById("between_date_submit"); | ||
65 | +const with_submit = document.getElementById("number_submit"); | ||
66 | +const paymentspace = document.getElementById("paymentspace"); | ||
67 | +var keyword0 = document.getElementById('keyword'); | ||
68 | +var keyword1 = document.getElementById('keyword1'); | ||
69 | +var keyword2 = document.getElementById('keyword2'); | ||
70 | +var keyword3 = document.getElementById('keyword3'); | ||
71 | +var keyword4 = document.getElementById('keyword4'); | ||
72 | +var payment1 = document.getElementById('payment1'); | ||
73 | +var payment2 = document.getElementById('payment2'); | ||
74 | +var payment3 = document.getElementById('payment3'); | ||
75 | +var payment4 = document.getElementById('payment4'); | ||
76 | +var payment5 = document.getElementById('payment5'); | ||
77 | +var payment6 = document.getElementById('payment6'); | ||
78 | +var payment7 = document.getElementById('payment7'); | ||
79 | +var payment8 = document.getElementById('payment8'); | ||
80 | +var payment9 = document.getElementById('payment9'); | ||
81 | + | ||
82 | +var options_charts_1 = { | ||
83 | + responsive: false, | ||
84 | + title:{ | ||
85 | + display:true, | ||
86 | + text:title_text | ||
87 | + }, | ||
88 | + maintainAspectRatio: true, | ||
89 | + scales: { | ||
90 | + yAxes: [{ | ||
91 | + ticks: { | ||
92 | + beginAtZero:true | ||
93 | + } | ||
94 | + }] | ||
95 | + } | ||
96 | +}; | ||
97 | + | ||
98 | +var options_charts_2 = { | ||
99 | + responsive: false, | ||
100 | + title:{ | ||
101 | + display:true, | ||
102 | + text:title_text | ||
103 | + }, | ||
104 | + maintainAspectRatio: true, | ||
105 | + scales: { | ||
106 | + yAxes: [{ | ||
107 | + ticks: { | ||
108 | + beginAtZero:true | ||
109 | + } | ||
110 | + }] | ||
111 | + } | ||
112 | +}; | ||
113 | + | ||
114 | +var options_chart_1={ | ||
115 | + type: 'bar', | ||
116 | + data: { | ||
117 | + labels: label_text_1, | ||
118 | + datasets:[{ | ||
119 | + label:label_data_text_1, | ||
120 | + data:label_data_1, | ||
121 | + backgroundColor:'rgba(255, 206, 86, 0.2)', | ||
122 | + borderWidth: 1 | ||
123 | + }] | ||
124 | + }, | ||
125 | + options: options_charts_1 | ||
126 | +}; | ||
127 | + | ||
128 | +var options_chart_2={ | ||
129 | + type: 'bar', | ||
130 | + data: { | ||
131 | + labels: label_text_2, | ||
132 | + datasets:[{ | ||
133 | + label:label_data_text_2, | ||
134 | + data:label_data_2, | ||
135 | + backgroundColor:'rgba(75, 192, 192, 0.2)', | ||
136 | + borderWidth: 1 | ||
137 | + }] | ||
138 | + }, | ||
139 | + options: options_charts_2 | ||
140 | +}; | ||
141 | + | ||
142 | +var mysql = require('mysql'); | ||
143 | +var connection = mysql.createConnection({ | ||
144 | + host:'localhost', | ||
145 | + user:'root', | ||
146 | + password:'1234', | ||
147 | + database:'dataextraction', | ||
148 | + multipleStatements: true | ||
149 | +}); | ||
150 | + | ||
151 | +connection.connect(); | ||
152 | + | ||
153 | +connection.query('select MIN(date) "min", MAX(date) "max" from calllog;', function(err, rows,fields){ | ||
154 | + if(!err){ | ||
155 | + document.getElementById('between_date_start').min=(rows[0].min.toISOString().split("T")[0]); | ||
156 | + document.getElementById('between_date_start').max=(rows[0].max.toISOString().split("T")[0]); | ||
157 | + document.getElementById('between_date_end').min=(rows[0].min.toISOString().split("T")[0]); | ||
158 | + document.getElementById('between_date_end').max=(rows[0].max.toISOString().split("T")[0]); | ||
159 | + document.getElementById('between_amount_date_start').min=(rows[0].min.toISOString().split("T")[0]); | ||
160 | + document.getElementById('between_amount_date_start').max=(rows[0].max.toISOString().split("T")[0]); | ||
161 | + document.getElementById('between_amount_date_end').min=(rows[0].min.toISOString().split("T")[0]); | ||
162 | + document.getElementById('between_amount_date_end').max=(rows[0].max.toISOString().split("T")[0]); | ||
163 | + document.getElementById('between_payment_date_start').min=(rows[0].min.toISOString().split("T")[0]); | ||
164 | + document.getElementById('between_payment_date_start').max=(rows[0].max.toISOString().split("T")[0]); | ||
165 | + document.getElementById('between_payment_date_end').min=(rows[0].min.toISOString().split("T")[0]); | ||
166 | + document.getElementById('between_payment_date_end').max=(rows[0].max.toISOString().split("T")[0]); | ||
167 | + document.getElementById('between_card_date_start').min=(rows[0].min.toISOString().split("T")[0]); | ||
168 | + document.getElementById('between_card_date_start').max=(rows[0].max.toISOString().split("T")[0]); | ||
169 | + document.getElementById('between_card_date_end').min=(rows[0].min.toISOString().split("T")[0]); | ||
170 | + document.getElementById('between_card_date_end').max=(rows[0].max.toISOString().split("T")[0]); | ||
171 | + document.getElementById('between_store_date_start').min=(rows[0].min.toISOString().split("T")[0]); | ||
172 | + document.getElementById('between_store_date_start').max=(rows[0].max.toISOString().split("T")[0]); | ||
173 | + document.getElementById('between_store_date_end').min=(rows[0].min.toISOString().split("T")[0]); | ||
174 | + document.getElementById('between_store_date_end').max=(rows[0].max.toISOString().split("T")[0]); | ||
175 | + | ||
176 | + } | ||
177 | + else | ||
178 | + cc.innerHTML='Error-#0/minmax'; | ||
179 | +}); | ||
180 | + | ||
181 | +var options_list = { | ||
182 | + valueNames: [ 'type_cs', 'number', 'date','body', 'keyword' ], | ||
183 | + item: '<div class="col-xl-3 col-md-6 mb-4"><div class="card border-left-success shadow h-100 py-2"><div class="card-body"><div class="row no-gutters align-items-center"><div class="col mr-2"><li id="listrow"><div id="m2"><p id="listrow_number" class="number"></p><p id="listrow_date" class="date"></p></div><p id="listrow_body" class="body"></p><p id="listrow_keyword" class="keyword"></p></li></div></div></div></div></div>' | ||
184 | +}; | ||
185 | + | ||
186 | + | ||
187 | +var options_list_pay = { | ||
188 | + valueNames: [ 'bname','payment','payment_','price', 'amount', 'sname', 'date' ], | ||
189 | + item: '<div class="col-xl-3 col-md-6 mb-4"><div class="card border-left-success shadow h-100 py-2"><div class="card-body"><div class="row no-gutters align-items-center"><div class="col mr-2"><li id="listrow"><p id="listrow_bname" class="bname"></p><div id="m2"><p id="listrow_price" class="price"></p><p id="listrow_sname" class="sname"></p></div><div id="m2"><p id="listrow_payment" class="payment"></p><p id="listrow_date" class="date"></p></div></li></div></div></div></div></div>' | ||
190 | +}; | ||
191 | + | ||
192 | +var values_list = []; | ||
193 | +var values_list_1 = []; | ||
194 | +var values_list_all = []; | ||
195 | +var values_list_between = []; | ||
196 | +var values_list_with = []; | ||
197 | +var values_payment_list_all = []; | ||
198 | + | ||
199 | +var myList; | ||
200 | +var myList1 = new List("keyword1space", options_list, values_list_1); | ||
201 | +var myList2 = new List("keyword2space", options_list, values_list_all); | ||
202 | +var myList3 = new List("keyword3space", options_list, values_list_between); | ||
203 | +var myList4 = new List("keyword4space", options_list, values_list_with); | ||
204 | +var myList5; | ||
205 | + | ||
206 | +connection.query('update contact set number=replace(number,"-","");', function(err, rows, fields){ | ||
207 | + if(err) | ||
208 | + cc.innerHTML='Error-#1.0-contact replace'; | ||
209 | +}); | ||
210 | + | ||
211 | +let option = { | ||
212 | + mode: 'text', | ||
213 | + pythonPath: 'py', | ||
214 | + pythonOptions: ['-3.6'], | ||
215 | + scriptPath: '', | ||
216 | + args: [], | ||
217 | + encoding: 'utf8' | ||
218 | +}; | ||
219 | + | ||
220 | +PythonShell.run('src/analysis_message.py', option, function(err, result){ | ||
221 | + if(err) | ||
222 | + console.log(err); | ||
223 | + else{ | ||
224 | + for(var i=0;i<result.length;i++){ | ||
225 | + let data = result[i].replace(`b\'`, '').replace(`\'`, ''); | ||
226 | + let buff = Buffer.from(data,'base64'); | ||
227 | + let text=buff.toString('utf-8'); | ||
228 | + var data_temp=text.split('|'); | ||
229 | + values_list.push({type_cs:data_temp[0], number:data_temp[1], date:data_temp[2], body:data_temp[3], keyword:data_temp[4]}); | ||
230 | + } | ||
231 | + myList = new List("keywordspace", options_list, values_list); | ||
232 | + //cc.innerHTML="[done] All List Keyword"; | ||
233 | + keyword0.style="text-decoration:none"; | ||
234 | + } | ||
235 | +}); | ||
236 | + | ||
237 | +PythonShell.run('src/analysis_message_rank_recent.py', option, function(err, result){ | ||
238 | + if(err) | ||
239 | + console.log(err); | ||
240 | + else{ | ||
241 | + for(var i=0;i<result.length;i++){ | ||
242 | + let data = result[i].replace(`b\'`, '').replace(`\'`, ''); | ||
243 | + let buff = Buffer.from(data,'base64'); | ||
244 | + let text=buff.toString('utf-8'); | ||
245 | + var data_temp=text.split('|'); | ||
246 | + keyword_1_list.push(data_temp[0]); | ||
247 | + keyword_1_count.push(data_temp[1]); | ||
248 | + } | ||
249 | + //cc.innerHTML="[done] recent Keyword"; | ||
250 | + keyword1.style="text-decoration:none"; | ||
251 | + } | ||
252 | +}); | ||
253 | + | ||
254 | +PythonShell.run('src/analysis_message_rank_all.py', option, function(err, result){ | ||
255 | + if(err) | ||
256 | + console.log(err); | ||
257 | + else{ | ||
258 | + for(var i=0;i<result.length;i++){ | ||
259 | + let data = result[i].replace(`b\'`, '').replace(`\'`, ''); | ||
260 | + let buff = Buffer.from(data,'base64'); | ||
261 | + let text=buff.toString('utf-8'); | ||
262 | + var data_temp=text.split('|'); | ||
263 | + keyword_all_list.push(data_temp[0]); | ||
264 | + keyword_all_count.push(data_temp[1]); | ||
265 | + } | ||
266 | + //cc.innerHTML="[done] recent Keyword"; | ||
267 | + keyword2.style="text-decoration:none"; | ||
268 | + } | ||
269 | +}); | ||
270 | + | ||
271 | +PythonShell.run('src/analysis_message_bank.py', option, function(err, result){ | ||
272 | + if(err) | ||
273 | + cc.innerHTML="Error-analysis_message_bank.py"; | ||
274 | + else{ | ||
275 | + connection.query('select * from sms_bank;', function(err, rows, fields){ | ||
276 | + if(err) | ||
277 | + cc.innerHTML='Error-#2.0-payment select'; | ||
278 | + else{ | ||
279 | + for(var i=0;i<rows.length;i++){ | ||
280 | + var date_temp=rows[i].date.toISOString().split("T")[0]+" "+rows[i].date.toISOString().split("T")[1].slice(0,8); | ||
281 | + var price_temp=rows[i].price; | ||
282 | + var amount_temp="" | ||
283 | + var bname_temp=rows[i].bname; | ||
284 | + var sname_temp=rows[i].sname; | ||
285 | + var payplan_temp=rows[i].paymentplan; | ||
286 | + var payplan__temp=rows[i].paymentplan; | ||
287 | + if (payplan__temp != "체크"&&payplan__temp!="일시불"){ | ||
288 | + payplan__temp="할부"; | ||
289 | + } | ||
290 | + if (price_temp < 50000){amount_temp="less5";} | ||
291 | + else if (price_temp >=50000 && price_temp <100000){amount_temp="5to10";} | ||
292 | + else{amount_temp="more10";} | ||
293 | + values_payment_list_all.push({bname:bname_temp, payment:payplan_temp ,payment_:payplan__temp ,price:price_temp+"원",amount:amount_temp,sname:sname_temp, date:date_temp}); | ||
294 | + } | ||
295 | + myList5 = new List("paymentspace", options_list_pay, values_payment_list_all); | ||
296 | + } | ||
297 | + }); | ||
298 | + | ||
299 | + connection.query('SELECT date_format(date, "%Y-%m-02 00:00:00") "date", sum(price) "sum" FROM sms_bank group by date_format(date, "%Y-%m-02 00:00:00") order by date_format(date, "%Y-%m-02 00:00:00");', function(err, rows, fields){ | ||
300 | + if(!err){ | ||
301 | + for(var i=0;i<rows.length;i++){ | ||
302 | + var date=rows[i].date.slice(0,7); | ||
303 | + var sum=rows[i].sum; | ||
304 | + payment_1_list.push(date) | ||
305 | + payment_1_count.push(sum) | ||
306 | + } | ||
307 | + } | ||
308 | + else | ||
309 | + cc.innerHTML='Error-query-#payment_1'; | ||
310 | + }); | ||
311 | + | ||
312 | + connection.query('SELECT s1.date "date", sum(s2.sum) "sum" FROM (SELECT date_format(date, "%Y-%m-02 00:00:00") "date", sum(price) "sum" FROM sms_bank group by date_format(date, "%Y-%m-02 00:00:00") order by date_format(date, "%Y-%m-02 00:00:00")) s1, (SELECT date_format(date, "%Y-%m-02 00:00:00") "date", sum(price) "sum" FROM sms_bank group by date_format(date, "%Y-%m-02 00:00:00") order by date_format(date, "%Y-%m-02 00:00:00")) s2 where s1.date>=s2.date group by s1.date order by s1.date;', function(err, rows, fields){ | ||
313 | + if(!err){ | ||
314 | + for(var i=0;i<rows.length;i++){ | ||
315 | + var date=rows[i].date.slice(0,7); | ||
316 | + var sum=rows[i].sum; | ||
317 | + payment_2_list.push(date) | ||
318 | + payment_2_count.push(sum) | ||
319 | + } | ||
320 | + } | ||
321 | + else | ||
322 | + cc.innerHTML='Error-query-#payment_2'; | ||
323 | + }); | ||
324 | + | ||
325 | + connection.query('drop table if exists sms_bank_hour; create table sms_bank_hour(hour int not null, smscount int, primary key(hour)); set @hour:=-1; insert into sms_bank_hour(hour, smscount) (select (@hour:=@hour+1) "hour", (select count(*) from sms_bank where hour(date)=@hour) "count" from sms where @hour<23);', function(err, rows, fields){ | ||
326 | + if(!err){ | ||
327 | + connection.query('select * from sms_bank_hour order by hour;', function(err, rows, fields){ | ||
328 | + for(var i=0;i<rows.length;i++){ | ||
329 | + var hour=rows[i].hour; | ||
330 | + var count=rows[i].smscount; | ||
331 | + payment_5_list.push(hour) | ||
332 | + payment_5_count.push(count) | ||
333 | + } | ||
334 | + }); | ||
335 | + } | ||
336 | + else | ||
337 | + cc.innerHTML='Error-query-#payment_5'; | ||
338 | + }); | ||
339 | + | ||
340 | + connection.query('select bname, count(*) "count" from sms_bank group by bname order by count(*) desc;', function(err, rows, fields){ | ||
341 | + if(!err){ | ||
342 | + for(var i=0;i<rows.length;i++){ | ||
343 | + var bname=rows[i].bname; | ||
344 | + var count=rows[i].count; | ||
345 | + payment_7_list.push(bname) | ||
346 | + payment_7_count.push(count) | ||
347 | + } | ||
348 | + } | ||
349 | + else | ||
350 | + cc.innerHTML='Error-query-#payment_7'; | ||
351 | + }); | ||
352 | + | ||
353 | + connection.query('select bname, sum(price) "sum" from sms_bank group by bname order by sum(price) desc;', function(err, rows, fields){ | ||
354 | + if(!err){ | ||
355 | + for(var i=0;i<rows.length;i++){ | ||
356 | + var bname=rows[i].bname; | ||
357 | + var sum=rows[i].sum; | ||
358 | + payment_8_list.push(bname) | ||
359 | + payment_8_count.push(sum) | ||
360 | + } | ||
361 | + } | ||
362 | + else | ||
363 | + cc.innerHTML='Error-query-#payment_8'; | ||
364 | + }); | ||
365 | + | ||
366 | + connection.query('select sname, count(*) "count" from sms_bank group by sname order by count(*) desc;', function(err, rows, fields){ | ||
367 | + if(!err){ | ||
368 | + for(var i=0;i<rows.length;i++){ | ||
369 | + var sname=rows[i].sname; | ||
370 | + var count=rows[i].count; | ||
371 | + payment_11_list.push(sname) | ||
372 | + payment_11_count.push(count) | ||
373 | + } | ||
374 | + } | ||
375 | + else | ||
376 | + cc.innerHTML='Error-query-#payment_11'; | ||
377 | + }); | ||
378 | + | ||
379 | + connection.query('select sname, sum(price) "sum" from sms_bank group by sname order by sum(price) desc;', function(err, rows, fields){ | ||
380 | + if(!err){ | ||
381 | + for(var i=0;i<rows.length;i++){ | ||
382 | + var sname=rows[i].sname; | ||
383 | + var sum=rows[i].sum; | ||
384 | + payment_12_list.push(sname) | ||
385 | + payment_12_count.push(sum) | ||
386 | + } | ||
387 | + } | ||
388 | + else | ||
389 | + cc.innerHTML='Error-query-#payment_12'; | ||
390 | + }); | ||
391 | + } | ||
392 | +}); | ||
393 | + | ||
394 | +function chartspaceview(){ | ||
395 | + keywordspace.style="display:none"; | ||
396 | + choicespace.style="display:none"; | ||
397 | + chartspace.style="display:inline"; | ||
398 | + keyword1space.style="display:none"; | ||
399 | + keyword2space.style="display:none"; | ||
400 | + keyword3space.style="display:none"; | ||
401 | + keyword4space.style="display:none"; | ||
402 | + paymentspace.style="display:none"; | ||
403 | +} | ||
404 | + | ||
405 | +keyword0.addEventListener('click', function(){ | ||
406 | + keywordspace.style="display:inline"; | ||
407 | + choicespace.style="display:none"; | ||
408 | + chartspace.style="display:none"; | ||
409 | + keyword1space.style="display:none"; | ||
410 | + keyword2space.style="display:none"; | ||
411 | + keyword3space.style="display:none"; | ||
412 | + keyword4space.style="display:none"; | ||
413 | + paymentspace.style="display:none"; | ||
414 | + menu_name.innerHTML="전체 문자의 키워드 목록"; | ||
415 | +}); | ||
416 | + | ||
417 | +keyword1.addEventListener('click', function(){ | ||
418 | + choosed_menu="keyword1"; | ||
419 | + chartspaceview(); | ||
420 | + menu_name.innerHTML="최근 1개월 문자 키워드 순위"; | ||
421 | + box_name.innerHTML="# 언급 횟수"; | ||
422 | + options_chart_1.options.title.text="최근 1개월 문자 키워드"; | ||
423 | + options_chart_1.data.labels=keyword_1_list; | ||
424 | + options_chart_1.data.datasets[0].label="언급 횟수"; | ||
425 | + options_chart_1.data.datasets[0].data=keyword_1_count; | ||
426 | + window.myChart.destroy(); | ||
427 | + window.myChart = new Chart(ctx, options_chart_1); | ||
428 | +}); | ||
429 | + | ||
430 | +keyword2.addEventListener('click', function(){ | ||
431 | + choosed_menu="keyword2"; | ||
432 | + chartspaceview(); | ||
433 | + menu_name.innerHTML="전체 문자 키워드 순위"; | ||
434 | + box_name.innerHTML="# 언급 횟수"; | ||
435 | + options_chart_1.options.title.text="전체 문자 키워드"; | ||
436 | + options_chart_1.data.labels=keyword_all_list; | ||
437 | + options_chart_1.data.datasets[0].label="언급 횟수"; | ||
438 | + options_chart_1.data.datasets[0].data=keyword_all_count; | ||
439 | + window.myChart.destroy(); | ||
440 | + window.myChart = new Chart(ctx, options_chart_1); | ||
441 | +}); | ||
442 | + | ||
443 | +keyword3.addEventListener('click', function(){ | ||
444 | + choosed_menu="keyword3"; | ||
445 | + chartspaceview(); | ||
446 | + menu_name.innerHTML="특정 기간의 문자 키워드 순위"; | ||
447 | + box_name.innerHTML="# 언급 횟수"; | ||
448 | + options_chart_1.options.title.text="특정 기간의 문자 키워드"; | ||
449 | + options_chart_1.data.labels=keyword_between_list; | ||
450 | + options_chart_1.data.datasets[0].label="언급 횟수"; | ||
451 | + options_chart_1.data.datasets[0].data=keyword_between_count; | ||
452 | + window.myChart.destroy(); | ||
453 | + window.myChart = new Chart(ctx, options_chart_1); | ||
454 | +}); | ||
455 | + | ||
456 | +keyword4.addEventListener('click', function(){ | ||
457 | + choosed_menu="keyword4"; | ||
458 | + chartspaceview(); | ||
459 | + menu_name.innerHTML="특정 연락처와의 문자 키워드 순위"; | ||
460 | + box_name.innerHTML="# 언급 횟수"; | ||
461 | + options_chart_1.options.title.text="특정 연락처와의 문자 키워드"; | ||
462 | + options_chart_1.data.labels=keyword_with_list; | ||
463 | + options_chart_1.data.datasets[0].label="언급 횟수"; | ||
464 | + options_chart_1.data.datasets[0].data=keyword_with_count; | ||
465 | + window.myChart.destroy(); | ||
466 | + window.myChart = new Chart(ctx, options_chart_1); | ||
467 | +}); | ||
468 | + | ||
469 | +payment1.addEventListener('click', function(){ | ||
470 | + keywordspace.style="display:none"; | ||
471 | + choicespace.style="display:none"; | ||
472 | + chartspace.style="display:none"; | ||
473 | + keyword1space.style="display:none"; | ||
474 | + keyword2space.style="display:none"; | ||
475 | + keyword3space.style="display:none"; | ||
476 | + keyword4space.style="display:none"; | ||
477 | + paymentspace.style="display:inline"; | ||
478 | + menu_name.innerHTML="결제문자 목록"; | ||
479 | +}); | ||
480 | + | ||
481 | +payment2.addEventListener('click', function(){ | ||
482 | + chartspaceview(); | ||
483 | + type1.innerHTML="# 결제 금액"; | ||
484 | + type2.innerHTML="# 누적 결제 금액"; | ||
485 | + choicespace.style="display:inline"; | ||
486 | + box_name.innerHTML="# 결제 금액"; | ||
487 | + choosed_menu="payment2"; | ||
488 | + | ||
489 | + menu_name.innerHTML="전체 기간의 결제 금액 통계"; | ||
490 | + options_chart_1.options.title.text="전체 기간의 결제 금액 통계"; | ||
491 | + options_chart_1.data.labels=payment_1_list; | ||
492 | + options_chart_1.data.datasets[0].label="결제 금액"; | ||
493 | + options_chart_1.data.datasets[0].data=payment_1_count; | ||
494 | + options_charts_2.title.text="전체 기간의 누적 결제 금액 통계"; | ||
495 | + options_chart_2.data.labels=payment_2_list; | ||
496 | + options_chart_2.data.datasets[0].label="누적 결제 금액"; | ||
497 | + options_chart_2.data.datasets[0].data=payment_2_count; | ||
498 | + window.myChart.destroy(); | ||
499 | + window.myChart = new Chart(ctx, options_chart_1); | ||
500 | +}); | ||
501 | + | ||
502 | +payment3.addEventListener('click', function(){ | ||
503 | + chartspaceview(); | ||
504 | + type1.innerHTML="# 결제 금액"; | ||
505 | + type2.innerHTML="# 누적 결제 금액"; | ||
506 | + choicespace.style="display:inline"; | ||
507 | + box_name.innerHTML="# 결제 금액"; | ||
508 | + choosed_menu="payment3"; | ||
509 | + | ||
510 | + menu_name.innerHTML="특정 기간의 결제 금액 통계"; | ||
511 | + options_chart_1.options.title.text="특정 기간의 결제 금액 통계"; | ||
512 | + options_chart_1.data.labels=payment_3_list; | ||
513 | + options_chart_1.data.datasets[0].label="결제 금액"; | ||
514 | + options_chart_1.data.datasets[0].data=payment_3_count; | ||
515 | + options_charts_2.title.text="특정 기간의 누적 결제 금액 통계"; | ||
516 | + options_chart_2.data.labels=payment_4_list; | ||
517 | + options_chart_2.data.datasets[0].label="누적 결제 금액"; | ||
518 | + options_chart_2.data.datasets[0].data=payment_4_count; | ||
519 | + window.myChart.destroy(); | ||
520 | + window.myChart = new Chart(ctx, options_chart_1); | ||
521 | +}); | ||
522 | + | ||
523 | +payment4.addEventListener('click', function(){ | ||
524 | + chartspaceview(); | ||
525 | + | ||
526 | + menu_name.innerHTML="전체 기간의 결제 시간대"; | ||
527 | + box_name.innerHTML="# 결제 횟수"; | ||
528 | + options_chart_1.options.title.text="전체 기간의 결제 시간대"; | ||
529 | + options_chart_1.data.labels=payment_5_list; | ||
530 | + options_chart_1.data.datasets[0].label="결제 횟수"; | ||
531 | + options_chart_1.data.datasets[0].data=payment_5_count; | ||
532 | + window.myChart.destroy(); | ||
533 | + window.myChart = new Chart(ctx, options_chart_1); | ||
534 | +}); | ||
535 | + | ||
536 | +payment5.addEventListener('click', function(){ | ||
537 | + chartspaceview(); | ||
538 | + | ||
539 | + menu_name.innerHTML="특정 기간의 결제 시간대"; | ||
540 | + box_name.innerHTML="# 결제 횟수"; | ||
541 | + options_chart_1.options.title.text="특정 기간의 결제 시간대"; | ||
542 | + options_chart_1.data.labels=payment_6_list; | ||
543 | + options_chart_1.data.datasets[0].label="결제 횟수"; | ||
544 | + options_chart_1.data.datasets[0].data=payment_6_count; | ||
545 | + window.myChart.destroy(); | ||
546 | + window.myChart = new Chart(ctx, options_chart_1); | ||
547 | +}); | ||
548 | + | ||
549 | +payment6.addEventListener('click', function(){ | ||
550 | + chartspaceview(); | ||
551 | + type1.innerHTML="# 결제 횟수 기준"; | ||
552 | + type2.innerHTML="# 결제 금액 기준"; | ||
553 | + choicespace.style="display:inline"; | ||
554 | + box_name.innerHTML="# 결제 횟수 기준"; | ||
555 | + choosed_menu="payment6"; | ||
556 | + | ||
557 | + menu_name.innerHTML="전체 기간의 카드 이용 순위"; | ||
558 | + options_chart_1.options.title.text="전체 기간의 카드 이용 순위"; | ||
559 | + options_chart_1.data.labels=payment_7_list; | ||
560 | + options_chart_1.data.datasets[0].label="결제 횟수"; | ||
561 | + options_chart_1.data.datasets[0].data=payment_7_count; | ||
562 | + options_charts_2.title.text="전체 기간의 카드 이용 순위"; | ||
563 | + options_chart_2.data.labels=payment_8_list; | ||
564 | + options_chart_2.data.datasets[0].label="결제 금액"; | ||
565 | + options_chart_2.data.datasets[0].data=payment_8_count; | ||
566 | + window.myChart.destroy(); | ||
567 | + window.myChart = new Chart(ctx, options_chart_1); | ||
568 | +}); | ||
569 | + | ||
570 | +payment7.addEventListener('click', function(){ | ||
571 | + chartspaceview(); | ||
572 | + type1.innerHTML="# 결제 횟수 기준"; | ||
573 | + type2.innerHTML="# 결제 금액 기준"; | ||
574 | + choicespace.style="display:inline"; | ||
575 | + box_name.innerHTML="# 결제 횟수 기준"; | ||
576 | + choosed_menu="payment7"; | ||
577 | + | ||
578 | + menu_name.innerHTML="특정 기간의 카드 이용 순위"; | ||
579 | + options_chart_1.options.title.text="특정 기간의 카드 이용 순위"; | ||
580 | + options_chart_1.data.labels=payment_9_list; | ||
581 | + options_chart_1.data.datasets[0].label="결제 횟수"; | ||
582 | + options_chart_1.data.datasets[0].data=payment_9_count; | ||
583 | + options_charts_2.title.text="특정 기간의 카드 이용 순위"; | ||
584 | + options_chart_2.data.labels=payment_10_list; | ||
585 | + options_chart_2.data.datasets[0].label="결제 금액"; | ||
586 | + options_chart_2.data.datasets[0].data=payment_10_count; | ||
587 | + window.myChart.destroy(); | ||
588 | + window.myChart = new Chart(ctx, options_chart_1); | ||
589 | +}); | ||
590 | + | ||
591 | +payment8.addEventListener('click', function(){ | ||
592 | + chartspaceview(); | ||
593 | + type1.innerHTML="# 결제 횟수 기준"; | ||
594 | + type2.innerHTML="# 결제 금액 기준"; | ||
595 | + choicespace.style="display:inline"; | ||
596 | + box_name.innerHTML="# 결제 횟수 기준"; | ||
597 | + choosed_menu="payment8"; | ||
598 | + | ||
599 | + menu_name.innerHTML="전체 기간의 사용처 순위"; | ||
600 | + options_chart_1.options.title.text="전체 기간의 사용처 순위"; | ||
601 | + options_chart_1.data.labels=payment_11_list; | ||
602 | + options_chart_1.data.datasets[0].label="결제 횟수"; | ||
603 | + options_chart_1.data.datasets[0].data=payment_11_count; | ||
604 | + options_charts_2.title.text="전체 기간의 사용처 순위"; | ||
605 | + options_chart_2.data.labels=payment_12_list; | ||
606 | + options_chart_2.data.datasets[0].label="결제 금액"; | ||
607 | + options_chart_2.data.datasets[0].data=payment_12_count; | ||
608 | + window.myChart.destroy(); | ||
609 | + window.myChart = new Chart(ctx, options_chart_1); | ||
610 | +}); | ||
611 | + | ||
612 | +payment9.addEventListener('click', function(){ | ||
613 | + chartspaceview(); | ||
614 | + type1.innerHTML="# 결제 횟수 기준"; | ||
615 | + type2.innerHTML="# 결제 금액 기준"; | ||
616 | + choicespace.style="display:inline"; | ||
617 | + box_name.innerHTML="# 결제 횟수 기준"; | ||
618 | + choosed_menu="payment9"; | ||
619 | + | ||
620 | + menu_name.innerHTML="특정 기간의 사용처 순위"; | ||
621 | + options_chart_1.options.title.text="특정 기간의 사용처 순위"; | ||
622 | + options_chart_1.data.labels=payment_13_list; | ||
623 | + options_chart_1.data.datasets[0].label="결제 횟수"; | ||
624 | + options_chart_1.data.datasets[0].data=payment_13_count; | ||
625 | + options_charts_2.title.text="특정 기간의 사용처 순위"; | ||
626 | + options_chart_2.data.labels=payment_14_list; | ||
627 | + options_chart_2.data.datasets[0].label="결제 금액"; | ||
628 | + options_chart_2.data.datasets[0].data=payment_14_count; | ||
629 | + window.myChart.destroy(); | ||
630 | + window.myChart = new Chart(ctx, options_chart_1); | ||
631 | +}); | ||
632 | + | ||
633 | +var type1 = document.getElementById('type1'); | ||
634 | +type1.addEventListener('click', function(){ | ||
635 | + window.myChart.destroy(); | ||
636 | + window.myChart = new Chart(ctx, options_chart_1); | ||
637 | + switch(choosed_menu){ | ||
638 | + case 'payment2': | ||
639 | + case 'payment3': | ||
640 | + box_name.innerHTML="# 결제 금액"; | ||
641 | + break; | ||
642 | + case 'payment6': | ||
643 | + case 'payment7': | ||
644 | + case 'payment8': | ||
645 | + case 'payment9': | ||
646 | + box_name.innerHTML="# 결제 횟수 기준"; | ||
647 | + break; | ||
648 | + } | ||
649 | +}); | ||
650 | + | ||
651 | +var type2 = document.getElementById('type2'); | ||
652 | +type2.addEventListener('click', function(){ | ||
653 | + window.myChart.destroy(); | ||
654 | + window.myChart = new Chart(ctx, options_chart_2); | ||
655 | + switch(choosed_menu){ | ||
656 | + case 'payment2': | ||
657 | + case 'payment3': | ||
658 | + box_name.innerHTML="# 누적 결제 금액"; | ||
659 | + break; | ||
660 | + case 'payment6': | ||
661 | + case 'payment7': | ||
662 | + case 'payment8': | ||
663 | + case 'payment9': | ||
664 | + box_name.innerHTML="# 결제 금액 기준"; | ||
665 | + break; | ||
666 | + } | ||
667 | +}); | ||
668 | + | ||
669 | +function get_date_keyword(){ | ||
670 | + keyword3.style="text-decoration:line-through"; | ||
671 | + choosed_menu="keyword3"; | ||
672 | + keywordspace.style="display:none"; | ||
673 | + chartspace.style="display:none"; | ||
674 | + keyword1space.style="display:none"; | ||
675 | + keyword2space.style="display:none"; | ||
676 | + keyword3space.style="display:none"; | ||
677 | + between_submit.disabled=true; | ||
678 | + keyword4space.style="display:none"; | ||
679 | + paymentspace.style="display:none"; | ||
680 | + | ||
681 | + myList3.clear(); | ||
682 | + keyword_between_list.length=0; | ||
683 | + keyword_between_count.length=0; | ||
684 | + | ||
685 | + date_start=document.getElementById('between_date_start').value+' 00:00:00'; | ||
686 | + date_end=document.getElementById('between_date_end').value+' 23:59:59'; | ||
687 | + | ||
688 | + let option_between = { | ||
689 | + mode: 'text', | ||
690 | + pythonPath: 'py', | ||
691 | + pythonOptions: ['-3.6'], | ||
692 | + scriptPath: '', | ||
693 | + args: [date_start, date_end], | ||
694 | + encoding: 'utf8' | ||
695 | + }; | ||
696 | + | ||
697 | + PythonShell.run('src/analysis_message_rank_between.py', option_between, function(err, result){ | ||
698 | + for(var i=0;i<result.length;i++){ | ||
699 | + let data = result[i].replace(`b\'`, '').replace(`\'`, ''); | ||
700 | + let buff = Buffer.from(data,'base64'); | ||
701 | + let text=buff.toString('utf-8'); | ||
702 | + var data_temp=text.split('|'); | ||
703 | + keyword_between_list.push(data_temp[0]); | ||
704 | + keyword_between_count.push(data_temp[1]); | ||
705 | + } | ||
706 | + menu_name.innerHTML="특정 기간의 문자 키워드"; | ||
707 | + options_chart_1.options.title.text="특정 기간의 문자 키워드"; | ||
708 | + options_chart_1.data.labels=keyword_between_list; | ||
709 | + options_chart_1.data.datasets[0].label="언급 횟수"; | ||
710 | + options_chart_1.data.datasets[0].data=keyword_between_count; | ||
711 | + window.myChart.destroy(); | ||
712 | + window.myChart = new Chart(ctx, options_chart_1); | ||
713 | + chartspace.style="display:inline"; | ||
714 | + //cc.innerHTML="[done] recent Keyword"; | ||
715 | + keyword3.style="text-decoration:none"; | ||
716 | + between_submit.disabled=false; | ||
717 | + }); | ||
718 | + //connection.end(); | ||
719 | +} | ||
720 | + | ||
721 | +function get_number_push(){ | ||
722 | + number.push(document.getElementById('number').value); | ||
723 | + keyword4_list.innerHTML=number; | ||
724 | +} | ||
725 | +function get_number_pop(){ | ||
726 | + number.splice(number.indexOf(document.getElementById('number').value),1); | ||
727 | + keyword4_list.innerHTML=number; | ||
728 | +} | ||
729 | +function get_number_keyword(){ | ||
730 | + keyword4.style="text-decoration:line-through"; | ||
731 | + choosed_menu="keyword4"; | ||
732 | + keywordspace.style="display:none"; | ||
733 | + chartspace.style="display:none"; | ||
734 | + keyword1space.style="display:none"; | ||
735 | + keyword2space.style="display:none"; | ||
736 | + keyword3space.style="display:none"; | ||
737 | + keyword4space.style="display:none"; | ||
738 | + with_submit.disabled=true; | ||
739 | + paymentspace.style="display:none"; | ||
740 | + | ||
741 | + myList4.clear(); | ||
742 | + keyword_with_list.length=0; | ||
743 | + keyword_with_count.length=0; | ||
744 | + | ||
745 | + let option_between = { | ||
746 | + mode: 'text', | ||
747 | + pythonPath: 'py', | ||
748 | + pythonOptions: ['-3.6'], | ||
749 | + scriptPath: '', | ||
750 | + args: [number], | ||
751 | + encoding: 'utf8' | ||
752 | + }; | ||
753 | + | ||
754 | + PythonShell.run('src/analysis_message_rank_with.py', option_between, function(err, result){ | ||
755 | + for(var i=0;i<result.length;i++){ | ||
756 | + let data = result[i].replace(`b\'`, '').replace(`\'`, ''); | ||
757 | + let buff = Buffer.from(data,'base64'); | ||
758 | + let text=buff.toString('utf-8'); | ||
759 | + var data_temp=text.split('|'); | ||
760 | + keyword_with_list.push(data_temp[0]); | ||
761 | + keyword_with_count.push(data_temp[1]); | ||
762 | + } | ||
763 | + menu_name.innerHTML="특정 연락처와의 문자 키워드"; | ||
764 | + options_chart_1.options.title.text="특정 연락처와의 문자 키워드"; | ||
765 | + options_chart_1.data.labels=keyword_with_list; | ||
766 | + options_chart_1.data.datasets[0].label="언급 횟수"; | ||
767 | + options_chart_1.data.datasets[0].data=keyword_with_count; | ||
768 | + window.myChart.destroy(); | ||
769 | + window.myChart = new Chart(ctx, options_chart_1); | ||
770 | + chartspace.style="display:inline"; | ||
771 | + //cc.innerHTML="[done] recent Keyword"; | ||
772 | + keyword4.style="text-decoration:none"; | ||
773 | + with_submit.disabled=false; | ||
774 | + }); | ||
775 | + //connection.end(); | ||
776 | +} | ||
777 | + | ||
778 | +function get_amount_date_payment(){ | ||
779 | + chartspaceview(); | ||
780 | + type1.innerHTML="# 결제 금액"; | ||
781 | + type2.innerHTML="# 누적 결제 금액"; | ||
782 | + choicespace.style="display:inline"; | ||
783 | + box_name.innerHTML="# 결제 금액"; | ||
784 | + choosed_menu="payment3"; | ||
785 | + | ||
786 | + date_start=document.getElementById('between_amount_date_start').value+' 00:00:00'; | ||
787 | + date_end=document.getElementById('between_amount_date_end').value+' 23:59:59'; | ||
788 | + console.log(date_start, date_end); | ||
789 | + | ||
790 | + payment_3_list.length=0; | ||
791 | + payment_3_count.length=0; | ||
792 | + payment_4_list.length=0; | ||
793 | + payment_4_count.length=0; | ||
794 | + | ||
795 | + connection.query("SELECT date_format(date, '%Y-%m-02 00:00:00') 'date', sum(price) 'sum' FROM sms_bank where date between ? and ? group by date_format(date, '%Y-%m-02 00:00:00') order by date_format(date, '%Y-%m-02 00:00:00');",[date_start, date_end], function(err, rows, fields){ | ||
796 | + if(!err){ | ||
797 | + for(var i=0;i<rows.length;i++){ | ||
798 | + var date=rows[i].date.slice(0,7); | ||
799 | + var sum=rows[i].sum; | ||
800 | + payment_3_list.push(date); | ||
801 | + payment_3_count.push(sum); | ||
802 | + } | ||
803 | + } | ||
804 | + else | ||
805 | + cc.innerHTML='Error-query-#payment_3-1'+err; | ||
806 | + }) | ||
807 | + | ||
808 | + connection.query("SELECT s1.date 'date', sum(s2.sum) 'sum' FROM (SELECT date_format(date, '%Y-%m-02 00:00:00') 'date', sum(price) 'sum' FROM sms_bank where date between ? and ? group by date_format(date, '%Y-%m-02 00:00:00') order by date_format(date, '%Y-%m-02 00:00:00')) s1, (SELECT date_format(date, '%Y-%m-02 00:00:00') 'date', sum(price) 'sum' FROM sms_bank where date between ? and ? group by date_format(date, '%Y-%m-02 00:00:00') order by date_format(date, '%Y-%m-02 00:00:00')) s2 where s1.date>=s2.date group by s1.date order by s1.date;",[date_start, date_end, date_start, date_end], function(err, rows, fields){ | ||
809 | + if(!err){ | ||
810 | + for(var i=0;i<rows.length;i++){ | ||
811 | + var date=rows[i].date.slice(0,7); | ||
812 | + var sum=rows[i].sum; | ||
813 | + payment_4_list.push(date); | ||
814 | + payment_4_count.push(sum); | ||
815 | + } | ||
816 | + } | ||
817 | + else | ||
818 | + cc.innerHTML='Error-query-#payment_3-2'+err; | ||
819 | + }) | ||
820 | + | ||
821 | + menu_name.innerHTML="특정 기간의 결제 금액 통계"; | ||
822 | + options_chart_1.options.title.text="특정 기간의 결제 금액 통계"; | ||
823 | + options_chart_1.data.labels=payment_3_list; | ||
824 | + options_chart_1.data.datasets[0].label="결제 금액"; | ||
825 | + options_chart_1.data.datasets[0].data=payment_3_count; | ||
826 | + options_charts_2.title.text="특정 기간의 누적 결제 금액 통계"; | ||
827 | + options_chart_2.data.labels=payment_4_list; | ||
828 | + options_chart_2.data.datasets[0].label="누적 결제 금액"; | ||
829 | + options_chart_2.data.datasets[0].data=payment_4_count; | ||
830 | + window.myChart.destroy(); | ||
831 | +} | ||
832 | + | ||
833 | +function get_payment_date_payment(){ | ||
834 | + chartspaceview(); | ||
835 | + | ||
836 | + date_start=document.getElementById('between_payment_date_start').value+' 00:00:00'; | ||
837 | + date_end=document.getElementById('between_payment_date_end').value+' 23:59:59'; | ||
838 | + | ||
839 | + payment_6_list.length=0; | ||
840 | + payment_6_count.length=0; | ||
841 | + | ||
842 | + connection.query("drop table if exists sms_bank_hour; create table sms_bank_hour(hour int not null, smscount int, primary key(hour)); set @hour:=-1; insert into sms_bank_hour(hour, smscount) (select (@hour:=@hour+1) 'hour', (select count(*) 'smscount' from sms_bank where date between ? and ? and hour(date)=@hour) 'count' from sms where @hour<23);",[date_start, date_end], function(err, rows, fields){ | ||
843 | + if(!err){ | ||
844 | + connection.query("select * from sms_bank_hour order by hour;",function(err, rows, fields){ | ||
845 | + if(!err){ | ||
846 | + for(var i=0;i<rows.length;i++){ | ||
847 | + var hour=rows[i].hour; | ||
848 | + var count=rows[i].smscount; | ||
849 | + payment_6_list.push(hour); | ||
850 | + payment_6_count.push(count); | ||
851 | + } | ||
852 | + } | ||
853 | + else | ||
854 | + cc.innerHTML='Error-quert-#payment_5-1'; | ||
855 | + }); | ||
856 | + } | ||
857 | + else | ||
858 | + cc.innerHTML='Error-query-#payment_5'; | ||
859 | + }) | ||
860 | + | ||
861 | + menu_name.innerHTML="특정 기간의 결제 시간대"; | ||
862 | + options_chart_1.options.title.text="특정 기간의 결제 시간대"; | ||
863 | + options_chart_1.data.labels=payment_6_list; | ||
864 | + options_chart_1.data.datasets[0].label="결제 횟수"; | ||
865 | + options_chart_1.data.datasets[0].data=payment_6_count; | ||
866 | + window.myChart.destroy(); | ||
867 | +} | ||
868 | + | ||
869 | +function get_card_date_payment(){ | ||
870 | + chartspaceview(); | ||
871 | + type1.innerHTML="# 결제 횟수 기준"; | ||
872 | + type2.innerHTML="# 결제 금액 기준"; | ||
873 | + choicespace.style="display:inline"; | ||
874 | + box_name.innerHTML="# 결제 횟수 기준"; | ||
875 | + choosed_menu="payment7"; | ||
876 | + | ||
877 | + date_start=document.getElementById('between_card_date_start').value+' 00:00:00'; | ||
878 | + date_end=document.getElementById('between_card_date_end').value+' 23:59:59'; | ||
879 | + | ||
880 | + payment_9_list.length=0; | ||
881 | + payment_9_count.length=0; | ||
882 | + payment_10_list.length=0; | ||
883 | + payment_10_count.length=0; | ||
884 | + | ||
885 | + connection.query("select bname, count(*) 'count' from sms_bank where date between ? and ? group by bname order by count(*) desc;",[date_start, date_end], function(err, rows, fields){ | ||
886 | + if(!err){ | ||
887 | + for(var i=0;i<rows.length;i++){ | ||
888 | + var bname=rows[i].bname; | ||
889 | + var count=rows[i].count; | ||
890 | + payment_9_list.push(bname); | ||
891 | + payment_9_count.push(count); | ||
892 | + } | ||
893 | + } | ||
894 | + else | ||
895 | + cc.innerHTML='Error-query-#payment_7-1'; | ||
896 | + }) | ||
897 | + | ||
898 | + connection.query("select bname, sum(price) 'sum' from sms_bank where date between ? and ? group by bname order by sum(price) desc;",[date_start, date_end], function(err, rows, fields){ | ||
899 | + if(!err){ | ||
900 | + for(var i=0;i<rows.length;i++){ | ||
901 | + var bname=rows[i].bname; | ||
902 | + var sum=rows[i].sum; | ||
903 | + payment_10_list.push(bname); | ||
904 | + payment_10_count.push(sum); | ||
905 | + } | ||
906 | + } | ||
907 | + else | ||
908 | + cc.innerHTML='Error-query-#payment_7-2'; | ||
909 | + }) | ||
910 | + | ||
911 | + menu_name.innerHTML="특정 기간의 카드 이용 순위"; | ||
912 | + options_chart_1.options.title.text="특정 기간의 카드 이용 순위"; | ||
913 | + options_chart_1.data.labels=payment_9_list; | ||
914 | + options_chart_1.data.datasets[0].label="결제 횟수"; | ||
915 | + options_chart_1.data.datasets[0].data=payment_9_count; | ||
916 | + options_charts_2.title.text="특정 기간의 카드 이용 순위"; | ||
917 | + options_chart_2.data.labels=payment_10_list; | ||
918 | + options_chart_2.data.datasets[0].label="결제 금액"; | ||
919 | + options_chart_2.data.datasets[0].data=payment_10_count; | ||
920 | + window.myChart.destroy(); | ||
921 | +} | ||
922 | + | ||
923 | +function get_store_date_payment(){ | ||
924 | + chartspaceview(); | ||
925 | + type1.innerHTML="# 결제 횟수 기준"; | ||
926 | + type2.innerHTML="# 결제 금액 기준"; | ||
927 | + choicespace.style="display:inline"; | ||
928 | + box_name.innerHTML="# 결제 횟수 기준"; | ||
929 | + choosed_menu="payment9"; | ||
930 | + | ||
931 | + date_start=document.getElementById('between_store_date_start').value+' 00:00:00'; | ||
932 | + date_end=document.getElementById('between_store_date_end').value+' 23:59:59'; | ||
933 | + | ||
934 | + payment_13_list.length=0; | ||
935 | + payment_13_count.length=0; | ||
936 | + payment_14_list.length=0; | ||
937 | + payment_14_count.length=0; | ||
938 | + | ||
939 | + connection.query("select sname, count(*) 'count' from sms_bank where date between ? and ? group by sname order by count(*) desc;",[date_start, date_end], function(err, rows, fields){ | ||
940 | + if(!err){ | ||
941 | + for(var i=0;i<rows.length;i++){ | ||
942 | + var sname=rows[i].sname; | ||
943 | + var count=rows[i].count; | ||
944 | + payment_13_list.push(sname); | ||
945 | + payment_13_count.push(count); | ||
946 | + } | ||
947 | + } | ||
948 | + else | ||
949 | + cc.innerHTML='Error-query-#payment_9-1'; | ||
950 | + }) | ||
951 | + | ||
952 | + connection.query("select sname, sum(price) 'sum' from sms_bank where date between ? and ? group by sname order by sum(price) desc;",[date_start, date_end], function(err, rows, fields){ | ||
953 | + if(!err){ | ||
954 | + for(var i=0;i<rows.length;i++){ | ||
955 | + var sname=rows[i].sname; | ||
956 | + var sum=rows[i].sum; | ||
957 | + payment_14_list.push(sname); | ||
958 | + payment_14_count.push(sum); | ||
959 | + } | ||
960 | + } | ||
961 | + else | ||
962 | + cc.innerHTML='Error-query-#payment_9-2'; | ||
963 | + }) | ||
964 | + | ||
965 | + menu_name.innerHTML="특정 기간의 사용처 순위"; | ||
966 | + options_chart_1.options.title.text="특정 기간의 사용처 순위"; | ||
967 | + options_chart_1.data.labels=payment_13_list; | ||
968 | + options_chart_1.data.datasets[0].label="결제 횟수"; | ||
969 | + options_chart_1.data.datasets[0].data=payment_13_count; | ||
970 | + options_charts_2.title.text="특정 기간의 사용처 순위"; | ||
971 | + options_chart_2.data.labels=payment_14_list; | ||
972 | + options_chart_2.data.datasets[0].label="결제 금액"; | ||
973 | + options_chart_2.data.datasets[0].data=payment_14_count; | ||
974 | + window.myChart.destroy(); | ||
975 | +} | ||
976 | + | ||
977 | +/* | ||
978 | +connection.query('', function(err, rows, fields){ | ||
979 | + if(!err){ | ||
980 | + for(var i=0;i<rows.length;i++){ | ||
981 | + var date=rows[i].date.toISOString().slice(0,7); | ||
982 | + var sum=rows[i].sum; | ||
983 | + payment_2_list.push(date) | ||
984 | + payment_2_count.push(sum) | ||
985 | + } | ||
986 | + } | ||
987 | + else | ||
988 | + cc.innerHTML='Error-query-#payment_1'; | ||
989 | +}); | ||
990 | +*/ | ||
991 | + | ||
992 | +canvas.onclick=function(event){ | ||
993 | + var activePoints = myChart.getElementsAtEvent(event); | ||
994 | + var chartData = activePoints[0]['_chart'].config.data; | ||
995 | + var idx=activePoints[0]['_index']; | ||
996 | + var label=chartData.labels[idx]; | ||
997 | + var value=chartData.datasets[0].data[idx]; | ||
998 | + console.log(chartData); | ||
999 | + if(choosed_menu=="keyword1"){ | ||
1000 | + chartspace.style="display:none"; | ||
1001 | + keyword1space.style="display:inline"; | ||
1002 | + keyword2space.style="display:none"; | ||
1003 | + myList1.clear(); | ||
1004 | + values_list_1.length=0; | ||
1005 | + | ||
1006 | + for(var i=0;i<values_list.length;i++){ | ||
1007 | + var keyword_str=values_list[i].keyword; | ||
1008 | + if(!keyword_str) | ||
1009 | + continue; | ||
1010 | + else{ | ||
1011 | + if(keyword_str.includes(label)){ | ||
1012 | + var data_temp=[]; | ||
1013 | + data_temp.push(values_list[i].type_cs); | ||
1014 | + data_temp.push(values_list[i].number); | ||
1015 | + data_temp.push(values_list[i].date); | ||
1016 | + data_temp.push(values_list[i].body); | ||
1017 | + data_temp.push(values_list[i].keyword); | ||
1018 | + values_list_1.push({type_cs:data_temp[0], number:data_temp[1], date:data_temp[2], body:data_temp[3], keyword:data_temp[4]}); | ||
1019 | + } | ||
1020 | + } | ||
1021 | + } | ||
1022 | + menu_name.innerHTML="최근 1개월 키워드 순위 / "+label; | ||
1023 | + myList1 = new List("keyword1space", options_list, values_list_1); | ||
1024 | + } | ||
1025 | + else if(choosed_menu=="keyword2"){ | ||
1026 | + chartspace.style="display:none"; | ||
1027 | + keyword1space.style="display:none"; | ||
1028 | + keyword2space.style="display:inline"; | ||
1029 | + myList2.clear(); | ||
1030 | + values_list_all.length=0; | ||
1031 | + | ||
1032 | + for(var i=0;i<values_list.length;i++){ | ||
1033 | + var keyword_str=values_list[i].keyword; | ||
1034 | + if(!keyword_str) | ||
1035 | + continue; | ||
1036 | + else{ | ||
1037 | + if(keyword_str.includes(label)){ | ||
1038 | + var data_temp=[]; | ||
1039 | + data_temp.push(values_list[i].type_cs); | ||
1040 | + data_temp.push(values_list[i].number); | ||
1041 | + data_temp.push(values_list[i].date); | ||
1042 | + data_temp.push(values_list[i].body); | ||
1043 | + data_temp.push(values_list[i].keyword); | ||
1044 | + values_list_all.push({type_cs:data_temp[0], number:data_temp[1], date:data_temp[2], body:data_temp[3], keyword:data_temp[4]}); | ||
1045 | + } | ||
1046 | + } | ||
1047 | + } | ||
1048 | + menu_name.innerHTML="전체 기간의 키워드 순위 / "+label; | ||
1049 | + myList2 = new List("keyword2space", options_list, values_list_all); | ||
1050 | + } | ||
1051 | + else if(choosed_menu=="keyword3"){ | ||
1052 | + chartspace.style="display:none"; | ||
1053 | + keyword1space.style="display:none"; | ||
1054 | + keyword2space.style="display:none"; | ||
1055 | + keyword3space.style="display:inline"; | ||
1056 | + keyword4space.style="display:none"; | ||
1057 | + | ||
1058 | + myList3.clear(); | ||
1059 | + values_list_between.length=0; | ||
1060 | + | ||
1061 | + for(var i=0;i<values_list.length;i++){ | ||
1062 | + var keyword_str=values_list[i].keyword; | ||
1063 | + if(!keyword_str||values_list[i].date>date_end||values_list[i].date<date_start) | ||
1064 | + continue; | ||
1065 | + else{ | ||
1066 | + if(keyword_str.includes(label)){ | ||
1067 | + var data_temp=[]; | ||
1068 | + data_temp.push(values_list[i].type_cs); | ||
1069 | + data_temp.push(values_list[i].number); | ||
1070 | + data_temp.push(values_list[i].date); | ||
1071 | + data_temp.push(values_list[i].body); | ||
1072 | + data_temp.push(values_list[i].keyword); | ||
1073 | + values_list_between.push({type_cs:data_temp[0], number:data_temp[1], date:data_temp[2], body:data_temp[3], keyword:data_temp[4]}); | ||
1074 | + } | ||
1075 | + } | ||
1076 | + } | ||
1077 | + menu_name.innerHTML="특정 기간의 키워드 순위 / "+label; | ||
1078 | + myList3 = new List("keyword3space", options_list, values_list_between); | ||
1079 | + } | ||
1080 | + else if(choosed_menu=="keyword4"){ | ||
1081 | + chartspace.style="display:none"; | ||
1082 | + keyword1space.style="display:none"; | ||
1083 | + keyword2space.style="display:none"; | ||
1084 | + keyword3space.style="display:none"; | ||
1085 | + keyword4space.style="display:inline"; | ||
1086 | + | ||
1087 | + myList4.clear(); | ||
1088 | + values_list_with.length=0; | ||
1089 | + | ||
1090 | + for(var i=0;i<values_list.length;i++){ | ||
1091 | + var keyword_str=values_list[i].keyword; | ||
1092 | + if(!values_list[i].number) | ||
1093 | + continue; | ||
1094 | + if(!keyword_str||!number.includes(values_list[i].number.split(" ")[0])) | ||
1095 | + continue; | ||
1096 | + else{ | ||
1097 | + if(keyword_str.includes(label)){ | ||
1098 | + var data_temp=[]; | ||
1099 | + data_temp.push(values_list[i].type_cs); | ||
1100 | + data_temp.push(values_list[i].number); | ||
1101 | + data_temp.push(values_list[i].date); | ||
1102 | + data_temp.push(values_list[i].body); | ||
1103 | + data_temp.push(values_list[i].keyword); | ||
1104 | + values_list_with.push({type_cs:data_temp[0], number:data_temp[1], date:data_temp[2], body:data_temp[3], keyword:data_temp[4]}); | ||
1105 | + } | ||
1106 | + } | ||
1107 | + } | ||
1108 | + menu_name.innerHTML="특정 연락처와의 키워드 순위 / "+label; | ||
1109 | + myList4 = new List("keyword4space", options_list, values_list_with); | ||
1110 | + } | ||
1111 | +}; | ||
1112 | + | ||
1113 | +var filter0List=[]; | ||
1114 | +var filter1List=[]; | ||
1115 | +var filter2List=[]; | ||
1116 | +var filter3List=[]; | ||
1117 | +var filter4List=[]; | ||
1118 | +var filter5List=[]; | ||
1119 | +var filter0_element=document.getElementsByClassName("filter0"); | ||
1120 | +var filter1_element=document.getElementsByClassName("filter1"); | ||
1121 | +var filter2_element=document.getElementsByClassName("filter2"); | ||
1122 | +var filter3_element=document.getElementsByClassName("filter3"); | ||
1123 | +var filter4_element=document.getElementsByClassName("filter4"); | ||
1124 | +var filter5_element=document.getElementsByClassName("filter5"); | ||
1125 | + | ||
1126 | +function filter_listener(event){ | ||
1127 | + var data_value_temp=event.target.getAttribute('data_value'); | ||
1128 | + var data_filter_temp="type_cs"; | ||
1129 | + var checked_temp=event.target.checked; | ||
1130 | + | ||
1131 | + switch(event.target.id){ | ||
1132 | + case "filter0": | ||
1133 | + filter_action(filter0List, checked_temp, data_filter_temp, data_value_temp, myList); | ||
1134 | + break; | ||
1135 | + case "filter1": | ||
1136 | + filter_action(filter1List, checked_temp, data_filter_temp, data_value_temp, myList1); | ||
1137 | + break; | ||
1138 | + case "filter2": | ||
1139 | + filter_action(filter2List, checked_temp, data_filter_temp, data_value_temp, myList2); | ||
1140 | + break; | ||
1141 | + case "filter3": | ||
1142 | + filter_action(filter3List, checked_temp, data_filter_temp, data_value_temp, myList3); | ||
1143 | + break; | ||
1144 | + case "filter4": | ||
1145 | + filter_action(filter4List, checked_temp, data_filter_temp, data_value_temp, myList4); | ||
1146 | + break; | ||
1147 | + case "filter5": | ||
1148 | + data_filter_temp=event.target.getAttribute('data_filter'); | ||
1149 | + filter_action(filter5List, checked_temp, data_filter_temp, data_value_temp, myList5); | ||
1150 | + break; | ||
1151 | + } | ||
1152 | +} | ||
1153 | +function filter_action(paramlist, checked_temp, filter_temp, value_temp, myList_temp){ | ||
1154 | + var _filter_temp=filter_temp; | ||
1155 | + if (checked_temp){ | ||
1156 | + paramlist.push(value_temp); | ||
1157 | + | ||
1158 | + myList_temp.filter(function (item) { | ||
1159 | + var check_all=true; | ||
1160 | + for(var i=0;i<paramlist.length;i++){ | ||
1161 | + if(item.values()[_filter_temp] !== paramlist[i]) | ||
1162 | + check_all=false; | ||
1163 | + } | ||
1164 | + if(check_all) | ||
1165 | + return true; | ||
1166 | + else | ||
1167 | + return false; | ||
1168 | + }); | ||
1169 | + } | ||
1170 | + else{ | ||
1171 | + paramlist.splice(paramlist.indexOf(value_temp),1); | ||
1172 | + | ||
1173 | + myList_temp.filter(function (item) { | ||
1174 | + var check_all=true; | ||
1175 | + for(var i=0;i<paramlist.length;i++){ | ||
1176 | + if(item.values()[_filter_temp] !== paramlist[i]) | ||
1177 | + check_all=false; | ||
1178 | + } | ||
1179 | + if(check_all) | ||
1180 | + return true; | ||
1181 | + else | ||
1182 | + return false; | ||
1183 | + }); | ||
1184 | + } | ||
1185 | +}; | ||
1186 | + | ||
1187 | +for (var i = 0; i < filter0_element.length; i++) { | ||
1188 | + filter0_element[i].addEventListener('click', filter_listener, false); | ||
1189 | +} | ||
1190 | +for (var i = 0; i < filter1_element.length; i++) { | ||
1191 | + filter1_element[i].addEventListener('click', filter_listener, false); | ||
1192 | +} | ||
1193 | +for (var i = 0; i < filter2_element.length; i++) { | ||
1194 | + filter2_element[i].addEventListener('click', filter_listener, false); | ||
1195 | +} | ||
1196 | +for (var i = 0; i < filter3_element.length; i++) { | ||
1197 | + filter3_element[i].addEventListener('click', filter_listener, false); | ||
1198 | +} | ||
1199 | +for (var i = 0; i < filter4_element.length; i++) { | ||
1200 | + filter4_element[i].addEventListener('click', filter_listener, false); | ||
1201 | +} | ||
1202 | +for (var i = 0; i < filter5_element.length; i++) { | ||
1203 | + filter5_element[i].addEventListener('click', filter_listener, false); | ||
1204 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
-
Please register or login to post a comment