1264 lines
52 KiB
PHP
1264 lines
52 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\H5;
|
|
|
|
use App\Facades\CommonService;
|
|
use App\Facades\WechatService;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Response\ResponseJson;
|
|
use App\Jobs\SendTemplateNotice;
|
|
use App\Models\ActivityOrder;
|
|
use App\Models\AgentOrder;
|
|
use App\Models\ChefPlan;
|
|
use App\Models\ChefUser;
|
|
use App\Models\Collaborator;
|
|
use App\Models\Office;
|
|
use App\Models\Partner;
|
|
use App\Models\Restaurant;
|
|
use App\Models\RestaurantDate;
|
|
use App\Models\RestaurantOrder;
|
|
use App\Models\RestaurantOrderRefund;
|
|
use App\Models\User;
|
|
use GuzzleHttp\Client;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Log;
|
|
use Illuminate\Support\Facades\Redis;
|
|
|
|
class RestaurantController extends Controller
|
|
{
|
|
use ResponseJson;
|
|
|
|
/**
|
|
* 获取订餐记录
|
|
* @param Request $request
|
|
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
|
|
*/
|
|
public function getRestaurantLog(Request $request)
|
|
{
|
|
try {
|
|
$date = $request->input('date');
|
|
if (empty($date)) {
|
|
return $this->failure('时间不为空');
|
|
}
|
|
|
|
$user = auth()->user();
|
|
// $partner = Partner::where('user_id',$user->id)->first();
|
|
$partner = Collaborator::where('user_id',$user->id)
|
|
->where('status',Collaborator::STATUS_PASS)
|
|
->first();
|
|
$flag = false;
|
|
if(!$partner){
|
|
$flag = true;
|
|
}
|
|
|
|
//查询餐饮日期
|
|
$start_date = date('Y-m-01', strtotime($date));
|
|
$end_date = date('Y-m-d', strtotime("$start_date + 1 month -1 day"));
|
|
$month = date('Y-m', strtotime($date));
|
|
$restaurant_date = RestaurantDate::where('date','like',$month.'%')->get();
|
|
$date_arr = [];
|
|
if(!$restaurant_date->isEmpty()){
|
|
foreach ($restaurant_date as $val){
|
|
$status = $val->status;
|
|
$exists = Restaurant::where('user_id', $user->id)->where('date', $val->date)
|
|
->where('status','<>',Restaurant::STATUS_RESERVE)->exists();
|
|
if ($exists) {
|
|
$status = 1;
|
|
}
|
|
$date_arr[] = $status;
|
|
}
|
|
}else{
|
|
$dailies = CommonService::daliy($start_date, $end_date);
|
|
foreach ($dailies as $daily) {
|
|
$exists = Restaurant::where('user_id', $user->id)->where('date', $daily)->where('status','<>',Restaurant::STATUS_RESERVE)->exists();
|
|
$status = 2;
|
|
if ($exists) {
|
|
$status = 1;
|
|
}
|
|
$date_arr[] = $status;
|
|
}
|
|
}
|
|
$restaurant = Restaurant::where('user_id', $user->id)
|
|
->where('status','<>',Restaurant::STATUS_RESERVE)
|
|
->whereBetween('date', [$start_date, $end_date])
|
|
->select('id','date','diet_type','food_type','num','status','office_id','amount')
|
|
->orderBy('date', 'asc')
|
|
->orderBy('diet_type','asc')
|
|
->orderByDesc('id')
|
|
->get()
|
|
->toArray();
|
|
$log = [];
|
|
foreach ($restaurant as $item){
|
|
$item['office_name'] = '';
|
|
if($item['office_id']){
|
|
$item['office_name'] = Office::where('id',$item['office_id'])->value('office_name');
|
|
}
|
|
$date = $item['date'];
|
|
//查看午餐是否购买过
|
|
$lunch = Restaurant::where('user_id',$user->id)->where('date',$date)->where('diet_type',Restaurant::DIET_TYPE_LUNCH)
|
|
->whereIn('status',Restaurant::STATUS_ARR)
|
|
->exists();
|
|
//查看晚餐是否购买过
|
|
$dinner = Restaurant::where('user_id',$user->id)->where('date',$date)->where('diet_type',Restaurant::DIET_TYPE_DINNER)
|
|
->whereIn('status',Restaurant::STATUS_ARR)
|
|
->exists();
|
|
|
|
$log[$item['date']]['list'][] = $item;
|
|
$log[$item['date']]['date'] = $date;
|
|
|
|
$log[$item['date']]['have_lunch'] = $lunch;
|
|
$log[$item['date']]['have_dinner'] = $dinner;
|
|
}
|
|
$logs = array_values($log);
|
|
|
|
//获取开关状态,如果没设置,则查看数据库,有订餐,默认开启
|
|
$switch_status = Redis::hget(Restaurant::REDIS_SEND_SWITCH,$user->id);
|
|
if($switch_status === false){
|
|
$exists = Restaurant::where('status','>',0)->where('user_id',$user->id)->exists();
|
|
$switch_status = 0;
|
|
if($exists){
|
|
$switch_status = 1;
|
|
}
|
|
}
|
|
$switch_status = intval($switch_status);
|
|
|
|
$lunch_reserve_time = Restaurant::LUNCH_RESERVE_TIME;
|
|
$dinner_reserve_time = Restaurant::DINNER_RESERVE_TIME;
|
|
|
|
return $this->success('ok', compact('date_arr', 'logs','flag','switch_status','lunch_reserve_time','dinner_reserve_time'));
|
|
} catch (\Exception $e) {
|
|
Log::error('getRestaurantLog:' . $e->getMessage());
|
|
return $this->jsonResponse(1, $e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
*按日期获取某一天订餐情况
|
|
* @param Request $request
|
|
* @return \Illuminate\Http\JsonResponse|void
|
|
*/
|
|
public function getRestaurantDetail(Request $request)
|
|
{
|
|
try {
|
|
$id = $request->get('id');
|
|
if (empty($id)) return $this->failure('日期不为空');
|
|
$restaurant = Restaurant::where('id', $id)->first();
|
|
$restaurant->images = json_decode($restaurant->images,true);
|
|
return $this->success('ok', $restaurant);
|
|
} catch (\Exception $e) {
|
|
Log::error('getRestaurantDetail:' . $e->getMessage());
|
|
return $this->jsonResponse(1, $e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 申请订餐
|
|
* @param Request $request
|
|
* @return \Illuminate\Http\JsonResponse|void
|
|
*/
|
|
public function addRestaurant(Request $request)
|
|
{
|
|
DB::beginTransaction();
|
|
try {
|
|
$user = auth()->user();
|
|
$diet_type = $request->get('diet_type');
|
|
if (empty($diet_type)) return $this->failure('请选择晚餐或午餐');
|
|
// $diet_type = json_decode($diet_type,true);
|
|
|
|
$office_id = $request->get('office_id');
|
|
if (empty($office_id)) return $this->failure('请选择办公室');
|
|
|
|
$office_name = Office::where('id',$office_id)->value('office_name');
|
|
|
|
$date = $request->get('date');
|
|
if(empty($date)) return $this->failure('请选择日期');
|
|
$day_of_week = date('w', strtotime($date));
|
|
// if($day_of_week == 0){
|
|
// return $this->failure('周日不可订餐');
|
|
// }
|
|
$day = date('Y-m-d');
|
|
//如果时间是当天
|
|
$flag = false;
|
|
if($date == $day){
|
|
$minute = date('H:i');
|
|
foreach ($diet_type as $diet){
|
|
if($diet == Restaurant::DIET_TYPE_LUNCH && $minute > Restaurant::LUNCH_RESERVE_TIME){
|
|
$flag = true;
|
|
}
|
|
if($diet == Restaurant::DIET_TYPE_DINNER && $minute > Restaurant::DINNER_RESERVE_TIME){
|
|
$flag = true;
|
|
}
|
|
}
|
|
}
|
|
//如果时间过了,弹出提示
|
|
if($flag){
|
|
return $this->failure('已超过约定时间');
|
|
}
|
|
|
|
if($date < $day){
|
|
return $this->failure('日期不能小于今天');
|
|
}
|
|
|
|
$food_type = $request->get('food_type');
|
|
if (strlen($food_type) == 0) return $this->failure('请选择订餐类型');
|
|
|
|
$lunch_num = $request->input('lunch_num',0);
|
|
$dinner_num = $request->input('dinner_num',0);
|
|
if (empty($lunch_num) && empty($dinner_num)) {
|
|
return $this->failure('请至少订一份');
|
|
}
|
|
|
|
//一天某一餐 免费一份
|
|
$pay_lunch_num = $lunch_num;
|
|
$pay_dinner_num = $dinner_num;
|
|
//查看午餐是否购买过
|
|
$lunch = Restaurant::where('user_id',$user->id)->where('date',$date)->where('diet_type',Restaurant::DIET_TYPE_LUNCH)
|
|
->whereIn('status',Restaurant::STATUS_ARR)
|
|
->exists();
|
|
|
|
if ($lunch_num && !$lunch) {
|
|
$pay_lunch_num = $lunch_num - 1;
|
|
}
|
|
//查看晚餐是否有记录,有记录继续购买需要付费
|
|
$dinner = Restaurant::where('user_id',$user->id)->where('date',$date)->where('diet_type',Restaurant::DIET_TYPE_DINNER)
|
|
->whereIn('status',Restaurant::STATUS_ARR)
|
|
->exists();
|
|
if ($dinner_num && !$dinner) {
|
|
$pay_dinner_num = $dinner_num - 1;
|
|
}
|
|
|
|
$num = $pay_lunch_num + $pay_dinner_num;
|
|
|
|
$pay_map = [
|
|
'user_id' => $user->id,
|
|
'trade_no' => CommonService::getTradeNO(),
|
|
'status'=> Restaurant::STATUS_RESERVE,
|
|
'num' => $num,
|
|
'price' => $num * RestaurantOrder::PRICE,
|
|
'amount' => $num * RestaurantOrder::PRICE,
|
|
];
|
|
$model = RestaurantOrder::create($pay_map);
|
|
|
|
$map = $list= [];
|
|
$map['user_id'] = $user->id;
|
|
$map['order_id'] = $model->id;
|
|
$map['date'] = $date;
|
|
|
|
$map['office_id'] = $office_id;
|
|
//每一餐,每一份都生成一条记录,别问为什么,问就是产品要求
|
|
$diet_type_name = "午餐";
|
|
$food_type_name = '装修日';
|
|
if($food_type == Restaurant::FOOD_TYPE_CLEAN){
|
|
$food_type_name = "清洁日";
|
|
}
|
|
foreach ($diet_type as $val) {
|
|
$map['diet_type'] = $val;
|
|
$map['food_type'] = $food_type;
|
|
if ($val == RestaurantOrder::DIET_TYPE_LUNCH) {
|
|
//如果提交数量大于实际数量,说明有一份免费,插入一条记录
|
|
if($lunch_num > $pay_lunch_num){
|
|
$map['amount'] = 0;
|
|
$map['num'] = 1;
|
|
$map['status'] = 1;
|
|
$model = Restaurant::create($map);
|
|
$model->office_name = $office_name;
|
|
//返回给前端
|
|
$list[] = $model;
|
|
}
|
|
//遍历需要付费订单,每次都插入
|
|
for ($i = 1;$i<=$pay_lunch_num;$i++){
|
|
$map['amount'] = RestaurantOrder::PRICE;;
|
|
$map['num'] = 1;
|
|
$map['status'] = 0;
|
|
$model = Restaurant::create($map);
|
|
$model->office_name = $office_name;
|
|
//返回给前端
|
|
$list[] = $model;
|
|
}
|
|
} elseif ($val == RestaurantOrder::DIET_TYPE_DINNER) {
|
|
$diet_type_name = "晚餐";
|
|
//如果提交数量大于实际数量,说明有一份免费,插入一条记录
|
|
if($dinner_num > $pay_dinner_num){
|
|
$map['amount'] = 0;
|
|
$map['num'] = 1;
|
|
$map['status'] = 1;
|
|
$model = Restaurant::create($map);
|
|
$model->office_name = $office_name;
|
|
//返回给前端
|
|
$list[] = $model;
|
|
}
|
|
//遍历需要付费订单,每次都插入
|
|
for ($i = 1;$i<=$pay_dinner_num;$i++){
|
|
$map['amount'] = RestaurantOrder::PRICE;;
|
|
$map['num'] = 1;
|
|
$map['status'] = 0;
|
|
$model = Restaurant::create($map);
|
|
$model->office_name = $office_name;
|
|
//返回给前端
|
|
$list[] = $model;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
$config = [];
|
|
if($pay_map['amount']){
|
|
$callback = config('app.url') . '/api/h5/notify/restaurant/orders/' . $pay_map['trade_no'];
|
|
$appId = config('wechat.payment.sub_official_app_id');
|
|
// $config = WechatService::mpPay($pay_map['trade_no'], 'oHGap6F1HR-5q-JdRKrgb6DwztWQ', $pay_map['amount'], $pay_map['desc'], $callback, $appId);
|
|
$config = WechatService::mpPay($pay_map['trade_no'], $user->officialWechat->openid, $pay_map['amount'], $pay_map['desc']??'用户订餐', $callback, $appId);
|
|
}
|
|
|
|
DB::commit();
|
|
|
|
//查看午餐是否购买过
|
|
$have_lunch = Restaurant::where('user_id',$user->id)->where('date',$date)->where('diet_type',Restaurant::DIET_TYPE_LUNCH)
|
|
->whereIn('status',Restaurant::STATUS_ARR)
|
|
->exists();
|
|
//查看晚餐是否有记录,有记录继续购买需要付费
|
|
$have_dinner = Restaurant::where('user_id',$user->id)->where('date',$date)->where('diet_type',Restaurant::DIET_TYPE_DINNER)
|
|
->whereIn('status',Restaurant::STATUS_ARR)
|
|
->exists();
|
|
|
|
$params = [
|
|
'touser'=>$user->officialWechat->openid,
|
|
'template_id'=>config('wechat.tpls.success_restaurant'),
|
|
'url'=>config('app.url').'/order/#/cateringApplyFor',
|
|
'data'=>[
|
|
'time28' => ['value'=>$date],
|
|
'thing16' => ['value'=>$diet_type_name."/".$food_type_name],
|
|
'number10' => ['value'=>$lunch_num+$dinner_num],
|
|
'thing29' => ['value'=>$office_name],
|
|
'time4' => ['value'=>date('Y-m-d H:i:s')],
|
|
]
|
|
];
|
|
Log::info('addRestaurant:'.json_encode($params));
|
|
SendTemplateNotice::dispatch($params)->onQueue('health');
|
|
|
|
return $this->success('ok', compact( 'list', 'config','pay_map','have_dinner','have_lunch'));
|
|
} catch (\Exception $e) {
|
|
DB::rollBack();
|
|
Log::error('addRestaurant:' . $e->getMessage());
|
|
return $this->jsonResponse(1, $e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 辅助别人订餐
|
|
* @param Request $request
|
|
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
|
|
*/
|
|
public function addOtherRestaurant(Request $request){
|
|
DB::beginTransaction();
|
|
try {
|
|
$user = auth()->user();
|
|
$diet_type = $request->get('diet_type');
|
|
if (strlen($diet_type) == 0) return $this->failure('请选择晚餐或午餐');
|
|
|
|
$desc = $request->get('desc');
|
|
$office_id = $request->get('office_id');
|
|
if (empty($office_id)) return $this->failure('请选择办公室');
|
|
|
|
$office_name = Office::where('id',$office_id)->value('office_name');
|
|
|
|
$date = $request->get('date');
|
|
if(empty($date)) return $this->failure('请选择日期');
|
|
$day_of_week = date('w', strtotime($date));
|
|
// if($day_of_week == 0){
|
|
// return $this->failure('周日不可订餐');
|
|
// }
|
|
$day = date('Y-m-d');
|
|
|
|
if($date < $day){
|
|
return $this->failure('日期不能小于今天');
|
|
}
|
|
|
|
$food_type = $request->get('food_type');
|
|
if (strlen($food_type) == 0) return $this->failure('请选择订餐类型');
|
|
|
|
$free_num = $request->input('free_num',0);
|
|
$pay_num = $request->input('pay_num',0);
|
|
if (empty($free_num) && empty($pay_num)) {
|
|
return $this->failure('请至少订一份');
|
|
}
|
|
|
|
$pay_map = [
|
|
'user_id' => $user->id,
|
|
'trade_no' => CommonService::getTradeNO(),
|
|
'status'=> Restaurant::STATUS_RESERVE,
|
|
'num' => $pay_num,
|
|
'price' => $pay_num * RestaurantOrder::PRICE,
|
|
'amount' => $pay_num * RestaurantOrder::PRICE,
|
|
'desc' => '用户:' . $user->name . '订餐',
|
|
];
|
|
$model = RestaurantOrder::create($pay_map);
|
|
|
|
$map = $list= [];
|
|
$map['user_id'] = $user->id;
|
|
$map['order_id'] = $model->id;
|
|
$map['date'] = $date;
|
|
$map['office_id'] = $office_id;
|
|
$map['diet_type'] = $diet_type;
|
|
$map['food_type'] = $food_type;
|
|
$map['desc'] = $desc;
|
|
|
|
//每一餐,每一份都生成一条记录,别问为什么,问就是产品要求
|
|
//遍历免费订单,每次都插入
|
|
for ($i = 1;$i<=$free_num;$i++){
|
|
$map['amount'] = 0;
|
|
$map['num'] = 1;
|
|
$map['status'] = Restaurant::STATUS_PAY;
|
|
$map['type'] = Restaurant::TYPE_HELP_OTHER;
|
|
$model = Restaurant::create($map);
|
|
$model->office_name = $office_name;
|
|
//返回给前端
|
|
$list[] = $model;
|
|
}
|
|
//遍历需要付费订单,每次都插入
|
|
for ($i = 1;$i<=$pay_num;$i++){
|
|
$map['amount'] = RestaurantOrder::PRICE;;
|
|
$map['num'] = 1;
|
|
$map['status'] = Restaurant::STATUS_RESERVE;
|
|
$map['type'] = Restaurant::TYPE_HELP_OTHER;
|
|
$model = Restaurant::create($map);
|
|
$model->office_name = $office_name;
|
|
//返回给前端
|
|
$list[] = $model;
|
|
}
|
|
|
|
$config = [];
|
|
if($pay_map['amount']){
|
|
$callback = config('app.url') . '/api/h5/notify/restaurant/orders/' . $pay_map['trade_no'];
|
|
$appId = config('wechat.payment.sub_official_app_id');
|
|
// $config = WechatService::mpPay($pay_map['trade_no'], 'oHGap6F1HR-5q-JdRKrgb6DwztWQ', $pay_map['amount'], $pay_map['desc'], $callback, $appId);
|
|
$config = WechatService::mpPay($pay_map['trade_no'], $user->officialWechat->openid, $pay_map['amount'], $pay_map['desc'], $callback, $appId);
|
|
}
|
|
|
|
DB::commit();
|
|
return $this->success('ok', compact( 'list', 'config','pay_map'));
|
|
} catch (\Exception $e) {
|
|
DB::rollBack();
|
|
Log::error('addOtherRestaurant:' . $e->getMessage());
|
|
return $this->jsonResponse(1, $e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 订单回调
|
|
* @param $trade_no
|
|
* @return bool
|
|
* @throws \Exception
|
|
*/
|
|
public function notifyOrder($trade_no)
|
|
{
|
|
try {
|
|
$order = RestaurantOrder::where('trade_no', $trade_no)->first();
|
|
if (empty($order)) throw new \Exception("订单不存在");
|
|
$result = WechatService::mpPaid($trade_no);
|
|
if (empty($result)) {//成功
|
|
DB::beginTransaction();
|
|
RestaurantOrder::where("id", $order->id)->update(['status' => 1]);
|
|
Restaurant::where('order_id', $order->id)->update(['status' => 1]);
|
|
DB::commit();
|
|
return $this->success('ok');
|
|
} else {//失败
|
|
Log::debug($trade_no . '订单查询异常: 支付回调失败' . $result);
|
|
return $this->failure('支付失败');
|
|
}
|
|
} catch (\Exception $e) {
|
|
return $this->jsonResponse(1, $e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 通过订单号
|
|
*/
|
|
public function getOrderDetail(Request $request){
|
|
$trade_no = $request->get('trade_no');
|
|
if(empty($trade_no)){
|
|
return $this->failure('订单号不为空');
|
|
}
|
|
//判断订单号
|
|
$res = explode('_', $trade_no);
|
|
switch ($res[0]) {
|
|
case "saas": //福恋saas
|
|
$list = $this->getSaasOrderList($trade_no);
|
|
Log::info($list);
|
|
break;
|
|
case "activity":
|
|
$list = $this->getActivityOrderList($trade_no);
|
|
break;
|
|
case "AA":
|
|
$list = $this->getOAActivityOrderList($trade_no);
|
|
break;
|
|
case "agent":
|
|
$list = $this->getAgentOrderList($trade_no);
|
|
break;
|
|
default :
|
|
$list = $this->getOrderList($trade_no);
|
|
}
|
|
return $this->success('ok',$list);
|
|
|
|
}
|
|
|
|
public function getAgentOrderList($trade_no)
|
|
{
|
|
$order = AgentOrder::where('trade_no', $trade_no)->first();
|
|
if (empty($order)) throw new \Exception("订单不存在");
|
|
$shop_info = $order->shop_info;
|
|
$list = [
|
|
'name'=>$shop_info['title'],
|
|
'sku'=>$shop_info['sku']['name']??"",
|
|
'id'=>$order->id,
|
|
'num'=>$order->num,
|
|
'price'=>$order->price,
|
|
'order_type'=>'agent_shop',
|
|
'date'=>$order->created_at->toDateTimeString(),
|
|
];
|
|
return $list;
|
|
}
|
|
|
|
public function getOAActivityOrderList($trade_no)
|
|
{
|
|
config(['database.connections.mysql.prefix' => '']);
|
|
$order = DB::table('oa_agent_activity_order')->where('trade_no', $trade_no)->first();
|
|
$sku = json_decode($order->sku);
|
|
$activity = json_decode($order->activity_info);
|
|
$list = [
|
|
'name'=>$activity?$activity->title:'',
|
|
'sku'=>$sku?$sku->name:'',
|
|
'id'=>$order->id,
|
|
'num'=>1,
|
|
'price'=>$order->price,
|
|
'order_type'=>'oa_activity',
|
|
'date'=>date("Y-m-d H:i:s", $order->created_at),
|
|
];
|
|
return $list;
|
|
}
|
|
|
|
|
|
public function getActivityOrderList($trade_no)
|
|
{
|
|
$order = ActivityOrder::with('activity')->where('trade_no', $trade_no)->first();
|
|
$list = [
|
|
'name'=>$order->activity->title,
|
|
'sku'=>$order->sku,
|
|
'id'=>$order->id,
|
|
'num'=>$order->num,
|
|
'price'=>$order->amount,
|
|
'order_type'=>'activity',
|
|
'date'=>$order->created_at->toDateTimeString(),
|
|
];
|
|
return $list;
|
|
}
|
|
|
|
public function getSaasOrderList($trade_no)
|
|
{
|
|
$url = config('app.shop_url')."orders/{$trade_no}/receipt";
|
|
$res = $this->getData($url);
|
|
if ($res['code'] == 1) return $this->failure($res['message']);
|
|
$data = $res['data'];
|
|
return $data;
|
|
}
|
|
public function getData($url){
|
|
$headers = [
|
|
'Key' => config('app.shop_key'), // 自定义头部参数(示例)
|
|
];
|
|
$client = new Client();
|
|
$response = $client->get($url, [
|
|
'headers' => $headers,
|
|
]);
|
|
$code = $response->getStatusCode();
|
|
if($code != 200){
|
|
return ['message'=>'请求失败','code'=>1];
|
|
}
|
|
$body = $response->getBody()->getContents(); // 获取响应内容
|
|
$list = json_decode($body, true);
|
|
return $list;
|
|
}
|
|
|
|
public function getOrderList($trade_no)
|
|
{
|
|
$order = RestaurantOrder::where('trade_no', $trade_no)->first();
|
|
if (empty($order)) throw new \Exception("订单不存在");
|
|
//查看当前订单号相关数据
|
|
$restaurant = Restaurant::where('order_id',$order->id)->get();
|
|
$diet = '';
|
|
$num = 0;
|
|
$date = '';
|
|
foreach ($restaurant as $item){
|
|
if($item->diet_type == Restaurant::DIET_TYPE_LUNCH){
|
|
$diet = $diet.'午餐';
|
|
}
|
|
if($item->diet_type == Restaurant::DIET_TYPE_DINNER){
|
|
$diet = $diet.'+晚餐';
|
|
}
|
|
$num += $item->num;
|
|
$date = $item->date;
|
|
}
|
|
$list = [
|
|
'diet' => $diet,
|
|
'num' => $num,
|
|
'amount' => $order->amount,
|
|
'date' => $date,
|
|
'order_type' => 'repast',
|
|
];
|
|
$list['flag'] = 0;
|
|
if($order->desc){
|
|
$list['flag'] = 1;
|
|
}
|
|
return $list;
|
|
}
|
|
|
|
/**
|
|
* 取消订餐
|
|
* @param Request $request
|
|
*/
|
|
public function cancelRestaurant(Request $request){
|
|
DB::beginTransaction();
|
|
try {
|
|
$user = auth()->user();
|
|
$id = $request->get('id');
|
|
$restaurant = Restaurant::where('id',$id)->whereIn('status',[0,1])->first();
|
|
if(!$restaurant){
|
|
return $this->failure('该订单不存在或订单状态不正确');
|
|
}
|
|
$restaurant_order = RestaurantOrder::where('id',$restaurant->order_id)->first();
|
|
if(!$restaurant_order){
|
|
return $this->failure('订单查询失败');
|
|
}
|
|
|
|
$map = [];
|
|
//已支付则退款,为支付则直接取消
|
|
if($restaurant_order->status == 1 && $restaurant->amount > 0){
|
|
$map = [
|
|
'user_id' => $user->id,
|
|
'restaurant_id' => $restaurant->id,
|
|
'trade_no' => $restaurant_order->trade_no,
|
|
'refund_trade_no' => get_refund_trade_no(),
|
|
'total_amount' => $restaurant_order->amount,
|
|
'refund_amount' => $restaurant->amount,
|
|
];
|
|
|
|
//发起退款
|
|
$callback = config('app.url') . '/api/h5/notify/restaurant/orders/refund/'.$map['refund_trade_no'];
|
|
$result = WechatService::refund($map['trade_no'],$map['refund_trade_no'],$map['total_amount'],$map['refund_amount'],$callback);
|
|
if (!$result['status']) return $this->failure($result['msg']);
|
|
if($result['status']){
|
|
RestaurantOrderRefund::create($map);
|
|
}
|
|
}
|
|
$restaurant->status = Restaurant::STATUS_CANCEL;
|
|
$restaurant->save();
|
|
|
|
DB::commit();
|
|
|
|
$date = $restaurant->date;
|
|
//查看午餐是否购买过
|
|
$have_lunch = Restaurant::where('user_id',$user->id)->where('date',$date)->where('diet_type',Restaurant::DIET_TYPE_LUNCH)
|
|
->whereIn('status',Restaurant::STATUS_ARR)
|
|
->exists();
|
|
//查看晚餐是否有记录,有记录继续购买需要付费
|
|
$have_dinner = Restaurant::where('user_id',$user->id)->where('date',$date)->where('diet_type',Restaurant::DIET_TYPE_DINNER)
|
|
->whereIn('status',Restaurant::STATUS_ARR)
|
|
->exists();
|
|
|
|
return $this->success('ok',compact('map','have_lunch','have_dinner','date'));
|
|
}catch (\Exception $e){
|
|
DB::rollBack();
|
|
Log::error('cancelRestaurant:' . $e->getMessage());
|
|
return $this->jsonResponse(1, $e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 退款回调
|
|
* @param Request $request
|
|
*/
|
|
public function notifyRefund($refund_trade_no){
|
|
DB::beginTransaction();
|
|
try {
|
|
if(!$refund_trade_no){
|
|
return $this->failure('退款订单号不能为空');
|
|
}
|
|
$refund_order = RestaurantOrderRefund::where('refund_trade_no',$refund_trade_no)->first();
|
|
if(!$refund_order){
|
|
return $this->failure('退款订单不存在');
|
|
}
|
|
//避免多次回调
|
|
if($refund_order->status == 1){
|
|
return $this->success('ok');
|
|
}
|
|
$result = WechatService::orderRefunded($refund_trade_no);
|
|
|
|
$restaurant = Restaurant::where('id',$refund_order->restaurant_id)->first();
|
|
$restaurant->status = Restaurant::STATUS_CANCEL;
|
|
|
|
if(!$result['status']){
|
|
$restaurant->status = Restaurant::STATUS_PAY;
|
|
return $this->failure('支付失败');
|
|
}
|
|
|
|
|
|
$restaurant->save();
|
|
|
|
$refund_order->status = 1;
|
|
$refund_order->save();
|
|
|
|
DB::commit();
|
|
return $this->success('ok');
|
|
}catch (\Exception $e){
|
|
DB::rollBack();
|
|
Log::error('refundCallback:' . $e->getMessage());
|
|
return $this->failure('支付失败');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 订单评价
|
|
* @param Request $request
|
|
*/
|
|
public function evaluate(Request $request){
|
|
try {
|
|
$id = $request->get('id');
|
|
if(empty($id)) return $this->failure('id不为空');
|
|
|
|
$restaurant = Restaurant::where('id',$id)->first();
|
|
|
|
if($restaurant->status != Restaurant::STATUS_TAKE){
|
|
return $this->failure('请先取餐');
|
|
}
|
|
|
|
$remark = $request->get('remark');
|
|
if(!$remark) return $this->failure('请输入评价');
|
|
$restaurant->remark = $remark;
|
|
|
|
$star = $request->get('star');
|
|
if($star) $restaurant->star = $star;
|
|
|
|
$images = $request->get('images');
|
|
if($images) $restaurant->images = json_encode($images);
|
|
|
|
$restaurant->status = Restaurant::STATUS_EVALUATE;
|
|
|
|
$restaurant->save();
|
|
return $this->success('ok');
|
|
}catch (\Exception $e){
|
|
Log::error('evaluate:' . $e->getMessage());
|
|
return $this->failure('评价失败');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取厨师做饭安排,看不懂,根本看不懂,有缘人祝你好运
|
|
* @param Request $request
|
|
* @return \Illuminate\Http\JsonResponse|void
|
|
*/
|
|
public function getChefCookPlan(Request $request){
|
|
try {
|
|
$date = $request->get('date');
|
|
if (empty($date)) {
|
|
return $this->failure('时间不为空');
|
|
}
|
|
|
|
$user = auth()->user();
|
|
$start_date = date('Y-m-01', strtotime($date));
|
|
$end_date = date('Y-m-d', strtotime("$start_date + 1 month -1 day"));
|
|
$dailies = CommonService::daliy($start_date, $end_date);
|
|
$date_arr = $chef_date = [];
|
|
foreach ($dailies as $daily) {
|
|
$exists = ChefPlan::where('user_id', $user->id)->where('date', $daily)->exists();
|
|
$status = 0;
|
|
if ($exists) {
|
|
$status = 1;
|
|
$chef_date[] = $daily;
|
|
}
|
|
$date_arr[] = $status;
|
|
}
|
|
//获取整月的订餐数据
|
|
$restaurant = Restaurant::whereIn('date', $chef_date)
|
|
->whereIn('status',Restaurant::STATUS_ARR)
|
|
->orderBy('date', 'asc')
|
|
->select('id','user_id','date','diet_type','food_type','num','status','office_id')
|
|
->orderByDesc('id')
|
|
->get();
|
|
|
|
$log = [];
|
|
foreach ($restaurant as $value){
|
|
$user_info = User::where('id',$value->user_id)->first();
|
|
$value->office_name = Office::where('id',$value->office_id)->value('office_name');
|
|
$value->name = $user_info->name??'';
|
|
$value->mobile = $user_info->mobile??'';
|
|
$value->avatar = $user_info->avatar??'';
|
|
$log[$value['date']]['date'] = $value['date'];
|
|
//初始化数组值
|
|
if(!isset($log[$value['date']]['lunch_food_clean_num'])){
|
|
$log[$value['date']]['lunch_food_clean_num'] = 0;
|
|
}
|
|
if(!isset($log[$value['date']]['lunch_food_trim_num'])){
|
|
$log[$value['date']]['lunch_food_trim_num'] = 0;
|
|
}
|
|
if(!isset($log[$value['date']]['dinner_food_clean_num'])){
|
|
$log[$value['date']]['dinner_food_clean_num'] = 0;
|
|
}
|
|
if(!isset($log[$value['date']]['dinner_food_trim_num'])){
|
|
$log[$value['date']]['dinner_food_trim_num'] = 0;
|
|
}
|
|
|
|
//初始化订餐人员数组
|
|
// if(!isset($log[$value['date']]['dinner_user_list'])){
|
|
// $log[$value['date']]['dinner_user_list'] = [];
|
|
// }
|
|
// if(!isset($log[$value['date']]['lunch_user_list'])){
|
|
// $log[$value['date']]['lunch_user_list'] = [];
|
|
// }
|
|
|
|
//初始化厨师数组
|
|
if(!isset($log[$value['date']]['lunch_chef_list'])){
|
|
$log[$value['date']]['lunch_chef_list'] = [];
|
|
}
|
|
|
|
if(!isset($log[$value['date']]['dinner_chef_list'])){
|
|
$log[$value['date']]['dinner_chef_list'] = [];
|
|
}
|
|
|
|
if(!isset($log[$value['date']]['dinner_detail_count'][$value->office_id])){
|
|
$log[$value['date']]['dinner_detail_count'][$value->office_id] = [];
|
|
$log[$value['date']]['dinner_detail_count'][$value->office_id]['office_id'] = $value->office_id;
|
|
$log[$value['date']]['dinner_detail_count'][$value->office_id]['office_name'] = $value->office_name;
|
|
$log[$value['date']]['dinner_detail_count'][$value->office_id]['food_trim_num'] = 0;
|
|
$log[$value['date']]['dinner_detail_count'][$value->office_id]['food_clean_num'] = 0;
|
|
}
|
|
|
|
if(!isset($log[$value['date']]['lunch_detail_count'][$value->office_id])){
|
|
$log[$value['date']]['lunch_detail_count'][$value->office_id] = [];
|
|
$log[$value['date']]['lunch_detail_count'][$value->office_id]['office_id'] = $value->office_id;
|
|
$log[$value['date']]['lunch_detail_count'][$value->office_id]['office_name'] = $value->office_name;
|
|
$log[$value['date']]['lunch_detail_count'][$value->office_id]['food_trim_num'] = 0;
|
|
$log[$value['date']]['lunch_detail_count'][$value->office_id]['food_clean_num'] = 0;
|
|
}
|
|
|
|
if($value->diet_type == Restaurant::DIET_TYPE_DINNER){
|
|
//晚餐装修日,清洁日总数分别是多少
|
|
if($value->food_type == Restaurant::FOOD_TYPE_TRIM){
|
|
$log[$value['date']]['dinner_food_trim_num'] += $value->num;
|
|
$log[$value['date']]['dinner_detail_count'][$value->office_id]['food_trim_num'] += $value->num;
|
|
}else{
|
|
$log[$value['date']]['dinner_food_clean_num'] += $value->num;
|
|
$log[$value['date']]['dinner_detail_count'][$value->office_id]['food_clean_num'] += $value->num;
|
|
}
|
|
// $log[$value['date']]['dinner_user_list'][] = $value;
|
|
}else{
|
|
//午餐装修日,清洁日总数分别是多少
|
|
if($value->food_type == Restaurant::FOOD_TYPE_TRIM){
|
|
$log[$value['date']]['lunch_food_trim_num'] += $value->num;
|
|
$log[$value['date']]['lunch_detail_count'][$value->office_id]['food_trim_num'] += $value->num;
|
|
}else{
|
|
$log[$value['date']]['lunch_food_clean_num'] += $value->num;
|
|
$log[$value['date']]['lunch_detail_count'][$value->office_id]['food_clean_num'] += $value->num;
|
|
}
|
|
// $log[$value['date']]['lunch_user_list'][] = $value;
|
|
}
|
|
|
|
}
|
|
//获取厨师人员安排
|
|
$chef_plan = ChefPlan::whereIn('date', $chef_date)
|
|
->orderBy('date','asc')
|
|
->orderBy('id','desc')
|
|
->select('user_id','type','date','diet_type')
|
|
->get();
|
|
|
|
foreach ($chef_plan as $chef){
|
|
$chef_info = Partner::where('user_id',$chef->user_id)->first();
|
|
$chef->name = $chef_info->name??'';
|
|
$chef->mobile = $chef_info->mobile??'';
|
|
$chef->avatar = $chef_info->pic??'';
|
|
//处理厨师数组
|
|
$date_time = $chef['date'];
|
|
|
|
//如果没有订餐,先设置厨师,初始化字段
|
|
if(!isset($log[$date_time])){
|
|
$log[$date_time]['date'] = $date_time;
|
|
$log[$date_time]['lunch_food_clean_num'] = 0;
|
|
$log[$date_time]['lunch_food_trim_num'] = 0;
|
|
$log[$date_time]['dinner_food_clean_num'] = 0;
|
|
$log[$date_time]['dinner_food_trim_num'] = 0;
|
|
$log[$date_time]['dinner_user_list'] = [];
|
|
$log[$date_time]['lunch_user_list'] = [];
|
|
$log[$date_time]['lunch_detail_count'] = [];
|
|
$log[$date_time]['dinner_detail_count'] = [];
|
|
}
|
|
$log[$date_time]['lunch_detail_count'] = array_values($log[$date_time]['lunch_detail_count']);
|
|
$log[$date_time]['dinner_detail_count'] = array_values($log[$date_time]['dinner_detail_count']);
|
|
|
|
$diet_type = $chef['diet_type'];
|
|
$chef_diet_type = ChefPlan::where('date',$chef->date)->where('user_id',$user->id)->distinct()->pluck('diet_type')->toArray();
|
|
// 将chef信息添加到对应的数组中
|
|
if ($diet_type == Restaurant::DIET_TYPE_LUNCH) {
|
|
$log[$date_time]['lunch_chef_list'][] = $chef;
|
|
} elseif ($diet_type == Restaurant::DIET_TYPE_DINNER) {
|
|
$log[$date_time]['dinner_chef_list'][] = $chef;
|
|
}
|
|
|
|
//如果当前用户不是这一餐的工作人员,信息不可查看
|
|
if(!in_array(Restaurant::DIET_TYPE_LUNCH,$chef_diet_type)){
|
|
$log[$date_time]['lunch_chef_list'] = [];
|
|
$log[$date_time]['lunch_user_list'] = [];
|
|
$log[$date_time]['lunch_detail_count'] = [];
|
|
$log[$date_time]['lunch_food_clean_num'] = 0;
|
|
$log[$date_time]['lunch_food_trim_num'] = 0;
|
|
}elseif(!in_array(Restaurant::DIET_TYPE_DINNER,$chef_diet_type)){
|
|
$log[$date_time]['dinner_chef_list'] = [];
|
|
$log[$date_time]['dinner_user_list'] = [];
|
|
$log[$date_time]['dinner_detail_count'] = [];
|
|
$log[$date_time]['dinner_food_clean_num'] = 0;
|
|
$log[$date_time]['dinner_food_trim_num'] = 0;
|
|
}
|
|
|
|
}
|
|
$logs = array_values($log);
|
|
|
|
return $this->success('ok',compact('date_arr','logs'));
|
|
}catch (\Exception $e){
|
|
Log::error('getChefCookPlan:' . $e->getMessage());
|
|
return $this->failure('获取失败');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取餐饮厨师做饭计划
|
|
*/
|
|
public function getChefPlan(Request $request){
|
|
try {
|
|
$date = $request->get('date');
|
|
if (empty($date)) {
|
|
return $this->failure('时间不为空');
|
|
}
|
|
|
|
$user = auth()->user();
|
|
$start_date = date('Y-m-01', strtotime($date));
|
|
$end_date = date('Y-m-d', strtotime("$start_date + 1 month -1 day"));
|
|
$dailies = CommonService::daliy($start_date, $end_date);
|
|
$date_arr = $chef_date = [];
|
|
foreach ($dailies as $daily) {
|
|
//判断某些用户固定展示
|
|
if(in_array($user->id,[197,304,157])){
|
|
$exists = Restaurant::where('date', $daily)->exists();
|
|
$status = 0;
|
|
if ($exists) {
|
|
$status = 2;
|
|
$chef_date[] = $daily;
|
|
}
|
|
}else{
|
|
$exists = ChefPlan::where('user_id', $user->id)->where('date', $daily)->exists();
|
|
$status = 0;
|
|
if ($exists) {
|
|
$status = 1;
|
|
$chef_date[] = $daily;
|
|
}
|
|
}
|
|
$date_arr[] = $status;
|
|
}
|
|
$log = [];
|
|
//获取整月的订餐数据
|
|
// $restaurant = Restaurant::whereIn('date', $chef_date)
|
|
// ->whereIn('status',[Restaurant::STATUS_PAY,Restaurant::STATUS_WAIT,Restaurant::STATUS_FINISHED,Restaurant::STATUS_EVALUATE])
|
|
// ->orderBy('date', 'asc')
|
|
// ->select('id','user_id','date','diet_type','food_type','num','status','office_id')
|
|
// ->orderByDesc('id')
|
|
// ->get();
|
|
//
|
|
// foreach ($restaurant as $value){
|
|
// $user_info = User::where('id',$value->user_id)->first();
|
|
// $value->office_name = Office::where('id',$value->office_id)->value('office_name');
|
|
// $value->name = $user_info->name??'';
|
|
// $value->mobile = $user_info->mobile??'';
|
|
// $value->avatar = $user_info->avatar??'';
|
|
// $log[$value['date']]['date'] = $value['date'];
|
|
//
|
|
// //初始化厨师数组
|
|
// if(!isset($log[$value['date']]['lunch_chef_list'])){
|
|
// $log[$value['date']]['lunch_chef_list'] = [];
|
|
// }
|
|
//
|
|
// if(!isset($log[$value['date']]['dinner_chef_list'])){
|
|
// $log[$value['date']]['dinner_chef_list'] = [];
|
|
// }
|
|
//
|
|
// }
|
|
//获取厨师人员安排
|
|
$chef_plan = ChefPlan::whereIn('date', $chef_date)
|
|
->orderBy('date','asc')
|
|
->orderBy('id','desc')
|
|
->select('user_id','type','date','diet_type')
|
|
->get();
|
|
|
|
foreach ($chef_plan as $chef){
|
|
$chef_info = Partner::where('user_id',$chef->user_id)->first();
|
|
$chef->name = $chef_info->name??'';
|
|
$chef->mobile = $chef_info->mobile??'';
|
|
$chef->avatar = $chef_info->pic??'';
|
|
//处理厨师数组
|
|
$date_time = $chef['date'];
|
|
|
|
//如果没有订餐,先设置厨师,初始化字段
|
|
if(!isset($log[$date_time])){
|
|
$log[$date_time]['date'] = $date_time;
|
|
$log[$date_time]['dinner_chef_list'] = [];
|
|
$log[$date_time]['lunch_chef_list'] = [];
|
|
}
|
|
|
|
$diet_type = $chef['diet_type'];
|
|
// 将chef信息添加到对应的数组中
|
|
if ($diet_type == Restaurant::DIET_TYPE_LUNCH) {
|
|
$log[$date_time]['lunch_chef_list'][] = $chef;
|
|
} elseif ($diet_type == Restaurant::DIET_TYPE_DINNER) {
|
|
$log[$date_time]['dinner_chef_list'][] = $chef;
|
|
}
|
|
}
|
|
$logs = array_values($log);
|
|
|
|
return $this->success('ok',compact('date_arr','logs'));
|
|
}catch (\Exception $e){
|
|
Log::error('getChefCookPlan:' . $e->getMessage());
|
|
return $this->failure('获取失败');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取订餐人员列表
|
|
* @param Request $request
|
|
* @return \Illuminate\Http\JsonResponse|void
|
|
*/
|
|
public function getDayRestaurantList(Request $request)
|
|
{
|
|
try {
|
|
$date = $request->get('date');
|
|
$keyword = $request->get('keyword');
|
|
$diet_type = $request->get('diet_type');
|
|
$food_type = $request->get('food_type');
|
|
$office_id = $request->get('office_id');
|
|
$query = Restaurant::query();
|
|
if($date){
|
|
$query->when($date, function ($query) use ($date) {
|
|
$query->where(function ($query) use ($date) {
|
|
$query->where('date', $date);
|
|
});
|
|
});
|
|
}
|
|
|
|
if($keyword){
|
|
$query->where(function($sql) use($keyword) {
|
|
$sql->where('collaborator.name', 'like', '%'.$keyword.'%')
|
|
->orWhere('collaborator.mobile', 'like', '%'.$keyword.'%');
|
|
});
|
|
}
|
|
if($office_id){
|
|
$query->where('office_id',$office_id);
|
|
}
|
|
|
|
if(strlen($diet_type) > 0){
|
|
$query->where('diet_type',$diet_type);
|
|
}
|
|
if(strlen($food_type) > 0){
|
|
$query->where('food_type',$food_type);
|
|
}
|
|
|
|
$query->join('collaborator','collaborator.user_id','=','restaurant.user_id')->select('restaurant.*','collaborator.name','collaborator.mobile','collaborator.avatar');
|
|
|
|
$list = $query->orderByDesc('id')
|
|
->whereIn('restaurant.status',Restaurant::STATUS_ARR)
|
|
->get();
|
|
|
|
foreach ($list as $item){
|
|
$item->images = json_decode($item->images,true);
|
|
$item->office_name = Office::where('id',$item->office_id)->value('office_name');
|
|
$item->mobile = masked_phone($item->mobile);
|
|
}
|
|
|
|
return $this->success('ok', compact('list'));
|
|
} catch (\Exception $e) {
|
|
Log::error('getRestaurantList:' . $e->getMessage());
|
|
return $this->failure('查询失败');
|
|
}
|
|
}
|
|
/**
|
|
* 获取统计数据
|
|
* @param Request $request
|
|
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
|
|
*/
|
|
public function getRestaurantDataStat(Request $request){
|
|
try {
|
|
$date = $request->get('date',date('Y-m-d'));
|
|
$diet_type = $request->get('diet_type');
|
|
$food_type = $request->get('food_type');
|
|
$office_id = $request->get('office_id');
|
|
//查询总数
|
|
$count_query = Restaurant::query();
|
|
//按详情数
|
|
$detail_query = Restaurant::query();
|
|
if($date){
|
|
$count_query->when($date, function ($query) use ($date) {
|
|
$query->where(function ($query) use ($date) {
|
|
$query->where('date', $date);
|
|
});
|
|
});
|
|
$detail_query->when($date, function ($query) use ($date) {
|
|
$query->where(function ($query) use ($date) {
|
|
$query->where('date', $date);
|
|
});
|
|
});
|
|
}
|
|
|
|
if($office_id){
|
|
$count_query->where('office_id',$office_id);
|
|
$detail_query->where('office_id',$office_id);
|
|
}
|
|
|
|
if(strlen($diet_type) > 0){
|
|
$count_query->where('diet_type',$diet_type);
|
|
$detail_query->where('diet_type',$diet_type);
|
|
}
|
|
if(strlen($food_type) > 0){
|
|
$count_query->where('food_type',$food_type);
|
|
$detail_query->where('food_type',$food_type);
|
|
}
|
|
|
|
$count = $count_query->select(
|
|
DB::raw('count(if(diet_type =0 and status in (1,2,3,4,6),1,null)) as lunch_num'),
|
|
DB::raw('count(if(diet_type =1 and status in (1,2,3,4,6),1,null)) as dinner_num'),
|
|
DB::raw('sum(if(food_type =0 and status in (1,2,3,4,6),num,0)) as trim_num'),
|
|
DB::raw('sum(if(food_type =1 and status in (1,2,3,4,6),num,0)) as clean_num'),
|
|
DB::raw('count(if(food_type =0 and status in (1,2,3),1,null)) as trim_not_take_num'),
|
|
DB::raw('count(if(food_type =1 and status in (1,2,3),1,null)) as clean_not_take_num'),
|
|
DB::raw('FORMAT(AVG(star),2) as avg_star')
|
|
)->get();
|
|
|
|
//按房间号统计数据
|
|
$detail_count = $detail_query->select(
|
|
DB::raw('office_id'),
|
|
DB::raw('count(if(diet_type =0 and status in (1,2,3,4,6),1,null)) as lunch_num'),
|
|
DB::raw('count(if(diet_type =1 and status in (1,2,3,4,6),1,null)) as dinner_num'),
|
|
DB::raw('sum(if(food_type =0 and status in (1,2,3,4,6),num,0)) as trim_num'),
|
|
DB::raw('sum(if(food_type =1 and status in (1,2,3,4,6),num,0)) as clean_num'),
|
|
DB::raw('count(if(food_type =0 and status in (1,2,3),1,null)) as trim_not_take_num'),
|
|
DB::raw('count(if(food_type =1 and status in (1,2,3),1,null)) as clean_not_take_num'),
|
|
)->groupBy('office_id')
|
|
->get();
|
|
|
|
foreach ($detail_count as $detail){
|
|
$detail->office_name = Office::where('id',$detail->office_id)->value('office_name');
|
|
}
|
|
$count = $count[0] ?? [];
|
|
return $this->success('ok', compact('count','detail_count'));
|
|
}catch (\Exception $e) {
|
|
Log::error('getRestaurantDataStat:' . $e->getMessage());
|
|
return $this->failure('查询失败');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 订餐是否开启通知开关
|
|
* @param Request $request
|
|
* @return \Illuminate\Http\JsonResponse|void
|
|
*/
|
|
public function setRestaurantSwitch(Request $request){
|
|
try {
|
|
$user = auth()->user();
|
|
$status = $request->input('status',0);
|
|
Redis::hset(Restaurant::REDIS_SEND_SWITCH,$user->id,$status);
|
|
return $this->success('ok');
|
|
}catch (\Exception $e){
|
|
Log::error('restaurantSwitch:' . $e->getMessage());
|
|
return $this->failure('切换失败');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 删除餐饮相关数据
|
|
* @return \Illuminate\Http\JsonResponse|void
|
|
*/
|
|
public function deleteRestaurantData(){
|
|
try {
|
|
Db::table('chef_user')->delete();
|
|
Db::table('chef_plan')->delete();
|
|
Db::table('restaurant')->delete();
|
|
Db::table('restaurant_order')->delete();
|
|
Db::table('restaurant_order_refund')->delete();
|
|
return $this->success('ok');
|
|
}catch (\Exception $e){
|
|
return $this->failure('删除失败');
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
*更新订餐状态
|
|
*/
|
|
public function updateRestaurantStatus(){
|
|
$date = '2023-09-15';
|
|
$ids = [304,157,152,7,449];
|
|
Restaurant::where('date','>',$date)->whereIn('user_id',$ids)->update(['status'=>0]);
|
|
return $this->success('ok');
|
|
}
|
|
|
|
/**
|
|
* 扫码取餐 status 0:未订餐 1:订餐了,但是还没到取餐时间 2:已过取餐时间 3:取餐成功 4:已取餐,无需重复取餐
|
|
* @return \Illuminate\Http\JsonResponse|void
|
|
*/
|
|
public function takeRestaurant(Request $request){
|
|
try {
|
|
$user = auth()->user();
|
|
$date = date('Y-m-d');
|
|
|
|
//如果时间小于下午2点,则查询午餐订餐
|
|
$minute = date('H:i');
|
|
if($minute <= Restaurant::LUNCH_TAKE_FINAL_TIME){
|
|
$restaurant = Restaurant::where('user_id',$user->id)
|
|
->where('date',$date)
|
|
->where('diet_type',Restaurant::DIET_TYPE_LUNCH)
|
|
->whereIn('status',Restaurant::STATUS_ARR)
|
|
->first();
|
|
}else{
|
|
$restaurant = Restaurant::where('user_id',$user->id)
|
|
->where('date',$date)
|
|
->where('diet_type',Restaurant::DIET_TYPE_DINNER)
|
|
->whereIn('status',Restaurant::STATUS_ARR)
|
|
->first();
|
|
}
|
|
|
|
if(empty($restaurant)){
|
|
return $this->success('ok',['status'=>0]);
|
|
}
|
|
|
|
if($restaurant->status == Restaurant::STATUS_TAKE){
|
|
return $this->success('ok',['status'=>4]);
|
|
}
|
|
|
|
if($restaurant->diet_type == Restaurant::DIET_TYPE_LUNCH && $minute <= Restaurant::LUNCH_TAKE_FINAL_TIME){
|
|
if($minute < Restaurant::LUNCH_TAKE_START_TIME){
|
|
return $this->success('ok',['status'=>1]);
|
|
}elseif($minute > Restaurant::LUNCH_TAKE_END_TIME){
|
|
return $this->success('ok',['status'=>2]);
|
|
}
|
|
}else{
|
|
if($minute < Restaurant::DINNER_TAKE_START_TIME){
|
|
return $this->success('ok',['status'=>1]);
|
|
}elseif ($minute > Restaurant::DINNER_TAKE_END_TIME){
|
|
return $this->success('ok',['status'=>2]);
|
|
}
|
|
}
|
|
Restaurant::where('user_id',$user->id)
|
|
->where('date',$date)
|
|
->where('diet_type',$restaurant->diet_type)
|
|
->whereIn('status',[Restaurant::STATUS_PAY,Restaurant::STATUS_WAIT,Restaurant::STATUS_FINISHED])
|
|
->update(['status'=>Restaurant::STATUS_TAKE]);
|
|
|
|
return $this->success('ok',['status'=>3]);
|
|
}catch (\Exception $e){
|
|
return $this->failure('删除失败');
|
|
}
|
|
}
|
|
}
|