model = model('Withdraw')->setConnect(); $this->view->assign("stateList", $this->model->getStateList()); } /** * 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个方法 * 因此在当前控制器中可不用编写增删改查的代码,如果需要自己控制这部分逻辑 * 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改 */ // /* // * 我的结算单 // */ public function index(){ $vipadminIds = model("VipAdminBind") ->where("admin_id_master",$this->auth->id) ->where("flag = 1") ->column("admin_id_slave"); if ($this->request->isAjax()) { //如果发送的来源是Selectpage,则转发到Selectpage if ($this->request->request('pkey_name')) { return $this->selectpage(); } list($where, $sort, $order, $offset, $limit) = $this->buildparams(); $total = model("AdminMoney") ->where("admin_id","in",$vipadminIds) ->where($where) ->order($sort, $order) ->count(); $list = model("AdminMoney") ->alias("a") ->join("admin ad","a.admin_id = ad.id") ->join("admin_config ac","a.admin_id = ac.admin_id","left") ->where("a.admin_id","in",$vipadminIds) ->field("a.*,ac.json,ad.username") ->order($sort, $order) ->limit($offset, $limit) ->select(); foreach ($list as $k=>$v){ $rechargeinfo = []; $rechargeinfo = model('orders_collect')->sumCollect($v['admin_id'],1,3); foreach ($rechargeinfo->toarray() as $rk=>$rv){ $list[$k][$rk] = $rv; } $list[$k]['name'] = $v['json']?json_decode($v['json'])->authorizer_info->nick_name:'-'; $today_collect = model('orders_collect')->sumCollect($v['admin_id'],1,3); $channelTotalSplitMoney = $today_collect['split_money'] ?? 0; $list[$k]['split_money'] = StringHelper::moneyFormat($channelTotalSplitMoney); $list[$k]['no_cash_money'] = StringHelper::moneyFormat(($rechargeinfo['recharge_money_benefit']*100-$v['cash_money']*100-$v['count_cash_money']*100 - $channelTotalSplitMoney*100)/100); $list[$k]['recharge_money_benefit'] = StringHelper::moneyFormat(($rechargeinfo['recharge_money_benefit']*100 - $channelTotalSplitMoney*100)/100); } //按未体现金额排序 $keyarr = array_column($list,"no_cash_money"); array_multisort($keyarr,SORT_DESC,$list); $result = array("total" => $total, "rows" => $list); return json($result); } $fields = "sum(no_cash_money) no_cash_money,sum(cash_money) cash_money,sum(count_money) count_money,sum(benefit_money) benefit_money,sum(count_cash_money) count_cash_money,sum(orders_count) orders_count, sum(split_money) as split_money"; $admin_money = model('admin_money') ->field($fields) ->where('admin_id','in',$vipadminIds) ->find(); $this->assign('admin_money',$admin_money); //渠道充值不含当天 $today_collect = model('orders_collect')->sumCollect($vipadminIds,1,3); $totalSplitMoney = $today_collect['split_money'] ?? 0; $this->assign('split_money',$totalSplitMoney ?: 0); $this->assign('recharge_all',$today_collect['recharge_money']??0); $this->assign('no_cash_money',($today_collect['recharge_money_benefit']??0)-$admin_money['cash_money']-$admin_money['count_cash_money']-$totalSplitMoney); $this->assign('count_money',($today_collect['recharge_money_benefit']??0)-$totalSplitMoney); return $this->view->fetch("mywithdraw"); } /** * VIP名下所有渠道商提现记录 */ public function historyMoney() { $vipadminIds = model("VipAdminBind") ->where("admin_id_master", $this->auth->id) ->where("flag = 1") ->column("admin_id_slave"); if ($this->request->isAjax()) { list($where, $sort, $order, $offset, $limit) = $this->buildparams(); /*$total = $this->model ->where('withdraw.admin_id', 'in', $vipadminIds) ->where($where) ->order($sort, $order) ->count();*/ $total = $this->model ->join('admin_config', 'withdraw.admin_id = admin_config.admin_id', 'left') ->join('admin', 'withdraw.admin_id = admin.id', 'left') ->where('withdraw.admin_id', 'in', $vipadminIds) ->where($where) ->order('withdraw.id desc') ->count(); $list = $this->model ->join('admin_config', 'withdraw.admin_id = admin_config.admin_id', 'left') ->join('admin', 'withdraw.admin_id = admin.id', 'left') ->where('withdraw.admin_id', 'in', $vipadminIds) ->where($where) ->field('withdraw.*') ->field('admin.username,nickname') ->field(['REPLACE (JSON_EXTRACT(JSON_EXTRACT( admin_config.json, "$.authorizer_info"),"$.nick_name"), "\"", "")' => 'service_name']) ->order('withdraw.id desc') ->limit($offset, $limit) ->select(); $result = array("total" => $total, "rows" => $list); return json($result); } return $this->view->fetch(); } public function add($ids = NULL) { $t = time(); $start_time = strtotime(date('Y-m-d 23:30:00')); $end_time = strtotime(date('Y-m-d 01:30:00')); if($t>=$start_time || $t<=$end_time){ $this->error('每天00:00-01:30与23:30-24:00,不支持提现'); } $admin_money = model('AdminMoney')->get($ids); $isIdCard = 0; $today_collect = model('orders_collect')->sumCollect($admin_money['admin_id'],1,3); //不含今日的分账金额 $totalSplitMoney = $today_collect['split_money'] ?? 0; $no_cash_money = floatval(($today_collect['recharge_money_benefit']??0)-$admin_money['cash_money']-$admin_money['count_cash_money']-$totalSplitMoney); $no_cash_money = StringHelper::moneyFormat($no_cash_money); if ($this->request->isPost()) { $timedate = date('Ymd',time()); $withdrawKey = 'WD:'.$admin_money['admin_id'].':'.$timedate; $redis = Redis::instance(); if($redis->exists($withdrawKey)){ $this->error('提现过于频繁,请十分钟以后再试'); } if(empty($this->request->post('idcard_no'))){ $row = $this->request->post('row/a'); if ($row) { $money = $row['money']; $no_cash_money = (string) $no_cash_money; //未提现余额 严格校验 if($no_cash_money != $money){ $this->error('ERROR:提现金额与计算后的提现金额不一致'); } if( $money<10){ $this->error('最低提现金额10元'); } /* if($admin_money['no_cash_money'] < $money){ $this->error('超出最大可提现金额'.$admin_money['no_cash_money']); }*/ $save['etime'] = date('Ymd',strtotime('-1 day')); $stime = model('withdraw')->setConnect()->where('admin_id',$admin_money['admin_id'])->field('etime')->order('id desc')->find(); if(empty($stime['etime'])){ $save['stime'] = null; }else{ $save['stime'] = date('Ymd',strtotime($stime['etime'])+3600*24); } //$this->error($save['stime']); $save['admin_id'] = $admin_money['admin_id']; $save['money'] = $money;//含手续费 $save['state'] = 1; if(model('withdraw')->save($save)){ model('AdminMoney')->where('admin_id',$admin_money['admin_id'])->setInc('cash_money',$money); $redis->setex($withdrawKey,600,'1'); //redis存10分钟,避免重复提现 $this->success(); } $this->error('提交申请失败'); } }else{ //输入身份证号 $idCardNo = trim($this->request->post('idcard_no')); $flag = validateIDCard($idCardNo); if($flag){ model('AdminExtend')->update(['idcard_no'=>$idCardNo],['admin_id'=>$admin_money['admin_id']]); $this->success(); }else{ $this->error('身份证号码不合法'); } } $this->error('错误'); } $this->assign('isIdcard',$isIdCard); $this->assign('group',$this->group); $this->assignconfig('group',$this->group); $this->view->assign('no_cash_money',$no_cash_money?$no_cash_money:0); $this->assignconfig('no_cash_money',$no_cash_money?$no_cash_money:0); return $this->view->fetch(); } /** * 批量更新 */ public function multi($ids = "") { $ids = $ids ? $ids : $this->request->param("ids"); if ($ids) { $idsarr = explode(",", $ids); $list = model("AdminMoney") ->alias("a") ->join("admin ad", "a.admin_id = ad.id") ->join("admin_config ac", "a.admin_id = ac.admin_id", "left") ->where("a.id", "in", $ids) ->field("a.*,ac.json,ad.username") ->select(); $totalmoney = 0; foreach ($list as $k => $v) { $rechargeinfo = []; $rechargeinfo = model('orders_collect')->sumCollect($v['admin_id'], 1, 3); foreach ($rechargeinfo->toarray() as $rk => $rv) { $list[$k][$rk] = $rv; } // $list[$k]['name'] = json_decode($v['json'])->authorizer_info->nick_name; $list[$k]['name'] = $v['json']?json_decode($v['json'])->authorizer_info->nick_name:'-'; $channelTotalSplitMoney = $list[$k]['split_money'] ?? 0; $list[$k]['money'] = ($list[$k]['recharge_money_benefit'] ?? 0) - ($list[$k]['cash_money'] ?? 0) - ($list[$k]['count_cash_money'] ?? 0) - $channelTotalSplitMoney; $list[$k]['money'] = StringHelper::moneyFormat($list[$k]['money']); $totalmoney += $list[$k]['money']; } $this->view->assign("list", $list); $this->view->assign("ids", $ids); $this->view->assign("totalmoney", $totalmoney); if ($this->request->isAjax()) { $t = time(); $start_time = strtotime(date('Y-m-d 23:30:00')); $end_time = strtotime(date('Y-m-d 01:30:00')); if ($t >= $start_time || $t <= $end_time) { $this->error('每天00:00-01:30与23:30-24:00,不支持提现'); }//体现时间 $limitids = [];//频繁提现 $lowids = [];//低于10元 $sucids = [];//验证通过 foreach ($idsarr as $id) {//验证提现 $num = $this->checkwithdraw($id); if ($num == -1) { $limitids[] = $id; } elseif ($num == -2) { $lowids[] = $id; } elseif ($num) { $sucids[] = $id; } } $redis = Redis::instance(); $timedate = date('Ymd', time()); $idxList = []; foreach ($list as $item) { $idxList[$item->id] = $item; } if (empty($limitids) && empty($lowids) && $sucids && count($sucids) == count($idsarr)) {//验证通过,提现 foreach ($idsarr as $id) { $admin_money = model('AdminMoney')->get($id); $today_collect = model('orders_collect')->sumCollect($admin_money['admin_id'], 1, 3); $channelTotalSplitMoney = $today_collect['split_money'] ?? 0; $money = ($today_collect['recharge_money_benefit'] ?? 0) - $admin_money['cash_money'] - $admin_money['count_cash_money'] - $channelTotalSplitMoney; $money = StringHelper::moneyFormat($money); $save = [ 'admin_id' => $admin_money['admin_id'], 'money' => $money, 'state' => 1, 'etime' => date('Ymd', strtotime('-1 day')), 'createtime' => time(), 'updatetime' => time(), ]; $stime = model('withdraw')->setConnect()->where('admin_id', $admin_money['admin_id'])->field('etime')->order('id desc')->find(); if (empty($stime['etime'])) { $save['stime'] = null; } else { $save['stime'] = date('Ymd', strtotime($stime['etime']) + 3600 * 24); } $result = model('withdraw')->insert($save); unset($save); if ($result) { model('AdminMoney')->where('admin_id', $admin_money['admin_id'])->setInc('cash_money', $money); $withdrawKey = 'WD:' . $admin_money['admin_id'] . ':' . $timedate; $redis->setex($withdrawKey, 600, '1'); //redis存10分钟,避免重复提现 } else { $faluireids[] = $id; } } if (empty($faluireids)) { $this->success(); } else { $faluireidInfos = []; foreach ($faluireids as $faluireid) { $faluireidInfos[$faluireid] = $idxList[$faluireid]; } // $res = ['code' => -1, 'data' => ['faluireids' => $faluireids]]; $res = ['code' => -1, 'data' => $faluireidInfos]; } } else {//有验证未通过 $limitInfos = []; $lowInfos = []; foreach ($limitids as $limitid) { $limitInfos[] = $idxList[$limitid]; } foreach ($lowids as $lowid) { $lowInfos[] = $idxList[$lowid]; } $res = ['code' => -1, 'data' => ['limitinfos' => $limitInfos, 'lowids' => $lowInfos]]; } return json($res); } return $this->view->fetch(); } else { $this->error(__('Parameter %s can not be empty', 'ids')); } } public function checkwithdraw($id){ if(!$id){ return false; } $admin_money = model('AdminMoney')->get($id); $today_collect = model('orders_collect')->sumCollect($admin_money['admin_id'],1,3); $channelTotalSplitMoney = $today_collect['split_money'] ?? 0; $money = ($today_collect['recharge_money_benefit']??0)-$admin_money['cash_money']-$admin_money['count_cash_money'] - $channelTotalSplitMoney; $money = StringHelper::moneyFormat($money); $timedate = date('Ymd',time()); $withdrawKey = 'WD:'.$admin_money['admin_id'].':'.$timedate; $redis = Redis::instance(); if($redis->exists($withdrawKey)){ return -1; } if( $money<10){ return -2; } return 1; } /** * 提现记录导出 */ public function historyExport() { $vipadminIds = model("VipAdminBind") ->where("admin_id_master", $this->auth->id) ->where("flag = 1") ->column("admin_id_slave"); list($where, $sort, $order, $offset, $limit) = $this->buildparams(); $total = $this->model ->join('admin_config', 'withdraw.admin_id = admin_config.admin_id', 'left') ->join('admin', 'withdraw.admin_id = admin.id', 'left') ->where('withdraw.admin_id', 'in', $vipadminIds) ->where($where) ->order('withdraw.id desc') ->count(); $list = $this->model ->join('admin_config', 'withdraw.admin_id = admin_config.admin_id', 'left') ->join('admin', 'withdraw.admin_id = admin.id', 'left') ->where('withdraw.admin_id', 'in', $vipadminIds) ->where($where) ->field('withdraw.*') ->field('admin.username,nickname') ->field(['REPLACE (JSON_EXTRACT(JSON_EXTRACT( admin_config.json, "$.authorizer_info"),"$.nick_name"), "\"", "")' => 'service_name']) ->order('withdraw.id desc') ->limit($offset, $limit) ->select(); $title=array('公众号名称','用户名称','昵称','提现时间','划账日期','提现金额','状态'); $this->export($title,$list); } private function export($title,$list) { ini_set('memory_limit', '512M'); //内存限制 $content = ''; $content .= implode($title,','); $content .= PHP_EOL; foreach($list as $k =>$v){ $content .= $v['service_name'].','.$v['username'].','.$v['nickname'].','.date('Y-m-d H:i:s',$v['createtime']).','.$v['finishtime_text'].','.$v['money'].','.$v['state_text'].PHP_EOL; } mb_convert_variables('GBK', 'UTF-8', $content); $fileName = "提现记录导出-".date('YmdHis', time()).".csv"; header('Expires: 0'); header('Content-Encoding: utf-8'); header("Content-type:text/csv; charset=utf-8"); Header("Accept-Length: " . strlen($content)); header("Content-Disposition:attachment;filename=" . $fileName); header('Cache-Control:must-revalidate,post-check=0,pre-check=0'); header('Pragma:public'); echo $content;exit; } }