Patrolv2.php 5.2 KB
<?php

namespace app\api\controller\xunjian;

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();

    }

    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]="ydh_".$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("ydh_".$list[$lk]["mobile"]==$back_data["ydh_".$list[$lk]['mobile']]['To_Account']){
                    $list[$lk]["online_status"] =$back_data["ydh_".$list[$lk]['mobile']]['Status'];
                    $list[$lk]["online_status_cn"] =$back_data["ydh_".$list[$lk]['mobile']]['StatusCn'];
                    $list[$lk]["mobile"] = "ydh_".$list[$lk]["mobile"];
                }else{
                    $list[$lk]["online_status"] ="Offline";
                    $list[$lk]["online_status_cn"] ="下班";
                    $list[$lk]["mobile"] = "lxx_".$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) {
                //追加在线状态
                if ($back_data[$lv['mobile']]['Status'] == "Online") {
                    $isOnline += 1;
                }
            }


        }
        $allUser = count($list);

        $dataline = [
            'isoffline' => $allUser - $isOnline,
            'isOnline' => $isOnline,
            'allstaff' => $allUser,
            'activation' => bcmul(bcdiv($isOnline, count($list), 4), 100, 2) . "%"
        ];

        $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";
//
//    }
public function testim(){

    $openim_api = new Openim();
    $mobile_list=['0'=>'15587067522'];
    $r = $openim_api->api_account_import();
    print_r($r);

}

}