Преглед на файлове

Merge branch 'master' into develop

zilong преди 4 години
родител
ревизия
7cdcc156b5

+ 23 - 0
app/Admin/Actions/backstage/Orders/Message.php

xqd
@@ -0,0 +1,23 @@
+<?php
+
+namespace App\Admin\Actions\backstage\Orders;
+
+use App\Models\ImMessage;
+use Encore\Admin\Actions\RowAction;
+use Illuminate\Database\Eloquent\Model;
+use Encore\Admin\Layout\Column;
+use Encore\Admin\Layout\Content;
+use Encore\Admin\Layout\Row;
+
+class Message extends RowAction
+{
+    public $name = '查看消息';
+    public function href()
+    {
+        return '/admin/message?order_id='.$this->row->id.
+            '&docter_id='.$this->row->docter_id.
+            '&user_id='.$this->row->user_id.
+            '&start='.$this->row->receiving_time.
+            '&end='.$this->row->end_time.'';
+    }
+}

+ 66 - 0
app/Admin/Controllers/OrdersManagement/ConsultingOrdersController.php

xqd xqd xqd xqd
@@ -3,19 +3,24 @@
 namespace App\Admin\Controllers\OrdersManagement;
 
 use App\Admin\Actions\backstage\Orders\Evaluate;
+use App\Admin\Actions\backstage\Orders\Message;
 use App\Admin\Actions\backstage\Orders\OrderDetails;
 use App\Admin\Actions\backstage\Orders\OrderOpinion;
 use App\Admin\Actions\backstage\Orders\RefundApplicationAction;
 use App\Admin\Actions\backstage\User\MapDepot;
 use App\Admin\Actions\backstage\User\Suggests;
+use App\Models\ImMessage;
 use App\Models\Order;
 use App\Models\OrderPack;
 use App\Models\ServicePack;
+use Encore\Admin\Layout\Content;
 use Encore\Admin\Widgets\Table;
 use Encore\Admin\Controllers\AdminController;
 use Encore\Admin\Form;
 use Encore\Admin\Grid;
 use Encore\Admin\Show;
+use Illuminate\Http\Request;
+use Encore\Admin\Facades\Admin;
 
 class ConsultingOrdersController extends AdminController
 {
@@ -93,6 +98,10 @@ class ConsultingOrdersController extends AdminController
             $actions->disableEdit();
             $actions->disableDelete();
             $actions->add(new OrderOpinion());
+            if ($actions->row->order_status == 4)
+            {
+                $actions->add(new Message());
+            }
         });
         $grid->export(function ($export) {
             $export->filename('咨询订单');
@@ -168,6 +177,9 @@ class ConsultingOrdersController extends AdminController
             return new Table(['订单id','评价内容','评价状态'],$infos);
         });
         $grid->column('evaluate.score', __('订单评分'));
+//        $grid->column('file_path','录音')->display(function (){
+//            return 'callLog/1.mp3';
+//        })->downloadable('/upload');
         $grid->column('order_notes', __('订单备注'));
         $grid->column('payment_time', __('支付时间'))->display(function ($time){
             if ($time == 0)
@@ -296,4 +308,58 @@ class ConsultingOrdersController extends AdminController
 
         return $form;
     }
+    function message(Content $content,Request $request)
+    {
+//        dd($request->all());
+        $user = $request->input('user_id');
+        $docter = $request->input('docter_id');
+        $start = $request->input('start');
+        $end = $request->input('end');
+        $str_docter = 'doctor_'.$user;
+        $str_user = 'member_'.$docter;
+//        $docter = 10086;
+//        $user = 29068;
+//        $start = 1614433272;
+//        $end = 1614433703;
+//        $str_docter = 'doctor_'.$docter;
+//        $str_user = 'member_'.$user;
+        $user_arr = ImMessage::whereBetween('create_time',[$start,$end])
+            ->where('senderId',$str_user)
+            ->get()->toArray();
+        $docter_arr = ImMessage::whereBetween('create_time',[$start,$end])
+            ->where('senderId',$str_docter)
+            ->get()->toArray();
+        $arr = array_merge($user_arr,$docter_arr);
+        array_multisort(array_column($arr,'create_time'),SORT_ASC,$arr);
+        $content = new Content();
+        $order_id = $request->input('order_id');
+        $content->title('图文咨询聊天记录 ');
+        $content->description('订单号'.$order_id);
+        Admin::js('jquery-3.5.1.min.js');
+        $content->body('<iframe src="/admin/message_view?docter_id='.$docter.'
+                                                                &user='.$user.'
+                                                                &start='.$start.'
+                                                                &end='.$end.'
+                                                                &order_id='.$order_id.'" style="width: 100%;height:800px;border: none"></iframe>');
+        return $content;
+    }
+    public function message_view(Request $request)
+    {
+        $start = $request->input('start');
+        $end = $request->input('end');
+        $docter = $request->input('docter_id');
+        $user = $request->input('user');
+        $order_id = $request->input('order_id');
+        $str_docter = 'doctor_'.$docter;
+        $str_user = 'member_'.$user;
+        $user_arr = ImMessage::whereBetween('create_time',[$start,$end])
+            ->where('senderId',$str_user)
+            ->get()->toArray();
+        $docter_arr = ImMessage::whereBetween('create_time',[$start,$end])
+            ->where('senderId',$str_docter)
+            ->get()->toArray();
+        $arr = array_merge($user_arr,$docter_arr);
+        array_multisort(array_column($arr,'create_time'),SORT_ASC,$arr);
+        return view('admin.message',compact('arr','order_id','docter','user'));
+    }
 }

+ 2 - 1
app/Admin/routes.php

xqd xqd
@@ -3,7 +3,6 @@
 use Illuminate\Routing\Router;
 
 Admin::routes();
-
 Route::group([
     'prefix'        => config('admin.route.prefix'),
     'namespace'     => config('admin.route.namespace'),
@@ -18,6 +17,8 @@ Route::group([
     $router->resource('/cdms_user', CdmsController::class);
     $router->resource('/organizations', OrganizationController::class);
     $router->resource('/docters', DocterController::class);
+    $router->get('/message', 'OrdersManagement\ConsultingOrdersController@message');
+    $router->get('/message_view', 'OrdersManagement\ConsultingOrdersController@message_view');
     //医生类型
     $router->resource('docter_types', DocterTypeController::class);
 

+ 15 - 1
app/Community/Controllers/DocterChatController.php

xqd
@@ -78,7 +78,21 @@ class DocterChatController extends AdminController
                 $filter->timestampBetween('orderPatient.appoint_start_time','预约时间')->datetime();
             });
         });
-        $grid->column('order_status', __('订单状态'))->using(Order::$_order_status);
+        $status_arr = Order::getStatus();
+        $grid->column('order_status', __('订单状态'))->display(function ($w) use ($status_arr) {
+            $info = $status_arr[intval($w)];
+            if($w == 1 || $w == 2){
+                return '<span class="label label-warning">'.$info.'</span>';
+            } else if( $w == 4 ){
+                return '<span class="label label-success">'.$info.'</span>';
+            } else if($w == 7 || $w == 3 ){
+                return '<span class="label label-info">'.$info.'</span>';
+            } else if($w == 6){
+                return '<span class="label label-danger">'.$info.'</span>';
+            } else {
+                return '<span class="label label-default">'.$info.'</span>';
+            }
+        });
         $grid->column('created_at', __('下单时间'));
 
         return $grid;

+ 5 - 1
app/Http/Controllers/Api/V1/PatientController.php

xqd xqd
@@ -9,6 +9,7 @@
 namespace App\Http\Controllers\Api\V1;
 
 use App\Models\Order;
+use App\Models\OrderPack;
 use App\Models\Patient;
 
 class PatientController extends AuthController
@@ -108,7 +109,10 @@ class PatientController extends AuthController
         $data['patient'] = Patient::where('id', $req['patient_id'])->where('user_id', $user['id'])->first()->append(['order_num', 'pack_docter_num', 'perfectd_degree']);
 
         $data['orders']['cases'] = Order::with(['docter.office', 'docter.qualification', 'organization.docter'])->where('user_id', $user['id'])->where('patient_id', $req['patient_id'])->whereIn('order_status', [2,3])->where('product_type', '<', 6)->orderBy('id', 'desc')->get();
-        $data['orders']['service_packs'] = Order::with('orderPack')->where('user_id', $user['id'])->where('patient_id', $req['patient_id'])->whereIn('order_status', [2,3])->where('product_type', 6)->orderBy('id', 'desc')->get();
+
+        //只输出未过期的服务包
+        $orderIds = OrderPack::where('user_id', $user['id'])->where('end_time', '<=', time())->pluck('order_id')->toArray();
+        $data['orders']['service_packs'] = Order::with('orderPack')->whereIn('id', $orderIds)->where('user_id', $user['id'])->where('patient_id', $req['patient_id'])->whereIn('order_status', [2,3])->where('product_type', 6)->orderBy('id', 'desc')->get();
 
         return out($data);
     }

+ 181 - 0
resources/views/admin/message.blade.php

xqd
@@ -0,0 +1,181 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Document</title>
+    <style>
+        .title{
+            width: 100%;
+            height: 50px;
+            text-align: center;
+        }
+        .docter{
+            width: 50px;
+            height: 50px;
+            border-radius: 50%;
+            overflow: hidden;
+        }
+        .docter img{
+            width: 100%;
+        }
+        .user{
+            width: 50px;
+            height: 50px;
+            border-radius: 50%;
+            overflow: hidden;
+        }
+        .user img{
+            width: 100%;
+        }
+        .docter-info{
+            float: left;
+        }
+        .docter—content{
+            margin-top: 20px;
+            margin-left: 50px;
+            float: left;
+        }
+        .clear{
+            clear: both;
+        }
+        .user-info{
+            float: right;
+        }
+        .user-content{
+            float: left;
+            margin-right: 50px;
+            margin-top: 20px;
+            size: 100px;
+        }
+        .left
+        {
+            margin-top: 20px;
+            margin-bottom: 20px;
+            float: left;
+        }
+        .right{
+            margin-top: 20px;
+            float: right;
+            margin-bottom: 20px;
+
+        }
+    </style>
+</head>
+<body>
+<div class="all">
+    <?php
+//        ^ array:5 [▼
+//  "docter_id" => "10086"
+//  "user" => "14879"
+//  "start" => "1614421200"
+//  "end" => "1614421800"
+//  "order_id" => "97453"
+//]
+        $docter = request('docter_id');
+        $user = request('user');
+        $docter_info = \App\Models\Docter::where('id',$docter)->first(['name','avatar'])->toArray();
+        $user_info = \App\Models\User::where('id',$user)->first(['nickname','avatar'])->toArray();
+    ?>
+    <div class="title"><h3>订单号:{{$order_id}}</h3></div>
+        @foreach($arr as $value)
+            @php($str = substr($value['senderId'],0,6))
+            @php($time = date('Y-m-d H:i:s',$value['create_time']))
+            @if($str == 'doctor')
+                <div class="left">
+                    {{--头像和名字区域--}}
+                    <div class="docter-info">
+                        <div>{{$time}}</div>
+                        <div class="name">
+                            {{$docter_info['name']}}
+                        </div>
+                        <div class="docter">
+                            <img src="{{$docter_info['avatar']}}" alt="医生">
+                        </div>
+                    </div>
+                    {{--内容区域--}}
+                    <div class="docter—content">
+                        @if($value['type']=='audio')
+                            <?php
+                                $url = json_decode($value['payload']);
+                                $url = (Array)$url;
+                            ?>
+                            <div>
+                                <audio src="{{$url['url']}}" controls="controls">
+                                </audio>
+                            </div>
+                        @elseif($value['type']=='text')
+                            <?php
+                            $text = json_decode($value['payload']);
+                            $text = (Array)$text;
+                            ?>
+                            <div>
+                                <p>{{$text['text']}}</p>
+                            </div>
+                            @elseif($value['type']=='image')
+                            <?php
+                            $image = json_decode($value['payload']);
+                            $image = (Array)$image;
+                            ?>
+                            <div>
+                                <img class="content-img" src="{{$image['url']}}" alt="图片">
+                            </div>
+                        @endif
+                    </div>
+                    <div class="clear"></div>
+                </div>
+                <div class="clear"></div>
+            @endif
+            @if($str == 'member')
+            <div class="right">
+                {{--内容区域--}}
+                <div class="user-content">
+                    @if($value['type']=='audio')
+                        <?php
+                        $url = json_decode($value['payload']);
+                        $url = (Array)$url;
+                        ?>
+                        <div>
+                            <audio src="{{$url['url']}}" controls="controls">
+                            </audio>
+                        </div>
+                    @elseif($value['type']=='text')
+                        <?php
+                        $text = json_decode($value['payload']);
+                        $text = (Array)$text;
+                        ?>
+                        <div>
+                            <p>{{$text['text']}}</p>
+                        </div>
+                    @elseif($value['type']=='image')
+                        <?php
+                        $image = json_decode($value['payload']);
+                        $image = (Array)$image;
+                        ?>
+                        <div>
+                            <img class="content-img" src="{{$image['url']}}" alt="图片">
+                        </div>
+                    @endif
+                </div>
+                {{--头像和名字区域--}}
+                <div class="user-info">
+                    <div>
+                        {{$time}}
+                    </div>
+                    <div class="user-name">
+                        {{$user_info['nickname']}}
+                    </div>
+                    <div class="user">
+                        <img src="{{$user_info['avatar']}}" alt="医生">
+                    </div>
+                </div>
+                <div class="clear"></div>
+            </div>
+            <div class="clear"></div>
+            @endif
+        @endforeach
+
+</div>
+</body>
+</html>