DeliveryBatchController.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. <?php
  2. namespace app\adminapi\controller\order;
  3. use app\adminapi\logic\order\OrderDeliveryBatchLogic;
  4. use app\adminapi\validate\order\DeliveryBatchImport;
  5. use app\adminapi\controller\BaseAdminController;
  6. use app\common\cache\ExportCache;
  7. use app\common\service\excel\Excel;
  8. use PhpOffice\PhpSpreadsheet\Cell\DataType;
  9. use PhpOffice\PhpSpreadsheet\IOFactory;
  10. use think\response\Json;
  11. class DeliveryBatchController extends BaseAdminController
  12. {
  13. /**
  14. * @notes 批量发货首页
  15. * @return Json
  16. * @author lbzy
  17. * @datetime 2024-04-11 16:46:54
  18. */
  19. function index()
  20. {
  21. return $this->success('成功', OrderDeliveryBatchLogic::lists(input()));
  22. }
  23. /**
  24. * @notes 批量发货详情
  25. * @return mixed
  26. * @author lbzy
  27. * @datetime 2024-04-12 16:05:38
  28. */
  29. function detail()
  30. {
  31. return $this->success('成功', OrderDeliveryBatchLogic::detail(input('id/d')));
  32. }
  33. /**
  34. * @notes 立即导入
  35. * @return Json
  36. * @author lbzy
  37. * @datetime 2024-04-12 09:45:06
  38. */
  39. function import()
  40. {
  41. $lists = IOFactory::load($_FILES['file']['tmp_name'])->getActiveSheet()->toArray(null, true, true, true);
  42. $validate = $this->validate([ 'lists' => $lists ], DeliveryBatchImport::class);
  43. if ($validate !== true) {
  44. return $this->fail($validate);
  45. }
  46. $result = OrderDeliveryBatchLogic::importLists($lists, $_FILES['file']['name']);
  47. if (! is_array($result)) {
  48. return $this->fail($result);
  49. }
  50. return $this->success('导入成功', $result);
  51. }
  52. /**
  53. * @notes 执行发货页面
  54. * @return Json|void
  55. * @author lbzy
  56. * @datetime 2024-04-12 14:33:52
  57. */
  58. function delivery()
  59. {
  60. $detail = OrderDeliveryBatchLogic::detail(input('id/d'));
  61. if ($this->request->isPost()) {
  62. OrderDeliveryBatchLogic::delivery($detail);
  63. return $this->success('发货完成');
  64. }
  65. }
  66. /**
  67. * @notes 下载模版文件等
  68. * @return string|\think\response\File|Json
  69. * @author lbzy
  70. * @datetime 2024-04-11 17:15:00
  71. */
  72. function down()
  73. {
  74. $filename = pathinfo(input('file/s'), PATHINFO_FILENAME);
  75. $exportCache = new ExportCache();
  76. $src = $exportCache->getSrc();
  77. if (!file_exists($src)) {
  78. mkdir($src, 0775, true);
  79. }
  80. $path = app()->getRootPath() . 'public/common/excel/' . $filename . '.xls';
  81. switch ($filename) {
  82. case 'delivery_batch_template':
  83. $filename2 = '批量发货模版.xls';
  84. break;
  85. case 'delivery_batch_express_company':
  86. $filename2 = '快递公司列表.xls';
  87. break;
  88. default:
  89. $filename2 = '模版.xls';
  90. break;
  91. }
  92. copy($path, $src . $filename2);
  93. return $this->success('', [
  94. 'url' => (string) (url('index/download/export', ['file' => $exportCache->setFile($filename2)], true, true))
  95. ], 2, 1);
  96. }
  97. /**
  98. * @notes 下载导入失败的
  99. * @return Json
  100. * @author lbzy
  101. * @datetime 2024-04-12 17:37:41
  102. */
  103. function down2()
  104. {
  105. $exportCache = new ExportCache();
  106. $src = $exportCache->getSrc();
  107. if (!file_exists($src)) {
  108. mkdir($src, 0775, true);
  109. }
  110. $lists = OrderDeliveryBatchLogic::getFailInfoLists(input('id/d'));
  111. Excel::out($lists, [
  112. [ 'field' => 'sn', 'title' => '订单编号', 'excel_data_type' => DataType::TYPE_STRING ],
  113. [ 'field' => 'express_name', 'title' => '快递公司名称' ],
  114. [ 'field' => 'express_no', 'title' => '快递单号' ],
  115. [ 'field' => 'fail_content', 'title' => '失败原因' ],
  116. ],'', '', '导入失败', $src);
  117. return $this->success('', [
  118. 'url' => (string) (url('index/download/export', ['file' => $exportCache->setFile('导入失败.xlsx')], true, true))
  119. ], 2, 1);
  120. }
  121. }