Merge branch 'master' into feature/qrcode_promotion

master
张谷成 4 years ago
commit cdae3f3fea

@ -1501,7 +1501,7 @@ function cash_pay_way()
function getMonth() {
$start = date("Y-m", strtotime("now"));
//开始月份
$range = [];
$range = [$start];
$i = 1;
do {
$month = date('Y-m', strtotime($start . ' - ' . $i . ' month'));
@ -1684,7 +1684,9 @@ function getPowerPromoteIds()
if (in_array('-1',explode(',',$userAuth['data_president']))) {
$promoteIds = $promoteIds .',0';
}
// var_dump($promoteIds);die();
if(!$promoteIds){
$promoteIds = "-1";
}
session('user_auth_promote_ids', $promoteIds);
return $promoteIds;
}
@ -2932,8 +2934,9 @@ function getSearchAdminIds($searchAdminParam = 'admin_id', $searchDepartmentPara
}
if (is_null($adminIds) && isset($_REQUEST[$searchDepartmentParam])) {
$admins = getMarketAdmin($_REQUEST[$searchDepartmentParam]);
$adminIds = count($admins) ? array_column($admins, 'uid') : [-1];
$groupIds = explode(',', A("Market","Event")->getMarketGroupId($_REQUEST[$searchDepartmentParam]));
$adminIds = M("auth_group_access")->where(['group_id' => ['in', $groupIds]])->getField('uid', true);
$adminIds = count($adminIds) ? $adminIds : [-1];
}
return $adminIds;

@ -49,7 +49,7 @@ class AdminController extends Controller {
if ( false === $access ) {
$this->error('403:禁止访问');
}elseif(null === $access ){
$access_controller = ['Ajax', 'Finance', 'FinancePromote', 'PayChannel','FinanceCompare',"AggregateFinanceStatement","SubUserStatement","GameMargin"];
$access_controller = ['Ajax', 'Finance', 'FinancePromote', 'PayChannel','FinanceCompare',"AggregateFinanceStatement","SubUserStatement","GameMargin",'StatementWarning'];
if(!in_array(CONTROLLER_NAME, $access_controller)){//ajax放行
//检测访问权限
$rule = strtolower(MODULE_NAME.'/'.CONTROLLER_NAME.'/'.ACTION_NAME);

@ -71,10 +71,22 @@ class ConsoleController extends Think {
public function runShiftTask()
{
$promoteService = new PromoteService();
$tasks = M('shift_task', 'sys_')->where(['status' => 0, 'order_time' => ['elt', time()]])->select();
if (count($tasks) == 0) {
Printer::export('无可执行任务', true);
$replenishTasks = M('shift_task', 'sys_')
->where(['status' => 1, 'order_time' => ['elt', time()], 'handle_time' => ['egt', time() - 3600], 'is_replenished' => 0, 'type' => 2])
->select();
foreach ($replenishTasks as $replenishTask) {
$message = '玩家补充迁移[' . $replenishTask['id'] . ']';
$result = $promoteService->replenishShift($replenishTask);
if ($result['status']) {
$message = 'SUCCESS ----- ' . $message . $result['msg'];
} else {
$message = 'ERROR ----- ' . $message . $result['msg'];
}
Printer::export($message);
}
$tasks = M('shift_task', 'sys_')->where(['status' => 0, 'order_time' => ['elt', time()]])->select();
foreach ($tasks as $task) {
if ($task['type'] == 1) {
$message = '推广员迁移[' . $task['id'] . ']';

@ -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');
}
}

@ -1162,16 +1162,10 @@ class ExportController extends Controller
unset($_REQUEST['pay_game_status']);
}
$marketAdminId = I('market_admin_id', 0);
if ($marketAdminId) {
$map['market_admin_id'] = $marketAdminId;
}
$isMarketAdmin = isMarketAdmin();
if ($isMarketAdmin) {
$userAuth = session('user_auth');
$map['market_admin_id'] = $userAuth['uid'];
}
$marketAdminIds = getSearchAdminIds('market_admin_id');
if (is_array($marketAdminIds)) {
$map['market_admin_id'] = ['in', $marketAdminIds];
}
setPowerPromoteIds($map,'promote_id');
@ -1231,6 +1225,7 @@ class ExportController extends Controller
'game_id' => '所属CP',
'promote_account' => L('Subordinate_channel'),
'0 as company_name' => '所属推广公司',
'1 as admin_department' => '所属市场部',
'market_admin_id' => '所属市场专员',
'merchant_id' => '所属商户',
'spend_ip' => '充值ip',
@ -1239,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'),
@ -1305,8 +1301,10 @@ class ExportController extends Controller
->limit(($i-1)*$perSize ,$perSize)
->order($order ? $order : 'pay_time desc')
->select();
$adminIds = array_column($xlsData, 'market_admin_id');
$adminDepartments = getAdminDepartmentList($adminIds);
if ($showMarketAdmin == 1) {
$adminUsernameList = getAdminUsernameList(array_column($xlsData, 'market_admin_id'));
$adminUsernameList = getAdminUsernameList($adminIds);
}
$promoters = D('Promote')->where(['id'=>['in', array_unique(array_column($xlsData, 'promote_id'))]])->field('id, company_id')->select();
$promoters = $promoters ? array_column($promoters, 'company_id', 'id') : [];
@ -1341,6 +1339,7 @@ class ExportController extends Controller
$value['pay_way'] = get_pay_way($value['pay_way']);
$value['pay_status'] = get_info_status($value['pay_status'],9);
$value['pay_game_status'] = get_info_status($value['pay_game_status'],14);
$value['admin_department'] = $adminDepartments[$value['market_admin_id']] ?? '无';
if ($showMarketAdmin == 1) {
$value['market_admin_id'] = $adminUsernameList[$value['market_admin_id']] ?? '无';
}

@ -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')

@ -83,10 +83,10 @@ class GameRebateController extends ThinkController
$records = [];
if (I('export', 0) == 1 || $row == 'all') {
$records = $query->select();
$records = $query->order('create_time desc')->select();
} else {
$countQuery = clone $query;
$records = $query->page($page, $row)->select();
$records = $query->order('create_time desc')->page($page, $row)->select();
$count = $countQuery->count();
}

@ -68,36 +68,13 @@ class MarketPercentageController extends ThinkController
$_REQUEST['promote_id'] ? ($map['promote_id'] = $_REQUEST['promote_id']) : '';
$_REQUEST['relation_game_id'] ? ($map['relation_game_id'] = $_REQUEST['relation_game_id']) : '';
// $_REQUEST['sdk_version']?($map['sdk_version'] = $_REQUEST['sdk_version']):'';
$_REQUEST['admin_id'] ? ($map['admin_id'] = $_REQUEST['admin_id']) : '';
$_REQUEST['admin_id'] ? ($map['_string'] .= " AND admin_id = {$_REQUEST['admin_id']}") : '';
($_REQUEST['company_id'] || $_REQUEST['company_id'] == '0') ? ($map['company_id'] = $_REQUEST['company_id']) : '';
$admin_id = $_SESSION['onethink_admin']['user_auth']['uid'];
$gid = session('user_group_id');
$markerGroup = $this->MarketEvent->isMarketAdminGroup($gid);
if($markerGroup){
$map['department_id'] =["in",[0,$markerGroup['department_id']]];
if( !$this->MarketEvent->isDepartmentLeder($markerGroup['department_id'],$admin_id)){
$map['admin_id'] = $admin_id ;
}
if($this->MarketEvent->getConfig('isMarket')){
$map['admin_id'] = ['in',$this->MarketEvent->getAdminidByLeaderid()] ;
}
// dd($map);
// $map['admin_id'] = $admin_id;
// if (is_administrator() || session('user_group_id') == 15 || session('user_group_id') == 14 || session('user_group_id') == 19 || session('user_group_id') == 23) {
// unset($map['admin_id']);
// $admin_data = M("member")
// ->field("access.uid admin_id")
// ->join("left join sys_auth_group_access access on sys_member.uid = access.uid")
// ->join("left join sys_auth_group auth on access.group_id=auth.id")
// ->where(['group_id' => ['in', '11,12,21,25']])
// ->select();
// if ($admin_data) {
// $map['admin_id'] = ['in', array_column($admin_data, 'admin_id')];
// }
// $_REQUEST['admin_id'] ? ($map['admin_id'] = $_REQUEST['admin_id']) : '';
// }
$search_date = [];
if (isset($_REQUEST['time_start']) && isset($_REQUEST['time_end'])) {
@ -281,30 +258,20 @@ class MarketPercentageController extends ThinkController
public function indexuncaculate($row = 10, $p = 1)
{
$map = [];
$map = [
"_string"=>'1=1',
"is_settlement"=>0
];
// $_REQUEST['pay_time']?($map['pay_time'] = $_REQUEST['pay_time']):'';
$_REQUEST['promote_id'] ? ($map['promote_id'] = $_REQUEST['promote_id']) : '';
$_REQUEST['relation_game_id'] ? ($map['relation_game_id'] = $_REQUEST['relation_game_id']) : '';
$_REQUEST['sdk_version'] ? ($map['sdk_version'] = $_REQUEST['sdk_version']) : '';
$_REQUEST['admin_id'] ? ($map['admin_id'] = $_REQUEST['admin_id']) : '';
$_REQUEST['admin_id'] ? ($map['_string'] .= " AND admin_id = {$_REQUEST['admin_id']}") : '';
($_REQUEST['company_id'] || $_REQUEST['company_id'] == '0') ? ($map['company_id'] = $_REQUEST['company_id']) : '';
$admin_id = $_SESSION['onethink_admin']['user_auth']['uid'];
$map['admin_id'] = $admin_id;
$map['is_settlement'] = 0;
if (is_administrator() || session('user_group_id') == 15 || session('user_group_id') == 14 || session('user_group_id') == 19 || session('user_group_id') == 23) {
unset($map['admin_id']);
$admin_data = M("member")
->field("access.uid admin_id")
->join("left join sys_auth_group_access access on sys_member.uid = access.uid")
->join("left join sys_auth_group auth on access.group_id=auth.id")
->where(['group_id' => ['in', '11,12,21']])
->select();
if ($admin_data) {
$map['admin_id'] = ['in', array_column($admin_data, 'admin_id')];
}
$_REQUEST['admin_id'] ? ($map['admin_id'] = $_REQUEST['admin_id']) : '';
if($this->MarketEvent->getConfig('isMarket')){
$map['admin_id'] = ['in',$this->MarketEvent->getAdminidByLeaderid()] ;
}
$search_date = [];
@ -479,7 +446,7 @@ class MarketPercentageController extends ThinkController
}
$data = M("auth_group")
->where(['title' => ['like', '%市场专员%']])
->where(['department_id' => ['in', $this->MarketEvent->getConfig('MarketDepartmentId')]])
->select(false);
$member = M("auth_group_access")
@ -616,18 +583,17 @@ class MarketPercentageController extends ThinkController
} else {
$map['id'] =['in',A("Market","Event")->getNoLeaderMarketGroupId()];
$data = M("auth_group")
->where($map)
->select(false);
$map['sys_auth_group_access.uid'] =['in',$this->MarketEvent->getAdminidByLeaderid()];
$map['auth.id'] =['in',$this->MarketEvent->getNoLeaderMarketGroupId()];
$data = M("auth_group_access")
->field("sys_member.nickname,sys_member.real_name,sys_member.uid,sys_auth_group_access.group_id,IF(coefficient is not NULL, coefficient, 100) coefficient,sys_ucenter_member.leave_time")
->join("left join ({$data}) auth on auth.id = sys_auth_group_access.group_id")
->join("left join sys_auth_group auth on auth.id = sys_auth_group_access.group_id")
->join("left join sys_member on sys_member.uid = sys_auth_group_access.uid")
->join("left join sys_ucenter_member on sys_member.uid = sys_ucenter_member.id")
->join("left join tab_coefficient on tab_coefficient.admin_id = sys_member.uid and pay_time='{$pay_time}'")
->where("auth.title is not null")
->where($map)
->select();
$hideTime = strtotime(date('Y-m-01') . " - 1 month")-1;
foreach ($data as &$v) {
@ -652,23 +618,12 @@ class MarketPercentageController extends ThinkController
//获取权限
$marketPercentage = M("auth_group")->where($map)->getField("id,market_percentage");
$_REQUEST['admin_id'] ? ($map['admin_id'] = $_REQUEST['admin_id']) : '';
$_REQUEST['level'] ? ($map['level'] = $_REQUEST['level']) : '';
$admin_id = $_SESSION['onethink_admin']['user_auth']['uid'];
$gid = session('user_group_id');
$markerGroup = $this->MarketEvent->isMarketAdminGroup($gid);
if($markerGroup){
if( $this->MarketEvent->isDepartmentLeder($markerGroup['department_id'],$admin_id)){
$map['admin_id'] = ['in',$this->MarketEvent->getDepartmentUserId($markerGroup['department_id'])];
}else{
$map['admin_id'] = $admin_id ;
}
}
$_REQUEST['admin_id'] ? ($map['_string'] .= " AND admin_id = {$_REQUEST['admin_id']}") : '';
if($this->MarketEvent->getConfig('isMarket')){
$map['admin_id'] = ['in',$this->MarketEvent->getAdminidByLeaderid()] ;
}
$search_date = [];
if (isset($_REQUEST['time_start']) && isset($_REQUEST['time_end'])) {
@ -1036,17 +991,10 @@ class MarketPercentageController extends ThinkController
}
}
$admin_id = $_SESSION['onethink_admin']['user_auth']['uid'];
$gid = session('user_group_id');
$markerGroup = $this->MarketEvent->isMarketAdminGroup($gid);
if($markerGroup){
if( $this->MarketEvent->isDepartmentLeder($markerGroup['department_id'],$admin_id)){
$map['admin_id'] = ['in',$this->MarketEvent->getDepartmentUserId($markerGroup['department_id'])];
}else{
$map['admin_id'] = $admin_id ;
}
}
$_REQUEST['admin_id'] ? ($map['_string'] .= " AND admin_id = {$_REQUEST['admin_id']}") : '';
if($this->MarketEvent->getConfig('isMarket')){
$map['admin_id'] = ['in',$this->MarketEvent->getAdminidByLeaderid()] ;
}
$search_date = [];

@ -15,68 +15,27 @@ class OldCountController extends \Think\Controller
public function moreDepartment()
{
//1.新增组
$manager = M('auth_group','sys_')->where("title = '高级市场专员'")->find();
$dbres = M('auth_group','sys_')->where("title LIKE '%市场%' AND id != 18")->select();
$dbres = M('auth_group','sys_')->where("department_id = 2 and department_level != 5")->select();
// $ids = '32,33,34,35';
$ids = '';
foreach ($dbres as &$v) {
if($v['id'] == 25){
$v['rules'] = $manager['rules'];
$v['data_empower_type'] =3;
$v['show_data'] =1;
$v['show_market_admin'] =1;
$v['show_promote'] =1;
}
if(mb_strpos($v['title'],"初级")){
$v['department_level'] = 1;
}
if(mb_strpos($v['title'],"中级")){
$v['department_level'] = 2;
}
if(mb_strpos($v['title'],"高级")){
$v['department_level'] = 3;
}
if(mb_strpos($v['title'],"经理")){
$v['department_level'] = 4;
}
if(mb_strpos($v['title'],"总监")){
$v['department_level'] = 5;
}
$v['title'] = "一部".$v['title'];
$v['department_id'] = 1;
$v['department_name'] = "市场一部";
M('auth_group','sys_')->save($v);
unset($v['id']);
$v['title'] = str_replace("一部","二部",$v['title']);
$v['department_id'] = 2;
$v['department_name'] = '市场二部';
M('auth_group','sys_')->add($v);
$v['title'] = str_replace("二部","长沙",$v['title']);
$v['department_id'] = 3;
$v['department_name'] = '长沙分部';
$ids .= ( M('auth_group','sys_')->add($v) . ",");
}
$ids = rtrim($ids,',');
//3.增加部门表数据
M("department")->add([
'id'=>1,
'name'=>'市场一部',
'group_ids'=>'11,12,14,21,25',
'id'=>3,
'name'=>'长沙分部',
'group_ids'=>$ids,
'leader_group'=>'14',
'create_time'=>time(),
'update_time'=>time()
]);
M("department")->add([
'id'=>2,
'name'=>'市场二部',
'group_ids'=>'26,27,28,29,30',
'leader_group'=>'28',
'create_time'=>time(),
'update_time'=>time()
]);
//4.修改旧等级
M("market_altogether","tab_")->where("level = 21")->save(['level'=>1]);
M("market_altogether","tab_")->where("level = 11")->save(['level'=>2]);
M("market_altogether","tab_")->where("level = 12")->save(['level'=>3]);
M("market_altogether","tab_")->where("level = 25")->save(['level'=>4]);
}
public function setDataPresidentInit()

@ -98,16 +98,12 @@ class SpendController extends ThinkController
}
}
$marketAdminId = 0;
$isMarketAdmin = isMarketAdmin();
if ($isMarketAdmin) {
$userAuth = session('user_auth');
$marketAdminId = $userAuth['uid'];
} else {
$marketAdminId = I('market_admin_id', 0);
}
if ($marketAdminId > 0) {
$map['market_admin_id'] = $marketAdminId;
$isMarketLeader = isMarketLeader();
$marketAdminIds = getSearchAdminIds('market_admin_id');
if (is_array($marketAdminIds)) {
$map['market_admin_id'] = ['in', $marketAdminIds];
}
setPowerPromoteIds($map,'promote_id');
@ -146,10 +142,13 @@ class SpendController extends ThinkController
$data = D(self::model_name)->lists($_GET["p"], $map, $order);
if (!empty($data['data'])) {
$adminUsernameList = getAdminUsernameList(array_column($data['data'], 'market_admin_id'));
$adminIds = array_column($data['data'], 'market_admin_id');
$adminUsernameList = getAdminUsernameList($adminIds);
$adminDepartments = getAdminDepartmentList($adminIds);
foreach ($data['data'] as $key=>&$value) {
($value['promote_account']=='官方渠道')?($value['promote_account']=C('OFFICIEL_CHANNEL')):'';
$value['market_admin_username'] = $adminUsernameList[$value['market_admin_id']] ?? '无';
$value['admin_department'] = $adminDepartments[$value['market_admin_id']] ?? '无';
$value['is_check_str'] = D(self::model_name)::IsCheckStr[$value['is_check']];
$value['is_refund_str'] = D(self::model_name)::IsRefundStr[$value['is_refund']];
//拆分游戏名称和设备类型
@ -159,6 +158,10 @@ class SpendController extends ThinkController
}
}
$departments = M('department', 'sys_')->select();
$this->assign('departments', $departments);
$this->assign('isMarketLeader', $isMarketLeader);
$this->assign('showMarketAdmin', session('user_auth')['show_market_admin']);
$this->assign('showPromote', session('user_auth')['show_promote']);
$this->assign('isMarketAdmin', $isMarketAdmin);

@ -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' => '付费玩家',

@ -0,0 +1,439 @@
<?php
namespace Admin\Controller;
use Think\Controller;
/**
* cp/公会对账单
* ThinkController
*/
class StatementWarningController extends AdminController
{
private $statementWarningKey;
private $statementWarningModel;
private $statementWarningInfoModel;
private $statementWarningType=[
1=>'业务收入',
2=>'业务成本',
3=>'毛利',
4=>'营业利润'
];
private $companyBelong=[
0=>'下游内团',
1=>'下游外团',
9=>'上游'
];
private $isWm=[
1=>'是',
2=>'否'
];
//创建
public function _initialize(){
//初始化
$this->statementWarningModel=M("statement_warning","tab_");
$this->statementWarningInfoModel=M("statement_warning_info","tab_");
$this->statementWarningKey=A("StatementWarningSet")->getStatementWarningKey();
parent::_initialize();
}
public function lists()
{
if(!array_key_exists("year",$_REQUEST)){
$this->redirect(ACTION_NAME, array('year' => date('Y',time())));
}
$year = $_REQUEST['year'];
$yearData = $this->statementWarningModel->where("count_year = '{$year}'")->select();
$yearData = $this->setWaringDataShow( $this->setWaringDataCount( $this->resetWaringData($yearData) ) );
$isCan = D("CmdTasks")->isCanAddTask("StatementWarningSet");
$this->assign("is_can",$isCan);
$this->assign("data",$yearData);
$this->getLastUpdate();
$this->getYearList();
$this->display();
}
private function getLastUpdate()
{
$time =strtotime(date('Y',time()).'-'.date('m',time())."-1");
$nextMonth = explode('-', date('Y-m',strtotime('+32 day',$time)) );
$lastUpdate = $this->statementWarningModel->where([
'count_year'=>$nextMonth[0],
'count_month'=>$nextMonth[1],
"name"=>'wm_platm',
"type"=>1
])->field("create_time")->find();
if($lastUpdate){
$lastUpdate = date('Y-m-d H:i:s',$lastUpdate['create_time']);
}else{
$lastUpdate = '未更新';
}
$this->assign('last_update', $lastUpdate);
}
private function resetWaringData($data)
{
$sendData = [];
foreach ($this->statementWarningType as $key => $va) {
$sendData[$key] = [
'name'=>$va,
'list'=>[],
'count'=>[0,0,0,0,0,0,0,0,0,0,0,0,0]
];
if($key == 3){
$sendData[$key]['list']['margin_ratio'] = [0,0,0,0,0,0,0,0,0,0,0,0,0];
}
if($key == 4){
$sendData[$key]['list']['profit_ratio'] = [0,0,0,0,0,0,0,0,0,0,0,0,0];
}
}
foreach ($data as $k => $v) {
$name = $v['name'];
$typelist = &$sendData[$v['type']]['list'];
if( !isset($typelist[$name]) ){
$typelist[$name] = [0,0,0,0,0,0,0,0,0,0,0,0,0];
}
$typelist[$name][$v['count_month']-1] = $v['money'];
}
return $sendData;
}
private function setWaringDataCount($data)
{
//业务成本/收入
for ($type=1; $type < 3; $type++) {
foreach ($data[$type]['list'] as $k => &$item) {
$item[12] = array_sum($item);
for ($i=0; $i < 13; $i++) {
$data[$type]['count'][$i] += $item[$i];
}
}
}
//毛利
$data[3]['list']['cost'][12] = array_sum($data[3]['list']['cost']);
$data[3]['list']['other_income'][12] = array_sum($data[3]['list']['other_income']);
for ($i=0; $i < 13; $i++) {
$data[3]['count'][$i] = $data[1]['count'][$i]-$data[2]['count'][$i];
$data[4]['count'][$i] = ($data[3]['count'][$i]-$data[3]['list']['cost'][$i]+$data[3]['list']['other_income'][$i]);
if($data[1]['count'][$i] != 0){
$data[3]['list']['margin_ratio'][$i] = round( $data[3]['count'][$i]/$data[1]['count'][$i],4);
$data[4]['list']['profit_ratio'][$i] = round($data[4]['count'][$i]/$data[1]['count'][$i],4);
}
}
return $data;
}
private function setWaringDataShow($data)
{
foreach ($data as $type => $item) {
for ($i=0; $i < 13; $i++) {
$data[$type]['count'][$i] = round($data[$type]['count'][$i]/10000,2);
}
foreach ($item['list'] as $name => $value) {
for ($i=0; $i < 13; $i++) {
if( in_array($name,['margin_ratio','profit_ratio']) ){
$value[$i] = ( ($value[$i]*100)."%");
}else{
$value[$i] = round($value[$i]/10000,2);
}
}
unset($data[$type]['list'][$name]);
if(isset($this->statementWarningKey[$name])){
if( in_array($name,['margin_ratio','profit_ratio']) ){
$data[$type]['list'][$name]['is_edit'] = 0;
}else{
$data[$type]['list'][$name]['is_edit'] = 1;
}
$data[$type]['list'][$name]['name'] = $this->statementWarningKey[$name];
$data[$type]['list'][$name]['list'] = $value;
$data[$type]['list'][$name]['is_del'] = 0;
}else{
$data[$type]['list'][$name]['name'] = $name;
$data[$type]['list'][$name]['list'] = $value;
$data[$type]['list'][$name]['is_edit'] = 1;
$data[$type]['list'][$name]['is_del'] = 1;
}
}
}
return $data;
}
//获取历史年份
private function getYearList()
{
$star = 2021;
$end = date("Y",time());
$list = [];
for ($i=$star; $i <= $end; $i++) {
$temp = array(
"value"=>$i,
"name"=>"{$i}年"
);
$list[] = $temp ;
}
$this->assign('YearList', $list);
}
public function edit()
{
$act = $_REQUEST['act'];
$isEdit = 1;
if($act == 'add'){
$isEdit = 0;
$this->assign('is_edit', 0);
$this->assign('chenge_name', 1);
}else{
$this->assign('is_edit', 1);
}
$this->getYearList();
if(IS_POST) {
$parm = I('post.');
if(count($parm['value']) < 12){
$this->ajaxReturn(["msg"=>"不想添加的月份请设置值为0不能为空","code"=>0]);
}
if($parm['is_edit'] == 0){
$this->doAdd($parm);
}else{
$this->doEdit($parm);
}
$this->ajaxReturn(["msg"=>"添加成功","code"=>1,"url"=>U("lists")]);
}else{
if($isEdit == 1){
$this->resetWarningData();
$this->assign('title', '编辑预警类目');
}else{
$this->assign('title', '新增预警类目');
}
$this->display();
}
}
private function doAdd($p)
{
$adddata = [];
$baseArray = [
'count_year'=>$p['year'],
'type'=>$p['type'],
'name'=>trim($p['name']),
'create_time'=>time()
];
for ($i=0; $i < 12; $i++) {
if($p['value'][$i] != 0){
$countMoth = ($i-0+1);
if(strlen($countMoth) < 2) $countMoth="0".$countMoth;
$baseArray['count_month'] = $countMoth;
$baseArray['money'] = $p['value'][$i]*10000;
$adddata[] = $baseArray;
}
}
if(empty($adddata)){
$this->ajaxReturn(["msg"=>"添加失败,值不能全为0","code"=>0]);
}
$res = $this->statementWarningModel->addAll($adddata);
if(!$res){
$this->ajaxReturn(["msg"=>"添加失败","code"=>0]);
}
}
private function resetWarningData()
{
//获取真实名称
$name = $_REQUEST['name'];
$sendData = [
'value'=>[0,0,0,0,0,0,0,0,0,0,0,0],
'ids'=>[0,0,0,0,0,0,0,0,0,0,0,0],
'chenge_name'=>1,
'count_year'=>$_REQUEST['count_year']
];
$key = array_flip($this->statementWarningKey);
if(isset($key[$_REQUEST['name']])){
$sendData['chenge_name'] = 0;
$sendData['orgin_name'] = $key[$_REQUEST['name']];
$sendData['name'] = $name;
$name = $key[$_REQUEST['name']];
}else{
$sendData['orgin_name'] = $name;
$sendData['name'] = $name;
}
$where = [
'name'=>$name,
'count_year'=>$_REQUEST['count_year']
];
$data = $this->statementWarningModel->where($where)->select();
$sendData['type'] = $data[0]['type'];
foreach ($data as $key => $value) {
$sendData['value'][$value['count_month']-1] = round($value['money']/10000,2);
$sendData['ids'][$value['count_month']-1] = $value['id'];
}
$this->assign('data', $sendData);
}
private function doEdit($p)
{
$adddata = [];
$baseArray = [
'count_year'=>$p['year'],
'type'=>$p['type'],
'name'=>trim($p['name']),
'create_time'=>time()
];
for ($i=0; $i < 12; $i++) {
$id = $p['ids'][$i];
$money = $p['value'][$i];
if($id > 0){
$save['id'] = $id;
$save['money'] = $p['value'][$i]*10000;
$save['name'] = trim($p['name']);
$this->statementWarningModel->save($save);
continue;
}
if($money != 0){
$countMoth = ($i-0+1);
if(strlen($countMoth) < 2) $countMoth="0".$countMoth;
$baseArray['count_month'] = $countMoth;
$baseArray['money'] = $p['value'][$i]*10000;
$adddata[] = $baseArray;
}
}
if(!empty($adddata)){
$this->statementWarningModel->addAll($adddata);
}
}
public function del()
{
$parm = I('get.');
$where = [
'count_year'=>$parm['count_year'],
'name'=>trim($parm['name']),
];
$this->statementWarningModel->where($where)->delete();
$this->success("删除成功!");
}
public function updateStatement()
{
if(!isset($_REQUEST['time'])) $this->error("参数错误");
$time =strtotime($_REQUEST['time']."-1")-1;
$time = date('Y-m',$time);
$params = "php ".SUBSITE_INDEX." StatementWarningSet/setFreeMonth/count_date/{$time}";
$r = D("CmdTasks")->addTask("StatementWarningSet",$params);
if($r){
$this->ajaxReturn(["success"=>"ok"]);
}else{
$this->ajaxReturn(["error"=>"error"]);
}
}
/*********** 详情 ***************/
public function infoLists()
{
if(!array_key_exists("time",$_REQUEST)){
$this->redirect(ACTION_NAME, array('time' => date('Y-m',time())));
}
$time = explode('-',$_REQUEST['time']);
$year= $time[0];
if(strlen($time[1]) < 2) $time[1]="0".$time[1];
$month= $time[1];
$data = $this->statementWarningInfoModel->where("count_year = '{$year}' AND count_month = '{$month}'")->order('FIELD(company_belong,9,0,1),is_wm asc,statement_money desc')->select();
$count = $this->statementWarningInfoModel->where("count_year = '{$year}' AND count_month = '{$month}'")->field("company_belong,sum(statement_money) statement_money,sum(wm_amount) wm_amount,sum(other_amount) other_amount")->group('company_belong')->select();
$this->setWaringInfShow($data,$count);
$this->getMonthLastUpdate($year,$month);
$this->display();
}
private function setWaringInfShow($data,$count)
{
$allcount = [
'statement_money'=>0,
'wm_amount'=>0,
'other_amount'=>0
];
$sendData = [];
foreach ($data as $key => $value) {
$value['statement_money'] = round($value['statement_money']/10000,2);
$value['wm_amount'] = round($value['wm_amount']/10000,2);
$value['other_amount'] = round($value['other_amount']/10000,2);
$value['is_wmstr'] = $this->isWm[$value['is_wm']];
$sendData[$value['company_belong']]['list'][] = $value;
}
foreach ($count as $key => $value) {
$value['statement_money'] = round($value['statement_money']/10000,2);
$value['wm_amount'] = round($value['wm_amount']/10000,2);
$value['other_amount'] = round($value['other_amount']/10000,2);
$sendData[$value['company_belong']]['name'] = $this->companyBelong[$value['company_belong']];
$sendData[$value['company_belong']]['row'] = count( $sendData[$value['company_belong']]['list'])-0+1;
$sendData[$value['company_belong']]['count'] = $value;
$allcount['statement_money'] += $value['statement_money'];
$allcount['wm_amount'] += $value['wm_amount'];
$allcount['other_amount'] += $value['other_amount'];
}
$this->assign('data',$sendData);
$this->assign('allcount',$allcount);
}
private function getMonthLastUpdate($year,$month)
{
$lastUpdate = $this->statementWarningInfoModel->where([
'count_year'=>$year,
'count_month'=>$month,
])->field("MAX(create_time) create_time")->find();
if($lastUpdate){
$lastUpdate = date('Y-m-d H:i:s',$lastUpdate['create_time']);
}else{
$lastUpdate = '未更新';
}
$this->assign('last_update', $lastUpdate);
}
public function infoEdit()
{
$p = I('post.');
$id = $p['id'];
$info = $this->statementWarningInfoModel->where("id = '{$id}'")->find();
$diffMoney = $info['wm_amount'];
if(isset($p['is_wm']) && $p['is_wm'] != $info['is_wm']){
if($p['is_wm'] == 1){
$info['wm_amount'] = $info['statement_money'];
$info['other_amount'] = 0;
}else{
$info['wm_amount'] = 0;
$info['other_amount'] = $info['statement_money'];
}
$info['is_wm'] = $p['is_wm'];
}
if(isset($p['wm_amount'])){
$info['wm_amount'] = $p['wm_amount']*10000;
$info['other_amount'] = $info['statement_money']-$p['wm_amount']*10000;
}
$this->statementWarningInfoModel->save($info);
$diffMoney = ($diffMoney - $info['wm_amount']);
if($diffMoney != 0)
{
//获取母单
$poolname = '';
if($info['company_belong'] == 1){
$poolname = 'pu_statement';
}
if($info['company_belong'] == 0){
$poolname = 'pc_statement';
}
if($info['company_belong'] == 9){
$poolname = 'up_statement';
}
$time =strtotime($info['count_year'].'-'.$info['count_month']."-1");
$nextMonth = explode('-', date('Y-m',strtotime('+32 day',$time)) );
$this->statementWarningModel->where([
'count_year'=>$nextMonth[0],
'count_month'=>$nextMonth[1],
'name'=>$poolname,
])->setDec('money',$diffMoney);
}
$this->ajaxReturn(['success'=>'ok']);
}
}

@ -25,7 +25,12 @@ class StatementWarningSetController extends Controller {
private $statementWarningKey=[
'wm_platm'=>'万盟平台',
'up_statement'=>'上游',
'pc_statement'=>'下游内团'
'pc_statement'=>'下游内团',
'pu_statement'=>'下游外团',
'margin_ratio'=>'毛利率',
'profit_ratio'=>'利润率',
'cost'=>'费用',
'other_income'=>'其他收入'
];
private $statementWarningModel;
@ -33,6 +38,9 @@ class StatementWarningSetController extends Controller {
private $spendModel;
private $isInit = false;
public function getStatementWarningKey(){
return $this->statementWarningKey;
}
private function configInit($count_date){
if($this->isInit) return; //避免重复生成配置
@ -54,6 +62,30 @@ class StatementWarningSetController extends Controller {
$this->isInit = true;
}
public function run()
{
$count_date = date('Y',time()).'-'.(date('m',time()));
$this->configInit($count_date);
$nextMonth = $this->getNextMonth();
$hasdb = $this->statementWarningModel->where([
'count_year'=>$nextMonth[0],
'count_month'=>$nextMonth[1],
"name"=>'wm_platm',
"type"=>1
])->find();
if(!$hasdb){
//第一次生成,同时上一次结扎
$preMonth = $this->getPreMonth();
$preCountMonth = $preMonth[0]."-".$preMonth[1];
$params = "php ".SUBSITE_INDEX." StatementWarningSet/setFreeMonth/count_date/{$preCountMonth}";
$time = time()+2*3600;
D("CmdTasks")->addScheduleTask("StatementWarningSet",$params,$time);
}
$this->setStatementWarning();
$this->setDefaultStatementWarning();
}
/**
* 更新某月毛利数据
*/
@ -61,6 +93,7 @@ class StatementWarningSetController extends Controller {
{
$this->configInit($count_date);
$this->setStatementWarning();
$this->setDefaultStatementWarning();
}
/**
@ -71,9 +104,9 @@ class StatementWarningSetController extends Controller {
$this->getInsideCompanyid();
$this->setCompanyIsWm();
// $this->getAllWmAmount();
// $this->cpStatement();
// $this->pcStatement();
$this->getAllWmAmount();
$this->cpStatement();
$this->pcStatement();
$this->puStatement();
@ -98,44 +131,49 @@ class StatementWarningSetController extends Controller {
*/
private function setCompanyIsWm()
{
$year = date("Y",$this->beginThismonth-1);
$month = date("m",$this->beginThismonth-1);
$preMonth = $this->getPreMonth();
//cp
$preCpMonth = $this->statementWarningInfoModel->where([
'year'=>$year,
'month'=>$month,
'count_year'=>$preMonth[0],
'count_month'=>$preMonth[1],
'company_belong'=>9
])->getField('company_id,is_wm',true);
$selfCpMonth = $this->statementWarningInfoModel->where([
'year'=>$this->year,
'month'=>$this->month,
'count_year'=>$this->year,
'count_month'=>$this->month,
'company_belong'=>9
])->getField('company_id,is_wm',true);
if(!$preCpMonth) $preCpMonth = [];
if(!$selfCpMonth) $selfCpMonth = [];
$this->cpCompanyIsWm = array_merge($preCpMonth,$selfCpMonth);
$this->cpCompanyIsWm = $preCpMonth;
foreach ($selfCpMonth as $key => $value) {
$this->cpCompanyIsWm[$key] = $value;
}
//下游
$preMonth = $this->statementWarningInfoModel->where([
'year'=>$year,
'month'=>$month,
'count_year'=>$preMonth[0],
'count_month'=>$preMonth[1],
'company_belong'=>['NEQ',9]
])->getField('company_id,is_wm',true);
$selfMonth = $this->statementWarningInfoModel->where([
'year'=>$this->year,
'month'=>$this->month,
'count_year'=>$this->year,
'count_month'=>$this->month,
'company_belong'=>['NEQ',9]
])->getField('company_id,is_wm',true);
if(!$preMonth) $preMonth = [];
if(!$selfMonth) $selfMonth = [];
$this->promoteCompanyIsWm = array_merge($preMonth,$selfMonth);
$this->promoteCompanyIsWm = $preMonth;
foreach ($selfMonth as $key => $value) {
$this->promoteCompanyIsWm[$key] = $value;
}
}
/**
@ -143,26 +181,24 @@ class StatementWarningSetController extends Controller {
*/
private function getAllWmAmount()
{
//获取官方渠道
$merchantIds = M("payment_merchant","tab_")->group('main_id')->where("main_id = 1")->getField("GROUP_CONCAT(id) ids");
$where = [
'partner_type'=>['in',[0,1]],
'merchant_id'=>['in',$merchantIds],
'pay_status'=>1,
'payed_time'=>['between',[$this->beginThismonth,$this->endThismonth]],
];
$amout = $this->spendModel->where($where)->getField("sum(pay_amount) amount");
$sWWhere = [
"count_month"=>$this->month,
"count_year"=>$this->year,
"name"=>'wm_platm',
"type"=>1
];
$hasDb = $this->statementWarningModel->where($sWWhere)->find();
$saveData = array_merge(['money'=>$amout,'create_time'=>time()],$sWWhere);
if($hasDb){
$saveData['id'] = $hasDb['id'];
$this->statementWarningModel->save($saveData);
}else{
$this->statementWarningModel->add($saveData);
}
$amout = $this->spendModel->where($where)->where(['pay_way'=>['GT',0],])->getField("sum(pay_amount) amount");
$despost = M("deposit","tab_")->where($where)->getField("sum(pay_amount) amount");
$this->addStatementWarning(1,'wm_platm',$amout-0+$despost);
}
/**
* 添加默认信息
*/
private function setDefaultStatementWarning()
{
$this->addStatementWarning(3,'cost',700000,false);
$this->addStatementWarning(3,'other_income',26000,false);
}
/**
* 获取上游的结算金额
@ -175,21 +211,8 @@ class StatementWarningSetController extends Controller {
$company = $this->getCpCompanyInfo(array_keys($gamedata));
$cpStatementAmount = $this->addCpStatementWarningInfo($company,$gamedata);
}
$savedata = [
'type'=>2,
'name'=>'up_statement',
'count_month'=>$this->month,
'count_year'=>$this->year
];
$hasDb = $this->statementWarningModel->where($savedata)->find();
$savedata = array_merge(['money'=>$cpStatementAmount,'create_time'=>time()],$savedata);
if($hasDb){
$savedata['id'] = $hasDb['id'];
$this->statementWarningModel->save($savedata);
}else{
$this->statementWarningModel->add($savedata);
}
$this->addStatementWarning(2,'up_statement',$cpStatementAmount);
}
/**
* 获取月份游戏结算额
@ -222,7 +245,7 @@ class StatementWarningSetController extends Controller {
->join("tab_partner as p on g.partner_id = p.id")
->where(['g.id'=>['in',$game_ids]])
->group("g.partner_id")
->getField('p.id company_id,GROUP_CONCAT(g.id) game_ids,p.partner company_name',true);
->getField('p.id company_id,GROUP_CONCAT(g.id) game_ids,p.partner company_name,channel_rate,taxation_rate',true);
}
/**
@ -237,6 +260,10 @@ class StatementWarningSetController extends Controller {
foreach ($gameids as $gameid) {
$statementMoney += ($gamedata[$gameid]-0);
}
//上游需要计算祱费及渠道费用
if($value['channel_rate'] > 0 || $value['taxation_rate'] > 0){
$statementMoney=round($statementMoney*(100-$value['channel_rate'])*(100-$value['taxation_rate'])/(100*100), 2);//结算金额=平台总额*1-渠道费)*分成比例*(1-税费费率)
}
$company[$key]['statement_money'] = $statementMoney;
unset($company[$key]['game_ids']);
}
@ -254,24 +281,12 @@ class StatementWarningSetController extends Controller {
'company_belong'=>0
])->getField("id company_id,company_name,develop_type",true);
$company = $this->getPromoteCompanyGameSpend($company);
$company = $this->getPromoteCompanyGameSpend($company,0);
$pcStatementAmount = $this->addStatementWarningInfo($company,0);
$savedata = [
'type'=>2,
'name'=>'pc_statement',
'count_month'=>$this->month,
'count_year'=>$this->year
];
$hasDb = $this->statementWarningModel->where($savedata)->find();
$savedata = array_merge(['money'=>$pcStatementAmount,'create_time'=>time()],$savedata);
if($hasDb){
$savedata['id'] = $hasDb['id'];
$this->statementWarningModel->save($savedata);
}else{
$this->statementWarningModel->add($savedata);
}
$this->addStatementWarning(2,'pc_statement',$pcStatementAmount);
}
private function getPromoteCompanyGameSpend($company)
private function getPromoteCompanyGameSpend($company,$companyBelong)
{
$where = [
'tab_spend.is_check'=>1,
@ -293,7 +308,7 @@ class StatementWarningSetController extends Controller {
foreach ($items as $key => $val) {
$relationGameId = $games[$val['relation_game_name']];
$radio = end($CompanyGameRatio->getGameRadio($val['company_id'],$relationGameId,0,$this->beginThismonth,$this->endThismonth));
$radio = end($CompanyGameRatio->getGameRadio($val['company_id'],$relationGameId,$companyBelong,$this->beginThismonth,$this->endThismonth));
$radio = $CompanyGameRatio->getTurnoverRatio($val['amount'],$radio['ratio'],$radio['turnover_ratio']);
$statementMoney =round($val['amount']*$radio/100,2);
if(isset($company[$val['company_id']]['statement_money'])){
@ -313,18 +328,17 @@ class StatementWarningSetController extends Controller {
'company_type'=>1,
'company_belong'=>['in',[1,2]]
])->getField("id company_id,company_name,develop_type",true);
if(!$company) {
$this->addStatementWarning(2,'pu_statement',0);
return;
};
$company = $this->getPuSpecialStatement( $this->getPromoteCompanyGameSpend($company) );
foreach ($company as $key => $value) {
if(!array_key_exists('statement_money',$value) ) {
unset($company[$key]);
};
}
$puStatementAmount = $this->addStatementWarningInfo($company,0);
$puStatementAmount = 0;
if($company) {
$company = $this->getPuSpecialStatement( $this->getPromoteCompanyGameSpend($company,1) );
foreach ($company as $key => $value) {
if(!array_key_exists('statement_money',$value) ) {
unset($company[$key]);
};
}
$puStatementAmount = $this->addStatementWarningInfo($company,1);
};
$this->addStatementWarning(2,'pu_statement',$puStatementAmount);
}
@ -350,17 +364,19 @@ class StatementWarningSetController extends Controller {
}
private function addStatementWarning($type,$name,$money)
private function addStatementWarning($type,$name,$money,$issave = true)
{
//汇总表差一个月
$nextMonth = $this->getNextMonth();
$savedata = [
'type'=>$type,
'name'=>$name,
'count_month'=>$this->month,
'count_year'=>$this->year
'count_year'=>$nextMonth[0],
'count_month'=>$nextMonth[1]
];
$hasDb = $this->statementWarningModel->where($savedata)->find();
$savedata = array_merge(['money'=>$money,'create_time'=>time()],$savedata);
if($hasDb){
if($hasDb && $issave){
$savedata['id'] = $hasDb['id'];
$this->statementWarningModel->save($savedata);
}else{
@ -373,7 +389,7 @@ class StatementWarningSetController extends Controller {
$statementAmount = 0;
foreach ($company as $key => $value) {
$statementMoney = array_key_exists('statement_money',$value) ? ($value['statement_money']-0) : 0;
$statementAmount += $statementMoney;
$company[$key]['is_wm'] = $this->getCompanyIsWm($key,$companyBelong);
$company[$key]['company_belong'] = $companyBelong;
$company[$key]['count_month'] = $this->month;
@ -386,6 +402,7 @@ class StatementWarningSetController extends Controller {
$company[$key]['wm_amount'] = 0;
$company[$key]['other_amount'] = $statementMoney;
}
$statementAmount += $company[$key]['wm_amount'];
$id = $this->statementWarningInfoModel->where([
'count_year'=>$this->year,
'count_month'=>$this->month,
@ -418,7 +435,16 @@ class StatementWarningSetController extends Controller {
return 1;
}
private function getPreMonth()
{
return explode('-',date("Y-m",$this->beginThismonth-1));
}
private function getNextMonth()
{
return explode('-',date("Y-m",$this->endThismonth+1));
}

@ -10,6 +10,7 @@ use Base\Service\PartnerService;
use Base\Repository\TestingResourceRepository;
use Base\Repository\GameRepository;
use Base\Service\GameService;
use Base\Tool\Log;
class TestingResourceController extends ThinkController
{
@ -530,6 +531,11 @@ class TestingResourceController extends ThinkController
{
$ids = I('ids', []);
$status = I('status', 0);
$admin = session('user_auth');
Log::info('admin_provide ' . $admin['username'] . ' -- ' . implode(',', $ids) . ' -- ' . $status);
return $this->ajaxReturn(['status' => 0, 'message' => '手动发放暂时关闭']);
if (count($ids) == 0) {
return $this->ajaxReturn(['status' => 0, 'message' => '请选择要审核的批次']);
}

@ -5,7 +5,7 @@ use Think\Controller;
class MarketEvent extends Controller
{
private $MarketDepartmentId = "1,2";
private $MarketDepartmentId = "1,2,3";
private $ManagerLevel = "4";
private $DirectorLevel = "5";
private $LevelConfig = [
@ -14,13 +14,29 @@ class MarketEvent extends Controller
'3'=>'高级',
'4'=>'经理'
];
private $uid;
private $gid;
private $isMarket = false;
private $isInit = false;
public function defaultInit()
{
if($isInit) return $this;
$this->uid = $_SESSION['onethink_admin']['user_auth']['uid'];
$this->gid = session('user_group_id');
$info = $this->isMarketAdminGroup($this->gid);
if($info){
$this->isMarket = true;
}
return $this;
}
/**
* 获取所有市场部组id
*/
public function getMarketGroupId()
public function getMarketGroupId($departmentId = null)
{
$res = M('department','sys_')->where("id in ({$this->MarketDepartmentId})")->getField("group_ids",true);
$departmentIds = $departmentId ? $departmentId : $this->MarketDepartmentId;
$res = M('department','sys_')->where("id in ({$departmentIds})")->getField("group_ids",true);
$sendData = '';
foreach ($res as $value) {
$sendData .= $value.",";
@ -77,7 +93,7 @@ class MarketEvent extends Controller
*/
public function getConfig($key)
{
return $this->$key;
return $this->defaultInit()->$key;
}
/**
* 获取等级名称
@ -86,6 +102,11 @@ class MarketEvent extends Controller
{
return $this->LevelConfig[$level];
}
/**
* 是否是市场专员
* @param [int] $gid 管理组id
* @return boolean
*/
public function isMarketAdminGroup($gid)
{
$where = [
@ -95,18 +116,6 @@ class MarketEvent extends Controller
return M('auth_group','sys_')->field("id,department_id,department_level")->where($where)->find();
}
public function isDepartmentLeder($department_id,$uid)
{
$gid = M("auth_group_access")->where("uid = '{$uid}'")->getField('group_id');
return M('department','sys_')->where("id = '{$department_id}' and leader_group = '$gid'")->field("id")->find();
}
public function isMarketLeder($uid)
{
$gid = M("auth_group_access")->where("uid = '{$uid}'")->getField('group_id');
return M("auth_group")->where("id = '{$gid}' and department_level = '{$this->DirectorLevel}'")->field("id")->find();
}
/**
* 添加部门总监的会长权限
* $uid,$promote_id
@ -227,11 +236,39 @@ class MarketEvent extends Controller
->where(['id' =>['in',$userAuth['data_president']],'level'=>1])
->group('company_id')
->getField('company_id',true);
$companyIds = implode(",",$dbres);
if($dbres){
$companyIds = implode(",",$dbres);
}else{
$companyIds = "-1";
}
}
}
// dd($companyIds);
session('user_auth_company_ids', $companyIds);
return $companyIds;
}
/**
* 获取部门领导管辖的所有用户,非领导返回自己
*
* @param int $value uid/null时候为自己
* @param string $type uid/group_id
* @return array
*/
public function getAdminidByLeaderid($uid=null)
{
$this->defaultInit();
if($uid){
$gid = M("auth_group_access")->where("uid = '{$uid}'")->getField('group_id');
}else{
$uid = $this->uid;
$gid = $this->gid;
}
$group_ids = M('department','sys_')->where("leader_group = '{$gid}'")->getField("group_concat(group_ids) as group_ids");
if(!$group_ids) return $uid;
$adminIds = M("auth_group_access")->where("group_id in ({$group_ids})")->getField('uid',true);
return $adminIds ?? $uid;
}
}

@ -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>

@ -95,7 +95,7 @@
<div class="data_list box_mt" style="margin-top: 10px;0">
<div class="">
<form id="form" action="{:U('coefficientSave')}" method="post" class="form-horizontal">
<form id="form" method="post" class="form-horizontal">
<table id="exporttable">
<!-- 表头 -->
<thead>
@ -115,7 +115,7 @@
</tbody>
</table>
<div class="jssearch fr cf search_list" style="width: 100%;">
<a class="sch-btn" id="jssearch" url="{:U('coefficientSave')}" style="width: 120px;margin-top: 20px;margin-right: 20px;float: right;">提交保存</a>
<a class="sch-btn" id="confimBtn" url="{:U('coefficientSave')}" style="width: 120px;margin-top: 20px;margin-right: 20px;float: right;">提交保存</a>
</div>
</form>
</div>
@ -125,8 +125,7 @@
<script type="text/javascript">
$("#jssearch").click(function(){
$("#confimBtn").click(function(){
var url = $(this).attr('url');
var query = $('table').find('input').serialize();
query += "&" + $('table').find('select').serialize();
@ -140,8 +139,8 @@
}
url += '&is_get=1';
layer.confirm('【提示】是否确认财务部编辑保存', {
layer.confirm('【提示】是否绩效确认', {
btn: ['确认','取消'],
title:false
}, function(index){

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

@ -160,6 +160,17 @@
</div>
<?php endif;?>
<?php if(!$isMarketAdmin && !$isMarketLeader):?>
<div class="input-list input-list-server search_label_rehab">
<select id="department_id" name="department_id" class="select_gallery" style="width:120px;">
<option value="">请选择市场部</option>
<?php foreach($departments as $department):?>
<option value="<?=$department['id']?>" <?php if($department['id'] == I('department_id')):?>selected<?php endif;?>><?=$department['name']?></option>
<?php endforeach;?>
</select>
</div>
<?php endif;?>
<?php if(!$isMarketAdmin && $showMarketAdmin == 1):?>
<div class="input-list search_item input-list-gamenoticestatus">
<select name="market_admin_id" style="color:#444" class="select_gallery" id="market_admin_id">
@ -169,8 +180,8 @@
<?php endforeach;?>
</select>
</div>
<?php endif;?>
<div class="input-list search_item input-list-gamenoticestatus">
<select name="platform_type" style="color:#444" class="select_gallery" id="platform_type">
<option value="0">游戏平台</option>
@ -246,6 +257,7 @@
<?php if($showPromote == 1):?>
<th>所属推广员</th>
<?php endif;?>
<th>所属市场部</th>
<?php if($showMarketAdmin == 1):?>
<th>所属市场专员</th>
<?php endif;?>
@ -256,6 +268,7 @@
<th>角色ID</th>
<th>角色名称</th>
<th>订单金额</th>
<th>折扣</th>
<th><a class="paixu" data-order='pay_amount'>
实付金额
@ -320,6 +333,7 @@
</eq>
</td>
<?php endif;?>
<td >{$data.admin_department}</td>
<?php if($showMarketAdmin == 1):?>
<td >{$data.market_admin_username}</td>
<?php endif;?>
@ -340,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>
@ -386,7 +401,7 @@
<if condition="$rule_count_check">
<tr class="data_summary">
<td colspan="2">汇总</td>
<td colspan="22">
<td colspan="99">
当页充值:{:null_to_0(array_sum(array_column(array_status2value('pay_status','',$list_data),'pay_amount')))}
累计充值:{$total}(此处只汇总充值成功的订单)
@ -676,6 +691,39 @@
})
});
var adminId = "{:I('market_admin_id')}";
var departmentId = "{:I('department_id')}";
function getAdminsByDepartmentId() {
var departmentId = $("#department_id option:selected").val();
if(!departmentId){
departmentId = -1;
}
$.ajax({
url: "{:U('Ajax/getAdminsByDepartment')}",
type: "get",
data: { department_id: departmentId},
dataType: 'json',
success: function (response) {
str = '<option value="">请选择市场专员</option>';
admins = response.data.admins;
for (var i in admins) {
str += "<option value='" + admins[i].uid + "' " + (adminId && admins[i].uid == adminId ? 'selected' : '') + ">" + admins[i].nickname + "</option>"
}
$("#market_admin_id").empty();
$("#market_admin_id").append(str);
$("#market_admin_id").select2();
}
})
}
getAdminsByDepartmentId();
$("#market_admin_id").change(function(){
adminId = $("#admin_id option:selected").val();
})
$("#department_id").change(function(){
getAdminsByDepartmentId();
})
})
var promote_id = "{:I('promote_id')}";

@ -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,247 @@
<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;
}
input[type=number]{
padding: 4px 6px;
font-size: 12px;
line-height: 20px;
color: #555;
vertical-align: middle;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
background-color: #fff;
border: 1px solid #ccc;
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);
-moz-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);
box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);
-webkit-transition: border linear .2s, box-shadow linear .2s;
-moz-transition: border linear .2s, box-shadow linear .2s;
-o-transition: border linear .2s, box-shadow linear .2s;
transition: border linear .2s, box-shadow linear .2s;
}
</style>
<div class="cf main-place top_nav_list navtab_list">
<h3 class="page_title">{$title}</h3>
<p class="description_text">说明:单位(万元)</p>
</div>
<!-- 标签页导航 -->
<div class="tab-wrap">
<div class="tab-content tabcon1711">
<!-- 表单 -->
<form id="form" action="{:U('edit')}" method="post" class="form-horizontal">
<!-- 基础文档模型 -->
<div id="tab1" class="tab-pane in tab1">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<input type="text" name="is_edit" id="is_edit" value="{$is_edit}" style="display: none;">
<if condition="$is_edit eq 1">
<input type="text" name="year" value="{$data['count_year']}" style="display: none;">
<input type="text" name="type" value="{$data['type']}" style="display: none;">
<if condition="$data['chenge_name'] eq 0">
<input type="text" name="name" value="{$data['orgin_name']}" style="display: none;">
</if>
</if>
<tr>
<td class="l"><i class="mustmark">*</i>年度:</td>
<td class="r table_radio">
<div style="float: left;">
<select id="year" name="year" style="width:150px;" <if condition="$is_edit eq 1">disabled</if> >
<volist name="YearList" id="vo">
<option value="{$vo.value}" <if condition="$vo.value eq $data['count_year']">selected
</if> >{$vo.name}</option>
</volist>
</select>
</div>
</td>
</tr>
<tr>
<td class="l"><i class="mustmark">*</i>类型:</td>
<td class="r table_radio">
<div style="float: left;">
<select id="type" name="type" style="width:150px;" <if condition="$is_edit eq 1">disabled</if> >
<option value="1" <if condition="1 eq $data['type']">selected </if> >业务收入</option>
<option value="2" <if condition="2 eq $data['type']">selected </if> >业务成本</option>
</select>
</div>
</td>
</tr>
<tr>
<td class="l"><i class="mustmark">*</i>类型名称:</td>
<td class="r table_radio">
<div style="float: left;">
<input type="text" class="txt ratio" name="name" id="name" value="{$data['name']}" placeholder="请输入名称" style="width: 150px;" <if condition="($data['chenge_name'] eq 0) AND ($is_edit eq 1)">disabled</if>>
</div>
</td>
</tr>
<if condition="$is_edit eq 0">
<for start="0" end="12">
<tr>
<td class="l">{$i-0+1}月份:</td>
<td class="r table_radio">
<div style="float: left;">
<input type="number" class="txt ratio" name="value[]" id="name" value="0" placeholder="" οninput="value=value.replace(/[^\w\.\/]/ig, '')" style="width: 150px;">
</div>
</td>
</tr>
</for>
<else />
<for start="0" end="12">
<tr>
<td class="l">{$i-0+1}月份:</td>
<td class="r table_radio">
<div style="float: left;">
<input type="number" class="txt ratio" name="ids[]" value="{$data['ids'][$i]}" style="display: none;">
<input type="number" class="txt ratio" name="value[]" id="name" value="{$data['value'][$i]}" placeholder="" οninput="value=value.replace(/[^\w\.\/]/ig, '')" style="width: 150px;">
</div>
</td>
</tr>
</for>
</if>
</tbody>
</table>
</div>
<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>
</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 src="__STATIC__/czinputcheck.js?v=1.29" type="text/javascript"></script>
<script type="text/javascript">
//导航高亮
highlight_subnav("{:U('lists')}");
$(".select_gallery").select2();
$(function(){
subevn();
function subevn(){
$('#submit').off("click");
$('#submit').click(function (e) {
//查看是否报错
var name = $("#name").val();
if(name.length < 1){
layer.msg("名称不能为空", {icon: 2});
return false;
}
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(data){
if(layer) {layer.closeAll('loading');}
if (data.code==1) {
if (data.url) {
updateAlert(data.msg + ' 页面即将自动跳转~');
}else{
updateAlert(data.msg);
}
setTimeout(function(){
$(that).removeClass('disabled').prop('disabled',false);
if (data.url) {
location.href=data.url;
}else if( $(that).hasClass('no-refresh')){
$('#tip').find('.tipclose').click();
}else{
location.reload();
}
},1500);
}else{
$(that).removeClass('disabled').prop('disabled',false);
layer.msg(data.msg,{icon: 2});
}
});
});
}
});
</script>
</block>

@ -0,0 +1,298 @@
<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>
<script type="text/javascript" src="__STATIC__/layer3/layer.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;
}
.butnbox {padding:10px 0 15px;}
.butnbox .butnlist {overflow:hidden;clear:both;}
.butnbox .butnlist .butn,.butnbox .butnlist .butn:hover {text-decoration:none;border:none;}
.butnbox .butnlist .butn {display:inline-block;width:120px;height:28px;line-height:28px;text-align:center;color:#FFF;background:#3C95C8;border-radius:3px;}
.butnbox .butnlist .butn.last {background:#009900;}
.butnbox .butnlist .butn~.butn {margin-left:20px;}
.data_list table td{
border-right: 0;
}
</style>
<!-- 标题栏 -->
<div class="cf main-place top_nav_list navtab_list">
<h3 class="page_title">实时结算汇总单</h3>
<p class="description_text">说明:单位(万元)</p>
</div>
<style>
</style>
<div class="cf top_nav_list">
<!-- 高级搜索 -->
<div class="jssearch search_list fl cf" style="margin-bottom: 10px;">
<div class="input-list search-title-box">
<label>搜索:</label>
</div>
<div class="input-list input-list-promote search_label_rehab">
<select id="time" name="time" class="select_gallery" style="width:150px;">
<option value="">请选择月份</option>
<volist name=":getMonth()" id="vo">
<option value="{$vo}" <if condition="$vo eq $_GET['time']">selected=selected</if>>{$vo}</option>
</volist>
</select>
</div>
<div class="input-list">
<a class="sch-btn" href="javascript:;" id="search"
url="{:U('infoLists','model='.$model['name'] .'&row='.I('row'),false)}">
搜索</a>
</div>
</div>
</div>
<!-- 数据列表 -->
<div class="data_list">
<div style="display: flex;line-height: 3;justify-content:space-between;">
<div style="color: red;">
更新时间:{$last_update}
</div>
<div style="color: red;">
单位:万元
</div>
</div>
<table>
<thead>
<tr>
<th>项目</th><th>公司</th><th>实时结算金额合计</th><th>万盟结算金额</th><th>其他结算金额</th><th>是否万盟结算</th><th>操作</th>
</tr>
</thead>
<tbody>
<volist name="data" id="item" key="type">
<volist name="item.list" id="company" key="i">
<if condition="$i eq 1">
<tr style="border-top:1px solid #b6cad2;">
<td rowspan={$item['row']} style="border-right:1px solid #b6cad2;">{$item['name']}</td>
<td>{$item['list'][0]['company_name']}</td>
<td>{$item['list'][0]['statement_money']}</td>
<td>{$item['list'][0]['wm_amount']}</td>
<td>{$item['list'][0]['other_amount']}</td>
<td>{$item['list'][0]['is_wmstr']}</td>
<td><a class="infoedit" data-name="{$item['list'][0]['company_name']}" data-id="{$item['list'][0]['id']}" data-wmamount="{$item['list'][0]['wm_amount']}" data-iswm="{$item['list'][0]['is_wm']}">编辑</a></td>
</tr>
</if>
<if condition="$i neq 1">
<tr style="border-top:dotted 1px #c7c7c7;">
<td>{$company["company_name"]}</td>
<td>{$company['statement_money']}</td>
<td>{$company['wm_amount']}</td>
<td>{$company['other_amount']}</td>
<td>{$company['is_wmstr']}</td>
<td><a class="infoedit" data-name="{$company['company_name']}" data-id="{$company['id']}" data-wmamount="{$company['wm_amount']}" data-iswm="{$company['is_wm']}"">编辑</a></td>
</tr>
</if>
</volist>
<tr style="border-top:dotted 1px #c7c7c7;font-weight: 600;">
<td>小计:</td>
<td>{$item['count']['statement_money']}</td>
<td>{$item['count']['wm_amount']}</td>
<td>{$item['count']['other_amount']}</td>
<td></td>
<td></td>
</tr>
</volist>
<tr style="border-top:dotted 1px #c7c7c7;font-weight: 600;">
<td colspan="2">总计:</td>
<td>{$allcount['statement_money']}</td>
<td>{$allcount['wm_amount']}</td>
<td>{$allcount['other_amount']}</td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<div style="width: 100%;height: 50px;"></div>
</div>
<script type="text/html" id="updateStatementTpl">
<div style="padding:10px 40px 30px;">
<spend style="font-size:14px;color:#666;">
编辑结算相关数据,单位(万元)
</spend>
<table border="0" cellspacing="0" cellpadding="0" style="margin-top:30px;">
<input type="text" name="id" id="edit_id" value="0" style="display: none;">
<tr>
<td class="l noticeinfo" style="width:120px;">万盟结算金额:</td>
<td class="r table_radio">
<input type="number" class="txt ratio" name="wm_amount" id="edit_wm_amount" value="0" placeholder="" οninput="value=value.replace(/[^\w\.\/]/ig, '')" style="width: 150px;">
</td>
</tr>
<tr style="height:30px"></tr>
<tr>
<td class="l noticeinfo" style="width:120px;">是否万盟结算:</td>
<td class="r table_radio">
<div style="float: left;">
<select id="edit_iswm" name="type" style="width:150px;">
<option value="1"></option>
<option value="2"></option>
</select>
</div>
</td>
</tr>
</table>
<button class="submit_btn mlspacing" id="updateStatementSubmit" type="submit" style="margin-top:30px;">
保存
</button>
</div>
</script>
</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">
</script>
<script type="text/javascript">
//导航高亮
highlight_subnav('{:U("infoLists")}');
$(function () {
});
</script>
<script type="text/javascript">
$(function () {
$(".select_gallery").select2();
//搜索功能
$("#search").click(function () {
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;
}
var start = $("#time_start").val();
var end = $("#time_end").val();
if (start != '' && end != '') {
if (Date.parse(start) > Date.parse(end)) {
layer.msg('开始时间必须小于等于结束时间');
return false;
}
}
window.location.href = url;
});
$(".infoedit").on("click",function(){
let data = $(this).data();
var html = $("#updateStatementTpl").html();
layer.open({
type: 1,
title: data.name+"/结算编辑",
maxWidth:720,
closeBtn: 1,
shadeClose: true,
content: html,
success:function(){
$("#edit_iswm").val(data.iswm);
$("#edit_id").val(data.id);
$("#edit_wm_amount").val(data.wmamount);
$("#updateStatementSubmit").off("click");
$("#updateStatementSubmit").on("click",function() {
var sendData = {};
var iswm = $("#edit_iswm").val();
var id = $("#edit_id").val();
var amount = $("#edit_wm_amount").val();
if(amount != data.wmamount){
sendData.wm_amount = amount;
}
if(iswm != data.iswm){
sendData.is_wm = iswm;
}
if($.isEmptyObject(sendData)){
layer.alert('未修改请直接关闭窗口');
return ;
}
sendData.id = id;
$.ajax({
type: 'post',
url: "{:U('infoEdit')}",
data:sendData,
success: function(data) {
if(data.success){
layer.alert('修改成功',function(){
window.location.reload();
});
}else{
layer.alert('修改失败');
}
},
error:function(){
layer.alert("网络错误或超时");
return false;
}
});
});
}
});
})
//回车自动提交
$('.jssearch').find('input').keyup(function (event) {
if (event.keyCode === 13) {
$("#search").click();
}
});
})
</script>
</block>

@ -0,0 +1,278 @@
<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>
<script type="text/javascript" src="__STATIC__/layer3/layer.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;
}
.butnbox {padding:10px 0 15px;}
.butnbox .butnlist {overflow:hidden;clear:both;}
.butnbox .butnlist .butn,.butnbox .butnlist .butn:hover {text-decoration:none;border:none;}
.butnbox .butnlist .butn {display:inline-block;width:120px;height:28px;line-height:28px;text-align:center;color:#FFF;background:#3C95C8;border-radius:3px;}
.butnbox .butnlist .butn.last {background:#009900;}
.butnbox .butnlist .butn~.butn {margin-left:20px;}
.data_list table td{
border-right: 0;
}
</style>
<!-- 标题栏 -->
<div class="cf main-place top_nav_list navtab_list">
<h3 class="page_title">财务预警表</h3>
<p class="description_text">每日凌晨五点自动更新,如需获取实时数据,请手动进行【月份重算】/ 预警表取实时结算汇总表上月数值</p>
</div>
<style>
</style>
<div class="cf top_nav_list">
<!-- 高级搜索 -->
<div class="jssearch search_list fl cf" style="margin-bottom: 10px;">
<div class="input-list search-title-box">
<label>搜索:</label>
</div>
<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">
<a class="sch-btn" href="javascript:;" id="search"
url="{:U('lists','model='.$model['name'] .'&row='.I('row'),false)}">
搜索</a>
</div>
</div>
</div>
<div class="butnbox">
<div class="butnlist jscheckbutn" style="margin-left: 2px">
<if condition="$is_can">
<a class='butn' id='updateStatement' style='background-color: #3C95C8;'>月份重算</a>
</if>
<a class='butn' href="{:U('edit?act=add')}" style='background-color: #3C95C8;'>新增类目</a>
</div>
</div>
<!-- 数据列表 -->
<div class="data_list">
<div style="display: flex;line-height: 3;justify-content:space-between;">
<div style="color: red;">
更新时间:{$last_update}
</div>
<div style="color: red;">
单位:万元
</div>
</div>
<table>
<thead>
<tr>
<th>项目</th><th>1月</th><th>2月</th><th>3月</th><th>4月</th><th>5月</th><th>6月</th><th>7月</th><th>8月</th><th>9月</th><th>10月</th><th>11月</th><th>12月</th><th>年度合计</th><th>操作</th>
</tr>
</thead>
<tbody>
<volist name="data" id="item" key="type">
<tr style="background-color: #F0F5F7;border: 0;font-weight: 600;font-size: 14px;">
<td>{$item.name}</td>
<for start="0" end="13">
<td>{$item['count'][$i]}</td>
</for>
<td></td>
</tr>
<foreach name="item.list" item="vo" key="k" >
<tr style="background-color: #fff;">
<td>{$vo['name']}</td>
<for start="0" end="13">
<td>{$vo['list'][$i]}</td>
</for>
<td>
<if condition="$vo.is_edit eq 1 ">
<a href="{:U('edit?act=edit',array('name'=>$vo['name'],'count_year'=>I('year')))}">编辑</a>
</if>
<if condition="$vo.is_del eq 1 ">
<a style="color: red;" href="{:U('del',array('name'=>$vo['name'],'count_year'=>I('year')))}" class="confirm ajax-get">删除</a>
</if>
</td>
</tr>
</foreach>
</volist>
</tbody>
</table>
<div style="width: 100%;height: 50px;"></div>
</div>
<script type="text/html" id="updateStatementTpl">
<div style="padding:10px 40px 30px;">
<spend style="font-size:14px;color:#666;">
按月份对汇总数据进行重算任务提交成功后大约需等待3-5分钟才会完成重算
</spend>
<table border="0" cellspacing="0" cellpadding="0" style="margin-top:30px;">
<tr>
<td class="l noticeinfo" style="width:80px;">重算月份:</td>
<td class="r table_radio">
<input type="text" id="updateStatementTime" name="updateStatementTime" autocomplete="off" class="date" placeholder="重算月份" />
</td>
</tr>
</table>
<button class="submit_btn mlspacing" id="updateStatementSubmit" type="submit" style="margin-top:30px;">
保存
</button>
</div>
</script>
</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">
</script>
<script type="text/javascript">
//导航高亮
highlight_subnav('{:U("lists")}');
$(function () {
});
</script>
<script type="text/javascript">
$(function () {
$(".select_gallery").select2();
//搜索功能
$("#search").click(function () {
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;
}
var start = $("#time_start").val();
var end = $("#time_end").val();
if (start != '' && end != '') {
if (Date.parse(start) > Date.parse(end)) {
layer.msg('开始时间必须小于等于结束时间');
return false;
}
}
window.location.href = url;
});
$("#updateStatement").on("click",function(){
var html = $("#updateStatementTpl").html();
layer.open({
type: 1,
title: "汇总重算",
maxWidth:720,
closeBtn: 1,
shadeClose: true,
content: html,
success:function(){
$("#updateStatementSubmit").off("click");
$("#updateStatementTime").datetimepicker({
format: 'yyyy-mm',
language: "zh-CN",
showMeridian:true,
pickDate:true,
startView: 3,
minView: 3,
autoclose: true,
pickTime:true
});
$("#updateStatementSubmit").on("click",function() {
var subtime= $("#updateStatementTime").val();
if(subtime == ''){
layer.msg('请先选择要重算的月份');
return false;
}
var subtimeArr = subtime.split("-");
var today = new Date();
today.setTime(today.getTime());
var year = today.getFullYear();
var month = today.getMonth()+1;//可以超出一个月
if((subtimeArr[0]*12 + (subtimeArr[1]-0) ) > (year*12+month+1) ){
layer.msg('要重算的月份最多大于当前1个月');
return false;
}
$.ajax({
type: 'post',
url: "{:U('updateStatement')}",
data:{time:subtime},
success: function(data) {
if(data.success){
layer.alert('添加重算任务成功请2分钟后刷新查看',function(){
window.location.reload();
});
}else{
layer.alert('添加任务失败,已有重算任务。请等待上个重算任务完成');
}
},
error:function(){
layer.alert("网络错误或超时");
return false;
}
});
});
}
});
})
//回车自动提交
$('.jssearch').find('input').keyup(function (event) {
if (event.keyCode === 13) {
$("#search").click();
}
});
})
</script>
</block>

@ -0,0 +1,293 @@
<?php
namespace Base\Business;
use Base\Service\PromoteCompanyService;
use Base\Service\PromoteService;
use Exception;
use Think\Model;
class ShiftPlayer
{
private $task;
private $fromPromote;
private $toPromote;
private $fromWord;
private $toWord;
private $orderTime;
private $userIds;
private $users;
private $payAmountItems = [];
private $notices = [];
public function __construct($task)
{
$this->task = $task;
$this->orderTime = $task['order_time'];
$this->userIds = json_decode($task['shift_ids'], true) ?? [];
$this->getPromotes();
$this->getShiftUsers();
$this->statShiftPayAmount();
}
public function handle()
{
if ($this->fromPromote['id'] == 0 && count($this->userIds) == 0) {
throw new Exception('官方渠道玩家不能全部迁移');
}
$this->getNoticeCommonWords();
$model = new Model();
$model->startTrans();
$hasError = false;
foreach ($this->users as $user) {
$amount = $this->payAmountItems[$user['id']] ?? 0;
$status = $this->updateMend($user['id'], $amount);
if (!$status) {
$hasError = true;
break;
}
$this->generateNotice($user, $amount);
}
if ($hasError) {
$model->rollback();
throw new Exception('系统异常,修改补链记录失败');
}
$this->saveNotices();
$status = $this->shiftUser();
if (!$status) {
$model->rollback();
throw new Exception('系统异常,修改用户推广员失败');
}
try {
$this->shiftPlayer();
$this->shiftSpend();
$this->shiftDeposit();
$this->shiftBindSpend();
$this->shiftUserDataCount();
$model->commit();
} catch (\Exception $e) {
$model->rollback();
throw new \Exception('系统异常: ' . $e->getMessage());
}
}
public function handleReplenish()
{
$model = new Model();
$model->startTrans();
$hasError = false;
foreach ($this->payAmountItems as $userId => $amount) {
$status = $this->updateMend($userId, $amount);
if (!$status) {
$hasError = true;
break;
}
}
if ($hasError) {
$model->rollback();
throw new Exception('系统异常,修改补链记录失败');
}
try {
$this->shiftSpend();
$this->shiftDeposit();
$this->shiftBindSpend();
$model->commit();
} catch (\Exception $e) {
$model->rollback();
throw new \Exception('系统异常: ' . $e->getMessage());
}
}
private function getPromotes()
{
$toPromoteId = $this->task['to_promote_id'];
$fromPromoteId = $this->task['from_promote_id'];
$toPromote = M('promote', 'tab_')->where(['id' => $toPromoteId])->find();
$fromPromote = M('promote', 'tab_')->where(['id' => $fromPromoteId])->find();
$this->toPromote = $toPromote ?? ['id' => 0, 'account' => C('OFFICIEL_CHANNEL'), 'company_id' => 0];
$this->fromPromote = $fromPromote ?? ['id' => 0, 'account' => C('OFFICIEL_CHANNEL'), 'company_id' => 0];
}
private function getNoticeCommonWords()
{
$belongs = PromoteCompanyService::$belongs;
$formConpany = M('promote_company', 'tab_')->field(['company_name', 'company_belong'])->where(['id' => $this->fromPromote['company_id']])->find();
$toConpany = M('promote_company', 'tab_')->field(['company_name', 'company_belong'])->where(['id' => $this->toPromote['company_id']])->find();
$this->fromWord = $this->fromPromote['account'] . ($formConpany ? '(' . $belongs[$formConpany['company_belong']] . '-' . $formConpany['company_name'] . ')' : '');
$this->toWord = $this->toPromote['account'] . ($toConpany ? '(' . $belongs[$toConpany['company_belong']] . '-' . $toConpany['company_name'] . ')' : '');
}
private function getShiftUsers()
{
$map = $this->getShiftCommonMap(true);
$this->users = M('user', 'tab_')->field(['id', 'account', 'nickname'])->where($map)->select();
}
private function getSpendMap()
{
$map = $this->getShiftCommonMap();
$map['pay_time'] = ['egt', $this->orderTime];
// $map['is_check'] = ['in','1,2'];
$map['settle_check'] = 0;
$map['selle_status'] = 0;
$map['pay_status'] = 1;
return $map;
}
private function statShiftPayAmount()
{
$spendMap = $this->getSpendMap();
$payAmountRows = M('spend', 'tab_')
->field(['user_id', 'sum(pay_amount) pay_amount'])
->where($spendMap)
->group('user_id')
->select();
foreach ($payAmountRows as $row) {
$this->payAmountItems[$row['user_id']] = round(floatval($row['pay_amount']), 2);
}
}
private function updateMend($userId, $amount)
{
return M('mend', 'tab_')
->where(['task_id' => $this->task['id'], 'user_id' => $userId])
->save(['status' => 1, 'pay_amount' => ['exp', 'pay_amount+' . $amount], 'update_time' => time()]);
}
private function generateNotice($user, $amount)
{
if ($amount > 500) {
$userWord = '玩家账号' . $user['account'];
$content = $userWord . ', 从' . $this->fromWord . '换绑到' . $this->toWord . '换绑金额超过500达到' . $amount . '元';
$this->notices[] = [
'type' => 'shift-player',
'title' => '换绑额度超500',
'content' => $content,
'admin_ids' => '31',
'create_time' => time(),
'target' => $user['account'],
'start_time' => time(),
'end_time' => time() + 7*24*3600,
];
}
}
private function saveNotices()
{
if (count($this->notices) > 0) {
M('admin_notice', 'tab_')->addAll($this->notices);
}
}
private function shiftUser()
{
$map = $this->getShiftCommonMap(true);
return M('user', 'tab_')->where($map)->save([
'promote_id' => $this->toPromote['id'],
'promote_account' => $this->toPromote['account']
]);
}
private function shiftPlayer()
{
$map = $this->getShiftCommonMap();
$updateData = [
'promote_id' => $this->toPromote['id'],
'promote_account' => $this->toPromote['account']
];
M('user_play', 'tab_')->where($map)->save($updateData);
M('user_play_info', 'tab_')->where($map)->save($updateData);
}
private function shiftSpend()
{
$toPromote = $this->toPromote;
$spendMap = $this->getSpendMap();
[$hasGameIds, $hasNotGameIds] = $this->getPromoteGameIds($toPromote);
unset($spendMap['pay_status']);
$updateData = [
'promote_id' => $toPromote['id'],
'promote_account' => $toPromote['account'],
'market_admin_id' => $toPromote['admin_id'],
];
if (count($hasGameIds) > 0) {
$spendMap['game_id'] = ['in', $hasGameIds];
M('spend', 'tab_')->where($spendMap)->save(array_merge($updateData, ['is_check' => 1]));
}
if (count($hasNotGameIds) > 0) {
$spendMap['game_id'] = ['in', $hasNotGameIds];
M('spend', 'tab_')->where($spendMap)->save(array_merge($updateData, ['is_check' => 2]));
}
}
private function getPromoteGameIds($promote)
{
$service = new PromoteService();
$toTopPromote = $service->getTopPromote($promote);
$hasGameIds = $toTopPromote['game_ids'] == '' ? [] : explode(',', $toTopPromote['game_ids']);
$hasNotGameIds = M('game', 'tab_')->where(['game_id' => ['not in', $hasGameIds]])->getField('id', true);
$hasNotGameIds = $hasNotGameIds ?? [];
return [$hasGameIds, $hasNotGameIds];
}
private function getShiftCommonMap($isUserTable = false)
{
$map = ['promote_id' => $this->fromPromote['id']];
if (count($this->userIds) > 0) {
$userColumn = $isUserTable ? 'id' : 'user_id';
$map[$userColumn] = ['in', $this->userIds];
}
return $map;
}
private function shiftDeposit()
{
$map = $this->getShiftCommonMap();
$map['create_time'] = ['egt', $this->orderTime];
$toPromote = $this->toPromote;
M('deposit', 'tab_')->where($map)->save([
'promote_id' => $toPromote['id'],
'promote_account' => $toPromote['account'],
'market_admin_id' => $toPromote['admin_id'],
]);
}
private function shiftBindSpend()
{
$map = $this->getShiftCommonMap();
$map['pay_time'] = ['egt', $this->orderTime];
$toPromote = $this->toPromote;
M('bind_spend', 'tab_')->where($map)->save([
'promote_id' => $toPromote['id'],
'promote_account' => $toPromote['account']
]);
}
private function shiftUserDataCount()
{
$map = $this->getShiftCommonMap();
$map['create_time'] = ['egt', $this->orderTime];
M('user_play_data_count', 'tab_')->where($map)->save(['promote_id' => $this->toPromote['id']]);
}
}

@ -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;
}
}

@ -1,6 +1,7 @@
<?php
namespace Base\Service;
use Base\Business\ShiftPlayer;
use Base\Model\PromoteModel;
use Base\Model\UserPlayInfoModel;
use Base\Model\UserPlayModel;
@ -126,13 +127,13 @@ class PromoteService {
];
}
$shiftTask = M('shift_task', 'sys_')->field(['id'])->where(['type' => $type, 'status' => 0, 'from_promote_id' => $fromPromoteId])->find();
/* $shiftTask = M('shift_task', 'sys_')->field(['id'])->where(['type' => $type, 'status' => 0, 'from_promote_id' => $fromPromoteId])->find();
if ($shiftTask) {
return [
'status' => false,
'msg' => '含有类似未执行迁移任务,请稍后再试'
];
}
} */
$data = [
'from_promote_id' => $fromPromoteId,
@ -344,140 +345,12 @@ class PromoteService {
public function shiftPlayer($task)
{
$toPromoteId = $task['to_promote_id'];
$fromPromoteId = $task['from_promote_id'];
$orderTime = $task['order_time'];
$shiftIds = json_decode($task['shift_ids'], true) ?? [];
$toPromote = M('promote', 'tab_')->where(['id' => $toPromoteId])->find();
$fromPromote = M('promote', 'tab_')->where(['id' => $fromPromoteId])->find();
$toPromote = $toPromote ?? ['id' => 0, 'account' => C('OFFICIEL_CHANNEL'), 'company_id' => 0];
$fromPromote = $fromPromote ?? ['id' => 0, 'account' => C('OFFICIEL_CHANNEL'), 'company_id' => 0];
if ($fromPromote['id'] == 0 && count($shiftIds) == 0) {
return ['status' => false, 'msg' => '官方渠道玩家不能全部迁移'];
}
$map = [];
$map['promote_id'] = $fromPromote['id'];
$spendMap = $map;
if (count($shiftIds) > 0) {
$spendMap['user_id'] = $map['id'] = ['in', $shiftIds];
}
$users = M('user', 'tab_')->field(['id', 'account', 'nickname'])->where($map)->select();
$spendMap['pay_time'] = ['egt', $orderTime];
// $spendMap['is_check'] = ['in','1,2'];
$spendMap['settle_check'] = 0;
$spendMap['selle_status'] = 0;
$spendMap['pay_status'] = 1;
$payAmountRows = M('spend', 'tab_')
->field(['user_id', 'sum(pay_amount) pay_amount'])
->where($spendMap)
->group('user_id')
->select();
$payAmountRows = index_by_column('user_id', $payAmountRows);
$users = index_by_column('id', $users);
$notices = [];
$formConpany = M('promote_company', 'tab_')->field(['company_name', 'company_belong'])->where(['id' => $fromPromote['company_id']])->find();
$toConpany = M('promote_company', 'tab_')->field(['company_name', 'company_belong'])->where(['id' => $toPromote['company_id']])->find();
$belongs = PromoteCompanyService::$belongs;
$model = new Model();
$model->startTrans();
$hasError = false;
foreach ($users as $item) {
$amount = isset($payAmountRows[$item['id']]) ? round(floatval($payAmountRows[$item['id']]['pay_amount']), 2) : 0;
$status = M('mend', 'tab_')->where(['task_id' => $task['id'], 'user_id' => $item['id']])->save(['status' => 1, 'pay_amount' => $amount, 'update_time' => time()]);
if (!$status) {
$hasError = true;
}
if ($amount > 500) {
$userWord = '玩家账号' . $item['account'];
$fromWord = $fromPromote['account'] . ($formConpany ? '(' . $belongs[$formConpany['company_belong']] . '-' . $formConpany['company_name'] : '');
$toWord = $toPromote['account'] . ($toConpany ? '(' . $belongs[$toConpany['company_belong']] . '-' . $toConpany['company_name'] : '');
$content = $userWord . ', 从' . $fromWord . '换绑到' . $toWord . '换绑金额超过500达到' . $amount . '元';
$notices[] = [
'type' => 'shift-player',
'title' => '换绑额度超500',
'content' => $content,
'admin_ids' => '31',
'create_time' => time(),
'target' => $item['account'],
'start_time' => time(),
'end_time' => time() + 7*24*3600,
];
}
}
if ($hasError) {
$model->rollback();
return ['status' => false, 'msg' => '系统异常,修改补链记录失败'];
}
$toTopPromote = $this->getTopPromote($toPromote);
$hasGameIds = $toTopPromote['game_ids'] == '' ? [] : explode(',', $toTopPromote['game_ids']);
$hasNotGameIds = M('game', 'tab_')->where(['game_id' => ['not in', $hasGameIds]])->getField('id', true);
$hasNotGameIds = $hasNotGameIds ?? [];
if (count($notices) > 0) {
M('admin_notice', 'tab_')->addAll($notices);
}
$updateData = [
'promote_id' => $toPromote['id'],
'promote_account' => $toPromote['account']
];
$updateMarket = [
'market_admin_id' => $toPromote['admin_id'],
];
$map = $otherMap = ['promote_id' => $fromPromote['id']];
if (count($shiftIds) > 0) {
$map['id'] = ['in', $shiftIds];
$otherMap['user_id'] = ['in', $shiftIds];
}
$status = M('user', 'tab_')->where($map)->save($updateData);
if (!$status) {
$model->rollback();
return ['status' => false, 'msg' => '系统异常,修改用户推广员失败'];
}
try {
M('user_play', 'tab_')->where($otherMap)->save($updateData);
M('user_play_info', 'tab_')->where($otherMap)->save($updateData);
unset($spendMap['pay_status']);
if (count($hasGameIds) > 0) {
$spendMap['game_id'] = ['in', $hasGameIds];
M('spend', 'tab_')->where($spendMap)->save(array_merge($updateData, $updateMarket, ['is_check' => 1]));
}
if (count($hasNotGameIds) > 0) {
$spendMap['game_id'] = ['in', $hasNotGameIds];
M('spend', 'tab_')->where($spendMap)->save(array_merge($updateData, $updateMarket, ['is_check' => 2]));
}
$bindMap = $otherMap;
$bindMap['pay_time'] = ['egt', $orderTime];
M('bind_spend', 'tab_')->where($bindMap)->save($updateData);
$orderMap = $otherMap;
$orderMap['create_time'] = ['egt', $orderTime];
M('deposit', 'tab_')->where($orderMap)->save(array_merge($updateData, $updateMarket));
M('user_play_data_count', 'tab_')->where($orderMap)->save(['promote_id' => $toPromote['id']]);
$model->commit();
$shiftPlayer = new ShiftPlayer($task);
$shiftPlayer->handle();
return ['status' => true, 'msg' => '玩家迁移成功'];
} catch (\Exception $e) {
$model->rollback();
return ['status' => true, 'msg' => '系统异常: ' . $e->getMessage()];
return ['status' => false, 'msg' => $e->getMessage()];
}
}
@ -492,6 +365,21 @@ class PromoteService {
M('shift_task', 'sys_')->where('id=' . $task['id'])->save($data);
}
/**
* 玩家补充迁移(处理在迁移过程中玩家正在充值的订单无法迁移的问题)
*/
public function replenishShift($task)
{
try {
$shiftPlayer = new ShiftPlayer($task);
$shiftPlayer->handleReplenish();
M('shift_task', 'sys_')->where('id=' . $task['id'])->save(['is_replenished' => 1]);
return ['status' => true, 'msg' => '玩家补充迁移完成'];
} catch (\Exception $e) {
return ['status' => false, 'msg' => $e->getMessage()];
}
}
public function shift($task)
{
$result = null;

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

@ -2,6 +2,7 @@
namespace Base\Tool\GameResource;
use Base\Tool\Log;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
@ -41,6 +42,7 @@ class LeyouClient
return $this->request($api, $params);
} catch (\Exception $e) {
$env = C('APP_ENV', null, 'prod');
Log::error('Leyou ' . $e->getMessage());
return $e->getMessage();
}
}
@ -60,7 +62,9 @@ class LeyouClient
'verify' => false,
'form_params' => $params,
]);
return (string)$response->getBody();
$result = (string)$response->getBody();
Log::info('Leyou ' . json_encode($params) . ' ' . $result);
return $result;
}
protected function get($uri, array $params = [])
@ -69,7 +73,9 @@ class LeyouClient
'verify' => false,
'query' => $params,
]);
return (string)$response->getBody();
$result = (string)$response->getBody();
Log::info('Leyou ' . json_encode($params) . ' ' . $result);
return $result;
}
protected function sign($params)
@ -155,6 +161,7 @@ class LeyouClient
121255 => ['ref_id' => 121255, 'name' => '198元礼包激活卡', 'amount' => 198],
121256 => ['ref_id' => 121256, 'name' => '328元礼包激活卡', 'amount' => 328],
121257 => ['ref_id' => 121257, 'name' => '648元礼包激活卡', 'amount' => 648],
121262 => ['ref_id' => 121262, 'name' => '钻石特权30元卡', 'amount' => 30],
];
/* return [

@ -2,6 +2,7 @@
namespace Base\Tool\GameResource;
use Base\Tool\Log;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
@ -39,6 +40,7 @@ class LsxxClient
return $this->request($api, $params);
} catch (\Exception $e) {
$env = C('APP_ENV', null, 'prod');
Log::error('Lsxx ' . $e->getMessage());
return ['status' => 0, 'msg' => '接口请求错误。' . ($env == 'prod' ? '' : $e->getMessage()) , 'data' => []];
}
}
@ -59,6 +61,7 @@ class LsxxClient
'form_params' => $params,
]);
$result = (string)$response->getBody();
Log::info('Lsxx ' . json_encode($params) . ' ' . $result);
return json_decode($result, true);
}
@ -69,6 +72,7 @@ class LsxxClient
'query' => $params,
]);
$result = (string)$response->getBody();
Log::info('Lsxx ' . json_encode($params) . ' ' . $result);
return json_decode($result, true);
}

@ -2,9 +2,9 @@
namespace Base\Tool\GameResource;
use Base\Tool\Log;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
use Think\Log;
/**
* 双倍传奇-测试资源接口
@ -42,6 +42,7 @@ class SbcqClient
return $this->request($api, $params);
} catch (\Exception $e) {
$env = C('APP_ENV', null, 'prod');
Log::error('rebate:SBCQ ' . $e->getMessage());
return ['status' => 'error', 'msg' => '接口请求错误。' . ($env == 'prod' ? '' : $e->getMessage()) , 'data' => []];
}
}
@ -62,7 +63,7 @@ class SbcqClient
'form_params' => $params,
]);
$result = (string)$response->getBody();
Log::record('rebate:SBCQ ' . $uri . ' -- '. json_encode($params) . ' -- '. $result);
Log::info('rebate:SBCQ ' . $uri . ' -- '. json_encode($params) . ' -- '. $result);
return json_decode($result, true);
}
@ -73,7 +74,7 @@ class SbcqClient
'query' => $params,
]);
$result = (string)$response->getBody();
Log::record('rebate:SBCQ ' . $uri . ' -- '. json_encode($params) . ' -- '. $result);
Log::info('rebate:SBCQ ' . $uri . ' -- '. json_encode($params) . ' -- '. $result);
return json_decode($result, true);
}

@ -2,9 +2,9 @@
namespace Base\Tool\GameResource;
use Base\Tool\Log;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
use Think\Log;
/**
* 逍遥游之仙魔降世-测试资源接口
@ -43,6 +43,7 @@ class XyyClient
return $this->request($api, $params);
} catch (\Exception $e) {
$env = C('APP_ENV', null, 'prod');
Log::error('rebate:XYY ' . $e->getMessage());
return ['code' => 3, 'msg' => '接口请求错误。' . ($env == 'prod' ? '' : $e->getMessage()) , 'data' => []];
}
}
@ -63,7 +64,7 @@ class XyyClient
'form_params' => $params,
]);
$result = (string)$response->getBody();
Log::record('rebate:XYY ' . $uri . ' -- '. json_encode($params) . ' -- '. $result);
Log::info('rebate:XYY ' . $uri . ' -- '. json_encode($params) . ' -- '. $result);
return json_decode($result, true);
}
@ -74,7 +75,7 @@ class XyyClient
'query' => $params,
]);
$result = (string)$response->getBody();
Log::record('rebate:XYY ' . $uri . ' -- '. json_encode($params) . ' -- '. $result);
Log::info('rebate:XYY ' . $uri . ' -- '. json_encode($params) . ' -- '. $result);
return json_decode($result, true);
}

@ -2,6 +2,7 @@
namespace Base\Tool\GameResource;
use Base\Tool\Log;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
@ -57,6 +58,7 @@ class YzchzbClient
return $this->request($api, $params);
} catch (\Exception $e) {
$env = C('APP_ENV', null, 'prod');
Log::error($e->getMessage());
return ['code' => 1000, 'state' => 1000, 'message' => '接口请求错误。' . ($env == 'prod' ? '' : $e->getMessage()) , 'data' => []];
}
}
@ -77,6 +79,7 @@ class YzchzbClient
'form_params' => $params,
]);
$result = (string)$response->getBody();
Log::info(json_encode($params) . ' ' . $result);
return json_decode($result, true);
}
@ -87,6 +90,7 @@ class YzchzbClient
'query' => $params,
]);
$result = (string)$response->getBody();
Log::info(json_encode($params) . ' ' . $result);
return json_decode($result, true);
}

@ -0,0 +1,54 @@
<?php
namespace Base\Tool;
use Think\Log as BaseLog;
class Log
{
public static function info($content, $fileName = '')
{
self::write($content, BaseLog::INFO, $fileName);
}
public static function error($content, $fileName = '')
{
self::write($content, BaseLog::ERR, $fileName);
}
public static function debug($content, $fileName = '')
{
self::write($content, BaseLog::DEBUG, $fileName);
}
public static function warning($content, $fileName = '')
{
self::write($content, BaseLog::WARN, $fileName);
}
public static function notice($content, $fileName = '')
{
self::write($content, BaseLog::NOTICE, $fileName);
}
public static function alert($content, $fileName = '')
{
self::write($content, BaseLog::ALERT, $fileName);
}
public static function critical($content, $fileName = '')
{
self::write($content, BaseLog::CRIT, $fileName);
}
public static function emergency($content, $fileName = '')
{
self::write($content, BaseLog::EMERG, $fileName);
}
private static function write($content, $level, $fileName)
{
$fileName = $fileName == '' ? 'app' : $fileName;
$destination = RUNTIME_PATH . 'Logs/Common/' . $fileName . '_' . date('y_m_d') . '.log';
BaseLog::write($content, $level, '', $destination);
}
}

@ -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>

@ -41,26 +41,66 @@ class WxPaymentController extends BaseController
$params = I('get.');
$page = $params['p'] ? intval($params['p']) : 1;
$row = $params['row'] ? intval($params['row']) : 10;
$where = [];
$where = [
'_string'=>'1=1'
];
if(isset($_REQUEST['nickname'])){
$where['nickname'] = ["LIKE","%{$_REQUEST['nickname']}%"];
}
if(isset($_REQUEST['realname'])){
$where['realname'] = ["LIKE","%{$_REQUEST['realname']}%"];
}
if(isset($_REQUEST['type'])){
if($_REQUEST['type'] == 1){
$where['_string'] .= " AND realname = ''";
}
if($_REQUEST['type'] == 2){
$where['_string'] .= " AND realname != ''";
}
}
$data = M('mini_program_user', 'tab_')
->field("wx_json",true)
->where($where)
->page($page,$row)
->select();
foreach ($data as $key => $value) {
if(empty($value['realname'])){
$data[$key]['is_pay'] =0;
}else{
$data[$key]['is_pay'] =1;
}
$data[$key]['create_time'] = date('Y-m-d H:i:s',$value['create_time']);
}
$count = M('mini_program_user', 'tab_')->where($where)->count();
$page = set_pagination_all($count['count'], $row);
$page = set_pagination_all($count, $row);
if ($page) {
$this->assign('_page', $page);
}
$this->assign('data', $data);
$this->display();
}
public function updateRealname()
{
$params = I('post.');
M('mini_program_user', 'tab_')->save([
'id'=>$params['id'],
'realname'=>trim($params['realname'])
]);
$this->ajaxReturn([
'success'=>'ok'
]);
}
public function addPayList()
{
$params = I('post.');
$batch = date('Ymd').date('His').sp_random_num(3);
$item = M('mini_program_user',"tab_")->field('realname,openid')->where(['id'=>$params['id']])->find();
$item['statement_money'] = $params['statement_money'];
$this->addListItem($batch,$item);
$this->ajaxReturn(["status"=>1,"msg"=>"添加成功"]);
}
public function customerExport()
{
@ -90,7 +130,7 @@ class WxPaymentController extends BaseController
$line = 2;
//设置模板文件
foreach ($data as $key => $value) {
$objPHPExcel->getActiveSheet()->setCellValue('A'.$line, $line-1)->setCellValue('B'.$line, $value['openid']);
$objPHPExcel->getActiveSheet()->setCellValue('A'.$line, $line-1)->setCellValue('B'.$line, $value['openid'])->setCellValue('C'.$line, $value['realname']);
$line++;
}
@ -199,36 +239,41 @@ class WxPaymentController extends BaseController
if(count($checkarr) < 1){
$this->ajaxReturn(["status"=>1,"msg"=>"ok"]);
}
foreach ($checkarr as $k => &$v) {
$this->addListItem($batch,$v);
}
$this->ajaxReturn(["status"=>1,"msg"=>"ok"]);
}
private function addListItem($batch,$v)
{
$pinyin = new \Think\Pinyin();
$wxPayment = M('wx_payment',"tab_");
foreach ($checkarr as $k => &$v) {
if(!isset($v['realname']) || !isset($v['openid']) || !isset($v['statement_money']) || $v['realname'] == '' || $v['openid'] == '' || $v['statement_money'] <= 0){
$wxPayment->where("batch_num = '{$v['batch_num']}'")->delete();
$this->ajaxReturn(["status"=>0,"msg"=>"真实姓名,openid,打款金额均不允许为空"]);
}
if(!isset($v['realname']) || !isset($v['openid']) || !isset($v['statement_money']) || $v['realname'] == '' || $v['openid'] == '' || $v['statement_money'] <= 0){
$wxPayment->where("batch_num = '{$batch}'")->delete();
$this->ajaxReturn(["status"=>0,"msg"=>"真实姓名,openid,打款金额均不允许为空"]);
}
$num = mb_strlen($v['realname'], 'UTF8');
$short = '';
for ($i = 0; $i < $num; $i++) {
$str = mb_substr($v['realname'], $i, $i + 1, 'UTF8');
$short .= $pinyin->getFirstChar($str);
}
$num = mb_strlen($v['realname'], 'UTF8');
$short = '';
for ($i = 0; $i < $num; $i++) {
$str = mb_substr($v['realname'], $i, $i + 1, 'UTF8');
$short .= $pinyin->getFirstChar($str);
}
$v['batch_num'] = $batch;
$v['statement_num'] = "WX{$short}".date('Ymd').date('His').sp_random_string(5);
$v['create_time'] = time();
$res = $wxPayment->add($v);
if($res === false){
$wxPayment->where("batch_num = '{$v['batch_num']}'")->delete();
$this->ajaxReturn(["status"=>0,"msg"=>"添加失败"]);
}
$v['batch_num'] = $batch;
$v['statement_num'] = "WX{$short}".date('Ymd').date('His').sp_random_string(5);
$v['create_time'] = time();
$res = $wxPayment->add($v);
if($res === false){
$wxPayment->where("batch_num = '{$batch}'")->delete();
$this->ajaxReturn(["status"=>0,"msg"=>"添加失败"]);
}
$this->ajaxReturn(["status"=>1,"msg"=>"ok"]);
}
public function showPayment()
{
if(!isset($_REQUEST['ids'])) $this->error("参数错误");

@ -181,7 +181,7 @@
<script type="text/javascript">
var isfile = false;
var rABS = false; //是否将文件读取为二进制字符串
var check_size = 1;//每次验证的数量
var check_size = 5;//每次验证的数量
var batch = '{$batch}';
var sendDefaultData = {
"filedata_count": 0,

@ -142,6 +142,18 @@
<input type="text" name="nickname" class="" value="{:I('nickname')}" placeholder="昵称查找" style="width: 180px;"/>
</div>
<div class="input-list">
<input type="text" name="realname" class="" value="{:I('realname')}" placeholder="真实姓名查找" style="width: 180px;"/>
</div>
<div class="input-list input-list-promote search_label_rehab">
<select id="type" name="type" class="select_gallery" style="width:150px;">
<option value="">是否实名</option>
<option value="1" <if condition="1 eq $_GET['type']">selected=selected</if>>未实名</option>
<option value="2" <if condition="2 eq $_GET['type']">selected=selected</if>>已实名</option>
</select>
</div>
<div class="input-list">
<a class="sch-btn" href="javascript:;" id="search" url="{:U('customerLists','model='.$model['name'] .'&row='.I('row'),false)}">搜索</a>
</div>
@ -163,10 +175,12 @@
<thead>
<tr>
<th><input class="check-all" type="checkbox"></th>
<th>昵称</th>
<th>openid</th>
<th>真实姓名</th>
<th>昵称</th>
<th>头像</th>
<th>添加时间</th>
<th>操作</th>
</tr>
</thead>
@ -181,10 +195,17 @@
<volist name="data" id="data">
<tr>
<td ><input class="ids" type="checkbox" value="{$data['ids']}" data-verify_id="{$data['id']}" name="ids[]"></td>
<td>{$data.nickname}</td>
<td>{$data.openid}</td>
<td>{$data.realname}</td>
<td>{$data.nickname}</td>
<td style="display: flex;justify-content:center"><img src="{$data.avatar}" style="width: 50px;height: auto;"></td>
<td>{$data.create_time}</td>
<td>
<a class="edit" data-id="{$data['id']}" data-realname="{$data.realname}">编辑</a>
<if condition="$data.is_pay eq 1 ">
<a class="pay" data-id="{$data['id']}" data-realname="{$data.realname}">打款</a>
</if>
</td>
</tr>
</volist>
</notemtpy>
@ -193,6 +214,44 @@
</div>
</div>
<script type="text/html" id="updateRealnameTpl">
<div style="padding:10px 40px 30px;">
<spend style="font-size:14px;color:#666;">
小程序用户实名修改
</spend>
<table border="0" cellspacing="0" cellpadding="0" style="margin-top:30px;">
<tr>
<td class="l noticeinfo" style="width:80px;">真实姓名:</td>
<td class="r table_radio">
<input type="text" id="realname" name="realname" autocomplete="off" placeholder="请输入真实姓名" />
</td>
</tr>
</table>
<button class="submit_btn mlspacing" id="updateStatementSubmit" type="submit" style="margin-top:30px;">
保存
</button>
</div>
</script>
<script type="text/html" id="payTpl">
<div style="padding:10px 40px 30px;">
<spend style="font-size:14px;color:#666;">
打款金额设置(单位元)
</spend>
<table border="0" cellspacing="0" cellpadding="0" style="margin-top:30px;">
<tr>
<td class="l noticeinfo" style="width:80px;">打款金额:</td>
<td class="r table_radio">
<input type="number" οninput="value=value.replace(/[^\w\.\/]/ig, '')" id="statement_money" name="statement_money" autocomplete="off" placeholder="请输入打款金额" />
</td>
</tr>
</table>
<button class="submit_btn mlspacing" id="paySubmit" type="submit" style="margin-top:30px;">
保存
</button>
</div>
</script>
<div class="page">
{$_page|default=''}
</div>
@ -222,6 +281,86 @@
highlight_subnav("{:U('customerLists')}");
$(function(){
$(".edit").on("click",function(){
var html = $("#updateRealnameTpl").html();
var orginData = $(this).data();
layer.open({
type: 1,
title: "编辑",
maxWidth:720,
closeBtn: 1,
shadeClose: true,
content: html,
success:function(){
$("#realname").val(orginData.realname);
$("#updateStatementSubmit").off("click");
$("#updateStatementSubmit").on("click",function() {
var realname= $("#realname").val();
$.ajax({
type: 'post',
url: "{:U('updateRealname')}",
data:{realname:realname,id:orginData.id},
success: function(data) {
if(data.success){
layer.alert('修改成功',function(){
window.location.reload();
});
}else{
layer.alert('修改失败');
}
},
error:function(){
layer.alert("网络错误或超时");
return false;
}
});
});
}
});
})
$(".pay").on("click",function(){
var html = $("#payTpl").html();
var orginData = $(this).data();
layer.open({
type: 1,
title:'向【'+orginData.realname+'】打款',
maxWidth:720,
closeBtn: 1,
shadeClose: true,
content: html,
success:function(){
$("#statement_money").val(0);
$("#paySubmit").off("click");
$("#paySubmit").on("click",function() {
var statement_money= $("#statement_money").val();
$.ajax({
type: 'post',
url: "{:U('addPayList')}",
data:{statement_money:statement_money,id:orginData.id},
success: function(data) {
if(data.status ==1){
layer.alert('添加成功',function(){
window.location.href = "{:U('lists')}";
});
}else{
layer.alert(data.msg);
}
},
error:function(){
layer.alert("网络错误或超时");
return false;
}
});
});
}
});
})
$("#customerExport").click(function () {
var flag = false;
var text = $("input:checkbox[name='ids[]']:checked").map(function(index,elem) {

@ -2906,4 +2906,8 @@ CREATE TABLE `tab_rebate_orders` (
`send_result` varchar(255) not null DEFAULT '' COMMENT '发送结果',
`create_time` int(11) NOT NULL DEFAULT 0 COMMENT '生成时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='游戏返利订单表';
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='游戏返利订单表';
ALTER TABLE `sys_shift_task`
ADD COLUMN `is_replenished` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否已处理玩家补充迁移' AFTER `status`;
update sys_shift_task set is_replenished = 1;
Loading…
Cancel
Save