TicketCount.php 3.7 KB
<?php
/**
 * @remark :
 * @name   :TicketCount.php
 * @author :lyh
 * @method :post
 * @time   :2025/8/7 17:42
 */

namespace App\Console\Commands\Ticket;

use App\Models\Manage\ManageHr;
use App\Models\Ticket\TicketDailyManageCount;
use App\Models\WorkOrder\TicketLog;
use App\Models\WorkOrder\TicketProject;
use App\Models\WorkOrder\Tickets;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Log;

class TicketCount extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'ticket_count {action}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = '日统计工单';

    /**
     * @remark :统计脚本
     * @name   :handle
     * @author :lyh
     * @method :post
     * @time   :2025/8/7 17:45
     */
    public function handle(){

    }

    /**
     * @remark :按管理员统计(只统计技术组)
     * @name   :manage_action
     * @author :lyh
     * @method :post
     * @time   :2025/8/7 17:45
     */
    public function manage_action(){
        $manageHrModel = new ManageHr();
        $manageList = $manageHrModel->list(['status'=>1,'dept_id'=>['in',[1,2]]],'id',['id','manage_id','name','nickname']);
        $date = date('Y-m-d');
        $ticketManageCountModel = new TicketDailyManageCount();
        foreach ($manageList as $item){
            $this->output('执行的人员名称/id:'.$item['name'].'/'.$item['manage_id']);
            $ticketLogModel = new TicketLog();
            $ticket_num = $ticketLogModel->counts(['engineer_id'=>$item['manage_id'],'is_engineer'=>1]);
            //工单总时长
            $timeCount = $ticketLogModel->formatQuery(['engineer_id'=>$item['manage_id'],'is_engineer'=>1])->sum('end_time');
            $ticket_end_num = $ticketLogModel->counts(['engineer_id'=>$item['manage_id'],'is_engineer'=>1,'end_at'=>['!=',null]]);
            if(!empty($timeCount)){
                $average_time = round($timeCount / $ticket_end_num, 2);
            }
            $fastest_time = $ticketLogModel->formatQuery(['engineer_id'=>$item['manage_id'],'is_engineer'=>1,'end_at'=>['!=',null]])->min('end_time');
            //超时工单数量
            $timeout_num = $ticketLogModel->counts(['end_at'=>null,'plan_end_at'=>['>',date('Y-m-d H:i:s')]]);
            $complete_num = $ticketLogModel->counts(['end_at'=>['!=',null]]);
            $data = [
                'date'=>$date,
                'manage_id'=>$item['id'],
                'manage_name'=>$item['name'],
                'ticket_num'=>$ticket_num,//工单总数量
                'average_time'=>$average_time ?? '',//平均完成工单时长
                'fastest_time'=>$fastest_time,//最快完成工单时间
                'timeout_num'=>$timeout_num,//超时工单数量
                'complete_num'=>$complete_num,//完成工单数量
            ];
            //查询当前用户是否当日已有记录
            $ticketManageInfo = $ticketManageCountModel->read(['date'=>$date,'manage_id'=>$item['id']],['id']);
            if($ticketManageInfo === false){
                //TODO::执行新增
                $ticketManageCountModel->addReturnId($data);
            }else{
                //TODO::执行编辑
                $ticketManageCountModel->edit($data,['id'=>$ticketManageInfo['id']]);
            }
        }
        return true;
    }

    /**
     * @remark :日志
     * @name   :output
     * @author :lyh
     * @method :post
     * @time   :2025/8/8 11:43
     */
    public function output($message)
    {
//        Log::channel('ticket_log')->info($message);
        echo date('Y-m-d H:i:s') . ' ' . $message . PHP_EOL;
    }
}