StoreService.php 7.4 KB

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