OrderCommentsController.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348
  1. <?php
  2. namespace backend\modules\mall\controllers;
  3. use addons\Store\common\models\StoreGoods;
  4. use backend\controllers\MallController;
  5. use common\enums\StatusEnum;
  6. use common\models\goods\Goods;
  7. use common\models\mall\MallAddons;
  8. use common\models\order\Order;
  9. use common\models\order\OrderComments;
  10. use common\models\order\OrderCommentsTemplates;
  11. use common\models\user\User;
  12. use Exception;
  13. use Yii;
  14. use yii\helpers\Json;
  15. /**
  16. * 评价管理控制器
  17. *
  18. * Class OrderCommentsController
  19. * @Author: hua
  20. * @DateTime: 2021/10/7 15:57
  21. * @Copyright: copyright (c) 2021 广东七件事集团
  22. * @package backend\modules\mall\controllers
  23. */
  24. class OrderCommentsController extends MallController
  25. {
  26. /**
  27. * 首页
  28. * @Author: hua
  29. * @DateTime: 2021/10/7 15:57
  30. * @Copyright: copyright (c) 2021 广东七件事集团
  31. * @return mixed|string|void
  32. */
  33. public function actionIndex()
  34. {
  35. if (\Yii::$app->request->isAjax) {
  36. if (\Yii::$app->request->isGet) {
  37. //商品列表筛选
  38. $params = Yii::$app->request->get();
  39. $params['where'] = [['mall_id' => $this->mall_id], ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]];
  40. if (isset($params['comment_type'])) {
  41. switch ($params['comment_type']) {
  42. case 1:
  43. $params['where'][]=['in','score',[0,1]];
  44. break;
  45. case 2:
  46. $params['where'][]=['in','score',[2,3]];
  47. break;
  48. case 3:
  49. $params['where'][]=['in','score',[4,5]];
  50. break;
  51. default:
  52. break;
  53. }
  54. }
  55. if (isset($params['type'])&&!empty($params['keyword'])) {
  56. switch ($params['type']) {
  57. case 1:
  58. //昵称
  59. $user_list = User::findAll(['nickname'=>$params['keyword']]);
  60. $user_id_arr = array_column($user_list,'id');
  61. $params['where'][]=['or',['in','user_id',$user_id_arr],['like','virtual_user',$params['keyword']]];
  62. break;
  63. case 2:
  64. //商品名称
  65. $goodsIds = Goods::find()->where(['like', 'goods_name', $params['keyword']])
  66. ->andWhere(['status' => [StatusEnum::DISABLED, StatusEnum::ENABLED]])
  67. ->select('id')->asArray()->column();
  68. if (MallAddons::isInstall($this->mall_id, 'Store')) {
  69. $storeGoodsIds = StoreGoods::find()->where(['like', 'goods_name', $params['keyword']])
  70. ->andWhere(['status' => [StatusEnum::DISABLED, StatusEnum::ENABLED]])
  71. ->select('id')->asArray()->column();
  72. $goodsIds = array_merge($goodsIds, $storeGoodsIds);
  73. }
  74. $params['where'][]=['in', 'goods_id', $goodsIds];
  75. break;
  76. case 3:
  77. //内容
  78. $params['where'][]=['like','content',$params['keyword']];
  79. break;
  80. default:
  81. break;
  82. }
  83. }
  84. $params['with'] = [
  85. 'goods' => function ($query) {
  86. $query->select('id,goods_name,cover_pic');
  87. },
  88. 'order' => function ($query) {
  89. $query->select('id, order_no');
  90. },
  91. 'users' => function ($query) {
  92. $query->select('id,nickname');
  93. }];
  94. $params['order'] = ['created_at' => SORT_DESC];
  95. $page_data = OrderComments::listPage($params);
  96. /* 因为评论列表并未区分所评论的商品是门店还是平台商品。所以这里需要处理获取对应商品名称 */
  97. if (!empty($page_data['list'])) {
  98. foreach ($page_data['list'] as &$item) {
  99. $item['goodsSource'] = 1;
  100. if (!empty($item['store_id'])) { // 门店
  101. $item['goods'] = StoreGoods::find()
  102. ->select('id, goods_name, cover_pic')
  103. ->where(['id' => $item['goods_id'], 'store_id' => $item['store_id'],
  104. 'status' => [StatusEnum::DISABLED, StatusEnum::ENABLED]])->asArray()->one();
  105. $item['goodsSource'] = 2;
  106. }
  107. if (!empty($item['mch_id'])) {
  108. $item['goodsSource'] = 3;
  109. }
  110. }
  111. unset($item);
  112. }
  113. if ($page_data === false) return $this->error(OrderComments::getStaticError());
  114. return $this->success('操作成功', $page_data);
  115. }
  116. }
  117. return $this->render($this->action->id);
  118. }
  119. /**
  120. * 置顶
  121. * @Author: hua
  122. * @DateTime: 2021/10/7 16:27
  123. * @Copyright: copyright (c) 2021 广东七件事集团
  124. */
  125. public function actionUpdateTop()
  126. {
  127. if (\Yii::$app->request->isAjax) {
  128. $params = Yii::$app->request->post();
  129. $rules = [
  130. [['id', 'is_top'], 'required'],
  131. [['id', 'is_top'], 'integer']
  132. ];
  133. $res = Yii::$app->services->validate->validate($params, $rules);
  134. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  135. $params['field'] = ['is_top' => $params['is_top']];
  136. $res = OrderComments::updateData($params);
  137. if ($res === false) return $this->error(OrderComments::getStaticError());
  138. return $this->success();
  139. }
  140. }
  141. /**
  142. * 隐藏/显示
  143. * @Author: hua
  144. * @DateTime: 2021/10/7 16:27
  145. * @Copyright: copyright (c) 2021 广东七件事集团
  146. */
  147. public function actionShow()
  148. {
  149. if (\Yii::$app->request->isAjax) {
  150. $params = Yii::$app->request->post();
  151. $rules = [
  152. [['id', 'is_show'], 'required'],
  153. [['id', 'is_show'], 'integer']
  154. ];
  155. $res = Yii::$app->services->validate->validate($params, $rules);
  156. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  157. $params['field'] = [
  158. 'status' => $params['is_show']
  159. ];
  160. $res = OrderComments::updateData($params);
  161. if ($res === false) return $this->error(OrderComments::getStaticError());
  162. return $this->success();
  163. }
  164. }
  165. /**
  166. * 删除
  167. * @Author: hua
  168. * @DateTime: 2021/10/7 16:53
  169. * @Copyright: copyright (c) 2021 广东七件事集团
  170. * @return mixed|void
  171. * @throws Exception
  172. */
  173. public function actionDestroy()
  174. {
  175. if (\Yii::$app->request->isAjax) {
  176. $params = Yii::$app->request->post();
  177. $rules = [
  178. [['id'], 'required'],
  179. [['id'], 'integer']
  180. ];
  181. $res = Yii::$app->services->validate->validate($params, $rules);
  182. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  183. $params['field'] = [
  184. 'status' => StatusEnum::DELETE
  185. ];
  186. $res = OrderComments::updateData($params);
  187. if ($res === false) return $this->error(OrderComments::getStaticError());
  188. return $this->success();
  189. }
  190. }
  191. /**
  192. * 商家回复
  193. * @Author: hua
  194. * @DateTime: 2021/10/7 16:59
  195. * @Copyright: copyright (c) 2021 广东七件事集团
  196. * @return mixed|void
  197. * @throws Exception
  198. */
  199. public function actionBatchReply()
  200. {
  201. if (\Yii::$app->request->isAjax) {
  202. $params = Yii::$app->request->post();
  203. $rules = [
  204. [['batch_ids'], 'required'],
  205. [['template_id', 'reply_type', 'reply_text'], 'safe']
  206. ];
  207. $res = Yii::$app->services->validate->validate($params, $rules);
  208. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  209. if ($params['reply_type'] == 1) {
  210. $params['field'] = [
  211. 'reply_content' => $params['reply_text']
  212. ];
  213. }
  214. if ($params['reply_type'] == 2) {
  215. $result = OrderCommentsTemplates::findOne($params['template_id']);
  216. if(empty($result) ) return $this->error('模板id无效');
  217. $params['field'] = [
  218. 'reply_content' => $result->content,
  219. ];
  220. }
  221. $params['id'] = $params['batch_ids'];
  222. $res = OrderComments::updateData($params);
  223. if ($res === false) return $this->error(OrderComments::getStaticError());
  224. return $this->success();
  225. }
  226. }
  227. /**
  228. * 批量删除
  229. * @Author: hua
  230. * @DateTime: 2021/10/7 17:20
  231. * @Copyright: copyright (c) 2021 广东七件事集团
  232. * @return mixed|void
  233. * @throws Exception
  234. */
  235. public function actionBatchDestroy()
  236. {
  237. if (\Yii::$app->request->isAjax) {
  238. $params = Yii::$app->request->post();
  239. $rules = [
  240. [['batch_ids'], 'required'],
  241. ];
  242. $res = Yii::$app->services->validate->validate($params, $rules);
  243. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  244. $params['field'] = [
  245. 'status' => StatusEnum::DELETE
  246. ];
  247. $params['id'] = $params['batch_ids'];
  248. $res = OrderComments::updateData($params);
  249. if ($res === false) return $this->error(OrderComments::getStaticError());
  250. return $this->success();
  251. }
  252. }
  253. /**
  254. * 批量隐藏
  255. * @Author: hua
  256. * @DateTime: 2021/10/7 17:22
  257. * @Copyright: copyright (c) 2021 广东七件事集团
  258. * @return mixed|void
  259. * @throws Exception
  260. */
  261. public function actionBatchUpdateStatus()
  262. {
  263. if (\Yii::$app->request->isAjax) {
  264. $params = Yii::$app->request->post();
  265. $rules = [
  266. [['batch_ids'], 'required'],
  267. ];
  268. $res = Yii::$app->services->validate->validate($params, $rules);
  269. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  270. $params['field'] = [
  271. 'status' => StatusEnum::DISABLED
  272. ];
  273. $params['id'] = $params['batch_ids'];
  274. $res = OrderComments::updateData($params);
  275. if ($res === false) return $this->error(OrderComments::getStaticError());
  276. return $this->success();
  277. }
  278. }
  279. /**
  280. * 编辑
  281. * @Author: hua
  282. * @DateTime: 2021/10/7 18:40
  283. * @Copyright: copyright (c) 2021 广东七件事集团
  284. * @return mixed|void
  285. * @throws \yii\db\Exception
  286. */
  287. public function actionEdit()
  288. {
  289. if (\Yii::$app->request->isAjax) {
  290. $params = Yii::$app->request->post();
  291. $rules = [
  292. [['virtual_user', 'goods_id', 'goods_name','virtual_time','score'], 'required'],
  293. [['id','status','virtual_avatar','pic_url','content'], 'safe']
  294. ];
  295. $res = Yii::$app->services->validate->validate($params, $rules);
  296. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  297. $params['mall_id'] = $this->mall_id;
  298. $params['is_virtual'] = 1;
  299. $params['pic_url'] = $params['pic_url']??[];
  300. $res = OrderComments::setData($params);
  301. if ($res === false) return $this->error(OrderComments::getStaticError());
  302. return $this->success();
  303. }
  304. return $this->render($this->action->id);
  305. }
  306. /**
  307. * 商品搜索
  308. * @Author: hua
  309. * @DateTime: 2021/10/7 18:42
  310. * @Copyright: copyright (c) 2021 广东七件事集团
  311. * @return \yii\web\Response
  312. */
  313. public function actionGoodsSearch()
  314. {
  315. if (\Yii::$app->request->isAjax) {
  316. $params = Yii::$app->request->get();
  317. $where = [['mall_id' => $this->mall_id], ['status' => [StatusEnum::ENABLED]],['is_on_sale'=>1]];
  318. if(!empty($params['keyword'])){
  319. $where[]=['like','goods_name',$params['keyword']];
  320. }
  321. unset($params['keyword']);
  322. $params['where'] = $where;
  323. $params['limit'] = 100;
  324. $params['order'] = 'sort ASC,id DESC';
  325. $list = Goods::listPage($params);
  326. if(!empty($list['list'])){
  327. foreach ($list['list'] as &$v){
  328. $v['name'] = $v['goods_name'];
  329. }
  330. }
  331. return $this->success('',$list);
  332. }
  333. }
  334. }