<?php namespace App\Http\Validators; use App\Model\SupplierChannelModel; use App\Model\SupplierContactModel; use Validator; class SupplierValidator { //保存相关的验证,别问我为什么不用laravel自带的form-request类 //因为控制器那边已经被之前的人魔改的难用的一比,而且控制器那边还接收了一大堆统一变量 public function checkSave($request) { //整理下请求数据 $requestData = $request->all(); $requestData = $this->transformRequestData($requestData); $rules = [ 'supplier_name' => 'required', 'legal_representative' => 'required', 'stockup_type' => 'required', 'main_brands' => 'required', 'main_customers' => 'max:100', 'ticket_time' => 'max:20', // 'supplier_address' => 'required', 'region' => 'required', 'cn_delivery_time' => 'regex:/^\d+\-\d$/', 'us_delivery_time' => 'regex:/^\d+\-\d$/', 'shipping_address' => 'max:100', 'billing_period_detail' => 'required|max:100', 'return_address' => 'max:100', 'return_consignee' => 'max:50', 'return_phone' => 'max:50', 'business_license' => 'required', // 'established_time' => 'required', 'cn_ratio' => 'min:1', 'us_ratio' => 'min:1', ]; $contactRuler = [ 'supplier_consignee' => 'required|max:50', 'supplier_mobile' => 'required|max:30', 'supplier_telephone' => 'required|max:30', 'supplier_email' => 'required|email', 'supplier_position' => 'required|max:30', 'can_check_uids' => 'required', ]; //第一次新增的时候,是要校验联系人的 if (empty($requestData['supplier_id'])) { $rules = array_merge($rules, $contactRuler); } //币种为人民币的话需要验证税号 if ($requestData['currency'] == 1) { $rules['tax_number'] = 'required'; } //新增的时候,渠道开发不能为空 if (empty($requestData['supplier_id'])) { $rules['purchase_uid'] = 'required'; } //营业执照是不能为空的 $messages = $this->messages(); $validator = Validator::make($requestData, $rules, $messages); if ($validator->fails()) { return $validator->errors()->first(); } $supplierId = $request->get('supplier_id'); //检验名称是否已经存在数据库 $supplierModel = new SupplierChannelModel(); $contactModel = new SupplierContactModel(); $companyNameCount = 0; if (empty($supplierId)) { $count = $supplierModel->where('supplier_name', $request->get('supplier_name'))->count(); $companyNameCount = $supplierModel->where('register_company_name', $request->get('register_company_name'))->where('register_company_name', '!=', '')->count(); } else { $count = $supplierModel->where('supplier_name', $request->get('supplier_name')) ->where('supplier_id', '!=', $supplierId)->count(); //至少要有一个联系方式 $contactCount = $contactModel->where('supplier_id', $supplierId)->count(); if (!$contactCount) { return "供应商至少要有一个联系人,请补全"; } } if ($count) { return "该供应商名称已经存在,请核验后再提交"; } if ($companyNameCount) { return "该注册公司名已经存在,请核验后再提交"; } if (!empty($supplierId)) { //还要去判断当前提交人是否存在与其关联的联系人没有完善 $codeId = $request->user->codeId; $notCompleteContacts = $contactModel->where('supplier_id', $supplierId)->where('can_check_uids', $codeId) ->where(function ($q) { $q->where('supplier_consignee', '') ->orWhere('supplier_position', '') ->orWhere('supplier_email', '') ->orWhere('supplier_mobile', '') ->orWhere('supplier_telephone', ''); })->get(); $notCompleteContacts = !empty($notCompleteContacts) ? $notCompleteContacts->toArray() : []; if ($notCompleteContacts) { return "存在和你相关的联系人没有完善,请先去完善相关联系人"; } } } private function messages() { return [ 'supplier_name.required' => '供应商名称不能为空', 'legal_representative.required' => '法人代表不能为空', 'stockup_type.required' => '合作类型不能为空', 'register_company_name.required' => '注册公司名不能为空', 'supplier_group.required' => '公司性质不能为空', 'supplier_address.required' => '注册地址不能为空', 'region.required' => '所在区域不能为空', 'purchase_uid.required' => '渠道开发员不能为空', 'cn_ratio.min' => '人民币系数必须是大于1的浮点数', 'business_license.required' => '营业执照不能为空', 'established_time.required' => '成立时间不能为空', 'us_ratio.min' => '美金系数必须是大于1的浮点数', 'us_delivery_time.regex' => '香港货期格式不正确', 'cn_delivery_time.regex' => '大陆货期格式不正确', 'tax_number.required' => '如果选择币种为人民币,则公司税号不能为空', 'supplier_consignee.required' => '联系方式的联系人不能为空', 'supplier_consignee.max' => '联系方式的联系人不能超过50个字符', 'supplier_position.required' => '联系方式的职称不能为空', 'supplier_position.max' => '联系方式的职称不能超过30个字符', 'supplier_telephone.required' => '联系方式的座机号不能为空', 'supplier_mobile.required' => '联系方式的手机号不能为空', 'supplier_mobile.max' => '联系方式的手机号不能超过30个字符', 'supplier_email.required' => '联系方式的邮箱不能为空', 'supplier_email.email' => '联系方式的邮箱格式不对', 'can_check_uids.required' => '联系方式对应的采购员不能为空', 'shipping_address.required' => '发货地址不能为空', 'shipping_address.max' => '发货地址不能超过100个字符', 'return_address.max' => '退货地址不能超过100个字符', 'return_consignee.max' => '退货收货人不能超过50个字符', 'return_phone.max' => '退货收货人电话不能超过50个字符', 'main_brands.required' => '主营品牌不能为空', 'main_customers.max' => '3-5家客户描述不能超过100个字符', 'ticket_time.max' => '到票时间不能超过20个字符', 'billing_period_detail.required' => '账期详情不能为空', 'billing_period_detail.max' => '账期详情不能超过100个字符', ]; } public function transformRequestData($requestData) { return $requestData; } }