Commit 4987d99e by 杨树贤

导入csv问题

parent b011c852
......@@ -9,6 +9,7 @@ use App\Http\Transformers\SupplierExaminationTransformer;
use App\Model\IntracodeModel;
use App\Model\SupplierChannelModel;
use App\Model\SupplierExaminationModel;
use App\Utils\CsvValueBinder;
use Maatwebsite\Excel\Facades\Excel;
class SupplierExaminationService
......@@ -54,8 +55,21 @@ class SupplierExaminationService
try {
$content = file_get_contents($filePath);
$fileType = mb_detect_encoding($content, array('UTF-8', 'GBK', 'LATIN1', 'BIG5'));
Excel::load($filePath, function ($reader) {
$data = $reader->getSheet(0)->toArray();
$result = $reader->getSheet(0)->toArray();
$header = $result[0];
if (!$this->checkImportCsvHeader($header)) {
throw new \Exception('文件不是标准上传模板,请核对后再上传');
}
}, $fileType);
$valueBinder = new CsvValueBinder();
$data = Excel::setValueBinder($valueBinder)->load($filePath, $fileType)->get();
if (empty($data)) {
throw new \Exception('上传数据不能为空');
}
$data = $data->toArray();
$dataMd5 = md5(json_encode($data));
if (SupplierExaminationModel::where('data_md5', $dataMd5)->exists()) {
throw new \Exception('该文件已经上传过,请选择其它文件');
......@@ -67,14 +81,7 @@ class SupplierExaminationService
//拼装数据插入校验,校验完成插入数据库
$examineData = [];
foreach ($data as $index => $item) {
$lineNo = $index + 1;
//检测模板头部
if ($index == 0) {
if (!$this->checkImportCsvHeader($item)) {
throw new \Exception('文件不是标准上传模板,请核对后再上传');
}
continue;
}
$lineNo = $index;
$item = array_map(function ($value) {
return trim($value);
}, $item);
......@@ -177,16 +184,14 @@ class SupplierExaminationService
foreach ($examineData->chunk(50) as $chunk) {
SupplierExaminationModel::insert($chunk->toArray());
}
return true;
}, $fileType);
} catch (\Exception $exception) {
return $exception->getMessage();
} finally {
unlink($filePath);
return true;
}
return true;
}
private function checkImportCsvHeader($header)
......
......@@ -249,3 +249,4 @@ function isDateTime($dateTime){
$ret = strtotime($dateTime);
return $ret !== FALSE && $ret != -1;
}
<?php
namespace App\Utils;
use PHPExcel_Cell;
use PHPExcel_Cell_DataType;
use PHPExcel_Cell_IValueBinder;
use PHPExcel_Cell_DefaultValueBinder;
class CsvValueBinder extends PHPExcel_Cell_DefaultValueBinder implements PHPExcel_Cell_IValueBinder
{
public function bindValue(PHPExcel_Cell $cell, $value = null)
{
if (is_numeric($value)) {
$cell->setValueExplicit($value, PHPExcel_Cell_DataType::TYPE_STRING);
return true;
}
return parent::bindValue($cell, $value);
}
}
\ No newline at end of file
......@@ -363,7 +363,7 @@ return array(
|
*/
'heading' => 'false',
'heading' => 'true',
/*
|--------------------------------------------------------------------------
......
销售订单号,采购订单号,*检货时间,销售,*采购员,A/B单,*供应商,*型号,*品牌,*数量,批次,产地,入库日期,来货单号,送货单,理货要求,验货要求,*不良数,异常等级,不良现象,*检验结果,备注
1202206066763112,1202206066763133,2020/2/3,123,易敏,123,深圳市华之电科技有限公司,123,123,123,123,123,2020/2/3,123,123,123,123,123,1,特批入库,特批入库,123
1202206066763114444,120220606676313555,2020/2/3,123,易敏,123,深圳市华之电科技有限公司,123,123,123,123,123,2020/2/3,123,123,123,123,123,1,特批入库,特批入库,123
......@@ -64,7 +64,7 @@
{type: 'checkbox'},
{field: 'id', title: 'ID', align: 'center', width: 80},
{field: 'order_sn', title: '销售订单号', align: 'center', width: 150},
{field: 'purchase_sn', title: '采购订单号', align: 'center', width: 150},
{field: 'purchase_sn', title: '采购订单号', align: 'center', width: 160},
{
field: 'examine_time', title: '检货时间', align: 'center', width: 130
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment