<?php


namespace App\Http\Services;

use App\Http\Transformers\SupplierTransformer;
use App\Model\LogModel;
use App\Model\RedisModel;
use App\Model\SupplierAddressModel;
use App\Model\SupplierChannelModel;
use App\Model\SupplierContactModel;
use Illuminate\Support\Facades\DB;

class SupplierAuditService
{
    public function auditSupplier($supplierId, $status, $rejectReason)
    {
        $model = new SupplierChannelModel();
        //判断当前要审核的供应商是不是想要被禁用的
        $redis = new RedisModel();
        $disableExist = $redis->hget('audit_disable_supplier_list', $supplierId);
        if ($disableExist) {
            if ($status == 2) {
                $status = SupplierChannelModel::STATUS_DISABLE;
            } else {
                $status = 2;
            }
        }

        $result = $model->where('supplier_id', $supplierId)->update([
            'update_time' => time(),
            'status' => $status,
            'reject_reason' => $rejectReason,
        ]);
        if ($disableExist) {
            $redis->hdel('audit_disable_supplier_list', $supplierId);
        }
        if ($result) {
            //记录日志
            if ($disableExist) {
                $auditStatus = $status == -2 ? '审核通过,禁用供应商' : '审核不通过,原因是 : ' . $rejectReason;
                if ($status == -2) {
                    //发送队列消息同步到金蝶
                    $service = new SyncSupplierService();
                    $service->syncSupplierToErp($supplierId);
                }
            } else {
                $auditStatus = $status == 2 ? '审核通过' : '审核不通过,原因是 : ' . $rejectReason;
            }
            $logService = new LogService();
            $content = $auditStatus;
            $logService->AddLog($supplierId, LogModel::UPDATE_OPERATE, '审核供应商', $content);
        }
        //发送队列消息同步到金蝶
        $service = new SyncSupplierService();
        $service->syncSupplierToErp($supplierId);
        return $result;
    }

    //判断是否为待跟进供应商
    public function checkIsNeedToFollowUpSupplier($supplierId)
    {
        $model = new SupplierChannelModel();
        $supplier = $model->where('supplier_id', $supplierId)->first();
        //针对非禁止交易状态的供应商重新分配渠道员,且必填信息不完整
        if (!empty($supplier) && ($supplier['status'] != SupplierChannelModel::STATUS_DISABLE)) {
            //开始检查
            //如果全部必填字段都有了,就返回false(不需要跟进)
            if ($this->checkHasAllRequireField($supplier)) {
                return false;
            }else{
                return true;
            }
        }
        //或者单纯只是禁用状态的供应商重新分配渠道员,也是要处理待跟进状态
        if (!empty($supplier) && ($supplier['status'] == SupplierChannelModel::STATUS_DISABLE)) {
            //开始检查
            return true;
        }
        return false;
    }

    //检查必填字段,false缺少必填字段
    public function checkHasAllRequireField($supplier)
    {
        //先检查基础字段
        if (empty($supplier['supplier_name']) || empty($supplier['register_company_name'] || empty($supplier['region']) || empty($supplier['legal_representative']))) {
            return false;
        }
        if (empty($supplier['stockup_type']) || empty($supplier['supplier_group']) || empty($supplier['qualification_photos'])) {
            return false;
        }
        //再检查营业执照是否有
        if (isset($supplier['qualification_photos']['business_license']) && empty($supplier['qualification_photos']['business_license'])) {
            return false;
        }
        //检查是否有联系方式
        $contactModel = new SupplierContactModel();
        $count = $contactModel->where('supplier_id', $supplier['supplier_id'])->count();
        //没有联系方式,就需要去跟进
        if (!$count) {
            return false;
        }
        //联系方式和当前采购数量对不上,也要跟进
        $channelUserNumber = count(explode(',', $supplier['channel_uid']));
        if ($channelUserNumber != $count) {
            return false;
        }
        return true;
    }
}