Browse Source

配送逻辑修改

xxxrrrdddd 3 years ago
parent
commit
55b8511ab7

+ 9 - 9
application/api/controller/SenderOrderController.php

@@ -176,7 +176,7 @@ class SenderOrderController extends SenderApi
         $order=UserOrder::lock(true)->findOrFail($data['id']);
         $order->updateStatus($data['status'],$user);
         $order->log()->save([
-            'status'=>$data['status'],
+            'status'=>$order['status'],
             'txt'   =>$data['txt']??'',
             'media' =>$data['media']??[],
         ]);
@@ -203,13 +203,13 @@ class SenderOrderController extends SenderApi
     }
     /**
      * 申请结算
-     * @ApiParams (name=id,decription=订单ID)
-     * @ApiParams (name=fee_1,decription=取件费)
-     * @ApiParams (name=fee_2,decription=运输费)
-     * @ApiParams (name=fee_3,decription=派送费)
-     * @ApiParams (name=fee_4,decription=笼具费)
-     * @ApiParams (name=fee_5,decription=寄养费)
-     * @ApiParams (name=fee_6,decription=填写其它费)
+     * @ApiParams (name=id,description="配送员订单ID")
+     * @ApiParams (name=fee_1,description=取件费)
+     * @ApiParams (name=fee_2,description=运输费)
+     * @ApiParams (name=fee_3,description=派送费)
+     * @ApiParams (name=fee_4,description=笼具费)
+     * @ApiParams (name=fee_5,description=寄养费)
+     * @ApiParams (name=fee_6,description=填写其它费)
      */
     public function settle(){
         $data=input();
@@ -224,7 +224,7 @@ class SenderOrderController extends SenderApi
         ]);
         $user=$this->auth->getUser();
         Db::startTrans();
-        $senderOrder=$user->senderOrder()->sender($data['id'])->lock(true)->findOrFail();
+        $senderOrder=$user->senderOrder()->findOrFail($data['id']);
         $senderOrder->settle($data);
         Db::commit();
         $this->success();

+ 0 - 1
application/api/controller/User.php

@@ -1,7 +1,6 @@
 <?php
 
 namespace app\api\controller;
-
 use app\common\controller\Api;
 use app\common\library\Ems;
 use app\common\library\Sms;

+ 13 - 2
application/common/model/User.php

@@ -274,6 +274,10 @@ class User extends Model
      */
     const SEND_GET=1;
     const SEND_SEND=2;
+    public static $sendType=[
+        self::SEND_GET,
+        self::SEND_SEND,
+    ];
     public function getSendType(UserOrder $order){
         $addr=$this->area()->column('name');
         $order_type=$order->currentSenderOrder($this['id'])->value('type');
@@ -285,7 +289,7 @@ class User extends Model
         }elseif (in_array($order['to_city'],$addr)){
             return self::SEND_SEND;
         }
-        throw_user('您不在配送范围');
+        throw_user('操作失败:您非取送地配送员');
     }
     public function isSendGet($type){
         return self::SEND_GET==$type;
@@ -308,15 +312,22 @@ class User extends Model
         $area=array_unique(array_filter($area));
         $this->area()->sync(collection($area)->each(function ($res){
             if(is_numeric($res)) {
-                if (!Area::city()->find($res)) {
+                $area=Area::city()->find($res);
+                if (!$area) {
                     throw_user('地区ID[' . $res . ']不存在');
                 }
+                if(UserArea::hasArea($res)){
+                    throw_user("地区[{$area['name']}]已被分配,无法再次分配");
+                }
                 return $res;
             }else{
                 $area=Area::city()->where('name',$res)->find();
                 if (!$area) {
                     throw_user('地区[' . $res . ']不存在');
                 }
+                if(UserArea::hasArea($area['id'])){
+                    throw_user("地区[{$area['name']}]已被分配,无法再次分配");
+                }
                 return $area['id'];
             }
         })->toArray());

+ 15 - 0
application/common/model/UserArea.php

@@ -0,0 +1,15 @@
+<?php
+
+namespace app\common\model;
+
+use think\Model;
+
+/**
+ * 会员模型
+ */
+class UserArea extends Model
+{
+    public static function hasArea($area_id){
+        return self::where('area_id',$area_id)->value('id');
+    }
+}

+ 35 - 13
application/common/model/UserOrder.php

@@ -5,17 +5,20 @@ namespace app\common\model;
 use app\service\pay_user\PayUser;
 use think\db\Query;
 use think\Model;
+use think\model\Collection;
 use traits\model\SoftDelete;
 
 /**
  *@property array send_detail 运送详情
  *@property float cal_refund 退款手续费
  *@property float refund_money 退款金额
- *@property SenderOrder[] currentSenderOrder
+ *@property Collection currentSenderOrder
  *@property float settle_amount
  *@property array senders
  *@property array settle_info
  *@property float profit
+ *@property boolean is_same_city
+ *@property boolean is_same_user
  *@method Query|self expired()
  */
 class UserOrder extends Model
@@ -213,6 +216,9 @@ class UserOrder extends Model
         if($data['status']==1){
             $this['status']=self::STATUS_SET;
             foreach ($this->currentSenderOrder as $senderOrder){
+                if(is_null($senderOrder['fee_total'])){
+                    throw_user('有配送员尚未申请结算,请稍后再试');
+                }
                 PayUser::getClass()->payment($senderOrder['fee_total'],$senderOrder['user'],MoneyLog::TYPE_SETTLE,"订单[{$this['no']}]结算",['order_id'=>$this['id']]);
             }
             #加一个盈利记录
@@ -300,13 +306,19 @@ class UserOrder extends Model
     /** 是否能接单 */
     public function checkGet(User $user){
         if(count($this->currentSenderOrder)>1){
-            throw_user('订单已被接单,您暂时无法接单');
+            throw_user('订单已被接单,您暂时无法接单(1)');
         }
         $type=$user->getSendType($this);
+        #相同城市直接返回未接单的那个类型
+        if($this->is_same_city && $this->currentSenderOrder->count()===1){
+            $typeArr=$this->currentSenderOrder->column('type');
+            $array = array_diff(User::$sendType, $typeArr);
+            return end($array);
+        }
         if($user->isSendGet($type)) {
             $can = $this['status'] == self::STATUS_WAIT_GET;
             if (!$can) {
-                throw_user("订单已被接单,您暂时无法接单");
+                throw_user("订单已被接单,您暂时无法接单(2)");
             }
         }
         return $type;
@@ -330,14 +342,12 @@ class UserOrder extends Model
         if(!$sender_order){
             throw_user('保存配送员订单失败');
         }
-        if(!$this->save()){
-            throw_user('保存失败');
-        }
+        $this->save();
     }
     /** 更新状态 */
     public function updateStatus($status,User $user){
         if(!$status){
-            return;
+            throw_user('状态有误');
         }
         $this->refunding();
         $senderS=[
@@ -347,20 +357,24 @@ class UserOrder extends Model
         $recS=[
             self::STATUS_GIVING=>self::STATUS_GIVED,
         ];
-        $arr=array_merge($senderS,$recS);
+        $arr=$senderS+$recS;
         if($this['status']!=$status){
             throw_user('状态'.self::$statusList[$this['status']].'有误');
         }
-        $type=$user->getSendType($this);
-        if($user->isSendGet($type) && !isset($senderS[$status])){
-            throw_user('您是取宠人,无法更新状态'.self::$statusList[$status]);
-        }elseif($user->isSendSend($type) && !isset($recS[$status])){
-            throw_user('您是送宠人,无法更新状态'.self::$statusList[$status]);
+        if(!$this->is_same_user) {
+            $type = $user->getSendType($this);
+            if ($user->isSendGet($type) && !isset($senderS[$status])) {
+                throw_user('您是取宠人,无法更新状态' . self::$statusList[$status]);
+            } elseif ($user->isSendSend($type) && !isset($recS[$status])) {
+                throw_user('您是送宠人,无法更新状态' . self::$statusList[$status]);
+            }
         }
+
         $this['status']=$arr[$status];
         if(!$this->save()){
             throw_user('更新失败');
         }
+        return $this['status'];
     }
     /** 进行中的订单 */
     public function scopeRunning(Query $query){
@@ -413,6 +427,14 @@ class UserOrder extends Model
     public function getProfitAttr($v,$data){
         return bcsub($this['real_amount'],$this->settle_info['fee_total']);
     }
+    /** 是否相同城市 */
+    public function getIsSameCityAttr(){
+        return $this['from_city']==$this['to_city'];
+    }
+    /** 是否相同接单人 */
+    public function getIsSameUserAttr(){
+        return $this->currentSenderOrder->count()==2 && count(array_unique($this->currentSenderOrder->column('user_id')))==1;
+    }
 
 
 

+ 15 - 15
public/api.html

@@ -2309,43 +2309,43 @@
                                                         <td>id</td>
                                                         <td>string</td>
                                                         <td></td>
-                                                        <td></td>
+                                                        <td>订单ID</td>
                                                     </tr>
                                                                                                         <tr>
                                                         <td>fee_1</td>
                                                         <td>string</td>
                                                         <td></td>
-                                                        <td></td>
+                                                        <td>取件费</td>
                                                     </tr>
                                                                                                         <tr>
                                                         <td>fee_2</td>
                                                         <td>string</td>
                                                         <td></td>
-                                                        <td></td>
+                                                        <td>运输费</td>
                                                     </tr>
                                                                                                         <tr>
                                                         <td>fee_3</td>
                                                         <td>string</td>
                                                         <td></td>
-                                                        <td></td>
+                                                        <td>派送费</td>
                                                     </tr>
                                                                                                         <tr>
                                                         <td>fee_4</td>
                                                         <td>string</td>
                                                         <td></td>
-                                                        <td></td>
+                                                        <td>笼具费</td>
                                                     </tr>
                                                                                                         <tr>
                                                         <td>fee_5</td>
                                                         <td>string</td>
                                                         <td></td>
-                                                        <td></td>
+                                                        <td>寄养费</td>
                                                     </tr>
                                                                                                         <tr>
                                                         <td>fee_6</td>
                                                         <td>string</td>
                                                         <td></td>
-                                                        <td></td>
+                                                        <td>填写其它费</td>
                                                     </tr>
                                                                                                     </tbody>
                                             </table>
@@ -2371,31 +2371,31 @@
                                                     <form enctype="application/x-www-form-urlencoded" role="form" action="/api/sender_order_controller/settle" method="get" name="form50" id="form50">
                                                                                                                 <div class="form-group">
                                                             <label class="control-label" for="id">id</label>
-                                                            <input type="string" class="form-control input-sm" id="id" required placeholder="" name="id">
+                                                            <input type="string" class="form-control input-sm" id="id" required placeholder="订单ID" name="id">
                                                         </div>
                                                                                                                 <div class="form-group">
                                                             <label class="control-label" for="fee_1">fee_1</label>
-                                                            <input type="string" class="form-control input-sm" id="fee_1" required placeholder="" name="fee_1">
+                                                            <input type="string" class="form-control input-sm" id="fee_1" required placeholder="取件费" name="fee_1">
                                                         </div>
                                                                                                                 <div class="form-group">
                                                             <label class="control-label" for="fee_2">fee_2</label>
-                                                            <input type="string" class="form-control input-sm" id="fee_2" required placeholder="" name="fee_2">
+                                                            <input type="string" class="form-control input-sm" id="fee_2" required placeholder="运输费" name="fee_2">
                                                         </div>
                                                                                                                 <div class="form-group">
                                                             <label class="control-label" for="fee_3">fee_3</label>
-                                                            <input type="string" class="form-control input-sm" id="fee_3" required placeholder="" name="fee_3">
+                                                            <input type="string" class="form-control input-sm" id="fee_3" required placeholder="派送费" name="fee_3">
                                                         </div>
                                                                                                                 <div class="form-group">
                                                             <label class="control-label" for="fee_4">fee_4</label>
-                                                            <input type="string" class="form-control input-sm" id="fee_4" required placeholder="" name="fee_4">
+                                                            <input type="string" class="form-control input-sm" id="fee_4" required placeholder="笼具费" name="fee_4">
                                                         </div>
                                                                                                                 <div class="form-group">
                                                             <label class="control-label" for="fee_5">fee_5</label>
-                                                            <input type="string" class="form-control input-sm" id="fee_5" required placeholder="" name="fee_5">
+                                                            <input type="string" class="form-control input-sm" id="fee_5" required placeholder="寄养费" name="fee_5">
                                                         </div>
                                                                                                                 <div class="form-group">
                                                             <label class="control-label" for="fee_6">fee_6</label>
-                                                            <input type="string" class="form-control input-sm" id="fee_6" required placeholder="" name="fee_6">
+                                                            <input type="string" class="form-control input-sm" id="fee_6" required placeholder="填写其它费" name="fee_6">
                                                         </div>
                                                                                                                 <div class="form-group form-group-submit">
                                                             <button type="submit" class="btn btn-success send" rel="50">提交</button>
@@ -17462,7 +17462,7 @@
 
                 </div>
                 <div class="col-md-6" align="right">
-                    Generated on 2021-11-12 16:24:48 <a href="./" target="_blank">宠365</a>
+                    Generated on 2021-11-15 14:35:38 <a href="./" target="_blank">宠365</a>
                 </div>
             </div>