OrderPackageCommoditiesService.php 3.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. namespace App\Services;
  3. use App\Commodity;
  4. use App\OracleActAllocationDetails;
  5. use App\OracleBasSKU;
  6. use App\OracleDOCOrderDetail;
  7. use App\OracleDOCOrderHeader;
  8. use App\Order;
  9. use App\OrderPackage;
  10. use App\OrderPackageCommodities;
  11. use App\Owner;
  12. use Illuminate\Support\Arr;
  13. class OrderPackageCommoditiesService
  14. {
  15. public function basedOnOracleDetailsStore($orderNo, $orderPackage)
  16. {
  17. $details = OracleDOCOrderDetail::where('orderNo', $orderNo)->get();
  18. foreach ($details as $key => $detail) {
  19. $this->createByOrderDetail($detail, $orderPackage);
  20. }
  21. }
  22. public function basedOnActAllocationDetailsStoreByOrderNo($orderNo,$orderPackage){
  23. $details = OracleActAllocationDetails::where('orderno', $orderNo)->get();
  24. foreach ($details as $key => $detail) {
  25. $this->createByActAllocationDetail($detail, $orderPackage);
  26. }
  27. }
  28. public function basedOnActAllocationDetailsStore($orderPackage)
  29. {
  30. $details = OracleActAllocationDetails::where('picktotraceid', $orderPackage->logistic_number)->get();
  31. foreach ($details as $key => $detail) {
  32. $this->createByActAllocationDetail($detail, $orderPackage);
  33. }
  34. }
  35. public function basedOnActAllocationDetail(Order $order,OracleDOCOrderHeader $header,array $details){
  36. foreach ($details as $detail){
  37. $logistic_number = $details['picktotraceid'];
  38. if($logistic_number == '*' || $logistic_number== null || $logistic_number== ''){
  39. $logistic_number = $header['soreference5'];
  40. if($logistic_number == '*' || $logistic_number== null || $logistic_number== ''){
  41. continue;
  42. }
  43. }
  44. $orderPackage = OrderPackage::firstOrCreate(['order_id'=>$order['id'],'logistic_number',$details]);
  45. $this->createByActAllocationDetail($detail, $orderPackage);
  46. }
  47. }
  48. private function createByActAllocationDetail($detail, OrderPackage $orderPackage)
  49. {
  50. $owner = Owner::where(['code' => $detail->customerid])->first(); // 货主
  51. $sku = $detail->sku;
  52. $owner_id = $owner['id'];
  53. $commodity = Commodity::where(['sku' => $sku, 'owner_id' => $owner_id])->first();
  54. if ($commodity == null) {
  55. $basSku = OracleBasSKU::where(['sku' => $sku, 'customerid' => $detail->customerid])->first();
  56. $commodity = Commodity::create(['sku' => $sku, 'owner_id' => $owner_id, 'name' => $basSku->descr_c]);
  57. }
  58. return OrderPackageCommodities::create(['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qty']]);
  59. }
  60. public function getOrderPackageCommoditiesByOrderId($orderId)
  61. {
  62. $order = Order::where('id', $orderId)->first();
  63. if (!$order) {
  64. return null;
  65. }
  66. $orderPackageIds = OrderPackage::select('id')->where('order_id', $order['id'])->get();
  67. if (!$orderPackageIds) {
  68. return null;
  69. }
  70. return OrderPackageCommodities::with('commodity')->whereIn('order_package_id', $orderPackageIds)->get();
  71. }
  72. public function createByOrderDetail(OracleDOCOrderDetail $detail, OrderPackage $orderPackage)
  73. {
  74. $owner = Owner::where(['code' => $detail['customerid']])->first(); // 货主
  75. $sku = $detail->sku; // sku
  76. $owner_id = $owner->id; // 货主id
  77. $commodity = Commodity::where(['sku' => $sku, 'owner_id' => $owner_id])->first(); // 商品
  78. if ($commodity == null) {
  79. $basSku = OracleBasSKU::where(['sku' => $sku, 'customerid' => $detail->customerid])->first(); // 没有找到对应的商品信息
  80. $commodity = Commodity::create(['sku' => $sku, 'owner_id' => $owner_id, 'name' => $basSku->descr_c]);
  81. }
  82. return OrderPackageCommodities::create(['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qtyordered']]);
  83. }
  84. }