Admin.php 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527
  1. <?php
  2. /**
  3. * 后台的公共控制器类
  4. *
  5. */
  6. namespace app\admin\controller;
  7. use app\common\controller\Base;
  8. use app\common\logic\Websocket;
  9. use app\common\model\Admin as AdminModel;
  10. use think\Db;
  11. use think\Session;
  12. class Admin extends Base
  13. {
  14. // 不验证权限的action
  15. protected $noCheckAuth = [];
  16. protected $admin_info; //后台登录用户资料
  17. protected $current_node;
  18. /**
  19. * 初始化操作
  20. */
  21. protected function _initialize()
  22. {
  23. parent::_initialize();
  24. $session_admin_id = session('ADMIN_ID');
  25. log_message('Admin@input: sid='.session_id() .' - '. json_encode(input()), 'log', LOG_PATH . 'adminlog/');
  26. if (!empty($session_admin_id)) {
  27. if (!$this->checkAccess($session_admin_id)) {
  28. $this->error("您没有访问权限!");
  29. }
  30. // 登陆账户的session到期后,重置token
  31. if (!session('WS_CONNECT_KEY')) {
  32. $ws = new Websocket;
  33. $ws->resettingToken(session_id(), $session_admin_id);
  34. }
  35. } else {
  36. if ($this->request->isPost()) {
  37. $this->error("您还没有登录!", '/login/index');
  38. } else {
  39. return $this->redirect('/login/index');
  40. }
  41. }
  42. $this->current_node = strtolower($this->request->module() . '/' . $this->request->controller() . '/' . $this->request->action());
  43. }
  44. /**
  45. * 检查后台用户访问权限
  46. * @param int $userId 后台用户id
  47. * @return boolean 检查通过返回true
  48. */
  49. private function checkAccess($userId)
  50. {
  51. // 如果用户id是1,则无需判断
  52. if ($userId == 1) {
  53. return true;
  54. }
  55. $module = $this->request->module();
  56. $controller = $this->request->controller();
  57. $action = $this->request->action();
  58. $rule = $module . $controller . $action;
  59. // action检测
  60. $actionCheck = in_array(strtolower($action),
  61. array_map(function ($val){
  62. return strtolower($val);
  63. }, $this->noCheckAuth)
  64. );
  65. $notRequire = ["adminIndexindex", "adminMainindex"];
  66. if (!in_array($rule, $notRequire) &&
  67. ! $actionCheck) {
  68. return cmf_auth_check($userId);
  69. } else {
  70. return true;
  71. }
  72. }
  73. /**
  74. * 返回 json
  75. * @access protected
  76. * @param mixed $data 要返回的数据
  77. * @param int $code 返回的 code
  78. * @param mixed $msg 提示信息
  79. * @return void
  80. * @throws HttpResponseException
  81. */
  82. public function jsonResult($data, $code = 0, $msg = '')
  83. {
  84. $this->result($data, $code, $msg, 'json');
  85. }
  86. /**
  87. * 初始化nw前缀 model
  88. */
  89. public function nwModel($dbName)
  90. {
  91. return Db::name('nw_' . $dbName);
  92. }
  93. /**
  94. * 初始化cy前缀 model
  95. */
  96. public function cyModel($dbName)
  97. {
  98. return Db::name('cy_' . $dbName);
  99. }
  100. /**
  101. * 发送短信验证码
  102. */
  103. public function sendSmsCode()
  104. {
  105. if (request()->isAjax()) {
  106. $action = input('post.action', '', 'trim');
  107. switch ($action) {
  108. case 'coinSend': //发币时短信验证
  109. $mobile = (new AdminModel)->where(['id' => session('ADMIN_ID')])->value('mobile');
  110. break;
  111. default:
  112. $mobile = input('post.mobile', '', 'trim');
  113. break;
  114. }
  115. $result = (new \app\common\library\Sms)->sendCode($mobile);
  116. if ($result['status']) {
  117. $this->success('发送成功,请查收');
  118. } else {
  119. $this->error($result['msg']);
  120. }
  121. } else {
  122. $this->error('非法请求');
  123. }
  124. }
  125. protected function insertLog($node = '', $content = '', $type = 0, $admin_id = '', $username = '')
  126. {
  127. if (empty($admin_id)) {
  128. $admin_id = session('ADMIN_ID') ?: 1;
  129. }
  130. if (empty($username)) {
  131. $username = session('USERNAME') ?: '';
  132. }
  133. return \app\common\logic\Log::insertOperateLog($node, $content, $type, $admin_id, $username);
  134. }
  135. /**
  136. * 排序 排序字段为list_orders数组 POST 排序字段为:list_order
  137. */
  138. protected function listOrders($model ,$pk = 'id')
  139. {
  140. if (!is_object($model)) {
  141. return false;
  142. }
  143. if ($pk !== 'id') {
  144. $pk = $model->pk; //获取主键名称
  145. }
  146. $ids = $this->request->post("list_orders/a");
  147. if (!empty($ids)) {
  148. foreach ($ids as $key => $r) {
  149. $data['list_order'] = $r;
  150. $model->where([$pk => $key])->update($data);
  151. }
  152. }
  153. return true;
  154. }
  155. /**
  156. * 下载成exel表格
  157. *
  158. * @param array $list 数组
  159. *
  160. * @return null
  161. */
  162. protected function downloadexls($list,$title,$type,$list_more=array()) {
  163. Vendor('PHPExcel.PHPExcel');//调用类库,路径是基于vendor文件夹的
  164. Vendor('PHPExcel.PHPExcel.Worksheet.Drawing');
  165. Vendor('PHPExcel.PHPExcel.Writer.Excel2007');
  166. $objExcel = new \PHPExcel();
  167. //set document Property
  168. $objWriter = \PHPExcel_IOFactory::createWriter($objExcel, 'Excel2007');
  169. if ($type == 'finance') {
  170. $objActSheet = $objExcel->getActiveSheet();
  171. $key = ord("A");
  172. $letter =explode(',',"A,B,C,D,E,F,G,H,I");
  173. $arrHeader = array('开始时间','结束时间','游戏名称','渠道(包括子渠道)','结算类型','补点起止时间','消费金额','补点(%)','补点金额');
  174. //填充表头信息
  175. $lenth = count($arrHeader);
  176. for($i = 0;$i < $lenth;$i++) {
  177. $objActSheet->setCellValue("$letter[$i]1","$arrHeader[$i]");
  178. };
  179. //填充表格信息
  180. foreach($list as $k=>$v){
  181. $k +=2;
  182. $objActSheet->setCellValue('A'.$k,$v['starttime']);
  183. $objActSheet->setCellValue('B'.$k, $v['endtime']);
  184. $objActSheet->setCellValue('C'.$k, $v['game_name']);
  185. $objActSheet->setCellValue('D'.$k, $v['channel_name']);
  186. $objActSheet->setCellValue('E'.$k, $v['settle_type']);
  187. $objActSheet->setCellValue('F'.$k, $v['begin_date'].'~'.$v['end_date']);
  188. $objActSheet->setCellValue('G'.$k, floatval($v['total_amount']));
  189. $objActSheet->setCellValue('H'.$k, $v['point']);
  190. $objActSheet->setCellValue('I'.$k, floatval($v['point_amt']));
  191. // 表格高度
  192. $objActSheet->getRowDimension($k)->setRowHeight(20);
  193. }
  194. }
  195. else if($type=='queryChildChannel'){
  196. $objActSheet = $objExcel->getActiveSheet();
  197. $key = ord("A");
  198. $letter =explode(',',"A,B");
  199. $arrHeader = array('计数','渠道名称');
  200. //填充表头信息
  201. $lenth = count($arrHeader);
  202. for($i = 0;$i < $lenth;$i++) {
  203. $objActSheet->setCellValue("$letter[$i]1","$arrHeader[$i]");
  204. };
  205. //填充表格信息
  206. foreach($list as $k=>$v){
  207. $k +=2;
  208. $objActSheet->setCellValue('A'.$k,$k-1);
  209. $objActSheet->setCellValue('B'.$k, $v['name']);
  210. // 表格高度
  211. $objActSheet->getRowDimension($k)->setRowHeight(20);
  212. }
  213. }
  214. else if($type=='listGame'){
  215. $objActSheet = $objExcel->getActiveSheet();
  216. $key = ord("A");
  217. $letter =explode(',',"A,B,C,D,E,F");
  218. $arrHeader = array('游戏ID','游戏名称','游戏原名','渠道名称','创建时间','备注');
  219. //填充表头信息
  220. $lenth = count($arrHeader);
  221. for($i = 0;$i < $lenth;$i++) {
  222. $objActSheet->setCellValue("$letter[$i]1","$arrHeader[$i]");
  223. };
  224. //填充表格信息
  225. foreach($list as $k=>$v){
  226. $k +=2;
  227. $objActSheet->setCellValue('A'.$k, $v['game_id']);
  228. $objActSheet->setCellValue('B'.$k, $v['game_name']);
  229. $objActSheet->setCellValue('C'.$k, $v['origin_name']);
  230. $objActSheet->setCellValue('D'.$k, $v['channel_name']);
  231. $objActSheet->setCellValue('E'.$k, $v['create_time']);
  232. $objActSheet->setCellValue('F'.$k, $v['remark']);
  233. // 表格高度
  234. $objActSheet->getRowDimension($k)->setRowHeight(20);
  235. }
  236. }
  237. else if($type=='listGameFrozen'){
  238. //聚合游戏冻结配置
  239. $objActSheet = $objExcel->getActiveSheet();
  240. $key = ord("A");
  241. $letter =explode(',',"A,B,C,D,E,F,G,H,I,J,K,L");
  242. $arrHeader = array('游戏名称','游戏原名','预付状态','当前流水',"折扣", "折扣后流水", '祈盟分成点位','扣除预付款','禁止新增','禁止登录','禁止充值','时间');
  243. //填充表头信息
  244. $lenth = count($arrHeader);
  245. for($i = 0;$i < $lenth;$i++) {
  246. $objActSheet->setCellValue("$letter[$i]1","$arrHeader[$i]");
  247. };
  248. //填充表格信息
  249. foreach($list as $k=>$v){
  250. $index = $k + 2;
  251. $objActSheet->setCellValue('A'.$index, $v['game_name']);
  252. $objActSheet->setCellValue('B'.$index, $v['game_name']);
  253. $objActSheet->setCellValue('C'.$index, $v['status'] ? '开启' : '关闭');
  254. $objActSheet->setCellValue('D'.$index, $v['total_amount']);
  255. $objActSheet->setCellValue('E'.$index, $v['discount']??'--');
  256. $objActSheet->setCellValue('F'.$index, $v['discount_amount']??0);
  257. $objActSheet->setCellValue('G'.$index, $v['divide_point'] ?? '--');
  258. $objActSheet->setCellValue('H'.$index, $v['divide_point'] ? $v['total_amount']*$v['divide_point']/10 : 0);
  259. $objActSheet->setCellValue('I'.$index, $v['depf_register'] ? '是' : '否');
  260. $objActSheet->setCellValue('J'.$index, $v['depf_login'] ? '是' : '否');
  261. $objActSheet->setCellValue('K'.$index, $v['depf_consume'] ? '是' : '否');
  262. $objActSheet->setCellValue('L'.$index, $v['create_time']);
  263. // 表格高度
  264. $objActSheet->getRowDimension($index)->setRowHeight(20);
  265. }
  266. $index = $index+2;
  267. $objActSheet->setCellValue('B' . $index, '预付状态未开启的游戏流水,不计入渠道总流水(实际总流水)。');
  268. $index = $index+1;
  269. $objActSheet->setCellValue('B' . $index, '总流水:');
  270. $objActSheet->setCellValue('C' . $index, $list_more['count_total_amount']);
  271. $index = $index+1;
  272. $objActSheet->setCellValue('B' . $index, '实际总流水:');
  273. $objActSheet->setCellValue('C' . $index, $list_more['count_real_amount']);
  274. $index = $index+1;
  275. $objActSheet->setCellValue('B' . $index, '累计预付款:');
  276. $objActSheet->setCellValue('C' . $index, $list_more['total_advance']);
  277. $index = $index+1;
  278. $objActSheet->setCellValue('B' . $index, '当前余额:');
  279. $objActSheet->setCellValue('C' . $index, $list_more['balance']);
  280. $index = $index+1;
  281. $objActSheet->setCellValue('B' . $index, '最后预付款:');
  282. $objActSheet->setCellValue('C' . $index, $list_more['last_advance']);
  283. }
  284. else if($type=='channelWithdraw'){
  285. //聚合游戏冻结配置
  286. $objActSheet = $objExcel->getActiveSheet();
  287. $key = ord("A");
  288. $letter =explode(',',"A,B,C,D,E,F,G,H,I");
  289. $arrHeader = array('订单编号','公会名称','会长银行开户名','银行名称','会长银行开户行','会长银行卡号','会长支付宝','提现金额(元)','审核时间');
  290. //填充表头信息
  291. $lenth = count($arrHeader);
  292. for($i = 0;$i < $lenth;$i++) {
  293. $objActSheet->setCellValue("$letter[$i]1","$arrHeader[$i]");
  294. };
  295. //填充表格信息
  296. foreach($list as $k=>$v){
  297. $index = $k + 2;
  298. $objActSheet->setCellValueExplicit('A'.$index, $v['orderid'],'s');
  299. $objActSheet->setCellValueExplicit('B'.$index, $v['channel_name'],'s');
  300. $objActSheet->setCellValueExplicit('C'.$index, $v['real_name'],'s');
  301. $objActSheet->setCellValueExplicit('D'.$index, $v['bank_name'],'s');
  302. $objActSheet->setCellValueExplicit('E'.$index, $v['bank_open_name'],'s');
  303. $objActSheet->setCellValueExplicit('F'.$index, $v['bank_number'],'s');
  304. $objActSheet->setCellValueExplicit('G'.$index, $v['zfb_account'],'s');
  305. $objActSheet->setCellValue('H'.$index, floatval($v['withdraw_amt']));
  306. $objActSheet->setCellValue('I'.$index, date("Y-m-d H:i:s",$v['audit_time']));
  307. // 表格高度
  308. $objActSheet->getRowDimension($index)->setRowHeight(20);
  309. }
  310. $index = $index+3;
  311. $objActSheet->setCellValue('G' . $index, '汇总:');
  312. $objActSheet->setCellValue('H' . $index, $list_more['total_withdraw_amt']);
  313. $index = $index+3;
  314. $objActSheet->setCellValue('A' . $index, '制表人:');
  315. $objActSheet->setCellValue('C' . $index, '财务专员:');
  316. $objActSheet->setCellValue('E' . $index, '财务经理:');
  317. }
  318. else if($type=='settleMonthData'){
  319. //聚合游戏冻结配置
  320. $objActSheet = $objExcel->getActiveSheet();
  321. $key = ord("A");
  322. $letter =explode(',',"A,B,C,D,E,F,G");
  323. $arrHeader = array('会长ID','会长账号','未结算订单总额','结算中订单总额','未提现余额','提现中总额','汇总金额');
  324. //填充表头信息
  325. $lenth = count($arrHeader);
  326. for($i = 0;$i < $lenth;$i++) {
  327. $objActSheet->setCellValue("$letter[$i]1","$arrHeader[$i]");
  328. };
  329. //填充表格信息
  330. foreach($list as $k=>$v){
  331. $index = $k + 2;
  332. $objActSheet->setCellValueExplicit('A'.$index, $v['channel_id'],'s');
  333. $objActSheet->setCellValueExplicit('B'.$index, $v['channel_name'],'s');
  334. $objActSheet->setCellValue('C'.$index, floatval($v['unsettle_amt']));
  335. $objActSheet->setCellValue('D'.$index, floatval($v['settle_apply_amt']));
  336. $objActSheet->setCellValue('E'.$index, floatval($v['unwithdraw_amt']));
  337. $objActSheet->setCellValue('F'.$index, floatval($v['withdraw_apply_amt']));
  338. $objActSheet->setCellValue('G'.$index, floatval($v['total_amt']));
  339. // 表格高度
  340. $objActSheet->getRowDimension($index)->setRowHeight(20);
  341. }
  342. }
  343. else if($type=='channelExtraPoint'){
  344. //聚合游戏冻结配置
  345. $objActSheet = $objExcel->getActiveSheet();
  346. $objActSheet->setCellValue('A1', '月补点汇总表');
  347. $objActSheet->mergeCells('A1:K1');
  348. $objActSheet->getStyle('A1:K1')->getAlignment()->setHorizontal('center');
  349. $objActSheet->setCellValue('A2', '序列');
  350. $objActSheet->mergeCells('A2'.':'.'A3');
  351. $objActSheet->getStyle('A2:A3')->getAlignment()->setVertical('center');
  352. $objActSheet->setCellValue('B2', '时间');
  353. $objActSheet->mergeCells('B2'.':'.'B3');
  354. $objActSheet->getStyle('B2:B3')->getAlignment()->setVertical('center');
  355. $objActSheet->setCellValue('C2', '游戏名');
  356. $objActSheet->mergeCells('C2'.':'.'C3');
  357. $objActSheet->getStyle('C2:C3')->getAlignment()->setVertical('center');
  358. $objActSheet->setCellValue('D2', '公会名');
  359. $objActSheet->mergeCells('D2'.':'.'D3');
  360. $objActSheet->getStyle('D2:D3')->getAlignment()->setVertical('center');
  361. $objActSheet->setCellValue('E2', '充值流水');
  362. $objActSheet->mergeCells('E2:G2');
  363. $objActSheet->getStyle('E2:G2')->getAlignment()->setHorizontal('center');
  364. $objActSheet->setCellValue('E3', '充值流水');
  365. $objActSheet->setCellValue('F3', '点位(阶梯)');
  366. $objActSheet->setCellValue('G3', '公会所得金额');
  367. $objActSheet->setCellValue('H2', '收款名称');
  368. $objActSheet->mergeCells('H2'.':'.'H3');
  369. $objActSheet->getStyle('H2:H3')->getAlignment()->setVertical('center');
  370. $objActSheet->setCellValue('I2', '支付宝账号');
  371. $objActSheet->mergeCells('I2'.':'.'I3');
  372. $objActSheet->getStyle('I2:I3')->getAlignment()->setVertical('center');
  373. $objActSheet->setCellValue('J2', '银行账号');
  374. $objActSheet->mergeCells('J2'.':'.'J3');
  375. $objActSheet->getStyle('J2:J3')->getAlignment()->setVertical('center');
  376. $objActSheet->setCellValue('K2', '银行名称');
  377. $objActSheet->mergeCells('K2'.':'.'K3');
  378. $objActSheet->getStyle('K2:K3')->getAlignment()->setVertical('center');
  379. $objActSheet->setCellValue('L2', '开户行');
  380. $objActSheet->mergeCells('L2'.':'.'L3');
  381. $objActSheet->getStyle('L2:L3')->getAlignment()->setVertical('center');
  382. //填充表格信息
  383. $index = 4;
  384. $channelRank = 1;
  385. $totalPayAmt = $totalDivideAmt = 0;
  386. foreach($list_more as $k=>$v){
  387. $totalPayAmt += $v['channel_pay_amt'];
  388. $totalDivideAmt += $v['channel_divide_amt'];
  389. $channelCnt = $v['channel_game_cnt'];
  390. $channelIndex = 1;
  391. foreach($list[$v['channel_id']] as $k2=>$v2){
  392. if($channelIndex==1){
  393. $objActSheet->setCellValue('A'.$index, $channelRank);
  394. $objActSheet->getStyle('A'.$index)->getAlignment()->setHorizontal('center');
  395. $objActSheet->mergeCells('A'.$index.':A'.($index+$channelCnt));
  396. $objActSheet->getStyle('A'.$index.':A'.($index+$channelCnt))->getAlignment()->setVertical('center');
  397. }
  398. $objActSheet->setCellValueExplicit('B'.$index, $v2['start_date'].' ~ '.$v2['end_date'],'s');
  399. $objActSheet->setCellValueExplicit('C'.$index, $v2['game_name'],'s');
  400. $objActSheet->setCellValueExplicit('D'.$index, $v2['channel_name'],'s');
  401. $objActSheet->setCellValue('E'.$index, floatval($v2['pay_amt']));
  402. $objActSheet->setCellValueExplicit('F'.$index, $v2['rate']."%",'s');
  403. $objActSheet->getStyle('F'.$index)->getAlignment()->setHorizontal('center');
  404. $objActSheet->setCellValue('G'.$index, floatval($v2['divide_amt']));
  405. if($channelIndex==1){
  406. $objActSheet->setCellValueExplicit('H'.$index, $v2['real_name'],'s');
  407. $objActSheet->mergeCells('H'.$index.':H'.($index+$channelCnt-1));
  408. $objActSheet->getStyle('H'.$index.':H'.($index+$channelCnt-1))->getAlignment()->setVertical('center');
  409. $objActSheet->setCellValueExplicit('I'.$index, $v2['zfb_account'],'s');
  410. $objActSheet->mergeCells('I'.$index.':I'.($index+$channelCnt-1));
  411. $objActSheet->getStyle('I'.$index.':I'.($index+$channelCnt-1))->getAlignment()->setVertical('center');
  412. $objActSheet->setCellValueExplicit('J'.$index, $v2['bank_number'],'s');
  413. $objActSheet->mergeCells('J'.$index.':J'.($index+$channelCnt-1));
  414. $objActSheet->getStyle('J'.$index.':J'.($index+$channelCnt-1))->getAlignment()->setVertical('center');
  415. $objActSheet->setCellValueExplicit('K'.$index, $v2['bank_name'],'s');
  416. $objActSheet->mergeCells('K'.$index.':K'.($index+$channelCnt-1));
  417. $objActSheet->getStyle('K'.$index.':K'.($index+$channelCnt-1))->getAlignment()->setVertical('center');
  418. $objActSheet->setCellValueExplicit('L'.$index, $v2['bank_open_name'],'s');
  419. $objActSheet->mergeCells('L'.$index.':L'.($index+$channelCnt-1));
  420. $objActSheet->getStyle('L'.$index.':L'.($index+$channelCnt-1))->getAlignment()->setVertical('center');
  421. $objActSheet->getRowDimension($k)->setRowHeight(20);
  422. }
  423. $index++;
  424. $channelIndex++;
  425. }
  426. $objActSheet->setCellValueExplicit('B'.$index, '合计','s');
  427. $objActSheet->mergeCells('B'.$index.':D'.$index);
  428. $objActSheet->getStyle('B'.$index.':D'.$index)->getAlignment()->setHorizontal('center');
  429. $objActSheet->setCellValue('E'.$index, $v['channel_pay_amt']);
  430. $objActSheet->setCellValueExplicit('F'.$index, '-','s');
  431. $objActSheet->setCellValue('G'.$index, $v['channel_divide_amt']);
  432. $objActSheet->setCellValueExplicit('H'.$index, '','s');
  433. $objActSheet->setCellValueExplicit('I'.$index, '','s');
  434. $objActSheet->setCellValueExplicit('J'.$index, '','s');
  435. $objActSheet->setCellValueExplicit('K'.$index, '','s');
  436. $objActSheet->getRowDimension($k)->setRowHeight(20);
  437. $index++;
  438. $channelRank++;
  439. }
  440. $objActSheet->setCellValueExplicit('A' . $index, '', 's');
  441. $objActSheet->setCellValueExplicit('B'.$index, '总计','s');
  442. $objActSheet->mergeCells('B'.$index.':D'.$index);
  443. $objActSheet->getStyle('B'.$index.':D'.$index)->getAlignment()->setHorizontal('center');
  444. $objActSheet->setCellValue('E' . $index, $totalPayAmt);
  445. $objActSheet->setCellValueExplicit('F' . $index, '','s');
  446. $objActSheet->setCellValue('G' . $index, $totalDivideAmt);
  447. }
  448. if(trim($title)){
  449. $outfile = trim($title).".xls";
  450. }
  451. else{
  452. $outfile = date('YmdHis').".xls";
  453. }
  454. try {
  455. if (ob_get_level() > 0) {
  456. ob_end_clean();
  457. }
  458. header("Content-Type: application/force-download");
  459. header("Content-Type: application/octet-stream");
  460. header("Content-Type: application/download");
  461. header('Content-Disposition:inline;filename="'.urlencode($outfile).'"');
  462. header("Content-Transfer-Encoding: binary");
  463. header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
  464. header("Pragma: no-cache");
  465. $objWriter->save('php://output');
  466. } catch (\Exception $e) {
  467. // log_message('Export error: ' . $e->getMessage(), 'error', LOG_PATH . 'export/');
  468. $this->error('导出失败:' . $e->getMessage());
  469. }
  470. exit;
  471. }
  472. // 空方法
  473. public function _empty()
  474. {
  475. return $this->redirect('/index/index');
  476. }
  477. }