OrderPackageService.php 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?php
  2. namespace App\Services;
  3. use App\OracleActAllocationDetails;
  4. use App\OracleDOCOrderDetail;
  5. use App\OracleDOCOrderHeader;
  6. use App\Order;
  7. use App\OrderPackage;
  8. class OrderPackageService
  9. {
  10. public function __construct()
  11. {
  12. app()->bind('orderPackageCommoditiesService', OrderPackageCommoditiesService::class);
  13. }
  14. public function createdByOrder(Order $order)
  15. {
  16. $orderPackageCommoditiesService = app('orderPackageCommoditiesService');
  17. $actAllocationCount = OracleActAllocationDetails::where('OrderNo', $order['code'])->count();
  18. $orderHeader = OracleDOCOrderHeader::where('OrderNo', $order['code'])->first();
  19. $orderDetailCount = OracleDOCOrderDetail::where('OrderNo', $order['code'])->count();
  20. $logistic_number = null;
  21. if ($actAllocationCount == 0) { // 通过oracle Order Detail
  22. $logistic_number = $orderHeader['soreference5'];
  23. if ($orderDetailCount == 0) {return null;}
  24. if ($logistic_number == null || $logistic_number == '*') { return null; }
  25. $orderPackage = OrderPackage::create(['order_id' => $order['id'], 'logistic_number' => $logistic_number]);
  26. $orderPackageCommoditiesService->basedOnOracleDetailsStore($orderHeader['orderno'], $orderPackage);
  27. } else if ($actAllocationCount > 0) {
  28. $count = OracleActAllocationDetails::where('OrderNo', $order['code'])->whereNull('picktotraceid')->count();
  29. if ($count > 0) { // 快递单号为空
  30. if (($orderHeader['soreference5'] ?? false) && $orderHeader['soreference5'] == '*') { return null; }
  31. $logistic_number = $orderHeader['soreference5'];
  32. $orderPackage = OrderPackage::create(['order_id' => $order['id'], 'logistic_number' => $logistic_number]);
  33. $orderPackageCommoditiesService->basedOnOracleDetailsStore($order, $orderPackage);
  34. } else {
  35. $ActAllocationDetails = OracleActAllocationDetails::where('orderno', $order['code'])->get();
  36. foreach ($ActAllocationDetails as $detail) {
  37. $logistic_number = $detail['picktotraceid'];
  38. if ($logistic_number == null || $logistic_number == '*') {
  39. $logistic_number = $orderHeader['soreference5'];
  40. if ($logistic_number == null || $logistic_number == '*') return null;
  41. $orderPackage = OrderPackage::where(['order_id' => $order['id'], 'logistic_number' => $logistic_number])->first();
  42. if($orderPackage)continue;
  43. $orderPackage = OrderPackage::create(['order_id' => $order['id'], 'logistic_number' => $logistic_number]);
  44. $orderPackageCommoditiesService->basedOnActAllocationDetailsStoreByOrderNo($order['code'], $orderPackage);
  45. continue;
  46. }
  47. $orderPackage = OrderPackage::where(['order_id' => $order['id'], 'logistic_number' => $logistic_number])->first();
  48. if ($orderPackage) continue;
  49. $orderPackage = OrderPackage::create(['order_id' => $order['id'], 'logistic_number' => $logistic_number]);
  50. $orderPackageCommoditiesService->basedOnActAllocationDetailsStore($orderPackage);
  51. }
  52. }
  53. }
  54. return OrderPackage::with(['commodities' => function ($query) {
  55. return $query->with(['commodity']);
  56. }])->get();
  57. }
  58. }