Переглянути джерело

调整小程序客户显示信息,后台调整部分功能

yb 6 місяців тому
батько
коміт
87e0b4796b

+ 12 - 0
app/admin/controller/consultant/CustomController.php

@@ -137,6 +137,18 @@ class CustomController extends Curd
         return CustomService::moveCustom($params);
     }
 
+    /**
+     * Notes: 指定顾问
+     * User: yb
+     * Date: 2024/9/5
+     * Time: 12:51
+     */
+    public function appointConsultant(Request $request)
+    {
+        $params = $request->post();
+        return CustomService::appoint($params);
+    }
+
     /**
      * Notes: 转移记录
      * User: yb

+ 102 - 12
app/admin/service/consultant/CustomService.php

@@ -99,7 +99,7 @@ class CustomService
         if (!empty($params['consultant_name'])) {
             $consultantIds = Consultant::where('name', 'like', "%{$params['consultant_name']}%")->pluck('id');
             $where[] = [function($query) use ($consultantIds) {
-                $query->whereIn('consultant_id', $consultantIds);
+                $query->orWhereIn('consultant_id', $consultantIds)->orWhereIn('report_consultant_id', $consultantIds);
             }];
         }
         if (!empty($params['type'])) {
@@ -141,7 +141,10 @@ class CustomService
             }
         }
         if (!empty($params['consultant_id'])) {
-            $where[] = ['consultant_id', '=', $params['consultant_id']];
+            $consultantId = $params['consultant_id'];
+            $where[] = [function($query) use ($consultantId) {
+                $query->orWhere('consultant_id', $consultantId)->orWhere('report_consultant_id', $consultantId);
+            }];
         }
         if (!empty($params['custom'])) {
             $keywords = $params['custom'];
@@ -252,14 +255,25 @@ class CustomService
         $total = $paginator->total();
         $items = $paginator->items();
         if (!empty($items)) {
+            //查询顾问信息
             $consultantKeys = [];
+            $reportConsultantIds = $paginator->pluck('report_consultant_id')->toArray();
             $consultantIds = $paginator->pluck('consultant_id')->toArray();
-            if (!empty($consultantIds)) {
-                //去重
-                $consultantIds = array_unique($consultantIds);
-                //排序
-                $consultantIds = array_values($consultantIds);
-                //查询顾问信息
+            if (!empty($consultantIds) || !empty($reportConsultantIds)) {
+                if (!empty($consultantIds)) {
+                    //去重
+                    $consultantIds = array_unique($consultantIds);
+                    //排序
+                    $consultantIds = array_values($consultantIds);
+                }
+                if (!empty($reportConsultantIds)) {
+                    //去重
+                    $reportConsultantIds = array_unique($reportConsultantIds);
+                    //排序
+                    $reportConsultantIds = array_values($reportConsultantIds);
+                }
+                $consultantIds = array_merge($consultantIds, $reportConsultantIds);
+
                 $consultantList = Consultant::whereIn('id', $consultantIds)->select(['id', 'name', 'mobile'])->get();
                 if (!$consultantList->isEmpty()) {
                     foreach ($consultantList->toArray() as $consultantItem) {
@@ -267,6 +281,9 @@ class CustomService
                     }
                 }
             }
+
+
+
             $teamKeys = TeamService::getItemKeys();
             foreach ($items as &$item) {
                 $visitTime = $item->visit_time;
@@ -275,6 +292,8 @@ class CustomService
                 $item->diff_nums =  ($diff > 0) ? $diff : 0;
                 $item->consultant_name = $consultantKeys[$item->consultant_id]['name'] ?? '';
                 $item->consultant_mobile = $consultantKeys[$item->consultant_id]['mobile'] ?? '';
+                $item->report_consultant_name = $consultantKeys[$item->report_consultant_id]['name'] ?? '';
+                $item->report_consultant_mobile = $consultantKeys[$item->report_consultant_id]['mobile'] ?? '';
                 $item->team_name = TeamService::getTeamName($teamKeys, $item->dept_id);
                 $item->mask_mobile = self::handlePhone($item->mobile);
             }
@@ -301,16 +320,18 @@ class CustomService
             return json_fail('客户已经登记过了');
         }
         //查询顾问信息
-        $consultantId = $params['consultant_id'];
-        $consultantInfo = Consultant::firstWhere(['id' => $consultantId]);
+        $reportConsultantId = $params['report_consultant_id'];
+        $consultantInfo = Consultant::firstWhere(['id' => $reportConsultantId]);
         if (empty($consultantInfo)) {
-            return json_fail('顾问信息不存在');
+            return json_fail('报备顾问信息不存在');
         }
         $deptId = $consultantInfo->dept_id;
         $insertData = [
             'name' => $params['name'],
             'mobile' => $mobile,
-            'consultant_id' => $consultantId,
+            'consultant_id' => 0,
+            'create_consultant_id' => $reportConsultantId,
+            'report_consultant_id' => $reportConsultantId,
             'dept_id' => $deptId,
             'gender' => $params['gender'] ?? null,
             'visit_type' => $params['visit_type'] ?? null,
@@ -799,6 +820,7 @@ class CustomService
                 //更新到访保护期时间
                 $info->visit_time = time();
             }
+            $info->consultant_id = $params['consultant_id'];
             $info->check_time = time();
             $info->check_admin_id = $adminId;
             $result = $info->save();
@@ -1041,4 +1063,72 @@ class CustomService
     {
         return substr_replace($val, '****', 3, 4);
     }
+
+    /**
+     * Notes: 判客指定顾问
+     * User: yb
+     * Date: 2024/9/5
+     * Time: 15:50
+     * @param $params
+     */
+    /**
+     * Notes: 指定顾问
+     * User: yb
+     * Date: 2024/9/5
+     * Time: 12:52
+     * @param $params
+     */
+    public static function appoint($params)
+    {
+        if (empty($params['id'])) {
+            return json_fail('请选择客户');
+        }
+        if (empty($params['report_consultant_id'])) {
+            return json_fail('请选择指定顾问');
+        }
+        $userId = JwtToken::getCurrentId();
+        $relationUserId = $userId;
+        $customId = $params['id'];
+        $reportConsultantId = $params['report_consultant_id'];
+        $customInfo = MarketCustomer::firstWhere(['id' => $customId]);
+        if (empty($customInfo)) {
+            return json_fail('客户信息不存在');
+        }
+        $consultantInfo = Consultant::firstWhere(['id' => $reportConsultantId]);
+        if (empty($consultantInfo)) {
+            return json_fail('顾问信息不存在');
+        }
+        $currentDeptId = $consultantInfo->dept_id; //当前部门
+        $now = time();
+        $logData = [
+            'market_customer_id' => $customId,
+            'consultant_id' => $reportConsultantId,
+            'dept_id' => $currentDeptId,
+            'before_consultant_id' => $customInfo->report_consultant_id,
+            'before_dept_id' => $customInfo->dept_id,
+            'note' => $params['note'] ?? '判客指定报备顾问',
+            'change_user_id' => $relationUserId,
+            'change_consultant_id' => 0,
+            'created_at' => $now
+        ];
+        Db::beginTransaction();
+        $result = false;
+        try {
+            $customInfo->report_consultant_id = $reportConsultantId;
+            $customInfo->dept_id = $currentDeptId;
+            $result = $customInfo->save();
+            MarketCustomerLogs::insert($logData);
+            Db::commit();
+        }catch (BusinessException|\Exception $e) {
+            Db::rollBack();
+            return json_fail($e->getMessage());
+        }
+        if ($result) {
+            return json_success('指定成功');
+        } else {
+            return json_fail('指定失败');
+        }
+
+
+    }
 }

+ 5 - 3
app/admin/validate/consultant/MarketCustomerValidate.php

@@ -15,14 +15,16 @@ class MarketCustomerValidate extends Validate
         'consultant_id|所属顾问' => 'require',
         'visit_time|访问时间' => 'require',
         'current_status|当前状态' => 'require',
-        'check_status|审核状态' => 'require'
+        'check_status|审核状态' => 'require',
+        'report_consultant_id|报备顾问' => 'require',
+        'consultant_id|健康顾问' => 'require',
     ];
 
     protected $message = [];
 
     protected $scene = [
-        'add' => ['mobile', 'name', 'consultant_id', 'visit_time', 'current_status'],
+        'add' => ['mobile', 'name', 'report_consultant_id', 'visit_time', 'current_status'],
         'update' => ['id', 'mobile', 'name', 'visit_time', 'current_status'],
-        'check' => ['id', 'check_status']
+        'check' => ['id', 'check_status', 'consultant_id']
     ];
 }

+ 18 - 3
app/wechat/service/CustomService.php

@@ -158,12 +158,14 @@ class CustomService
             }];
         }
         $fn = function ($query) {
-            $query->select('name', 'mobile', 'id');
+            $query->select('name', 'mobile', 'id', 'dept_id');
         };
         $paginator = MarketCustomer::with(['consultant' => $fn, 'report' => $fn])->where($where)->orderBy('visit_time', 'desc')->paginate($size, '*', 'page', $page);
         $total = $paginator->total();
         $items = $paginator->items();
         if (!empty($items)) {
+            //查询所有团队信息
+            $teamKeys = TeamService::getTeams()->pluck('dept_name', 'dept_id');
             $now = time();
             foreach ($items as &$item) {
                 $item->mask_mobile = self::handlePhone($item->mobile);
@@ -173,6 +175,12 @@ class CustomService
                 if ($visitTimeInt <= 0) {
                     $visitTimeInt = 0;
                 }
+                if (!empty($item->consultant)) {
+                    $item->consultant->dept_name = $teamKeys[$item->consultant->dept_id] ?? '';
+                }
+                if (!empty($item->report)) {
+                    $item->report->dept_name = $teamKeys[$item->report->dept_id] ?? '';
+                }
                 $item->visit_time_int = $visitTimeInt;
             }
         }
@@ -388,12 +396,19 @@ class CustomService
     public static function info($id)
     {
         $fn = function ($query) {
-            $query->select('name', 'mobile', 'id');
+            $query->select('name', 'mobile', 'id', 'dept_id');
         };
         $customInfo = MarketCustomer::with(['consultant' => $fn, 'report' => $fn])->firstWhere(['id' => $id]);
         if (empty($customInfo)) {
             return json_fail('客户不存在');
         }
+        $teamKeys = TeamService::getTeams()->pluck('dept_name', 'dept_id');
+        if (!empty($customInfo->consultant)) {
+            $customInfo->consultant->dept_name = $teamKeys[$customInfo->consultant->dept_id] ?? '';
+        }
+        if (!empty($customInfo->report)) {
+            $customInfo->report->dept_name = $teamKeys[$customInfo->report->dept_id] ?? '';
+        }
         //手机号加密处理
         $customInfo->mask_mobile = self::handlePhone($customInfo->mobile);
         //查询最新的跟进记录
@@ -508,7 +523,7 @@ class CustomService
             'dept_id' => $currentDeptId,
             'before_consultant_id' => $customInfo->consultant_id,
             'before_dept_id' => $customInfo->dept_id,
-            'note' => $params['note'] ?? '判客指定顾问',
+            'note' => $params['note'] ?? '判客指定报备顾问',
             'change_user_id' => $relationUserId,
             'change_consultant_id' => $userId,
             'created_at' => $now

+ 7 - 0
app/wechat/service/UserService.php

@@ -33,7 +33,14 @@ class UserService
         if (!empty($params['not_id'])) {
             $where[] = ['id', '<>', $params['not_id']];
         }
+        //获取所有团队
+        $teamKeys = TeamService::getTeams()->pluck('dept_name', 'dept_id');
         $list = Consultant::where($where)->select(['id','name','mobile','gender','status','dept_id','created_at'])->orderBy('created_at', 'desc')->get();
+        if (!empty($list)) {
+            foreach ($list as $item) {
+                $item->dept_name = $teamKeys[$item->dept_id] ?? '';
+            }
+        }
         return json_success('请求成功', $list);
     }
 

+ 1 - 0
route/admin.php

@@ -641,6 +641,7 @@ Route::group('/admin', function () {
             Route::get('/statistics', [\app\admin\controller\consultant\CustomController::class, 'statisticsIndex']);
             Route::get('/statistics_month', [\app\admin\controller\consultant\CustomController::class, 'statisticsByMonth']);
             Route::get('/export', [\app\admin\controller\consultant\CustomController::class, 'exportData']);
+            Route::post('/appoint', [\app\admin\controller\consultant\CustomController::class, 'appointConsultant']);
         });
     });
     Route::group('/customer', function () {