ReserveOrderController.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363
  1. <?php
  2. namespace addons\Store\client\controllers;
  3. use addons\ReservationService\common\enums\ReservationServiceEnum;
  4. use addons\ReservationService\common\models\ReservationServiceOrder;
  5. use addons\ReservationService\common\services\BackendService;
  6. use addons\Store\common\enums\ReserveServiceEnum;
  7. use addons\Store\common\services\ReserveOrderService;
  8. use addons\Store\common\services\StaffService;
  9. use common\enums\StatusEnum;
  10. use common\models\base\User;
  11. use common\models\order\Order;
  12. use common\models\order\OrderDetail;
  13. use Yii;
  14. class ReserveOrderController extends BaseController
  15. {
  16. public function actionIndex()
  17. {
  18. try {
  19. if (\Yii::$app->request->isAjax && \Yii::$app->request->isGet) {
  20. $data = \Yii::$app->request->get();
  21. $rules = [
  22. [['keyword','order_no', 'date_c_start', 'date_c_end', 'date_start', 'date_end'], 'string'],
  23. [['status', 'page', 'limit', 'service_status','server_status','service_type','create_type','time_type'], 'integer'],
  24. ];
  25. $res = \Yii::$app->services->validate->validate($data, $rules);
  26. if (!$res) return $this->error(\Yii::$app->services->validate->getErrorMessage());
  27. $data['from'] = 'store';
  28. $data['from_type'] = 'store_reserve_order';
  29. $ret = (new ReserveOrderService(['store_id' => $this->store_id, 'mall_id' => $this->mall_id]))->page($data);
  30. if (is_array($ret)) $ret['service_status_map'] = ReservationServiceEnum::SERVER_STATUS_MAP;
  31. $ret['custom_text'] = BackendService::getCustomText($this->mall_id);
  32. foreach ($ret['list'] as &$item) {
  33. $item['remark'] = BackendService::replaceTextToCustomText($item['remark'], $ret['custom_text']);
  34. }
  35. return is_string($ret) ? $this->error($ret) : $this->success('获取成功', $ret);
  36. }
  37. return $this->render('index');
  38. }catch (\Exception $e){
  39. return $this->error($e->getMessage());
  40. }
  41. }
  42. public function actionUnderwriter()
  43. {
  44. $data = \Yii::$app->request->post();
  45. $rules = [
  46. [['id'], 'integer'],
  47. ];
  48. $res = \Yii::$app->services->validate->validate($data, $rules);
  49. if (!$res) return $this->error(\Yii::$app->services->validate->getErrorMessage());
  50. $ret = (new ReserveOrderService(['store_id' => $this->store_id, 'mall_id' => $this->mall_id]))->underwriter($data['id']);
  51. return is_string($ret) ? $this->error($ret) : $this->success('获取成功', $ret);
  52. }
  53. public function actionEdit()
  54. {
  55. try {
  56. if (\Yii::$app->request->isAjax) {
  57. if(\Yii::$app->request->isGet){
  58. $params = \Yii::$app->request->get();
  59. $params['store'] = $this->store;
  60. $ret = (new ReserveOrderService(['store_id' => $this->store_id, 'mall_id' => $this->mall_id]))->getEditData($params);
  61. $ret['store_name'] = $this->store['store_name']??'';
  62. return $this->success('获取成功', $ret);
  63. }elseif(\Yii::$app->request->isPost){
  64. $params = \Yii::$app->request->post();
  65. $params = $params['form'];
  66. $params['store'] = $this->store;
  67. if (empty($params['id'])) {
  68. if (!isset($params['service_type'])) {
  69. $params['service_type'] = ReserveServiceEnum::TO_STORE;
  70. }
  71. if (!isset($params['reservation_model'])) {
  72. $params['reservation_model'] = 2;
  73. }
  74. if (!isset($params['create_type'])) {
  75. $params['create_type'] = ReservationServiceEnum::SYSTEM_CREATION;
  76. }
  77. }
  78. $ret = (new ReserveOrderService(['store_id' => $this->store_id, 'mall_id' => $this->mall_id, 'store' => $this->store]))->setEditData($params);
  79. return $this->success('获取成功', $ret);
  80. }
  81. }
  82. return $this->render('edit');
  83. }catch (\Exception $e){
  84. return $this->error($e->getMessage());
  85. }
  86. }
  87. public function actionGetStaffUserList()
  88. {
  89. if (\Yii::$app->request->isAjax) {
  90. if(\Yii::$app->request->isGet){
  91. $params = \Yii::$app->request->get();
  92. $ret = (new ReserveOrderService(['store_id' => $this->store_id, 'mall_id' => $this->mall_id]))->getStaffUserList($params);
  93. return $this->success('获取成功', $ret);
  94. }
  95. }
  96. }
  97. public function actionGetReserveTime()
  98. {
  99. if (\Yii::$app->request->isAjax) {
  100. if(\Yii::$app->request->isGet){
  101. $params = \Yii::$app->request->get();
  102. $params['store'] = $this->store;
  103. $ret = (new ReserveOrderService(['store_id' => $this->store_id, 'mall_id' => $this->mall_id]))->getReserveTime($params);
  104. return $this->success('获取成功', $ret);
  105. }
  106. }
  107. }
  108. public function actionGetReserveTimes()
  109. {
  110. if (\Yii::$app->request->isAjax) {
  111. if (\Yii::$app->request->isGet) {
  112. $params = \Yii::$app->request->get();
  113. $params['store'] = $this->store;
  114. $ret = (new ReserveOrderService(['store_id' => $this->store_id, 'mall_id' => $this->mall_id]))->getReserveTimes($params);
  115. return $this->success('获取成功', $ret);
  116. }
  117. }
  118. }
  119. //http://admin.qimall.test/index.php?r=store%2Fclient%2Freserve-order%2Fget-reserve-times&sku_id=170&staff_user_id=0&date=2024-11-09T16:00:00.000Z
  120. //http://admin.qimall.test/index.php?r=store%2Fclient%2Freserve-order%2Fget-reserve-times&sku_id=&staff_user_id=553295&date=2024-11-10T16:00:00.000Z
  121. public function actionGetReserveDay()
  122. {
  123. if (\Yii::$app->request->isAjax) {
  124. if (\Yii::$app->request->isGet) {
  125. $params = \Yii::$app->request->get();
  126. $params['store'] = $this->store;
  127. $ret = (new ReserveOrderService(['store_id' => $this->store_id, 'mall_id' => $this->mall_id]))->getReserveDay($params);
  128. return $this->success('获取成功', $ret);
  129. }
  130. }
  131. }
  132. public function actionGetStaffUserWorkTime()
  133. {
  134. if (\Yii::$app->request->isAjax) {
  135. if(\Yii::$app->request->isGet){
  136. $params = \Yii::$app->request->get();
  137. $ret = (new ReserveOrderService(['store_id' => $this->store_id, 'mall_id' => $this->mall_id]))->getStaffUserWorkTime($params);
  138. return $this->success('获取成功', $ret);
  139. }
  140. }
  141. }
  142. public function actionConfirmToStore()
  143. {
  144. try {
  145. if (\Yii::$app->request->isAjax) {
  146. if(\Yii::$app->request->isPost){
  147. $params = \Yii::$app->request->post();
  148. $params['mall_id'] = $this->mall_id;
  149. // 以为需求更改。点击确认到店-状态变成已核销
  150. $ret = (new ReserveOrderService(['store_id' => $this->store_id, 'mall_id' => $this->mall_id]))->storeVerification($params);
  151. if (!$ret) return $this->error('核销失败');
  152. return $this->success('获取成功', $ret);
  153. }
  154. }
  155. }catch (\Exception $e){
  156. return $this->error($e->getMessage());
  157. }
  158. }
  159. public function actionCancel()
  160. {
  161. try {
  162. if (\Yii::$app->request->isAjax) {
  163. if(\Yii::$app->request->isPost){
  164. $params = \Yii::$app->request->post();
  165. $ret = (new ReserveOrderService(['store_id' => $this->store_id, 'mall_id' => $this->mall_id]))->cancel($params);
  166. return $this->success('获取成功', $ret);
  167. }
  168. }
  169. }catch (\Exception $e){
  170. return $this->error($e->getMessage() . $e->getFile() . $e->getLine());
  171. }
  172. }
  173. public function actionCheckAccept()
  174. {
  175. try {
  176. if (\Yii::$app->request->isAjax) {
  177. if(\Yii::$app->request->isPost){
  178. $params = \Yii::$app->request->post();
  179. $params['store'] = $this->store;
  180. $ret = (new ReserveOrderService(['store_id' => $this->store_id, 'mall_id' => $this->mall_id]))->checkAccept($params);
  181. return $this->success('验收成功', $ret);
  182. }
  183. }
  184. }catch (\Exception $e){
  185. return $this->error($e->getMessage());
  186. }
  187. }
  188. public function actionGetSkuList()
  189. {
  190. if (\Yii::$app->request->isAjax && \Yii::$app->request->isGet) {
  191. $data = (new ReserveOrderService(['mall_id' => $this->mall_id, 'store_id' => $this->store_id]))->getSkuList();
  192. $this->success('获取成功', $data);
  193. return $this->success('获取成功', []);
  194. }
  195. return $this->render($this->action->id);
  196. }
  197. public function actionGetUser()
  198. {
  199. if (\Yii::$app->request->isAjax) {
  200. if (\Yii::$app->request->isGet) {
  201. $params = \Yii::$app->request->get();
  202. $ret = (new ReserveOrderService(['store_id' => $this->store_id, 'mall_id' => $this->mall_id]))->getUser($params);
  203. return $this->success('获取成功', $ret);
  204. }
  205. }
  206. }
  207. public function actionOrderList()
  208. {
  209. $retuest = \Yii::$app->request;
  210. if ($retuest->isAjax) {
  211. if ($retuest->isGet) {
  212. $params = \Yii::$app->request->get();
  213. $_params = [];
  214. if (!empty($params['date_start'])) {
  215. $_params['date_start'] = $params['date_start'];
  216. unset($params['date_start']);
  217. }
  218. if (!empty($params['date_end'])) {
  219. $_params['date_end'] = $params['date_end'];
  220. unset($params['date_end']);
  221. }
  222. $params['check_status'] = StatusEnum::ENABLED;
  223. $list = (new StaffService(['store_id' => $this->store_id, 'mall_id' => $this->mall_id]))->page($params);
  224. $list['custom_text'] = BackendService::getCustomText($this->mall_id);
  225. if (!$list) {
  226. return $this->error(BackendService::getStaticError());
  227. } else {
  228. if (!empty($list['list'])) {
  229. foreach ($list['list'] as &$item) {
  230. $_where = [
  231. 'and',
  232. ['mall_id' => $this->mall_id],
  233. ['staff_user_id' => $item['user_id']],
  234. ['status' => StatusEnum::ENABLED],
  235. ['store_id' => $this->store_id],
  236. ['is_refund' => 0],
  237. ['service_status' => [ReservationServiceEnum::RESERVE_ORDER_STATUS_NORMAL, ReservationServiceEnum::RESERVE_ORDER_STATUS_TALKING,
  238. ReservationServiceEnum::RESERVE_ORDER_STATUS_SERVING, ReservationServiceEnum::RESERVE_ORDER_STATUS_UNDERWRITER, ReservationServiceEnum::RESERVE_ORDER_STATUS_FINISH]]
  239. ];
  240. if (!empty($_params)) {
  241. if (!empty($_params['date_start'])) {
  242. $_where[] = ['>=', 'created_at', strtotime($_params['date_start'])];
  243. }
  244. if (!empty($_params['date_end'])) {
  245. $_where[] = ['<=', 'created_at', strtotime($_params['date_end'])];
  246. }
  247. }
  248. $oder_ids = ReservationServiceOrder::find()->where($_where)->select('order_id')->column();
  249. $item['order_num'] = count($oder_ids);
  250. $order_amount = Order::find()->where(['id' => $oder_ids])->sum('goods_price');
  251. $item['order_amount'] = !empty($order_amount)? $order_amount : 0;
  252. $pay_amount = Order::find()->where(['id' => $oder_ids])->sum('pay_money');
  253. $item['order_pay_amount'] = !empty($pay_amount)? $pay_amount : 0;
  254. $item['date'] = date('Y-m-d');
  255. }
  256. unset($item);
  257. }
  258. $this->success('数据请求成功', $list);
  259. }
  260. }
  261. }
  262. return $this->render('order-list');
  263. }
  264. public function actionOrderDetail()
  265. {
  266. if (Yii::$app->request->isAjax && Yii::$app->request->isGet) {
  267. $params = Yii::$app->request->get();
  268. $valid = Yii::$app->services->validate->validate($params, [
  269. [['user_id', 'service_status', 'page', 'limit'], 'integer'],
  270. [['order_no'], 'string'],
  271. [['date_start', 'date_end', 'keyword'], 'string'],
  272. [['user_id'], 'required']
  273. ]);
  274. if ($valid === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  275. try {
  276. $where = [
  277. ['r.mall_id' => $this->mall_id],
  278. ['c.staff_user_id' => $params['user_id']],
  279. ['r.store_id' => $this->store_id]
  280. ];
  281. if (!empty($params['keyword'])) {
  282. $user_list = User::lists(['where' => [['mall_id' => $this->mall_id], [
  283. 'or',
  284. ['=', 'id', $params['keyword']],
  285. ['like', 'nickname', $params['keyword'] . '%', false],
  286. ['like', 'mobile', $params['keyword'] . '%', false]
  287. ]], 'select' => 'id']);
  288. $user_ids = array_column($user_list, 'id');
  289. if (!empty($user_ids)) {
  290. $where[] = ['r.user_id' => $user_ids];
  291. } else {
  292. $where[] = ['r.id' => 0];
  293. }
  294. }
  295. if (!empty($params['date_start'])) $where[] = ['>=', 'r.created_at', strtotime($params['date_start'])];
  296. if (!empty($params['date_end'])) $where[] = ['<=', 'r.created_at', strtotime($params['date_end'])];
  297. if (isset($params['service_status']) && $params['service_status'] !== '') {
  298. $where[] = ['c.service_status' => $params['service_status']];
  299. } else {
  300. $where[] = ['c.service_status' => [ReservationServiceEnum::RESERVE_ORDER_STATUS_NORMAL, ReservationServiceEnum::RESERVE_ORDER_STATUS_TALKING,
  301. ReservationServiceEnum::RESERVE_ORDER_STATUS_SERVING, ReservationServiceEnum::RESERVE_ORDER_STATUS_UNDERWRITER, ReservationServiceEnum::RESERVE_ORDER_STATUS_FINISH]];
  302. }
  303. if (!empty($params['order_no'])) {
  304. $where[] = ['like', 'c.order_no', $params['order_no']];
  305. }
  306. $ret = Order::listPage([
  307. 'where' => $where,
  308. 'select' => 'r.id, r.order_no, r.user_id, r.pay_money, r.goods_price, r.out_trade_no, r.created_at, r.order_source, r.order_status, c.service_start_at, c.service_end_at, c.service_status',
  309. 'order' => 'r.id desc',
  310. 'limit' => $params['limit'] ?? 10,
  311. 'group' => 'c.order_id',
  312. 'join' => [['right join',ReservationServiceOrder::tableName().' as c','c.order_id=r.id']],
  313. 'alias' => 'r'
  314. ]);
  315. if (!$ret) return $this->error(Order::getStaticError());
  316. if (!empty($ret['list'])) {
  317. $uids = array_column($ret['list'], 'user_id');
  318. $users = User::find()->where(['id' => $uids])->select('id,nickname,avatar_url,mobile')->indexBy('id')->asArray()->all();
  319. foreach ($ret['list'] as &$item) {
  320. $item['user'] = $users[$item['user_id']] ?? [];
  321. $item['detail'] = OrderDetail::find()->where(['order_id' => $item['id']])->select('goods_name,num,goods_price,price')->asArray()->all();
  322. }
  323. unset($item);
  324. }
  325. $ret['service_status_map'] = ReservationServiceEnum::RESERVE_ORDER_STATUS_MAP;
  326. return $this->success('获取成功', $ret);
  327. } catch (\Exception $e) {
  328. return $this->error($e->getMessage());
  329. }
  330. }
  331. return $this->render('order-detail');
  332. }
  333. }