hzd 1 year ago
parent
commit
75c0a3eafb

+ 24 - 0
application/api/controller/ue/Base.php

@@ -0,0 +1,24 @@
+<?php
+namespace app\api\controller\ue;
+
+use app\hander\HelpHander;
+use think\Controller;
+
+class Base extends Controller
+{
+    protected $orgId;
+
+    protected function initialize()
+    {
+        parent::initialize();
+//        halt(think_encrypt(33));
+        //MDAwMDAwMDAwMLCtrqM
+        $this->orgId = think_decrypt(input('orgId/d','MDAwMDAwMDAwMLCtrqM','trim'));
+
+        if($this->orgId <= 0){
+            HelpHander::error("参数错误");
+        }
+
+    }
+
+}

+ 386 - 0
application/api/controller/ue/Energy.php

@@ -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);
+
+    }
+
+
+}

+ 222 - 0
application/api/controller/ue/Order.php

@@ -0,0 +1,222 @@
+<?php
+namespace app\api\controller\ue;
+
+use app\common\model\EnergyParam;
+use app\hander\HelpHander;
+use think\Controller;
+use think\Db;
+
+class Order extends Base {
+
+    // 首页统计
+    public function sytj(){
+        $day = date('Ymd');
+
+        $bjCount = Db::name('orders')
+            ->where('create_yyyymmdd',$day)
+            ->where('org_id',$this->orgId)
+            ->where('del',0)
+            ->where('work_type_mode',2)
+            ->count(); // 今日保洁总数
+        $bxCount = Db::name('orders')
+            ->where('create_yyyymmdd',$day)
+            ->where('org_id',$this->orgId)
+            ->where('del',0)
+            ->where('work_type_mode',1)
+            ->count(); // 今日报修总数
+
+        $count = Db::name('orders')
+            ->where('org_id',$this->orgId)
+            ->where('work_type_mode','in',[1,2])
+            ->count(); // 今日报修和保洁总数
+
+        $todo = Db::name('todo')
+            ->where('create_yyyymmdd',$day)
+            ->where('org_id',$this->orgId)
+            ->where('del',0)
+            ->where('work_type_mode','in',[1,2])
+            ->count(); // 今日工单总数
+
+        $finishtodo = Db::name('todo')
+            ->where('create_yyyymmdd',$day)
+            ->where('org_id',$this->orgId)
+            ->where('del',0)
+            ->where('todo_mode',3)
+            ->where('work_type_mode','in',[1,2])
+            ->count(); // 今日工单总数
+        $bl = $todo > 0?round(($finishtodo/$todo)*100,1):0;
+
+        $data = [
+            'count' => $count,
+            'bjCount' => $bjCount,
+            'bxCount' => $bxCount,
+            'todo' => $todo,
+            'bl' => $bl."%",
+        ];
+        HelpHander::success($data);
+    }
+
+    // 今日未完成的维修单
+    public function wxorders(){
+        $day = date('Ymd');
+
+        $lists = Db::name('orders')
+            ->alias('a')
+            ->join('order_repair b','a.id = b.order_id')
+            ->join('address c','c.id = b.address_id')
+            ->where('a.create_yyyymmdd',$day)
+            ->where('a.org_id',$this->orgId)
+            ->where('a.del',0)
+            ->where('b.address_id','>',0)
+            ->whereNotNull('c.ueid')
+            ->field('a.id,a.order_mode,a.content,a.images,c.ueid,c.title')
+            ->order('a.id desc')
+            ->select();
+        $ueids = [];
+        $nlist = [];
+        $ordermodes = Db::name('order_mode')->select();
+        foreach ($lists as $k=>$v){
+            if(!in_array($v['ueid'],$ueids)){
+                $ueids[] = $v['ueid'];
+                // 获取状态
+                $ordermodetext = "";
+                foreach ($ordermodes as $ok=>$ov){
+                    if($ov['id'] == $v['order_mode']){
+                        $ordermodetext = $ov['out_content'];
+                        break;
+                    }
+                }
+                if($v['order_mode'] == 4){
+                    $todo = Db::name('todo')
+                        ->alias('a')
+                        ->join('user u','a.to_user_id = u.id')
+                        ->join('todo_mode b','a.todo_mode = b.id')
+                        ->where('a.order_id',$v['id'])
+                        ->where('a.todo_mode','in',[1,2,3,4])
+                        ->field('a.id,b.out_content,u.real_name')
+                        ->find();
+                    if($todo){
+                        $ordermodetext = "[".$todo['real_name']."]".$todo['out_content'];
+                    }
+                }
+                $v['order_mode_text'] = $ordermodetext;
+                $v['images'] = empty($v['images'])?[]:explode(",",$v['images']);
+                $nlist[] = $v;
+            }
+        }
+
+        HelpHander::success($nlist);
+
+    }
+
+    // 项目任务数据分析
+    public function ordertj(){
+        $mode = input('mode/d',1); // 1=维修 2=保洁
+        $type = input('type/d',1); // 1=日统计 2=月统计
+
+
+        $eday = date("Y-m-d");
+        $sday = date("Y-m-d",time() - 6*24*60*60);
+
+        if($type == 1){
+            $dates = getDateFromRange($sday, $eday);
+        }else{
+            $dates = get_month_last();
+        }
+
+        $x = [];
+        $y1 = [];
+        $y2 = [];
+        foreach ($dates as $k=>$v){
+            $map = [];
+            $map[] = ['org_id','=',$this->orgId];
+            $map[] = ['work_type_mode','=',$mode];
+            if($type == 1){
+                $d = date('Ymd',strtotime($v));
+                $map[] = ['create_yyyymmdd','=',$d];
+                $x[] = date('m-d',strtotime($v));
+            }else{
+                $d = date('Ym',strtotime($v));
+                $map[] = ['create_yyyymm','=',$d];
+                $x[] = date('Y-m',strtotime($v));
+            }
+            $map[] = ['del','=',0];
+            $orders = Db::name('orders')->where($map)->count();
+            $todos = Db::name('todo')->where($map)->count();
+            $y1[] = $orders;
+            $y2[] = $todos;
+        }
+        HelpHander::success(['x'=>$x,'y1'=>$y1,'y2'=>$y2]);
+    }
+
+    // 热点耗材数据分析
+    public function mates(){
+        $this->orgId = 3;
+        $map[] = ['org_id','=',$this->orgId];
+        $lists = Db::name('todo_mate_item')->where($map)->field('sum(total) as total,items_id')->group('items_id')->order('total desc')->limit(4)->select();
+        $i = 1;
+        foreach ($lists as $k=>$v){
+            $lists[$k]['total'] = intval($v['total']);
+            $title = Db::name('mate_items')->where('id',$v['items_id'])->value('title');
+            $lists[$k]['title'] = $title?$title:'';
+            $lists[$k]['rank'] = $i;
+            $i++;
+        }
+        HelpHander::success($lists);
+    }
+
+    // 保洁网格化管理
+    public function daily(){
+        $map[] = ['enable', '=', 1];
+        $map[] = ['org_id', '=', $this->orgId];
+        $map[] = ['del', '=', 0];
+        $lists = Db::name('daily')->where($map)->field('id,title')->orderRand()->limit(4)->select();
+        $hours = model('Daily')->getTimeDaily($this->orgId);
+        foreach ($lists as $k=>$v){
+            $m = [];
+            $m[] = ['org_id','=',$this->orgId];
+            $m[] = ['daily_id','=',$v['id']];
+            $m[] = ['create_time','>=',$hours['start']];
+            $m[] = ['create_time','<',$hours['end']];
+            $count = Db::name('daily_record')->where($m)->count();
+            $lists[$k]['count'] = $count;
+
+        }
+        HelpHander::success($lists);
+    }
+
+    // 实时任务总览
+    public function todos(){
+        $map[] = ['org_id','=',$this->orgId];
+        $map[] = ['del','=',0];
+        $map[] = ['work_type_mode','in',[1,2]];
+        $map[] = ['order_mode','in',[1,4]];
+
+        $lists = Db::name('orders')->where($map)->limit(3)->order('id desc')->select();
+        $nlist = [];
+        foreach ($lists as $k=>$v){
+            $work_text = $v['work_type_mode'] == 1?"维修任务":"保洁任务";
+            $order_mode_text = "待处理";
+            $users = "";
+            if($v['order_mode'] == 4){
+                $order_mode_text = "处理中";
+                $ulist = Db::name('todo')
+                    ->alias('a')
+                    ->join('user b','a.to_user_id = b.id')
+                    ->where('a.order_id',$v['id'])
+                    ->where('a.todo_mode','in',[1,2,3,4])
+                    ->column('b.real_name');
+                if($ulist){
+                    $users = implode(',',$ulist);
+                }
+            }
+            $nlist[] = [
+                'work_text' => $work_text,
+                'order_mode_text' => $order_mode_text,
+                'users' => $users,
+                'content' => $v['content'],
+            ];
+        }
+        HelpHander::success($nlist);
+    }
+}

+ 2 - 0
public/.htaccess2

@@ -6,4 +6,6 @@
   RewriteCond %{REQUEST_FILENAME} !-f
 #  RewriteRule ^(.*)$ index.html/$1 [QSA,PT,L]
   RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
+
+   SetEnvIf Authorization ^(.*) HTTP_AUTHORIZATION=$1
 </IfModule>