leftJoin('members','transactions.member_id','=','members.id') ->select('transactions.*','members.name','members.tel','members.bank_name','members.card_number') ->where('transactions.type',$type) ->where('transactions.is_del',0); if (!empty($searchInfo['info'])){ $list->where('members.name','like','%'.$searchInfo['info'].'%') ->orWhere('members.tel',$searchInfo['info']); } $count=$list->count(); $list =$list ->orderBy('transactions.id','desc') ->limit($pageSize)->skip(($page - 1) * $pageSize)->take($pageSize) ->get(); return \Yz::Return(true,'获取成功',['list'=>$list,'count'=>$count]); } //充值 public function Recharge(Request $request) { $dayCutCheck = \Yz::DayCutCheck(); if(!$dayCutCheck['status']){ return \Yz::echoError1($dayCutCheck['msg']); } $userid = $request->get('userid');//中间件产生的参数 $memberId = request('memberId'); $amount = request('amount'); $Note = request('note'); if (empty($amount)){ return \Yz::echoError1('请输入充值金额'); } if (!is_numeric($amount) || $amount <= 0){ return \Yz::echoError1('充值金额格式错误'); } try { $result = DB::transaction(function () use ($userid, $memberId, $amount, $Note) { $memberInfo=DB::table('members')->where('id',$memberId)->where('is_del',0)->lockForUpdate()->first(); if (empty($memberInfo)){ throw new \Exception('用户不存在'); } if ($memberInfo->status==0){ throw new \Exception('用户已被禁用'); } $amount = (string)$amount; $balance = (string)$memberInfo->balance; $new_balance = bcadd($balance, $amount, 2); //插入流水表 $up_trans= DB::table('transactions')->insert([ 'member_id' => $memberId, 'type' => 1, // 充值 'amount' => $amount, 'balance_after' => $new_balance, 'status' => 3, // 已处理 'note' => $Note, 'source' => 'admin', 'operator_id' => $userid, 'verify_userid' => $userid, 'verify_time' => date('Y-m-d H:i:s'), 'created_at' => date('Y-m-d H:i:s'), ]); // 4. 更新用户余额 $up_member=false; if(!!$up_trans){ $up_member= DB::table('members') ->where('id', $memberId) ->update([ 'balance' => $new_balance, 'updated_at' => date('Y-m-d H:i:s'), ]); } return $up_member; }); if(!!$result){ return \Yz::Return(true,'充值成功'); }else{ return \Yz::echoError1('充值失败'); } }catch (\Exception $e){ return \Yz::echoError1($e->getMessage()); } } // 审核 public function Verify(Request $request) { $dayCutCheck = \Yz::DayCutCheck(); if(!$dayCutCheck['status']){ return \Yz::echoError1($dayCutCheck['msg']); } $userid = $request->get('userid');//中间件产生的参数 $id = request('id'); $TransactionsType = request('TransactionsType'); $DoType = request('DoType'); $Note = request('Note'); if ($DoType === '通过') { $status = 3; } elseif ($DoType === '拒绝') { $status = 2; } else { return \Yz::Return(false, '无效的操作类型'); } try { $result = DB::transaction(function () use ($id, $TransactionsType, $status,$Note,$userid) { // 1. 获取交易记录(加锁) $transaction = DB::table('transactions') ->where('id', $id) ->where('type', $TransactionsType) ->where('is_del', 0) ->lockForUpdate() ->first(); if (empty($transaction)) { throw new \Exception('交易记录不存在'); } if ($transaction->status !== 1) { throw new \Exception('当前状态不可审核'); } // 2. 获取用户信息(加锁) $memberInfo = DB::table('members') ->where('id', $transaction->member_id) ->lockForUpdate() ->first(); if (empty($memberInfo)) { throw new \Exception('用户不存在'); } $yesterday = Carbon::yesterday(); if(!empty($memberInfo->day_cut_at) && $memberInfo->day_cut_at != $yesterday->toDateString()){ throw new \Exception('该用户昨日日切异常,无法审核'); } if(empty($memberInfo->day_cut_at) && $memberInfo->created_at < date('Y-m-d')." 00:00:00"){ throw new \Exception('该用户昨日日切异常,无法审核'); } // 3. 处理审核结果 if ($status === 3) { // 审核通过 $amount = (string)$transaction->amount; $balance = (string)$memberInfo->balance; if (!is_numeric($amount) || !is_numeric($balance)) { throw new \Exception('余额或交易金额格式错误'); } if ($TransactionsType === 3) { // 提现:余额减少 $new_balance = bcsub($balance, $amount, 2); // 可选:检查余额是否足够 if (bccomp($new_balance, '0', 2) < 0) { throw new \Exception('用户余额不足'); } //累积提现金额 $withdraw_amount = (string)$memberInfo->withdraw_amount; $new_withdraw_amount = bcadd($withdraw_amount, $amount, 2); $up_member_date = [ 'withdraw_amount' => $new_withdraw_amount, 'balance' => $new_balance, ]; } else { // 充值/利息:余额增加 $new_balance = bcadd($balance, $amount, 2); $up_member_date = [ 'balance' => $new_balance, ]; } // 更新用户余额 DB::table('members') ->where('id', $transaction->member_id) ->update($up_member_date); $up_transactions_data = [ 'status' => $status, 'verify_time' => now(), 'verify_userid' => $userid, 'balance_after' => $new_balance, 'note' => $Note, ]; } else { // 拒绝:不改余额 $up_transactions_data = [ 'status' => $status, 'verify_time' => now(), 'verify_userid' => $userid, 'note' => $Note, ]; } // 更新交易状态 DB::table('transactions') ->where('id', $id) ->update($up_transactions_data); return true; // 表示成功 }); if($result){ return \Yz::Return(true, '审核成功',['transactions'=>$id]); }else{ return \Yz::Return(false, '审核失败'); } } catch (\Exception $e) { return \Yz::Return(false, $e->getMessage()); } } }