ShopService.php 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. <?php
  2. namespace common\components\delivery\services;
  3. //商户账号绑定管理
  4. use Yii;
  5. use bizGhs\express\classes\DeliveryAuthTokenClass;
  6. use common\components\delivery\platform\fengniao\Shop as FengniaoShop;
  7. use common\components\delivery\platform\huolala\Shop as HuolalaShop;
  8. use common\components\delivery\platform\shansong\Shop as ShansongShop;
  9. use common\components\delivery\platform\shunfeng\Shop as ShunfengShop;
  10. use common\components\delivery\services\adapter\FengniaoAdapter;
  11. /**
  12. * 聚合调度逻辑(平台选择/优先级)
  13. * Class DispatchService
  14. * @package App\Services
  15. */
  16. class ShopService
  17. {
  18. protected $adapters;
  19. protected $platformName = '';
  20. public function __construct($mainId, $platform = '')
  21. {
  22. if($platform == '') {
  23. $authPlatforms = DeliveryAuthTokenClass::getAllByCondition(['mainId' => $mainId]);
  24. foreach($authPlatforms as $pt) {
  25. switch($pt['platform']) {
  26. case 'shansong':
  27. $this->adapters['shansong'] = new ShansongShop($pt['accessToken']);
  28. break;
  29. case 'huolala':
  30. $this->adapters['huolala'] = new HuolalaShop($pt['accessToken']);
  31. break;
  32. case 'fengniao':
  33. $adapter = new FengniaoShop($pt['accessToken']);
  34. $adapter->setMerchantId($authPlatforms['merchantId']);
  35. $adapter->setShopId($authPlatforms['shopId']);
  36. $this->adapters['fengniao'] = $adapter;
  37. break;
  38. case 'shunfeng':
  39. $this->adapters['shunfeng'] = new ShunfengShop($pt['accessToken'], $pt['shopId']);
  40. break;
  41. }
  42. }
  43. } else {
  44. $authPlatform = DeliveryAuthTokenClass::getByCondition(['mainId' => $mainId, 'platform' => $platform]);
  45. switch($platform) {
  46. case 'shansong':
  47. $this->adapters['shansong'] = new ShansongShop($authPlatform['accessToken']);
  48. break;
  49. case 'huolala':
  50. $this->adapters['huolala'] = new HuolalaShop($authPlatform['accessToken']);
  51. break;
  52. case 'fengniao':
  53. //$this->adapters['fengniao'] = new FengniaoAdapter($authPlatform['accessToken']);
  54. $adapter = new FengniaoShop($authPlatform['accessToken']);
  55. $adapter->setMerchantId($authPlatform['merchantId']);
  56. $adapter->setShopId($authPlatform['shopId']);
  57. $this->adapters['fengniao'] = $adapter;
  58. break;
  59. case 'shunfeng':
  60. $this->adapters['shunfeng'] = new ShunfengShop($authPlatform['accessToken'], $authPlatform['shopId']);
  61. break;
  62. }
  63. $this->platformName = $platform;
  64. }
  65. }
  66. public function getAdapter()
  67. {
  68. return $this->adapters[$this->platformName];
  69. }
  70. public function getBalance($platform)
  71. {
  72. $ret = [];
  73. switch($platform) {
  74. case 'shansong':
  75. $adapter = $this->adapters[$platform];
  76. $ret = $adapter->getUserAccount();
  77. break;
  78. case 'huolala':
  79. $adapter = $this->adapters[$platform];
  80. $ret = $adapter->queryWalletBalance();
  81. break;
  82. case 'fengniao':
  83. $ret['success'] = false;
  84. $ret['balance'] = 0;
  85. $ret['message'] = '蜂鸟平台不支持查询余额';
  86. break;
  87. case 'shunfeng':
  88. $adapter = $this->adapters[$platform];
  89. $ret = $adapter->getShopAccountBalance();
  90. break;
  91. }
  92. return $ret['balance'];
  93. }
  94. /**
  95. * 获取商家的所有门店
  96. */
  97. public function getMerchantStores($platform)
  98. {
  99. $storeDatas = [];
  100. switch($platform) {
  101. case 'fengniao':
  102. /** @var FengniaoShop $shop */
  103. $shop = $this->adapters[$platform];
  104. $ret = $shop->chainstoreQueryList();
  105. $stores = $ret['data']['list'];
  106. break;
  107. }
  108. if($platform == 'fengniao') {
  109. $bindShopId = $shop->getShopId();
  110. foreach($stores as $store) {
  111. $storeDatas[] = [
  112. 'id' => $store['chain_store_id'],
  113. 'merchant_id' => $store['merchant_id'],
  114. 'out_shop_code' => $store['out_shop_code'],
  115. 'name' => $store['name'],
  116. 'address' => $store['address'],
  117. 'status' => $store['status'],
  118. 'status_desc' => $store['status'],
  119. 'latitude' => $store['latitude'],
  120. 'longitude' => $store['longitude'],
  121. 'bindStatus' => $bindShopId == $store['chain_store_id'] ? true : false,
  122. ];
  123. }
  124. }
  125. return $storeDatas;
  126. }
  127. public function bindStore($mainId, $platform, $storeId)
  128. {
  129. try {
  130. switch($platform) {
  131. case 'fengniao':
  132. /** @var FengniaoShop $shop */
  133. $shop = $this->adapters[$platform];
  134. $shop->bindStore($mainId, $storeId);
  135. break;
  136. }
  137. return true;
  138. } catch(\Exception $e) {
  139. Yii::error('绑定门店失败: ' . $e->getMessage());
  140. return false;
  141. }
  142. return true;
  143. }
  144. public function unbindStore($mainId, $platform, $storeId)
  145. {
  146. try {
  147. switch($platform) {
  148. case 'fengniao':
  149. /** @var FengniaoShop $shop */
  150. $shop = $this->adapters[$platform];
  151. $shop->unbindStore($mainId, $storeId);
  152. break;
  153. }
  154. return true;
  155. } catch(\Exception $e) {
  156. Yii::error('解绑门店失败: ' . $e->getMessage());
  157. return false;
  158. }
  159. return true;
  160. }
  161. }