|  | @@ -4,15 +4,11 @@
 | 
	
		
			
				|  |  |  namespace app\admin\service\consultant;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -use app\admin\service\member\MemberService;
 | 
	
		
			
				|  |  |  use app\model\Consultant;
 | 
	
		
			
				|  |  |  use app\model\MarketCustomer;
 | 
	
		
			
				|  |  |  use app\model\MarketCustomerFollow;
 | 
	
		
			
				|  |  |  use app\model\MarketCustomerLogs;
 | 
	
		
			
				|  |  | -use app\model\Member;
 | 
	
		
			
				|  |  |  use app\model\SysDept;
 | 
	
		
			
				|  |  | -use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
 | 
	
		
			
				|  |  | -use PhpOffice\PhpSpreadsheet\IOFactory;
 | 
	
		
			
				|  |  |  use PhpOffice\PhpSpreadsheet\Reader\Csv;
 | 
	
		
			
				|  |  |  use PhpOffice\PhpSpreadsheet\Reader\Xls;
 | 
	
		
			
				|  |  |  use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
 | 
	
	
		
			
				|  | @@ -42,6 +38,7 @@ class CustomService
 | 
	
		
			
				|  |  |          $currentTime = time();
 | 
	
		
			
				|  |  |          $diffNums = self::DIFF_TIME;
 | 
	
		
			
				|  |  |          $deptIds = TeamService::getIdsByUser();
 | 
	
		
			
				|  |  | +        $belongStatus = $params['belong_status'] ?? 1;
 | 
	
		
			
				|  |  |          if (false === $deptIds) {
 | 
	
		
			
				|  |  |              //无权限
 | 
	
		
			
				|  |  |              $where[] = ['dept_id', '=', 0];
 | 
	
	
		
			
				|  | @@ -54,6 +51,13 @@ class CustomService
 | 
	
		
			
				|  |  |              $where[] = [function($query) use ($deptIds) {
 | 
	
		
			
				|  |  |                  $query->whereIn('dept_id', $deptIds);
 | 
	
		
			
				|  |  |              }];
 | 
	
		
			
				|  |  | +            $where[] = [function($query) use ($diffNums, $currentTime){
 | 
	
		
			
				|  |  | +                $query->orWhereRaw("check_status IN (-1, 1)")
 | 
	
		
			
				|  |  | +                    ->orWhereRaw("check_status = 2 AND current_status IN (-1,3,4)")
 | 
	
		
			
				|  |  | +                    ->orWhereRaw("((visit_time + {$diffNums}) - {$currentTime} > 0 AND current_status = 2 AND check_status = 2)")
 | 
	
		
			
				|  |  | +                    ->orWhereRaw("((visit_time + {$diffNums}) - {$currentTime} <= 0 AND (visit_time + ({$diffNums} * 4)) - {$currentTime} > 0 AND current_status = 2 AND check_status = 2 AND belong_status = 1)")->whereOr('belong_status','<>', 1);
 | 
	
		
			
				|  |  | +            }];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          } else {
 | 
	
		
			
				|  |  |              if (!empty($params['dept_id'])) {
 | 
	
		
			
				|  |  |                  $deptId = end($params['dept_id']);
 | 
	
	
		
			
				|  | @@ -76,35 +80,20 @@ class CustomService
 | 
	
		
			
				|  |  |                  $query->where('mobile', 'like', "%{$mobile}%");
 | 
	
		
			
				|  |  |              }];
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        if (!empty($params['report_status'])) {
 | 
	
		
			
				|  |  | -            $where[] = ['check_status', '=', $params['report_status']];
 | 
	
		
			
				|  |  | -//            if ($params['report_status'] == -1) {
 | 
	
		
			
				|  |  | -//                //待审核
 | 
	
		
			
				|  |  | -//                $where[] = ['check_status', '=', 1];
 | 
	
		
			
				|  |  | -//            } else {
 | 
	
		
			
				|  |  | -//                $where[] = ['check_status', '=', 2];
 | 
	
		
			
				|  |  | -//            }
 | 
	
		
			
				|  |  | -//            if ($params['report_status'] == 1) {
 | 
	
		
			
				|  |  | -//                //已报备
 | 
	
		
			
				|  |  | -//                $where[] = [function($query) use ($diffNums, $currentTime) {
 | 
	
		
			
				|  |  | -//                    $query->whereRaw("((visit_time + {$diffNums}) - {$currentTime} > 0)")->where('current_status', '=', 1);
 | 
	
		
			
				|  |  | -//                }];
 | 
	
		
			
				|  |  | -//            } else if ($params['report_status'] == 3) {
 | 
	
		
			
				|  |  | -//                //已锁定
 | 
	
		
			
				|  |  | -//                $where[] = [function($query) {
 | 
	
		
			
				|  |  | -//                    $query->whereIn('current_status', [2,3,4]);
 | 
	
		
			
				|  |  | -//                }];
 | 
	
		
			
				|  |  | -//            } else if ($params['report_status'] == 2) {
 | 
	
		
			
				|  |  | -//                //已失效
 | 
	
		
			
				|  |  | -//                $where[] = [function($query) use ($diffNums, $currentTime){
 | 
	
		
			
				|  |  | -//                    $query->orWhere('current_status', '=', -1)->orWhereRaw("((visit_time + {$diffNums}) - {$currentTime} <= 0 AND current_status = 1 AND check_status = 2)");
 | 
	
		
			
				|  |  | -//                }];
 | 
	
		
			
				|  |  | -//            }
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  |          if (!empty($params['consultant_name'])) {
 | 
	
		
			
				|  |  | -            $consultantIds = Consultant::where('name', 'like', "%{$params['consultant_name']}%")->pluck('id');
 | 
	
		
			
				|  |  | +            $consultantIds = Consultant::where('name', 'like', "%{$params['consultant_name']}%")
 | 
	
		
			
				|  |  | +                ->where('mobile', 'like', "%{$params['consultant_name']}%")
 | 
	
		
			
				|  |  | +                ->pluck('id')->toArray();
 | 
	
		
			
				|  |  | +            $where[] = [function($query) use ($consultantIds) {
 | 
	
		
			
				|  |  | +                $query->whereIn('consultant_id', $consultantIds);
 | 
	
		
			
				|  |  | +            }];
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (!empty($params['report_name'])) {
 | 
	
		
			
				|  |  | +            $consultantIds = Consultant::where('name', 'like', "%{$params['report_name']}%")
 | 
	
		
			
				|  |  | +                ->where('mobile', 'like', "%{$params['report_name']}%")
 | 
	
		
			
				|  |  | +                ->pluck('id')->toArray();
 | 
	
		
			
				|  |  |              $where[] = [function($query) use ($consultantIds) {
 | 
	
		
			
				|  |  | -                $query->orWhereIn('consultant_id', $consultantIds)->orWhereIn('report_consultant_id', $consultantIds);
 | 
	
		
			
				|  |  | +                $query->whereIn('report_consultant_id', $consultantIds);
 | 
	
		
			
				|  |  |              }];
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (!empty($params['type'])) {
 | 
	
	
		
			
				|  | @@ -137,11 +126,17 @@ class CustomService
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          if (!empty($params['current_status'])) {
 | 
	
		
			
				|  |  |              $currentStatus = $params['current_status'];
 | 
	
		
			
				|  |  | -            if ($currentStatus == 1) {
 | 
	
		
			
				|  |  | -                $where[] = ['current_status', '=', $currentStatus];
 | 
	
		
			
				|  |  | +            if ($currentStatus == -2) {
 | 
	
		
			
				|  |  | +                //检索公池状态
 | 
	
		
			
				|  |  | +                $where[] = [function($query) use ($diffNums, $currentTime){
 | 
	
		
			
				|  |  | +                    $query->whereRaw("((visit_time + {$diffNums}) - {$currentTime} <= 0 AND (visit_time + ({$diffNums} * 4)) - {$currentTime} > 0 AND current_status = 2 AND check_status = 2 AND belong_status = 1)");
 | 
	
		
			
				|  |  | +                }];
 | 
	
		
			
				|  |  |              } else {
 | 
	
		
			
				|  |  | -                $where[] = [function($query) use ($currentStatus){
 | 
	
		
			
				|  |  | -                    $query->where('current_status', '=', $currentStatus)->where('check_status', '<>', 1);
 | 
	
		
			
				|  |  | +                $where[] = ['current_status', '=', $currentStatus];
 | 
	
		
			
				|  |  | +                $where[] = [function($query) use ($diffNums, $currentTime){
 | 
	
		
			
				|  |  | +                    $query->orWhereRaw("check_status IN (-1, 1)")
 | 
	
		
			
				|  |  | +                        ->orWhereRaw("check_status = 2 AND current_status IN (-1,3,4)")
 | 
	
		
			
				|  |  | +                        ->orWhereRaw("((visit_time + {$diffNums}) - {$currentTime} > 0 AND current_status = 2 AND check_status = 2)");
 | 
	
		
			
				|  |  |                  }];
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
	
		
			
				|  | @@ -494,13 +489,20 @@ class CustomService
 | 
	
		
			
				|  |  |          if (!is_array($ids)) {
 | 
	
		
			
				|  |  |              $ids = [$ids];
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +        Db::beginTransaction();
 | 
	
		
			
				|  |  |          try {
 | 
	
		
			
				|  |  |              if (is_array($ids)) {
 | 
	
		
			
				|  |  |                  MarketCustomer::whereIn('id', $ids)->delete();
 | 
	
		
			
				|  |  | +                MarketCustomerFollow::whereIn('market_customer_id', $ids)->delete();//删除跟进记录
 | 
	
		
			
				|  |  | +                MarketCustomerLogs::whereIn('market_customer_id', $ids)->delete();//删除移交记录
 | 
	
		
			
				|  |  |              } else {
 | 
	
		
			
				|  |  |                  MarketCustomer::where('id', $ids)->delete();
 | 
	
		
			
				|  |  | +                MarketCustomerFollow::where('market_customer_id', $ids)->delete();//删除跟进记录
 | 
	
		
			
				|  |  | +                MarketCustomerLogs::where('market_customer_id', $ids)->delete();//删除移交记录
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | +            Db::commit();
 | 
	
		
			
				|  |  |          } catch (\Exception $e) {
 | 
	
		
			
				|  |  | +            Db::rollBack();
 | 
	
		
			
				|  |  |              return json_fail('删除失败');
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -645,7 +647,7 @@ class CustomService
 | 
	
		
			
				|  |  |                  $query->whereIn('consultant_id', $consultantIds);
 | 
	
		
			
				|  |  |              }];
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        $customList = MarketCustomer::where($whereCustom)->select(['id','consultant_id','dept_id','visit_time'])->get();
 | 
	
		
			
				|  |  | +        $customList = MarketCustomer::where($whereCustom)->select(['id','consultant_id','dept_id','visit_time','check_status','current_status'])->get();
 | 
	
		
			
				|  |  |          if (!$customList->isEmpty()) {
 | 
	
		
			
				|  |  |              foreach ($customList as$item) {
 | 
	
		
			
				|  |  |                  $logsInertData[] = [
 | 
	
	
		
			
				|  | @@ -674,10 +676,12 @@ class CustomService
 | 
	
		
			
				|  |  |                  if ($currentConsultantId != 0) {
 | 
	
		
			
				|  |  |                      //移交至指定顾问
 | 
	
		
			
				|  |  |                      //判断一下是否到了到访的过期时间,如果过期了就更新到访时间,没过期时间就不变
 | 
	
		
			
				|  |  | -                    $visitTime = $item->visit_time;
 | 
	
		
			
				|  |  | -                    $diff = strtotime($visitTime) + $diffTime - time();
 | 
	
		
			
				|  |  | -                    if ($diff <= 0) {
 | 
	
		
			
				|  |  | -                        $item->visit_time = time();
 | 
	
		
			
				|  |  | +                    if ($item->check_status == 2 && $item->current_status == 2) {
 | 
	
		
			
				|  |  | +                        $visitTime = $item->visit_time;
 | 
	
		
			
				|  |  | +                        $diff = strtotime($visitTime) + $diffTime - time();
 | 
	
		
			
				|  |  | +                        if ($diff <= 0) {
 | 
	
		
			
				|  |  | +                            $item->visit_time = time();
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |                  } else {
 | 
	
		
			
				|  |  |                      //移交至其他团队
 | 
	
	
		
			
				|  | @@ -1222,22 +1226,27 @@ class CustomService
 | 
	
		
			
				|  |  |                          $msg = '';
 | 
	
		
			
				|  |  |                          if (empty($val[7]) && empty($val[8])) {
 | 
	
		
			
				|  |  |                              $msg = $line.'报备人和顾问必须存在其中之一';
 | 
	
		
			
				|  |  | -                            throw new \Exception($line.'报备人和顾问必须存在其中之一');
 | 
	
		
			
				|  |  | +                            $val[10] = '报备人和顾问必须存在其中之一';
 | 
	
		
			
				|  |  | +//                            throw new \Exception($line.'报备人和顾问必须存在其中之一');
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |                          if (empty($val[9])) {
 | 
	
		
			
				|  |  |                              $msg = $line.'无团队信息';
 | 
	
		
			
				|  |  | -                            throw new \Exception($line.'无团队信息');
 | 
	
		
			
				|  |  | +                            $val[10] = '无团队信息';
 | 
	
		
			
				|  |  | +//                            throw new \Exception($line.'无团队信息');
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |                          if ($val[0] == '1970-01-01 08:00:00') {
 | 
	
		
			
				|  |  |                              $msg = $line.'日期格式错误';
 | 
	
		
			
				|  |  | +                            $val[10] = '日期格式错误';
 | 
	
		
			
				|  |  |  //                            throw new \Exception($line.'日期格式错误');
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |                          if (empty($mobile)) {
 | 
	
		
			
				|  |  |                              $msg = $line.'手机号不能为空';
 | 
	
		
			
				|  |  | +                            $val[10] = '手机号不能为空';
 | 
	
		
			
				|  |  |  //                            throw new \Exception($line.'手机号不能为空');
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |                          if (!preg_match($validate, $mobile)) {
 | 
	
		
			
				|  |  |                              $msg = $line.'手机号格式非法';
 | 
	
		
			
				|  |  | +                            $val[10] = '手机号格式非法';
 | 
	
		
			
				|  |  |  //                            throw new \Exception($line.'手机号格式非法');
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |                          $consultantName = $val[7];
 | 
	
	
		
			
				|  | @@ -1249,6 +1258,7 @@ class CustomService
 | 
	
		
			
				|  |  |                          $reportConsultantId = $teamKeys[$reportKey]['consultant_id'] ?? 0;
 | 
	
		
			
				|  |  |                          if ($consultantId <= 0 && $reportConsultantId <= 0) {
 | 
	
		
			
				|  |  |                              $msg = $line.'健康顾问或报备人都不存在';
 | 
	
		
			
				|  |  | +                            $val[10] = '健康顾问或报备人都不存在';
 | 
	
		
			
				|  |  |  //                            throw new \Exception($line.'健康顾问或报备人都不存在');
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |                          if ($consultantId > 0) {
 | 
	
	
		
			
				|  | @@ -1263,37 +1273,38 @@ class CustomService
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |                          if (empty($deptId)) {
 | 
	
		
			
				|  |  |                              $msg =  $line.'健康顾问或报备人都不存在';
 | 
	
		
			
				|  |  | +                            $val[10] = '健康顾问或报备人都不存在';
 | 
	
		
			
				|  |  |  //                            throw new \Exception($line.'团队不存在');
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |                          if (MarketCustomer::checkCustomExists($val[2])) {
 | 
	
		
			
				|  |  |                              $msg =  $line.'客户已转到访,无法二次录入';
 | 
	
		
			
				|  |  | +                            $val[10] = '客户已转到访,无法二次录入';
 | 
	
		
			
				|  |  |  //                            throw new \Exception($line.'客户已转到访,无法二次录入');
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  | -                        //查看手机号是否存在
 | 
	
		
			
				|  |  | -                        $insertData = [
 | 
	
		
			
				|  |  | -                            'name' => $val[1],
 | 
	
		
			
				|  |  | -                            'mobile' => $mobile,
 | 
	
		
			
				|  |  | -                            'level' => $level ?? null,
 | 
	
		
			
				|  |  | -                            'consultant_id' => $consultantId,
 | 
	
		
			
				|  |  | -                            'report_consultant_id' => $reportConsultantId,
 | 
	
		
			
				|  |  | -                            'create_consultant_id' => $reportConsultantId,
 | 
	
		
			
				|  |  | -                            'dept_id' => $deptId,
 | 
	
		
			
				|  |  | -                            'belong_status' => 1,
 | 
	
		
			
				|  |  | -                            'current_status' => 2,
 | 
	
		
			
				|  |  | -                            'check_status' => 2,
 | 
	
		
			
				|  |  | -                            'check_note' => '导入的客户信息,无审核人员',
 | 
	
		
			
				|  |  | -                            'type' => 1,
 | 
	
		
			
				|  |  | -                            'visit_time' => strtotime('2024-08-31 00:00:00'),
 | 
	
		
			
				|  |  | -                            'created_at' => strtotime('2024-08-31 00:00:00')
 | 
	
		
			
				|  |  | -                        ];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |                          $result = false;
 | 
	
		
			
				|  |  |                          if (empty($msg)) {
 | 
	
		
			
				|  |  | +                            //查看手机号是否存在
 | 
	
		
			
				|  |  | +                            $insertData = [
 | 
	
		
			
				|  |  | +                                'name' => $val[1],
 | 
	
		
			
				|  |  | +                                'mobile' => $mobile,
 | 
	
		
			
				|  |  | +                                'level' => $level ?? null,
 | 
	
		
			
				|  |  | +                                'consultant_id' => $consultantId,
 | 
	
		
			
				|  |  | +                                'report_consultant_id' => $reportConsultantId,
 | 
	
		
			
				|  |  | +                                'create_consultant_id' => $reportConsultantId,
 | 
	
		
			
				|  |  | +                                'dept_id' => $deptId ?? 0,
 | 
	
		
			
				|  |  | +                                'belong_status' => 1,
 | 
	
		
			
				|  |  | +                                'current_status' => 2,
 | 
	
		
			
				|  |  | +                                'check_status' => 2,
 | 
	
		
			
				|  |  | +                                'check_note' => '导入的客户信息,无审核人员',
 | 
	
		
			
				|  |  | +                                'type' => 1,
 | 
	
		
			
				|  |  | +                                'visit_time' => strtotime($val[0]),
 | 
	
		
			
				|  |  | +                                'created_at' => strtotime($val[0])
 | 
	
		
			
				|  |  | +                            ];
 | 
	
		
			
				|  |  |                              $result = Db::table('market_customer')->insert($insertData);
 | 
	
		
			
				|  |  |                          } else {
 | 
	
		
			
				|  |  | -                            $errorData[] = [
 | 
	
		
			
				|  |  | -                                'msg' => $msg,
 | 
	
		
			
				|  |  | -                                'val' => $val
 | 
	
		
			
				|  |  | -                            ];
 | 
	
		
			
				|  |  | +                            $val[11] = $line;
 | 
	
		
			
				|  |  | +                            $errorData[] = $val;
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |                          if ($result) {
 | 
	
		
			
				|  |  |                              $sucNums++;
 |