Przeglądaj źródła

社区端订单优化

Swdz-WangHaiJun 4 lat temu
rodzic
commit
2e5959751b

+ 2 - 7
app/Community/Actions/Nurse/OrderCance.php

xqd
@@ -15,15 +15,10 @@ class OrderCance extends RowAction
     public function handle(Model $model)
     {
         $id = $this->row->order_id;
-        $user_id = $this->row->orders->user_id;
-        $money = $this->row->payment_amount;
-
-        //退还余额
-        $user_money = User::where(['id'=>$user_id])->value('balance');
         DB::beginTransaction();
         try {
-            User::where('id',$user_id)->update(['balance'=>($user_money + $money)]);
-            $res = Order::where('id',$id)->update(['order_status'=>Order::CANCELED]);
+            //退还余额
+            $res = Order::orderCancel($id);
             DB::commit();
         } catch ( \Exception $e){
             dd($e->getMessage());

+ 57 - 5
app/Community/Actions/Vaccine/AddVaccine.php

xqd xqd xqd
@@ -4,11 +4,16 @@ namespace App\Community\Actions\Vaccine;
 
 use App\Models\Docter;
 use App\Models\OrderVaccine;
+use App\Models\Organization;
+use App\Models\OrganizationVaccines;
+use App\Models\Payment;
 use App\Models\Vaccine;
+use Carbon\Carbon;
 use Encore\Admin\Actions\RowAction;
 use Encore\Admin\Facades\Admin;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Http\Request;
+use Illuminate\Support\Facades\DB;
 
 class AddVaccine extends RowAction
 {
@@ -19,8 +24,52 @@ class AddVaccine extends RowAction
         $ids = request('vaccine_id');
 
         $order_id = $this->row->id;
-        $ids = OrderVaccine::where(['order_id'=>$order_id])->pluck('vaccine_id');
-        
+
+        $old_ids = OrderVaccine::where(['order_id'=>$order_id])->pluck('vaccine_id')->toArray();
+        DB::beginTransaction();
+        try {
+            foreach ($ids as $id){
+                $id = intval($id);
+                $vaccine = Vaccine::where(['id'=>$id])->first();
+//                $org_vaccine = vaccine::where('vaccine_id',$id)->first();
+                if(empty($vaccine) || ($vaccine->stock <0)){
+                    return $this->response()->error($vaccine->name.'库存不足或无效疫苗');
+                }
+
+                if(empty($id)) continue;
+                $vaccine_data = [
+                    'order_id'=>$order_id,
+                    'vaccine_type'=>$vaccine->type,
+                    'vaccine_price'=>$vaccine->price,
+                    'vaccine_name'=>$vaccine->name,
+                    'vaccine_remark'=>$vaccine->remark,
+                    'vaccine_supplier'=>$vaccine->supplier,
+                    'vaccine_id'=>$id
+                ];
+
+
+                $is_have = OrderVaccine::where(['order_id'=>$order_id,'vaccine_id'=>$id])->first();
+                if($is_have) continue;
+                $vaccine_data ['created_at'] = Carbon::now();
+                $vaccine_data ['updated_at'] = Carbon::now();
+                OrderVaccine::insert($vaccine_data);
+                Vaccine::decrement('stock',1);
+            }
+
+            //删除并添加库存
+            foreach ($old_ids as $id){
+                $id = intval($id);
+                if(!in_array($id,$ids)){
+                    OrderVaccine::where(['order_id'=>$order_id,'vaccine_id'=>$id])->delete();
+                    Vaccine::increment('stock',1);
+                }
+            }
+            DB::commit();
+        } catch (\Exception $e){
+            dd($e->getMessage());
+            DB::rollBack();
+        }
+
 
         return $this->response()->success('修改疫苗成功')->refresh();
     }
@@ -30,12 +79,15 @@ class AddVaccine extends RowAction
         $admin = Admin::user();
         $is_admin = Admin::user()->isAdministrator();
         $org_id =$admin->org_id;
-        $list = Vaccine::where('org_id',$org_id)->pluck('name','id');
+        $order_id = $this->row->id;
+
         if($is_admin){
             $list = Vaccine::pluck('name','id');
+        } else {
+            $list = Vaccine::where('org_id',$org_id)->pluck('name','id');
         }
-        if(empty($admin->org_id)) return ;
-        $this->multipleSelect('vaccine_id','疫苗')->options($list)->value();
+        $ids = OrderVaccine::where(['order_id'=>$order_id])->pluck('vaccine_id')->toArray();
+        $this->multipleSelect('vaccine_id','选择疫苗')->options($list)->value($ids)->required();
     }
 
 }

+ 1 - 1
app/Community/Actions/Vaccine/Finished.php

xqd
@@ -12,7 +12,7 @@ class Finished extends RowAction
 
     public function handle(Model $model)
     {
-        $id = $this->row->order_id;
+        $id = $this->row->id;
         $res = Order::where('id',$id)->update(['order_status'=>Order::FINISHED]);
         if($res){
             return $this->response()->success('操作成功!')->refresh();

+ 4 - 8
app/Community/Actions/Vaccine/OrderCance.php

xqd xqd
@@ -6,6 +6,7 @@ use App\Models\Order;
 use App\Models\User;
 use Encore\Admin\Actions\RowAction;
 use Illuminate\Database\Eloquent\Model;
+use Illuminate\Support\Facades\DB;
 
 class OrderCance extends RowAction
 {
@@ -13,16 +14,11 @@ class OrderCance extends RowAction
 
     public function handle(Model $model)
     {
-        $id = $this->row->order_id;
-        $user_id = $this->row->orders->user_id;
-        $money = $this->row->payment_amount;
-
-        //退还余额
-        $user_money = User::where(['id'=>$user_id])->value('balance');
+        $id = $this->row->id;
         DB::beginTransaction();
         try {
-            User::where('id',$user_id)->update(['balance'=>($user_money + $money)]);
-            $res = Order::where('id',$id)->update(['order_status'=>Order::CANCELED]);
+            //退还余额
+            $res = Order::orderCancel($id);
             DB::commit();
         } catch ( \Exception $e){
             dd($e->getMessage());

+ 1 - 1
app/Community/Actions/Vaccine/Reserved.php

xqd
@@ -13,7 +13,7 @@ class Reserved extends RowAction
 
     public function handle(Model $model)
     {
-        $id = $this->row->orders->order_id;
+        $id = $this->row->id;
 
         $res = Order::where('id',$id)->update(['order_status'=>Order::ISING]);
 

+ 1 - 1
app/Community/Controllers/ApiController.php

xqd
@@ -30,7 +30,7 @@ class ApiController extends Controller
     //获取订单
     public function getDocter()
     {
-        return Docter::pluck(['name','id'])->toArray();
+        return Docter::pluck('name','id')->toArray();
     }
 
     //备注

+ 1 - 1
app/Community/Controllers/OrderController.php

xqd
@@ -60,7 +60,7 @@ class OrderController extends AdminController
         $grid->column('docter.name', __('预约医生'));
 //        $grid->column('order_status', __('订单状态'))->using([1=>'未支付',2=>'待接单',3=>'进行中',4=>'已完成',5=>'已取消']);
         $grid->column('order_status','订单状态')->using(Order::getStatus())->label([1=>'info',2=>'warring',3=>'info',4=>'success',5=>'error']);
-//        $grid->column('payment_status', __('支付状态'))->using([1=>'待付款',2=>'已付款',3=>'退款中',4=>'已退款']);
+        $grid->column('payment_status', __('支付状态'))->using([1=>'待付款',2=>'已付款',3=>'退款中',4=>'已退款']);
 
         //查询
         $grid->quickSearch(function ($model, $query) {

+ 6 - 4
app/Community/Controllers/OrderNurseController.php

xqd xqd xqd
@@ -6,7 +6,6 @@ use App\Admin\Actions\Community\Nurse\DelNurse;
 use App\Community\Actions\Nurse\Finished;
 use App\Community\Actions\Nurse\OrderCance;
 use App\Community\Actions\Nurse\Reserved;
-use App\Community\Actions\Vaccine\AddVaccine;
 use App\Models\Docter;
 use App\Models\DocterOrganization;
 use App\Models\Order;
@@ -60,7 +59,9 @@ class OrderNurseController extends AdminController
         $grid->column('patients.appoint_start_time', __('预约时间'))->display(function ($w){
             return date('Y-m-d H:i:s',$w);
         });
-        $grid->column('orders.order_status','订单状态')->using(Order::getStatus())->label([1=>'info',2=>'warring',3=>'info',4=>'success',5=>'error']);
+        $grid->column('orders.order_status','订单状态')->using(Order::getStatus())->label([1=>'info',2=>'warring',3=>'info',4=>'success',5=>'info']);
+        $grid->column('payment_status', __('支付状态'))->using([1=>'待付款',2=>'已付款',3=>'退款中',4=>'已退款'])->label('info');
+
         $grid->column('patients.appoint_end_time', __('儿保时间'))->display(function ($w){
             return date('Y-m-d H:i:s',$w);
         });
@@ -94,13 +95,14 @@ class OrderNurseController extends AdminController
         });
 
         $grid->actions(function ($actions) {
-            if(!empty($actions->row->orders) && $actions->row->orders->order_status< 2 ){
+            if(!empty($actions->row->orders) && $actions->row->orders->order_status< 2){
                 $actions->add(new Finished());
                 $actions->add(new Reserved());
+            }
+            if(!empty($actions->row->orders) && $actions->row->orders->order_status<= 3){
                 $actions->add(new OrderCance());
             }
 
-            $actions->add(new AddVaccine());
             $actions->add(new DelNurse());
             $actions->disableView();
             $actions->disableDelete();

+ 34 - 17
app/Community/Controllers/OrderVaccinesController.php

xqd xqd xqd xqd
@@ -49,6 +49,7 @@ class OrderVaccinesController extends AdminController
         $grid->column('id', __('Id'));
         $grid->column('orderPatient.name', __('预约用户'));
         $grid->column('yuyue', __('预约时间'))->display(function ($w){
+            if(empty($this->orderPatient) || empty($this->orderPatient->appoint_start_time)) return '';
             return date('Y-m-d H:i:s',($this->orderPatient->appoint_start_time)) .'致' . date('Y-m-d H:i:s',($this->orderPatient->appoint_end_time));
         });
         $grid->column('end_time', __('接种时间'))->display(function ($w){
@@ -62,10 +63,15 @@ class OrderVaccinesController extends AdminController
         $grid->column('orderPatient.birthday', __('患者年龄'))->display(function ($w){
             return birthday_to_age($w);
         });
-        $grid->column('orderVaccine.vaccine_name', __('接种疫苗'));
+        $grid->column('vac_name', __('接种疫苗'))->display(function ($w){
+            $vaccine_name = OrderVaccine::where('order_id',$this->id)->pluck('vaccine_name')->toArray();
+            if(empty($vaccine_name) ) return '';
+            return implode(',',$vaccine_name);
+
+        });
         $grid->column('docter.name', __('排班医生'));
         $grid->column('order_status', __('订单状态'))->using(Order::getStatus());
-        $grid->column('payment_status', __('支付状态'))->using(Order::getStatus())->label('info');
+        $grid->column('payment_status', __('支付状态'))->using([1=>'待付款',2=>'已付款',3=>'退款中',4=>'已退款'])->label('info');
 
         $grid->filter(function ($filter){
             $filter->column(1/2, function ($filter) {
@@ -76,14 +82,18 @@ class OrderVaccinesController extends AdminController
         });
 
         $grid->actions(function ($actions) {
-            if(!empty($actions->row->orders) && $actions->row->orders->order_status< 2 ){
-                $actions->add(new Finished());
+            if( $actions->row->order_status<= 2 ){
                 $actions->add(new Reserved());
                 $actions->add(new OrderCance());
             }
 
-            $actions->add(new AddVaccine());
-            $actions->disableView();
+            if( $actions->row->order_status<= 3 ){
+                $actions->add(new Finished());
+                $actions->add(new AddVaccine());
+            }
+
+            $actions->disableEdit();
+//            $actions->disableView();
             $actions->disableDelete();
         });
 
@@ -98,19 +108,26 @@ class OrderVaccinesController extends AdminController
      */
     protected function detail($id)
     {
-        $show = new Show(OrderVaccine::findOrFail($id));
+        $show = new Show(Order::findOrFail($id));
 
         $show->field('id', __('Id'));
-        $show->field('order_id', __('Order id'));
-        $show->field('order_patient_id', __('Order patient id'));
-        $show->field('vaccine_id', __('Vaccine id'));
-        $show->field('vaccine_type', __('Vaccine type'));
-        $show->field('vaccine_price', __('Vaccine price'));
-        $show->field('vaccine_name', __('Vaccine name'));
-        $show->field('vaccine_remark', __('Vaccine remark'));
-        $show->field('vaccine_supplier', __('Vaccine supplier'));
-        $show->field('created_at', __('Created at'));
-        $show->field('updated_at', __('Updated at'));
+        $show->field('orderPatient.name', __('患者姓名'));
+        $show->field('orderPatient.sex', __('患者性别'))->as(function ($w){
+            return $w==1?'男':'女';
+        });
+        $show->field('orderPatient.birthday', __('生日'))->as(function ($w){
+            return birthday_to_age($w);
+        });
+        $show->field('orderVaccine.id', __('疫苗'))->as(function ($w){
+            $vaccine_name = OrderVaccine::where('order_id',$this->id)->pluck('vaccine_name')->toArray();
+            if(empty($vaccine_name) ) return '';
+            return implode(',',$vaccine_name);
+        });
+        $show->field('payment_status', __('支付状态'))->using([1=>'待付款',2=>'已付款',3=>'退款中',4=>'已退款'])->label('info');
+
+        $show->field('order_status', __('订单状态'))->using(Order::getStatus())->label('info');
+        $show->field('created_at', __('创建时间'));
+        $show->field('updated_at', __('更新时间'));
 
         return $show;
     }

+ 3 - 1
app/Community/Controllers/VaccineController.php

xqd xqd
@@ -4,6 +4,7 @@ namespace App\Community\Controllers;
 
 use App\Models\Order;
 use App\Models\Organization;
+use App\Models\OrganizationVaccines;
 use App\Models\Vaccine;
 use Encore\Admin\Controllers\AdminController;
 use Encore\Admin\Facades\Admin;
@@ -31,7 +32,8 @@ class VaccineController extends AdminController
 
         $org_id = Admin::user()->org_id;
         if($org_id){
-            $grid->model()->where(['org_id'=>$org_id]);
+            $ids = OrganizationVaccines::where(['org_id'=>$org_id])->pluck('vaccine_id')->toArray();
+            $grid->model()->where('org_id',$org_id);
         }
         $grid->disableCreateButton(false);
         $grid->column('id', __('ID'));