OracleDOCOrderHeaderService.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <?php
  2. namespace App\Services;
  3. use App\OracleActAllocationDetails;
  4. use App\OracleBasCode;
  5. use App\OracleBasCustomer;
  6. use App\OracleDOCOrderDetail;
  7. use App\OracleDOCOrderHeader;
  8. use App\Owner;
  9. Class OracleDOCOrderHeaderService
  10. {
  11. static $columns =[
  12. 'DOC_Order_Header.OrderNo','DOC_Order_Header.CustomerID','DOC_Order_Header.OrderTime',
  13. 'DOC_Order_Header.SOReference1', 'DOC_Order_Header.ConsigneeID','DOC_Order_Header.C_Contact',
  14. 'DOC_Order_Header.ConsigneeName','DOC_Order_Header.C_Address1', 'DOC_Order_Header.C_City',
  15. 'DOC_Order_Header.C_Province','DOC_Order_Header.UserDefine1','DOC_Order_Header.AddTime',
  16. 'DOC_Order_Header.EditTime','DOC_Order_Header.Notes','DOC_Order_Header.CarrierID',
  17. 'DOC_Order_Header.CarrierName', 'DOC_Order_Header.LastShipmentTime','DOC_Order_Header.EDISendFlag',
  18. 'DOC_Order_Header.SOReference5', 'DOC_Order_Header.C_Tel2','DOC_Order_Header.Transportation',
  19. 'DOC_Order_Header.WareHouseId','DOC_Order_Header.SOStatus','DOC_Order_Header.C_Tel1','DOC_Order_Header.C_District',
  20. 'DOC_Order_Header.IssuePartyName','DOC_Order_Header.OrderType','DOC_Order_Header.WaveNo'
  21. ];
  22. private function getQuery(){
  23. return OracleDOCOrderHeader::query()->selectRaw(implode(',',self::$columns))
  24. ->with(['oracleBASCustomer'=>function($query){
  25. $query->selectRaw('BAS_CUSTOMER.CustomerID,BAS_CUSTOMER.Customer_Type,BAS_CUSTOMER.Descr_C,BAS_CUSTOMER.Active_Flag');
  26. },'oracleDOCOrderDetails'=>function($query){
  27. $query->selectRaw('doc_order_details.orderNo,doc_order_details.customerid,doc_order_details.sku,doc_order_details.QtyOrdered,doc_order_details.Location');
  28. }, 'actAllocationDetails'=>function($query){
  29. $query->selectRaw('ACT_Allocation_Details.AllocationDetailsID,ACT_Allocation_Details.OrderNo,ACT_Allocation_Details.Qty_Each,ACT_Allocation_Details.PickToTraceID,ACT_Allocation_Details.CustomerID,ACT_Allocation_Details.Sku');
  30. },'oracleBASCode'=>function($query){
  31. $query->selectRaw('BAS_Codes.CodeID,BAS_Codes.CodeName_C,BAS_Codes.Code');
  32. },'orderType'=>function($query){
  33. $query->selectRaw('BAS_Codes.CodeID,BAS_Codes.CodeName_C,BAS_Codes.Code');
  34. }]);
  35. }
  36. function first(array $params){
  37. $order = OracleDOCOrderHeader::query();
  38. foreach ($params as $column => $value){
  39. $order->where($column, $value);
  40. }
  41. return $order->first();
  42. }
  43. public function getWmsOrderOnStartDateCreate($startDate){
  44. /** @var Owner $owners */
  45. $owners = app(OrderTrackingOwnerService::class)->getTrackingOrderOwner();
  46. return OracleDOCOrderHeader::query()
  47. ->with(['oracleDOCOrderDetails', 'actAllocationDetails','oracleBASCode','oracleBASCustomer'])
  48. ->where('DOC_Order_Header.addTime','>=',$startDate)
  49. ->whereIn('DOC_Order_Header.customerID',data_get($owners,'*.code'))
  50. ->get();
  51. }
  52. public function getWmsOrderOnStartDateEdit($startDate){
  53. /** @var Owner $owners */
  54. $owners = app(OrderTrackingOwnerService::class)->getTrackingOrderOwner();
  55. return OracleDOCOrderHeader::query()
  56. ->with(['oracleDOCOrderDetails', 'actAllocationDetails','oracleBASCode','oracleBASCustomer'])
  57. ->where('DOC_Order_Header.EditTime','>=',$startDate)
  58. ->whereColumn('DOC_Order_Header.EditTime','<>','DOC_Order_Header.addTime')
  59. ->whereIn('DOC_Order_Header.customerID',data_get($owners,'*.code'))
  60. ->get();
  61. }
  62. /**
  63. * @param OracleDOCOrderHeader $orderHeader
  64. * @return array|mixed
  65. */
  66. public function getLogisticNumbers($orderHeader)
  67. {
  68. if(!$orderHeader ?? false){return [];}
  69. $actAllocationDetails = $orderHeader->actAllocationDetails ?? [];
  70. return array_unique(array_diff(data_get($actAllocationDetails,'*.picktotraceid'),['','*',null]));
  71. }
  72. public function getWMSOrderOnStartDate($startDate)
  73. {
  74. return $this->getQuery()->where('DOC_Order_Header.addTime','>=',$startDate)
  75. ->whereColumn('DOC_Order_Header.editTime','=','DOC_Order_Header.addTime')
  76. ->orderByDesc('DOC_Order_Header.addTime')
  77. ->get();
  78. }
  79. public function getWMSOrderOnEditDate($startDate){
  80. return $this->getQuery()->where('DOC_Order_Header.editTime','>=',$startDate)
  81. ->whereColumn('DOC_Order_Header.editTime','!=','DOC_Order_Header.addTime')
  82. ->orderByDesc('DOC_Order_Header.editTime')
  83. ->get();
  84. }
  85. public function getOrderInfoByOrderNos($orderNos)
  86. {
  87. if(empty($orderNos))return collect();
  88. if(count($orderNos) == 0)return collect();
  89. return $this->getQuery()->whereIn('DOC_Order_Header.OrderNo',$orderNos)->get();
  90. }
  91. }