ExportService.php 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431
  1. <?php
  2. namespace app\shop\service\order;
  3. use app\shop\model\order\OrderRefund;
  4. use PhpOffice\PhpSpreadsheet\IOFactory;
  5. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  6. /**
  7. * 订单导出服务类
  8. */
  9. class ExportService
  10. {
  11. /**
  12. * 订单导出
  13. */
  14. public function orderList($list)
  15. {
  16. set_time_limit(0);
  17. //设置程序运行内存
  18. ini_set('memory_limit', '20480M');
  19. $spreadsheet = new Spreadsheet();
  20. $sheet = $spreadsheet->getActiveSheet();
  21. //列宽
  22. $sheet->getColumnDimension('B')->setWidth(35);
  23. $sheet->getColumnDimension('P')->setWidth(35);
  24. //设置工作表标题名称
  25. $sheet->setTitle('订单明细');
  26. $sheet->setCellValue('A1', '会员编号');
  27. $sheet->setCellValue('B1', '报单中心');
  28. $sheet->setCellValue('C1', '订单号');
  29. $sheet->setCellValue('D1', '订单状态');
  30. $sheet->setCellValue('E1', '存货编码'); // 商品编码
  31. $sheet->setCellValue('F1', '存货名称'); // 商品名称
  32. $sheet->setCellValue('G1', '规格编码');
  33. $sheet->setCellValue('H1', '数量'); // 商品数量
  34. $sheet->setCellValue('I1', '收货人');
  35. $sheet->setCellValue('J1', '联系方式1');
  36. $sheet->setCellValue('K1', '联系方式2'); // TODO: 新增
  37. $sheet->setCellValue('L1', '省');
  38. $sheet->setCellValue('M1', '市');
  39. $sheet->setCellValue('N1', '区');
  40. $sheet->setCellValue('O1', '详细地址');
  41. $sheet->setCellValue('P1', '期数');
  42. $sheet->setCellValue('Q1', '订单类型');
  43. $sheet->setCellValue('R1', '发货仓');
  44. $sheet->setCellValue('S1', '创建时间');
  45. $sheet->setCellValue('T1', '支付时间');
  46. $sheet->setCellValue('U1', '发货时间');
  47. $sheet->setCellValue('V1', '商品单价');
  48. $sheet->setCellValue('W1', '商品金额'); // 商品总额
  49. $sheet->setCellValue('X1', '商品PV'); // 商品pv
  50. $sheet->setCellValue('Y1', 'PV合计'); // 合计pv
  51. $sheet->setCellValue('Z1', '运费');
  52. $sheet->setCellValue('AA1', '快递公司');
  53. $sheet->setCellValue('AB1', '快递单号');
  54. $sheet->setCellValue('AC1', '发货方式');
  55. $sheet->setCellValue('AD1','会员备注');
  56. $sheet->setCellValue('AE1','发货状态');
  57. $sheet->setCellValue('AF1','售后状态');
  58. //填充数据
  59. $index = 0;
  60. //获取售后记录
  61. $orderProductIds = array_column($list, 'order_product_id');
  62. $refunds = OrderRefund::whereIn('order_product_id', $orderProductIds)
  63. ->field('order_refund_id,order_product_id,type,is_agree')
  64. ->select();
  65. $refundMap = [];
  66. if (!$refunds->isEmpty()) {
  67. $refundMap = array_column($refunds->toArray(), null, 'order_product_id');
  68. }
  69. foreach ($list as $order) {
  70. //售后状态
  71. $refundStatus = '无';
  72. if (isset($refundMap[$order['order_product_id']])) {
  73. $info = $refundMap[$order['order_product_id']];
  74. $refundStatus = $info['type']['text'] . '-' . $info['is_agree']['text'];
  75. }
  76. $state_text = $this->getStateTextAttr($order);
  77. $delivery = $order['delivery_status'] == 10?'未发货':'已发货';
  78. if ($order['delivery_type'] == 10) {
  79. $type = '快递配送';
  80. }elseif ($order['delivery_type'] == 20) {
  81. $type = '上门自提';
  82. }else{
  83. $type = '无需物流';
  84. }
  85. $price = empty($order['grade_product_price'])?$order['product_price']:$order['grade_product_price'];
  86. $richText = new \PhpOffice\PhpSpreadsheet\RichText\RichText();
  87. $richText->createText((string)$order['user_no']);
  88. $sheet->setCellValue('A' . ($index + 2), $richText);
  89. $sheet->setCellValue('B'.($index + 2),"");
  90. $richText = new \PhpOffice\PhpSpreadsheet\RichText\RichText();
  91. $richText->createText((string)$order['order_no']);
  92. $sheet->setCellValue('C'.($index + 2), $richText);
  93. $sheet->setCellValue('D'.($index + 2), $state_text);
  94. $sheet->setCellValue('E'.($index + 2), trim($order['product_no']));
  95. $sheet->setCellValue('F'.($index + 2), $order['product_name']);
  96. $sheet->setCellValue('G'.($index + 2), trim($order['sku_product_no'] ?: $order['product_no']));
  97. $sheet->setCellValue('H'.($index + 2), $order['total_num']);
  98. $sheet->setCellValue('I'.($index + 2), $order['name']);
  99. $sheet->setCellValue('J'.($index + 2), $order['phone']);
  100. $sheet->setCellValue('K'.($index + 2), '');
  101. $sheet->setCellValue('L'.($index + 2), $order['province']);
  102. $sheet->setCellValue('M'.($index + 2), $order['city']);
  103. $sheet->setCellValue('N'.($index + 2), $order['region']);
  104. $sheet->setCellValue('O'.($index + 2), $order['detail']);
  105. $sheet->setCellValue('P'.($index + 2), "");
  106. $sheet->setCellValue('Q'.($index + 2), '重消');
  107. $sheet->setCellValue('R'.($index + 2), "\t"."01"."\t");
  108. $sheet->setCellValue('S'.($index + 2), $order['create_time']);
  109. $sheet->setCellValue('T'.($index + 2), $this->filterTime($order['pay_time']));
  110. $sheet->setCellValue('U'.($index + 2), $this->filterTime($order['delivery_time']));
  111. $sheet->setCellValue('V'.($index + 2), $price);
  112. $sheet->setCellValue('W'.($index + 2), $order['total_price']);
  113. $sheet->setCellValue('X'.($index + 2), $order['pv']);
  114. $sheet->setCellValue('Y'.($index + 2), $order['pv'] * $order['total_num']);
  115. $sheet->setCellValue('Z'.($index + 2), $order['express_price']);
  116. $sheet->setCellValue('AA'.($index + 2), $order['express_name']);
  117. $sheet->setCellValue('AB'.($index + 2), $order['express_no']);
  118. $sheet->setCellValue('AC'.($index + 2), $type);
  119. $sheet->setCellValue('AD'.($index + 2), $order['buyer_remark']);
  120. $sheet->setCellValue('AE'.($index + 2), $delivery);
  121. $sheet->setCellValue('AF'.($index + 2), $refundStatus);
  122. $index ++;
  123. }
  124. //保存文件
  125. $filename = iconv("UTF-8","GB2312//IGNORE", '订单'). '-' . date('YmdHis') . '.xlsx';
  126. header('Content-Type: application/vnd.ms-excel');
  127. header('Content-Disposition: attachment;filename="'.$filename.'"');
  128. header('Cache-Control: max-age=0');
  129. $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
  130. $writer->save('php://output');
  131. }
  132. public function getStateTextAttr($order)
  133. {
  134. // 订单状态
  135. if ($order['order_status']==20) {
  136. return '已取消';
  137. }
  138. if ($order['order_status']==30) {
  139. return '已完成';
  140. }
  141. if ($order['order_status'] == 21) {
  142. return '取消申请中';
  143. }
  144. // 付款状态
  145. if ($order['pay_status'] == 10) {
  146. return '待付款';
  147. }
  148. // 发货状态
  149. if ($order['delivery_status'] == 10) {
  150. return '已付款,待发货';
  151. }
  152. if ($order['receipt_status'] == 10 && $order['delivery_status'] == 20) {
  153. return '已发货,待收货';
  154. }
  155. return '进行中';
  156. }
  157. /**
  158. * 订单导出
  159. */
  160. // public function orderList($list)
  161. // {
  162. // $strTable ='<table width="4000" border="1">';
  163. // $strTable .= '<tr style="height:25px">';
  164. // $strTable .= '<td style="text-align:center;font-size:12px;" width:100;">会员编号</td>';
  165. // $strTable .= '<td style="text-align:center;font-size:12px;" width:80;">报单中心</td>';
  166. // $strTable .= '<td style="text-align:center;font-size:12px;" width:150;">订单号</td>';
  167. // $strTable .= '<td style="text-align:center;font-size:12px;" width:120;">订单状态</td>';
  168. // $strTable .= '<td style="text-align:center;font-size:12px;" width="80">商品编码</td>';
  169. // $strTable .= '<td style="text-align:center;font-size:12px;" width="500">商品名称</td>';
  170. // $strTable .= '<td style="text-align:center;font-size:12px;" width="80">商品数量</td>';
  171. // $strTable .= '<td style="text-align:center;font-size:12px;" width="80">商品单价</td>';
  172. // $strTable .= '<td style="text-align:center;font-size:12px;" width="80">商品总额</td>';
  173. // $strTable .= '<td style="text-align:center;font-size:12px;" width="60">商品pv</td>';
  174. // $strTable .= '<td style="text-align:center;font-size:12px;" width="60">合计pv</td>';
  175. // $strTable .= '<td style="text-align:center;font-size:12px;" width="80">收货人</td>';
  176. // $strTable .= '<td style="text-align:center;font-size:12px;" width="100">联系方式</td>';
  177. // $strTable .= '<td style="text-align:center;font-size:12px;" width="100">省</td>';
  178. // $strTable .= '<td style="text-align:center;font-size:12px;" width="100">市</td>';
  179. // $strTable .= '<td style="text-align:center;font-size:12px;" width="100">区</td>';
  180. // $strTable .= '<td style="text-align:center;font-size:12px;" width="120">详细地址</td>';
  181. // $strTable .= '<td style="text-align:center;font-size:12px;" width="80">期数</td>';
  182. // $strTable .= '<td style="text-align:center;font-size:12px;" width="80">订单类型</td>';
  183. // $strTable .= '<td style="text-align:center;font-size:12px;" width="80">发货仓</td>';
  184. // $strTable .= '<td style="text-align:center;font-size:12px;" width="120">创建时间</td>';
  185. // $strTable .= '<td style="text-align:center;font-size:12px;" width="120">支付时间</td>';
  186. // $strTable .= '<td style="text-align:center;font-size:12px;" width="120">运费</td>';
  187. // $strTable .= '<td style="text-align:center;font-size:12px;" width="120">快递公司</td>';
  188. // $strTable .= '<td style="text-align:center;font-size:12px;" width="120">快递单号</td>';
  189. // $strTable .= '<td style="text-align:center;font-size:12px;" width="120">发货方式</td>';
  190. // $strTable .= '<td style="text-align:center;font-size:12px;" width="180">会员备注</td>';
  191. // $strTable .= '<td style="text-align:center;font-size:12px;" width="120">发货状态</td>';
  192. // $strTable .= '<td style="text-align:center;font-size:12px;" width="120">发货时间</td>';
  193. // $strTable .= '</tr>';
  194. // foreach ($list as $order) {
  195. // foreach ($order['product'] as $key => $product) {
  196. // $price = empty($product['grade_product_price'])?$product['product_price']:$product['grade_product_price'];
  197. // $strTable .= '<tr style="height:20px">';
  198. // $strTable .= '<td style="text-align:center;font-size:12px;" rowspan="">&nbsp;'.$order['user']['user_no'].'</td>';
  199. // $strTable .= '<td style="text-align:center;font-size:12px;" rowspan=""></td>';
  200. // $strTable .= '<td style="text-align:center;font-size:12px;" rowspan="">&nbsp;'.$order['order_no'].'</td>';
  201. // $strTable .= '<td style="text-align:center;font-size:12px;" rowspan="">'.$order['state_text'].'</td>';
  202. // $strTable .= '<td style="text-align:center;font-size:12px;" rowspan="">'.$product['product']['product_no'].'</td>';
  203. // $strTable .= '<td style="text-align:center;font-size:12px;" rowspan="">'.$product['product_name'].'</td>';
  204. // $strTable .= '<td style="text-align:center;font-size:12px;" rowspan="">'.$product['total_num'].'</td>';
  205. // $strTable .= '<td style="text-align:center;font-size:12px;" rowspan="">'.$price.'</td>';
  206. // $strTable .= '<td style="text-align:center;font-size:12px;" rowspan="">'.$product['total_price'].'</td>';
  207. // $strTable .= '<td style="text-align:center;font-size:12px;" rowspan=""></td>';
  208. // $strTable .= '<td style="text-align:center;font-size:12px;" rowspan=""></td>';
  209. // $strTable .= '<td style="text-align:center;font-size:12px;" rowspan="">'.$order['address']['name'].'</td>';
  210. // $strTable .= '<td style="text-align:center;font-size:12px;" rowspan="">'.$order['address']['phone'].'</td>';
  211. // $strTable .= '<td style="text-align:center;font-size:12px;" rowspan="">'.$order['address']['region']['province'].'</td>';
  212. // $strTable .= '<td style="text-align:center;font-size:12px;" rowspan="">'.$order['address']['region']['city'].'</td>';
  213. // $strTable .= '<td style="text-align:center;font-size:12px;" rowspan="">'.$order['address']['region']['region'].'</td>';
  214. // $strTable .= '<td style="text-align:center;font-size:12px;" rowspan="">'.$order['address']['detail'].'</td>';
  215. // $strTable .= '<td style="text-align:center;font-size:12px;" rowspan=""></td>';
  216. // $strTable .= '<td style="text-align:center;font-size:12px;" rowspan="">重消</td>';
  217. // $strTable .= '<td style="text-align:center;font-size:12px;" rowspan="">&nbsp;01</td>';
  218. // $strTable .= '<td style="text-align:center;font-size:12px;" rowspan="">'.$order['create_time'].'</td>';
  219. // $pay_time = empty($order['pay_time'])?'':date('Y-m-d H:i',$order['pay_time']);
  220. // $strTable .= '<td style="text-align:center;font-size:12px;" rowspan="">'.$pay_time.'</td>';
  221. // $strTable .= '<td style="text-align:center;font-size:12px;" rowspan="">'.$order['express_price'].'</td>';
  222. // $strTable .= '<td style="text-align:center;font-size:12px;" rowspan="">'.$order['express']['express_name'].'</td>';
  223. // $strTable .= '<td style="text-align:center;font-size:12px;" rowspan="">'.$order['express_no'].'</td>';
  224. // $strTable .= '<td style="text-align:center;font-size:12px;" rowspan="">'.$order['delivery_type']['text'].'</td>';
  225. // $strTable .= '<td style="text-align:center;font-size:12px;" rowspan="">'.$order['buyer_remark'].'</td>';
  226. // $strTable .= '<td style="text-align:center;font-size:12px;" rowspan="">'.$order['delivery_status']['text'].'</td>';
  227. // $delivery_time = empty($order['delivery_time'])?'':date('Y-m-d H:i',$order['delivery_time']);
  228. // $strTable .= '<td style="text-align:center;font-size:12px;" rowspan="">'.$delivery_time.'</td>';
  229. // }
  230. // }
  231. // $strTable .='</table>';
  232. // $this->downloadExcel($strTable,'订单');
  233. // exit();
  234. // }
  235. /**
  236. * 分销订单导出
  237. */
  238. public function agentOrderList($list)
  239. {
  240. $spreadsheet = new Spreadsheet();
  241. $sheet = $spreadsheet->getActiveSheet();
  242. //列宽
  243. $sheet->getColumnDimension('B')->setWidth(30);
  244. //设置工作表标题名称
  245. $sheet->setTitle('分销订单明细');
  246. $sheet->setCellValue('A1', '订单号');
  247. $sheet->setCellValue('B1', '商品信息');
  248. $sheet->setCellValue('C1', '订单总额');
  249. $sheet->setCellValue('D1', '实付款金额');
  250. $sheet->setCellValue('E1', '支付方式');
  251. $sheet->setCellValue('F1', '下单时间');
  252. $sheet->setCellValue('G1', '一级分销商');
  253. $sheet->setCellValue('H1', '一级分销佣金');
  254. $sheet->setCellValue('I1', '二级分销商');
  255. $sheet->setCellValue('J1', '二级分销佣金');
  256. $sheet->setCellValue('K1', '三级分销商');
  257. $sheet->setCellValue('L1', '三级分销佣金');
  258. $sheet->setCellValue('M1', '买家');
  259. $sheet->setCellValue('N1', '付款状态');
  260. $sheet->setCellValue('O1', '付款时间');
  261. $sheet->setCellValue('P1', '发货状态');
  262. $sheet->setCellValue('Q1', '发货时间');
  263. $sheet->setCellValue('R1', '收货状态');
  264. $sheet->setCellValue('S1', '收货时间');
  265. $sheet->setCellValue('T1', '订单状态');
  266. $sheet->setCellValue('U1', '佣金结算');
  267. $sheet->setCellValue('V1', '结算时间');
  268. //填充数据
  269. $index = 0;
  270. foreach ($list as $agent) {
  271. $order = $agent['order_master'];
  272. $richText = new \PhpOffice\PhpSpreadsheet\RichText\RichText();
  273. $richText->createText((string)$order['order_no']);
  274. $sheet->setCellValue('A' . ($index + 2), $richText);
  275. $sheet->setCellValue('B' . ($index + 2), $this->filterProductInfo($order));
  276. $sheet->setCellValue('C' . ($index + 2), $order['total_price']);
  277. $sheet->setCellValue('D' . ($index + 2), $order['pay_price']);
  278. $sheet->setCellValue('E' . ($index + 2), $order['pay_type']['text']);
  279. $sheet->setCellValue('F' . ($index + 2), $order['create_time']);
  280. $sheet->setCellValue('G' . ($index + 2), $agent['agent_first']['nickName']);
  281. $sheet->setCellValue('H' . ($index + 2), $agent['first_money']);
  282. $sheet->setCellValue('I' . ($index + 2), $agent['agent_second']['nickName']);
  283. $sheet->setCellValue('J' . ($index + 2), $agent['second_money']);
  284. $sheet->setCellValue('K' . ($index + 2), $agent['agent_third']['nickName']);
  285. $sheet->setCellValue('L' . ($index + 2), $agent['third_money']);
  286. $sheet->setCellValue('M' . ($index + 2), $order['user']['nickName']);
  287. $sheet->setCellValue('N' . ($index + 2), $order['pay_status']['text']);
  288. $sheet->setCellValue('O' . ($index + 2), $this->filterTime($order['pay_time']));
  289. $sheet->setCellValue('P' . ($index + 2), $order['delivery_status']['text']);
  290. $sheet->setCellValue('Q' . ($index + 2), $this->filterTime($order['delivery_time']));
  291. $sheet->setCellValue('R' . ($index + 2), $order['receipt_status']['text']);
  292. $sheet->setCellValue('S' . ($index + 2), $this->filterTime($order['receipt_time']));
  293. $sheet->setCellValue('T' . ($index + 2), $order['order_status']['text']);
  294. $sheet->setCellValue('U' . ($index + 2), $agent['is_settled'] == 1 ? '已结算' : '未结算');
  295. $sheet->setCellValue('V' . ($index + 2), $this->filterTime($agent['settle_time']));
  296. $index++;
  297. }
  298. //保存文件
  299. $filename = iconv("UTF-8", "GB2312//IGNORE", '分销订单') . '-' . date('YmdHis') . '.xlsx';
  300. header('Content-Type: application/vnd.ms-excel');
  301. header('Content-Disposition: attachment;filename="' . $filename . '"');
  302. header('Cache-Control: max-age=0');
  303. $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
  304. $writer->save('php://output');
  305. }
  306. /**
  307. * 提现订单导出
  308. */
  309. public function cashList($list)
  310. {
  311. $spreadsheet = new Spreadsheet();
  312. $sheet = $spreadsheet->getActiveSheet();
  313. //列宽
  314. $sheet->getColumnDimension('H')->setWidth(50);
  315. //设置工作表标题名称
  316. $sheet->setTitle('提现明细');
  317. $sheet->setCellValue('A1', 'ID');
  318. $sheet->setCellValue('B1', '分销商id');
  319. $sheet->setCellValue('C1', '分销商姓名');
  320. $sheet->setCellValue('D1', '微信昵称');
  321. $sheet->setCellValue('E1', '手机号');
  322. $sheet->setCellValue('F1', '提现金额');
  323. $sheet->setCellValue('G1', '提现方式');
  324. $sheet->setCellValue('H1', '提现信息');
  325. $sheet->setCellValue('I1', '审核状态');
  326. $sheet->setCellValue('J1', '申请时间');
  327. $sheet->setCellValue('K1', '审核时间');
  328. //填充数据
  329. $index = 0;
  330. foreach ($list as $cash) {
  331. $sheet->setCellValue('A' . ($index + 2), $cash['id']);
  332. $sheet->setCellValue('B' . ($index + 2), $cash['user_id']);
  333. $sheet->setCellValue('C' . ($index + 2), $cash['real_name']);
  334. $sheet->setCellValue('D' . ($index + 2), $cash['nickName']);
  335. $sheet->setCellValue('E' . ($index + 2), "\t" . $cash['mobile'] . "\t");
  336. $sheet->setCellValue('F' . ($index + 2), $cash['money']);
  337. $sheet->setCellValue('G' . ($index + 2), $cash['pay_type']['text']);
  338. $sheet->setCellValue('H' . ($index + 2), $this->cashInfo($cash));
  339. $sheet->setCellValue('I' . ($index + 2), $cash['apply_status']['text']);
  340. $sheet->setCellValue('J' . ($index + 2), $cash['create_time']);
  341. $sheet->setCellValue('K' . ($index + 2), $cash['audit_time']);
  342. $index++;
  343. }
  344. //保存文件
  345. $filename = iconv("UTF-8", "GB2312//IGNORE", '提现明细') . '-' . date('YmdHis') . '.xlsx';
  346. header('Content-Type: application/vnd.ms-excel');
  347. header('Content-Disposition: attachment;filename="' . $filename . '"');
  348. header('Cache-Control: max-age=0');
  349. $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
  350. $writer->save('php://output');
  351. }
  352. /**
  353. * 格式化提现信息
  354. */
  355. private function cashInfo($cash)
  356. {
  357. $content = '';
  358. if ($cash['pay_type']['value'] == 20) {
  359. $content .= "支付宝姓名:{$cash['alipay_name']}\n";
  360. $content .= " 支付宝账号:{$cash['alipay_account']}\n";
  361. } elseif ($cash['pay_type']['value'] == 30) {
  362. $content .= "开户行:{$cash['bank_name']}\n";
  363. $content .= " 姓名:{$cash['bank_account']}\n";
  364. $content .= " 卡号:{$cash['bank_account']}\n";
  365. }
  366. return $content;
  367. }
  368. /**
  369. * 格式化商品信息
  370. */
  371. private function filterProductInfo($order)
  372. {
  373. $content = '';
  374. foreach ($order['product'] as $key => $product) {
  375. $content .= ($key + 1) . ".商品名称:{$product['product_name']}\n";
  376. !empty($product['product_attr']) && $content .= " 商品规格:{$product['product_attr']}\n";
  377. $content .= " 购买数量:{$product['total_num']}\n";
  378. $content .= " 商品总价:{$product['total_price']}元\n\n";
  379. }
  380. return $content;
  381. }
  382. /**
  383. * 日期值过滤
  384. */
  385. private function filterTime($value)
  386. {
  387. if (!$value) return '';
  388. return date('Y-m-d H:i:s', $value);
  389. }
  390. /**
  391. * 导出excel
  392. * @param $strTable 表格内容
  393. * @param $filename 文件名
  394. */
  395. private function downloadExcel($strTable,$filename)
  396. {
  397. ob_end_clean();
  398. header('Cache-Control: max-age=0');
  399. header("Content-type: application/vnd.ms-excel");
  400. header("Content-Type: application/force-download");
  401. header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  402. header("Content-Disposition: attachment; filename=".$filename.'-'.date('Ymd').".xlsx");
  403. header('Expires:0');
  404. header('Pragma:public');
  405. echo '<html><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />'.$strTable.'</html>';
  406. exit();
  407. }
  408. }