Explorar o código

订单支付问题

whitefang hai 1 ano
pai
achega
f8626146ca

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

@@ -231,8 +231,12 @@ class ServiceWorkLogic extends BaseLogic
                     $un_order->order_amount = $order_amount;
                     $un_order->order_amount = $order_amount;
                     $un_order->save();
                     $un_order->save();
                 }
                 }
+
+                //更新服务费用
+                $work->service_fee = $paid_order['paid_amount']+$params['amount'];
             }
             }
-            //$work->work_total = $order_amount + $paid_order['paid_amount'];
+            //总工单费用
+            $work->work_total = $order_amount + $paid_order['paid_amount'];
             $work->work_images = $params['work_images'];
             $work->work_images = $params['work_images'];
             $work->user_confirm_status = 1;//待确认报价
             $work->user_confirm_status = 1;//待确认报价
             $work->save();
             $work->save();

+ 19 - 0
app/api/controller/ServiceOrderController.php

@@ -121,6 +121,25 @@ class ServiceOrderController extends BaseApiController
         return $this->success('已确认服务完成', [], 1, 1);
         return $this->success('已确认服务完成', [], 1, 1);
     }
     }
 
 
+    /**
+     * 提交尾款订单
+     * @return \think\response\Json
+     */
+    public function submitFinalOrder()
+    {
+        $params = (new ServiceOrderValidate())->post()->goCheck('final', [
+            'user_id' => $this->userId,
+            'terminal' => $this->userInfo['terminal'],
+            'user_info' => $this->userInfo
+        ]);
+        Log::write(json_encode($params,JSON_UNESCAPED_UNICODE));
+        $result = ServiceOrderLogic::submitFinalOrder($params);
+        if (false === $result) {
+            return $this->fail(ServiceOrderLogic::getError());
+        }
+        return $this->success('已确认支付尾款', [], 1, 1);
+    }
+
     public function firmOrderLists()
     public function firmOrderLists()
     {
     {
         return $this->dataLists(new ServiceOrderLists());
         return $this->dataLists(new ServiceOrderLists());

+ 17 - 6
app/api/logic/PerformanceLogic.php

@@ -6,6 +6,7 @@ use app\common\enum\worker\WorkerAccountLogEnum;
 use app\common\logic\BaseLogic;
 use app\common\logic\BaseLogic;
 use app\common\logic\EffectiveLogic;
 use app\common\logic\EffectiveLogic;
 use app\common\logic\WorkerAccountLogLogic;
 use app\common\logic\WorkerAccountLogLogic;
+use app\common\model\orders\RechargeOrder;
 use app\common\model\performance\PerformanceRules;
 use app\common\model\performance\PerformanceRules;
 use think\facade\Db;
 use think\facade\Db;
 
 
@@ -30,17 +31,27 @@ class PerformanceLogic extends BaseLogic
         }else{
         }else{
             $work->work_pay_status = 2;
             $work->work_pay_status = 2;
         }
         }
-        $work->save();
         //师傅金额结算
         //师傅金额结算
         if(!$rule->isEmpty()){
         if(!$rule->isEmpty()){
-            if($rule['type']==0){
-                $work_price = $work->work_total;
-            }else{
-                $work_price = $work->work_amount;
+            switch ($rule['type']){
+                case 0://按照总金额结算
+                    $coupon_price = RechargeOrder::where('work_id',$work->id)->sum('coupon_price');
+                    $worker_price = $work->work_total-$coupon_price;
+                    break;
+                case 1://按照结算金额结算
+                    $worker_price = $work->work_amount;
+                    break;
+                default://按照服务总费用结算
+                    //搜索所有优惠券
+                    $coupon_price = RechargeOrder::where('work_id',$work->id)->sum('coupon_price');
+                    $worker_price = $work->service_fee-$coupon_price;
             }
             }
-            $settlement_amount = bcmul($work_price, $rule['rate']);
+            $work->worker_price = $worker_price;
+
+            $settlement_amount = bcmul($worker_price, $rule['rate']);
             WorkerAccountLogLogic::addAccountLog($work,$settlement_amount,WorkerAccountLogEnum::UM_INC_ADMIN,WorkerAccountLogEnum::INC);
             WorkerAccountLogLogic::addAccountLog($work,$settlement_amount,WorkerAccountLogEnum::UM_INC_ADMIN,WorkerAccountLogEnum::INC);
         }
         }
+        $work->save();
         //生成保修卡
         //生成保修卡
         EffectiveLogic::receiveEffective($work);
         EffectiveLogic::receiveEffective($work);
     }
     }

+ 82 - 0
app/api/logic/ServiceOrderLogic.php

@@ -6,6 +6,7 @@ use app\common\enum\GoodsEnum;
 use app\common\enum\PayEnum;
 use app\common\enum\PayEnum;
 use app\common\enum\WorkEnum;
 use app\common\enum\WorkEnum;
 use app\common\logic\BaseLogic;
 use app\common\logic\BaseLogic;
+use app\common\logic\PaymentLogic;
 use app\common\model\coupon\UserCoupon;
 use app\common\model\coupon\UserCoupon;
 use app\common\model\dict\DictData;
 use app\common\model\dict\DictData;
 use app\common\model\goods\Goods;
 use app\common\model\goods\Goods;
@@ -172,6 +173,87 @@ class ServiceOrderLogic extends BaseLogic
         ];
         ];
     }
     }
 
 
+    /**
+     * 提交尾款订单
+     * @param array $params
+     * @return array|false
+     */
+    public static function submitFinalOrder($params)
+    {
+        Db::startTrans();
+        try {
+            $order = \app\common\model\recharge\RechargeOrder::where('sn',$params['sn'])->findOrEmpty();
+            if ($order->isEmpty()) {
+                throw new Exception('订单不存在');
+            }
+            //判断订单类型.服务订单尾款处理
+            if($order['order_type'] == 0 and $order['pay_status'] == PayEnum::ISPAID)//服务工单
+            {
+                $order = RechargeOrder::where(['work_id'=>$order['work_id'],'pay_status'=>0])->findOrEmpty();
+                if($order->isEmpty()){
+                    throw new Exception('订单已支付');
+                }
+            }
+
+            if ($order['pay_status'] == PayEnum::ISPAID) {
+                throw new Exception('订单已支付');
+            }
+
+            $order_goods = OrderGoods::where('sn',$params['sn'])->findOrEmpty();
+            $goods = Goods::findOrEmpty($order_goods['goods_id']);
+            //判断是否存在优惠券
+            //优惠券验证
+            if(!empty($order['coupon_id'])){
+                $order->coupon_id = 0;
+                $order->coupon_price = 0;
+                $order->order_amount = $order->order_total;
+                $order->save();
+                $order = \app\common\model\recharge\RechargeOrder::where('sn',$order['sn'])->findOrEmpty();
+            }
+            if(!empty($params['coupon_id']) && empty($order['coupon_id'])){
+                $user_coupon = UserCoupon::where(['id'=>$params['coupon_id'],'user_id'=>$params['user_id'],'voucher_status'=>0])
+                    ->where('voucher_count','>',0)
+                    ->where('expire_time','>=',time())
+                    ->where('begin_use','<',time())
+                    ->findOrEmpty();
+                if($user_coupon->isEmpty()){
+                    throw new Exception('该优惠券无法使用');
+                }
+                if($goods['goods_payment_type'] == GoodsEnum::ISGOODS_PAYMENT_TYPE and $order['order_amount']<$user_coupon['amount_require']){
+                    throw new Exception('该优惠劵不满足满减使用条件');
+                }
+                //优惠券折扣
+                if($user_coupon['mold_type'] == 1){
+                    //按比例折扣
+                    if($user_coupon['discount_ratio']>=1){
+                        throw new Exception('优惠券有误,请联系客服');
+                    }
+                    $order_coupon_amount = intval($order['order_amount']*(1-$user_coupon['discount_ratio']));
+                }else{
+                    $order_coupon_amount = $user_coupon['amount'];
+                }
+                if(!empty($user_coupon['max_deductible_price'])){
+                    $order_amount = ($order_coupon_amount>$user_coupon['max_deductible_price'])?($order['order_amount']-$user_coupon['max_deductible_price']):($order['order_amount']-$order_coupon_amount);
+                }else{
+                    $order_amount = $order['order_amount']-$order_coupon_amount;
+                }
+                $user_coupon->voucher_status = 1;
+                $user_coupon->voucher_count = $user_coupon->voucher_count-1;
+                $user_coupon->save();
+            }
+
+            $order->coupon_id = !empty($params['coupon_id'])?$params['coupon_id']:0;
+            $order->coupon_price = !empty($order_coupon_amount)?$order_coupon_amount:0;
+            $order->order_amount = !empty($order_amount)?$order_amount:$order->order_amount;
+            $order->save();
+            Db::commit();
+        } catch (\Exception $e) {
+            self::setError($e->getMessage());
+            return false;
+        }
+
+    }
+
     /**
     /**
      * 获取订单工程师信息
      * 获取订单工程师信息
      * * @param $params
      * * @param $params

+ 5 - 0
app/api/validate/ServiceOrderValidate.php

@@ -41,6 +41,11 @@ class ServiceOrderValidate extends BaseValidate
         return $this->only(['address','appointment_time','pay_way','goods_id','contact_number','contact_people']);
         return $this->only(['address','appointment_time','pay_way','goods_id','contact_number','contact_people']);
     }
     }
 
 
+    public function sceneFinal()
+    {
+        return $this->only(['sn']);
+    }
+
 
 
     public function sceneDetail()
     public function sceneDetail()
     {
     {