From 8ba58958104a202ac62a511acfe2e56cba9e6e18 Mon Sep 17 00:00:00 2001
From: "WIN-C27C5MSVTPO\\16961" <1696136552@qq.com>
Date: Tue, 26 Aug 2025 15:50:29 +0800
Subject: [PATCH] =?UTF-8?q?crm=E5=8F=8D=E6=94=B9=E8=AF=A2=E5=8D=95?=
=?UTF-8?q?=E5=BD=92=E5=B1=9E?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
...UpdateInquiryLogFromCrmCustomerCommand.php | 144 ++++++++++++++++++
app/crm/controller/CustomerController.php | 20 +--
app/crm/service/CustomerService.php | 33 ++++
app/crmAdmin/service/CustomerService.php | 11 +-
4 files changed, 187 insertions(+), 21 deletions(-)
create mode 100644 app/command/UpdateInquiryLogFromCrmCustomerCommand.php
diff --git a/app/command/UpdateInquiryLogFromCrmCustomerCommand.php b/app/command/UpdateInquiryLogFromCrmCustomerCommand.php
new file mode 100644
index 0000000..06afbc0
--- /dev/null
+++ b/app/command/UpdateInquiryLogFromCrmCustomerCommand.php
@@ -0,0 +1,144 @@
+setHelp('该命令将crm_customer表的user_id更新到inquiry_log表的recipient字段,将obtain字段更新到t_time字段。')
+ ->addOption('dry-run', null, InputOption::VALUE_NONE, '仅显示将要执行的更新操作,不实际执行')
+ ->addOption('limit', 'l', InputOption::VALUE_OPTIONAL, '限制处理的记录数量', 5000);
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output): int
+ {
+ $isDryRun = $input->getOption('dry-run');
+ $limit = (int) $input->getOption('limit');
+
+ if ($isDryRun) {
+ $output->writeln('DRY RUN 模式 - 不会实际执行更新操作');
+ }
+
+ $output->writeln('开始更新 inquiry_log 表...');
+ $output->writeln("处理限制: {$limit} 条记录");
+
+ try {
+ // 使用事务确保数据一致性
+ DB::transaction(function () use ($output, $isDryRun, $limit) {
+ // 查询需要更新的记录
+ $customers = Db::table('crm_customer')
+ ->select('id', 'sn', 'user_id', 'obtain','created_at')
+ ->whereNotNull('sn')
+ ->where('sn', '<>', '')
+ ->offset($limit)
+ ->limit(4000)
+ ->orderBy('id', 'asc')
+ ->get();
+
+ $output->writeln("找到 " . count($customers) . " 条客户记录需要处理");
+
+ $updatedCount = 0;
+ $skippedCount = 0;
+ $defaultTimestamp = strtotime('2025-08-26 00:00:00');
+
+ $output->writeln("找到 " . count($customers) . " 条客户记录需要处理");
+ $step = [];
+ $updateId = [];
+ foreach ($customers as $customer) {
+ $output->writeln("处理客户 ID: {$customer->id}, SN: {$customer->sn}, User ID: {$customer->user_id}, obtain: {$customer->obtain}, created_at: {$customer->created_at}");
+ // 查找匹配的 inquiry_log 记录
+ $inquiryLog = Db::table('inquiry_log')
+ ->where('order_no', $customer->sn)
+ ->first(['id', 'recipient', 't_time']);
+
+ if (!$inquiryLog) {
+ $step[] = $customer->id;
+ $output->writeln("跳过客户 ID {$customer->id} (sn: {$customer->sn}) - 未找到对应的 inquiry_log 记录");
+ $skippedCount++;
+ continue;
+ }
+ $output->writeln("$inquiryLog->id");
+
+ // 准备更新数据
+ $updateData = [];
+
+ // 更新 recipient 字段 (user_id)
+ if ($customer->user_id != $inquiryLog->recipient) {
+ $updateData['recipient'] = $customer->user_id;
+ $output->writeln("客户 ID {$customer->id}: recipient 将从 {$inquiryLog->recipient} 更新为 {$customer->user_id}");
+ }
+
+ if(empty($customer->obtain)&& !empty($customer->user_id)){
+ if($customer->user_id == $inquiryLog->recipient){
+ $obtain = $inquiryLog->t_time;
+ }else{
+ $obtain = strtotime('2025-08-01 10:00:00');
+ $obtain = $customer->created_at > $obtain?$customer->created_at:$obtain;
+ }
+ Db::table('crm_customer')
+ ->where('id', $customer->id)
+ ->update(['obtain' => $obtain]);
+ $output->writeln("更新obtain $obtain");
+ }
+
+ // 更新 t_time 字段 (obtain)
+ $newTTime = $customer->obtain > 0 ? $customer->obtain : $defaultTimestamp;
+ if ($newTTime != $inquiryLog->t_time && !empty($updateData['recipient'])) {
+ $updateData['t_time'] = $newTTime;
+ $timeStr = date('Y-m-d H:i:s', $newTTime);
+ $output->writeln("客户 ID {$customer->id}: t_time 将从 " . ($inquiryLog->t_time ? date('Y-m-d H:i:s', $inquiryLog->t_time) : 'NULL') . " 更新为 {$timeStr}");
+ }
+ if($customer->user_id == 0 && $inquiryLog->recipient != 0){
+ $updateData['recipient'] = 0;
+ $updateData['t_time'] = time();
+ $updateData['status'] = 1;
+ $updateData['r_time'] = time();
+
+ }
+
+ // 如果有需要更新的字段,执行更新
+ if (!empty($updateData)) {
+ $updateId[] = $customer->id;
+ if (!$isDryRun) {
+ Db::table('inquiry_log')
+ ->where('id', $inquiryLog->id)
+ ->update($updateData);
+ }
+ $updatedCount++;
+ $output->writeln("已更新 inquiry_log ID {$inquiryLog->id}");
+ } else {
+ $output->writeln("客户 ID {$customer->id} - 无需更新");
+ }
+ }
+
+ $output->writeln("处理完成!");
+ $output->writeln("总记录数: " . count($customers) . "");
+ $updateIdstr = implode(",", $updateId);
+ $output->writeln("更新记录数: {$updatedCount},更新id:$updateIdstr");
+ $stepstr = implode(",", $step);
+ $output->writeln("跳过记录数: {$skippedCount},跳过id: {$stepstr}");
+
+ if ($isDryRun) {
+ $output->writeln("DRY RUN 模式 - 未实际执行任何更新操作");
+ }
+ });
+
+ return self::SUCCESS;
+ } catch (\Exception $e) {
+ $output->writeln('执行过程中发生错误: ' . $e->getMessage() . '');
+ $output->writeln('错误位置: ' . $e->getFile() . ':' . $e->getLine() . '');
+ return self::FAILURE;
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/crm/controller/CustomerController.php b/app/crm/controller/CustomerController.php
index 104eae5..2779b4c 100644
--- a/app/crm/controller/CustomerController.php
+++ b/app/crm/controller/CustomerController.php
@@ -444,6 +444,8 @@ class CustomerController extends BaseController
'user_his' => $userId,
'user_id' => 0,
]);
+
+ CustomerService::inquiryUpdate($customer);
}
//软删除
@@ -562,13 +564,8 @@ class CustomerController extends BaseController
'user_his' => 0,
'user_id' => $userId,
]);
- if (!empty($customer->sn) && $customer->type==1){
- $inquiryLog = InquiryLog::where('order_no', $customer->sn)->first();
- if (!empty($inquiryLog)) {
- $inquiryLog->recipient = $userId;
- $inquiryLog->save();
- }
- }
+
+ CustomerService::inquiryUpdate($customer, $data['user_id']);
Db::commit();
} catch (\Throwable $e) {
Db::rollback();
@@ -609,13 +606,8 @@ class CustomerController extends BaseController
'user_his' => $item->user_id,
'user_id' => $user['id'],
]);
- if (!empty($customer->sn) && $customer->type==1){
- $inquiryLog = InquiryLog::where('order_no', $customer->sn)->first();
- if (!empty($inquiryLog)) {
- $inquiryLog->recipient = $userId;
- $inquiryLog->save();
- }
- }
+
+ CustomerService::inquiryUpdate($customer,$userId);
$item->restore();
}
diff --git a/app/crm/service/CustomerService.php b/app/crm/service/CustomerService.php
index fc1215c..81909b1 100644
--- a/app/crm/service/CustomerService.php
+++ b/app/crm/service/CustomerService.php
@@ -4,6 +4,7 @@ namespace app\crm\service;
use app\common\model\Corp;
use app\common\model\CustomerAudit;
+use app\common\model\InquiryLog;
use app\common\model\User;
use app\common\traits\crud\CrudServiceTrait;
use app\crm\logic\CustomerLogic;
@@ -246,12 +247,44 @@ class CustomerService
$customer->status = 2;
$res = $customer->save();
+ self::inquiryUpdate($customer);
+
//软删除
$customer->delete();
return $res;
}
+ /**
+ * 询单修改
+ */
+ public static function inquiryUpdate($customer,$userId = null)
+ {
+ if(empty($customer->sn) || $customer->type!=1){
+ return false;
+ }
+
+ $inquiryLog = InquiryLog::where('order_no', $customer->sn)->first();
+ if(empty($inquiryLog)){
+ return false;
+ }
+ $userId = $userId??$customer->user_id;
+
+ if ($userId == 0){
+ $inquiryLog->recipient = 0;
+ $inquiryLog->t_time = time();
+ $inquiryLog->status = 1;
+ $inquiryLog->r_time = time();
+ $inquiryLog->save();
+ }else {
+ $inquiryLog->recipient = $customer->user_id;
+ $inquiryLog->t_time = time();
+ $inquiryLog->save();
+ }
+ return true;
+ }
+
+
/**
* @param $customer
* @param $request
diff --git a/app/crmAdmin/service/CustomerService.php b/app/crmAdmin/service/CustomerService.php
index 43682e5..41bf5d7 100644
--- a/app/crmAdmin/service/CustomerService.php
+++ b/app/crmAdmin/service/CustomerService.php
@@ -348,13 +348,8 @@ class CustomerService
'user_his' => $item->user_id,
'user_id' => $userId,
]);
- if (!empty($item->sn) && $item->type==1){
- $inquiryLog = InquiryLog::where('order_no', $item->sn)->first();
- if (!empty($inquiryLog)) {
- $inquiryLog->recipient = $userId;
- $inquiryLog->save();
- }
- }
+
+ \app\crm\service\CustomerService::inquiryUpdate($item,$userId);
}
$data = [
'user_id' => $userId,
@@ -391,6 +386,8 @@ class CustomerService
'user_his' => $item->user_id,
'user_id' => 0,
]);
+
+ \app\crm\service\CustomerService::inquiryUpdate($item,0);
}
$res = $query->update(['user_id' => 0]);