StockReport.php 5.3 KB

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