gorden 7 місяців тому
батько
коміт
f740e99945

+ 30 - 0
app/admin/controller/member/AccountController.php

@@ -76,4 +76,34 @@ class AccountController extends Curd
             return json_fail('操作失败');
         }
     }
+
+    /**
+     * 用户的账户
+     */
+    public function selectMemberAccount(Request $request) 
+    {
+        $memberId = $request->get('member_id','');
+        if (!$memberId){
+            return json_fail('参数异常');
+        }
+        
+        $account = MemberAccount::where('join_account_member_id', $memberId)->get()->toArray();
+
+        $data = [];
+        foreach ($account as $item){
+            $item['member_account_duedate'] = !empty($item['member_account_duedate']) ? date('Y-m-d H:i:s',$item['member_account_duedate']) : '长期有效';
+
+            if ($item['member_account_classify'] == 'POINTS'){
+                $data['points'] = $item;
+            }elseif ($item['member_account_classify'] == 'CASH'){
+                $data['cash'] = $item;
+            }elseif ($item['member_account_classify'] == 'CARD'){
+                $data['card'][] = $item;
+            }elseif ($item['member_account_classify'] == 'WELFARE'){
+                $data['welfare'] = $item;
+            }
+        }
+
+        return json_success('', $data);
+    }
 }

+ 83 - 20
app/admin/controller/order/WholeController.php

@@ -2,6 +2,7 @@
 
 namespace app\admin\controller\order;
 
+use app\admin\service\member\MemberService;
 use app\admin\service\order\OrderService;
 use app\admin\validate\coupon\CouponValidate;
 use app\admin\validate\device\DeviceValidate;
@@ -381,12 +382,12 @@ class WholeController extends Curd
             if (isset($orderConfigJson['table'])) {
                 $order->table = $orderConfigJson['table'];
             }
-            // if(isset($orderConfigJson['express'])){
-            //     $order->express = $orderConfigJson['express'];
-            // }
-            // if(isset($orderConfigJson['premises'])){
-            //     $order->premises = $orderConfigJson['premises'];
-            // }
+            if(isset($orderConfigJson['express'])){
+                $order->express = $orderConfigJson['express'];
+            }
+            if(isset($orderConfigJson['premises'])){
+                $order->premises = $orderConfigJson['premises'];
+            }
         }
 
         $order->premises = $premises;
@@ -525,8 +526,17 @@ class WholeController extends Curd
         $params = $request->post();
         Db::beginTransaction();
         try {
+            if (empty($params['join_order_member_id']) && !empty($params['mobile'])){
+                if (Member::where('member_mobile',$params['mobile'])->exists()){
+                    Db::rollBack();
+                    return json_fail('会员已存在');
+                }
+                $params['join_order_member_id'] = $params['member_id'] = 'MR'.date('YmdHis').random_string(6,'up');
+                // 创建会员
+                MemberService::createMember($params);
+            }
             // 余额支付
-            if ($params['pay_category'] == 'CASH') {
+            if ($params['pay_category'] == 'CASH' && $params['order_status_payment'] == 'SUCCESS') {
                 $account = MemberAccount::where('join_account_member_id', $params['join_order_member_id'])
                     ->where('member_account_classify', 'CASH')
                     ->where('member_account_status', 'ACTIVED')
@@ -548,7 +558,7 @@ class WholeController extends Curd
                 }
                 $account->member_account_expend = $account->member_account_expend + $params['order_sheet_pay'];
                 $account->save();
-            } else if ($params['pay_category'] == 'WELFARE') {  // 福利账户
+            } else if ($params['pay_category'] == 'WELFARE' && $params['order_status_payment'] == 'SUCCESS') {  // 福利账户
                 $account = MemberAccount::where('join_account_member_id', $params['join_order_member_id'])
                     ->where('member_account_classify', 'WELFARE')
                     ->where('member_account_status', 'ACTIVED')
@@ -566,6 +576,36 @@ class WholeController extends Curd
                 $account->member_account_surplus = $account->member_account_surplus - $params['order_sheet_pay'];
                 $account->member_account_expend = $account->member_account_expend + $params['order_sheet_pay'];
                 $account->save();
+            } else if ($params['pay_category'] == 'CARD' && $params['order_status_payment'] == 'SUCCESS') {  // 储值卡账户
+                $cardNbr = $params['card_nbr'];
+                if (!$cardNbr){
+                    Db::rollBack();
+                    return json_fail('账户异常'); 
+                }
+                $account = MemberAccount::where('join_account_member_id', $params['join_order_member_id'])
+                    ->where('member_account_nbr', $cardNbr)
+                    ->where('member_account_status', 'ACTIVED')
+                    ->first();
+
+                    dump($cardNbr);
+                if (!$account) {
+                    Db::rollBack();
+                    return json_fail('账户异常');
+                }
+                $amount = $account->member_account_surplus + $account->member_account_added;
+                if (!$account || $params['order_sheet_pay'] > $amount) {
+                    Db::rollBack();
+                    return json_fail('账户余额不足');
+                }
+                if ($params['order_sheet_pay'] > $account->member_account_surplus) {
+                    $cut = $account->member_account_added - ($params['order_sheet_pay'] - $account->member_account_surplus);
+                    $account->member_account_surplus = 0;
+                    $account->member_account_added = $cut;
+                } else {
+                    $account->member_account_surplus = $account->member_account_surplus - $params['order_sheet_pay'];
+                }
+                $account->member_account_expend = $account->member_account_expend + $params['order_sheet_pay'];
+                $account->save();
             }
 
             $goods = Goods::where('goods_id', $params['join_sheet_goods_id'])
@@ -588,18 +628,27 @@ class WholeController extends Curd
             $params['orderGroupId'] = 'OD' . date('YmdHis') . random_string(6, 'up');
             $params['benefitId'] = 'BF' . date('YmdHis') . random_string(6, 'up');
 
+            $orderConfigJson = [];
+            // 优惠
+            if (!empty($params['preferential'])){
+                $orderConfigJson['preferential'] = $params['preferential'];
+            }
+
             // 配送方式
-            // if ($params['delivery'] == 'PICKUP') { // 自提
-            //     // $params['order_config_json'] = json_encode([
-            //     //     // 'express' => 'S',
-            //     //     'premises' => $params['dept_premises_id']
-            //     // ]);
-            // } else if ($params['delivery'] == 'LOGISTICS') {
-            //     // $params['order_express_json'] = json_encode([
-            //     //     'express' => 'Y',
-            //     // ]);
-            // }
+            if ($params['delivery'] == 'PICKUP' || $params['delivery'] == 'ARRIVAL') { // 自提/到店
+                $orderConfigJson['premises'] = $params['dept_premises_id'];
+            } else if ($params['delivery'] == 'LOGISTICS') {
+                // $params['order_express_json'] = json_encode([
+                //     'express' => 'Y',
+                // ]);
+            }
+            $params['order_config_json'] = json_encode($orderConfigJson);
 
+            // 如果是扫码支付
+            if($params['pay_category'] == 'QRCODE' && !empty($params['qrcode_nbr'])){
+                $result = OrderService::qrcodePay($params);
+                dump($result);
+            }
             // 写入主订单
             $this->insertMain($params);
             // 订单详情
@@ -623,6 +672,18 @@ class WholeController extends Curd
                 $params['order_express_address'] = $premises->dept_address;
                 $params['order_express_telephone'] = $premises->dept_telephone;
 
+                $this->saveExpress($params);
+            } else if ($params['delivery'] == 'ARRIVAL') {
+                $premises = SysDept::where('dept_name', $params['dept_premises_id'])->first();
+                $params['order_express_type'] = '到店';
+                if (!$premises) {
+                    throw new BusinessException('门店不存在');
+                }
+
+                $params['order_express_city'] = $premises->dept_city;
+                $params['order_express_address'] = $premises->dept_address;
+                $params['order_express_telephone'] = $premises->dept_telephone;
+
                 $this->saveExpress($params);
             }
             // 买的单个服务
@@ -705,9 +766,11 @@ class WholeController extends Curd
                 'order_status_system' => $params['order_status_system'],
                 'order_status_payment' => $params['order_status_payment'],
                 'order_status_storage' => $params['order_status_storage'],
+                'order_platform' => $params['order_platform'],
                 'order_remark' => $params['order_remark'] ?? '',
                 'order_config_json' => $params['order_config_json'] ?? '[]',
                 'order_express_json' => $params['order_express_json'] ?? '[]',
+                'order_extend_json' => $params['order_extend_json'] ?? '[]',
                 'order_addtimes' => time()
             ];
 
@@ -862,10 +925,10 @@ class WholeController extends Curd
     {
         $params['order_express_goods'] = json_encode(['sheet' => [$params['sheet_id']]]);
         if ($params['delivery'] == 'PICKUP') { // 自提
-            $params['order_config_json'] = json_encode([
+            // $params['order_config_json'] = json_encode([
                 // 'express' => 'S',
                 // 'premises' => $params['dept_premises_id']
-            ]);
+            // ]);
         } else if ($params['delivery'] == 'LOGISTICS') {
             // $params['order_express_json'] = json_encode([
             //     'express' => 'Y',

+ 45 - 0
app/admin/service/member/MemberService.php

@@ -916,6 +916,51 @@ class MemberService
         }
     }
 
+    /**
+     * 手动创建会员
+     */
+    public static function createMember($params)
+    {
+        $memberId = $params['member_id'] ?? '';
+        if (!$memberId){
+            throw new BusinessException("参数异常");
+        }
+        // 主表
+        $memberData = [
+            'member_id' => $memberId,
+            'member_is_owner' => 'N',
+            'member_classify' => 'MEMBER',
+            'member_status' => 'ACTIVED',
+            'member_mobile' => $params['mobile'],
+            'member_extend_json'=>json_encode(['come_from'=>'SYSTEM']),
+            'member_addtimes' => time()
+        ];
+        Member::insert($memberData);
+        // 账户表
+        $accountData = [
+            'join_account_member_id' => $memberId,
+            'member_account_classify' => 'POINTS',
+            'member_account_status' => 'ACTIVED',
+            'member_account_category' => 'NORMAL',
+            'member_account_nbr' => $memberId . '-POINTS',
+            'member_account_name' => '积分账户',
+            'member_account_addtimes' => time()
+        ];
+        // 积分账户
+        MemberAccount::insert($accountData);
+        $accountData['member_account_classify'] = 'CASH';
+        $accountData['member_account_nbr'] = $memberId . '-CASH';
+        $accountData['member_account_name'] = '余额账户';
+        // 现金/余额账户
+        MemberAccount::insert($accountData);
+        // info
+        $infoData = [
+            'join_info_member_id' => $memberId,
+            'member_info_nickname' => $params['username']
+        ];
+        MemberInfo::insert($infoData);
+    }
+
     private static function generateMemberId()
     {
         $id = SysSerial::getSerial();

+ 1 - 1
app/admin/service/order/AppointmentService.php

@@ -181,7 +181,7 @@ class AppointmentService
                     Db::rollBack();
                     return json_fail('会员已存在,请勿重复创建');
                 }
-                $memberId = "ME" . str_pad(SysSerial::getSerial(), 16, "0", STR_PAD_LEFT) . random_string(6, 'up');
+                $memberId = "MR" . str_pad(SysSerial::getSerial(), 16, "0", STR_PAD_LEFT) . random_string(6, 'up');
                 $params['join_appointment_member_id'] = $memberId;
 
                 // 主表

+ 43 - 0
app/admin/service/order/OrderService.php

@@ -6,7 +6,10 @@ use app\model\Order;
 use app\model\OrderSheet;
 use app\model\SysDept;
 use support\Db;
+use support\exception\BusinessException;
 use support\Redis;
+use Yansongda\Pay\Log;
+use Yansongda\Pay\Pay;
 
 class OrderService
 {
@@ -90,12 +93,14 @@ class OrderService
             Db::beginTransaction();
             $timeUnix = strtotime("-30 minutes");
             $orders = Order::where('order_status_system', 'PAYING')
+                ->where('order_category','<>','DISHES')
                 ->where('order_addtimes', '<', $timeUnix)
                 ->get();
             foreach ($orders as $order) {
                 
                 // 订单主表
                 Order::where('order_id', $order->order_id)->update([
+                    'order_is_complete' => 'Y',
                     'order_status_system' => 'CANCEL',
                     'order_status_payment' => 'CANCEL'
                 ]);
@@ -121,4 +126,42 @@ class OrderService
             'member_id' => $params['join_order_member_id']
         ];
     }
+
+    /**
+     * 微信支付宝扫码支付
+     */
+    public static function qrcodePay($params)
+    {
+        $qrcodeNbr = $params['qrcode_nbr'];
+        $prefix = substr($qrcodeNbr,0,2);
+        // 微信支付
+        if(in_array($prefix,[10,11,12,13,14,15])){
+            $payData = [
+                'out_trade_no' => $params['orderGroupId'],
+                'body' => 'subject-测试',
+                'total_fee'      => $params['order_sheet_pay']*100,
+                'auth_code' => $params['qrcode_nbr'],
+            ];
+            $result = Pay::wechat(config('payment.wxpay'))->app($payData)->getContent();
+            dump($result);
+
+            Log::info("WXPAY_RETURN",$result);
+
+        }else if(in_array($prefix,[25,26,27,28,29,30])){
+            $payData = [
+                'out_trade_no' => $params['orderGroupId'],
+                'total_amount' => $params['order_sheet_pay'],
+                'subject'      => '万悦康养订单',
+                'auth_code' => $params['qrcode_nbr'],
+            ];
+            $result = Pay::alipay(config('payment.alipay'))->pos($payData);
+            dump($result);
+            Log::info("ALIPAY_RETURN",$result);
+
+        }else{
+            throw new BusinessException("二维码无效");
+        }
+
+        return $result;
+    }
 }

+ 2 - 1
app/api/controller/pay/AlipayController.php

@@ -9,6 +9,7 @@ use Payment\Common\PayException;
 use support\Db;
 use support\Request;
 use Yansongda\Pay\Exceptions\BusinessException;
+use Yansongda\Pay\Log as PayLog;
 use Yansongda\Pay\Pay;
 
 class AlipayController
@@ -85,7 +86,7 @@ class AlipayController
             // 4、验证app_id是否为该商户本身。
             // 5、其它业务逻辑情况
 
-            Log::debug('Alipay notify', $data->all());
+            PayLog::debug('Alipay notify', $data->all());
         } catch (\Exception $e) {
             // $e->getMessage();
         }

+ 1 - 0
route/admin.php

@@ -599,6 +599,7 @@ Route::group('/admin', function () {
         Route::group('/account', function () {
             Route::get('/my/{id:\w+}', [\app\admin\controller\member\AccountController::class, 'my']);
             Route::post('/incomeExpend', [\app\admin\controller\member\AccountController::class, 'incomeExpend']);
+            Route::get('/selectMemberAccount', [\app\admin\controller\member\AccountController::class, 'selectMemberAccount']);
         })->middleware([
             \app\middleware\AdminAuthCheck::class
         ]);