김예미

add calllog & sms analysis menu

1 +ul{
2 + list-style: none;
3 +}
4 +.title{
5 + font-family:"Born Ready Slanted";
6 +}
7 +#grid{
8 + display:grid;
9 + grid-template-columns: 175px 900px;
10 +}
11 +#content{
12 + padding-left:40px;
13 + padding-right:40px;
14 + padding-top:20px;
15 +}
16 +#choiceul{
17 + padding-right:200px;
18 + padding-left:200px;
19 + padding-bottom:10px;
20 + display:grid;
21 + grid-template-columns: repeat(4, 1fr);
22 +}
23 +#menu_bar{
24 + padding-top:15px;
25 + padding-right:10px;
26 +}
27 +#menu{
28 + padding-left:25px;
29 +}
30 +.menu1{
31 + margin-top:14px;
32 + font:15px, bold;
33 +}
34 +.menu2{
35 + margin-top:7px;
36 + margin-left:6px;
37 + font-size:12px;
38 +}
39 +.cr{
40 + font-size:12px;
41 +}
42 +#dateForm{
43 + display:grid;
44 + grid-template-columns: 130px 23px;
45 + margin-left:6px;
46 +}
47 +#between_date_start, #between_date_end,#between_list_date_start, #between_list_date_end, #between_rank_date_start, #between_rank_date_end, #between_timeline_date_start, #between_timeline_date_end{
48 + font-size:10px;
49 + margin-top:2px;
50 + margin-right:3px;
51 +}
52 +#between_date_submit, #between_date_submit, #between_rank_submit, #between_timeline_submit{
53 + font-size:8px;
54 +}
55 +
56 +#numberForm{
57 + display:grid;
58 + grid-template-columns: 100px 1fr 1fr 1fr;
59 + margin-left:6px;
60 +}
61 +#number, #list_number, #timeline_number, #restime_number{
62 + font-size:10px;
63 + margin-top:2px;
64 + margin-right:3px;
65 +}
66 +#number_push, #number_pop, #number_submit{
67 + font-size:8px;
68 +}
69 +#analysis4_list, #list6_list, #more5_list, #more7_list{
70 + font-size:10px;
71 +}
72 +.sort, .filterlabel{
73 + font-size:12px;
74 + list-style: none;
75 +}
76 +#myList{
77 + padding-right:160px;
78 + padding-left:160px;
79 + padding-bottom:10px;
80 + display:grid;
81 + grid-template-columns: 1fr;
82 +}
83 +#myList_in{
84 + display:grid;
85 + grid-template-columns: repeat(5,1fr);
86 +}
87 +.search{
88 + margin-right:20px;
89 + margin-bottom:10px;
90 +}
91 +#m2{
92 + display:grid;
93 + grid-template-columns: 1fr 1fr;
94 +}
95 +#m3{
96 + display:grid;
97 + grid-template-columns: 3fr 1fr;
98 +}
99 +ol li{
100 + list-style: none;
101 + list-style-position:inside;
102 + border-top:1px solid gray;
103 + padding:10px;
104 + margin:5px;
105 +}
106 +#listrow_type, #listrow_number, #listrow_date, #listrow_body,#listrow_get_body, #listrow_get_date, #listrow_send_body, #listrow_send_date, #listrow_timediff{
107 + margin:5px;
108 + font-size:14px;
109 +}
...\ No newline at end of file ...\ No newline at end of file
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
17 "jquery": "^3.5.0", 17 "jquery": "^3.5.0",
18 "mysql": "^2.18.1", 18 "mysql": "^2.18.1",
19 "node-adb": "^0.1.6", 19 "node-adb": "^0.1.6",
20 + "python-shell": "^2.0.0",
20 "socket.io": "^2.3.0" 21 "socket.io": "^2.3.0"
21 } 22 }
22 } 23 }
......
...@@ -3,9 +3,219 @@ ...@@ -3,9 +3,219 @@
3 <head> 3 <head>
4 <meta charset="UTF-8"> 4 <meta charset="UTF-8">
5 <meta name="viewport" content="width=<sc>, initial-scale=1.0"> 5 <meta name="viewport" content="width=<sc>, initial-scale=1.0">
6 + <link rel="stylesheet" href="../assets/css/menu1.css">
7 + <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.4.0/Chart.min.js"></script>
8 + <script src="https://cdnjs.cloudflare.com/ajax/libs/list.js/1.5.0/list.min.js"></script>
6 <title>Document</title> 9 <title>Document</title>
7 </head> 10 </head>
8 <body> 11 <body>
12 + <div class="title">
13 + <h1 id="cc" onclick="location.href='menu.html'">CallLog Analysis</h1>
14 + </div>
15 + <div id="grid">
16 + <div id="menu_bar">
17 + <ul id="menu">
18 + <li class="menu1">통계 분석</li>
19 + <li class="menu2" id="analysis1">최근 통계</li>
20 + <li class="menu2" id="analysis2">전체 통계</li>
21 + <li class="menu2" id="analysis3">특정 기간 통계</li>
22 + <form name="dateForm" method="post" id="dateForm">
23 + <input type="date" id="between_date_start" />
24 + ~
25 + <input type="date" id="between_date_end" />
26 + <input type="button" id="between_date_submit" value="》" onclick="get_date_analysis();" />
27 + </form>
28 + <li class="menu2" id="analysis4">특정 연락처 통계</li>
29 + <form name="numberForm" method="post" id="numberForm">
30 + <input type="text" id="number" />
31 + <input type="button" id="number_push" value="+" onclick="get_number_push();" />
32 + <input type="button" id="number_pop" value="-" onclick="get_number_pop();" />
33 + <input type="button" id="number_submit" value="》" onclick="get_number_analysis();" />
34 + </form>
35 + <li class="menu2" id="analysis4_list"></li>
36 + <li class="menu1">목록 분석</li>
37 + <li class="menu2" id="list1">최근 목록</li>
38 + <li class="menu2" id="list2">전체 목록</li>
39 + <li class="menu2" id="list4">특정 기간 목록</li>
40 + <form name="dateForm" method="post" id="dateForm">
41 + <input type="date" id="between_list_date_start" />
42 + ~
43 + <input type="date" id="between_list_date_end" />
44 + <input type="button" id="between_date_submit" value="》" onclick="get_date_list();" />
45 + </form>
46 + <li class="menu1">상세 분석</li>
47 + <li class="menu2" id="more1">전체 연락 순위</li>
48 + <li class="menu2" id="more2">특정 기간 연락 순위</li>
49 + <form name="dateForm" method="post" id="dateForm">
50 + <input type="date" id="between_rank_date_start" />
51 + ~
52 + <input type="date" id="between_rank_date_end" />
53 + <input type="button" id="between_rank_submit" value="》" onclick="get_date_rank();" />
54 + </form>
55 + <li class="menu2" id="more3">전체 연락 시간대</li>
56 + <li class="menu2" id="more4">특정 기간 연락 시간대</li>
57 + <form name="dateForm" method="post" id="dateForm">
58 + <input type="date" id="between_timeline_date_start" />
59 + ~
60 + <input type="date" id="between_timeline_date_end" />
61 + <input type="button" id="between_timeline_submit" value="》" onclick="get_date_timeline();" />
62 + </form>
63 + <li class="menu2" id="more5">특정 연락처 연락 시간대</li>
64 + <form name="numberForm" method="post" id="numberForm">
65 + <input type="text" id="timeline_number" />
66 + <input type="button" id="number_push" value="+" onclick="get_number_timeline_push();" />
67 + <input type="button" id="number_pop" value="-" onclick="get_number_timeline_pop();" />
68 + <input type="button" id="number_submit" value="》" onclick="get_number_timeline();" />
69 + </form>
70 + <li class="menu2" id="more5_list"></li>
71 + <li class="menu2" id="more6">전체 답장 시간</li>
72 + <li class="menu2" id="more7">특정 연락처 답장 시간</li>
73 + <form name="numberForm" method="post" id="numberForm">
74 + <input type="text" id="restime_number" />
75 + <input type="button" id="number_push" value="+" onclick="get_number_restime_push();" />
76 + <input type="button" id="number_pop" value="-" onclick="get_number_restime_pop();" />
77 + <input type="button" id="number_submit" value="》" onclick="get_number_restime();" />
78 + <li class="menu2" id="more7_list"></li>
79 + </form>
80 + </ul>
81 + </div>
82 + <div id="content">
83 + <div id="choice">
84 + <ul id="choiceul">
85 + <li class="cr" id="type1"></li>
86 + <li class="cr" id="type2"></li>
87 + <li class="cr" id="type3"></li>
88 + <li class="cr" id="type4"></li>
89 + <li class="cr" id="type5"></li>
90 + <li class="cr" id="type6"></li>
91 + <li class="cr" id="type7"></li>
92 + <li class="cr" id="type8"></li>
93 + </ul>
94 + </div>
95 + <div id="chart" style="display:none">
96 + <div>
97 + <canvas id="myChart"></canvas>
98 + </div>
99 + </div>
100 + <div id="listspace" style="display:none">
101 + <div id="myList">
102 + <input class="search" placeholder="Search" />
103 + <div id="myList_in">
104 + <li class="sort" data-sort="date"># 시간순</li>
105 + <li class="filterlabel"># 통화
106 + <input type="checkbox" class="filter1" id="filter1" data_filter="type_cs" data_value="call" />
107 + </li>
108 + <li class="filterlabel"># 문자
109 + <input type="checkbox" class="filter1" id="filter1" data_filter="type_cs" data_value="sms" />
110 + </li>
111 + <li class="filterlabel"># 수신
112 + <input type="checkbox" class="filter1" id="filter1" data_filter="type_gs" data_value="get" />
113 + </li>
114 + <li class="filterlabel"># 발신
115 + <input type="checkbox" class="filter1" id="filter1" data_filter="type_gs" data_value="send" />
116 + </li>
117 + <li class="filterlabel"># 부재중
118 + <input type="checkbox" class="filter1" id="filter1" data_filter="type_gs" data_value="missed" />
119 + </li>
120 + <li class="filterlabel"># 10분 이하
121 + <input type="checkbox" class="filter1" id="filter1" data_filter="duration" data_value="less10" />
122 + </li>
123 + <li class="filterlabel"># 1시간 이상
124 + <input type="checkbox" class="filter1" id="filter1" data_filter="duration" data_value="more60" />
125 + </li>
126 + <li class="filterlabel"># 삭제된 문자
127 + <input type="checkbox" class="filter1" id="filter1" data_filter="delete" data_value="true" />
128 + </li>
129 + </div>
130 + </div>
131 + <ol class="list"></ol>
132 + </div>
133 + <div id="listspace2" style="display:none">
134 + <div id="myList">
135 + <input class="search" placeholder="Search" />
136 + <div id="myList_in">
137 + <li class="sort" data-sort="date"># 시간순</li>
138 + <li class="filterlabel"># 통화
139 + <input type="checkbox" class="filter2" id="filter2" data_filter="type_cs" data_value="call"/>
140 + </li>
141 + <li class="filterlabel"># 문자
142 + <input type="checkbox" class="filter2" id="filter2" data_filter="type_cs" data_value="sms"/>
143 + </li>
144 + <li class="filterlabel"># 수신
145 + <input type="checkbox" class="filter2" id="filter2" data_filter="type_gs" data_value="get"/>
146 + </li>
147 + <li class="filterlabel"># 발신
148 + <input type="checkbox" class="filter2" id="filter2" data_filter="type_gs" data_value="send"/>
149 + </li>
150 + <li class="filterlabel"># 부재중
151 + <input type="checkbox" class="filter2" id="filter2" data_filter="type_gs" data_value="missed"/>
152 + </li>
153 + <li class="filterlabel"># 10분 이하
154 + <input type="checkbox" class="filter2" id="filter2" data_filter="duration" data_value="less10"/>
155 + </li>
156 + <li class="filterlabel"># 1시간 이상
157 + <input type="checkbox" class="filter2" id="filter2" data_filter="duration" data_value="more60"/>
158 + </li>
159 + <li class="filterlabel"># 삭제된 문자
160 + <input type="checkbox" class="filter2" id="filter2" data_filter="delete" data_value="true"/>
161 + </li>
162 + </div>
163 + </div>
164 + <ol class="list"></ol>
165 + </div>
166 + <div id="listspace3" style="display:none">
167 + <div id="myList">
168 + <input class="search" placeholder="Search" />
169 + <div id="myList_in">
170 + <li class="sort" data-sort="date"># 시간순</li>
171 + <li class="filterlabel"># 통화
172 + <input type="checkbox" class="filter3" id="filter3" data_filter="type_cs" data_value="call"/>
173 + </li>
174 + <li class="filterlabel"># 문자
175 + <input type="checkbox" class="filter3" id="filter3" data_filter="type_cs" data_value="sms"/>
176 + </li>
177 + <li class="filterlabel"># 수신
178 + <input type="checkbox" class="filter3" id="filter3" data_filter="type_gs" data_value="get"/>
179 + </li>
180 + <li class="filterlabel"># 발신
181 + <input type="checkbox" class="filter3" id="filter3" data_filter="type_gs" data_value="send"/>
182 + </li>
183 + <li class="filterlabel"># 부재중
184 + <input type="checkbox" class="filter3" id="filter3" data_filter="type_gs" data_value="missed"/>
185 + </li>
186 + <li class="filterlabel"># 10분 이하
187 + <input type="checkbox" class="filter3" id="filter3" data_filter="duration" data_value="less10"/>
188 + </li>
189 + <li class="filterlabel"># 1시간 이상
190 + <input type="checkbox" class="filter3" id="filter3" data_filter="duration" data_value="more60"/>
191 + </li>
192 + <li class="filterlabel"># 삭제된 문자
193 + <input type="checkbox" class="filter3" id="filter3" data_filter="delete" data_value="true"/>
194 + </li>
195 + </div>
196 + </div>
197 + <ol class="list"></ol>
198 + </div>
199 + <div id="listspace4" style="display:none">
200 + <div id="myList">
201 + <input class="search" placeholder="Search" />
202 + <li class="sort" data-sort="get_date"># 시간순</li>
203 + </div>
204 + <ol class="list"></ol>
205 + </div>
206 + <div id="listspace5" style="display:none">
207 + <div id="myList">
208 + <input class="search" placeholder="Search" />
209 + <li class="sort" data-sort="get_date"># 시간순</li>
210 + </div>
211 + <ol class="list"></ol>
212 + </div>
213 + </div>
214 + </div>
9 <script src="menu1.js"></script> 215 <script src="menu1.js"></script>
216 + <script>
217 + var myChart = new Chart(ctx, options_main_stacked);
218 + window.myChart.destroy();
219 + </script>
10 </body> 220 </body>
11 </html> 221 </html>
...\ No newline at end of file ...\ No newline at end of file
......
1 +var choosed_menu="analysis1";
2 +
3 +var title_text="통계";
4 +var label_text=[];
5 +var label_data1_text="수";
6 +var label_data1=[];
7 +var label_data2_text="수";
8 +var label_data2=[];
9 +var label_data3_text="수";
10 +var label_data3=[];
11 +var label_data4_text="수";
12 +var label_data4=[];
13 +var label_text_nu=[];
14 +var label_data1_text_nu="수";
15 +var label_data1_nu=[];
16 +var label_data2_text_nu="수";
17 +var label_data2_nu=[];
18 +var label_data3_text_nu="수";
19 +var label_data3_nu=[];
20 +var label_data4_text_nu="수";
21 +var label_data4_nu=[];
22 +
23 +var date_start="";
24 +var date_end="";
25 +var number=[];
26 +var list_date_start="";
27 +var list_date_end="";
28 +var list_number=[];
29 +var rank_date_start="";
30 +var rank_date_end="";
31 +var timeline_date_start="";
32 +var timeline_date_end="";
33 +var timeline_number=[];
34 +var restime_number=[];
35 +
36 +var month_6=[];
37 +var logcount_6=[];
38 +var callcount_6=[];
39 +var smscount_6=[];
40 +var durationsum_6=[];
41 +var logcount_6nu=[];
42 +var callcount_6nu=[];
43 +var smscount_6nu=[];
44 +var durationsum_6nu=[];
45 +
46 +var month=[];
47 +var logcount=[];
48 +var callcount=[];
49 +var smscount=[];
50 +var durationsum=[];
51 +var logcount_nu=[];
52 +var callcount_nu=[];
53 +var smscount_nu=[];
54 +var durationsum_nu=[];
55 +
56 +var month_b=[];
57 +var logcount_b=[];
58 +var callcount_b=[];
59 +var smscount_b=[];
60 +var durationsum_b=[];
61 +var logcount_bnu=[];
62 +var callcount_bnu=[];
63 +var smscount_bnu=[];
64 +var durationsum_bnu=[];
65 +
66 +var month_w=[];
67 +var logcount_w=[];
68 +var callcount_w=[];
69 +var smscount_w=[];
70 +var durationsum_w=[];
71 +var logcount_wnu=[];
72 +var callcount_wnu=[];
73 +var smscount_wnu=[];
74 +var durationsum_wnu=[];
75 +
76 +var ranking_rnu=[];
77 +var logcount_rnu=[];
78 +var callcount_rnu=[];
79 +var smscount_rnu=[];
80 +var ranking_rnuc=[];
81 +var callcount_rnuc=[];
82 +var ranking_rnus=[];
83 +var smscount_rnus=[];
84 +var ranking_rnud=[];
85 +var durationsum_rnud=[];
86 +
87 +var ranking_brnu=[];
88 +var logcount_brnu=[];
89 +var callcount_brnu=[];
90 +var smscount_brnu=[];
91 +var ranking_brnuc=[];
92 +var callcount_brnuc=[];
93 +var ranking_brnus=[];
94 +var smscount_brnus=[];
95 +var ranking_brnud=[];
96 +var durationsum_brnud=[];
97 +
98 +var timeline=[];
99 +var logcount_t=[];
100 +var callcount_t=[];
101 +var smscount_t=[];
102 +var logcount_tb=[];
103 +var callcount_tb=[];
104 +var smscount_tb=[];
105 +var logcount_tw=[];
106 +var callcount_tw=[];
107 +var smscount_tw=[];
108 +
109 +var mysql = require('mysql');
110 +var connection = mysql.createConnection({
111 + host:'localhost',
112 + user:'root',
113 + password:'1234',
114 + database:'dataextraction',
115 + multipleStatements: true
116 +});
117 +
118 +connection.connect();
119 +
120 +connection.query('select MIN(date) "min", MAX(date) "max" from calllog;', function(err, rows,fields){
121 + if(!err){
122 + document.getElementById('between_date_start').min=(rows[0].min.toISOString().split("T")[0]);
123 + document.getElementById('between_date_start').max=(rows[0].max.toISOString().split("T")[0]);
124 + document.getElementById('between_date_end').min=(rows[0].min.toISOString().split("T")[0]);
125 + document.getElementById('between_date_end').max=(rows[0].max.toISOString().split("T")[0]);
126 + document.getElementById('between_list_date_start').min=(rows[0].min.toISOString().split("T")[0]);
127 + document.getElementById('between_list_date_start').max=(rows[0].max.toISOString().split("T")[0]);
128 + document.getElementById('between_list_date_end').min=(rows[0].min.toISOString().split("T")[0]);
129 + document.getElementById('between_list_date_end').max=(rows[0].max.toISOString().split("T")[0]);
130 + document.getElementById('between_rank_date_start').min=(rows[0].min.toISOString().split("T")[0]);
131 + document.getElementById('between_rank_date_start').max=(rows[0].max.toISOString().split("T")[0]);
132 + document.getElementById('between_rank_date_end').min=(rows[0].min.toISOString().split("T")[0]);
133 + document.getElementById('between_rank_date_end').max=(rows[0].max.toISOString().split("T")[0]);
134 + document.getElementById('between_timeline_date_start').min=(rows[0].min.toISOString().split("T")[0]);
135 + document.getElementById('between_timeline_date_start').max=(rows[0].max.toISOString().split("T")[0]);
136 + document.getElementById('between_timeline_date_end').min=(rows[0].min.toISOString().split("T")[0]);
137 + document.getElementById('between_timeline_date_end').max=(rows[0].max.toISOString().split("T")[0]);
138 +
139 + }
140 + else
141 + cc.innerHTML='Error-#0/minmax';
142 +})
143 +
144 +connection.query('drop table if exists calllog_month; create table calllog_month(date datetime not null, logcount int, callcount int, smscount int, durationsum int, primary key(date)); insert into calllog_month(date, callcount, durationsum) (select date_format(date, "%Y-%m-02 00:00:00"), count(*), sum(duration) from calllog where type in (1,2,3) group by date_format(date, "%Y-%m-02 00:00:00")); update calllog_month cm left join (select date_format(date, "%Y-%m-02 00:00:00") "date", count(*) "count" from calllog group by date_format(date, "%Y-%m-02 00:00:00")) temp on cm.date=temp.date set cm.logcount=temp.count, cm.smscount=cm.logcount-cm.callcount;', function(err, rows, fields){
145 + if(err)
146 + cc.innerHTML='Error-#1';
147 +});
148 +
149 +connection.query('select * from calllog_month order by date DESC limit 6;', function(err, rows, fields){
150 + if(!err){
151 + for(var i=0;i<rows.length;i++){
152 + month_6.unshift(rows[i].date.toISOString().slice(0,7));
153 + logcount_6.unshift(rows[i].logcount);
154 + callcount_6.unshift(rows[i].callcount);
155 + smscount_6.unshift(rows[i].smscount);
156 + durationsum_6.unshift(rows[i].durationsum);
157 + }
158 + }
159 + else
160 + cc.innerHTML='Error-#2';
161 +});
162 +
163 +connection.query('select a.date, sum(b.logcount) "logcount", sum(b.callcount) "callcount", sum(b.smscount) "smscount", sum(b.durationsum) "durationsum" from (select * from calllog_month order by date DESC limit 6) a, (select * from calllog_month order by date DESC limit 6) b where a.date>=b.date group by date order by a.date;', function(err, rows, fields){
164 + if(!err){
165 + for(var i=0;i<rows.length;i++){
166 + logcount_6nu.push(rows[i].logcount);
167 + callcount_6nu.push(rows[i].callcount);
168 + smscount_6nu.push(rows[i].smscount);
169 + durationsum_6nu.push(rows[i].durationsum);
170 + }
171 + }
172 + else
173 + cc.innerHTML='Error-#3';
174 +});
175 +
176 +connection.query('select * from calllog_month order by date;', function(err, rows, fields){
177 + if(!err){
178 + for(var i=0;i<rows.length;i++){
179 + month.push(rows[i].date.toISOString().slice(0,7));
180 + logcount.push(rows[i].logcount);
181 + callcount.push(rows[i].callcount);
182 + smscount.push(rows[i].smscount);
183 + durationsum.push(rows[i].durationsum);
184 + }
185 + }
186 + else
187 + cc.innerHTML='Error-#4';
188 +});
189 +
190 +connection.query('select a.date, sum(b.logcount) "logcount", sum(b.callcount) "callcount", sum(b.smscount) "smscount", sum(b.durationsum) "durationsum" from calllog_month a, calllog_month b where a.date>=b.date group by date order by a.date;', function(err, rows, fields){
191 + if(!err){
192 + for(var i=0;i<rows.length;i++){
193 + logcount_nu.push(rows[i].logcount);
194 + callcount_nu.push(rows[i].callcount);
195 + smscount_nu.push(rows[i].smscount);
196 + durationsum_nu.push(rows[i].durationsum);
197 + }
198 + }
199 + else
200 + cc.innerHTML='Error-#5';
201 +});
202 +
203 +connection.query('drop table calllog_user; create table calllog_user(name varchar(255), number varchar(20) not null, callcount int, smscount int, durationsum int, primary key(number)); insert into calllog_user(name, number, callcount, durationsum) (select name, number, count(*), sum(duration) from calllog where type in (1,2,3) group by number); update calllog_user cu left join (select number, count(*) "count" from calllog where type not in (1,2,3) group by number) calllog on cu.number=calllog.number set cu.smscount=ifnull(calllog.count,0);', function(err, rows, fields){
204 + if(err)
205 + cc.innerHTML='Error-#8';
206 +})
207 +
208 +connection.query('select name, number, callcount, smscount from calllog_user order by callcount+smscount desc', function(err, rows, fields){
209 + if(!err){
210 + for(var i=0;i<rows.length;i++){
211 + var name=rows[i].name;
212 + if(!name)
213 + ranking_rnu.push(rows[i].number+" ( - )");
214 + else
215 + ranking_rnu.push(rows[i].number+" ("+name+")");
216 + logcount_rnu.push(rows[i].callcount+rows[i].smscount);
217 + callcount_rnu.push(rows[i].callcount);
218 + smscount_rnu.push(rows[i].smscount);
219 + }
220 + }
221 + else
222 + cc.innerHTML='Error-#8-1';
223 +});
224 +
225 +connection.query('select name, number, callcount from calllog_user order by callcount desc', function(err, rows, fields){
226 + if(!err){
227 + for(var i=0;i<rows.length;i++){
228 + var name=rows[i].name;
229 + if(!name)
230 + ranking_rnuc.push(rows[i].number);
231 + else
232 + ranking_rnuc.push(rows[i].number+" ("+name+")");
233 + callcount_rnuc.push(rows[i].callcount);
234 + }
235 + }
236 + else
237 + cc.innerHTML='Error-#8-2';
238 +});
239 +
240 +connection.query('select name, number, smscount from calllog_user order by smscount desc', function(err, rows, fields){
241 + if(!err){
242 + for(var i=0;i<rows.length;i++){
243 + var name=rows[i].name;
244 + if(!name)
245 + ranking_rnus.push(rows[i].number);
246 + else
247 + ranking_rnus.push(rows[i].number+" ("+name+")");
248 + smscount_rnus.push(rows[i].smscount);
249 + }
250 + }
251 + else
252 + cc.innerHTML='Error-#8-3';
253 +});
254 +
255 +connection.query('select name, number, durationsum from calllog_user order by durationsum desc', function(err, rows, fields){
256 + if(!err){
257 + for(var i=0;i<rows.length;i++){
258 + var name=rows[i].name;
259 + if(!name)
260 + ranking_rnud.push(rows[i].number);
261 + else
262 + ranking_rnud.push(rows[i].number+" ("+name+")");
263 + durationsum_rnud.push(rows[i].durationsum);
264 + }
265 + }
266 + else
267 + cc.innerHTML='Error-#8-4';
268 +});
269 +
270 +connection.query('drop table calllog_hour; create table calllog_hour(hour int not null, callcount int, smscount int, primary key(hour)); set @hour:=-1; insert into calllog_hour(hour, callcount) (select (@hour:=@hour+1) "hour", (select count(*) from calllog where type in (1,2,3) and hour(date)=@hour) "count" from calllog where @hour<23); update calllog_hour ch left join (select hour(date) "hour", count(*) "count" from calllog where type not in (1,2,3) group by hour(date)) calllog on ch.hour=calllog.hour set ch.smscount=ifnull(calllog.count,0);', function(err, rows, fields){
271 + if(err)
272 + cc.innerHTML='Error-#8';
273 +})
274 +
275 +connection.query('select * from calllog_hour order by hour;', function(err, rows, fields){
276 + if(!err){
277 + for(var i=0;i<rows.length;i++){
278 + timeline.push(rows[i].hour);
279 + callcount_t.push(rows[i].callcount);
280 + smscount_t.push(rows[i].smscount);
281 + logcount_t.push(rows[i].callcount+rows[i].smscount);
282 + }
283 + }
284 + else
285 + cc.innerHTML='Error-#10'+err;
286 +});
287 +
288 +var options = {
289 + title:{
290 + display:true,
291 + text:title_text
292 + },
293 + maintainAspectRatio: true,
294 + scales: {
295 + yAxes: [{
296 + ticks: {
297 + beginAtZero:true
298 + }
299 + }]
300 + }
301 +};
302 +
303 +var options_stacked = {
304 + title:{
305 + display:true,
306 + text:title_text
307 + },
308 + Legend:{display:false},
309 + scales: {
310 + xAxes: [{
311 + stacked:true,
312 + ticks: {
313 + beginAtZero:true
314 + }
315 + }],
316 + yAxes: [{
317 + stacked:true,
318 + ticks: {
319 + beginAtZero:true
320 + }
321 + }]
322 + }
323 +};
324 +
325 +var options_main_2={
326 + type: 'bar',
327 + data: {
328 + labels: label_text,
329 + datasets:[{
330 + label:label_data2_text,
331 + data:label_data2,
332 + backgroundColor:'rgba(255, 206, 86, 0.2)',
333 + borderColor:'rgba(255, 206, 86, 1)',
334 + borderWidth: 1
335 + }]
336 + },
337 + options: options
338 +};
339 +
340 +var options_main_3={
341 + type: 'bar',
342 + data: {
343 + labels: label_text,
344 + datasets:[{
345 + label:label_data3_text,
346 + data:label_data3,
347 + backgroundColor:'rgba(75, 192, 192, 0.2)',
348 + borderColor:'rgba(75, 192, 192, 1)',
349 + borderWidth: 1
350 + }]
351 + },
352 + options: options
353 +};
354 +
355 +var options_main_4={
356 + type: 'bar',
357 + data: {
358 + labels: label_text,
359 + datasets:[{
360 + label:label_data4_text,
361 + data:label_data4,
362 + backgroundColor:'rgba(255, 206, 86, 0.2)',
363 + borderColor:'rgba(255, 206, 86, 1)',
364 + borderWidth: 1
365 + }]
366 + },
367 + options: options
368 +};
369 +
370 +var options_main_stacked={
371 + type: 'bar',
372 + data: {
373 + labels: label_text,
374 + datasets:[{
375 + label:label_data1_text,
376 + data:label_data1,
377 + backgroundColor:'rgba(255, 127, 80, 1)',
378 + borderColor:'rgba(255, 127, 80, 1)',
379 + type:"line",
380 + fill: false
381 + },
382 + {
383 + label:label_data2_text,
384 + data:label_data2,
385 + backgroundColor:'rgba(255, 206, 86, 0.2)'
386 + },
387 + {
388 + label:label_data3_text,
389 + data:label_data3,
390 + backgroundColor:'rgba(75, 192, 192, 0.2)'
391 + }]
392 + },
393 + options: options_stacked
394 +};
395 +
396 +
397 +var options_main_nu_2={
398 + type: 'bar',
399 + data: {
400 + labels: label_text_nu,
401 + datasets:[{
402 + label:label_data2_text_nu,
403 + data:label_data2_nu,
404 + backgroundColor:'rgba(255, 206, 86, 0.2)',
405 + borderColor:'rgba(255, 206, 86, 1)',
406 + borderWidth: 1
407 + }]
408 + },
409 + options: options
410 +};
411 +
412 +var options_main_nu_3={
413 + type: 'bar',
414 + data: {
415 + labels: label_text_nu,
416 + datasets:[{
417 + label:label_data3_text_nu,
418 + data:label_data3_nu,
419 + backgroundColor:'rgba(75, 192, 192, 0.2)',
420 + borderColor:'rgba(75, 192, 192, 1)',
421 + borderWidth: 1
422 + }]
423 + },
424 + options: options
425 +};
426 +
427 +var options_main_nu_4={
428 + type: 'bar',
429 + data: {
430 + labels: label_text_nu,
431 + datasets:[{
432 + label:label_data4_text_nu,
433 + data:label_data4_nu,
434 + backgroundColor:'rgba(255, 206, 86, 0.2)',
435 + borderColor:'rgba(255, 206, 86, 1)',
436 + borderWidth: 1
437 + }]
438 + },
439 + options: options
440 +};
441 +
442 +var options_main_nu_stacked={
443 + type: 'bar',
444 + data: {
445 + labels: label_text_nu,
446 + datasets:[{
447 + label:label_data1_text_nu,
448 + data:label_data1_nu,
449 + backgroundColor:'rgba(255, 127, 80, 1)',
450 + borderColor:'rgba(255, 127, 80, 1)',
451 + type:"line",
452 + fill: false
453 + },
454 + {
455 + label:label_data2_text_nu,
456 + data:label_data2_nu,
457 + backgroundColor:'rgba(255, 206, 86, 0.2)'
458 + },
459 + {
460 + label:label_data3_text_nu,
461 + data:label_data3_nu,
462 + backgroundColor:'rgba(75, 192, 192, 0.2)'
463 + }]
464 + },
465 + options: options_stacked
466 +};
467 +
468 +function change_type_title(type_number){
469 + switch(type_number){
470 + case 1:
471 + type1.innerHTML="# 연락 수";
472 + type2.innerHTML="# 통화 수";
473 + type3.innerHTML="# 문자 수";
474 + type4.innerHTML="# 통화 시간";
475 + type5.innerHTML="# 누적 연락 수";
476 + type6.innerHTML="# 누적 통화 수";
477 + type7.innerHTML="# 누적 문자 수";
478 + type8.innerHTML="# 누적 통화 시간";
479 + break;
480 + case 4:
481 + type1.innerHTML="# 연락 수";
482 + type2.innerHTML="# 통화 수";
483 + type3.innerHTML="# 문자 수";
484 + type4.innerHTML="# 통화 시간";
485 + type5.innerHTML="";
486 + type6.innerHTML="";
487 + type7.innerHTML="";
488 + type8.innerHTML="";
489 + break;
490 + case 5:
491 + type1.innerHTML="# 연락 수";
492 + type2.innerHTML="# 통화 수";
493 + type3.innerHTML="# 문자 수";
494 + type4.innerHTML="";
495 + type5.innerHTML="";
496 + type6.innerHTML="";
497 + type7.innerHTML="";
498 + type8.innerHTML="";
499 + break;
500 + }
501 +}
502 +
503 +function changeLabelText(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){
504 + options_main_stacked.data.labels=a;
505 + options_main_stacked.data.datasets[0].label=b;
506 + options_main_stacked.data.datasets[0].data=c;
507 + options_main_stacked.data.datasets[1].label=d;
508 + options_main_stacked.data.datasets[1].data=e;
509 + options_main_stacked.data.datasets[2].label=f;
510 + options_main_stacked.data.datasets[2].data=g;
511 +
512 + options_main_2.data.labels=a;
513 + options_main_2.data.datasets[0].label=d;
514 + options_main_2.data.datasets[0].data=e
515 + options_main_3.data.labels=a;
516 + options_main_3.data.datasets[0].label=f;
517 + options_main_3.data.datasets[0].data=g;
518 + options_main_4.data.labels=a;
519 + options_main_4.data.datasets[0].label=h;
520 + options_main_4.data.datasets[0].data=i;
521 +
522 + options_main_nu_stacked.data.labels=a;
523 + options_main_nu_stacked.data.datasets[0].label=j;
524 + options_main_nu_stacked.data.datasets[0].data=k;
525 + options_main_nu_stacked.data.datasets[1].label=l;
526 + options_main_nu_stacked.data.datasets[1].data=m;
527 + options_main_nu_stacked.data.datasets[2].label=n;
528 + options_main_nu_stacked.data.datasets[2].data=o;
529 +
530 + options_main_nu_2.data.labels=a;
531 + options_main_nu_2.data.datasets[0].label=l;
532 + options_main_nu_2.data.datasets[0].data=m;
533 + options_main_nu_3.data.labels=a;
534 + options_main_nu_3.data.datasets[0].label=n;
535 + options_main_nu_3.data.datasets[0].data=o;
536 + options_main_nu_4.data.labels=a;
537 + options_main_nu_4.data.datasets[0].label=p;
538 + options_main_nu_4.data.datasets[0].data=q;
539 +
540 + options.title.text=r;
541 + options_stacked.title.text=r;
542 + options_main_2.options=options;
543 + options_main_3.options=options;
544 + options_main_4.options=options;
545 + options_main_stacked.options=options_stacked;
546 + options_main_nu_2.options=options;
547 + options_main_nu_3.options=options;
548 + options_main_nu_4.options=options;
549 + options_main_nu_stacked.options=options_stacked;
550 +}
551 +
552 +function changeLabelText2(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){
553 + options_main_stacked.data.labels=a;
554 + options_main_stacked.data.datasets[0].label=b;
555 + options_main_stacked.data.datasets[0].data=c;
556 + options_main_stacked.data.datasets[1].label=d;
557 + options_main_stacked.data.datasets[1].data=e;
558 + options_main_stacked.data.datasets[2].label=f;
559 + options_main_stacked.data.datasets[2].data=g;
560 +
561 + options_main_2.data.labels=h;
562 + options_main_2.data.datasets[0].label=i;
563 + options_main_2.data.datasets[0].data=j;
564 + options_main_3.data.labels=k;
565 + options_main_3.data.datasets[0].label=l;
566 + options_main_3.data.datasets[0].data=m;
567 + options_main_4.data.labels=n;
568 + options_main_4.data.datasets[0].label=o;
569 + options_main_4.data.datasets[0].data=p;
570 +
571 + options.title.text=r;
572 + options_stacked.title.text=r;
573 + options_main_2.options=options;
574 + options_main_3.options=options;
575 + options_main_4.options=options;
576 + options_main_stacked.options=options_stacked;
577 +}
578 +
579 +const ctx = document.getElementById("myChart").getContext('2d');
580 +const listspace = document.getElementById("listspace");
581 +const listspace2 = document.getElementById("listspace2");
582 +const listspace3 = document.getElementById("listspace3");
583 +const listspace4 = document.getElementById("listspace4");
584 +const listspace5 = document.getElementById("listspace5");
585 +const chartspace = document.getElementById("chart");
586 +const choicespace = document.getElementById("choice");
587 +
588 +function chartView(){
589 + listspace.style="display:none";
590 + listspace2.style="display:none";
591 + listspace3.style="display:none";
592 + listspace4.style="display:none";
593 + listspace5.style="display:none";
594 + chartspace.style="display:inline";
595 + choicespace.style="display:inline";
596 +}
597 +var analysis1 = document.getElementById('analysis1');
598 +analysis1.addEventListener('click', function(){
599 + chartView();
600 + change_type_title(1);
601 + changeLabelText(month_6, "연락 수", logcount_6, "통화 수", callcount_6, "문자 수", smscount_6, "통화 시간", durationsum_6, "누적 연락 수", logcount_6nu, "누적 통화 수", callcount_6nu, "누적 문자 수",smscount_6nu, "누적 통화 시간", durationsum_6nu,"최근 6개월의 통계");
602 + choosed_menu="analysis1";
603 + window.myChart.destroy();
604 + window.myChart = new Chart(ctx, options_main_stacked);
605 +});
606 +
607 +var analysis2 = document.getElementById('analysis2');
608 +analysis2.addEventListener('click', function(){
609 + chartView();
610 + change_type_title(1);
611 + changeLabelText(month, "연락 수", logcount, "통화 수", callcount, "문자 수", smscount, "통화 시간", durationsum, "누적 연락 수", logcount_nu, "누적 통화 수", callcount_nu, "누적 문자 수",smscount_nu, "누적 통화 시간", durationsum_nu,"전체 기간의 통계");
612 + choosed_menu="analysis2";
613 + window.myChart.destroy();
614 + window.myChart = new Chart(ctx, options_main_stacked);
615 +});
616 +
617 +var analysis3 = document.getElementById('analysis3');
618 +analysis3.addEventListener('click', function(){
619 + chartView();
620 + change_type_title(1);
621 + changeLabelText(month_b, "연락 수", logcount_b, "통화 수", callcount_b, "문자 수", smscount_b, "통화 시간", durationsum_b, "누적 연락 수", logcount_bnu, "누적 통화 수", callcount_bnu, "누적 문자 수",smscount_bnu, "누적 통화 시간", durationsum_bnu,"특정 기간의 통계");
622 + choosed_menu="analysis3";
623 + window.myChart.destroy();
624 + window.myChart = new Chart(ctx, options_main_stacked);
625 +});
626 +
627 +var analysis4 = document.getElementById('analysis4');
628 +analysis4.addEventListener('click', function(){
629 + chartView();
630 + change_type_title(1);
631 + changeLabelText(month_w, "연락 수", logcount_w, "통화 수", callcount_w, "문자 수", smscount_w, "통화 시간", durationsum_w, "누적 연락 수", logcount_wnu, "누적 통화 수", callcount_wnu, "누적 문자 수",smscount_wnu, "누적 통화 시간", durationsum_wnu,"특정 연락처와의 통계");
632 + choosed_menu="analysis4";
633 + window.myChart.destroy();
634 + window.myChart = new Chart(ctx, options_main_stacked);
635 +});
636 +
637 +var list1 = document.getElementById('list1');
638 +list1.addEventListener('click', function(){
639 + listspace.style="display:inline";
640 + listspace2.style="display:none";
641 + listspace3.style="display:none";
642 + listspace4.style="display:none";
643 + listspace5.style="display:none";
644 + chartspace.style="display:none";
645 + choicespace.style="display:none";
646 + choosed_menu="list1";
647 + window.myChart.destroy();
648 +});
649 +
650 +var list2 = document.getElementById('list2');
651 +list2.addEventListener('click', function(){
652 + listspace.style="display:none";
653 + listspace2.style="display:inline";
654 + listspace3.style="display:none";
655 + listspace4.style="display:none";
656 + listspace5.style="display:none";
657 + chartspace.style="display:none";
658 + choicespace.style="display:none";
659 + choosed_menu="list2";
660 + window.myChart.destroy();
661 +});
662 +
663 +var list4 = document.getElementById('list4');
664 +list4.addEventListener('click', function(){
665 + listspace.style="display:none";
666 + listspace2.style="display:none";
667 + listspace3.style="display:inline";
668 + listspace4.style="display:none";
669 + listspace5.style="display:none";
670 + chartspace.style="display:none";
671 + choicespace.style="display:none";
672 + choosed_menu="list4";
673 + window.myChart.destroy();
674 +});
675 +
676 +var more1 = document.getElementById('more1');
677 +more1.addEventListener('click', function(){
678 + chartView();
679 + change_type_title(4);
680 + changeLabelText2(ranking_rnu, "누적 연락 수", logcount_rnu, "누적 통화 수", callcount_rnu, "누적 문자 수", smscount_rnu, ranking_rnuc, "누적 통화 수", callcount_rnuc, ranking_rnus, "누적 문자 수", smscount_rnus, ranking_rnud, "누적 통화 시간", durationsum_rnud, [],"전체 기간의 연락 순위");
681 + choosed_menu="more1";
682 + window.myChart.destroy();
683 + window.myChart = new Chart(ctx, options_main_stacked);
684 +});
685 +
686 +var more2 = document.getElementById('more2');
687 +more2.addEventListener('click', function(){
688 + chartView();
689 + change_type_title(4);
690 + changeLabelText2(ranking_brnu, "누적 연락 수", logcount_brnu, "누적 통화 수", callcount_brnu, "누적 문자 수", smscount_brnu, ranking_brnuc, "누적 통화 수", callcount_brnuc, ranking_brnus, "누적 문자 수", smscount_brnus, ranking_brnud, "누적 통화 시간", durationsum_brnud, [],"특정 기간의 연락 순위");
691 + choosed_menu="more2";
692 + window.myChart.destroy();
693 + window.myChart = new Chart(ctx, options_main_stacked);
694 +});
695 +
696 +var more3 = document.getElementById('more3');
697 +more3.addEventListener('click', function(){
698 + chartView();
699 + change_type_title(5);
700 + changeLabelText(timeline, "누적 연락 수", logcount_t, "누적 통화 수", callcount_t, "누적 문자 수", smscount_t, "수", [], "수", [], "수",[] , "수",[], "수", [],"전체 기간의 선호 연락 시간대");
701 + choosed_menu="more3";
702 + window.myChart.destroy();
703 + window.myChart = new Chart(ctx, options_main_stacked);
704 +});
705 +
706 +var more4 = document.getElementById('more4');
707 +more4.addEventListener('click', function(){
708 + chartView();
709 + change_type_title(5);
710 + changeLabelText(timeline, "누적 연락 수", logcount_tb, "누적 통화 수", callcount_tb, "누적 문자 수", smscount_tb, "수", [], "수", [], "수",[] , "수",[], "수", [],"특정 기간의 선호 연락 시간대");
711 + choosed_menu="more4";
712 + window.myChart.destroy();
713 + window.myChart = new Chart(ctx, options_main_stacked);
714 +});
715 +
716 +var more5 = document.getElementById('more5');
717 +more5.addEventListener('click', function(){
718 + chartView();
719 + change_type_title(5);
720 + changeLabelText(timeline, "누적 연락 수", logcount_tw, "누적 통화 수", callcount_tw, "누적 문자 수", smscount_tw, "수", [], "수", [], "수",[] , "수",[], "수", [],"특정 연락처와의 선호 연락 시간대");
721 + choosed_menu="more5";
722 + window.myChart.destroy();
723 + window.myChart = new Chart(ctx, options_main_stacked);
724 +});
725 +
726 +var type1 = document.getElementById('type1');
727 +type1.addEventListener('click', function(){
728 + switch(choosed_menu){
729 + case 'analysis1':
730 + case 'analysis2':
731 + case 'analysis3':
732 + case 'analysis4':
733 + case 'more1':
734 + case 'more2':
735 + case 'more3':
736 + case 'more4':
737 + case 'more5':
738 + window.myChart.destroy();
739 + window.myChart = new Chart(ctx, options_main_stacked);
740 + break;
741 + };
742 +});
743 +
744 +var type2 = document.getElementById('type2');
745 +type2.addEventListener('click', function(){
746 + switch(choosed_menu){
747 + case 'analysis1':
748 + case 'analysis2':
749 + case 'analysis3':
750 + case 'analysis4':
751 + case 'more1':
752 + case 'more2':
753 + case 'more3':
754 + case 'more4':
755 + case 'more5':
756 + window.myChart.destroy();
757 + window.myChart = new Chart(ctx, options_main_2);
758 + break;
759 + };
760 +});
761 +
762 +var type3 = document.getElementById('type3');
763 +type3.addEventListener('click', function(){
764 + switch(choosed_menu){
765 + case 'analysis1':
766 + case 'analysis2':
767 + case 'analysis3':
768 + case 'analysis4':
769 + case 'more1':
770 + case 'more2':
771 + case 'more3':
772 + case 'more4':
773 + case 'more5':
774 + window.myChart.destroy();
775 + window.myChart = new Chart(ctx, options_main_3);
776 + break;
777 + };
778 +});
779 +
780 +var type4 = document.getElementById('type4');
781 +type4.addEventListener('click', function(){
782 + switch(choosed_menu){
783 + case 'analysis1':
784 + case 'analysis2':
785 + case 'analysis3':
786 + case 'analysis4':
787 + case 'more1':
788 + case 'more2':
789 + window.myChart.destroy();
790 + window.myChart = new Chart(ctx, options_main_4);
791 + break;
792 + };
793 +});
794 +
795 +var type5 = document.getElementById('type5');
796 +type5.addEventListener('click', function(){
797 + switch(choosed_menu){
798 + case 'analysis1':
799 + case 'analysis2':
800 + case 'analysis3':
801 + case 'analysis4':
802 + window.myChart.destroy();
803 + window.myChart = new Chart(ctx, options_main_nu_stacked);
804 + break;
805 + };
806 +});
807 +
808 +var type6 = document.getElementById('type6');
809 +type6.addEventListener('click', function(){
810 + switch(choosed_menu){
811 + case 'analysis1':
812 + case 'analysis2':
813 + case 'analysis3':
814 + case 'analysis4':
815 + window.myChart.destroy();
816 + window.myChart = new Chart(ctx, options_main_nu_2);
817 + break;
818 + };
819 +});
820 +
821 +var type7 = document.getElementById('type7');
822 +type7.addEventListener('click', function(){
823 + switch(choosed_menu){
824 + case 'analysis1':
825 + case 'analysis2':
826 + case 'analysis3':
827 + case 'analysis4':
828 + window.myChart.destroy();
829 + window.myChart = new Chart(ctx, options_main_nu_3);
830 + break;
831 + };
832 +});
833 +
834 +var type8 = document.getElementById('type8');
835 +type8.addEventListener('click', function(){
836 + switch(choosed_menu){
837 + case 'analysis1':
838 + case 'analysis2':
839 + case 'analysis3':
840 + case 'analysis4':
841 + window.myChart.destroy();
842 + window.myChart = new Chart(ctx, options_main_nu_4);
843 + break;
844 + };
845 +});
846 +
847 +
848 +function get_date_analysis(){
849 + chartView();
850 + change_type_title(1);
851 + choosed_menu="analysis3";
852 +
853 + date_start=document.getElementById('between_date_start').value+' 00:00:00';
854 + date_end=document.getElementById('between_date_end').value+' 23:59:59';
855 +
856 + connection.query('drop table IF EXISTS calllog_between; create table calllog_between(date datetime not null, logcount int, callcount int, smscount int, durationsum int, primary key(date)); insert into calllog_between(date, callcount, durationsum) (select date_format(date, "%Y-%m-02 00:00:00"), count(*), sum(duration) from calllog where type in (1,2,3) and date between ? and ? group by date_format(date, "%Y-%m-02 00:00:00")); update calllog_between cb left join (select date_format(date, "%Y-%m-02 00:00:00") "date", count(*) "count" from calllog where date between ? and ? group by date_format(date, "%Y-%m-02 00:00:00")) temp on cb.date=temp.date set cb.logcount=temp.count, cb.smscount=cb.logcount-cb.callcount;',[date_start, date_end,date_start, date_end], function(err, rows){
857 + if(!err){
858 + connection.query('select * from calllog_between order by date;', function(err, rows, fields){
859 + if(!err){
860 + month_b.length = 0;
861 + logcount_b.length = 0;
862 + callcount_b.length = 0;
863 + smscount_b.length = 0;
864 + durationsum_b.length = 0;
865 +
866 + for(var i=0;i<rows.length;i++){
867 + month_b.push(rows[i].date.toISOString().slice(0,7));
868 + logcount_b.push(rows[i].logcount);
869 + callcount_b.push(rows[i].callcount);
870 + smscount_b.push(rows[i].smscount);
871 + durationsum_b.push(rows[i].durationsum);
872 + }
873 + }
874 + else
875 + cc.innerHTML='Error-#6-1'+err;
876 + });
877 + connection.query('select a.date, sum(b.logcount) "logcount", sum(b.callcount) "callcount", sum(b.smscount) "smscount", sum(b.durationsum) "durationsum" from calllog_between a, calllog_between b where a.date>=b.date group by date order by a.date;', function(err, rows, fields){
878 + if(!err){
879 + logcount_bnu.length = 0;
880 + callcount_bnu.length = 0;
881 + smscount_bnu.length = 0;
882 + durationsum_bnu.length = 0;
883 +
884 + for(var i=0;i<rows.length;i++){
885 + logcount_bnu.push(rows[i].logcount);
886 + callcount_bnu.push(rows[i].callcount);
887 + smscount_bnu.push(rows[i].smscount);
888 + durationsum_bnu.push(rows[i].durationsum);
889 + }
890 + }
891 + else
892 + cc.innerHTML='Error-#6-2';
893 + });
894 + }
895 + else
896 + cc.innerHTML='Error-#6'+err;
897 + });
898 +
899 + changeLabelText(month_b, "연락 수", logcount_b, "통화 수", callcount_b, "문자 수", smscount_b, "통화 시간", durationsum_b, "누적 연락 수", logcount_bnu, "누적 통화 수", callcount_bnu, "누적 문자 수",smscount_bnu, "누적 통화 시간", durationsum_bnu,"특정 기간의 통계");
900 + window.myChart.destroy();
901 +
902 + //connection.end();
903 +}
904 +
905 +function get_number_push(){
906 + number.push(document.getElementById('number').value);
907 + analysis4_list.innerHTML=number;
908 +}
909 +function get_number_pop(){
910 + number.splice(number.indexOf(document.getElementById('number').value),1);
911 + analysis4_list.innerHTML=number;
912 +}
913 +function get_number_analysis(){
914 + chartView();
915 + change_type_title(1);
916 + choosed_menu="analysis4";
917 +
918 + connection.query('drop table IF EXISTS calllog_with; create table calllog_with(date datetime not null, logcount int, callcount int, smscount int, durationsum int, primary key(date)); insert into calllog_with(date, callcount, durationsum) (select date_format(date, "%Y-%m-02 00:00:00"), count(*), sum(duration) from calllog where type in (1,2,3) and number in (?) group by date_format(date, "%Y-%m-02 00:00:00")); update calllog_with cw left join (select date_format(date, "%Y-%m-02 00:00:00") "date", count(*) "count" from calllog where number in (?) group by date_format(date, "%Y-%m-02 00:00:00")) temp on cw.date=temp.date set cw.logcount=temp.count, cw.smscount=cw.logcount-cw.callcount;',[number, number], function(err, rows){
919 + if(!err){
920 + connection.query('select * from calllog_with order by date;', function(err, rows, fields){
921 + if(!err){
922 + month_w.length = 0;
923 + logcount_w.length = 0;
924 + callcount_w.length = 0;
925 + smscount_w.length = 0;
926 + durationsum_w.length = 0;
927 +
928 + for(var i=0;i<rows.length;i++){
929 + month_w.push(rows[i].date.toISOString().slice(0,7));
930 + logcount_w.push(rows[i].logcount);
931 + callcount_w.push(rows[i].callcount);
932 + smscount_w.push(rows[i].smscount);
933 + durationsum_w.push(rows[i].durationsum);
934 + }
935 + }
936 + else
937 + cc.innerHTML='Error-#7-1'+err;
938 + });
939 + connection.query('select a.date, sum(b.logcount) "logcount", sum(b.callcount) "callcount", sum(b.smscount) "smscount", sum(b.durationsum) "durationsum" from calllog_with a, calllog_with b where a.date>=b.date group by date order by a.date;', function(err, rows, fields){
940 + if(!err){
941 + logcount_wnu.length = 0;
942 + callcount_wnu.length = 0;
943 + smscount_wnu.length = 0;
944 + durationsum_wnu.length = 0;
945 +
946 + for(var i=0;i<rows.length;i++){
947 + logcount_wnu.push(rows[i].logcount);
948 + callcount_wnu.push(rows[i].callcount);
949 + smscount_wnu.push(rows[i].smscount);
950 + durationsum_wnu.push(rows[i].durationsum);
951 + }
952 + }
953 + else
954 + cc.innerHTML='Error-#7-2';
955 + });
956 + }
957 + else
958 + cc.innerHTML='Error-#7'+err;
959 + });
960 +
961 + changeLabelText(month_w, "연락 수", logcount_w, "통화 수", callcount_w, "문자 수", smscount_w, "통화 시간", durationsum_w, "누적 연락 수", logcount_wnu, "누적 통화 수", callcount_wnu, "누적 문자 수",smscount_wnu, "누적 통화 시간", durationsum_wnu,"특정 연락처와의 통계");
962 + window.myChart.destroy();
963 + //connection.end();
964 +}
965 +
966 +function get_date_rank(){
967 + chartView();
968 + change_type_title(4);
969 + choosed_menu="more2";
970 +
971 + rank_date_start=document.getElementById('between_rank_date_start').value+' 00:00:00';
972 + rank_date_end=document.getElementById('between_rank_date_end').value+' 23:59:59';
973 +
974 + connection.query('drop table IF EXISTS calllog_user_between; create table calllog_user_between(name varchar(255), number varchar(20) not null, callcount int, smscount int, durationsum int, primary key(number)); insert into calllog_user_between(name, number, callcount, durationsum) (select name, number, count(*), sum(duration) from calllog where type in (1,2,3) and date between ? and ? group by number); update calllog_user_between cu left join (select number, count(*) "count" from calllog where type not in (1,2,3) and date between ? and ? group by number) calllog on cu.number=calllog.number set cu.smscount=ifnull(calllog.count,0);', [rank_date_start,rank_date_end,rank_date_start,rank_date_end], function(err, rows, fields){
975 + if(err)
976 + cc.innerHTML='Error-#9';
977 + })
978 +
979 + connection.query('select name, number, callcount, smscount from calllog_user_between order by callcount+smscount desc', function(err, rows, fields){
980 + if(!err){
981 + ranking_brnu.length=0;
982 + logcount_brnu.length=0;
983 + callcount_brnu.length=0;
984 + smscount_brnu.length=0;
985 +
986 + for(var i=0;i<rows.length;i++){
987 + var name=rows[i].name;
988 + if(!name)
989 + ranking_brnu.push(rows[i].number+" ( - )");
990 + else
991 + ranking_brnu.push(rows[i].number+" ("+name+")");
992 + logcount_brnu.push(rows[i].callcount+rows[i].smscount);
993 + callcount_brnu.push(rows[i].callcount);
994 + smscount_brnu.push(rows[i].smscount);
995 + }
996 + }
997 + else
998 + cc.innerHTML='Error-#9-1';
999 + });
1000 +
1001 + connection.query('select name, number, callcount from calllog_user_between order by callcount desc', function(err, rows, fields){
1002 + if(!err){
1003 + ranking_brnuc.length=0;
1004 + callcount_brnuc.length=0;
1005 +
1006 + for(var i=0;i<rows.length;i++){
1007 + var name=rows[i].name;
1008 + if(!name)
1009 + ranking_brnuc.push(rows[i].number);
1010 + else
1011 + ranking_brnuc.push(rows[i].number+" ("+name+")");
1012 + callcount_brnuc.push(rows[i].callcount);
1013 + }
1014 + }
1015 + else
1016 + cc.innerHTML='Error-#9-2';
1017 + });
1018 +
1019 + connection.query('select name, number, smscount from calllog_user_between order by smscount desc', function(err, rows, fields){
1020 + if(!err){
1021 + ranking_brnus.length=0;
1022 + smscount_brnus.length=0;
1023 +
1024 + for(var i=0;i<rows.length;i++){
1025 + var name=rows[i].name;
1026 + if(!name)
1027 + ranking_brnus.push(rows[i].number);
1028 + else
1029 + ranking_brnus.push(rows[i].number+" ("+name+")");
1030 + smscount_brnus.push(rows[i].smscount);
1031 + }
1032 + }
1033 + else
1034 + cc.innerHTML='Error-#9-3';
1035 + });
1036 +
1037 + connection.query('select name, number, durationsum from calllog_user_between order by durationsum desc', function(err, rows, fields){
1038 + if(!err){
1039 + ranking_brnud.length=0;
1040 + durationsum_brnud.length=0;
1041 +
1042 + for(var i=0;i<rows.length;i++){
1043 + var name=rows[i].name;
1044 + if(!name)
1045 + ranking_brnud.push(rows[i].number);
1046 + else
1047 + ranking_brnud.push(rows[i].number+" ("+name+")");
1048 + durationsum_brnud.push(rows[i].durationsum);
1049 + }
1050 + }
1051 + else
1052 + cc.innerHTML='Error-#9-4';
1053 + });
1054 +
1055 + changeLabelText2(ranking_brnu, "누적 연락 수", logcount_brnu, "누적 통화 수", callcount_brnu, "누적 문자 수", smscount_brnu, ranking_brnuc, "누적 통화 수", callcount_brnuc, ranking_brnus, "누적 문자 수", smscount_brnus, ranking_brnud, "누적 통화 시간", durationsum_brnud, [],"특정 기간의 연락 순위");
1056 + window.myChart.destroy();
1057 + //connection.end();
1058 +}
1059 +
1060 +function get_date_timeline(){
1061 + chartView();
1062 + change_type_title(5);
1063 + choosed_menu="more4";
1064 +
1065 + timeline_date_start=document.getElementById('between_timeline_date_start').value+' 00:00:00';
1066 + timeline_date_end=document.getElementById('between_timeline_date_end').value+' 23:59:59';
1067 +
1068 + connection.query('drop table if exists calllog_hour_between; create table calllog_hour_between(hour int not null, callcount int, smscount int, primary key(hour)); set @hour:=-1; insert into calllog_hour_between(hour, callcount) (select (@hour:=@hour+1) "hour", (select count(*) from calllog where type in (1,2,3) and date between ? and ? and hour(date)=@hour) "count" from calllog where @hour<23); update calllog_hour_between ch left join (select hour(date) "hour", count(*) "count" from calllog where type not in (1,2,3) and date between ? and ? group by hour(date)) calllog on ch.hour=calllog.hour set ch.smscount=ifnull(calllog.count,0);',[timeline_date_start, timeline_date_end,timeline_date_start, timeline_date_end], function(err, rows){
1069 + if(!err){
1070 + connection.query('select * from calllog_hour_between order by hour',function(err, rows){
1071 + if(!err){
1072 + logcount_tb.length=0;
1073 + callcount_tb.length=0;
1074 + smscount_tb.length=0;
1075 +
1076 + for(var i=0;i<rows.length;i++){
1077 + callcount_tb.push(rows[i].callcount);
1078 + smscount_tb.push(rows[i].smscount);
1079 + logcount_tb.push(rows[i].callcount+rows[i].smscount);
1080 + }
1081 + }
1082 + else
1083 + cc.innerHTML='Error-#11-1';
1084 + });
1085 + }
1086 + else
1087 + cc.innerHTML='Error-#11'+err;
1088 + });
1089 +
1090 + changeLabelText(timeline, "누적 연락 수", logcount_tb, "누적 통화 수", callcount_tb, "누적 문자 수", smscount_tb, "수", [], "수", [], "수",[] , "수",[], "수", [],"특정 기간의 선호 연락 시간대");
1091 + window.myChart.destroy();
1092 + //connection.end();
1093 +}
1094 +
1095 +function get_number_timeline_push(){
1096 + timeline_number.push(document.getElementById('timeline_number').value);
1097 + more5_list.innerHTML=timeline_number;
1098 +}
1099 +function get_number_timeline_pop(){
1100 + timeline_number.splice(timeline_number.indexOf(document.getElementById('timeline_number').value),1);
1101 + more5_list.innerHTML=timeline_number;
1102 +}
1103 +function get_number_timeline(){
1104 + chartView();
1105 + change_type_title(5);
1106 + choosed_menu="more5";
1107 +
1108 + connection.query('drop table if exists calllog_hour_with; create table calllog_hour_with(hour int not null, callcount int, smscount int, primary key(hour)); set @hour:=-1; insert into calllog_hour_with(hour, callcount) (select (@hour:=@hour+1) "hour", (select count(*) from calllog where type in (1,2,3) and number in (?) and hour(date)=@hour) "count" from calllog where @hour<23); update calllog_hour_with ch left join (select hour(date) "hour", count(*) "count" from calllog where type not in (1,2,3) and number in (?) group by hour(date)) calllog on ch.hour=calllog.hour set ch.smscount=ifnull(calllog.count,0);',[timeline_number,timeline_number], function(err, rows){
1109 + if(!err){
1110 + connection.query('select * from calllog_hour_with order by hour',function(err, rows){
1111 + if(!err){
1112 + logcount_tw.length=0;
1113 + callcount_tw.length=0;
1114 + smscount_tw.length=0;
1115 +
1116 + for(var i=0;i<rows.length;i++){
1117 + callcount_tw.push(rows[i].callcount);
1118 + smscount_tw.push(rows[i].smscount);
1119 + logcount_tw.push(rows[i].callcount+rows[i].smscount);
1120 + }
1121 + }
1122 + else
1123 + cc.innerHTML='Error-#12-1';
1124 + });
1125 + }
1126 + else
1127 + cc.innerHTML='Error-#12'+err;
1128 + });
1129 +
1130 + changeLabelText(timeline, "누적 연락 수", logcount_tw, "누적 통화 수", callcount_tw, "누적 문자 수", smscount_tw, "수", [], "수", [], "수",[] , "수",[], "수", [],"특정 연락처와의 선호 연락 시간대");
1131 + window.myChart.destroy();
1132 + //connection.end();
1133 +}
1134 +
1135 +var options_list = {
1136 + valueNames: [ 'type','type_cs','type_gs', 'number', 'date','body', 'duration', 'delete' ],
1137 + item: '<li id="listrow"><h3 id="listrow_type" class="type"></h3><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></li>'
1138 +};
1139 +
1140 +var options_list_res = {
1141 + valueNames: [ 'number','get_body','get_date', 'send_body', 'get_date','timediff' ],
1142 + item: '<li id="listrow"><h3 id="listrow_number" class="number"></h3><div id=m3><p id="listrow_get_body" class="get_body"></p><p id="listrow_get_date" class="get_date"></p></div><div id=m3><p id="listrow_send_body" class="send_body"></p><p id="listrow_send_date" class="send_date"></p></div><p id="listrow_timediff" class="timediff"></p></li>'
1143 +};
1144 +
1145 +var values_list_6 = [];
1146 +var values_list_all = [];
1147 +var values_list_between=[];
1148 +var values_list_res=[];
1149 +var values_list_res_with=[];
1150 +var myList;
1151 +var myList2;
1152 +var myList3=new List('listspace3', options_list, values_list_between);
1153 +var myList4;
1154 +var myList5=new List('listspace5', options_list_res, values_list_res_with);
1155 +
1156 +connection.query('select calllog.type, calllog.number, calllog.name, calllog.date, calllog.duration, sms.body, sms.read_c from calllog left join sms on calllog.number=sms.address and timestampdiff(second,calllog.date, sms.date) between -5 and 0 where timestampdiff(month,now(),calllog.date)>-1;',function(err, rows){
1157 + if(!err){
1158 + for(var i=0;i<rows.length;i++){
1159 + var number_temp="";
1160 + var duration_temp="";
1161 + var body_temp="";
1162 + var type_temp=""
1163 + var type_cs_temp="";
1164 + var type_gs_temp="";
1165 + var delete_temp="false";
1166 + if(!rows[i].name)
1167 + number_temp=rows[i].number+" ( - )";
1168 + else
1169 + number_temp=rows[i].number+" ("+rows[i].name+")";
1170 +
1171 + var date_temp=rows[i].date.toISOString().split("T")[0]+" "+rows[i].date.toISOString().split("T")[1].slice(0,8);
1172 + switch(rows[i].type){
1173 + case 1:
1174 + type_temp="수신 통화";
1175 + type_cs_temp="call";
1176 + type_gs_temp="get";
1177 + var tttt=rows[i].duration;
1178 + if(tttt>=3600){
1179 + body_temp=Math.floor(tttt/3600)+"시간 "+Math.floor((tttt%3600)/60)+"분 "+(tttt%60)+"초";
1180 + duration_temp="more60";
1181 + }
1182 + else if(tttt>=60){
1183 + body_temp=Math.floor(tttt/60)+"분 "+(tttt%60)+"초";
1184 + if(tttt<=600)
1185 + duration_temp="less10";
1186 + }
1187 + else{
1188 + body_temp=tttt+"초";
1189 + duration_temp="less10";
1190 + }
1191 + break;
1192 + case 2:
1193 + type_temp="발신 통화";
1194 + type_cs_temp="call";
1195 + type_gs_temp="send";
1196 + var tttt=rows[i].duration;
1197 + if(tttt>=3600){
1198 + body_temp=Math.floor(tttt/3600)+"시간 "+Math.floor((tttt%3600)/60)+"분 "+(tttt%60)+"초";
1199 + duration_temp="more60";
1200 + }
1201 + else if(tttt>=60){
1202 + body_temp=Math.floor(tttt/60)+"분 "+(tttt%60)+"초";
1203 + if(tttt<=600)
1204 + duration_temp="less10";
1205 + }
1206 + else{
1207 + body_temp=tttt+"초";
1208 + duration_temp="less10";
1209 + }
1210 + break;
1211 + case 3:
1212 + type_temp="부재중 통화";
1213 + type_cs_temp="call";
1214 + type_gs_temp="missed";
1215 + body_temp="-";
1216 + duration_temp="";
1217 + break;
1218 + case 813:
1219 + body_temp=rows[i].body;
1220 + if(!body_temp)
1221 + delete_temp="true";
1222 + type_temp="발신 문자";
1223 + type_cs_temp="sms";
1224 + type_gs_temp="send";
1225 + break;
1226 + case 820:
1227 + body_temp="[mms]";
1228 + type_temp="수신 문자";
1229 + type_cs_temp="sms";
1230 + type_gs_temp="get";
1231 + break;
1232 + case 814:
1233 + body_temp=rows[i].body;
1234 + if(!body_temp)
1235 + delete_temp="true";
1236 + type_temp="수신 문자";
1237 + type_cs_temp="sms";
1238 + type_gs_temp="get";
1239 + break;
1240 + case 825:
1241 + body_temp="[안전안내문자]";
1242 + type_temp="수신 문자";
1243 + type_cs_temp="sms";
1244 + type_gs_temp="get";
1245 + break;
1246 + }
1247 + values_list_6.push({type:type_temp, type_cs:type_cs_temp ,type_gs:type_gs_temp,number:number_temp,date:date_temp, body:body_temp, duration:duration_temp, delete:delete_temp});
1248 + }
1249 + myList = new List('listspace', options_list, values_list_6);
1250 + }
1251 + else
1252 + cc.innerHTML='Error-#list1'+err;
1253 +});
1254 +
1255 +connection.query('select calllog.type, calllog.number, calllog.name, calllog.date, calllog.duration, sms.body, sms.read_c from calllog left join sms on calllog.number=sms.address and timestampdiff(second,calllog.date, sms.date) between -5 and 0 ;',function(err, rows){
1256 + if(!err){
1257 + for(var i=0;i<rows.length;i++){
1258 + var number_temp="";
1259 + var duration_temp="";
1260 + var body_temp="";
1261 + var type_temp="";
1262 + var type_cs_temp="";
1263 + var type_gs_temp="";
1264 + var delete_temp="false";
1265 + if(!rows[i].name)
1266 + number_temp=rows[i].number+" ( - )";
1267 + else
1268 + number_temp=rows[i].number+" ("+rows[i].name+")";
1269 +
1270 + var date_temp=rows[i].date.toISOString().split("T")[0]+" "+rows[i].date.toISOString().split("T")[1].slice(0,8);
1271 + switch(rows[i].type){
1272 + case 1:
1273 + type_temp="수신 통화";
1274 + type_cs_temp="call";
1275 + type_gs_temp="get";
1276 + var tttt=rows[i].duration;
1277 + if(tttt>=3600){
1278 + body_temp=Math.floor(tttt/3600)+"시간 "+Math.floor((tttt%3600)/60)+"분 "+(tttt%60)+"초";
1279 + duration_temp="more60";
1280 + }
1281 + else if(tttt>=60){
1282 + body_temp=Math.floor(tttt/60)+"분 "+(tttt%60)+"초";
1283 + if(tttt<=600)
1284 + duration_temp="less10";
1285 + }
1286 + else{
1287 + body_temp=tttt+"초";
1288 + duration_temp="less10";
1289 + }
1290 + break;
1291 + case 2:
1292 + type_temp="발신 통화";
1293 + type_cs_temp="call";
1294 + type_gs_temp="send";
1295 + var tttt=rows[i].duration;
1296 + if(tttt>=3600){
1297 + body_temp=Math.floor(tttt/3600)+"시간 "+Math.floor((tttt%3600)/60)+"분 "+(tttt%60)+"초";
1298 + duration_temp="more60";
1299 + }
1300 + else if(tttt>=60){
1301 + body_temp=Math.floor(tttt/60)+"분 "+(tttt%60)+"초";
1302 + if(tttt<=600)
1303 + duration_temp="less10";
1304 + }
1305 + else{
1306 + body_temp=tttt+"초";
1307 + duration_temp="less10";
1308 + }
1309 + break;
1310 + case 3:
1311 + type_temp="부재중 통화";
1312 + type_cs_temp="call";
1313 + type_gs_temp="missed";
1314 + body_temp="-";
1315 + duration_temp="";
1316 + break;
1317 + case 813:
1318 + body_temp=rows[i].body;
1319 + if(!body_temp)
1320 + delete_temp="true";
1321 + type_temp="발신 문자";
1322 + type_cs_temp="sms";
1323 + type_gs_temp="send";
1324 + break;
1325 + case 820:
1326 + body_temp="[mms]";
1327 + type_temp="수신 문자";
1328 + type_cs_temp="sms";
1329 + type_gs_temp="get";
1330 + break;
1331 + case 814:
1332 + body_temp=rows[i].body;
1333 + if(!body_temp)
1334 + delete_temp="true";
1335 + type_temp="수신 문자";
1336 + type_cs_temp="sms";
1337 + type_gs_temp="get";
1338 + break;
1339 + case 825:
1340 + body_temp="[안전안내문자]";
1341 + type_temp="수신 문자";
1342 + type_cs_temp="sms";
1343 + type_gs_temp="get";
1344 + break;
1345 + }
1346 + values_list_all.push({type:type_temp, type_cs:type_cs_temp ,type_gs:type_gs_temp,number:number_temp,date:date_temp, body:body_temp, duration:duration_temp, delete:delete_temp});
1347 + }
1348 + myList2 = new List('listspace2', options_list, values_list_all);
1349 + }
1350 + else
1351 + cc.innerHTML='Error-#list2'+err;
1352 +});
1353 +
1354 +function get_date_list(){
1355 + listspace.style="display:none";
1356 + listspace2.style="display:none";
1357 + listspace3.style="display:inline";
1358 + listspace4.style="display:none";
1359 + listspace5.style="display:none";
1360 + chartspace.style="display:none";
1361 + choicespace.style="display:none";
1362 +
1363 + list_date_start=document.getElementById('between_list_date_start').value+' 00:00:00';
1364 + list_date_end=document.getElementById('between_list_date_end').value+' 23:59:59';
1365 +
1366 + connection.query('select calllog.type, calllog.number, calllog.name, calllog.date, calllog.duration, sms.body, sms.read_c from calllog left join sms on calllog.number=sms.address and timestampdiff(second,calllog.date, sms.date) between -5 and 0 where calllog.date between ? and ?;',[list_date_start, list_date_end],function(err, rows){
1367 + if(!err){
1368 + myList3.clear();
1369 + values_list_between.length=0;
1370 + for(var i=0;i<rows.length;i++){
1371 + var number_temp="";
1372 + var duration_temp="";
1373 + var body_temp="";
1374 + var type_temp='';
1375 + var type_cs_temp='';
1376 + var type_gs_temp='';
1377 + var delete_temp="false";
1378 + if(!rows[i].name)
1379 + number_temp=rows[i].number+" ( - )";
1380 + else
1381 + number_temp=rows[i].number+" ("+rows[i].name+")";
1382 +
1383 + var date_temp=rows[i].date.toISOString().split("T")[0]+" "+rows[i].date.toISOString().split("T")[1].slice(0,8);
1384 + switch(rows[i].type){
1385 + case 1:
1386 + type_temp="수신 통화";
1387 + type_cs_temp="call";
1388 + type_gs_temp="get";
1389 + var tttt=rows[i].duration;
1390 + if(tttt>=3600){
1391 + body_temp=Math.floor(tttt/3600)+"시간 "+Math.floor((tttt%3600)/60)+"분 "+(tttt%60)+"초";
1392 + duration_temp="more60";
1393 + }
1394 + else if(tttt>=60){
1395 + body_temp=Math.floor(tttt/60)+"분 "+(tttt%60)+"초";
1396 + if(tttt<=600)
1397 + duration_temp="less10";
1398 + }
1399 + else{
1400 + body_temp=tttt+"초";
1401 + duration_temp="less10";
1402 + }
1403 + break;
1404 + case 2:
1405 + type_temp="발신 통화";
1406 + type_cs_temp="call";
1407 + type_gs_temp="send";
1408 + var tttt=rows[i].duration;
1409 + if(tttt>=3600){
1410 + body_temp=Math.floor(tttt/3600)+"시간 "+Math.floor((tttt%3600)/60)+"분 "+(tttt%60)+"초";
1411 + duration_temp="more60";
1412 + }
1413 + else if(tttt>=60){
1414 + body_temp=Math.floor(tttt/60)+"분 "+(tttt%60)+"초";
1415 + if(tttt<=600)
1416 + duration_temp="less10";
1417 + }
1418 + else{
1419 + body_temp=tttt+"초";
1420 + duration_temp="less10";
1421 + }
1422 + break;
1423 + case 3:
1424 + type_temp="부재중 통화";
1425 + type_cs_temp="call";
1426 + type_gs_temp="missed";
1427 + body_temp="-";
1428 + duration_temp="";
1429 + break;
1430 + case 813:
1431 + body_temp=rows[i].body;
1432 + if(!body_temp)
1433 + delete_temp="true";
1434 + type_temp="발신 문자";
1435 + type_cs_temp="sms";
1436 + type_gs_temp="send";
1437 + break;
1438 + case 820:
1439 + body_temp="[mms]";
1440 + type_temp="수신 문자";
1441 + type_cs_temp="sms";
1442 + type_gs_temp="get";
1443 + break;
1444 + case 814:
1445 + body_temp=rows[i].body;
1446 + if(!body_temp)
1447 + delete_temp="true";
1448 + type_temp="수신 문자";
1449 + type_cs_temp="sms";
1450 + type_gs_temp="get";
1451 + break;
1452 + case 825:
1453 + body_temp="[안전안내문자]";
1454 + type_temp="수신 문자";
1455 + type_cs_temp="sms";
1456 + type_gs_temp="get";
1457 + break;
1458 + }
1459 + values_list_between.push({type:type_temp, type_cs:type_cs_temp ,type_gs:type_gs_temp,number:number_temp,date:date_temp, body:body_temp, duration:duration_temp, delete:delete_temp});
1460 + }
1461 + myList3 = new List('listspace3', options_list, values_list_between);
1462 + }
1463 + else
1464 + cc.innerHTML='Error-#list1'+err;
1465 + });
1466 + //connection.end();
1467 +}
1468 +
1469 +var filter1List=[];
1470 +var filter2List=[];
1471 +var filter3List=[];
1472 +var filter1_element=document.getElementsByClassName("filter1");
1473 +var filter2_element=document.getElementsByClassName("filter2");
1474 +var filter3_element=document.getElementsByClassName("filter3");
1475 +
1476 +function filter_listener(event){
1477 + var data_filter_temp=event.target.getAttribute('data_filter');
1478 + var data_value_temp=event.target.getAttribute('data_value');
1479 + var checked_temp=event.target.checked;
1480 +
1481 + switch(event.target.id){
1482 + case "filter1":
1483 + filter_action(filter1List, checked_temp, data_filter_temp, data_value_temp, myList);
1484 + break;
1485 + case "filter2":
1486 + filter_action(filter2List, checked_temp, data_filter_temp, data_value_temp, myList2);
1487 + break;
1488 + case "filter3":
1489 + filter_action(filter3List, checked_temp, data_filter_temp, data_value_temp, myList3);
1490 + break;
1491 + }
1492 +}
1493 +function filter_action(paramlist, checked_temp, filter_temp, value_temp, myList_temp){
1494 + if (checked_temp){
1495 + paramlist.push(filter_temp);
1496 + paramlist.push(value_temp);
1497 +
1498 + myList_temp.filter(function (item) {
1499 + var check_all=true;
1500 + for(var i=0;i<paramlist.length;i=i+2){
1501 + if(item.values()[paramlist[i]] !== paramlist[i+1])
1502 + check_all=false;
1503 + }
1504 + if(check_all)
1505 + return true;
1506 + else
1507 + return false;
1508 + });
1509 + }
1510 + else{
1511 + paramlist.splice(paramlist.indexOf(value_temp)-1,2);
1512 +
1513 + myList_temp.filter(function (item) {
1514 + var check_all=true;
1515 + for(var i=0;i<paramlist.length;i=i+2){
1516 + if(item.values()[paramlist[i]] !== paramlist[i+1])
1517 + check_all=false;
1518 + }
1519 + if(check_all)
1520 + return true;
1521 + else
1522 + return false;
1523 + });
1524 + }
1525 +};
1526 +for (var i = 0; i < filter1_element.length; i++) {
1527 + filter1_element[i].addEventListener('click', filter_listener, false);
1528 +}
1529 +for (var i = 0; i < filter2_element.length; i++) {
1530 + filter2_element[i].addEventListener('click', filter_listener, false);
1531 +}
1532 +for (var i = 0; i < filter3_element.length; i++) {
1533 + filter3_element[i].addEventListener('click', filter_listener, false);
1534 +}
1535 +
1536 +var more6 = document.getElementById('more6');
1537 +more6.addEventListener('click', function(){
1538 + listspace.style="display:none";
1539 + listspace2.style="display:none";
1540 + listspace3.style="display:none";
1541 + listspace4.style="display:inline";
1542 + listspace5.style="display:none";
1543 + chartspace.style="display:none";
1544 + choicespace.style="display:none";
1545 + choosed_menu="more6";
1546 + window.myChart.destroy();
1547 +});
1548 +
1549 +var more7 = document.getElementById('more7');
1550 +more7.addEventListener('click', function(){
1551 + listspace.style="display:none";
1552 + listspace2.style="display:none";
1553 + listspace3.style="display:none";
1554 + listspace4.style="display:none";
1555 + listspace5.style="display:inline";
1556 + chartspace.style="display:none";
1557 + choicespace.style="display:none";
1558 + choosed_menu="more7";
1559 + window.myChart.destroy();
1560 +});
1561 +
1562 +
1563 +connection.query('drop table sms_response; create table sms_response (number text, got_date datetime, got_body text, send_date datetime, send_body text, time int); insert into sms_response SELECT sms1.address, sms1.date,sms1.body, sms2.date, sms2.body,timestampdiff(second, sms1.date, sms2.date) FROM sms sms1, sms sms2 where sms1.tid=sms2.tid and sms1.type=1 and sms2.type=2 and timestampdiff(second, sms1.date, sms2.date) >0 and timestampdiff(day,sms2.date, sms1.date)< 2; delete sms1 from sms_response sms1, sms_response sms2 where sms1.send_date=sms2.send_date and timestampdiff(second, sms2.got_date,sms1.got_date)<0; delete sms1 from sms_response sms1, sms_response sms2 where sms1.got_date=sms2.got_date and timestampdiff(second, sms2.send_date,sms1.send_date)>0;', function(err, rows, fields){
1564 + if(err)
1565 + cc.innerHTML='Error-#13';
1566 +})
1567 +
1568 +connection.query('select avg(time) "avg" from sms_response;', function(err, rows, fields){
1569 + if(!err){
1570 + var tttt=rows[0].avg;
1571 + var avg_temp="";
1572 + if(tttt>=3600)
1573 + avg_temp=Math.floor(tttt/3600)+"시간 "+Math.floor((tttt%3600)/60)+"분 "+Math.floor(tttt%60)+"초";
1574 + else if(tttt>=60)
1575 + avg_temp=Math.floor(tttt/60)+"분 "+Math.floor(tttt%60)+"초";
1576 + else
1577 + avg_temp=tttt+"초";
1578 + values_list_res.push({get_body:"해당 기간의 평균 답장 시간", send_body:avg_temp});
1579 + }
1580 + else
1581 + cc.innerHTML='Error-#13-11'+err;
1582 +});
1583 +
1584 +connection.query('select * from sms_response;', function(err, rows, fields){
1585 + if(!err){
1586 + for(var i=0;i<rows.length;i++){
1587 + var number_temp=rows[i].number;
1588 + var get_body_temp=rows[i].got_body;
1589 + var get_date_temp=rows[i].got_date.toISOString().split("T")[0]+" "+rows[i].got_date.toISOString().split("T")[1].slice(0,8);
1590 + var send_body_temp=rows[i].send_body;
1591 + var send_date_temp=rows[i].send_date.toISOString().split("T")[0]+" "+rows[i].send_date.toISOString().split("T")[1].slice(0,8);
1592 + var tttt=rows[i].time;
1593 + var timediff_temp="";
1594 + if(tttt>=3600)
1595 + timediff_temp=Math.floor(tttt/3600)+"시간 "+Math.floor((tttt%3600)/60)+"분 "+(tttt%60)+"초";
1596 + else if(tttt>=60)
1597 + timediff_temp=Math.floor(tttt/60)+"분 "+(tttt%60)+"초";
1598 + else
1599 + timediff_temp=tttt+"초";
1600 +
1601 + values_list_res.push({number:number_temp, get_body:get_body_temp, get_date:get_date_temp, send_body:send_body_temp, send_date:send_date_temp, timediff:timediff_temp});
1602 + }
1603 + myList4 = new List('listspace4', options_list_res, values_list_res);
1604 + }
1605 + else
1606 + cc.innerHTML='Error-#13-1'+err;
1607 +});
1608 +
1609 +
1610 +function get_number_restime_push(){
1611 + restime_number.push(document.getElementById('restime_number').value);
1612 + more7_list.innerHTML=restime_number;
1613 +}
1614 +function get_number_restime_pop(){
1615 + restime_number.splice(restime_number.indexOf(document.getElementById('restime_number').value),1);
1616 + more7_list.innerHTML=restime_number;
1617 +}
1618 +function get_number_restime(){
1619 + listspace.style="display:none";
1620 + listspace2.style="display:none";
1621 + listspace3.style="display:none";
1622 + listspace4.style="display:none";
1623 + listspace5.style="display:inline";
1624 + chartspace.style="display:none";
1625 + choicespace.style="display:none";
1626 +
1627 + myList5.clear();
1628 + values_list_res_with.length=0;
1629 +
1630 + connection.query('select avg(time) "avg" from sms_response where number in (?);',[restime_number], function(err, rows, fields){
1631 + if(!err){
1632 + var tttt=rows[0].avg;
1633 + var avg_temp="";
1634 + if(tttt>=3600)
1635 + avg_temp=Math.floor(tttt/3600)+"시간 "+Math.floor((tttt%3600)/60)+"분 "+Math.floor(tttt%60)+"초";
1636 + else if(tttt>=60)
1637 + avg_temp=Math.floor(tttt/60)+"분 "+Math.floor(tttt%60)+"초";
1638 + else
1639 + avg_temp=tttt+"초";
1640 + values_list_res_with.push({get_body:"해당 기간의 평균 답장 시간", send_body:avg_temp});
1641 + }
1642 + else
1643 + cc.innerHTML='Error-#13-21'+err;
1644 + });
1645 +
1646 + connection.query('select * from sms_response where number in (?);',[restime_number], function(err, rows, fields){
1647 + if(!err){
1648 + for(var i=0;i<rows.length;i++){
1649 + var number_temp=rows[i].number;
1650 + var get_body_temp=rows[i].got_body;
1651 + var get_date_temp=rows[i].got_date.toISOString().split("T")[0]+" "+rows[i].got_date.toISOString().split("T")[1].slice(0,8);
1652 + var send_body_temp=rows[i].send_body;
1653 + var send_date_temp=rows[i].send_date.toISOString().split("T")[0]+" "+rows[i].send_date.toISOString().split("T")[1].slice(0,8);
1654 + var tttt=rows[i].time;
1655 + var timediff_temp="";
1656 + if(tttt>=3600)
1657 + timediff_temp=Math.floor(tttt/3600)+"시간 "+Math.floor((tttt%3600)/60)+"분 "+(tttt%60)+"초";
1658 + else if(tttt>=60)
1659 + timediff_temp=Math.floor(tttt/60)+"분 "+(tttt%60)+"초";
1660 + else
1661 + timediff_temp=tttt+"초";
1662 +
1663 + values_list_res_with.push({number:number_temp, get_body:get_body_temp, get_date:get_date_temp, send_body:send_body_temp, send_date:send_date_temp, timediff:timediff_temp});
1664 + }
1665 + myList5 = new List('listspace5', options_list_res, values_list_res_with);
1666 + }
1667 + else
1668 + cc.innerHTML='Error-#13-2'+err;
1669 + });
1670 + //connection.end();
1671 +}
......