Browse Source

推款支付方式

gorden 6 months ago
parent
commit
ef06b5c9f5

+ 11 - 2
app/admin/controller/order/RefundController.php

@@ -266,7 +266,7 @@ class RefundController extends Curd
                     $prepayid = 'WXPAY';
                     $response = $this->refundToWx($payDetail0, $returnId, $amount);
                 } elseif ($payWay[0] == 'ALIPAY') {
-                    $prepayid = 'WXPAY';
+                    $prepayid = 'ALIPAY';
                     $response = $this->refundToAlipay($payDetail0, $amount);
                 } elseif ($payWay[0] == 'MONEY') {
                     $prepayid = 'MONEY';
@@ -276,9 +276,18 @@ class RefundController extends Curd
                     $this->refundToCash($order->join_order_member_id, $amount);
                     $response = ['order_id' => $order->order_id, 'member_id' => $order->join_order_member_id];
                 } elseif (isset($payWay['1']) && $payWay[1] == 'CARD') {
-                    $prepayid = $order->join_order_member_id . '-CASH';
+                    $prepayid = $order->join_order_member_id . '-CARD';
                     $this->refundToCard($order->join_order_member_id, $amount);
                     $response = ['order_id' => $order->order_id, 'member_id' => $order->join_order_member_id];
+                } elseif ($payWay[0] == 'OFFLINE') {
+                    $prepayid = 'OFFLINE';
+                    $response = [];
+                } elseif ($payWay[0] == 'OFFLINE_ALIPAY') {
+                    $prepayid = 'OFFLINE_ALIPAY';
+                    $response = [];
+                } elseif ($payWay[0] == 'OFFLINE_WXPAY') {
+                    $prepayid = 'OFFLINE_WXPAY';
+                    $response = [];
                 }
             }
 

+ 0 - 27
app/admin/controller/order/WholeController.php

@@ -3965,33 +3965,6 @@ class WholeController extends Curd
                 ]);
             }
 
-//            if (!empty($payDetail->pay_prepayid) && in_array($payDetail->pay_prepayid, ['WXPAY', 'ALIPAY'])) {
-//                $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);
-//
-//                $resArray = json_decode($res, true);
-//                if (AppUtil::validSign($resArray)) {
-//                    if ($resArray['retcode'] != 'SUCCESS' || $resArray['trxstatus'] != '0000') {
-//                        throw new PayException('退款失败,原因:' . $resArray['errmsg']);
-//                    }
-//                }
-//            }
-
             // 生成payDetail
             $payDetailData = [
                 'join_pay_member_id' => $order->join_order_member_id,

+ 53 - 16
app/admin/service/member/MemberService.php

@@ -56,9 +56,9 @@ class MemberService
             })->when($level != '', function ($query) use ($level) {
                 if ($level == 'other') {
                     $query->where('member.join_member_role_id', NULL)->orWhere('member.join_member_role_id', '');
-                } else if($level == 'VIP'){
+                } else if ($level == 'VIP') {
                     $query->where('member.member_is_vip', 'Y');
-                }else {
+                } else {
                     $query->where('member_role.member_role_id', $level);
                 }
             })->when($isAuth != '', function ($query) use ($isAuth) {
@@ -82,7 +82,7 @@ class MemberService
                 $query->whereBetween('member.member_addtimes', $addtime);
             })
             ->select('member_id', 'member_is_vip', 'member_is_owner', 'member_classify', 'member_status', 'member_mobile', 'member_from', 'member_addtimes', 'member_extend_json',
-                'member_info.member_info_nickname', 'member_info.member_info_headimg','member_info.member_info_referee','member_info.member_info_business','member_info.member_info_service',
+                'member_info.member_info_nickname', 'member_info.member_info_headimg', 'member_info.member_info_referee', 'member_info.member_info_business', 'member_info.member_info_service',
                 'member_role.member_role_id', 'member_role.member_role_name',
                 'member_cert.member_cert_birth', 'member_cert.member_cert_gender', 'member_cert.member_cert_name', 'member_cert.member_cert_nbr', 'member_cert.member_cert_province', 'member_cert.member_cert_addr', 'member_cert.member_cert_face', 'member_cert.member_cert_photo', 'member_cert.member_cert_nation',
 //                'member_account.member_account_surplus'
@@ -95,7 +95,7 @@ class MemberService
             ->toArray();
 
         foreach ($rows as &$row) {
-            $row['coupon_count'] = CouponDetail::where('join_coupon_detail_member_id',$row['member_id'])->count();
+            $row['coupon_count'] = CouponDetail::where('join_coupon_detail_member_id', $row['member_id'])->count();
             $row['member_mobile'] = substr($row['member_mobile'], 0, 3) . '****' . substr($row['member_mobile'], 7);
             $row['info'] = [
                 'member_info_nickname' => !empty($row['member_info_nickname']) ? $row['member_info_nickname'] : substr($row['member_mobile'], -4, 4) . '用户',
@@ -185,11 +185,11 @@ class MemberService
                     }
                     $row['belong']['deptName'] = SysDept::where('dept_id', $extendJson['belong']['premises'])->value('dept_name');
                 }
-                if (isset($extendJson['referee'])){
-                    foreach ($extendJson['referee'] as $key => $referee){
+                if (isset($extendJson['referee'])) {
+                    foreach ($extendJson['referee'] as $key => $referee) {
                         $row['referee'][] = [
-                            'name'=>$referee,
-                            'time'=>$key
+                            'name' => $referee,
+                            'time' => $key
                         ];
                     }
                 }
@@ -240,7 +240,7 @@ class MemberService
                 $addtime[1] = strtotime($addtime[1]);
                 $query->whereBetween('member.member_addtimes', $addtime);
             })->select('member_id', 'member_is_owner', 'member_classify', 'member_status', 'member_mobile', 'member_from', 'member_addtimes', 'member_extend_json',
-                'member_info.member_info_nickname', 'member_info.member_info_headimg','member_info.member_info_referee','member_info.member_info_business','member_info.member_info_service',
+                'member_info.member_info_nickname', 'member_info.member_info_headimg', 'member_info.member_info_referee', 'member_info.member_info_business', 'member_info.member_info_service',
                 'member_role.member_role_id', 'member_role.member_role_name',
                 'member_cert.member_cert_birth', 'member_cert.member_cert_gender', 'member_cert.member_cert_name', 'member_cert.member_cert_nbr', 'member_cert.member_cert_province', 'member_cert.member_cert_addr', 'member_cert.member_cert_face', 'member_cert.member_cert_photo', 'member_cert.member_cert_nation',
 //                'member_account.member_account_surplus'
@@ -344,6 +344,24 @@ class MemberService
             'member_cert_photo' => !empty($member['cert']) && !empty($member['cert']['member_cert_photo']) ? getenv('STORAGE_DOMAIN') . $member['cert']['member_cert_photo'] : '',
             'member_cert_nation' => $member['cert']['member_cert_nation'] ?? '',
         ];
+        if (!empty($member['join_invite_member_id'])){
+            $inviteMember = Member::with([
+                'info'=>function($query){
+                    $query->select('join_info_member_id','member_info_nickname');
+                },
+                'cert'=>function($query){
+                    $query->select('join_cert_member_id','member_cert_name');
+                }
+            ])->where('member_id',$member['join_invite_member_id'])
+                ->first();
+            $inviteMemberName = '';
+            if (!empty($inviteMember->cert) && !empty($inviteMember->cert->member_cert_name)){
+                $inviteMemberName = $inviteMember->cert->member_cert_name;
+            }elseif (!empty($inviteMemberName->info) && !empty($inviteMemberName->info->member_info_nickname)){
+                $inviteMemberName = $inviteMemberName->info->member_info_nickname;
+            }
+            $member['invite_member'] = $inviteMemberName.(!empty($inviteMember->member_invite_code) ? '('.$inviteMember->member_invite_code.')' : '');
+        }
 
         $member['is_auth'] = "未认证";
         if (!empty($member['cert']['member_cert_nbr']) && !empty($member['cert']['member_cert_name'])) {
@@ -367,11 +385,11 @@ class MemberService
                 }
                 $member['belong']['deptName'] = SysDept::where('dept_id', $extendJson['belong']['premises'])->value('dept_name');
             }
-            if (isset($extendJson['referee'])){
-                foreach ($extendJson['referee'] as $key => $referee){
+            if (isset($extendJson['referee'])) {
+                foreach ($extendJson['referee'] as $key => $referee) {
                     $member['referee'][] = [
-                        'name'=>$referee,
-                        'time'=>$key
+                        'name' => $referee,
+                        'time' => $key
                     ];
                 }
             }
@@ -745,7 +763,7 @@ class MemberService
                 }
             }
 
-            if (in_array($point['client_points_category'], ["评价", "消费", "活动", "赠送",'登录活动积分'])) {
+            if (in_array($point['client_points_category'], ["评价", "消费", "活动", "赠送", '登录活动积分'])) {
                 $point['balance_type'] = 'add';
             } else {
                 $point['balance_type'] = 'cut';
@@ -753,7 +771,7 @@ class MemberService
 
             if ($key == 0) {
                 $point['balance'] = number_format($balance, 2, '.', '');
-                if (in_array($point['client_points_category'], ["评价", "消费", "活动", "赠送",'登录活动积分'])) {
+                if (in_array($point['client_points_category'], ["评价", "消费", "活动", "赠送", '登录活动积分'])) {
                     $balance = $balance - $point['client_points_nbr'];
                 } else {
                     $balance = $balance + $point['client_points_nbr'];
@@ -761,7 +779,7 @@ class MemberService
 
                 continue;
             }
-            if (in_array($point['client_points_category'], ["评价", "消费", "活动", "赠送",'登录活动积分'])) {
+            if (in_array($point['client_points_category'], ["评价", "消费", "活动", "赠送", '登录活动积分'])) {
                 $point['balance'] = number_format($balance, 2, '.', '');
                 $balance = $balance - $point['client_points_nbr'];
 //                $point['balance'] = $balance = $nowPoint = number_format($balance - $point['client_points_nbr'], 2, '.', '');
@@ -796,6 +814,7 @@ class MemberService
                 'member_status' => $params['status'] ?? 'PENDING',
                 'member_mobile' => $params['mobile'] ?? '',
                 'member_category' => $params['member_category'] ?? '后台添加',
+                'member_invite_code' => self::generateInviteCode(),
 //                'member_from' => $params['source'],
                 // 'member_extend_json' => json_encode(['come_from' => $params['source']]),
                 'member_addtimes' => time(),
@@ -1154,6 +1173,7 @@ class MemberService
             'member_classify' => 'MEMBER',
             'member_status' => 'ACTIVED',
             'member_mobile' => $params['mobile'],
+            'member_invite_code' => self::generateInviteCode(),
             'member_extend_json' => json_encode(['come_from' => 'SYSTEM']),
             'member_addtimes' => time()
         ];
@@ -1236,4 +1256,21 @@ class MemberService
 
         return self::getMemberName($mobile, $certName, $nickname);
     }
+
+    /**
+     * @Desc 生成推荐码
+     * @Author Gorden
+     * @Date 2024/9/6 9:05
+     *
+     * @return string
+     */
+    public static function generateInviteCode()
+    {
+        $code = random_string(8, 'number');
+        if (Member::where('member_invite_code', $code)->exists()) {
+            return self::generateInviteCode();
+        } else {
+            return $code;
+        }
+    }
 }

+ 13 - 156
app/admin/service/order/AppointmentService.php

@@ -4,6 +4,7 @@ namespace app\admin\service\order;
 
 use app\admin\controller\member\BenefitController;
 use app\admin\controller\member\QuotaController;
+use app\admin\service\member\MemberService;
 use app\model\Appointment;
 use app\model\Goods;
 use app\model\GoodsSku;
@@ -272,87 +273,29 @@ class AppointmentService
         }
     }
 
+    /**
+     * @Desc 添加预约
+     * @Author Gorden
+     * @Date 2024/9/6 9:22
+     *
+     * @param Request $request
+     * @return \support\Response
+     */
     public static function add(Request $request)
     {
         $params = $request->post();
         Db::beginTransaction();
         try {
-            // 先检查选择的时段是否可预约
-            $goods = Goods::where('goods_id', $params['join_appointment_goods_id'])->first();
-            // $appointments = Appointment::where('appointment_datetime', $params['appointment_datetime'])->get()->toArray();
-            // if ($goods->is_support_appointment == 'Y' && !empty($goods->goods_attribute_json)) {
-            //     $extendJson = json_decode($goods->goods_attribute_json, true);
-            //     foreach ($extendJson['times'] as $key => $time) {
-            //         if ($time['duration'] == $params['appointment_times']) {
-            //             if (!empty($appointments)) {
-            //                 foreach ($appointments as $appointment) {
-            //                     $applyJson = json_decode($appointment['appointment_apply_json'], true);
-            //                     $applyJsonTimes = $applyJson['times'] ?? '';
-
-            //                     if ($time['duration'] == $applyJsonTimes) {
-            //                         $extendJson['times'][$key]['person'] -= $applyJson['person'];
-            //                         if ($extendJson['times'][$key]['person'] < $params['person']) {
-            //                             return json_fail('当前时段名额不足,请选择其他时段');
-            //                         }
-            //                     }
-            //                 }
-            //             } else {
-            //                 if ($extendJson['times'][$key]['person'] < $params['person']) {
-            //                     return json_fail('当前时段名额不足,请选择其他时段');
-            //                 }
-            //             }
-            //         }
-            //     }
-            // }
             // 如果没有,新建
             if (empty($params['join_appointment_member_id']) && !empty($params['username']) && !empty($params['mobile'])) {
                 if(Member::where('member_mobile',$params['mobile'])->exists()){
                     Db::rollBack();
                     return json_fail('会员已存在,请勿重复创建');
                 }
-                $memberId = "MR" . str_pad(SysSerial::getSerial(), 16, "0", STR_PAD_LEFT) . random_string(6, 'up');
-                $params['join_appointment_member_id'] = $memberId;
-
-                // 主表
-                $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);
-                // cert
-                // $certData = [
-                //     'join_cert_member_id' => $memberId,
-                //     'member_cert_name' => $params['username']
-                // ];
-                // MemberCert::insert($certData);
-                // info
-                $infoData = [
-                    'join_info_member_id' => $memberId,
-                    'member_info_nickname' => $params['username']
-                ];
-                MemberInfo::insert($infoData);
+                $memberId = 'MR' . date('YmdHis') . random_string(6, 'up');
+                $params['join_appointment_member_id'] = $params['member_id'] = $memberId;
+                // 创建会员
+                MemberService::createMember($params);
             }
             $appointmentId = "AP" . date('YmdHis') . random_string(6, 'up');
             $data = [
@@ -394,92 +337,6 @@ class AppointmentService
             }
 
             Appointment::insert($data);
-
-            // 如果预约已完成,生成订单
-//             if ($params['appointment_status'] == 'DONE') {
-//                 $sku = GoodsSku::find($params['join_appointment_goods_sku_id']);
-//                 $orderId = 'OD' . date('YmdHis') . random_string(6, 'up');
-//                 $groupBy = 'OD' . date('YmdHis') . random_string(6, 'up');
-//                 $order = [
-//                     'order_id' => $orderId,
-//                     'order_groupby' => $groupBy,
-//                     'join_order_member_id' => $params['join_appointment_member_id'],
-//                     'order_name' => "预约-" . $goods->goods_name,
-//                     'order_amount_total' => $sku->goods_sku_sales_price * $params['person'],
-//                     'order_amount_pay' => $sku->goods_sku_sales_price * $params['person'],
-//                     'order_is_complete' => 'N',
-//                     'order_category' => $goods->goods_classify,
-//                     'order_status_system' => 'PAYING',
-//                     'order_status_payment' => 'PENDING',
-//                     'order_status_storage' => 'PENDING',
-//                     'order_platform' => 'SYSTEM',
-//                     'order_addtimes' => time()
-//                 ];
-//                 Order::insert($order);
-//                 // 订单详情
-//                 $sheet = [
-//                     'join_sheet_member_id' => $params['join_appointment_member_id'],
-//                     'join_sheet_order_id' => $orderId,
-//                     'join_sheet_goods_id' => $params['join_appointment_goods_id'],
-//                     'order_sheet_status' => 'PAYING',
-//                     'order_sheet_category' => 'APPOINTMENT',
-//                     'order_sheet_unit' => '套',
-//                     'order_sheet_num' => $params['person'],
-//                     'order_sheet_price' => $sku->goods_sku_sales_price,
-//                     'order_sheet_amount' => $sku->goods_sku_sales_price * $params['person'],
-//                     'order_sheet_pay' => $sku->goods_sku_sales_price * $params['person'],
-//                     'order_sheet_task_status' => 'NONE',
-//                     'order_sheet_addtimes' => time()
-//                 ];
-//                 OrderSheet::insert($sheet);
-//                 // 订单号更新到预约
-//                 Appointment::where('appointment_id', $data['appointment_id'])->update(['join_appointment_order_id' => $orderId]);
-//                 // 支付数据
-//                 $pay = [
-//                     'join_pay_member_id' => $params['join_appointment_member_id'],
-//                     'join_pay_order_id' => $groupBy,
-//                     'pay_amount' => $sheet['order_sheet_pay'],
-//                     'pay_remark' => '预约单',
-//                     'pay_addtimes' => time(),
-//                     'pay_prepayid' => $params['join_appointment_member_id'] . '-' . $params['settlement_mode'],
-//                     'pay_paytimes' => date('Y-m-d H:i:s'),
-//                     'join_pay_object_json' => json_encode(['appointment_id' => $appointmentId]),
-//                     'pay_category' => "APPOINTMENT"
-//                 ];
-//                 // 现金余额结算
-//                 if ($params['settlement_mode'] == 'CASH') {
-//                     $account = MemberAccount::where('join_account_member_id', $params['join_appointment_member_id'])
-//                         ->where('member_account_classify', 'CASH')
-//                         ->where('member_account_status', 'ACTIVED')
-//                         ->first();
-//                     if (!$account) {
-//                         Db::rollBack();
-//                         return json_fail('当前账户不存在或已过期');
-//                     }
-
-//                     if ($account->member_account_surplus < $sheet['order_sheet_pay']) {
-//                         throw new BusinessException("账户余额不足");
-// //                        $pay['pay_status'] = 'PENDING';
-//                     } else {
-//                         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 - $sheet['order_sheet_pay']
-//                         ]);
-//                         $pay['pay_status'] = 'SUCCESS';
-//                         // 更新订单状态
-//                         Order::where('order_id', $orderId)->update(['order_status_system' => 'DONE','order_is_complete'=>'Y', 'order_status_payment' => 'SUCCESS']);
-//                         OrderSheet::where('join_sheet_order_id', $orderId)->update(['order_sheet_status' => 'DONE']);
-//                     }
-//                     PayDetail::insert($pay);
-//                 } elseif ($params['settlement_mode'] == 'QRCODE') {
-//                     $pay['pay_status'] = 'SUCCESS';
-//                     PayDetail::insert($pay);
-//                     // 更新订单状态
-//                     Order::where('order_id', $orderId)->update(['order_status_system' => 'DONE','order_is_complete'=>'Y', 'order_status_payment' => 'SUCCESS']);
-//                     OrderSheet::where('join_sheet_order_id', $orderId)->update(['order_sheet_status' => 'DONE']);
-//                 }
-//             }
-
             Db::commit();
             _syslog("预约","添加预约成功");
             return json_success("添加预约成功");