Files
mier-php/application/admin/model/Capital.php

1005 lines
40 KiB
PHP
Raw Normal View History

2025-08-11 10:22:05 +08:00
<?php
namespace app\admin\model;
use think\Db;
use think\Model;
use app\common\pay\YunPay;
class Capital extends Model
{
//用户资金日志
public function user_money_log($uid, $nick_name, $change_type, $money_type, $change_value, $from_id, $from_uid, $order, $sort, $page = 1, $limit = 20)
{
$map = [];
if (!empty($uid)) {
$map[] = ['a.uid', '=', $uid];
}
if (!empty($nick_name)) {
$map[] = ['b.nick_name', 'like', '%' . $nick_name . '%'];
}
if (!empty($change_type)) {
$map[] = ['a.change_type', '=', $change_type];
}
if (!empty($money_type)) {
$map[] = ['a.money_type', '=', $money_type];
}
if (!empty($change_value)) {
$map[] = ['a.change_value', '=', $change_value];
}
if (!empty($from_id)) {
$map[] = ['a.from_id', '=', $change_value];
}
if (!empty($from_uid)) {
$map[] = ['a.from_uid', '=', $from_uid];
}
$change_type = model('UserMoneyLog')->ChangeTypeLable();
$money_type = model('UserMoneyLog')->MoneyTypeLable();
$list = db::name('user_money_log')->alias('a')->join('yy_user b', 'a.uid = b.uid')->field('a.*,b.nick_name')->where($map)->order($order, $sort)->page($page, $limit)->select();
foreach ($list as $k => $v) {
$list[$k]['user_nick_name'] = $v['uid'] . '-' . $v['nick_name'];
$list[$k]['change_type'] = $change_type[$v['change_type']];
$list[$k]['money_type'] = $money_type[$v['money_type']];
}
$data = [];
$data['count'] = db::name('user_money_log')->alias('a')->join('yy_user b', 'a.uid = b.uid')->where($map)->count();
$data['list'] = $list;
$totalRowData = db::name('user_money_log')->alias('a')->join('yy_user b', 'a.uid = b.uid')->field('count(a.log_id) as count,SUM(a.change_value) as change_value')->where($map)->find();
unset($totalRowData['count']);
//dump($totalRowData);
$data['totalRow'] = $totalRowData;
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
}
//用户充值订单
public function user_recharge($rid, $order_sn, $uid, $nick_name, $money, $pay_type, $pay_status, $start, $end, $order, $sort, $page = 1, $limit = 20)
{
$map = [];
if (!empty($rid)) {
$map[] = ['a.rid', '=', $rid];
}
if (!empty($order_sn)) {
$map[] = ['a.order_sn', 'like', '%' . $order_sn . '%'];
}
if (!empty($nick_name)) {
$map[] = ['b.nick_name', 'like', '%' . $nick_name . '%'];
}
if (!empty($uid)) {
$map[] = ['a.uid', '=', $uid];
}
if (!empty($money)) {
$map[] = ['a.money', '=', $money];
}
if (!empty($pay_type)) {
$map[] = ['a.pay_type', '=', $pay_type];
}
if (!empty($pay_status)) {
$map[] = ['a.pay_status', '=', $pay_status];
}
if (!empty($start)) {
$map[] = ['a.add_time', '>=', strtotime($start)];
}
if (!empty($end)) {
$map[] = ['a.add_time', '<=', strtotime($end)];
}
$list = db::name('user_recharge')->alias('a')->join('yy_user b', 'a.uid = b.uid')->field('a.*,b.nick_name')->where($map)->order($order, $sort)->page($page, $limit)->select();
foreach ($list as $k => $v) {
$list[$k]['user_nick_name'] = $v['uid'] . '-' . $v['nick_name'];
}
$data = [];
$data['count'] = db::name('user_recharge')->alias('a')->join('yy_user b', 'a.uid = b.uid')->where($map)->count();
$data['list'] = $list;
$data = [];
$data['list'] = $list;
$totalRowData = db::name('user_recharge')->alias('a')->join('yy_user b', 'a.uid = b.uid')->field('count(a.rid) as count,SUM(a.money) as money,SUM(a.integral) as integral')->where($map)->find();
$data['count'] = $totalRowData['count'];
unset($totalRowData['count']);
//dump($totalRowData);
$data['totalRow'] = $totalRowData;
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
}
//用户提现订单
public function user_withdrawal($wid, $order_sn, $uid, $nick_name, $money, $alipay_name, $status, $alipay_account, $order, $sort, $page = 1, $limit = 20,$withdrawal_type=0,$bank_card_number="",$type,$deal_type)
{
$map = [];
if (!empty($wid)) {
$map[] = ['a.wid', '=', $wid];
}
if (!empty($order_sn)) {
$map[] = ['a.order_sn', 'like', '%' . $order_sn . '%'];
}
if (!empty($nick_name)) {
$map[] = ['b.nick_name', 'like', '%' . $nick_name . '%'];
}
if (!empty($uid)) {
$map[] = ['a.uid', '=', $uid];
}
if (!empty($status)) {
$map[] = ['a.status', '=', $status];
}
if (!empty($money)) {
$map[] = ['a.money', '=', $money];
}
if (!empty($real_name)) {
$map[] = ['a.real_name', '=', $alipay_name];
}
if (!empty($alipay_account)) {
$map[] = ['a.alipay_account', '=', $alipay_account];
}
if(!empty($withdrawal_type)){
$map[] = ['a.withd_type', '=', $withdrawal_type];
}
if(!empty($bank_card_number)){
$map[] = ['a.bank_card_number', '=', $bank_card_number];
}
if(!empty($type)){
$map[] = ['a.type', '=', $type];
}
if(!empty($deal_type)){
$map[] = ['a.deal_type', '=', $deal_type];
}
$list = db::name('user_withdrawal')->alias('a')->join('yy_user b', 'a.uid = b.uid')->field('a.*,b.nick_name')->where($map)->order($order, $sort)->page($page, $limit)->select();
foreach ($list as $k => $v) {
$list[$k]['user_nick_name'] = $v['uid'] . '-' . $v['nick_name'];
}
$data = [];
$data['list'] = $list;
$totalRowData = db::name('user_withdrawal')->alias('a')->join('yy_user b', 'a.uid = b.uid')->field('count(a.wid) as count,SUM(a.money) as money,SUM(a.general_money) as general_money')->where($map)->find();
$data['count'] = $totalRowData['count'];
unset($totalRowData['count']);
//dump($totalRowData);
$data['totalRow'] = $totalRowData;
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
}
//获取提现申请详情
public function user_withdrawal_info($wid)
{
if (empty($wid)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$user_withdrawal = db::name('user_withdrawal')->where(['wid' => $wid])->find();
return ['code' => 200, 'msg' => '获取成功', 'data' => $user_withdrawal];
}
//修改提现申请
public function user_withdrawal_edit($wid, $status, $remarke, $deal_type)
{
if (empty($wid)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$info = db::name('user_withdrawal')->where(['wid' => $wid])->find();
if (empty($info)) {
return ['code' => 201, 'msg' => '信息不存在', 'data' => null];
}
if ($info['status'] != 1) {
return ['code' => 201, 'msg' => '该提现已处理', 'data' => null];
}
// if($info['withd_type'] != 1){
// return ['code' => 201, 'msg' => '非支付宝提现!', 'data' => null];
// }
//后台处理方式 1线下 2云账户
if(!in_array($deal_type,[1,2])){
return ['code' => 201, 'msg' => '处理方式非法!', 'data' => null];
}
if($deal_type == 2){
//查询该用户云账户提现金额
$had_money = db::name('user_withdrawal')->where(['uid'=>$info['uid'],'deal_type'=>2,'status'=>6])->where('pay_time','month')->sum('general_money');
$max_month_money = 98000;
if(($had_money+$info['general_money']) >= 98000){
return ['code' => 200, 'msg' => '单人单月云账户提现金额最大为98000元!', 'data' => null];
}
}
Db::startTrans();
try {
$arr = [];
$arr['status'] = $status;
$arr['remarke'] = $remarke;
$arr['deal_time'] = time();
$arr['update_time'] = time();
$arr['deal_type'] = $deal_type;
$reslut = db::name('user_withdrawal')->where(['wid' => $wid])->update($arr);
if (!$reslut) {
Db::rollback();
return ['code' => 201, 'msg' => "处理失败", 'data' => null];
}
if ($status == 3) {
//提现驳回
$reslut=model('api/UserMessage')->send_message($info['uid'], 1, 0,'提现审核', '您的提现申请已被驳回,原因如下:' . $remarke);
if ($reslut['code']!=200) {
Db::rollback();
return ['code' => 201, 'msg' => "处理失败", 'data' => null];
}
$reslut=model('admin/User')->change_user_money_by_uid($info['uid'], $info['money'], 1, 15, "余额提现驳回:" . $info['order_sn'], $info['uid'], $info['wid']);
if ($reslut['code']!=200) {
Db::rollback();
return ['code' => 201, 'msg' => "处理失败", 'data' => null];
}
}
// 提交事务
Db::commit();
return ['code' => 200, 'msg' => '处理成功', 'data' => null];
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
return ['code' => 201, 'msg' => '处理失败', 'data' => null];
}
}
//银行卡提现
public function user_withdrawal_edit_bank($wid, $status, $remarke,$withd_type,$transfer_type){
return ['code' => 201, 'msg' => '接口维护中!', 'data' => null];
//确认手续费资金
// $carry_money = model('api/HuiFu')->commission();
// if($carry_money['code'] != 200){
// return ['code' => 201, 'msg' => '账户异常!', 'data' => null];
// }
// if($carry_money['data']['status'] != 'succeeded'){
// return ['code' => 201, 'msg' => '账户异常!', 'data' => null];
// }
// $sxf_money = $carry_money['data']['acct_balance'];
// if($sxf_money < 300){
// return ['code' => 201, 'msg' => '汇付手续费余额不足300元!', 'data' => null];
// }
//模拟支付---确认金额是否正常
if($withd_type != 2){
return ['code' => 201, 'msg' => '该提现不是银行卡提现!', 'data' => null];
}
if (empty($wid)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$info = db::name('user_withdrawal')->where(['wid' => $wid])->find();
if (empty($info)) {
return ['code' => 201, 'msg' => '信息不存在', 'data' => null];
}
if ($info['status'] != 1) {
return ['code' => 201, 'msg' => '该提现已处理', 'data' => null];
}
if(!in_array($transfer_type,[1,2])){
return ['code' => 201, 'msg' => '提现方式有误!', 'data' => null];
}
//检查账户是否正常 1提现已通过 2线上银行卡付款 3提现人是 withd_type银行卡提现
if(($status==2) && ($transfer_type==2) && ($info['withd_type']==2) && ($withd_type==2)){
$order_sn = "HF_TEST" . date('YmdHis') . mt_rand(10000, 99999);
$amount = "10.00";
$uid = 217072;
$result = model('api/AdaPay')->create_order($order_sn, $amount, $uid);
if($result['code'] != 200){
return ['code' => 201, 'msg' => '汇付支付账户异常!', 'data' => null];
}
$pay_result = $result['result'];
if(empty($pay_result['status']) || $pay_result['status'] != 'succeeded'){
return ['code' => 201, 'msg' => '汇付支付账户异常!', 'data' => null];
}
}
Db::startTrans();
try {
$arr = [];
$arr['status'] = $status;
$arr['remarke'] = $remarke;
$arr['deal_time'] = time();
$arr['update_time'] = time();
$arr['transfer_type'] = $transfer_type;
$reslut = db::name('user_withdrawal')->where(['wid' => $wid])->update($arr);
if (!$reslut) {
Db::rollback();
return ['code' => 201, 'msg' => "处理失败", 'data' => null];
}
if ($status == 3) {
//提现驳回
$reslut=model('api/UserMessage')->send_message($info['uid'], 1, 0,'提现审核', '您的提现申请已被驳回,原因如下:' . $remarke);
if ($reslut['code']!=200) {
Db::rollback();
return ['code' => 201, 'msg' => "处理失败", 'data' => null];
}
$reslut=model('admin/User')->change_user_money_by_uid($info['uid'], $info['money'], 1, 15, "余额提现驳回:" . $info['order_sn'], $info['uid'], $info['wid']);
if ($reslut['code']!=200) {
Db::rollback();
return ['code' => 201, 'msg' => "处理失败", 'data' => null];
}
}
//提现人信息
$user_withdrawal_info = db::name('user')->where(['uid' => $info['uid']])->find();
//提现已通过 检查是否绑定银行卡
if($status==2){
//线上银行卡付款
if($transfer_type==2){
//未绑定银行卡
if($user_withdrawal_info['is_bind_bank_card']==2){
Db::rollback();
return ['code' => 201, 'msg' => "该用户未绑定银行卡!", 'data' => null];
}
//检测绑定人银行卡在汇 付是否绑定
$reslut = model('api/HuiFu')->check_member_card($info['uid']);
if($reslut['code'] != 200){
return ['code' => 201, 'msg' =>$reslut['msg'] , 'data' => null];
}
}
}
//1提现已通过 2线上银行卡付款 3提现人是 withd_type银行卡提现
if(($status==2) && ($transfer_type==2) && ($info['withd_type']==2) && ($withd_type==2)){
//该用户已经创建身份认证 并且已经绑定银行卡
if(($user_withdrawal_info['is_bank_member_create']==2) || ($user_withdrawal_info['is_bank_member_create'] == 2)){
Db::rollback();
return ['code' => 201, 'msg' => "该用户不支持银行卡提现!", 'data' => null];
}
//进行分账处理
$data = $this->fenzhang_del($wid, $info['uid']);
if($data['code'] == 200){
Db::commit();
}else{
Db::rollback();
}
return $data;
}
// 提交事务
Db::commit();
return ['code' => 200, 'msg' => '处理成功', 'data' => null];
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
return ['code' => 201, 'msg' => '处理失败', 'data' => null];
}
}
/**
* 通过银行卡提现
* @param $wid
* @param $status
* @param $remarke
*/
public function fenzhang_del($wid,$uid){
if (empty($wid)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$user_withdrawal = db::name('user_withdrawal')->where(['wid' => $wid])->find();
//提现对象不存在
if (empty($user_withdrawal)){
return false;
}
$carry_money1 = Db::name('user_recharge') //可供提现金额
->where(['pay_status'=>2,'is_carray_finish'=>2]) //提现未结束
->whereNotNull('payment_id')
->where('payment_id','<>','')
->sum('carry_money');
$carry_money = model('api/HuiFu')->commission_gd();
if($carry_money['code'] != 200){
return ['code' => 201, 'msg' => '账户异常!', 'data' => null];
}
if($carry_money['data']['status'] != 'succeeded'){
return ['code' => 201, 'msg' => '账户异常!', 'data' => null];
}
$carry_money = $carry_money['data']['acct_balance'];
//获取可提现最小余额
if($carry_money1 < $carry_money){
$carry_money = $carry_money1;
}
if($carry_money < $user_withdrawal['general_money']){
return ['code' => 201, 'msg' => "410账户余额不足【请充值!】", 'data' => null];
}
//当前未处理的资金
$shou_xu_fei = 3000;
$freeze_carry_money = Db::name('bank_withd_money_log')
->where('is_del','=',2)
// ->where('platform','=',2)
->sum('money');
$ke_tixian_carray_money = $carry_money - $freeze_carry_money - $shou_xu_fei;
$general_money = $user_withdrawal['general_money']; //提现金额
if($general_money > $ke_tixian_carray_money){
return ['code' => 201, 'msg' => '额度不足,请等待上一笔提现完成!', 'data' => null];
}
Db::name('bank_withd_money_log')->insert(['wid'=>$wid,'money'=>$general_money,'is_del'=>2,'add_time'=>time(),'update_time'=>time()]);
// //可供提现额度
$redis = connectionRedis();
$redis->rPush('admin_tixain_ss1',$general_money.'-'.$uid.'-'.$wid);
// //分账数据处理
// $result = $this->tixian_logic($general_money,$uid,$wid);
return ['code' => 200, 'msg' => '操作成功!', 'data' => null];
}
/**
* 修正
*/
public function tian_logic_queue(){
// set_time_limit(0);
// ini_set ('memory_limit', '128M');
$redis = connectionRedis();
$data = $redis->lPop('admin_tixain_ss1');
if (!empty($data)) {
$data = explode('-', $data);
if (count($data) == 3) {
$general_money = $data[0];
$uid = (int)$data[1];
$wid = (int)$data[2];
//进行资金提现
$reslut = $this->tixian_logic($general_money, $uid, $wid);
}
}
}
/**
* 提现逻辑
* @param $general_money
* @param $uid
* @throws \think\Exception
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
* @throws \think\exception\PDOException
*/
public function tixian_logic($general_money,$uid,$wid){
// Db::startTrans();
$had_fenzhang_money = 0;
$exec = true;
for ($n=1;$n>=0;$n++){
$getDelCharge = Db::name('user_recharge') //可供提现金额
->where(['pay_status'=>2,'is_carray_finish'=>2]) //提现未结束 已支付
->where('carry_money','>',0)
->whereNotNull('payment_id')
->where('payment_id','<>','') //有支付对象id
->field('rid,carry_money,payment_id') //提现
->order(['rid'=>'asc'])
// ->page($n,10)
->page($n,10)
->select();
//查询不出来数据 跳出循环
if(empty($getDelCharge)){
//跳出循环
break;
}
foreach($getDelCharge as $v){
//计算剩余分账
$residue_fenzhang = $general_money-$had_fenzhang_money;
if($residue_fenzhang <= 0){
$exec = false;
break;
}
//剩余分账大于等于可分账金额
if($residue_fenzhang > $v['carry_money']){
//该笔账单进行一次性分账【执行三方分账】
$fenzhang_money = $v['carry_money'];
// $data = $this->fenzhang_queren($fenzhang_money,$v['payment_id'],$uid);
$data = model('api/HuiFu')->confirm_divide_accounts($v['payment_id'],$uid,$fenzhang_money);
if($data['code'] ==200){
////分账成功 ------分账成功一次性分账结束
$had_fenzhang_money += $v['carry_money'];
Db::name('user_recharge') //可供提现金额
->where(['rid'=>$v['rid']]) //提现未结束 已支付
->update(['is_carray_finish'=>1,'carry_money'=>0]);
// Log::write(['fenzhang_money'=>$fenzhang_money,'had_fenzhang_money'=>$had_fenzhang_money,'msg'=>'1'],'hui_carry_money_log');
Db::name('bank_withd_money_detail_log')
->insert([
'wid'=>$wid,
'carry_recharge_id'=>$v['rid'],
'fen_money'=>$fenzhang_money,
'add_time'=>time(),
'update_time'=>time(),
]);
}else{
//分账失败---进行标记
// Db::name('user_recharge') //可供提现金额
// ->where(['rid'=>$v['rid']]) //提现未结束 已支付
// ->update(['is_carray_finish'=>1,'carry_money'=>0]);
//记录分账失败原因
$reason = [
'recharge_id'=>$v['rid'],
'payment_id'=>$v['payment_id'],
'fenzhang_money'=>$fenzhang_money,
'reason'=>var_export($data, true),
'add_time'=>time(),
'update_time'=>time(),
];
Db::name('fenzhang_error_log')
->insert($reason);
// Log::write(['data'=>$data],'hui_carry_money_log');
}
}else{
//剩余分账小于可分账金额
if($residue_fenzhang <= $v['carry_money']){
//进行一次性分账 执行三方分账
$fenzhang_money = $residue_fenzhang;
// $data = $this->fenzhang_queren($fenzhang_money,$v['payment_id'],$uid);
$data = model('api/HuiFu')->confirm_divide_accounts($v['payment_id'],$uid,$fenzhang_money);
$carry_money = ($v['carry_money']-$residue_fenzhang);
if($carry_money>0){
$is_carray_finish = 2;
}else{
$is_carray_finish = 1;
}
//分账结束 跳出循环
if($data['code'] ==200){
$had_fenzhang_money += $fenzhang_money;
Db::name('user_recharge') //可供提现金额
->where(['rid'=>$v['rid']]) //提现未结束 已支付
->update(['is_carray_finish'=>$is_carray_finish,'carry_money'=>$carry_money]);
Db::name('bank_withd_money_detail_log')
->insert([
'wid'=>$wid,
'carry_recharge_id'=>$v['rid'],
'fen_money'=>$fenzhang_money,
'add_time'=>time(),
'update_time'=>time(),
// 'platform'=>2
]);
// Log::write(['fenzhang_money'=>$fenzhang_money,'had_fenzhang_money'=>$had_fenzhang_money,'msg'=>'2'],'hui_carry_money_log');
$exec = false;
break;
}else{
$reason = [
'recharge_id'=>$v['rid'],
'payment_id'=>$v['payment_id'],
'fenzhang_money'=>$fenzhang_money,
'reason'=>var_export($data, true),
'add_time'=>time(),
'update_time'=>time(),
// 'platform'=>2
];
Db::name('fenzhang_error_log')
->insert($reason);
// Log::write($data,'hui_carry_money_log');
}
}
}
}
//分账结束标识
if(!$exec){
break;
}
}
//本次提现进行解冻
Db::name('bank_withd_money_log')->where(['wid'=>$wid])->update(['is_del'=>1,'had_fenzhang_money'=>$had_fenzhang_money,'update_time'=>time()]);
Db::name('user_withdrawal')->where(['wid' => $wid])->update(['had_fenzhang_money'=>$had_fenzhang_money]);
// Db::commit();
return true;
}
/**
* 金额分账
* @param $fenzhang_money
* @param $payment_id
* @param int $memberId
* @return array
*/
// public function fenzhang_queren($fenzhang_money,$payment_id,$memberId=0){
// $paymentConfirm = new CreateConfirm();
// $fenzhang_money = del_coin_num($fenzhang_money,2);
// $result = $paymentConfirm->payment_confirm($fenzhang_money,$payment_id,$memberId);
// return $result;
// }
//获取兑换记录 列表
public function user_exchange($eid, $uid, $nick_name, $money, $integral, $order, $sort, $page = 1, $limit = 20)
{
$map = [];
if (!empty($eid)) {
$map[] = ['a.eid', '=', $eid];
}
if (!empty($uid)) {
$map[] = ['a.uid', '=', $uid];
}
if (!empty($nick_name)) {
$map[] = ['b.nick_name', 'like', '%' . $nick_name . '%'];
}
if (!empty($money)) {
$map[] = ['a.money', '=', $money];
}
if (!empty($integral)) {
$map[] = ['a.integral', '=', $integral];
}
$list = db::name('user_exchange')->alias('a')->join('yy_user b', 'a.uid = b.uid')->field('a.*,b.nick_name')->where($map)->order($order, $sort)->page($page, $limit)->select();
foreach ($list as $k => $v) {
$list[$k]['user_nick_name'] = $v['uid'] . '-' . $v['nick_name'];
}
$data = [];
$data['count'] = db::name('user_exchange')->alias('a')->join('yy_user b', 'a.uid = b.uid')->where($map)->count();
$data['list'] = $list;
$totalRowData = db::name('user_exchange')->alias('a')->join('yy_user b', 'a.uid = b.uid')->field('count(a.eid) as count,SUM(a.money) as money,SUM(a.integral) as integral')->where($map)->find();
unset($totalRowData['count']);
//dump($totalRowData);
$data['totalRow'] = $totalRowData;
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
}
//获取用户赠送礼物记录 列表
public function user_send_gift($uid, $room_id, $room_uid, $receive_uid, $gid, $gift_name, $gift_from_type, $is_tester, $start, $end, $order, $sort, $page = 1, $limit = 20)
{
$map = [];
if (!empty($uid)) {
$map[] = ['a.uid', '=', $uid];
}
if (!empty($room_id)) {
$map[] = ['a.id', '=', $room_id];
}
if (!empty($room_uid)) {
$map[] = ['a.room_uid', '=', $room_uid];
}
if (!empty($receive_uid)) {
$map[] = ['a.receive_uid', '=', $receive_uid];
}
if (!empty($gid)) {
$map[] = ['a.gid', '=', $gid];
}
if (!empty($gift_name)) {
$map[] = ['b.gift_name', 'like', '%' . $gift_name . '%'];
}
if (!empty($gift_from_type)) {
$map[] = ['a.gift_from_type', '=', $gift_from_type];
}
if (!empty($is_tester)) {
$map[] = ['a.is_tester', '=', $is_tester];
}
if (!empty($start)) {
$map[] = ['a.add_time', '>=', strtotime($start)];
}
if (!empty($end)) {
$map[] = ['a.add_time', '<=', strtotime($end)];
}
if (empty($order)) {
$order = 'a.sid';
}
if (empty($sort)) {
$sort = 'desc';
}
$list = db::name('user_send_gift')
->alias('a')->join('yy_user b', 'a.uid = b.uid')
->alias('a')->join('yy_room c', 'a.rid = c.rid')
->field('a.*,b.nick_name,c.room_name')->where($map)->order($order, $sort)->page($page, $limit)->select();
foreach ($list as $k => $v) {
$list[$k]['user_nick_name'] = $v['uid'] . '-' . $v['nick_name'];
}
$data = [];
$data['list'] = $list;
$totalRowData = db::name('user_send_gift')->alias('a')->join('yy_user b', 'a.uid = b.uid')->field('count(a.sid) as count,SUM(a.gift_num) as gift_num,SUM(a.gift_total_price) as gift_total_price,SUM(a.platform_profit) as platform_profit,SUM(a.receiver_profit) as receiver_profit,SUM(a.room_owner_profit) as room_owner_profit')->where($map)->find();
$data['count'] = $totalRowData['count'];
unset($totalRowData['count']);
//dump($totalRowData);
$data['totalRow'] = $totalRowData;
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
}
//获取房间流水 列表
public function room_money_log($rid, $room_number, $room_name, $time1, $time2, $order, $sort, $page = 1, $limit = 20)
{
$map = [];
if (!empty($rid)) {
$map[] = ['a.rid', '=', $rid];
}
if (!empty($room_number)) {
$map[] = ['c.room_number', 'like', '%' . $room_number . '%'];
}
if (!empty($room_name)) {
$map[] = ['c.room_name', 'like', '%' . $room_name . '%'];
}
if (!empty($time1)) {
$time1 = strtotime($time1);
$map[] = ['a.add_time', '>=', $time1];
}
if (!empty($time2)) {
$time2 = strtotime($time2);
$map[] = ['a.add_time', '<=', $time2];
}
$list = db::name('user_send_gift')
->alias('a')->join('yy_user b', 'a.uid = b.uid')
->join('yy_room c', 'a.rid = c.rid')
->field('a.*,b.nick_name,c.room_name,c.room_number')->where($map)->order($order, $sort)->page($page, $limit)->select();
foreach ($list as $k => $v) {
$list[$k]['user_nick_name'] = $v['uid'] . '-' . $v['nick_name'];
}
$data = [];
$data['list'] = $list;
$totalRowData = db::name('user_send_gift')->alias('a')->join('yy_user b', 'a.uid = b.uid')->join('yy_room c', 'a.rid = c.rid')->field('count(a.sid) as count,SUM(a.gift_num) as gift_num,SUM(a.gift_total_price) as gift_total_price,SUM(a.platform_profit) as platform_profit,SUM(a.receiver_profit) as receiver_profit,SUM(a.room_owner_profit) as room_owner_profit')->where($map)->find();
$data['count'] = $totalRowData['count'];
unset($totalRowData['count']);
//dump($totalRowData);
$data['totalRow'] = $totalRowData;
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
}
//获取房间流水 列表
public function room_account_log($rid, $room_number, $room_name, $time1, $time2, $order, $sort, $cate_id = 0, $page = 1, $limit = 20)
{
$map = [];
if (!empty($rid)) {
$map[] = ['a.rid', '=', $rid];
}
if (!empty($room_number)) {
$map[] = ['c.room_number', 'like', '%' . $room_number . '%'];
}
if (!empty($room_name)) {
$map[] = ['c.room_name', 'like', '%' . $room_name . '%'];
}
if (!empty($time1)) {
$time1 = strtotime($time1);
$map[] = ['a.add_time', '>=', $time1];
}
if (!empty($time2)) {
$time2 = strtotime($time2);
$map[] = ['a.add_time', '<=', $time2];
}
if (!empty($cate_id)) {
$map[] = ['c.cate_id', '=', $cate_id];
}
$list = db::name('user_send_gift')
->alias('a')
->join('yy_room c', 'a.rid = c.rid')
->join('yy_room_category d', 'c.cate_id = d.cate_id')
->field('a.rid,c.room_name,c.room_number,c.cate_id,d.category_name,SUM(a.gift_total_price) as gift_total_price')->where($map)
->group('a.rid')
->order($order, $sort)->page($page, $limit)->select();
$data = [];
$data['list'] = $list;
$total = db::name('user_send_gift')->alias('a')->join('yy_room c', 'a.rid = c.rid')
->where($map)->group('a.rid')->count();
$data['count'] = $total;
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
}
//财务统计
public function financial_statistics($uid, $start, $end){
$map = [];
$where = [];
if(!empty($uid)){
$map[] = ['uid', '=', $uid];
$where[] = ['a.uid', '=', $uid];
}
if (!empty($start)) {
$map[] = ['add_time', '>=', strtotime($start)];
$where[] = ['a.add_time', '>=', strtotime($start)];
}
if (!empty($end)) {
$map[] = ['add_time', '<=', strtotime($end)];
$where[] = ['a.add_time', '<=', strtotime($end)];
}
$list = [];
//系统充值(金币)
$admin_integral = db::name('user_money_log')->where($map)->where('change_type', 1)->where('money_type', 2)->sum('change_value');
$list[0]['title'] = '系统充值(金币)';
$list[0]['number'] = $admin_integral;
//系统充值(钻石)
$admin_money = db::name('user_money_log')->where($map)->where('change_type', 1)->where('money_type', 1)->sum('change_value');
$list[1]['title'] = '系统充值(钻石)';
$list[1]['number'] = $admin_money;
//支付宝、微信充值(钻石)
$user_pay_money = db::name('user_money_log')->where($map)->where('change_type', 9)->where('money_type', 2)->sum('change_value');
$list[2]['title'] = '三方支付充值(金币)';
$list[2]['number'] = $user_pay_money;
//提现
$user_withdrawal = db::name('user_withdrawal')->where($map)->where('status', 2)->sum('money');
$list[3]['title'] = '提现';
$list[3]['number'] = $user_withdrawal;
//流水分成(礼物)
$user_gift_deduct = db::name('user_money_log')->where($map)->where('change_type', 6)->where('money_type', 1)->sum('change_value');
$list[4]['title'] = '流水分成(收礼物)';
$list[4]['number'] = $user_gift_deduct.' 钻石';
//流水分成(厅主)
$owner_gift_deduct = db::name('user_money_log')->where($map)->where('change_type', 7)->where('money_type', 1)->sum('change_value');
$list[5]['title'] = '流水分成(厅主)';
$list[5]['number'] = $owner_gift_deduct.' 钻石';
//钻石
$money = db::name('user_money_log')->where($map)->where('money_type', 1)->sum('change_value');
$list[6]['title'] = '钻石';
$list[6]['number'] = $money;
//金币
$integral = db::name('user_money_log')->where($map)->where('money_type', 2)->sum('change_value');
$list[7]['title'] = '金币';
$list[7]['number'] = $integral;
//背包礼物
$where[] = ['a.num', '>', 0];
$where[] = ['a.is_tester', '=', 1];
$user_pack_gift = db::name('user_gift_pack')->alias('a')->join('yy_gift b', 'a.gid = b.gid')->field('SUM(a.num * b.gift_price) as total_pack_gift_price')->where($where)->find();
$list[8]['title'] = '背包礼物';
if(empty($user_pack_gift['total_pack_gift_price'])){
$user_pack_gift['total_pack_gift_price'] = 0;
}
$list[8]['number'] = $user_pack_gift['total_pack_gift_price'].' 金币';
$data = [];
$data['list'] = $list;
$data['count'] = 9;
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
}
public function submit_yun($wid, $password)
{
if(md5(trim($password)) != secondary_password()) {
return ['code' => 201, 'msg' => '密码错误', 'data' => null];
}
if (empty($wid)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$info = db::name('user_withdrawal')->where(['wid' => $wid])->find();
if (empty($info)) {
return ['code' => 201, 'msg' => '信息不存在', 'data' => null];
}
if($info['new_type'] != 2){
return ['code' => 201, 'msg' => '该订单不支持云账户提现!', 'data' => null];
}
if($info['deal_type'] != 2){
return ['code' => 201, 'msg' => '订单标记方式非云账户!', 'data' => null];
}
if ($info['status'] != 2) {
return ['code' => 201, 'msg' => '尚未提现成功!', 'data' => null];
}
//查询该用户云账户提现金额
$had_money = db::name('user_withdrawal')->where(['uid'=>$info['uid'],'deal_type'=>2,'status'=>6])->where('pay_time','month')->sum('general_money');
$max_month_money = 98000;
if(($had_money+$info['general_money']) >= 98000){
return ['code' => 200, 'msg' => '单人单月云账户提现金额最大为98000元!', 'data' => null];
}
// 时间 小于 2023-09-23 16:43:38 不能进行提现
// if($info['add_time'] < 1695458618){
// return ['code' => 201, 'msg' => '该时间段不支持云账户提现!', 'data' => null];
// }
$uid = $info['uid'];
$user_info = Db::name('user')->where('uid', $uid)->find();
if (!$user_info) return ['code' => 201, 'msg' => '用户信息不存在', 'data' => null];
$phone = $user_info['user_name'];
$real_name = $user_info['real_name'];
$id_card = $user_info['card_id'];
$order_id = $info['order_sn'];
$order_amount = $info['general_money'];
if ($info['type'] == 2) {
$card_no = $user_info['bank_card_number'];
if (empty($real_name) || empty($id_card) || empty($card_no)) {
return ['code' => 201, 'msg' => '请先绑定银行卡或实名认证', 'data' => null];
}
$yun_pay = new YunPay($order_id, $real_name, $id_card, $card_no, $order_amount, $phone);
$result = $yun_pay->bank();
} elseif ($info['type'] == 1) {
$card_no = $user_info['alipay_account'];
if (empty($real_name) || empty($id_card) || empty($card_no)) {
return ['code' => 201, 'msg' => '请先绑定支付宝或实名认证', 'data' => null];
}
$yun_pay = new YunPay($order_id, $real_name, $id_card, $card_no, $order_amount, $phone);
$result = $yun_pay->alipay();
}
if ($result['code'] != 200) {
return $result;
}
$result = db::name('user_withdrawal')->where(['wid' => $wid, 'status' => 2])->update(['status' => 4, 'update_time' => time(), 'submit_yun_time' => time()]);
if($result) {
return ['code' => 200, 'msg' => '提交成功', 'data' => null];
}
return ['code' => 201, 'msg' => '提交失败', 'data' => null];
}
}