DefaultController.php 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640
  1. <?php
  2. namespace addons\DepositPresale\backend\controllers;
  3. use addons\DepositPresale\common\enums\DepositPresaleEnum;
  4. use addons\DepositPresale\common\models\DepositPresaleActive;
  5. use addons\DepositPresale\common\models\DepositPresaleActiveGoodsAttr;
  6. use addons\DepositPresale\common\models\DepositPresaleCate;
  7. use addons\DepositPresale\common\models\DepositPresaleOrder;
  8. use common\enums\PayTypeEnum;
  9. use common\enums\StatusEnum;
  10. use common\models\common\AddonsMarketingSetting;
  11. use common\models\common\PaymentTrade;
  12. use common\models\common\PaymentTradeOrder;
  13. use common\models\goods\Goods;
  14. use common\models\goods\GoodsAttr;
  15. use common\models\user\User;
  16. use common\models\user\UserLevel;
  17. use EasyWeChat\Factory;
  18. use Yii;
  19. /**
  20. * 默认控制器
  21. *
  22. * Class DefaultController
  23. * @package addons\DepositPresale\backend\controllers
  24. */
  25. class DefaultController extends BaseController
  26. {
  27. public $enableCsrfValidation = false;
  28. /**
  29. * @desc:预售活动列表
  30. * @Author: hua
  31. * @Date: 2021/12/13
  32. * @Time: 18:49
  33. * @Copyright: copyright (c) 2021 广东七件事集团
  34. * @return mixed|string|void
  35. */
  36. public function actionIndex()
  37. {
  38. if (\Yii::$app->request->isAjax) {
  39. if (\Yii::$app->request->isGet) {
  40. $get = \Yii::$app->request->get();
  41. $where[] = ['mall_id' => $this->mall_id];
  42. // $where[] = ['status' => StatusEnum::ENABLED];
  43. if (!empty($get['goods_name'])) {
  44. $goods_list = Goods::lists(['where' => [['mall_id' => $this->mall_id], ['like', 'goods_name', trim($get['goods_name']) . '%', false], ['status' => StatusEnum::ENABLED]], 'select' => 'id']);
  45. $goods_id_arr = array_column($goods_list, 'id');
  46. $where[] = ['goods_id' => $goods_id_arr];
  47. }
  48. if (isset($get['group_status']) && $get['group_status'] != -1) $where[] = ['group_status' => $get['group_status']];
  49. $params['limit'] = 10;
  50. $params['where'] = $where;
  51. $params['order'] = 'id DESC';
  52. $params['with'] = ['goods'];
  53. $pageData = DepositPresaleActive::listPage($params, false);
  54. //增加分类查询
  55. foreach($pageData['list'] as $k=>$v){
  56. $pageData['list'][$k]['cate_name']=DepositPresaleCate::findOne(['id'=>$v['cate_id']])->name;
  57. }
  58. if ($pageData === false) return $this->error(DepositPresaleActive::getStaticError());
  59. $pageData['statistics'] = DepositPresaleActive::getAcitvityStatistics($this->mall_id);
  60. return $this->success('操作成功', $pageData);
  61. }
  62. }
  63. return $this->render('index', []);
  64. }
  65. /**
  66. * @desc:详情
  67. * @Author: hua
  68. * @Date: 2021/12/13
  69. * @Time: 18:50
  70. * @Copyright: copyright (c) 2021 广东七件事集团
  71. * @return mixed|string|void
  72. */
  73. public function actionDetail()
  74. {
  75. if (\Yii::$app->request->isAjax) {
  76. if (\Yii::$app->request->isGet) {
  77. $get = \Yii::$app->request->get();
  78. DepositPresaleActive::checkActive($get['id'], $this->mall_id);
  79. $list = DepositPresaleActiveGoodsAttr::lists(['where' => [['mall_id' => $this->mall_id], ['deposit_presale_active_id' => $get['id']]], 'with' => [
  80. 'goodsAttr' => function ($query) {
  81. $query->where(['status' => StatusEnum::ENABLED]);
  82. },
  83. 'goods' => function ($query) {
  84. $query->where(['status' => StatusEnum::ENABLED]);
  85. },
  86. 'depositPresaleActive' => function ($query) {
  87. $query->where(['status' => StatusEnum::ENABLED]);
  88. },
  89. ]]);
  90. if ($list === false) return $this->error(DepositPresaleActive::getStaticError());
  91. $commander_level_limit = '';
  92. $user_level_limit = '';
  93. foreach ($list as $item) {
  94. $commander_level_limit = $item['depositPresaleActive']['commander_level_limit'];
  95. $user_level_limit = $item['depositPresaleActive']['user_level_limit'];
  96. break;
  97. }
  98. $function = function ($level_limit) {
  99. $level_arr = explode(',', $level_limit);
  100. $user_level_list = UserLevel::lists(['where' => [['level' => $level_arr], ['mall_id' => $this->mall_id], ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]], 'select' => 'name']);
  101. $temp = array_column($user_level_list, 'name');
  102. return join(',', $temp);
  103. };
  104. $commander_level_limit_text = '全部';
  105. $user_level_limit_text = '全部';
  106. if ($commander_level_limit != 'all') {
  107. $commander_level_limit_text = $function($commander_level_limit);
  108. }
  109. if ($user_level_limit != 'all') {
  110. $user_level_limit_text = $function($user_level_limit);
  111. }
  112. return $this->success('操作成功', ['list' => $list, 'commander_level_limit_text' => $commander_level_limit_text, 'user_level_limit_text' => $user_level_limit_text]);
  113. }
  114. }
  115. return $this->render('index', []);
  116. }
  117. /**
  118. * @desc:删除
  119. * @Author: hua
  120. * @Date: 2021/12/13
  121. * @Time: 18:50
  122. * @Copyright: copyright (c) 2021 广东七件事集团
  123. * @return mixed|string|void
  124. */
  125. public function actionDel()
  126. {
  127. if (\Yii::$app->request->isAjax) {
  128. if (\Yii::$app->request->isGet) {
  129. $get = \Yii::$app->request->get();
  130. $get['mall_id'] = $this->mall_id;
  131. $res = DepositPresaleActive::delData($get);
  132. if ($res === false) return $this->error(DepositPresaleActive::getStaticError());
  133. return $this->success('操作成功');
  134. }
  135. }
  136. return $this->render('index', []);
  137. }
  138. public function actionAdd()
  139. {
  140. if (\Yii::$app->request->isAjax) {
  141. if (\Yii::$app->request->isPost) {
  142. $params = \Yii::$app->request->post();
  143. $params['mall_id'] = $this->mall_id;
  144. $result = $this->validateActivityData($params);
  145. if(!empty($result['msg'])) return $this->error($result['msg']);
  146. $res = DepositPresaleActive::setData($params);
  147. if ($res === false) return $this->error(DepositPresaleActive::getStaticError());
  148. return $this->success('操作成功');
  149. }else{
  150. $id = \Yii::$app->request->get('id');
  151. $where = [
  152. ['id' => $id],
  153. ['mall_id' => $this->mall_id]
  154. ];
  155. $with = ['goods', 'activeGoodsAttr', 'category'];
  156. DepositPresaleActive::checkActive($id, $this->mall_id);
  157. $data = DepositPresaleActive::getOne($where, true, $with);
  158. $format_fields = ['activity_start_at', 'activity_end_at','deposit_start_at','deposit_end_at', 'final_payment_start_at', 'final_payment_end_at', 'send_goods_start_at'];
  159. foreach($data as $key => &$item){
  160. if(in_array($key, $format_fields) && !empty($item)){
  161. $item = date('Y-m-d H:i:s', $item);
  162. }
  163. if(in_array($key, ['deposit_start_at','deposit_end_at'])){
  164. $data['depositActiveTime'][] = $item;
  165. }
  166. if(in_array($key, ['final_payment_start_at', 'final_payment_end_at'])){
  167. $data['finalPaymentActiveTime'][] = $item;
  168. }
  169. if(in_array($key, ['activity_start_at', 'activity_end_at'])){
  170. $data['activityDateTime'][] = $item;
  171. }
  172. if(in_array($key, ['send_goods_start_at'])){
  173. $data['sendGoodsTime'] = $item;
  174. }
  175. $data['cate_name'] = $data['category']['name'];
  176. }
  177. $data['formGoodsList'][] =$data['goods'];
  178. $data['is_attr'] =$data['goods']['is_attr'];
  179. return $this->success('操作成功', $data ?? []);
  180. }
  181. }
  182. $title = '添加页面';
  183. return $this->render('add', ['title' => $title]);
  184. }
  185. /**
  186. * @desc:开团列表
  187. * @Author: hua
  188. * @Date: 2021/12/13
  189. * @Time: 18:49
  190. * @Copyright: copyright (c) 2021 广东七件事集团
  191. * @return mixed|string|void
  192. */
  193. public function actionOpenList()
  194. {
  195. if (\Yii::$app->request->isAjax) {
  196. if (\Yii::$app->request->isGet) {
  197. $params = \Yii::$app->request->get();
  198. $where[] = ['deposit_presale_active_id' => $params['deposit_presale_active_id']];
  199. $where[] = ['mall_id' => $this->mall_id];
  200. $where[] = ['is_commander' => 1];
  201. if (!empty($params['nickname'])) {
  202. $user_list = User::lists(['where' => [['like', 'nickname', $params['nickname'] . '%', false]], 'select' => 'id']);
  203. $where[] = ['user_id' => array_column($user_list, 'id')];
  204. }
  205. if (!empty($params['begin_time'])) $where[] = ['>=', 'created_at', strtotime($params['begin_time'])];
  206. if (!empty($params['end_time'])) $where[] = ['<=', 'created_at', strtotime($params['end_time'])];
  207. if (isset($params['order_status']) && $params['order_status'] != -1) $where[] = ['order_status' => $params['order_status']];
  208. $params['limit'] = 10;
  209. $params['where'] = $where;
  210. $params['with'] = ['user', 'groupBuyActive'];
  211. $list = DepositPresaleOrder::listPage($params);
  212. if (!empty($list['list'])) {
  213. $open_group_id_arr = array_column($list['list'], 'open_group_id');
  214. $order_arr = DepositPresaleOrder::lists(['where' => [['open_group_id' => $open_group_id_arr], ['is_pay' => 1]], 'select' => 'open_group_id,count(*) as counts', 'group' => 'open_group_id', 'index' => 'open_group_id']);
  215. foreach ($list['list'] as &$item) {
  216. $item['counts'] = $order_arr[$item['open_group_id']]['counts'] ?? 0;
  217. }
  218. }
  219. return $this->success('操作成功', $list);
  220. }
  221. }
  222. return $this->render('open-list', []);
  223. }
  224. /**
  225. * @desc:预售成员
  226. * @Author: hua
  227. * @Date: 2021/12/14
  228. * @Time: 14:49
  229. * @Copyright: copyright (c) 2021 广东七件事集团
  230. * @return mixed|void
  231. */
  232. public function actionDepositPresaleTeam()
  233. {
  234. if (\Yii::$app->request->isAjax) {
  235. if (\Yii::$app->request->isGet) {
  236. $get = \Yii::$app->request->get();
  237. $where[] = ['deposit_presale_active_id' => $get['deposit_presale_active_id']];
  238. $where[] = ['open_group_id' => $get['open_group_id']];
  239. $where[] = ['commander_id' => $get['commander_id']];
  240. $where[] = ['mall_id' => $this->mall_id];
  241. $where[] = ['is_pay' => 1];
  242. $params['where'] = $where;
  243. $params['with'] = ['user', 'groupBuyActive'];
  244. $list = DepositPresaleOrder::listPage($params);
  245. return $this->success('操作成功', $list);
  246. }
  247. }
  248. }
  249. /**
  250. * @desc:结束预售
  251. * @Author: hua
  252. * @Date: 2021/12/14
  253. * @Time: 15:16
  254. * @Copyright: copyright (c) 2021 广东七件事集团
  255. * @return mixed|void
  256. */
  257. public function actionFinish()
  258. {
  259. if (\Yii::$app->request->isAjax) {
  260. if (\Yii::$app->request->isGet) {
  261. $get = \Yii::$app->request->get();
  262. $counts = DepositPresaleOrder::find()->where(['mall_id'=>$this->mall_id,'open_group_id'=>$get['open_group_id'],'is_pay'=>1])->count();
  263. $group_order = DepositPresaleOrder::findOne(['mall_id'=>$this->mall_id,'id'=>$get['open_group_id'],'is_pay'=>1]);
  264. $active = DepositPresaleActive::findOne(['mall_id'=>$this->mall_id,'id'=>$group_order['deposit_presale_active_id']]);
  265. if($active->is_virtual){
  266. if($active->virtual_group_type==2&&$counts<$active->gt_group_size){
  267. $res = DepositPresaleOrder::finishDepositPresaleOrder($this->mall_id, $get['open_group_id']);
  268. if ($res == false) return $this->error(DepositPresaleOrder::getStaticError());
  269. }else{
  270. //成功
  271. $list = DepositPresaleOrder::findAll(['mall_id' => $this->mall_id, 'open_group_id' => $get['open_group_id'], 'order_status' => DepositPresaleEnum::JOINING]);
  272. $res = DepositPresaleOrder::addMainOrder($group_order,$list,$active,$counts);
  273. if ($res == false) return $this->error(DepositPresaleOrder::getStaticError());
  274. }
  275. }
  276. return $this->success('操作成功', []);
  277. }
  278. }
  279. }
  280. /**
  281. * @desc:预售订单
  282. * @Author: hua
  283. * @Date: 2021/12/17
  284. * @Time: 16:35
  285. * @Copyright: copyright (c) 2021 广东七件事集团
  286. * @return mixed|string|void
  287. */
  288. public function actionOrderList()
  289. {
  290. if (\Yii::$app->request->isAjax) {
  291. if (\Yii::$app->request->isGet) {
  292. $get = \Yii::$app->request->get();
  293. $where[] = ['mall_id' => $this->mall_id];
  294. $where[] = ['status' => StatusEnum::ENABLED];
  295. if (!empty($get['mobile'])) {
  296. $user_list = User::lists(['where' => [['mall_id' => $this->mall_id], ['like', 'mobile', trim($get['mobile']) . '%', false], ['status' => StatusEnum::ENABLED]], 'select' => 'id']);
  297. $user_id_arr = array_column($user_list, 'id');
  298. $where[] = ['user_id' => $user_id_arr];
  299. }
  300. if (!empty($get['nickname'])) {
  301. $user_list = User::lists(['where' => [['mall_id' => $this->mall_id], ['like', 'nickname', trim($get['nickname']) . '%', false], ['status' => StatusEnum::ENABLED]], 'select' => 'id']);
  302. $user_id_arr = array_column($user_list, 'id');
  303. $where[] = ['user_id' => $user_id_arr];
  304. }
  305. if (!empty($get['order_no'])) {
  306. $where[] = ['order_no' => $get['order_no']];
  307. }
  308. if (isset($get['order_status']) && $get['order_status'] != -1) $where[] = ['order_status' => $get['order_status']];
  309. $params['limit'] = 10;
  310. $params['where'] = $where;
  311. $params['order'] = 'id DESC';
  312. $params['with'] = ['user', 'depositPresaleActive'];
  313. $pageData = DepositPresaleOrder::listPage($params, false);
  314. if ($pageData === false) return $this->error(DepositPresaleOrder::getStaticError());
  315. $pageData['order_status_map'] = DepositPresaleEnum::getOrderStatusMap();
  316. $pageData['statistics'] = DepositPresaleOrder::getOrderStatistics($this->mall_id);
  317. return $this->success('操作成功', $pageData);
  318. }
  319. }
  320. return $this->render('order-list', []);
  321. }
  322. /**
  323. * @desc:查询退款状态
  324. * @Author: hua
  325. * @Date: 2021/12/20
  326. * @Time: 15:38
  327. * @Copyright: copyright (c) 2021 广东七件事集团
  328. * @return mixed|void
  329. * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
  330. */
  331. public function actionQueryRefund()
  332. {
  333. if (\Yii::$app->request->isAjax) {
  334. if (\Yii::$app->request->isGet) {
  335. $get = \Yii::$app->request->get();
  336. $deposit_presale_order = DepositPresaleOrder::findOne(['id' => $get['id'], 'mall_id' => $this->mall_id]);
  337. if ($deposit_presale_order == false) return $this->error(DepositPresaleOrder::getStaticError());
  338. switch ($deposit_presale_order->payment_type) {
  339. case PayTypeEnum::BALANCE:
  340. return $this->success('已退款');
  341. case PayTypeEnum::WECHAT:
  342. $payment_order = PaymentTradeOrder::findOne(['order_no' => $deposit_presale_order->order_no]);
  343. $payment_trade = PaymentTrade::findOne(['id' => $payment_order->trade_id]);
  344. $out_trade_no = $payment_trade['out_trade_no'];
  345. $config = Yii::$app->services->pay->getWechatConfig($this->mall_id);
  346. $wechatConfig = [
  347. 'app_id' => $config['app_id'],
  348. 'mch_id' => $config['wechat_mch_id'],
  349. 'key' => $config['wechat_pay_secret'], // API 密钥
  350. 'cert_path' => dirname(Yii::$app->basePath) . '/' . $config['wechat_cert_pem_file'],
  351. 'key_path' => dirname(Yii::$app->basePath) . '/' . $config['wechat_key_pem_file'],
  352. 'notify_url' => ''//回调地址
  353. ];
  354. $res = Factory::payment($wechatConfig)->refund->queryByOutTradeNumber($out_trade_no);
  355. if ($res['result_code'] != 'SUCCESS') return $this->error($res['err_code_des']);
  356. return $this->success('操作成功', $res['return_msg']);
  357. default:
  358. return $this->error('暂时不支持该支付方式查询');
  359. }
  360. }
  361. }
  362. }
  363. /**
  364. * @desc: 活动装修
  365. * @Author: hua
  366. * @Date: 2021/12/20
  367. * @Time: 15:56
  368. * @Copyright: copyright (c) 2021 广东七件事集团
  369. * @return mixed|void
  370. */
  371. public function actionDiyIndex()
  372. {
  373. if (\Yii::$app->request->isAjax) {
  374. if (\Yii::$app->request->isPost) {
  375. $params = \Yii::$app->request->post();
  376. $res = \Yii::$app->services->validate->validate($params, [
  377. [['content'], 'required'],
  378. ]);
  379. if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
  380. $params['mall_id'] = $this->mall_id;
  381. $params['addons_name'] = DepositPresaleEnum::ADDONS_NAME;
  382. $res = AddonsMarketingSetting::setData($params);
  383. if ($res == false) return $this->error(AddonsMarketingSetting::getStaticError());
  384. return $this->success('操作成功', []);
  385. }
  386. if (\Yii::$app->request->isGet) {
  387. $params['mall_id'] = $this->mall_id;
  388. $params['addons_name'] = DepositPresaleEnum::ADDONS_NAME;
  389. $params['status'] = StatusEnum::ENABLED;
  390. $res = AddonsMarketingSetting::findOne($params);
  391. if ($res == false) return $this->success('操作成功', []);
  392. $data = $res->toArray();
  393. return $this->success('操作成功', $data);
  394. }
  395. }
  396. return $this->render('diy-index');
  397. }
  398. /**
  399. * @desc:预售分类列表
  400. * @Author: hua
  401. * @Date: 2021/12/13
  402. * @Time: 18:49
  403. * @Copyright: copyright (c) 2021 广东七件事集团
  404. * @return mixed|string|void
  405. */
  406. public function actionCateIndex()
  407. {
  408. if (\Yii::$app->request->isAjax) {
  409. if (\Yii::$app->request->isGet) {
  410. $where[] = ['mall_id' => $this->mall_id];
  411. $where[] = ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]];
  412. $params['limit'] = 10;
  413. $params['where'] = $where;
  414. $params['order'] = 'id DESC';
  415. $pageData = DepositPresaleCate::listPage($params, false);
  416. if ($pageData === false) return $this->error(DepositPresaleCate::getStaticError());
  417. return $this->success('操作成功', $pageData);
  418. }
  419. }
  420. return $this->render('cate-index', []);
  421. }
  422. /**
  423. * @desc:编辑预售分类
  424. * @Author: hua
  425. * @Date: 2021/12/13
  426. * @Time: 18:49
  427. * @Copyright: copyright (c) 2021 广东七件事集团
  428. * @return mixed|string|void
  429. */
  430. public function actionCateEdit()
  431. {
  432. if (\Yii::$app->request->isAjax) {
  433. if (\Yii::$app->request->isGet) {
  434. $params = Yii::$app->request->get();
  435. $params['mall_id'] = $this->mall_id;
  436. $data = DepositPresaleCate::findOne(['id' => $params['id'], 'mall_id' => $params['mall_id'], 'status' => [StatusEnum::DISABLED, StatusEnum::ENABLED]]);
  437. return $this->success('操作成功', $data);
  438. }
  439. if (\Yii::$app->request->isPost) {
  440. $params = Yii::$app->request->post();
  441. $params['mall_id'] = $this->mall_id;
  442. if (isset($params['status']) && in_array($params['status'], [StatusEnum::DISABLED, StatusEnum::DELETE])) {
  443. $res = DepositPresaleActive::findOne(['mall_id' => $this->mall_id, 'cate_id' => $params['id'], 'group_status' => [DepositPresaleEnum::NOT_STARTED, DepositPresaleEnum::OPEN_GROUP]]);
  444. if ($res) return $this->error('该预售分类已关联预售活动');
  445. }
  446. $res = DepositPresaleCate::setData($params);
  447. if ($res === false) return $this->error(DepositPresaleCate::getStaticError());
  448. return $this->success('操作成功', []);
  449. }
  450. }
  451. }
  452. /**
  453. * @desc:获取会员等级列表,添加活动使用,不用验证权限
  454. * @Author: hua
  455. * @Date: 2021/12/13
  456. * @Time: 18:50
  457. * @Copyright: copyright (c) 2021 广东七件事集团
  458. * @return mixed|string|void
  459. */
  460. public function actionUserLevelList()
  461. {
  462. $request = Yii::$app->request;
  463. if ($request->isAjax) {
  464. // 查询参数
  465. $where[] = ['in', 'status', [StatusEnum::ENABLED]];
  466. $where[] = ['=', 'mall_id', $this->mall['id']];
  467. $params = array('where' => $where, 'select' => 'id,level,name', 'order' => 'level asc', 'limit' => $request->get('limit', 12));
  468. $page_data = UserLevel::listPage($params, false);
  469. $page_data['list'] = array_merge([['id' => 0, 'level' => 0, 'name' => '普通用户']], $page_data['list']);
  470. return $this->success('操作成功', $page_data);
  471. }
  472. return $this->render($this->action->id);
  473. }
  474. /**
  475. * @desc:获取商品列表,添加活动使用,不用验证权限
  476. * @Author: hua
  477. * @Date: 2021/12/13
  478. * @Time: 18:51
  479. * @Copyright: copyright (c) 2021 广东七件事集团
  480. * @return mixed|string|void
  481. */
  482. public function actionGoodsList()
  483. {
  484. $request = Yii::$app->request;
  485. if ($request->isAjax) {
  486. //商品列表筛选
  487. $get = Yii::$app->request->get();
  488. $where = [['mall_id' => $this->mall['id'], 'status' => [StatusEnum::ENABLED]], ['is_on_sale' => 1]];
  489. // 筛选
  490. if (isset($get['search'])) {
  491. $search = json_decode($get['search'], true);
  492. isset($search['keyword']) && $where[] = ['like', 'goods_name', trim($search['keyword']) . '%', false];
  493. }
  494. // 排序
  495. $deposit_presale_active_list = DepositPresaleActive::findAll(['mall_id' => $this->mall_id, 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]);
  496. $goods_id_arr = array_column($deposit_presale_active_list, 'goods_id');
  497. $where[] = ['not in', 'id', $goods_id_arr];
  498. $sort = 'sort ASC,id DESC';
  499. $params = ['where' => $where, 'limit' => 20, 'order' => $sort];
  500. $page_data = Goods::listPage($params, false, true);
  501. if ($page_data === false) return $this->error(Goods::getStaticError());
  502. return $this->success('操作成功', $page_data);
  503. }
  504. return $this->render($this->action->id);
  505. }
  506. /**
  507. * @desc:获取商品详情,添加活动使用,不用验证权限
  508. * @Author: hua
  509. * @Date: 2021/12/13
  510. * @Time: 18:51
  511. * @Copyright: copyright (c) 2021 广东七件事集团
  512. * @return mixed|string|void
  513. */
  514. public function actionGoodsDetail()
  515. {
  516. $request = Yii::$app->request;
  517. if ($request->isAjax) {
  518. $get = Yii::$app->request->get();
  519. $res = Yii::$app->services->validate->validate($get, [[['id'], 'integer']]);
  520. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  521. $detail = isset($get['id']) ? Goods::getOne([['id' => $get['id'], 'mall_id' => $this->mall_id], 'status' => StatusEnum::ENABLED], true, ['cats', 'attr', 'extra']) : [];
  522. $detail['attr_groups'] = json_decode($detail['attr_groups'], true) ?? [];
  523. $detail['attr_groups_format'] = json_decode($detail['attr_groups_format'], true) ?? [];
  524. $detail['attr'] = GoodsAttr::formatFormAttr($detail['attr'] ?? [], $detail['attr_groups_format']);
  525. return $this->success('操作成功', compact('detail'));
  526. }
  527. return $this->render($this->action->id);
  528. }
  529. /**
  530. * @desc:获取预售分类列表,添加活动使用,不用验证权限
  531. * @Author: hua
  532. * @Date: 2021/12/13
  533. * @Time: 18:51
  534. * @Copyright: copyright (c) 2021 广东七件事集团
  535. * @return mixed|string|void
  536. */
  537. public function actionCateList()
  538. {
  539. $request = Yii::$app->request;
  540. if ($request->isAjax) {
  541. $list = DepositPresaleCate::lists(['where' => [['mall_id' => $this->mall_id], ['status' => StatusEnum::ENABLED]], 'order' => 'id asc', 'select' => 'id,name']);
  542. return $this->success('操作成功', compact('list'));
  543. }
  544. }
  545. /**
  546. * @desc:预售商品列表
  547. * @Author: hua
  548. * @Date: 2021/12/14
  549. * @Time: 15:52
  550. * @Copyright: copyright (c) 2021 广东七件事集团
  551. * @return mixed|void
  552. */
  553. public function actionCheckActiveList()
  554. {
  555. $get = \Yii::$app->request->get();
  556. $where[] = ['mall_id' => $this->mall_id];
  557. $where[] = ['status' => StatusEnum::ENABLED];
  558. if (isset($get['active_id'])) $where[] = ['id' => json_decode($get['active_id'], true)];
  559. $list = DepositPresaleActive::getActiveList($where, false);
  560. return $this->success('操作成功', $list);
  561. }
  562. protected function validateActivityData($params){
  563. $result = ['msg' => ''];
  564. $presale_goods_info = $params['deposit_presale_goods'];
  565. try{
  566. if(empty($presale_goods_info['presale_name'])){
  567. throw new \Exception('预售名称不能为空');
  568. }
  569. if(empty($presale_goods_info['cate_id'])){
  570. throw new \Exception('预售分类不能为空');
  571. }
  572. if(empty($presale_goods_info['activity_start_at']) || empty($presale_goods_info['activity_end_at'])){
  573. throw new \Exception('活动时间不能为空');
  574. }
  575. if(empty($presale_goods_info['deposit_start_at']) || empty($presale_goods_info['deposit_end_at'])){
  576. throw new \Exception('支付定金时间不能为空');
  577. }
  578. if(empty($presale_goods_info['final_payment_start_at']) || empty($presale_goods_info['final_payment_end_at'])){
  579. throw new \Exception('支付尾款时间不能为空');
  580. }
  581. if ($presale_goods_info['is_attr'] == 0) {
  582. if($presale_goods_info['presale_price'] < $presale_goods_info['deposit_price']){
  583. throw new \Exception('预售价不能小于定金');
  584. }
  585. if($presale_goods_info['goods_stock'] <= 0){
  586. throw new \Exception('预售库存不能小于0');
  587. }
  588. }else{
  589. $select_attr_groups = $params['form']['select_attr_groups'];
  590. foreach($select_attr_groups as $item){
  591. if($item['deposit_presale_price'] < $item['deposit_price']){
  592. throw new \Exception('预售价不能小于定金');
  593. }
  594. if($item['deposit_stock'] <= 0){
  595. throw new \Exception('预售库存不能小于0');
  596. }
  597. }
  598. }
  599. }catch(\Exception $e){
  600. $result['msg'] = $e->getMessage();
  601. }
  602. return $result;
  603. }
  604. }