DefaultController.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387
  1. <?php
  2. namespace addons\ElectronCoupon\backend\controllers;
  3. use addons\ElectronCoupon\common\enums\ElectronCouponEnums;
  4. use addons\ElectronCoupon\common\models\ElectronCoupon;
  5. use addons\ElectronCoupon\common\models\ElectronCouponGoods;
  6. use addons\ElectronCoupon\common\models\ElectronCouponUserCoupon;
  7. use common\enums\StatusEnum;
  8. use common\models\user\User;
  9. use common\models\user\UserLevel;
  10. use Yii;
  11. use common\controllers\AddonsController;
  12. /**
  13. * 默认控制器
  14. *
  15. * Class DefaultController
  16. * @package addons\ElectronCoupon\backend\controllers
  17. */
  18. class DefaultController extends BaseController
  19. {
  20. public $enableCsrfValidation = false;
  21. /**
  22. * 电子券管理
  23. *
  24. * @return string
  25. */
  26. public function actionIndex()
  27. {
  28. if (Yii::$app->request->isAjax && Yii::$app->request->isPost) {
  29. $params = Yii::$app->request->post();
  30. $res = Yii::$app->services->validate->validate($params, [
  31. [['page', 'receive_status', 'usage_status'], 'integer'],
  32. [['name'], 'string'],
  33. ]);
  34. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  35. $where = [
  36. ['=', 'mall_id', $this->mall_id],
  37. ['>=', 'status', StatusEnum::DISABLED],
  38. ];
  39. // 电子券名称
  40. if (isset($params['name']) && $params['name'] != '' && $params['name'] != null) {
  41. $where[] = ['like', 'name', "%{$params['name']}%", false];
  42. }
  43. $now_time = time();
  44. // 领取状态
  45. if (isset($params['receive_status']) && $params['receive_status'] != '' && $params['receive_status'] != null) {
  46. if ($params['receive_status'] == 0) { // 未开始
  47. $where[] = ['>=', 'receive_begin_time', $now_time];
  48. } else if ($params['receive_status'] == 1) { // 领取中
  49. $where[] = ['<=', 'receive_begin_time', $now_time];
  50. $where[] = ['>=', 'receive_end_time', $now_time];
  51. } else if ($params['receive_status'] == 2) { // 已结束
  52. $where[] = ['<=', 'receive_end_time', $now_time];
  53. }
  54. }
  55. // 使用状态
  56. if (isset($params['usage_status']) && $params['usage_status'] != '' && $params['usage_status'] != null) {
  57. if ($params['usage_status'] == 0) { // 未开始
  58. $where[] = ['>=', 'use_begin_time', $now_time];
  59. } else if ($params['usage_status'] == 1) { // 使用中
  60. $where[] = ['<=', 'use_begin_time', $now_time];
  61. $where[] = ['>=', 'use_end_time', $now_time];
  62. } else if ($params['usage_status'] == 2) { // 已过期
  63. $where[] = ['<=', 'use_end_time', $now_time];
  64. }
  65. }
  66. $condition = ['where' => $where, 'order' => 'sort desc,id desc'];
  67. $page_data = ElectronCoupon::listPage($condition, false, true);
  68. $page_data['list'] = is_array($page_data['list']) ? $page_data['list'] : [];
  69. // 列表中的等级
  70. $level_array = array_unique(array_filter(array_column($page_data['list'], 'receive_member_level')));
  71. $user_levels = UserLevel::find()
  72. ->select('level,name')
  73. ->where(['>', 'status', StatusEnum::DISABLED])
  74. ->where(['in', 'level', $level_array]) // 如果把这个条件移到最后,mall_id 就不灵了 。。。。。。
  75. ->where(['=', 'mall_id', $this->mall_id])
  76. ->asArray()
  77. ->all();
  78. $level_name_data = array_column($user_levels, 'name', 'level');
  79. foreach ($page_data['list'] as $index => $item) {
  80. $item['user_level_name'] = $level_name_data[$item['receive_member_level']] ?? '';
  81. // 剩余数量 = 发行数量 - 领取数量
  82. $item['remain_num'] = (int)$item['amount'] - (int)$item['receive_amount'];
  83. // 领取状态
  84. if ($item['receive_begin_time'] > $now_time) {
  85. $item['receive_status'] = 0;
  86. $item['receive_status_name'] = '未开始';
  87. } else if ($item['receive_begin_time'] <= $now_time && $item['receive_end_time'] >= $now_time) {
  88. $item['receive_status'] = 1;
  89. $item['receive_status_name'] = '领取中';
  90. } else if ($item['receive_end_time'] <= $now_time) {
  91. $item['receive_status'] = 2;
  92. $item['receive_status_name'] = '已结束';
  93. }
  94. // 使用状态
  95. if ($item['use_begin_time'] > $now_time) {
  96. $item['usage_status'] = 0;
  97. $item['usage_status_name'] = '未开始';
  98. } else if ($item['use_begin_time'] <= $now_time && $item['use_end_time'] >= $now_time) {
  99. $item['usage_status'] = 1;
  100. $item['usage_status_name'] = '使用中';
  101. } else if ($item['use_end_time'] <= $now_time) {
  102. $item['usage_status'] = 2;
  103. $item['usage_status_name'] = '已过期';
  104. }
  105. $page_data['list'][$index] = $item;
  106. }
  107. $this->success('获取成功', compact('page_data'));
  108. } else {
  109. return $this->render('index');
  110. }
  111. }
  112. /**
  113. * 电子券管理-表格操作
  114. */
  115. public function actionHandle()
  116. {
  117. if (Yii::$app->request->isAjax && Yii::$app->request->isPost) {
  118. $params = Yii::$app->request->post();
  119. $res = Yii::$app->services->validate->validate($params, [
  120. [['id', 'status', 'is_show_in_center'], 'integer'],
  121. ]);
  122. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  123. $params['mall_id'] = $this->mall_id;
  124. if (isset($params['status'])) {
  125. $res = ElectronCoupon::changeStatus($this->mall_id, $params['id'], $params['status']);
  126. if ($res == false) return $this->error("修改失败: " . ElectronCoupon::getStaticError());
  127. return $this->success("修改成功");
  128. }
  129. if (isset($params['is_show_in_center'])) {
  130. $res = ElectronCoupon::changeIsShowInCenter($this->mall_id, $params['id'], $params['is_show_in_center']);
  131. if ($res == false) return $this->error("修改失败: " . ElectronCoupon::getStaticError());
  132. return $this->success("修改成功");
  133. }
  134. return $this->error('请求参数错误');
  135. }
  136. }
  137. /**
  138. * 选择优惠券
  139. * @Author: ltm
  140. * @DateTime: 2022/6/27 0017 10:16
  141. * @Copyright: copyright (c) 2021 广东七件事集团
  142. * @return mixed|string|void
  143. */
  144. public function actionSelectCoupon()
  145. {
  146. if (Yii::$app->request->isAjax && Yii::$app->request->isPost) {
  147. $params = Yii::$app->request->post();
  148. $params['where'][] = ['mall_id' => $this->mall_id];
  149. $params['where'][] = ['status' => [StatusEnum::ENABLED]];
  150. $params['where'][] = ['>', 'amount', 'receive_amount'];
  151. $params['where'][] = ['>', 'use_end_time', time()];
  152. if (!empty($params['keyword'])) $params['where'][] = ['like', 'name', '%' . trim($params['keyword']) . '%', false];
  153. unset($params['keyword']);
  154. $params['order'] = 'sort desc,id desc';
  155. $params['select'] = 'id,name,amount,price,receive_amount,receive_begin_time,receive_end_time,use_begin_time,use_end_time,status';
  156. $list = ElectronCoupon::listPage($params);
  157. $list['list'] = $list['list'] ?? [];
  158. //判断是否过期
  159. foreach ($list['list'] as $k => $v) {
  160. $v['use_end_time'] < time() ? $list['list'][$k]['is_failure'] = 1 : $list['list'][$k]['is_failure'] = 0;
  161. }
  162. return $this->success('操作成功', $list);
  163. }
  164. }
  165. /**
  166. * 编辑电子券
  167. */
  168. public function actionEdit()
  169. {
  170. if (Yii::$app->request->isAjax && Yii::$app->request->isPost) {
  171. $params = Yii::$app->request->post();
  172. $electronCoupon = new ElectronCoupon();
  173. $rules = $electronCoupon->rules();
  174. unset($params['receive_amount'], $params['used_amount']);
  175. $res = Yii::$app->services->validate->validate($params, $rules);
  176. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  177. $params['mall_id'] = $this->mall_id;
  178. if (empty($params['share_expiry'])) $params['share_expiry'] = 0;
  179. if (empty($params['give_store_price'])) $params['give_store_price'] = 0;
  180. $res = ElectronCoupon::setData($params);
  181. if ($res == false) return $this->error("保存失败: " . ElectronCoupon::getStaticError());
  182. return $this->success("保存成功");
  183. } else {
  184. return $this->render('edit');
  185. }
  186. }
  187. /**
  188. * 电子券详情
  189. * @return mixed|void
  190. */
  191. public function actionInfo()
  192. {
  193. if (Yii::$app->request->isAjax && Yii::$app->request->isGet) {
  194. $params = Yii::$app->request->get();
  195. $res = Yii::$app->services->validate->validate($params, [
  196. [['inc_id'], 'integer']
  197. ]);
  198. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  199. $info = ElectronCoupon::getOne([
  200. ['=', 'id', $params['inc_id']],
  201. ['=', 'mall_id', $this->mall_id]
  202. ], true);
  203. return $this->success("保存成功", compact('info'));
  204. }
  205. }
  206. /**
  207. * 会员等级
  208. * @return mixed|void
  209. */
  210. public function actionUserLevel()
  211. {
  212. if (Yii::$app->request->isAjax && Yii::$app->request->isGet) {
  213. $user_level = UserLevel::find()
  214. ->select('level,name')
  215. ->where(['mall_id' => $this->mall_id])
  216. ->andWhere(['>=', 'status', StatusEnum::DISABLED])
  217. ->asArray()
  218. ->all();
  219. return $this->success("保存成功", compact('user_level'));
  220. }
  221. }
  222. /**
  223. * 获取商品独立设置的优惠券设置
  224. * @Author: ltm
  225. * @DateTime: 2022/6/28 15:53
  226. * @Copyright: copyright (c) 2021 xuan-e
  227. * @return mixed|void
  228. */
  229. public function actionGetElectronCoupon()
  230. {
  231. $params = Yii::$app->request->post();
  232. $data = [];
  233. $where[] = ['=', 'mall_id', $this->mall_id];
  234. $where[] = ['=', 'status', StatusEnum::ENABLED];
  235. $where[] = ['=', 'goods_id', $params['goods_id']];
  236. // 获取配置
  237. $result = ElectronCouponGoods::lists(['where' => $where, 'with' => 'coupon', 'order' => 'id desc'], true);
  238. //var_dump($result);
  239. if (empty($result)) return $this->success('操作成功', $data);
  240. // 重新组合数组
  241. $electron_selection = [];
  242. foreach ($result as $item) {
  243. $data['is_open'] = $item['is_open'];
  244. $data['send_type'] = $item['send_type'];
  245. $coupon['coupon_id'] = $item['e_coupon_id'];
  246. $coupon['num'] = $item['num'];
  247. $coupon['name'] = $item['coupon']['name'];
  248. $coupon['price'] = $item['coupon']['price'];
  249. $coupon['amount'] = $item['coupon']['amount'];
  250. $coupon['receive_amount'] = $item['coupon']['receive_amount'];
  251. $coupon['status'] = $item['coupon']['status'];
  252. $electron_selection[] = $coupon;
  253. }
  254. $data['electron_selection'] = $electron_selection;
  255. return $this->success('操作成功', $data);
  256. }
  257. //状态开关
  258. public function actionHandleStatus()
  259. {
  260. if (Yii::$app->request->isAjax && Yii::$app->request->isPost) {
  261. $params = Yii::$app->request->post();
  262. $res = Yii::$app->services->validate->validate($params, [
  263. [['id', 'status'], 'integer'],
  264. ]);
  265. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  266. $condition = ['id' => $params['id'], 'mall_id' => $this->mall_id];
  267. $field = ['status' => $params['status']];
  268. $res = ElectronCoupon::updateAll($field, $condition);
  269. if ($res == false) return $this->error("修改失败: " . ElectronCoupon::getStaticError());
  270. return $this->success("修改成功");
  271. }
  272. }
  273. //赠送
  274. public function actionGiveCoupon()
  275. {
  276. if (Yii::$app->request->isAjax && Yii::$app->request->isPost) {
  277. $params = Yii::$app->request->post();
  278. $res = Yii::$app->services->validate->validate($params, [
  279. [['e_coupon_id', 'user_id', 'number'], 'required'],
  280. ]);
  281. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  282. $params['mall_id'] = $this->mall_id;
  283. $params['get_type'] = ElectronCouponEnums::COUPON_GET_TYPE_SYSTEM;
  284. $params['receive_times'] = $params['number'];
  285. $result = ElectronCouponUserCoupon::userReceiveCoupon($params);
  286. if ($result === false) return $this->error(ElectronCouponUserCoupon::getStaticError());
  287. return $this->success("赠送成功");
  288. }
  289. }
  290. //搜索用户
  291. public function actionSearchUser()
  292. {
  293. if (\Yii::$app->request->isAjax) {
  294. if (!\Yii::$app->request->isGet) return $this->error('请求方式错误');
  295. $keyword = \Yii::$app->request->get('keyword');
  296. $params = [];
  297. $where[] = ['mall_id' => $this->mall_id];
  298. $where[] = ['status' => StatusEnum::ENABLED];
  299. if (!empty($keyword)) $where[] = ['or', ['like', 'nickname', $keyword], ['like', 'mobile', $keyword], ['like', 'id', $keyword]];
  300. $params['where'] = $where;
  301. $params['select'] = 'id,nickname,mobile,username,avatar_url';
  302. $params['limit'] = 20;
  303. $list = User::lists($params);
  304. if (!empty($list)) {
  305. foreach ($list as &$item) {
  306. if (empty($item['nickname'])) $item['nickname'] = $item['mobile'] . "(id:{$item['id']})";
  307. }
  308. }
  309. return $this->success('操作成功', ['list' => $list]);
  310. }
  311. }
  312. }