<?php namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; use App\Http\Services\AdminUserService; use App\Http\Services\DepartmentService; use App\Http\Services\LogService; use App\Http\Services\SupplierContactService; use App\Http\Transformers\SupplierContactTransformer; use App\Http\Validators\SupplierContactValidator; use App\Model\LogModel; use App\Model\SupplierChannelModel; use App\Model\SupplierContactModel; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; //通用API,比如获取品牌列表,分类列表等 class SupplierContactApiController extends Controller { public function Entrance(Request $request, $id) { $this->$id($request, $id); } //获取供应商联系人 public function GetSupplierContactList($request) { $supplierId = $request->get('supplier_id'); $limit = $request->get('limit', 10); $canViewAllSupplierContact = checkPerm('ViewAllSupplierContact'); $canViewSubordinateSupplierContact = checkPerm('ViewSubordinateSupplierContact'); $model = new SupplierContactModel(); $query = $model->where('supplier_id', $supplierId)->orderBy('contact_id', 'desc'); $adminId = $request->user->userId; $codeId = $request->user->codeId; //不能查看所有的,就是说只能看绑定的采购的 if ($canViewAllSupplierContact) { } elseif ($canViewAllSupplierContact) { //查看下级 $departmentService = new DepartmentService(); //下属用户id(结果包括自己的id) $subordinateUserIds = $departmentService->getSubordinateUserIds($adminId); $adminUserService = new AdminUserService(); $subordinateCodeIds = $adminUserService->getCodeIdsByUserIds($subordinateUserIds); $subordinateCodeIds = $subordinateCodeIds->toArray(); //因为可以查看自己部下相关的采购员,开发员的供应商,所以要构建复杂likeIn语句需要的数据 //注意下面三个条件最外层要用()包围起来,要不然mysql数据会有问题,具体自己查询mysql的and和or的语法注意事项 $inCodeIdSql = implode(',', $subordinateCodeIds); $inUserIdSql = implode(',', $subordinateUserIds); $inCodeIdSql = "(" . $inCodeIdSql . ")"; $inUserIdSql = "(" . $inUserIdSql . ")"; if ($inCodeIdSql) { $query->whereRaw(DB::raw("(admin_id in $inUserIdSql or can_check_uids in $inCodeIdSql)")); } else { $query->whereRaw(DB::raw("(admin_id in $inUserIdSql)")); } } else { if ($codeId) { $query->whereRaw("(can_check_uids = $codeId or admin_id = $adminId)"); } else { $query->whereRaw("(admin_id = $adminId)"); } } $list = $query->paginate($limit)->toArray(); $transformer = new SupplierContactTransformer(); $list['data'] = $transformer->transformList($list['data']); $this->response(0, 'ok', $list['data'], $list['total']); } public function SaveSupplierContact($request) { $data = $request->only([ 'contact_id', 'supplier_id', 'supplier_consignee', 'supplier_telephone', 'supplier_fax', 'supplier_qq', 'supplier_mobile', 'supplier_email', 'supplier_position', 'can_check_uids' ]); $data = BatchTrim($data); //先去表单验证 $validator = new SupplierContactValidator(); $validateResult = $validator->checkSave($request); if ($validateResult) { $this->response(-1, $validateResult); } $service = new SupplierContactService(); $hasNeedReplaceContact = $service->getNeedReplaceContact($data['supplier_id'], $data['can_check_uids']); $result = $service->saveContact($data); if (!$result) { $this->response(-1, '操作失败'); } //有需要自动替换补全数据操作后的提示 if ($hasNeedReplaceContact) { $this->response(0, '系统检测到当前采购有默认的空联系人,直接更新对应数据'); }else{ $this->response(0, '保存成功'); } } public function DeleteSupplierContact($request) { $contactId = $request->get('contact_id'); if ($contactId) { $model = new SupplierContactModel(); $contact = $model->where('contact_id', $contactId)->first(); $contactCount = $model->where('supplier_id', $contact['supplier_id'])->count(); if ($contactCount == 1) { $this->response(-1, '供应商至少要有一个联系方式'); } //从主表里面删除对应的采购 //先去判断这个采购是不是唯一的 $canCheckUids = $contact['can_check_uids']; $userNum = $model->where('supplier_id', $contact['supplier_id'])->where('can_check_uids', $canCheckUids)->count(); if ($userNum === 1) { //如果只有一个,那就可以去主表删除对应的采购员了 $supplierModel = new SupplierChannelModel(); $supplier = $supplierModel->where('supplier_id', $contact['supplier_id'])->first(); $channelUid = explode(',', $supplier['channel_uid']); if (in_array($canCheckUids, $channelUid)) { //删除 $channelUid = array_filter($channelUid, function ($value) use ($canCheckUids) { return $value != $canCheckUids; }); $supplierModel->where('supplier_id', $contact['supplier_id'])->update([ 'channel_uid' => implode(',', $channelUid), 'update_time' => time(), ]); } } $result = $model->whereIn('contact_id', $contactId)->delete(); if (!$result) { $this->response(-1, '删除失败'); } $logService = new LogService(); $content = '删除联系人'; $remark = json_encode(['old_contact' => $contact, 'new_contact' => []]); $logService->AddLog($contact['supplier_id'], LogModel::UPDATE_OPERATE, '修改供应商基本资料', $content, $remark); $this->response(0, '删除成功'); } $this->response(-1, '找不到删除对象'); } }