input('chat_id'); if (empty($chat_id)) throw new \Exception("缺少参数群id"); // $group = Group::with('order')->where('chat_id', $chat_id)->first(); $group = $request->group; if (empty($group) || empty($group->order)) return $this->failure("缺少群信息或者订单信息"); //增加营养素 $schemes = []; $schemes_info = GuideScheme::where('order_id', $group->order->id)->first(); if (!empty($schemes_info)) { $schemes = $schemes_info->scheme; } if (empty($group->order->user_id)) { if ($group->order->orderUserInfo) { $group->order->orderUserInfo->scheme = $schemes; //增加快递信息 $group->order->orderUserInfo->delivery_name = $group->order->delivery_name; $group->order->orderUserInfo->delivery_number = $group->order->delivery_number; $group->order->orderUserInfo->delivery_type = $group->order->delivery_type; } $data = OrderUserInfoV1Resource::make($group->order->orderUserInfo); } else { $user_info = UserInfo::where('user_id', $group->order->user_id)->first(); $user_info->scheme = $schemes; //增加快递信息 $user_info->delivery_name = $group->order->delivery_name; $user_info->delivery_number = $group->order->delivery_number; $user_info->delivery_type = $group->order->delivery_type; $data = UserInfoV1Resource::make($user_info); } return $this->success('ok', $data); } public function deleteBodyImages(Request $request) { $order = $request->group->order; $key = $request->input("key"); $user = $order->user; $body_images = json_decode($user->body_images, true); if (isset($body_images[$key])) { $body_images[$key] = ""; } User::where("id", $order->user_id)->update(["body_images" => json_encode($body_images)]); return $this->success('ok'); } public function deleteAfterBodyImages(Request $request) { $order = $request->group->order; $key = $request->input("key"); $user = $order->user; $after_body_images = json_decode($user->after_body_images, true); if (isset($after_body_images[$key])) { $after_body_images[$key] = ""; } User::where("id", $order->user_id)->update(["after_body_images" => json_encode($after_body_images)]); return $this->success('ok'); } public function healthReport(Request $request) { $chat_id = $request->input('chat_id'); // $group = Group::with('order')->where('chat_id', $chat_id)->first(); $group = $request->group; if (empty($group) || empty($group->order)) return $this->failure("缺少群信息或者订单信息"); if (!empty($group->order->user_id)) { $before_reports = MedicalReport::where('user_id', $group->order->user_id)->where('type', MedicalReport::TYPE_BEFORE)->orderBYDesc('id')->get(); } else { $before_reports = OrderMedicalReport::where('order_id', $group->order->id)->orderBYDesc('id')->get(); } foreach ($before_reports as $report) { $report->content = json_decode($report->content); $report->body_images = json_decode($report->body_images); $report->content_file = json_decode($report->content_file); } $after_reports = MedicalReport::where('user_id', $group->order->user_id)->where('type', MedicalReport::TYPE_AFTER)->orderBYDesc('id')->get(); foreach ($after_reports as $after_report) { $after_report->content = json_decode($after_report->content); $after_report->body_images = json_decode($after_report->body_images); $after_report->content_file = json_decode($after_report->content_file); } // return $this->success('ok',$reports); return $this->success('ok', compact('before_reports', 'after_reports')); } public function storeHealthReport(Request $request) { $user = auth()->user(); $order = $request->group->order; $medical_report = $request->medical_report; $medical_report_file = $request->input("medical_report_file"); $content = $request->input("content"); $content_file = null; $anomaly_type = $request->anomaly_type ?: 1; $medical_date = $request->medical_date; $body_images = $request->body_images; $desc = $request->desc; $anomaly = $request->anomaly; $type = $request->type ?? 0; if ($medical_report) { $content = json_encode($medical_report); } if ($medical_report_file) { $content_file = json_encode($medical_report_file); } if ($order->user) { MedicalReport::create(['user_id' => $order->user->id, "order_id" => $order->id, 'type' => $type, 'content' => $content, "content_file" => $content_file, 'medical_date' => $medical_date, 'desc' => $desc, 'anomaly' => json_encode($anomaly), 'anomaly_type' => $anomaly_type, 'body_images' => !empty($body_images) ? json_encode($body_images) : null]); } else { OrderMedicalReport::create([ 'order_id' => $order->id, 'content' => $content, 'medical_date' => $medical_date, 'desc' => $desc, 'anomaly' => json_encode($anomaly), 'anomaly_type' => $anomaly_type ]); } if ($type == 1) { DmaProcessLog::addUserProcessLog($order->user_id ?? 0, $order->id ?? 0, 1, "upload_after_report", $user->name . "帮用户上传复检报告", auth()->id()); } else { DmaProcessLog::addUserProcessLog($order->user_id ?? 0, $order->id ?? 0, 1, "upload_before_report", $user->name . "帮用户上传体检报告", auth()->id()); } return $this->success('ok'); } public function deleteHealthReport(Request $request, $report_id) { $order = $request->group->order; if ($order->user) { MedicalReport::where('id', $report_id)->delete(); } else { OrderMedicalReport::where('id', $report_id)->delete(); } 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 addOtherHealthFile(Request $request) { try { $order = $request->group->order; $text = $request->input('text'); $images = $request->input('images'); $file = $request->input("file"); $type = $request->input('type', MedicalReport::TYPE_BEFORE); if (is_array($images)) { $images = json_encode($images); } if (is_array($file)) { $file = json_encode($file); } $map = []; $map['user_id'] = $order->user->id; $map['text'] = $text; $map['type'] = $type; $map['images'] = $images; $map['file'] = $file; $res = OtherHealthFile::create($map); return $this->success('ok', $res); } catch (Exception $e) { return $this->jsonResponse(1, $e->getMessage()); } } /** * 获取补充列表 * @param Request $request * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse */ public function getOtherHealthReport(Request $request) { try { $order = $request->group->order; $before_reports = OtherHealthFile::where('user_id', $order->user_id)->where('type', MedicalReport::TYPE_BEFORE)->orderByDesc('id')->get(); foreach ($before_reports as $item) { $item->images = json_decode($item->images, true); } $after_reports = OtherHealthFile::where('user_id', $order->user_id)->where('type', MedicalReport::TYPE_AFTER)->orderByDesc('id')->select()->get(); foreach ($after_reports as $value) { $value->images = json_decode($value->images, true); } // return $this->success('ok',$before_list); return $this->success('ok', compact('before_reports', 'after_reports')); } catch (Exception $e) { return $this->jsonResponse(1, $e->getMessage()); } } /** * 获取补充资料详情 * @param Request $request * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse */ public function getOtherHealthFileDetail(Request $request) { try { $id = $request->get('id'); $detail = OtherHealthFile::where('id', $id)->first(); $detail->images = json_decode($detail->images, true); return $this->success('ok', $detail); } catch (Exception $e) { return $this->jsonResponse(1, $e->getMessage()); } } /** * 删除补充资料 * @param Request $request * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse */ public function deleteOtherHealthFile(Request $request) { try { $id = $request->get('id'); $res = OtherHealthFile::where('id', $id)->delete(); return $this->success('ok', $res); } catch (\Exception $e) { return $this->jsonResponse(1, $e->getMessage()); } } /** * 内部服务状态 * @param Request $request */ public function userServiceStatus(Request $request) { $order = $request->group->order; if (empty($order)) { return $this->failure("订单不存在"); } $status = $order->service_status; $order_id = $order->trade_no ?? 0; $order_status = $order->status; $guide_info = Guide::where('user_id', $order->user_id) ->where('order_id', $order->id) ->where('status', Guide::STATUS_SCHEDULED) ->first(); $start_date = date('Y-m-d'); if ($guide_info) { $start_date = $guide_info->phase_date; } if ($status == 'FINISHED') { $start_date = $order->updated_at; } // 转换为 Carbon 对象 $givenDateTime = Carbon::parse($start_date); // 当前时间 $now = Carbon::now(); // 计算天数差 $diffInDays = $givenDateTime->diffInDays($now); $scheme_date = $diffInDays + 1; $suspend_remark = $order->suspend_remark ?: ""; return $this->success('ok', compact('status', 'order_id', 'scheme_date', 'order_status', "suspend_remark")); } /** * 获取我的客户列表 * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse */ public function getInviteUser(Request $request) { try { $user = auth()->user(); $page_size = $request->get('page_size', 15); $list = InviteUser::where('invite_user_id', $user->id) ->orderByDesc('id') ->paginate($page_size); ; foreach ($list as $item) { $item->wx_name = ''; $item->avatar = ''; $user_info = User::where('id', $item->user_id)->first(); if (!$user_info) { continue; } $item->wx_name = $user_info->name; $item->avatar = $user_info->avatar; //获取申请记录 $item->apply = ApplyScanQrcode::where('invite_user_id', $user->id) ->where('user_id', $item->user_id) ->select('date', 'id')->orderBy('date', 'asc')->limit(3)->get(); $date = date('Y-m-d'); foreach ($item->apply as $apply) { $apply->status = 0; $exists = ScanQrcodeUser::where('user_id', $item->user_id) ->where('created_at', 'like', $apply->date . '%') ->exists(); if ($exists) { $apply->status = 1; } if ($apply->date < $date && !$exists) { $apply->status = 2; } } } return $this->success('ok', $list); } catch (Exception $e) { return $this->jsonResponse(1, $e->getMessage()); } } /** * 获取某个用户的申请记录 * @param Request $request * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse */ public function getApplyList(Request $request) { try { $invite_user = auth()->user(); $user_id = $request->get('user_id'); $list = ApplyScanQrcode::where('invite_user_id', $invite_user->id) ->where('user_id', $user_id) ->orderBy('date', 'asc') ->paginate(); return $this->success('ok', $list); } catch (Exception $e) { Log::error('getApplyList:' . $e->getMessage()); return $this->jsonResponse(1, $e->getMessage()); } } /** * 填写邀请客户信息 * @param Request $request * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse */ public function updateInviteUserInfo(Request $request) { try { $id = $request->get('id'); if (empty($id)) { return $this->failure('id不为空'); } $name = $request->get('name', ''); $mobile = $request->get('mobile', ''); $res = InviteUser::where('id', $id)->update(['name' => $name, 'mobile' => $mobile]); return $this->success('ok', $res); } catch (Exception $e) { return $this->jsonResponse(1, $e->getMessage()); } } /** * 扫码签到 * @param Request $request * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse */ public function userScanQrcode(Request $request) { $user = Auth()->user(); $user_info = User::where('id', $user->id)->first(); if (!$user_info) { return $this->failure('用户信息不存在'); } //查看用户当前是否已签到 // 获取今天零点的时间戳 $today_start = strtotime('today'); // 获取明天零点的时间戳 $tomorrow_start = $today_start + 86400; // 格式化时间戳为日期时间字符串 $start_time = date('Y-m-d H:i:s', $today_start); $end_time = date('Y-m-d H:i:s', $tomorrow_start); $exists = ScanQrcodeUser::where('user_id', $user->id)->whereBetween('created_at', [$start_time, $end_time])->exists(); if ($exists) { $msg_status = true; return $this->success('ok', compact('msg_status')); } //查看用户类型 $type = 3; $real_name = $user_info->name; $mobile = $user_info->mobile; $avatar = $user_info->avatar; $service_user = Partner::where('user_id', $user->id)->first(); $agent = $user->isAgent(); if ($agent) { $type = 1; } if ($service_user) { $type = 1; $real_name = $service_user->name; $mobile = $service_user->mobile; $avatar = $service_user->pic; } $invite_user = InviteUser::where('user_id', $user->id)->first(); if ($invite_user) { $type = 2; $real_name = $invite_user->name; $mobile = $invite_user->mobile; } $map = []; $map['user_id'] = $user->id; $map['nickname'] = $user_info->name; $map['real_name'] = $real_name; $map['avatar'] = $avatar; $map['mobile'] = $mobile; $map['type'] = $type; $res = ScanQrcodeUser::create($map); $flag = false; if ($type == 3) { $flag = true; } //查看是否有帮忙申请扫码 $date = date('Y-m-d'); $apply_info = ApplyScanQrcode::where('date', $date)->where('user_id', $user->id)->get(); foreach ($apply_info as $apply) { $open_id = Wechat::where('user_id', $apply->invite_user_id)->where('type', 'official')->value('openid'); //查找填写的用户名 $name = InviteUser::where('invite_user_id', $apply->invite_user_id)->where('user_id', $apply->user_id)->value('name'); $send_name = $name ?? '未填写名字'; //发送模板消息 if ($open_id) { $params = [ 'touser' => $open_id, 'template_id' => config('wechat.tpls.user_scan_qrcode'), 'data' => [ 'thing2' => ['value' => $send_name], 'thing3' => ['value' => '友福同享'], 'time5' => ['value' => date('Y-m-d H:i:s')], ] ]; SendTemplateNotice::dispatch($params)->onQueue('health'); } } return $this->success('ok', compact('res', 'flag')); } /** * 获取扫码签到列表 * @param Request $request */ public function getScanLog(Request $request) { try { $date = $request->input('date'); if (empty($date)) { return $this->failure('时间不为空'); } $user = Auth()->user(); $start_date = date('Y-m-01', strtotime($date)); $end_date = date('Y-m-d', strtotime(datetime: "$start_date + 1 month -1 day")); $dailies = CommonService::daliy($start_date, $end_date); $date_arr = []; foreach ($dailies as $daily) { $start_day_time = strtotime($daily); $end_day_time = $start_day_time + 86400; $start_time = date('Y-m-d H:i:s', $start_day_time); $end_time = date('Y-m-d H:i:s', $end_day_time); $exists = ScanQrcodeUser::where('user_id', $user->id)->whereBetween('created_at', [$start_time, $end_time])->exists(); $status = 0; if ($exists) { $status = 1; } $date_arr[] = $status; } return $this->success('ok', $date_arr); } catch (Exception $e) { return $this->jsonResponse(1, $e->getMessage()); } } /** * 给用户预约签到 * @param Request $request */ public function applyUserScanQrcode(Request $request) { try { $invite_user = Auth()->user(); $user_id = $request->input('user_id'); $date = $request->input('date'); if (empty($date) || empty($user_id)) { return $this->failure('用户和日期不为空'); } //查看这个用户这个日期是否邀请过 $exists = ApplyScanQrcode::where('invite_user_id', $invite_user->id)->where('date', $date)->where('user_id', $user_id)->exists(); if ($exists) { return $this->failure('用户该日期已预约'); } $map = [ 'invite_user_id' => $invite_user->id, 'date' => $date, 'user_id' => $user_id ]; $model = ApplyScanQrcode::create($map); return $this->success('ok', $model); } catch (Exception $e) { Log::error('applyUserScanQrcode:' . $e->getMessage()); return $this->jsonResponse(1, $e->getMessage()); } } /** * 取消预约 * @param Request $request * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse */ public function deleteApplyLog(Request $request) { try { $id = $request->get('id'); if (empty($id)) return $this->failure('id不为空'); $res = ApplyScanQrcode::where('id', $id)->delete(); return $this->success('ok', $res); } catch (Exception $e) { Log::error('deleteApplyLog:' . $e->getMessage()); return $this->jsonResponse(1, $e->getMessage()); } } }