canyin-project/ybcy/controllers/channelApi/QueuingController.php
2024-11-01 16:07:54 +08:00

203 lines
7.3 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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, '失败');
}
}
}