Merge pull request 'feature/discount_voucher' (#474) from feature/discount_voucher into master

Reviewed-on: http://8.136.139.249:3000/wmtx/platform/pulls/474
master
廖金灵 4 years ago
commit d4c02f76ac

@ -0,0 +1,159 @@
<?php
namespace Admin\Controller;
use Base\Service\DiscountService;
/**
* 游戏折扣
*/
class DiscountController extends ThinkController
{
public function records()
{
$page = I('p', 1);
$row = I('row', 10);
$baseGameId = I('base_game_id', 0);
$status = I('status', -1);
$where = [
'_string' => '1=1',
];
if ($baseGameId != 0) {
$where['base_game_id'] = $baseGameId;
}
if ($status != -1) {
$where['status'] = $status;
}
if (I('time_start', '') != '') {
$where['_string'] .= ' and end_time>=' . strtotime(I('time_start') . ' 00:00:00');
}
if (I('time_end', '') != '') {
$where['_string'] .= ' and start_time<=' . strtotime(I('time_end') . ' 23:59:59');
}
$query = M('game_discount', 'tab_')->where($where);
$records = [];
if (I('export', 0) == 1 || $row == 'all') {
$records = $query->order('create_time desc')->select();
} else {
$countQuery = clone $query;
$records = $query->order('create_time desc')->page($page, $row)->select();
$count = $countQuery->count();
}
$statusList = [
0 => '关闭',
1 => '开启',
];
$service = new DiscountService();
if (count($records) > 0) {
foreach ($records as $key => $record) {
$isActived = $service->isActived($record);
$records[$key]['status_text'] = $statusList[$record['status']];
$records[$key]['start_time'] = date('Y-m-d H:i:s', $record['start_time']);
$records[$key]['end_time'] = $record['end_time'] == DiscountService::FOREVER_TIME ? '永久' : date('Y-m-d H:i:s', $record['end_time']);
$records[$key]['create_time'] = date('Y-m-d H:i:s', $record['create_time']);
$records[$key]['update_time'] = date('Y-m-d H:i:s', $record['update_time']);
$records[$key]['is_actived'] = $isActived;
$records[$key]['is_actived_text'] = $isActived ? '生效中' : '未生效';
}
if (I('export', 0) == 1) {
$field = [
'base_game_name' => '游戏名称',
'start_time' => '生效时间',
'end_time' => '失效时间',
'status_text' => '状态',
'is_actived_text' => '生效状态',
'first_rate' => '首充折扣',
'second_rate' => '次充折扣',
'create_admin_username' => '添加人',
'create_time' => '添加时间',
'update_admin_username' => '修改人',
'update_time' => '修改时间',
];
addOperationLog(['op_type'=>3,'key'=>getNowDate(),'op_name'=>'导出游戏折扣记录','url'=>U('Discount/records'),'menu'=>'游戏-折扣代金券-游戏折扣-' . '导出游戏折扣记录']);
data2csv($records, '游戏折扣', $field);
exit;
}
}
$page = set_pagination($count, $row == 'all' ? 99999999 : $row);
if($page) {
$this->assign('_page', $page);
}
// $admins = M('ucenter_member', 'sys_')->field(['id', 'username'])->select();
$baseGames = M('base_game', 'tab_')->select();
// $this->assign('admins', $admins);
$this->assign('baseGames', $baseGames);
$this->assign('statusList', $statusList);
$this->assign('records', $records);
$this->display('records');
}
public function delOne()
{
$id = I('id', 0);
try {
$service = new DiscountService();
$service->delete($id);
$this->ajaxReturn([
'status' => 1,
'message' => '操作成功'
]);
} catch (\Exception $e) {
$this->ajaxReturn([
'status' => 0,
'message' => $e->getMessage()
]);
}
}
public function save()
{
$params = I('post.');
try {
$service = new DiscountService();
$service->check($params);
$service->save($params, session('user_auth'));
$this->ajaxReturn([
'status' => 1,
'message' => '操作成功'
]);
} catch (\Exception $e) {
$this->ajaxReturn([
'status' => 0,
'message' => $e->getMessage()
]);
}
}
public function addPage()
{
$this->meta_title = '新增游戏折扣';
$baseGames = M('base_game', 'tab_')->select();
$this->assign('baseGames', $baseGames);
$this->display('form');
}
public function updatePage()
{
$id = I('id', 0);
$gameDiscount = M('game_discount', 'tab_')->where(['id' => $id])->find();
if (is_null($gameDiscount)) {
return $this->error('记录不存在');
}
$this->meta_title = '修改游戏折扣';
$baseGames = M('base_game', 'tab_')->select();
$this->assign('baseGames', $baseGames);
$this->assign('record', $gameDiscount);
$this->display('form');
}
}

@ -1234,6 +1234,7 @@ class ExportController extends Controller
'game_player_id' => '角色ID',
'game_player_name' => '角色名称',
'cost' => '订单金额',
'discount_amount' => '折扣',
'pay_amount' => '实付金额',
'pay_way' => '充值方式',
'pay_status' => L('Order_status'),

@ -872,6 +872,7 @@ class FinanceController extends ThinkController
'balance_coin_count'=>'平台币直充支出',
'inside_cash_count'=>'内充支出',
'all_cash_count'=>'游戏内充值合计',
'discount_amount'=>'优惠金额',
'notice_fail_count'=>'联运通知失败合计',
'agg_wm_amount'=>'聚合万盟数据',
'agg_wm_failed_amount'=>'聚合万盟通知失败',
@ -915,6 +916,7 @@ class FinanceController extends ThinkController
$sumInside = $totalData['inside_cash_count'];
$sumNoticeFail = $totalData['notice_fail_count']? $totalData['notice_fail_count']:0;
$sumAll = $sumCash + $sumBalance + $sumInside;
$sumDiscountAmount = $totalData['discount_amount'];
$game_types = M("game_type", 'tab_')->field('id, type_name')->select();
@ -928,6 +930,7 @@ class FinanceController extends ThinkController
$this->assign('aggWmTotal', $aggWmTotal);
$this->assign('aggTotal', $aggTotal);
$this->assign('game_types', $game_types);
$this->assign('sumDiscountAmount', $sumDiscountAmount);
$this->assign('sumCash', $sumCash);
$this->assign('sumBalance', $sumBalance);
$this->assign('sumInside', $sumInside);
@ -1086,7 +1089,7 @@ class FinanceController extends ThinkController
D("Spend")->addSubsiteWhere($map);
// var_dump($map);die();
$field = "pay_order_number,FROM_UNIXTIME(payed_time) as pay_time,user_account,user_nickname,game_name,promote_account,spend_ip,server_name,game_player_name,pay_amount,cost,pay_way,sdk_version,merchant_id";
$field = "pay_order_number,FROM_UNIXTIME(payed_time) as pay_time,user_account,user_nickname,game_name,promote_account,spend_ip,server_name,game_player_name,pay_amount,discount_amount,cost,pay_way,sdk_version,merchant_id";
$group = "";
$order = "payed_time DESC";
@ -1133,6 +1136,7 @@ class FinanceController extends ThinkController
"server_name"=>"游戏区服",
"game_player_name"=>"角色名称",
"cost"=>"订单金额",
"discount_amount"=>'折扣',
"pay_amount"=>"实付金额",
"pay_way"=>"充值方式",
"merchant_name"=>"所属商户"

@ -133,6 +133,7 @@ class FinancePromoteController extends AdminController
"balance_coin_count"=>0,
"bind_coin_count"=>0,
"inside_cash_count"=>0,
"discount_amount"=>0,
);
$promotes = [];
if (count($senddata) > 0) {
@ -155,6 +156,7 @@ class FinancePromoteController extends AdminController
if(!array_key_exists('balance_coin_count',$v)) $v['balance_coin_count']=0;
if(!array_key_exists('bind_coin_count',$v)) $v['bind_coin_count']=0;
if(!array_key_exists('inside_cash_count',$v)) $v['inside_cash_count']=0;
if(!array_key_exists('discount_amount',$v)) $v['discount_amount']=0;
$v['promote_account'] = get_promote_name($v['p_id']);
($v['promote_account']=='官方渠道')?($v['promote_account']=C('OFFICIEL_CHANNEL')):'';
$v['admin_username'] = $adminUsernames[$promote['admin_id']] ?? '无';
@ -169,6 +171,7 @@ class FinancePromoteController extends AdminController
$count['inside_cash_count'] += $v['inside_cash_count'];
$count['all_count'] += $v['allcount'];
$count['unallcount'] += $v['unallcount'];
$count['discount_amount'] += $v['discount_amount'];
$data[] = $v;
}
$data = my_sort($data, $data_order_type, (int)$data_order);
@ -191,6 +194,7 @@ class FinancePromoteController extends AdminController
"inside_cash_count"=>"平台币内充",
"allcount"=>"渠道游戏内充值合计",
"unallcount"=>"渠道游戏内不结算充值合计",
"discount_amount"=>"优惠金额",
));
}
// dump($data);die();
@ -220,6 +224,7 @@ class FinancePromoteController extends AdminController
$count['bind_coin_count'] = number_format($count['bind_coin_count'],2,'.','');
$count['inside_cash_count'] = number_format($count['inside_cash_count'],2,'.','');
$count['all_count'] = number_format($count['all_count'],2,'.','');
$count['discount_amount'] = number_format($count['discount_amount'],2,'.','');
$this->checkListOrCountAuthRestMap($map,[]);
@ -295,6 +300,7 @@ class FinancePromoteController extends AdminController
$field= "SUM(CASE WHEN pay_way >= 0 THEN pay_amount ELSE 0 END) as cash_count,
SUM(CASE WHEN pay_way = 0 THEN pay_amount ELSE 0 END) as balance_coin_count,
SUM(CASE WHEN pay_way = -1 THEN pay_amount ELSE 0 END) as bind_coin_count,
SUM(discount_amount) as discount_amount,
IFNULL(if(substring_index(substring_index(promote.`chain`,'/',2),'/',-1)='',s.promote_id,substring_index(substring_index(promote.`chain`,'/',2),'/',-1)),0) p_id,
IFNULL(company_id,0) company_id,company_name,develop_type,IFNULL(promote.company_belong,0) company_belong";
$query = SM()
@ -370,6 +376,7 @@ class FinancePromoteController extends AdminController
$field= "SUM(CASE WHEN pay_way > 0 and s.is_check=1 THEN pay_amount ELSE 0 END) as cash_count,
SUM(CASE WHEN pay_way = 0 and s.is_check=1 THEN pay_amount ELSE 0 END) as balance_coin_count,
SUM(CASE WHEN pay_way = -1 and s.is_check=1 THEN pay_amount ELSE 0 END) as bind_coin_count,
SUM(discount_amount) as discount_amount,
IFNULL(if(substring_index(substring_index(promote.`chain`,'/',2),'/',-1)='',s.promote_id,substring_index(substring_index(promote.`chain`,'/',2),'/',-1)),0) p_id,
IFNULL(company_id,0) company_id,company_name,develop_type,IFNULL(promote.company_belong,0) company_belong";
$query = SM()
@ -484,6 +491,7 @@ class FinancePromoteController extends AdminController
"balance_coin_count"=>0,
"bind_coin_count"=>0,
"inside_cash_count"=>0,
"discount_amount"=>0,
);
$marketAdmins = [];
@ -525,6 +533,7 @@ class FinancePromoteController extends AdminController
$allcount['bind_coin_count'] += $v['bind_coin_count'];
$allcount['inside_cash_count'] += $v['inside_cash_count'];
$allcount['all_count'] += $v['allcount'];
$allcount['discount_amount'] += $v['discount_amount'];
$data[] = $v;
}
@ -533,6 +542,7 @@ class FinancePromoteController extends AdminController
$allcount['bind_coin_count'] = number_format($allcount['bind_coin_count'],2,'.','');
$allcount['inside_cash_count'] = number_format($allcount['inside_cash_count'],2,'.','');
$allcount['all_count'] = number_format($allcount['all_count'],2,'.','');
$allcount['discount_amount'] = number_format($allcount['discount_amount'],2,'.','');
$data = my_sort($data, $data_order_type, (int)$data_order);
if(isset($_REQUEST['export'])){
@ -552,7 +562,8 @@ class FinancePromoteController extends AdminController
"balance_coin_count"=>"平台币直充支出",
"bind_coin_count"=>"内充支出",
"inside_cash_count"=>"平台币内充",
"allcount"=>"渠道游戏内充值合计"
"allcount"=>"渠道游戏内充值合计",
"discount_amount"=>"优惠金额",
));
}
@ -603,6 +614,7 @@ class FinancePromoteController extends AdminController
$field= "SUM(CASE WHEN pay_way > 0 THEN pay_amount ELSE 0 END) as cash_count,
SUM(CASE WHEN pay_way = 0 THEN pay_amount ELSE 0 END) as balance_coin_count,
SUM(CASE WHEN pay_way = -1 THEN pay_amount ELSE 0 END) as bind_coin_count,
SUM(discount_amount) as discount_amount,
IFNULL(company_id,0) company_id,company_name,promote_id,promote.account promote_account,develop_type,IFNULL(promote.company_belong,0) company_belong";
$query = SM()
->table("tab_spend s use index(promote_time)")
@ -744,7 +756,8 @@ class FinancePromoteController extends AdminController
"cash_count"=>"游戏现金金额",
"balance_coin_count"=>"平台币直充支出",
"inside_cash_count"=>"内充支出",
"all_cash_count"=>"游戏内充值合计"
"all_cash_count"=>"游戏内充值合计",
"discount_amount"=>"优惠金额",
));
}
@ -763,11 +776,13 @@ class FinancePromoteController extends AdminController
$sumCash = $totalData['cash_count'];
$sumBalance = $totalData['balance_coin_count'];
$sumInside = $totalData['inside_cash_count'];
$sumDiscount = $totalData['discount_amount'];
$sumAll = number_format($sumCash + $sumBalance + $sumInside,2,'.','');
$departments = M('department', 'sys_')->select();
$this->assign('departments', $departments);
$this->assign('sumCash', $sumCash);
$this->assign('sumDiscount', $sumDiscount);
$this->assign('sumBalance', $sumBalance);
$this->assign('sumInside', $sumInside);
$this->assign('sumAll', $sumAll);
@ -864,7 +879,7 @@ class FinancePromoteController extends AdminController
$map['merchant_id'] = $_REQUEST['merchant_id'];
}
$field = "pay_order_number,FROM_UNIXTIME(payed_time) as pay_time,user_account,user_nickname,game_name,sdk_version,promote_account,spend_ip,server_name,game_player_name,pay_amount,cost,pay_way,market_admin_id,merchant_id";
$field = "pay_order_number,FROM_UNIXTIME(payed_time) as pay_time,user_account,user_nickname,game_name,sdk_version,promote_account,spend_ip,server_name,game_player_name,pay_amount,discount_amount,cost,pay_way,market_admin_id,merchant_id";
$group = "";
$order = "pay_time DESC";
if(isset($_REQUEST['export'])){
@ -924,6 +939,7 @@ class FinancePromoteController extends AdminController
"server_name"=>"游戏区服",
"game_player_name"=>"角色名称",
"cost"=>"订单金额",
"discount_amount"=>"折扣",
"pay_amount"=>"实付金额",
"pay_way"=>"充值方式",
"merchant_name"=>"所属商户",
@ -976,6 +992,7 @@ class FinancePromoteController extends AdminController
SUM(CASE WHEN pay_way > 0 THEN pay_amount ELSE 0 END) as cash_count,
SUM(CASE WHEN pay_way = 0 THEN pay_amount ELSE 0 END) as balance_coin_count,
SUM(CASE WHEN pay_way = -1 THEN pay_amount ELSE 0 END) as inside_cash_count,
SUM(discount_amount) as discount_amount,
IFNULL(if(substring_index(substring_index(promote.`chain`,'/',2),'/',-1)='',s.promote_id,substring_index(substring_index(promote.`chain`,'/',2),'/',-1)),0) p_id,
IFNULL(company_name,'{$this->COMPANY_NAME}') company_name,develop_type,IFNULL(promote.company_belong,0) company_belong")
->join('LEFT JOIN tab_game as g ON s.game_id=g.id')
@ -1012,7 +1029,8 @@ class FinancePromoteController extends AdminController
$query = SM("spend","tab_")->alias("s")
->field("SUM(CASE WHEN pay_way > 0 THEN pay_amount ELSE 0 END) as cash_count,
SUM(CASE WHEN pay_way = 0 THEN pay_amount ELSE 0 END) as balance_coin_count,
SUM(CASE WHEN pay_way = -1 THEN pay_amount ELSE 0 END) as inside_cash_count");
SUM(CASE WHEN pay_way = -1 THEN pay_amount ELSE 0 END) as inside_cash_count,
SUM(discount_amount) as discount_amount");
if ($join) {
$query = $query->join('LEFT JOIN tab_game as g ON s.game_id=g.id')
->join('LEFT JOIN tab_partner as p ON g.partner_id=p.id')

@ -789,20 +789,23 @@ AND UNIX_TIMESTAMP(
// 新增用户
/* M('user', 'tab_')
$userMap = $conditions;
if (isset($userMap['promote_id'])) {
$userMap['tab_user.promote_id'] = $userMap['promote_id'];
unset($userMap['promote_id']);
}
$newUsers = M('user', 'tab_')
->field('count(*) count, FROM_UNIXTIME(register_time, "%Y-%m-%d") date')
->where([
'game_id' => ['in', $gameIdRows],
'register_time' => ['between', [$startTime, $endTime]]
])
->join('tab_user_play on tab_user.id = tab_user_play.user_id and tab_user.fgame_id = tab_user_play.game_id', 'left')
->where(array_merge($userMap, ['register_time' => ['between', [$startTime, $endTime]]]))
->group('date')
->select(); */
->select();
$newUsers = M('user_play', 'tab_')
/* $newUsers = M('user_play', 'tab_')
->field('count(DISTINCT user_id) count, FROM_UNIXTIME(create_time, "%Y-%m-%d") date')
->where(array_merge($conditions, ['create_time' => ['between', [$startTime, $endTime]]]))
->group('date')
->select();
->select(); */
$newUsers = index_by_column('date', $newUsers);
// 活跃用户
@ -851,7 +854,7 @@ AND UNIX_TIMESTAMP(
if (I('export', 0) == 1) {
$fields = [
'date' => '日期',
'new_user' => '新增玩家',
'new_user' => '新增账号',
'login_user' => '活跃玩家',
'pay_amount' => '充值金额',
'pay_user' => '付费玩家',

@ -924,12 +924,14 @@ class SpendModel extends Model
SUM(CASE WHEN pay_way > 0 and s.pay_status = 1 and pay_game_status = 1 THEN pay_amount ELSE 0 END) as cash_count,
SUM(CASE WHEN pay_way = 0 and s.pay_status = 1 and pay_game_status = 1 THEN pay_amount ELSE 0 END) as balance_coin_count,
SUM(CASE WHEN pay_way = -1 and s.pay_status = 1 and pay_game_status = 1 THEN pay_amount ELSE 0 END) as inside_cash_count,
SUM(CASE WHEN s.pay_status = 1 and pay_game_status = 0 THEN pay_amount ELSE 0 END) as notice_fail_count");
SUM(CASE WHEN s.pay_status = 1 and pay_game_status = 0 THEN pay_amount ELSE 0 END) as notice_fail_count,
SUM(CASE WHEN s.pay_status = 1 and pay_game_status = 1 THEN discount_amount ELSE 0 END) discount_amount");
$base = [
'cash_count' => "0.00",
'balance_coin_count' => "0.00",
'inside_cash_count' => "0.00",
'notice_fail_count' => "0.00"
'notice_fail_count' => "0.00",
'discount_amount' => "0.00"
];
$records = [];
foreach ($games as $game) {
@ -963,7 +965,8 @@ class SpendModel extends Model
SUM(CASE WHEN pay_way > 0 and s.pay_status = 1 and pay_game_status = 1 THEN pay_amount ELSE 0 END) as cash_count,
SUM(CASE WHEN pay_way = 0 and s.pay_status = 1 and pay_game_status = 1 THEN pay_amount ELSE 0 END) as balance_coin_count,
SUM(CASE WHEN pay_way = -1 and s.pay_status = 1 and pay_game_status = 1 THEN pay_amount ELSE 0 END) as inside_cash_count,
SUM(CASE WHEN s.pay_status = 1 and pay_game_status = 0 THEN pay_amount ELSE 0 END) as notice_fail_count")
SUM(CASE WHEN s.pay_status = 1 and pay_game_status = 0 THEN pay_amount ELSE 0 END) as notice_fail_count,
SUM(CASE WHEN s.pay_status = 1 and pay_game_status = 1 THEN discount_amount ELSE 0 END) discount_amount")
->where(['s.pay_status' => 1])
->where($map)
->find();

@ -0,0 +1,202 @@
<extend name="Public/base" />
<block name="body">
<link rel="stylesheet" href="__CSS__/select2.min.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="__CSS__/admin_table.css" media="all">
<link href="__STATIC__/icons_alibaba/iconfont.css" rel="stylesheet">
<script type="text/javascript" src="__STATIC__/uploadify/jquery.uploadify.min.js"></script>
<script type="text/javascript" src="__STATIC__/provincecityarea/AreaData_min.js"></script>
<script src="__STATIC__/layer/layer.js"></script>
<script type="text/javascript" src="__JS__/select2.min.js"></script>
<style>
.tabcon1711 input.time {
width: 150px;
}
#form .txt_area {
width: 300px;
height: 150px;
}
.tabcon1711 .form_unit {
margin-left: 2px;
}
.tabcon1711 .mustmark {
margin-left:-7px;
}
.list-ratio {
display: table;
}
.list-ratio .li-ratio {
display: flex;
margin-bottom: 20px;
align-items: center;
}
.list-ratio .li-ratio .turnover, .list-ratio .li-ratio .turnover-ratio {
position: relative;
}
.list-ratio .li-ratio .turnover span, .list-ratio .li-ratio .turnover-ratio .error-message {
color: red;
position: absolute;
left: 0;
top: 30px;
white-space: nowrap;
display: none;
}
.iconfont-btn {
cursor: pointer;
}
.iconfont-style {
font-size: 18px;
color: #fff;
border-radius: 4px;
border: 0;
padding: 5px;
margin-left: 10px;
}
.iconfont-selected {
background-color: #0A9AF2;
}
.iconfont-selected:hover {
background-color: #03a9f4;
}
.iconfont-unselected {
background-color: #999;
}
.iconfont-unselected:hover {
background-color: #ababab;
}
</style>
<div class="cf main-place top_nav_list navtab_list">
<h3 class="page_title">{$meta_title}</h3>
<!-- <p class="description_text">说明:此功是创建推广员时所需填写信息</p>-->
</div>
<!-- 标签页导航 -->
<div class="tab-wrap">
<div class="tab-content tabcon1711">
<!-- 表单 -->
<form id="form" action="{:U('save')}" method="post" class="form-horizontal">
<!-- 基础文档模型 -->
<div id="tab1" class="tab-pane in tab1">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="l noticeinfo"><i class="mustmark">*</i>启用状态</td>
<td class="r table_radio">
<span class="form_radio">
<label><input type="radio" name="status" value="1" <?php if (empty($record) || $record['status'] == 1):?>checked<?php endif;?>> 开启</label>
<label><input type="radio" name="status" value="0" <?php if ($record && $record['status'] == 0):?>checked<?php endif;?>> 关闭</label>
</span>
<span class="notice-text">设置该游戏是否开启使用折扣券 公式:需支付金额 = 原价 * 折扣 - 平台币</span>
</td>
</tr>
<tr>
<td class="l"><i class="mustmark">*</i>折扣游戏:</td>
<td class="r">
<select name="base_game_id" id="base_game_id" class="select_gallery">
<option value="">请选择游戏</option>
<?php foreach($baseGames as $baseGame):?>
<option value="<?=$baseGame['id']?>" <?php if($record && $record['base_game_id'] == $baseGame['id']):?>selected<?php endif;?>><?=$baseGame['name']?></option>
<?php endforeach;?>
</select>
<span class="notice-text"></span>
</td>
</tr>
<tr>
<td class="l"><i class="mustmark">*</i>生效时间(开始):</td>
<td class="r">
<input type="text" id="start_time" name="start_time" class="time" value="<?=$record?date('Y-m-d', $record['start_time']):''?>" autocomplete="off" placeholder="请选择生效时间(开始)" style="width: 200px"/>
</td>
</tr>
<tr>
<td class="l">生效时间(结束):</td>
<td class="r">
<input type="text" id="end_time" name="end_time" class="time" value="<?=$record?date('Y-m-d', $record['end_time']):''?>" autocomplete="off" placeholder="请选择生效时间(开始)" style="width: 200px"/>
</td>
</tr>
<tr>
<td class="l">首充折扣:</td>
<td class="r table_radio">
<input type="text" class="txt ratio" style="float: none;" name="first_rate" id="first_rate" value="<?=$record?$record['first_rate']:''?>" placeholder="请输入首充折扣"> &nbsp;
<span class="notice-text" style="float: none;">首次充值使用该折扣,请输入数字,支持小数点后一位,例如: 7.8;默认为空,表示不打折</span>
</td>
</tr>
<tr>
<td class="l">次充折扣:</td>
<td class="r table_radio">
<input type="text" class="txt ratio" style="float: none;" name="second_rate" id="second_rate" value="<?=$record?$record['second_rate']:''?>" placeholder="请输入次充折扣"> &nbsp;
<span class="notice-text" style="float: none;">第二次(包含)充值以后使用该折扣,请输入数字,支持小数点后一位,例如: 7.8;默认为空,表示不打折</span>
</td>
</tr>
</tbody>
</table>
</div>
<input type="hidden" name="id" id="id" value="{$record.id}" />
<div class="form-item cf">
<button class="submit_btn mlspacing" id="submit" type="submit" target-form="form-horizontal">
确认
</button>
<a class="submit_btn " alt="返回上一页" title="返回上一页" href="javascript:window.history.back();" >
返回
</a>
</div>
</form>
</div>
</div>
<div class="common_settings">
<span class="plus_icon"><span><img src="__IMG__/zwmimages/icon_jia.png"></span></span>
<form class="addShortcutIcon">
<input type="hidden" name="title" value="{$m_title}">
<input type="hidden" name="url" value="Promote/lists/type/1">
</form>
<a class="ajax-post add-butn <notempty name='commonset'>addSIsetted</notempty>" href="javascript:;" target-form="addShortcutIcon" url="{:U('Think/addShortcutIcon')}"><img src="__IMG__/zwmimages/icon_jia.png"><span><notempty name='commonset'>已添加<else />添加至常用设置</notempty></span></a>
</div>
</block>
<block name="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 type="text/javascript">
//导航高亮
highlight_subnav("{:U('Discount/records')}");
$(".select_gallery").select2();
$(function(){
$('.time').datetimepicker({
format: 'yyyy-mm-dd',
language: "zh-CN",
autoclose: true,
scrollMonth: false,
scrollTime: false,
scrollInput: false,
startView: 'month',
minView:'month',
maxView:'month',
});
showTab();
$('#submit').click(function (e) {
var target = $('form').get(0).action;
var query = $('form').serialize();
var that = this;
$(that).addClass('disabled').attr('autocomplete','off').prop('disabled',true);
$.post(target,query).success(function(result){
if(layer) { layer.closeAll('loading'); }
if (result.status == 1) {
layer.msg(result.message)
setTimeout(function() {
window.location.href = '{:U("records")}'
}, 200)
} else {
$(that).removeClass('disabled').attr('autocomplete','on').prop('disabled',false);
layer.msg(result.message)
}
});
});
});
</script>
</block>

@ -0,0 +1,261 @@
<extend name="Public/base"/>
<block name="css">
<link rel="stylesheet" href="__CSS__/select2.min.css" type="text/css" />
<link rel="stylesheet" href="__CSS__/promote.css" type="text/css"/>
<script src="__STATIC__/laydate/laydate.js"></script>
<link rel="stylesheet" type="text/css" href="__STATIC__/webuploader/webuploader.css" media="all">
<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;}
.textarea-style {
width: 200px;
height: 80px;
border-radius: 5px;
padding: 5px;
}
.mustmark {
color: #FF0000;
font-style: normal;
margin: 0 3px;
}
.butnbox {
padding: 10px 0 10px;
}
.butnbox .butnlist .butn {
display: inline-block;
width: 120px;
height: 28px;
line-height: 28px;
text-align: center;
color: #FFF;
background: #3C95C8;
border-radius: 3px;
cursor: pointer;
}
.data_list table td .status-0 {
color: #e6a23c;
}
.data_list table td .status-1 {
color: #67c23a;
}
.data_list table td .status-2 {
color: #f56c6c;
}
</style>
</block>
<block name="body">
<script type="text/javascript" src="__JS__/bootstrap.min.js"></script>
<script type="text/javascript" src="__JS__/select2.min.js"></script>
<script type="text/javascript" src="__JS__/jquery.form.js"></script>
<script type="text/javascript" src="__STATIC__/uploadify/jquery.uploadify.min.js"></script>
<script src="__STATIC__/md5.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript" src="__STATIC__/webuploader/webuploader.js"></script>
<script src="__STATIC__/layer/layer.js" type="text/javascript"></script>
<script type="text/javascript" src="__STATIC__/layer/extend/layer.ext.js"></script>
<div class="cf main-place top_nav_list navtab_list">
<h3 class="page_title">游戏折扣</h3>
</div>
<div class="cf top_nav_list" style="height: 38px;">
<!-- 高级搜索 -->
<div class="jssearch cf search_list">
<div class="input-list search-title-box">
<label>搜索:</label>
</div>
<div class="input-list input-list-promote search_label_rehab">
<select id="game_id" name="base_game_id" class="select_gallery" style="width:120px;">
<option value="0">请选择游戏</option>
<?php foreach($baseGames as $baseGame):?>
<option value="<?=$baseGame['id']?>"><?=$baseGame['name']?></option>
<?php endforeach;?>
</select>
</div>
<div class="input-list input-list-promote search_label_rehab">
<input type="text" readonly name="time_start" class="time-select" value="{:I('time_start')}"
placeholder="生效开始时间"/>
-
<div class="input-append date" id="datetimepicker" style="display:inline-block">
<input type="text" readonly name="time_end" class="time-select" value="{:I('time_end')}"
placeholder="生效结束时间"/>
<span class="add-on"><i class="icon-th"></i></span>
</div>
</div>
<div class="input-list input-list-promote search_label_rehab">
<select name="status" class="select_gallery" style="width:120px;">
<option value="-1">请选择开启状态</option>
<?php foreach($statusList as $key => $name):?>
<option value="<?=$key?>">
<?=$name?>
</option>
<?php endforeach;?>
</select>
</div>
<div class="input-list">
<a class="sch-btn" href="javascript:;" id="search" url="{:U('Discount/records')}">搜索</a>
</div>
<!-- <div class="input-list">
<a class="sch-btn" href="{:U('Export/expUser',array_merge(array('id'=>12,),I('get.')))}">导出</a>
</div> -->
</div>
</div>
<div class="butnbox">
<div class="butnlist jscheckbutn" style="margin-left: 2px">
<a class="butn" href="{:U('Discount/addPage')}">新增</a>
</div>
</div>
<!-- 数据列表 -->
<div class="data_list">
<div class="">
<table>
<!-- 表头 -->
<thead>
<tr>
<th>游戏名称</th>
<th>生效时间</th>
<th>失效时间</th>
<th>状态</th>
<th>首充折扣</th>
<th>次充折扣</th>
<th>添加人</th>
<th>添加时间</th>
<th>修改人</th>
<th>修改时间</th>
<th>操作</th>
</tr>
</thead>
<!-- 列表 -->
<tbody>
<empty name ="records">
<td colspan="99" class="text-center">aOh! 暂时还没有内容!</td>
<else />
<volist name="records" id="data">
<tr data-id="<?=$data['id']?>">
<td>{$data.base_game_name}</td>
<td>{$data.start_time}</td>
<td>{$data.end_time}</td>
<td>{$data.status_text} <?php if($data['is_actived']):?>(<span style="color: #67C23A;">生效中</span>)<?php endif;?></td>
<td>{$data.first_rate}</td>
<td>{$data.second_rate}</td>
<td>{$data.create_admin_username}</td>
<td>{$data.create_time}</td>
<td>{$data.update_admin_username}</td>
<td>{$data.update_time}</td>
<td><a href="<?=U('updatePage', ['id' => $data['id']])?>">编辑</a></td>
</tr>
</volist>
</empty>
</tbody>
</table>
</div>
</div>
<div class="page">
<a class="sch-btn export-btn"
href="{:U(CONTROLLER_NAME.'/'.ACTION_NAME,array_merge(['export'=>1],I('get.')))}" target="_blank">导出</a>
{$_page|default=''}
</div>
<div class="common_settings">
<span class="plus_icon"><span><img src="__IMG__/zwmimages/icon_jia.png"></span></span>
<form class="addShortcutIcon">
<input type="hidden" name="title" value="{$m_title}">
<input type="hidden" name="url" value="Query/withdraw">
</form>
<a class="ajax-post add-butn <notempty name='commonset'>addSIsetted</notempty>" href="javascript:;" target-form="addShortcutIcon" url="{:U('Think/addShortcutIcon')}"><img src="__IMG__/zwmimages/icon_jia.png"><span><notempty name='commonset'>已添加<else />添加至常用设置</notempty></span></a>
</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>
<script src="__STATIC__/jquery.cookie.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('Discount/records')}");
$(function(){
// 添加全部选项
if ('all' == "{:I('row', 0)}") {
$("#pagechange").prepend("<option value='all' selected>全部</option>");
} else {
$("#pagechange").prepend("<option value='all'>全部</option>");
}
$('.time-select').each(function(){
laydate.render({
elem: this,
type: 'date'
});
});
//搜索功能
$("#search").click(function(){
var sdate = Date.parse($("input[name='send_time_start']").val()) / 1000;
var edate = Date.parse($("input[name='send_time_end']").val()) / 1000;
if (sdate > edate) {
layer.msg('开始时间必须小于等于结束时间');
return false;
}
if ((edate - sdate) > 2592000) {
layer.msg('时间间隔不能超过31天请重新选择日期');
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();
}
});
function getIds() {
var ids = [];
$('.ids:checked').each(function() {
ids.push($(this).val());
})
return ids;
}
});
$(".export-btn").on("click",function(e){
e.preventDefault();
window.location.href=$(this).attr("href")
})
</script>
</block>

@ -163,7 +163,12 @@
</div>
</div>
<style>
.data_list table th {
height: 24px;
line-height: 24px;
}
</style>
<!-- 数据列表 -->
<div class="data_list">
<div class="">
@ -186,12 +191,15 @@
<th ><div class="tooltip">内充支出<span class="tooltiptext"><span style="margin-left: -10px">玩家用绑币购买游戏道具所产生的金额</span></span></div></th>
<th ><div class="tooltip">游戏内充值合计<span class="tooltiptext"><span style="margin-left: -10px">游戏现金金额+平台币直充支出+平台币内充支出</span></span></div></th>
<th ><div class="tooltip">优惠金额<span class="tooltiptext"><span style="margin-left: -10px">游戏折扣和代金券优惠金额</span></span></div></th>
<th ><div class="tooltip"><span style="color: red">联运通知失败合计</span><span class="tooltiptext"><span style="margin-left: -10px">联运所有通知失败的合计金额</span></span></div></th>
<th ><div class="tooltip">聚合万盟数据<span class="tooltiptext"><span style="margin-left: -10px">聚合平台万盟渠道支付成功且通知成功的金额</span></span></div></th>
<th ><div class="tooltip"><span style="color: red">聚合万盟通知失败</span><span class="tooltiptext"><span style="margin-left: -10px">聚合平台万盟渠道通知失败的订单合计金额</span></span></div></th>
<th ><div class="tooltip"><span style="color: red">聚合平台测试订单</span><span class="tooltiptext"><span style="margin-left: -10px">聚合平台测试订单</span></span></div></th>
<th ><div class="tooltip">聚合其他渠道数据<span class="tooltiptext"><span style="margin-left: -10px">聚合平台其他渠道(不含万盟)支付成功通知成功订单合计</span></span></div></th>
<th ><div class="tooltip"><span style="color: red">聚合其他渠道通知失败订单</span><span class="tooltiptext"><span style="margin-left: -10px">聚合平台其他渠道(不含万盟)<br>通知失败的订单合计金额</span></span></div></th>
<th ><div class="tooltip"><span style="color: red">聚合其他渠道<br/>通知失败订单</span><span class="tooltiptext"><span style="margin-left: -10px">聚合平台其他渠道(不含万盟)<br>通知失败的订单合计金额</span></span></div></th>
<th >操作</th>
</tr>
</thead>
@ -236,6 +244,7 @@
'pay_way'=>-1,
false))}"><if condition="$data.inside_cash_count neq ''">{$data.inside_cash_count}<else/>0</if></td>
<td ><if condition="$data.all_cash_count neq ''">{$data.all_cash_count}<else/>0</if></td>
<td ><if condition="$data.discount_amount neq ''">{$data.discount_amount}<else/>0</if></td>
<td ><span style="color:red;"><if condition="$data.notice_fail_count neq ''">{$data.notice_fail_count}<else/>0</if></span></td>
<td >
<if condition="!IS_SUBSITE">
@ -290,6 +299,7 @@
<td><if condition="$sumBalance neq ''">{$sumBalance}<else/>0</if></td>
<td><if condition="$sumInside neq ''">{$sumInside}<else/>0</if></td>
<td><if condition="$sumAll neq ''">{$sumAll}<else/>0</if></td>
<td><if condition="$sumDiscountAmount neq ''">{$sumDiscountAmount}<else/>0</if></td>
<td><span style="color: red"><if condition="$sumNoticeFail neq ''">{$sumNoticeFail}<else/>0</if></span></td>
<td>{$aggWmTotal}</td>
<td><span style="color: red"><if condition="$aggWmFailTotal neq ''">{$aggWmFailTotal}<else/>0</if></span></td>

@ -137,6 +137,8 @@
<th >订单金额</th>
<th >折扣</th>
<th >实付金额</th>
<th >充值方式</th>
@ -169,6 +171,7 @@
<td >{$data.server_name}</td>
<td >{$data.game_player_name}</td>
<td >{$data.cost}</td>
<td >{$data.discount_amount}</td>
<td >{$data.pay_amount}</td>
<td >{$data.pay_way}</td>
<td >{$data.merchant_name}</td>

@ -219,6 +219,8 @@
<th ><div class="tooltip">游戏内充值合计<span class="tooltiptext"><span style="margin-left: -10px">游戏现金金额+平台币直充支出+平台币内充支出</span></span></div></th>
<th ><div class="tooltip">优惠金额<span class="tooltiptext"><span style="margin-left: -10px">游戏折扣和代金券优惠金额</span></span></div></th>
<th >操作</th>
</tr>
</thead>
@ -251,6 +253,7 @@
{$data.inside_cash_count}
</td>
<td >{$data.all_cash_count}</td>
<td >{$data.discount_amount}</td>
<td >
<a href="{:U('FinancePromote/gameStatisticsDetail',array_merge(I('get.'),['game_id'=>$data['game_id'],'promote_id'=>$data['p_id'],'game_name'=>$data['game_name'],'promote_level'=>$promote_level,'p'=>1,'row'=>10]))}" >订单查看</a>
</td>
@ -262,6 +265,7 @@
<td><if condition="$sumBalance neq ''">{$sumBalance}<else/>0</if></td>
<td><if condition="$sumInside neq ''">{$sumInside}<else/>0</if></td>
<td><if condition="$sumAll neq ''">{$sumAll}<else/>0</if></td>
<td><if condition="$sumDiscount neq ''">{$sumDiscount}<else/>0</if></td>
<td>
<a href="{:U('FinancePromote/gameStatisticsDetail',array_merge(I('get.'),['promote_level'=>1,'p'=>1,'row'=>10]))}" >订单查看</a>
</td>

@ -200,6 +200,8 @@
<th >角色名称</th>
<th >订单金额</th>
<th >折扣</th>
<th >实付金额</th>
@ -235,6 +237,7 @@
<td >{$data.server_name}</td>
<td >{$data.game_player_name}</td>
<td >{$data.cost}</td>
<td >{$data.discount_amount}</td>
<td >{$data.pay_amount}</td>
<td >{$data.pay_way}</td>
<td >{$data.merchant_name}</td>
@ -242,7 +245,7 @@
</volist>
<tr>
<td ><span>总计</span></td>
<td colspan="14" ><span><if condition="$sumAll neq ''">累计充值:{$sumAll}<else/>0</if>
<td colspan="99" ><span><if condition="$sumAll neq ''">累计充值:{$sumAll}<else/>0</if>
(现金金额:{$sumCash} 平台币:{$sumBalance} 绑币:{$sumInside}
</span></td>
</tr>

@ -248,9 +248,9 @@
<else />平台币内充<img src="__IMG__/up-down.png" width="13px">
</if>
</a> <span class="tooltiptext">管理后台直接下放给会长的平台币,因存在平台币回收,所以可能会存在负值</span> </th>
<th class="tooltip">渠道游戏内充值合计 <span class="tooltiptext">游戏现金金额(游戏现金流水+平台币支出+公会内充支出=总流水)</span>
<th class="tooltip">渠道游戏内不结算充值合计 <span class="tooltiptext">游戏现金金额(游戏不结算现金流水)</span>
</th>
<th class="tooltip">渠道游戏内充值合计 <span class="tooltiptext">游戏现金金额(游戏现金流水+平台币支出+公会内充支出=总流水)</span></th>
<th class="tooltip">渠道游戏内不结算充值合计 <span class="tooltiptext">游戏现金金额(游戏不结算现金流水)</span></th>
<th class="tooltip">优惠金额 <span class="tooltiptext">游戏折扣和代金券优惠金额</span></th>
<if condition="!IS_SUBSITE">
<th>操作</th>
</if>
@ -295,7 +295,7 @@
data-value="{$data['id']}"><a>{$data.inside_cash_count}</a></span></td> -->
<td>{$data.allcount}</td>
<td style="color: red;">{$data.unallcount}</td>
<td style="color: red;">{$data.discount_amount}</td>
<if condition="!IS_SUBSITE">
<td>
<a
@ -321,6 +321,7 @@
<td style="text-align: center;">{$all_count['inside_cash_count']}</td>
<td style="text-align: center;">{$all_count['all_count']}</td>
<td style="text-align: center;color: red;">{$all_count['unallcount']}</td>
<td style="text-align: center;color: red;">{$all_count['discount_amount']}</td>
<if condition="!IS_SUBSITE">
<td style="text-align: center;">
<a

@ -224,6 +224,7 @@
</if>
</a> <span class="tooltiptext">管理后台直接下放给会长的平台币,因存在平台币回收,所以可能会存在负值</span> </th>
<th class="tooltip">渠道游戏内充值合计 <span class="tooltiptext">游戏现金金额(游戏现金流水+平台币支出+公会内充支出=总流水</span> </th>
<th class="tooltip">优惠金额 <span class="tooltiptext">游戏折扣和代金券优惠金额</span> </th>
<th>操作</th>
</tr>
</thead>
@ -245,7 +246,7 @@
<td>{$data.bind_coin_count}</td>
<td>{$data.inside_cash_count}</td>
<td>{$data.allcount}</td>
<td>{$data.discount_amount}</td>
<td>
<a href="{:U('FinancePromote/gameStatistics',array_merge(I('get.'),['promote_id'=>$data['promote_id'],'company_id'=>$data['company_id'],'promote_type'=>2,'p'=>1]))}" >游戏查看</a>
@ -261,6 +262,7 @@
<td style="text-align: center;">{$all_count['bind_coin_count']}</td>
<td style="text-align: center;">{$all_count['inside_cash_count']}</td>
<td style="text-align: center;">{$all_count['all_count']}</td>
<td style="text-align: center;">{$all_count['discount_amount']}</td>
<td style="text-align: center;">
<!-- <a href="{:U('FinancePromote/gameStatistics',array_merge(['promote_id'=>$data['p_id'],'company_id'=>$data['company_id'],'promote_type'=>2],I('get.')))}" >游戏查看</a> -->
</td>

@ -120,7 +120,7 @@
<th>渠道来源</th>
<?php endif;?>
<th>游戏名称</th>
<th>新增人数</th>
<th>新增账号</th>
<th>活跃人数</th>
<th>新增玩家付费</th>
<th>本日累计付费</th>

@ -268,6 +268,7 @@
<th>角色ID</th>
<th>角色名称</th>
<th>订单金额</th>
<th>折扣</th>
<th><a class="paixu" data-order='pay_amount'>
实付金额
@ -353,6 +354,7 @@
<td>{$data.game_player_name}</td>
</empty>
<td>{$data.cost|default=0.00}</td>
<td>{$data.discount_amount|default=0.00}</td>
<td><span>{$data.pay_amount}</span></td>
<td>{:get_pay_way($data['pay_way'])}</td>
<td>

@ -151,7 +151,7 @@
<tr>
<th ><a class="paixu" data-order='date'><if condition="$order eq 4 and $orderType eq 'date'">日期▲<elseif condition="$order eq 3 and $orderType eq 'date'"/>日期▼<else />日期<img src="__IMG__/up-down.png" width="13px"></if></a></th>
<th ><a class="paixu" data-order='new_user'><if condition="$order eq 4 and $orderType eq 'new_user'">新增玩家<elseif condition="$order eq 3 and $orderType eq 'new_user'"/>新增玩家▼<else />新增玩家<img src="__IMG__/up-down.png" width="13px"></if></a></th>
<th ><a class="paixu" data-order='new_user'><if condition="$order eq 4 and $orderType eq 'new_user'">新增账号<elseif condition="$order eq 3 and $orderType eq 'new_user'"/>新增账号▼<else />新增账号<img src="__IMG__/up-down.png" width="13px"></if></a></th>
<th ><a class="paixu" data-order='login_user'><if condition="$order eq 4 and $orderType eq 'login_user'">活跃玩家▲<elseif condition="$order eq 3 and $orderType eq 'login_user'"/>活跃玩家▼<else />活跃玩家<img src="__IMG__/up-down.png" width="13px"></if></a></th>

@ -0,0 +1,113 @@
<?php
namespace Base\Service;
class DiscountService
{
const FOREVER_TIME = 4102444800;
public function save($params, $admin = null)
{
$id = $params['id'] ?? 0;
$baseGame = M('base_game', 'tab_')->where(['id' => $params['base_game_id']])->find();
$data = [
'base_game_id' => $params['base_game_id'],
'base_game_name' => $baseGame['name'],
'start_time' => strtotime($params['start_time'] . ' 00:00:00'),
'end_time' => empty($params['end_time']) ? self::FOREVER_TIME : strtotime($params['end_time'] . ' 23:59:59'),
'first_rate' => $params['first_rate'],
'second_rate' => $params['second_rate'],
'status' => $params['status'],
];
$data['update_time'] = time();
$data['update_admin_id'] = $admin ? $admin['uid'] : 0;
$data['update_admin_username'] = $admin ? $admin['username'] : '';
if ($id > 0) {
M('game_discount', 'tab_')->where(['id' => $id])->save($data);
} else {
$data['create_time'] = time();
$data['create_admin_id'] = $admin ? $admin['uid'] : 0;
$data['create_admin_username'] = $admin ? $admin['username'] : '';
M('game_discount', 'tab_')->add($data);
}
}
public function check($params)
{
$id = $params['id'] ?? 0;
if (empty($params['base_game_id'])) {
throw new \Exception('请选择游戏');
}
if (empty($params['start_time'])) {
throw new \Exception('请选择生效时间');
}
if (empty($params['base_game_id'])) {
throw new \Exception('请选择游戏');
}
$startTime = strtotime($params['start_time'] . ' 00:00:00');
$endTime = empty($params['end_time']) ? self::FOREVER_TIME : strtotime($params['end_time'] . ' 23:59:59');
if ($endTime < $startTime) {
throw new \Exception('生效开始时间不能大于结束时间');
}
$firstRate = $params['first_rate'] ?? 0;
$secondRate = $params['second_rate'] ?? 0;
// /^[0-9]+(.[0-9]{1,2})?$/
if (!preg_match('/^[0-9]+(.[0-9]{1})?$/', $firstRate)) {
throw new \Exception('首充折扣为大于等于0的整数或者一位小数');
}
if (!preg_match('/^[0-9]+(.[0-9]{1})?$/', $secondRate)) {
throw new \Exception('次充折扣为大于等于0的整数或者一位小数');
}
if ($id > 0) {
$record = M('game_discount', 'tab_')->where(['id' => $id])->find();
if ($record['end_time'] < time()) {
throw new \Exception('生效时间已过,不可修改');
}
if ($record['start_time'] < time()) {
if ($record['base_game_id'] != $params['base_game_id']) {
throw new \Exception('已生效不能修改游戏');
}
if (intval($firstRate * 10) != intval($record['first_rate'] * 10)) {
throw new \Exception('已生效不能修改首充折扣');
}
if (intval($secondRate * 10) != intval($record['second_rate'] * 10)) {
throw new \Exception('已生效不能修改次充折扣');
}
}
}
$map = [];
$map['base_game_id'] = $params['base_game_id'];
$map['_string'] = 'NOT (end_time < ' . $startTime . ' OR start_time > ' . $endTime . ')';
if ($id > 0) {
$map['_string'] .= ' and id<>' . $id;
}
$item = M('game_discount', 'tab_')->where($map)->limit(1)->find();
if ($item) {
throw new \Exception('该游戏在相同时间区间已存在打折规则');
}
}
public function delete($id)
{
M('game_discount', 'tab_')->where(['id' => $id])->delete();
}
public function isActived($record)
{
if ($record['status'] == 0) {
return false;
}
if ($record['start_time'] <= time() && $record['end_time'] >= time()) {
return true;
}
return false;
}
}

@ -0,0 +1,7 @@
<?php
namespace Base\Service;
class VoucherService
{
}

@ -4568,6 +4568,8 @@ public function iosDetailExcelInfo($id,$map) {
'玩家账号',
'游戏订单',
'订单金额',
'折扣金额',
'实付金额',
'支付方式',
'充值状态',
'游戏名称',
@ -4673,6 +4675,8 @@ public function iosDetailExcelInfo($id,$map) {
$csvData["user_account"] = $value1["user_account"];
$csvData["pay_order_number"] = $value1["pay_order_number"];
$csvData["cost"] = $value1["cost"];
$csvData["discount_amount"] = $value1["discount_amount"];
$csvData["pay_amount"] = $value1["pay_amount"];
$csvData["pay_way"] = $value1["pay_way"];
$csvData['pay_status'] = $value1['pay_status'];
@ -4693,17 +4697,18 @@ public function iosDetailExcelInfo($id,$map) {
ob_flush();
flush();
}
$income = '0.00';
$income = M('Spend', 'tab_')
->field('sum(tab_spend.pay_amount) as income')
$aggregation = M('Spend', 'tab_')
->field('sum(tab_spend.cost) as cost, sum(tab_spend.pay_amount) as pay_amount, sum(tab_spend.discount_amount) as discount_amount')
->join('tab_game on tab_spend.game_id = tab_game.id')
->join('left join tab_promote on tab_spend.promote_id = tab_promote.id')
->where($map)
->order('tab_spend.id desc')
->find()['income'];
->find();
$csvData1["user_account"] = "合计";
$csvData1["pay_order_number"] = "--";
$csvData1["pay_amount"] = $income;
$csvData1["cost"] = $aggregation['cost'];
$csvData1["discount_amount"] = $aggregation['discount_amount'];
$csvData1["pay_amount"] = $aggregation['pay_amount'];
$csvData1["pay_way"] = "--";
$csvData1['pay_status'] = "--";
$csvData1["game_name"] = "--";

@ -141,7 +141,11 @@ class QueryController extends BaseController
$data = [];
$count = 0;
$income = '0.00';
$aggregation = [
'cost' => '0.00',
'pay_amount' => '0.00',
'discount_amount' => '0.00',
];
if (intval($endTime - $begTime) / (24 * 3600) <= 31
|| intval($payedEndTime - $payedBegTime) / (24 * 3600) <= 31) {
$data = M('Spend', 'tab_')
@ -158,13 +162,13 @@ class QueryController extends BaseController
->where($map)
->count();
$income = M('Spend', 'tab_')
->field('sum(tab_spend.pay_amount) as income')
$aggregation = M('Spend', 'tab_')
->field('sum(tab_spend.cost) as cost, sum(tab_spend.pay_amount) as pay_amount, sum(tab_spend.discount_amount) as discount_amount')
->join('tab_game on tab_spend.game_id = tab_game.id')
->join('left join tab_promote on tab_spend.promote_id = tab_promote.id')
->where($map)
->order('tab_spend.id desc')
->find()['income'];
->find();
}
if (!empty($data)) {
$promoteIdData = [];
@ -263,7 +267,7 @@ class QueryController extends BaseController
}
$this->assign('listData', $data);
$this->assign('count', $count);
$this->assign('income', $income);
$this->assign('aggregation', $aggregation);
$this->assign('initBegTime', $initBegTime);
$this->assign('initEndTime', $initEndTime);
$this->assign('payedBegTime', I("payed_begtime", ''));

@ -195,6 +195,8 @@
<th>支付方式</th>
<th>充值状态</th>
<th>订单金额</th>
<th>折扣金额</th>
<th>实付金额</th>
<th>游戏名称</th>
<th>设备类型</th>
<th>区服</th>
@ -220,6 +222,8 @@
<td>{$vo.pay_order_number}</td>
<td>{:get_pay_way($vo['pay_way'])}</td>
<td>{$vo.pay_status}</td>
<td>{$vo.cost}</td>
<td>{$vo.discount_amount}</td>
<td>{$vo.pay_amount}</td>
<td>{$vo.game_name}</td>
<td>{$vo.sdk_version}</td>
@ -241,7 +245,9 @@
<td>--</td>
<td>--</td>
<td>--</td>
<td>{$income}</td>
<td>{$aggregation.cost}</td>
<td>{$aggregation.discount_amount}</td>
<td>{$aggregation.pay_amount}</td>
<td>--</td>
<td>--</td>
<td>--</td>

Loading…
Cancel
Save