Kirin 3 سال پیش
والد
کامیت
d5365acfa0
2فایلهای تغییر یافته به همراه111 افزوده شده و 3 حذف شده
  1. 111 0
      app/admin/controller/order/StoreOrder.php
  2. 0 3
      app/admin/view/order/store_order/exchange_order.php

+ 111 - 0
app/admin/controller/order/StoreOrder.php

@@ -559,6 +559,27 @@ class StoreOrder extends AuthController
         } else return Json::fail('数据不存在!');
     }
 
+    /**
+     * 修改退押金状态
+     * @param $id
+     * @return \think\response\Json|void
+     */
+    public function refund_exchange_deposit_y($id)
+    {
+        if (!$id) return $this->failed('数据不存在');
+        $product = StoreExchangeOrder::get($id);
+        if (!$product) return Json::fail('数据不存在!');
+        if ($product['paid'] == 1) {
+            $f = [];
+            $f[] = Form::input('order_id', '退押单号', $product->getData('order_id'))->disabled(1);
+            $f[] = Form::number('refund_price', '退押金额', bcsub($product->getData('deposit'), $product->getData('deposit_back'), 2))->precision(2)->min(0.01);
+//            $f[] = Form::radio('type', '状态', 1)->options([['label' => '直接退押', 'value' => 1], ['label' => '退押后,返回原状态', 'value' => 2]]);
+            $form = Form::make_post_form('退押处理', $f, Url::buildUrl('updateExchangeRefundDepositY', array('id' => $id)), 7);
+            $this->assign(compact('form'));
+            return $this->fetch('public/form-builder');
+        } else return Json::fail('数据不存在!');
+    }
+
     /**
      * 退款处理
      * @param $id
@@ -761,6 +782,75 @@ class StoreOrder extends AuthController
         }
     }
 
+    /**
+     * 订单退押金
+     * @param Request $request
+     * @return mixed
+     * @throws \think\Exception
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\ModelNotFoundException
+     * @throws \think\exception\DbException
+     */
+    public function updateExchangeRefundDepositY($id)
+    {
+        $data = Util::postMore([
+            'refund_price',
+            ['type', 1],
+        ]);
+        if (!$id) return $this->failed('数据不存在');
+        $product = StoreExchangeOrder::get($id);
+        if (!$product) return Json::fail('数据不存在!');
+        if ($product['deposit'] == $product['deposit_back']) return Json::fail('已退完押金!不能再退款了');
+        if (!$data['refund_price']) return Json::fail('请输入退款金额');
+        $refund_price = $data['refund_price'];
+        $data['deposit_back'] = bcadd($data['refund_price'], $product['deposit_back'], 2);
+        $bj = bccomp((float)$product['deposit'], (float)$data['deposit_back'], 2);
+        if ($bj < 0) return Json::fail('退押金额大于支付押金,请修改退押金额');
+        if ($data['type'] == 1) {
+            $data['deposit_status'] = 1;
+        } else if ($data['type'] == 2) {
+            $data['deposit_status'] = 0;
+        }
+//        $type = $data['type'];
+        unset($data['type']);
+        unset($data['refund_price']);
+        $refund_data['pay_price'] = bcadd($product['pay_price'], $product['deposit'], 2);
+        $refund_data['refund_price'] = $refund_price;
+        $refund_data['refund_id'] = 'refund_deposit' . $product['order_id'] . time();
+
+        if ($product['pay_type'] == 'weixin') {
+            if ($product['is_channel'] == 1) {//小程序
+                try {
+                    MiniProgramService::payOrderRefund($product['order_id'], $refund_data);//2.5.36
+                } catch (\Exception $e) {
+                    return Json::fail($e->getMessage());
+                }
+            } else {//TODO 公众号
+                try {
+                    WechatService::payOrderRefund($product['order_id'], $refund_data);
+                } catch (\Exception $e) {
+                    return Json::fail($e->getMessage());
+                }
+            }
+        } else if ($product['pay_type'] == 'yue') {
+            BaseModel::beginTrans();
+            $usermoney = User::where('uid', $product['uid'])->value('now_money');
+            $res1 = User::bcInc($product['uid'], 'now_money', $refund_price, 'uid');
+            $res2 = UserBill::income('商品退押金', $product['uid'], 'now_money', 'pay_deposit_refund', $refund_price, $product['id'], bcadd($usermoney, $refund_price, 2), '订单退押金到余额' . floatval($refund_price) . '元');
+            $res = $res1 && $res2;
+            BaseModel::checkTrans($res);
+            if (!$res) return Json::fail('余额退押金失败!');
+        }
+        $resEdit = StoreExchangeOrder::edit($data, $id);
+        if ($resEdit) {
+            StoreOrderStatus::setStatus($id, 'refund_deposit', '退押金给用户' . $refund_price . '元');
+            return Json::successful('修改成功!');
+        } else {
+            StoreOrderStatus::setStatus($id, 'refund_deposit', '退押金给用户' . $refund_price . '元失败');
+            return Json::fail('修改失败!');
+        }
+    }
+
     public function order_info($oid = '')
     {
         if (!$oid || !($orderInfo = StoreOrderModel::get($oid)))
@@ -1032,4 +1122,25 @@ class StoreOrder extends AuthController
         }
     }
 
+    /**
+     * 立即核销
+     * @param $id
+     */
+    public function exchange_verify($id)
+    {
+        StoreExchangeOrder::beginTrans();
+        $orderInfo = StoreExchangeOrder::where('id', $id)->find();
+        if (!$orderInfo) return Json::fail('核销订单不存在!');
+        if ($orderInfo->status > 0) return Json::fail('订单已核销!');
+
+        $orderInfo->status = 1;
+        if ($orderInfo->save()) {
+            StoreExchangeOrder::commitTrans();
+            return Json::successful('核销成功!');
+        } else {
+            StoreExchangeOrder::rollbackTrans();
+            return Json::fail('核销失败');
+        }
+    }
+
 }

+ 0 - 3
app/admin/view/order/store_order/exchange_order.php

@@ -100,9 +100,6 @@
             <div class="layui-card">
                 <div class="layui-card-header">订单列表</div>
                 <div class="layui-card-body">
-                    <div class="layui-btn-container" id="container-action">
-                        <button class="layui-btn layui-btn-sm layui-btn-warm" data-type="write_order">核销</button>
-                    </div>
                     <table class="layui-hide" id="List" lay-filter="List"></table>
                     <!--订单-->
                     <script type="text/html" id="order_id">