ufutx.dma/app/Http/Controllers/H5/OrderController.php
2026-03-04 14:42:40 +08:00

1376 lines
65 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

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\H5;
use App\Facades\TaskService;
use App\Facades\WechatService;
use App\Http\Controllers\Controller;
use App\Http\Response\ResponseJson;
use App\Jobs\AddErrorLog;
use App\Jobs\SendEasySms;
use App\Jobs\SendSubscribeMessage;
use App\Jobs\SendTemplateNotice;
use App\Models\BeforeDmaQuestion;
use App\Models\CustomerServiceUser;
use App\Models\DmaProcess;
use App\Models\DmaProcessLog;
use App\Models\DmaServiceUserRole;
use App\Models\FatLog;
use App\Models\Food;
use App\Models\Group;
use App\Models\GroupUser;
use App\Models\GuideScheme;
use App\Models\GuideTemplate;
use App\Models\MarkOrderLog;
use App\Models\MedicalReport;
use App\Models\NoticeUser;
use App\Models\OperateStockLog;
use App\Models\Order;
use App\Models\OrderOperateLog;
use App\Models\Partner;
use App\Models\S2RealObjectStockOperate;
use App\Models\S2ShopSku;
use App\Models\S2ShopSpu;
use App\Models\ServiceRole;
use App\Models\ServiceRoleOrder;
use App\Models\ServiceRoleUser;
use App\Models\ServiceUser;
use App\Models\ServiceUserBindRole;
use App\Models\TempOrder;
use App\Models\User;
use App\Models\Wechat;
use App\Services\ChatService;
use App\Services\OfflineOrderService;
use cccdl\yunxin_sdk\Im\Team;
use Exception;
use GuzzleHttp\Client;
use Http;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Redis;
class OrderController 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 groupOrders(Request $request)
{
$orders = Order::paid()->noWorkChatGroup()->keyword()->simplePaginate();
return $this->success('ok', $orders);
}
public function schemeOrders(Request $request)
{
$orders = Order::with("user:id,name,is_privacy")->whereHas("group", function ($sql) {
$sql->where("service_type", 1);
})->paid()->keyword()->scheme()->orderBYDesc('id')->simplePaginate();
return $this->success('ok', $orders);
}
/**
* 订单绑定企业微信群
* @param Request $request
* @param Order $order
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
* @throws \Exception
*/
public function bindWorkGroupOrder(Request $request, Order $order)
{
DB::beginTransaction();
$chat_id = $request->chat_id;
if (empty($chat_id))
throw new \Exception("缺少群ID");
$service_user_id = $request->get('service_user_id');
if ($service_user_id) {
$group = Group::where('im_chat_id', $chat_id)->where('order_id', '<>', $order->id)->first();
if ($group) {
if ($group->order->type != 'TEMP')
throw new \Exception("该群组已绑定其他订单");
$order_group = Group::where('order_id', $order->id)->where('id', '<>', $group->id)->first();
//同步备注
$group->order->comments()->update(['commentable_id' => $order->id]);
$group->order->orderSurveys()->update(['order_id' => $order->id]);
//同步问卷调查
if ($order_group) {
if ($order_group->im_chat_id)
throw new \Exception("该订单已绑定群组");
$group->delete();
$order_group->update(['im_chat_id' => $chat_id]);
} else {
Group::create(['name' => 'app群服务', 'order_id' => $order->id, 'im_chat_id' => $chat_id]);
}
} else {
$group = $order->group;
if (empty($group))
throw new \Exception("订单暂无群组");
if ($group->im_chat_id && $chat_id != $group->im_chat_id)
return $this->failure("该订单已绑定其他群");
$group->update(['im_chat_id' => $chat_id]);
}
} else {
$group = Group::where('chat_id', $chat_id)->where('order_id', '<>', $order->id)->first();
if ($group) {
if ($group->order->type != 'TEMP')
throw new \Exception("该企业微信群已绑定其他订单");
$order_group = Group::where('order_id', $order->id)->where('id', '<>', $group->id)->first();
//同步备注
$group->order->comments()->update(['commentable_id' => $order->id]);
$group->order->orderSurveys()->update(['order_id' => $order->id]);
//同步问卷调查
if ($order_group) {
if ($order_group->chat_id)
throw new \Exception("该订单已绑定企业微信群");
$group->delete();
$order_group->update(['chat_id' => $chat_id]);
} else {
Group::create(['name' => '微信群服务', 'order_id' => $order->id, 'chat_id' => $chat_id]);
}
} else {
$group = $order->group;
if (empty($group))
throw new \Exception("订单暂无群组");
if ($group->chat_id && $chat_id != $group->chat_id)
return $this->failure("该订单已绑定其他企业微信群");
$group->update(['chat_id' => $chat_id]);
}
}
//查看是否有角色
$OfflineOrderService = new OfflineOrderService();
$OfflineOrderService->insertRoleData($chat_id, $order->id);
DB::commit();
return $this->success('ok', ['status' => 2]);
}
/**
* 暂不绑定订单-生成临时订单
* @param Request $request
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
* @throws \Exception
*/
public function unbindWorkGroupOrder(Request $request)
{
$chat_id = $request->chat_id;
if (empty($chat_id))
throw new \Exception("缺少企业微信群ID");
$service_user_id = $request->get('service_user_id');
if ($service_user_id) {
$group = Group::where('im_chat_id', $chat_id)->first();
if ($group && $group->order->type != 'TEMP')
throw new \Exception("企业微信群已绑定其他订单");
if ($group && $group->order->type == 'TEMP')
return $this->success('ok', ['status' => 3]);
DB::beginTransaction();
$order = Order::create(['type' => 'TEMP', 'type_id' => 0, 'price' => 0, 'user_id' => 0, 'trade_no' => 0]);
$order->group()->create(['name' => "临时群", 'im_chat_id' => $chat_id]);
//查看是否有角色
$OfflineOrderService = new OfflineOrderService();
$OfflineOrderService->insertRoleData($chat_id, $order->id);
DB::commit();
} else {
$group = Group::where('chat_id', $chat_id)->first();
if ($group && $group->order->type != 'TEMP')
throw new \Exception("企业微信群已绑定其他订单");
if ($group && $group->order->type == 'TEMP')
return $this->success('ok', ['status' => 3]);
DB::beginTransaction();
$order = Order::create(['type' => 'TEMP', 'type_id' => 0, 'price' => 0, 'user_id' => 0, 'trade_no' => 0]);
$order->group()->create(['name' => "临时群", 'chat_id' => $chat_id]);
//查看是否有角色
$OfflineOrderService = new OfflineOrderService();
$OfflineOrderService->insertRoleData($chat_id, $order->id);
DB::commit();
}
return $this->success('ok', ['status' => 3]);
}
/**
* 企业微信群订单绑定状态 1.无订单2。实际订单3。占位订单
* @param Request $request
* @param $chat_id
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
*/
public function workGroupOrderStatus(Request $request, $chat_id)
{
$service_user_id = $request->get('service_user_id');
if ($service_user_id) {
//查看是否存在群组
$group = Group::where('im_chat_id', $chat_id)->first();
if (empty($group)) {
$status = 1;
} elseif ($group->order && $group->order->type == 'SERVICE') {
$status = 2;
} else {
$status = 3;
}
$service_user = ServiceUser::where("user_id", $service_user_id)->first();
$is_bind = $service_user ? true : false;
//查看是否绑定角色
$is_role = false;
$user_bind_role_data = [];
$role_list = [];
$is_comment = '';
$is_main_coach = $is_coach = $is_customer = 0;
if ($service_user) {
//如果有群组
if ($group) {
$service_role_order_ids = ServiceRoleOrder::where('user_id', $service_user->user_id)->where('order_id', $group->order_id)->select('role_id')->get()->toArray();
if ($service_role_order_ids) {
$user_bind_role_data = ServiceRole::whereIn('id', $service_role_order_ids)->select('id', 'name', 'type', 'value')->get();
}
$is_role = $service_role_order_ids ? true : false;
} else {
$service_user_bind_role_ids = ServiceUserBindRole::where('chat_id', $chat_id)->where('user_id', $service_user->user_id)->select('role_id')->get()->toArray();
if ($service_user_bind_role_ids) {
$user_bind_role_data = ServiceRole::whereIn('id', $service_user_bind_role_ids)->select('id', 'name', 'type', 'value')->get();
}
$is_role = $service_user_bind_role_ids ? true : false;
}
//查看用户有什么角色
foreach ($user_bind_role_data as $item) {
switch ($item->id) {
case ServiceRole::MAIN_COACH://主教练
$is_main_coach = 1;
break;
case ServiceRole::COACH://副教练
$is_coach = 1;
break;
case ServiceRole::CUSTOMER://客服
$is_customer = 1;
break;
}
}
//获取服务人员职责
$roleUserIds = ServiceRoleUser::where('user_id', $service_user->user_id)->whereIn('role_id', [ServiceRole::MAIN_COACH, ServiceRole::COACH, ServiceRole::CUSTOMER])->select('role_id')->get()->toArray();
$role_list = ServiceRole::whereIn('id', $roleUserIds)->select('id', 'name', 'type', 'value')->get();
//查看是否备注存在红点
$key = 'red_event_' . $chat_id . '_' . $service_user->user_id;
$is_comment = Redis::get($key);
}
} else {
//查看是否存在群组
$group = Group::where('chat_id', $chat_id)->first();
if (empty($group)) {
$status = 1;
} elseif ($group->order && $group->order->type == 'SERVICE') {
$status = 2;
} else {
$status = 3;
}
//发送信息给服务人员
if (config('app.env') == 'production') {
$work_id = $request->get('work_id');
if ($work_id) {
$work_user_id = $work_id;
} else {
//查看是否绑定企业微信
$work_wechat_user = session('work_wechat_user');
$work_user_id = $work_wechat_user['raw']['userid'] ?? null;
}
} else {
$work_user_id = "hankin";
}
$service_user = ServiceUser::where("work_user_id", $work_user_id)->first();
$is_bind = $service_user ? true : false;
//查看是否绑定角色
$is_role = false;
$user_bind_role_data = [];
$role_list = [];
$is_comment = '';
$is_main_coach = $is_coach = $is_customer = 0;
if ($service_user) {
//如果有群组
if ($group) {
$service_role_order_ids = ServiceRoleOrder::where('user_id', $service_user->user_id)->where('order_id', $group->order_id)->select('role_id')->get()->toArray();
if ($service_role_order_ids) {
$user_bind_role_data = ServiceRole::whereIn('id', $service_role_order_ids)->select('id', 'name', 'type', 'value')->get();
}
$is_role = $service_role_order_ids ? true : false;
} else {
$service_user_bind_role_ids = ServiceUserBindRole::where('chat_id', $chat_id)->where('user_id', $service_user->user_id)->select('role_id')->get()->toArray();
if ($service_user_bind_role_ids) {
$user_bind_role_data = ServiceRole::whereIn('id', $service_user_bind_role_ids)->select('id', 'name', 'type', 'value')->get();
}
$is_role = $service_user_bind_role_ids ? true : false;
}
//查看用户有什么角色
foreach ($user_bind_role_data as $item) {
switch ($item->id) {
case ServiceRole::MAIN_COACH://主教练
$is_main_coach = 1;
break;
case ServiceRole::COACH://副教练
$is_coach = 1;
break;
case ServiceRole::CUSTOMER://客服
$is_customer = 1;
break;
}
}
//获取服务人员职责
$roleUserIds = ServiceRoleUser::where('user_id', $service_user->user_id)->whereIn('role_id', [ServiceRole::MAIN_COACH, ServiceRole::COACH, ServiceRole::CUSTOMER])->select('role_id')->get()->toArray();
$role_list = ServiceRole::whereIn('id', $roleUserIds)->select('id', 'name', 'type', 'value')->get();
//查看是否备注存在红点
$key = 'red_event_' . $chat_id . '_' . $service_user->user_id;
$is_comment = Redis::get($key);
}
}
$data['order_status'] = $group->order->status ?? "NOTSTART";
$data['status'] = $status;
$data['is_bind'] = $is_bind;
$data['is_role'] = $is_role;
$data['user_bind_role_data'] = $user_bind_role_data;
$data['role_list'] = $role_list;
$data['is_comment'] = $is_comment;
$data['is_coach'] = $is_coach;
$data['is_main_coach'] = $is_main_coach;
$data['is_customer'] = $is_customer;
return $this->success('ok', $data);
}
/**
* 绑定角色
* @param Request $request
* @param $chat_id
* @return \Illuminate\Http\JsonResponse|void
*/
public function bindRole(Request $request)
{
//查看是否存在群组
$chat_id = $request->input('chat_id');
if (empty($chat_id)) {
return $this->failure('chat_id不为空');
}
$service_user_id = $request->get('service_user_id');
if ($service_user_id) {
$group = Group::where('im_chat_id', $chat_id)->first();
$role_ids = $request->input('role_ids');
if (empty($role_ids)) {
return $this->failure('id不为空');
}
$service_user = ServiceUser::where("user_id", $service_user_id)->first();
if (empty($service_user)) {
return $this->failure('请先绑定服务人员');
}
//有群组则查找群组并绑定职责,如果没有则创建过渡信息,等绑定真实订单的时候再关联角色
if (!empty($group) && !empty($group->order_id)) {
foreach ($role_ids as $value) {
$ServiceRoleOrder = new ServiceRoleOrder();
$ServiceRoleOrder->insertRoleOrder($value, $service_user, $group->order_id);
}
} else {
foreach ($role_ids as $value) {
$ServiceUserBindRole = new ServiceUserBindRole();
$ServiceUserBindRole->insertUserBindData($chat_id, $service_user, $value);
}
}
} else {
$group = Group::where('chat_id', $chat_id)->first();
$role_ids = $request->input('role_ids');
if (empty($role_ids)) {
return $this->failure('id不为空');
}
$work_id = $request->get('work_id');
if (!empty($work_id)) {
$work_user_id = $work_id;
} else {
//查看是否绑定企业微信
$work_wechat_user = session('work_wechat_user');
$work_user_id = $work_wechat_user['raw']['userid'];
}
$service_user = ServiceUser::where("work_user_id", $work_user_id)->first();
if (empty($service_user)) {
return $this->failure('请先绑定服务人员');
}
//有群组则查找群组并绑定职责,如果没有则创建过渡信息,等绑定真实订单的时候再关联角色
if (!empty($group) && !empty($group->order_id)) {
foreach ($role_ids as $value) {
$ServiceRoleOrder = new ServiceRoleOrder();
$ServiceRoleOrder->insertRoleOrder($value, $service_user, $group->order_id);
}
} else {
foreach ($role_ids as $value) {
$ServiceUserBindRole = new ServiceUserBindRole();
$ServiceUserBindRole->insertUserBindData($chat_id, $service_user, $value);
}
}
}
//增加网易云信用户标签
if (!empty($group) && !empty($group->im_chat_id)) {
GroupUser::addGroupUser($group, $service_user, $role_ids);
}
return $this->success('ok');
}
/**
* 创建订单方案
* @param Request $request
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
*/
public function addOrderScheme(Request $request, Order $order)
{
$schemes = $request->input("schemes") ?? [];
$ids = $request->input('ids') ?? [];
$is_delete = $request->input('is_delete');
$foods = Food::whereIn('id', $schemes)->select('id', 'name', 'icon', 'unit', 'price', 'config')->get();
$scheme_obj = $order->scheme;
//处理数组,将数量也加入到方案中
foreach ($ids as $value) {
foreach ($foods as $index => $items) {
if ($value['id'] == $items->id) {
$foods[$index]->num = $value['num'];
$foods[$index]->name = $value['name'] ?? '';
$foods[$index]->icon = $value['icon'] ?? '';
$foods[$index]->price = $value['price'] ?? '';
$foods[$index]->unit = $value['unit'] ?? '';
}
}
}
// 开启事务
DB::beginTransaction();
try {
// 在此处执行你的数据库操作
if ($scheme_obj) {
$hour = (time() - strtotime($scheme_obj->created_at)) / 3600;
if ($hour > 24 && !$is_delete) {
//插入操作记录
OrderOperateLog::create(['order_id' => $order->id, 'type' => 2]);
}
$scheme_obj->update(['init_scheme' => $foods]);
} else {
//插入操作记录
OrderOperateLog::create(['order_id' => $order->id, 'type' => 1]);
$order->scheme()->create(['init_scheme' => $foods]);
}
// 提交事务
DB::commit();
return $this->success('ok');
} catch (\Exception $e) {
// 回滚事务
DB::rollback();
AddErrorLog::dispatch('addOrderScheme file:' . $e->getFile() . ' line:' . $e->getLine() . ' message:' . $e->getMessage())->onQueue('health');
return $this->failure("error");
}
}
public function saveOrderScheme(Order $order)
{
DB::beginTransaction();
$scheme = $order->scheme()->first();
$scheme->update(['scheme' => $scheme->init_scheme]);
$order->update(['service_status' => 'SCHEME']);
DB::commit();
//发送信息给服务人员
if (config('app.env') == 'production') {
// $this->sendMsgToServiceUser($order);
$chatService = new ChatService();
$chatService->sendImMsgUserToUser($order->id, '方案信息', "用户[" . ($order->name ?? "") . ']方案已设置,请配货并发送', 'https://image.fulllinkai.com/202403/29/dea3e0c27107cdf178635d2a41199e5e.png', '', [ServiceRole::CUSTOMER, ServiceRole::ADMINISTRATIVE]);
// 待办事项-通知客服、行政
$theme = "请确认「用户" . $order->name . "」收货方式(自提/邮寄)";
TaskService::AddTask(0, 0, $theme, [3, 8], $order->id);
// 待办事项-通知行政
$theme = "请给「用户" . $order->name . "」拍照确认发货数量/填写快递单号";
TaskService::AddTask(0, 0, $theme, [8]);
}
DmaProcessLog::addUserProcessLog($order->user_id ?? 0, $order->id ?? 0, 1, "set_guide_scheme", "用户方案已设置", auth()->user()->id ?? 0);
DmaProcessLog::addUserProcessLog($order->user_id ?? 0, $order->id ?? 0, 1, "send_delivery", "通知行政给用户配送发货", auth()->user()->id ?? 0);
return $this->success('ok');
// try {
// }catch (\Exception $e){
// DB::rollBack();
// AddErrorLog::dispatch('saveOrderScheme file:'.$e->getFile().' line:'.$e->getLine().' message:'.$e->getMessage())->onQueue('health');
// return $this->failure('error');
// }
}
/**
* 发送通知给订单相关服务人员
* @param $order
*/
public function sendMsgToServiceUser($order)
{
//查看当前订单绑定的服务人员
$roleOrderUser = ServiceRoleOrder::where('order_id', $order->id)->select()->get();
foreach ($roleOrderUser as $item) {
//查看openid
$open_id = Wechat::where('user_id', $item->user_id)->where('type', 'official')->value('openid');
$params = [
'touser' => $open_id,
'template_id' => config('wechat.tpls.order_scheme_set'),
'url' => '',
'data' => [
'time2' => ['value' => date('Y-m-d H:i:s')],
'character_string1' => ['value' => $order->trade_no],
'thing3' => ['value' => $order->name],
'phone_number10' => ['value' => $order->mobile],
]
];
SendTemplateNotice::dispatch($params)->onQueue('health');
//发送企业微信通知
// $message = " 您负责的订单:用户[{$order->name}]订单号:[{$order->trade_no}]的方案已设置,请进入群聊客服查看";
// $work_user_id = ServiceUser::where('user_id',$item->user_id)->value('work_user_id');
// if($work_user_id){
// WechatService::sendWorkMessage($work_user_id,'text',['content'=>$message]);
// }
}
}
/**
* 订单方案信息
*/
public function orderScheme(Request $request, Order $order)
{
$scheme = $order->scheme;
$value = [];
if ($scheme) {
$value = $scheme->scheme;
foreach ($value as $item) {
$food = Food::where("id", $item->id)->first();
if ($food) {
$item->name = $food->name;
}
}
}
return $this->success('ok', $value);
}
/**
* 服务人员标记用户订单状态
* @param Request $request
*/
public function updateOrderStatusv1(Request $request)
{
DB::beginTransaction();
try {
$order = $request->group->order;
$status = $request->status;
switch ($status) {
case "NOSCHEME"://待配置方案
if ($order->service_status != 'NOINFO')
throw new \Exception("订单状态不符合用户信息已填写");
break;
case "SCHENE":
// if ($order->status != 'NOSCHEME') throw new \Exception("订单状态不符合待设置方案");
break;
case "FINISHED":
break;
default:
throw new \Exception("不支持其他类型");
}
$delivery_name = $request->input('delivery_name', '');
$delivery_number = $request->input('delivery_number', '');
if (!empty($delivery_name)) {
$order->delivery_name = $delivery_name;
}
if (!empty($delivery_number)) {
$order->delivery_number = $delivery_number;
}
$delivery_type = $request->input('delivery_type');
if (!empty($delivery_type))
$order->delivery_type = $delivery_type;
//如果标记用户信息已完善,则发送相应通知
if ($status == "NOSCHEME") {
$this->sendNoticeMsg($order);
}
//标记配送已完成增加库存记录
if ($status == 'FINISHED') {
if (!empty($order->scheme->scheme)) {
foreach ($order->scheme->scheme as $scheme) {
$food = Food::where('id', $scheme->id)->first();
if (!$food || $food->stock <= 0) {
continue;
}
//查看是否绑定企业微信
// $work_wechat_user = session('work_wechat_user');
// $work_user_id = $work_wechat_user['raw']['userid'];
// $service_user = ServiceUser::where("work_user_id", $work_user_id)->first();
$service_user = $request->service_user;
$exists = OperateStockLog::where('food_id', $food->id)->where('order_id', $order->id)->exists();
if ($exists) {
continue;
}
$admin = [];
$admin['name'] = $service_user->name;
$admin['id'] = $service_user->user_id;
$admin['mobile'] = $service_user->mobile;
$map = [];
$map['id'] = $food->id;
$map['name'] = $food->name;
$map['stock'] = $food->stock;
$map['num'] = $scheme->num;
$map['after_num'] = $food->stock - $scheme->num;
$map['type'] = OperateStockLog::TYPE_H5;
$map['remark'] = '服务人员:' . $service_user->name . '标记了订单完成,减少了' . $food->name . '的库存,减少数量为' . $scheme->num;
$map['operate_type'] = OperateStockLog::OPERATE_TYPE_OUT;
$map['status'] = OperateStockLog::OPERATE_STATUS_APPLY;
$map['order_id'] = $order->id;
$map['goods_type'] = OperateStockLog::GOODS_TYPE_FOOD;
OperateStockLog::addLog($admin, $map);
//
// $food->stock = $map['after_num'];
// $food->save();
}
}
if ($delivery_type == 1) {
$log = OrderOperateLog::where('order_id', $order->id)->whereIn('type', [3, 4])->first();
if ($log) {
if ($log->type == 4) {
$log->type = 3;
}
$log->delivery_name = $delivery_name;
$log->delivery_num = $delivery_number;
$log->save();
} else {
//插入操作记录
OrderOperateLog::create(['order_id' => $order->id, 'type' => 3, 'delivery_name' => $delivery_name, 'delivery_num' => $delivery_number]);
}
} else {
$log = OrderOperateLog::where('order_id', $order->id)->whereIn('type', [3, 4])->first();
if ($log) {
if ($log->type == 3) {
$log->type = 4;
}
$log->delivery_name = '';
$log->delivery_num = '';
$log->save();
} else {
//插入操作记录
OrderOperateLog::create(['order_id' => $order->id, 'type' => 4]);
}
}
//发送公众号消息通知
$open_id = Wechat::where('user_id', $order->user_id)->where('type', 'official')->value('openid');
if ($open_id) {
$params = [
'touser' => $open_id,
'template_id' => config('wechat.tpls.send_order_shipment'),
"miniprogram" => [
"appid" => config('wechat.mini_program.app_id'),
"pagepath" => "pages/tabBar/home"
],
'data' => [
'character_string1' => ['value' => $order->trade_no],
'thing6' => ['value' => $order->name],
'thing12' => ['value' => $service_user->name],
'phone_number11' => ['value' => $service_user->mobile],
'time17' => ['value' => date('Y-m-d H:i:s')],
]
];
SendTemplateNotice::dispatch($params)->onQueue('health');
}
//发送小程序订阅消息
$mp_openid = Wechat::where('user_id', $order->user_id)->where('type', 'mp')->value('openid');
if ($mp_openid) {
$param = [
'touser' => $mp_openid,
'template_id' => config('wechat.sub_tpls.send_order_shipment'),
'page' => 'pages/service/healthMGT?index=4',
'data' => [
'character_string2' => ['value' => $order->trade_no],
'thing12' => ['value' => $order->name],
'date8' => ['value' => date('Y-m-d H:i:s')],
]
];
SendSubscribeMessage::dispatch($param)->onQueue('health');
}
}
$order->service_status = $status;
$order->save();
DB::commit();
return $this->success('ok');
} catch (\Exception $e) {
DB::rollBack();
Log::error('updateOrderStatus:file:' . $e->getFile() . '|line:' . $e->getLine() . '|message:' . $e->getMessage());
return $this->failure('标记失败');
}
}
public function updateServerStatus(Request $request)
{
DB::beginTransaction();
try {
$order = $request->group->order;
$status = $request->status;
$service_user = $request->service_user;
switch ($status) {
case "NOSCHEME"://待配置方案
// 限制条件- 群内客服可操作
$auth_status = $order->orderAuthStatus(auth()->id(), [ServiceRole::CUSTOMER, ServiceRole::PERSONAL_COACH]);
if (empty($auth_status)) {
DB::commit();
return $this->failure("客服权限,您无权限操作");
}
//if ($order->service_status != 'NOINFO') throw new \Exception("订单状态不符合用户信息已填写");
$reports = MedicalReport::where('type', MedicalReport::TYPE_BEFORE)->where('user_id', $order->user_id)->exists();
if (!$reports)
return $this->failure('用户体检报告未上传');
$question = BeforeDmaQuestion::where("user_id", $order->user_id)->first();
if (empty($question) || $question->status != 1) {
DB::commit();
return $this->failure("方案前健康评估未审核通过");
}
break;
case "SCHENE":
// if ($order->status != 'NOSCHEME') throw new \Exception("订单状态不符合待设置方案");
break;
case "DELIVER":
break;
case "FINISHED":
break;
case "COMPLETEINFO":
break;
default:
throw new \Exception("不支持其他类型");
}
$delivery_type = $request->input('delivery_type');
//订单发货
if ($status == "DELIVER" && $delivery_type == Order::DELIVER_ONLINE) {
// 限制条件- 群内客服可操作
$auth_status = $order->orderAuthStatus(auth()->id(), [ServiceRole::CUSTOMER, ServiceRole::ADMINISTRATIVE]);
if (empty($auth_status)) {
DB::commit();
return $this->failure("客服权限,您无权限操作");
}
$delivery_name = $request->input('delivery_name', '');
$delivery_number = $request->input('delivery_number', '');
$delivery_send_img = $request->input("delivery_send_img", "");
if (!empty($delivery_name)) {
$order->delivery_name = $delivery_name;
}
if (!empty($delivery_number)) {
$order->delivery_number = $delivery_number;
}
if (!empty($delivery_send_img)) {
$order->delivery_send_img = $delivery_send_img;
}
if (!empty($delivery_type))
$order->delivery_type = $delivery_type;
$log = OrderOperateLog::where('order_id', $order->id)->whereIn('type', [3, 4])->first();
if ($log) {
if ($log->type == 4) {
$log->type = 3;
}
$log->delivery_name = $delivery_name;
$log->delivery_num = $delivery_number;
$log->save();
} else {
//插入操作记录
OrderOperateLog::create(['order_id' => $order->id, 'type' => 3, 'delivery_name' => $delivery_name, 'delivery_num' => $delivery_number]);
}
if (!empty($order->scheme->scheme)) {
foreach ($order->scheme->scheme as $scheme) {
$food = Food::where('id', $scheme->id)->first();
if (!$food) {
continue;
}
$exists = OperateStockLog::where('food_id', $food->id)->where('order_id', $order->id)->exists();
if ($exists) {
continue;
}
//获取实物id
$sku_id = S2ShopSpu::where('id', $food->shop_id)->value('skuid');
$real_id = S2ShopSku::where('id', $sku_id)->value('real_id');
$map = [];
$map['user_id'] = $service_user->user_id;
$map['operate_name'] = $service_user->name;
$map['operate_mobile'] = $service_user->mobile;
$map['operate_type'] = 1;
$map['real_ids'] = $real_id;
$map['before_num'] = $food->stock;
$map['modify_num'] = $scheme->num;
$map['after_num'] = $food->stock - $scheme->num;
$map['order_id'] = $order->id;
$map['remark'] = '服务人员:' . $service_user->name . '标记了订单发货,减少了' . $food->name . '的库存,减少数量为' . $scheme->num;
$map['order_source'] = 1;
S2RealObjectStockOperate::create($map);
}
}
// 给客服和行政发系统消息
$chatService = new ChatService();
$chatService->sendImMsgUserToUser($order->id, '已发货', "用户" . ($order->name ?? "") . "已发货,快递单号为:{$delivery_number},请跟进服务。", 'https://image.fulllinkai.com/202403/29/dea3e0c27107cdf178635d2a41199e5e.png', '', [ServiceRole::CUSTOMER, ServiceRole::ADMINISTRATIVE]);
// 群聊消息
$chatService->sendGroupMsg($order->user_id, '已发货', "您好!您的方案已设置完成,且已经配货成功,请留意快递信息,耐心等待收货。", 'https://image.fulllinkai.com/202403/29/dea3e0c27107cdf178635d2a41199e5e.png', "yfheal://app/push/DmaDelivery", ["order_id" => $order->id], $order);
$address = $order->userInfo ? $order->userInfo->address : "";
$remark = "确认已发货,已由快递公司:{$delivery_name}, 快递单号:{$delivery_number}发货至【{$address}";
DmaProcessLog::addUserProcessLog($order->user_id ?? 0, $order->id ?? 0, 1, "check_delivery", $remark, $service_user->user_id ?? 0);
// DmaProcessLog::addUserProcessLog($order->user_id??0,$order->id??0,1,"send_delivery","发送发货通知",$service_user->user_id??0);
}
//标记配送已完成增加库存记录,线下订单直接签收
if ($status == 'FINISHED' || $delivery_type == Order::DELIVER_OFFLINE) {
if ($delivery_type == Order::DELIVER_OFFLINE) {
if (!empty($order->scheme->scheme)) {
foreach ($order->scheme->scheme as $scheme) {
$food = Food::where('id', $scheme->id)->first();
if (!$food) {
continue;
}
$exists = OperateStockLog::where('food_id', $food->id)->where('order_id', $order->id)->exists();
if ($exists) {
continue;
}
//获取实物id
// $sku_id = S2ShopSpu::where('id', $food->shop_id)->value('skuid');
// $real_id = S2ShopSku::where('id', $sku_id)->value('real_id');
$sku_id = $food->sku_id;
$real_id = $food->real_id;
$map = [];
$map['user_id'] = $service_user->user_id;
$map['operate_name'] = $service_user->name;
$map['operate_mobile'] = $service_user->mobile;
$map['operate_type'] = 1;
$map['real_ids'] = $real_id;
$map['before_num'] = $food->stock;
$map['modify_num'] = $scheme->num;
$map['after_num'] = $food->stock - $scheme->num;
$map['order_id'] = $order->id;
$map['remark'] = '服务人员:' . $service_user->name . '标记了订单发货,减少了' . $food->name . '的库存,减少数量为' . $scheme->num;
$map['order_source'] = 1;
S2RealObjectStockOperate::create($map);
}
}
}
//增加订单操作记录
$log = OrderOperateLog::where('order_id', $order->id)->whereIn('type', [3, 4])->first();
if ($log) {
if ($log->type == 3) {
$log->type = 4;
}
$log->delivery_name = '';
$log->delivery_num = '';
$log->save();
} else {
//插入操作记录
OrderOperateLog::create(['order_id' => $order->id, 'type' => 4]);
}
$order->delivery_img = $request->input('delivery_img'); // 签收图
$delivery_send_img = $request->input('delivery_send_img'); // 发货图
if (!empty($delivery_send_img)) {
$order->delivery_send_img = $delivery_send_img;
}
if (!empty($delivery_type))
$order->delivery_type = $delivery_type;
//订单标记完成发送im群消息
$chatService = new ChatService();
$chatService->sendImMsgUserToUser($order->id, '确认收货', "用户[" . ($order->name ?? "") . ']已确认收货,请客服设置餐单', 'https://image.fulllinkai.com/202403/29/dea3e0c27107cdf178635d2a41199e5e.png', config('app.url') . '/work/#/h5/appEditUserMenu', [ServiceRole::CUSTOMER]);
$chatService->sendImMsgUserToUser($order->id, '系统通知', '请所有服务人员与用户[' . $order->name . ']进行第一次视频通话', 'https://image.fulllinkai.com/202403/29/dea3e0c27107cdf178635d2a41199e5e.png', '', [ServiceRole::MAIN_COACH, ServiceRole::COACH, ServiceRole::CUSTOMER]);
if ($delivery_type == Order::DELIVER_OFFLINE) {
DmaProcessLog::addUserProcessLog($order->user_id ?? 0, $order->id ?? 0, 1, "check_delivery", "确认已发货,线下自提", $service_user->user_id ?? 0);
}
DmaProcessLog::addUserProcessLog($order->user_id ?? 0, $order->id ?? 0, 1, "user_take_delivery", "用户确认收货", $service_user->user_id ?? 0);
// 待办事项-主教练
$theme = "请邀请所有服务人员进行「用户" . $order->name . "」服务的第一次「视频通话」,并将相关视频链接转发给“友福服务”";
TaskService::AddTask(0, 0, $theme, [1], $order->id);
// 待办事项-客服
if (empty($order->status)) {
$theme = "请标记「用户" . $order->name . "」的方案开始并确认方案开始时间";
TaskService::AddTask(0, 0, $theme, [3], $order->id);
}
}
$update_schemes_lock = 0;
$foodList = [];
//标记信息完善,发送通知给陈老师设置方案
if ($status == 'NOSCHEME') {
// DMA 群聊通知
$group = Group::where("order_id", $order->id)->first();
if ($group && $group->service_type == Group::SERVICE_TYPE_DMA) {
$params = [
'touser' => 'oHGap6AcgPw9crYNNLVZJr_mtF0k', //陈老师
// 'touser' => 'oHGap6F1HR-5q-JdRKrgb6DwztWQ', //测试的
'template_id' => config('wechat.tpls.check_refund'),
'url' => config('app.url') . '/h5/#/orderScheme',
'data' => [
'phrase3' => ['value' => "信息已完善"],
'time4' => ['value' => date("Y-m-d H:i:s")],
'thing12' => ['value' => $order->name],
'thing9' => ['value' => '友福健康服务'],
'amount8' => ['value' => $order->price],
]
];
Log::info('auditRefundOrders:' . json_encode($params));
SendTemplateNotice::dispatch($params)->onQueue('health');
// 系统通知
$chatService = new ChatService();
$chatService->sendImMsgUserToUserV2($order->id, 328, '方案设置通知', "用户【{$order->name}】的方案待设置。", 'https://image.fulllinkai.com/202403/29/dea3e0c27107cdf178635d2a41199e5e.png', '');
DmaProcessLog::addUserProcessLog($order->user_id ?? 0, $order->id ?? 0, 1, "check_health_info", "标记用户信息已完善", $service_user->user_id ?? 0);
DmaProcessLog::addUserProcessLog($user->id ?? 0, $order->id ?? 0, 1, "send_guide_scheme", "系统发送方案待设置通知", $service_user->user_id ?? 0);
} else if ($group && $group->service_type == Group::SERVICE_TYPE_MINI_DMA) { // MINI DMA
$status = "SCHEME"; // 方案已设置
$guideScheme = GuideScheme::where("order_id", $order->id)->first();
if (empty($guideScheme)) {
$foodList = Food::whereIn("id", [131, 132])->select("id", "name", 'icon', "unit", "price", "config", "type")->get();
foreach ($foodList as $food) {
$food->num = 1;
}
$initScheme = json_encode($foodList);
GuideScheme::create([
"order_id" => $order->id,
"scheme" => $initScheme,
"init_scheme" => $initScheme
]);
}
DmaProcessLog::addUserProcessLog($order->user_id ?? 0, $order->id ?? 0, 1, "set_guide_scheme", "用户方案已设置", auth()->user()->id ?? 0);
$update_schemes_lock = 1;
}
}
$order->service_status = $status;
$order->save();
MarkOrderLog::create(['order_id' => $order->id, 'operate_id' => $service_user->user_id, 'operate_name' => $service_user->name, 'remark' => "服务人员修改server_status:" . $status]);
DB::commit();
if ($update_schemes_lock) {
// 请求update_schemes_lock_
$res = $this->updateSchemesLock($order->id, $foodList);
if (!$res) {
throw new Exception("设置餐单方案失败");
}
}
return $this->success('ok');
} catch (\Exception $e) {
DB::rollBack();
Log::error('updateServerStatus:file:' . $e->getFile() . '|line:' . $e->getLine() . '|message:' . $e->getMessage());
return $this->failure('标记失败');
}
}
public function updateSchemesLock($ordedrId, $foodList)
{
$url = config("app.url") . "/go/api/app/v2/dma/update_schemes_lock_" . $ordedrId;
$client = new Client();
$token = request()->header("Authorization");
$headers = [
"Authorization" => $token
];
$schemes = [
"ids" => $foodList,
"schemes" => [131, 132],
"is_delete" => false,
];
$response = $client->post($url, [
'headers' => $headers,
'json' => [
'schemes' => json_encode($schemes),
],
]);
$code = $response->getStatusCode();
if ($code != 200) {
return false;
}
return true;
}
/**
* 更新订单状态
* @param Request $request
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
*/
public function updateOrderStatus(Request $request)
{
$order = $request->group->order;
$order_status = $request->order_status;
$service_user = $request->service_user;
if (!in_array($order_status, ['NOTSTART', 'STARTING', 'SUSPEND', 'FINISHED'])) {
return $this->failure("暂不支持其他类型操作");
}
if ($order->service_status != "FINISHED") {
return $this->failure("请先确认用户已收货");
}
if ($order_status == 'FINISHED' && $order_status != $order->status) {
$service_user = $request->service_user;
//发送公众号消息通知
$open_id = Wechat::where('user_id', $order->user_id)->where('type', 'official')->value('openid');
if ($open_id) {
$params = [
'touser' => $open_id,
'template_id' => config('wechat.tpls.send_order_shipment'),
"miniprogram" => [
"appid" => config('wechat.mini_program.app_id'),
"pagepath" => "pages/tabBar/home"
],
'data' => [
'character_string1' => ['value' => $order->trade_no],
'thing6' => ['value' => $order->name],
'thing12' => ['value' => $service_user->name],
'phone_number11' => ['value' => $service_user->mobile],
'time17' => ['value' => date('Y-m-d H:i:s')],
]
];
SendTemplateNotice::dispatch($params)->onQueue('health');
}
//发送小程序订阅消息
$mp_openid = Wechat::where('user_id', $order->user_id)->where('type', 'mp')->value('openid');
if ($mp_openid) {
$param = [
'touser' => $mp_openid,
'template_id' => config('wechat.sub_tpls.send_order_shipment'),
'page' => 'pages/service/healthMGT?index=4',
'data' => [
'character_string2' => ['value' => $order->trade_no],
'thing12' => ['value' => $order->name],
'date8' => ['value' => date('Y-m-d H:i:s')],
]
];
SendSubscribeMessage::dispatch($param)->onQueue('health');
}
//发送网易消息通知
$chatService = new ChatService();
$params = [];
$params['chat_id'] = $request->group->im_chat_id;
$params['group_name'] = $request->group->name;
$chatService->sendImMsgUserToUser($order->id, '系统通知', $order->name . '方案已结束,请发送用户调查问卷', 'https://image.fulllinkai.com/202403/29/dea3e0c27107cdf178635d2a41199e5e.png', 'yfheal://app/push/IMGroup', [ServiceRole::MAIN_COACH, ServiceRole::COACH, ServiceRole::CUSTOMER], $params, [auth()->id()]);
$chatService->sendImMsgUserToUser($order->id, '系统通知', $order->name . '方案已结束,请所有教练填写复盘服务评价表', 'https://image.fulllinkai.com/202403/29/dea3e0c27107cdf178635d2a41199e5e.png', 'yfheal://app/push/IMGroup', [ServiceRole::MAIN_COACH, ServiceRole::COACH, ServiceRole::CUSTOMER], $params, []);
// $theme = "请给「用户".$order->name."」转发【方案后评估表】";
// TaskService::AddTask(0, 0, $theme, [3], $order->id);
// $theme2 = "请填写「用户".$order->name."」的【复盘评价表】";
// TaskService::AddTask(0, 0, $theme, [1,2,3], $order->id);
DmaProcessLog::addUserProcessLog($order->user_id ?? 0, $order->id ?? 0, 1, "mark_order_finish", "标记用户方案已结束", $service_user->user_id ?? 0);
DmaProcessLog::addUserProcessLog($order->user_id ?? 0, $order->id ?? 0, 1, "system_send_order_finish", "系统发送方案结束通知", $service_user->user_id ?? 0);
DmaProcessLog::addUserProcessLog($order->user_id ?? 0, $order->id ?? 0, 1, "send_after_report_msg", "系统发送上传复检报告通知", $service_user->user_id ?? 0);
}
if ($order_status == "STARTING" && $order_status != $order->status) {
// 限制条件- 群内客服可操作
$auth_status = $order->orderAuthStatus(auth()->id(), [ServiceRole::CUSTOMER]);
if (empty($auth_status)) {
return $this->failure("客服权限,您无权限操作");
}
$theme1 = "请给「用户" . $order->name . "」群聊发送【体脂秤指导视频】";
$theme2 = "请给「用户" . $order->name . "」群聊发送【手环指导视频】";
$theme3 = "请编辑「用户" . $order->name . "」的餐单内容";
$processKey1 = "send_use_call_video";
$processKey2 = "send_use_band_video";
$processKey3 = "set_guide_scheme";
// 待办通知-副教练
TaskService::AddTask(0, 0, $theme1, [2], $order->id, "", "", "", $processKey1);
TaskService::AddTask(0, 0, $theme2, [2], $order->id, "", "", "", $processKey2);
TaskService::AddTask(0, 0, $theme3, [2], $order->id, "", "", "", $processKey3);
// // 待办通知-行政
// TaskService::AddTask(0,0,$theme2, [8]);
// $order->start_time = date("Y-m-d H:i:s");
DmaProcessLog::addUserProcessLog($order->user_id ?? 0, $order->id ?? 0, 1, "check_order_start", "确认方案开始", $service_user->user_id ?? 0);
} elseif ($order_status == "SUSPEND") {
DmaProcessLog::addUserProcessLog($order->user_id ?? 0, $order->id ?? 0, 1, "mark_order_susped", "标记用户方案暂停", $service_user->user_id ?? 0);
}
$order->status = $order_status;
$order->save();
MarkOrderLog::create(['order_id' => $order->id, 'operate_id' => $service_user->user_id, 'operate_name' => $service_user->name, 'remark' => "服务人员修改order_status:" . $order_status]);
return $this->success('ok');
}
/**
* 发送消息
*/
public function sendNoticeMsg($order)
{
$notice_user = NoticeUser::select()->get();
foreach ($notice_user as $value) {
$params = [
'touser' => $value->open_id,
'template_id' => config('wechat.tpls.order_user_info_set'),
'url' => config('app.url') . '/h5/#/orderScheme',
'data' => [
'time4' => ['value' => date('Y-m-d H:i:s')],
'character_string5' => ['value' => $order->trade_no],
'phrase9' => ['value' => $order->name],
'phone_number14' => ['value' => $order->mobile],
]
];
SendTemplateNotice::dispatch($params)->onQueue('health');
// 系统通知
$chatService = new ChatService();
$chatService->sendImMsgUserToUserV2($order->id, $value->user_id, '方案设置通知', "用户【{$order->name}】的方案待设置。", 'https://image.fulllinkai.com/202403/29/dea3e0c27107cdf178635d2a41199e5e.png', '');
//发送短信通知
// $message = "您有新订单需要处理:用户{$order->name},订单号:{$order->trade_no}的方案需要设置【友福同享】";
// if($value['send_message']){
// //发送短信通知
// $data = [
// 'message'=>$message,
// ];
// SendEasySms::dispatch($value->mobile, $data)->onQueue('health');
// }
// //发送企业微信消息通知
// $work_user_id = ServiceUser::where('user_id',$value->user_id)->value('work_user_id');
// if($work_user_id){
// WechatService::sendWorkMessage($work_user_id,'text',['content'=>$message]);
// }
}
}
/**
* 更新订单用户
* @param Request $request
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
*/
public function updateOrderUser(Request $request)
{
// 开启事务
DB::beginTransaction();
try {
//查看是否存在群组
$chat_id = $request->input('chat_id');
if (empty($chat_id)) {
return $this->failure('chat_id不为空');
}
$service_user_id = $request->get('service_user_id');
if ($service_user_id) {
$group = Group::where('im_chat_id', $chat_id)->first();
} else {
$group = Group::where('chat_id', $chat_id)->first();
}
if (!$group) {
return $this->failure('群组不存在');
}
if (empty($group->order_id)) {
return $this->failure('群组未绑定订单');
}
$area_code = $request->input('area_code');
$mobile = $request->input('mobile');
if (empty($mobile)) {
return $this->failure('手机号码不为空');
}
$userInfo = User::where('mobile', $mobile)->first();
if (!$userInfo) {
return $this->failure('手机号用户不存在');
}
$order = Order::where('id', $group->order_id)->where('user_id', '<>', $userInfo->id)->first();
if (!$order) {
return $this->failure('订单不存在');
}
$old_user_id = $order->user_id;
//同步旧的信息到新账号
$old_user_info = User::where('id', $old_user_id)->first();
if ($old_user_info) {
$userInfo->name = $old_user_info->name;
$userInfo->avatar = $old_user_info->avatar;
$userInfo->sex = $old_user_info->sex;
$userInfo->birthday = $old_user_info->birthday;
$userInfo->stature = $old_user_info->stature;
$userInfo->unit = $old_user_info->unit;
$userInfo->language = $old_user_info->language;
$userInfo->save();
//同步称重信息
$old_fat_log = FatLog::where('user_id', $old_user_id)->select()->get();
$fat_log = [];
foreach ($old_fat_log as $value) {
$fat_log['user_id'] = $userInfo->id;
$fat_log['fat_name'] = $value->fat_name;
$fat_log['fat_state'] = $value->fat_state;
$fat_log['fat_data'] = $value->fat_data;
$fat_log['unit'] = $value->unit;
$fat_log['tested_at'] = $value->tested_at;
FatLog::create($fat_log);
}
}
$order->area_code = $area_code;
//切换订单用户
$order->user_id = $userInfo['id'];
$res = $order->save();
DB::commit();
return $this->success('ok', $res);
} catch (\Exception $e) {
DB::rollBack();
Log::error($e->getMessage());
return $this->failure('数据错误');
}
}
/**
* 填写快递单号
* @param Request $request
* @return \Illuminate\Http\JsonResponse|void
*/
public function updateDeliveryInfo(Request $request)
{
try {
$delivery_name = $request->input('delivery_name');
$delivery_number = $request->input('delivery_number');
if (empty($delivery_name) || empty($delivery_number)) {
return $this->failure('快递公司或单号不为空');
}
//查看是否存在群组
$chat_id = $request->input('chat_id');
if (empty($chat_id)) {
return $this->failure('chat_id不为空');
}
$service_user_id = $request->get('service_user_id');
if ($service_user_id) {
$group = Group::where('im_chat_id', $chat_id)->first();
} else {
$group = Group::where('chat_id', $chat_id)->first();
}
if (!$group) {
return $this->failure('群组不存在');
}
$group->order->delivery_name = $delivery_name;
$group->order->delivery_number = $delivery_number;
$group->order->save();
//插入操作记录
OrderOperateLog::create(['order_id' => $group->order->id, 'remark' => '已发货 ' . $delivery_name . ' ' . $delivery_number]);
return $this->success('ok', $group->order);
} catch (\Exception $e) {
Log::error($e->getMessage());
return $this->failure('数据错误');
}
}
public function getChatInfo(Request $request)
{
try {
//查看是否存在群组
$order = $request->group->order;
if (empty($order)) {
return $this->failure("订单不存在");
}
$config = [];
$config['order_status'] = $order->status;
$config['service_status'] = $order->service_status;
$guide_template = GuideTemplate::where('order_id', $order->id)->first();
$guide_status = GuideTemplate::NOT_EXIST;
if (!empty($guide_template)) {
$guide_status = GuideTemplate::NOT_CHECK;
if (!empty($guide_template->effect_guide)) {
$guide_status = GuideTemplate::IS_CHECK;
}
}
//如果订单用户未填写信息,邀请用户填写信息,胶囊显示状态控制
if ($order->service_status == 'NOINFO') {
$guide_status = -1;
}
$config['guide_status'] = $guide_status;
return $this->success('ok', $config);
} catch (\Exception $e) {
AddErrorLog::dispatch('getChatInfo file:' . $e->getFile() . ' line:' . $e->getLine() . ' message:' . $e->getMessage())->onQueue('health');
return $this->failure('获取失败');
}
}
public function checkBeforeDmaQuestion(Request $request, $id)
{
$operate_user_id = $request->input("service_user_id");
$exists = DB::table("dma_service_user_role")->where("user_id", $operate_user_id)->where("role", 7)->exists();
if (!$exists) {
return $this->failure("当前账号无权限,请联系管理员添加审核委员会");
}
$status = $request->input("status");
$remark = $request->input("remark");
$question = DB::table("before_dma_question")->where("id", $id)->first();
$user = DB::table("users")->where("id", $question->user_id)->first();
//查看用户订单是否存在,存在则绑定群id
$order = Order::getPayOrder($user->id);
$order_id = $order->id ?? null;
if ($status == 1) {
//创建虚拟订单
$data = [];
$data['name'] = $user->name;
$data['price'] = Order::ORDER_PRICE;
$data['mobile'] = $user->mobile;
$OfflineOrderService = new OfflineOrderService();
if (!$order) {
$offline_order = $OfflineOrderService->createOfflineOrder($data, $user->id);
$order_id = $offline_order->order_id ?? null;
}
DmaProcessLog::addUserProcessLog($question->user_id ?? 0, $order_id, 1, "check_dma_question", "系统已同意[" . $user->name . "]的方案前调查表单", $operate_user_id);
} elseif ($status == 2) {
$order_id = "";
DmaProcessLog::addUserProcessLog($question->user_id ?? 0, $order_id, 1, "check_dma_question", "系统拒绝[" . $user->name . "]的方案前调查表单", $operate_user_id);
}
DmaProcessLog::addUserProcessLog($question->user_id ?? 0, $order_id, 1, "send_check_dma_question_to_user", "系统已发送[审核结果]给" . $user->name, $operate_user_id, 5);
DmaProcessLog::addUserProcessLog($question->user_id ?? 0, $order_id, 1, "send_check_dma_question_to_admin", "系统已发送[审核结果]给行政", $operate_user_id, 5);
$operate_user = User::find($operate_user_id);
$question->status = $status;
$question->order_id = $order_id ?? null;
$question->remark = $remark;
$question->operate_user_id = $operate_user_id;
$question->operate_user_name = $operate_user->name ?? "";
// $question->save();
DB::table("before_dma_question")->where("id", $id)->update(["status" => $status, "order_id" => $order_id, "remark" => $remark, "operate_user_id" => $operate_user_id, "operate_user_name" => $operate_user->name ?? ""]);
if ($status == 1) {
$data = [
'message' => "用户" . $user->name . "的方案前健康评估表已审核通过,请跟进后续服务【友福同享】",
];
// 短信通知行政
$roles = DmaServiceUserRole::with("user")->where("status", 1)->where("role", 8)->get();
foreach ($roles as $role) {
if ($role->user && $role->user->mobile) {
SendEasySms::dispatch($role->user->mobile, $data, $role->user->area_code)->onQueue('send.code.sms');
}
}
}
return $this->success('ok', $question);
}
}