From b989c19a8add86dab4aa32776188064529f8a858 Mon Sep 17 00:00:00 2001 From: wong <106998207@qq.com> Date: Fri, 12 Sep 2025 09:40:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/controller/UserController.php | 2 +- .../PostCreateAddFriendPlanV1Controller.php | 8 +- .../PostUpdateAddFriendPlanV1Controller.php | 10 +- ...PotentialListWithInCompanyV1Controller.php | 438 ++++++++++++------ .../company/CreateCompanyController.php | 2 +- 5 files changed, 310 insertions(+), 150 deletions(-) diff --git a/Server/application/api/controller/UserController.php b/Server/application/api/controller/UserController.php index f0fcdf5e..209f1b0e 100644 --- a/Server/application/api/controller/UserController.php +++ b/Server/application/api/controller/UserController.php @@ -288,7 +288,7 @@ class UserController extends BaseController } // 如果不是预期的格式,返回原始数据 - return !empty($isJson) ? json_encode(['code' => 500,'data' => $response]) : errorJson('无需验证码'); + return !empty($isJson) ? json_encode(['code' => 200,'msg' => '无需验证码','data' => ['verifyCodeImage' => '', 'verifySessionId' => '']]) : successJson(['verifyCodeImage' => '', 'verifySessionId' => ''],'无需验证码'); } catch (\Exception $e) { $msg = '获取验证码失败'. $e->getMessage(); return !empty($isJson) ? json_encode(['code' => 400,'msg' => $msg]) : errorJson($msg); diff --git a/Server/application/cunkebao/controller/plan/PostCreateAddFriendPlanV1Controller.php b/Server/application/cunkebao/controller/plan/PostCreateAddFriendPlanV1Controller.php index 63cddf97..228841b6 100644 --- a/Server/application/cunkebao/controller/plan/PostCreateAddFriendPlanV1Controller.php +++ b/Server/application/cunkebao/controller/plan/PostCreateAddFriendPlanV1Controller.php @@ -65,7 +65,7 @@ class PostCreateAddFriendPlanV1Controller extends BaseController return ResponseHelper::error('场景ID不能为空', 400); } - if (empty($params['deveiceGroups'])) { + if (empty($params['deviceGroups'])) { return ResponseHelper::error('请选择设备', 400); } @@ -77,7 +77,7 @@ class PostCreateAddFriendPlanV1Controller extends BaseController 'customTags' => $params['customTags'] ?? [], ]; $reqConf = [ - 'device' => $params['deveiceGroups'] ?? [], + 'device' => $params['deviceGroups'] ?? [], 'remarkType' => $params['remarkType'] ?? '', 'greeting' => $params['greeting'] ?? '', 'addFriendInterval' => $params['addFriendInterval'] ?? '', @@ -138,9 +138,9 @@ class PostCreateAddFriendPlanV1Controller extends BaseController //订单 if ($params['sceneId'] == 2) { - if (!empty($params['orderTableFile'])) { + if (!empty($params['orderFileUrl'])) { // 先下载到本地临时文件,再分析,最后删除 - $originPath = $params['orderTableFile']; + $originPath = $params['orderFileUrl']; $tmpFile = tempnam(sys_get_temp_dir(), 'order_'); // 判断是否为远程文件 if (preg_match('/^https?:\/\//i', $originPath)) { diff --git a/Server/application/cunkebao/controller/plan/PostUpdateAddFriendPlanV1Controller.php b/Server/application/cunkebao/controller/plan/PostUpdateAddFriendPlanV1Controller.php index 1e70104a..e9810fd5 100644 --- a/Server/application/cunkebao/controller/plan/PostUpdateAddFriendPlanV1Controller.php +++ b/Server/application/cunkebao/controller/plan/PostUpdateAddFriendPlanV1Controller.php @@ -35,7 +35,7 @@ class PostUpdateAddFriendPlanV1Controller extends BaseController return ResponseHelper::error('场景ID不能为空', 400); } - if (empty($params['deveiceGroups'])) { + if (empty($params['deviceGroups'])) { return ResponseHelper::error('请选择设备', 400); } @@ -55,7 +55,7 @@ class PostUpdateAddFriendPlanV1Controller extends BaseController 'customTags' => $params['customTags'] ?? [], ]; $reqConf = [ - 'device' => $params['deveiceGroups'] ?? [], + 'device' => $params['deviceGroups'] ?? [], 'remarkType' => $params['remarkType'] ?? '', 'greeting' => $params['greeting'] ?? '', 'addFriendInterval' => $params['addFriendInterval'] ?? '', @@ -76,7 +76,7 @@ class PostUpdateAddFriendPlanV1Controller extends BaseController $sceneConf['messagePlans'], $sceneConf['scenarioTags'], $sceneConf['customTags'], - $sceneConf['deveiceGroups'], + $sceneConf['deviceGroups'], $sceneConf['orderTableFileName'], $sceneConf['userInfo'], $sceneConf['textUrl'], @@ -113,9 +113,9 @@ class PostUpdateAddFriendPlanV1Controller extends BaseController //订单 if ($params['sceneId'] == 2) { - if (!empty($params['orderTableFile'])) { + if (!empty($params['orderFileUrl'])) { // 先下载到本地临时文件,再分析,最后删除 - $originPath = $params['orderTableFile']; + $originPath = $params['orderFileUrl']; $tmpFile = tempnam(sys_get_temp_dir(), 'order_'); // 判断是否为远程文件 if (preg_match('/^https?:\/\//i', $originPath)) { diff --git a/Server/application/cunkebao/controller/traffic/GetPotentialListWithInCompanyV1Controller.php b/Server/application/cunkebao/controller/traffic/GetPotentialListWithInCompanyV1Controller.php index 006e800b..85b0944f 100644 --- a/Server/application/cunkebao/controller/traffic/GetPotentialListWithInCompanyV1Controller.php +++ b/Server/application/cunkebao/controller/traffic/GetPotentialListWithInCompanyV1Controller.php @@ -22,11 +22,11 @@ class GetPotentialListWithInCompanyV1Controller extends BaseController */ protected function makeWhere(array $params = []): array { - $keyword = $this->request->param('keyword',''); + $keyword = $this->request->param('keyword', ''); $device = $this->request->param('deviceId'); - $status = $this->request->param('addStatus',''); - $taskId = $this->request->param('taskId',''); - $packageId = $this->request->param('packageId',''); + $status = $this->request->param('addStatus', ''); + $taskId = $this->request->param('taskId', ''); + $packageId = $this->request->param('packageId', ''); $where = []; if (!empty($keyword)) { $where[] = ['p.identifier|wa.nickname|wa.phone|wa.wechatId|wa.alias', 'like', '%' . $keyword . '%']; @@ -34,35 +34,35 @@ class GetPotentialListWithInCompanyV1Controller extends BaseController // 状态筛选 if (!empty($status)) { - if ($status == 1){ - $where[] = ['s.status','=',4]; - }elseif ($status == 2){ - $where[] = ['s.status','=',0]; - }elseif ($status == -1){ - $where[] = ['s.status','=',2]; - }elseif ($status == 3){ - $where[] = ['s.status','=',2]; + if ($status == 1) { + $where[] = ['s.status', '=', 4]; + } elseif ($status == 2) { + $where[] = ['s.status', '=', 0]; + } elseif ($status == -1) { + $where[] = ['s.status', '=', 2]; + } elseif ($status == 3) { + $where[] = ['s.status', '=', 2]; } } // 来源的筛选 if ($packageId) { if ($packageId != -1) { - $where[] = ['tsp.id','=',$packageId]; + $where[] = ['tsp.id', '=', $packageId]; } else { - $where[] = ['tsp.id','=', null]; + $where[] = ['tsp.id', '=', null]; } } if (!empty($device)) { - $where[] = ['d.deviceId','=',$device]; + $where[] = ['d.deviceId', '=', $device]; } - if (!empty($taskId)){ - $where[] = ['t.sceneId','=',$taskId]; + if (!empty($taskId)) { + $where[] = ['t.sceneId', '=', $taskId]; } - $where[] = ['s.companyId','=',$this->getUserInfo('companyId')]; + $where[] = ['s.companyId', '=', $this->getUserInfo('companyId')]; return $where; } @@ -73,14 +73,14 @@ class GetPotentialListWithInCompanyV1Controller extends BaseController * @param array $where * @return \think\Paginator */ - protected function getPoolListByCompanyId(array $where,$isPage = true) + protected function getPoolListByCompanyId(array $where, $isPage = true) { $query = TrafficPoolModel::alias('p') ->field( [ 'p.id', 'p.identifier', 'p.mobile', 'p.wechatId', 'p.identifier', 's.fromd', 's.status', 's.createTime', 's.companyId', 's.sourceId', 's.type', - 'wa.nickname', 'wa.avatar', 'wa.gender', 'wa.phone','wa.alias' + 'wa.nickname', 'wa.avatar', 'wa.gender', 'wa.phone', 'wa.alias' ] ) ->join('traffic_source s', 'p.identifier=s.identifier') @@ -93,14 +93,14 @@ class GetPotentialListWithInCompanyV1Controller extends BaseController $result = $query->order('p.id DESC,s.id DESC')->group('p.identifier'); - if ($isPage) { - $result = $query->paginate($this->request->param('limit/d', 10), false, ['page' => $this->request->param('page/d', 1)]); - $list = $result->items(); - $total = $result->total(); - }else{ - $list = $result->select(); - $total = ''; - } + if ($isPage) { + $result = $query->paginate($this->request->param('limit/d', 10), false, ['page' => $this->request->param('page/d', 1)]); + $list = $result->items(); + $total = $result->total(); + } else { + $list = $result->select(); + $total = ''; + } if ($isPage) { @@ -172,7 +172,7 @@ class GetPotentialListWithInCompanyV1Controller extends BaseController $data = TrafficPoolModel::alias('p') ->field(['p.id', 'p.identifier', 'p.wechatId', - 'wa.nickname', 'wa.avatar', 'wa.gender', 'wa.phone','wa.alias']) + 'wa.nickname', 'wa.avatar', 'wa.gender', 'wa.phone', 'wa.alias']) ->join('wechat_account wa', 'p.identifier=wa.wechatId', 'left') ->order('p.id DESC') ->where(['p.id' => $userId]) @@ -181,38 +181,37 @@ class GetPotentialListWithInCompanyV1Controller extends BaseController $data['lastMsgTime'] = ''; - //来源 $source = Db::name('traffic_source')->alias('ts') - ->field(['wa.nickname', 'wa.avatar', 'wa.gender','wa.phone','wa.wechatId','wa.alias', + ->field(['wa.nickname', 'wa.avatar', 'wa.gender', 'wa.phone', 'wa.wechatId', 'wa.alias', 'ts.createTime', - 'wf.id as friendId','wf.wechatAccountId']) + 'wf.id as friendId', 'wf.wechatAccountId']) ->join('wechat_account wa', 'ts.sourceId=wa.wechatId', 'left') ->join(['s2_wechat_friend' => 'wf'], 'wa.wechatId=wf.ownerWechatId', 'left') - ->where(['ts.companyId' => $companyId,'ts.identifier' => $data['identifier'],'wf.wechatId' => $data['wechatId']]) + ->where(['ts.companyId' => $companyId, 'ts.identifier' => $data['identifier'], 'wf.wechatId' => $data['wechatId']]) ->order('ts.createTime DESC') ->select(); $wechatFriendId = []; if (!empty($source)) { $total['isFriend'] = true; - foreach ($source as &$v) { + foreach ($source as &$v) { $wechatFriendId[] = $v['friendId']; //最后消息 $v['createTime'] = date('Y-m-d H:i:s', $v['createTime']); $lastMsgTime = Db::table('s2_wechat_message') - ->where(['wechatFriendId' => $v['friendId'],'wechatAccountId' => $v['wechatAccountId']]) + ->where(['wechatFriendId' => $v['friendId'], 'wechatAccountId' => $v['wechatAccountId']]) ->value('wechatTime'); $v['lastMsgTime'] = !empty($lastMsgTime) ? date('Y-m-d H:i:s', $lastMsgTime) : ''; //设备信息 $device = Db::name('device_wechat_login')->alias('dwl') - ->join('device d','d.id=dwl.deviceId') + ->join('device d', 'd.id=dwl.deviceId') ->where(['dwl.wechatId' => $v['wechatId']]) ->field('d.id,d.memo,d.imei,d.brand,d.extra,d.alive') ->order('dwl.id DESC') ->find(); - $extra = json_decode($device['extra'],true); + $extra = json_decode($device['extra'], true); unset($device['extra']); $device['address'] = !empty($extra['address']) ? $extra['address'] : ''; $v['device'] = $device; @@ -235,9 +234,9 @@ class GetPotentialListWithInCompanyV1Controller extends BaseController $data['packages'] = $packages; - if (!empty($wechatFriendId)){ + if (!empty($wechatFriendId)) { //消息统计 - $msgTotal = Db::table('s2_wechat_message') + $msgTotal = Db::table('s2_wechat_message') ->whereIn('wechatFriendId', $wechatFriendId) ->count(); $total['msg'] = $msgTotal; @@ -245,12 +244,12 @@ class GetPotentialListWithInCompanyV1Controller extends BaseController //金额计算 $money = Db::table('s2_wechat_message') ->whereIn('wechatFriendId', $wechatFriendId) - ->where(['isSend' => 1,'msgType' => 419430449]) + ->where(['isSend' => 1, 'msgType' => 419430449]) ->select(); - if (!empty($money)){ - foreach ($money as $v){ - $content = json_decode($v['content'],true); - if ($content['paysubtype'] == 1){ + if (!empty($money)) { + foreach ($money as $v) { + $content = json_decode($v['content'], true); + if ($content['paysubtype'] == 1) { $number = number_format(str_replace("¥", "", $content['feedesc']), 2); $floatValue = floatval($number); $total['money'] += $floatValue; @@ -260,24 +259,23 @@ class GetPotentialListWithInCompanyV1Controller extends BaseController } $taskNum = Db::name('task_customer')->alias('tc') - ->join('customer_acquisition_task t','tc.task_id=t.id') - ->where(['t.companyId' => $companyId,'t.deleteTime' => 0]) - ->whereIn('tc.phone',[$data['phone'], $data['wechatId'], $data['alias']]) + ->join('customer_acquisition_task t', 'tc.task_id=t.id') + ->where(['t.companyId' => $companyId, 't.deleteTime' => 0]) + ->whereIn('tc.phone', [$data['phone'], $data['wechatId'], $data['alias']]) ->count(); $passNum = Db::name('task_customer')->alias('tc') - ->join('customer_acquisition_task t','tc.task_id=t.id') - ->where(['t.companyId' => $companyId,'t.deleteTime' => 0,'tc.status' => 4]) - ->whereIn('tc.phone',[$data['phone'], $data['wechatId'], $data['alias']]) + ->join('customer_acquisition_task t', 'tc.task_id=t.id') + ->where(['t.companyId' => $companyId, 't.deleteTime' => 0, 'tc.status' => 4]) + ->whereIn('tc.phone', [$data['phone'], $data['wechatId'], $data['alias']]) ->count(); - if (!empty($taskNum) && !empty($passNum)){ - $percentage = number_format(($taskNum / $passNum) * 100, 2); - $total['percentage'] = $percentage; + if (!empty($taskNum) && !empty($passNum)) { + $percentage = number_format(($taskNum / $passNum) * 100, 2); + $total['percentage'] = $percentage; } - $data['total'] = $total; $data['rmm'] = [ 'r' => 0, @@ -332,7 +330,7 @@ class GetPotentialListWithInCompanyV1Controller extends BaseController return json_encode(['code' => 500, 'msg' => '用户id不能为空']); } $data = Db::name('traffic_pool')->alias('tp') - ->join('wechat_friendship f', 'tp.wechatId=f.wechatId AND f.companyId='.$companyId, 'left') + ->join('wechat_friendship f', 'tp.wechatId=f.wechatId AND f.companyId=' . $companyId, 'left') ->join(['s2_wechat_friend' => 'wf'], 'f.wechatId=wf.wechatId', 'left') ->where(['tp.id' => $userId]) ->order('tp.createTime desc') @@ -365,22 +363,22 @@ class GetPotentialListWithInCompanyV1Controller extends BaseController public function getPackage() { - $page = $this->request->param('page',1); - $limit = $this->request->param('limit',10); - $keyword = $this->request->param('keyword',''); + $page = $this->request->param('page', 1); + $limit = $this->request->param('limit', 10); + $keyword = $this->request->param('keyword', ''); $companyId = $this->getUserInfo('companyId'); $package = Db::name('traffic_source_package')->alias('tsp') - ->join('traffic_source_package_item tspi','tspi.packageId=tsp.id','left') - ->whereIn('tsp.companyId', [$companyId,0]) + ->join('traffic_source_package_item tspi', 'tspi.packageId=tsp.id', 'left') + ->whereIn('tsp.companyId', [$companyId, 0]) ->field('tsp.id,tsp.name,tsp.description,tsp.createTime,count(tspi.id) as num') ->group('tsp.id'); - if (!empty($keyword)){ - $package->where('tsp.name|tsp.description','like','%'.$keyword.'%'); + if (!empty($keyword)) { + $package->where('tsp.name|tsp.description', 'like', '%' . $keyword . '%'); } - $list = $package->page($page,$limit)->select(); + $list = $package->page($page, $limit)->select(); $total = $package->count(); foreach ($list as $k => &$v) { @@ -389,44 +387,51 @@ class GetPotentialListWithInCompanyV1Controller extends BaseController unset($v); $data = [ - 'total' => $total, - 'list' => $list, + 'total' => $total, + 'list' => $list, ]; return ResponseHelper::success($data); } - public function addPackage() { try { - $addPackageId = $this->request->param('addPackageId',''); - $packageName = $this->request->param('packageName',''); - $userIds = $this->request->param('userIds',[]); + $type = $this->request->param('type', ''); + $addPackageId = $this->request->param('addPackageId', ''); + $packageName = $this->request->param('packageName', ''); + $userIds = $this->request->param('userIds', []); + $tableFile = $this->request->param('tableFile', ''); + + $companyId = $this->getUserInfo('companyId'); $userId = $this->getUserInfo('id'); - if (empty($addPackageId) && empty($packageName)){ + if (empty($addPackageId) && empty($packageName)) { return ResponseHelper::error('存储的流量池不能为空'); } - if (!empty($addPackageId)){ + if (empty($type)) { + return ResponseHelper::error('请选择类型'); + } + + if (!empty($addPackageId)) { $package = Db::name('traffic_source_package') - ->where(['id' => $addPackageId,'isDel' => 0]) - ->whereIn('companyId', [$companyId,0]) + ->where(['id' => $addPackageId, 'isDel' => 0]) + ->whereIn('companyId', [$companyId, 0]) ->field('id,name') ->find(); - if (empty($package)){ + if (empty($package)) { return ResponseHelper::error('该流量池不存在'); } $packageId = $package['id']; - }else{ + } else { $package = Db::name('traffic_source_package') - ->where(['isDel' => 0,'name' => $packageName]) - ->whereIn('companyId', [$companyId,0]) + ->where(['isDel' => 0, 'name' => $packageName]) + ->whereIn('companyId', [$companyId, 0]) ->field('id,name') ->find(); - if (!empty($package)){ + if (!empty($package)) { return ResponseHelper::error('该流量池名称已存在'); } $packageId = Db::name('traffic_source_package')->insertGetId([ @@ -440,57 +445,214 @@ class GetPotentialListWithInCompanyV1Controller extends BaseController } - if (!empty($userIds)){ - if (!is_array($userIds)){ + if ($type == 1) { + $result = $this->getPoolListByCompanyId($this->makeWhere(), false); + $result = json_decode($result, true); + $result = array_column($result['list'], 'identifier'); + } elseif ($type == 2) { + if (empty($packageId)) { + return ResponseHelper::error('选择的用户'); + } + //================== 表格数据处理 ================== + if (!is_array($userIds)) { return ResponseHelper::error('选择的用户类型错误'); } $result = Db::name('traffic_pool')->alias('tp') - ->join('traffic_source tc','tp.identifier=tc.identifier') - ->whereIn('tp.id',$userIds) + ->join('traffic_source tc', 'tp.identifier=tc.identifier') + ->whereIn('tp.id', $userIds) ->where(['companyId' => $companyId]) ->group('tp.identifier') ->column('tc.identifier'); - }else{ - $result = $this->getPoolListByCompanyId($this->makeWhere(),false); - $result = json_decode($result, true); - $result = array_column($result['list'],'identifier'); - } + } else { + /*if (empty($tableFile)){ + return ResponseHelper::error('请上传用户文件'); + } + // 先下载到本地临时文件,再分析,最后删除 + $originPath = $tableFile; + $tmpFile = tempnam(sys_get_temp_dir(), 'user_'); + // 判断是否为远程文件 + if (preg_match('/^https?:\/\//i', $originPath)) { + // 远程URL,下载到本地 + $fileContent = file_get_contents($originPath); + if ($fileContent === false) { + exit('远程文件下载失败: ' . $originPath); + } + file_put_contents($tmpFile, $fileContent); + } else { + // 本地文件,直接copy + if (!file_exists($originPath)) { + exit('文件不存在: ' . $originPath); + } + copy($originPath, $tmpFile); + } + // 解析临时文件 + $ext = strtolower(pathinfo($originPath, PATHINFO_EXTENSION)); + $rows = []; + if (in_array($ext, ['xls', 'xlsx'])) { + // 直接用composer自动加载的PHPExcel + $excel = \PHPExcel_IOFactory::load($tmpFile); + $sheet = $excel->getActiveSheet(); + $data = $sheet->toArray(); + if (count($data) > 1) { + array_shift($data); // 去掉表头 + } - - // 1000条为一组进行批量处理 - $batchSize = 1000; - $totalRows = count($result); - - for ($i = 0; $i < $totalRows; $i += $batchSize) { - $batchRows = array_slice($result, $i, $batchSize); - if (!empty($batchRows)) { - // 2. 批量查询已存在的手机 - $existingPhones = []; - $existing = Db::name('traffic_source_package_item') - ->where(['companyId' => $companyId,'packageId' => $packageId]) - ->whereIn('identifier', $batchRows) - ->field('identifier') - ->select(); - $existingPhones = array_column($existing, 'identifier'); - // 3. 过滤出新数据,批量插入 - $newData = []; - foreach ($batchRows as $row) { - if (!in_array($row, $existingPhones)) { - $newData[] = [ - 'packageId' => $packageId, - 'companyId' => $companyId, - 'identifier' => $row, - 'createTime' => time(), - ]; + foreach ($data as $cols) { + $rows[] = [ + 'name' => isset($cols[0]) ? trim($cols[0]) : '', + 'phone' => isset($cols[1]) ? trim($cols[1]) : '', + 'source' => isset($cols[2]) ? trim($cols[2]) : '', + ]; + } + } elseif ($ext === 'csv') { + $content = file_get_contents($tmpFile); + $lines = preg_split('/\r\n|\r|\n/', $content); + if (count($lines) > 1) { + array_shift($lines); // 去掉表头 + foreach ($lines as $line) { + if (trim($line) === '') continue; + $cols = str_getcsv($line); + if (count($cols) >= 6) { + $rows[] = [ + 'name' => isset($cols[0]) ? trim($cols[0]) : '', + 'phone' => isset($cols[1]) ? trim($cols[1]) : '', + 'source' => isset($cols[2]) ? trim($cols[2]) : '', + ]; + } } } - // 4. 批量插入新数据 - if (!empty($newData)) { - Db::name('traffic_source_package_item')->insertAll($newData); + } else { + unlink($tmpFile); + exit('暂不支持的文件类型: ' . $ext); + } + // 删除临时文件 + unlink($tmpFile);*/ + //================== 表格数据处理 ================== + } + + $rows = [ + ['name' => '张三', 'phone' => '18883458888', 'source' => '234'], + ['name' => '李四', 'phone' => '18878988889', 'source' => '456'], + ]; + + + if (in_array($type, [1, 2])) { + // 1000条为一组进行批量处理 + $batchSize = 1000; + $totalRows = count($result); + + for ($i = 0; $i < $totalRows; $i += $batchSize) { + $batchRows = array_slice($result, $i, $batchSize); + if (!empty($batchRows)) { + // 2. 批量查询已存在的手机 + $existing = Db::name('traffic_source_package_item') + ->where(['companyId' => $companyId, 'packageId' => $packageId]) + ->whereIn('identifier', $batchRows) + ->field('identifier') + ->select(); + $existingPhones = array_column($existing, 'identifier'); + // 3. 过滤出新数据,批量插入 + $newData = []; + foreach ($batchRows as $row) { + if (!in_array($row, $existingPhones)) { + $newData[] = [ + 'packageId' => $packageId, + 'companyId' => $companyId, + 'identifier' => $row, + 'createTime' => time(), + ]; + } + } + // 4. 批量插入新数据 + if (!empty($newData)) { + Db::name('traffic_source_package_item')->insertAll($newData); + } } } + } else { + // 1000条为一组进行批量处理 + $batchSize = 1000; + $totalRows = count($rows); + + try { + for ($i = 0; $i < $totalRows; $i += $batchSize) { + Db::startTrans(); + $batchRows = array_slice($rows, $i, $batchSize); + if (!empty($batchRows)) { + $identifiers = array_column($batchRows, 'phone'); + //流量池处理 + $existing = Db::name('traffic_pool') + ->whereIn('identifier', $identifiers) + ->column('identifier'); + + $newData = []; + foreach ($batchRows as $row) { + if (!in_array($row['phone'], $existing)) { + $newData[] = [ + 'identifier' => $row['phone'], + 'mobile' => $row['phone'], + 'createTime' => time(), + ]; + } + } + if (!empty($newData)) { + Db::name('traffic_pool')->insertAll($newData); + } + + //流量池来源处理 + $newData2 = []; + $existing2 = Db::name('traffic_source') + ->where(['companyId' => $companyId]) + ->whereIn('identifier', $identifiers) + ->column('identifier'); + foreach ($batchRows as $row) { + if (!in_array($row['phone'], $existing2)) { + $newData2[] = [ + 'type' => 0, + 'name' => $row['name'], + 'identifier' => $row['phone'], + 'fromd' => $row['source'], + 'companyId' => $companyId, + 'createTime' => time(), + 'updateTime' => time(), + ]; + } + } + if (!empty($newData2)) { + Db::name('traffic_source')->insertAll($newData2); + } + + //流量池包数据处理 + $newData3 = []; + $existing3 = Db::name('traffic_source_package_item') + ->where(['companyId' => $companyId, 'packageId' => $packageId]) + ->whereIn('identifier', $identifiers) + ->field('identifier') + ->select(); + foreach ($batchRows as $row) { + if (!in_array($row['phone'], $existing3)) { + $newData3[] = [ + 'packageId' => $packageId, + 'companyId' => $companyId, + 'identifier' => $row['phone'], + 'createTime' => time(), + ]; + } + } + if (!empty($newData3)) { + Db::name('traffic_source_package_item')->insertAll($newData3); + } + + Db::commit(); + } + } + } catch (\Exception $e) { + DB::rollback(); + } } + + return ResponseHelper::success('添加成功'); } catch (\Exception $e) { return ResponseHelper::error($e->getMessage(), $e->getCode()); @@ -498,31 +660,29 @@ class GetPotentialListWithInCompanyV1Controller extends BaseController } - /* public function editUserTags() - { - $userId = $this->request->param('userId', ''); - if (empty($userId)) { - return json_encode(['code' => 500, 'msg' => '用户id不能为空']); - } - $tags = $this->request->param('tags', []); - $tags = $this->request->param('tags', []); - $isWechat = $this->request->param('isWechat', false); - $companyId = $this->getUserInfo('companyId'); + /* public function editUserTags() + { + $userId = $this->request->param('userId', ''); + if (empty($userId)) { + return json_encode(['code' => 500, 'msg' => '用户id不能为空']); + } + $tags = $this->request->param('tags', []); + $tags = $this->request->param('tags', []); + $isWechat = $this->request->param('isWechat', false); + $companyId = $this->getUserInfo('companyId'); - $friend = Db::name('traffic_pool')->alias('tp') - ->join('wechat_friendship f', 'tp.wechatId=f.wechatId AND f.companyId='.$companyId, 'left') - ->join(['s2_wechat_friend' => 'wf'], 'f.wechatId=wf.wechatId', 'left') - ->where(['tp.id' => $userId]) - ->order('tp.createTime desc') - ->column('wf.id,wf.accountId,wf.labels,wf.siteLabels'); - if (empty($data)) { - return ResponseHelper::error('该用户不存在'); - } + $friend = Db::name('traffic_pool')->alias('tp') + ->join('wechat_friendship f', 'tp.wechatId=f.wechatId AND f.companyId='.$companyId, 'left') + ->join(['s2_wechat_friend' => 'wf'], 'f.wechatId=wf.wechatId', 'left') + ->where(['tp.id' => $userId]) + ->order('tp.createTime desc') + ->column('wf.id,wf.accountId,wf.labels,wf.siteLabels'); + if (empty($data)) { + return ResponseHelper::error('该用户不存在'); + } - }*/ + }*/ - - -} \ No newline at end of file +} \ No newline at end of file diff --git a/Server/application/superadmin/controller/company/CreateCompanyController.php b/Server/application/superadmin/controller/company/CreateCompanyController.php index 08703311..c01e2a7f 100644 --- a/Server/application/superadmin/controller/company/CreateCompanyController.php +++ b/Server/application/superadmin/controller/company/CreateCompanyController.php @@ -292,7 +292,7 @@ class CreateCompanyController extends BaseController $this->createFuncUsers($params); Db::commit(); - // 设置部门权限 + // 设置部门权限 ????? $this->setDepartmentPrivileges($params); return ResponseHelper::success();