ShopService.php 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. namespace App\Services;
  3. use App\Owner;
  4. use App\Services\common\BatchUpdateService;
  5. use App\Shop;
  6. use Carbon\Carbon;
  7. class ShopService
  8. {
  9. public function getSelection(array $column = ['id', 'name'])
  10. {
  11. return Shop::query()->select($column)->get();
  12. }
  13. function firstOrCreate(array $param, array $values = null){
  14. $shop = Shop::query();
  15. if ($values) return $shop->firstOrCreate($param,$values);
  16. return $shop->firstOrCreate($param);
  17. }
  18. public function insert(array $params)
  19. {
  20. return Shop::query()->insert($params);
  21. }
  22. public function batchUpdate(array $params)
  23. {
  24. return app(BatchUpdateService::class)->batchUpdate('shops',$params);
  25. }
  26. public function getByWmsOrders($orderHeaders)
  27. { //issuepartyname
  28. $maps = [];
  29. foreach ($orderHeaders as $orderHeader) {
  30. $value = ['owner_code'=>$orderHeader->customerid,'issuepartyname'=>$orderHeader->issuepartyname];
  31. if(!in_array($value,$maps))
  32. $maps[] = $value;
  33. }
  34. $issuepartynames = array_diff(array_unique(data_get($maps,'*.issuepartyname')),['','*',null]);
  35. $owner_codes = array_diff(array_unique(data_get($maps,'*.owner_code')),['','*',null]);
  36. $shops = Shop::query()->with('owner')
  37. ->whereHas('owner',function($query)use($owner_codes){
  38. $query->whereIn('code',$owner_codes);
  39. })->whereIn('name',$issuepartynames)->get();
  40. if($shops->count() < count($issuepartynames)){
  41. $shops_code = data_get($shops,'*.name');
  42. $issuepartynames = array_diff($issuepartynames,$shops_code);
  43. $params = [];
  44. foreach ($maps as $item){
  45. if(in_array($item['issuepartyname'],$issuepartynames))
  46. $params[] = $item;
  47. }
  48. $shops_list = $this->createByNameAndOwnerCode($params);
  49. $shops->concat($shops_list);
  50. }
  51. return $shops;
  52. }
  53. public function createByNameAndOwnerCode(array $params){
  54. $owners = Owner::query()
  55. ->whereIn('code',data_get($params,'*.owner_code'))
  56. ->get();
  57. $owners_map = [];
  58. foreach ($owners as $owner) {
  59. $owners_map[$owner->code] = $owner;
  60. }
  61. $insert_params = [];
  62. $created_at = Carbon::now()->format('Y-m-d H:i:s');
  63. foreach ($params as $param) {
  64. $owner = $owners_map[$param['owner_code']] ?? '';
  65. $insert_params[] = [
  66. 'name' => $param['issuepartyname'] ?? '',
  67. 'owner_id' => $owner['id'] ?? '',
  68. 'created_at' => $created_at,
  69. ];
  70. }
  71. try {
  72. if (count($insert_params) > 0) {
  73. $this->insert($insert_params);
  74. LogService::log(__METHOD__, __FUNCTION__, '批量创建 shop ' . count($insert_params) . json_encode($insert_params));
  75. }
  76. } catch (\Exception $e) {
  77. LogService::log(__METHOD__, __FUNCTION__, '批量创建 shop ' . json_encode($insert_params) .'||'.$e->getMessage().'||'.$e->getTraceAsString());
  78. } finally {
  79. return Shop::query()
  80. ->whereIn('name',data_get($params,'*.issuepartyname'))
  81. ->get();
  82. }
  83. }
  84. }