Merge branch 'develop'

This commit is contained in:
mzl
2025-08-19 13:54:19 +08:00
parent b60e0da8d8
commit dac360ec65
7 changed files with 163 additions and 1 deletions
+25 -1
View File
@@ -85,7 +85,7 @@ class CustomerController extends BaseController
}
/**
* 客户列表
* 审核客户
* @param Request $request
* @return \support\Response
*/
@@ -207,4 +207,28 @@ class CustomerController extends BaseController
}
}
/**
* 离职员工客户分配
* @param Request $request
* @return \support\Response
*/
public function allocation(Request $request)
{
try {
$param = $request->all();
if (empty($param['corp_id'])) {
return $this->error('corp_id'.trans('not_null'));
}
if (empty($param['user_id'])) {
return $this->error('user_id'.trans('not_null'));
}
$result = (new CustomerService())->allocation($param);
return $this->success($result,'成功分配'.$result['userCount'].'位离职用户的'.$result['customerCount'].'位客户');
} catch (\Throwable $th) {
return $this->error($th->getMessage());
}
}
}
+1
View File
@@ -17,6 +17,7 @@ class CustomerLogic
$customer->restore();
}
return $res;
}
+75
View File
@@ -2,6 +2,7 @@
namespace app\crmAdmin\service;
use app\common\model\CustomerAudit;
use app\common\model\InquiryLog;
use app\common\model\User;
use app\common\service\OssService;
@@ -20,6 +21,8 @@ use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Style\Border;
use PhpOffice\PhpSpreadsheet\Style\Fill;
use support\Db;
use support\exception\BusinessException;
use support\Log;
class CustomerService
{
@@ -139,6 +142,15 @@ class CustomerService
if ($scene == 'audit') { //审核时查询举报人姓名
$customerHis = CustomerHis::where('customer_id', $item->id)->orderBy('id', 'desc')->first(['user_his']);
$item['user_name'] = empty($customerHis['user_his']) ? '' : User::where('id',$customerHis['user_his'])->value('name');
$item['audit'] = CustomerAudit::where('customer_id', $item->id)->orderBy('id', 'desc')->first();
if (!empty($item['audit'])&&!empty($item['audit']['img'])) {
$item['audit']['img'] = explode(',', $item['audit']['img']);
}
$ossservice = new OssService();
foreach ($item['audit']['img'] as $k => $img) {
$item['audit']['img'][$k] = $ossservice->generatePrivateUrl($img);
}
}
}
}
@@ -287,9 +299,14 @@ class CustomerService
$id = $params['id'];
$logic = new CustomerLogic();
$audit = CustomerAudit::where('customer_id', $id)->orderBy('id', 'desc')->first();
if ($params['scene'] == 'delete') {
$audit->status = 3;
$audit->save();
return $logic->forceDelete($params['id']);
} else {
$audit->status = 2;
$audit->save();
return $logic->status($params['id'], 1);
}
}
@@ -452,4 +469,62 @@ class CustomerService
return $follow;
}
/**
* 离职员工客户分配
* @param $params
* @return string[]
*/
public function allocation($params)
{
$corpId = $params['corp_id'];
$userId = explode(',', $params['user_id']);
log::info('开始分配离职员工客户,corp_id:'.$corpId.' 被分配员工'. implode(',', $userId));
//查询离职客户
$userResign = User::where('status', 2)
->where('corp_id', $corpId)
->get(['id','name']);
$resignUerIds = [];
$userNames = [];
foreach ($userResign as $row) {
$resignUerIds[] = (int)$row->id;
$userNames[] = $row->name;
}
if (empty($userResign)) {
log::info('未匹配到离职用户');
throw new BusinessException('未匹配到离职用户', 500);
}
log::info('匹配到离职用户数:' . count($resignUerIds) .' '. implode(',',$userNames));
$customerCount = Customer::whereIn('user_id', $resignUerIds)
->orderBy('id', 'asc')
->count();
if ($customerCount === 0) {
log::info('未找到离职员工相关的客户记录。');
throw new BusinessException('未找到离职员工相关的客户记录', 500);
}
// 初始化 UID 轮询器
$uidRotator = new \app\common\utils\RedisUidRotator('allocation_customer_user');
$uidRotator->setUids($userId, false);
Customer::whereIn('user_id',$resignUerIds)->chunk(500, function ($customers) use ($uidRotator){
foreach ($customers as $customer) {
// 获取下一个分配的UID
$newUserId = $uidRotator->next();
$customer->user_id = $newUserId;
$customer->save();
}
});
return [
'userCount' => count($resignUerIds),
'customerCount' => $customerCount,
];
}
}