From 903e98e3cf5302a689755588c85c32546461f269 Mon Sep 17 00:00:00 2001 From: chenzhi Date: Fri, 13 Aug 2021 16:56:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=89=93=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controller/WxPaymentController.class.php | 240 ++++++ Application/Payment/View/Public/base.html | 11 + Application/Payment/View/WxPayment/add.html | 316 +++++++ .../Payment/View/WxPayment/customerLists.html | 268 ++++++ Application/Payment/View/WxPayment/lists.html | 788 ++++++++++++++++++ Public/Admin/excel/customer.xlsx | Bin 0 -> 37160 bytes 6 files changed, 1623 insertions(+) create mode 100644 Application/Payment/Controller/WxPaymentController.class.php create mode 100644 Application/Payment/View/WxPayment/add.html create mode 100644 Application/Payment/View/WxPayment/customerLists.html create mode 100644 Application/Payment/View/WxPayment/lists.html create mode 100644 Public/Admin/excel/customer.xlsx diff --git a/Application/Payment/Controller/WxPaymentController.class.php b/Application/Payment/Controller/WxPaymentController.class.php new file mode 100644 index 000000000..8b081683d --- /dev/null +++ b/Application/Payment/Controller/WxPaymentController.class.php @@ -0,0 +1,240 @@ + + */ +class WxPaymentController extends BaseController +{ + public $PayStatus=[ + "-2"=>"信息配置不全", + "-1"=>"打款失败", + "0"=>"未打款", + "1"=>"打款成功" + ]; + public $CompanyType = [ + "1"=>"下游公司", + "2"=>"下游个人", + "3"=>"上游CP" + ]; + public $ALIRSP=[ + "out_biz_no"=>"商户订单号", + "order_id"=>"支付订单号", + "pay_fund_order_id"=>"资金流水号", + "status"=>"转账状态", + "trans_date"=>"订单支付时间", + "msg"=>"支付信息", + "sub_msg"=>"失败描述", + "sub_code"=>"失败码", + "remark"=>"打款备注", + "code"=>"打款状态码" + ]; + public function _initialize() + { + $this->admininfo = session('payment_user');; + // $this->DBModel = M("CompanyStatementPool","tab_"); + parent::_initialize(); + } + public function customerLists() + { + $params = I('get.'); + $page = $params['p'] ? intval($params['p']) : 1; + $row = $params['row'] ? intval($params['row']) : 10; + $where = []; + if(isset($_REQUEST['nickname'])){ + $where['nickname'] = ["LIKE","%{$_REQUEST['nickname']}%"]; + } + $data = M('mini_program_user', 'tab_') + ->field("wx_json",true) + ->where($where) + ->page($page,$row) + ->select(); + foreach ($data as $key => $value) { + $data[$key]['create_time'] = date('Y-m-d H:i:s',$value['create_time']); + } + $count = M('mini_program_user', 'tab_')->where($where)->count(); + $page = set_pagination_all($count['count'], $row); + if ($page) { + $this->assign('_page', $page); + } + $this->assign('data', $data); + $this->display(); + } + + public function customerExport() + { + $where["_string"]="1=1"; + if($_REQUEST['ids']){ + $where = [ + "id"=>["in",$_REQUEST['ids']] + ]; + } + + $data = M('mini_program_user', 'tab_') + ->field("wx_json",true) + ->where($where) + ->select(); + + header("Content-type: text/html; charset=utf-8"); + error_reporting(E_ALL); + ini_set('display_errors', TRUE); + ini_set('display_startup_errors', TRUE); + + define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '
'); + + Vendor("PHPExcel.PHPExcel"); + $objPHPExcel = new \PHPExcel(); + $objReader = \PHPExcel_IOFactory::createReader('Excel2007'); + $objPHPExcel = $objReader->load("Public/Admin/excel/customer.xlsx"); + $line = 2; + //设置模板文件 + foreach ($data as $key => $value) { + $objPHPExcel->getActiveSheet()->setCellValue('A'.$line, $line-1)->setCellValue('B'.$line, $value['openid']); + $line++; + } + + $fileName = "微信打款模板"; + ob_end_clean();//清除缓冲区,避免乱码 + header('pragma:public'); + header('Content-type:application/vnd.ms-excel;charset=utf-8;name="' . $fileName .'".xlsx'); + header("Content-Disposition:attachment;filename={$fileName}.xlsx");//attachment新窗口打印inline本窗口打印 + $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); + $objWriter->save('php://output'); + exit; + } + + public function lists() + { + $params = I('get.'); + $page = $params['p'] ? intval($params['p']) : 1; + $row = $params['row'] ? intval($params['row']) : 10; + + $map=[ + "_string"=>"1=1", + ]; + + if (isset($_REQUEST['pay_time_start']) && isset($_REQUEST['pay_time_end'])) { + $map['pay_time'] = ['between', [strtotime($_REQUEST['pay_time_start']), strtotime($_REQUEST['pay_time_end']) + 86399]]; + } elseif (isset($_REQUEST['pay_time_start'])) { + $map['pay_time'] = ['EGT', strtotime($_REQUEST['pay_time_start'])]; + } elseif (isset($_REQUEST['pay_time_end'])) { + $map['pay_time'] = ['ELT', strtotime($_REQUEST['pay_time_end']) + 86399]; + } + + if(isset($_REQUEST['realname'])){ + $map['realname'] = ['LIKE',"%".$_REQUEST['realname']."%"]; + } + if(isset($_REQUEST['pay_status'])){ + $map['pay_status'] = $_REQUEST['pay_status']; + } + if(isset($_REQUEST['batch_num'])){ + $map['batch_num'] = ["LIKE","%{$_REQUEST['batch_num']}%"]; + } + + + if (isset($_REQUEST['export']) && $_REQUEST['export']==1) { + $data = M("excel_statement_info","tab_") + ->alias('i') + ->field("i.*") + ->where($map) + ->order("FIELD(pay_status,0,-1,1)") + ->select(); + $ids = array_column($data, 'id'); + $ids = implode(',', $ids); + $this->viewPool($ids); + return ; + } + $CompanyInfo = M("excel_statement_info","tab_") + ->alias('i') + ->field("i.*") + ->where($map) + ->page($page,$row) + ->order("FIELD(pay_status,0,-1,1)") + ->select(); + foreach($CompanyInfo as $k=>&$v){ + $v['can_pay'] = 1; + if($v['pay_status'] == 1){ $v['can_pay'] = 0; } + if($v['statement_money'] < 0.1){ $v['can_pay'] = 0; } + + $v['company_type'] = $this->CompanyType[$v['company_type']]; + $v["pay_status_str"] = $this->PayStatus[$v['pay_status']]; + $v['create_time'] = date('Y-m-d H:i:s',$v['create_time']); + // $v['statement_begin_time'] = date('Y-m-d',$v['statement_begin_time']); + // $v['statement_end_time'] = date('Y-m-d',$v['statement_end_time']); + if(empty($v['pay_time'])){ + $v['pay_time'] = "--"; + }else{ + $v['pay_time'] = date('Y-m-d H:i:s',$v['pay_time']); + } + + if($v['verify_status'] == 0){ + $v['verify'] = "--"; + }else { + $member = M("payment_member") + ->field("name") + ->where(['id'=>$v['verify_member_id']]) + ->find(); + $v['verify'] = (($v['verify_status'] == 1)?'审核通过':'审核拒绝')."({$member['name']})
".date('Y-m-d H:i:s', $v['verify_time']);; + } + + // $v["valid"] = "{$v['statement_begin_time']} ~ {$v['statement_end_time']}"; + } + + //统计待打款金额 + $field = "IFNULL(SUM(CASE WHEN pay_status = 1 THEN statement_money ELSE 0 END),0) as success_money, + IFNULL(SUM(CASE WHEN pay_status = 0 THEN statement_money ELSE 0 END),0) as statement_money, + IFNULL(SUM(CASE WHEN pay_status = -1 THEN statement_money ELSE 0 END),0) as error_money"; + $money = M("excel_statement_info","tab_")->alias('i')->field( $field)->where($map)->find(); + + $count = M("excel_statement_info","tab_")->alias('i')->field("count(id) count")->where($map)->find(); + $page = set_pagination_all($count['count'], $row); + if ($page) { + $this->assign('_page', $page); + } + // echo($page);die(); + $this->meta_title = '线下打款'; + $this->assign("data",$CompanyInfo); + $this->assign("money",$money); + $this->assign("CompanyType", $this->CompanyType); + $this->assign("PayStatus", $this->PayStatus); + + + $this->display(); + } + + public function add() + { + $batch = date('Ymd').date('His').sp_random_num(3); + $this->assign("batch",$batch); + $this->meta_title = 'EXCEL导入'; + $this->display(); + } + + public function loopAdd() + { + $p = $_REQUEST; + $batch = $p['batch']; + $checkarr = $p['checkarr']; + //循环获取添加 + if(count($checkarr) < 1){ + $this->ajaxReturn(["status"=>1,"msg"=>"ok"]); + } + $wxPayment = M('wx_payment',"tab_"); + foreach ($checkarr as $k => &$v) { + if(!isset($v['realname']) || !isset($v['openid']) || !isset($v['statement_money']) || $v['realname'] == '' || $v['openid'] == '' || $v['statement_money'] <= 0){ + $wxPayment->where("batch_num = '{$v['batch_num']}'")->delete(); + $this->ajaxReturn(["status"=>0,"msg"=>"真实姓名,openid,打款金额均不允许为空"]); + } + $v['batch_num'] = $batch; + $res = $wxPayment->add($v); + if($res === false){ + $wxPayment->where("batch_num = '{$v['batch_num']}'")->delete(); + $this->ajaxReturn(["status"=>0,"msg"=>"添加失败"]); + } + } + $this->ajaxReturn(["status"=>1,"msg"=>"ok"]); + } + + + +} diff --git a/Application/Payment/View/Public/base.html b/Application/Payment/View/Public/base.html index e6fd26592..f44ac7e86 100644 --- a/Application/Payment/View/Public/base.html +++ b/Application/Payment/View/Public/base.html @@ -223,6 +223,17 @@ $(function(){ 线下付款 + +

微信打款

+ + diff --git a/Application/Payment/View/WxPayment/add.html b/Application/Payment/View/WxPayment/add.html new file mode 100644 index 000000000..b51f88bdd --- /dev/null +++ b/Application/Payment/View/WxPayment/add.html @@ -0,0 +1,316 @@ + + + + + + if(C('COLOR_STYLE')=='blue_color') echo ' + '; + + + + + + + + +
+ +
+ +
+ + + + + + + + + + + + +
本次批次号: +
+
+ +
*文件上传: +
+ +
+ 暂只支持.xls .xlsx 格式文件 +
+
+
+ + + 返回 + +
+
+ + +
+
+
+ 文件格式参考:请严格按此格式,文件的第一行必须是字段名,且字段名不允许修改 +
+ + + + + + + + + + + + + + + + + + +
序号openid真实姓名打款金额
1oGkwL49glkGPgU3h0iEBQVIrY036张小花56.26
+
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/Application/Payment/View/WxPayment/customerLists.html b/Application/Payment/View/WxPayment/customerLists.html new file mode 100644 index 000000000..ade254b1e --- /dev/null +++ b/Application/Payment/View/WxPayment/customerLists.html @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +
+ 搜索 +
+ +
+
+ + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
昵称openid头像添加时间
aOh! 暂时还没有内容!
{$data.nickname}{$data.openid}{$data.create_time}
+
+ +
+
+ {$_page|default=''} +
+
+ + + + if(C('COLOR_STYLE')=='blue_color') echo ' + + '; + + + + + + + + + + diff --git a/Application/Payment/View/WxPayment/lists.html b/Application/Payment/View/WxPayment/lists.html new file mode 100644 index 000000000..740ff5e17 --- /dev/null +++ b/Application/Payment/View/WxPayment/lists.html @@ -0,0 +1,788 @@ + + + + + + + + + + + + + + + + + +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +  -  +
+ + +
+
+ +
+ 搜索 +
+ +
+
+ + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
真实姓名openid结算金额批次号打款状态创建时间支付时间操作
aOh! 暂时还没有内容!
{$data.realname}{$data.openid}{$data.statement_money}{$data.batch_num}{$data.pay_status_str}{$data.pay_status_str}{$data.create_time}{$data.pay_time} + 查看 + 导出 + + 打款详情 + +
合计 + 待打款金额: {$money.statement_money}    打款成功金额: {$money.success_money}    打款失败金额: {$money.error_money} +
+
+ +
+
+ {$_page|default=''} +
+ + +
+ + + + if(C('COLOR_STYLE')=='blue_color') echo ' + + '; + + + + + + + + + + diff --git a/Public/Admin/excel/customer.xlsx b/Public/Admin/excel/customer.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..767e2b3c10bd081803e86822c5a96868d01b002e GIT binary patch literal 37160 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 literal 0 HcmV?d00001