187 lines
7.5 KiB
PHP
187 lines
7.5 KiB
PHP
<?php
|
|
namespace app\controllers\channelApi;
|
|
use app\models\common\CallbackOrder;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Yii;
|
|
use app\models\common\Config;
|
|
use app\models\common\Power;
|
|
use app\models\common\Order;
|
|
|
|
class ReserveController extends CommonController
|
|
{
|
|
public $enableCsrfValidation = false;
|
|
|
|
function init()
|
|
{
|
|
parent::init();
|
|
$power = Power::getPayPower($this->wqData['uniacid'], 'reserve');
|
|
if (!$power) {
|
|
echo json_encode(['code' => 2, 'msg' => '暂无权限']);
|
|
die;
|
|
}
|
|
}
|
|
|
|
//预约下订单
|
|
public function actionSaveAppointmentOrder()
|
|
{
|
|
$request = Yii::$app->request;
|
|
$result=axios_request();
|
|
$userId=$this->wqData['userId'];
|
|
$now=time();
|
|
$uniacid=$this->wqData['uniacid'];
|
|
if($request->isGet){
|
|
return $this->result(2, '请求异常');
|
|
}
|
|
$user=(new \yii\db\Query())
|
|
->from('{{%ybwm_member}}')
|
|
->where('id=:id',[':id'=>$userId])->one();
|
|
if ($user['isBlack'] == 1) {
|
|
return $this->result(2, '账号异常,请联系管理员!!!');
|
|
}
|
|
$region=(new \yii\db\Query())
|
|
->from('{{%ybwm_table_area}}')
|
|
->where('id=:id',[':id'=>$result['region']])->one();
|
|
if (!$region) {
|
|
return $this->result(2, '区域信息异常!');
|
|
}
|
|
$data['userId'] = $userId;
|
|
$data['storeId'] = $result['storeId'];
|
|
$data['uniacid'] = $uniacid;
|
|
$data['money'] = $region['money'];
|
|
$data['state'] = 1;
|
|
$data['outTradeNo'] = date("YmdHis") . rand(111111, 999999);
|
|
$data['origin'] = $this->wqData['appType'];
|
|
$data['createdAt'] = $now;
|
|
$data['people'] = $result['people'];
|
|
$data['serviceAt'] = strtotime($result['serviceAt']);
|
|
$data['serviceDay'] = date("m-d", $data['serviceAt']);
|
|
$data['serviceTime'] = date("H:i", $data['serviceAt']);
|
|
$data['region'] = $result['region'];
|
|
$data['userName'] = $result['userName'];
|
|
$data['userTel'] = $result['userTel'];
|
|
$data['sex'] = $result['sex'];
|
|
$data['note'] = $result['note'];
|
|
$res = Yii::$app->db->createCommand()->insert('{{%ybwm_appointment}}', $data)->execute();
|
|
$id = Yii::$app->db->getLastInsertID();
|
|
if ($res) {
|
|
if($region['money']<=0){
|
|
CallbackOrder::appointmentOrder($id,0);
|
|
}
|
|
return $this->result(1, '下单成功', $id);
|
|
} else {
|
|
return $this->result(2, '下单失败');
|
|
}
|
|
}
|
|
|
|
//查看我的预约
|
|
public function actionMyAppointmentOrder()
|
|
{
|
|
$result=axios_request();
|
|
$userId=$this->wqData['userId'];
|
|
$page=$result['page']?:1;
|
|
$num=($page-1)*10;
|
|
$limit=10;
|
|
$table=(new \yii\db\Query())
|
|
->select('c.name as regionName,a.id,a.createdAt,a.storeId,b.name as storeName,b.icon as storeIcon,a.people,a.serviceDay,a.serviceTime,a.state')
|
|
->from('{{%ybwm_appointment}} as a')
|
|
->leftJoin('{{%ybwm_store}} as b','a.storeId=b.id')
|
|
->leftJoin('{{%ybwm_table_area}} as c','a.region=c.id')
|
|
->where('a.state>1 AND a.deleteAt=0 AND a.userDeleteAt=0 AND a.userId=:userId',[':userId'=>$userId]);
|
|
$list=$table->offset($num)
|
|
->limit($limit)->orderBy('a.id desc')->all();
|
|
return $this->result(1, '成功',$list);
|
|
}
|
|
|
|
//查看预约详情//
|
|
public function actionAppointmentOrderInfo()
|
|
{
|
|
$result=axios_request();
|
|
$table=(new \yii\db\Query())
|
|
->select('c.name as regionName,a.outTradeNo,a.note,a.sex,a.money,a.code,a.userName,a.userTel,a.createdAt,a.storeId,b.name as storeName,b.icon as storeIcon,a.people,a.serviceDay,a.serviceTime,a.state')
|
|
->from('{{%ybwm_appointment}} as a')
|
|
->leftJoin('{{%ybwm_store}} as b','a.storeId=b.id')
|
|
->leftJoin('{{%ybwm_table_area}} as c','a.region=c.id')
|
|
->where('a.id=:id',[':id'=>$result['id']]);
|
|
$list=$table->orderBy('a.id desc')->one();
|
|
return $this->result(1, '成功',$list);
|
|
}
|
|
|
|
//操作
|
|
public function actionOperationAppointmentOrder()
|
|
{
|
|
$result=axios_request();
|
|
$order =(new \yii\db\Query())
|
|
->from('{{%ybwm_appointment}}')
|
|
->where('id=:id',[':id'=>$result['id']])->one();
|
|
if($result['type']=='cancel'){
|
|
$storeSet = Config::getStoreSet('appointment', $order['storeId']);
|
|
$storeSet['cancelTime'] = $storeSet['cancelTime'] ?: 60;
|
|
$time = time() + $storeSet['cancelTime'] * 60;
|
|
if ($time > $order['serviceAt']) {
|
|
return $this->result(2, '超过提前取消时间,无法取消订单!');
|
|
}
|
|
$res=Order::reserveCancel($result['id'],1);
|
|
}
|
|
if($result['type']=='del'){
|
|
if ($order['state'] ==2) {
|
|
return $this->result(2, '该订单状态无法删除!');
|
|
}
|
|
$res = YII::$app->db->createCommand()->update('{{%ybwm_appointment}}', ['userDeleteAt'=>time()], ['id'=>$result['id']])->execute();
|
|
}
|
|
if ($res) {
|
|
return $this->result(1, '成功!');
|
|
} else {
|
|
return $this->result(2, '失败!');
|
|
}
|
|
|
|
}
|
|
|
|
//预约选项
|
|
public function actionAppointmentOptions()
|
|
{
|
|
$result=axios_request();
|
|
$storeSet = Config::getStoreSet('appointment', $result['storeId']);
|
|
$days = $storeSet['days'] ?: 7;
|
|
$selectDay = $storeSet['selectDay'] ?: 1;
|
|
$storeSet['interval'] = $storeSet['interval'] ?: 60;
|
|
if ($selectDay == 2) {
|
|
$daysArr = dateRange(strtotime('+1days', time()), $days);
|
|
} else {
|
|
$daysArr = dateRange('', $days);
|
|
}
|
|
$storeSet['end']=strtotime($storeSet['end']);
|
|
$storeSet['start']=strtotime($storeSet['start']);
|
|
$second = floor(($storeSet['end'] - $storeSet['start']) % 86400 / 60); //相差多少分钟
|
|
$timeNum = ceil($second / $storeSet['interval']); //有多少个时间点
|
|
$week = $storeSet['week'] ?: [1, 2, 3, 4, 5, 6, 7]; //星期几可以预约
|
|
for ($i = 0; $i < count($daysArr); $i++) {
|
|
if (in_array($daysArr[$i]['week'], $week)) {
|
|
$daysArr[$i]['isAppointment'] = 1;
|
|
} else {
|
|
$daysArr[$i]['isAppointment'] = 2;
|
|
}
|
|
$timesArr = [];
|
|
for ($t = 1; $t <= $timeNum; $t++) {
|
|
$times = date("H:i", $storeSet['start'] + $storeSet['interval'] * 60 * $t); //获取当前时间段
|
|
if ($daysArr[$i]['time'] == date("Y-m-d")) {
|
|
//是今天
|
|
if (strtotime($times) > strtotime(date("H:i")) AND strtotime($times) <= strtotime(date("H:i", $storeSet['end']))) {
|
|
//开始时间要大于当前时间并且结束时间小于结束时间范围
|
|
$timesArr[] = $times;
|
|
}
|
|
} elseif (strtotime($times) <= strtotime(date("H:i", $storeSet['end']))) {
|
|
$timesArr[] = $times;
|
|
}
|
|
}
|
|
$daysArr[$i]['timesArr'] = $timesArr;
|
|
|
|
}
|
|
$data['daysArr'] = $daysArr;
|
|
$data['set'] = $storeSet;
|
|
$region = (new \yii\db\Query())
|
|
->from('{{%ybwm_table_area}}')
|
|
->where('appointment=1 AND storeId=:storeId AND deleteAt=0 AND display=1',[':storeId'=>$result['storeId']])->orderBy('sort asc')->all();
|
|
$data['region'] = $region;
|
|
return $this->result(1, '操作成功', $data);
|
|
}
|
|
} |