216 lines
8.8 KiB
PHP
216 lines
8.8 KiB
PHP
<?php
|
||
|
||
// +----------------------------------------------------------------------
|
||
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
||
// +----------------------------------------------------------------------
|
||
// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
|
||
// +----------------------------------------------------------------------
|
||
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
||
// +----------------------------------------------------------------------
|
||
// | Author: CRMEB Team <admin@crmeb.com>
|
||
// +----------------------------------------------------------------------
|
||
|
||
|
||
namespace app\controller\api;
|
||
|
||
|
||
use crmeb\basic\BaseController;
|
||
use think\facade\Db;
|
||
use crmeb\services\UploadService;
|
||
use Exception;
|
||
use ZipArchive;
|
||
use think\facade\Queue;
|
||
use crmeb\jobs\ProductCopyJob;
|
||
/**
|
||
* Class Auth
|
||
* @package app\controller\api
|
||
* @author xaboy
|
||
* @day 2020-05-06
|
||
*/
|
||
class Demo extends BaseController
|
||
{
|
||
public function index()
|
||
{
|
||
// Queue::push(ProductCopyJob::class, ['product_id' => 0, 'mer_id' =>0]);//短信通知
|
||
|
||
halt(1);
|
||
$mer_id = 104;
|
||
$file = request()->file('file');
|
||
$zip_name = explode('.', $file->getOriginalName())[0];
|
||
// 上传到本地服务器
|
||
$savename = \think\facade\Filesystem::putFile('zippic', $file);
|
||
$dir = date('Y-m-d_H-i-s') . '_' . $mer_id;
|
||
$path = public_path('uploads/pic').$dir;
|
||
try {
|
||
$zip = new ZipArchive;
|
||
$filePath = public_path('uploads') . $savename;
|
||
$zip->open($filePath);
|
||
for ($i = 0; $i < $zip->numFiles; $i++) {
|
||
$statInfo = $zip->statIndex($i, ZipArchive::FL_ENC_RAW);
|
||
$filename = $this->transcoding($statInfo['name']);
|
||
$mkdFile = explode('/',$filename);
|
||
if ($statInfo['crc'] == 0) {
|
||
// 新建目录
|
||
if (!file_exists($path . '/' . $filename)) {
|
||
mkdir($path . '/' . $filename, 0777, true);
|
||
}
|
||
} else {
|
||
// 拷贝文件
|
||
if(count($mkdFile)==3){
|
||
if (!file_exists($path . '/' . $mkdFile[0].'/'.$mkdFile[1])) {
|
||
mkdir($path . '/' .$mkdFile[0].'/'.$mkdFile[1], 0777, true);
|
||
}
|
||
copy('zip://' . $file . '#' . $zip->getNameIndex($i), $path . '/' . $filename);
|
||
}
|
||
}
|
||
}
|
||
$zip->close();
|
||
} catch (\Exception $e) {
|
||
throw new \think\exception\HttpException(404, $e->getMessage() . '。line:' . $e->getLine());
|
||
}
|
||
|
||
$directory = $path.'/'.$zip_name;
|
||
$files = scandir($directory);
|
||
$dir = 'def/' . date('Y-m-d');
|
||
$upload = UploadService::create();
|
||
/**循环目录 */
|
||
foreach ($files as $file) {
|
||
if ($file === '.' || $file === '..' || $file === '__MACOSX') {
|
||
continue;
|
||
}
|
||
if (!is_dir($directory . '/' . $file)) {
|
||
continue;
|
||
}
|
||
$files_two = scandir($directory . '/' . $file);
|
||
|
||
$image_extensions = array('jpg', 'jpeg', 'png');
|
||
$image = '';
|
||
$slider_image = [];
|
||
$details = [];
|
||
$sku_arr = [];
|
||
/**清洗图片 */
|
||
foreach ($files_two as $file_two) {
|
||
if ($file_two === '.' || $file_two === '..' || $file_two === '__MACOSX') {
|
||
continue;
|
||
}
|
||
$arr = explode('.', $file_two);
|
||
if (in_array($arr[1], $image_extensions)) {
|
||
/**首图 */
|
||
$images[] = $file_two;
|
||
if ($image == '' && is_numeric($arr[0])) {
|
||
$image = $directory . '/' . $file . '/' . $file_two;
|
||
continue;
|
||
}
|
||
/**轮播图 */
|
||
if (is_numeric($arr[0]) && count($slider_image) < 4) {
|
||
$slider_image[] = $directory . '/' . $file . '/' . $file_two;
|
||
continue;
|
||
}
|
||
/**详情图 */
|
||
if (is_numeric($arr[0])) {
|
||
$details[] = $directory . '/' .$file.'/'. $file_two;
|
||
continue;
|
||
}
|
||
/**sku图 */
|
||
$sku = explode('==', $arr[0]);
|
||
if ($sku) {
|
||
$sku = implode(',', $sku);
|
||
$sku_arr[$sku] = $directory . '/' . $file . '/' . $file_two;
|
||
}
|
||
}
|
||
}
|
||
$where = ['mer_id' => $mer_id, 'is_del' => 0];
|
||
$update = [];
|
||
$update_content['title'] = '';
|
||
$update_content['image'] = [];
|
||
$update_content['type'] = 1;
|
||
$find = Db::name('store_product')->where($where)->where('store_name', $file)->find();
|
||
if ($find) {
|
||
try {
|
||
/**更新商品图片 */
|
||
$image = $upload->to($dir)->stream(file_get_contents($image));
|
||
$update['image'] = $image->filePath;
|
||
foreach ($slider_image as $k => $v) {
|
||
$oss = $upload->to($dir)->stream(file_get_contents($v));
|
||
$update['slider_image'][] = $oss->filePath;
|
||
}
|
||
if (isset($update['slider_image'])) {
|
||
$update['slider_image'] = implode(',', $update['slider_image']);
|
||
}
|
||
Db::name('store_product')->where('product_id', $find['product_id'])->update($update);
|
||
/**更新规格图片 */
|
||
foreach ($sku_arr as $k => $v) {
|
||
// $sku = explode(',', $k);
|
||
// if(count($sku)==2){
|
||
// $sku_name=$sku[0];
|
||
// }else{
|
||
// continue;
|
||
// }
|
||
$store_product_attr_value = Db::name('store_product_attr_value')->where(['mer_id' => $mer_id, 'product_id' => $find['product_id'], 'sku' => $k])->find();
|
||
if ($store_product_attr_value) {
|
||
$oss = $upload->to($dir)->stream(file_get_contents($v));
|
||
Db::name('store_product_attr_value')
|
||
->where(['mer_id' => $mer_id, 'product_id' => $find['product_id'], 'sku' => $k])
|
||
->update(['image' => $oss->filePath]);
|
||
}
|
||
}
|
||
/**更新详情图片 */
|
||
$store_product_content = Db::name('store_product_content')->where(['product_id' => $find['product_id']])->find();
|
||
foreach ($details as $k => $v) {
|
||
$oss = $upload->to($dir)->stream(file_get_contents($v));
|
||
$update_content['image'][] = $oss->filePath;
|
||
}
|
||
if ($store_product_content) {
|
||
if (isset($update_content['image']) && !empty($update_content['image'])) {
|
||
Db::name('store_product_content')
|
||
->where(['product_id' => $find['product_id']])
|
||
->update(['content' => json_encode($update_content)]);
|
||
}
|
||
} else {
|
||
$update_content['product_id'] = $find['product_id'];
|
||
Db::name('store_product_content')
|
||
->insert(['product_id' => $find['product_id'], 'type' => 1, 'content' => json_encode($update_content)]);
|
||
}
|
||
} catch (Exception $e) {
|
||
halt($e->getMessage(), $e->getLine());
|
||
}
|
||
}
|
||
}
|
||
halt(1);
|
||
}
|
||
|
||
public function transcoding($fileName)
|
||
{
|
||
$encoding = mb_detect_encoding($fileName, ['UTF-8', 'GBK', 'BIG5', 'CP936']);
|
||
if (DIRECTORY_SEPARATOR == '/') { // linux
|
||
$fileName = iconv($encoding, 'UTF-8', $fileName);
|
||
} else { // win
|
||
$fileName = iconv($encoding, 'GBK', $fileName);
|
||
}
|
||
return $fileName;
|
||
}
|
||
|
||
function createDirectories($path) {
|
||
if (is_dir($path)) {
|
||
return true ;
|
||
} else {
|
||
$parts = explode(DIRECTORY_SEPARATOR, $path);
|
||
$part = null;
|
||
|
||
foreach ($parts as $part) {
|
||
if ($part === '' || $part === '.' || $part === '..') {
|
||
continue;
|
||
}
|
||
|
||
$dir = dirname($path) . DIRECTORY_SEPARATOR . $part;
|
||
if (!file_exists($dir)) {
|
||
mkdir($dir, 0777, true);
|
||
}
|
||
}
|
||
|
||
return true ;
|
||
}
|
||
}
|
||
|
||
}
|