Base.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. <?php
  2. namespace addons\shopro\library\express\provider;
  3. use addons\shopro\library\express\contract\ExpressInterface;
  4. use app\admin\model\shopro\order\Express;
  5. use app\admin\model\shopro\order\ExpressLog;
  6. use app\admin\model\shopro\order\Aftersale;
  7. use app\admin\model\shopro\order\AftersaleExpressLog;
  8. class Base implements ExpressInterface
  9. {
  10. public function __construct()
  11. {
  12. }
  13. /**
  14. * 快递查询
  15. *
  16. * @param array $data
  17. * @param mixed $order_express_id
  18. * @return array
  19. */
  20. public function search(array $data, $orderExpress = 0)
  21. {
  22. return null;
  23. }
  24. /**
  25. * 物流信息订阅
  26. *
  27. * @param array $data
  28. * @return void
  29. */
  30. public function subscribe(array $data)
  31. {
  32. error_stop('当前快递驱动不支持物流信息订阅');
  33. }
  34. /**
  35. * 物流信息推送
  36. *
  37. * @param array $data
  38. * @return array
  39. */
  40. public function push(array $data)
  41. {
  42. error_stop('当前快递驱动不支持接受推送');
  43. }
  44. /**
  45. * 电子面单
  46. *
  47. * @param array $data
  48. * @param array $items
  49. * @return array
  50. */
  51. public function eOrder(array $data, $items)
  52. {
  53. error_stop('当前快递驱动不支持电子面单');
  54. }
  55. /**
  56. * 更新包裹信息
  57. *
  58. * @param array $data
  59. * @param mixed $orderExpress
  60. * @return array
  61. */
  62. protected function updateExpress(array $data, $orderExpress)
  63. {
  64. // 更新包裹状态
  65. if (is_numeric($orderExpress)) {
  66. $orderExpress = Express::find($orderExpress);
  67. }
  68. if ($orderExpress) {
  69. $orderExpress->status = $data['status'];
  70. $orderExpress->save();
  71. $this->syncTraces($data['traces'], $orderExpress);
  72. }
  73. }
  74. protected function updateAftersale(array $data, $orderExpress)
  75. {
  76. // 更新包裹状态
  77. if (is_numeric($orderExpress)) {
  78. $orderExpress = Aftersale::find($orderExpress);
  79. }
  80. if ($orderExpress) {
  81. $orderExpress->express_status = $data['status'];
  82. $orderExpress->save();
  83. $this->syncTracesAftersale($data['traces'], $orderExpress);
  84. }
  85. }
  86. /**
  87. * 更新物流信息
  88. *
  89. * @param array $traces
  90. * @param mixed $orderExpress
  91. * @return void
  92. */
  93. protected function syncTraces($traces, $orderExpress)
  94. {
  95. // 查询现有轨迹记录
  96. $orderExpressLog = ExpressLog::where('order_express_id', $orderExpress->id)->select();
  97. $log_count = count($orderExpressLog);
  98. if ($log_count > 0) {
  99. // 移除已经存在的记录
  100. array_splice($traces, 0, $log_count);
  101. }
  102. // 增加包裹记录
  103. foreach ($traces as $k => $trace) {
  104. $orderExpressLog = new ExpressLog();
  105. $orderExpressLog->user_id = $orderExpress['user_id'];
  106. $orderExpressLog->order_id = $orderExpress['order_id'];
  107. $orderExpressLog->order_express_id = $orderExpress['id'];
  108. $orderExpressLog->content = $trace['content'];
  109. $orderExpressLog->change_date = $trace['change_date'];
  110. $orderExpressLog->status = $trace['status'];
  111. $orderExpressLog->save();
  112. }
  113. }
  114. protected function syncTracesAftersale($traces, $orderExpress)
  115. {
  116. // 查询现有轨迹记录
  117. $orderExpressLog = AftersaleExpressLog::where('order_aftersale_id', $orderExpress->id)->select();
  118. $log_count = count($orderExpressLog);
  119. if ($log_count > 0) {
  120. // 移除已经存在的记录
  121. array_splice($traces, 0, $log_count);
  122. }
  123. // 增加包裹记录
  124. foreach ($traces as $k => $trace) {
  125. $orderExpressLog = new AftersaleExpressLog();
  126. $orderExpressLog->user_id = $orderExpress['user_id'];
  127. $orderExpressLog->order_id = $orderExpress['order_id'];
  128. $orderExpressLog->order_aftersale_id = $orderExpress['id'];
  129. $orderExpressLog->content = $trace['content'];
  130. $orderExpressLog->change_date = $trace['change_date'];
  131. $orderExpressLog->status = $trace['status'];
  132. $orderExpressLog->save();
  133. }
  134. }
  135. }