StoreService.php 8.1 KB

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