Patrolv2.php 5.9 KB
<?php

namespace app\api\controller\xunjian;
//允许所有的跨域请求
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: *");
header('Access-Control-Allow-Methods: POST,GET,OPTIONS');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400');

use app\api\controller\tencentim\Openim;
use app\common\controller\Api;
use fast\Tree;
use think\Db;
use think\exception\PDOException;

/**
 * 巡检人员
 */
class Patrolv2 extends Api
{
    protected $noNeedLogin = ['*'];
    protected $noNeedRight = ['*'];


    public function _initialize()
    {
        parent::_initialize();

    }

    /**
     * 3. 查询水库管理员(巡检员)
     */
    public function getStaffList()
    {

        $reservoir_id = $this->request->param("reservoir_id", "");//水库id
        $except_id = $this->request->param("except_id","");//排除某个员工id

        $where = [];
        $where2 = [];

        if (!empty($reservoir_id)) {
            $where = ["a.reservoir_id" => $reservoir_id];
        }
        if(!empty($except_id)){
            $where2["a.id"] = ["neq",$except_id];
        }

        $list = Db::name("inspection_staff")->alias("a")
            ->join("user u", "u.id=a.user_id", "LEFT")
            ->join("inspection_depart p", "p.id=a.depart_id", "LEFT")
            ->field("a.id,a.staff_code,a.staff_name,a.mobile,a.is_screen_mng,u.clientid,p.depart_name")
            ->where($where)
            ->where($where2)
            ->order("a.id desc")
            ->select();

        $back_data = [];
        if (!empty($list)) {
            $count =count($list);
            $addnum = 500;//因为即时通讯人员状态每次限制查500人;所以得分开查
            for($i=0;$i<$count;$i=$i+$addnum){
                if($count-$i>0){
                    $j=$i-1>0?$i:0;
                    $data = array_slice($list,$j,$addnum);
                    //$mobile_list = array_column($data,"mobile");
                    foreach ($data as $k=>$v){
                        $mobile_list[$k]="gjs_".$data[$k]['mobile'];
                    }
                    $openim_api = new Openim();
                    $r = $openim_api->query_online_status(["To_Account"=>$mobile_list]);
                    if($r['state']==true){
                        $back_data=$back_data+$r['data'];
                    }
                }
            }

            //追加在线状态
            foreach ($list as $lk=>$lv){
                if("gjs_".$list[$lk]["mobile"]==$back_data["gjs_".$list[$lk]['mobile']]['To_Account']){
                    $list[$lk]["online_status"] =$back_data["gjs_".$list[$lk]['mobile']]['Status'];
                    $list[$lk]["online_status_cn"] =$back_data["gjs_".$list[$lk]['mobile']]['StatusCn'];
                    $list[$lk]["mobile"] = "gjs_".$list[$lk]["mobile"];
                } else{
                    $list[$lk]["online_status"] ="Offline";
                    $list[$lk]["online_status_cn"] ="下班";
                    $list[$lk]["mobile"] = "gjs_".$list[$lk]["mobile"];
                }
            }
        }

        $this->success("巡检人员数据获取成功", $list);
    }



    /**
     * 3.1 查询所有管理员在线人数(巡检员)
     */
    public function allStaffList()
    {


        $list = Db::name("inspection_staff")->alias("a")
            ->join("user u", "u.id=a.user_id", "LEFT")
            ->join("inspection_depart p", "p.id=a.depart_id", "LEFT")
            ->field("a.id,a.staff_code,a.staff_name,a.mobile,a.is_screen_mng,u.clientid,p.depart_name")
            ->order("a.id desc")
            ->select();

        $back_data = [];
        if (!empty($list)) {
            $count = count($list);
            $addnum = 500;//因为即时通讯人员状态每次限制查500人;所以得分开查
            for ($i = 0; $i < $count; $i = $i + $addnum) {
                if ($count - $i > 0) {
                    $j = $i - 1 > 0 ? $i : 0;
                    $data = array_slice($list, $j, $addnum);
                    $mobile_list = array_column($data, "mobile");
                    $openim_api = new Openim();
                    $r = $openim_api->query_online_status(["To_Account" => $mobile_list]);
                    if ($r['state'] == true) {
                        $back_data = $back_data + $r['data'];
                    }
                }
            }
            $isoffline = 0;//不在线人数
            $isOnline = 0;//在线人数
            foreach ($list as $lk => $lv) {
                //追加在线状态
                $list[$lk]["online_status"] = $back_data[$lv['mobile']]['Status'] ? $back_data[$lv['mobile']]['Status'] : "Offline";
                $list[$lk]["online_status_cn"] = $back_data[$lv['mobile']]['StatusCn'] ? $back_data[$lv['mobile']]['StatusCn'] : "下班";
                if ($back_data[$lv['mobile']]['Status'] == "PushOnline") {
                    $isoffline += 1;
                } elseif ($back_data[$lv['mobile']]['Status'] == "Online") {
                    $isOnline += 1;
                } else {
                    $isoffline += 1;

                }
            }


        }
        $activation="0%";
        if($isOnline){
            $activation=bcmul(bcdiv($isOnline, count($back_data), 4), 100, 2) . "%";
        }
        $dataline = [
            'isoffline' => $isoffline,
            'isOnline' => $isOnline,
            'allstaff' => count($back_data),
            'activation' =>$activation
        ];

        $this->success("app数据获取成功", $dataline);
    }

    /**
     * 获取腾讯云某个App管理员帐号的签名
     * @throws \Exception
     */
//    public function userSig()
//    {
//        Vendor("tencent.TLSSigAPIv2");
//        $api = new \TLSSigAPIv2(1400645108, '249c08eef888876a00cd6fc9d6e10fa2a767802b959129494ce86f4db1ef106c');
//        $sig = $api->genUserSig('hcanxyz', 86400 * 365 * 5);//有效期5年
//        echo $sig . "\n";
//
//    }


}