Tickets.php 1.9 KB
<?php

namespace App\Models\WorkOrder;

use App\Models\Base;
use App\Models\Manage\ManageHr;
use Illuminate\Database\Eloquent\Factories\HasFactory;

class Tickets extends Base
{
    use HasFactory;

    protected $table = 'gl_tickets';

    const STATUS_PEDDING = 0; // 待处理
    const STATUS_PROCESSING = 1; // 处理中
    const STATUS_COMPLETED = 2; // 已完成
    const STATUS_CLOSED = 3; // 已关闭

    /**
     * @return void
     * 关联的工单日志
     */
    public function logs()
    {
        return $this->hasMany(TicketLog::class, 'ticket_id', 'id');
    }

    /**
     * 关联项目
     */
    public function project()
    {
        return $this->belongsTo(TicketProject::class, 'project_id', 'id');
    }

    /**
     * 当前工单,保存参与的人员到 gl_ticket_logs 表
     * 逻辑说明:
     * 1. 如果当前项目是超迹,要把徐莹和第一负责人加进去,为参与人
     * 2. 若是域途项目,把黄小玉和第一负责人加进去,为参与人
     */
    public function saveEngineers($engineer_ids = [])
    {
        $canyu = [
            $this->project->engineer_id, // 第一负责人
        ];

        if ($this->project->project_cate == 3)
            $canyu[] = 20; // 徐莹
         elseif ($this->project->project_cate == 4)
             $canyu[] = 85; // 黄小玉

        $all_engineer_ids = array_unique(array_merge($canyu, $engineer_ids));

        foreach ($all_engineer_ids as $engineer_id)
        {
            try {
                // 利用唯一索引去重
                $log = new TicketLog();
                $log->engineer_id = $engineer_id;
                $log->is_engineer = in_array($engineer_id, $engineer_ids);
                $this->logs()->save($log);
            }catch (\Exception $exception){}
        }

        // 删除没有参与当前工单的人员(若之前已有)
        $this->logs()->whereNotIn('engineer_id', $all_engineer_ids)->delete();
    }
}