CronAction.class.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <?php
  2. class CronAction extends Action {
  3. public function deleteWdRecords( ){
  4. $config = C('ORACLE_CONFIG');
  5. $host= $config['host'];
  6. $port= $config['port'];
  7. $instance_name= $config['instance_name'];
  8. $username= $config['username'];
  9. $password= $config['password'];
  10. /*
  11. $host= '192.168.100.23';
  12. $port= '1521';
  13. $instance_name= 'helowin';
  14. $username= 'DSSC3';
  15. $password= 'Rliandssc3';
  16. */
  17. $conn = oci_connect($username, $password, $host.':'.$port.'/'. $instance_name,'AL32UTF8');
  18. if (!$conn) {
  19. $e = oci_error();
  20. trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
  21. }
  22. $min_id=0;
  23. $query_sql='select ID from DSSC2.W_DW_RF_RECORD where rownum = 1 order by ID Asc ';
  24. $stid = oci_parse($conn, $query_sql);
  25. oci_define_by_name($stid, 'ID', $min_id);
  26. oci_execute($stid);
  27. oci_fetch($stid);
  28. $max_id=0;
  29. $query_sql='select ID from DSSC2.W_DW_RF_RECORD where rownum = 1 order by ID Desc ';
  30. $stid = oci_parse($conn, $query_sql);
  31. oci_define_by_name($stid, 'ID', $max_id);
  32. oci_execute($stid);
  33. oci_fetch($stid);
  34. if(($max_id-$min_id )<2900000000){
  35. echo '['.date('Y-m-d H:i:s').']无数据删除,起始ID:'.$min_id.',结束ID:'.$max_id.PHP_EOL;
  36. oci_close($conn);
  37. return;
  38. }
  39. $time=date("Y-m-d",strtotime("-1 day"));
  40. $where=array(
  41. 'date'=>$time
  42. );
  43. $count=M('station_passing')->where($where)->sum('num');
  44. echo '['.date('Y-m-d H:i:s').']删除:'.$count.'数据,起始ID:'.$min_id.PHP_EOL;
  45. for($i=0;$i<=$count;$i++){
  46. $del_sql='DELETE FROM DSSC2.W_DW_RF_RECORD WHERE ID = '.$min_id;
  47. $stid = oci_parse($conn, $del_sql);
  48. $r = oci_execute($stid);
  49. oci_free_statement($stid);
  50. $min_id++;
  51. }
  52. oci_close($conn);
  53. /*
  54. ;
  55. $length=C('ORACLE_DATA_LENGTH')?C('ORACLE_DATA_LENGTH'):800000000;
  56. $delete_id=$max_id-$length;
  57. while($min_id<=$delete_id){
  58. $del_sql='DELETE FROM DSSC2.W_DW_RF_RECORD WHERE ID = '.$min_id;
  59. $stid = oci_parse($conn, $del_sql);
  60. $r = oci_execute($stid);
  61. oci_free_statement($stid);
  62. $min_id++;
  63. }
  64. oci_close($conn);
  65. */
  66. }
  67. public function monitor_proces( ){
  68. //检测 消费进程是否正常消费
  69. $redis = Redis("nbfd_monitor_process_id","hash");
  70. $list=$redis->select();
  71. foreach($list as $key=>$val){
  72. $item=json_decode($val,true);
  73. $int=time()-$item['time'];
  74. if($int>12*3600){
  75. posix_kill($item['pid'], SIGHUP);
  76. $redis->where($key)->delete();
  77. }
  78. }
  79. //检测ftp目录文件是否堆积
  80. $dir=C('FTP_LOCAL_DIR');
  81. $arr = scandir($dir);
  82. $all = count($arr)-2;//所有文件总数除./和../
  83. if($all>=20){
  84. //超过20则推送告警 并记录告警时间 间隔多久推送一次
  85. $str='目录'.$dir.'文件堆积数量过多,堆积数:'.$all;
  86. $email=C('FTP_DIR_ALARM_EMAIL');
  87. $config = new Darabonba\OpenApi\Models\Config([
  88. // 必填,您的 AccessKey ID
  89. "accessKeyId" =>'LTAI4FecTAyMPdhAdkUwhAGA',
  90. // 必填,您的 AccessKey Secret
  91. "accessKeySecret" =>'Ih0knSSfcje3OUi1YrdjeXQZYIfmTK'
  92. ]);
  93. // 访问的域名
  94. $config->endpoint = "dm.aliyuncs.com";
  95. $client =new \AlibabaCloud\SDK\Dm\V20151123\Dm($config);
  96. $singleSendMailRequest =new \AlibabaCloud\SDK\Dm\V20151123\Models\SingleSendMailRequest([
  97. "addressType" => 1,
  98. "accountName" => "system@fdmail.renlianiot.com",
  99. "tagName" => "renlianiot",
  100. "toAddress" =>$email,
  101. "htmlBody" => $str,
  102. "replyToAddress" => true,
  103. "subject" => "防盗监控告警"
  104. ]);
  105. $resp = $client->singleSendMail($singleSendMailRequest);
  106. }
  107. // var_dump($resp);
  108. }
  109. public function deleteVehicle( ){
  110. $config = C('ORACLE_CONFIG');
  111. $host= $config['host'];
  112. $port= $config['port'];
  113. $instance_name= $config['instance_name'];
  114. $username= $config['username'];
  115. $password= $config['password'];
  116. $conn = oci_connect($username, $password, $host.':'.$port.'/'. $instance_name,'AL32UTF8');
  117. $total=9000000;
  118. $count=0;
  119. for($i=0;$i<=$total;$i++){
  120. $start=$i;
  121. $end=$i+1;
  122. echo '---start---'.$start.PHP_EOL;
  123. $sql = 'SELECT * FROM ( SELECT o.ID,o.PLATE_NO,o.CAR_TYPE,o.CAR_BRAND,s.ID,s.RFID_SN,s.INSTALLER,ROWNUM RN FROM DSSC3.W_DW_NON_MOTOR o,DSSC3.W_DW_RFID_TAGS s WHERE ROWNUM <= '.$end.' AND o.rfid_id = s.id ) WHERE RN >'.$start;
  124. $stid = oci_parse($conn, $sql);
  125. $r = oci_execute($stid);
  126. while($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
  127. // var_dump($row);
  128. //查询与车辆相同车牌信息
  129. $sql = 'SELECT * FROM ( SELECT o.ID,o.PLATE_NO,o.CAR_TYPE,o.CAR_BRAND,s.ID,s.RFID_SN,s.INSTALLER,ROWNUM RN FROM DSSC3.W_DW_NON_MOTOR o,DSSC3.W_DW_RFID_TAGS s WHERE ROWNUM <=100 AND o.PLATE_NO= \''.$row['PLATE_NO'].'\' AND o.rfid_id = s.id ORDER BY s.INSTALLER DESC ) WHERE RN >0';
  130. $stid = oci_parse($conn, $sql);
  131. $r = oci_execute($stid);
  132. $rows=[];
  133. while($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
  134. $rows[]=$row;
  135. }
  136. foreach($rows as $key=>$vitem){
  137. //保留第一个不删除
  138. $sql2='DELETE FROM DSSC3.W_DW_NON_MOTOR WHERE ID in ('.$vitem['ID'].')';
  139. $stid = oci_parse($conn, $sql2);
  140. $r = oci_execute($stid);
  141. }
  142. }
  143. oci_free_statement($stid);
  144. }
  145. }
  146. }