excel读取速度很快 插入很慢
解决方案:每条数据都添加到队列中,然后让他慢慢执行
1 composer require top-think/think-queue
2 导入方法 放入queue中
/**
* @NodeAnotation(title="导入")
*/
public function import()
{
set_time_limit(0);
ini_set('memory_limit','1024M');
if ($this->request->isAjax()) {
//$file = "../public/upload/20200623/4b18db7eeb8f7184774353723af92787.xls";
// $file1 = "http://hcc.cn/upload/20200623/b7ae2b2437c5afa95c6179e391b8922f.xlsx";
$post = $this->request->post();
$file = $post['import_file'];
if ($file) {
$file = str_replace($_SERVER['HTTP_ORIGIN'], '../public', $file);
try {
$data = Excel::import($file);
} catch (Exception $e) {
echo '<pre>';
print_r($e->getMessage());
exit();
} catch (\PhpOffice\PhpSpreadsheet\Exception $e) {
echo '<pre>';
print_r($e->getMessage());
exit();
}
// $data_arr = [];
/*echo '<pre>';
print_r(0);
exit();*/
foreach ($data as $k => $d) {
if ($k >= 2) {
$job = "index/Message";
Queue::push($job,$d,$queue="Import");
/* echo '<pre>';
print_r($re);
exit();*/
// if(!$d[0]){
// break;
// }
//
// /*循环插入数据*/
// if ($d[1] == '正常' || $d[1] == '暂无') {
// $status = 1;
// } else {
// $status = 0;
// }
// $cop = new \app\admin\model\Corporation();
//
// /*名字跟统一社会信用代码不能重复*/
// $has = $cop->whereOr(['name' => $d[0], 'society_code' => $d[11]])->find();
//
// if ($has) {
// continue;
// }
//
// $cop = new \app\admin\model\Corporation();
//
// if ($d[4] == '') {
// $d[4] = '1970-01-01';
// }
//
// $data =
// [
// 'name' => $d[0],
// 'status' => $status,
// 'law_person' => $d[2],
// 'register_money' => $d[3],
// 'create_date' => $d[4],
// 'create_time' => time(),
// 'province' => $d[5],
// 'city' => $d[6],
// 'district' => $d[7],
// 'phone' => $d[8],
// 'extra_phone' => $d[9],
// 'email' => $d[10],
// 'society_code' => $d[11],
// 'identity_code' => $d[12],
// 'register_code' => $d[13],
// 'organization_code' => $d[14],
// 'join_person_number' => $d[15],
// 'corporation_type' => $d[16],
// 'trade_type' => $d[17],
// 'web' => $d[18],
// 'address' => $d[19],
// 'manage_range' => $d[20],
//
// ];
//
// if ($d[21] ?? '') {
// $data['path'] = $d[21];
// } else {
// $data['path'] = 'https://www.huixx.cn/index/index/content.html?type=2';
// }
//
// $cop->save($data);
}
}
}
AdminController::addLog(6, '导入了公司数据', "导入文件路径:" . $file);
$save = 1;
$save ? $this->success('保存成功,后台自动插入数据中') : $this->error('保存失败');
}
$this->assign('row', '');
return $this->fetch();
}
2.执行方法 \app\index\job\Message.php
<?php
namespace app\index\job;
use app\admin\model\Corporation;
use think\queue\Job;
class Message
{
/* 处理逻辑 */
public function fire(Job $job, $data)
{
//任务执行超过1次,则删除任务
$this->importCorp($data);
$nums = $job->attempts();
if ($nums > 0) {
$job->delete();
}
$job->delete();
}
public function importCorp($d)
{
if (!$d[0]) {
return;
}
/*循环插入数据*/
if ($d[1] == '正常' || $d[1] == '暂无') {
$status = 1;
} else {
$status = 0;
}
$cop = new Corporation();
/*名字跟统一社会信用代码不能重复*/
$has = $cop->whereOr(['name' => $d[0], 'society_code' => $d[11]])->find();
if ($has) {
return;
}
$cop = new Corporation();
if ($d[4] == '') {
$d[4] = '1970-01-01';
}
$data =
[
'name' => $d[0],
'status' => $status,
'law_person' => $d[2],
'register_money' => $d[3],
'create_date' => $d[4],
'create_time' => time(),
'province' => $d[5],
'city' => $d[6],
'district' => $d[7],
'phone' => $d[8],
'extra_phone' => $d[9],
'email' => $d[10],
'society_code' => $d[11],
'identity_code' => $d[12],
'register_code' => $d[13],
'organization_code' => $d[14],
'join_person_number' => $d[15],
'corporation_type' => $d[16],
'trade_type' => $d[17],
'web' => $d[18],
'address' => $d[19],
'manage_range' => $d[20],
];
if ($d[21] ?? '') {
$data['path'] = $d[21];
} else {
$data['path'] = 'https://www.huixx.cn/index/index/content.html?type=2';
}
$cop->save($data);
}
}
3. php think queue:work --queue Import

浙公网安备 33010602011771号