OrderReport.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <?php
  2. namespace app\admin\controller;
  3. use app\common\model\AdminModel;
  4. use app\common\model\CompanyModel;
  5. use app\common\model\OrderProductModel;
  6. use app\common\model\PaymentChannelModel;
  7. use app\Request;
  8. use think\App;
  9. use think\facade\View;
  10. class OrderReport extends \app\BaseController
  11. {
  12. private $orderProductModel;
  13. private $companyModel;
  14. private $channelModel;
  15. private $adminModel;
  16. public function __construct(App $app)
  17. {
  18. $this->orderProductModel = new OrderProductModel();
  19. $this->companyModel = new CompanyModel();
  20. $this->channelModel = new PaymentChannelModel();
  21. $this->adminModel = new AdminModel();
  22. parent::__construct($app);
  23. }
  24. public function index(Request $request)
  25. {
  26. $params = $request->param();
  27. $fmt_params = [
  28. 'order_no' => format_string($params['order_no'] ?? null),
  29. 'bar_code' => format_string($params['bar_code'] ?? null),
  30. 'product_name' => format_string($params['product_name'] ?? null),
  31. "company_id" => format_string($params['company_id'] ?? null),
  32. "adviser_id" => format_string($params['adviser_id'] ?? null),
  33. "teacher_id" => format_string($params['teacher_id'] ?? null),
  34. "date_range" => format_string($params['date_range'] ?? null),
  35. "channel_id" => format_string($params['channel_id'] ?? null),
  36. ];
  37. $list = $this->orderProductModel->findByPaginate($fmt_params);
  38. foreach ($list as &$item) {
  39. $payments = $item->getRelation('payments');
  40. $payment_names = join(' ', array_unique(array_map(function ($data) {
  41. return "[{$data['channel_name']}]";
  42. }, $payments->toArray())));
  43. $item['payment_names'] = $payment_names;
  44. }
  45. View::assign([
  46. 'params' => $fmt_params,
  47. 'list' => $list,
  48. 'companys' => $this->companyModel->findAll(),
  49. 'admins' => $this->adminModel->findAll(),
  50. 'channels' => $this->channelModel->findAll(),
  51. ]);
  52. return view();
  53. }
  54. public function report(Request $request)
  55. {
  56. $params = $request->param();
  57. $list = $this->orderProductModel->report([
  58. 'order_no' => format_string($params['order_no'] ?? null),
  59. 'bar_code' => format_string($params['bar_code'] ?? null),
  60. 'product_name' => format_string($params['product_name'] ?? null),
  61. "company_id" => format_string($params['company_id'] ?? null),
  62. "adviser_id" => format_string($params['adviser_id'] ?? null),
  63. "teacher_id" => format_string($params['teacher_id'] ?? null),
  64. "date_range" => format_string($params['date_range'] ?? null),
  65. "channel_id" => format_string($params['channel_id'] ?? null),
  66. ])->toArray();
  67. $objPHPExcel = new \PHPExcel();
  68. try {
  69. $objSheet = $objPHPExcel->getActiveSheet();
  70. //工作表标题
  71. $objSheet->setTitle("main");
  72. //第一行内容,放列标题
  73. $objSheet->setCellValue("A1", lang('Invoice No'));
  74. $objSheet->setCellValue("B1", lang('Store') . lang('Abbr'));
  75. $objSheet->setCellValue("C1", lang("Date"));
  76. $objSheet->setCellValue("D1", lang("Bar code"));
  77. $objSheet->setCellValue("E1", lang('Product') . lang('Name'));
  78. $objSheet->setCellValue("F1", lang("Belong Company"));
  79. $objSheet->setCellValue("G1", lang("Sale price"));
  80. $objSheet->setCellValue("H1", lang("Consumption tax"));
  81. $objSheet->setCellValue("I1", lang("Quantity"));
  82. $objSheet->setCellValue("J1", lang("Real Price"));
  83. $objSheet->setCellValue("K1", lang("Adviser") . '1');
  84. $objSheet->setCellValue("L1", lang("Adviser") . '2');
  85. $objSheet->setCellValue("M1", lang("Teacher") . '1');
  86. $objSheet->setCellValue("N1", lang("Teacher") . '2');
  87. //设置第一行的背景颜色
  88. $objPHPExcel->getActiveSheet()
  89. ->getStyle('A1:N1')
  90. ->getFill()
  91. ->setFillType(\PHPExcel_Style_Fill::FILL_SOLID)
  92. ->getStartColor()
  93. ->setRGB('FFFF00');
  94. //后面行循环放内容
  95. for ($i = 0; $i < count($list); $i++) {
  96. $item = $list[$i];
  97. $objSheet->setCellValue("A" . ($i + 2), fmtN_A($item['order_no']));
  98. $objSheet->setCellValue("B" . ($i + 2), fmtN_A(preg_replace("/\\d+/", '', $item['order_no'])));
  99. $objSheet->setCellValue("C" . ($i + 2), fmtN_A($item['create_time']));
  100. $objSheet->setCellValue("D" . ($i + 2), fmtN_A($item['product']['bar_code']));
  101. $objSheet->setCellValue("E" . ($i + 2), fmtN_A($item['product_name']));
  102. $objSheet->setCellValue("F" . ($i + 2), fmtN_A($item['product']['company']['name']));
  103. $objSheet->setCellValue("G" . ($i + 2), fmtN_A($item['product']['real_price']));
  104. $objSheet->setCellValue("H" . ($i + 2), fmtN_A($item['sales_tax']));
  105. $objSheet->setCellValue("I" . ($i + 2), 1);
  106. $objSheet->setCellValue("J" . ($i + 2), fmtN_A($item['transaction_price']));
  107. $objSheet->setCellValue("K" . ($i + 2), fmtN_A($item['adviser_1_name']));
  108. $objSheet->setCellValue("L" . ($i + 2), fmtN_A($item['adviser_2_name']));
  109. $objSheet->setCellValue("M" . ($i + 2), fmtN_A($item["teacher_1_name"]));
  110. $objSheet->setCellValue("N" . ($i + 2), fmtN_A($item["teacher_2_name"]));
  111. }
  112. $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
  113. $fileName = time();
  114. header('Content-Disposition: attachment;filename="' . $fileName . '.xlsx"'); //设置excel文件名称
  115. header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  116. return json($objWriter->save("php://output"));
  117. } catch (\PHPExcel_Exception $e) {
  118. }
  119. }
  120. }