refactor: 更新产品接口添加sku处理逻辑
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user