ExportFileService.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. <?php
  2. namespace App\Service;
  3. use App\Exports\ExportOrder;
  4. use App\Exports\MyExport;
  5. use App\Model\Area;
  6. use App\Model\BasicMaterial;
  7. use App\Model\BasicRollFilm;
  8. use App\Model\BasicType;
  9. use App\Model\CarDepart;
  10. use App\Model\CarFiles;
  11. use App\Model\CarType;
  12. use App\Model\Company;
  13. use App\Model\Construction;
  14. use App\Model\ConstructionInfo;
  15. use App\Model\ConstructionOrder;
  16. use App\Model\ConstructionOrderImg;
  17. use App\Model\ConstructionOrderSub;
  18. use App\Model\ConstructionProductInfo;
  19. use App\Model\Employee;
  20. use App\Model\EmployeeDepartPermission;
  21. use App\Model\FoursShop;
  22. use App\Model\InOutRecord;
  23. use App\Model\Inventory;
  24. use App\Model\InventorySub;
  25. use App\Model\KqList;
  26. use App\Model\Material;
  27. use App\Model\MaterialCharge;
  28. use App\Model\MaterialChargeSub;
  29. use App\Model\MaterialOrder;
  30. use App\Model\MaterialOrderApply;
  31. use App\Model\MaterialOrderIn;
  32. use App\Model\MaterialOrderSend;
  33. use App\Model\MaterialOrderSendSub;
  34. use App\Model\MaterialReturn;
  35. use App\Model\MaterialReturnSub;
  36. use App\Model\PaymentReceipt;
  37. use App\Model\PaymentReceiptInfo;
  38. use App\Model\PurchaseOrder;
  39. use App\Model\PurchaseOrderInfo;
  40. use App\Model\RollFilm;
  41. use App\Model\RollFilmCombine;
  42. use App\Model\RollFilmCompany;
  43. use App\Model\RollFilmInventory;
  44. use App\Model\SalesOrder;
  45. use App\Model\SalesOrderOtherFee;
  46. use App\Model\SalesOrderProductInfo;
  47. use App\Model\Storehouse;
  48. use App\Model\Supplier;
  49. use App\Model\Transfer;
  50. use App\Model\TransferSub;
  51. use Illuminate\Support\Facades\DB;
  52. use Maatwebsite\Excel\Facades\Excel;
  53. class ExportFileService extends Service
  54. {
  55. //导出文件
  56. const type_one = 1;
  57. const type_two = 2;
  58. const type_three = 3;
  59. const type_four = 4;
  60. const type_five = 5;
  61. const type_six = 6;
  62. const type_seven = 7;
  63. //导出文件方法
  64. protected static $fuc = [
  65. self::type_one => 'kqList',
  66. self::type_two => 'kqSummary',
  67. self::type_three => '',
  68. self::type_four => '',
  69. self::type_five => '',
  70. ];
  71. protected static $special = [
  72. self::type_two,
  73. ];
  74. protected static $fuc_name = [
  75. self::type_one => '考勤',
  76. self::type_two => '每日考勤数据汇总',
  77. self::type_three => '',
  78. self::type_four => '',
  79. self::type_five => '',
  80. ];
  81. public static $filename = "";
  82. public function exportAll($data,$user){
  83. if(empty($data['type']) || ! isset(self::$fuc[$data['type']])) return [false,'导出文件类型错误或者不存在'];
  84. self::$filename = self::$fuc_name[$data['type']] ?? "";
  85. if(! in_array($data['type'], self::$special)) if(empty($data['id'])) return [false,'请选择导出数据'];
  86. //不超时
  87. ini_set('max_execution_time', 0);
  88. //内存设置
  89. ini_set('memory_limit', -1);
  90. $function = self::$fuc[$data['type']];
  91. list($status, $return) = $this->$function($data);
  92. if(! $status) return [false, $return];
  93. return [true, $return];
  94. }
  95. public function kqList($ergs){
  96. $id = $ergs['id'];
  97. // 导出数据
  98. $return = [];
  99. DB::table('kq_list')
  100. ->whereIn('id', $id)
  101. ->select('id','order_number','model_type','sales_order_type','sign_time','plat_order','plat_type','product_total','other_fee','discount_fee','contract_fee','crt_time','crt_id','state','invoice_state','pay_way')
  102. ->orderBy('id','desc')
  103. ->chunk(500,function ($data) use(&$return){
  104. $data = Collect($data)->map(function ($object) {
  105. return (array)$object;
  106. })->toArray();
  107. $list['data'] = $data;
  108. });
  109. $header = ['合同单号'];
  110. return $this->saveExportData($return,$header);
  111. }
  112. public function kqSummary($ergs){
  113. // 导出数据
  114. $return = [];
  115. $employee_number = [];
  116. if(empty($ergs['export_type'])){
  117. //全部
  118. }elseif($ergs['export_type'] == 1){
  119. //部门
  120. $employee_id = EmployeeDepartPermission::whereIn('depart_id',$ergs['depart_id'])
  121. ->select('employee_id')
  122. ->get()->toArray();
  123. $employee_id = array_column($employee_id,'employee_id');
  124. $employee_number = Employee::where('del_time',0)
  125. ->whereIn('id',$employee_id)
  126. ->select('number')
  127. ->get()->toArray();
  128. $employee_number = array_column($employee_number,'number');
  129. }elseif($ergs['export_type'] == 2){
  130. //个人
  131. $employee_number = Employee::where('del_time',0)
  132. ->whereIn('id',$ergs['employee_id'])
  133. ->select('number')
  134. ->get()->toArray();
  135. $employee_number = array_column($employee_number,'number');
  136. }else{
  137. return [false, '导出类型不合法'];
  138. }
  139. if(empty($ergs['crt_time'][0]) || empty($ergs['crt_time'][1])) return [false, '请选择导出数据的日期'];
  140. list($start_time, $end_time) = $this->changeDateToTimeStampAboutRange($ergs['crt_time']);
  141. //数据
  142. $list = KqList::where('crt_time', '>=', $start_time)
  143. ->where('crt_time', '<=', $end_time)
  144. ->when(! empty($employee_number), function ($query) use ($employee_number) {
  145. return $query->where('number', $employee_number);
  146. })
  147. ->select('number',"emp_fname as name", DB::raw('FROM_UNIXTIME(crt_time, "%Y-%m-%d") as date'), DB::raw('MAX(crt_time) as max_crt_time'), DB::raw('MIN(crt_time) as min_crt_time'))
  148. ->groupBy('number', DB::raw('FROM_UNIXTIME(crt_time, "%Y-%m-%d")'))
  149. ->orderBy('number','asc')
  150. ->get()->toArray();
  151. foreach ($list as $value){
  152. $return[] = [
  153. 0 => $value['number'],
  154. 1 => $value['name'],
  155. 2 => $value['date'],
  156. 3 => date("Y-m-d H:i:s",$value['min_crt_time']),
  157. 4 => date("Y-m-d H:i:s",$value['max_crt_time']),
  158. ];
  159. }unset($list);
  160. $header = ["工号", "姓名", "日期", "最早打卡时间", "最晚打卡时间"];
  161. return $this->saveExportData($return,$header,'kq');
  162. }
  163. public function saveExportData($data, $headers, $type = 'default',$file_name = ''){
  164. if(empty($file_name)) $file_name = self::$filename . "_". date("Y-m-d") . "_". rand(1000,9999);
  165. $filename = $file_name . '.' . 'xlsx';
  166. $bool = Excel::store(new ExportOrder($data,$type,$headers),"/public/export/{$filename}", null, 'Xlsx', []);
  167. return [true, $filename];
  168. }
  169. }