Explorar o código

计划任务自动完成订单

lizhen_gitee hai 8 meses
pai
achega
20ddab1f49

+ 9 - 2
application/api/controller/doctor/Wenzhen.php

@@ -440,13 +440,20 @@ class Wenzhen extends Apic
 
         //订单详情
         $order_id = input('order_id',0);
-        $wenzhen_order = Db::name('wenzhen_order')->where('doctor_id',$this->auth->id)->where('id',$order_id)->find();
+        Db::startTrans();
+        $wenzhen_order = Db::name('wenzhen_order')->where('id',$order_id)->lock(true)->find();
         if(empty($wenzhen_order)){
+            Db::rollback();
+            $this->error('不存在的订单');
+        }
+        if($wenzhen_order['doctor_id'] != $this->auth->id){
+            Db::rollback();
             $this->error('不存在的订单');
         }
 
         if($wenzhen_order['ordertype'] == 1){
             if($wenzhen_order['status'] != 20){
+                Db::rollback();
                 $this->error('已接诊订单才能完成');
             }
 
@@ -454,6 +461,7 @@ class Wenzhen extends Apic
         }
         if($wenzhen_order['ordertype'] == 2){
             if($wenzhen_order['status'] != 25){
+                Db::rollback();
                 $this->error('尚未发起视频,不能结束');
             }
 
@@ -467,7 +475,6 @@ class Wenzhen extends Apic
             'finish_time' => $nowtime,
         ];
 
-        Db::startTrans();
         //给医生结算钱
         $logtype = $wenzhen_order['ordertype'] == 1 ? 111 : 112;
         if($wenzhen_order['comefrom'] == 1 && $wenzhen_order['total_fee'] > 0){

+ 102 - 15
application/index/controller/Plantask.php

@@ -99,12 +99,15 @@ class Plantask extends Controller
         $second   = config('site.firstvideo_videoorder_autofinish_minute') * 60;
         $lasttime = $nowtime - $second;
 
-        $rs = Db::name('wenzhen_order')->where('status',25)->where('ordertype',2)->where('comefrom',1)->where('video_time','lt',$lasttime)->update([
-            'status'        => 30,
-            'finish_time'   => $nowtime,
-        ]);
+        $list = Db::name('wenzhen_order')->where('status',25)->where('ordertype',2)->where('comefrom',1)->where('video_time','lt',$lasttime)->limit(10)->select();
 
-        echo $rs;
+        if(empty($list)){
+            echo 'empty';exit;
+        }
+
+        foreach($list as $key => $order){
+            $this->finish($order['id']);
+        }
     }
 
     //TV视频订单,已拨打,通话N分钟后,自动结束
@@ -113,12 +116,15 @@ class Plantask extends Controller
         $second   = config('site.tv_firstvideo_videoorder_autofinish_minute') * 60;
         $lasttime = $nowtime - $second;
 
-        $rs = Db::name('wenzhen_order')->where('status',25)->where('ordertype',2)->where('comefrom',2)->where('video_time','lt',$lasttime)->update([
-            'status'        => 30,
-            'finish_time'   => $nowtime,
-        ]);
+        $list = Db::name('wenzhen_order')->where('status',25)->where('ordertype',2)->where('comefrom',2)->where('video_time','lt',$lasttime)->limit(10)->select();
 
-        echo $rs;
+        if(empty($list)){
+            echo 'empty';exit;
+        }
+
+        foreach($list as $key => $order){
+            $this->finish($order['id']);
+        }
     }
 
     //图文订单,已接诊,接诊N分钟后,自动结束
@@ -127,12 +133,93 @@ class Plantask extends Controller
         $second   = config('site.accept_textorder_autofinish_minute') * 60;
         $lasttime = $nowtime - $second;
 
-        $rs = Db::name('wenzhen_order')->where('status',20)->where('ordertype',1)->where('accept_time','lt',$lasttime)->update([
-            'status'        => 30,
-            'finish_time'   => $nowtime,
-        ]);
+        $list = Db::name('wenzhen_order')->where('status',20)->where('ordertype',1)->where('accept_time','lt',$lasttime)->limit(10)->select();
+        if(empty($list)){
+            echo 'empty';exit;
+        }
 
-        echo $rs;
+        foreach($list as $key => $order){
+            $this->finish($order['id']);
+        }
+    }
+
+    public function finish($order_id){
+
+        //订单详情
+        Db::startTrans();
+        $wenzhen_order = Db::name('wenzhen_order')->where('id',$order_id)->lock(true)->find();
+        if(empty($wenzhen_order)){
+            Db::rollback();
+            //$this->error('不存在的订单');
+            return false;
+        }
+
+        if($wenzhen_order['ordertype'] == 1){
+            if($wenzhen_order['status'] != 20){
+                Db::rollback();
+                //$this->error('已接诊订单才能完成');
+                return false;
+            }
+
+            $old_status = 20;
+        }
+        if($wenzhen_order['ordertype'] == 2){
+            if($wenzhen_order['status'] != 25){
+                Db::rollback();
+                //$this->error('尚未发起视频,不能结束');
+                return false;
+            }
+
+            $old_status = 25;
+        }
+
+        //修改订单
+        $nowtime = time();
+        $update = [
+            'status' => 30,
+            'finish_time' => $nowtime,
+        ];
+
+        //给医生结算钱
+        $logtype = $wenzhen_order['ordertype'] == 1 ? 111 : 112;
+        if($wenzhen_order['comefrom'] == 1 && $wenzhen_order['total_fee'] > 0){
+            $rs_wallet = model('walletdoctor')->lockChangeAccountRemain($wenzhen_order['doctor_id'],'money',$wenzhen_order['total_fee'],$logtype,$remark='问诊订单','wenzhen_order',$order_id);
+            if($rs_wallet['status'] === false){
+                Db::rollback();
+                //$this->error($rs_wallet['msg']);
+                return false;
+            }
+        }
+
+        //订单状态
+        $update_rs = Db::name('wenzhen_order')->where('id',$order_id)->where('status',$old_status)->update($update);
+        if(!$update_rs){
+            Db::rollback();
+            //$this->error('操作失败');
+            return false;
+        }
+
+        //医生接诊量
+        Db::name('doctor')->where('id',$wenzhen_order['doctor_id'])->setInc('ordernum');
+
+        Db::commit();
+
+        //发送im消息给用户,让他不能再输入
+        /*if($wenzhen_order['ordertype'] == 1){
+            $tenim = new Tenim();
+            $message = [
+                'businessID' => 'order_status_doctor_type',
+                'name' => '',
+                'status' => '30',
+                'id' => (string)$order_id,
+                'content' => '',
+            ];
+            $rs = $tenim->sendCustomMessageToUser('user'.$wenzhen_order['user_id'],'doctor'.$wenzhen_order['doctor_id'],$message);
+        }*/
+
+
+        //$this->success('操作成功');
+        return true;
     }
 
 /////////////////////////////////////////////////////////////////////////