作者 lyh

gx

... ... @@ -9,7 +9,9 @@
namespace App\Console\Commands\Ticket;
use App\Models\Manage\BelongingGroup;
use App\Models\Manage\ManageHr;
use App\Models\Ticket\TicketDailyDeptCount;
use App\Models\Ticket\TicketDailyManageCount;
use App\Models\WorkOrder\TicketLog;
use App\Models\WorkOrder\TicketProject;
... ... @@ -33,6 +35,11 @@ class TicketCount extends Command
*/
protected $description = '日统计工单';
public $belong = [
1 => [1,2,3,4,5,6,7,8,9],
2 => [10,11,12],
];
/**
* @remark :统计脚本
* @name :handle
... ... @@ -41,7 +48,16 @@ class TicketCount extends Command
* @time :2025/8/7 17:45
*/
public function handle(){
$action = $this->argument('action');
if($action == 'manage_action'){
$this->manage_action();
}
if($action == 'dept_action'){
$this->dept_action();
}
if($action == 'yesterday_daily_action'){
$this->yesterday_daily_action();
}
}
/**
... ... @@ -57,7 +73,7 @@ class TicketCount extends Command
$date = date('Y-m-d');
$ticketManageCountModel = new TicketDailyManageCount();
foreach ($manageList as $item){
$this->output('执行的人员名称/id:'.$item['name'].'/'.$item['manage_id']);
$this->output('按人员统计:执行的人员名称/id:'.$item['name'].'/'.$item['manage_id']);
$ticketLogModel = new TicketLog();
$ticket_num = $ticketLogModel->counts(['engineer_id'=>$item['manage_id'],'is_engineer'=>1]);
//工单总时长
... ... @@ -66,6 +82,7 @@ class TicketCount extends Command
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')]]);
... ... @@ -94,6 +111,76 @@ class TicketCount extends Command
}
/**
* @remark :按技术组统计数据
* @name :dept_action
* @author :lyh
* @method :post
* @time :2025/8/8 11:48
*/
public function dept_action(){
$belongingGroupModel = new BelongingGroup();
$groupList = $belongingGroupModel->list(['id'=>['in',[1,2,3,4,5,6,7,8,9]]],'id',['id','name']);
$manageHrModel = new ManageHr();
$ticketLogModel = new TicketLog();
$ticketDailyDeptModel = new TicketDailyDeptCount();
$date = date('Y-m-d');
foreach ($groupList as $item){
$this->output('组统计:执行的组/id:'.$item['name'].'/'.$item['id']);
$manageIdArr = $manageHrModel->selectField(['belong_group'=>$item['id'],'status'=>1],'manage_id');
$ticket_num = $ticketLogModel->counts(['engineer_id'=>['in',$manageIdArr],'is_engineer'=>1]);
$timeCount = $ticketLogModel->formatQuery(['engineer_id'=>['in',$manageIdArr],'is_engineer'=>1])->sum('end_time');
$average_time = round($timeCount / $ticket_num, 2);
$data = [
'date'=>$date,
'dept_id'=>$item['id'],
'dept_name'=>$item['name'],
'ticket_num'=>$ticket_num ?? 0,
'average_time'=>$average_time
];
$deptInfo = $ticketDailyDeptModel->read(['date'=>$date,'dept_id'=>$item['id']],['id']);
if($deptInfo === false){
$ticketDailyDeptModel->addReturnId($data);
}else{
$ticketDailyDeptModel->edit($data,['id'=>$deptInfo['id']]);
}
}
return true;
}
/**
* @remark :
* @name :daily_action
* @author :lyh
* @method :post
* @time :2025/8/8 14:33
*/
public function yesterday_daily_action(){
$ticketModel = new Tickets();
$date = Carbon::yesterday()->toDateString(); // "2025-08-07"
$ticket_num = $ticketModel->counts(['id'=>['!=',0]]);
$add_num = $ticketModel->counts(['created_at'=>['between',[$date.' 00:00:00',$date.' 23:59:59']]]);
$untreated_num = $ticketModel->counts(['end_at'=>null]);
$processed_num = $ticketModel->counts(['end_at'=>['between',[$date.' 00:00:00',$date.' 23:59:59']]]);
$submit_a_side = $ticketModel->formatQuery(['submit_side'=>1])->sum('submit_side');
$submit_b_side = $ticketModel->formatQuery(['submit_side'=>2])->sum('submit_side');
$data = [
'date' => $date,
'ticket_num'=>$ticket_num,
'add_num'=>$add_num,
'untreated_num'=>$untreated_num,
'processed_num'=>$processed_num,
'source'=>json_encode(['a'=>$submit_a_side,'b'=>$submit_b_side]),
];
$ticketInfo = $ticketModel->read(['date'=>$date],['id']);
if($ticketInfo === false){
$ticketModel->addReturnId($data);
}else{
$ticketModel->edit($data,['id'=>$ticketInfo['id']]);
}
return true;
}
/**
* @remark :日志
* @name :output
* @author :lyh
... ...