CategoryController.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. <?php
  2. namespace mall\controllers;
  3. use bizHd\custom\classes\CustomClass;
  4. use bizHd\goods\classes\GoodsUseCaseClass;
  5. use bizHd\goods\classes\UseCaseClass;
  6. use bizMall\goods\services\CategoryService;
  7. use Yii;
  8. use common\components\util;
  9. class CategoryController extends BaseController
  10. {
  11. public $guestAccess = ['list', 'use-case-list']; // 'goods-list' ---- 为什么不用认证
  12. //获取分类 ssh 2019.12.2
  13. public function actionList()
  14. {
  15. $user = $this->user;
  16. if (empty($user)) {
  17. util::success([]);
  18. }
  19. $get = Yii::$app->request->get();
  20. $flower = $get['flower'] ?? -1;
  21. //普莲花艺、叶上花、丰行、小武鲜花、九江云朵、源花汇、紫荆不能在花卉宝下单,多处要同步修改,关键词ls_mall_not_open
  22. $mainId = $this->mainId;
  23. if (getenv('YII_ENV') == 'production') {
  24. if (in_array($mainId, [40057, 7779, 42940, 26374, 10536, 65381])) {
  25. util::fail('暂无商品哦,编号25395');
  26. }
  27. } else {
  28. if (in_array($mainId, [0, 1])) {
  29. util::fail('暂无商品哦!编号639942');
  30. }
  31. }
  32. //建立客户关系
  33. CustomClass::buildRelation($this->shop, $this->user);
  34. $mainId = $this->mainId ?? 0;
  35. $where = ['mainId' => $mainId, 'delStatus' => 0, 'status' => 1];
  36. if ($flower > -1) {
  37. $where['flower'] = $flower;
  38. }
  39. //默认列出正常分类,美团等第三方分类不列表
  40. $where['style'] = 0;
  41. $return = CategoryService::getAllCategory($where);
  42. util::success($return);
  43. }
  44. //取分类下商品 ssh 2019.12.2
  45. public function actionGoodsList()
  46. {
  47. $user = $this->user;
  48. if (empty($user)) {
  49. util::success(['list' => []]);
  50. }
  51. $get = Yii::$app->request->get();
  52. $shop = $this->shop;
  53. $custom = $this->custom;
  54. $params = [];
  55. //调用花店端的方法,后面再分离 (为了代码维护可以不分离,免得一处改了,另一处没修改到。--- 所以分离好后,又还原了)
  56. $data = \bizHd\goods\classes\GoodsCategoryClass::getGoodsList($get, $shop, $custom, $params);
  57. $data['list'] = $this->appendUseCaseInfo($data['list'] ?? []);
  58. util::success($data);
  59. }
  60. /**
  61. * 场景列表(商城筛选弹窗用)
  62. * 游客可访问,未登录返回空数组
  63. */
  64. public function actionUseCaseList()
  65. {
  66. $user = $this->user;
  67. if (empty($user)) {
  68. util::success([]);
  69. }
  70. $mainId = intval($this->mainId ?? 0);
  71. if ($mainId <= 0) {
  72. util::success([]);
  73. }
  74. $list = UseCaseClass::getAllByCondition(
  75. ['mainId' => $mainId, 'status' => 1, 'delStatus' => 0],
  76. 'inTurn DESC',
  77. 'id,useCaseName'
  78. );
  79. util::success($list ?: []);
  80. }
  81. /**
  82. * 批量为商品列表补充场景 ID 与名称,供列表页标签展示
  83. *
  84. * @param array $list
  85. * @return array
  86. */
  87. private function appendUseCaseInfo($list)
  88. {
  89. if (empty($list)) {
  90. return [];
  91. }
  92. $goodsIds = array_column($list, 'id');
  93. if (empty($goodsIds)) {
  94. return $list;
  95. }
  96. $relations = GoodsUseCaseClass::getAllByCondition(
  97. ['goodsId' => ['in', $goodsIds]],
  98. null,
  99. 'goodsId,useCaseId'
  100. );
  101. $useCaseIds = array_unique(array_column($relations ?: [], 'useCaseId'));
  102. $nameMap = [];
  103. if (!empty($useCaseIds)) {
  104. $useCases = UseCaseClass::getAllByCondition(
  105. [
  106. 'id' => ['in', $useCaseIds],
  107. 'mainId' => intval($this->mainId ?? 0),
  108. 'delStatus' => 0,
  109. ],
  110. null,
  111. 'id,useCaseName'
  112. );
  113. foreach ($useCases ?: [] as $uc) {
  114. $nameMap[intval($uc['id'])] = $uc['useCaseName'] ?? '';
  115. }
  116. }
  117. $goodsUseCaseMap = [];
  118. foreach ($relations ?: [] as $rel) {
  119. $gid = intval($rel['goodsId']);
  120. $uid = intval($rel['useCaseId']);
  121. if (!isset($goodsUseCaseMap[$gid])) {
  122. $goodsUseCaseMap[$gid] = [];
  123. }
  124. if (!isset($nameMap[$uid])) {
  125. continue;
  126. }
  127. $goodsUseCaseMap[$gid][] = [
  128. 'id' => $uid,
  129. 'name' => $nameMap[$uid],
  130. ];
  131. }
  132. foreach ($list as &$item) {
  133. $gid = intval($item['id'] ?? 0);
  134. $cases = $goodsUseCaseMap[$gid] ?? [];
  135. $item['useCaseIdList'] = array_column($cases, 'id');
  136. $item['useCaseNames'] = array_values(array_filter(array_column($cases, 'name')));
  137. }
  138. unset($item);
  139. return $list;
  140. }
  141. }