Browse Source

多服务

gorden 7 months ago
parent
commit
5b295d2713

+ 81 - 0
app/admin/controller/member/MemberController.php

@@ -180,6 +180,87 @@ class MemberController
         return json_success('', $data);
     }
 
+    /**
+     * 预约核销用
+     */
+    public function selectMemberAllQuotaByAppointment(Request $request)
+    {
+        $memberId = $request->get('member_id','');
+        $orderId = $request->get('order_id', '');
+        $goodsId = $request->get('goods_id','');
+        $person = $request->get('person', '');
+        $selectType = $request->get('select_type', 'ALL');
+
+        if (!$memberId) {
+            return json_fail('参数异常');
+        }
+        $data = [];
+
+        $benefit = MemberBenefit::where('join_benefit_member_id', $memberId)
+            ->whereColumn('member_benefit_limit_count', '>', 'member_benefit_used_count')
+            ->select('member_benefit_id as id', 'member_benefit_name as name', 'member_benefit_limit_count as total', 'member_benefit_used_count as used')
+            ->when($orderId != '', function ($query) use ($orderId) {
+                $query->where('join_benefit_order_id', $orderId);
+            })->when($goodsId != '', function ($query) use ($goodsId) {
+                $query->where('join_benefit_goods_id', $goodsId);
+            })
+            ->get()
+            ->toArray();
+        $data['benefit'] = [];
+        foreach ($benefit as $item) {
+            $item['benefit']['cut'] = $item['total'] - $item['used'];
+            $data['benefit']['name'] = $item['name'];
+            $data['benefit']['cut'] += $item['cut'];
+            $data['benefit']['id'][] = $item['id'];
+        }
+        if ($selectType == 'BENEFIT') {
+            return json_success('', $data);
+        }
+
+        $quotas = MemberQuota::where('join_quota_member_id', $memberId)
+            ->when($goodsId != '', function ($query) use ($goodsId) {
+                $query->whereJsonContains('member_quota_json', ['goods_id' => $goodsId]);
+            })
+            ->selectRaw('join_quota_member_id,join_member_rule_added_component_id,COUNT(*) as total')
+            ->groupBy('join_quota_member_id', 'join_member_rule_added_component_id')
+            ->get()
+            ->toArray();
+            
+        $data['quota'] = [];
+        foreach ($quotas as $quota) {
+            $usedNum = MemberQuota::where('join_quota_member_id', $quota['join_quota_member_id'])
+                ->where('join_member_rule_added_component_id', $quota['join_member_rule_added_component_id'])
+                ->where('member_quota_status', 'USED')
+                ->count('*');
+            if ($quota['total'] <= $usedNum) {
+                continue;
+            }
+            $memberQuota = MemberQuota::where('join_quota_member_id', $quota['join_quota_member_id'])
+                ->where('join_member_rule_added_component_id', $quota['join_member_rule_added_component_id'])
+                ->select('member_quota_id as id', 'member_quota_name as name')
+                ->first()
+                ->toArray();
+
+            $memberQuota['total'] = $quota['total'];
+            $memberQuota['used'] = $usedNum;
+            if ($memberQuota['total'] - $memberQuota['used'] < $person) {
+                $memberQuota['disabled'] = true;
+            }
+            $memberQuota['cut'] = $memberQuota['total'] - $memberQuota['used'];
+
+            $data['quota']['name'] = $memberQuota['name'];
+            $data['quota']['cut'] += $memberQuota['cut'];
+            $data['quota']['id'][] = $memberQuota['id'];
+            // $data[] = $memberQuota;
+        }
+
+        if ($selectType == 'QUOTA') {
+            return json_success('', $data);
+        }
+
+        return json_success('', $data);
+    }
+
     public function selectMemberAllQuotaByGoods(Request $request)
     {
         $memberId = $request->get('member_id', '');

+ 5 - 0
app/admin/controller/order/AppointmentController.php

@@ -39,6 +39,11 @@ class AppointmentController
         return AppointmentService::arrival($request);
     }
 
+    public function done(Request $request)
+    {
+        return AppointmentService::done($request);
+    }
+
     public function add(Request $request)
     {
         return AppointmentService::add($request);

+ 74 - 66
app/admin/controller/order/WholeController.php

@@ -354,7 +354,7 @@ class WholeController extends Curd
 
         $order = Order::where('order_id', $orderId)->first();
         $payDetail = PayDetail::where('join_pay_order_id', $order->order_groupby)
-            ->select('pay_id', 'pay_category', 'pay_prepayid', 'pay_paytimes', 'pay_status')
+            ->select('pay_id', 'pay_category', 'pay_prepayid', 'pay_paytimes', 'pay_status', 'pay_amount')
             ->first();
 
         if (!empty($payDetail->pay_prepayid)) {
@@ -498,7 +498,7 @@ class WholeController extends Curd
 
         $systemStatus = 'SENDING';  // 待发货
         // 立即结算
-        if(in_array($params['goods_classify'],['SERVICE','CHNMED','CHNNCD'])){
+        if(in_array($params['goods_classify'],['SERVICE','CHNMED','CHNNCD','MEALS'])){
             $systemStatus = 'DONE';
         }
         Db::beginTransaction();
@@ -516,24 +516,24 @@ class WholeController extends Curd
                     return json_fail('账户异常');
                 }
                 $amount = $account->member_account_surplus + $account->member_account_added;
-                if ($params['pay_constitute'] == 'N' && (!$account || $params['order_sheet_pay'] > $amount)) {
+                if ($params['pay_constitute'] == 'N' && (!$account || $params['order_amount_pay'] > $amount)) {
                     Db::rollBack();
                     return json_fail('账户余额不足');
                 }
-                if($params['pay_constitute'] == 'Y' && (!$account || $params['order_sheet_pay'] > $amount)){
-                    $qrcodePayAmount = $params['order_sheet_pay'] - $amount;
-                    $params['order_sheet_pay'] = $amount;
+                if($params['pay_constitute'] == 'Y' && (!$account || $params['order_amount_pay'] > $amount)){
+                    $qrcodePayAmount = $params['order_amount_pay'] - $amount;
+                    $params['order_amount_pay'] = $amount;
                 }
-                if ($params['order_sheet_pay'] > $account->member_account_surplus) {
-                    $cut = $account->member_account_added - ($params['order_sheet_pay'] - $account->member_account_surplus);
+                if ($params['order_amount_pay'] > $account->member_account_surplus) {
+                    $cut = $account->member_account_added - ($params['order_amount_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_surplus = $account->member_account_surplus - $params['order_amount_pay'];
                 }
-                $account->member_account_expend = $account->member_account_expend + $params['order_sheet_pay'];
+                $account->member_account_expend = $account->member_account_expend + $params['order_amount_pay'];
                 $account->save();
-                if ($params['pay_constitute'] == 'N' && (!$account || $params['order_sheet_pay'] <= $amount)) {
+                if ($params['pay_constitute'] == 'N' && (!$account || $params['order_amount_pay'] <= $amount)) {
                     $order->order_status_system = $systemStatus;
                     $order->order_status_payment = 'SUCCESS';
                 }
@@ -547,21 +547,21 @@ class WholeController extends Curd
                     return json_fail('账户异常');
                 }
                 $account->member_account_surplus = floatval($account->member_account_surplus);
-                if ($params['pay_constitute'] == 'N' && ($params['order_sheet_pay'] > $account->member_account_surplus)) {
+                if ($params['pay_constitute'] == 'N' && ($params['order_amount_pay'] > $account->member_account_surplus)) {
                     Db::rollBack();
                     return json_fail('账户余额不足');
                 }
-                if($params['pay_constitute'] == 'Y' && ($params['order_sheet_pay'] > $account->member_account_surplus)){
-                    $qrcodePayAmount = $params['order_sheet_pay'] - $account->member_account_surplus;
-                    $params['order_sheet_pay'] = $account->member_account_surplus;
+                if($params['pay_constitute'] == 'Y' && ($params['order_amount_pay'] > $account->member_account_surplus)){
+                    $qrcodePayAmount = $params['order_amount_pay'] - $account->member_account_surplus;
+                    $params['order_amount_pay'] = $account->member_account_surplus;
                 }
 
-                if ($params['pay_constitute'] == 'N' && ($params['order_sheet_pay'] <= $account->member_account_surplus)) {
+                if ($params['pay_constitute'] == 'N' && ($params['order_amount_pay'] <= $account->member_account_surplus)) {
                     $order->order_status_system = $systemStatus;
                     $order->order_status_payment = 'SUCCESS';
                 }
-                $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->member_account_surplus = $account->member_account_surplus - $params['order_amount_pay'];
+                $account->member_account_expend = $account->member_account_expend + $params['order_amount_pay'];
                 $account->save();
             } else if ($params['pay_category'] == 'CARD') {  // 储值卡账户
                 $cardNbr = $params['card_nbr'];
@@ -578,24 +578,24 @@ class WholeController extends Curd
                     return json_fail('账户异常');
                 }
                 $amount = $account->member_account_surplus + $account->member_account_added;
-                if ($params['pay_constitute'] == 'N' && (!$account || $params['order_sheet_pay'] > $amount)) {
+                if ($params['pay_constitute'] == 'N' && (!$account || $params['order_amount_pay'] > $amount)) {
                     Db::rollBack();
                     return json_fail('账户余额不足');
                 }
-                if($params['pay_constitute'] == 'Y' && (!$account || $params['order_sheet_pay'] > $amount)){
-                    $qrcodePayAmount = $params['order_sheet_pay'] - $amount;
-                    $params['order_sheet_pay'] = $amount;
+                if($params['pay_constitute'] == 'Y' && (!$account || $params['order_amount_pay'] > $amount)){
+                    $qrcodePayAmount = $params['order_amount_pay'] - $amount;
+                    $params['order_amount_pay'] = $amount;
                 }
-                if ($params['order_sheet_pay'] > $account->member_account_surplus) {
-                    $cut = $account->member_account_added - ($params['order_sheet_pay'] - $account->member_account_surplus);
+                if ($params['order_amount_pay'] > $account->member_account_surplus) {
+                    $cut = $account->member_account_added - ($params['order_amount_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_surplus = $account->member_account_surplus - $params['order_amount_pay'];
                 }
-                $account->member_account_expend = $account->member_account_expend + $params['order_sheet_pay'];
+                $account->member_account_expend = $account->member_account_expend + $params['order_amount_pay'];
                 $account->save();
-                if ($params['pay_constitute'] == 'N' && (!$account || $params['order_sheet_pay'] <= $amount)) {
+                if ($params['pay_constitute'] == 'N' && (!$account || $params['order_amount_pay'] <= $amount)) {
                     $order->order_status_system = $systemStatus;
                     $order->order_status_payment = 'SUCCESS';
                 }
@@ -604,13 +604,13 @@ class WholeController extends Curd
                 // 提交过来的支付分类
                 $submitPayCategory = $params['pay_category'];
                 // 账户支付的金额
-                $accountAmount = $params['order_sheet_pay'];
+                $accountAmount = $params['order_amount_pay'];
                 if ($params['pay_constitute'] == 'Y' && $qrcodePayAmount > 0){
                     // 组合支付,改成需要付款码需要支付的金额
-                    $params['order_sheet_pay'] = $qrcodePayAmount;
+                    $params['order_amount_pay'] = $qrcodePayAmount;
                 }
                 // 去支付
-                // $result = OrderService::qrcodePay($params);
+                $result = OrderService::qrcodePay($params);
                 $result = [
                     'return_code'=>'SUCCESS',
                     'result_code' => 'SUCCESS'
@@ -644,7 +644,7 @@ class WholeController extends Curd
                         'join_pay_order_id'=>$params['orderGroupId'],
                         'pay_status'=>'SUCCESS',
                         'pay_category' => $params['goods_classify'],
-                        'pay_amount'=> $params['order_sheet_pay'],
+                        'pay_amount'=> $params['order_amount_pay'],
                         'pay_paytimes'=>date('Y-m-d H:i:s'),
                         'pay_prepayid'=>$params['pay_category'],
                         'pay_json_request' => json_encode($params),
@@ -661,7 +661,7 @@ class WholeController extends Curd
                 $order->order_status_system = $systemStatus;
                 $order->order_status_payment = 'SUCCESS';
                 // 账户支付的金额
-                $params['order_sheet_pay'] = $accountAmount;
+                $params['order_amount_pay'] = $accountAmount;
             }
             $orderConfigJson = [];
             if (!empty($order->order_config_json)){
@@ -669,7 +669,7 @@ class WholeController extends Curd
             }
             $orderConfigJson['preferential'] = $params['preferential'] ?? '';
             $order->order_config_json = json_encode($orderConfigJson);
-            $order->order_amount_pay = $params['order_sheet_pay']+$qrcodePayAmount;
+            $order->order_amount_pay = $params['order_amount_pay']+$qrcodePayAmount;
             // 主订单
             $order->save();
 
@@ -677,12 +677,11 @@ class WholeController extends Curd
             if ($order->order_status_payment == 'SUCCESS'){
                 OrderSheet::where('join_sheet_order_id',$params['order_id'])->update([
                     'order_sheet_status'=>$systemStatus,
-                    'order_sheet_pay'=>$params['order_sheet_pay']+$qrcodePayAmount
                 ]);
             }
             // payDetail
             $payData = [
-                'pay_amount'=>$params['order_sheet_pay']
+                'pay_amount'=>$params['order_amount_pay']
             ];
             if ($order->order_status_payment == 'SUCCESS'){
                 $payData['pay_paytimes'] = date('Y-m-d H:i:s');
@@ -757,6 +756,11 @@ class WholeController extends Curd
             //     }
             // }
 
+            // 打小票
+            $voteData = [
+                ''
+            ];
+            http_post(getenv('VOTE_MENU_URL'),'');
 
             Db::commit();
 
@@ -834,24 +838,23 @@ class WholeController extends Curd
     {
         $params = $request->post();
 
-        // 余额、福利、储值卡 验证短信
-        if ($params['pay_constitute'] == 'N' && in_array($params['pay_category'],['CASH','CARD','WELFARE'])){
-            $code = $params['sms_code'];
-            if (!$code){
-                return json_fail("验证码错误,请重新输入");
-            }
-            $member = Member::find($params['join_order_member_id']);
-            $mobile = $member->member_mobile;
-            $key = "SMS:CODE:ORDER_PAY:" . $mobile;
-            $redisCode = Redis::get($key);
-            if ($redisCode != $code && $code != '123456') {
-                return json_fail("验证码错误,请重新输入");
-            }
-            Redis::del($key);
-        }
-
         Db::beginTransaction();
         try {
+            // 余额、福利、储值卡 验证短信
+            if ($params['settlement_now'] == 'Y' && $params['pay_constitute'] == 'N' && in_array($params['pay_category'],['CASH','CARD','WELFARE'])){
+                $code = $params['sms_code'];
+                if (!$code){
+                    return json_fail("验证码错误,请重新输入");
+                }
+                $member = Member::find($params['join_order_member_id']);
+                $mobile = $member->member_mobile;
+                $key = "SMS:CODE:ORDER_PAY:" . $mobile;
+                $redisCode = Redis::get($key);
+                if ($redisCode != $code && $code != '123456') {
+                    return json_fail("验证码错误,请重新输入");
+                }
+                Redis::del($key);
+            }
             $qrcodePayAmount = 0;
             if (empty($params['join_order_member_id']) && !empty($params['mobile'])){
                 if (Member::where('member_mobile',$params['mobile'])->exists()){
@@ -1223,21 +1226,26 @@ class WholeController extends Curd
     public function insertSheet($params)
     {
         try {
-            $data = [
-                'join_sheet_member_id' => $params['join_order_member_id'],
-                'join_sheet_order_id' => $params['orderId'],
-                'join_sheet_goods_id' => $params['join_sheet_goods_id'],
-                'join_sheet_goods_sku_id' => $params['join_sheet_goods_sku_id'],
-                'order_sheet_status' => 'DONE',
-                'order_sheet_category' => 'NORMAL',
-                'order_sheet_num' => $params['order_sheet_num'],
-                'order_sheet_price' => $params['order_sheet_price'],
-                'order_sheet_amount' => $params['order_sheet_amount'],
-                'order_sheet_pay' => $params['order_sheet_pay'],
-                'order_sheet_remark' => $params['order_remark'] ?? '',
-                'order_sheet_addtimes' => time()
-            ];
-            return OrderSheet::insertGetId($data);
+            foreach($params['goodsContentList'] as $goods){
+                $price = floatval($goods['goods_sales_price']);
+                $data = [
+                    'join_sheet_member_id' => $params['join_order_member_id'],
+                    'join_sheet_order_id' => $params['orderId'],
+                    'join_sheet_goods_id' => $goods['goods_id'],
+                    'join_sheet_goods_sku_id' => $goods['sku_id'],
+                    'order_sheet_status' => $params['settlement_now'] == 'Y' ? 'DONE' : 'PAYING',
+                    'order_sheet_category' => 'NORMAL',
+                    'order_sheet_num' => $goods['nbr'],
+                    'order_sheet_price' => $goods['goods_sales_price'],
+                    'order_sheet_amount' => $price * $goods['nbr'],
+                    'order_sheet_pay' => $price * $goods['nbr'],
+                    'order_sheet_remark' => $params['order_remark'] ?? '',
+                    'order_sheet_addtimes' => time()
+                ];
+                
+                OrderSheet::insertGetId($data); 
+            }
+            return true;
         } catch (\Exception $e) {
             throw new BusinessException('订单创建失败');
         }

+ 40 - 2
app/admin/service/order/AppointmentService.php

@@ -155,7 +155,47 @@ class AppointmentService
 
         $appointment = Appointment::where('appointment_id',$appointmentId)->first();
         
+        Db::beginTransaction();
         try{
+            $appointment->appointment_doing_datetime = date('Y-m-d H:i:s');
+            $appointment->appointment_status = 'DOING';
+            $appointment->save();
+            Db::commit();
+
+            return json_success('操作成功');
+        }catch(\Exception $e){
+            dump($e->getMessage());
+            Db::rollBack();
+            return json_fail('到店状态修改失败');
+        }
+
+    }
+
+    /**
+     * 服务完成
+     */
+    public static function done(Request $request)
+    {
+        $appointmentId = $request->post('id','');
+        $isGenerateOrder = $request->post('is_generate_order','');
+        if (!$appointmentId || !$isGenerateOrder){
+            return json_fail("参数异常");
+        }
+
+        $appointment = Appointment::where('appointment_id',$appointmentId)->first();
+        
+        
+        Db::beginTransaction();
+        try{
+            $appointment->appointment_done_datetime = date('Y-m-d H:i:s');
+            $appointment->appointment_status = 'DONE';
+            // 不产生订单,走核销
+            if ($isGenerateOrder == 'N'){
+                $appointment->save();
+
+                Db::commit();
+                return json_success('操作成功');
+            }
             $applyJson = json_decode($appointment->appointment_apply_json,true);
             $goods = Goods::where('goods_id',$appointment->join_appointment_goods_id)->first();
             $sku = GoodsSku::where('goods_sku_id',$appointment->join_appointment_goods_sku_id)->first();
@@ -211,7 +251,6 @@ class AppointmentService
             ];
             PayDetail::insert($pay);
 
-            $appointment->appointment_status = 'DOING';
             $appointment->save();
             Db::commit();
 
@@ -221,7 +260,6 @@ class AppointmentService
             Db::rollBack();
             return json_fail('到店状态修改失败');
         }
-
     }
 
     public static function add(Request $request)

+ 7 - 5
app/admin/service/order/OrderService.php

@@ -159,15 +159,17 @@ class OrderService
      */
     public static function qrcodePay($params)
     {
+        dump('付款码=',$params['order_amount_pay']);
+        return;
         $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' => '万悦康养订单',
-                'total_fee'      => 1,//$params['order_sheet_pay']*100,
-                'auth_code' => $params['qrcode_nbr'],
+                'body'         => '万悦康养订单',
+                'total_fee'    => 1,//$params['order_amount_pay']*100,
+                'auth_code'    => $params['qrcode_nbr'],
             ];
             try{
                 $result = Pay::wechat(config('payment.wxpay'))->pos($payData);
@@ -181,9 +183,9 @@ class OrderService
         }else if(in_array($prefix,[25,26,27,28,29,30])){
             $payData = [
                 'out_trade_no' => $params['orderGroupId'],
-                'total_amount' => 0.01,//$params['order_sheet_pay'],
+                'total_amount' => 0.01,//$params['order_amount_pay'],
                 'subject'      => '万悦康养订单',
-                'auth_code' => $params['qrcode_nbr'],
+                'auth_code'    => $params['qrcode_nbr'],
             ];
             try{
                 $result = Pay::alipay(config('payment.alipay'))->pos($payData);

+ 2 - 0
route/admin.php

@@ -623,6 +623,7 @@ Route::group('/admin', function () {
             Route::get('/selectWriteOffMember', [\app\admin\controller\member\MemberController::class, 'selectWriteOffMember']);
             Route::get('/selectFamilyMemberList', [\app\admin\controller\member\MemberController::class, 'selectFamilyMemberList']);
             Route::get('/selectMemberAllQuota', [\app\admin\controller\member\MemberController::class, 'selectMemberAllQuota']);
+            Route::get('/selectMemberAllQuotaByAppointment', [\app\admin\controller\member\MemberController::class, 'selectMemberAllQuotaByAppointment']);
             Route::get('/welfareInfo', [\app\admin\controller\member\MemberController::class, 'welfareInfo']);
             Route::get('/balanceInfo', [\app\admin\controller\member\MemberController::class, 'balanceInfo']);
             Route::get('/pointInfo', [\app\admin\controller\member\MemberController::class, 'pointInfo']);
@@ -866,6 +867,7 @@ Route::group('/admin', function () {
             Route::get('/getTimes', [\app\admin\controller\order\AppointmentController::class, 'getTimes']);
             Route::get('/my', [\app\admin\controller\order\AppointmentController::class, 'myAppointments']);
             Route::post('/arrival',[\app\admin\controller\order\AppointmentController::class, 'arrival']);
+            Route::post('/done',[\app\admin\controller\order\AppointmentController::class, 'done']);
             Route::post('/cancelApply',[\app\admin\controller\order\AppointmentController::class, 'cancelApply']);
 
         })->middleware([