ExcelOrderForm.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. namespace common\models\forms;
  3. use common\models\Order;
  4. class ExcelOrderForm extends \common\components\ActiveRecord
  5. {
  6. /**
  7. * 导入excel数据
  8. */
  9. public function run($file)
  10. {
  11. $fileRows = count(file($file, FILE_SKIP_EMPTY_LINES));
  12. if ($fileRows > 500) {
  13. return '文件行数最多500';
  14. }
  15. $orderList = [];
  16. if (false !== ($handle = fopen($file, 'r'))) {
  17. while (false !== ($data = fgetcsv($handle, (filesize($file) + 1)))) {
  18. // 订单号和运单号都不能为空
  19. $orderSn = $data[0] ?? '';
  20. $orderTraceNo = $data[1] ?? '';
  21. if (!$orderSn) {
  22. fclose($handle);
  23. return '订单号不能为空';
  24. }
  25. if (!$orderTraceNo) {
  26. fclose($handle);
  27. return '运单号不能为空';
  28. }
  29. if ((strlen($orderTraceNo) < 5) || (strlen($orderTraceNo) > 20)) {
  30. fclose($handle);
  31. return '运单号长度错误';
  32. }
  33. $orderList[$orderSn] = $orderTraceNo;
  34. }
  35. } else {
  36. return '文件打开错误';
  37. }
  38. fclose($handle);
  39. if (!$orderList) {
  40. return '订单内容为空';
  41. }
  42. $dayLimit = 100;
  43. $transaction = \Yii::$app->db->beginTransaction();
  44. try {
  45. foreach ($orderList as $orderSn => $trackNo) {
  46. // 查询订单
  47. $order = Order::findOne(['SN' => $orderSn]);
  48. if (!$order->SN) {
  49. return "订单【{$orderSn}】无效";
  50. }
  51. if ($order->STATUS !== \Yii::$app->params['orderStatus']['paid']['value']) {
  52. return "订单【{$orderSn}】支付状态错误";
  53. }
  54. if ($order->CREATED_AT < strtotime( "-{$dayLimit} days")) {
  55. return "订单【{$orderSn}】创建已超过{$dayLimit}天";
  56. }
  57. try {
  58. // 更新运单号
  59. $order->ORDER_TRACK_NO = $trackNo;
  60. $order->save(false);
  61. } catch (\Exception $e) {
  62. $transaction->rollBack();
  63. return "订单【{$orderSn}】更新运单号错误. " . $e->getMessage();
  64. }
  65. }
  66. $transaction->commit();
  67. } catch (\Exception $e) {
  68. $transaction->rollBack();
  69. return "订单更新运单号错误. Exception " . $e->getMessage();
  70. }
  71. return true;
  72. }
  73. }