723 lines
34 KiB
PHP
723 lines
34 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\H5;
|
|
|
|
use App\Events\OperationLoggedEvent;
|
|
use App\Facades\CommonService;
|
|
use App\Facades\GuideService;
|
|
use App\Facades\TaskService;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Response\ResponseJson;
|
|
use App\Jobs\AddErrorLog;
|
|
use App\Models\DmaProcess;
|
|
use App\Models\DmaProcessLog;
|
|
use App\Models\Food;
|
|
use App\Models\Group;
|
|
use App\Models\Guide;
|
|
use App\Models\GuideHint;
|
|
use App\Models\GuideScheme;
|
|
use App\Models\GuideTemplate;
|
|
use App\Models\Order;
|
|
use App\Models\S2RealObject;
|
|
use App\Models\S2ShopSku;
|
|
use App\Models\ServiceRole;
|
|
use App\Models\ServiceRoleUser;
|
|
use App\Models\ServiceUser;
|
|
use App\Services\ChatService;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Log;
|
|
use Illuminate\Support\Facades\Redis;
|
|
|
|
class GuideController extends Controller
|
|
{
|
|
use ResponseJson;
|
|
|
|
public function guides(Request $request)
|
|
{
|
|
Log::info($request->all());
|
|
$date_arr = null;
|
|
$guides = [];
|
|
$nutrient = null;
|
|
$scheme_status = GuideScheme::GUIDE_STATUS_YES;
|
|
$chat_id = $request->input('chat_id');
|
|
Log::info("guides餐单群id---$chat_id");
|
|
$group = $request->group;
|
|
$order = $request->group->order;
|
|
if (empty($order))
|
|
return $this->success('ok', compact('date_arr', 'guides', 'nutrient'));
|
|
if (empty($group->order->user))
|
|
return $this->failure('该群未绑定实际用户订单');
|
|
Log::info("订单id:" . $order->id);
|
|
$user = $order->user;
|
|
// if ($order->status == 'NOTSTART') {
|
|
// $nutrient = json_decode($user->userInfo->nutrient);
|
|
// } else {
|
|
$date = $request->input('date');
|
|
$role = $request->input('role');
|
|
|
|
$scheme = GuideScheme::where("order_id", $order->id)->exists();
|
|
if (!$scheme) {
|
|
return $this->failure("方案未设置,请先设置方案");
|
|
}
|
|
|
|
//获取明天日期
|
|
$today = date('Y-m-d');
|
|
$tomorrow = date('Y-m-d', strtotime($today . ' +1 day'));
|
|
|
|
$start_date = date('Y-m-01', strtotime($date));
|
|
$end_date = date('Y-m-d', strtotime("$start_date + 1 month -1 day"));
|
|
|
|
//如果是用户端,则只返回到明天的数据
|
|
$query = Guide::query()->where('order_id', $order->id);
|
|
if ($role == 0) {
|
|
// $query->where('phase_date', '<=',$tomorrow);
|
|
}
|
|
$query->whereBetween("phase_date", [$start_date, $end_date]);
|
|
$guides = $query->orderBy('phase_date', 'asc')->get();
|
|
|
|
$dates = $guides->pluck('phase_date')->toArray();
|
|
$dailies = CommonService::daliy($start_date, $end_date);
|
|
$date_arr = [];
|
|
foreach ($dailies as $daily) {
|
|
$status = GuideService::getGuideStatus($daily, $guides, $dates);
|
|
if ($role == 0 && $daily > $tomorrow) {
|
|
$status = 0;
|
|
}
|
|
Log::info($daily . "----" . $status);
|
|
$date_arr[] = $status;
|
|
}
|
|
|
|
if (empty($order->scheme)) {
|
|
$scheme_status = GuideScheme::GUIDE_STATUS_NO;
|
|
return $this->success('ok', compact('scheme_status'));
|
|
}
|
|
//获取量
|
|
[$guides, $scheme_food, $flag] = GuideService::getQuantity($order->scheme->scheme, $guides);
|
|
// }
|
|
foreach ($guides as $guide) {
|
|
if (!empty($guide->hint)) {
|
|
continue;
|
|
}
|
|
$type = GuideTemplate::TYPE_STR_ARR[$guide->phase_title] ?? 0;
|
|
$hint = GuideHint::GetHint($type);
|
|
$guide->hint = json_decode($hint, true);
|
|
}
|
|
//返回餐单模板状态
|
|
$template = GuideTemplate::where('order_id', $order->id)->first();
|
|
$template_is_check = GuideTemplate::NOT_EXIST;
|
|
if (!empty($template)) {
|
|
$template_is_check = GuideTemplate::NOT_CHECK;
|
|
if (!empty($template->effect_guide)) {
|
|
$template_is_check = GuideTemplate::IS_CHECK;
|
|
}
|
|
}
|
|
$clean_count = Guide::where("order_id", $order->id)->where("phase_title", "清洁日")->count();
|
|
$trim_count = Guide::where("order_id", $order->id)->where("phase_title", "装修日")->count();
|
|
$prepare_count = Guide::where("order_id", $order->id)->where("phase_title", "准备日")->count();
|
|
|
|
// $log = DmaProcessLog::where("order_id",$order->id)
|
|
// ->whereIn("key_name",["set_guide_template","save_guide","check_guide","set_date_guide","send_date_guide"])
|
|
// ->orderByDesc("id")
|
|
// ->get();
|
|
Log::info($date_arr);
|
|
return $this->success('ok', compact('date_arr', 'guides', 'nutrient', 'flag', 'template_is_check', 'scheme_status', 'clean_count', 'trim_count', 'prepare_count'));
|
|
}
|
|
|
|
|
|
public function deleteOrderGuide(Request $request, Guide $guide)
|
|
{
|
|
$guide->delete();
|
|
return $this->success('ok');
|
|
}
|
|
|
|
public function addOrderGuide(Request $request)
|
|
{
|
|
// $work_user = session('work_wechat_user');
|
|
// if (empty($work_user)) return $this->failure('未授权企业微信用户');
|
|
// if (!isset($work_user['raw']['userid'])) return $this->failure("请使用企业微信扫码绑定");
|
|
// $work_user_id = $work_user['raw']['userid'];
|
|
// $service_user = ServiceUser::where("work_user_id", $work_user_id)->first();
|
|
// $service_role_user = ServiceRoleUser::where("s_user_id", $service_user->id)->where('role_id',ServiceRole::CUSTOMER)->first();
|
|
// if(empty($service_role_user)){
|
|
// return $this->failure('请使用客服角色');
|
|
// }
|
|
$order = $request->group->order;
|
|
$phase_date = $request->input('phase_date');
|
|
if (empty($phase_date))
|
|
return $this->failure("请选择日期");
|
|
$phase_title = $request->input("phase_title");
|
|
if (empty($phase_title))
|
|
return $this->failure("请输入名称");
|
|
$menu = $request->input('menu') ?: [];
|
|
// if (empty($menu)) return $this->failure("请输入餐单信息");
|
|
$hint = $request->input('hint') ?: [];
|
|
$is_exists = $order->guides()->where('phase_date', $phase_date)->exists();
|
|
// if ($is_exists) return $this->failure("当前日期餐单已存在");
|
|
$guide = $order->guides()->create(['user_id' => $order->user_id, 'phase_date' => $phase_date, 'phase_title' => $phase_title, 'menu' => json_encode($menu, JSON_UNESCAPED_UNICODE), 'hint' => json_encode($hint, JSON_UNESCAPED_UNICODE), 'status' => Guide::STATUS_REVIEW]);
|
|
|
|
$chatService = new ChatService();
|
|
$chatService->sendImMsgUserToUser($order->id, '系统通知', $order->name . '餐单已编辑,待审核', 'https://image.fulllinkai.com/202403/29/dea3e0c27107cdf178635d2a41199e5e.png', config('app.url') . '/work/#/h5/appEditUserMenu', [ServiceRole::MAIN_COACH, ServiceRole::COACH, ServiceRole::CUSTOMER]);
|
|
|
|
// 待办事项-主教练
|
|
$theme = "请审核餐单并设置「用户" . $order->name . "」的餐单日历";
|
|
TaskService::AddTask(0, 0, $theme, [1], $order->id);
|
|
return $this->success('ok', $guide);
|
|
}
|
|
|
|
/**
|
|
* 审核餐单信息
|
|
* @param Request $request
|
|
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
|
|
*/
|
|
public function checkGuide(Request $request)
|
|
{
|
|
$id = $request->get('id');
|
|
if (empty($id))
|
|
return $this->failure('id不为空');
|
|
$guide = Guide::where('id', $id)->first();
|
|
if (empty($guide))
|
|
return $this->failure('餐单不存在');
|
|
$guide->status = Guide::STATUS_SCHEDULED;
|
|
$guide->save();
|
|
|
|
//发送餐单信息
|
|
$chatService = new ChatService();
|
|
$params = [];
|
|
$params['phase_date'] = $guide->phase_date;
|
|
$chatService->sendGroupMsg($guide->user_id, '方案信息', '系统已为您生成好订单方案,请点击查看详情', 'https://image.fulllinkai.com/202311/27/fd67ab8389d4ff1c5832ddda72cd0dc1.png', 'yfheal://app/push/MineMenu', $params);
|
|
|
|
$order = $request->group->order;
|
|
$chatService->sendImMsgUserToUser($guide->order_id, '系统通知', $order->name . '餐单审核完毕,待发送', 'https://image.fulllinkai.com/202403/29/dea3e0c27107cdf178635d2a41199e5e.png', '', [ServiceRole::MAIN_COACH, ServiceRole::COACH, ServiceRole::CUSTOMER]);
|
|
return $this->success('ok');
|
|
}
|
|
|
|
/**
|
|
* 复制最近一次餐单
|
|
* @param Request $request
|
|
*/
|
|
public function copyOrderGuide(Request $request)
|
|
{
|
|
$order = $request->group->order;
|
|
$phase_date = $request->input('phase_date');
|
|
if (empty($phase_date))
|
|
return $this->failure("请选择日期");
|
|
|
|
$date = date('Y-m-d');
|
|
if ($phase_date < $date) {
|
|
return $this->failure("创建餐单时间不得小于当天");
|
|
}
|
|
//判断该用户当天是否存在餐单
|
|
$is_exists = $order->guides()->where('user_id', $order->user_id)->where('phase_date', $phase_date)->exists();
|
|
if ($is_exists)
|
|
return $this->failure("当前日期餐单已存在");
|
|
$beforeGuide = $order->guides()->where('user_id', $order->user_id)->where('phase_date', '<', $phase_date)->orderByDesc('phase_date')->first();
|
|
if (!$beforeGuide) {
|
|
return $this->failure("不存在历史餐单,请先创建");
|
|
}
|
|
//复制历史最近一次餐单
|
|
$guide = $order->guides()->create(['user_id' => $order->user_id, 'phase_date' => $phase_date, 'phase_title' => $beforeGuide->phase_title, 'menu' => $beforeGuide->menu, 'hint' => $beforeGuide->hint, 'status' => Guide::STATUS_SCHEDULED]);
|
|
$guide->menu = json_decode($guide->menu, true);
|
|
$guide->hint = json_decode($guide->hint, true);
|
|
|
|
$chatService = new ChatService();
|
|
$chatService->sendImMsgUserToUser($order->id, '系统通知', $order->name . '餐单日历已设置完成', 'https://image.fulllinkai.com/202403/29/dea3e0c27107cdf178635d2a41199e5e.png', '', [ServiceRole::MAIN_COACH, ServiceRole::COACH, ServiceRole::CUSTOMER], [], [$request->input('service_user_id')]);
|
|
|
|
DmaProcessLog::addUserProcessLog($order->user_id ?? 0, $order->id ?? 0, 1, "set_date_guide", "设置餐单日历", $request->input('service_user_id'));
|
|
return $this->success('ok', $guide);
|
|
}
|
|
|
|
public function updateGuide(Request $request, Guide $guide)
|
|
{
|
|
$phase_date = $request->input('phase_date');
|
|
if ($phase_date) {
|
|
$is_exists = Guide::where('order_id', $guide->order_id)->where('phase_date', $phase_date)->where('id', '<>', $guide->id)->exists();
|
|
if ($is_exists)
|
|
return $this->failure("当前日期餐单已存在");
|
|
$guide->phase_date = $phase_date;
|
|
}
|
|
$phase_title = $request->input("phase_title");
|
|
if ($phase_title) {
|
|
$guide->phase_title = $phase_title;
|
|
}
|
|
$menu = $request->input('menu', []);
|
|
if ($request->has('menu')) {
|
|
$guide->menu = json_encode($menu, JSON_UNESCAPED_UNICODE);
|
|
}
|
|
$hint = $request->input('hint');
|
|
|
|
if (is_array($hint)) {
|
|
$guide->hint = json_encode($hint, JSON_UNESCAPED_UNICODE);
|
|
}
|
|
$guide->save();
|
|
return $this->success('ok');
|
|
}
|
|
|
|
public function orderScheme(Request $request)
|
|
{
|
|
$order = $request->group->order;
|
|
$scheme = $order->scheme ? $order->scheme->scheme : [];
|
|
|
|
$guides = Guide::where('order_id', $order->id)->orderBy('phase_date', 'asc')->get();
|
|
// dd($guides);
|
|
[$guides, $scheme_food] = GuideService::getQuantity($scheme, $guides);
|
|
|
|
foreach ($scheme as $item) {
|
|
$id = $item->id;
|
|
$item->remain_quantity = $scheme_food[$id]->remain_quantity ?? 0;
|
|
$item->rate = 100;
|
|
$item->quantity = $scheme_food[$id]->quantity ?? 0;
|
|
if ($item->quantity != 0) {
|
|
$item->rate = round($item->remain_quantity / $item->quantity, 2) * 100;
|
|
}
|
|
}
|
|
return $this->success('ok', $scheme);
|
|
}
|
|
|
|
/**
|
|
* 获取营养素和食物
|
|
* @param Request $request
|
|
*/
|
|
public function getOrderFood(Request $request)
|
|
{
|
|
try {
|
|
$order = $request->group->order;
|
|
//获取初始化营养素
|
|
$scheme = $order->scheme ? $order->scheme->scheme : [];
|
|
foreach ($scheme as $key => $item) {
|
|
$scheme[$key] = json_decode(json_encode($item), true);
|
|
// 修改类型为 'NUTRIENT'
|
|
$scheme[$key]['type'] = 'NUTRIENT';
|
|
// 如果存在 config 属性,则进行 JSON 解码
|
|
if (isset($scheme[$key]['config'])) {
|
|
$scheme[$key]['config'] = json_decode($scheme[$key]['config'], true);
|
|
} else {
|
|
$config = Food::where('id', $item->id)->value('config');
|
|
$scheme[$key]['config'] = json_decode($config, true);
|
|
}
|
|
}
|
|
$foods = Food::where('type', Food::TYPE_FOOD)->select('id', 'name', 'icon', 'unit', 'price', 'stock as num', 'type', 'config')->orderByDesc('id')->get()?->toArray();
|
|
foreach ($foods as $k => $v) {
|
|
if (empty($v['config'])) {
|
|
continue;
|
|
}
|
|
$foods[$k]['config'] = json_decode($v['config'], true);
|
|
}
|
|
// 合并 $scheme 和 $foods 数组
|
|
$result = array_merge($scheme, $foods);
|
|
return $this->success('ok', $result);
|
|
} catch (\Exception $e) {
|
|
AddErrorLog::dispatch('getOrderFood file:' . $e->getFile() . ' line:' . $e->getLine() . ' message:' . $e->getMessage())->onQueue('health');
|
|
return $this->failure('获取失败');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 写个接口更新旧的餐单没有id的情况
|
|
* @return \Illuminate\Http\JsonResponse|void
|
|
*/
|
|
public function updateOldGuides()
|
|
{
|
|
DB::beginTransaction();
|
|
try {
|
|
$guides = Guide::get();
|
|
//循环所有餐单数据
|
|
foreach ($guides as $guide) {
|
|
$guide_info = Guide::where('id', $guide->id)->first();
|
|
if (empty($guide_info)) {
|
|
continue;
|
|
}
|
|
$guide->menu = json_decode($guide->menu);
|
|
|
|
foreach ($guide->menu as $menu) {
|
|
//更新旧的营养素
|
|
foreach ($menu->nutrient as $nutrient) {
|
|
if (isset($nutrient->price)) {
|
|
continue;
|
|
}
|
|
$type_nutrient = Food::where('name', $nutrient->title)->where('type', 'NUTRIENT')->first();
|
|
if (!$type_nutrient) {
|
|
continue;
|
|
}
|
|
$nutrient->id = $type_nutrient->id;
|
|
$nutrient->price = $type_nutrient->price;
|
|
}
|
|
//更新旧的食物
|
|
foreach ($menu->food as $food) {
|
|
if (isset($food->price)) {
|
|
continue;
|
|
}
|
|
$type_food = Food::where('name', $food->title)->where('type', 'FOOD')->first();
|
|
if (!$type_food) {
|
|
continue;
|
|
}
|
|
$food->id = $type_food->id;
|
|
$food->price = $type_food->price;
|
|
}
|
|
}
|
|
$guide_info->menu = json_encode($guide->menu, JSON_UNESCAPED_UNICODE);
|
|
$guide_info->save();
|
|
}
|
|
DB::commit();
|
|
return $this->success('ok');
|
|
} catch (\Exception $e) {
|
|
DB::rollBack();
|
|
Log::error('updateOldGuides:' . $e->getMessage());
|
|
return $this->failure('更新失败');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 设置餐单模板
|
|
* @param Request $request
|
|
* @param $order_id
|
|
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
|
|
*/
|
|
public function setGuideTemplate(Request $request)
|
|
{
|
|
try {
|
|
$order = $request->group->order;
|
|
$service_user_id = $request->input("service_user_id");
|
|
// $auth_status = $order->orderAuthStatus($service_user_id, [ServiceRole::MAIN_COACH, ServiceRole::CUSTOMER]);
|
|
// if (empty($auth_status)) {
|
|
// return $this->failure("主教练、客服权限,您无权限操作");
|
|
// }
|
|
$map = [];
|
|
$prepare_guide = $request->input('prepare_guide');
|
|
$decoration_guide = $request->input('decoration_guide');
|
|
$clean_guide = $request->input('clean_guide');
|
|
|
|
$prepare_hint = $request->input('prepare_hint');
|
|
$decoration_hint = $request->input('decoration_hint');
|
|
$clean_hint = $request->input('clean_hint');
|
|
|
|
$prepare_step = $request->input("prepare_step", 10000);
|
|
$decoration_step = $request->input("decoration_step", 10000);
|
|
$clean_step = $request->input("clean_step", 10000);
|
|
|
|
$map[0]['type'] = GuideTemplate::TYPE_PREPARE;
|
|
$map[0]['init_guide'] = json_encode($prepare_guide);
|
|
$map[0]['hint'] = json_encode($prepare_hint);
|
|
$map[0]["step"] = $prepare_step;
|
|
$map[1]['type'] = GuideTemplate::TYPE_DECORATION;
|
|
$map[1]['init_guide'] = json_encode($decoration_guide);
|
|
$map[1]['hint'] = json_encode($decoration_hint);
|
|
$map[1]["step"] = $decoration_step;
|
|
$map[2]['type'] = GuideTemplate::TYPE_CLEAN;
|
|
$map[2]['init_guide'] = json_encode($clean_guide);
|
|
$map[2]['hint'] = json_encode($clean_hint);
|
|
$map[2]["step"] = $clean_step;
|
|
foreach ($map as $item) {
|
|
GuideTemplate::updateOrCreate(['order_id' => $order->id, 'type' => $item['type']], ['order_id' => $order->id, 'type' => $item['type'], 'init_guide' => $item['init_guide'], 'status' => GuideTemplate::STATUS_CLOSE, 'hint' => !empty($item['hint']) ? $item['hint'] : GuideHint::GetHint($item['type']), "step" => $item["step"]]);
|
|
}
|
|
|
|
$chatService = new ChatService();
|
|
$chatService->sendImMsgUserToUser($order->id, '系统通知', $order->name . '餐单已编辑,待审核', 'https://image.fulllinkai.com/202403/29/dea3e0c27107cdf178635d2a41199e5e.png', config('app.url') . '/work/#/h5/appEditUserMenu', [ServiceRole::MAIN_COACH, ServiceRole::CUSTOMER], [], []);
|
|
DmaProcessLog::addUserProcessLog($order->user_id ?? 0, $order->id ?? 0, 1, "set_guide_template", "编辑用户餐单", $request->input('service_user_id'));
|
|
DmaProcessLog::addUserProcessLog($order->user_id ?? 0, $order->id ?? 0, 1, "save_guide", "保存用户餐单", $request->input('service_user_id'));
|
|
DmaProcessLog::addUserProcessLog($order->user_id ?? 0, $order->id ?? 0, 1, "send_save_guide_msg", "系统发送餐单待审核通知", $request->input('service_user_id'), 5);
|
|
|
|
// 待办事项-主教练
|
|
$theme = "请审核餐单并设置「用户" . $order->name . "」的餐单日历";
|
|
TaskService::AddTask(0, 0, $theme, [1], $order->id);
|
|
return $this->success('ok');
|
|
} catch (\Exception $e) {
|
|
AddErrorLog::dispatch('setGuideTemplate file:' . $e->getFile() . ' line:' . $e->getLine() . ' message:' . $e->getMessage())->onQueue('health');
|
|
return $this->failure("设置失败");
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取餐单模板
|
|
* @param Request $request
|
|
* @param $order_id
|
|
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
|
|
*/
|
|
public function getGuideTemplate(Request $request)
|
|
{
|
|
try {
|
|
$order = $request->group->order;
|
|
|
|
$templates = GuideTemplate::where('order_id', $order->id)->select('init_guide', 'type', 'status', 'hint')->get()?->toArray();
|
|
|
|
//获取初始化营养素
|
|
$scheme = $order->scheme ? $order->scheme->scheme : [];
|
|
|
|
if (empty($scheme)) {
|
|
return $this->success('ok', []);
|
|
}
|
|
|
|
foreach ($scheme as $key => $item) {
|
|
$scheme[$key] = json_decode(json_encode($item), true);
|
|
// 修改类型为 'NUTRIENT'
|
|
$scheme[$key]['type'] = 'NUTRIENT';
|
|
// 如果存在 config 属性,则进行 JSON 解码
|
|
if (isset($scheme[$key]['config'])) {
|
|
$scheme[$key]['config'] = json_decode($scheme[$key]['config'], true);
|
|
$scheme[$key]['oneNum'] = isset($scheme[$key]['config'][0]["oneNum"]) ? $scheme[$key]['config'][0]["oneNum"] : 1;
|
|
} else {
|
|
$config = Food::where('id', $item->id)->value('config');
|
|
$scheme[$key]['config'] = json_decode($config, true);
|
|
$scheme[$key]['oneNum'] = isset($scheme[$key]['config'][0]["oneNum"]) ? $scheme[$key]['config'][0]["oneNum"] : 1;
|
|
}
|
|
}
|
|
$foods = Food::with("shopSpu")->where('type', Food::TYPE_FOOD)->orderByDesc('id')->get()?->toArray();
|
|
foreach ($foods as $k => $v) {
|
|
if (empty($v['config'])) {
|
|
continue;
|
|
}
|
|
$sku = S2ShopSku::where('id', $v["shop_spu"]["skuid"])->first();
|
|
$object = S2RealObject::where('id', $sku->real_id)->first();
|
|
$foods[$k]['name'] = $v["shop_spu"]["title"];
|
|
$foods[$k]['icon'] = $v["shop_spu"]["icon"];
|
|
$foods[$k]['price'] = ($sku->price ?? 0) / 100;
|
|
$foods[$k]['num'] = $object->stock ?? 0;
|
|
$foods[$k]['have_goods'] = 1;
|
|
unset($v["shop"]);
|
|
$foods[$k]['config'] = json_decode($v['config'], true);
|
|
$foods[$k]['oneNum'] = isset($foods[$k]['config'][0]["oneNum"]) ? $foods[$k]['config'][0]["oneNum"] : 1;
|
|
}
|
|
// 合并 $scheme 和 $foods 数组
|
|
$result = array_merge($scheme, $foods);
|
|
|
|
foreach ($result as &$value) {
|
|
$value['state'] = 0;
|
|
}
|
|
unset($value);
|
|
if (empty($templates)) {
|
|
$templates = [];
|
|
// 创建三条假数据
|
|
for ($i = 0; $i < 3; $i++) {
|
|
$template = [
|
|
'type' => $i,
|
|
'status' => GuideTemplate::STATUS_INIT,
|
|
'init_guide' => [
|
|
'list' => $result,
|
|
'menu' => null
|
|
],
|
|
'hint' => "",
|
|
];
|
|
$templates[] = $template;
|
|
}
|
|
} else {
|
|
foreach ($templates as &$template) {
|
|
$template['init_guide'] = $init_guide = json_decode($template['init_guide'], true);
|
|
$lookup = [];
|
|
if (count($init_guide) == 0 || !isset($init_guide["list"]))
|
|
continue;
|
|
foreach ($init_guide["list"] as $item) {
|
|
$lookup[$item['id']] = $item;
|
|
}
|
|
foreach ($result as &$item) {
|
|
if (isset($lookup[$item['id']])) {
|
|
// $item = array_merge($item, $lookup[$item['id']]);
|
|
$item = $lookup[$item['id']];
|
|
}
|
|
}
|
|
unset($item);
|
|
|
|
$template['init_guide']["list"] = $result;
|
|
}
|
|
}
|
|
unset($template);
|
|
return $this->success('ok', $templates);
|
|
} catch (\Exception $e) {
|
|
AddErrorLog::dispatch('setGuideTemplate file:' . $e->getFile() . ' line:' . $e->getLine() . ' message:' . $e->getMessage())->onQueue('health');
|
|
return $this->failure("设置失败");
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 审核餐单模板
|
|
* @param $order_id
|
|
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
|
|
*/
|
|
public function checkGuideTemplate(Request $request)
|
|
{
|
|
DB::beginTransaction();
|
|
try {
|
|
$order = $request->group->order;
|
|
$service_user_id = $request->input("service_user_id");
|
|
$auth_status = $order->orderAuthStatus($service_user_id, [ServiceRole::MAIN_COACH]);
|
|
if (empty($auth_status)) {
|
|
return $this->failure("主教练权限,您无权限操作");
|
|
}
|
|
$templates = GuideTemplate::where('order_id', $order->id)->get();
|
|
foreach ($templates as $template) {
|
|
$template->effect_guide = $template->init_guide;
|
|
$template->status = GuideTemplate::STATUS_OPEN;
|
|
$template->save();
|
|
}
|
|
//更新未来餐单
|
|
$this->updateFutureGuide($order->id);
|
|
|
|
DB::commit();
|
|
|
|
$chatService = new ChatService();
|
|
$chatService->sendImMsgUserToUser($order->id, '系统通知', $order->name . '餐单审核完毕', 'https://image.fulllinkai.com/202403/29/dea3e0c27107cdf178635d2a41199e5e.png', config('app.url') . '/work/#/h5/appEditUserMenu', [ServiceRole::COACH, ServiceRole::CUSTOMER], [], []);
|
|
|
|
DmaProcessLog::addUserProcessLog($order->user_id ?? 0, $order->id ?? 0, 1, "check_guide", "确定餐单内容", $request->input('service_user_id'));
|
|
return $this->success('ok');
|
|
} catch (\Exception $e) {
|
|
DB::rollBack();
|
|
AddErrorLog::dispatch('setGuideTemplate file:' . $e->getFile() . ' line:' . $e->getLine() . ' message:' . $e->getMessage())->onQueue('health');
|
|
return $this->failure("设置失败");
|
|
}
|
|
}
|
|
|
|
public function updateFutureGuide($order_id)
|
|
{
|
|
$date = date("Y-m-d");
|
|
$guide = Guide::where("order_id", $order_id)->where("phase_date", ">", $date)->get();
|
|
foreach ($guide as $item) {
|
|
$type = 0;
|
|
if ($item->phase_title == "装修日") {
|
|
$type = 1;
|
|
} elseif ($item->phase_title == "清洁日") {
|
|
$type = 2;
|
|
}
|
|
$template = GuideTemplate::where('order_id', $order_id)->where("type", $type)->first();
|
|
|
|
if (empty($template) || empty($template->effect_guide)) {
|
|
return $this->failure('模板不可用');
|
|
}
|
|
|
|
$effect_guide = json_decode($template->effect_guide, true);
|
|
|
|
$menu = $effect_guide['menu'] ?: [];
|
|
Guide::where("id", $item->id)->update(['menu' => json_encode($menu, JSON_UNESCAPED_UNICODE), 'hint' => !empty($template->hint) ? $template->hint : GuideHint::GetHint($type)]);
|
|
}
|
|
}
|
|
/**
|
|
* 根据餐单模板设置餐单
|
|
* @param Request $request
|
|
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
|
|
*/
|
|
public function setOrderGuide(Request $request)
|
|
{
|
|
$order = $request->group->order;
|
|
$service_user_id = $request->input("service_user_id");
|
|
// 限制条件- 群内主教练可操作
|
|
$auth_status = $order->orderAuthStatus($service_user_id, [ServiceRole::MAIN_COACH]);
|
|
if (empty($auth_status)) {
|
|
return $this->failure("主教练权限,您无权限操作");
|
|
}
|
|
$phase_date = $request->input('phase_date');
|
|
if (empty($phase_date))
|
|
return $this->failure("请选择日期");
|
|
$type = $request->input("type");
|
|
if (strlen($type) == 0)
|
|
return $this->failure("请输入名称");
|
|
$phase_title = GuideTemplate::TYPE_ARR[$type];
|
|
|
|
$guide = Guide::where('order_id', $order->id)->where('phase_date', $phase_date)->first();
|
|
|
|
$guide_template = GuideTemplate::where('order_id', $order->id)->where('type', $type)->first();
|
|
if (empty($guide_template) || empty($guide_template->effect_guide)) {
|
|
return $this->failure('模板不可用');
|
|
}
|
|
$effect_guide = json_decode($guide_template->effect_guide, true);
|
|
|
|
$menu = $effect_guide['menu'] ?: [];
|
|
$hint = !empty($guide_template->hint) ? $guide_template->hint : GuideHint::GetHint($type);
|
|
if (!empty($guide)) {
|
|
$guide->phase_title = $phase_title;
|
|
$guide->menu = json_encode($menu, JSON_UNESCAPED_UNICODE);
|
|
$guide->hint = $hint;
|
|
$guide->save();
|
|
} else {
|
|
$guide = $order->guides()->create(['user_id' => $order->user_id, 'phase_date' => $phase_date, 'phase_title' => $phase_title, 'menu' => json_encode($menu, JSON_UNESCAPED_UNICODE), 'hint' => $hint, 'status' => Guide::STATUS_SCHEDULED]);
|
|
}
|
|
|
|
//发送餐单信息
|
|
// $chatService = new ChatService();
|
|
// $params = [];
|
|
// $params['phase_date'] = $guide->phase_date;
|
|
// $chatService->sendGroupMsg($guide->user_id, '方案信息', '系统已为您生成好订单方案,请点击查看详情', 'https://image.fulllinkai.com/202311/27/fd67ab8389d4ff1c5832ddda72cd0dc1.png', 'yfheal://app/push/MineMenu', $params);
|
|
|
|
// $redis = Redis::client();
|
|
// $redis_guide = $redis->get('set_guide');
|
|
// if(!$redis_guide){
|
|
// $redis->set('set_guide',1,5*60);
|
|
//
|
|
// $chatService = new ChatService();
|
|
// $chatService->sendImMsgUserToUser($order->id, '系统通知', $order->name . '餐单日历已设置完成', 'https://image.fulllinkai.com/202403/29/dea3e0c27107cdf178635d2a41199e5e.png', '', [ServiceRole::MAIN_COACH,ServiceRole::COACH,ServiceRole::CUSTOMER]);
|
|
//
|
|
// DmaProcessLog::addUserProcessLog($order->user_id??0,$order->id??0,1,"set_date_guide","设置餐单日历",$request->input('service_user_id'));
|
|
// DmaProcessLog::addUserProcessLog($order->user_id??0,$order->id??0,1,"system_send_date_guide","系统发送餐单待发送通知",$request->input('service_user_id'));
|
|
//
|
|
// }
|
|
|
|
$chatService = new ChatService();
|
|
$chatService->sendImMsgUserToUser($order->id, '系统通知', $order->name . '餐单日历已设置完成', 'https://image.fulllinkai.com/202403/29/dea3e0c27107cdf178635d2a41199e5e.png', '', [ServiceRole::MAIN_COACH, ServiceRole::COACH, ServiceRole::CUSTOMER], [], [$request->input('service_user_id')]);
|
|
|
|
DmaProcessLog::addUserProcessLog($order->user_id ?? 0, $order->id ?? 0, 1, "set_date_guide", "设置餐单日历", $request->input('service_user_id'));
|
|
DmaProcessLog::addUserProcessLog($order->user_id ?? 0, $order->id ?? 0, 1, "system_send_date_guide", "系统发送餐单待发送通知", $request->input('service_user_id'), 5);
|
|
|
|
$guide->menu = $effect_guide['menu'] ?? [];
|
|
return $this->success('ok', $guide);
|
|
}
|
|
|
|
/**
|
|
* 根据餐单模板批量设置餐单
|
|
* @param Request $request
|
|
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
|
|
*/
|
|
public function batchSetOrderGuide(Request $request)
|
|
{
|
|
$order = $request->group->order;
|
|
$service_user_id = $request->input("service_user_id");
|
|
// 限制条件- 群内主教练可操作
|
|
$auth_status = $order->orderAuthStatus($service_user_id, [ServiceRole::MAIN_COACH]);
|
|
if (empty($auth_status)) {
|
|
return $this->failure("主教练权限,您无权限操作");
|
|
}
|
|
$guide_arr = $request->input("guide_arr");
|
|
$is_send = $request->input("is_send");
|
|
|
|
$month = $request->input("month");
|
|
$today = date("Y-m-d");
|
|
Guide::where('order_id', $order->id)->where('phase_date', ">", $today)->where("phase_date", "like", $month . "%")->delete();
|
|
|
|
foreach ($guide_arr as $item) {
|
|
$phase_title = GuideTemplate::TYPE_ARR[$item["type"]];
|
|
|
|
$guide = Guide::where('order_id', $order->id)->where('phase_date', $item["date"])->first();
|
|
|
|
$guide_template = GuideTemplate::where('order_id', $order->id)->where('type', $item["type"])->first();
|
|
if (empty($guide_template) || empty($guide_template->effect_guide)) {
|
|
return $this->failure('模板不可用');
|
|
}
|
|
$effect_guide = json_decode($guide_template->effect_guide, true);
|
|
$hint = !empty($guide_template->hint) ? $guide_template->hint : GuideHint::GetHint($item["type"]);
|
|
|
|
$menu = $effect_guide['menu'] ?: [];
|
|
if (!empty($guide)) {
|
|
$guide->phase_title = $phase_title;
|
|
$guide->menu = json_encode($menu, JSON_UNESCAPED_UNICODE);
|
|
$guide->hint = $hint;
|
|
$guide->save();
|
|
} else {
|
|
$guide = $order->guides()->create(['user_id' => $order->user_id, 'phase_date' => $item["date"], 'phase_title' => $phase_title, 'menu' => json_encode($menu, JSON_UNESCAPED_UNICODE), 'hint' => $hint, 'status' => Guide::STATUS_SCHEDULED]);
|
|
}
|
|
|
|
$guide->menu = $effect_guide['menu'] ?? [];
|
|
}
|
|
|
|
|
|
//发送餐单信息
|
|
// $chatService = new ChatService();
|
|
// $params = [];
|
|
// $params['phase_date'] = $guide->phase_date;
|
|
// $chatService->sendGroupMsg($guide->user_id, '方案信息', '系统已为您生成好订单方案,请点击查看详情', 'https://image.fulllinkai.com/202311/27/fd67ab8389d4ff1c5832ddda72cd0dc1.png', 'yfheal://app/push/MineMenu', $params);
|
|
|
|
if ($is_send) {
|
|
$chatService = new ChatService();
|
|
$chatService->sendImMsgUserToUser($order->id, '系统通知', $order->name . '餐单日历已设置完成', 'https://image.fulllinkai.com/202403/29/dea3e0c27107cdf178635d2a41199e5e.png', '', [ServiceRole::MAIN_COACH, ServiceRole::COACH, ServiceRole::CUSTOMER], [], [$request->input('service_user_id')]);
|
|
DmaProcessLog::addUserProcessLog($order->user_id ?? 0, $order->id ?? 0, 1, "set_date_guide", "设置餐单日历", $request->input('service_user_id'));
|
|
DmaProcessLog::addUserProcessLog($order->user_id ?? 0, $order->id ?? 0, 1, "system_send_date_guide", "系统发送餐单待发送通知", $request->input('service_user_id'), 5);
|
|
}
|
|
return $this->success('ok');
|
|
}
|
|
}
|