Commit d6f6977a by 杨树贤

feat(supplier): 新增CRM同步供应商接口及相关字段

- 新增供应商"待确认"状态和"供应商来源"字段及筛选
- 新增"逆向采购员"字段并在列表和详情页展示
- 实现CRM推送供应商同步接口,自动补齐公司信息
parent 89bdf0ae
---
---
name: 供应商系统新增状态和字段
overview: 新增供应商"待确认"状态(4)、逆向采购员字段、供应商来源字段及筛选项,并新建CRM同步供应商接口
todos:
- id: add-status-and-source-config
content: 在config/fixed.php和SupplierChannelModel中新增待确认状态常量和供应商来源配置
status: completed
- id: add-supplier-source-filter
content: 在SupplierFilter、SupplierListFilter中增加供应商来源筛选项
status: completed
dependencies:
- add-status-and-source-config
- id: add-transformer-fields
content: 在SupplierTransformer中增加供应商来源和逆向采购员字段映射,SupplierExtendModel增加批量查询方法
status: completed
dependencies:
- add-status-and-source-config
- id: add-list-columns
content: 在SupplierListScript中增加供应商来源和逆向采购员列
status: completed
dependencies:
- add-transformer-fields
- id: update-save-logic
content: SupplierService新增时默认supplier_source=1,SupplierApiController channelMap增加supplier_source
status: completed
dependencies:
- add-status-and-source-config
- id: add-detail-form-fields
content: 供应商详情/编辑/新增页面增加逆向采购员和供应商来源展示
status: completed
dependencies:
- add-status-and-source-config
- id: create-crm-sync-api
content: 新建CRM同步供应商接口(控制器方法+路由)
status: completed
dependencies:
- add-status-and-source-config
---
## 产品概述
在供应商系统中新增"待确认"状态、逆向采购员字段、供应商来源字段及筛选项,并新建CRM同步供应商接口,实现CRM客户转化供应商的完整数据流转。
## 核心功能
- 新增供应商状态"待确认"(值=4),作为CRM同步后供应商的初始状态
- 新增"逆向采购员"字段(lie_supplier_extend表),来源CRM创建人,仅展示不可修改
- 新增"供应商来源"字段和筛选项(supplier_channel表),1=供应商系统新增/2=CRM客户转化供应商
- 供应商新增时默认supplier_source=1,历史数据统一刷为1
- CRM同步接口:接收CRM推送创建供应商,根据名称自动补齐公司信息,映射字段,设置初始状态为待确认+CRM来源
- CRM→供应商字段映射:客户名称→供应商名称、签约公司→签约公司、联系人姓名→联系人、联系人邮箱→邮箱、联系人账号→手机号、创建人→逆向采购员、公司性质默认工厂渠道、协议附件选填同步
## 技术栈
- 后端框架:Laravel (PHP)
- 数据库:MySQL (web连接)
- 缓存:Redis
- HTTP客户端:GuzzleHttp (调用CRM/天眼查接口)
- 前端:Layui + Blade模板引擎
## 实现方案
### 1. 新增"待确认"状态
- `config/fixed.php` SupplierStatus数组增加 `4 => '待确认'`
- `SupplierChannelModel` 增加常量 `STATUS_CONFIRM = 4`
### 2. 新增"供应商来源"字段
- `config/fixed.php` 新增 SupplierSource 配置
- `SupplierChannelModel` 增加常量 `SUPPLIER_SOURCE_SYSTEM = 1` / `SUPPLIER_SOURCE_CRM = 2`
- `supplier_channel` 表增加 `supplier_source` 字段(tinyint, default 1)
- 供应商系统新增时默认 `supplier_source = 1`
- CRM同步时设置 `supplier_source = 2`
### 3. 新增"逆向采购员"字段
- `lie_supplier_extend` 表增加 `reverse_purchaser` 字段(varchar(100), default '')
- 在SupplierTransformer中通过supplier_code关联查询supplier_extend表获取reverse_purchaser
### 4. 供应商列表展示与筛选
- `SupplierTransformer::transformList()` 增加 supplier_source_name 和 reverse_purchaser_username 的映射
- `SupplierListScript.blade.php` cols数组增加"供应商来源"和"逆向采购员"列
- `SupplierFilter::listFilter()` 增加 supplier_source 筛选条件
- `SupplierListFilter.blade.php` 增加"供应商来源"下拉筛选
### 5. 供应商详情/编辑页面
- 逆向采购员仅展示,不可修改
- 供应商来源仅展示,不可修改
### 6. CRM同步供应商接口
- `SupplierSyncController` 新增 `syncCrmSupplier` 方法
- 路由注册在 `/sync/crm/syncSupplier`(external中间件组)
- 同步逻辑:
1. 接收CRM推送数据
2. 检查供应商名称是否已存在,存在则返回
3. 根据供应商名称调用天眼查/一体化接口补齐公司信息(税号、注册资金、电话、地址、法人、成立时间)
4. 设置 supplier_group=6(工厂渠道)、status=4(待确认)、supplier_source=2(CRM)
5. 创建供应商主记录、联系人、附件(协议)
6. 将CRM创建人写入supplier_extend.reverse_purchaser
7. 生成供应商编码、初始化有效期、同步一体化实体名单校验
### 7. SupplierApiController channelMap补充
- 增加 `supplier_source` 到 channelMap
## 实现注意事项
- supplier_source字段默认值为1,历史数据无需额外刷(DDL default 1自动生效),但为安全起见建议执行update语句
- CRM同步接口属于external中间件组,无需登录认证,需注意参数校验
- 逆向采购员存储在supplier_extend表,需要在transformList中批量查询(避免N+1问题)
- "待确认"状态(4)的供应商,在审核操作中需作为可审核状态处理
- CRM同步时如果供应商名称已存在,直接返回成功(幂等性)
- 工厂渠道(supplier_group=6)的供应商编码前缀为'FOO'
## 架构设计
```mermaid
flowchart TD
CRM[CRM系统] -->|推送客户数据| API[/sync/crm/syncSupplier]
API -->|创建供应商| Service[SupplierService]
Service -->|写入主表| Channel[supplier_channel]
Service -->|写入扩展表| Extend[lie_supplier_extend]
Service -->|写入联系人| Contact[supplier_contact]
Service -->|写入附件| Attachment[supplier_attachments]
Service -->|补齐公司信息| TYC[天眼查/一体化API]
List[供应商列表] -->|展示| Transformer[SupplierTransformer]
Transformer -->|关联查询| Extend
Transformer -->|映射来源名称| Config[SupplierSource配置]
Filter[供应商筛选] -->|supplier_source| FilterLogic[SupplierFilter]
```
## 目录结构
```
/data/www/liexin_supplier/
├── config/
│ └── fixed.php # [MODIFY] 新增SupplierStatus待确认、SupplierSource配置
├── app/
│ ├── Model/
│ │ └── SupplierChannelModel.php # [MODIFY] 新增STATUS_CONFIRM/SUPPLIER_SOURCE_SYSTEM/SUPPLIER_SOURCE_CRM常量
│ │ └── SupplierExtendModel.php # [MODIFY] 新增getReversePurchaserBySupplierIds批量查询方法
│ ├── Http/
│ │ ├── Controllers/
│ │ │ ├── Sync/
│ │ │ │ └── SupplierSyncController.php # [MODIFY] 新增syncCrmSupplier方法
│ │ │ ├── Filter/
│ │ │ │ └── SupplierFilter.php # [MODIFY] listFilter增加supplier_source筛选条件
│ │ │ └── Api/
│ │ │ └── SupplierApiController.php # [MODIFY] channelMap增加supplier_source
│ │ ├── Services/
│ │ │ └── SupplierService.php # [MODIFY] saveSupplier新增时默认supplier_source=1
│ │ └── Transformers/
│ │ └── SupplierTransformer.php # [MODIFY] transformList/transformInfo增加supplier_source_name和reverse_purchaser_username
│ └── routes.php # [MODIFY] 新增CRM同步路由
├── resources/
│ └── views/
│ ├── script/
│ │ └── SupplierListScript.blade.php # [MODIFY] cols增加供应商来源和逆向采购员列
│ └── web/
│ └── supplier/
│ ├── SupplierListFilter.blade.php # [MODIFY] 增加供应商来源筛选项
│ └── SupplierBase.blade.php # [MODIFY] 增加逆向采购员和供应商来源只读展示
```
## SubAgent
- **code-explorer**
- Purpose: 探索供应商详情页面和表单视图的具体结构,确认逆向采购员和供应商来源字段的展示位置
- Expected outcome: 确认SupplierBase.blade.php和AddSupplier.blade.php的表单结构,指导字段添加位置
\ No newline at end of file
...@@ -107,6 +107,7 @@ class SupplierApiController extends Controller ...@@ -107,6 +107,7 @@ class SupplierApiController extends Controller
'sku_optional_batch', 'sku_optional_batch',
'nation_id', 'nation_id',
'supplier_source',
]; ];
public function Entrance(Request $request, $id) public function Entrance(Request $request, $id)
......
...@@ -87,6 +87,10 @@ class SupplierFilter ...@@ -87,6 +87,10 @@ class SupplierFilter
$query->where('sign_com_id', $map['sign_com_id']); $query->where('sign_com_id', $map['sign_com_id']);
} }
if (!empty($map['supplier_source'])) {
$query->where('supplier_source', $map['supplier_source']);
}
if (!empty($map['create_uid'])) { if (!empty($map['create_uid'])) {
//因为传过来的是内部编码,所以要转成admin_id //因为传过来的是内部编码,所以要转成admin_id
$adminService = new AdminUserService(); $adminService = new AdminUserService();
......
...@@ -6,10 +6,15 @@ use App\Http\Controllers\Controller; ...@@ -6,10 +6,15 @@ use App\Http\Controllers\Controller;
use App\Http\Controllers\Filter\SupplierFilter; use App\Http\Controllers\Filter\SupplierFilter;
use App\Http\Middleware\CheckLogin; use App\Http\Middleware\CheckLogin;
use App\Http\Services\AdminUserService; use App\Http\Services\AdminUserService;
use App\Http\Services\CompanyService;
use App\Http\Services\SupplierService; use App\Http\Services\SupplierService;
use App\Http\Services\SyncSupplierService; use App\Http\Services\SyncSupplierService;
use App\Model\SupplierAttachmentsModel;
use App\Model\SupplierChannelModel; use App\Model\SupplierChannelModel;
use App\Model\SupplierContactModel;
use App\Model\SupplierExtendModel;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Validator;
...@@ -121,4 +126,209 @@ class SupplierSyncController extends BaseSyncController ...@@ -121,4 +126,209 @@ class SupplierSyncController extends BaseSyncController
$count = $query->count(); $count = $query->count();
$this->response(0, 'ok', $count); $this->response(0, 'ok', $count);
} }
/**
* CRM推送供应商同步接口
* CRM客户转化供应商时推送数据到供应商系统
*
* 接收参数:
* - customer_name (必填): 客户名称 → 供应商名称
* - sign_com_id (必填): 签约公司ID
* - contact_name: 联系人姓名
* - contact_email: 联系人邮箱
* - contact_mobile: 联系人手机号
* - creator_name (必填): 创建人姓名 → 逆向采购员
* - purchaser_uid: 采购员codeId(第一个审批人)
* - platform_agreement_url: 平台合作协议附件URL
* - platform_agreement_name: 平台合作协议附件文件名
* - quality_agreement_url: 品质保证协议附件URL
* - quality_agreement_name: 品质保证协议附件文件名
*/
public function syncCrmSupplier(Request $request)
{
$data = $request->only([
'customer_name',
'sign_com_id',
'contact_name',
'contact_email',
'contact_mobile',
'creator_name',
'purchaser_uid',
'platform_agreement_url',
'platform_agreement_name',
'quality_agreement_url',
'quality_agreement_name',
]);
//参数校验
$rules = [
'customer_name' => 'required',
'sign_com_id' => 'required',
'creator_name' => 'required',
];
$validator = Validator::make($data, $rules);
if ($validator->fails()) {
$error = $validator->errors()->first();
Log::warning('[CRM同步]参数校验失败: ' . $error, $data);
$this->syncResponse(-1, $error);
}
$customerName = trim($data['customer_name']);
// 幂等处理:供应商名称已存在则直接返回成功
$exists = SupplierChannelModel::where('supplier_name', $customerName)->exists();
if ($exists) {
Log::info('[CRM同步]供应商已存在,跳过: ' . $customerName);
$this->syncResponse(0, '供应商已存在,跳过');
}
try {
// 1. 自动补齐公司信息(天眼查/一体化)
$companyInfo = (new CompanyService())->getCompanyInfo($customerName, '');
$registeredCapital = array_get($companyInfo, 'registered_capital', '');
$supplierAddress = array_get($companyInfo, 'supplier_address', '');
$taxNumber = array_get($companyInfo, 'tax_number', '');
$phone = array_get($companyInfo, 'phone', '');
$establishedTime = array_get($companyInfo, 'establishment_time', '');
// legal_representative 从天眼查数据获取(如果有)
$legalRepresentative = '';
// 2. 构建供应商数据
$channel = [
'supplier_name' => $customerName,
'supplier_group' => 6, // 工厂渠道
'region' => SupplierChannelModel::REGION_CN, // 默认国内
'sign_com_id' => $data['sign_com_id'],
'purchase_uid' => '',
// 自动补齐信息
'tax_number' => $taxNumber,
'registered_capital' => $registeredCapital,
'phone' => $phone,
'supplier_address' => $supplierAddress,
'legal_representative' => $legalRepresentative,
'established_time' => $establishedTime,
// 联系人信息
'supplier_consignee' => array_get($data, 'contact_name', ''),
'supplier_email' => array_get($data, 'contact_email', ''),
'supplier_mobile' => array_get($data, 'contact_mobile', ''),
'can_check_uids' => array_get($data, 'purchaser_uid', ''),
// 供应商来源(CRM同步)
'supplier_source' => SupplierChannelModel::SUPPLIER_SOURCE_CRM,
// 其他默认值
'stockup_type' => '1', // 默认国内现货
'currency' => 1, // 默认人民币
'supplier_type' => SupplierChannelModel::SUPPLIER_TYPE_OFFICIAL, // 正式供应商
'is_business_abnormal' => -1, // 默认无异常
'has_legal_ID_card' => -1, // 默认无法人身份证
// 状态设为待确认
'status' => SupplierChannelModel::STATUS_CONFIRM,
//CRM同步供应商不需要初审
'need_review' => 0,
];
// 3. 模拟request对象设置supplier_name(用于供应商名称校验)
request()->merge([
'user' => (object)[
'userId' => 0,
'name' => 'CRM同步',
'codeId' => '',
]
]);
// 4. 使用事务创建供应商
$supplierId = DB::connection('web')->transaction(function () use ($channel, $data) {
$model = new SupplierChannelModel();
$channel['create_uid'] = 0;
$channel['create_name'] = 'CRM同步';
$channel['create_time'] = time();
$channel['update_time'] = time();
// 插入供应商主表
$supplierId = $model->insertGetId($channel);
// 生成供应商编码
$supplierCode = 'L' . str_pad($supplierId, 7, "0", STR_PAD_LEFT);
$model->where('supplier_id', $supplierId)->update([
'supplier_code' => $supplierCode,
'supplier_sn' => 'FOO' . ltrim($supplierCode, 'L'),
]);
// 写入逆向采购员到扩展表
$extendData = [
'supplier_id' => $supplierId,
'reverse_purchaser' => $data['creator_name'],
'create_time' => time(),
'update_time' => time(),
];
SupplierExtendModel::insert($extendData);
// 添加联系人
$contactData = [
'supplier_id' => $supplierId,
'supplier_consignee' => $channel['supplier_consignee'],
'supplier_email' => $channel['supplier_email'],
'supplier_mobile' => $channel['supplier_mobile'],
'add_time' => time(),
'admin_id' => 0,
];
if (!empty($channel['can_check_uids'])) {
$contactData['can_check_uids'] = $channel['can_check_uids'];
}
SupplierContactModel::insert($contactData);
// 添加平台合作协议附件(选填)
$platformAgreementUrl = array_get($data, 'platform_agreement_url');
if (!empty($platformAgreementUrl)) {
$platformAgreementName = array_get($data, 'platform_agreement_name', '平台合作协议');
SupplierAttachmentsModel::insert([
'supplier_id' => $supplierId,
'field_name' => 'cooperation_agreement',
'file_url' => $platformAgreementUrl,
'file_name' => $platformAgreementName,
'add_time' => time(),
'admin_id' => 0,
]);
}
// 添加品质保证协议附件(选填)
$qualityAgreementUrl = array_get($data, 'quality_agreement_url');
if (!empty($qualityAgreementUrl)) {
$qualityAgreementName = array_get($data, 'quality_agreement_name', '品质保证协议');
SupplierAttachmentsModel::insert([
'supplier_id' => $supplierId,
'field_name' => 'quality_assurance_agreement',
'file_url' => $qualityAgreementUrl,
'file_name' => $qualityAgreementName,
'add_time' => time(),
'admin_id' => 0,
]);
}
// 初始化有效期
(new SupplierService())->initialCpTimeDays($supplierId, $channel['supplier_group']);
return $supplierId;
});
Log::info('[CRM同步]供应商创建成功', ['supplier_id' => $supplierId, 'supplier_name' => $customerName]);
// 5. 异步校验一体化实体名单
try {
(new CompanyService())->checkSupplierCompanyAndAddress($supplierId);
} catch (\Exception $e) {
Log::warning('[CRM同步]校验实体名单异常: ' . $e->getMessage());
}
$this->syncResponse(0, '同步成功', ['supplier_id' => $supplierId]);
} catch (\Exception $e) {
Log::error('[CRM同步]创建供应商失败: ' . $e->getMessage(), ['data' => $data]);
$this->syncResponse(-1, '创建供应商失败: ' . $e->getMessage());
}
}
} }
...@@ -168,6 +168,9 @@ class SupplierService ...@@ -168,6 +168,9 @@ class SupplierService
} }
return $value; return $value;
}, $channel); }, $channel);
//默认是供应商系统新增
$channel['supplier_source'] = SupplierChannelModel::SUPPLIER_SOURCE_SYSTEM;
//默认是待提审 //默认是待提审
//判断是否是直接添加并且申请审核 //判断是否是直接添加并且申请审核
if ($isDirectApply) { if ($isDirectApply) {
......
...@@ -38,7 +38,10 @@ class SupplierTransformer ...@@ -38,7 +38,10 @@ class SupplierTransformer
//创建人部门map //创建人部门map
$createUserDepartmentNameMap = (new DepartmentService())->getDepartmentNameMapByUserIds(array_column($list, 'create_uid')); $createUserDepartmentNameMap = (new DepartmentService())->getDepartmentNameMapByUserIds(array_column($list, 'create_uid'));
//获取所有供应商id //批量获取逆向采购员
$reversePurchaserMap = SupplierExtendModel::getReversePurchaserBySupplierIds(array_column($list, 'supplier_id'));
//获取所有供应商ids
$supplierIds = array_column($list, 'supplier_id'); $supplierIds = array_column($list, 'supplier_id');
//然后获取所有采购员类型为2(京东)和4(跟货采购员)的联系人 //然后获取所有采购员类型为2(京东)和4(跟货采购员)的联系人
$jdContacts = $inventoryContacts = []; $jdContacts = $inventoryContacts = [];
...@@ -88,6 +91,8 @@ class SupplierTransformer ...@@ -88,6 +91,8 @@ class SupplierTransformer
$supplier['purchase_username'] = array_get($users, $supplier['purchase_uid']); $supplier['purchase_username'] = array_get($users, $supplier['purchase_uid']);
$supplier['yunxin_channel_username'] = array_get($users, $supplier['yunxin_channel_uid']); $supplier['yunxin_channel_username'] = array_get($users, $supplier['yunxin_channel_uid']);
$supplier['status_name'] = array_get(config('fixed.SupplierStatus'), $supplier['status']); $supplier['status_name'] = array_get(config('fixed.SupplierStatus'), $supplier['status']);
$supplier['supplier_source_name'] = array_get(config('fixed.SupplierSource'), $supplier['supplier_source']);
$supplier['reverse_purchaser'] = array_get($reversePurchaserMap, $supplier['supplier_id'], '');
$supplier['supplier_type_name'] = array_get(config('field.SupplierType'), $supplier['supplier_type']); $supplier['supplier_type_name'] = array_get(config('field.SupplierType'), $supplier['supplier_type']);
$supplier['company_nature_name'] = array_get(config('field.CompanyNature'), $supplier['company_nature']); $supplier['company_nature_name'] = array_get(config('field.CompanyNature'), $supplier['company_nature']);
$supplier['is_entity_name'] = array_get(config('field.IsEntity'), $supplier['is_entity'], '暂无'); $supplier['is_entity_name'] = array_get(config('field.IsEntity'), $supplier['is_entity'], '暂无');
...@@ -276,6 +281,13 @@ class SupplierTransformer ...@@ -276,6 +281,13 @@ class SupplierTransformer
$supplier = $this->getStockupType($supplier); $supplier = $this->getStockupType($supplier);
$supplier['sign_com_name'] = array_get(CrmService::getSignCompanyListMap(), $supplier['sign_com_id']); $supplier['sign_com_name'] = array_get(CrmService::getSignCompanyListMap(), $supplier['sign_com_id']);
$supplier['status_name'] = array_get(config('fixed.SupplierStatus'), $supplier['status']); $supplier['status_name'] = array_get(config('fixed.SupplierStatus'), $supplier['status']);
$supplier['supplier_source_name'] = array_get(config('fixed.SupplierSource'), $supplier['supplier_source']);
if (!empty($supplier['supplier_id'])) {
$extendInfo = SupplierExtendModel::where('supplier_id', $supplier['supplier_id'])->first();
$supplier['reverse_purchaser'] = $extendInfo ? $extendInfo->reverse_purchaser : '';
} else {
$supplier['reverse_purchaser'] = '';
}
$supplier['region_name'] = array_get(config('fixed.Region'), $supplier['region']); $supplier['region_name'] = array_get(config('fixed.Region'), $supplier['region']);
$supplier['currency_name'] = array_get(config('fixed.Currency'), $supplier['currency']); $supplier['currency_name'] = array_get(config('fixed.Currency'), $supplier['currency']);
$supplier['supplier_group_name'] = array_get(config('fixed.SupplierGroup'), $supplier['supplier_group']); $supplier['supplier_group_name'] = array_get(config('fixed.SupplierGroup'), $supplier['supplier_group']);
......
...@@ -94,6 +94,8 @@ Route::group(['middleware' => ['external'], 'namespace' => 'Sync'], function () ...@@ -94,6 +94,8 @@ Route::group(['middleware' => ['external'], 'namespace' => 'Sync'], function ()
Route::any('/sync/unitedData/receiveEntityResult', 'SupplierSyncController@receiveEntityResult'); Route::any('/sync/unitedData/receiveEntityResult', 'SupplierSyncController@receiveEntityResult');
//获取需要审核的供应商数量,韦伯小程序用的 //获取需要审核的供应商数量,韦伯小程序用的
Route::get('/sync/audit/GetNeedAuditSupplierCount', 'SupplierSyncController@GetNeedAuditSupplierCount'); Route::get('/sync/audit/GetNeedAuditSupplierCount', 'SupplierSyncController@GetNeedAuditSupplierCount');
//CRM推送供应商同步接口
Route::post('/sync/crm/syncSupplier', 'SupplierSyncController@syncCrmSupplier');
}); });
Route::match(['get', 'post'], '/test', function () { Route::match(['get', 'post'], '/test', function () {
......
...@@ -24,6 +24,12 @@ class SupplierChannelModel extends Model ...@@ -24,6 +24,12 @@ class SupplierChannelModel extends Model
const STATUS_DISABLE = -2; const STATUS_DISABLE = -2;
//黑名单 //黑名单
const STATUS_BLOCK = -3; const STATUS_BLOCK = -3;
//待确认(CRM同步后初始状态)
const STATUS_CONFIRM = 4;
//供应商来源
const SUPPLIER_SOURCE_SYSTEM = 1; //供应商系统新增
const SUPPLIER_SOURCE_CRM = 2; //CRM客户转化供应商
const SUPPLIER_TYPE_OFFICIAL = 1; const SUPPLIER_TYPE_OFFICIAL = 1;
const SUPPLIER_TYPE_TEMPORARY = 2; const SUPPLIER_TYPE_TEMPORARY = 2;
......
...@@ -145,6 +145,21 @@ class SupplierExtendModel extends Model ...@@ -145,6 +145,21 @@ class SupplierExtendModel extends Model
return true; return true;
} }
/**
* 根据供应商ID批量获取逆向采购员信息
*/
public static function getReversePurchaserBySupplierIds($supplierIds)
{
if (empty($supplierIds)) {
return [];
}
$records = self::whereIn('supplier_id', $supplierIds)
->where('reverse_purchaser', '!=', '')
->pluck('reverse_purchaser', 'supplier_id')
->toArray();
return $records;
}
public function set_change_extra_cache($supplier_code, $charge_content){ public function set_change_extra_cache($supplier_code, $charge_content){
$Redis = new RedisModel(); $Redis = new RedisModel();
$pre = Config('fixed.SUPPLIER_REDIS_PRE'); $pre = Config('fixed.SUPPLIER_REDIS_PRE');
......
...@@ -118,6 +118,12 @@ return [ ...@@ -118,6 +118,12 @@ return [
2 => '已通过', 2 => '已通过',
-2 => '禁止交易', -2 => '禁止交易',
-3 => '黑名单', -3 => '黑名单',
4 => '待确认',
],
'SupplierSource' => [
1 => '供应商系统新增',
2 => 'CRM客户转化供应商',
], ],
'Currency' => [ 'Currency' => [
......
...@@ -258,6 +258,8 @@ ...@@ -258,6 +258,8 @@
return statusHtml; return statusHtml;
} }
}, },
{field: 'supplier_source_name', title: '供应商来源', align: 'center', width: 120},
{field: 'reverse_purchaser', title: '逆向采购员', align: 'center', width: 100},
{field: 'last_update_name', title: '最新修改人', align: 'center', width: 110}, {field: 'last_update_name', title: '最新修改人', align: 'center', width: 110},
{field: 'sign_com_name', title: '签约公司', align: 'center', width: 150}, {field: 'sign_com_name', title: '签约公司', align: 'center', width: 150},
{ {
......
...@@ -49,6 +49,13 @@ ...@@ -49,6 +49,13 @@
<div class="city-selector" id="city-selector"></div> <div class="city-selector" id="city-selector"></div>
</div> </div>
</div> </div>
<div class="layui-col-md3">
<label class="layui-form-label">供应商来源 : </label>
<div class="layui-input-block">
<input type="text" class="layui-input" disabled
value="{{array_get(config('fixed.SupplierSource'), $supplier['supplier_source'] ?? '1', '供应商系统新增')}}">
</div>
</div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
...@@ -109,7 +116,14 @@ ...@@ -109,7 +116,14 @@
<div class="layui-row"> <div class="layui-row">
<div class="layui-col-md3"> <div class="layui-col-md3">
@inject('statusPresenter','App\Presenters\StatusPresenter') @inject('statusPresenter','App\Presenters\StatusPresenter')
{!! $statusPresenter->render('purchase_uid','数据维护员 : ',$supplier['purchase_uid'],$userCodes,['width'=>'150px']) !!} {!! $statusPresenter->render('purchase_uid','数据维护员 : ',$supplier['purchase_uid'],$userCodes,['width'=>'150px']) !!}
</div>
<div class="layui-col-md3">
<label class="layui-form-label">逆向采购员 : </label>
<div class="layui-input-block" style="width: 150px">
<input type="text" class="layui-input layui-disabled" disabled
value="{{$supplier['reverse_purchaser'] ?? ''}}">
</div>
</div> </div>
<div class="layui-col-md3"> <div class="layui-col-md3">
<label class="layui-form-label"><span class="require">*</span>注册资金(万): </label> <label class="layui-form-label"><span class="require">*</span>注册资金(万): </label>
......
...@@ -233,10 +233,14 @@ ...@@ -233,10 +233,14 @@
{!! $statusPresenter->render('is_entity','实体名单','',config('field.IsEntity')) !!} {!! $statusPresenter->render('is_entity','实体名单','',config('field.IsEntity')) !!}
</div> </div>
<div class="layui-inline"> <div class="layui-inline">
@inject('statusPresenter', 'App\Presenters\StatusPresenter') @inject('statusPresenter','App\Presenters\StatusPresenter')
{!! $statusPresenter->render('sign_com_id', '签约公司', 0, \App\Http\Services\CrmService::getSignCompanyListMap()) !!} {!! $statusPresenter->render('sign_com_id', '签约公司', 0, \App\Http\Services\CrmService::getSignCompanyListMap()) !!}
</div> </div>
<div class="layui-inline"> <div class="layui-inline">
@inject('statusPresenter','App\Presenters\StatusPresenter')
{!! $statusPresenter->render('supplier_source', '供应商来源', 0, config('fixed.SupplierSource')) !!}
</div>
<div class="layui-inline">
@inject('multiSelectorPresenter','App\Presenters\MultiSelectorPresenter') @inject('multiSelectorPresenter','App\Presenters\MultiSelectorPresenter')
{!! $multiSelectorPresenter->render('region','区域','',$regionData) !!} {!! $multiSelectorPresenter->render('region','区域','',$regionData) !!}
</div> </div>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment