Merge branch 'develop'

This commit is contained in:
mzl
2025-07-29 09:00:04 +08:00
parent a551507e4d
commit d74b374198
106 changed files with 6754 additions and 1346 deletions
+100
View File
@@ -34,4 +34,104 @@ class Constants
self::TICKET_STATUS['REJECTED'] => 'Закрыть',
];
//客户分级 USTOMER_GRADE
public const GRADE = [
'INITIAL' => 0, // 初步接触
'COMMUNICATE' => 1, // 需求沟通
'PLAN' => 2, // 方案推进
'DEAL' => 3, // 成交阶段
'SALES' => 4, // 售后阶段
'LOSS' => 5, // 停滞或流失
];
public const GRADE_ZH = [
self::GRADE['INITIAL'] => '初步接触',
self::GRADE['COMMUNICATE'] => '需求沟通',
self::GRADE['PLAN'] => '方案推进',
self::GRADE['DEAL'] => '成交阶段',
self::GRADE['SALES'] => '售后阶段',
self::GRADE['LOSS'] => '停滞或流失',
];
public const GRADE_EN = [
self::GRADE['INITIAL'] => 'Initial contact',
self::GRADE['COMMUNICATE'] => 'Demand Chat',
self::GRADE['PLAN'] => 'promotion of the plan',
self::GRADE['DEAL'] => 'Transaction Stage',
self::GRADE['SALES'] => 'After Sales',
self::GRADE['LOSS'] => 'Stagnation or loss',
];
public const GRADE_RU = [
self::GRADE['INITIAL'] => 'Первоначальные контакты',
self::GRADE['COMMUNICATE'] => 'Потребности в общении',
self::GRADE['PLAN'] => 'Продвижение программы',
self::GRADE['DEAL'] => 'Этап сделки',
self::GRADE['SALES'] => 'Послепродажный этап',
self::GRADE['LOSS'] => 'Застой или потеря',
];
//客户重要性
public const CUSTOMER_MAGNITUDE_INITIAL = 0; // 金牌商机
public const CUSTOMER_MAGNITUDE_COMMUNICATE = 1; // 银牌商机
public const CUSTOMER_MAGNITUDE_PLAN = 2; // 铜牌商机
public const MAGNITUDE = [
self::CUSTOMER_MAGNITUDE_INITIAL => '金牌商机',
self::CUSTOMER_MAGNITUDE_COMMUNICATE => '银牌商机',
self::CUSTOMER_MAGNITUDE_PLAN => '铜牌商机',
];
public const MAGNITUDE_EN = [
self::CUSTOMER_MAGNITUDE_INITIAL => 'Gold Medal',
self::CUSTOMER_MAGNITUDE_COMMUNICATE => 'Silver Medal',
self::CUSTOMER_MAGNITUDE_PLAN => 'Bronze Medal',
];
public const MAGNITUDE_RU = [
self::CUSTOMER_MAGNITUDE_INITIAL => 'Золотой бизнес',
self::CUSTOMER_MAGNITUDE_COMMUNICATE => 'Серебряный бизнес',
self::CUSTOMER_MAGNITUDE_PLAN => 'Бронзовый бизнес.',
];
//跟进类型
public const CUSTOMER_FOLLOW_VISIT = 0; // 线下拜访
public const CUSTOMER_FOLLOW_UP = 1; // 线上跟进
public const FOLLOW = [
self::CUSTOMER_FOLLOW_VISIT => '线下拜访',
self::CUSTOMER_FOLLOW_UP => '线上跟进',
];
public const FOLLOW_EN = [
self::CUSTOMER_FOLLOW_VISIT => 'Visit',
self::CUSTOMER_FOLLOW_UP => 'On line',
];
//跟进类型
public const CUSTOMER_SEX_UNKNOWN = 0; // 未知
public const CUSTOMER_SEX_MAN = 1; // 男
public const CUSTOMER_SEX_WOMAN = 2; // 女
public const SEX = [
self::CUSTOMER_SEX_UNKNOWN => '未知',
self::CUSTOMER_SEX_MAN => '男',
self::CUSTOMER_SEX_WOMAN => '女',
];
public const SEX_EN = [
self::CUSTOMER_SEX_UNKNOWN => 'unknown',
self::CUSTOMER_SEX_MAN => 'man',
self::CUSTOMER_SEX_WOMAN => 'woman',
];
public const SEX_RU = [
self::CUSTOMER_SEX_UNKNOWN => 'неизвестный',
self::CUSTOMER_SEX_MAN => 'мужской',
self::CUSTOMER_SEX_WOMAN => 'женский',
];
public const SIGN = [
['id' => 'xinyouhe', 'name' => '新友合'],
['id' => 'mbaf', 'name' => 'MAGIC BRIDGE AUTO FZE']
];
public const LANGUAGE = ['en', 'zh_CN','ru'];
}
+1 -1
View File
@@ -5,7 +5,7 @@ return [
'count' => getenv('REDIS_QUEUE_PROCESS_COUNT'), // 可以设置多进程同时消费
'constructor' => [
// 消费者类目录
// 'consumer_dir' => app_path() . '/queue/redis'
'consumer_dir' => app_path() . '/queue/redis',
'consumer_dir' => app_path() . getenv('REDIS_QUEUE_CONSUMER_DIR')
]
]
+4 -1
View File
@@ -59,5 +59,8 @@ return [
'enable_memory_monitor' => DIRECTORY_SEPARATOR === '/',
]
]
]
],
'task' => [
'handler' => app\process\Task::class
],
];
+68 -5
View File
@@ -25,9 +25,18 @@ use Webman\Route;
// POST /admin/user/{user_id}/kickout // body: {"tokens": ["..."]} // 踢下线
// POST /admin/user/{user_id}/kickout_all // 一键踢全部
// 调试
Route::any('/c', [app\controller\IndexController::class, 'createResource']);
Route::any('/perm', [app\controller\IndexController::class, 'perm']);
// 飞书
Route::any('/feishu/event', [app\common\controller\NotifyController::class, 'feishuEvent']);
// 飞书回调
Route::any('/feishu/callback', [app\common\controller\NotifyController::class, 'feishuCallback']);
// 代理oss文件地址
Route::any('/proxy/ossurl', [app\common\controller\UploadController::class, 'proxy']);
// 公共
Route::group('/common', function () {
Route::group('/auth', function () {
Route::any('/login', [app\common\controller\AuthController::class, 'login']);
@@ -42,21 +51,44 @@ Route::group('/common', function () {
Route::group('/user', function () {
Route::any('/info', [app\common\controller\UserController::class, 'info']);
Route::any('/get', [app\common\controller\UserController::class, 'getUser']);
});
Route::group('/preset', function () {
Route::any('/corps', [app\common\controller\PresetController::class, 'corps']);
Route::any('/feishu/app', [app\common\controller\PresetController::class, 'feishuApp']);
Route::any('/systems', [app\common\controller\PresetController::class, 'systems']);
});
});
// 后台管理
Route::group('/admin', function () {
// 角色
Route::group('/role', function () {
Route::any('/list', [app\admin\controller\RoleController::class, 'list']);
Route::any('/detail', [app\admin\controller\RoleController::class, 'detail']);
Route::any('/create', [app\admin\controller\RoleController::class, 'create']);
Route::any('/list', [app\admin\controller\RoleController::class, 'index']);
Route::any('/show', [app\admin\controller\RoleController::class, 'show']);
Route::any('/store', [app\admin\controller\RoleController::class, 'store']);
Route::any('/update', [app\admin\controller\RoleController::class, 'update']);
Route::any('/delete', [app\admin\controller\RoleController::class, 'delete']);
Route::any('/destroy', [app\admin\controller\RoleController::class, 'destroy']);
});
// 公司
Route::group('/corp', function () {
Route::any('/list', [app\admin\controller\CorpController::class, 'index']);
Route::any('/show', [app\admin\controller\CorpController::class, 'show']);
Route::any('/store', [app\admin\controller\CorpController::class, 'store']);
Route::any('/update', [app\admin\controller\CorpController::class, 'update']);
Route::any('/destroy', [app\admin\controller\CorpController::class, 'destroy']);
});
// 询单
Route::group('/inquiry', function () {
Route::any('/list', [app\inquiry\controller\InquiryLogController::class, 'index']);
Route::any('/show', [app\inquiry\controller\InquiryLogController::class, 'show']);
Route::any('/store', [app\inquiry\controller\InquiryLogController::class, 'store']);
Route::any('/update', [app\inquiry\controller\InquiryLogController::class, 'update']);
Route::any('/destroy', [app\inquiry\controller\InquiryLogController::class, 'destroy']);
Route::any('/release', [app\inquiry\controller\InquiryLogController::class, 'release']);
Route::any('/allocation', [app\inquiry\controller\InquiryLogController::class, 'allocation']);
});
});
@@ -87,3 +119,34 @@ Route::group('/ticket', function () {
});
//crm
Route::group('/crm', function () {
//跟进
Route::any('/follow/list', [app\crm\controller\FollowController::class, 'list']);
Route::any('/follow/detail', [app\crm\controller\FollowController::class, 'detail']);
Route::any('/follow/add', [app\crm\controller\FollowController::class, 'save']);
Route::any('/follow/getFollowType', [app\crm\controller\FollowController::class, 'getFollowType']);
//客户
Route::any('/customer/list', [app\crm\controller\CustomerController::class, 'list']);
Route::any('/customer/detail', [app\crm\controller\CustomerController::class, 'detail']);
Route::any('/customer/add', [app\crm\controller\CustomerController::class, 'save']);
Route::any('/customer/claim', [app\crm\controller\CustomerController::class, 'claim']);
Route::any('/customer/restore', [app\crm\controller\CustomerController::class, 'restore']);
Route::any('/customer/delete', [app\crm\controller\CustomerController::class, 'delete']);
Route::any('/customer/waitFollow', [app\crm\controller\CustomerController::class, 'waitFollow']);
Route::any('/customer/statistics', [app\crm\controller\CustomerController::class, 'statistics']);
Route::any('/customer/getChannel', [app\crm\controller\CustomerController::class, 'getChannel']);
Route::any('/customer/getCountry', [app\crm\controller\CustomerController::class, 'getCountry']);
Route::any('/customer/followNext', [app\crm\controller\CustomerController::class, 'followNext']);
Route::any('/tagGroup/list', [app\crm\controller\TagGroupController::class, 'list']);
Route::any('/tagGroup/updatePivot', [app\crm\controller\TagGroupController::class, 'updatePivot']);
Route::any('/upload/image', [app\common\controller\UploadController::class, 'uploadImage']);
Route::any('/user/edit', [app\common\controller\UserController::class, 'edit']);
Route::any('/user/savePassword', [app\common\controller\UserController::class, 'savePassword']);
});
-13
View File
@@ -1,13 +0,0 @@
<?php
return [
'basi_cdata' => [
'/', // 首页
'/index/index', // 首页
'/index/view', // 飞书调试
'/perm', // 调试-添加权限
'/common/preset/corps', // 公司列表
'/common/preset/feishu/app', // 飞书应用信息
]
];