|
|
@@ -3,6 +3,8 @@
|
|
|
namespace mall\controllers;
|
|
|
|
|
|
use bizHd\custom\classes\CustomClass;
|
|
|
+use bizHd\goods\classes\GoodsUseCaseClass;
|
|
|
+use bizHd\goods\classes\UseCaseClass;
|
|
|
use bizMall\goods\services\CategoryService;
|
|
|
use Yii;
|
|
|
use common\components\util;
|
|
|
@@ -10,7 +12,7 @@ use common\components\util;
|
|
|
class CategoryController extends BaseController
|
|
|
{
|
|
|
|
|
|
- public $guestAccess = ['list']; // 'goods-list' ---- 为什么不用认证
|
|
|
+ public $guestAccess = ['list', 'use-case-list']; // 'goods-list' ---- 为什么不用认证
|
|
|
|
|
|
//获取分类 ssh 2019.12.2
|
|
|
public function actionList()
|
|
|
@@ -62,7 +64,95 @@ class CategoryController extends BaseController
|
|
|
$params = [];
|
|
|
//调用花店端的方法,后面再分离 (为了代码维护可以不分离,免得一处改了,另一处没修改到。--- 所以分离好后,又还原了)
|
|
|
$data = \bizHd\goods\classes\GoodsCategoryClass::getGoodsList($get, $shop, $custom, $params);
|
|
|
+ $data['list'] = $this->appendUseCaseInfo($data['list'] ?? []);
|
|
|
util::success($data);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 场景列表(商城筛选弹窗用)
|
|
|
+ * 游客可访问,未登录返回空数组
|
|
|
+ */
|
|
|
+ public function actionUseCaseList()
|
|
|
+ {
|
|
|
+ $user = $this->user;
|
|
|
+ if (empty($user)) {
|
|
|
+ util::success([]);
|
|
|
+ }
|
|
|
+ $mainId = intval($this->mainId ?? 0);
|
|
|
+ if ($mainId <= 0) {
|
|
|
+ util::success([]);
|
|
|
+ }
|
|
|
+ $list = UseCaseClass::getAllByCondition(
|
|
|
+ ['mainId' => $mainId, 'status' => 1, 'delStatus' => 0],
|
|
|
+ 'inTurn DESC',
|
|
|
+ 'id,useCaseName'
|
|
|
+ );
|
|
|
+ util::success($list ?: []);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 批量为商品列表补充场景 ID 与名称,供列表页标签展示
|
|
|
+ *
|
|
|
+ * @param array $list
|
|
|
+ * @return array
|
|
|
+ */
|
|
|
+ private function appendUseCaseInfo($list)
|
|
|
+ {
|
|
|
+ if (empty($list)) {
|
|
|
+ return [];
|
|
|
+ }
|
|
|
+ $goodsIds = array_column($list, 'id');
|
|
|
+ if (empty($goodsIds)) {
|
|
|
+ return $list;
|
|
|
+ }
|
|
|
+
|
|
|
+ $relations = GoodsUseCaseClass::getAllByCondition(
|
|
|
+ ['goodsId' => ['in', $goodsIds]],
|
|
|
+ null,
|
|
|
+ 'goodsId,useCaseId'
|
|
|
+ );
|
|
|
+ $useCaseIds = array_unique(array_column($relations ?: [], 'useCaseId'));
|
|
|
+ $nameMap = [];
|
|
|
+ if (!empty($useCaseIds)) {
|
|
|
+ $useCases = UseCaseClass::getAllByCondition(
|
|
|
+ [
|
|
|
+ 'id' => ['in', $useCaseIds],
|
|
|
+ 'mainId' => intval($this->mainId ?? 0),
|
|
|
+ 'delStatus' => 0,
|
|
|
+ ],
|
|
|
+ null,
|
|
|
+ 'id,useCaseName'
|
|
|
+ );
|
|
|
+ foreach ($useCases ?: [] as $uc) {
|
|
|
+ $nameMap[intval($uc['id'])] = $uc['useCaseName'] ?? '';
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $goodsUseCaseMap = [];
|
|
|
+ foreach ($relations ?: [] as $rel) {
|
|
|
+ $gid = intval($rel['goodsId']);
|
|
|
+ $uid = intval($rel['useCaseId']);
|
|
|
+ if (!isset($goodsUseCaseMap[$gid])) {
|
|
|
+ $goodsUseCaseMap[$gid] = [];
|
|
|
+ }
|
|
|
+ if (!isset($nameMap[$uid])) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ $goodsUseCaseMap[$gid][] = [
|
|
|
+ 'id' => $uid,
|
|
|
+ 'name' => $nameMap[$uid],
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach ($list as &$item) {
|
|
|
+ $gid = intval($item['id'] ?? 0);
|
|
|
+ $cases = $goodsUseCaseMap[$gid] ?? [];
|
|
|
+ $item['useCaseIdList'] = array_column($cases, 'id');
|
|
|
+ $item['useCaseNames'] = array_values(array_filter(array_column($cases, 'name')));
|
|
|
+ }
|
|
|
+ unset($item);
|
|
|
+
|
|
|
+ return $list;
|
|
|
+ }
|
|
|
+
|
|
|
}
|