1005 lines
40 KiB
PHP
1005 lines
40 KiB
PHP
<?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];
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
}
|