canyin-project/ybcy/controllers/channelApi/QueuingController.php

203 lines
7.3 KiB
PHP
Raw Normal View History

2024-11-01 16:07:54 +08:00
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2021/6/1 0001
* Time: 15:04
*/
namespace app\controllers\channelApi;
use app\models\common\Config;
use app\models\common\Printing;
use app\models\common\Message;
use app\models\common\Power;
use Yii;
class QueuingController extends CommonController{
public $enableCsrfValidation = false;
function init(){
parent::init();
$power=Power::getPayPower($this->wqData['uniacid'],'queuing');
if(!$power){
echo json_encode(['code'=>2,'msg'=>'暂无权限']);die;
}
}
//餐桌类型列表
public function actionQueuingType() {
$result=axios_request();
$uniacid=$this->wqData['uniacid'];
$storeId=$result['storeId'];
if (!$storeId) {
return $this->result(2,'商家信息错误');
}
$queuingType=(new \yii\db\Query())
->from('{{%ybwm_queuing_type}}')
->where(['deleteAt'=>0,'uniacid'=>$uniacid,'storeId'=>$storeId])->orderBy('max asc')->all();
if (!$queuingType) {
return $this->result(2,'暂无桌位信息');
}
$day = date('Y-m-d');
foreach ($queuingType as $key => $value) {
$minute = 0;
$count=(new \yii\db\Query())
->from('{{%ybwm_queuing}}')
->where(['storeId' => $storeId, 'tableId' => $value['id'], 'day' => $day, 'state' => 1])->count();
if ($count) {
$minute = $value['minute'] * $count;
}
$queuingType[$key]['waitNum'] = $count;
$queuingType[$key]['waitMinute'] = $minute;
}
$data['list']=$queuingType;
$set = Config::getStoreSet('queuing', $storeId);
$data['other']=['notice'=>$set['details']];
return $this->result(1, '成功',$data);
}
//取号
public function actionTakeNumber() {
$request = Yii::$app->request;
$result=axios_request();
$userId=$this->wqData['userId'];
$appType = $this->wqData['appType'];
$now=time();
$uniacid=$this->wqData['uniacid'];
if($request->isGet){
return $this->result(2, '请求异常');
}
if (!$result['tableId']) {
return $this->result(2, '餐桌类型ID不能为空');
}
$tableInfo=(new \yii\db\Query())
->from('{{%ybwm_queuing_type}}')
->where(['id'=>$result['tableId']])->one();
$day = date('Y-m-d');
$myNumber=(new \yii\db\Query())
->from('{{%ybwm_queuing}}')
->where(['userId' => $userId,'deleteAt'=>0,'storeId' => $tableInfo['storeId'], 'day' => $day])->orderBy('id desc')->one();
if ($myNumber['state'] == 1) {
return $this->result(2, '您有排队中的号,不可重复取号');
}
$data['origin'] = $appType;
$data['storeId'] = $tableInfo['storeId'];
$data['name'] = $tableInfo['name'];
$data['tableId'] = $result['tableId'];
$data['userId'] = $userId;
$data['people'] = $result['people'] ?: 1;
$data['tel'] = $result['tel'];
$data['state'] = 1;
$data['createdAt'] = $now;
$data['day'] = $day;
$data['uniacid'] =$uniacid;
$data['changeAt']=time();
//$rst = pdo_get('ybcy_queuing', array('storeId' => $_GPC['storeId'], 'day' => $day, 'deleteAt' => 0), array('id', 'code'));
$rst=(new \yii\db\Query())
->from('{{%ybwm_queuing}}')
->where(['storeId' => $tableInfo['storeId'], 'day' => $day])->orderBy('id desc')->all();
if ($rst) {
$str = substr($rst[0]['code'], 1);
$preg = '/[0]*/';
$result1 = preg_replace($preg, '', $str, 1);
$num = $result1 + 1;
$code = substr("000" . $num, -4);
$data['code'] = 'A' . $code;
} else {
$data['code'] = "A0001";
}
$res =Yii::$app->db->createCommand()->insert('{{%ybwm_queuing}}', $data)->execute();
$codeId = Yii::$app->db->getLastInsertID();
if($res){
$set = Config::getStoreSet('queuing', $tableInfo['storeId']);
if($set['orderPrint']==1){
Printing::queuingPrint($codeId);
}
Message::queuingOrder($codeId);
return $this->result(1, '操作成功',$codeId);
}else{
return $this->result(2, '操作失败');
}
}
//排队详情
public function actionTakeNumberInfo() {
$result=axios_request();
$day = date('Y-m-d');
$info=(new \yii\db\Query())
->from('{{%ybwm_queuing}}')
->where(['id'=>$result['id']])->one();
if(!$info){
return $this->result(2, '获取详情失败');
}
$table=(new \yii\db\Query())
->from('{{%ybwm_queuing_type}}')
->where(['id'=>$info['tableId']])->one();
$minute = 0;
$count=(new \yii\db\Query())
->from('{{%ybwm_queuing}}')
->where(['storeId' => $info['storeId'], 'tableId' => $info['tableId'], 'day' => $day, 'state' => 1])->count();
if ($count) {
$minute = $table['minute'] * $count;
}
$alreadyWaiting = ceil((time() - $info['createdAt']) / 60);
$info['waitNum'] = $count;
$info['waitMinute'] = $minute;
$info['alreadyWaiting'] = $alreadyWaiting;
$set = Config::getStoreSet('queuing', $info['storeId']);
$info['notice']=$set['details'];
return $this->result(1, '成功', $info);
}
//我的排队
public function actionMyTakeNumber() {
$result=axios_request();
$userId=$this->wqData['userId'];
Yii::$app->db->createCommand()->update('{{%ybwm_queuing}}', ['state'=>4],'userId=:userId AND state=1 AND day!=:day AND deleteAt=0',[':userId'=>$userId,':day'=>date('Y-m-d')])->execute();
$page=$result['page']?:1;
$num=($page-1)*10;
$limit=10;
$table=(new \yii\db\Query())
->select('a.createdAt,a.code,a.id,a.people,a.state,a.name,b.name as storeName,b.icon as logo,a.storeId')
->from('{{%ybwm_queuing}} as a')
->leftJoin('{{%ybwm_store}} as b','a.storeId=b.id')
->where(['a.deleteAt'=>0,'a.userDeleteAt'=>0,'a.userId'=>$userId]);
$list=$table->offset($num)
->limit($limit)->orderBy('a.id desc')->all();
return $this->result(1, '成功',$list);
}
//取消/删除排队
public function actionModifyTakeNumber() {
$request = Yii::$app->request;
$result=axios_request();
if($request->isGet || !$result['type']){
return $this->result(2, '请求异常');
}
$info=(new \yii\db\Query())
->from('{{%ybwm_queuing}}')
->where(['id'=>$result['id']])->one();
if (!$info) {
return $this->result(2, '数据不存在,或已被删除');
}
if($result['type']=='cancel'){
$data['state']=4;
}
if($result['type']=='delete'){
$data['userDeleteAt']=time();
}
$data['changeAt']=time();
$res = Yii::$app->db->createCommand()->update('{{%ybwm_queuing}}', $data,['id'=>$result['id']])->execute();
if($res){
return $this->result(1, '成功');
}else{
return $this->result(2, '失败');
}
}
}