idcol_sumData.php 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. <?php
  2. // 计算灯控历史数据脚本
  3. require_once './DB.php';
  4. date_default_timezone_set('Asia/Shanghai');
  5. $config = [
  6. 'hostname' => 'rm-wz98r5cn33zq4ou980o.mysql.rds.aliyuncs.com',
  7. 'username' => 'idcol20',
  8. 'password' => 'idcol@1234',
  9. 'dbname' => 'idcol',
  10. ];
  11. while (1) {
  12. $db = new Db($config);
  13. $t = date('H:i',time());
  14. // if ($t == '02:05') {
  15. if (1) {
  16. $lampList = $db->query('select id,updatetime from lampinfo order by id asc');
  17. $minTime = $db->query('select max(updatetime) as minTime from new_statistics where updatetime is not null');
  18. if (empty($minTime) || empty($minTime[0]) || empty($minTime[0]['minTime'])) {
  19. $sql = 'select min(updatetime) as minTime from realtime_info_log where updatetime is not null AND updatetime != "1970-01-01 08:00:00"';
  20. $minTime = $db->query($sql);
  21. // var_dump($minTime);die;
  22. }
  23. // var_dump($minTime);die;
  24. $sum = floor((time() - strtotime($minTime[0]['minTime'])) / 86400);
  25. // var_dump($sum);die;
  26. for ($i=0; $i < $sum; $i++) {
  27. $fromDate = date('Y-m-d 00:00:00',strtotime($minTime[0]['minTime']) + ($i+1) * 24 * 3600);
  28. $toDate = date('Y-m-d 23:59:59',strtotime($minTime[0]['minTime']) + ($i+1) * 24 * 3600);
  29. // $fromDate = date('Y-m-d 00:00:00',time() - 24 * 3600);
  30. // $toDate = date('Y-m-d 23:59:59',time() - 24 * 3600);
  31. // var_dump($fromDate);var_dump($toDate);
  32. $sql = 'select lampid from statistics WHERE updatetime >= "'.$fromDate.'" AND updatetime <= "'.$toDate.'"';
  33. $data = $db->query($sql);
  34. // $lampidData = [];
  35. // foreach ($data as $v) {
  36. // $lampidData[] = $v['lampid'];
  37. // }
  38. foreach ($lampList as $value) {
  39. if (empty($value['updatetime'])) continue;
  40. // if (in_array($value['id'], $lampidData)) continue;
  41. // if (empty($data[0]['id'])) {
  42. $sql = 'select max(updatetime) as maxTime from realtime_info_log WHERE updatetime >= "'.$fromDate.'" AND updatetime <= "'.$toDate.'" AND lampid = '.$value['id'];
  43. $updatetime = $db->query($sql);
  44. // var_dump($updatetime);
  45. if (empty($updatetime[0]['maxTime'])) {
  46. usleep(10000);
  47. continue;
  48. }
  49. $res = get_data($value['id'],$updatetime[0]['maxTime'],$db);
  50. // var_dump($res);
  51. $res['lampid'] = $value['id'];
  52. $res['updatetime'] = $updatetime[0]['maxTime'];
  53. $db->table('statistics')->insert($res);
  54. $lampData = $db->query('select id from new_statistics WHERE lampid = '.$value['id'].' AND date_format(updatetime,"%Y-%m-%d") = "'.date('Y-m-d',strtotime($res['updatetime'])).'"');
  55. if (!empty($lampData) && !empty($lampData[0]['id'])) {
  56. $db->table('new_statistics')->where('id='.$lampData[0]['id'])->update($res);
  57. }else{
  58. $db->table('new_statistics')->insert($res);
  59. }
  60. usleep(100000);
  61. // }
  62. }
  63. }
  64. }
  65. $db->close();
  66. sleep(3600);
  67. }
  68. function get_data($id,$date,$db){
  69. $table = 'realtime_info_log';
  70. $beginDateDay = date('Y-m-d 00:00:00',strtotime($date));
  71. $endDateDay = date('Y-m-d 23:59:59',strtotime($date));
  72. $beginDateMonth = date('Y-m-01 00:00:00', strtotime($date));
  73. $endDateMonth = date('Y-m-d 23:59:59', strtotime($date));
  74. $beginDateYear = date('Y-01-01 00:00:00', strtotime($date));
  75. $endDateYear = date('Y-m-d 23:59:59', strtotime($date));
  76. // 当天发电量,用电量
  77. $query = "SELECT lampid,chargeday as daygeneration,dischargeday as dayconsumption FROM {$table}
  78. WHERE lampid =".$id."
  79. AND updatetime>='".$beginDateDay."'
  80. AND updatetime<='".$endDateDay."' order by updatetime desc limit 1";
  81. $query = $db->query($query);
  82. $data['dayGeneration'] = empty($query[0]['daygeneration']) ? 0 : round($query[0]['daygeneration'],2);
  83. $data['dayConsumption'] = empty($query[0]['dayconsumption']) ? 0 : round($query[0]['dayconsumption'],2);
  84. // 总发电量,总用电量
  85. $query = "SELECT totalchargeah as totalgeneration,totaldischarah as totalconsumption FROM history_info_log
  86. WHERE lampid =".$id."
  87. AND updatetime>='".$beginDateDay."'
  88. AND updatetime<='".$endDateDay."' order by updatetime desc limit 1";
  89. $query = $db->query($query);
  90. $data['totalGeneration'] = empty($query[0]['totalgeneration']) ? 0 : round($query[0]['totalgeneration'],2);
  91. $data['totalConsumption'] = empty($query[0]['totalconsumption']) ? 0 : round($query[0]['totalconsumption'],2);
  92. //月发电量和用电量
  93. $query = "SELECT totalchargeah AS lastmonthgeneration,totaldischarah AS lastmonthconsumption FROM history_info_log
  94. WHERE lampid =".$id." AND updatetime<'".$beginDateMonth."' order by updatetime desc limit 1";
  95. $query = $db->query($query);
  96. $query[0]['lastmonthgeneration'] = empty($query[0]['lastmonthgeneration']) ? 0 : round($query[0]['lastmonthgeneration'],2);
  97. $query[0]['lastmonthconsumption'] = empty($query[0]['lastmonthconsumption']) ? 0 : round($query[0]['lastmonthconsumption'],2);
  98. $data['monthConsumption'] = $query[0]['lastmonthconsumption'] >= $data['totalConsumption'] ? 0 : $data['totalConsumption'] - $query[0]['lastmonthconsumption'];
  99. $data['monthGeneration'] = $query[0]['lastmonthgeneration'] >= $data['totalGeneration'] ? 0 : $data['totalGeneration'] - $query[0]['lastmonthgeneration'];
  100. //年发电量和用电量
  101. $query = "SELECT totalchargeah AS lastyeargeneration,totaldischarah AS lastyearconsumption FROM history_info_log
  102. WHERE lampid =".$id." AND updatetime<'".$beginDateYear."'";
  103. $query = $db->query($query);
  104. $query[0]['lastyeargeneration'] = empty($query[0]['lastyeargeneration']) ? 0 : round($query[0]['lastyeargeneration'],2);
  105. $query[0]['lastyearconsumption'] = empty($query[0]['lastyearconsumption']) ? 0 : round($query[0]['lastyearconsumption'],2);
  106. $data['yearConsumption'] = $query[0]['lastyearconsumption'] >= $data['totalConsumption'] ? 0 : $data['totalConsumption'] - $query[0]['lastyearconsumption'];
  107. $data['yearGeneration'] = $query[0]['lastyeargeneration'] >= $data['totalGeneration'] ? 0 : $data['totalGeneration'] - $query[0]['lastyeargeneration'];
  108. // 当天蓄电池累计数据
  109. $query = "SELECT max(daycharmaxcurrent) as dayCharMaxCurr,max(daydischarmaxcurrent) as dayDischarMaxCurr,min(daybattmintemper) as dayMinTemper,max(daybattmaxtemper) as dayMaxTemper,max(daychargemaxpow) as dayCharMaxPower,max(daydischarmaxpow) as dayDischarMaxPower,max(voltagedaymax) as dayMaxVoltage,min(voltagedaymin) as dayMinVoltage FROM realtime_info_log
  110. WHERE lampid =".$id."
  111. AND updatetime>='".$beginDateDay."'
  112. AND updatetime<='".$endDateDay."'";
  113. $query = $db->query($query);
  114. $data['dayCharMaxCurr'] = empty($query[0]['dayCharMaxCurr']) ? 0 : round($query[0]['dayCharMaxCurr'],2);
  115. $data['dayDischarMaxCurr'] = empty($query[0]['dayDischarMaxCurr']) ? 0 : round($query[0]['dayDischarMaxCurr'],2);
  116. $data['dayMinTemper'] = empty($query[0]['dayMinTemper']) ? 0 : round($query[0]['dayMinTemper'],2);
  117. $data['dayMaxTemper'] = empty($query[0]['dayMaxTemper']) ? 0 : round($query[0]['dayMaxTemper'],2);
  118. $data['dayCharMaxPower'] = empty($query[0]['dayCharMaxPower']) ? 0 : round($query[0]['dayCharMaxPower'],2);
  119. $data['dayDischarMaxPower'] = empty($query[0]['dayDischarMaxPower']) ? 0 : round($query[0]['dayDischarMaxPower'],2);
  120. $data['dayMaxVoltage'] = empty($query[0]['dayMaxVoltage']) ? 0 : round($query[0]['dayMaxVoltage'],2);
  121. $data['dayMinVoltage'] = empty($query[0]['dayMinVoltage']) ? 0 : round($query[0]['dayMinVoltage'],2);
  122. // 当月蓄电池累计数据
  123. $query = "SELECT max(daycharmaxcurrent) as monthCharMaxCurr,max(daydischarmaxcurrent) as monthDischarMaxCurr,min(daybattmintemper) as monthMinTemper,max(daybattmaxtemper) as monthMaxTemper,max(daychargemaxpow) as monthCharMaxPower,max(daydischarmaxpow) as monthDischarMaxPower,max(voltagedaymax) as monthMaxVoltage,min(voltagedaymin) as monthMinVoltage FROM realtime_info_log
  124. WHERE lampid =".$id."
  125. AND updatetime>='".$beginDateMonth."'
  126. AND updatetime<='".$endDateMonth."'";
  127. $query = $db->query($query);
  128. $data['monthCharMaxCurr'] = empty($query[0]['monthCharMaxCurr']) ? 0 : round($query[0]['monthCharMaxCurr'],2);
  129. $data['monthDischarMaxCurr'] = empty($query[0]['monthDischarMaxCurr']) ? 0 : round($query[0]['monthDischarMaxCurr'],2);
  130. $data['monthMinTemper'] = empty($query[0]['monthMinTemper']) ? 0 : round($query[0]['monthMinTemper'],2);
  131. $data['monthMaxTemper'] = empty($query[0]['monthMaxTemper']) ? 0 : round($query[0]['monthMaxTemper'],2);
  132. $data['monthCharMaxPower'] = empty($query[0]['monthCharMaxPower']) ? 0 : round($query[0]['monthCharMaxPower'],2);
  133. $data['monthDischarMaxPower'] = empty($query[0]['monthDischarMaxPower']) ? 0 : round($query[0]['monthDischarMaxPower'],2);
  134. $data['monthMaxVoltage'] = empty($query[0]['monthMaxVoltage']) ? 0 : round($query[0]['monthMaxVoltage'],2);
  135. $data['monthMinVoltage'] = empty($query[0]['monthMinVoltage']) ? 0 : round($query[0]['monthMinVoltage'],2);
  136. // 当年蓄电池累计数据
  137. $query = "SELECT max(daycharmaxcurrent) as yearCharMaxCurr,max(daydischarmaxcurrent) as yearDischarMaxCurr,min(daybattmintemper) as yearMinTemper,max(daybattmaxtemper) as yearMaxTemper,max(daychargemaxpow) as yearCharMaxPower,max(daydischarmaxpow) as yearDischarMaxPower,max(voltagedaymax) as yearMaxVoltage,min(voltagedaymin) as yearMinVoltage FROM realtime_info_log
  138. WHERE lampid =".$id."
  139. AND updatetime>='".$beginDateYear."'
  140. AND updatetime<='".$endDateYear."'";
  141. $query = $db->query($query);
  142. $data['yearCharMaxCurr'] = empty($query[0]['yearCharMaxCurr']) ? 0 : round($query[0]['yearCharMaxCurr'],2);
  143. $data['yearDischarMaxCurr'] = empty($query[0]['yearDischarMaxCurr']) ? 0 : round($query[0]['yearDischarMaxCurr'],2);
  144. $data['yearMinTemper'] = empty($query[0]['yearMinTemper']) ? 0 : round($query[0]['yearMinTemper'],2);
  145. $data['yearMaxTemper'] = empty($query[0]['yearMaxTemper']) ? 0 : round($query[0]['yearMaxTemper'],2);
  146. $data['yearCharMaxPower'] = empty($query[0]['yearCharMaxPower']) ? 0 : round($query[0]['yearCharMaxPower'],2);
  147. $data['yearDischarMaxPower'] = empty($query[0]['yearDischarMaxPower']) ? 0 : round($query[0]['yearDischarMaxPower'],2);
  148. $data['yearMaxVoltage'] = empty($query[0]['yearMaxVoltage']) ? 0 : round($query[0]['yearMaxVoltage'],2);
  149. $data['yearMinVoltage'] = empty($query[0]['yearMinVoltage']) ? 0 : round($query[0]['yearMinVoltage'],2);
  150. return $data;
  151. }
  152. ?>