优化新增推广员汇总

master
chenzhi 4 years ago
parent 0114a00a41
commit 7a876e01ab

@ -11,6 +11,197 @@ use Org\UcenterSDK\Ucservice;
*/
class PlatformController extends ThinkController
{
public function promote_pool()
{
if(!array_key_exists("year",$_REQUEST) || !array_key_exists("company_belong",$_REQUEST)){
$this->redirect(ACTION_NAME, array('year' => date('Y',time()),"company_belong"=>0));
}
$isExport = false;
if(isset($_REQUEST['export']) && $_REQUEST['export'] == 1){
$isExport = true;
}
$page = intval($_REQUEST['p']);
$page = $page ? $page : 1; //默认显示第一页数据
if (isset($_REQUEST['row'])) {
$row = $_REQUEST['row'];
} else {
$row = 10;
}
$companyBelong = isset($_REQUEST['company_belong']) ? $_REQUEST['company_belong'] : 0;
$year = isset($_REQUEST['year']) ? $_REQUEST['year'] : date("Y",time());
$yearMap = [strtotime("$year-1-1 00:00:00"),strtotime("$year-12-31 23:59:59")];
//获取公司数据 tab_promote_company
$companyMap = "1";
if($companyBelong > -1){
$companyMap .= " AND company_belong = {$companyBelong}";
}
if(isset($_REQUEST['company_name'])){
$companyId = $_REQUEST['company_name'];
$companyMap .= " AND company_name like '%{$companyId}%' ";
}
$promoteCompany = M("promote_company","tab_");
$data = $promoteCompany
->field("id,company_name,company_belong")
->where($companyMap);
if($isExport){
$data = $data->select();
//生成头
$fp = $this->setPromotePoolTitle($year);
}else{
$data = $data->page($page,$row)->select();
$count = $promoteCompany->where($companyMap)->count();
}
//获取公司累计注册
$sendData = [];
foreach($data as $k=>$v){
$promote = getPromoteByLevel(0,$v['id']);
if(empty($promote)){
$promoteIds = '';
}else{
$promoteIds = implode(",",array_column($promote,"id"));
}
$list = self::setYearList($year);
$this->getRegisterCount($list,$promoteIds,$yearMap);
$this->getPayamountCount($list,$promoteIds,$yearMap);
$v["list"] = $list;
$v["company_belong"] = getCompanyBlongOther($v["company_belong"]);
$sendData[] = $v;
if($isExport) $fp = $this->setCsvData($fp,$v);
}
if($isExport){
//刷新输出缓冲到浏览器
fclose($fp);
exit();
}
$th = array_keys(self::setYearList($year));
$this->assign('th', $th);
$this->assign('list_data', $sendData);
$this->getYearList();
$page = set_pagination($count, $row);
if ($page) {
$this->assign('_page', $page);
}
$this->display();
// var_dump($sendData);
}
//获取公司每个月的注册及充值金额
private static function setYearList($year)
{
$range = [];
$i = 1;
do {
if($i < 10){
$month = "0".$i;
}else{
$month = $i;
}
$range[$year."-".$month] = ["register"=>0,"payamount"=>0];
$i++;
} while ($i<13);
return $range;
}
//获取注册量
protected function getRegisterCount(&$list,$promoteIds,$yearMap)
{
$map = [
"promote_id"=>["in",$promoteIds],
"register_time"=>["between",$yearMap]
];
$Register = M("User","tab_")->field("count(id) count,FROM_UNIXTIME(`register_time`, '%Y-%m') regtime")->where($map)->group("regtime")->select();
if(empty($Register)) return ;
foreach ($Register as $v) {
$list[$v['regtime']]['register'] = $v['count'];
}
}
//获取支付流水
protected function getPayamountCount(&$list,$promoteIds,$yearMap)
{
$map = [
"promote_id"=>["in",$promoteIds],
"pay_time"=>["between",$yearMap],
"pay_status"=>1
];
$Payamount = M("Spend","tab_")->field("sum(pay_amount) pay_amount,FROM_UNIXTIME(`pay_time`, '%Y-%m') paytime")->where($map)->group("paytime")->select();
if(empty($Payamount)) return ;
foreach ($Payamount as $v) {
$list[$v['paytime']]['payamount'] = $v['pay_amount'];
}
}
//获取所有年分
protected function getYearList()
{
$star = 2019;
$end = date("Y",time());
$list = [];
for ($i=$star; $i <= $end; $i++) {
$temp = array(
"value"=>$i,
"name"=>"{$i}年"
);
$list[] = $temp ;
}
$this->assign('YearList', $list);
}
//获取导出头
private static function setPromotePoolTitle($year)
{
$range = ["推广公司","内外团归属"];
$i = 1;
do {
if($i < 10){
$month = "0".$i;
}else{
$month = $i;
}
$range[] = $year."年".$month."月注册数";
$range[] = $year."年".$month."月充值流水";
$i++;
} while ($i<13);
$csvFileName = '推广公司汇总.csv';
//设置好告诉浏览器要下载excel文件的headers
header('Content-Description: File Transfer');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="'. $csvFileName .'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
$fp = fopen('php://output', 'a');//打开output流
mb_convert_variables('GBK', 'UTF-8', $range);
fputcsv($fp, $range);//将数据格式化为CSV格式并写入到output流中
return $fp;
}
//获取导出头
private static function setCsvData($fp,$data)
{
unset($data['id']);
$sendData = [];
foreach ($data as $key => $value) {
if($key != "list"){
$sendData[] = $value;
}
}
foreach ($data['list'] as $key => $value) {
$sendData[] = $value['register'];
$sendData[] = $value['payamount'];
}
mb_convert_variables('GBK', 'UTF-8', $sendData);
fputcsv($fp, $sendData);//将数据格式化为CSV格式并写入到output流中
ob_flush();
flush();
return $fp;
}
function game_statistics($p = 0)
{
$page = intval($p);
@ -437,7 +628,6 @@ class PlatformController extends ThinkController
$this->display();
}
function promote_statistics($p = 0)
{
$page = intval($p);

@ -0,0 +1,282 @@
<extend name="Public/base"/>
<block name="body">
<link rel="stylesheet" href="__CSS__/select2.min.css" type="text/css" />
<script type="text/javascript" src="__JS__/bootstrap.min.js"></script>
<script type="text/javascript" src="__JS__/select2.min.js"></script>
<style>
.select2-container--default .select2-selection--single {
color: #000;
resize: none;
border-width: 1px;
border-style: solid;
border-color: #a7b5bc #ced9df #ced9df #a7b5bc;
box-shadow: 0px 3px 3px #F7F8F9 inset;height:35px;
height:28px;border-radius:3px;font-size:12px;
}
.select2-container--default .select2-selection--single .select2-selection__rendered {
line-height:35px;
line-height:28px;
}
.select2-container--default .select2-selection--single .select2-selection__arrow {
height:26px;
}
.select2-container--default .select2-search--dropdown .select2-search__field {
height:26px;line-height:26px;font-size:12px;
}
.select2-results__option[aria-selected] {font-size:12px;}
th{
border-right: 1px solid #b6cad2;
}
</style>
<div class="cf main-place top_nav_list navtab_list">
<div class="fr">
<a class="tabchose" href="javascript:;">推广员汇总</a>
<a class="" href="{:U('Platform/promote_statistics')}">推广员注册统计</a>
<a class="" href="{:U('Platform/promotepay_statistics')}">推广员充值统计</a>
</div>
<h3 class="page_title">推广员汇总</h3>
<p class="description_text">说明:统计各工会每月注册及充值总额(注册数:以玩家最后归属的公会为准)</p>
</div>
<div class="cf top_nav_list">
<!-- 高级搜索 -->
<div class="jssearch fl cf search_list">
<div class="input-list search-title-box">
<label>搜索:</label>
</div>
<!--游戏类型搜索END-->
<div class="input-list input-list-resway search_label_rehab">
<select id="year" name="year" class="select_gallery" style="width:150px;">
<volist name="YearList" id="vo">
<option value="{$vo.value}" <if condition="I('year') && $vo.value eq I('year')">selected</if> >{$vo.name}</option>
</volist>
</select>
</div>
<div class="input-list input-list-promote search_label_rehab">
<label>团体归属</label>
<select id="company_belong" name="company_belong" class="select_gallery" style="width:150px;">
<volist name=":getCompanyBlong()" id="vo">
<option value="{$vo.id}" <if condition="isset($_GET['company_belong']) && $key eq I('company_belong')">selected</if> >{$vo.name}</option>
</volist>
</select>
</div>
<div class="input-list">
<input style="width: 200px;" type="text" name="company_name" class="search-input" value="" placeholder="请输入公司名称搜索">&nbsp;
</div>
<input type="hidden" name="" value="" class="sortBy">
<div class="input-list">
<a class="sch-btn" href="javascript:;" id="search" url="{:U('Platform/promote_pool','model='.$model['name'].'&row='.I('row'),false)}">搜索</a>
</div>
</div>
</div>
<!-- 数据列表 -->
<div class="data_list">
<div class="">
<table>
<!-- 表头 -->
<thead>
<tr>
<th rowspan="2">推广公司</th>
<th rowspan="2">内外团归属</th>
<foreach name="th" item="vo">
<th colspan="2">{$vo}</th>
</foreach>
</tr>
<tr>
<foreach name="th" item="vo">
<th>注册数</th>
<th>充值流水</th>
</foreach>
</tr>
</thead>
<!-- 列表 -->
<tbody>
<style>
.data-table thead th, .data-table tbody td{text-align:center}
.data-table tbody td{border-right:1px solid #DDDDDD;}
.d_list .drop-down ul {z-index:999;}
</style>
<empty name="list_data" >
<tr>
<td colspan="9" class="text-center">aOh! 暂时还没有内容!</td>
</tr>
<else />
<volist name="list_data" id="data">
<tr>
<td>{$data['company_name']}</td>
<td>{$data['company_belong']}</td>
<foreach name="data.list" item="item" key="date">
<foreach name="item" item="it">
<td data-id="{$data.id}" data-date="{$date}" >{$it}</td>
</foreach>
</foreach>
</tr>
</volist>
</empty>
<!-- <tr class="data_summary">
<td colspan="4"><span>汇总</span></td>
<td ><span>{$total.sum_count}</span></td>
<td>---</td>
<td>{$total.sum_today}</td>
<td>{$total.sum_week}</td>
<td>{$total.sum_mounth}</td>
</tr> -->
</tbody>
</table>
</div>
</div>
<div class="page">
<a class="sch-btn" href="{:U(CONTROLLER_NAME.'/'.ACTION_NAME,array_merge(['export'=>1],I('get.')))}" target="_blank">导出</a>
{$_page|default=''}
</div>
</block>
<block name="script">
<script src="__STATIC__/layer/layer.js" type="text/javascript"></script>
<script type="text/javascript" src="__STATIC__/layer/extend/layer.ext.js" ></script>
<link href="__STATIC__/datetimepicker/css/datetimepicker.css" rel="stylesheet" type="text/css">
<php>if(C('COLOR_STYLE')=='blue_color') echo '<link href="__STATIC__/datetimepicker/css/datetimepicker_blue.css" rel="stylesheet" type="text/css">';</php>
<link href="__STATIC__/datetimepicker/css/dropdown.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="__STATIC__/datetimepicker/js/bootstrap-datetimepicker.min.js"></script>
<script type="text/javascript" src="__STATIC__/datetimepicker/js/locales/bootstrap-datetimepicker.zh-CN.js" charset="UTF-8"></script>
<script>
<volist name=":I('get.')" id="vo">
Think.setValue('{$key}',"{$vo}");
</volist>
$(".select_gallery").select2();
</script>
<script type="text/javascript">
//导航高亮
highlight_subnav('{:U('Platform/promote_statistics')}');
$(function(){
//搜索功能
$("#search").click(function(){
var starttime = $.trim($('#time-start').val());
var endtime = $.trim($('#time-end').val());
if (starttime && endtime && starttime > endtime) {layer.msg('开始时间必须小于等于结束时间');return false;}
var url = $(this).attr('url');
var query = $('.jssearch').find('input').serialize();
query += "&" + $('.jssearch').find('select').serialize();
query = query.replace(/(&|^)(\w*?\d*?\-*?_*?)*?=?((?=&)|(?=$))/g,'');
query = query.replace(/^&/g,'');
if( url.indexOf('?')>0 ){
url += '&' + query;
}else{
url += '?' + query;
}
window.location.href = url;
});
//回车自动提交
$('.jssearch').find('input').keyup(function(event){
if(event.keyCode===13){
$("#search").click();
}
});
// $(".ljzc").click(function(){
// var id = $(this).attr('data-value');
// var game_name = "{:I('game_name')}";
// var server_name = "{:I('server_id')}";
// var urlr = window.location.host;
// layer.open({
// type: 2,
// title: '注册记录',
// shadeClose: true,
// shade: 0.8,
// area: ['70%', '80%'],
// content: '/admin.php?s=/Platform/zhuce_detail/promote_id/'+id+'/game_name/'+game_name+'/server_name/'+server_name+''//iframe的url
// });
// });
$(".paixu").click(function(){
var that=$(this);
$data_order=that.attr('data-order');
$order_type='{$userarpu_order}';
if($order_type==''||$order_type=='4'){
$(".sortBy").attr('name','data_order');
val='3,'+$data_order;
$(".sortBy").attr('value',val);
$("#search").click();
}else if($order_type=='3'){
$(".sortBy").attr('name','data_order');
val='4,'+$data_order;
$(".sortBy").attr('value',val);
$("#search").click();
}
});
//点击排序
$('.list_sort').click(function(){
var url = $(this).attr('url');
var ids = $('.ids:checked');
var param = '';
if(ids.length > 0){
var str = new Array();
ids.each(function(){
str.push($(this).val());
});
param = str.join(',');
}
if(url != undefined && url != ''){
window.location.href = url.replace(".html","") + '/ids/' + param;
}
});
// var date="{$setdate}";
$('#time-start').datetimepicker({
format: 'yyyy-mm-dd',
language:"zh-CN",
minView:2,
autoclose:true,
// endDate:date
});
$('#datetimepicker').datetimepicker({
format: 'yyyy-mm-dd',
language:"zh-CN",
minView:2,
autoclose:true,
pickerPosition:'bottom-left',
// endDate:date
})
var game_server = "{:I('server_id')}";
$("#game_type").change(function(){
console.log({sdk_version:$("#game_type option:selected").val(), game_name:$("#game_name option:selected").val()})
$.ajax({
url:"{:U('Ajax/getGmeServer')}",
type:"post",
data:{sdk_version:$("#game_type option:selected").val(), game_name:$("#game_name option:selected").val()},
dataType:'json',
success:function(data){
console.log(data)
str = "<option value=''>请选择区服</option>";
for (var i in data){
str += "<option value='"+data[i].server_id+"' "+(game_server && data[i].server_id == game_server?'selected':'')+">"+data[i].server_name+"</option>"
}
$("#server_id").empty();
$("#server_id").append(str);
$("#server_id").select2();
}
})
});
$("#game_name").change(function(){
$("#game_type").change();
});
$("#game_name").change();
})
</script>
</block>

@ -29,6 +29,7 @@
<div class="cf main-place top_nav_list navtab_list">
<div class="fr">
<a class="" href="{:U('Platform/promote_pool')}">推广员汇总</a>
<a class="tabchose" href="javascript:;">推广员注册统计</a>
<a class="" href="{:U('Platform/promotepay_statistics')}">推广员充值统计</a>
</div>

@ -30,6 +30,7 @@
<div class="cf main-place top_nav_list navtab_list">
<div class="fr">
<a class="" href="{:U('Platform/promote_pool')}">推广员汇总</a>
<a class="" href="{:U('Platform/promote_statistics')}">推广员注册统计</a>
<a class="tabchose" href="javascript:;">推广员充值统计</a>
</div>

Loading…
Cancel
Save