TicketController.php 4.4 KB
<?php
/**
 * @remark :
 * @name   :TicketController.php
 * @author :lyh
 * @method :post
 * @time   :2025/8/11 10:46
 */

namespace App\Http\Controllers\Aside\Ticket;

use App\Enums\Common\Code;
use App\Http\Controllers\Aside\BaseController;
use App\Http\Logic\Aside\Ticket\TicketLogic;
use App\Models\Ticket\TicketDailyCount;
use App\Models\Ticket\TicketMonthDeptCount;
use App\Models\Ticket\TicketWeekDeptCount;
use Illuminate\Http\Request;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Cache;

class TicketController extends BaseController
{
    public function __construct(Request $request)
    {
        parent::__construct($request);
        $this->logic = new TicketLogic();
    }

    /**
     * @remark :统计记录(今日)
     * @name   :ticketCount
     * @author :lyh
     * @method :post
     * @time   :2025/8/11 10:47
     */
    public function ticketCount(){
        $data = Cache::get('ticket_count');
        if(empty($data)){
            $data = [];
            $data['daily'] = $this->logic->getTicketCount();
            $data['list'] = $this->logic->getDailyTicketCount();
            $data['ticket'] = $this->logic->getTicketList();
            Cache::put('ticket_count',$data,1800);
        }
        $this->response('success',Code::SUCCESS,$data);
    }

    /**
     * @remark :获取最近一个月的数据
     * @name   :getMonthList
     * @author :lyh
     * @method :post
     * @time   :2025/8/30 17:26
     */
    public function getMonthList(){
        $this->request->validate([
            'start'=>'required',
            'end'=>'required'
        ],[
            'start.required' => 'start不能为空',
            'end.required' => 'end不能为空',
        ]);
        $dailyModel = new TicketDailyCount();
        $dailyList = $dailyModel->list(['date'=>['between',[$this->param['start'],$this->param['end']]]],'date',['*'],'desc',30);//取最近30条数据
        $this->response('success',Code::SUCCESS,$dailyList);
    }
    /**
     * @remark :获取搜索时间
     * @name   :getTIme
     * @author :lyh
     * @method :post
     * @time   :2025/8/30 15:39
     */
    public function getTime(){
        $weekModel = new TicketWeekDeptCount();
        $weekData = $weekModel->where('dept_id',1)->select('start_at', 'end_at')->distinct()->get()->toArray();
        $monthModel = new TicketMonthDeptCount();
        $monthData = $monthModel->where('dept_id',1)->select('start_at', 'end_at')->distinct()->get()->toArray();
        $this->response('success',Code::SUCCESS,['week_data'=>$weekData,'month_data'=>$monthData]);
    }

    /**
     * @remark :周记录数据(默认上一周)
     * @name   :weekManageList
     * @author :lyh
     * @method :post
     * @time   :2025/8/30 15:31
     */
    public function weekManageList(){
        $this->request->validate([
            'start'=>'required',
            'end'=>'required'
        ],[
            'start.required' => 'start不能为空',
            'end.required' => 'end不能为空',
        ]);
        $data = $this->logic->getWeekManageList($this->param['start'],$this->param['end'],$this->param['dept_id'] ?? 1,$this->order,$this->param['sort'] ?? 'desc');
        $this->response('success',Code::SUCCESS,$data);
    }

    /**
     * @remark :按月统计数据(默认上一月)
     * @name   :monthManageList
     * @author :lyh
     * @method :post
     * @time   :2025/8/30 15:35
     */
    public function monthManageList(){
        $this->request->validate([
            'start'=>'required',
            'end'=>'required'
        ],[
            'start.required' => 'start不能为空',
            'end.required' => 'end不能为空',
        ]);
        $data = $this->logic->getMonthManageList($this->param['start'],$this->param['end'],$this->param['dept_id'] ?? 1,$this->order,$this->param['sort'] ?? 'desc');
        $this->response('success',Code::SUCCESS,$data);
    }

    /**
     * @remark :技术组总统计
     * @name   :manageTicketCount
     * @author :lyh
     * @method :post
     * @time   :2025/8/11 14:24
     */
    public function manageTicketCount(){
        $this->request->validate([
            'dept_id' => 'required',
        ],[
            'dept_id.required' => '技术组id',
        ]);
        $sort = $this->map['sort'] ?? 'desc';
        $data = $this->logic->getManageTicketCount($this->map,$this->order,$sort);
        $this->response('success',Code::SUCCESS,$data);
    }
}