gorden hace 8 meses
padre
commit
928821ab9c

+ 17 - 3
app/admin/controller/order/ReturnController.php

@@ -9,6 +9,7 @@ use app\controller\Curd;
 use app\model\Coupon;
 use app\model\Device;
 use app\model\Order;
+use app\model\OrderReturn;
 use app\model\OrderSheet;
 use app\model\SysSerial;
 use support\exception\BusinessException;
@@ -19,7 +20,7 @@ class ReturnController extends Curd
 {
     public function __construct()
     {
-        $this->model = new Order();
+        $this->model = new OrderReturn();
         $this->validate = true;
         $this->validateClass = new OrderValidate();
     }
@@ -82,8 +83,6 @@ class ReturnController extends Curd
         $primary_key = $this->model->getKeyName();
         $id = $request->post($primary_key);
         $data = $this->inputFilter($request->post());
-        $data['coupon_begindate'] = strtotime($data['coupon_begindate']);
-        $data['coupon_enddate'] = strtotime($data['coupon_enddate']);
         $model = $this->model->find($id);
         if (!$model) {
             throw new BusinessException('记录不存在', 2);
@@ -91,4 +90,19 @@ class ReturnController extends Curd
         unset($data[$primary_key]);
         return [$id, $data];
     }
+
+    public function updateStatus(Request $request)
+    {
+        try {
+            [$id, $data] = $this->updateInput($request);
+            $this->doUpdate($id, $data);
+        } catch (BusinessException $e) {
+            return json_fail($e->getMessage());
+        } catch (\Exception $e) {
+            dump($e->getMessage());
+            return json_fail('数据更新失败');
+        }
+
+        return json_success('success');
+    }
 }

+ 93 - 36
app/admin/controller/order/WholeController.php

@@ -84,6 +84,9 @@ class WholeController extends Curd
             },
             'cert' => function ($query) {
                 $query->select('join_cert_member_id', 'member_cert_name');
+            },
+            'return' => function($query){
+                $query->select('orders_return_id','join_return_order_id', 'order_return_status');
             }
         ]);
         foreach ($where as $column => $value) {
@@ -126,8 +129,8 @@ class WholeController extends Curd
         foreach ($items as &$item) {
             if (!empty($item['sheet'])) {
                 $goods = Goods::where('goods_id', $item['sheet']['join_sheet_goods_id'])->first();
-                $item['sheet']['goods_name'] = $goods->goods_name;
-                $item['sheet']['goods_classify'] = $goods->goods_classify;
+                $item['sheet']['goods_name'] = $goods->goods_name ?? '';
+                $item['sheet']['goods_classify'] = $goods->goods_classify ?? '';
             }
         }
 
@@ -549,7 +552,7 @@ class WholeController extends Curd
                 'pay_status' => 'SUCCESS',
                 'pay_category' => $params['pay_category'],
                 'pay_amount' => $params['order_sheet_pay'],
-                'pay_prepayid' => 0,
+                'pay_prepayid' => $params['join_order_member_id'].'-'.$params['pay_category'],
                 'pay_paytimes' => date('Y-m-d H:i:s'),
                 'pay_remark' => $params['order_remark'] ?? '',
                 'pay_addtimes' => time()
@@ -936,13 +939,18 @@ class WholeController extends Curd
 
     public function doRefund(Request $request)
     {
-        $returnId = $request->post('return_id', '');
-        $amount = $request->post('amount', 0);
-        if (!$returnId || !$amount) {
+        $orderId = $request->post('order_id', '');
+        // $returnId = $request->post('return_id', '');
+        $amount = $request->post('refund_amount', 0);
+        $password = $request->post('refund_password', '');
+        if (!$orderId || !$amount || !$password) {
             return json_fail('参数异常');
         }
+        if ($password != '123456'){
+            return json_fail('支付密码错误');
+        }
 
-        $return = OrderReturn::where('join_return_order_id', $returnId)
+        $return = OrderReturn::where('join_return_order_id', $orderId)
             ->first();
         if (!$return) {
             return json_fail("退款订单异常");
@@ -952,7 +960,7 @@ class WholeController extends Curd
         if (!$order) {
             return json_fail("订单异常");
         }
-        if ($order->order_is_complete == 'Y' || $order->order_is_complete == 'R'){
+        if ($order->order_is_complete == 'Y' || $order->order_is_complete == 'R') {
 
             return json_fail('订单已完成,无法退款');
         }
@@ -960,25 +968,12 @@ class WholeController extends Curd
             return json_fail('退款金额不能超过订单金额');
         }
 
-        $payDetail = PayDetail::where('join_pay_order_id', $order->order_groupby)->first();
+        $payDetail = PayDetail::where('join_pay_order_id', $order->order_groupby)->where('pay_status', 'SUCCESS')->first();
         if (!$payDetail) {
             return json_fail("支付信息异常异常");
         }
-        $responseJson = [];
-        if (!empty($payDetail->pay_json_response)) {
-            $responseJson = json_decode($payDetail->pay_json_response, true);
-            if (!isset($responseJson['trxid'])) {
-                return json_fail("支付信息异常异常");
-            }
-        }
 
-        $data = [
-            'randomstr' => random_string(32),
-            'reqsn' => $return->join_return_order_id,
-            'oldtrxid' => $responseJson['trxid'],
-            'trxamt' => $amount * 100,
-
-        ];
+        $payType = explode('-', $payDetail->pay_prepayid);
 
         try {
             Db::beginTransaction();
@@ -987,9 +982,76 @@ class WholeController extends Curd
             // return 表
             $return->order_return_status = 'DONE';
             $return->save();
+            $res = '[]';
+            $data = '[]';
+            // 区分账户余额支付和通联支付
+            if (isset($payType[1]) && in_array($payType[1], ['W06', 'A01'])) {
+                $responseJson = [];
+                if (!empty($payDetail->pay_json_response)) {
+                    $responseJson = json_decode($payDetail->pay_json_response, true);
+                    if (!isset($responseJson['trxid'])) {
+                        throw new PayException("支付信息异常");
+                    }
+                }
+                $data = [
+                    'randomstr' => random_string(32),
+                    'reqsn' => $return->join_return_order_id,
+                    'oldtrxid' => $responseJson['trxid'],
+                    'trxamt' => $amount * 100,
 
-            $tlpay = new Tlpay();
-            $res = $tlpay->refund($data);
+                ];
+
+                $tlpay = new Tlpay();
+                $res = $tlpay->refund($data);
+                
+                $resArray = json_decode($res, true);
+                if (AppUtil::validSign($resArray)) {
+                    if ($resArray['retcode'] != 'SUCCESS' || $resArray['trxstatus'] != '0000') {
+                        throw new PayException('退款失败,原因:' . $resArray['errmsg']);
+                    }
+                }
+            }
+
+            // 余额支付
+            if (isset($payType[1]) && $payType[1] == 'CASH') {
+                $account = MemberAccount::where('join_account_member_id', $order->join_order_member_id)
+                    ->where('member_account_classify', 'CASH')
+                    ->first();
+                $account->member_account_expend = $account->member_account_expend - $amount;
+                $account->member_account_surplus = $account->member_account_surplus + $amount;
+                $account->save();
+
+                $data = [
+                    'type' => 'REFUND',
+                    'member_id' => $order->join_order_member_id,
+                    'order_id' => $return->join_return_order_id,
+                    'return_id' => $return->orders_return_id
+                ];
+                $res = json_encode([
+                    'status' => 'SUCCESS'
+                ]);
+            }
+            // 卡支付
+            if (count($payType) == 1) {
+                $account = MemberAccount::where('join_account_member_id', $order->join_order_member_id)
+                    ->where('member_account_nbr', $payType[0])
+                    ->where('member_account_classify', 'CARD')
+                    ->first();
+                $account->member_account_expend = $account->member_account_expend - $amount;
+                $account->member_account_surplus = $account->member_account_surplus + $amount;
+                $account->save();
+
+                $data = [
+                    'type' => 'REFUND',
+                    'nbr' => $account->member_account_nbr,
+                    'member_id' => $order->join_order_member_id,
+                    'order_id' => $return->join_return_order_id,
+                    'return_id' => $return->orders_return_id
+                ];
+                $res = json_encode([
+                    'status' => 'SUCCESS'
+                ]);
+            }
 
             // 生成payDetail
             $payDetailData = [
@@ -1001,31 +1063,26 @@ class WholeController extends Curd
                 'pay_paytimes' => date('Y-m-d H:i:s'),
                 'pay_json_request' => json_encode($data),
                 'pay_json_response' => $res,
-                'pay_prepayid' => 0,
+                'pay_prepayid' => $payType[0] . '-REFUND',
                 'pay_addtimes' => time()
             ];
             PayDetail::insert($payDetailData);
 
-            $resArray = json_decode($res, true);
-            if (AppUtil::validSign($resArray)) {
-                if ($resArray['retcode'] != 'SUCCESS' || $resArray['trxstatus'] != '0000') {
-//                    throw new PayException('退款失败,原因:' . $resArray['errmsg']);
-                }
-            }
-
             Db::commit();
 
-            _syslog("退款", "发起退款", $resArray, $data);
+            _syslog("退款", "发起退款", json_decode($res), $data);
             return json_success("退款成功");
         } catch (PayException $e) {
             Db::rollBack();
 
-            _syslog("退款", "发起退款", $resArray ?? $e->getMessage(), $data);
+            _syslog("退款", "发起退款", $e->getMessage(), $data);
             return json_fail($e->getMessage());
         } catch (\Exception $e) {
             Db::rollBack();
 
-            _syslog("退款", "发起退款", $resArray ?? $e->getMessage(), $data);
+            dump($e->getTrace());
+
+            _syslog("退款", "发起退款", $e->getMessage(), $data);
             return json_fail("数据更新失败");
         }
     }

+ 3 - 3
app/admin/service/member/MemberService.php

@@ -158,12 +158,12 @@ class MemberService
             }
             $item['goods_category'] = implode(',', $categoryName);
 
-            if ($item['pay_category'] == 'RECHARGE') {
+            if (in_array($item['pay_category'],['RECHARGE','REFUND'])) {
                 $item['balance_type'] = 'add';
             } else {
                 $item['balance_type'] = 'cut';
             }
-            if ($key == 0 && $item['pay_category'] == 'RECHARGE') {
+            if ($key == 0 && in_array($item['pay_category'],['RECHARGE','REFUND'])) {
                 if (!empty($item['pay_extend_json'])) {
                     $extendJson = json_decode($item['pay_extend_json'], true);
                     if (!isset($extendJson['added_amount'])) {
@@ -192,7 +192,7 @@ class MemberService
                 continue;
             }
 
-            if ($item['pay_category'] == 'RECHARGE') {
+            if (in_array($item['pay_category'],['RECHARGE','REFUND'])) {
                 if (!empty($item['pay_extend_json'])) {
                     $extendJson = json_decode($item['pay_extend_json'], true);
                     if (isset($extendJson['added_amount'])) {

+ 5 - 0
app/model/Order.php

@@ -42,4 +42,9 @@ class Order extends Model
     {
         return $this->hasOne(MemberCert::class, 'join_cert_member_id', 'join_order_member_id');
     }
+
+    public function return()
+    {
+        return $this->hasOne(OrderReturn::class, 'join_return_order_id', 'order_id');
+    }
 }