ShopService.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <?php
  2. namespace App\Services;
  3. use App\OracleBasCustomer;
  4. use App\Owner;
  5. use App\Services\common\BatchUpdateService;
  6. use App\Shop;
  7. use Carbon\Carbon;
  8. use Illuminate\Support\Facades\Cache;
  9. use App\Traits\ServiceAppAop;
  10. class ShopService
  11. {
  12. use ServiceAppAop;
  13. protected $modelClass=Shop::class;
  14. /** @var CacheService $cacheService */
  15. private $cacheService;
  16. function __construct(){
  17. $this->instant($this->cacheService,'CacheService');
  18. }
  19. public function getSelection(array $column = ['id', 'name'])
  20. {
  21. return Shop::query()->select($column)->get();
  22. }
  23. function firstOrCreate(array $param, array $values = null){
  24. $shop = Shop::query();
  25. if ($values) return $shop->firstOrCreate($param,$values);
  26. return $shop->firstOrCreate($param);
  27. }
  28. public function insert(array $params)
  29. {
  30. return Shop::query()->insert($params);
  31. }
  32. public function batchUpdate(array $params)
  33. {
  34. return app(BatchUpdateService::class)->batchUpdate('shops',$params);
  35. }
  36. public function getByWmsOrders($orderHeaders)
  37. {
  38. $maps = []; //issuepartyname
  39. foreach ($orderHeaders as $orderHeader) {
  40. $value = ['owner_code'=>$orderHeader->customerid,'issuepartyname'=>$orderHeader->issuepartyname];
  41. if(!in_array($value,$maps))
  42. $maps[] = $value;
  43. }
  44. $issuepartynames = array_diff(array_unique(data_get($maps,'*.issuepartyname')),['','*',null]);
  45. $owner_codes = array_diff(array_unique(data_get($maps,'*.owner_code')),['','*',null]);
  46. $shops = Shop::query()->with('owner')
  47. ->whereHas('owner',function($query)use($owner_codes){
  48. $query->whereIn('code',$owner_codes);
  49. })->whereIn('name',$issuepartynames)->get();
  50. if($shops->count() < count($issuepartynames)){
  51. $shops_code = data_get($shops,'*.name');
  52. $names = array_diff($issuepartynames,$shops_code);
  53. $params = [];
  54. foreach ($maps as $item){
  55. if(in_array($item['issuepartyname'],$names))
  56. $params[] = $item;
  57. }
  58. $shops_list = $this->createByNameAndOwnerCode($params);
  59. $shops = $shops->concat($shops_list??[]);
  60. }
  61. return $shops;
  62. }
  63. public function createByNameAndOwnerCode(array $params){
  64. $owners = Owner::query()->whereIn('code',data_get($params,'*.owner_code'))->get();
  65. $owners_map = [];
  66. foreach ($owners as $owner) {
  67. $owners_map[$owner->code] = $owner;
  68. }
  69. $insert_params = [];
  70. $created_at = Carbon::now()->format('Y-m-d H:i:s');
  71. foreach ($params as $param) {
  72. $owner = $owners_map[$param['owner_code']] ?? '';
  73. $insert_params[] = [
  74. 'name' => $param['issuepartyname'] ?? '',
  75. 'owner_id' => $owner['id'] ?? '',
  76. 'created_at' => $created_at,
  77. ];
  78. }
  79. try {
  80. if (count($insert_params) > 0) {
  81. $this->insert($insert_params);
  82. app('LogService')->log(__METHOD__, __FUNCTION__, '批量创建 shop ' . count($insert_params) . json_encode($insert_params));
  83. }
  84. } catch (\Exception $e) {
  85. app('LogService')->log(__METHOD__, 'Error '.__FUNCTION__, '批量创建 shop Error' . json_encode($insert_params) .'||'.$e->getMessage().'||'.$e->getTraceAsString());
  86. } finally {
  87. return Shop::query()->whereIn('name',data_get($params,'*.issuepartyname'))->get();
  88. }
  89. }
  90. public function getShopByCodeMap($map)
  91. {
  92. /** @var OwnerService $ownerService */
  93. $ownerService = app('OwnerService');
  94. $owner_codes = [];
  95. foreach ($map as $item) {
  96. $owner_codes[$item['owner_code']]= $item['owner_code'];
  97. }
  98. $owners = $ownerService->getOwnerByCodes($owner_codes);
  99. $owner_map = [];
  100. $owners->each(function($owner)use(&$owner_map){
  101. $owner_map[$owner['code']] = $owner;
  102. });
  103. $collect = collect();
  104. if(count($map)==0)return $collect;
  105. foreach ($map as $item) {
  106. $collect->push(Cache::remember("getShopByCodeMap_{$item['owner_code']}_{$item['issuepartyname']}", config('cache.expirations.rarelyChange'), function()use($item,$owner_map){
  107. $owner = $owner_map[$item['owner_code']] ;
  108. $shop = Shop::query()->where('owner_id',$owner['id'])->where('name',$item['issuepartyname'])->first();
  109. if($shop)return $shop;
  110. return Shop::query()->create(['owner_id'=>$owner['id'],'name'=>$item['issuepartyname']]);
  111. }));
  112. }
  113. return $collect;
  114. }
  115. }