Przeglądaj źródła

支付收银分定金和尾款各自二维码支付

liugc 8 miesięcy temu
rodzic
commit
ae87fc23d6

+ 13 - 1
app/adminapi/controller/works/ServiceWorkController.php

@@ -350,7 +350,19 @@ class ServiceWorkController extends BaseAdminController
         $result = ServiceWorkLogic::shareOrderToNative($params);
         return $this->success('', $result, 1, 1);
     }
-
+    public function shareFirstAmountToNative()
+    {
+        try {
+            $params = request()->post();
+            $result = ServiceWorkLogic::shareFirstAmountToNative($params);
+            if (false === $result) {
+                return $this->fail(ServiceWorkLogic::getError());
+            }
+            return $this->success('', $result, 1, 1);
+        } catch (Exception $e) {
+            return $this->fail($e->getMessage());
+        }
+    }
     public function shareFixedAmountToNative()
     {
         try {

+ 55 - 5
app/adminapi/logic/works/ServiceWorkLogic.php

@@ -1545,7 +1545,7 @@ class ServiceWorkLogic extends BaseLogic
                 $pay_status = 0;
                 $order_id = $v['id'];
                 $sn = $v['sn'];
-                $work_amount += $v['order_amount'];
+                $work_amount = $v['order_amount'];
             }
         }
         $result['id'] = $externalShareOrder->id;
@@ -1569,6 +1569,8 @@ class ServiceWorkLogic extends BaseLogic
         return  $result;
     }
 
+    // 生成工单售卖  shareOrder
+    // 售卖工单是由客资场景下单,所以一定有尾款单
     public static function shareOrderToNative($params){
 
         // 创建分享单Id
@@ -1617,11 +1619,31 @@ class ServiceWorkLogic extends BaseLogic
         return ['info'=>$shareOrder->isEmpty()?[]:$shareOrder->toArray(),'share_url'=>$shareOrder->isEmpty()?'':$share_url];
     }
 
-    // 固定的尾款即同当前工单中的尾款金额
-    public static function shareFixedAmountToNative($params){
+
+    // 定金金额 - 即可以设置首笔金额然后让其支付
+    // 一定是尾款没有报价首款未支付
+    public static function shareFirstAmountToNative($params){
         try {
-            // 创建分享单Id
-            $amount = RechargeOrder::where(['work_id'=>$params['id'],'pay_status'=>0])->sum('order_amount');
+            if(empty($params['amount'])) throw new \Exception('需填写金额');
+            $rechargeOrder = RechargeOrder::where(['work_id'=>$params['id'],'payment_type'=>2])->findOrEmpty();
+            if(!$rechargeOrder->isEmpty() && $rechargeOrder->pay_status == 1){
+                throw new \Exception('尾款支付异常');
+            }
+            // 创建 $params['order_amount']
+            $rechargeOrder = RechargeOrder::where(['work_id'=>$params['id'],'payment_type'=>1])->findOrEmpty();
+            if($rechargeOrder->isEmpty()){
+                throw new \Exception('无需支付');
+            }else{
+                if(empty($rechargeOrder->pay_time)){
+                    $rechargeOrder->order_total= $params['amount']??0;
+                    $rechargeOrder->order_amount= $params['amount']??0;
+                    $rechargeOrder->pay_status= 0;
+                    $rechargeOrder->save();
+                }else{ // 已结束 - 不用分享二维码
+                    throw new \Exception('订单已支付无需支付');
+                }
+            }
+
             // 查询出未支付的总金额
             $shareOrder = ExternalShareOrder::where(['work_id'=>$params['id']])->findOrEmpty();
             if($shareOrder->isEmpty()){
@@ -1640,4 +1662,32 @@ class ServiceWorkLogic extends BaseLogic
             return false;
         }
     }
+
+    // 固定的尾款即同当前工单中的尾款金额
+    // 要付尾款则首款肯定已支付
+    public static function shareFixedAmountToNative($params){
+        try {
+            $rechargeOrder = RechargeOrder::where(['work_id'=>$params['id'],'pay_status'=>1,'payment_type'=>1])->findOrEmpty();
+            if($rechargeOrder->isEmpty()){
+                throw new \Exception('首款未支付');
+            }
+            // 前提是已经报价
+            $amount = RechargeOrder::where(['work_id'=>$params['id'],'pay_status'=>0,'payment_type'=>2])->sum('order_amount');
+            // 必须有未支付的尾款存在
+            if(empty($amount)) throw new \Exception('订单金额为0/或已支付,无需支付');
+            // 查询出未支付的总金额
+            $shareOrder = ExternalShareOrder::where(['work_id'=>$params['id']])->findOrEmpty();
+            if($shareOrder->isEmpty()){
+                $shareOrder = ExternalShareOrder::create(['order_status'=>1,'work_id'=>$params['id'],'paid_amount'=>$amount??0]);
+            }else{
+                $shareOrder->order_status = 1;
+                $shareOrder->paid_amount = $amount??0;
+                $shareOrder->save();
+            }
+            return ['info'=>$shareOrder->isEmpty()?[]:$shareOrder->toArray(),'share_url'=>(env('project.share_fixed_host','').'?id='.$shareOrder->id)];
+        } catch (\Exception $e) {
+            self::setError($e->getMessage());
+            return false;
+        }
+    }
 }

+ 1 - 0
app/common/logic/PayNotifyLogic.php

@@ -163,6 +163,7 @@ class PayNotifyLogic extends BaseLogic
                 if(!empty($extra['openid']??'')){
                     $externalShareOrder = ExternalShareOrder::where('work_id',$order->work_id)->findOrEmpty();
                     if(!$externalShareOrder->isEmpty() && empty($externalShareOrder->openid)){
+                        Log::info('独立支付:'.formatLogData(['openid'=>$extra['openid'],'ShareOrderId'=>$externalShareOrder->id,'work_id'=>$order->work_id]));
                         $externalShareOrder->openid = $extra['openid'];
                         $externalShareOrder->order_status = 2;
                         $externalShareOrder->save();