WarehouseService.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <?php
  2. namespace App\Services;
  3. use App\OracleBasCustomer;
  4. use App\Owner;
  5. use App\Warehouse;
  6. use Illuminate\Support\Collection;
  7. use Carbon\Carbon;
  8. Class WarehouseService
  9. {
  10. public function firstOrCreate(array $params, array $values = null){
  11. if ($values)return Warehouse::query()->firstOrCreate($params,$values);
  12. {
  13. public function firstOrCreate(array $params, array $values = null)
  14. {
  15. if ($values) return Warehouse::query()->firstOrCreate($params, $values);
  16. return Warehouse::query()->firstOrCreate($params);
  17. }
  18. public function getByWmsOrders($orderHeaders)
  19. {
  20. $wareHouse_Ids=array_diff(array_unique(data_get($orderHeaders,'*.warehouseid')),['',' ','*',null]);
  21. $wareHouses=Warehouse::query()->whereIn('code',$wareHouse_Ids)->get();
  22. if(count($wareHouse_Ids)>$wareHouses->count()){
  23. $需要添加_仓库编码=[];
  24. foreach ($wareHouse_Ids as $warehouse_id) {
  25. if($wareHouses->where('code')->count()==0){
  26. $需要添加_仓库编码[]=$warehouse_id;
  27. }
  28. }
  29. $create_wareHouse=$this->syncWmsWareHouse($需要添加_仓库编码);
  30. $wareHouses->concat($create_wareHouse);
  31. }
  32. return $wareHouses;
  33. }
  34. public function syncWmsWareHouse($warehouse_ids)
  35. {
  36. $collet = new Collection();
  37. if(!$warehouse_ids)return null;
  38. /** @var Collection $oracleBasCustomers */
  39. $oracleBasCustomers=app(OracleBasCustomerService::class)->getWareHouse($warehouse_ids);
  40. $warehouses=Warehouse::query()->where('code',data_get($oracleBasCustomers,'*.CustomerID'))->get();
  41. $oracleBasCustomers=$oracleBasCustomers->filter(function($oracleBasCustomer)use($warehouses){
  42. return $warehouses->where('code',$oracleBasCustomer->warehouseid)->count()>0;
  43. });
  44. foreach ($oracleBasCustomers as $oracleBasCustomer){
  45. $wereHouse=Warehouse::query()->create([
  46. 'code'=>$oracleBasCustomer->customerid,
  47. 'name'=>$oracleBasCustomer->descr_c
  48. ]);
  49. $collet->push($wereHouse);
  50. }
  51. return $collet;
  52. }
  53. public function getByWms($asnHerders)
  54. {
  55. $warehouseids = array_unique(data_get($asnHerders, '*.warehouseid'));
  56. $warehouseids = array_diff($warehouseids, [null, '', '*']);
  57. $warehouses = Warehouse::query()->whereIn('code', $warehouseids)->get();
  58. if ($warehouses->count() < count($warehouseids)) {
  59. $warehouseids = array_diff($warehouseids, data_get($warehouses, '*.code'));
  60. $warehouse_list = $this->createWarehouseByWms($warehouseids);
  61. $warehouses=$warehouses->concat($warehouse_list);
  62. }
  63. return $warehouses;
  64. }
  65. public function createWarehouseByWms($codes)
  66. {
  67. if(!$codes) {return [];}
  68. $insert_params = [];
  69. $created_at = Carbon::now()->format('Y-m-d H:i:s');
  70. foreach ($codes as $item) {
  71. $insert_params[] = [
  72. 'code' => $item,
  73. 'name' => $item,
  74. 'created_at' => $created_at,
  75. ];
  76. }
  77. try {
  78. if (count($insert_params) > 0) {
  79. $this->insert($insert_params);
  80. LogService::log(__METHOD__, __FUNCTION__, '批量创建 warehouse success' . count($insert_params) . json_encode($insert_params) );
  81. }
  82. } catch (\Exception $e) {
  83. LogService::log(__METHOD__, __FUNCTION__, '批量创建 warehouse error' . json_encode($insert_params) . '||' . $e->getMessage() . '||' . $e->getTraceAsString());
  84. } finally {
  85. return Warehouse::query()->whereIn('code', $codes)->get();
  86. }
  87. }
  88. public function insert($fillables){
  89. return Warehouse::query()->insert($fillables);
  90. }
  91. }