<?php
namespace Admin\Controller;
//use Think\Controller;
/**
* 上下游结算单
* @author cz
*/
class SubCompanyStatementPoolController extends ThinkController
{
public $CompanyType = [
"1"=>"下游公司",
"2"=>"下游个人",
"3"=>"上游CP"
];
public $IsPayment = [
"1"=>"是",
"2"=>"否"
];
public $WithdrawType = [
"0"=>"周结",
"1"=>"月结",
"2"=>"下游个人补点",
"3"=>"特殊补点",
"4"=>"其他"
];
public $VerifyStatus=[
"-2"=>"拒绝打款",
"-1"=>"审核拒绝",
"0"=>"未审核",
"1"=>"打款信息确认",
"2"=>"审核通过",
"3"=>"打款中",
"4"=>"打款成功",
"5"=>"无需打款",
"6"=>"初审通过",
"-3"=>"初审拒绝",
];
public $InfoVerifyStatus=[
"-1"=>"配置信息不全",
"0"=>"信息未确认",
"1"=>"允许打款",
"2"=>"线下无需打款"
];
public $PayStatus=[
"-1"=>"打款失败",
"0"=>"未打款",
"1"=>"打款成功"
];
public $admininfo;
public $DBModel;
public function _initialize()
{
$this->admininfo = $_SESSION['onethink_admin']['user_auth'];
$this->DBModel = SM("new_company_statement_info","tab_");
parent::_initialize();
}
public function lists() {
$params = I('get.');
$page = $params['p'] ? intval($params['p']) : 1;
$row = $params['row'] ? intval($params['row']) : 10;
//权限分配
if(!IS_ROOT){
$this->OpAuthList= getModuleControllerAuth();
}
$this->assign('menubtn',$this->menuAuth());
$map = [
"_string"=>"1=1"
];
if (isset($_REQUEST['time_start']) & & isset($_REQUEST['time_end'])) {
$time_start = strtotime($_REQUEST['time_start']);
$time_end = strtotime($_REQUEST['time_end'])+ 86399;
$map["_string"] = "(statement_begin_time BETWEEN {$time_start} AND {$time_end}) OR (statement_end_time BETWEEN {$time_start} AND {$time_end}) OR (statement_begin_time < = {$time_end} AND statement_end_time >= {$time_end})";
} elseif (isset($_REQUEST['time_start'])) {
$time_start = strtotime($_REQUEST['time_start']);
$map["_string"] = "(statement_begin_time >= {$time_start} ) OR (statement_end_time >= {$time_start})";
} elseif (isset($_REQUEST['time_end'])) {
$time_end = strtotime($_REQUEST['time_end'])+ 86399;
$map["_string"] = "(statement_begin_time < = {$time_end} ) OR (statement_end_time < = {$time_end})";
}
if (isset($_REQUEST['time_start2']) & & isset($_REQUEST['time_end2'])) {
$map['op_time'] = ['between', [strtotime($_REQUEST['time_start2']), strtotime($_REQUEST['time_end2']) + 86399]];
} elseif (isset($_REQUEST['time_start2'])) {
$map['op_time'] = ['EGT', strtotime($_REQUEST['time_start2'])];
} elseif (isset($_REQUEST['time_end2'])) {
$map['op_time'] = ['ELT', strtotime($_REQUEST['time_end2']) + 86399];
}
//其他
if(isset($_REQUEST['company_type'])){
$map['company_type'] = $_REQUEST['company_type'];
}
if(isset($_REQUEST['verify_status'])){
$map['verify_status'] = $_REQUEST['verify_status'];
}
if(isset($_REQUEST['statement_num'])){
$map['statement_num'] = $_REQUEST['statement_num'];
}
if(isset($_REQUEST['is_payment'])){
$map['is_payment'] = $_REQUEST['is_payment'];
}
if(isset($_REQUEST['withdraw_type'])){
$map['withdraw_type'] = $_REQUEST['withdraw_type'];
}
// $this->checkListOrCountAuthRestMap($map);//导出权限
//条件end
$data = $this->DBModel
->field("*")
->where($map)
->order("id desc")
->page($page,$row)->select();
foreach($data as $k => & $v) {
$v['statement_begin_time'] = date('Y.m.d',$v['statement_begin_time']);
$v['statement_end_time'] = date('Y.m.d',$v['statement_end_time']);
$v["create_time"] = date("Y.m.d H:i:s",$v["create_time"]);
$v['oplist'] = $this->OpWmAuth($v);
}
$sum = $this->DBModel->field("sum(sum_money) sum_money")->where($map)->find();
$count = $this->DBModel->field("count(id) count")->where($map)->find();
// dd($count);
$params['p'] = $page;
$params['row'] = $row;
$page = set_pagination($count['count'], $row, $params);
if ($page) {
$this->assign('_page', $page);
}
$this->assign("sum",$sum);
$this->assign('data',$data);
$this->assign('count',$count);
$this->display();
}
//查看
public function viewPool()
{
if(!isset($_REQUEST['id'])){
$this->error('参数错误');
}
$id = $_REQUEST['id'];
$is_export= false;
if (isset($_REQUEST['export']) & & $_REQUEST['export']==1){
$is_export = true;
}
$this->viewWmStatement($id,$is_export);
}
public function exportWmStatement($wm_statement_ids = 0) {
header("Content-type: text/html; charset=utf-8");
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '< br / > ');
Vendor("PHPExcel.PHPExcel");
$objPHPExcel = new \PHPExcel();
$objReader = \PHPExcel_IOFactory::createReader('Excel2007');
//设置模板文件
$objPHPExcel = $objReader->load("Public/Admin/excel/wmStatement.xlsx");
$data = SM("new_company_statement_info","tab_")->where(['id'=>$wm_statement_ids])->find();
$list = json_decode($data['statement_info'],true);
$statement_begin_time = date("Y-m-d",$data['statement_begin_time']);
$statement_end_time = date("Y-m-d",$data['statement_end_time']);
$amount_data['pay_amount'] = $data['pay_amount'];
$amount_data['user_newcount'] = $data['user_newcount'];
$amount_data['fax_ratio'] = $data['fax_ratio'];
$amount_data['sum_money'] = $data['sum_money'];
$first_party_info = json_decode($data['first_party_info'],true);
$second_party_info = json_decode($data['second_party_info'],true);
$objPHPExcel->getActiveSheet()->setCellValue('A1', "《 {$data['company_name']} 》结算单\n( {$statement_begin_time}-{$statement_end_time}) ");
$line = 3;
foreach ($list as $key => $value) {
$objPHPExcel->getActiveSheet()->insertNewRowBefore($line,1);
$objPHPExcel->getActiveSheet()->removeConditionalStyles();
$objPHPExcel->getActiveSheet()->setCellValue('A'.$line, $value['statement_begin_time'].'-'.$value['statement_end_time']);
$objPHPExcel->getActiveSheet()->setCellValue('B'.$line, $value['game_name']);
$line++;
}
$objPHPExcel->getActiveSheet()->setCellValue('C3', $amount_data['pay_amount']);
$objPHPExcel->getActiveSheet()->setCellValue('D3', $amount_data['user_newcount']);
$objPHPExcel->getActiveSheet()->setCellValue('E3', $amount_data['fax_ratio']."%");
$objPHPExcel->getActiveSheet()->setCellValue('F3', $amount_data['sum_money']);
$tline = $line-1;
$objPHPExcel->getActiveSheet()->mergeCells("C3:C{$tline}")->mergeCells("D3:D{$tline}")->mergeCells("E3:E{$tline}")->mergeCells("F3:F{$tline}");
$objPHPExcel->getActiveSheet()->setCellValue('B'.($line), convertAmountToCn($amount_data['sum_money']));
//甲方信息
$objPHPExcel->getActiveSheet()->setCellValue('B'.($tline+3), $first_party_info['partner']);//甲方
$objPHPExcel->getActiveSheet()->setCellValue('B'.($tline+4), $first_party_info['link_man']);//联系人
$objPHPExcel->getActiveSheet()->setCellValue('B'.($tline+5), $first_party_info['link_phone']."\t");//联系电话
$objPHPExcel->getActiveSheet()->setCellValue('B'.($tline+6), $first_party_info['invoice_item']);//开票项目
$objPHPExcel->getActiveSheet()->setCellValue('B'.($tline+7), $first_party_info['invoice_type']);//发票类型
$objPHPExcel->getActiveSheet()->setCellValue('B'.($tline+8), $first_party_info['address']);//发票类型
//乙方信息
$objPHPExcel->getActiveSheet()->setCellValue('E'.($tline+3), $second_party_info['partner']);//乙方
$objPHPExcel->getActiveSheet()->setCellValue('E'.($tline+4), $second_party_info['link_man']);//联系人
$objPHPExcel->getActiveSheet()->setCellValue('E'.($tline+5), $second_party_info['phone']."\t");//联系电话
$objPHPExcel->getActiveSheet()->setCellValue('E'.($tline+6), $second_party_info['address']);//邮寄地址
if ($second_party_info['is_payment'] != 1) {
$objPHPExcel->getActiveSheet()->setCellValue('E'.($tline+8), $second_party_info['bank_address']);//户名
$objPHPExcel->getActiveSheet()->setCellValue('E'.($tline+9), $second_party_info['bank_card']."\t");//银行账号
$objPHPExcel->getActiveSheet()->setCellValue('E'.($tline+10), $second_party_info['bank_name']);//开户行
} else {
$objPHPExcel->getActiveSheet()->setCellValue('E'.($tline+8), $second_party_info['ali_user']);//户名
$objPHPExcel->getActiveSheet()->setCellValue('E'.($tline+9), $second_party_info['ali_account']."\t");//银行账号
}
$fileName = "{$data['company_name']}&{$data['my_company']}-对账单{$statement_begin_time}-{$statement_end_time}";
// dd($fileName);
ob_end_clean();//清除缓冲区,避免乱码
header('pragma:public');
header('Content-type:application/vnd.ms-excel;charset=utf-8;name="' . $fileName .'".xls');
header("Content-Disposition:attachment;filename={$fileName}.xls");//attachment新窗口打印inline本窗口打印
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
exit;
}
public function viewWmStatement($wm_statement_ids = '',$is_export=0) {
if (!$wm_statement_ids) {
$this->error('参数错误');
}
if ($is_export) {
$this->exportWmStatement($wm_statement_ids);
}
$data = SM("new_company_statement_info","tab_")->where(['id'=>$wm_statement_ids])->find();
$list = json_decode($data['statement_info'],true);
$statement_begin_time = date("Y-m-d",$data['statement_begin_time']);
$statement_end_time = date("Y-m-d",$data['statement_end_time']);
$amount_data['pay_amount'] = $data['pay_amount'];
$amount_data['user_newcount'] = $data['user_newcount'];
$amount_data['fax_ratio'] = $data['fax_ratio'];
$amount_data['sum_money'] = $data['sum_money'];
$first_party_info = json_decode($data['first_party_info'],true);
$second_party_info = json_decode($data['second_party_info'],true);
$this->assign("list",$list);
$this->assign("row",count($list));
$this->assign("company_name",$data['company_name']);
$this->assign("statement_begin_time",$statement_begin_time);
$this->assign("statement_end_time",$statement_end_time);
$this->assign("amount_data",$amount_data);
$this->assign("first_party_info",$first_party_info);
$this->assign("second_party_info",$second_party_info);
$this->display("poolWmStatement");
}
//撤销汇总
public function cancelPool(){
if(!isset($_REQUEST['id'])) $this->error("参数错误");
$id = $_REQUEST['id'];
if (IS_SUBSITE) {
$this->cancelWmCompanyPool($id);
}
}
public function cancelWmCompanyPool($id)
{
$wm_statement_ids = $id;
SM()->startTrans();//事务
$data = SM("new_company_statement_info","tab_")->where(['id'=>$wm_statement_ids])->find();
//删除info
$infores = SM("new_company_statement_info","tab_")->where(['id'=>$wm_statement_ids])->delete();
if($infores === false){
SM()->rollback();
$this->ajaxReturn(array('status' => 0,"info"=>"撤销汇总失败"));
}
//修改结算单信息
$sids = array_filter(explode(",",$data["statement_ids"]));
$st_res = SM("company_statement","tab_")->field("id,verify_status,verify_log")->where(["id"=>['in',$sids]])->select();
foreach($st_res as $k=>& $v){
$v['verify_log'] = json_decode($v['verify_log'],true);
$v['verify_log']['pool_user']=$this->admininfo["username"];
$v['verify_log']['pool_time']=date("Y.m.d H:i:s");
$v['verify_log'] = json_encode($v['verify_log']);
$v['verify_status']=-2;
$stres = SM("company_statement","tab_")->save($v);
if($stres === false){
SM()->rollback();
$this->ajaxReturn(array('status' => 0,"info"=>"撤销汇总失败"));
}
}
SM()->commit();
$this->ajaxReturn(array(
'status' => 1,
"info"=>"撤销汇总成功"
));
}
public function OpWmAuth($info)
{
$id = $info['id'];
$img = $info['ext_file'];
$remark = $info['remark'];
$create_lack_ids = $info['create_lack_ids'];
$is_qz = (substr($info['statement_num'],0,2) == "QZ" ? true :false); //强制汇总的都允许回退
//原始列表
$opBtn = [
"viewPool"=>"< a class = 'confirm viewPool' data-id = '{$id}' > 查看< / a > ",
"editPool"=>"< a class = 'confirm editPool' data-id = '{$id}' > 编辑< / a > ",
"editSpecialPuPool"=>"< a class = 'confirm editSpecialPuPool' data-id = '{$id}' > 编辑< / a > ",
"addRemark"=>"< a class = 'confirm addRemark' data-id = '{$id}' > 新增备注< / a > ",
"editRemark"=>"< a class = 'confirm editRemark' data-remark = '{$remark}' data-id = '{$id}' > 修改备注< / a > ",
"viewRemark"=>"< a class = 'confirm viewRemark' data-remark = '{$remark}' data-id = '{$id}' > 查看备注< / a > ",
"uploadVoucher"=>"< a class = 'confirm uploadVoucher' data-id = '{$id}' > 上传凭证< / a > ",
"viewVoucher"=>"< a class = 'confirm viewVoucher' data-img = '{$img}' data-id = '{$id}' > 查看凭证< / a > ",
"editVoucher"=>" < a class = 'confirm editVoucher' data-id = '{$id}' > 编辑凭证< / a > ",
"setUlPayment"=>"< a class = 'confirm setUlPayment' data-id = '{$id}' > 线下打款< / a > ",
"setPayment"=>"< a class = 'confirm setPayment' data-id = '{$id}' > 打款信息确认< / a > ",
"editPayment"=>"< a class = 'confirm editPayment' data-id = '{$id}' > 打款信息编辑< / a > ",
"viewPayment"=>"< a class = 'confirm viewPayment' data-id = '{$id}' > 打款详情< / a > ",
'reCount'=>"< a class = 'confirm reCount' data-id = '{$id}' > 重算< / a > ",
'cancelPool'=>"< a class = 'confirm cancelPool' data-id = '{$id}' > 撤销汇总< / a > ",
];
//操作对应菜单
$optist = [];
switch ($info['verify_status']) {
case '-2':
case '-1':
case '0':
$optist = ["viewPool","cancelPool"];
break;
case '1':
$optist = ["viewPool","viewVoucher","editVoucher","uploadVoucher","editPayment","setUlPayment"];
break;
case '2':
$optist = ["viewPool","viewVoucher","editVoucher","uploadVoucher"];
break;
case '3':
$optist = ["viewPool","viewVoucher","editVoucher","uploadVoucher","viewPayment"];
break;
case '4':
$optist = ["viewPool","viewVoucher","editVoucher","uploadVoucher","viewPayment"];
break;
case '5':
$optist = ["viewPool","cancelPool"];
break;
case '6':
$optist = ["viewPool","cancelPool"];
break;
default:
break;
}
if(empty($info['ext_file'])){
//未上传凭证
$optist = array_diff($optist, ["viewVoucher", "editVoucher"]);
}else{
$optist = array_diff($optist, ["uploadVoucher"]);
}
if($info['is_payment'] == 1){
$optist = array_diff($optist, ["setUlPayment"]);
}else{
$optist = array_diff($optist, ["setPayment","editPayment","viewPayment"]);
}
if(empty($info['remark'])){
//未上传备注
$optist = array_diff($optist, ["editRemark", "viewRemark"]);
}else{
$optist = array_diff($optist, ["addRemark"]);
}
//
$resarr = [];
foreach ($optist as $k => $v) {
if(IS_ROOT){
$resarr[] = $opBtn[$v];
}else{
if(in_array($v,$this->OpAuthList)){
$resarr[] = $opBtn[$v];
}
}
}
return $resarr;
}
public function menuAuth()
{
$mentBtn = [
"export"=>"< a class = 'butn' id = 'export' > 导出< / a > "
];
$resarr = [];
foreach ($mentBtn as $k => $v) {
if(IS_ROOT){
$resarr[] = $v;
}else{
if(in_array($k,$this->OpAuthList)){
$resarr[] = $v;
}
}
}
return $resarr;
}
}