You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

354 lines
13 KiB
PHTML

5 years ago
<?php
namespace Admin\Controller;
class FinanceCompareController extends ThinkController
{
5 years ago
public $zfb = [1];//官方支付宝渠道id
public $wx = [2,3];//微信渠道id
public $ybzf = [17];//易宝渠道id
5 years ago
public $erro_size = 2000;//商家不存在的错误阈值,到达就不执行
5 years ago
public $page_size = 10;//每次执行比较的数量
public $payway = [
"1"=>"支付宝",
"2"=>"微信",
"3"=>"易宝"
];
5 years ago
public function index($p=1)
{
$page = intval($p);
$page = $page ? $page : 1; //默认显示第一页数据
$arraypage = $page;
if (isset($_REQUEST['row'])) {
$row = $_REQUEST['row'];
} else {
$row = 10;
}
$map=["check_status"=>1];
if ($_REQUEST['pay_way'] != '') {
$map['pay_way'] = $_REQUEST['pay_way'];
}
$listdata = M("finance_compare","tab_")->where($map);
if(isset($_REQUEST['export'])){
$listdata = $listdata->page($page,$row)->select();
$count = M("finance_compare","tab_")->where($map)->count();
}else{
$listdata = $listdata->select();
$count = count($listdata);
}
foreach ($listdata as $k => &$v) {
$v['begin_time']=date("Y-m-d H:i:s",$v['begin_time']);
$v['end_time']=date("Y-m-d H:i:s",$v['end_time']);
$v['compare_time'] = $v['begin_time']." 至 ".$v['end_time'];
$v['create_time']=date("Y-m-d H:i:s",$v['create_time']);
$v['pay_way']=$this->payway[$v['pay_way']];
}
if(isset($_REQUEST['export'])){
$GetData = $_GET;
unset($GetData['export']);
addOperationLog(['op_type'=>3,'key'=>getNowDate(),'url'=>U(CONTROLLER_NAME.'/'.ACTION_NAME,$GetData),'menu'=>"统计-数据校验-订单校验-导出"]);
data2csv($listdata,'订单校验',array(
"id"=>"序号",
"compare_time"=>"校验时间范围",
"pay_way"=>"支付渠道",
"check_count"=>"校验数量",
"diff_count"=>"异常数量",
"diff_money"=>"异常金额",
"create_time"=>"校验时间"
));
}
$page = set_pagination($count,$row);
if($page) {$this->assign('_page', $page);}
$this->assign('list_data',$listdata);
$this->assign('pay_way_list',$this->payway);
$this->display();
}
5 years ago
public function add()
{
5 years ago
$this->assign("page_size",$this->page_size);
5 years ago
$this->display();
}
5 years ago
public function creatCompare()
{
5 years ago
$adddata = I("post.");
5 years ago
5 years ago
$adddata['create_time'] = time();
$adddata['begin_time'] = strtotime($adddata['begin_time']);
$adddata['end_time'] = strtotime($adddata['end_time'])+ 86399;
$res = M("finance_compare","tab_")->add($adddata);
if($res){
$this->ajaxReturn(array("success"=>"ok","code"=>0,"data"=>["id"=>$res]));
}else{
$this->ajaxReturn(array("error"=>"creat error","code"=>4000));
}
5 years ago
}
5 years ago
public function compareData()
{
5 years ago
$checkdata = I('POST.');
$keys = $checkdata['keys'];
$compare_id = $checkdata['compare_id'];
$pay_way = $checkdata['pay_way'];//1支付宝 2微信 17易宝
$data = $checkdata['checkarr'];
5 years ago
//过滤数据
5 years ago
$sp=[];
$pf=[];
$er=[];
foreach($data as $k=>$v){
$pay_where = substr($v[$keys[0]], 0, 2);
$tmp = [
5 years ago
"pt_pay_amount"=>0,
5 years ago
"diff_money"=>$v[$keys[1]],
5 years ago
"sj_pay_amount"=>$v[$keys[1]],
5 years ago
"type"=>3,
"pay_order_number"=>$v[$keys[0]],
"compare_id"=>$compare_id,
"pay_way"=>$pay_way,
"is_read"=>0
];
if($pay_where == 'SP'){
5 years ago
$tmp['order_type']=1;
5 years ago
$sp[$v[$keys[0]]] = $tmp;
}elseif($pay_where == 'PF'){
5 years ago
$tmp['order_type']=2;
5 years ago
$pf[$v[$keys[0]]] = $tmp;
}else{
5 years ago
$tmp['order_type']=0;
5 years ago
$er[$v[$keys[0]]] = $tmp;
}
}
//判断游戏流水
if(count($sp) > 0){
$keys = implode(",",array_keys($sp));
$where = ["pay_order_number"=>["in",$keys]];
$sres = M("Spend","tab_")->field("pay_order_number,pay_amount,pay_status,pay_way")->where($where)->select();
if($sres){
$this->setDiffData($sres,$sp);
}
5 years ago
$saveres = $this->saveCheckData($sp);
if($saveres == false){
$this->ajaxReturn(array("error"=>"添加失败","code"=>40001));
}
}
//判断平台币流水
if(count($pf) > 0){
$keys = implode(",",array_keys($pf));
$where = ["pay_order_number"=>["in",$keys]];
$sres = M("Deposit","tab_")->field("pay_order_number,pay_amount,pay_status,pay_way")->where($where)->select();
if($sres){
$this->setDiffData($sres,$pf);
}
$saveres = $this->saveCheckData($pf);
if($saveres == false){
$this->ajaxReturn(array("error"=>"添加失败","code"=>40002));
}
}
//不存在订单添加
if(count($er) > 0){
$saveerrores = $this->saveCheckData($er);
if($saveerrores == false){
$this->ajaxReturn(array("error"=>"添加失败","code"=>40003));
}
}
$this->ajaxReturn(array("success"=>"ok","code"=>0,"data"=>[]));
}
/**
* 验证平台游戏流水
*/
public function checkSpendData()
{
$checkdata = I('POST.');
if ($checkdata['pay_way'] == 1) {
$check_arr = $this->zfb;
}elseif($checkdata['pay_way'] == 2){
$check_arr = $this->wx;
}elseif($checkdata['pay_way'] == 3){
$check_arr = $this->ybzf;
}
$check_arr = implode(",",$check_arr);
//组件sql
$fmap = [
"compare_id"=>$checkdata['compare_id'],
"order_type"=>1
];
$fcisql = M("finance_compare_info","tab_")->field("pay_order_number")->where($fmap)->select(false);
$map = [
"pay_order_number"=>["not in",$fcisql],
"pay_time" => ['between', [strtotime($checkdata['begin_time']), strtotime($checkdata['end_time']) + 86399]],
"pay_status"=>1,
"pay_way"=>["in",$check_arr]
];
$res = M("Spend","tab_")->field("pay_order_number,pay_amount,pay_status,pay_way")->where($map)->limit($this->erro_size)->select();
if(count($res) >= $this->erro_size){
5 years ago
$this->ajaxReturn(array("error"=>"商家不存在的数据大于{$this->erro_size}条,没有比较的意义,请确认表格的渠道和时间是否正确","code"=>40004));
5 years ago
}
$saveres = true;
if(count($res) > 0){
$add = [];
foreach($res as $k=>$v){
$tmp = [
"pt_pay_amount"=>$v["pay_amount"],
"diff_money"=>$v["pay_amount"],
"sj_pay_amount"=>0,
"type"=>2,
"pay_order_number"=>$v["pay_order_number"],
"compare_id"=>$checkdata['compare_id'],
"pay_way"=>$checkdata['pay_way'],
"order_type"=>1,
"is_read"=>0
];
$add[] = $tmp;
}
unset($res);
$saveres = M("finance_compare_info","tab_")->addAll($add);
}
if($saveres){
$this->ajaxReturn(array("success"=>"ok","code"=>0,"data"=>[]));
}else{
$this->ajaxReturn(array("error"=>"比对数据添加失败","code"=>40005));
}
}
/**
* 验证平台币流水
*/
public function checkDepositData()
{
$checkdata = I('POST.');
if ($checkdata['pay_way'] == 1) {
$check_arr = $this->zfb;
}elseif($checkdata['pay_way'] == 2){
$check_arr = $this->wx;
}elseif($checkdata['pay_way'] == 3){
$check_arr = $this->ybzf;
}
$check_arr = implode(",",$check_arr);
//组件sql
$fmap = [
"compare_id"=>$checkdata['compare_id'],
"order_type"=>2
];
$fcisql = M("finance_compare_info","tab_")->field("pay_order_number")->where($fmap)->select(false);
$map = [
"pay_order_number"=>["not in",$fcisql],
"create_time" => ['between', [strtotime($checkdata['begin_time']), strtotime($checkdata['end_time']) + 86399]],
"pay_status"=>1,
"pay_way"=>["in",$check_arr]
];
5 years ago
$res = M("Deposit","tab_")->field("pay_order_number,pay_amount,pay_status,pay_way")->where($map)->limit($this->erro_size)->select();
if(count($res) >= $this->erro_size){
$this->ajaxReturn(array("error"=>"商家不存在的数据大于{$this->erro_size}条,没有比较的意义,请确认表格的渠道和时间是否正确","code"=>40004));
5 years ago
}
$saveres = true;
if(count($res) > 0){
$add = [];
foreach($res as $k=>$v){
$tmp = [
"pt_pay_amount"=>$v["pay_amount"],
"diff_money"=>$v["pay_amount"],
"sj_pay_amount"=>0,
"type"=>2,
"pay_order_number"=>$v["pay_order_number"],
"compare_id"=>$checkdata['compare_id'],
"pay_way"=>$checkdata['pay_way'],
"order_type"=>2,
"is_read"=>0
];
$add[] = $tmp;
}
unset($res);
$saveres = M("finance_compare_info","tab_")->addAll($add);
}
if($saveres){
$this->ajaxReturn(array("success"=>"ok","code"=>0,"data"=>[]));
}else{
$this->ajaxReturn(array("error"=>"比对数据添加失败","code"=>40005));
5 years ago
}
}
5 years ago
/**
* 生成最终比较统计
* @param [type] $dbres
* @param [type] $ydata
* @return void
*/
public function creatCompareCount()
{
$checkdata = I('POST.');
$compare_id = $checkdata['compare_id'];
//统计
$imap = [
"compare_id"=>$compare_id,
"type"=>["gt",0]
];
$ires = M("finance_compare_info","tab_")->field("IFNULL(sum(diff_money),0) diff_money,IFNULL(count(*),0) count")->find();
$savedata = [
"diff_count"=>$ires['count'],
"diff_money"=>$ires['diff_money'],
"check_status"=>1
];
$res = M("finance_compare","tab_")->where("id='{$compare_id}'")->save($savedata);
if($res){
$this->ajaxReturn(array("success"=>"ok","code"=>0,"data"=>[]));
}else{
$this->ajaxReturn(array("error"=>"save error","code"=>40006));
}
5 years ago
5 years ago
}
5 years ago
//比较数据库与原数据
protected function setDiffData($dbres,&$ydata)
5 years ago
{
//type 1:金额不符 2商家数据缺失 3:平台数据缺失 4:状态不符5:渠道不符
foreach ($dbres as $k => $v) {
if(array_key_exists($v['pay_order_number'],$ydata)){
//存在
$flag = true;
5 years ago
$ydata[$v['pay_order_number']]['pt_pay_amount'] = $v['pay_amount'];
5 years ago
$ydata[$v['pay_order_number']]['diff_money'] = abs($ydata[$v['pay_order_number']]['pt_pay_amount']-$v['pay_amount']);
5 years ago
if($ydata[$v['pay_order_number']]['sj_pay_amount'] != $v['pay_amount']){//金额不符
$ydata[$v['pay_order_number']]['type'] = 1;
$flag = false;
continue;
}
if($v['pay_status'] != 1){//状态不符合
$ydata[$v['pay_order_number']]['type'] = 4;
$ydata[$v['pay_order_number']]['diff_money'] = $v['pay_amount'];
$flag = false;
continue;
}
//判断渠道
5 years ago
$way = $ydata[$v['pay_order_number']]['pay_way'];
if ($way == 1) {
5 years ago
$checkarr = $this->zfb;
5 years ago
}elseif($way == 2){
5 years ago
$checkarr = $this->wx;
5 years ago
}elseif($way == 3){
5 years ago
$checkarr = $this->ybzf;
5 years ago
}
if(!in_array($way,$checkarr)){//渠道不符
$ydata[$v['pay_order_number']]['type'] = 5;
$flag = false;
5 years ago
continue;
5 years ago
}
if($flag){
$ydata[$v['pay_order_number']]['type'] = 0;
}
}
}
5 years ago
}
//添加详情
protected function saveCheckData(&$data){
$arr = [];
foreach ($data as $k => $v) {
$arr[] = $v;
}
unset($data);
$res = M("finance_compare_info","tab_")->addAll($arr);
unset($arr);
return $res;
5 years ago
}
5 years ago
}