|
@@ -0,0 +1,386 @@
|
|
|
+<?php
|
|
|
+namespace app\api\controller\ue;
|
|
|
+
|
|
|
+use app\common\model\EnergyParam;
|
|
|
+use app\hander\HelpHander;
|
|
|
+use think\Controller;
|
|
|
+use think\Db;
|
|
|
+
|
|
|
+class Energy extends Base {
|
|
|
+
|
|
|
+ // 首页统计
|
|
|
+ public function sytj(){
|
|
|
+ $deviceCount = Db::name('energy_device')->where('org_id',$this->orgId)->where('del',0)->count(); // 设备总数
|
|
|
+ $deviceCount1 = Db::name('energy_device')->where('org_id',$this->orgId)->where('del',0)->where('status',1)->count(); // 在线数
|
|
|
+
|
|
|
+ // 今日消耗
|
|
|
+ $day = date('Y-m-d');
|
|
|
+ $degree = (new EnergyParam())->getDegreeByDay($this->orgId,$day);
|
|
|
+
|
|
|
+ // 昨日消耗
|
|
|
+ $yday = date('Y-m-d',time() - 24*60*60);
|
|
|
+ $ydegree = (new EnergyParam())->getDegreeByDay($this->orgId,$yday);
|
|
|
+
|
|
|
+ // 实时功率
|
|
|
+ $power = (new EnergyParam())->getPower($this->orgId);
|
|
|
+
|
|
|
+ $data = [
|
|
|
+ 'deviceCount' => $deviceCount,
|
|
|
+ 'deviceCount1' => $deviceCount1,
|
|
|
+ 'degree' => round($degree,2),
|
|
|
+ 'ydegree' => round($ydegree,2),
|
|
|
+ 'power' => round($power,2),
|
|
|
+ ];
|
|
|
+ HelpHander::success($data);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 配电房数据
|
|
|
+ public function room(){
|
|
|
+ $rooms = Db::name('energy_room')->where('org_id',$this->orgId)->where('del',0)->field('id,title,ueid')->select();
|
|
|
+ foreach ($rooms as $k=>$v){
|
|
|
+ $temp = '';
|
|
|
+ $humi = '';
|
|
|
+ // 温湿度设备
|
|
|
+ $wsddevice = Db::name('energy_device')->where('org_id',$this->orgId)->where('del',0)->where('cate',3)->find();
|
|
|
+ if($wsddevice){
|
|
|
+ $wsdparam = Db::name('energy_param')->where('device_sn',$wsddevice['sn'])->order('report_time desc')->find();
|
|
|
+ if($wsdparam){ // {"Temp":"23.500000","Humi":"49.000000"}
|
|
|
+ $content = json_decode($wsdparam['content'],true);
|
|
|
+ if(isset($content['Temp'])){
|
|
|
+ $temp = $content['Temp'];
|
|
|
+ }
|
|
|
+ if(isset($content['Temp'])){
|
|
|
+ $humi = $content['Humi'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $rooms[$k]['temp'] = $temp;
|
|
|
+ $rooms[$k]['humi'] = $humi;
|
|
|
+
|
|
|
+ // 开关量设备
|
|
|
+ $door = "";
|
|
|
+ $smoke = '';
|
|
|
+ $water1 = '';
|
|
|
+ $water2 = '';
|
|
|
+ $dalarms = [];
|
|
|
+ $kgdevice = Db::name('energy_device')->where('org_id',$this->orgId)->where('del',0)->where('cate',4)->find();
|
|
|
+ if($kgdevice){
|
|
|
+ $kgparam = Db::name('energy_param')->where('device_sn',$kgdevice['sn'])->order('report_time desc')->select();
|
|
|
+ if($kgparam){ //{"遥信3":"0","遥信2":"1","遥信1":"1","遥信8":"1","遥信7":"1","遥信6":"1","遥信5":"1","遥信4":"1"}
|
|
|
+ $content = json_decode($wsdparam['content'],true);
|
|
|
+ if(isset($content['遥信1'])){
|
|
|
+ $water1 = $content['遥信1'] == 1?"有":"无";
|
|
|
+ }
|
|
|
+ if(isset($content['遥信2'])){
|
|
|
+ $water2 = $content['遥信2'] == 1?"有":"无";
|
|
|
+ }
|
|
|
+ if(isset($content['遥信3'])){
|
|
|
+ $smoke = $content['遥信3'] == 1?"有":"无";
|
|
|
+ }
|
|
|
+ if(isset($content['遥信4'])){
|
|
|
+ $door = $content['遥信4'] == 1?"打开":"关闭";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $dalarms = Db::name('energy_alarm')->where('alarm_type',"状态变化")->field('id,alarm_time as report_time,current_value')->order('alarm_time desc')->limit(7)->select();
|
|
|
+ foreach ($dalarms as $kk=>$vv){
|
|
|
+ $dalarms[$kk]['current_value'] = "关闭";
|
|
|
+ if($vv['current_value'] == 1){
|
|
|
+ $dalarms[$kk]['current_value'] = "打开";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $rooms[$k]['dalarms'] = $dalarms;
|
|
|
+ $rooms[$k]['door'] = $door;
|
|
|
+ $rooms[$k]['smoke'] = $smoke;
|
|
|
+ $rooms[$k]['water1'] = $water1;
|
|
|
+ $rooms[$k]['water2'] = $water2;
|
|
|
+ }
|
|
|
+
|
|
|
+ HelpHander::success($rooms);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 楼栋日能耗分析
|
|
|
+ public function addrs(){
|
|
|
+ $addrs = Db::name('energy_address')
|
|
|
+ ->where('org_id',$this->orgId)
|
|
|
+ ->where('pid',0)
|
|
|
+ ->where('enable',1)
|
|
|
+ ->where('del',0)
|
|
|
+ ->select();
|
|
|
+ $day = date('Y-m-d');
|
|
|
+ $x = [];
|
|
|
+ $y = [];
|
|
|
+ foreach ($addrs as $k=>$v){
|
|
|
+ $x[] = $v['title'];
|
|
|
+
|
|
|
+ $degree = 0;
|
|
|
+ // 获取所有子级
|
|
|
+ $cids = Db::name('energy_address')
|
|
|
+ ->where('pid',$v['id'])
|
|
|
+ ->where('enable',1)
|
|
|
+ ->where('del',0)
|
|
|
+ ->column('id');
|
|
|
+ if($cids){
|
|
|
+ $cids2 = Db::name('energy_address')
|
|
|
+ ->where('pid','in',$cids)
|
|
|
+ ->where('enable',1)
|
|
|
+ ->where('del',0)
|
|
|
+ ->column('id');
|
|
|
+ if($cids2){
|
|
|
+ $cids = array_merge($cids,$cids2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $cids[] = $v['id'];
|
|
|
+ // 获取子级所有电表设备
|
|
|
+ $devices = Db::name('energy_device')
|
|
|
+ ->where('del',0)
|
|
|
+ ->where('cate',1)
|
|
|
+ ->where('address_id','in',$cids)
|
|
|
+ ->column('sn');
|
|
|
+ if($devices){
|
|
|
+ $degree = (new EnergyParam())->getDegreeByDay($this->orgId,$day,$devices);
|
|
|
+ }
|
|
|
+
|
|
|
+ $y[] = round($degree,2);
|
|
|
+ }
|
|
|
+
|
|
|
+ HelpHander::success(['x'=>$x,'y'=>$y]);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 总能耗逐时分析
|
|
|
+ public function hours(){
|
|
|
+ $x = [];
|
|
|
+ $y1 = [];
|
|
|
+ $y2 = [];
|
|
|
+ $hours = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24];
|
|
|
+ $day = date('Y-m-d');
|
|
|
+ $yday = date('Y-m-d',time()-24*60*60);
|
|
|
+ foreach ($hours as $k=>$v){
|
|
|
+ $x[] = $v;
|
|
|
+ $degree1 = (new EnergyParam())->getDegreeByHour($this->orgId,$day,$v,[]);
|
|
|
+ $y1[] = round($degree1,2);
|
|
|
+ $degree2 = (new EnergyParam())->getDegreeByHour($this->orgId,$yday,$v,[]);
|
|
|
+ $y2[] = round($degree2,2);
|
|
|
+ }
|
|
|
+ HelpHander::success(['x'=>$x,'y1'=>$y1,'y2'=>$y2]);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 待处理报警记录
|
|
|
+ public function alarms(){
|
|
|
+ $lists = Db::name('energy_alarm_event')
|
|
|
+ ->alias('a')
|
|
|
+ ->join('energy_alarm b','a.alarm_id = b.id')
|
|
|
+ ->where('b.org_id',$this->orgId)
|
|
|
+ ->where('a.status','in',[0,1])
|
|
|
+ ->field('a.id,a.status,a.alarm_id,b.device_sn,b.alarm_time,b.point_label,b.alarm_type,b.current_value,b.setting_value')
|
|
|
+ ->order('a.id desc')
|
|
|
+ ->select();
|
|
|
+ $rooms = [];
|
|
|
+ $roomIds = [];
|
|
|
+ foreach ($lists as $k=>$v){
|
|
|
+ $lists[$k]['room_id'] = 0;
|
|
|
+ $lists[$k]['content'] = "";
|
|
|
+ $lists[$k]['cate_title'] = "";
|
|
|
+ $lists[$k]['room_title'] = "";
|
|
|
+ $room = Db::name('energy_device')
|
|
|
+ ->alias('a')
|
|
|
+ ->join('energy_room c','c.id = a.room_id')
|
|
|
+ ->join('energy_device_cate d','d.id = a.cate','left')
|
|
|
+ ->where('a.sn',$v['device_sn'])
|
|
|
+ ->field('c.id,c.title,c.ueid,a.title as device_title,d.title as cate_title')
|
|
|
+ ->find();
|
|
|
+ if($room){
|
|
|
+ $lists[$k]['room_id'] = $room['id'];
|
|
|
+ $lists[$k]['content'] = $room['device_title']."-".$v['point_label']."-当前值:".$v['current_value'];
|
|
|
+ $lists[$k]['cate_title'] = $room['cate_title'];
|
|
|
+ $lists[$k]['room_title'] = $room['title'];
|
|
|
+ if(!in_array($room['id'],$roomIds)){
|
|
|
+ $roomIds[] = $room['id'];
|
|
|
+ $rooms[] = [
|
|
|
+ 'id' => $room['id'],
|
|
|
+ 'title' => $room['title'],
|
|
|
+ 'ueid' => $room['ueid']
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $nrooms = [];
|
|
|
+ foreach ($rooms as $k=>$v){
|
|
|
+ $garr = [
|
|
|
+ 'alarm_type' => "高限报警",
|
|
|
+ 'count' => 0,
|
|
|
+ 'records' => []
|
|
|
+ ];
|
|
|
+ $darr = [
|
|
|
+ 'alarm_type' => "低限报警",
|
|
|
+ 'count' => 0,
|
|
|
+ 'records' => []
|
|
|
+ ];
|
|
|
+
|
|
|
+ $grecords = [];
|
|
|
+ $drecords = [];
|
|
|
+ foreach ($lists as $kk=>$vv){
|
|
|
+ if($vv['room_id'] == $v['id']){
|
|
|
+ if($vv['alarm_type'] == $garr['alarm_type']){
|
|
|
+ $grecords[] = [
|
|
|
+ "id" => $vv['id'],
|
|
|
+ "status" => $vv['status'],
|
|
|
+ "alarm_type" => $vv['alarm_type'],
|
|
|
+ "room_title" => $vv['room_title'],
|
|
|
+ "cate_title" => $vv['cate_title'],
|
|
|
+ "content" => $vv['content'],
|
|
|
+ "alarm_time" => $vv['alarm_time']
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ if($vv['alarm_type'] == $darr['alarm_type']){
|
|
|
+ $drecords[] = [
|
|
|
+ "id" => $vv['id'],
|
|
|
+ "status" => $vv['status'],
|
|
|
+ "alarm_type" => $vv['alarm_type'],
|
|
|
+ "room_title" => $vv['room_title'],
|
|
|
+ "cate_title" => $vv['cate_title'],
|
|
|
+ "content" => $vv['content'],
|
|
|
+ "alarm_time" => $vv['alarm_time']
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $garr['count'] = count($grecords);
|
|
|
+ $garr['records'] = $grecords;
|
|
|
+ $v['garr'] = $garr;
|
|
|
+
|
|
|
+ $darr['count'] = count($drecords);
|
|
|
+ $darr['records'] = $drecords;
|
|
|
+ $v['darr'] = $darr;
|
|
|
+
|
|
|
+ $v['count'] = $garr['count'] + $darr['count'];
|
|
|
+ if($v['count'] > 0){
|
|
|
+ $nrooms[] = $v;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ HelpHander::success($nrooms);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 处理报警
|
|
|
+ public function dealAlarm(){
|
|
|
+ $id = input('id/d',0);
|
|
|
+ $status = input('status/d',0);
|
|
|
+ $reason = input('reason','','trim');
|
|
|
+ if($status != 1 && $status != 2 && $id <= 0){
|
|
|
+ HelpHander::error("参数错误");
|
|
|
+ }
|
|
|
+ $info = Db::name('energy_alarm_event')
|
|
|
+ ->alias('a')
|
|
|
+ ->join('energy_alarm b','a.alarm_id = b.id')
|
|
|
+ ->where('b.org_id',$this->orgId)
|
|
|
+ ->where('a.id',$id)
|
|
|
+ ->field('a.*')
|
|
|
+ ->find();
|
|
|
+ if(!$info){
|
|
|
+ HelpHander::error("报警记录不存在");
|
|
|
+ }
|
|
|
+ if($status == 1 && $info['status'] != 0){
|
|
|
+ HelpHander::error("无权限操作");
|
|
|
+ }
|
|
|
+ if($status == 2 && $info['status'] != 1){
|
|
|
+ HelpHander::error("无权限操作");
|
|
|
+ }
|
|
|
+
|
|
|
+ if($status == 1){
|
|
|
+ $sc = time() - strtotime($info['create_time']);
|
|
|
+ $res = Db::name($this->table)->where('id',$id)->update([
|
|
|
+ "xytime" => $sc,
|
|
|
+ "deal_time" => date('Y-m-d H:i:s'),
|
|
|
+ 'update_time' => date('Y-m-d H:i:s'),
|
|
|
+ 'deal_user' => $this->userId,
|
|
|
+ 'status' => 1
|
|
|
+ ]);
|
|
|
+ }else{
|
|
|
+ $sc = time() - strtotime($info['create_time']);
|
|
|
+ $res = Db::name($this->table)->where('id',$id)->update([
|
|
|
+ "hftime" => $sc,
|
|
|
+ "finish_time" => date('Y-m-d H:i:s'),
|
|
|
+ 'update_time' => date('Y-m-d H:i:s'),
|
|
|
+ "reason" => $reason,
|
|
|
+ 'status' => 2
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+ if($res){
|
|
|
+ HelpHander::success([],'操作成功');
|
|
|
+ }else{
|
|
|
+ HelpHander::error("操作失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ // 监控
|
|
|
+ public function monitor(){
|
|
|
+ $lists = Db::name('energy_monitor')->where('org_id',$this->orgId)->where('del',0)->field('id,title,ueid')->select();
|
|
|
+ foreach ($lists as $k=>$v){
|
|
|
+ $lists[$k]['url'] = url('h5/Index/monitor',['id'=>think_encrypt($v['id'])],false,true);
|
|
|
+ }
|
|
|
+ HelpHander::success($lists);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 楼层统计
|
|
|
+ public function floor(){
|
|
|
+ $address = Db::name('energy_address')
|
|
|
+ ->where('org_id',$this->orgId)
|
|
|
+ ->where('del',0)
|
|
|
+ ->where('enable',1)
|
|
|
+ ->field('id,title,ueid,pid')
|
|
|
+ ->select();
|
|
|
+ $pids = [];
|
|
|
+ foreach ($address as $k=>$v){
|
|
|
+ if($v['pid'] == 0){
|
|
|
+ $pids[] = $v['id'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $lists = [];
|
|
|
+ if($pids){
|
|
|
+ foreach ($address as $k=>$v){
|
|
|
+ if(in_array($v['pid'],$pids) && !empty($v['ueid'])){
|
|
|
+ $lists[] = $v;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $devices = Db::name('energy_device')
|
|
|
+ ->where('del',0)
|
|
|
+ ->field('id,sn,address_id')
|
|
|
+ ->select();
|
|
|
+
|
|
|
+ $day = date('Y-m-d');
|
|
|
+ foreach($lists as $k=>$v){
|
|
|
+ $cids = [];
|
|
|
+ foreach ($address as $kk=>$vv){
|
|
|
+ if($vv['pid'] == $v['id']){
|
|
|
+ $cids[] = $vv['id'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $cids[] = $v['id'];
|
|
|
+ $deviceSns = [];
|
|
|
+ foreach ($devices as $dk=>$dv){
|
|
|
+ if(in_array($dv['address_id'],$cids)){
|
|
|
+ $deviceSns[] = $dv['sn'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $degree = 0;
|
|
|
+ if($deviceSns){
|
|
|
+ $degree = (new EnergyParam())->getDegreeByDay($this->orgId,$day,$deviceSns);
|
|
|
+ }
|
|
|
+ $lists[$k]['degree'] = round($degree,2);
|
|
|
+ }
|
|
|
+
|
|
|
+ HelpHander::success($lists);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|