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

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);
}
}