链街Dcat后台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

87 lines
2.3 KiB

  1. <?php
  2. namespace App\Admin\Actions\Exporter;
  3. use Maatwebsite\Excel\Concerns\FromArray;
  4. use Maatwebsite\Excel\Concerns\WithStrictNullComparison;
  5. use Maatwebsite\Excel\Concerns\ShouldAutoSize;
  6. use Maatwebsite\Excel\Concerns\WithTitle;
  7. use Maatwebsite\Excel\Concerns\WithHeadings;
  8. use Maatwebsite\Excel\Concerns\WithStyles;
  9. use App\Admin\Repositories\v3\OrderDeliveryReport;
  10. use App\Models\v3\LanzuEmployees as EmployeesModel;
  11. use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
  12. /**
  13. * 配送统计总配送费
  14. */
  15. class OrderDeliveryTotalSheet implements FromArray, WithStrictNullComparison, ShouldAutoSize, WithTitle, WithHeadings, WithStyles
  16. {
  17. private $params;
  18. public function __construct(array $params)
  19. {
  20. $this->params = $params;
  21. }
  22. public function headings(): array
  23. {
  24. $startTime = $this->params['start_time'] ?? null;
  25. $endTime = $this->params['end_time'] ?? null;
  26. if(empty($startTime) && empty($endTime)){
  27. return ['统计全部'];
  28. }
  29. if(empty($startTime)){
  30. $startTime = '2020-10-01';
  31. }else{
  32. $endTime = date('Y-m-d');
  33. }
  34. return [
  35. '统计时间:'.$startTime.' 至 '.$endTime
  36. ];
  37. }
  38. public function array(): array
  39. {
  40. $titles = [[
  41. '配送人员',
  42. '总配送费',
  43. ]];
  44. $data = $this->getData($this->params);
  45. return array_merge($titles,$data);
  46. }
  47. public function styles(Worksheet $sheet)
  48. {
  49. $sheet->mergeCells('A1:B1');
  50. return [
  51. 1 => ['font' => ['bold' => true,'size' => 12]],
  52. 2 => ['font' => ['size' => 12]],
  53. ];
  54. }
  55. /**
  56. * 获取数据
  57. */
  58. public function getData($option = [])
  59. {
  60. $params = $option;
  61. $repository = new OrderDeliveryReport();
  62. $selects = EmployeesModel::TABLE_NAME.'.name,SUM( CASE WHEN delivery_money=0 THEN 3.5 when delivery_money>0 THEN delivery_money+3.5 ELSE 0 END) as total_delivery';
  63. $orderGoods = $repository->getDataModel($selects,$params);
  64. $list = $orderGoods->groupBy(EmployeesModel::TABLE_NAME.'.name')->get()->toArray();
  65. return $list;
  66. }
  67. /**
  68. * sheet 表名称
  69. * @return string
  70. */
  71. public function title(): string
  72. {
  73. return '配送统计';
  74. }
  75. }