refactor: banner新增相关分类数据字段
This commit is contained in:
@@ -3,8 +3,11 @@ declare (strict_types = 1);
|
||||
|
||||
namespace app\admin\controller\v1;
|
||||
|
||||
use app\admin\exception\InvalidOperateException;
|
||||
use app\admin\model\v1\SysBannerItemModel;
|
||||
use app\admin\model\v1\SysBannerProdCateMappingModel;
|
||||
use app\admin\validate\v1\SysBannerItemValidate;
|
||||
use think\facade\Log;
|
||||
|
||||
/**
|
||||
* 横幅数据项控制器
|
||||
@@ -67,7 +70,8 @@ class BannerItem
|
||||
{
|
||||
$id = request()->param('id');
|
||||
|
||||
$banner_item = SysBannerItemModel::withoutField([
|
||||
$banner_item = SysBannerItemModel::with('prod_mapping.category')
|
||||
->withoutField([
|
||||
'created_at',
|
||||
'updated_at',
|
||||
'deleted_at'
|
||||
@@ -88,6 +92,7 @@ class BannerItem
|
||||
{
|
||||
$post = request()->post([
|
||||
'banner_id',
|
||||
'rel_prod_cate_id',
|
||||
'title',
|
||||
'title_txt_color',
|
||||
'desc',
|
||||
@@ -106,8 +111,29 @@ class BannerItem
|
||||
return error($validate->getError());
|
||||
}
|
||||
|
||||
$banner_item = SysBannerItemModel::create($post);
|
||||
if ($banner_item->isEmpty()) {
|
||||
SysBannerItemModel::startTrans();
|
||||
try {
|
||||
$banner_item = SysBannerItemModel::create($post);
|
||||
if ($banner_item->isEmpty()) {
|
||||
throw new InvalidOperateException('新增横幅失败');
|
||||
}
|
||||
if (!empty($post['rel_prod_cate_id'])) {
|
||||
$mapping = SysBannerProdCateMappingModel::create([
|
||||
'banner_item_id' => $banner_item->id,
|
||||
'product_category_id' => $post['rel_prod_cate_id']
|
||||
]);
|
||||
if ($mapping->isEmpty()) {
|
||||
throw new InvalidOperateException('新增横幅与产品分类关联失败');
|
||||
}
|
||||
}
|
||||
|
||||
SysBannerItemModel::commit();
|
||||
} catch (InvalidOperateException $e) {
|
||||
SysBannerItemModel::rollback();
|
||||
return error($e->getMessage());
|
||||
} catch (\Throwable $th) {
|
||||
SysBannerItemModel::rollback();
|
||||
Log::error(sprintf('%s:%s %s', $th->getFile(), $th->getLine(), $th->getMessage()));
|
||||
return error('操作失败');
|
||||
}
|
||||
|
||||
@@ -120,6 +146,7 @@ class BannerItem
|
||||
$id = request()->param('id');
|
||||
$put = request()->put([
|
||||
'banner_id',
|
||||
'rel_prod_cate_id',
|
||||
'title',
|
||||
'title_txt_color',
|
||||
'desc',
|
||||
@@ -138,17 +165,45 @@ class BannerItem
|
||||
return error($validate->getError());
|
||||
}
|
||||
|
||||
$banner_item = SysBannerItemModel::bypk($id)->find();
|
||||
if (empty($banner_item)) {
|
||||
return error('请确认操作对象是否存在');
|
||||
}
|
||||
if ($put['type'] == 'video') {
|
||||
unset($put['link']);
|
||||
unset($put['link_to']);
|
||||
}
|
||||
if (!$banner_item->save($put)) {
|
||||
SysBannerItemModel::startTrans();
|
||||
try {
|
||||
$banner_item = SysBannerItemModel::bypk($id)->find();
|
||||
if (empty($banner_item)) {
|
||||
throw new InvalidOperateException('请确认操作对象是否存在');
|
||||
}
|
||||
if ($put['type'] == 'video') {
|
||||
unset($put['link']);
|
||||
unset($put['link_to']);
|
||||
}
|
||||
if (!$banner_item->save($put)) {
|
||||
throw new InvalidOperateException('操作失败');
|
||||
}
|
||||
|
||||
// 更新关联的产品分类
|
||||
if (!empty($put['rel_prod_cate_id'])) {
|
||||
$ok = SysBannerProdCateMappingModel::where('banner_item_id', '=', $id)->delete();
|
||||
if (!$ok) {
|
||||
throw new InvalidOperateException('更新横幅与产品分类关联失败');
|
||||
}
|
||||
$mapping = SysBannerProdCateMappingModel::create([
|
||||
'banner_item_id' => $id,
|
||||
'product_category_id' => $put['rel_prod_cate_id']
|
||||
]);
|
||||
if ($mapping->isEmpty()) {
|
||||
throw new InvalidOperateException('更新横幅与产品分类关联失败');
|
||||
}
|
||||
}
|
||||
|
||||
SysBannerItemModel::commit();
|
||||
} catch (InvalidOperateException $e) {
|
||||
SysBannerItemModel::rollback();
|
||||
return error($e->getMessage());
|
||||
} catch (\Throwable $th) {
|
||||
SysBannerItemModel::rollback();
|
||||
Log::error(sprintf('%s:%s %s', $th->getFile(), $th->getLine(), $th->getMessage()));
|
||||
return error('操作失败');
|
||||
}
|
||||
|
||||
return success('操作成功');
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user