ufutx.dma/app/Http/Controllers/App/ChatController.php
2026-03-17 16:16:28 +08:00

893 lines
44 KiB
PHP
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
namespace App\Http\Controllers\App;
use App\Facades\TaskService;
use App\Http\Controllers\Controller;
use App\Http\Response\ResponseJson;
use App\Jobs\AddErrorLog;
use App\Jobs\SyncMessage;
use App\Models\Band;
use App\Models\DmaProcess;
use App\Models\DmaProcessLog;
use App\Models\Group;
use App\Models\GroupUser;
use App\Models\Guide;
use App\Models\GuideHint;
use App\Models\GuideTemplate;
use App\Models\Order;
use App\Models\QuickReply;
use App\Models\S2ApiLog;
use App\Models\ServiceRole;
use App\Models\ServiceRoleOrder;
use App\Models\User;
use App\Services\ImMessageService;
use App\Services\YunXinMessageCallBack\YunXinMessageCallBackService;
use cccdl\yunxin_sdk\Exception\cccdlException;
use cccdl\yunxin_sdk\Im\CallBack;
use cccdl\yunxin_sdk\Im\Msg;
use cccdl\yunxin_sdk\Im\Team;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Redis;
class ChatController extends Controller
{
use ResponseJson;
/**
* 发送消息过滤
* @param Request $request
* @return \Illuminate\Http\JsonResponse|void
*/
public function filterMessage(Request $request, ImMessageService $imService)
{
try {
$user = auth()->user();
$type = $request->input('type');
if (!$type)
return $this->failure('参数错误');
$content = $request->input('content');
if (!strlen($content))
return $this->failure('文本不能为空');
$imService->type = $type;
$imService->content = $content;
$imService->user = $user;
return $this->success('ok', $imService->send());
} catch (\Exception $e) {
Log::error('filterMessage:' . $e->getMessage());
return $this->failure($e->getMessage());
}
}
/**
* 消息回调
* @param Request $request
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
*/
public function chatCallback(Request $request, YunXinMessageCallBackService $s)
{
try {
$c = new CallBack(config('chat.im.app_id'), config('chat.im.app_secret'));
$c->notify();
// $s->handle();
$param = $request->all();
SyncMessage::dispatch($param)->onQueue("sync.message");
return $this->success('ok');
} catch (\Exception $e) {
Log::error('chatCallback:' . $e->getMessage());
return $this->failure($e->getMessage());
}
}
/**
* 获取订单服务人员
* @param Request $request
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
*/
public function getServiceUser(Request $request)
{
try {
$user = auth()->user();
$order = Order::where('user_id', $user->id)->orderByDesc('id')->first();
if (empty($order)) {
return $this->failure('订单不存在');
}
$service_user = ServiceRoleOrder::with('partnerUser')->where('order_id', $order->id)->get();
return $this->success('ok', $service_user);
} catch (\Exception $e) {
Log::error('getServiceUser:' . $e->getMessage());
return $this->failure($e->getMessage());
}
}
/**
* 群聊详情
* @param Request $request
* @param $group_id
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
*/
public function groupInfo(Request $request, $group_id)
{
try {
$user = auth()->user();
$group = Group::query()->with(['users', 'order'])->find($group_id)?->toArray();
if (!$group) {
return $this->failure('群聊不存在');
}
//我在本群的昵称
$nickname = GroupUser::query()
->where('user_id', $user->id)
->where('group_id', $group_id)
->value('nickname');
$group['self']['nickname'] = $nickname ?: User::query()->where('id', $user->id)->value('name');
$group['role_list'] = ServiceRoleOrder::with('role')->where('order_id', $group['order_id'])->where('user_id', $user->id)->get();
return $this->success('ok', $group);
} catch (\Exception $e) {
Log::error('groupInfo:' . $e->getMessage());
return $this->failure($e->getMessage());
}
}
/**
* 群聊详情
* @param Request $request
* @param $group_id
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
*/
public function getGroupInfo(Request $request)
{
// try {
$user = auth()->user();
$im_chat_id = $request->get('im_chat_id');
$group = Group::query()->with(['users', 'order'])->where('im_chat_id', $im_chat_id)->first()?->toArray();
if (!$group) {
return $this->failure('群聊不存在');
}
//我在本群的昵称
$groupUser = GroupUser::query()
->where('user_id', $user->id)
->where('group_id', $group['id'])
->first();
if (empty($groupUser))
return $this->failure("群聊不存在");
$group['self']['nickname'] = $groupUser->nickname ?: User::query()->where('id', $user->id)->value('name');
$group['self']['comment'] = $groupUser->comment;
$group['role_list'] = ServiceRoleOrder::with('role')->where('order_id', $group['order_id'])->where('user_id', $user->id)->get();
if (isset($group['users']) && is_array($group['users'])) {
foreach ($group['users'] as &$userItem) { // 使用引用来更新原始数组
if (is_array($userItem) && isset($userItem['id'])) {
$userItem['role_list'] = ServiceRoleOrder::with('role')
->where('order_id', $group['order_id'])
->where('user_id', $userItem['id'])
->get();
$userItem['ac_cid'] = make_wangyiyun_accid($userItem['id']);
// $userItem['mobile'] = substr($userItem['mobile'], 0, 3) . str_repeat('*', strlen($userItem['mobile']) - 3);
$userItem['mobile'] = str_repeat('*', strlen($userItem['mobile']));
}
}
}
// 当前用户id
$group_user_id = 0;
if ($group["service_type"] == 1) {
$group_user_id = $group["order"]["user_id"];
} else if ($group["service_type"] == 2) {
$group_user_id = Group::getGroupUserId($group["id"]);
}
$key = "user:" . $group_user_id . ":device_info";
// 服务对象设备信息
$device_info = Redis::get($key);
Log::info($key);
Log::info($device_info);
if (empty($device_info)) {
$device_info = ["version" => [], "phone_model" => [], "system_version" => [], "source" => []];
$log = S2ApiLog::where("user_id", $group_user_id)->orderBy("id", "desc")->first();
if ($log && $log->header) {
$headers = json_decode($log->header, true);
$device_info['version'] = $headers["Version"] ?? [];
$device_info['phone_model'] = $headers["Phone-Model"] ?? [];
$device_info['system_version'] = $headers["System-Version"] ?? [];
$device_info['source'] = $headers["Source"] ?? [];
}
$device_info_str = json_encode($device_info);
Redis::setex($key, 1 * 60 * 60, $device_info_str);
} else {
$device_info = json_decode($device_info, true);
}
$group["device_info"] = $device_info;
// 电量
$group["band_battery"] = null;
$group["band_name"] = null;
$group["band_timestamp"] = null;
$band = Band::where("user_id", $group_user_id)->orderByDesc("id")->first();
if ($band) {
$history = DB::table("battery_history")->where("band_id", $band->id)->orderByDesc("timestamp")->first();
$group["band_battery"] = $history ? $history->battery_percentage : null;
$group['band_timestamp'] = $history ? $history->timestamp : null;
$group["band_name"] = $band->name;
}
return $this->success('ok', $group);
// } catch (\Exception $e) {
// Log::error('groupInfo:' . $e->getMessage());
// return $this->failure($e->getMessage());
// }
}
/**
* 修改用户在群聊的昵称
* @param Request $request
* @param $group_id
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function updateGroupUserNickname(Request $request, $group_id)
{
try {
$user = auth()->user();
$nickname = $request->input('nickname');
if (!strlen($nickname)) {
return $this->failure('昵称不能为空');
}
$group = Group::query()->find($group_id);
if (!$group) {
return $this->failure('群聊不存在');
}
$group_user = GroupUser::query()
->where('user_id', $user->id)
->where('group_id', $group_id)
->first();
if (!$group_user) {
return $this->failure('不在该群聊');
}
if ($group_user->nickname == $nickname) {
return $this->success('ok');
}
//同步
$imTeam = new Team(config('chat.im.app_id'), config('chat.im.app_secret'));
$owner_accid = make_wangyiyun_accid($group->owner_id);
$user_accid = make_wangyiyun_accid($user->id);
$options = ['nick' => $nickname];
$imTeam->updateTeamNick($group->im_chat_id, $owner_accid, $user_accid, $options);
$group_user->nickname = $nickname;
$group_user->save();
return $this->success('ok');
} catch (\Exception $e) {
Log::error('updateGroupUserNickname:' . $e->getMessage());
return $this->failure($e->getMessage());
}
}
public function addQuickReply(Request $request)
{
try {
$user = auth()->user();
$content = $request->input('content');
$map = [];
$map['user_id'] = $user->id;
$map['content'] = $content;
QuickReply::create($map);
return $this->success('ok');
} catch (\Exception $e) {
AddErrorLog::dispatch('addQuickReply file:' . $e->getFile() . ' line:' . $e->getLine() . ' message:' . $e->getMessage())->onQueue('health');
return $this->failure("添加失败");
}
}
public function getQuickReply(Request $request)
{
try {
$user = auth()->user();
$keyword = $request->input('keyword');
$query = QuickReply::query();
$query->where('user_id', $user->id);
$query->when($keyword, function ($sql) use ($keyword) {
$sql->where('content', 'like', '%' . $keyword . '%');
});
$list = $query->orderByDesc('id')->paginate();
return $this->success('ok', $list);
} catch (\Exception $e) {
AddErrorLog::dispatch('getQuickReply file:' . $e->getFile() . ' line:' . $e->getLine() . ' message:' . $e->getMessage())->onQueue('health');
return $this->failure("获取失败");
}
}
public function getQuickReplyDetail($id)
{
try {
$detail = QuickReply::find($id);
return $this->success('ok', $detail);
} catch (\Exception $e) {
AddErrorLog::dispatch('getQuickReplyDetail file:' . $e->getFile() . ' line:' . $e->getLine() . ' message:' . $e->getMessage())->onQueue('health');
return $this->failure("获取失败");
}
}
public function deleteQuickReply($id)
{
try {
QuickReply::where('id', $id)->delete();
return $this->success('ok');
} catch (\Exception $e) {
AddErrorLog::dispatch('deleteQuickReply file:' . $e->getFile() . ' line:' . $e->getLine() . ' message:' . $e->getMessage())->onQueue('health');
return $this->failure("删除失败");
}
}
public function updateQuickReply(Request $request, $id)
{
try {
$detail = QuickReply::find($id);
$content = $request->input('content');
$detail->content = $content;
$detail->save();
return $this->success('ok');
} catch (\Exception $e) {
AddErrorLog::dispatch('updateQuickReply file:' . $e->getFile() . ' line:' . $e->getLine() . ' message:' . $e->getMessage())->onQueue('health');
return $this->failure("更新失败");
}
}
public function sendImVideo(Request $request)
{
$user = auth()->user();
$user_id = make_wangyiyun_accid($user->id);
$chat_id = $request->input('chat_id');
$type = $request->input("type");
//发送群消息
$imMsg = new Msg(config('chat.im.app_id'), config('chat.im.app_secret'));
$group = Group::query()->where("im_chat_id", $chat_id)->first();
if ($type == "band") {
$imMsg->sendMsg($user_id, 1, $chat_id, $imMsg::MSG_TYPE_VIDEO, json_encode(['url' => 'https://images.health.ufutx.com/202410/15/2024101401.mp4', 'md5' => 'cf8a8dfd196b2b06b52496fd1190be29', 'dur' => 73000, 'ext' => 'mp4', 'w' => 480, 'h' => 360, 'size' => 4934255]), ['ext' => json_encode(['video_thumb_url' => 'https://images.health.ufutx.com/202410/15/2024101402.jpg'])]);
DmaProcessLog::addUserProcessLog($group->order->user_id ?? 0, $group->order->id ?? 0, 1, "send_use_call_video", "转发体脂秤使用教程", auth()->user()->id ?? 0);
} else {
$imMsg->sendMsg($user_id, 1, $chat_id, $imMsg::MSG_TYPE_VIDEO, json_encode(['url' => 'https://ufutx-health.oss-cn-hangzhou.aliyuncs.com/health/video/202603/17/e575df8ad14f5e4a367e761152271d5d.mp4', 'md5' => 'cf8a8dfd196b2b06b52496fd1190be29', 'dur' => 73000, 'ext' => 'mp4', 'w' => 480, 'h' => 360, 'size' => 4934255]), ['ext' => json_encode(['video_thumb_url' => 'https://images.health.ufutx.com/202410/15/2024101401.jpg'])]);
DmaProcessLog::addUserProcessLog($group->order->user_id ?? 0, $group->order->id ?? 0, 1, "send_use_band_video", "转发手环使用教程", auth()->user()->id ?? 0);
}
return $this->success('ok');
}
public function sendImMsg(Request $request)
{
$user_id = $request->input('user_id');
if ($user_id) {
$order = Order::where('user_id', $user_id)->orderByDesc('id')->first();
} else {
$chat_id = $request->input('chat_id');
$is_im = $request->input('is_im');
if ($is_im) {
$group = Group::where('im_chat_id', $chat_id)->first();
} else {
$group = Group::where('chat_id', $chat_id)->first();
}
$order = Order::where('id', $group->order_id)->first();
}
$survey_id = $request->input('survey_id');
if (!$order) {
return $this->failure('发送失败');
}
$send_config = [
'guide' => [
'title' => '餐单信息',
'content' => '系统已为您生成好餐单,请点击查看详情',
'icon' => 'https://images.health.ufutx.com/202412/12/547a28634b7fb6fe32d42727aa983dce.png',
// 'url' => 'yfheal://app/push/MineMenu',
'url' => config('app.url') . '/work/#h5/appUserMenu',
'param' => [
'is_guide' => 1,
],
],
'survey' => [
'title' => '方案后服务问卷',
'content' => '本次为方案后服务问卷,请点击查看详情',
'icon' => 'https://images.health.ufutx.com/202412/12/951ac6954a938c0ad069be6248d6b47b.png',
"url" => config('app.url') . "/go_html/role_apply#/app/afterSurveyMenu",
'param' => [
'is_guide' => 1,
],
],
'health' => [
'title' => '健康信息',
"content" => "请点击填写健康信息",
'icon' => 'https://images.health.ufutx.com/202412/12/abc84f7b2b5dc2b94d6d27ca4eeb09ab.png',
'url' => 'yfheal://app/push/InputInfoHealthManagerFirstPage',
'param' => [],
],
'after_report' => [
'title' => '复检报告',
"content" => "请点击上传复检报告",
'icon' => 'https://images.health.ufutx.com/202412/12/abc84f7b2b5dc2b94d6d27ca4eeb09ab.png',
'url' => 'yfheal://app/push/MedicalExaminReport',
'param' => [],
],
'after_body_image' => [
'title' => '方案后身体照片',
"content" => "请点击上传方案后身体照片",
'icon' => 'https://images.health.ufutx.com/202412/12/abc84f7b2b5dc2b94d6d27ca4eeb09ab.png',
'url' => 'yfheal://app/push/UpdateHealthBodyPhotoAfter',
'param' => [],
],
];
$type = $request->input('type');
if (empty($type) || !isset($send_config[$type])) {
return $this->failure('请选择发送类型');
}
$config = $send_config[$type];
if (strpos($config['url'], "https") !== false) {
// 包含 "https"
$config['url'] = $config['url'] . "?chat_id=" . $group->im_chat_id . '&is_im=1';
}
//记录是否发送餐单
if ($type == "guide") {
$today = date('Y-m-d');
$date = $request->input('date', date('Y-m-d', strtotime(' +1 day')));
$guide = Guide::where('order_id', $order->id)->where('phase_date', $date)->first();
if (empty($guide)) {
return $this->failure("当天未设置餐单");
}
$date_str = "明天";
if ($date == $today) {
$date_str = "今天";
}
if (!empty($guide)) {
$key = Guide::SEND_GUIDE_MSG;
$expire = getDayExpire();
Redis::set($key . $guide->id, 1, $expire);
$guide->send_status = 1;
$guide->save();
$menu_arr = json_decode($guide->menu, true);
$hint_arr = json_decode($guide->hint, true);
// $content = "{$date_str}{$guide->phase_date})是{$guide->phase_title}哦😊\n您的餐单如下:\n";
$content = "{$date_str}{$guide->phase_date}\n您的餐单如下:\n";
$keys = ["beforeMorning", "morning", "forenoon", "beforeNoon", "noon", "afternoon", "midnight", "evening", "sleep"];
foreach ($keys as $key) {
foreach ($menu_arr as $menu_key => $value) {
if ($menu_key == $key) {
if ($key == "beforeMorning") {
$hasData = (isset($value['food']) && !empty($value['food'])) || (isset($value['nutrient']) && !empty($value['nutrient']));
if ($hasData) {
$content = $content . "\n❤早餐前:\n";
if (isset($value['food']) && isset($value['nutrient'])) {
$new_arr = array_merge($value['food'], $value['nutrient']);
$length = count($new_arr);
$i = 0;
foreach ($new_arr as $item) {
$content .= $item["title"] . $item["oneNum"] . $item["unit"];
$i++;
if ($i < $length) {
$content .= "+";
} elseif ($i == $length) {
$content .= "\n";
}
}
}
}
}
if ($key == "morning") {
$hasData = (isset($value['food']) && !empty($value['food'])) || (isset($value['nutrient']) && !empty($value['nutrient']));
if ($hasData) {
$content = $content . "\n❤早餐:\n";
if (isset($value['food']) && isset($value['nutrient'])) {
$new_arr = array_merge($value['food'], $value['nutrient']);
$length = count($new_arr);
$i = 0;
foreach ($new_arr as $item) {
$content .= $item["title"] . $item["oneNum"] . $item["unit"];
$i++;
if ($i < $length) {
$content .= "+";
} elseif ($i == $length) {
$content .= "\n";
}
}
}
}
}
if ($key == "forenoon") {
$hasData = (isset($value['food']) && !empty($value['food'])) || (isset($value['nutrient']) && !empty($value['nutrient']));
if ($hasData) {
$content = $content . "\n❤上午:\n";
if (isset($value['food']) && isset($value['nutrient'])) {
$new_arr = array_merge($value['food'], $value['nutrient']);
$length = count($new_arr);
$i = 0;
foreach ($new_arr as $item) {
$content .= $item["title"] . $item["oneNum"] . $item["unit"];
$i++;
if ($i < $length) {
$content .= "+";
} elseif ($i == $length) {
$content .= "\n";
}
}
}
}
}
if ($key == "beforeNoon") {
$hasData = (isset($value['food']) && !empty($value['food'])) || (isset($value['nutrient']) && !empty($value['nutrient']));
if ($hasData) {
$content = $content . "\n❤午餐前:\n";
if (isset($value['food']) && isset($value['nutrient'])) {
$new_arr = array_merge($value['food'], $value['nutrient']);
$length = count($new_arr);
$i = 0;
foreach ($new_arr as $item) {
$content .= $item["title"] . $item["oneNum"] . $item["unit"];
$i++;
if ($i < $length) {
$content .= "+";
} elseif ($i == $length) {
$content .= "\n";
}
}
}
}
}
if ($key == "noon") {
$hasData = (isset($value['food']) && !empty($value['food'])) || (isset($value['nutrient']) && !empty($value['nutrient']));
if ($hasData) {
$content = $content . "\n❤午餐:\n";
if (isset($value['food']) && isset($value['nutrient'])) {
$new_arr = array_merge($value['food'], $value['nutrient']);
$length = count($new_arr);
$i = 0;
foreach ($new_arr as $item) {
$content .= $item["title"] . $item["oneNum"] . $item["unit"];
$i++;
if ($i < $length) {
$content .= "+";
} elseif ($i == $length) {
$content .= "\n";
}
}
}
}
}
if ($key == "afternoon") {
$hasData = (isset($value['food']) && !empty($value['food'])) || (isset($value['nutrient']) && !empty($value['nutrient']));
if ($hasData) {
$content = $content . "\n❤下午:\n";
if (isset($value['food']) && isset($value['nutrient'])) {
$new_arr = array_merge($value['food'], $value['nutrient']);
$length = count($new_arr);
$i = 0;
foreach ($new_arr as $item) {
$content .= $item["title"] . $item["oneNum"] . $item["unit"];
$i++;
if ($i < $length) {
$content .= "+";
} elseif ($i == $length) {
$content .= "\n";
}
}
}
}
}
if ($key == "midnight") {
$hasData = (isset($value['food']) && !empty($value['food'])) || (isset($value['nutrient']) && !empty($value['nutrient']));
if ($hasData) {
$content = $content . "\n❤晚餐前:\n";
if (isset($value['food']) && isset($value['nutrient'])) {
$new_arr = array_merge($value['food'], $value['nutrient']);
$length = count($new_arr);
$i = 0;
foreach ($new_arr as $item) {
$content .= $item["title"] . $item["oneNum"] . $item["unit"];
$i++;
if ($i < $length) {
$content .= "+";
} elseif ($i == $length) {
$content .= "\n";
}
}
}
}
}
if ($key == "evening") {
$hasData = (isset($value['food']) && !empty($value['food'])) || (isset($value['nutrient']) && !empty($value['nutrient']));
if ($hasData) {
$content = $content . "\n❤晚餐:\n";
if (isset($value['food']) && isset($value['nutrient'])) {
$new_arr = array_merge($value['food'], $value['nutrient']);
$length = count($new_arr);
$i = 0;
foreach ($new_arr as $item) {
$content .= $item["title"] . $item["oneNum"] . $item["unit"];
$i++;
if ($i < $length) {
$content .= "+";
} elseif ($i == $length) {
$content .= "\n";
}
}
}
}
}
if ($key == "sleep") {
$hasData = (isset($value['food']) && !empty($value['food'])) || (isset($value['nutrient']) && !empty($value['nutrient']));
if ($hasData) {
$content = $content . "\n🌙睡前:\n";
if (isset($value['food']) && isset($value['nutrient'])) {
$new_arr = array_merge($value['food'], $value['nutrient']);
$length = count($new_arr);
$i = 0;
foreach ($new_arr as $item) {
$content .= $item["title"] . $item["oneNum"] . $item["unit"];
$i++;
if ($i < $length) {
$content .= "+";
} elseif ($i == $length) {
$content .= "\n";
}
}
}
}
}
}
}
}
// foreach ($menu_arr as $key => $value) {
// if ($key == "beforeMorning") {
// $hasData = (isset($value['food']) && !empty($value['food'])) || (isset($value['nutrient']) && !empty($value['nutrient']));
// if($hasData){
// $content = $content . "\n❤早餐前:\n";
// if (isset($value['food']) && isset($value['nutrient'])) {
// $new_arr = array_merge($value['food'],$value['nutrient']);
// $length = count($new_arr);
// $i = 0;
// foreach ($new_arr as $item){
// $content .= $item["title"].$item["oneNum"].$item["unit"];
// $i++;
// if ($i < $length) {
// $content .= "+";
// }
// }
// }
// }
// }
// if ($key == "morning") {
// $hasData = (isset($value['food']) && !empty($value['food'])) || (isset($value['nutrient']) && !empty($value['nutrient']));
// if($hasData){
// $content = $content . "\n早餐:";
// if (isset($value['food']) && isset($value['nutrient'])) {
// $new_arr = array_merge($value['food'],$value['nutrient']);
// $length = count($new_arr);
// $i = 0;
// foreach ($new_arr as $item){
// $content .= $item["title"].$item["oneNum"].$item["unit"];
// $i++;
// if ($i < $length) {
// $content .= "+";
// }elseif ($i == $length){
// $content .= "\n";
// }
// }
// }
// }
// }
// if ($key == "forenoon") {
// $hasData = (isset($value['food']) && !empty($value['food'])) || (isset($value['nutrient']) && !empty($value['nutrient']));
// if($hasData) {
// $content = $content . "\n上午:\n";
// if (isset($value['food']) && isset($value['nutrient'])) {
// $new_arr = array_merge($value['food'],$value['nutrient']);
// $length = count($new_arr);
// $i = 0;
// foreach ($new_arr as $item){
// $content .= $item["title"].$item["oneNum"].$item["unit"];
// $i++;
// if ($i < $length) {
// $content .= "+";
// }elseif ($i == $length){
// $content .= "\n";
// }
// }
// }
// }
// }
// // if ($key == "beforeNoon") {
// // $hasData = (isset($value['food']) && !empty($value['food'])) || (isset($value['nutrient']) && !empty($value['nutrient']));
// // if($hasData) {
// // $content = $content . "\n❤午餐前:\n";
// // if (isset($value['food']) && isset($value['nutrient'])) {
// // $new_arr = array_merge($value['food'],$value['nutrient']);
// // $length = count($new_arr);
// // $i = 0;
// // foreach ($new_arr as $item){
// // $content .= $item["title"].$item["oneNum"].$item["unit"];
// // $i++;
// // if ($i < $length) {
// // $content .= "+";
// // }
// // }
// // }
// // }
// // }
// if ($key == "noon") {
// $hasData = (isset($value['food']) && !empty($value['food'])) || (isset($value['nutrient']) && !empty($value['nutrient']));
// if($hasData) {
// $content = $content . "\n❤午餐:\n";
// if (isset($value['food']) && isset($value['nutrient'])) {
// $new_arr = array_merge($value['food'],$value['nutrient']);
// $length = count($new_arr);
// $i = 0;
// foreach ($new_arr as $item){
// $content .= $item["title"].$item["oneNum"].$item["unit"];
// $i++;
// if ($i < $length) {
// $content .= "+";
// }elseif ($i == $length){
// $content .= "\n";
// }
// }
// }
// }
// }
// if ($key == "afternoon") {
// $hasData = (isset($value['food']) && !empty($value['food'])) || (isset($value['nutrient']) && !empty($value['nutrient']));
// if($hasData) {
// $content = $content . "\n下午:\n";
// if (isset($value['food']) && isset($value['nutrient'])) {
// $new_arr = array_merge($value['food'],$value['nutrient']);
// $length = count($new_arr);
// $i = 0;
// foreach ($new_arr as $item){
// $content .= $item["title"].$item["oneNum"].$item["unit"];
// $i++;
// if ($i < $length) {
// $content .= "+";
// }elseif ($i == $length){
// $content .= "\n";
// }
// }
// }
// }
// }
// // if ($key == "midnight") {
// // $hasData = (isset($value['food']) && !empty($value['food'])) || (isset($value['nutrient']) && !empty($value['nutrient']));
// // if($hasData) {
// // $content = $content . "\n❤晚餐前:\n";
// // if (isset($value['food']) && isset($value['nutrient'])) {
// // $new_arr = array_merge($value['food'],$value['nutrient']);
// // $length = count($new_arr);
// // $i = 0;
// // foreach ($new_arr as $item){
// // $content .= $item["title"].$item["oneNum"].$item["unit"];
// // $i++;
// // if ($i < $length) {
// // $content .= "+";
// // }
// // }
// // }
// // }
// // }
// if ($key == "evening") {
// $hasData = (isset($value['food']) && !empty($value['food'])) || (isset($value['nutrient']) && !empty($value['nutrient']));
// if($hasData) {
// $content = $content . "\n❤晚餐:\n";
// if (isset($value['food']) && isset($value['nutrient'])) {
// $new_arr = array_merge($value['food'],$value['nutrient']);
// $length = count($new_arr);
// $i = 0;
// foreach ($new_arr as $item){
// $content .= $item["title"].$item["oneNum"].$item["unit"];
// $i++;
// if ($i < $length) {
// $content .= "+";
// }elseif ($i == $length){
// $content .= "\n";
// }
// }
// }
// }
// }
// if ($key == "sleep") {
// $hasData = (isset($value['food']) && !empty($value['food'])) || (isset($value['nutrient']) && !empty($value['nutrient']));
// if($hasData) {
// $content = $content . "\n🌙睡前:\n";
// if (isset($value['food']) && isset($value['nutrient'])) {
// $new_arr = array_merge($value['food'],$value['nutrient']);
// $length = count($new_arr);
// $i = 0;
// foreach ($new_arr as $item){
// $content .= $item["title"].$item["oneNum"].$item["unit"];
// $i++;
// if ($i < $length) {
// $content .= "+";
// }elseif ($i == $length){
// $content .= "\n";
// }
// }
// }
// }
// }
// }
if (empty($hint_arr)) {
$type = GuideTemplate::TYPE_STR_ARR[$guide->phase_title] ?? 0;
$hint_arr = GuideHint::GetHint($type);
$hint_arr = json_decode($hint_arr, true);
}
foreach ($hint_arr as $hint) {
if (isset($hint["content"])) {
$content = $content . "\n{$hint["content"]}";
}
}
// if(empty($hint_arr)){
// $type = GuideTemplate::TYPE_STR_ARR[$guide->phase_title]??0;
// $hint_arr = GuideHint::GetHint($type);
//
// $content .= "\n🚰累计一天饮水: 2400毫升\n🚶♀累计一天步数: 5000步";
// }
if (mb_strlen($content, 'UTF-8') > 800) {
$content = mb_substr($content, 0, 800, 'UTF-8') . '...';
}
// if (strlen($content) > 800) {
// $content = substr($content, 0, 800) . '...';
// }
$config["param"]["guide"] = $content;
}
DmaProcessLog::addUserProcessLog($order->user_id ?? 0, $order->id ?? 0, 1, "send_date_guide", "转发每日餐单", auth()->user()->id ?? 0);
} elseif ($type == "survey") {
// 限制条件- 群内客服可操作
$auth_status = $order->orderAuthStatus(auth()->id(), [ServiceRole::CUSTOMER]);
if (empty($auth_status)) {
return $this->failure("客服权限,您无权限操作");
}
$config['url'] = $config['url'] . '&survey_id=' . $survey_id;
DmaProcessLog::addUserProcessLog($order->user_id ?? 0, $order->id ?? 0, 1, "system_send_question", "系统发送调查问卷通知", auth()->user()->id ?? 0);
} else if ($type == "health") {
DmaProcessLog::addUserProcessLog($order->user_id ?? 0, $order->id ?? 0, 1, "submit_health_info", "邀请用户填写健康档案", auth()->user()->id ?? 0);
} else if ($type == "after_report") {
DmaProcessLog::addUserProcessLog($order->user_id ?? 0, $order->id ?? 0, 1, "send_after_report_msg", "提醒上传复检报告通知", auth()->user()->id ?? 0);
} else if ($type == "after_body_image") {
DmaProcessLog::addUserProcessLog($order->user_id ?? 0, $order->id ?? 0, 1, "send_after_body_image", "提醒上传方案后身体照通知", auth()->user()->id ?? 0);
}
//查看用户是否已有订单
$chatService = new \App\Services\ChatService();
$chatService->sendGroupMsg($order->user_id, $config['title'], $config['content'], $config['icon'], $config['url'], $config['param'], $order);
return $this->success('ok');
}
}