diff --git a/Application/Admin/Controller/AggregateFinanceSetController.class.php b/Application/Admin/Controller/AggregateFinanceSetController.class.php new file mode 100644 index 000000000..6f3b4f3ab --- /dev/null +++ b/Application/Admin/Controller/AggregateFinanceSetController.class.php @@ -0,0 +1,229 @@ +field("value")->where("`key` = 'aggregate_finance_api'")->find(); + if(empty($apihost)){ + echo "请先设置请求接口aggregate_finance_api的值".PHP_EOL;die; + } + $this->apihost = $apihost['value']; + } + public function setFreeDateCount($begin,$end='') + { + if($end == '') $end = $begin; + //判断日期格式 + $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-24*3600 > time()){ + die("结束时间不能大于当前"); + } + + $starttime = $begin?strtotime($begin):mktime(0,0,0,date('m'),date('d'),date('Y')); + $endtime = $end?strtotime($end)+86399:$starttime+86399; + $datelist = get_date_list($starttime,$endtime,1); + $countdate = count($datelist); + for($i=0;$i<$countdate;$i++){ + $this->setDailyCount($datelist[$i]); + } + } + public function setDailyCount($stime="now") + { + if($stime=="now"){ + $stime=time(); + }else{ + $stime = strtotime($stime); + } + $nowdate = date("Y-m-d",$stime); + $w = (int)date("w",$stime); + $d = (int)date("d",$stime); + + if($w == 1 || $d == 1){ + if($w == 1){ + echo $nowdate.":".PHP_EOL; + echo "--周结begin".PHP_EOL; + $this->setWeekCount($stime); + } + if($d == 1){ + echo $nowdate.":".PHP_EOL; + echo "--月结&补点begin".PHP_EOL; + $this->setMonthCount($stime); + } + }else{ + echo $nowdate."非周一和月初,无需任何处理".PHP_EOL; + } + } + public function setWeekCount($stime)//进行周结 + { + $begintime = mktime(0,0,0,date('m',$stime),date('d',$stime)-7,date('Y',$stime)); + $endtime = mktime(0,0,0,date('m',$stime),date('d',$stime),date('Y',$stime))-1; + $this->getAndSaveData(0,$begintime,$endtime); + } + public function setMonthCount($stime)//进行周结 + { + $thismonth = date('m',$stime); + $thisyear = date('Y',$stime); + if ($thismonth == 1) { + $lastmonth = 12; + $lastyear = $thisyear - 1; + } else { + $lastmonth = $thismonth - 1; + $lastyear = $thisyear; + } + $lastStartDay = $lastyear . '-' . $lastmonth . '-1'; + $lastEndDay = $lastyear . '-' . $lastmonth . '-' . date('t', strtotime($lastStartDay)); + $begintime = strtotime($lastStartDay);//上个月的月初时间戳 + $endtime = strtotime($lastEndDay)+24*3600-1;//上个月的月末时间戳 + //普通月结 + $this->getAndSaveData(1,$begintime,$endtime); + //补点 + $this->getAndSaveData(2,$begintime,$endtime); + + } + protected function getAndSaveData($type,$begintime,$endtime) + { + $sign = md5($begintime.$endtime.$type.$this->token); + $arr = [ + "begintime"=>$begintime, + "endtime"=>$endtime, + "type"=>$type, + "sign"=>$sign + ]; + $dataurl .= $this->apihost."&".http_build_query($arr); + $html = file_get_contents($dataurl); + $rsp = json_decode($html,true); + if($rsp['code'] != 1){ + echo $rsp['error'].PHP_EOL;die; + } + //成功插入 + $Aggregate = M("aggregate_statement","tab_"); + $begintimestr = date("Y-m-d",$begintime); + $endtimestr = date("Y-m-d",$endtime); + if($rsp['count'] > 0){ + //插入数据 + foreach ($rsp['data'] as $k => $v) { + foreach ($v["game_list"] as $ke => &$va) { + $va['begintime'] = $begintimestr; + $va['endtime'] = $endtimestr; + $va['fax_ratio'] = 0; + } + $v["statement_info"] = json_encode($v["game_list"],JSON_UNESCAPED_UNICODE); + unset($v["game_list"]); + $v['begintime'] = $begintime; + $v['endtime'] = $endtime; + $v['create_time'] = time(); + $v['admin_name'] = "system"; + $v['admin_id'] = 0; + $v['second_party_info'] = json_encode([ + "partner"=>$v['channel_name'] + ],JSON_UNESCAPED_UNICODE); + $Aggregate->add($v); + } + } + + if($type == 0){ + echo "----周结统计ok".PHP_EOL; + }elseif($type == 1){ + echo "----月结统计ok".PHP_EOL; + }elseif($type == 2){ + echo "----补点统计ok".PHP_EOL; + } + } + public function updateAggregateFinanceData($id) + { + //获取基础信息 + $Aggregate = M("aggregate_statement","tab_"); + $info = $Aggregate->where("id='{$id}'")->find(); + $sign = md5($info['begintime'].$info['endtime'].$info['withdraw_type'].$this->token); + $arr = [ + "begintime"=>$info['begintime'], + "endtime"=>$info['endtime'], + "type"=>$info['withdraw_type'], + "sign"=>$sign, + "channel_id"=>$info['channel_id'] + ]; + $dataurl .= $this->apihost."&".http_build_query($arr); + $html = file_get_contents($dataurl); + $rsp = json_decode($html,true); + if($rsp['code'] != 1){ + echo $rsp['error'].PHP_EOL;die; + } + //更新信息 + $begintimestr = date("Y-m-d",$info['begintime']); + $endtimestr = date("Y-m-d",$info['endtime']); + + if($rsp['count'] > 0){ + //插入数据 + foreach ($rsp['data'] as $k => $v) { + foreach ($v["game_list"] as $ke => &$va) { + $va['begintime'] = $begintimestr; + $va['endtime'] = $endtimestr; + $va['fax_ratio'] = 0; + } + $v["statement_info"] = json_encode($v["game_list"],JSON_UNESCAPED_UNICODE); + unset($v["game_list"]); + $v['create_time'] = time(); + $v['admin_name'] = $_SESSION['onethink_admin']['user_auth']['username']; + $v['admin_id'] = $_SESSION['onethink_admin']['user_auth']['uid']; + $v['verify_status'] = 0; + + $first_party_info = json_decode($info['first_party_info'], 1); + if($first_party_info['partner'] == $info['channel_name']){ + $v['second_party_info'] = $info['first_party_info']; + $v['first_party_info'] = $info['second_party_info']; + $v['pay_type'] =0; + } + + $res = $Aggregate->where("id='{$id}'")->save($v); + if(empty($res)){ + return false; + } + } + }else{ + $savedata = [ + "create_time"=>time(), + "admin_name"=>$_SESSION['onethink_admin']['user_auth']['username'], + "admin_id"=>$_SESSION['onethink_admin']['user_auth']['uid'], + "verify_status"=>0, + "statement_info"=>json_encode([],JSON_UNESCAPED_UNICODE), + "ratio_money"=>0, + "pay_money"=>0 + ]; + + $first_party_info = json_decode($info['first_party_info'], 1); + if($first_party_info['partner'] == $info['channel_name']){ + $savedata['second_party_info'] = $info['first_party_info']; + $savedata['first_party_info'] = $info['second_party_info']; + $savedata['pay_type'] =0; + } + + $res = $Aggregate->where("id='{$id}'")->save($savedata); + if(empty($res)){ + return false; + } + } + return true; + } + + + + + +} diff --git a/Application/Admin/Controller/AggregateFinanceStatementController.class.php b/Application/Admin/Controller/AggregateFinanceStatementController.class.php new file mode 100644 index 000000000..f211a8a1b --- /dev/null +++ b/Application/Admin/Controller/AggregateFinanceStatementController.class.php @@ -0,0 +1,729 @@ +"审核拒绝", + "0"=>"未申请开票", + "1"=>"申请开票", + "2"=>"审核同意", + "3"=>"已开票", + "4"=>"已上传凭证", + "5"=>"已到账" + ]; + public $admininfo; + public $OpAuthList=[]; + //TODO: + public function _initialize() + { + $this->admininfo = $_SESSION['onethink_admin']['user_auth']; + parent::_initialize(); + } + + public function lists() { + $is_export= false; + if (isset($_REQUEST['export']) && $_REQUEST['export']==1){ + $is_export = true; + } + //权限 + if(!IS_ROOT){ + $this->getAuth(); + } + + //分页 + $page = intval(I('get.p', 0)); + $page = $page ? $page : 1; //默认显示第一页数据 + $row = intval(I('row', 0)); + $row = empty($row) ? 10 : $row;//每页条数 + + $map = []; + + + if (isset($_REQUEST['time_start']) && isset($_REQUEST['time_end'])) { + $time_start = strtotime($_REQUEST['time_start']); + $time_end = strtotime($_REQUEST['time_end'])+ 86399; + $map["_string"] = "(begintime BETWEEN {$time_start} AND {$time_end}) OR (endtime BETWEEN {$time_start} AND {$time_end})"; + } elseif (isset($_REQUEST['time_start'])) { + $time_start = strtotime($_REQUEST['time_start']); + $map["_string"] = "(begintime >= {$time_start} ) OR (endtime >= {$time_start})"; + } elseif (isset($_REQUEST['time_end'])) { + $time_end = strtotime($_REQUEST['time_end'])+ 86399; + $map["_string"] = "(begintime <= {$time_end} ) OR (endtime <= {$time_end})"; + } + + if (isset($_REQUEST['time_start2']) && isset($_REQUEST['time_end2'])) { + $map['create_time'] = ['between', [strtotime($_REQUEST['time_start2']), strtotime($_REQUEST['time_end2']) + 86399]]; + } elseif (isset($_REQUEST['time_start2'])) { + $map['create_time'] = ['EGT', strtotime($_REQUEST['time_start2'])]; + } elseif (isset($_REQUEST['time_end2'])) { + $map['create_time'] = ['ELT', strtotime($_REQUEST['time_end2']) + 86399]; + } + + if ($_REQUEST['verify_status']) { + $map['verify_status'] = $_REQUEST['verify_status']; + } + if ($_REQUEST['channel_id']) { + $map['channel_id'] = $_REQUEST['channel_id']; + } + $typeflag = false; + if (isset($_REQUEST['withdraw_type'])) { + if($_REQUEST['withdraw_type'] == 1){ + $typeflag = 1;//月结 + $map["withdraw_type"] = 1; + }else{ + $typeflag = 2;//周结 + $map["withdraw_type"] = ["in",[0,2]]; + } + } + if (isset($_REQUEST['withdraw_type2'])) { + if($_REQUEST['withdraw_type2'] == 2){ + if($typeflag == 1){ //月结的补点找不到 + $map['withdraw_type'] = 999; + }else{ //周结的补点就是补点 + $map['withdraw_type'] = 2; + } + }else{ + if($typeflag == 1){//月结的正常=月结 + $map['withdraw_type'] = 1; + }elseif($typeflag == 2){//周结的正常=周结 + $map['withdraw_type'] = 0; + }else{//没选的正常是 非补点 + $map['withdraw_type'] = ["in",[0,1]]; + } + } + } + $data = M("aggregate_statement","tab_") + ->where($map) + ->order("create_time Desc")->page($page,$row)->select(); + foreach($data as $key => $value) { + $data[$key]['verify_status_str'] = $this->verify_status[$value['verify_status']]; + $data[$key]['create_time'] = date('Y-m-d H:i:s',$value['create_time']); + $data[$key]['begintime'] = date('Y-m-d',$value['begintime']); + $data[$key]['endtime'] = date('Y-m-d',$value['endtime']); + $data[$key]['withdraw_type_1'] = ($value['withdraw_type'] == 1 ? "月结" :"周结"); + $data[$key]['withdraw_type_2'] = ($value['withdraw_type'] == 2 ? "补点" :"正常结算"); + + $data[$key]['oplist'] = $this->OpAuth($value); + } + $count = M("aggregate_statement","tab_")->field("count(id) count,SUM(ratio_money) ratio_money,SUM(pay_money) pay_money")->where($map)->find(); + + //分页 + $parameter['p'] = $page; + $parameter['row'] = $row; + $page = set_pagination($count['count'], $row, $parameter); + if ($page) { + $this->assign('_page', $page); + } + // + $this->assign('menubtn',$this->menuAuth()); + $this->assign('data',$data); + $this->assign('total',$count['ratio_money']); + $this->assign('pay_money',$count['pay_money']); + $this->assign('channel',$this->getAggChannel()); + $this->assign('verify_status',$this->verify_status); + $this->display(); + + } + //获取所有下游渠道 + public function getAggChannel() + { + return M("aggregate_statement","tab_")->field("channel_id,channel_name")->group("channel_id")->select(); + } + //申请开票 + public function createStatement(){ + if (isset($_REQUEST['id'])){ + $id = $_REQUEST['id']; + }else{ + $this->error("参数错误"); + } + $info = M("aggregate_statement","tab_")->field("statement_info,pay_money,ratio_money")->where("id={$id}")->find(); + $statement_info = json_decode($info['statement_info'],true); + $this->assign('data',$statement_info); + $this->assign('data_count',["pay_money"=>$info['pay_money'],"ratio_money"=>$info['ratio_money']]); + $this->assign('id',$id); + $this->display(); + } + public function doAddStatement(){ + $first_partner_type = $_REQUEST['first_partner_type']; + $second_party_info = $_REQUEST['second_party_info']; + $statement_info = $_REQUEST['statement_info']; + $admininfo = $_SESSION['onethink_admin']['user_auth']; + $data_count = $_REQUEST['statement_count']; + if(!isset($_REQUEST['statement_id'])){ + $this->error("参数错误"); + } + + //拼凑数据 + $adddata = array( + "pay_money"=>$data_count['pay_money'], + "ratio_money"=>$data_count['ratio_money'], + "pay_type"=>$_REQUEST['statement_type'] == 0 ? 1 :0, + "first_party_info"=>json_encode($_REQUEST['first_party_info'],JSON_UNESCAPED_UNICODE), + "second_party_info"=>json_encode($_REQUEST['second_party_info'],JSON_UNESCAPED_UNICODE), + "statement_info"=>json_encode($statement_info,JSON_UNESCAPED_UNICODE), + "admin_name"=>$admininfo['username'], + "admin_id"=>$admininfo['uid'], + "verify_status"=>1, + "create_time"=>time() + ); + $id = $_REQUEST['statement_id']; + $res = M("aggregate_statement","tab_")->where("id = '{$id}'")->save($adddata); + if($res !== false){ + $this->doAddOperationLog($id,"申请开票"); + $this->ajaxReturn(array("success"=>"ok","code"=>0)); + }else{ + $this->ajaxReturn(array("error"=>"database error","code"=>2000)); + } + } + + //获取公司信息 + public function getCompanyList() + { + $id = $_REQUEST['id']; + $cpCompany = M("aggregate_statement","tab_")->field("id,second_party_info")->where("id={$id}")->find(); + + $data = array(); + $data['ptCompany']= M("CompanyInfo","tab_")->field('id,partner')->select(); + $data['cpCompany']= [[ + "id"=> $cpCompany['id'], + "partner"=>json_decode($cpCompany['second_party_info'],true)['partner'] + ]]; + $this->ajaxReturn(array("success"=>$data,"code"=>2000)); + } + public function getCpCompanyInfo() + { + $CompanyId = $_REQUEST['company_id']; + $company_type = $_REQUEST['company_type']; + if($company_type == 'pt'){ + $info = M("CompanyInfo","tab_")->field("id,partner,link_man,link_phone,address,company_tax_no,payee_name,bank_account,opening_bank")->where("id = '{$CompanyId}'")->find(); + }else{ + $cpCompany = M("aggregate_statement","tab_")->field("id,second_party_info")->where("id={$CompanyId}")->find(); + $info = json_decode($cpCompany['second_party_info'],true); + } + $info['invoice_item'] = "信息技术服务费"; + $info['invoice_type'] = "增值税专用发票"; + if(empty($info)){ + $this->ajaxReturn(array("error"=>"no find","code"=>2000)); + }else{ + $this->ajaxReturn(array("success"=>$info,"code"=>0)); + } + + } + public function editStatement(){ + if(!isset($_REQUEST['id'])) $this->error("参数错误"); + $id = $_REQUEST['id']; + $dbres = M("aggregate_statement","tab_")->where("id = '{$id}'")->find(); + $first_party_info = json_decode($dbres['first_party_info'],true); + $second_party_info = json_decode($dbres['second_party_info'],true); + $statement_info = json_decode($dbres['statement_info'],true); + + // if($dbres['company_name'] == $first_party_info['partner']){ + // $first_partner_type=0; + // }else{ + // $first_partner_type=1; + // } + // $fine = array_pop($statement_info); + $senddata = array( + // "first_partner_type"=>1, + "statement_id"=>$dbres['id'], + "first_part_company"=>$first_party_info['partner'], + "second_part_company"=>$second_party_info['partner'], + "statement_type"=>$dbres['pay_type'] == 0 ? 1 :0, + "first_party_info"=>$first_party_info, + "second_party_info"=>$second_party_info, + "statement_info"=>$statement_info, + "statement_count"=>array("pay_money"=>$dbres['pay_money'],"ratio_money"=>$dbres['ratio_money']) + ); + + $this->assign("data",$senddata); + if($dbres['pay_type'] == 0){ + $this->assign("company",$second_party_info['partner']); + }else{ + $this->assign("company",$first_party_info['partner']); + } + $this->assign("company_id",$dbres['company_id']); + $this->assign("company_name",$dbres['company_name']); + $this->assign("id",$dbres['id']); + $this->display(); + } + //查看发票信息 + public function viewStatement(){ + if(!isset($_REQUEST['id'])) $this->error("参数错误"); + $id = $_REQUEST['id']; + $dbres = M("aggregate_statement","tab_")->where("id = '{$id}'")->find(); + $first_party_info = json_decode($dbres['first_party_info'],true); + $second_party_info = json_decode($dbres['second_party_info'],true); + $statement_info = json_decode($dbres['statement_info'],true); + + if($dbres['pay_type'] == 0){ + $company = $second_party_info['partner']; + $pyinfo = $second_party_info; + }else{ + $company = $first_party_info['partner']; + $pyinfo = $first_party_info; + } + $senddata = array( + "company"=>$company, + "payinfo"=>$pyinfo, + "first_part_company"=>$first_party_info['partner'], + "second_part_company"=>$second_party_info['partner'], + "statement_type"=>$dbres['pay_type'], + "first_party_info"=>$first_party_info, + "second_party_info"=>$second_party_info, + "statement_info"=>$statement_info, + "statement_count"=>array("pay_money"=>$dbres['pay_money'],"ratio_money"=>$dbres['ratio_money'],"big_ratio_money"=>convertAmountToCn($dbres['ratio_money'])) + ); + $this->assign("data",$senddata); + $this->display(); + } + //上传凭证 + public function uploadVoucher() + { + if(!isset($_REQUEST['id'])) $this->error("参数错误"); + $id = $_REQUEST['id']; + $this->assign("id",$id); + $this->display(); + } + //修改凭证 + public function editVoucher() + { + if(!isset($_REQUEST['id'])) $this->error("参数错误"); + $id = $_REQUEST['id']; + $info = M("aggregate_statement","tab_")->field("id,verify_status,ext_field")->where("id = '{$id}'")->find(); + $this->assign("id",$id); + $this->assign("ext_field",$info['ext_field']); + $this->display(); + } + //保存凭证 + public function saveVoucher() + { + if(!isset($_REQUEST['id'])) $this->error("参数错误"); + $id = $_REQUEST['id']; + + $path = '/Uploads/'; + $upload = new \Think\Upload();// 实例化上传类 + $upload->maxSize = 0 ;// 设置附件上传大小 + $upload->exts = array('jpg', 'gif', 'png', 'jpeg');;// 设置附件上传类型 + $upload->rootPath = '.'.$path; // 设置附件上传根目录 + $upload->savePath = ''; // 设置附件上传(子)目录 + // 上传文件 + $info = $upload->upload(); + if(!$info) {// 上传错误提示错误信息 + $msg = $upload->getError(); + $array= array('status' => 0, 'info' => $msg); + }else{// 上传成功 + // + $pf = $path.$info['file']['savepath'].$info['file']['savename']; + $save = [ + "ext_field"=>$pf, + ]; + //获取旧值,存在删除 + $info = M("aggregate_statement","tab_")->field("id,verify_status,ext_field")->where("id = '{$id}'")->find(); + if(!empty($info['ext_field'])){ + unlink("./".$info['ext_field']); + } + //如果是开票状态就改状态 + if($info["verify_status"] == 3){ + $save['verify_status'] = 4; + $save['create_time'] = time(); + $save["admin_name"]=$this->admininfo["username"]; + $save["admin_id"]=$this->admininfo["uid"]; + } + M("aggregate_statement","tab_")->where("id = '{$id}'")->save($save); + $this->doAddOperationLog($id,"上传凭证"); + $array=array( + 'status' => 1, + "info"=>"上传成功", + "file_path"=>$pf, + ); + } + $this->ajaxReturn($array); + } + //删除凭证 + public function delVoucher(){ + if(!isset($_REQUEST['id'])) $this->error("参数错误"); + $id = $_REQUEST['id']; + $info = M("aggregate_statement","tab_")->field("id,ext_field,verify_status")->where("id = '{$id}'")->find(); + if(!empty($info['ext_field'])){ + unlink("./".$info['ext_field']); + } + $save = [ + "ext_field"=>'', + ]; + //如果是已上传凭证状态就回退到审核通过 + if($info["verify_status"] == 4){ + $save['verify_status'] = 3; + $save['create_time'] = time(); + $save["admin_name"]=$this->admininfo["username"]; + $save["admin_id"]=$this->admininfo["uid"]; + } + M("aggregate_statement","tab_")->where("id = '{$id}'")->save($save); + $this->doAddOperationLog($id,"删除凭证"); + $this->ajaxReturn(array( + 'status' => 1, + 'info' => "删除成功" + )); + } + //新增备注 + public function saveRemark(){ + if(!isset($_REQUEST['id'])) $this->error("参数错误"); + $id = $_REQUEST['id']; + $remark = $_REQUEST['remark']; + M("aggregate_statement","tab_")->where("id = '{$id}'")->save(['remark'=>$remark]); + $this->doAddOperationLog($id,"新增备注"); + $this->ajaxReturn(array( + 'status' => 1, + 'info' => "操作成功" + )); + } + //审批通过 + public function agreeApply(){ + if(!isset($_REQUEST['ids'])) $this->error("参数错误"); + $ids = $_REQUEST['ids']; + $savedata = ["verify_status"=>2,"create_time"=>time(),"admin_name"=>$this->admininfo["username"],"admin_id"=>$this->admininfo["uid"]]; + M("aggregate_statement","tab_")->where("id in ({$ids})")->save($savedata); + + $ids = explode(",",$ids); + foreach($ids as $k=>$v){ + $this->doAddOperationLog($v,"审批通过"); + } + + $this->ajaxReturn(array( + 'status' => 1, + "info"=>"审批通过成功" + )); + } + //审核拒绝 + public function refuseApply(){ + if(!isset($_REQUEST['ids'])) $this->error("参数错误"); + $ids = $_REQUEST['ids']; + $savedata = ["verify_status"=>-1,"create_time"=>time(),"admin_name"=>$this->admininfo["username"],"admin_id"=>$this->admininfo["uid"]]; + M("aggregate_statement","tab_")->where("id in ({$ids})")->save($savedata); + + $ids = explode(",",$ids); + foreach($ids as $k=>$v){ + $this->doAddOperationLog($v,"审批拒绝"); + } + + $this->ajaxReturn(array( + 'status' => 1, + "info"=>"审批拒绝成功" + )); + } + //已开票 + public function Invoiced(){ + if(!isset($_REQUEST['ids'])) $this->error("参数错误"); + $ids = $_REQUEST['ids']; + $savedata = ["verify_status"=>3,"create_time"=>time(),"admin_name"=>$this->admininfo["username"],"admin_id"=>$this->admininfo["uid"]]; + M("aggregate_statement","tab_")->where("id in ({$ids})")->save($savedata); + + $ids = explode(",",$ids); + foreach($ids as $k=>$v){ + $this->doAddOperationLog($v,"已开票"); + } + + $this->ajaxReturn(array( + 'status' => 1, + "info"=>"已开票成功" + )); + } + //已到账 + public function Received(){ + if(!isset($_REQUEST['ids'])) $this->error("参数错误"); + $ids = $_REQUEST['ids']; + $savedata = ["verify_status"=>5,"create_time"=>time(),"admin_name"=>$this->admininfo["username"],"admin_id"=>$this->admininfo["uid"]]; + M("aggregate_statement","tab_")->where("id in ({$ids})")->save($savedata); + + $ids = explode(",",$ids); + foreach($ids as $k=>$v){ + $this->doAddOperationLog($id,"已到账"); + } + + $this->ajaxReturn(array( + 'status' => 1, + "info"=>"已到账成功" + )); + } + //重算金额 + public function updateStatement() + { + if(!isset($_REQUEST['ids'])) $this->error("参数错误"); + $ids = explode(",",$_REQUEST['ids']); + foreach ($ids as $k => $v) { + $res = A("AggregateFinanceSet")->updateAggregateFinanceData($v); + if(!$res){ + $this->ajaxReturn(array( + 'status' => 0, + "info"=>"重算结算金额失败" + )); + }else{ + $this->doAddOperationLog($v,"重算结算金额"); + } + } + $this->ajaxReturn(array( + 'status' => 1, + "info"=>"算结算金额成功" + )); + + } + //撤销审核 + public function cancelVerify(){ + if(!isset($_REQUEST['id'])) $this->error("参数错误"); + $id = $_REQUEST['id']; + $savedata = ["verify_status"=>1,"create_time"=>time(),"admin_name"=>$this->admininfo["username"],"admin_id"=>$this->admininfo["uid"]]; + M("aggregate_statement","tab_")->where("id ='{$id}'")->save($savedata); + $this->doAddOperationLog($id,"撤销审核"); + $this->ajaxReturn(array( + 'status' => 1, + "info"=>"撤销审核成功" + )); + } + //撤销申请 + public function cancelApply(){ + if(!isset($_REQUEST['id'])) $this->error("参数错误"); + $id = $_REQUEST['id']; + $data = M("aggregate_statement","tab_")->where("id = '{$id}'")->find(); + $savedata = ["verify_status"=>0,"create_time"=>time(),"admin_name"=>$this->admininfo["username"],"admin_id"=>$this->admininfo["uid"]]; + $first_party_info = json_decode($data['first_party_info'], 1); + if($first_party_info['partner'] == $data['channel_name']){ + $savedata['second_party_info'] = $data['first_party_info']; + $savedata['first_party_info'] = $data['second_party_info']; + $savedata['pay_type'] =0; + } + M("aggregate_statement","tab_")->where("id ='{$id}'")->save($savedata); + $this->doAddOperationLog($id,"撤销申请"); + $this->ajaxReturn(array( + 'status' => 1, + "info"=>"撤销申请成功" + )); + } + //导出 + public function export() + { + if(!isset($_REQUEST['id'])) $this->error("参数错误"); + $id = $_REQUEST['id']; + + $data = M("aggregate_statement","tab_")->where("id = '{$id}'")->find(); + + $data['first_party_info'] = json_decode($data['first_party_info'], 1);//甲方 + $data['second_party_info'] = json_decode($data['second_party_info'], 1);//乙方 + $data['statement_info'] = json_decode($data['statement_info'], 1);//结算记录 + //收款方 + $big_pay_money = convertAmountToCn($data['ratio_money']);//大写 + $data['receive_company'] = $data['pay_type'] ? $data['first_party_info'] : $data['second_party_info']; + $data['pay_company'] = $data['pay_type'] ? $data['second_party_info'] : $data['first_party_info']; + $this->doAddOperationLog($id,"导出"); + $this->excelDownStreamTemplate($data,$big_pay_money); + } + public function excelDownStreamTemplate($data,$big_all_sum_money) { + + 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 : '
'); + + date_default_timezone_set('Europe/London'); + Vendor("PHPExcel.PHPExcel"); + $objPHPExcel = new \PHPExcel(); + $objReader = \PHPExcel_IOFactory::createReader('Excel5'); + //设置模板文件 + $objPHPExcel = $objReader->load("Public/Admin/excel/aggregate_stream.xls"); + $statement_begin_time = date('Y.m.d', $data['begintime']);//对账开始时间 + $statement_end_time = date('Y.m.d',$data['endtime']);//对账截止时间 + $objPHPExcel->getActiveSheet()->setCellValue('A1', "《 {$data['channel_name']} 》结算单 + ({$statement_begin_time}-{$statement_end_time})"); + + if ($data['withdraw_type'] == '2') { + $objPHPExcel->getActiveSheet()->setCellValue('D2','补点比例'); + } + $line = 3; + foreach ($data['statement_info'] as $key => $value) { + $objPHPExcel->getActiveSheet()->insertNewRowBefore($line,1); + $objPHPExcel->getActiveSheet()->removeConditionalStyles(); + $objPHPExcel->getActiveSheet()->setCellValue('A'.$line, $value['begintime'] . '-' . $value['endtime']); + $product_name = $value['game_name']; + $objPHPExcel->getActiveSheet()->setCellValue('D'.$line, $value['ratio'] . '%'); + $objPHPExcel->getActiveSheet()->setCellValue('E'.$line, $value['fax_ratio'] . '%'); + $objPHPExcel->getActiveSheet()->setCellValue('C'.$line, $value['money']); + $objPHPExcel->getActiveSheet()->setCellValue('B'.$line, $product_name); + $objPHPExcel->getActiveSheet()->setCellValue('F'.$line, $value['ratio_money']); + + $objPHPExcel->getActiveSheet()->getStyle('A'.$line)->getFont()->setBold(false); + $objPHPExcel->getActiveSheet()->getStyle('B'.$line)->getFont()->setBold(false); + $objPHPExcel->getActiveSheet()->getStyle('C'.$line)->getFont()->setBold(false); + $objPHPExcel->getActiveSheet()->getStyle('D'.$line)->getFont()->setBold(false); + $objPHPExcel->getActiveSheet()->getStyle('E'.$line)->getFont()->setBold(false); + $objPHPExcel->getActiveSheet()->getStyle('F'.$line)->getFont()->setBold(false); + $line++; + } + $objPHPExcel->getActiveSheet()->setCellValue('C'.($line), $data['pay_money']);//合计-平台总额 + $objPHPExcel->getActiveSheet()->setCellValue('F'.($line), $data['ratio_money']);//合计-结算金额 + $objPHPExcel->getActiveSheet()->setCellValue('B'.($line+1), $big_all_sum_money);//大写支付结算金额 + //甲方信息 + $objPHPExcel->getActiveSheet()->setCellValue('B'.($line+3), $data['first_party_info']['partner']);//甲方 + $objPHPExcel->getActiveSheet()->setCellValue('B'.($line+4), $data['first_party_info']['link_man']);//联系人 + $objPHPExcel->getActiveSheet()->setCellValue('B'.($line+5), $data['first_party_info']['link_phone']);//联系电话 + $objPHPExcel->getActiveSheet()->setCellValue('B'.($line+6), $data['second_party_info']['invoice_item']);//开票项目 + $objPHPExcel->getActiveSheet()->setCellValue('B'.($line+7), $data['second_party_info']['invoice_type']);//发票类型 + //乙方信息 + $objPHPExcel->getActiveSheet()->setCellValue('E'.($line+3), $data['second_party_info']['partner']);//乙方 + $objPHPExcel->getActiveSheet()->setCellValue('E'.($line+4), $data['second_party_info']['link_man']);//联系人 + $objPHPExcel->getActiveSheet()->setCellValue('E'.($line+5), $data['second_party_info']['link_phone']);//联系电话 + $objPHPExcel->getActiveSheet()->setCellValue('E'.($line+6), $data['second_party_info']['address']);//邮寄地址 + $objPHPExcel->getActiveSheet()->setCellValue('E'.($line+8), $data['second_party_info']['payee_name']);//户名 + $objPHPExcel->getActiveSheet()->setCellValue('E'.($line+9), $data['second_party_info']['bank_account']);//银行账号 + $objPHPExcel->getActiveSheet()->setCellValue('E'.($line+10), $data['second_party_info']['opening_bank']);//开户行 + if($data['withdraw_type'] == 1){ + $m = date('Y.m', $data['begintime']); + $fileName = "{$data['second_party_info']['partner']}&{$data['first_party_info']['partner']}-对账单{$m}"; + }else{ + $fileName = "{$data['second_party_info']['partner']}&{$data['first_party_info']['partner']}-对账单{$statement_begin_time}-{$statement_end_time}"; + } + 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'); + } + //获取权限 + public function getAuth() + { + $group = $_SESSION['onethink_admin']['user_group_id']; + //获取全部权限列表 + $ruleList = M("AuthGroup")->field("rules")->where("id='{$group}'")->find()['rules']; + //获取所有含有规则的数据 + $authlist = M("AuthRule")->field('name')->where("name like 'Admin/AggregateFinanceStatement%' AND id in ($ruleList)")->select(); + $Auth = []; + foreach ($authlist as $k => $v) { + $a = str_replace("Admin/AggregateFinanceStatement/","",$v['name']); + $Auth[] = $a; + } + $this->OpAuthList = $Auth; + } + public function OpAuth($info) + { + $id = $info['id']; + $img = $info['ext_field']; + $remark = $info['remark']; + //原始列表 + $opBtn = [ + "viewStatement"=>"查看", + "createStatement"=>"申请开票", + "editStatement"=>"编辑", + "uploadVoucher"=>"上传凭证", + "viewVoucher"=>"查看凭证", + "editVoucher"=>" 编辑凭证", + "addRemark"=>"新增备注", + "editRemark"=>"修改备注", + "viewRemark"=>"查看备注", + "cancelVerify"=>"撤销审核", + "cancelApply"=>"撤销申请", + ]; + //操作对应菜单 + $optist = []; + switch ($info['verify_status']) { + case '-1': + $optist = ["viewStatement","cancelVerify","addRemark","viewRemark","editRemark"]; + break; + case '0': + $optist = ["viewStatement","createStatement"]; + break; + case '1': + $optist = ["viewStatement","editStatement","cancelApply"]; + break; + case '2': + $optist = ["viewStatement","cancelVerify","addRemark","viewRemark","editRemark"]; + break; + case '3': + $optist = ["viewStatement","uploadVoucher","viewVoucher","editVoucher","addRemark","viewRemark","editRemark"]; + break; + case '4': + $optist = ["viewStatement","viewVoucher","editVoucher","addRemark","viewRemark","editRemark"]; + break; + case '5': + $optist = ["viewStatement","uploadVoucher","viewVoucher","editVoucher","addRemark","viewRemark","editRemark"]; + break; + default: + break; + } + //判断凭证和备注 + if(empty($info['ext_field'])){ + //未上传凭证 + $optist = array_diff($optist, ["viewVoucher", "editVoucher"]); + }else{ + $optist = array_diff($optist, ["uploadVoucher"]); + } + 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() + { + $optist = ['agreeApply',"refuseApply","Invoiced","Received","updateStatement","export"]; + $mentBtn = [ + "agreeApply"=>"审批通过", + "refuseApply"=>"审批拒绝", + "Invoiced"=>"已开票", + "Received"=>"已到账", + "updateStatement"=>"重算结算金额", + "export"=>"批量导出" + ]; + $resarr = []; + foreach ($optist as $k => $v) { + if(IS_ROOT){ + $resarr[] = $mentBtn[$v]; + }else{ + if(in_array($v,$this->OpAuthList)){ + $resarr[] = $mentBtn[$v]; + } + } + } + return $resarr; + } + //操作日志 + public function doAddOperationLog($id,$op_name) + { + $d= M("aggregate_statement","tab_")->where("id = '{$id}'")->find(); + $first_party_info = json_decode($d['first_party_info'],true); + $second_party_info = json_decode($d['second_party_info'],true); + + $statement_begin_time = date('Y.m.d', $d['begintime']);//对账开始时间 + $statement_end_time = date('Y.m.d',$d['endtime']);//对账截止时间 + $menu = "财务-结算管理-聚合渠道结算单管理"; + + if($d['withdraw_type'] == 1){ + $m = date('Y.m', $d['begintime']); + $key = "{$second_party_info['partner']}&{$first_party_info['partner']}【{$m} 月结】"; + }elseif($d['withdraw_type'] == 0){ + $key ="{$second_party_info['partner']}&{$first_party_info['partner']}【{$statement_begin_time}-{$statement_end_time} 周结 正常结算】"; + }else{ + $key ="{$second_party_info['partner']}&{$first_party_info['partner']}【{$statement_begin_time}-{$statement_end_time} 周结 补点】"; + } + addOperationLog(['op_type'=>1,'key'=>$key,"op_name"=>$op_name,'url'=>U(CONTROLLER_NAME.'/lists',$GetData),'menu'=>$menu]); + } + + +} diff --git a/Application/Admin/View/AggregateFinanceStatement/createStatement.html b/Application/Admin/View/AggregateFinanceStatement/createStatement.html new file mode 100644 index 000000000..15b16ea59 --- /dev/null +++ b/Application/Admin/View/AggregateFinanceStatement/createStatement.html @@ -0,0 +1,896 @@ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
甲方类型: +
+ +
+
甲方: +
+ +
+
联系人: + +
联系电话: + +
邮寄地址: + +
公司税号: + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
乙方: +
+ +
+
联系人: + +
联系电话: + +
邮寄地址: + +
公司税号: + +
+
+
+
+
+

支付给:

+
+
+ +
+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + +
结算时间产品平台总额分成比例税费费率结算金额
+ 请先选择生成条件后点击生成对账数据 +
+
+
+
+
+ + + + + + + + + + + + + + + +
收款方名称: + +
银行账号: + +
开户行: + +
+
+
+ + + + + + + + + + + + + +
开票项目: + +
发票类型: + +
+
+
+
+
+ 申请开票 +
+
+ + + + + + + + diff --git a/Application/Admin/View/AggregateFinanceStatement/editStatement.html b/Application/Admin/View/AggregateFinanceStatement/editStatement.html new file mode 100644 index 000000000..319ccda07 --- /dev/null +++ b/Application/Admin/View/AggregateFinanceStatement/editStatement.html @@ -0,0 +1,879 @@ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
甲方: +
+ +
+
联系人: + +
联系电话: + +
邮寄地址: + +
公司税号: + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
乙方: +
+ +
+
联系人: + +
联系电话: + +
邮寄地址: + +
公司税号: + +
+
+
+
+
+

支付给:{$company} + +

+
+ +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + +
结算时间产品平台总额分成比例税费费率结算金额
+ 请先选择生成条件后点击生成对账数据 +
+
+
+
+
+ + + + + + + + + + + + + + + +
收款方名称: + +
银行账号: + +
开户行: + +
+
+
+ + + + + + + + + + + + + +
开票项目: + +
发票类型: + +
+
+
+
+
+ 确认修改 +
+
+ + + + + + + + diff --git a/Application/Admin/View/AggregateFinanceStatement/editVoucher.html b/Application/Admin/View/AggregateFinanceStatement/editVoucher.html new file mode 100644 index 000000000..b57b9a5f8 --- /dev/null +++ b/Application/Admin/View/AggregateFinanceStatement/editVoucher.html @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + +
+ + + + + + +
文件选择: + + 仅能添加一张凭证,重复添加将覆盖
+
+
+
确认修改
+
删除凭证
+
+
+
+ +
+
+ + + + + + diff --git a/Application/Admin/View/AggregateFinanceStatement/lists.html b/Application/Admin/View/AggregateFinanceStatement/lists.html new file mode 100644 index 000000000..ad186aa04 --- /dev/null +++ b/Application/Admin/View/AggregateFinanceStatement/lists.html @@ -0,0 +1,798 @@ + + + + + + + + + + + + + + +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +  -  +
+ + +
+
+ +
+ +
+ +
+ +  -  +
+ + +
+
+
+ 搜索 +
+ +
+
+ +
+
+ + {$vo} + +
+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
合作公司结算日期结算周期结算类型结算金额审批状态操作人操作时间操作
aOh! 暂时还没有内容!
+ {$data.channel_name}{$data.begintime}-{$data.endtime}{$data.withdraw_type_1}{$data.withdraw_type_2}{$data.ratio_money}{$data.verify_status_str}{$data.admin_name}{$data.create_time} + + {$vo} + +
合计结算总流水:{$pay_money}元    结算金额:{$total}元
+
+ +
+
+ {$_page|default=''} +
+
+ + + + if(C('COLOR_STYLE')=='blue_color') echo ' + + '; + + + + + + + + + + diff --git a/Application/Admin/View/AggregateFinanceStatement/uploadVoucher.html b/Application/Admin/View/AggregateFinanceStatement/uploadVoucher.html new file mode 100644 index 000000000..45f383823 --- /dev/null +++ b/Application/Admin/View/AggregateFinanceStatement/uploadVoucher.html @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + +
+ + + + + + +
文件选择: + + 仅能添加一张凭证,重复添加将覆盖
+
+
+
确认添加
+
删除凭证
+
+
+
+ +
+
+ + + + + + diff --git a/Application/Admin/View/AggregateFinanceStatement/viewStatement.html b/Application/Admin/View/AggregateFinanceStatement/viewStatement.html new file mode 100644 index 000000000..9d7bf0bb3 --- /dev/null +++ b/Application/Admin/View/AggregateFinanceStatement/viewStatement.html @@ -0,0 +1,277 @@ + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
甲方: +
+ +
+
联系人: + +
联系电话: + +
邮寄地址: + +
公司税号: + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
乙方: +
+ +
+
联系人: + +
联系电话: + +
邮寄地址: + +
公司税号: + +
+
+
+
+ +
+
+

支付给:{$data.company} + +

+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
结算时间产品平台总额分成比例税费费率结算金额
{$it.begintime}~{$it.endtime}{$it.game_name}{$it.money}元%%{$it.ratio_money}元
合计{$data.statement_count.pay_money}元{$data.statement_count.ratio_money}元
本月分成总金额(人民币大写):{$data.statement_count.big_ratio_money}
+
+
+ +
+
+ + + + + + + + + + + + + + + +
收款方名称: + +
银行账号: + +
开户行: + +
+
+
+ + + + + + + + + + + +
开票项目: + +
发票类型: + +
+
+
+
+ + diff --git a/Data/update.sql b/Data/update.sql index ea4f7764f..5a36ceed2 100644 --- a/Data/update.sql +++ b/Data/update.sql @@ -1605,3 +1605,43 @@ CREATE TABLE `tab_finance_compare_info` ( KEY `pay_way` (`pay_way`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='财务导入对账详情表'; + +--新增参数kv表 chenzhi 20200422 +CREATE TABLE `sys_kv` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `key` varchar(50) COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT 'key', + `value` varchar(1000) COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT 'value', + `type` varchar(50) DEFAULT NULL COMMENT '类型说明', + `remark` varchar(1000) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`), + UNIQUE KEY `key_name` (`key`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='系统简单kv储存表'; + +INSERT INTO `platform`.`sys_kv` (`key`, `value`, `type`, `remark`) VALUES ('aggregate_finance_api', 'http://admin.cz.com/index.php?g=api&m=FinanceWeekCount&a=returnFinanceAccountsDataList', 'string', '聚合下游结算Api地址'); + +--聚合渠道结算单 chenzhi 20200422 +CREATE TABLE `tab_aggregate_statement` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键', + `withdraw_type` tinyint(2) DEFAULT '0' COMMENT '对账类型(0-周结,1月结,2补点)', + `channel_id` int(11) DEFAULT '0' COMMENT '对账公司id', + `channel_name` varchar(60) NOT NULL COMMENT '对账公司名称', + `link_phone` varchar(24) DEFAULT NULL COMMENT '对账公司联系人电话', + `begintime` int(11) NOT NULL DEFAULT '0' COMMENT '对账开始时间', + `endtime` int(11) NOT NULL DEFAULT '0' COMMENT '对账截止时间', + `create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建对账单时间', + `ratio_money` decimal(10,2) DEFAULT '0.00' COMMENT '对账金额', + `pay_money` decimal(10,2) DEFAULT '0.00' COMMENT '原始金额合计', + `pay_type` tinyint(2) DEFAULT '0' COMMENT '收款方(0-甲方付给乙方,乙方收款;1-乙方付给甲方,甲方收款)', + `ext_field` longtext COMMENT '凭证地址', + `first_party_info` longtext DEFAULT NULL COMMENT '甲方相关信息json', + `second_party_info` longtext DEFAULT NULL COMMENT '乙方相关信息json', + `statement_info` longtext NOT NULL COMMENT '订单相关信息json', + `admin_name` varchar(60) NOT NULL COMMENT '操作人名称', + `admin_id`int(11) DEFAULT '0' COMMENT '操作人id', + `verify_status` tinyint(2) DEFAULT '0' COMMENT '审核状态 -1审核拒绝 0:系统生成结算单 1:申请开票 2:审核同意 3:已开票 4:上传收款凭证 5已到账', + `remark` longtext DEFAULT NULL COMMENT '备注信息', + PRIMARY KEY (`id`), + KEY `withdraw_type` (`withdraw_type`) USING BTREE, + KEY `channel_id` (`channel_id`) USING BTREE, + KEY `link_phone` (`link_phone`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='聚合渠道结算单'; \ No newline at end of file diff --git a/Public/Admin/excel/aggregate_stream.xls b/Public/Admin/excel/aggregate_stream.xls new file mode 100644 index 000000000..c34f0dfbe Binary files /dev/null and b/Public/Admin/excel/aggregate_stream.xls differ