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]);