ExcelToArrayService.php 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: PHP
  5. * Date: 2016/11/28
  6. * Time: 16:20
  7. */
  8. class ExcelToArrayService extends Service
  9. {
  10. /**
  11. * @param $data 数据
  12. * @param string $name 导出的excel名称
  13. * @param $export 导出的类型 execute_export 执行订单汇总 order订单明细 tech保洁师明细
  14. */
  15. public function push($data, $name = 'Excel',$export) {
  16. error_reporting(E_ALL);
  17. date_default_timezone_set('Asia/Shanghai');
  18. $channel_option = ROrder::$channel_option;
  19. $objPHPExcel = new PHPExcel();
  20. /*以下是一些设置 ,什么作者 标题啊之类的*/
  21. $objPHPExcel->getProperties()->setCreator("north")
  22. ->setLastModifiedBy("north")
  23. ->setTitle("数据EXCEL导出")
  24. ->setSubject("数据EXCEL导出")
  25. ->setDescription("备份数据")
  26. ->setKeywords("excel")
  27. ->setCategory("result file");
  28. /*以下就是对处理Excel里的数据, 横着取数据,主要是这一步,其他基本都不要改*/
  29. $num = 1;
  30. if($export == 'execute_order'){
  31. $objPHPExcel->setActiveSheetIndex(0)
  32. //Excel的第A列,uid是你查出数组的键值,下面以此类推
  33. ->setCellValue('A' . $num, '服务日期')
  34. ->setCellValue('B' . $num, '时间')
  35. //->setCellValue('C' . $num, '数量')
  36. //->setCellValue('D' . $num, '使用的代金券')
  37. ->setCellValue('C' . $num, '联系人')
  38. ->setCellValue('D' . $num, '联系方式')
  39. //->setCellValue('G' . $num, 'charge_id')
  40. ->setCellValue('E' . $num, '所在区')
  41. ->setCellValue('F' . $num, '地址')
  42. //->setCellValue('F' . $num, '订单处理时间')
  43. ->setCellValue('G' . $num, '服务项目')
  44. ->setCellValue('H' . $num, '居室')
  45. ->setCellValue('I' . $num, '保洁师')
  46. ->setCellValue('J' . $num, '备注')
  47. ->setCellValue('K'.$num,'支付方式')
  48. ->setCellValue('L'.$num,'本单实收')
  49. ->setCellValue('M'.$num,'本单营收')
  50. ;
  51. $num += 1;
  52. foreach($data as $key => $value){
  53. if(!empty($value['pay_channel'])){
  54. $pay_option = $channel_option[$value['pay_channel']]['name'];
  55. } else {
  56. $pay_option = '';
  57. }
  58. $technicians = '';
  59. $server_date = date('Y-m-d',$value['booking_time']);
  60. $server_time = date('H:i:s',$value['booking_time']);
  61. foreach($value['technicians'] as $k => $v){
  62. $technicians .= $v['technician_name'].' ';
  63. }
  64. if (!empty($value['products'][0]['extra']['type']) && !empty($value['products'][0]['extra']['type'])){
  65. $product_str = $value['products_str'].$value['products'][0]['extra']['type'].$value['products'][0]['extra']['price'];
  66. } else {
  67. $product_str = $value['products_str'];
  68. }
  69. //var_dump();exit;.
  70. $objPHPExcel->setActiveSheetIndex(0)
  71. //Excel的第A列,uid是你查出数组的键值,下面以此类推
  72. ->setCellValue('A' . $num, $server_date)
  73. ->setCellValue('B' . $num, $server_time)
  74. ->setCellValue('C' . $num, $value['address']['name'])
  75. // ->setCellValue('D' . $num, $coupons)
  76. //->setCellValue('C' . $num, $value['address']['city'].$value['address']['area'].$value['address']['poi']['name']
  77. //.$value['address']['detail'].$value['address']['name'].',手机号'.$value['address']['mobile'])
  78. ->setCellValue('D' . $num, $value['address']['mobile'])
  79. // ->setCellValue('G' . $num, $value['charge_id'])
  80. ->setCellValue('E' . $num, $value['address']['area'])
  81. ->setCellValue('F' . $num, $value['address']['poi']['name'].$value['address']['detail'])
  82. ->setCellValue('G' . $num, $value['products_str'])
  83. ->setCellValue('H' . $num, $value['products'][0]['extra']['type'])
  84. ->setCellValue('I' . $num, $technicians)
  85. ->setCellValue('J' . $num, $value['memo'].$value['remark'])
  86. ->setCellValue('K'.$num,$pay_option)
  87. ->setCellValue('L'.$num,$value['sum_price'])
  88. ->setCellValue('M'.$num,$value['sum_price'])
  89. ;
  90. $num += 1;
  91. }
  92. } else if($export == 'order'){
  93. $objPHPExcel->setActiveSheetIndex(0)
  94. //Excel的第A列,uid是你查出数组的键值,下面以此类推
  95. ->setCellValue('A' . $num, '服务日期')
  96. ->setCellValue('B' . $num, '时间')
  97. ->setCellValue('C' . $num, '地址')
  98. ->setCellValue('D' . $num, '服务项目')
  99. ->setCellValue('E' . $num, '保洁师')
  100. ->setCellValue('F' . $num, '备注')
  101. ->setCellValue('G'.$num,'每人实收')
  102. ->setCellValue('H'.$num,'每人营收')
  103. ->setCellValue('I'.$num,'车费')
  104. ;
  105. $num += 1;
  106. foreach($data as $key => $value){
  107. $technicians = '';
  108. $server_date = date('Y-m-d',$value['booking_time']);
  109. $server_time = date('H:i:s',$value['booking_time']);
  110. $tech_count = count($value['technicians']);
  111. foreach($value['technicians'] as $k => $v){
  112. $technicians .= $v['technician_name'].' ';
  113. }
  114. $objPHPExcel->setActiveSheetIndex(0)
  115. //Excel的第A列,uid是你查出数组的键值,下面以此类推
  116. ->setCellValue('A' . $num, $server_date)
  117. ->setCellValue('B' . $num, $server_time)
  118. ->setCellValue('C' . $num, $value['address']['detail'])
  119. ->setCellValue('D' . $num, $value['products_str'])
  120. ->setCellValue('E' . $num, $technicians)
  121. ->setCellValue('F' . $num, $value['memo'].$value['remark'])
  122. ->setCellValue('G' . $num, $value['sum_price']/$tech_count)
  123. ->setCellValue('H' . $num, $value['sum_price']/$tech_count)
  124. ->setCellValue('I' . $num, $value['tech_money'])
  125. ;
  126. $num += 1;
  127. }
  128. }else if($export == 'tech'){
  129. $objPHPExcel->setActiveSheetIndex(0)
  130. //Excel的第A列,uid是你查出数组的键值,下面以此类推
  131. ->setCellValue('A' . $num, 'id')
  132. ->setCellValue('B' . $num, '订单号')
  133. ->setCellValue('C' . $num, '服务日期')
  134. ->setCellValue('D' . $num, '下单日期')
  135. ->setCellValue('E' . $num, '联系人')
  136. ->setCellValue('F' . $num, '联系方式')
  137. ->setCellValue('G' . $num, '所在区')
  138. ->setCellValue('H' . $num, '地址')
  139. ->setCellValue('I' . $num, '保洁师')
  140. ->setCellValue('J' . $num, '备注')
  141. ;
  142. $num += 1;
  143. foreach($data as $key => $value){
  144. $technicians = '';
  145. $server_date = date('Y-m-d',$value['booking_time']);
  146. $server_time = date('H:i:s',$value['booking_time']);
  147. $order_id =Yii::app()->params['o2o_service'][$value['products'][0]['product']['type']].'-'.time();
  148. foreach($value['technicians'] as $k => $v){
  149. $technicians .= $v['technician_name'].' ';
  150. }
  151. //var_dump();exit;.
  152. $objPHPExcel->setActiveSheetIndex(0)
  153. //Excel的第A列,uid是你查出数组的键值,下面以此类推
  154. ->setCellValue('A' . $num, $value['id'])
  155. ->setCellValue('B' . $num, $order_id)
  156. ->setCellValue('C' . $num, $server_date)
  157. ->setCellValue('D' . $num, $value['order_time_str'])
  158. ->setCellValue('E' . $num, $value['address']['name'])
  159. ->setCellValue('F' . $num, $value['address']['mobile'])
  160. ->setCellValue('G' . $num, $value['address']['area'])
  161. ->setCellValue('H' . $num, $value['address']['detail'])
  162. ->setCellValue('I' . $num, $technicians)
  163. ->setCellValue('J' . $num, $value['memo'].$value['remark'])
  164. ;
  165. $num += 1;
  166. }
  167. }
  168. $objPHPExcel->getActiveSheet()->setTitle('User');
  169. $objPHPExcel->setActiveSheetIndex(0);
  170. header('Content-Type: application/vnd.ms-excel');
  171. header('Content-Disposition: attachment;filename="' . $name . '.xls"');
  172. header('Cache-Control: max-age=0');
  173. $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
  174. $objWriter->save('php://output');
  175. exit;
  176. }
  177. }