128 lines
5.7 KiB
PHP
128 lines
5.7 KiB
PHP
<?php
|
||
|
||
namespace app\admin\controller;
|
||
|
||
use app\common\model\store_category\StoreCategory;
|
||
use app\common\model\store_product\StoreProduct;
|
||
use PhpOffice\PhpSpreadsheet\IOFactory;
|
||
use support\Redis;
|
||
|
||
class LocalController extends BaseAdminController
|
||
{
|
||
|
||
public $notNeedLogin = [];
|
||
|
||
public function fixCategory()
|
||
{
|
||
$topCate = StoreCategory::where('pid', 0)->field('id,name,pid')->order('name')->select()->toArray();
|
||
$topCate = reset_index($topCate, 'name');
|
||
$sql = [];
|
||
$time = time();
|
||
foreach ($topCate as $item) {
|
||
if (isset($topCate[$item['name'] . '类'])) {
|
||
$target = $topCate[$item['name'] . '类'];
|
||
$sql[] = "##原分类id:{$item['id']},原分类名:{$item['name']},目标分类id:{$target['id']},目标分类名:{$target['name']}";
|
||
$sql[] = "update la_store_product set top_cate_id={$target['id']} where top_cate_id={$item['id']};";
|
||
$sql[] = "update la_store_product set two_cate_id={$target['id']} where two_cate_id={$item['id']};";
|
||
$sql[] = "update la_store_category set delete_time=$time where id={$item['id']};";
|
||
}
|
||
$secondCate = StoreCategory::where('pid', $item['id'])->field('id,name,pid')->order('name')->select()->toArray();
|
||
$secondCate = reset_index($secondCate, 'name');
|
||
foreach ($secondCate as $item2) {
|
||
if (isset($secondCate[$item2['name'] . '类'])) {
|
||
$target = $secondCate[$item2['name'] . '类'];
|
||
$sql[] = "##原分类id:{$item2['id']},原分类名:{$item2['name']},目标分类id:{$target['id']},目标分类名:{$target['name']}";
|
||
$sql[] = "update la_store_product set two_cate_id={$target['id']} where two_cate_id={$item2['id']};";
|
||
$sql[] = "update la_store_product set cate_id={$target['id']} where cate_id={$item2['id']};";
|
||
$sql[] = "update la_store_category set delete_time=$time where id={$item2['id']};";
|
||
}
|
||
$thirdCate = StoreCategory::where('pid', $item2['id'])->field('id,name,pid')->order('name')->select()->toArray();
|
||
$thirdCate = reset_index($thirdCate, 'name');
|
||
foreach ($thirdCate as $item3) {
|
||
if (isset($thirdCate[$item3['name'] . '类'])) {
|
||
$target = $thirdCate[$item3['name'] . '类'];
|
||
$sql[] = "##原分类id:{$item3['id']},原分类名:{$item3['name']},目标分类id:{$target['id']},目标分类名:{$target['name']}";
|
||
$sql[] = "update la_store_product set cate_id={$target['id']} where cate_id={$item3['id']};";
|
||
$sql[] = "update la_store_category set delete_time=$time where id={$item3['id']};";
|
||
}
|
||
}
|
||
}
|
||
}
|
||
file_put_contents(public_path() . '/update.sql', implode(PHP_EOL, $sql));
|
||
return $this->success('数据已更新完成', $sql);
|
||
}
|
||
|
||
public function index()
|
||
{
|
||
$file = $this->request->file('file');
|
||
$reader = IOFactory::createReader('Xlsx');
|
||
$spreadsheet = $reader->load($file->getRealPath());
|
||
$data = $spreadsheet->getActiveSheet()->toArray();
|
||
$updateCount = 0;
|
||
$finishCount = Redis::get('updateFinishCount');
|
||
$finishCount = empty($finishCount) ? 0 : $finishCount;
|
||
if ($finishCount >= count($data)) {
|
||
return $this->success('数据已更新完成');
|
||
}
|
||
$max = $finishCount + 100;
|
||
foreach ($data as $k => $row) {
|
||
if ($k < (1 + $finishCount) || empty($row[0])) {
|
||
continue;
|
||
}
|
||
if ($k > $max) {
|
||
break;
|
||
}
|
||
$product = StoreProduct::where('id', $row[0])->field('id,store_name,top_cate_id,two_cate_id,cate_id')->findOrEmpty()->toArray();
|
||
if (empty($product)) {
|
||
continue;
|
||
}
|
||
$result = $this->updateProduct($product, $row);
|
||
if ($result) {
|
||
$updateCount++;
|
||
}
|
||
}
|
||
Redis::set('updateFinishCount', 100 + $finishCount);
|
||
return $this->success('更新成功:' . $updateCount . '条');
|
||
}
|
||
|
||
public function updateProduct($product, $row)
|
||
{
|
||
$topCateName = $row[1];
|
||
$secondCateName = $row[2];
|
||
$cateName = $row[3];
|
||
$topCate = StoreCategory::where('name', $topCateName)->value('id');
|
||
$updateData = [];
|
||
if (!empty($topCate) && $topCate != $product['top_cate_id']) {
|
||
$updateData['top_cate_id'] = $topCate;
|
||
}
|
||
$secondCateId = StoreCategory::where('pid', $topCate)->where('name', $secondCateName)->value('id');
|
||
if (empty($secondCateId)) {
|
||
$secondCate = new StoreCategory();
|
||
$secondCate->name = $secondCateName;
|
||
$secondCate->pid = $topCate;
|
||
$secondCate->save();
|
||
$secondCateId = $secondCate->id;
|
||
}
|
||
if ($secondCateId != $product['two_cate_id']) {
|
||
$updateData['two_cate_id'] = $secondCateId;
|
||
}
|
||
$cateId = StoreCategory::where('pid', $secondCateId)->where('name', $cateName)->value('id');
|
||
if (empty($cateId)) {
|
||
$cate = new StoreCategory();
|
||
$cate->name = $cateName;
|
||
$cate->pid = $secondCateId;
|
||
$cate->save();
|
||
$cateId = $cate->id;
|
||
}
|
||
if ($cateId != $product['cate_id']) {
|
||
$updateData['cate_id'] = $cateId;
|
||
}
|
||
if (!empty($updateData)) {
|
||
StoreProduct::where('id', $row[0])->update($updateData);
|
||
echo '更新成功ID:' . $row[0] . PHP_EOL;
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
} |