refactor: 更新产品接口添加sku处理逻辑

This commit is contained in:
2025-02-13 11:57:54 +08:00
parent f20325b220
commit bf2cff4de3
6 changed files with 205 additions and 64 deletions

View File

@@ -6,6 +6,8 @@ namespace app\admin\controller\v1;
use app\admin\model\v1\ProductModel;
use app\admin\model\v1\ProductParamsModel;
use app\admin\model\v1\ProductRelatedModel;
use app\admin\model\v1\ProductSkuAttrModel;
use app\admin\model\v1\ProductSkuModel;
use app\admin\validate\v1\ProductValidate;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
@@ -123,19 +125,22 @@ class Product
'is_show',
'sort',
'detail',
'params' => '',
'params' => '',
'skus' => '',
'related' => '',
'status' => 1,
'status' => 1,
'seo_title',
'seo_keywords',
'seo_desc'
]);
$put = array_merge(
$put,
['skus' => json_decode($put['skus'], true)],
['related' => json_decode($put['related'], true)],
);
$validate = new ProductValidate();
$check_data = array_merge($put, [
'id' => $id,
'language_id' => request()->lang_id
]);
$check_data = array_merge($put, ['id' => $id, 'language_id' => request()->lang_id]);
if (!$validate->scene('update')->check($check_data)) {
return error($validate->getError());
}
@@ -160,24 +165,72 @@ class Product
'value' => $match_result[2][$i]
];
}
if (!empty($params)) ProductParamsModel::insertAll($params);
if (!empty($params)) {
ProductParamsModel::insertAll($params);
}
}
}
// 更新SKU
if (!empty($put['skus'])) {
$skus = [];
$attrs_group = [];
foreach ($put['skus'] as $val) {
$skus[] = [
'product_id' => $id,
'sku' => $val['sku'],
'main_image' => $val['main_image'],
'photo_album' => $val['photo_album'],
'sort' => $val['sort']
];
foreach ($val['attrs'] as $v) {
$attrs_group[$val['sku']][] = [
'attr_id' => $v['attr_id'],
'attr_value' => $v['attr_value']
];
}
}
if (!empty($skus)) {
$sku_model = new ProductSkuModel;
// 删除原有SKU
$sku_model->productId($id)->delete();
// 添加SKU
$save_ret = $sku_model->saveAll($skus);
if (!$save_ret->isEmpty()) {
$sku_map = [];
foreach ($save_ret as $val) {
$sku_map[$val->sku] = $val->id;
}
$attrs = [];
foreach ($attrs_group as $sku => $sku_attrs) {
if (empty($sku_map[$sku])) {
unset($attrs_group[$sku]);
continue;
}
foreach ($sku_attrs as $k => $v) {
$attrs[] = array_merge($v, ['sku_id' => $sku_map[$sku]]);
}
}
(new ProductSkuAttrModel)->saveAll($attrs);
}
}
}
// 更新关联产品
if ($put['related'] != "") {
if (!empty($put['related'])) {
// 删除原有关联产品
ProductRelatedModel::productId($id)->delete();
$encode_result = json_decode($put['related'], true);
if (!empty($encode_result)) {
$related = [];
foreach ($encode_result as $val) {
$related[] = [
'product_id' => $id,
'related_product_id' => $val['related_product_id'],
'sort' => $val['sort']
];
}
if (!empty($related)) ProductRelatedModel::insertAll($related);
// 添加关联产品
$related = [];
foreach ($put['related'] as $val) {
$related[] = [
'product_id' => $id,
'related_product_id' => $val['related_product_id'],
'sort' => $val['sort']
];
}
if (!empty($related)) {
ProductRelatedModel::insertAll($related);
}
}