Merge pull request 'feature/finance_payment_20210115' (#211) from feature/finance_payment_20210115 into release

优化结算同步
master
陈志 4 years ago
commit 4e33c653f6

@ -129,5 +129,6 @@ return array(
"tab_reward_detail",
"tab_reward_record",
"tab_new_company_statement_info",
"tab_spend"
]
);

@ -229,6 +229,13 @@ class CompanyStatementController extends ThinkController
}
$this->assign("IS_SUBSITE",IS_SUBSITE);
if(IS_SUBSITE){
$SubKvModel = M("Kv","sub_",SUBSITE_DB);//指定子库
$LastSynTime = $SubKvModel->where("`key` = 'sub_spend_syn_time'")->getField("value");
$LastStatementTime = $SubKvModel->where("`key` = 'sub_company_statement'")->getField("value");
$this->assign('lastSynTime',date('Y-m-d',$LastSynTime));
$this->assign('lastStatementTime',date('Y-m-d',$LastStatementTime));
}
$this->assign('data',$data);
$this->assign('count',$count);
@ -1761,6 +1768,24 @@ class CompanyStatementController extends ThinkController
$this->ajaxReturn(array("success"=>"ok","data"=>[]));
}
//子站新增结算
public function subAddStatement(){
if(!isset($_REQUEST['statement_time'])) $this->error("参数错误");
$statement_time = $_REQUEST['statement_time'];
$end = date("Y-m-d",strtotime($statement_time)+ 86400);
$utime = strtotime($statement_time)+86399;
$LastStatementTime = M("Kv","sub_",SUBSITE_DB)->where("`key` = 'sub_company_statement'")->getField("value");
$begin = date("Y-m-d",$LastStatementTime-0+1);
$params = "php ".SUBSITE_INDEX." SubCompanyStatementSet/setFreeDateCount/begin/{$begin}/end/{$end}/utime/{$utime}";
$r = D("CmdTasks")->addTask("SubCompanyStatementSet",$params);
if($r){
$this->ajaxReturn(["status"=>1,"info"=>"任务登记成功,请等待五分分钟后查看结果"]);
}else{
$this->ajaxReturn(["status"=>0,"info"=>"任务登记错误"]);
}
}
public function viewSpecialComplement() {
@ -2475,6 +2500,13 @@ class CompanyStatementController extends ThinkController
"viewSpecialComplement"=>"<a class='butn' id='viewSpecialComplement'>特殊补点</a>",
"delStatement"=>"<a class='butn' id='delStatement' style='background-color: red;'>批量删除</a>"
];
if(IS_SUBSITE){
unset($mentBtn['updateNewStatement']);
$is_can_add = D("CmdTasks")->isCanAddTask("SubCompanyStatementSet");
if($is_can_add){
$mentBtn['subAddStatement'] = "<a class='butn' id='subAddStatement' style='background-color: green;'>新增结算</a>";
}
}
$resarr = [];
foreach ($mentBtn as $k => $v) {
if(IS_ROOT){

@ -1087,6 +1087,12 @@ class ExportController extends Controller
$startTime = strtotime($startDate);
$endTime = strtotime($endDate) + 86399;
$map['pay_time'] = array('BETWEEN', array($startTime, $endTime));
$is_sub_data = I("issubdata",0);
if($is_sub_data == 1){
$SpendModel = M("spend","tab_",SUBSITE_DB);
}else{
$SpendModel = M("spend","tab_");
}
unset($_REQUEST['timestart']);
unset($_REQUEST['timeend']);
@ -1201,7 +1207,7 @@ class ExportController extends Controller
D("Spend")->addSubsiteWhere($map);
$map1 = $map;
$map1['pay_status'] = 1;
$total = M('Spend','tab_')->where($map1)->sum('pay_amount');
$total = $SpendModel->where($map1)->sum('pay_amount');
// var_dump($total);die();
$total=$total?$total:0;
@ -1277,7 +1283,7 @@ class ExportController extends Controller
mb_convert_variables('GBK', 'UTF-8', $xlsCell);
fputcsv($fp, $xlsCell);//将数据格式化为CSV格式并写入到output流中
$accessNum = M('Spend',"tab_")
$accessNum = $SpendModel
->where($map)
->count();
@ -1286,7 +1292,7 @@ class ExportController extends Controller
// var_dump($count);die();
for($i = 1; $i <= $pages; $i++) {
$xlsData = M('Spend',"tab_")
$xlsData = $SpendModel
->field($fields)
->where($map)
->limit(($i-1)*$perSize ,$perSize)

@ -24,6 +24,15 @@ class SubCompanyStatementSetController extends Controller {
echo "请先设置请求接口aggregate_cp_settlement_api的值".PHP_EOL;die;
}
$this->cpapihost = $cpapihost['value'];
$this->synGame();
}
//同步游戏表
protected function synGame()
{
$mainGame = M("Game","tab_")->select();
SM()->execute("truncate table tab_game");
M("game","tab_",SUBSITE_DB)->addAll($mainGame);
}
/**
* Undocumented function
@ -33,7 +42,7 @@ class SubCompanyStatementSetController extends Controller {
* @param string $company all/pc/cp/pu 全部 下游公司 上游 下游个人
* @return void
*/
public function setFreeDateCount($begin,$end='',$company='all')
public function setFreeDateCount($begin,$end='',$utime=false,$company='all')
{
if($end == '') $end = $begin;
//判断日期格式
@ -58,6 +67,9 @@ class SubCompanyStatementSetController extends Controller {
for($i=0;$i<$countdate;$i++){
$this->setDailyCount($datelist[$i],$company);
}
if($utime){
M("Kv","sub_",SUBSITE_DB)->where("`key` = 'sub_company_statement'")->save(["value"=>$utime]);
}
}
public function setDailyCount($stime="now",$company='all')
{
@ -74,14 +86,14 @@ class SubCompanyStatementSetController extends Controller {
$w = (int)date("w",$stime);
if($w == 1){
if($company == "all"){
echo $nowdate.":".PHP_EOL;
echo "--周结begin".PHP_EOL;
// echo $nowdate.":".PHP_EOL;
// echo "--周结begin".PHP_EOL;
$this->cpStatement(0,$stime);
echo "∟----CP周结统计ok".PHP_EOL;
// echo "∟----CP周结统计ok".PHP_EOL;
$this->promoteCompanyStatement(0,$stime);
echo "∟----推广公司周结统计ok".PHP_EOL;
// echo "∟----推广公司周结统计ok".PHP_EOL;
}
if($company == "cp"){
$this->cpStatement(0,$stime);
@ -94,19 +106,18 @@ class SubCompanyStatementSetController extends Controller {
}
if($d == 1){
if($company == "all"){
echo $nowdate.":".PHP_EOL;
echo "--月结&补点begin".PHP_EOL;
// echo $nowdate.":".PHP_EOL;
// echo "--月结&补点begin".PHP_EOL;
$this->cpStatement(1,$stime);
echo "∟----CP月结&补点统计ok".PHP_EOL;
// echo "∟----CP月结&补点统计ok".PHP_EOL;
$this->promoteCompanyStatement(1,$stime);
$this->officeCompanyStatement($stime); //官方结算
echo "∟----官方/推广公司月结统计ok".PHP_EOL;
// echo "∟----官方/推广公司月结统计ok".PHP_EOL;
$this->promoteUserPool(1,$stime);
echo "∟----推广个人月结统计ok".PHP_EOL;
// echo "∟----推广个人月结统计ok".PHP_EOL;
}
if($company == "cp"){
$this->cpStatement(1,$stime);
@ -122,9 +133,9 @@ class SubCompanyStatementSetController extends Controller {
echo "∟----推广个人月结&补点统计ok".PHP_EOL;
}
}
if($w != 1 && $d != 1){
echo $nowdate."非月初,无需任何处理".PHP_EOL;
}
// if($w != 1 && $d != 1){
// echo $nowdate."非月初,无需任何处理".PHP_EOL;
// }
}
/**
* 上游结算
@ -396,7 +407,7 @@ class SubCompanyStatementSetController extends Controller {
$Promote = M("Promote","tab_");
$Spend = M("Spend","tab_");
$Spend = SM("Spend","tab_");
$spenMap = [
"s.pay_status"=>1,
"s.payed_time"=>['between', [$begintime,$endtime]],
@ -614,7 +625,7 @@ class SubCompanyStatementSetController extends Controller {
//获取推广员
if(count($idarr) == 0){return $res;}
$Promote = M("Promote","tab_");
$Spend = M("Spend","tab_");
$Spend = SM("Spend","tab_");
$spenMap = [
"s.pay_status"=>1,
"s.payed_time"=>['between', [$begintime,$endtime]],
@ -994,7 +1005,7 @@ class SubCompanyStatementSetController extends Controller {
$res = [];
//获取推广员
$Promote = M("Promote","tab_");
$Spend = M("Spend","tab_");
$Spend = SM("Spend","tab_");
$spenMap = [
"s.pay_status"=>1,
"s.payed_time"=>['between', [$begintime,$endtime]],
@ -1021,7 +1032,7 @@ class SubCompanyStatementSetController extends Controller {
$res = [];
//获取推广员
$Promote = M("Promote","tab_");
$Spend = M("Spend","tab_");
$Spend = SM("Spend","tab_");
$spenMap = [
"s.pay_status"=>1,
"s.payed_time"=>['between', [$begintime,$endtime]],

@ -0,0 +1,402 @@
<?php
namespace Admin\Controller;
/**
* 后台首页控制器
* @author 麦当苗儿 <zuojiazi@vip.qq.com>
*/
class SubSpendController extends ThinkController
{
const model_name = 'Spend';
public $OpAuthList;
public function lists()
{
list($is_sub_data, $startTime, $endTime) = $this->setSelectDate();
// dump($is_sub_data);
// dump($startTime);
// dump($endTime);
// dd(1);
$map['pay_time'] = array('BETWEEN', array($startTime, $endTime));
if (isset($_REQUEST['is_check'])) {
$map['is_check'] = (int)($_REQUEST['is_check']);
}
if (isset($_REQUEST['user_account'])) {
$map['user_account'] = array('like', trim($_REQUEST['user_account']));
unset($_REQUEST['user_account']);
}
if (isset($_REQUEST['spend_ip'])) {
$map['spend_ip'] = array('like', trim($_REQUEST['spend_ip']) . '%');
unset($_REQUEST['spend_ip']);
}
if (isset($_REQUEST['game_name'])) {
if ($_REQUEST['game_name'] == '全部') {
unset($_REQUEST['game_name']);
} else {
$map['game_id'] = ['in', array_column(getGameByName($_REQUEST['game_name'], $_REQUEST['game_type']), 'id')];
unset($_REQUEST['game_name']);
}
}
if (isset($_REQUEST['game_type']) && $_REQUEST['game_type']) {
$map['sdk_version'] = $_REQUEST['game_type'];
}
if (isset($_REQUEST['server_id'])) {
$map['server_id'] = $_REQUEST['server_id'];
unset($_REQUEST['server_id']);
}
if (isset($_REQUEST['pay_order_number'])) {
$map['pay_order_number'] = array('like', trim($_REQUEST['pay_order_number']));
unset($_REQUEST['pay_order_number']);
}
if (isset($_REQUEST['extend'])) {
$map['extend'] = array('like', trim($_REQUEST['extend']));
unset($_REQUEST['extend']);
}
if (isset($_REQUEST['pay_status'])) {
$map['pay_status'] = $_REQUEST['pay_status'];
unset($_REQUEST['pay_status']);
}
if (isset($_REQUEST['pay_way'])) {
if ($_REQUEST['pay_way'] == 2) {
$map['pay_way'] = ['in', '2,3,4'];
} else {
$map['pay_way'] = $_REQUEST['pay_way'];
}
unset($_REQUEST['pay_way']);
}
if (isset($_REQUEST['pay_game_status'])) {
$map['pay_game_status'] = $_REQUEST['pay_game_status'];
unset($_REQUEST['pay_game_status']);
}
if ($_REQUEST['merchant_id']) {
$map['merchant_id'] = $_REQUEST['merchant_id'];
unset($_REQUEST['merchant_id']);
}
$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;
} else {
setPowerPromoteIds($map,'promote_id');
}
if (isset($_REQUEST['promote_id'])) {
$promoteId = intval($_REQUEST['promote_id']);
if ($promoteId == 0) {
$map['promote_id'] = 0;
} else {
$promoteMap['chain'] = ['like', "%/$promoteId/%"];
$promoteIds = M('Promote', 'tab_')->where($promoteMap)->getField('id', true);
$promoteIds[] = $promoteId;
$map['promote_id'] = ['in', $promoteIds];
}
}
if ($_REQUEST['data_order'] != '') {
$data_order = reset(explode(',', $_REQUEST['data_order']));
$data_order_type = end(explode(',', $_REQUEST['data_order']));
$this->assign('userarpu_order', $data_order);
$this->assign('userarpu_order_type', $data_order_type);
$sort = $data_order == 3 ? 'desc' : 'asc';
$order = $data_order_type . ' ' . $sort;
} else {
$order = ' pay_time desc ';
}
if (I('platform_type', 0) != 0) {
$sy = I('platform_type', 0) == 1 ? '=' : '<>';
$game_id = M("Game","tab_")->where('unique_code ' . $sy . ' ""')->getField("id",true);
$map['game_id'] = ['in',$game_id];
}
// if (intval(($endTime + 1) - $startTime) / (24 * 3600) <= 31) {
// $map1 = $map;
// $map1['pay_status'] = 1;
// } else {
// $map = '1 = 2';
// $map1 = $map;
// }
$this->checkListOrCountAuthRestMap($map,["extend", "pay_order_number", "user_account"]);
D("Spend")->addSubsiteWhere($map);
$map1 = $map;
$map1['pay_status'] = 1;
$total = null_to_0(M(self::model_name,"tab_")->where($map1)->sum('pay_amount'));
$this->assign('total', $total);
$this->meta_title = $this->m_title = '游戏充值';
$this->assign('commonset', M('Kuaijieicon')->where(['url' => 'Spend/lists', 'status' => 1])->find());
$data = $this->getSpendList($_GET["p"], $map, $order,$is_sub_data);
if (!empty($data['data'])) {
$adminUsernameList = getAdminUsernameList(array_column($data['data'], 'market_admin_id'));
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['is_check_str'] = D(self::model_name)::IsCheckStr[$value['is_check']];
//拆分游戏名称和设备类型
$game_arr = explode("(", rtrim($value['game_name'], ")"));
$value['game_name'] = $game_arr[0];
$value['sdk_version_name'] = $game_arr[1];
}
}
$this->assign('showMarketAdmin', session('user_auth')['show_market_admin']);
$this->assign('showPromote', session('user_auth')['show_promote']);
$this->assign('isMarketAdmin', $isMarketAdmin);
$this->assign('marketAdmins', getMarketAdmins());
$this->assign('list_data', $data['data']);
$this->assign('_page', $data['page']);
$show_data_power = (is_administrator()|| session('user_auth')['show_data']);
$this->assign('show_data_power', $show_data_power);
if(!IS_ROOT){
$this->OpAuthList= getModuleControllerAuth();
}
$this->assign('menubtn',$this->menuAuth($is_sub_data));
$this->display();
}
protected function menuAuth($is_sub_data = false)
{
$is_can_add = D("CmdTasks")->isCanAddTask("SubSpendSet");
if($is_can_add){
$mentBtn = [
"addSubSpendSet"=>"<a class='butn' id='addSubSpendSet'>固定订单</a>",
"updateSubSpend"=>"<a class='butn' id='updateSubSpend'>重固订单</a>"
];
}else{
$mentBtn = [];
}
if($is_sub_data){
$mentBtn['changeSubSpend'] = "<a class='butn' id='changeSubSpend'>订单换绑</a>";
$mentBtn['addStatement'] = "<a class='butn' id='addStatement'>参与结算</a>";
$mentBtn['removeStatement'] = "<a class='butn' id='removeStatement' style='background-color: red;'>移出结算</a>";
}
$resarr = [];
foreach ($mentBtn as $k => $v) {
if(IS_ROOT){
$resarr[] = $v;
}else{
if(in_array($k,$this->OpAuthList)){
$resarr[] = $v;
}
}
}
return $resarr;
}
public function addSubSpendSet(){
if(!isset($_REQUEST['time'])) $this->error("参数错误");
$time = $_REQUEST['time'];
$params = "php ".SUBSITE_INDEX." SubSpendSet/setSubSpend/time/{$time}";
$r = D("CmdTasks")->addTask("SubSpendSet",$params);
if($r){
$this->ajaxReturn(["status"=>1,"info"=>"固化数据任务登记成功,请等待两三分钟后查看结果"]);
}else{
$this->ajaxReturn(["status"=>0,"info"=>"固化数据任务登记错误"]);
}
}
public function changeSubSpend(){
if (IS_POST) {
$this->editSubSpend();
}else{
$this->showChooseSubSpendCount();
}
}
public function updateSubSpend(){
if(!isset($_REQUEST['begin']) || !isset($_REQUEST['end'])) $this->error("参数错误");
$begin = $_REQUEST['begin'];
$end = $_REQUEST['end'];
$params = "php ".SUBSITE_INDEX." SubSpendSet/recountSubSpend/begin/{$begin}/end/{$end}";
$r = D("CmdTasks")->addTask("SubSpendSet",$params);
if($r){
$this->ajaxReturn(["status"=>1,"info"=>"重算任务登记成功,请等待两三分钟后查看结果"]);
}else{
$this->ajaxReturn(["status"=>0,"info"=>"重算任务登记错误"]);
}
}
public function addStatement()
{
if(!isset($_REQUEST['ids'])) $this->error("参数错误");
$ids = $_REQUEST['ids'];
$this->editOrderIscheck($ids,2,1);
$this->ajaxReturn(array(
'status' => 1,
"info"=>"操作成功"
));
}
public function removeStatement()
{
if(!isset($_REQUEST['ids'])) $this->error("参数错误");
$ids = $_REQUEST['ids'];
$this->editOrderIscheck($ids,1,2);
$this->ajaxReturn(array(
'status' => 1,
"info"=>"操作成功"
));
}
protected function editSubSpend(){
if(!isset($_REQUEST['ids']) || !isset($_REQUEST['company_id']) ) $this->error("参数错误");
$ids = $_REQUEST['ids'];
$company_id = $_REQUEST['company_id'];
//获取会长及adminid
$promote = M("promote","tab_")->field("id,account,admin_id")->where("company_id = '{$company_id}' and level = '1' and status = '1'")->find();
$saveData = [
"promote_id"=>$promote['id'],
"promote_account"=>$promote['account'],
"market_admin_id"=>$promote['admin_id'],
];
$where = [
"id"=>['in',$ids]
];
M("spend","tab_",SUBSITE_DB)->where($where)->save($saveData);
$this->ajaxReturn([
'status' => 1,
"info"=>"换绑成功"
]);
}
protected function showChooseSubSpendCount(){
if(!isset($_REQUEST['ids'])) $this->error("参数错误");
$ids = $_REQUEST['ids'];
$dbres = M("spend","tab_",SUBSITE_DB)->where("id in ({$ids})")->group("promote_id")->getField("promote_id,SUM(pay_amount) pay_amount");
//获取公司
$promoteIds = implode(",",array_keys($dbres));
$company = M("promote","tab_")
->alias('p')
->where("p.id in ({$promoteIds})")
->join("tab_promote_company c on p.company_id = c.id","left")
->group("p.company_id")
->getField("company_id,group_concat(p.id) promote_ids,c.company_name");
$sendData = [
"count" => 0,
"list"=>[]
];
foreach ($company as $k => $v) {
$v['promote_ids'] = explode(",",$v['promote_ids']);
$v['pay_amount'] = 0;
foreach($v['promote_ids'] as $promote_id){
$v['pay_amount'] += ($dbres[$promote_id]-0);
unset($dbres[$promote_id]);
}
unset($v['promote_ids'],$v['company_id']);
$sendData['count'] += $v['pay_amount'];
$sendData['list'][] = $v;
}
if(count($dbres) > 0){
$office_pay_amount = 0;
foreach ($dbres as $value) {
$office_pay_amount += ($value-0);
}
$sendData['list'][]= ["company_name"=>C('OFFICIEL_CHANNEL'),"pay_amount"=>$office_pay_amount];
$sendData['count'] += $office_pay_amount;
}
//获取所有公司
$promoteCompany = M('promote_company','tab_')->field('id, company_name as name')->where(['status' => 1])->select();
$this->assign('promoteCompany', $promoteCompany);
$this->assign('data', $sendData);
$this->assign('ids', $ids);
$this->display("showChooseSubSpendCount");
}
protected function editOrderIscheck($ids,$oldval,$newval){
$dbres = M("spend","tab_",SUBSITE_DB)->where("id in ({$ids}) and is_check = '{$oldval}'")->select();
if(empty($dbres)) return false;
$changeIds = implode(",",array_column($dbres,"id"));
//执行操作
$res = D(self::model_name)->where("id in ({$changeIds}) and is_check = '{$oldval}'")->save(['is_check'=>$newval]);
if(empty($res)) return false;
//日志
if($newval == 1){
$op_name = "加入结算";
$key = "addStatement";
}else{
$op_name = "移出结算";
$key = "removeStatement";
}
addOperationLog(['op_type'=>1,'key'=>$key,"op_name"=>$op_name,"content"=>json_encode(["ids"=>$_REQUEST['ids'],"is_check"=>$newval])]);
return true;
}
protected function setSelectDate()
{
$startDate = empty($_REQUEST['timestart']) ? date('Y-m-d', strtotime('-6 day', time())) : $_REQUEST['timestart'];
$endDate = empty($_REQUEST['timeend']) ? date('Y-m-d') : $_REQUEST['timeend'];
unset($_REQUEST['timestart']);
unset($_REQUEST['timeend']);
$startTime = strtotime($startDate);
$endTime = strtotime($endDate) + 86399;
$is_sub_data = false;
$lastSynTime = M("Kv","sub_",SUBSITE_DB)->where("`key` = 'sub_spend_syn_time'")->getField("value");
if($lastSynTime >= $startTime && $lastSynTime < $endTime){
$this->redirect(ACTION_NAME, array('timestart' => $startDate,"timeend"=>date('Y-m-d',$lastSynTime)));
}
if($lastSynTime >= $startTime && $lastSynTime <= $endTime){
$is_sub_data = true;
$endTime = $lastSynTime;
}
if($lastSynTime > $endTime){
$is_sub_data = true;
}
$this->assign('startDate', date('Y-m-d',$startTime));
$this->assign('endDate', date('Y-m-d',$endTime));
$this->assign('isSubData', $is_sub_data ? 1 : 0);
$this->assign('lastSynTime', date('Y-m-d',$lastSynTime));
return [$is_sub_data,$startTime,$endTime];
}
protected function getSpendList($p = 1, $map = array(), $order, $is_sub_data)
{
$page = intval($p);
$page = $page ? $page : 1; //默认显示第一页数据
if (isset($_REQUEST['row'])) {
$row = $_REQUEST['row'];
} else {
$row = 10;
}
if($is_sub_data){
$SpendModel = M("spend","tab_",SUBSITE_DB);
}else{
$SpendModel = M("spend","tab_");
}
$list = $SpendModel
->where($map)
->page($page, $row)
->order($order ? $order : 'pay_time desc')
->select();
$count = $SpendModel->where($map)->count();
if($count < 20000){
$page = set_pagination_all($count, $row);
}else{
$page = set_pagination($count, $row);
}
$data['data'] = $list;
if ($page) {
$data['page'] = $page;
}
return $data;
}
}

@ -0,0 +1,107 @@
<?php
namespace Admin\Controller;
use Think\Controller;
/**
* 子站同步支付信息
* @example 按日期同步: php wm.php SubSpendSet/setSubSpend/time/2019-09-31
* @example 重算更新: php wm.php SubSpendSet/recountSubSpend/begin/2019-01-01/end/2019-09-31
* @author cz
*/
class SubSpendSetController extends Controller
{
const LIMIT = 100;
public $SubSpendModel;
public $MainSpendModel;
public $SubKvModel;
public $LastSynTime;
public $SynTime;
public $SynWhere = [
"pay_status"=>1,
"partner_type"=>["in",[0,PARTNER_TYPE]]
];
public function _initialize()
{
$this->SubSpendModel = M("spend","tab_",SUBSITE_DB);//指定子库
$this->MainSpendModel = M("spend","tab_");//指定子库
$this->SubKvModel = M("Kv","sub_",SUBSITE_DB);//指定子库
$this->LastSynTime = $this->SubKvModel->where("`key` = 'sub_spend_syn_time'")->getField("value");
}
public function setSubSpend($time)
{
if($time == '') die("时间不能为空");
//判断日期格式
$patten = "/^\d{4}[\-](0?[1-9]|1[012])[\-](0?[1-9]|[12][0-9]|3[01])$/";
if (!preg_match($patten, $time)) {
die("时间格式错误");
}
if(strtotime($time)+86399-24*3600 > time()){
die("时间不能大于当前");
}
$this->SynTime = strtotime($time)+86399;
if($this->SynTime <= $this->LastSynTime){
die("时间不能小于最后同步时间");
}
$this->SynWhere['payed_time'] = ['between', [$this->LastSynTime-0+1,$this->SynTime]];
if($this->pageSetSpend()){
$this->updateLastSynTime();
};
echo "sub_spend syn ok".PHP_EOL;
}
public function recountSubSpend($begin,$end)
{
$patten = "/^\d{4}[\-](0?[1-9]|1[012])[\-](0?[1-9]|[12][0-9]|3[01])$/";
if (!preg_match($patten, $begin)) {
die("开始时间格式错误");
}
if (!preg_match($patten, $end)) {
die("结束时间格式错误");
}
if(strtotime($end) < strtotime($begin)){
die("结束时间不能比开始时间小");
}
if(strtotime($end)+86399 > $this->LastSynTime){
die("结束时间不能大于最后同步时间");
}
$end = strtotime($end)+86399;
$begin = strtotime($begin);
$this->SynWhere['payed_time'] = ['between', [$begin,$end]];
if($this->delSubSpend() !== false){
echo "delete sub_spend ok".PHP_EOL;
$this->pageSetSpend();
}
echo "sub_spend update and syn ok".PHP_EOL;
}
//分页插入同步数据
protected function pageSetSpend()
{
$count = $this->getSynCount();
if(empty($count)) return true;
$pageCount = ceil($count/self::LIMIT);
for ($i=1; $i <= $pageCount; $i++) {
$tres = $this->MainSpendModel->where($this->SynWhere)->page($i,self::LIMIT)->select();
$addRes = $this->SubSpendModel->addAll($tres);
echo "[{$i}/{$pageCount}] {$addRes}".PHP_EOL;
}
return true;
}
//删除本地已同步数据
protected function delSubSpend()
{
return $this->SubSpendModel->where($this->SynWhere)->delete();
}
//获取需要同步的数量
protected function getSynCount()
{
return $this->MainSpendModel->where($this->SynWhere)->count();
}
//更新最后同步时间
protected function updateLastSynTime()
{
return $this->SubKvModel->where("`key` = 'sub_spend_syn_time'")->save(['value'=>$this->SynTime]);
}
}

@ -289,6 +289,28 @@
<span class="layui-layer-setwin"></span>
</div>
</div>
<script type="text/html" id="addSubStatementTpl">
<div style="padding:10px 40px 30px;">
<spend style="font-size:14px;color:#666;">
最后结算时间:【{$lastStatementTime|default=''}】/ 订单最后固定时间:【{$lastSynTime|default=''}】<br/>
结算数据仅在周一及月初有结算所以结算日期应选择比需要结算的日期多一日。例需要结算2019-10-01~2019-10-31的数据需要选择结算日期为2019-11-01
</spend>
<input id="lastStatementTime" type="hidden" name="lastStatementTime" value="{$lastStatementTime|default=''}">
<input id="lastSynTime" type="hidden" name="lastSynTime" value="{$lastSynTime|default=''}">
<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="addSubStatementTime" name="addSubStatementTime" autocomplete="off" class="date" placeholder="结算日期" />
</td>
</tr>
</table>
<button class="submit_btn mlspacing" id="addSubStatementSubmit" type="submit" style="margin-top:30px;">
保存
</button>
</div>
</script>
</block>
<block name="script">
@ -743,6 +765,74 @@
}
});
})
//子站新增结算单
$("#subAddStatement").click(function(){
var html = $("#addSubStatementTpl").html();
layer.open({
type: 1,
title: "新增结算单",
maxWidth:720,
closeBtn: 1,
shadeClose: false,
content: html,
success:function(){
$("#addSubStatementSubmit").off("click");
$("#addSubStatementTime").datetimepicker({
format: 'yyyy-mm-dd',
language: "zh-CN",
showMeridian:true,
pickDate:true,
minView: 2,
autoclose: true,
pickTime:true,
todayBtn:true,
});
$("#addSubStatementSubmit").on("click",function(){
var subtime= $("#addSubStatementTime").val();
if(subtime == '') {
layer.msg('请先选择要结算的时间');
return false;
}
var lastSynTime = Date.parse($("#lastSynTime").val())+86400000;
var lastStatementTime = Date.parse($("#lastStatementTime").val());
var subtimenum = Date.parse(subtime);
if(subtimenum > lastSynTime) {
layer.msg('新增结算时间必须小于固定订单时间');
return false;
}
if(subtimenum <= lastStatementTime) {
layer.msg('所选时间已结算');
return false;
}
$.ajax({
type: "POST",
url: "{:U('subAddStatement')}",
dataType: 'json',
async: true,
data: {statement_time:subtime},
success:function(data){
if(data.status==1){
layer.msg("<font style='color:white'>" + data.info + "</font>");
setTimeout(function(){
window.location.reload();
},1500);
}else{
layer.alert(data.info)
}
}
});
})
}
});
})
//查看批注
$(".viewRemark").click(function () {
var remark = $(this).data("remark");

File diff suppressed because it is too large Load Diff

@ -0,0 +1,230 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" type="text/css" href="__CSS__/base.css" media="all">
<link rel="stylesheet" type="text/css" href="__CSS__/common.css" media="all">
<link rel="stylesheet" type="text/css" href="__CSS__/style.css" media="all">
<link rel="stylesheet" type="text/css" href="__CSS__/default_color.css" media="all">
<link href="__STATIC__/datetimepicker/css/datetimepicker.css" rel="stylesheet" type="text/css">
<link href="__STATIC__/datetimepicker/css/dropdown.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" href="__CSS__/select2.min.css" type="text/css" />
<script type="text/javascript" src="__STATIC__/jquery-2.0.3.min.js"></script>
<script type="text/javascript" src="__JS__/select2.min.js"></script>
<script type="text/javascript" src="__STATIC__/layer3/layer.js"></script>
<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__/juicer-min.js" type="text/javascript"></script>
</head>
<style>
html {
min-width:100%;
}
body {
max-width: 90%;
padding: 5% 0 0 5%;
}
.tabcon1711 table{
width: 480px;
}
table{
margin: auto;
}
.hidebox{
display: none;
}
.r{
width: 300px;
}
.l{
width: 180px;
}
.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;
}
.input-list, .i_list {
float: left;
margin: 0;
}
</style>
<block name="body">
<link rel="stylesheet" href="__CSS__/select2.min.css" type="text/css" />
<link rel="stylesheet" href="__CSS__/pro_promote.css" type="text/css" />
<script src="__STATIC__/jquery.form.js"></script>
<script src="__STATIC__/layer/layer.js"></script>
<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__/layer/extend/layer.ext.js"></script>
<link rel="stylesheet" href="__CSS__/promote.css" type="text/css"/>
<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 10px;}
.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;}
.butnbox a{
cursor:pointer
}
.data_list table tbody tr a.disabled,.data_list table tbody tr a.disabled:hover {color:#999;cursor:default;}
.data_list table td{
line-height: 2;
}
#tablebox tr{
border-bottom: 1px solid #e6e6e6;
}
</style>
<div style="font-size:14px;color:red;margin-bottom: 30px;">
说明:换绑后的数据将归属到选择的公司
</div>
<div class="cf top_nav_list">
<!-- <div class="fl button_list">
<div class="tools">
<a class=" " href="{:U('add')}"><span class="button_icon button_icon1"></span>新增推广游戏分成</a>
</div>
</div> -->
<!-- 高级搜索 -->
<div class="jssearch fl cf search_list" style="margin-bottom:12px">
<div class="input-list search-title-box">
<label>选择下游公司:</label>
</div>
<div class="input-list input-list-game search_label_rehab">
<select id="company_id" name="company_id" class="select_gallery" >
<option value="">请选择换绑公司</option>
<volist name="promoteCompany" id="vo">
<option value="{$vo.id}">{$vo.name}</option>
</volist>
</select>
</div>
<input id="ids" type="hidden" name="ids" value="{$ids}">
<div class="input-list" style="margin-left: 20px">
<a class="sch-btn" href="javascript:;" id="add_company" style="width: 100px;">确认换绑</a>
</div>
</div>
</div>
<!-- 数据列表 -->
<div class="data_list">
<div>所选订单统计:</div>
<div class="">
<table id="tablebox">
<!-- 表头 -->
<thead>
<tr>
<th>公司</th>
<th>金额</th>
</tr>
</thead>
<!-- 列表 -->
<tbody>
<volist name="data['list']" id="vo">
<tr>
<td>{$vo.company_name}</td>
<td>{$vo.pay_amount}</td>
</tr>
</volist>
<tr>
<td>合计:</td>
<td>{$data['count']}</td>
</tr>
</tbody>
</table>
</div>
</div>
<script type="text/javascript">
$(function(){
$("#company_id").select2();
//添加公司比例操作
$('#add_company').click(function () {
var company_id = $("#company_id").find("option:selected").val();
var ids = $("#ids").val();
if(company_id == ''){
layer.msg('请选择要换绑到的公司');
return false;
}
layer.load(2);
$.ajax({
type: 'post',
url: "{:U('changeSubSpend')}",
data:{"ids":ids,'company_id':company_id},
success: function(data) {
if(data.status == 1){
layer.msg(data.info);
setTimeout(function(){
parent.reload();
},1000)
}else{
layer.alert(data.info);
return false;
}
},
error:function(){
layer.alert("网络错误或超时");
return false;
}
});
});
});
</script>
</block>
</html>
Loading…
Cancel
Save