title = '实收实退单'; $this->flag = 'index'; $is_export = kernel::single('desktop_user')->has_permission('finance_export');#增加销售应收单导出权限 $base_filter = array(); $this->base_filter = $base_filter; $actions = array(); switch ($_GET['view']) { case 1: $actions['zq'] = array ( 'label' => '匹配账期', 'submit' => $this->url.'&act=matchReport&view='.$_GET['view'], 'target' => 'dialog::{width:600,height:300,title:\'匹配账期\'}' ); /**$actions['hx'] = array( 'label' => '再次核销', 'submit' => $this->url . '&act=verifyAgain', 'target' => "dialog::{width:500,height:200,title:'再次核销'}", );**/ break; default: break; } $params = array( 'title'=>$this->title , 'use_buildin_export'=>$is_export, 'use_buildin_recycle'=>false, 'use_view_tab'=>true, 'actions' => $actions, 'use_buildin_selectrow'=>true, 'use_buildin_filter'=>true, 'finder_aliasname'=>'ar_unsale', 'finder_cols'=>'bill_bn,status,channel_name,fee_obj,member,trade_time,order_bn,fee_type,fee_item,money,bill_type', 'base_filter' => $base_filter, 'orderBy'=> 'bill_id desc', ); $this->finder('finance_mdl_bill',$params); } public function _views(){ $method_name = '_views_'.$this->flag; if(method_exists($this, $method_name)) { return $this->$method_name(); }else{ return array(); } } public function _views_index(){ $arObj = $this->app->model('bill'); $sub_menu = array( 0 => array('label'=>app::get('base')->_('全部'),'filter'=>array(),'addon'=>'showtab','optional'=>false), 1 => array('label'=>app::get('base')->_('未匹配账期'),'filter'=>array('monthly_item_id'=>0),'addon'=>'showtab','optional'=>false), ); return $sub_menu; } // 导出设置页 // public function export($view){ // $oFunc = kernel::single('financebase_func'); // $this->pagedata['platform_list'] = $oFunc->getShopPlatform(); // $this->pagedata['view'] = $view; // $this->pagedata['time_from'] = date('Y-m-01', strtotime(date("Y-m-d"))); // $this->pagedata['time_to'] = date('Y-m-d', strtotime("$_POST[time_from] +1 month -1 day")); // $this->pagedata['finder_id'] = $_GET['finder_id']; // $this->display('settlement/export.html'); // } public function doBillExport($platform_type,$time_from,$time_to,$view=0){ $oFunc = kernel::single('financebase_func'); $platform_list = $oFunc->getShopPlatform(); $filter = array('trade_time|between'=>array(strtotime($time_from),strtotime($time_to)),'fee_obj'=>$platform_list[$platform_type]); $sub_menu = $this->_views_index(); $filter = array_merge($filter,$sub_menu[$view]['filter']); $file_name = sprintf("%s平台%s实收实退单[%s]",$platform_list[$platform_type],$sub_menu[$view]['label'],date('Y-m-d')); $this->doExport($filter,$file_name,$platform_type); } // 导出未匹配订单号 public function exportUnMatch(){ $oFunc = kernel::single('financebase_func'); $this->pagedata['platform_list'] = $oFunc->getShopPlatform(); $this->pagedata['finder_id'] = $_GET['finder_id']; $this->display('settlement/export_unmatch.html'); } public function doUnMatchExport($platform_type = 'alipay'){ $oFunc = kernel::single('financebase_func'); $platform_list = $oFunc->getShopPlatform(); $filter = array('order_bn'=>'','fee_obj'=>$platform_list[$platform_type]); $file_name = sprintf("%s平台未匹配订单号[%s]",$platform_list[$platform_type],date('Y-m-d')); $this->doExport($filter,$file_name,$platform_type); } /*public function doExport($filter,$file_name,$platform_type = 'alipay'){ set_time_limit(0); $oFunc = kernel::single('financebase_func'); $mdlBill = app::get('finance')->model('bill'); $page_size = $oFunc->getConfig('page_size'); $class_name = sprintf("financebase_data_bill_%s",$platform_type); $shop_list = financebase_func::getShopList(); $shop_list = array_column($shop_list,null,'shop_id'); if (ome_func::class_exists($class_name) && $instance = kernel::single($class_name)){ $csv_title = $instance->getTitle(); $csv_title['shop_id'] = '所属店铺'; $csv_title['bill_bn'] = '单据编号'; $csv_title['order_bn'] = '订单号'; header('Content-Type: application/vnd.ms-excel;charset=utf-8'); header("Content-Disposition:filename=" . $file_name . ".csv"); $fp = fopen('php://output', 'a'); $csv_title_value = array_values($csv_title); foreach ($csv_title_value as &$v) $v = $oFunc->strIconv($v,'utf-8','gbk'); fputcsv($fp, $csv_title_value); $id = 0; while (true) { $data = $mdlBill->getExportData($filter,$page_size,$id); if($data){ foreach ($data as &$v) { $tmp = array(); $v['shop_id'] = isset($shop_list[$v['shop_id']]) ? $shop_list[$v['shop_id']]['name'] : ''; foreach ($csv_title as $title_key => $title_val) { $tmp[] = isset($v[$title_key]) ? $oFunc->strIconv($v[$title_key],'utf-8','gbk')."\t" : ''; } fputcsv($fp, $tmp); } }else{ break; } } exit; } }*/ // 导入未匹配订单号 public function importUnMatch(){ $oFunc = kernel::single('financebase_func'); $this->pagedata['platform_list'] = $oFunc->getShopPlatform(); $this->pagedata['finder_id'] = $_GET['finder_id']; $this->display('settlement/import_unmatch.html'); } public function doUnMatchImport() { @ini_set('memory_limit', '512M'); $this->begin('index.php?app=finance&ctl=settlement&act=index&view=3'); $platform_type = $_POST['platform_type'] ? $_POST['platform_type'] : 'alipay'; if( $_FILES['import_file']['name'] && $_FILES['import_file']['error'] == 0 ){ $file_type = substr($_FILES['import_file']['name'],strrpos($_FILES['import_file']['name'],'.')+1); if(in_array($file_type, array('csv','xls','xlsx'))){ $ioType = kernel::single('financebase_io_'.$file_type); $oProcess = kernel::single('financebase_data_bill_'.$platform_type); $oFunc = kernel::single('financebase_func'); /*if(!$oProcess->checkFile($_FILES['import_file']['tmp_name'],$file_type)){ $this->end(false, app::get('base')->_('上传文件数据不对')); } //临时文件生成后往ftp服务器迁移 $storageLib = kernel::single('taskmgr_interface_storage'); $move_res = $storageLib->save($_FILES['import_file']['tmp_name'], md5($_FILES['import_file']['name'].time()).'.'.$file_type, $remote_url); if(!$move_res) { $this->end(false, app::get('base')->_('文件上传失败')); }else{ $worker = "financebase_data_task.doAssign"; $params = array(); $params['shop_id'] = $_POST['shop_id']; $params['shop_type'] = $type; $params['task_name'] = $_FILES['import_file']['name']; $params['file_type'] = $file_type; $params['file_name'] = $remote_url; $oFunc->addTask('分派对账单导入',$worker,$params); $this->end(true, app::get('base')->_('上传成功 已加入队列 系统会自动跑完队列')); }*/ $page_size = $oFunc->getConfig('page_size'); $file_name = $_FILES['import_file']['tmp_name']; $file_info = $ioType->getInfo($file_name); $total_nums = $file_info['row']; $page_nums = ceil($total_nums / $page_size); for ($i=1; $i <= $page_nums ; $i++) { $offset = ($i - 1) * $page_size; $data = $ioType->getData($file_name,0,$page_size,$offset,true); $oProcess->updateOrderBn($data); } $this->end(true, app::get('base')->_('更新成功')); }else{ $this->end(false, app::get('base')->_('不支持此文件')); } }else{ $this->end(false, app::get('base')->_('没有导入成功')); } } //核销 public function detailVerification(){ $billObj = &app::get('finance')->model('bill'); $bill_id = $_GET['bill_id']; $bill_data = kernel::single('finance_bill')->get_bill_by_bill_id($bill_id,'bill_id'); $ar_data = kernel::single('finance_bill')->get_ar_by_bill_id($bill_id,'order_bn'); // financebase_func::dd($ar_data); $this->pagedata['bill_data'] = $bill_data; $this->pagedata['ar_data'] = $ar_data; $this->pagedata['bill_id'] = $bill_id; $this->pagedata['finder_id'] = $_GET['finder_id']; if(isset($_GET['flag']) && $_GET['flag'] == 'replace'){ $this->pagedata['replace'] = true; }else{ $this->pagedata['replace'] = false; } // $html = $this->fetch('settlement/verificate_detail.html'); // echo $html; $this->pagedata['finder_id'] = $_GET['finder_id']; $this->singlepage('settlement/verificate_detail.html'); } public function confirmVerification(){ $data = json_decode($_COOKIE['VERIFICATION_MSG'],1); $this->pagedata['info'] = $data; $this->page('settlement/verificate_confirm.html'); } public function checkVerificate(){ $res = kernel::single('finance_bill')->checkVerificate($_POST); $res = json_encode($res); setcookie('VERIFICATION_MSG', $res ); echo $res; } //确认核销 public function doVerificate(){ $this->begin(''); $res = kernel::single('finance_bill')->doManVerificate($_POST); // echo json_encode($res); $this->end(true, app::get('base')->_('核销成功')); } // 重新设置订单号 public function resetOrderBn($bill_id) { $bill_info = app::get('finance')->model("bill")->getList('order_bn,bill_id,credential_number,bill_bn,money',array('bill_id'=>$bill_id,'status'=>0),0,1); $this->pagedata['bill_info'] = $bill_info[0]; $this->singlepage("settlement/reset_orderbn.html"); } // 保存设置订单号 public function saveOrderBn() { $this->begin('index.php?app=finance&ctl=settlement&act=index'); $oBill = app::get('finance')->model("bill"); $oBaseBill = app::get('financebase')->model("bill"); $bill_id = intval($_POST['bill_id']); $order_bn = trim($_POST['order_bn']); if(!$bill_id) { $this->end(false, "ID不存在"); } $bill_info = app::get('finance')->model("bill")->getList('order_bn,bill_bn,unique_id,channel_id',array('bill_id'=>$bill_id,'status|lthan'=>2),0,1); if(!$bill_info) { $this->end(false, "流水单不存在"); } if(!$order_bn) { $this->end(false, "订单号不存在"); } $bill_info = $bill_info[0]; $bill_bn = $bill_info['bill_bn']; if($order_bn == $bill_info['order_bn']) { $this->end(false, "订单号没有改变"); } if($oBill->update(array('order_bn'=>$order_bn),array('bill_id'=>$bill_id,'status'=>0))) { $oBaseBill->update(array('order_bn'=>$order_bn),array('unique_id'=>$bill_info['unique_id'],'shop_id'=>$bill_info['channel_id'])); $this->end(true, app::get('base')->_('保存成功')); } else { $this->end(false, app::get('base')->_('保存失败')); } } // 导入强制核销流水单 public function importVerification() { $this->pagedata['finder_id'] = $_GET['finder_id']; $this->display('settlement/import_verification.html'); } public function doVerificationImport() { $this->begin('index.php?app=finance&ctl=settlement&act=index&view=1'); if( $_FILES['import_file']['name'] && $_FILES['import_file']['error'] == 0 ){ $file_type = substr($_FILES['import_file']['name'],strrpos($_FILES['import_file']['name'],'.')+1); if(in_array($file_type, array('csv','xls','xlsx'))){ //临时文件生成后往ftp服务器迁移 $storageLib = kernel::single('taskmgr_interface_storage'); $move_res = $storageLib->save($_FILES['import_file']['tmp_name'], md5($_FILES['import_file']['name'].time()).'.'.$file_type, $remote_url); if(!$move_res) { $this->end(false, app::get('base')->_('文件上传失败')); }else{ $mdlQueue = app::get('financebase')->model('queue'); $queueData = array(); $queueData['queue_mode'] = 'forceVerification'; $queueData['create_time'] = time(); $queueData['queue_name'] = sprintf("强制核销流水单"); $queueData['queue_data']['shop_type'] = $type; $queueData['queue_data']['task_name'] = basename($_FILES['import_file']['name']); $queueData['queue_data']['file_type'] = $file_type; $queueData['queue_data']['op_name'] = kernel::single('desktop_user')->get_name(); $queueData['queue_data']['remote_url']= $remote_url; $queue_id = $mdlQueue->insert($queueData); financebase_func::addTaskQueue(array('queue_id'=>$queue_id),'forceverification'); $this->end(true, app::get('base')->_('上传成功 已加入队列 系统会自动跑完队列')); } }else{ $this->end(false, app::get('base')->_('不支持此文件')); } }else{ $this->end(false, app::get('base')->_('没有导入成功')); } } public function matchReport() { $filter = array( 'monthly_item_id' => '0', ); $filter = array_merge($filter, $_POST); $list = app::get('finance')->model('bill')->getList('bill_id', $filter); $GroupList = array_column($list, 'bill_id'); $this->pagedata['request_url'] = $this->url.'&act=doMatchReport'; $this->pagedata['itemCount'] = count($GroupList); $this->pagedata['GroupList'] = json_encode($GroupList); $this->pagedata['maxNum'] = 100; parent::dialog_batch(); } public function doMatchReport() { $itemIds = explode(',',$_POST['primary_id']); if (!$itemIds) { echo 'Error: 缺少单据';exit;} $retArr = array( 'itotal' => count($itemIds), 'isucc' => 0, 'ifail' => 0, 'err_msg' => array(), ); $monthlyId = []; foreach($itemIds as $itemId) { list($rs, $rsData) = kernel::single('finance_monthly_report_items')->dealBillMatchReport($itemId); if($rs) { $monthlyId[$rsData['monthly_id']] = $rsData['monthly_id']; $retArr['isucc'] += 1; } else { $retArr['ifail'] += 1; $retArr['err_msg'][] = $rsData['msg']; } } if($monthlyId) { finance_monthly_report::updateMonthlyAmount(['monthly_id'=>$monthlyId]); } echo json_encode($retArr),'ok.';exit; } public function verifyAgain() { $model = app::get('finance')->model('bill'); $pageData = array( 'billName' => '实收实退单', 'request_url' => $this->url.'&act=dealVerifyAgain', 'maxProcessNum' => 100, 'close' => true ); $this->pagedata['notice'] = '重置状态后,半个小时内系统重新跑!'; $this->selectToPageRequest($model, $pageData); } public function dealVerifyAgain() { $bill_id = explode(';', $_POST['ajaxParams']); $retArr = array( 'total' => count($bill_id), 'succ' => 0, 'fail' => 0, 'fail_msg' => array() ); app::get('finance')->model('bill')->update(['is_check'=>0], array('bill_id'=>$bill_id,'status|noequal'=>2,'is_check'=>2)); $retArr['succ'] = $retArr['total']; echo json_encode($retArr); } }