ExcelToArrayService.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  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. }
  93. else if($export == 'tech'){
  94. $objPHPExcel->setActiveSheetIndex(0)
  95. //Excel的第A列,uid是你查出数组的键值,下面以此类推
  96. ->setCellValue('A' . $num, '服务日期')
  97. ->setCellValue('B' . $num, '时间')
  98. ->setCellValue('C' . $num, '地址')
  99. ->setCellValue('D' . $num, '服务项目')
  100. ->setCellValue('E' . $num, '保洁师')
  101. ->setCellValue('F' . $num, '备注')
  102. ->setCellValue('G'.$num,'每人实收')
  103. ->setCellValue('H'.$num,'每人营收')
  104. ->setCellValue('I'.$num,'车费')
  105. ;
  106. $num += 1;
  107. foreach($data as $key => $value){
  108. $technicians = '';
  109. $server_date = date('Y-m-d',$value['booking_time']);
  110. $server_time = date('H:i:s',$value['booking_time']);
  111. $tech_count = count($value['technicians'])>0?count($value['technicians']):1;
  112. foreach($value['technicians'] as $k => $v){
  113. $technicians .= $v['technician_name'].' ';
  114. }
  115. $objPHPExcel->setActiveSheetIndex(0)
  116. //Excel的第A列,uid是你查出数组的键值,下面以此类推
  117. ->setCellValue('A' . $num, $server_date)
  118. ->setCellValue('B' . $num, $server_time)
  119. ->setCellValue('C' . $num, $value['address']['poi']['name'].$value['address']['detail'])
  120. ->setCellValue('D' . $num, $value['products_str'])
  121. ->setCellValue('E' . $num, $technicians)
  122. ->setCellValue('F' . $num, $value['memo'].$value['remark'])
  123. ->setCellValue('G' . $num, $value['sum_price']/$tech_count)
  124. ->setCellValue('H' . $num, $value['sum_price']/$tech_count)
  125. ->setCellValue('I' . $num, $value['tech_money'])
  126. ;
  127. $num += 1;
  128. }
  129. }
  130. else if($export == 'order'){
  131. $objPHPExcel->setActiveSheetIndex(0)
  132. //Excel的第A列,uid是你查出数组的键值,下面以此类推
  133. ->setCellValue('A' . $num, 'id')
  134. ->setCellValue('B' . $num, '订单号')
  135. ->setCellValue('C' . $num, '服务日期')
  136. ->setCellValue('D' . $num, '下单日期')
  137. ->setCellValue('E' . $num, '联系人')
  138. ->setCellValue('F' . $num, '联系方式')
  139. ->setCellValue('G' . $num, '所在区')
  140. ->setCellValue('H' . $num, '地址')
  141. ->setCellValue('I' . $num, '保洁师')
  142. ->setCellValue('J' . $num, '备注')
  143. ;
  144. $num += 1;
  145. foreach($data as $key => $value){
  146. $technicians = '';
  147. $server_date = date('Y-m-d',$value['booking_time']);
  148. $server_time = date('H:i:s',$value['booking_time']);
  149. $order_id =$value['products'][0]['product']['type'].'-'.$value['order_time'];
  150. foreach($value['technicians'] as $k => $v){
  151. $technicians .= $v['technician_name'].' ';
  152. }
  153. //var_dump();exit;.
  154. $objPHPExcel->setActiveSheetIndex(0)
  155. //Excel的第A列,uid是你查出数组的键值,下面以此类推
  156. ->setCellValue('A' . $num, $value['id'])
  157. ->setCellValue('B' . $num, $order_id)
  158. ->setCellValue('C' . $num, $server_date)
  159. ->setCellValue('D' . $num, $value['order_time_str'])
  160. ->setCellValue('E' . $num, $value['address']['name'])
  161. ->setCellValue('F' . $num, $value['address']['mobile'])
  162. ->setCellValue('G' . $num, $value['address']['area'])
  163. ->setCellValue('H' . $num, $value['address']['poi']['name'].$value['address']['detail'])
  164. ->setCellValue('I' . $num, $technicians)
  165. ->setCellValue('J' . $num, $value['memo'].$value['remark'])
  166. ;
  167. $num += 1;
  168. }
  169. }
  170. else if ($export == 'reserve') {
  171. $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A' . $num, '用户名');
  172. //Excel的第A列,uid是你查出数组的键值,下面以此类推
  173. $objPHPExcel->setActiveSheetIndex(0)->setCellValue('B' . $num, '预产期');
  174. $objPHPExcel->setActiveSheetIndex(0)->setCellValue('C' . $num, '手机号');
  175. ;
  176. $num += 1;
  177. foreach($data as $key => $value){
  178. $objPHPExcel->setActiveSheetIndex(0)
  179. //Excel的第A列,uid是你查出数组的键值,下面以此类推
  180. ->setCellValue('A' . $num, $value['user_name'])
  181. ->setCellValue('B' . $num, $value['num'])
  182. ->setCellValue('C' . $num, $value['mobile'])
  183. ;
  184. $num += 1;
  185. }
  186. }
  187. else if ($export == 'porder') {
  188. $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A' . $num, '工作人员');
  189. //Excel的第A列,uid是你查出数组的键值,下面以此类推
  190. $objPHPExcel->setActiveSheetIndex(0)->setCellValue('B' . $num, '进房时间');
  191. $objPHPExcel->setActiveSheetIndex(0)->setCellValue('C' . $num, '出房时间');
  192. $objPHPExcel->setActiveSheetIndex(0)->setCellValue('D' . $num, '工作时长(小时)');
  193. $objPHPExcel->setActiveSheetIndex(0)->setCellValue('E' . $num, '派单时间');
  194. $objPHPExcel->setActiveSheetIndex(0)->setCellValue('F' . $num, '服务类型');
  195. $objPHPExcel->setActiveSheetIndex(0)->setCellValue('G' . $num, '工单状态');
  196. $objPHPExcel->setActiveSheetIndex(0)->setCellValue('H' . $num, '楼号');
  197. $objPHPExcel->setActiveSheetIndex(0)->setCellValue('I' . $num, '房号');
  198. ;
  199. $num += 1;
  200. foreach($data as $key => $value){
  201. $objPHPExcel->setActiveSheetIndex(0)
  202. //Excel的第A列,uid是你查出数组的键值,下面以此类推
  203. ->setCellValue('A' . $num, $value['user_name'])
  204. ->setCellValue('B' . $num, $value['in_room_time'])
  205. ->setCellValue('C' . $num, $value['out_room_time'])
  206. ->setCellValue('D' . $num, $value['time'])
  207. ->setCellValue('E' . $num, $value['order_time'])
  208. ->setCellValue('F' . $num, $value['service_standards'])
  209. ->setCellValue('G' . $num, $value['status'])
  210. ->setCellValue('H' . $num, $value['floor'])
  211. ->setCellValue('I' . $num, $value['room'])
  212. ;
  213. $num += 1;
  214. }
  215. }
  216. $objPHPExcel->getActiveSheet()->setTitle('User');
  217. $objPHPExcel->setActiveSheetIndex(0);
  218. header('Content-Type: application/vnd.ms-excel');
  219. header('Content-Disposition: attachment;filename="' . $name . '.xls"');
  220. header('Cache-Control: max-age=0');
  221. $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
  222. $objWriter->save('php://output');
  223. exit;
  224. }
  225. }