切换导航条
此项目
正在载入...
登录
朱振飞
/
wake
·
提交
转到一个项目
GitLab
转到仪表盘
项目
活动
文件
提交
管道
0
构建
0
图表
里程碑
问题
0
合并请求
0
成员
标记
维基
派生
网络
创建新的问题
下载为
邮件补丁
差异文件
浏览文件
作者
xwp
5 years ago
提交
e232ba0935a82f2e0b563582561ddd65e9abe114
1 个父辈
bd4b00c6
1 个管道 的构建
通过
耗费 9 秒
导入功能添加创建订单逻辑
变更
1
构建
1
显示空白字符变更
内嵌
并排对比
正在显示
1 个修改的文件
包含
204 行增加
和
1 行删除
application/admin/controller/user/User.php
application/admin/controller/user/User.php
查看文件 @
e232ba0
...
...
@@ -2,7 +2,15 @@
namespace
app\admin\controller\user
;
use
app\admin\library\Auth
;
use
app\common\controller\Backend
;
use
Exception
;
use
fast\Random
;
use
PhpOffice\PhpSpreadsheet\Cell\Coordinate
;
use
PhpOffice\PhpSpreadsheet\Reader\Csv
;
use
PhpOffice\PhpSpreadsheet\Reader\Xls
;
use
PhpOffice\PhpSpreadsheet\Reader\Xlsx
;
use
think\exception\PDOException
;
/**
* 会员管理
...
...
@@ -75,8 +83,203 @@ class User extends Backend
return
parent
::
edit
(
$ids
);
}
public
function
import
(){
parent
::
import
();
$file
=
$this
->
request
->
request
(
'file'
);
if
(
!
$file
)
{
$this
->
error
(
__
(
'Parameter %s can not be empty'
,
'file'
));
}
$filePath
=
ROOT_PATH
.
DS
.
'public'
.
DS
.
$file
;
if
(
!
is_file
(
$filePath
))
{
$this
->
error
(
__
(
'No results were found'
));
}
//实例化reader
$ext
=
pathinfo
(
$filePath
,
PATHINFO_EXTENSION
);
if
(
!
in_array
(
$ext
,
[
'csv'
,
'xls'
,
'xlsx'
]))
{
$this
->
error
(
__
(
'Unknown data format'
));
}
if
(
$ext
===
'csv'
)
{
$file
=
fopen
(
$filePath
,
'r'
);
$filePath
=
tempnam
(
sys_get_temp_dir
(),
'import_csv'
);
$fp
=
fopen
(
$filePath
,
"w"
);
$n
=
0
;
while
(
$line
=
fgets
(
$file
))
{
$line
=
rtrim
(
$line
,
"
\n\r\0
"
);
$encoding
=
mb_detect_encoding
(
$line
,
[
'utf-8'
,
'gbk'
,
'latin1'
,
'big5'
]);
if
(
$encoding
!=
'utf-8'
)
{
$line
=
mb_convert_encoding
(
$line
,
'utf-8'
,
$encoding
);
}
if
(
$n
==
0
||
preg_match
(
'/^".*"$/'
,
$line
))
{
fwrite
(
$fp
,
$line
.
"
\n
"
);
}
else
{
fwrite
(
$fp
,
'"'
.
str_replace
([
'"'
,
','
],
[
'""'
,
'","'
],
$line
)
.
"
\"\n
"
);
}
$n
++
;
}
fclose
(
$file
)
||
fclose
(
$fp
);
$reader
=
new
Csv
();
}
elseif
(
$ext
===
'xls'
)
{
$reader
=
new
Xls
();
}
else
{
$reader
=
new
Xlsx
();
}
//导入文件首行类型,默认是注释,如果需要使用字段名称请使用name
$importHeadType
=
isset
(
$this
->
importHeadType
)
?
$this
->
importHeadType
:
'comment'
;
$table
=
$this
->
model
->
getQuery
()
->
getTable
();
$database
=
\think\Config
::
get
(
'database.database'
);
$fieldArr
=
[];
$list
=
db
()
->
query
(
"SELECT COLUMN_NAME,COLUMN_COMMENT FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ? AND TABLE_SCHEMA = ?"
,
[
$table
,
$database
]);
foreach
(
$list
as
$k
=>
$v
)
{
if
(
$importHeadType
==
'comment'
)
{
$fieldArr
[
$v
[
'COLUMN_COMMENT'
]]
=
$v
[
'COLUMN_NAME'
];
}
else
{
$fieldArr
[
$v
[
'COLUMN_NAME'
]]
=
$v
[
'COLUMN_NAME'
];
}
}
//加载文件
$insert
=
[];
$product
=
[];
try
{
if
(
!
$PHPExcel
=
$reader
->
load
(
$filePath
))
{
$this
->
error
(
__
(
'Unknown data format'
));
}
$currentSheet
=
$PHPExcel
->
getSheet
(
0
);
//读取文件中的第一个工作表
$allColumn
=
$currentSheet
->
getHighestDataColumn
();
//取得最大的列号
$allRow
=
$currentSheet
->
getHighestRow
();
//取得一共有多少行
$maxColumnNumber
=
Coordinate
::
columnIndexFromString
(
$allColumn
);
$fields
=
[];
$col
=
''
;
for
(
$currentRow
=
1
;
$currentRow
<=
1
;
$currentRow
++
)
{
for
(
$currentColumn
=
1
;
$currentColumn
<=
$maxColumnNumber
;
$currentColumn
++
)
{
$val
=
$currentSheet
->
getCellByColumnAndRow
(
$currentColumn
,
$currentRow
)
->
getValue
();
$fields
[]
=
$val
;
if
(
$val
==
'产品id'
){
$col
=
$currentColumn
;
}
}
}
for
(
$currentRow
=
2
;
$currentRow
<=
$allRow
;
$currentRow
++
)
{
$values
=
[];
for
(
$currentColumn
=
1
;
$currentColumn
<=
$maxColumnNumber
;
$currentColumn
++
)
{
$val
=
$currentSheet
->
getCellByColumnAndRow
(
$currentColumn
,
$currentRow
)
->
getValue
();
$values
[]
=
is_null
(
$val
)
?
''
:
$val
;
}
$row
=
[];
$temp
=
array_combine
(
$fields
,
$values
);
foreach
(
$temp
as
$k
=>
$v
)
{
if
(
isset
(
$fieldArr
[
$k
])
&&
$k
!==
''
)
{
$row
[
$fieldArr
[
$k
]]
=
$v
;
}
}
if
(
$row
)
{
$insert
[]
=
$row
;
if
(
!
empty
(
$col
)){
//处理产品id
$productId
=
$currentSheet
->
getCellByColumnAndRow
(
$col
,
$currentRow
)
->
getValue
();
$product
[]
=
[
'product_id'
=>
$productId
];
}
}
}
}
catch
(
Exception
$exception
)
{
$this
->
error
(
$exception
->
getMessage
());
}
if
(
!
$insert
)
{
$this
->
error
(
__
(
'No rows were updated'
));
}
try
{
//是否包含admin_id字段
$has_admin_id
=
false
;
foreach
(
$fieldArr
as
$name
=>
$key
)
{
if
(
$key
==
'admin_id'
)
{
$has_admin_id
=
true
;
break
;
}
}
if
(
$has_admin_id
)
{
$auth
=
Auth
::
instance
();
foreach
(
$insert
as
&
$val
)
{
if
(
!
isset
(
$val
[
'admin_id'
])
||
empty
(
$val
[
'admin_id'
]))
{
$val
[
'admin_id'
]
=
$auth
->
isLogin
()
?
$auth
->
id
:
0
;
}
}
}
foreach
(
$insert
as
$k
=>
$v
){
$id
=
$this
->
model
->
insertGetId
(
$v
);
if
(
!
empty
(
$col
)){
$product
[
$k
][
'user_id'
]
=
$id
;
}
}
}
catch
(
PDOException
$exception
)
{
$msg
=
$exception
->
getMessage
();
if
(
preg_match
(
"/.+Integrity constraint violation: 1062 Duplicate entry '(.+)' for key '(.+)'/is"
,
$msg
,
$matches
))
{
$msg
=
"导入失败,包含【
{
$matches
[
1
]}
】的记录已存在
";
};
$this->error
(
$msg
);
} catch (Exception
$e
) {
$this->error
(
$e->getMessage
());
}
if(!empty(
$product
)){
foreach (
$product
as
$k
=>
$v
){
$product_id
=
$v['product_id']
;
$user_id
=
$v['user_id']
;
$product
= new \app\admin\model\Product();
$product
=
$product->where
(['id'=>
$product_id
])->find();
if(empty(
$product
)){
continue;
}
$product
=
$product->toArray
();
$productCourse
= new \app\admin\model\ProductCoures();
$productCourse
=
$productCourse->where
(['product_id'=>
$product_id
])->select();
$product['product_course']
=
$productCourse
;
$user
= new \app\admin\model\User();
$user
=
$user->where
(['id'=>
$user_id
])->find();
if(empty(
$user
)){
continue;
}
$order_id
= Random::uuid();
$order_id
= str_replace("
-
","",
$order_id
);
$now
= date('Y-m-d H:i:s');
$data['product_id']
=
$product_id
;
$data['user_id']
=
$user_id
;
$data['order_id']
=
$order_id
;
$data['status']
= 'success';
$data['product_doc']
= json_encode(
$product
);
$data['total']
=
$product['price']
;
$data['create_time']
=
$now
;
$data['third_order_id']
= '';
$data['count']
=
$product['count']
;
$data['remain']
= (
$product['count']
== -1)?999999:
$product['count']
;
$data['start']
=
$now
;
$data['end']
= date('Y-m-d H:i:s',strtotime('+'.
$product['dateCount']
.' day',strtotime(
$now
)));
$data['success_time']
=
$now
;
$data['notify']
= false;
$order
= new \app\admin\model\Order();
$order->insertGetId
(
$data
);
}
}
$this->success
();
}
/**
...
...
请
注册
或
登录
后发表评论