DefaultController.php 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. <?php
  2. namespace addons\ValetOrder\backend\controllers;
  3. use addons\ValetOrder\common\logic\order\OrderMarketingLogic;
  4. use addons\ValetOrder\common\service\OrderService;
  5. use common\enums\AppEnum;
  6. use common\enums\PayTypeEnum;
  7. use common\enums\StatusEnum;
  8. use addons\ValetOrder\common\logic\order\OrderFormLogic;
  9. use addons\ValetOrder\common\logic\order\OrderInitDataLogic;
  10. use backend\modules\mall\services\OrderService as MallOrderService;
  11. use common\models\common\Region;
  12. use common\models\goods\Goods;
  13. use common\models\goods\GoodsAttr;
  14. use common\models\order\Order;
  15. use common\models\user\User;
  16. use common\models\user\UserLevel;
  17. use Yii;
  18. /**
  19. * 默认控制器
  20. *
  21. * Class DefaultController
  22. * @package addons\ValetOrder\backend\controllers
  23. */
  24. class DefaultController extends BaseController
  25. {
  26. public $enableCsrfValidation = false;
  27. /**
  28. * 首页
  29. *
  30. * @return string
  31. */
  32. public function actionIndex()
  33. {
  34. if (Yii::$app->request->isAjax && Yii::$app->request->isGet) {
  35. $params = Yii::$app->request->get();
  36. $valid = Yii::$app->services->validate->validate($params, [
  37. [['page', 'limit'], 'integer'],
  38. [['user', 'user_id', 'buy_user', 'buy_user_id', 'goods_name', 'start_date', 'end_date'], 'string'],
  39. ]);
  40. if ($valid === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  41. $ret = (new OrderService())->page($this->mall_id, $params);
  42. return is_string($ret) ? $this->error($ret) : $this->success('获取成功',$ret);
  43. }
  44. return $this->render('index');
  45. }
  46. public function actionCreate()
  47. {
  48. if (\Yii::$app->request->isAjax && \Yii::$app->request->isPost) {
  49. $params = Yii::$app->request->post();
  50. $valid = Yii::$app->services->validate->validate($params, [
  51. [['province_id', 'city_id', 'district_id', 'num', 'attr_id'], 'integer'],
  52. [['province', 'city', 'district', 'address', 'name', 'phone', 'parent_mobile', 'mobile', 'buy_user_id'], 'string'],
  53. [['province_id', 'city_id', 'district_id', 'num', 'attr_id'], 'required'],
  54. [['province', 'city', 'district', 'address', 'name', 'phone', 'mobile'], 'required'],
  55. ['mobile', 'match', 'pattern' => '/^1\d{10}$/', 'message' => '请输入正确的手机号码'],
  56. ['phone', 'match', 'pattern' => '/^1\d{10}$/', 'message' => '请输入正确的手机号码'],
  57. ]);
  58. if ($valid === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  59. // 执行创建订单
  60. $orderFormLogic = new OrderFormLogic();
  61. $form = $orderFormLogic->getDefaultform($this->mall_id, intval($params['buy_user_id']));
  62. $form->attributes = [
  63. 'data' => [
  64. 'attr_id' => $params['attr_id'],
  65. 'num' => $params['num'],
  66. 'address_id'=> 0,
  67. 'extra_info'=> [
  68. 'valet_order' => [
  69. 'mobile' => $params['mobile'],
  70. 'parent' => $params['parent_mobile'] ?? '',
  71. 'backend' => StatusEnum::ENABLED,
  72. ]
  73. ]
  74. ],
  75. 'type' => 'buy_now',
  76. 'name' => $params['name'],
  77. 'mobile' => $params['phone'],
  78. 'province' => $params['province'],
  79. 'city' => $params['city'],
  80. 'district' => $params['district'],
  81. 'province_id' => $params['province_id'],
  82. 'city_id' => $params['city_id'],
  83. 'district_id' => $params['district_id'],
  84. 'address' => $params['address'],
  85. ];
  86. $form['action'] = AppEnum::ACTION_CREATE;
  87. // 初始化订单数据
  88. $orderInitDataLogic = new OrderInitDataLogic();
  89. $form = $orderInitDataLogic->execute($form, $form->type);
  90. if ($form === false) return $this->error($orderInitDataLogic->getError());
  91. $orderMarketingLogic = new OrderMarketingLogic();
  92. $form = $orderMarketingLogic->run($form, true);
  93. if ($form === false) return $this->error($orderMarketingLogic->getError());
  94. $res = Order::createOrder($form);
  95. if ($res === false) return $this->error(Order::getStaticError());
  96. // 处理成功则需要支付
  97. if (!empty($res['transaction']['trade_no'])) {
  98. // 执行支付
  99. $params['mall_id'] = $this->mall_id;
  100. $params['mch_id'] = $this->admin->mch_id;
  101. $params['operator_id'] = $this->admin->id;
  102. $params['operator_name'] = $this->admin->account;
  103. $params['id'] = $res['transaction']['order_ids'];
  104. $service = new MallOrderService(['mall_id' => $this->mall_id]);
  105. $res = $service->adminPay($params);
  106. if ($res === false) return $this->error(Goods::getStaticError());
  107. return $this->success();
  108. }
  109. return $this->error("下单失败");
  110. }
  111. return $this->render('create');
  112. }
  113. public function actionRegion()
  114. {
  115. $id = intval(\Yii::$app->request->get('region_id', 0));
  116. $ret = Region::lists([
  117. 'where' => [
  118. ['parent_id' => $id]
  119. ]
  120. ]);
  121. return $this->success('获取成功', $ret);
  122. }
  123. /**
  124. * @name:
  125. * @msg: 获取会员列表
  126. * @param {*}
  127. * @return {*}
  128. */
  129. public function actionUsers()
  130. {
  131. if (!\Yii::$app->request->isGet) {
  132. return $this->error('请求方式错误');
  133. }
  134. $user_id = \Yii::$app->request->get('user_id');
  135. $keyword = \Yii::$app->request->get('keyword');
  136. $page = \Yii::$app->request->get('page', 1);
  137. $limit = \Yii::$app->request->get('limit', $this->pageSize);
  138. $wheres[] = ['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED];
  139. if (!empty($user_id)) {
  140. $wheres[] = ['id' => $user_id];
  141. }
  142. if (!empty($keyword)) {
  143. $wheres[] = ['or', ['like', 'nickname', $keyword], ['like', 'mobile', $keyword]];
  144. }
  145. $params = [
  146. 'select' => 'id,nickname,avatar_url,mobile,level,parent_id',
  147. 'where' => $wheres,
  148. 'order' => 'created_at desc',
  149. 'page' => $page,
  150. 'limit' => $limit,
  151. ];
  152. $user_list = User::listPage($params);
  153. if (empty($user_list['list'])) {
  154. if (false === $user_list['list']) {
  155. return $this->error(User::getStaticError());
  156. }
  157. } else {
  158. $levels = UserLevel::find()
  159. ->select('id,level,name')
  160. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED])
  161. ->asArray()
  162. ->indexBy('level')
  163. ->all();
  164. $parent_ids = array_column($user_list['list'], 'parent_id');
  165. $parent_users = User::find()
  166. ->select('id,nickname,avatar_url,mobile,level,parent_id')
  167. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'id' => $parent_ids])
  168. ->asArray()
  169. ->indexBy('id')
  170. ->all();
  171. foreach ($user_list['list'] as &$user) {
  172. if (empty($user['avatar_url'])) {
  173. $user['avatar_url'] = \Yii::$app->request->hostInfo . '/resources/img/common/default-avatar.png';
  174. }
  175. $level = $levels[$user['level']] ?? [];
  176. $parent_user = $parent_users[$user['parent_id']] ?? [];
  177. $user['level_name'] = $level['name'] ?? '';
  178. $user['parent_nickname'] = $parent_user['nickname'] ?? '';
  179. }
  180. }
  181. return $this->success('success', $user_list);
  182. }
  183. public function actionGoodsAttr()
  184. {
  185. $ret = GoodsAttr::lists([
  186. 'where' => [
  187. ['goods_id' => \Yii::$app->request->get('goods_id')],
  188. ['status' => StatusEnum::ENABLED]
  189. ]
  190. ]);
  191. return $this->success('获取成功', $ret);
  192. }
  193. }