StoreService.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <?php
  2. namespace App\Services;
  3. use App\Services\common\BatchUpdateService;
  4. use App\Services\common\DataHandlerService;
  5. use App\Store;
  6. use Carbon\Carbon;
  7. Class StoreService
  8. {
  9. public function create(array $params)
  10. {
  11. return Store::query()->create($params);
  12. }
  13. public function syncWmsAsnData($startDate)
  14. {
  15. $this->storeCreateByWms($startDate);
  16. //$this->storeUpdateByWms($startDate);
  17. }
  18. public function storeCreateByWms($startDate)
  19. {
  20. /** @var OracleDocAsnHerderService $oracleDocAsnHerderService */
  21. $oracleDocAsnHerderService = app(OracleDocAsnHerderService::class);
  22. $asnHerders = $oracleDocAsnHerderService->getWmsAsnOnStartDateCreate($startDate);
  23. $this->createStore($asnHerders);
  24. }
  25. public function storeUpdateByWms($startDate)
  26. {
  27. /** @var OracleDocAsnHerderService $oracleDocAsnHerderService */
  28. $oracleDocAsnHerderService = app(OracleDocAsnHerderService::class);
  29. $asnHerders = $oracleDocAsnHerderService->getWmsAsnOnStartDateEdit($startDate);
  30. $this->updateStore($asnHerders);
  31. }
  32. public function createStore($asnHerders)
  33. {
  34. if ($asnHerders->isEmpty())return null;
  35. /**
  36. * @var OwnerService $ownerService
  37. * @var WarehouseService $wareHouseService
  38. */
  39. $ownerService = app(OwnerService::class);
  40. $owners=$ownerService->getByWmsOrders($asnHerders);
  41. $wareHouseService=app(WarehouseService::class);
  42. $warehouses=$wareHouseService->getByWms($asnHerders);
  43. foreach ($owners as $owner) {
  44. $owners_code_map[$owner->code] = $owner;
  45. }
  46. foreach ($warehouses as $warehouse) {
  47. $warehouses_code_map[$warehouse->code] = $warehouse;
  48. }
  49. $params=$this->getParamsByAsnHeader($asnHerders,$owners_code_map,$warehouses_code_map);
  50. if(count($params)> 0){
  51. $this->insertStore($params);
  52. }
  53. /** @var StoreItemService $storeItemService */
  54. $storeItemService = app(StoreItemService::class);
  55. $storeItemService->storeItemCreateByWms($asnHerders);
  56. $asn_nos = data_get($asnHerders,'*.asnno');
  57. unset($asnHerders,$owners_code_map,$warehouses_code_map);
  58. return Store::query()->whereIn('asn_code',$asn_nos)->get();
  59. }
  60. public function getParamsByAsnHeader($asnHerders,$owners_code_map,$warehouses_code_map)
  61. {
  62. $params = [];
  63. $stores = Store::query()->whereIn('asn_code',data_get($asnHerders,'*.asnno'))->get();
  64. $store_asn_code_map = [];
  65. foreach ($stores as $store) {
  66. $store_asn_code_map[$store->asn_code]= $store;
  67. }
  68. foreach ($asnHerders as $asnHerder) {
  69. if($store_asn_code_map[$asnHerder->asnno] ?? false)continue;
  70. $owner = $owners_code_map[$asnHerder->customerid] ?? null;
  71. $warehouse=$warehouses_code_map[$asnHerder->warehouseid] ?? null;
  72. $params[] = [
  73. 'asn_code' => $asnHerder->asnno,
  74. 'warehouse_id' =>$warehouse->id??null,
  75. 'owner_id' => $owner->id??null,
  76. 'stored_method' =>$asnHerder->asnType?$asnHerder->asnType->codename_c:'',
  77. 'status' =>$asnHerder->asnStatus?$asnHerder->asnStatus->codename_c:'',
  78. 'remark' => $asnHerder->notes??null,
  79. 'created_at'=>$asnHerder->addtime??null,
  80. 'updated_at'=>$asnHerder->edittime??null,
  81. ];
  82. }
  83. return $params;
  84. }
  85. public function insertStore(array $params){
  86. if(count($params) === 0) return [];
  87. try {
  88. $this->insert($params);
  89. LogService::log(__METHOD__,__FUNCTION__,'批量创建 store success'.count($params).json_encode($params));
  90. } catch (\Exception $e) {
  91. LogService::log(__METHOD__,__FUNCTION__,'批量创建 store error'.json_encode($params).'||'.$e->getMessage().'||'.$e->getTraceAsString());
  92. } finally{
  93. return Store::query()->whereIn('asn_code',data_get($params,'*.asn_code'))->get();
  94. }
  95. }
  96. public function updateStore($asnHerders)
  97. {
  98. if(!$asnHerders || $asnHerders->count() == 0){return null;}
  99. /** @var DataHandlerService $dataHandlerService */
  100. $dataHandlerService = app(DataHandlerService::class);
  101. $stores = $this->getByWms($asnHerders);
  102. $store_asn_code_map = $dataHandlerService->dataHeader(['asn_code'],$stores);
  103. $owners = app(OwnerService::class)->getByWmsOrders($asnHerders);
  104. $owner_code_map = $dataHandlerService->dataHeader(['code'],$owners);
  105. $warehouses = app(WarehouseService::class)->getByWms($asnHerders);
  106. $warehouses_map = $dataHandlerService->dataHeader(['code'],$warehouses);
  107. $updateParams = [[
  108. 'id','asn_code','warehouse_id','owner_id','stored_method','status','remark','updated_at'
  109. ]];
  110. $updated_at=Carbon::now()->toDateTimeString();
  111. foreach ($asnHerders as $asnHerder) {
  112. $store =$dataHandlerService->getKeyValue(['asn_code'=>$asnHerder->asnno],$store_asn_code_map);
  113. if(!$store){continue;}
  114. $owner = $dataHandlerService->getKeyValue(['code'=>$asnHerder->customerid] ,$owner_code_map);
  115. $warehouse=$dataHandlerService->getKeyValue(['code'=>$asnHerder->warehouseid],$warehouses_map);
  116. $owner_id = $owner->id ?? null;
  117. $warehouse_id=$warehouse->id??null;
  118. if( $store->asn_code != $asnHerder->asnno ||
  119. $store->warehouse_id!=$warehouse_id ||
  120. $store->owner_id != $owner_id ||
  121. $store->stored_method != $asnHerder->asnType->codename_c||
  122. $store->status !=$asnHerder->asnStatus->codename_c||
  123. $store->remark != $asnHerder->notes){
  124. $updateParams[] = [
  125. 'id'=>$store->id,
  126. 'asn_code'=>$asnHerder->asnno,
  127. 'warehouse_id'=>$warehouse_id,
  128. 'owner_id' => $owner_id,
  129. 'stored_method' =>$asnHerder->asnType?$asnHerder->asnType->codename_c:'',
  130. 'status' =>$asnHerder->asnStatus?$asnHerder->asnStatus->codename_c:'',
  131. 'remark' => $asnHerder->notes,
  132. 'updated_at' =>$updated_at,
  133. ];
  134. }
  135. }
  136. if(count($updateParams) > 1){
  137. $this->batchUpdate($updateParams);
  138. }
  139. /** @var StoreItemService $storeItemService */
  140. $storeItemService = app(StoreItemService::class);
  141. $storeItemService->storeItemUpdateByWms($asnHerders);
  142. unset($updateParams,$asnHerders);
  143. }
  144. public function insert($params){
  145. return Store::query()->insert($params);
  146. }
  147. public function batchUpdate($params){
  148. return app(BatchUpdateService::class)->batchUpdate('stores',$params);
  149. }
  150. public function getByWms($asnHerders){
  151. if(!$asnHerders){return null;}
  152. $asn_nos = array_unique(data_get($asnHerders,'*.asnno'));
  153. return Store::query()->whereIn('asn_code',$asn_nos)->get();
  154. }
  155. }