| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363 |
- <?php
- namespace addons\Store\client\controllers;
- use addons\ReservationService\common\enums\ReservationServiceEnum;
- use addons\ReservationService\common\models\ReservationServiceOrder;
- use addons\ReservationService\common\services\BackendService;
- use addons\Store\common\enums\ReserveServiceEnum;
- use addons\Store\common\services\ReserveOrderService;
- use addons\Store\common\services\StaffService;
- use common\enums\StatusEnum;
- use common\models\base\User;
- use common\models\order\Order;
- use common\models\order\OrderDetail;
- use Yii;
- class ReserveOrderController extends BaseController
- {
- public function actionIndex()
- {
- try {
- if (\Yii::$app->request->isAjax && \Yii::$app->request->isGet) {
- $data = \Yii::$app->request->get();
- $rules = [
- [['keyword','order_no', 'date_c_start', 'date_c_end', 'date_start', 'date_end'], 'string'],
- [['status', 'page', 'limit', 'service_status','server_status','service_type','create_type','time_type'], 'integer'],
- ];
- $res = \Yii::$app->services->validate->validate($data, $rules);
- if (!$res) return $this->error(\Yii::$app->services->validate->getErrorMessage());
- $data['from'] = 'store';
- $data['from_type'] = 'store_reserve_order';
- $ret = (new ReserveOrderService(['store_id' => $this->store_id, 'mall_id' => $this->mall_id]))->page($data);
- if (is_array($ret)) $ret['service_status_map'] = ReservationServiceEnum::SERVER_STATUS_MAP;
- $ret['custom_text'] = BackendService::getCustomText($this->mall_id);
- foreach ($ret['list'] as &$item) {
- $item['remark'] = BackendService::replaceTextToCustomText($item['remark'], $ret['custom_text']);
- }
- return is_string($ret) ? $this->error($ret) : $this->success('获取成功', $ret);
- }
- return $this->render('index');
- }catch (\Exception $e){
- return $this->error($e->getMessage());
- }
- }
- public function actionUnderwriter()
- {
- $data = \Yii::$app->request->post();
- $rules = [
- [['id'], 'integer'],
- ];
- $res = \Yii::$app->services->validate->validate($data, $rules);
- if (!$res) return $this->error(\Yii::$app->services->validate->getErrorMessage());
- $ret = (new ReserveOrderService(['store_id' => $this->store_id, 'mall_id' => $this->mall_id]))->underwriter($data['id']);
- return is_string($ret) ? $this->error($ret) : $this->success('获取成功', $ret);
- }
- public function actionEdit()
- {
- try {
- if (\Yii::$app->request->isAjax) {
- if(\Yii::$app->request->isGet){
- $params = \Yii::$app->request->get();
- $params['store'] = $this->store;
- $ret = (new ReserveOrderService(['store_id' => $this->store_id, 'mall_id' => $this->mall_id]))->getEditData($params);
- $ret['store_name'] = $this->store['store_name']??'';
- return $this->success('获取成功', $ret);
- }elseif(\Yii::$app->request->isPost){
- $params = \Yii::$app->request->post();
- $params = $params['form'];
- $params['store'] = $this->store;
- if (empty($params['id'])) {
- if (!isset($params['service_type'])) {
- $params['service_type'] = ReserveServiceEnum::TO_STORE;
- }
- if (!isset($params['reservation_model'])) {
- $params['reservation_model'] = 2;
- }
- if (!isset($params['create_type'])) {
- $params['create_type'] = ReservationServiceEnum::SYSTEM_CREATION;
- }
- }
- $ret = (new ReserveOrderService(['store_id' => $this->store_id, 'mall_id' => $this->mall_id, 'store' => $this->store]))->setEditData($params);
- return $this->success('获取成功', $ret);
- }
- }
- return $this->render('edit');
- }catch (\Exception $e){
- return $this->error($e->getMessage());
- }
- }
- public function actionGetStaffUserList()
- {
- if (\Yii::$app->request->isAjax) {
- if(\Yii::$app->request->isGet){
- $params = \Yii::$app->request->get();
- $ret = (new ReserveOrderService(['store_id' => $this->store_id, 'mall_id' => $this->mall_id]))->getStaffUserList($params);
- return $this->success('获取成功', $ret);
- }
- }
- }
- public function actionGetReserveTime()
- {
- if (\Yii::$app->request->isAjax) {
- if(\Yii::$app->request->isGet){
- $params = \Yii::$app->request->get();
- $params['store'] = $this->store;
- $ret = (new ReserveOrderService(['store_id' => $this->store_id, 'mall_id' => $this->mall_id]))->getReserveTime($params);
- return $this->success('获取成功', $ret);
- }
- }
- }
- public function actionGetReserveTimes()
- {
- if (\Yii::$app->request->isAjax) {
- if (\Yii::$app->request->isGet) {
- $params = \Yii::$app->request->get();
- $params['store'] = $this->store;
- $ret = (new ReserveOrderService(['store_id' => $this->store_id, 'mall_id' => $this->mall_id]))->getReserveTimes($params);
- return $this->success('获取成功', $ret);
- }
- }
- }
- //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
- //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
- public function actionGetReserveDay()
- {
- if (\Yii::$app->request->isAjax) {
- if (\Yii::$app->request->isGet) {
- $params = \Yii::$app->request->get();
- $params['store'] = $this->store;
- $ret = (new ReserveOrderService(['store_id' => $this->store_id, 'mall_id' => $this->mall_id]))->getReserveDay($params);
- return $this->success('获取成功', $ret);
- }
- }
- }
- public function actionGetStaffUserWorkTime()
- {
- if (\Yii::$app->request->isAjax) {
- if(\Yii::$app->request->isGet){
- $params = \Yii::$app->request->get();
- $ret = (new ReserveOrderService(['store_id' => $this->store_id, 'mall_id' => $this->mall_id]))->getStaffUserWorkTime($params);
- return $this->success('获取成功', $ret);
- }
- }
- }
- public function actionConfirmToStore()
- {
- try {
- if (\Yii::$app->request->isAjax) {
- if(\Yii::$app->request->isPost){
- $params = \Yii::$app->request->post();
- $params['mall_id'] = $this->mall_id;
- // 以为需求更改。点击确认到店-状态变成已核销
- $ret = (new ReserveOrderService(['store_id' => $this->store_id, 'mall_id' => $this->mall_id]))->storeVerification($params);
- if (!$ret) return $this->error('核销失败');
- return $this->success('获取成功', $ret);
- }
- }
- }catch (\Exception $e){
- return $this->error($e->getMessage());
- }
- }
- public function actionCancel()
- {
- try {
- if (\Yii::$app->request->isAjax) {
- if(\Yii::$app->request->isPost){
- $params = \Yii::$app->request->post();
- $ret = (new ReserveOrderService(['store_id' => $this->store_id, 'mall_id' => $this->mall_id]))->cancel($params);
- return $this->success('获取成功', $ret);
- }
- }
- }catch (\Exception $e){
- return $this->error($e->getMessage() . $e->getFile() . $e->getLine());
- }
- }
- public function actionCheckAccept()
- {
- try {
- if (\Yii::$app->request->isAjax) {
- if(\Yii::$app->request->isPost){
- $params = \Yii::$app->request->post();
- $params['store'] = $this->store;
- $ret = (new ReserveOrderService(['store_id' => $this->store_id, 'mall_id' => $this->mall_id]))->checkAccept($params);
- return $this->success('验收成功', $ret);
- }
- }
- }catch (\Exception $e){
- return $this->error($e->getMessage());
- }
- }
- public function actionGetSkuList()
- {
- if (\Yii::$app->request->isAjax && \Yii::$app->request->isGet) {
- $data = (new ReserveOrderService(['mall_id' => $this->mall_id, 'store_id' => $this->store_id]))->getSkuList();
- $this->success('获取成功', $data);
- return $this->success('获取成功', []);
- }
- return $this->render($this->action->id);
- }
- public function actionGetUser()
- {
- if (\Yii::$app->request->isAjax) {
- if (\Yii::$app->request->isGet) {
- $params = \Yii::$app->request->get();
- $ret = (new ReserveOrderService(['store_id' => $this->store_id, 'mall_id' => $this->mall_id]))->getUser($params);
- return $this->success('获取成功', $ret);
- }
- }
- }
- public function actionOrderList()
- {
- $retuest = \Yii::$app->request;
- if ($retuest->isAjax) {
- if ($retuest->isGet) {
- $params = \Yii::$app->request->get();
- $_params = [];
- if (!empty($params['date_start'])) {
- $_params['date_start'] = $params['date_start'];
- unset($params['date_start']);
- }
- if (!empty($params['date_end'])) {
- $_params['date_end'] = $params['date_end'];
- unset($params['date_end']);
- }
- $params['check_status'] = StatusEnum::ENABLED;
- $list = (new StaffService(['store_id' => $this->store_id, 'mall_id' => $this->mall_id]))->page($params);
- $list['custom_text'] = BackendService::getCustomText($this->mall_id);
- if (!$list) {
- return $this->error(BackendService::getStaticError());
- } else {
- if (!empty($list['list'])) {
- foreach ($list['list'] as &$item) {
- $_where = [
- 'and',
- ['mall_id' => $this->mall_id],
- ['staff_user_id' => $item['user_id']],
- ['status' => StatusEnum::ENABLED],
- ['store_id' => $this->store_id],
- ['is_refund' => 0],
- ['service_status' => [ReservationServiceEnum::RESERVE_ORDER_STATUS_NORMAL, ReservationServiceEnum::RESERVE_ORDER_STATUS_TALKING,
- ReservationServiceEnum::RESERVE_ORDER_STATUS_SERVING, ReservationServiceEnum::RESERVE_ORDER_STATUS_UNDERWRITER, ReservationServiceEnum::RESERVE_ORDER_STATUS_FINISH]]
- ];
- if (!empty($_params)) {
- if (!empty($_params['date_start'])) {
- $_where[] = ['>=', 'created_at', strtotime($_params['date_start'])];
- }
- if (!empty($_params['date_end'])) {
- $_where[] = ['<=', 'created_at', strtotime($_params['date_end'])];
- }
- }
- $oder_ids = ReservationServiceOrder::find()->where($_where)->select('order_id')->column();
- $item['order_num'] = count($oder_ids);
- $order_amount = Order::find()->where(['id' => $oder_ids])->sum('goods_price');
- $item['order_amount'] = !empty($order_amount)? $order_amount : 0;
- $pay_amount = Order::find()->where(['id' => $oder_ids])->sum('pay_money');
- $item['order_pay_amount'] = !empty($pay_amount)? $pay_amount : 0;
- $item['date'] = date('Y-m-d');
- }
- unset($item);
- }
- $this->success('数据请求成功', $list);
- }
- }
- }
- return $this->render('order-list');
- }
- public function actionOrderDetail()
- {
- if (Yii::$app->request->isAjax && Yii::$app->request->isGet) {
- $params = Yii::$app->request->get();
- $valid = Yii::$app->services->validate->validate($params, [
- [['user_id', 'service_status', 'page', 'limit'], 'integer'],
- [['order_no'], 'string'],
- [['date_start', 'date_end', 'keyword'], 'string'],
- [['user_id'], 'required']
- ]);
- if ($valid === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
- try {
- $where = [
- ['r.mall_id' => $this->mall_id],
- ['c.staff_user_id' => $params['user_id']],
- ['r.store_id' => $this->store_id]
- ];
- if (!empty($params['keyword'])) {
- $user_list = User::lists(['where' => [['mall_id' => $this->mall_id], [
- 'or',
- ['=', 'id', $params['keyword']],
- ['like', 'nickname', $params['keyword'] . '%', false],
- ['like', 'mobile', $params['keyword'] . '%', false]
- ]], 'select' => 'id']);
- $user_ids = array_column($user_list, 'id');
- if (!empty($user_ids)) {
- $where[] = ['r.user_id' => $user_ids];
- } else {
- $where[] = ['r.id' => 0];
- }
- }
- if (!empty($params['date_start'])) $where[] = ['>=', 'r.created_at', strtotime($params['date_start'])];
- if (!empty($params['date_end'])) $where[] = ['<=', 'r.created_at', strtotime($params['date_end'])];
- if (isset($params['service_status']) && $params['service_status'] !== '') {
- $where[] = ['c.service_status' => $params['service_status']];
- } else {
- $where[] = ['c.service_status' => [ReservationServiceEnum::RESERVE_ORDER_STATUS_NORMAL, ReservationServiceEnum::RESERVE_ORDER_STATUS_TALKING,
- ReservationServiceEnum::RESERVE_ORDER_STATUS_SERVING, ReservationServiceEnum::RESERVE_ORDER_STATUS_UNDERWRITER, ReservationServiceEnum::RESERVE_ORDER_STATUS_FINISH]];
- }
- if (!empty($params['order_no'])) {
- $where[] = ['like', 'c.order_no', $params['order_no']];
- }
- $ret = Order::listPage([
- 'where' => $where,
- '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',
- 'order' => 'r.id desc',
- 'limit' => $params['limit'] ?? 10,
- 'group' => 'c.order_id',
- 'join' => [['right join',ReservationServiceOrder::tableName().' as c','c.order_id=r.id']],
- 'alias' => 'r'
- ]);
- if (!$ret) return $this->error(Order::getStaticError());
- if (!empty($ret['list'])) {
- $uids = array_column($ret['list'], 'user_id');
- $users = User::find()->where(['id' => $uids])->select('id,nickname,avatar_url,mobile')->indexBy('id')->asArray()->all();
- foreach ($ret['list'] as &$item) {
- $item['user'] = $users[$item['user_id']] ?? [];
- $item['detail'] = OrderDetail::find()->where(['order_id' => $item['id']])->select('goods_name,num,goods_price,price')->asArray()->all();
- }
- unset($item);
- }
- $ret['service_status_map'] = ReservationServiceEnum::RESERVE_ORDER_STATUS_MAP;
- return $this->success('获取成功', $ret);
- } catch (\Exception $e) {
- return $this->error($e->getMessage());
- }
- }
- return $this->render('order-detail');
- }
- }
|