123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463 |
- <?php
- namespace app\admin\controller;
- use app\common\controller\Backend;
- use app\common\library\Redis;
- use app\main\helper\StringHelper;
- use app\main\service\OrderService;
- use think\Controller;
- use think\Log;
- use think\Request;
- /**
- * 订单结算
- */
- class Vipwithdraw extends Backend
- {
- protected $model = null;
- // protected $searchFields = 'admin.nickname';
- //Multi方法可批量修改的字段
- protected $noNeedRight=['historyexport'];
- public function _initialize()
- {
- parent::_initialize();
- $this->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;
- }
- }
|