Browse Source

福利账户

gorden 8 months ago
parent
commit
d72f14e5c1

+ 45 - 1
app/admin/controller/order/WholeController.php

@@ -459,6 +459,7 @@ class WholeController extends Curd
                 }
                 $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) {
@@ -470,12 +471,31 @@ class WholeController extends Curd
                 }
                 $account->member_account_expend = $account->member_account_expend + $params['order_sheet_pay'];
                 $account->save();
+            }else if ($params['pay_category'] == 'WELFARE') {  // 福利账户
+                $account = MemberAccount::where('join_account_member_id', $params['join_order_member_id'])
+                    ->where('member_account_classify', 'WELFARE')
+                    ->where('member_account_status', 'ACTIVED')
+                    ->first();
+                if (!$account) {
+                    Db::rollBack();
+                    return json_fail('账户异常');
+                }
+                $account->member_account_surplus = floatval($account->member_account_surplus);
+                if ($params['order_sheet_pay'] > $account->member_account_surplus) {
+                    Db::rollBack();
+                    return json_fail('账户余额不足');
+                }
+                
+                $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'])
                 ->select('goods_id', 'goods_name', 'goods_classify')
                 ->first();
             if (!$goods) {
+                Db::rollBack();
                 return json_fail('产品数据异常');
             }
             $goods = $goods->toArray();
@@ -663,13 +683,18 @@ class WholeController extends Curd
     public function insertPayDetail($params)
     {
         try {
+            if(in_array($params['pay_category'],['WXPAY','ALIPAY'])){
+                $payPrepayid = $params['pay_category'];
+            }else{
+                $payPrepayid = $params['join_order_member_id'] . '-' . $params['pay_category'];
+            }
             $data = [
                 'join_pay_member_id' => $params['join_order_member_id'],
                 'join_pay_order_id' => $params['orderGroupId'],
                 'pay_status' => 'SUCCESS',
                 'pay_category' => $params['pay_category'],
                 'pay_amount' => $params['order_sheet_pay'],
-                'pay_prepayid' => $params['join_order_member_id'] . '-' . $params['pay_category'],
+                'pay_prepayid' => $payPrepayid,
                 'pay_paytimes' => date('Y-m-d H:i:s'),
                 'pay_remark' => $params['order_remark'] ?? '',
                 'pay_addtimes' => time()
@@ -1219,6 +1244,25 @@ class WholeController extends Curd
                     'status' => 'SUCCESS'
                 ]);
             }
+            // 员工福利支付
+            if (isset($payType[1]) && $payType[1] == 'WELFARE') {
+                $account = MemberAccount::where('join_account_member_id', $order->join_order_member_id)
+                    ->where('member_account_classify', 'WELFARE')
+                    ->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 && !in_array($payDetail->pay_prepayid, ['W06', 'A01'])) {
                 $account = MemberAccount::where('join_account_member_id', $order->join_order_member_id)

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

@@ -492,6 +492,19 @@ class MemberService
             $accountData['member_account_name'] = '余额账户';
             // 现金/余额账户
             MemberAccount::insert($accountData);
+            // 福利账户
+            if (!empty($params['member_classify']) && $params['member_classify'] == 'EMPLOY'){
+                $welfareData = [
+                    'join_account_member_id'=>$memberId,
+                    'member_account_classify'=>'WELFARE',
+                    'member_account_status'=>'ACTIVED',
+                    'member_account_category'=>'NORMAL',
+                    'member_account_nbr'=>$memberId.'-WELFARE',
+                    'member_account_name'=>'福利账户',
+                    'member_account_addtimes'=>time()
+                ];
+                MemberAccount::insert($welfareData);
+            }
 
             // member cert
             $certData = [
@@ -609,6 +622,19 @@ class MemberService
             } else {
                 MemberInfo::where('join_info_member_id', $params['member_id'])->update($infoData);
             }
+            // 福利账户
+            if (!empty($params['member_classify']) && $params['member_classify'] == 'EMPLOY' && !MemberAccount::where('member_account_nbr',$memberId.'-WELFARE')->exists()){
+                $welfareData = [
+                    'join_account_member_id'=>$memberId,
+                    'member_account_classify'=>'WELFARE',
+                    'member_account_status'=>'ACTIVED',
+                    'member_account_category'=>'NORMAL',
+                    'member_account_nbr'=>$memberId.'-WELFARE',
+                    'member_account_name'=>'福利账户',
+                    'member_account_addtimes'=>time()
+                ];
+                MemberAccount::insert($welfareData);
+            }
 
             Db::commit();
         } catch (\Exception $e) {

+ 32 - 3
app/admin/service/order/AppointmentService.php

@@ -479,10 +479,39 @@ class AppointmentService
                         ->where('member_account_status', 'ACTIVED')
                         ->first();
                     if (!$account) {
-                        Db::rollBack();
-                        return json_fail('当前账户不存在或已过期');
+                        throw new BusinessException("当前账户不存在或已过期");
+                    }
+                    $amount = $account->member_account_surplus + $account->member_account_added;
+                    if ($amount < $sheet['order_sheet_pay']) {
+                        throw new BusinessException("账户余额不足");
+                    } else {
+                        if($account->member_account_surplus < $sheet['order_sheet_pay']){
+                            $account->member_account_added = $account->member_account_added - ($sheet['order_sheet_pay']-$account->member_account_surplus);
+                            $account->member_account_surplus = 0;
+                        }else{
+                            $account->member_account_surplus = $account->member_account_surplus - $sheet['order_sheet_pay'];
+                        }
+                        MemberAccount::where('member_account_id', $account->member_account_id)->update([
+                            'member_account_expend' => $account->member_account_expend + $sheet['order_sheet_pay'],
+                            'member_account_surplus' => $account->member_account_surplus,
+                            'member_account_added' => $account->member_account_added
+                        ]);
+                        $pay['pay_status'] = 'SUCCESS';
+                        $pay['join_pay_object_json'] = json_encode(['payment' => ['member_account_id' => $account->member_account_id]]);
+                        // 更新订单状态
+                        Order::where('order_id', $orderId)->update(['order_status_system' => 'CONFIRM', 'order_status_payment' => 'SUCCESS']);
+                        OrderSheet::where('join_sheet_order_id', $orderId)->update(['order_sheet_status' => 'CONFIRM']);
+                    }
+                    // $pay['pay_category'] = 'CASH';
+                    PayDetail::insert($pay);
+                } elseif ($params['settlement_mode'] == 'WELFARE') {
+                    $account = MemberAccount::where('join_account_member_id', $params['join_appointment_member_id'])
+                        ->where('member_account_classify', 'WELFARE')
+                        ->where('member_account_status', 'ACTIVED')
+                        ->first();
+                    if (!$account) {
+                        throw new BusinessException("当前账户不存在或已过期");
                     }
-
                     if ($account->member_account_surplus < $sheet['order_sheet_pay']) {
                         throw new BusinessException("账户余额不足");
                     } else {