getCustomAmount($uid); // 返回配置数据 return isset($balance['amount']) ? $balance['amount'] : 0; } /** * 获取用户账户余额信息 * 如果没有余额账户,将创建对应的账户 * * @param int $uid 用户ID * * @return array 余额信息 * */ public function getCustomAmount($uid){ // 查询数据 $cash = $this->query()->where([['custom_uid','=',$uid]])->first(['amount','use_amount']); // 如果没有数据,创建账号 $cash = $cash ? $cash->toArray() : $this->createCustomAmount($uid); // 返回查询结果 return $cash; } /** * 创建账号 * * @param int $uid 用户ID * @param array $values 需要修改的数据 * */ public function createCustomAmount($uid){ // 如果没有余额信息的话,需要新增账户,默认数据 $cash = ['amount'=>0,'use_amount'=>0]; // 尝试执行 try { $result = $this->query()->insert(['custom_uid'=>$uid,'insert_time'=>time(),'update_time'=>time()]); // 如果成功 if( $result ) return $cash; } catch (\Throwable $th) { // 如果失败的话,返回默认数据 return $cash; } // 返回用户余额数据,默认都是账户余额为0 return $cash; } /** * 余额交易 * * @param int $uid 用户ID * @param int $amount 金额 * @param int $buyType 交易类型 * @param int $payType 支付方式 * @param string $desc 支付描述 * * * */ public function trade($uid,$transfer_bill_no,$amount,$buyType=1,$payType=1,$desc=''){ // 返回支付ID 0 表示 无需支付 if( !$amount ) return 0; // 查询余额 $balance = $this->getBalanceByUid($uid); // 判断是不是增减 $update = ['amount'=>DB::raw('amount+'.$amount),'update_time'=>time()]; // 如果是扣减(因为扣减是负数,所以需要转成正数处理) if( $amount < 0 ) { // 判断余额 if( $balance < ($amount*-1) ) return ['error'=>'余额不足']; // 结果 $update['use_amount'] = DB::raw('use_amount+'.($amount*-1)); } // 余额记录 $Record = (new Record()); // 记录数据组合 $payData['custom_uid'] = $uid; $payData['transfer_bill_no']= $transfer_bill_no; $payData['prefix'] = 1; $payData['amount'] = $amount; $payData['balance'] = $balance + $amount; $payData['buy_type'] = $buyType; $payData['description'] = $desc ? $desc :((string) $Record->getBuyType($buyType,'name')); $payData['pay_type'] = $payType; $payData['pay_time'] = time(); // 减少用户的余额,增加用户余额支出 $result = $this->query()->where(['custom_uid'=>$uid])->update($update); // 如果支付失败 if( !$result ) return ['error'=>'积分增减失败']; // 写入余额记录 $payId = $Record->add($payData); // 如果失败 if( !$payId ) ['error'=>'积分记录失败']; // 告知成功 return $payId; } }