订单文件上传功能完善

This commit is contained in:
wong
2025-07-03 18:14:53 +08:00
parent 5e4cdbedbf
commit 35f919b0f3
3 changed files with 213 additions and 11 deletions

View File

@@ -102,6 +102,111 @@ class PostUpdateAddFriendPlanV1Controller extends Controller
throw new \Exception('更新计划失败');
}
//订单
if($params['sceneId'] == 2){
if(!empty($params['orderTableFile'])){
// 先下载到本地临时文件,再分析,最后删除
$originPath = $params['orderTableFile'];
$tmpFile = tempnam(sys_get_temp_dir(), 'order_');
// 判断是否为远程文件
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); // 去掉表头
}
foreach ($data as $cols) {
if (count($cols) >= 6) {
$rows[] = [
'name' => trim($cols[0]),
'phone' => trim($cols[1]),
'wechat' => trim($cols[2]),
'source' => trim($cols[3]),
'orderAmount' => trim($cols[4]),
'orderDate' => trim($cols[5]),
];
}
}
} 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' => trim($cols[0]),
'phone' => trim($cols[1]),
'wechat' => trim($cols[2]),
'source' => trim($cols[3]),
'orderAmount' => trim($cols[4]),
'orderDate' => trim($cols[5]),
];
}
}
}
} else {
unlink($tmpFile);
exit('暂不支持的文件类型: ' . $ext);
}
// 删除临时文件
unlink($tmpFile);
foreach($rows as $row){
$phone = !empty($row['phone']) ? $row['phone'] : $row['wechat'];
if(empty($phone)){
continue;
}
$ck_task_customer = Db::name('task_customer')
->where(['phone' => $phone,'task_id' => $params['planId']])
->find();
if(!$ck_task_customer){
$task_customer = Db::name('task_customer')
->insert([
'task_id' => $params['planId'],
'name' => $row['name'] ?? '',
'source' => $row['source'] ?? '',
'phone' => $phone,
'tags' => json_encode([],JSON_UNESCAPED_UNICODE),
'siteTags' => json_encode([],JSON_UNESCAPED_UNICODE),
'created_at' => time(),
]);
}
}
}
}
// 提交事务
Db::commit();