From 394a3e4bb59c7431be915ea50155aa47d55e4d71 Mon Sep 17 00:00:00 2001 From: liuweiwen <“529520975@qq.com> Date: Thu, 9 Jan 2020 18:43:06 +0800 Subject: [PATCH] =?UTF-8?q?cp/=E5=B7=A5=E4=BC=9A=E5=AF=B9=E8=B4=A6?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Application/Admin/Common/extend.php | 191 +++++++-- Application/Admin/Common/function.php | 76 +++- .../Admin/Controller/AjaxController.class.php | 3 + .../Controller/PartnerController.class.php | 25 +- .../Controller/PromoteController.class.php | 26 +- .../Controller/PublicController.class.php | 136 +++++- .../Controller/VerifyBillController.class.php | 106 +++++ .../Admin/Model/PromoteModel.class.php | 1 + Application/Admin/View/Partner/add.html | 4 +- Application/Admin/View/Partner/edit.html | 4 +- Application/Admin/View/Promote/add.html | 58 +-- Application/Admin/View/Promote/edit.html | 14 +- Application/Admin/View/Promote/lists.html | 2 + Application/Admin/View/Public/cp_base.html | 387 ++++++++++++++++++ Application/Admin/View/Public/cp_login.html | 206 ++++++++++ Application/Admin/View/Public/login.html | 3 +- Application/Admin/View/Tool/company_info.html | 4 +- .../Admin/View/VerifyBill/company_show.html | 226 ++++++++++ Application/Admin/View/VerifyBill/index.html | 358 ++++++++++++++++ .../Admin/View/VerifyBill/partner_show.html | 256 ++++++++++++ Data/update.sql | 4 + Public/Admin/excel/down_stream.xls | Bin 0 -> 34816 bytes Public/Admin/excel/up_stream.xls | Bin 0 -> 22528 bytes ThinkPHP/Common/functions.php | 5 + 24 files changed, 1995 insertions(+), 100 deletions(-) create mode 100644 Application/Admin/Controller/VerifyBillController.class.php create mode 100644 Application/Admin/View/Public/cp_base.html create mode 100644 Application/Admin/View/Public/cp_login.html create mode 100644 Application/Admin/View/VerifyBill/company_show.html create mode 100644 Application/Admin/View/VerifyBill/index.html create mode 100644 Application/Admin/View/VerifyBill/partner_show.html create mode 100644 Public/Admin/excel/down_stream.xls create mode 100644 Public/Admin/excel/up_stream.xls diff --git a/Application/Admin/Common/extend.php b/Application/Admin/Common/extend.php index e2eb146d7..2bbf3f672 100644 --- a/Application/Admin/Common/extend.php +++ b/Application/Admin/Common/extend.php @@ -1828,69 +1828,170 @@ function getCompanyList() { } -function excelUpStreamTemplate() { - header("Content-type: text/html; charset=gb2312"); - error_reporting(E_ALL); - ini_set('display_errors', TRUE); - ini_set('display_startup_errors', TRUE); - - define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '
'); +//上游cp对账单导出 +function excelUpStreamTemplate($data, $all_sum_money, $all_pay_amount, $big_all_sum_money) { + header("Content-type: text/html; charset=gb2312"); + error_reporting(E_ALL); + ini_set('display_errors', TRUE); + ini_set('display_startup_errors', TRUE); + + define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '
'); + + date_default_timezone_set('Europe/London'); + Vendor("PHPExcel.PHPExcel"); + $objReader = \PHPExcel_IOFactory::createReader('Excel5'); + + //设置模板文件 + $objPHPExcel = $objReader->load("Public/Admin/excel/up_stream.xls"); + + + //增加甲方信息 + $objPHPExcel->getActiveSheet()->setCellValue('D2', $data['first_party_info']['partner']); + $objPHPExcel->getActiveSheet()->setCellValue('D3', $data['first_party_info']['link_man']); + $objPHPExcel->getActiveSheet()->setCellValue('D4', $data['first_party_info']['link_phone']); + $objPHPExcel->getActiveSheet()->setCellValue('D5', $data['first_party_info']['address']); + $objPHPExcel->getActiveSheet()->setCellValue('D6', $data['first_party_info']['company_tax_no']); + + //增加乙方信息 + $objPHPExcel->getActiveSheet()->setCellValue('J2', $data['second_party_info']['partner']); + $objPHPExcel->getActiveSheet()->setCellValue('J3', $data['second_party_info']['link_man']); + $objPHPExcel->getActiveSheet()->setCellValue('J4', $data['second_party_info']['link_phone']); + $objPHPExcel->getActiveSheet()->setCellValue('J5', $data['second_party_info']['address']); + $objPHPExcel->getActiveSheet()->setCellValue('J6', $data['second_party_info']['company_tax_no']); + + $objPHPExcel->getActiveSheet()->setCellValue('D7', $data['receive_company']['partner']); //增加支付给对应公司 + $line = 10; + //增加结算记录 + foreach ($data['statement_info'] as $key => $value) { + $objPHPExcel->getActiveSheet()->insertNewRowBefore($line,1)->mergeCells("J$line:K$line"); + $objPHPExcel->getActiveSheet()->setCellValue('C'.$line, $value['statement_begin_time'] . '-' . $value['statement_end_time']); + if ($value['statement_type'] == 1) { + $product_name = $value['type_name']; + $objPHPExcel->getActiveSheet()->setCellValue('F'.$line , '-'); + $objPHPExcel->getActiveSheet()->setCellValue('G'.$line, '-'); + $objPHPExcel->getActiveSheet()->setCellValue('H'.$line, '-'); + $objPHPExcel->getActiveSheet()->setCellValue('I'.$line, '-'); + } else { + $product_name = $value['game_name']; + $objPHPExcel->getActiveSheet()->setCellValue('F'.$line , $value['first_ratio'] . '%'); + $objPHPExcel->getActiveSheet()->setCellValue('G'.$line, $value['second_ratio'] . '%'); + $objPHPExcel->getActiveSheet()->setCellValue('H'.$line, $value['promote_ratio'] . '%'); + $objPHPExcel->getActiveSheet()->setCellValue('I'.$line, $value['fax_ratio']. '%'); + } + $objPHPExcel->getActiveSheet()->setCellValue('D'.$line, $product_name); + $objPHPExcel->getActiveSheet()->setCellValue('E'.$line, $value['pay_amount']); - date_default_timezone_set('Europe/London'); - Vendor("PHPExcel.PHPExcel"); - $objPHPExcel = new \PHPExcel(); - $objReader = \PHPExcel_IOFactory::createReader('Excel5'); + $objPHPExcel->getActiveSheet()->setCellValue('J'.$line, $value['sum_money']); + $line++; + } - //设置模板文件 - $objPHPExcel = $objReader->load("Runtime/upstream.xls"); + //合计 + $objPHPExcel->getActiveSheet()->setCellValue("E" . ($line), $all_sum_money); + $objPHPExcel->getActiveSheet()->setCellValue("J" . ($line), $all_pay_amount); + $objPHPExcel->getActiveSheet()->setCellValue("J" . ($line+1), $big_all_sum_money); //本月分成总金额(人民币大写) - $objPHPExcel->getActiveSheet()->setCellValue('D2', 'chengzhi'); + //收款方 + $objPHPExcel->getActiveSheet()->setCellValue("D" . ($line+2), $data['receive_company']['partner']); + $objPHPExcel->getActiveSheet()->setCellValue("D" . ($line+3), $data['receive_company']['bank_account']); + $objPHPExcel->getActiveSheet()->setCellValue("D" . ($line+4), $data['receive_company']['opening_bank']); - $objPHPExcel->getActiveSheet()->insertNewRowBefore(10,1)->mergeCells('J10:K10')->insertNewRowBefore(10,1)->mergeCells('J10:K10'); + //付款方 + $objPHPExcel->getActiveSheet()->setCellValue("J" . ($line+2), $data['pay_company']['partner']); + $objPHPExcel->getActiveSheet()->setCellValue("J" . ($line+3), $data['pay_company']['bank_account']); + $objPHPExcel->getActiveSheet()->setCellValue("J" . ($line+4), $data['pay_company']['opening_bank']); + ob_end_clean();//清除缓冲区,避免乱码 + header('pragma:public'); + header('Content-type:application/vnd.ms-excel;charset=utf-8;name="上游结算单.xls"'); + header("Content-Disposition:attachment;filename=上游结算单.xls");//attachment新窗口打印inline本窗口打印 + $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); + $objWriter->save('php://output'); + exit; - ob_end_clean();//清除缓冲区,避免乱码 - header('pragma:public'); - header('Content-type:application/vnd.ms-excel;charset=utf-8;name="15415.xls"'); - header("Content-Disposition:attachment;filename=15415.xls");//attachment新窗口打印inline本窗口打印 - $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); - $objWriter->save('php://output'); - exit; +} - } +//下游工会对账单导出 +function excelDownStreamTemplate($data, $all_sum_money, $all_pay_amount, $big_all_sum_money) { -function excelDownStreamTemplate() { - header("Content-type: text/html; charset=gb2312"); - error_reporting(E_ALL); - ini_set('display_errors', TRUE); - ini_set('display_startup_errors', TRUE); + 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 : '
'); + define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '
'); - date_default_timezone_set('Europe/London'); - Vendor("PHPExcel.PHPExcel"); - $objPHPExcel = new \PHPExcel(); - $objReader = \PHPExcel_IOFactory::createReader('Excel5'); + date_default_timezone_set('Europe/London'); + Vendor("PHPExcel.PHPExcel"); + $objPHPExcel = new \PHPExcel(); + $objReader = \PHPExcel_IOFactory::createReader('Excel5'); - //设置模板文件 - $objPHPExcel = $objReader->load("upstream.xls"); + //设置模板文件 + $objPHPExcel = $objReader->load("Public/Admin/excel/down_stream.xls"); + $statement_begin_time = set_show_time($data['statement_begin_time']);//对账开始时间 + $statement_end_time = set_show_time($data['statement_end_time']);//对账截止时间 + $objPHPExcel->getActiveSheet()->setCellValue('A1', "《 {$data['company_name']} 》结算单 + ({$statement_begin_time}-{$statement_end_time}"); - $objPHPExcel->getActiveSheet()->setCellValue('D2', 'chengzhi'); + if ($data['second_party_info']['settlement_type'] == '补点订单') { + $objPHPExcel->getActiveSheet()->setCellValue('D2' , '补点比例'); + } - $objPHPExcel->getActiveSheet()->insertNewRowBefore(10,1); + $line = 3; + foreach ($data['statement_info'] as $key => $value) { + $objPHPExcel->getActiveSheet()->insertNewRowBefore($line,1); + $objPHPExcel->getActiveSheet()->removeConditionalStyles(); - ob_end_clean();//清除缓冲区,避免乱码 - header('pragma:public'); - header('Content-type:application/vnd.ms-excel;charset=utf-8;name="15415.xls"'); - header("Content-Disposition:attachment;filename=15415.xls");//attachment新窗口打印inline本窗口打印 - $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); - $objWriter->save('php://output'); - exit; + $objPHPExcel->getActiveSheet()->setCellValue('A'.$line, $value['statement_begin_time'] . '-' . $value['statement_end_time']); + if ($value['statement_type'] == 1) { + $product_name = $value['type_name']; + $objPHPExcel->getActiveSheet()->setCellValue('D'.$line, '-'); + $objPHPExcel->getActiveSheet()->setCellValue('E'.$line, '-'); + } else { + $product_name = $value['game_name']; + $objPHPExcel->getActiveSheet()->setCellValue('D'.$line, $value['second_ratio'] . '%'); + $objPHPExcel->getActiveSheet()->setCellValue('E'.$line, $value['fax_ratio'] . '%'); + } + $objPHPExcel->getActiveSheet()->setCellValue('B'.$line, $product_name); + $objPHPExcel->getActiveSheet()->setCellValue('C'.$line, $value['pay_amount']); + $objPHPExcel->getActiveSheet()->setCellValue('F'.$line, $value['sum_money']); + $line++; + } + + $objPHPExcel->getActiveSheet()->setCellValue('C'.($line), $all_sum_money);//合计-平台总额 + $objPHPExcel->getActiveSheet()->setCellValue('F'.($line), $all_pay_amount);//合计-结算金额 + + + $objPHPExcel->getActiveSheet()->setCellValue('B'.($line+1), $big_all_sum_money);//大写支付结算金额 + //甲方信息 + $objPHPExcel->getActiveSheet()->setCellValue('B'.($line+3), $data['first_party_info']['jfCompany']);//甲方 + $objPHPExcel->getActiveSheet()->setCellValue('B'.($line+4), $data['first_party_info']['jfPerson']);//联系人 + $objPHPExcel->getActiveSheet()->setCellValue('B'.($line+5), $data['first_party_info']['jfTel']);//联系电话 + $objPHPExcel->getActiveSheet()->setCellValue('B'.($line+6), $data['second_party_info']['invoice_item']);//开票项目 + $objPHPExcel->getActiveSheet()->setCellValue('B'.($line+7), $data['second_party_info']['invoice_type']);//发票类型 + + //乙方信息 + $objPHPExcel->getActiveSheet()->setCellValue('E'.($line+3), $data['second_party_info']['partner']);//乙方 + $objPHPExcel->getActiveSheet()->setCellValue('E'.($line+4), $data['second_party_info']['link_man']);//联系人 + $objPHPExcel->getActiveSheet()->setCellValue('E'.($line+5), $data['second_party_info']['link_phone']);//联系电话 + $objPHPExcel->getActiveSheet()->setCellValue('E'.($line+6), $data['second_party_info']['address']);//邮寄地址 +// $objPHPExcel->getActiveSheet()->setCellValue('E'.($line+8), $value['pay_amount']);//请汇入此账号 + $objPHPExcel->getActiveSheet()->setCellValue('E'.($line+8), $data['second_party_info']['bank_account_name']);//户名 + $objPHPExcel->getActiveSheet()->setCellValue('E'.($line+9), $data['second_party_info']['bank_account']);//银行账号 + $objPHPExcel->getActiveSheet()->setCellValue('E'.($line+10), $data['second_party_info']['opening_bank']);//开户行 + + $filename = '下游结算单'; + ob_end_clean();//清除缓冲区,避免乱码 + header('pragma:public'); + header('Content-type:application/vnd.ms-excel;charset=utf-8;name="15415.xls"'); + header("Content-Disposition:attachment;filename=$filename.xls");//attachment新窗口打印inline本窗口打印 + $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); + $objWriter->save('php://output'); + exit; - } +} function getWithdrawNumber() { diff --git a/Application/Admin/Common/function.php b/Application/Admin/Common/function.php index 3664cde6a..d34964caf 100644 --- a/Application/Admin/Common/function.php +++ b/Application/Admin/Common/function.php @@ -775,4 +775,78 @@ function camelize($str, $separator = '_', $littleHump = false) function unCamelize($str, $separator = '_') { return strtolower(preg_replace('/([a-z])([A-Z])/', "$1" . $separator . "$2", $str)); -} \ No newline at end of file +} + +function convertAmountToCn($num) { + //判断$num是否存在 + if(!$num) return '零圆'; + //保留小数点后两位 + $num = round($num, 2); + //将浮点转换为整数 + $tem_num = $num * 100; + //判断数字长度 + $tem_num_len = strlen($tem_num); + if($tem_num_len > 14) { + return '数值过大'; + } + + //大写数字 + $dint = array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'); + //大写金额单位 + $danwei = array('仟', '佰', '拾', '亿', '仟', '佰', '拾', '万', '仟', '佰', '拾', '圆'); + $danwei1 = array('角', '分'); + + //空的变量用来保存转换字符串 + $daxie = ''; + + //分割数字,区分圆角分 + list($left_num, $right_num) = explode('.', $num); + + //计算单位长度 + $danwei_len = count($danwei); + //计算分割后的字符串长度 + $left_num_len = strlen($left_num); + $right_num_len = strlen($right_num); + + //循环计算亿万元等 + for($i = 0; $i < $left_num_len; $i++) { + //循环单个文字 + $key_ = substr($left_num, $i, 1); + + //判断数字不等于0或数字等于0与金额单位为亿、万、圆,就返回完整单位的字符串 + if($key_ !== '0' || ($key_ == '0' && ($danwei[$danwei_len - $left_num_len + $i] == '亿' || $danwei[$danwei_len - $left_num_len + $i] == '万' || $danwei[$danwei_len - $left_num_len + $i] == '圆'))) { + $daxie = $daxie . $dint[$key_] . $danwei[$danwei_len - $left_num_len + $i]; + } else { + //否则就不含单位 + $daxie = $daxie . $dint[$key_]; + } + } + + //循环计算角分 + for($i = 0; $i < $right_num_len; $i++) { + $key_ = substr($right_num, $i, 1); + if($key_ > 0) { + $daxie = $daxie . $dint[$key_] . $danwei1[$i]; + } + } + + //计算转换后的长度 + $daxie_len = strlen($daxie); + //设置文字切片从0开始,utf-8汉字占3个字符 + $j = 0; + while($daxie_len > 0) { + //每次切片两个汉字 + $str = substr($daxie, $j, 6); + //判断切片后的文字不等于零万、零圆、零亿、零零 + if($str == '零万' || $str == '零圆' || $str == '零亿' || $str == '零零') { + //重新切片 + $left = substr($daxie, 0, $j); + $right = substr($daxie, $j + 3); + $daxie = $left . $right; + } + $j += 3; + $daxie_len -= 3; + } + + return $daxie . '整'; +} diff --git a/Application/Admin/Controller/AjaxController.class.php b/Application/Admin/Controller/AjaxController.class.php index 5d9edbc81..788aeac1b 100644 --- a/Application/Admin/Controller/AjaxController.class.php +++ b/Application/Admin/Controller/AjaxController.class.php @@ -239,4 +239,7 @@ class AjaxController extends ThinkController{ } $this->ajaxReturn(['code'=>1, 'msg'=>'获取成功', 'data'=>$lists]); } + + + } \ No newline at end of file diff --git a/Application/Admin/Controller/PartnerController.class.php b/Application/Admin/Controller/PartnerController.class.php index 9c677d708..e8d1d608d 100644 --- a/Application/Admin/Controller/PartnerController.class.php +++ b/Application/Admin/Controller/PartnerController.class.php @@ -83,6 +83,12 @@ class PartnerController extends ThinkController if (empty($partner)) { $this->error('请输入合作方名称'); } + if (empty(I('link_man'))) { + $this->error('请输入联系人'); + } + if (empty(I('link_phone'))) { + $this->error('请输入联系电话'); + } if (!in_array($status, [0, 1])) { $this->error('参数异常'); } @@ -93,10 +99,14 @@ class PartnerController extends ThinkController if ($res) { $this->error('合作方已存在'); } + if(!preg_match("/^1[358][0-9]{9}$/u",I('link_phone'))) { $this->error('联系电话格式不正确'); } - + $res2 = $model->where(['link_phone' => I('link_phone')])->getField('id'); + if ($res2) { + $this->error('已存在此联系电话'); + } $time = time(); $save['partner'] = $partner; $save['status'] = $status; @@ -140,6 +150,12 @@ class PartnerController extends ThinkController if (empty($partner)) { $this->error('请输入合作方名称'); } + if (empty(I('link_man'))) { + $this->error('请输入联系人'); + } + if (empty(I('link_phone'))) { + $this->error('请输入联系电话'); + } if (!in_array($status, [0, 1]) || $id == 0) { $this->error('参数异常'); } @@ -160,7 +176,14 @@ class PartnerController extends ThinkController if(!preg_match("/^1[358][0-9]{9}$/u",I('link_phone'))) { $this->error('联系电话格式不正确'); } + $res2 = $model->where([ + 'link_phone' => I('link_phone'), + 'id' => ['neq', $id] + ])->getField('id'); + if ($res2) { + $this->error('已存在此联系电话'); + } $time = time(); $save['id'] = $id; $save['partner'] = $partner; diff --git a/Application/Admin/Controller/PromoteController.class.php b/Application/Admin/Controller/PromoteController.class.php index c28d32ea2..6c5f1fa1c 100644 --- a/Application/Admin/Controller/PromoteController.class.php +++ b/Application/Admin/Controller/PromoteController.class.php @@ -221,8 +221,8 @@ class PromoteController extends ThinkController if ($this->accountExist($account)) { $this->error('该账号已存在'); } - $company_belong = $_REQUEST['company_belong']; - $company_relation = $_REQUEST['company_relation']; + $company_belong = $_REQUEST['company_belong'] ?? 0; + $company_relation = $_REQUEST['company_relation'] ?? 0; $data = array( 'account'=>$account, 'password'=>$password, @@ -347,12 +347,12 @@ class PromoteController extends ThinkController if ($promote['company_id'] != $company_id) { $array['company_id'] = I('company_id'); } - if ($promote['company_belong'] != I('company_belong')) { - $array['company_belong'] = I('company_belong'); - } - if ($promote['company_relation'] != I('company_relation')) { - $array['company_relation'] = I('company_relation'); - } +// if ($promote['company_belong'] != I('company_belong')) { +// $array['company_belong'] = I('company_belong'); +// } +// if ($promote['company_relation'] != I('company_relation')) { +// $array['company_relation'] = I('company_relation'); +// } if ($array) { $res = M("promote", "tab_")->where("chain like '%/{$_POST['id']}/%'")->save($array); } @@ -1292,6 +1292,16 @@ class PromoteController extends ThinkController $verify_status = $_REQUEST['verify_status']; $res = M('promote_belong', 'tab_')->where(['id' => ['in', I('ids')]])->save(['verify_status' => $verify_status]); if (!is_null($res)) { + $promote_belongs = M('promote_belong', 'tab_')->where(['id' => ['in', I('ids')]])->select(); + foreach ($promote_belongs as $promote_belong) { + $update = [ + 'company_belong' => $promote_belong['company_belong'], + 'company_relation' => $promote_belong['company_relation'] + ]; + $res = M("promote", "tab_") + ->where("chain like '%/{$promote_belong['promote_id']}/%' or id={$promote_belong['promote_id']} ") + ->save($update); + } $this->success("操作成功", U('belong')); } else { $this->error('操作失败'); diff --git a/Application/Admin/Controller/PublicController.class.php b/Application/Admin/Controller/PublicController.class.php index e4f5cf2d9..86bda178f 100644 --- a/Application/Admin/Controller/PublicController.class.php +++ b/Application/Admin/Controller/PublicController.class.php @@ -69,13 +69,101 @@ class PublicController extends \Think\Controller } } + /** + * 后台用户登录 + * @author 麦当苗儿 + */ + public function cp_login($mobile = null, $verify = null) + { + if (IS_POST) { + /* 检测验证码 TODO: */ + +// $this->checksafecode($mobile, $verify, false); + $promote = M('promote', 'tab_')->where([ + 'mobile_phone' => $mobile, + 'level' => 1, + ])->find(); + + if ($promote) { + /* 记录登录SESSION和COOKIES */ + $cp_auth = array( + 'user_id' => $promote['id'], + 'account' => $promote['account'], + 'mobile_phone' => $promote['mobile_phone'], + 'nickname' => $promote['nickname'], + 'username' => $promote['nickname'] ?: $promote['account'], + ); + $session_name = 'cp_user_auth'; + if (I('auto_login')) { + session(['name' => $session_name, 'expire' => 60*60*24*30], $cp_auth); + session(['name' => $session_name.'_sign', 'expire' => 60*60*24*30], data_auth_sign($cp_auth)); + } else { + session($session_name, $cp_auth); + session($session_name.'_sign', data_auth_sign($cp_auth)); + } + $uid = $promote['id']; + } else { + $partner = M('partner', 'tab_')->where(['link_man' => $mobile,])->find(); + if ($partner) { + /* 记录登录SESSION和COOKIES */ + $cp_auth = array( + 'user_id' => $partner['id'], + 'account' => $partner['link_phone'], + 'mobile_phone' => $partner['link_phone'], + 'nickname' => $partner['link_man'], + 'username' => $partner['link_man'] ?: $partner['account'], + ); + $session_name = 'cp_user_auth'; + if (I('auto_login')) { + session(['name' => $session_name, 'expire' => 60*60*24*30], $cp_auth); + session(['name' => $session_name.'_sign', 'expire' => 60*60*24*30], data_auth_sign($cp_auth)); + } else { + session($session_name, $cp_auth); + session($session_name.'_sign', data_auth_sign($cp_auth)); + } + + $uid = $promote['id']; + } + } + + if (0 < $uid) { //UC登录成功 + /* 登录用户 */ + $this->success('登录成功!', U('VerifyBill/index')); + } else { //登录失败 + $this->error('该账号没有权限登录对账系统'); + } + } else { + if (session('cp_user_auth')) { + $this->redirect('VerifyBill/index'); + } else { + /* 读取数据库中的配置 */ + $config = S('DB_CONFIG_DATA'); + if (!$config) { + $config = D('Config')->lists(); + S('DB_CONFIG_DATA', $config); + } + C($config); //添加配置 + + $this->display(); + } + } + } + + public function cp_logout() + { + session('cp_user_auth', null); + session('cp_user_auth_sign', null); + $this->redirect('cp_login'); + } + /* 退出登录 */ public function logout() { if (is_login()) { D('Member')->logout(); - session('[destroy]'); - session('user_auth_promote_ids'); + session('user_auth', null); + session('user_auth_sign', null); + session('user_auth_promote_ids', null); cookie('think_language', Null); // $this->success('退出成功!', U('login')); $this->ajaxReturn(array('status' => 1, 'msg' => '退出成功!')); @@ -238,4 +326,48 @@ class PublicController extends \Think\Controller cookie('think_language', 'en-us'); $this->ajaxReturn(['status' => 1]); } + + /** + * 发动手机验证码 + */ + public function telsafecode($phone = '', $delay = 10, $flag = true) + { + $result = R('Common/Sms/send_sms_code', array($phone, $delay, false)); + + if ($result['code'] == 200) { + $data['status'] = 1; + $data['data'] = $result['data']; + } else { + $data['status'] = 0; + } + + $data['msg'] = $result['msg']; + + echo json_encode($data); + exit; + } + + /** + * 手机安全码验证 + * @param bool $flag true 用于直接异步请求 false 用于方法调用 + * @param [type] $vcode [description] + */ + public function checksafecode($phone, $vcode, $flag = true) + { + $result = R('Common/Sms/verify_sms_code', array($phone, $vcode, false)); + + if ($result['code'] == 200) { + $data['status'] = 1; + if ($flag) { + echo json_encode($data); + exit; + } + } else { + $data['status'] = 0; + $data['msg'] = $result['msg']; + echo json_encode($data); + exit; + } + } + } diff --git a/Application/Admin/Controller/VerifyBillController.class.php b/Application/Admin/Controller/VerifyBillController.class.php new file mode 100644 index 000000000..f214430b2 --- /dev/null +++ b/Application/Admin/Controller/VerifyBillController.class.php @@ -0,0 +1,106 @@ + + */ +class VerifyBillController extends Controller { + /** + * VerifyBillController constructor. + */ + public function __construct() + { + parent::__construct(); + if (empty(session('cp_user_auth'))) { + redirect('admin.php?s=public/cp_login.html'); + } + } + + + /** + * + */ + public function index(){ + $m_title = '对账单管理'; + $list_data = DM('statement')->order('create_time desc')->select(); + foreach ($list_data as $key => $value) { + $list_data[$key]['statement_type_str'] = $value['statement_type'] ? '工会对账单' : 'cp对账单'; + } + $this->assign('list_data', $list_data); + $this->assign('meta_title', $m_title); + $this->display(); + } + + public function show() + { + $id = I('id'); + $data = DM('statement')->where(['id' => $id])->find(); + $data['first_party_info'] = json_decode($data['first_party_info'], 1);//甲方 + $data['second_party_info'] = json_decode($data['second_party_info'], 1);//乙方 + $data['statement_info'] = json_decode($data['statement_info'], 1);//结算记录 + //收款方 + $data['receive_company'] = $data['pay_type'] ? $data['first_party_info']['partner'] : $data['second_party_info']['partner']; +// dd($data); + $all_sum_money = array_sum(array_column($data['statement_info'], 'sum_money'));//合计平台总额 + $all_pay_amount = array_sum(array_column($data['statement_info'], 'pay_amount'));//合计结算金额 + $big_all_sum_money = convertAmountToCn($all_sum_money);//大写 + $this->assign('big_all_sum_money', $big_all_sum_money); + $this->assign('all_sum_money', $all_sum_money); + $this->assign('all_pay_amount', $all_pay_amount); + $this->assign('data', $data); + $this->assign('from', I('from')); + if ($data['statement_type'] == 1) {//下游 + $template = 'company_show'; + } else { + $template = 'partner_show';//上游 + } + $this->display($template); + } + + public function confirm() + { + $id = I('id'); + $res = DM('statement')->where(['id' => $id])->save(['is_confirm' => 1]); + if ($res) { + $this->success("操作成功", U('index')); + } else { + $this->error('操作失败'); + } + } + + /** + *导出excell + * @param int id + */ + public function export() + { + $id = I('id'); + $data = DM('statement')->where(['id' => $id])->find(); + $data['first_party_info'] = json_decode($data['first_party_info'], 1);//甲方 + $data['second_party_info'] = json_decode($data['second_party_info'], 1);//乙方 + $data['statement_info'] = json_decode($data['statement_info'], 1);//结算记录 + //收款方 +// dd($data); + $all_sum_money = array_sum(array_column($data['statement_info'], 'sum_money'));//合计平台总额 + $all_pay_amount = array_sum(array_column($data['statement_info'], 'pay_amount'));//合计结算金额 + + $big_all_sum_money = convertAmountToCn($all_sum_money);//大写 + $data['receive_company'] = $data['pay_type'] ? $data['first_party_info'] : $data['second_party_info']; + $data['pay_company'] = $data['pay_type'] ? $data['second_party_info'] : $data['first_party_info']; + dd($data['statement_info']); + if ($data['statement_type'] == 1) {//下游 + excelDownStreamTemplate($data, $all_sum_money, $all_pay_amount, $big_all_sum_money); + } else {//上游 + excelUpStreamTemplate($data, $all_sum_money, $all_pay_amount, $big_all_sum_money); + } + + + + } + +} diff --git a/Application/Admin/Model/PromoteModel.class.php b/Application/Admin/Model/PromoteModel.class.php index 2e9a02bd8..79f870885 100644 --- a/Application/Admin/Model/PromoteModel.class.php +++ b/Application/Admin/Model/PromoteModel.class.php @@ -414,6 +414,7 @@ class PromoteModel extends Model{ foreach ($result as $key => $value) { $parseData[$key] = $value; $parseData[$key]['company_belong_str'] = $value['company_belong'] ? '外团' : '内团'; + $parseData[$key]['company_relation_str'] = $value['company_belong'] ? '只维护' : '自主开发及维护'; } return $parseData; } diff --git a/Application/Admin/View/Partner/add.html b/Application/Admin/View/Partner/add.html index d4efaf0cd..3ec975c91 100644 --- a/Application/Admin/View/Partner/add.html +++ b/Application/Admin/View/Partner/add.html @@ -37,14 +37,14 @@ - 联系人: + *联系人: - 联系电话: + *联系电话: diff --git a/Application/Admin/View/Partner/edit.html b/Application/Admin/View/Partner/edit.html index 902c9b0dd..755bf89a7 100644 --- a/Application/Admin/View/Partner/edit.html +++ b/Application/Admin/View/Partner/edit.html @@ -37,14 +37,14 @@ - 联系人: + *联系人: - 联系电话: + *联系电话: diff --git a/Application/Admin/View/Promote/add.html b/Application/Admin/View/Promote/add.html index ccc01973a..dc05f83fe 100644 --- a/Application/Admin/View/Promote/add.html +++ b/Application/Admin/View/Promote/add.html @@ -67,35 +67,35 @@ - - 工会归属: - - - - - - - - - - - 工会关系: - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 真实姓名: diff --git a/Application/Admin/View/Promote/edit.html b/Application/Admin/View/Promote/edit.html index 6abc2b084..38af1c9f4 100644 --- a/Application/Admin/View/Promote/edit.html +++ b/Application/Admin/View/Promote/edit.html @@ -195,7 +195,7 @@ - + + <!– –> @@ -234,11 +234,11 @@ name="company_relation" > 只维护 - + <!– –> - + <!–非会长只能查看–> 工会归属: @@ -250,7 +250,7 @@ disabled="disabled" name="company_belong" class="company_belong"> 外团 - + <!– –> @@ -265,10 +265,10 @@ disabled="disabled" name="company_relation" > 只维护 - + <!– –> - + --> diff --git a/Application/Admin/View/Promote/lists.html b/Application/Admin/View/Promote/lists.html index c36ecc8df..e03f60b9d 100644 --- a/Application/Admin/View/Promote/lists.html +++ b/Application/Admin/View/Promote/lists.html @@ -185,6 +185,7 @@ 渠道类型 所属会长 工会归属 + 工会关系 商务专员 状态 身份状态 @@ -233,6 +234,7 @@ {$data['company_belong_str']} + {$data['company_relation_str']} {:get_business_affairs_account($data['ba_id'])} diff --git a/Application/Admin/View/Public/cp_base.html b/Application/Admin/View/Public/cp_base.html new file mode 100644 index 000000000..c8fc9fe41 --- /dev/null +++ b/Application/Admin/View/Public/cp_base.html @@ -0,0 +1,387 @@ + + + + + {$meta_title}-{:C('WEB_SITE_TITLE')} + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ +
+ {:session('cp_user_auth.username')} + + 消息 + {:get_msg()} + +
+
+
+ + + +
这是内容
+ + + + + + + + + +
+
这是内容
+
+ + + + + + + + + + + +
+
+ + + + + + + + diff --git a/Application/Admin/View/Public/cp_login.html b/Application/Admin/View/Public/cp_login.html new file mode 100644 index 000000000..18040110c --- /dev/null +++ b/Application/Admin/View/Public/cp_login.html @@ -0,0 +1,206 @@ + + + + + + + {:C('WEB_SITE_TITLE')} + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + +
+ 欢迎登录后台管理界面平台 + +
+ +
+ + + +
+
+
+

手机号码快捷登录User Login

+
    +
  • + + +
  • +
  • + + +
    获取验证码
    +
  • +
  • +
  • 下次自动登录
  • +
+
+
+ +
+ +
+ + + +
这是内容
+ + + + + + + + diff --git a/Application/Admin/View/Public/login.html b/Application/Admin/View/Public/login.html index 00d8215cd..c9d7d35b0 100644 --- a/Application/Admin/View/Public/login.html +++ b/Application/Admin/View/Public/login.html @@ -113,7 +113,8 @@ data: $(".inputlogin").serialize(), success: function(data) { if(data.status!=1){ - updateAlert(data.info,'tip_error'); + var msg = data.info ? data.info : data.msg; + updateAlert(msg,'tip_error'); setTimeout(function(){ $('#tip').find('.tipclose').click(); $('.reloadverify').click(); diff --git a/Application/Admin/View/Tool/company_info.html b/Application/Admin/View/Tool/company_info.html index 3027beaf3..c2469c7ef 100644 --- a/Application/Admin/View/Tool/company_info.html +++ b/Application/Admin/View/Tool/company_info.html @@ -26,14 +26,14 @@ 公司名称 - + 联系人 - + diff --git a/Application/Admin/View/VerifyBill/company_show.html b/Application/Admin/View/VerifyBill/company_show.html new file mode 100644 index 000000000..ad04083e1 --- /dev/null +++ b/Application/Admin/View/VerifyBill/company_show.html @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + +
+
+
+
+
乙方:{$data['second_party_info']['partner']}
+
提现单号:{$data['ext_field']}
+
订单类型:{$data['second_party_info']['settlement_type']}
+
联系人:{$data['second_party_info']['link_man']}
+
联系电话:{$data['second_party_info']['link_phone']}
+ +
+
+
+
+
户名:{$data['second_party_info']['bank_account_name']}
+
银行账号:{$data['second_party_info']['bank_account']}
+
开户行:{$data['second_party_info']['opening_bank']}
+
邮寄地址:{$data['second_party_info']['address']}
+
开票项目:{$data['second_party_info']['invoice_item']}
+
发票类型:{$data['second_party_info']['invoice_type']}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
结算时间产品平台总额补点比例分成比例税费费率结算金额(元)
aOh! 暂时还没有内容!
-{$item.type_name}---{$item.sum_money}
{$item.statement_begin_time}-{$item.statement_end_time}{$item.game_name}{$item.pay_amount}{$item.second_ratio}%{$item.fax_ratio}%{$item.sum_money}
总计-{$all_pay_amount}0--{$all_sum_money}0
本月分成总金额(人民币大写):----{$big_all_sum_money}
+ +
+
+
+
甲方:{$data['first_party_info']['jfCompany']}
+
联系人:{$data['first_party_info']['jfPerson']}
+
联系电话:{$data['first_party_info']['jfTel']}
+
+
+
+ +
+ + +
+ + +
+ + +
+ + +
+ + + + + + + \ No newline at end of file diff --git a/Application/Admin/View/VerifyBill/index.html b/Application/Admin/View/VerifyBill/index.html new file mode 100644 index 000000000..7d5224802 --- /dev/null +++ b/Application/Admin/View/VerifyBill/index.html @@ -0,0 +1,358 @@ + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
对账单类型生成时间对账单日期对账金额确认状态操作
aOh! 暂时还没有内容!
{$data.statement_type_str}{:set_show_time($data['create_time'])}{:set_show_time($data['statement_begin_time'])}-{:set_show_time($data['statement_end_time'])}{$data.statement_money} + + 未确认 + + + 确认 + + + 查看 + 导出 +
+
+ +
+
+ + 导出 + + {$_page|default=''} +
+ + + +
+ + + + + + diff --git a/Application/Admin/View/VerifyBill/partner_show.html b/Application/Admin/View/VerifyBill/partner_show.html new file mode 100644 index 000000000..8cde640f0 --- /dev/null +++ b/Application/Admin/View/VerifyBill/partner_show.html @@ -0,0 +1,256 @@ + + + + + + + + + + + + + + + +
+
+
+
+
甲方:{$data['first_party_info']['partner']}
+
联系人:{$data['first_party_info']['link_man']}
+
联系电话:{$data['first_party_info']['link_phone']}
+
邮寄地址:{$data['first_party_info']['address']}
+
公司税号:{$data['first_party_info']['company_tax_no']}
+
+
+
+
+
乙方:{$data['second_party_info']['partner']}
+
联系人:{$data['second_party_info']['link_man']}
+
联系电话:{$data['second_party_info']['link_phone']}
+
邮寄地址:{$data['second_party_info']['address']}
+
公司税号:{$data['second_party_info']['company_tax_no']}
+
+
+
+ 支付给:{$data['receive_company']} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
结算时间产品平台总额甲方分成比例乙方分成比例渠道费率税费费率结算金额(乙)
结算金额=平台总额*(1-渠道费)*分成比例*(1-税费费率)
aOh! 暂时还没有内容!
-{$item.type_name}{$item.pay_amount}----{$item.sum_money}
{$item.statement_begin_time}-{$item.statement_end_time}{$item.game_name}{$item.pay_amount}{$item.first_ratio}%{$item.second_ratio}%{$item.promote_ratio}%{$item.fax_ratio}%{$item.sum_money}
总计-{$all_pay_amount}-----{$all_sum_money}0
本月分成总金额(人民币大写):------{$big_all_sum_money}
+ +
+ +
+
+
收款方名称:{$data['first_party_info']['partner']}
+
银行账号:{$data['first_party_info']['bank_account']}
+
开户行:{$data['first_party_info']['opening_bank']}
+
+
+
+
+
付款方名称:{$data['second_party_info']['partner']}
+
银行账号:{$data['second_party_info']['bank_account']}
+
开户行:{$data['second_party_info']['opening_bank']}
+
+
+ +
+
+
收款方名称:{$data['second_party_info']['partner']}
+
银行账号:{$data['second_party_info']['bank_account']}
+
开户行:{$data['second_party_info']['opening_bank']}
+
+
+
+
+
付款方名称:{$data['first_party_info']['partner']}
+
银行账号:{$data['first_party_info']['bank_account']}
+
开户行:{$data['first_party_info']['opening_bank']}
+
+
+ + +
+ +
+ + +
+ + +
+ + +
+ + +
+ + + + + + + \ No newline at end of file diff --git a/Data/update.sql b/Data/update.sql index 0556fbc7d..c0f90971d 100644 --- a/Data/update.sql +++ b/Data/update.sql @@ -946,6 +946,10 @@ CREATE TABLE `tab_promote_belong` ( PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='推广公会归属管理'; +-- 公司信息 2020-1-8 刘伟文 +INSERT INTO `tab_tool` (`name`, `title`, `config`, `template`, `type`, `status`, `create_time`) VALUES ('company_info', '公司信息', NULL, NULL, '1', '1', NULL); + + diff --git a/Public/Admin/excel/down_stream.xls b/Public/Admin/excel/down_stream.xls new file mode 100644 index 0000000000000000000000000000000000000000..ce63a4cc42d140ae11cf77c76e9f734ed607a760 GIT binary patch literal 34816 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 literal 0 HcmV?d00001 diff --git a/Public/Admin/excel/up_stream.xls b/Public/Admin/excel/up_stream.xls new file mode 100644 index 0000000000000000000000000000000000000000..d3a1f36a8267088c73e4baa19420f5bd59524bb5 GIT binary patch literal 22528 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