1
#include "/ty_code/common/libyfun/libyfun.h"
2
//#include "libyfun.h"
3
#include "tjpro.h"
4
#include <time.h>
5
#include <stdio.h>
6
#include <memory.h>
7
#include <pthread.h>
8
9
GBLPARAM gb;//公有变量
10
11
void Init()
12
{
13
//得到调试信息
14
15
gb.is_debug = 1;
16
gb.debug_level = 3;
17
strcpy (gb.log_file, "/ty/log/tjpro.log");
18
19
}
20
21
int gethour()
22
{
23
time_t timep;
24
struct tm *p;
25
time(&timep);
26
p= localtime(&timep);
27
return p->tm_hour;
28
29
}
30
31
int datapro()
32
{
33
yCMysql da;
34
if(0 == da.Login("127.0.0.1","","","")) //连接数据库
35
{
36
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro login db fail!!\n");
37
return 0;
38
39
}
40
char sql[500];
41
memset(sql,0,500);
42
43
44
time_t m_ltime;
45
time(&m_ltime);
46
time_t m_btime;
47
time_t m_mtime;
48
m_btime = m_ltime - 86400;
49
m_mtime=m_ltime-300; //显示0点前一天的日期
50
time_t m_tmtime;
51
m_tmtime = m_ltime - 5184000; //60天以前
52
53
//删除60天以前的记录
54
sprintf(sql,"delete from tab_sxxrz where sjsj < %ld",m_tmtime);
55
if(da.QueryWrite(sql) == 0)
56
{
57
da.Logout();
58
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tab_sxxrz QueryWrite %s fail!!\n",sql);
59
return 0;
60
}
61
62
memset(sql,0,500);
63
sprintf(sql,"delete from tab_dxbj where dxsj < %ld",m_tmtime);
64
if(da.QueryWrite(sql) == 0)
65
{
66
da.Logout();
67
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tab_dxbj QueryWrite %s fail!!\n",sql);
68
return 0;
69
}
70
71
72
memset(sql,0,500);
73
sprintf(sql,"delete from tab_gkrz where tjsj < %ld",m_tmtime);
74
if(da.QueryWrite(sql) == 0)
75
{
76
da.Logout();
77
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tab_gkrz QueryWrite %s fail!!\n",sql);
78
return 0;
79
}
80
81
memset(sql,0,500);
82
sprintf(sql,"delete from tab_kkbj where tjsj < %ld",m_tmtime);
83
if(da.QueryWrite(sql) == 0)
84
{
85
da.Logout();
86
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tab_kkbj QueryWrite %s fail!!\n",sql);
87
return 0;
88
}
89
90
91
////统计开卡
92
memset(sql,0,500);
93
sprintf(sql,"select dwbh,count(dwbh) as kks from tab_kk where sfyx = 1 and kksj>=%ld and kksj<%ld group by dwbh",m_btime,m_ltime); //统计0点以前24小时
94
if(da.QueryRead(sql) == 0)
95
{
96
da.Logout(); //关闭连接
97
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro QueryRead1 %s fail!!\n",sql);
98
return 0;
99
}
100
int k = da.GetRowNum();
101
if(k > 0)
102
{
103
char temp[1000][30]; //最高1000家网吧开卡
104
memset(temp,0,1000*30*sizeof(char));
105
for(int i=0;i<k;i++)
106
{
107
da.GetRow();
108
sprintf(temp[i],"%s,%s",da.row[0],da.row[1]);
109
}
110
da.FreeResult();
111
for (int j=0;j<k;j++)
112
{
113
// da.GetRow();
114
char m_dwbh[15] ={0};
115
char m_kks[15] ={0};
116
char *p = temp[j];
117
char *pt = temp[j];
118
while(1)
119
{
120
if(*p ==',')
121
{
122
*p = '\0';
123
sprintf(m_dwbh,"%s",pt);
124
p++;
125
pt = p;
126
}
127
else if(*p == '\0')
128
{
129
sprintf(m_kks,"%s",pt);
130
break;
131
}
132
else
133
p++;
134
135
}
136
137
138
if(atoi(m_kks) > 5) //网吧开卡数大于5张不进行统计,并删除原来当天的报警项
139
{
140
memset(sql,0,500);
141
sprintf(sql,"delete from tab_kkbj where tjsj >= %ld and dwbh = %s",m_btime,m_dwbh);
142
if(da.QueryWrite(sql) == 0)
143
{
144
da.Logout(); //关闭连接
145
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro QueryWrite %s fail!!\n",sql);
146
return 0;
147
}
148
continue;
149
}
150
151
memset(sql,0,500);
152
sprintf(sql,"select dwbh from tab_kkbj where tjsj >= %ld and dwbh = %s",m_btime,m_dwbh); //查询开卡报警表中是否有今天网吧记录
153
if(da.QueryRead(sql) == 0)
154
{
155
da.Logout(); //关闭连接
156
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro QueryRead2 %s fail!!\n",sql);
157
return 0;
158
}
159
if(da.GetRowNum() >0)
160
{
161
memset(sql,0,500);
162
sprintf(sql,"update tab_kkbj set kks = %s,tjsj = %ld where tjsj >= %ld and dwbh = %s",m_kks,m_mtime,m_btime,m_dwbh);
163
if(da.QueryWrite(sql) == 0)
164
{
165
da.Logout();
166
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro QueryWrite1 %s fail!!\n",sql);
167
return 0;
168
}
169
}
170
else
171
{
172
memset(sql,0,500);
173
sprintf(sql,"insert into tab_kkbj(dwbh,kks,tjsj) values(%s,%s,%ld)",m_dwbh,m_kks,m_mtime);
174
if(da.QueryWrite(sql) == 0)
175
{
176
da.Logout();
177
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro QueryWrite2 %s fail!!\n",sql);
178
return 0;
179
}
180
}
181
da.FreeResult();
182
}
183
}
184
185
186
/*
187
sprintf(sql,"select dwbh from tab_kk where kksj>%ld",m_btime);
188
if(da.QueryRead(sql) == 0)
189
{
190
da.Logout(); //关闭连接
191
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro QueryRead %s fail!!\n",sql);
192
return 0;
193
}
194
195
if(da.GetRowNum() > 0)
196
{
197
da.FreeResult();
198
memset(sql,0,500);
199
sprintf(sql,"insert into tab_kkbj(dwbh,kks,tjsj) select dwbh,count(dwbh) as kks,%ld as tjsj from tab_kk where kksj>%ld group by dwbh",m_ltime,m_btime);
200
if(da.QueryWrite(sql) == 0)
201
{
202
da.Logout();
203
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro QueryWrite %s fail!!\n",sql);
204
return 0;
205
}
206
}
207
*/
208
209
210
// 统计公卡日志
211
memset(sql,0,500);
212
sprintf(sql,"select sl from tab_tjpz where mc='gkcs'");
213
if(da.QueryRead(sql) == 0)
214
{
215
da.Logout(); //关闭连接
216
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro QueryRead %s fail!!\n",sql);
217
return 0;
218
}
219
char gkcs[4] = {0};
220
da.GetRow();
221
sprintf(gkcs,"%s",da.row[0]);
222
da.FreeResult();
223
224
225
226
memset(sql,0,500);
227
sprintf(sql,"select kh,dwbh,count(kh) as sjcs from tab_sxxrz where sjsj>=%ld group by kh,dwbh",m_btime);
228
if(da.QueryRead(sql) == 0)
229
{
230
da.Logout(); //关闭连接
231
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro QueryRead %s fail!!\n",sql);
232
return 0;
233
}
234
int gk = da.GetRowNum();
235
if(gk > 0)
236
{
237
char tempgk[200000][35]; //最高20万人次
238
memset(tempgk,0,200000*35*sizeof(char));
239
for(int i=0;i<gk;i++)
240
{
241
da.GetRow();
242
sprintf(tempgk[i],"%s,%s:%s",da.row[0],da.row[1],da.row[2]);
243
}
244
da.FreeResult();
245
for (int j=0;j<gk;j++)
246
{
247
// da.GetRow();
248
char m_kh[15] ={0};
249
char m_dwbh[15] ={0};
250
char m_sjcs[15] ={0};
251
char *p = tempgk[j];
252
char *pt = tempgk[j];
253
while(1)
254
{
255
if(*p ==',')
256
{
257
*p = '\0';
258
sprintf(m_kh,"%s",pt);
259
p++;
260
pt = p;
261
}
262
else if(*p == ':')
263
{
264
*p = '\0';
265
sprintf(m_dwbh,"%s",pt);
266
p++;
267
pt = p;
268
269
}
270
else if(*p == '\0')
271
{
272
273
sprintf(m_sjcs,"%s",pt);
274
break;
275
}
276
else
277
p++;
278
279
}
280
281
if(atoi(m_sjcs) < atoi(gkcs))
282
{
283
continue;
284
}
285
sprintf(sql,"insert into tab_gkrz(kh,dwbh,sjcs,tjsj) values('%s',%s,%s,%ld)",m_kh,m_dwbh,m_sjcs,m_mtime);
286
if(da.QueryWrite(sql) == 0)
287
{
288
da.Logout();
289
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro QueryWrite3 %s fail!!\n",sql);
290
return 0;
291
}
292
293
294
}
295
}
296
/*
297
sprintf(sql,"insert into tab_gkrz(kh,dwbh,sjcs,tjsj) select kh,dwbh,count(kh) as sjcs,%ld as tjsj from tab_sxxrz where sjsj>%ld group by kh,dwbh",m_mtime,m_btime);
298
if(da.QueryWrite(sql) == 0)
299
{
300
da.Logout();
301
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro QueryWrite3 %s fail!!\n",sql);
302
return 0;
303
}
304
305
306
*/
307
308
da.Logout();
309
return 1;
310
311
}
312
313
void * dxtjpro(void *arg)
314
{
315
316
317
while(1)
318
{
319
sleep(298); //等待5分钟
320
////////////
321
yCMysql da;
322
if(0 == da.Login("127.0.0.1","","","")) //连接数据库
323
{
324
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro login db fail!!\n");
325
return 0;
326
}
327
char sql[5100];
328
memset(sql,0,5100);
329
time_t m_ltime; //现在的时间
330
time_t m_btime;
331
time(&m_ltime);
332
m_btime = m_ltime - 300; //
333
334
335
memset(sql,0,5100);
336
337
sprintf(sql,"select dwbh from tab_dxbj where ljsj = 0");
338
if(da.QueryRead(sql) == 0)
339
{
340
da.Logout(); //关闭连接
341
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro QueryRead %s fail!!\n",sql);
342
return 0;
343
}
344
int m = da.GetRowNum();
345
if(m>0)
346
{
347
char tempdwbh[5000] = {0}; //最高500家9位编号
348
int k = 0;
349
for(int n=0;n<m;n++)
350
{
351
da.GetRow();
352
k+=sprintf(tempdwbh+k,"%s,", da.row[0]);
353
}
354
tempdwbh[k-1] ='\0';
355
da.FreeResult();
356
memset(sql,0,5100);
357
sprintf(sql,"insert into tab_dxbj(dwbh,dxsj,ljsj) (select dwbh,wssj,0 as ljsj from tab_dwzl where wssj<%ld and dwbh not in(%s))",m_btime,tempdwbh);
358
if(da.QueryWrite(sql) == 0)
359
{
360
da.Logout();
361
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro QueryWrite %s fail!!\n",sql);
362
return 0;
363
}
364
}
365
else
366
{
367
memset(sql,0,5100);
368
sprintf(sql,"insert into tab_dxbj(dwbh,dxsj,ljsj) (select dwbh,wssj,0 as ljsj from tab_dwzl where wssj<%ld)",m_btime);
369
if(da.QueryWrite(sql) == 0)
370
{
371
da.Logout();
372
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro QueryWrite %s fail!!\n",sql);
373
return 0;
374
}
375
}
376
377
378
379
///在5分钟内有握手的断线编号全部置为连接
380
memset(sql,0,5100);
381
sprintf(sql,"select dwbh from tab_dwzl where wssj>=%ld",m_btime);
382
if(da.QueryRead(sql) == 0)
383
{
384
da.Logout(); //关闭连接
385
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro QueryRead2 %s fail!!\n",sql);
386
return 0;
387
}
388
int j = da.GetRowNum();
389
if(j>0)
390
{
391
char tempCard[5000] = {0};
392
int k = 0;
393
for(int i=0;i<j;i++)
394
{
395
da.GetRow();
396
k+=sprintf(tempCard+k,"%s,", da.row[0]);
397
}
398
tempCard[k-1] ='\0';
399
da.FreeResult();
400
memset(sql,0,500);
401
sprintf(sql,"update tab_dxbj set ljsj = %ld where ljsj = 0 and dwbh in(%s)",m_ltime,tempCard);
402
if(da.QueryWrite(sql) == 0)
403
{
404
da.Logout();
405
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro QueryWrite2 %s fail!!\n",sql);
406
return 0;
407
}
408
}
409
da.Logout();
410
}
411
412
/*
413
414
/////////////
415
416
while(1)
417
{
418
sleep(88); //等待
419
// yCMysql da;
420
if(0 == da.Login("127.0.0.1","operator","operator","dbs_whbzx")) //连接数据库
421
{
422
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro login db fail!!\n");
423
return 0;
424
425
}
426
// char sql[500];
427
// memset(sql,0,5100);
428
// time_t m_ltime; //现在的时间
429
// time_t m_btime;
430
time(&m_ltime);
431
time_t m_bbtime;
432
m_btime = m_ltime - 90; //
433
m_bbtime = m_ltime - 180; //
434
435
memset(sql,0,5100);
436
sprintf(sql,"select dwbh from tab_dwzl where wssj>=%ld and wssj<%ld",m_bbtime,m_btime); //90至180新断线
437
if(da.QueryRead(sql) == 0)
438
{
439
da.Logout(); //关闭连接
440
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro QueryRead1 %s fail!!\n",sql);
441
return 0;
442
}
443
if(da.GetRowNum() > 0)
444
{
445
memset(sql,0,5100);
446
sprintf(sql,"insert into tab_dxbj(dwbh,dxsj,ljsj) (select dwbh,wssj,0 as ljsj from tab_dwzl where wssj>=%ld and wssj<%ld)",m_bbtime,m_btime); //握手时间前90至180的插入报警表
447
if(da.QueryWrite(sql) == 0)
448
{
449
da.Logout();
450
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro QueryWrite1 %s fail!!\n",sql);
451
return 0;
452
}
453
}
454
da.FreeResult();
455
456
///在90秒内有握手的断线编号全部置为连接
457
memset(sql,0,5100);
458
sprintf(sql,"select dwbh from tab_dwzl where wssj>=%ld",m_btime);
459
if(da.QueryRead(sql) == 0)
460
{
461
da.Logout(); //关闭连接
462
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro QueryRead2 %s fail!!\n",sql);
463
return 0;
464
}
465
int j = da.GetRowNum();
466
if(j>0)
467
{
468
char tempCard[5000] = {0};
469
int k = 0;
470
for(int i=0;i<j;i++)
471
{
472
da.GetRow();
473
k+=sprintf(tempCard+k,"%s,", da.row[0]);
474
}
475
tempCard[k-1] ='\0';
476
da.FreeResult();
477
memset(sql,0,500);
478
sprintf(sql,"update tab_dxbj set ljsj = %ld where ljsj = 0 and dwbh in(%s)",m_ltime,tempCard);
479
if(da.QueryWrite(sql) == 0)
480
{
481
da.Logout();
482
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro QueryWrite2 %s fail!!\n",sql);
483
return 0;
484
}
485
}
486
da.Logout();
487
}
488
*/
489
}
490
491
void * kktjpro(void *arg)
492
{
493
494
char sql[500];
495
memset(sql,0,500);
496
time_t m_ltime; //现在的时间
497
long m_ttime; //当日0点的时间
498
struct tm *p;
499
time(&m_ltime);
500
p = localtime(&m_ltime);
501
m_ttime =m_ltime - ((p->tm_hour *60*60)+(p->tm_min *60)+(p->tm_sec));
502
// DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"0点时间:%ld!!\n",m_ttime);
503
504
while(1)
505
{
506
507
yCMysql da;
508
if(0 == da.Login("127.0.0.1","","","")) //连接数据库
509
{
510
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"kktjpro login db fail!!\n");
511
return 0;
512
513
}
514
sprintf(sql,"select dwbh,count(dwbh) as kks from tab_kk where sfyx = 1 and kksj>=%ld group by dwbh",m_ttime); //统计0点以后开卡网吧及开卡数
515
if(da.QueryRead(sql) == 0)
516
{
517
da.Logout(); //关闭连接
518
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"kktjpro QueryRead %s fail!!\n",sql);
519
return 0;
520
}
521
int k = da.GetRowNum();
522
if(k > 0)
523
{
524
char temp[1000][30]; //最高1000家
525
memset(temp,0,1000*30*sizeof(char));
526
for(int i=0;i<k;i++)
527
{
528
da.GetRow();
529
sprintf(temp[i],"%s,%s",da.row[0],da.row[1]);
530
}
531
da.FreeResult();
532
for (int j=0;j<k;j++)
533
{
534
// da.GetRow();
535
char m_dwbh[15] ={0};
536
char m_kks[15] ={0};
537
char *p = temp[j];
538
char *pt = temp[j];
539
while(1)
540
{
541
542
if(*p ==',')
543
{
544
*p = '\0';
545
sprintf(m_dwbh,"%s",pt);
546
p++;
547
pt = p;
548
}
549
else if(*p == '\0')
550
{
551
sprintf(m_kks,"%s",pt);
552
break;
553
}
554
else
555
p++;
556
}
557
558
if(atoi(m_kks) > 5) //网吧开卡数大于5张不进行统计,并删除原来当天的报警项
559
{
560
memset(sql,0,500);
561
sprintf(sql,"delete from tab_kkbj where tjsj >= %ld and dwbh = %s",m_ttime,m_dwbh);
562
if(da.QueryWrite(sql) == 0)
563
{
564
da.Logout(); //关闭连接
565
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"kktjpro QueryWrite %s fail!!\n",sql);
566
return 0;
567
}
568
continue;
569
}
570
memset(sql,0,500);
571
sprintf(sql,"select dwbh from tab_kkbj where tjsj >= %ld and dwbh = %s",m_ttime,m_dwbh); //查询开卡报警表中是否有今天网吧记录
572
if(da.QueryRead(sql) == 0)
573
{
574
da.Logout(); //关闭连接
575
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"kktjpro QueryRead %s fail!!\n",sql);
576
return 0;
577
}
578
if(da.GetRowNum() >0)
579
{
580
da.FreeResult();
581
memset(sql,0,500);
582
sprintf(sql,"update tab_kkbj set kks = %s,tjsj = %ld where tjsj >= %ld and dwbh = %s",m_kks,m_ltime,m_ttime,m_dwbh);
583
if(da.QueryWrite(sql) == 0)
584
{
585
da.Logout();
586
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"kktjpro QueryWrite %s fail!!\n",sql);
587
return 0;
588
}
589
}
590
else
591
{
592
memset(sql,0,500);
593
sprintf(sql,"insert into tab_kkbj(dwbh,kks,tjsj) values(%s,%s,%ld)",m_dwbh,m_kks,m_ltime);
594
if(da.QueryWrite(sql) == 0)
595
{
596
da.Logout();
597
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"kktjpro QueryWrite %s fail!!\n",sql);
598
return 0;
599
}
600
}
601
602
}
603
}
604
da.Logout();
605
sleep(7200);
606
}
607
608
609
}
610
611
void main()
612
{
613
sleep(5); ///暂停五秒等待数据库
614
Init();
615
pthread_t id;
616
int ret = pthread_create(&id,NULL,dxtjpro,NULL); //创建统计断线线程
617
if(ret != 0)
618
{
619
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro create fail! errcode %d\n",ret);
620
exit(0) ;
621
}
622
623
pthread_t td;
624
int m_ret = pthread_create(&td,NULL,kktjpro,NULL); //创建统计开卡线程
625
if(m_ret != 0)
626
{
627
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"kktjpro create fail! errcode %d\n",ret);
628
exit(0) ;
629
}
630
631
if(gethour() == 0) //防止程序在0点至1点重启时进行重复统计
632
{
633
sleep(7200); //暂停2个小时
634
}
635
636
while(1)
637
{
638
if(gethour() == 0) //0点统计
639
{
640
datapro();
641
sleep(7200); //暂停2个小时
642
}
643
else
644
{
645
sleep(60); //暂停1分钟
646
}
647
}
648
649
}
650
651
#include "/ty_code/common/libyfun/libyfun.h"2
//#include "libyfun.h"3
#include "tjpro.h"4
#include <time.h>5
#include <stdio.h>6
#include <memory.h>7
#include <pthread.h>8

9
GBLPARAM gb;//公有变量10

11
void Init()12
{13
//得到调试信息14
15
gb.is_debug = 1;16
gb.debug_level = 3;17
strcpy (gb.log_file, "/ty/log/tjpro.log");18
19
}20

21
int gethour()22
{23
time_t timep;24
struct tm *p;25
time(&timep);26
p= localtime(&timep);27
return p->tm_hour;28

29
}30

31
int datapro()32
{33
yCMysql da;34
if(0 == da.Login("127.0.0.1","","","")) //连接数据库35
{36
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro login db fail!!\n");37
return 0;38

39
}40
char sql[500];41
memset(sql,0,500);42

43

44
time_t m_ltime;45
time(&m_ltime); 46
time_t m_btime;47
time_t m_mtime;48
m_btime = m_ltime - 86400;49
m_mtime=m_ltime-300; //显示0点前一天的日期50
time_t m_tmtime;51
m_tmtime = m_ltime - 5184000; //60天以前52

53
//删除60天以前的记录54
sprintf(sql,"delete from tab_sxxrz where sjsj < %ld",m_tmtime); 55
if(da.QueryWrite(sql) == 0)56
{57
da.Logout();58
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tab_sxxrz QueryWrite %s fail!!\n",sql);59
return 0;60
}61

62
memset(sql,0,500);63
sprintf(sql,"delete from tab_dxbj where dxsj < %ld",m_tmtime); 64
if(da.QueryWrite(sql) == 0)65
{66
da.Logout();67
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tab_dxbj QueryWrite %s fail!!\n",sql);68
return 0;69
}70

71

72
memset(sql,0,500);73
sprintf(sql,"delete from tab_gkrz where tjsj < %ld",m_tmtime); 74
if(da.QueryWrite(sql) == 0)75
{76
da.Logout();77
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tab_gkrz QueryWrite %s fail!!\n",sql);78
return 0;79
}80

81
memset(sql,0,500);82
sprintf(sql,"delete from tab_kkbj where tjsj < %ld",m_tmtime); 83
if(da.QueryWrite(sql) == 0)84
{85
da.Logout();86
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tab_kkbj QueryWrite %s fail!!\n",sql);87
return 0;88
}89

90

91
////统计开卡92
memset(sql,0,500);93
sprintf(sql,"select dwbh,count(dwbh) as kks from tab_kk where sfyx = 1 and kksj>=%ld and kksj<%ld group by dwbh",m_btime,m_ltime); //统计0点以前24小时94
if(da.QueryRead(sql) == 0)95
{96
da.Logout(); //关闭连接97
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro QueryRead1 %s fail!!\n",sql);98
return 0;99
}100
int k = da.GetRowNum();101
if(k > 0)102
{ 103
char temp[1000][30]; //最高1000家网吧开卡104
memset(temp,0,1000*30*sizeof(char));105
for(int i=0;i<k;i++)106
{107
da.GetRow();108
sprintf(temp[i],"%s,%s",da.row[0],da.row[1]);109
}110
da.FreeResult();111
for (int j=0;j<k;j++)112
{113
// da.GetRow();114
char m_dwbh[15] ={0};115
char m_kks[15] ={0};116
char *p = temp[j];117
char *pt = temp[j];118
while(1)119
{120
if(*p ==',')121
{122
*p = '\0';123
sprintf(m_dwbh,"%s",pt);124
p++;125
pt = p;126
}127
else if(*p == '\0')128
{129
sprintf(m_kks,"%s",pt);130
break;131
}132
else133
p++;134
135
}136

137
138
if(atoi(m_kks) > 5) //网吧开卡数大于5张不进行统计,并删除原来当天的报警项139
{140
memset(sql,0,500);141
sprintf(sql,"delete from tab_kkbj where tjsj >= %ld and dwbh = %s",m_btime,m_dwbh); 142
if(da.QueryWrite(sql) == 0)143
{144
da.Logout(); //关闭连接145
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro QueryWrite %s fail!!\n",sql);146
return 0;147
}148
continue;149
}150

151
memset(sql,0,500); 152
sprintf(sql,"select dwbh from tab_kkbj where tjsj >= %ld and dwbh = %s",m_btime,m_dwbh); //查询开卡报警表中是否有今天网吧记录153
if(da.QueryRead(sql) == 0)154
{155
da.Logout(); //关闭连接156
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro QueryRead2 %s fail!!\n",sql);157
return 0;158
}159
if(da.GetRowNum() >0)160
{ 161
memset(sql,0,500);162
sprintf(sql,"update tab_kkbj set kks = %s,tjsj = %ld where tjsj >= %ld and dwbh = %s",m_kks,m_mtime,m_btime,m_dwbh);163
if(da.QueryWrite(sql) == 0)164
{165
da.Logout();166
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro QueryWrite1 %s fail!!\n",sql);167
return 0;168
}169
}170
else171
{172
memset(sql,0,500);173
sprintf(sql,"insert into tab_kkbj(dwbh,kks,tjsj) values(%s,%s,%ld)",m_dwbh,m_kks,m_mtime);174
if(da.QueryWrite(sql) == 0)175
{176
da.Logout();177
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro QueryWrite2 %s fail!!\n",sql);178
return 0;179
}180
}181
da.FreeResult();182
}183
}184

185

186
/*187
sprintf(sql,"select dwbh from tab_kk where kksj>%ld",m_btime);188
if(da.QueryRead(sql) == 0)189
{190
da.Logout(); //关闭连接191
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro QueryRead %s fail!!\n",sql);192
return 0;193
}194

195
if(da.GetRowNum() > 0)196
{ 197
da.FreeResult();198
memset(sql,0,500); 199
sprintf(sql,"insert into tab_kkbj(dwbh,kks,tjsj) select dwbh,count(dwbh) as kks,%ld as tjsj from tab_kk where kksj>%ld group by dwbh",m_ltime,m_btime);200
if(da.QueryWrite(sql) == 0)201
{202
da.Logout();203
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro QueryWrite %s fail!!\n",sql);204
return 0;205
}206
}207
*/208

209

210
// 统计公卡日志211
memset(sql,0,500);212
sprintf(sql,"select sl from tab_tjpz where mc='gkcs'");213
if(da.QueryRead(sql) == 0)214
{215
da.Logout(); //关闭连接216
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro QueryRead %s fail!!\n",sql);217
return 0;218
}219
char gkcs[4] = {0};220
da.GetRow();221
sprintf(gkcs,"%s",da.row[0]);222
da.FreeResult();223

224

225

226
memset(sql,0,500);227
sprintf(sql,"select kh,dwbh,count(kh) as sjcs from tab_sxxrz where sjsj>=%ld group by kh,dwbh",m_btime);228
if(da.QueryRead(sql) == 0)229
{230
da.Logout(); //关闭连接231
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro QueryRead %s fail!!\n",sql);232
return 0;233
}234
int gk = da.GetRowNum();235
if(gk > 0)236
{ 237
char tempgk[200000][35]; //最高20万人次238
memset(tempgk,0,200000*35*sizeof(char));239
for(int i=0;i<gk;i++)240
{241
da.GetRow();242
sprintf(tempgk[i],"%s,%s:%s",da.row[0],da.row[1],da.row[2]);243
}244
da.FreeResult();245
for (int j=0;j<gk;j++)246
{247
// da.GetRow();248
char m_kh[15] ={0};249
char m_dwbh[15] ={0};250
char m_sjcs[15] ={0};251
char *p = tempgk[j];252
char *pt = tempgk[j];253
while(1)254
{255
if(*p ==',')256
{257
*p = '\0';258
sprintf(m_kh,"%s",pt);259
p++;260
pt = p;261
}262
else if(*p == ':')263
{264
*p = '\0';265
sprintf(m_dwbh,"%s",pt);266
p++;267
pt = p;268
269
}270
else if(*p == '\0')271
{272
273
sprintf(m_sjcs,"%s",pt);274
break;275
}276
else277
p++;278
279
}280
281
if(atoi(m_sjcs) < atoi(gkcs))282
{283
continue;284
}285
sprintf(sql,"insert into tab_gkrz(kh,dwbh,sjcs,tjsj) values('%s',%s,%s,%ld)",m_kh,m_dwbh,m_sjcs,m_mtime);286
if(da.QueryWrite(sql) == 0)287
{288
da.Logout();289
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro QueryWrite3 %s fail!!\n",sql);290
return 0;291
}292
293
294
}295
}296
/*297
sprintf(sql,"insert into tab_gkrz(kh,dwbh,sjcs,tjsj) select kh,dwbh,count(kh) as sjcs,%ld as tjsj from tab_sxxrz where sjsj>%ld group by kh,dwbh",m_mtime,m_btime);298
if(da.QueryWrite(sql) == 0)299
{300
da.Logout();301
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro QueryWrite3 %s fail!!\n",sql);302
return 0;303
}304

305

306
*/307
308
da.Logout();309
return 1;310

311
}312

313
void * dxtjpro(void *arg)314
{315

316

317
while(1)318
{319
sleep(298); //等待5分钟320
////////////321
yCMysql da;322
if(0 == da.Login("127.0.0.1","","","")) //连接数据库323
{324
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro login db fail!!\n");325
return 0;326
}327
char sql[5100];328
memset(sql,0,5100);329
time_t m_ltime; //现在的时间330
time_t m_btime;331
time(&m_ltime); 332
m_btime = m_ltime - 300; //333
334
335
memset(sql,0,5100);336

337
sprintf(sql,"select dwbh from tab_dxbj where ljsj = 0");338
if(da.QueryRead(sql) == 0)339
{340
da.Logout(); //关闭连接341
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro QueryRead %s fail!!\n",sql);342
return 0;343
}344
int m = da.GetRowNum();345
if(m>0) 346
{347
char tempdwbh[5000] = {0}; //最高500家9位编号 348
int k = 0;349
for(int n=0;n<m;n++)350
{351
da.GetRow();352
k+=sprintf(tempdwbh+k,"%s,", da.row[0]);353
}354
tempdwbh[k-1] ='\0';355
da.FreeResult();356
memset(sql,0,5100); 357
sprintf(sql,"insert into tab_dxbj(dwbh,dxsj,ljsj) (select dwbh,wssj,0 as ljsj from tab_dwzl where wssj<%ld and dwbh not in(%s))",m_btime,tempdwbh);358
if(da.QueryWrite(sql) == 0)359
{360
da.Logout();361
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro QueryWrite %s fail!!\n",sql);362
return 0;363
}364
}365
else366
{367
memset(sql,0,5100); 368
sprintf(sql,"insert into tab_dxbj(dwbh,dxsj,ljsj) (select dwbh,wssj,0 as ljsj from tab_dwzl where wssj<%ld)",m_btime);369
if(da.QueryWrite(sql) == 0)370
{371
da.Logout();372
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro QueryWrite %s fail!!\n",sql);373
return 0;374
}375
}376

377

378

379
///在5分钟内有握手的断线编号全部置为连接380
memset(sql,0,5100);381
sprintf(sql,"select dwbh from tab_dwzl where wssj>=%ld",m_btime);382
if(da.QueryRead(sql) == 0)383
{384
da.Logout(); //关闭连接385
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro QueryRead2 %s fail!!\n",sql);386
return 0;387
}388
int j = da.GetRowNum();389
if(j>0) 390
{391
char tempCard[5000] = {0};392
int k = 0;393
for(int i=0;i<j;i++)394
{395
da.GetRow();396
k+=sprintf(tempCard+k,"%s,", da.row[0]);397
}398
tempCard[k-1] ='\0';399
da.FreeResult();400
memset(sql,0,500); 401
sprintf(sql,"update tab_dxbj set ljsj = %ld where ljsj = 0 and dwbh in(%s)",m_ltime,tempCard); 402
if(da.QueryWrite(sql) == 0)403
{404
da.Logout();405
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro QueryWrite2 %s fail!!\n",sql);406
return 0;407
}408
}409
da.Logout();410
}411

412
/*413

414
/////////////415

416
while(1)417
{418
sleep(88); //等待 419
// yCMysql da;420
if(0 == da.Login("127.0.0.1","operator","operator","dbs_whbzx")) //连接数据库421
{422
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro login db fail!!\n");423
return 0;424

425
}426
// char sql[500];427
// memset(sql,0,5100);428
// time_t m_ltime; //现在的时间429
// time_t m_btime;430
time(&m_ltime); 431
time_t m_bbtime;432
m_btime = m_ltime - 90; //433
m_bbtime = m_ltime - 180; //434
435
memset(sql,0,5100); 436
sprintf(sql,"select dwbh from tab_dwzl where wssj>=%ld and wssj<%ld",m_bbtime,m_btime); //90至180新断线437
if(da.QueryRead(sql) == 0)438
{439
da.Logout(); //关闭连接440
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro QueryRead1 %s fail!!\n",sql);441
return 0;442
}443
if(da.GetRowNum() > 0)444
{ 445
memset(sql,0,5100); 446
sprintf(sql,"insert into tab_dxbj(dwbh,dxsj,ljsj) (select dwbh,wssj,0 as ljsj from tab_dwzl where wssj>=%ld and wssj<%ld)",m_bbtime,m_btime); //握手时间前90至180的插入报警表447
if(da.QueryWrite(sql) == 0)448
{449
da.Logout();450
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro QueryWrite1 %s fail!!\n",sql);451
return 0;452
}453
}454
da.FreeResult();455

456
///在90秒内有握手的断线编号全部置为连接457
memset(sql,0,5100);458
sprintf(sql,"select dwbh from tab_dwzl where wssj>=%ld",m_btime);459
if(da.QueryRead(sql) == 0)460
{461
da.Logout(); //关闭连接462
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro QueryRead2 %s fail!!\n",sql);463
return 0;464
}465
int j = da.GetRowNum();466
if(j>0) 467
{468
char tempCard[5000] = {0};469
int k = 0;470
for(int i=0;i<j;i++)471
{472
da.GetRow();473
k+=sprintf(tempCard+k,"%s,", da.row[0]);474
}475
tempCard[k-1] ='\0';476
da.FreeResult();477
memset(sql,0,500); 478
sprintf(sql,"update tab_dxbj set ljsj = %ld where ljsj = 0 and dwbh in(%s)",m_ltime,tempCard); 479
if(da.QueryWrite(sql) == 0)480
{481
da.Logout();482
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro QueryWrite2 %s fail!!\n",sql);483
return 0;484
}485
} 486
da.Logout();487
}488
*/489
}490

491
void * kktjpro(void *arg)492
{493
494
char sql[500];495
memset(sql,0,500);496
time_t m_ltime; //现在的时间497
long m_ttime; //当日0点的时间498
struct tm *p;499
time(&m_ltime); 500
p = localtime(&m_ltime);501
m_ttime =m_ltime - ((p->tm_hour *60*60)+(p->tm_min *60)+(p->tm_sec));502
// DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"0点时间:%ld!!\n",m_ttime);503
504
while(1)505
{506

507
yCMysql da;508
if(0 == da.Login("127.0.0.1","","","")) //连接数据库509
{510
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"kktjpro login db fail!!\n");511
return 0;512

513
}514
sprintf(sql,"select dwbh,count(dwbh) as kks from tab_kk where sfyx = 1 and kksj>=%ld group by dwbh",m_ttime); //统计0点以后开卡网吧及开卡数515
if(da.QueryRead(sql) == 0)516
{517
da.Logout(); //关闭连接518
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"kktjpro QueryRead %s fail!!\n",sql);519
return 0;520
}521
int k = da.GetRowNum();522
if(k > 0)523
{ 524
char temp[1000][30]; //最高1000家525
memset(temp,0,1000*30*sizeof(char));526
for(int i=0;i<k;i++)527
{528
da.GetRow();529
sprintf(temp[i],"%s,%s",da.row[0],da.row[1]);530
}531
da.FreeResult();532
for (int j=0;j<k;j++)533
{534
// da.GetRow();535
char m_dwbh[15] ={0};536
char m_kks[15] ={0};537
char *p = temp[j];538
char *pt = temp[j];539
while(1)540
{541

542
if(*p ==',')543
{544
*p = '\0';545
sprintf(m_dwbh,"%s",pt);546
p++;547
pt = p;548
}549
else if(*p == '\0')550
{551
sprintf(m_kks,"%s",pt);552
break;553
}554
else555
p++;556
}557

558
if(atoi(m_kks) > 5) //网吧开卡数大于5张不进行统计,并删除原来当天的报警项559
{560
memset(sql,0,500);561
sprintf(sql,"delete from tab_kkbj where tjsj >= %ld and dwbh = %s",m_ttime,m_dwbh); 562
if(da.QueryWrite(sql) == 0)563
{564
da.Logout(); //关闭连接565
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"kktjpro QueryWrite %s fail!!\n",sql);566
return 0;567
}568
continue;569
}570
memset(sql,0,500); 571
sprintf(sql,"select dwbh from tab_kkbj where tjsj >= %ld and dwbh = %s",m_ttime,m_dwbh); //查询开卡报警表中是否有今天网吧记录572
if(da.QueryRead(sql) == 0)573
{574
da.Logout(); //关闭连接575
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"kktjpro QueryRead %s fail!!\n",sql);576
return 0;577
}578
if(da.GetRowNum() >0)579
{ 580
da.FreeResult();581
memset(sql,0,500);582
sprintf(sql,"update tab_kkbj set kks = %s,tjsj = %ld where tjsj >= %ld and dwbh = %s",m_kks,m_ltime,m_ttime,m_dwbh);583
if(da.QueryWrite(sql) == 0)584
{585
da.Logout();586
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"kktjpro QueryWrite %s fail!!\n",sql);587
return 0;588
}589
}590
else591
{592
memset(sql,0,500);593
sprintf(sql,"insert into tab_kkbj(dwbh,kks,tjsj) values(%s,%s,%ld)",m_dwbh,m_kks,m_ltime);594
if(da.QueryWrite(sql) == 0)595
{596
da.Logout();597
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"kktjpro QueryWrite %s fail!!\n",sql);598
return 0;599
}600
}601
602
}603
}604
da.Logout();605
sleep(7200);606
}607

608

609
}610

611
void main()612
{613
sleep(5); ///暂停五秒等待数据库614
Init();615
pthread_t id;616
int ret = pthread_create(&id,NULL,dxtjpro,NULL); //创建统计断线线程617
if(ret != 0)618
{619
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro create fail! errcode %d\n",ret);620
exit(0) ;621
}622

623
pthread_t td;624
int m_ret = pthread_create(&td,NULL,kktjpro,NULL); //创建统计开卡线程625
if(m_ret != 0)626
{627
DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"kktjpro create fail! errcode %d\n",ret);628
exit(0) ;629
} 630

631
if(gethour() == 0) //防止程序在0点至1点重启时进行重复统计632
{633
sleep(7200); //暂停2个小时634
}635

636
while(1)637
{638
if(gethour() == 0) //0点统计639
{640
datapro(); 641
sleep(7200); //暂停2个小时642
}643
else 644
{645
sleep(60); //暂停1分钟646
}647
}648

649
}650

651



