ShopService.php 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. <?php
  2. namespace common\components\delivery\services;
  3. //商户账号绑定管理
  4. use common\components\delivery\platform\dada\Dada;
  5. use Yii;
  6. use bizGhs\express\classes\DeliveryAuthTokenClass;
  7. use common\components\delivery\platform\fengniao\Shop as FengniaoShop;
  8. use common\components\delivery\platform\huolala\Shop as HuolalaShop;
  9. use common\components\delivery\platform\shansong\Shop as ShansongShop;
  10. use common\components\delivery\platform\shunfeng\Shop as ShunfengShop;
  11. use common\components\delivery\platform\didi\Didi;
  12. use common\components\util;
  13. /**
  14. * 聚合调度逻辑(平台选择/优先级)
  15. * Class DispatchService
  16. * @package App\Services
  17. */
  18. class ShopService
  19. {
  20. protected $adapters;
  21. protected $platformName = '';
  22. public function __construct($mainId, $platform = '')
  23. {
  24. if($platform == '') {
  25. $authPlatforms = DeliveryAuthTokenClass::getAllByCondition(['mainId' => $mainId]);
  26. foreach($authPlatforms as $pt) {
  27. switch($pt['platform']) {
  28. case 'shansong':
  29. $this->adapters['shansong'] = new ShansongShop($pt['accessToken'], $pt['shopId']);
  30. break;
  31. case 'huolala':
  32. $this->adapters['huolala'] = new HuolalaShop($pt['accessToken']);
  33. break;
  34. case 'fengniao':
  35. $adapter = new FengniaoShop($pt['accessToken']);
  36. $adapter->setMerchantId($authPlatforms['merchantId']);
  37. $adapter->setShopId($authPlatforms['shopId']);
  38. $this->adapters['fengniao'] = $adapter;
  39. break;
  40. case 'shunfeng':
  41. $this->adapters['shunfeng'] = new ShunfengShop($pt, $pt['shopId']);
  42. break;
  43. case 'dada':
  44. $this->adapters['dada'] = new Dada($pt['accessToken'], $pt['shopId'], $pt['merchantId']);
  45. break;
  46. case 'didi':
  47. $this->adapters['didi'] = new Didi($pt['accessToken'], $pt['mainId']);
  48. break;
  49. }
  50. }
  51. } else {
  52. $authPlatform = DeliveryAuthTokenClass::getByCondition(['mainId' => $mainId, 'platform' => $platform]);
  53. switch($platform) {
  54. case 'shansong':
  55. $this->adapters['shansong'] = new ShansongShop($authPlatform['accessToken'], $authPlatform['shopId']);
  56. break;
  57. case 'huolala':
  58. $this->adapters['huolala'] = new HuolalaShop($authPlatform['accessToken']);
  59. break;
  60. case 'fengniao':
  61. $adapter = new FengniaoShop($authPlatform['accessToken']);
  62. $adapter->setMerchantId($authPlatform['merchantId']);
  63. $adapter->setShopId($authPlatform['shopId']);
  64. $this->adapters['fengniao'] = $adapter;
  65. break;
  66. case 'shunfeng':
  67. $this->adapters['shunfeng'] = new ShunfengShop($authPlatform, $authPlatform['shopId']);
  68. break;
  69. case 'dada':
  70. $this->adapters['dada'] = new Dada($authPlatform['accessToken'], $authPlatform['shopId'], $authPlatform['merchantId']);
  71. break;
  72. case 'didi':
  73. $this->adapters['didi'] = new Didi($authPlatform['accessToken'], $authPlatform['mainId']);
  74. break;
  75. }
  76. $this->platformName = $platform;
  77. }
  78. }
  79. public function getAdapter()
  80. {
  81. return $this->adapters[$this->platformName];
  82. }
  83. public function getBalance($platform)
  84. {
  85. $ret = [];
  86. switch($platform) {
  87. case 'shansong':
  88. /** @var ShansongShop $adapter */
  89. $adapter = $this->adapters[$platform];
  90. $ret = $adapter->getUserAccount();
  91. break;
  92. case 'huolala':
  93. /** @var HuolalaShop $adapter */
  94. $adapter = $this->adapters[$platform];
  95. $ret = $adapter->queryWalletBalance();
  96. break;
  97. case 'fengniao':
  98. /** @var FengniaoShop $adapter */
  99. $adapter = $this->adapters[$platform];
  100. $ret = $adapter->getShopAccountBalance();
  101. break;
  102. case 'shunfeng':
  103. /** @var ShunfengShop $adapter */
  104. $adapter = $this->adapters[$platform];
  105. $ret = $adapter->getShopAccountBalance();
  106. break;
  107. case 'dada':
  108. /** @var Dada $adapter */
  109. $adapter = $this->adapters[$platform];
  110. $ret = $adapter->balance();
  111. break;
  112. case 'didi':
  113. /** @var Didi $adapter */
  114. $adapter = $this->adapters[$platform];
  115. $ret = $adapter->walletBalance();
  116. break;
  117. default:
  118. Yii::error("查询用户余额的平台{$platform}不存在");
  119. util::fail("查询用户余额的平台{$platform}不存在");
  120. }
  121. if($ret['success'] === false){
  122. Yii::error("查询{$platform}帐户余额:{$ret['message']}");
  123. util::fail("查询帐户余额失败: {$ret['message']}");
  124. }
  125. return $ret['balance'];
  126. }
  127. /**
  128. * 获取商家的所有门店
  129. */
  130. public function getMerchantStores($platform)
  131. {
  132. $storeDatas = [];
  133. switch($platform) {
  134. case 'fengniao':
  135. /** @var FengniaoShop $shop */
  136. $shop = $this->adapters[$platform];
  137. $ret = $shop->chainstoreQueryList();
  138. $stores = $ret['data']['list'];
  139. break;
  140. }
  141. if($platform == 'fengniao') {
  142. $bindShopId = $shop->getShopId();
  143. foreach($stores as $store) {
  144. $storeDatas[] = [
  145. 'id' => $store['chain_store_id'],
  146. 'merchant_id' => $store['merchant_id'],
  147. 'out_shop_code' => $store['out_shop_code'],
  148. 'name' => $store['name'],
  149. 'address' => $store['address'],
  150. 'status' => $store['status'],
  151. 'status_desc' => $store['status'],
  152. 'latitude' => $store['latitude'],
  153. 'longitude' => $store['longitude'],
  154. 'bindStatus' => $bindShopId == $store['chain_store_id'] ? true : false,
  155. ];
  156. }
  157. }
  158. return $storeDatas;
  159. }
  160. public function bindStore($mainId, $platform, $storeId)
  161. {
  162. try {
  163. switch($platform) {
  164. case 'fengniao':
  165. /** @var FengniaoShop $shop */
  166. $shop = $this->adapters[$platform];
  167. $shop->bindStore($mainId, $storeId);
  168. break;
  169. }
  170. return true;
  171. } catch(\Exception $e) {
  172. Yii::error('绑定门店失败: ' . $e->getMessage());
  173. return false;
  174. }
  175. }
  176. public function unbindStore($mainId, $platform, $storeId)
  177. {
  178. try {
  179. switch($platform) {
  180. case 'fengniao':
  181. /** @var FengniaoShop $shop */
  182. $shop = $this->adapters[$platform];
  183. $shop->unbindStore($mainId, $storeId);
  184. break;
  185. }
  186. return true;
  187. } catch(\Exception $e) {
  188. Yii::error('解绑门店失败: ' . $e->getMessage());
  189. return false;
  190. }
  191. return true;
  192. }
  193. public function storeDetail($mainId, $platform, $storeId)
  194. {
  195. try {
  196. switch($platform) {
  197. case 'shunfeng':
  198. /** @var ShunfengShop $shop */
  199. $shop = $this->adapters[$platform];
  200. $ret = $shop->getShopInfo($storeId, 1);
  201. break;
  202. }
  203. return $ret;
  204. } catch(\Exception $e) {
  205. Yii::error('获取门店信息失败: ' . $e->getMessage());
  206. return false;
  207. }
  208. }
  209. public function updateStore($shopId, $platform, $post)
  210. {
  211. try {
  212. switch($platform) {
  213. case 'shunfeng':
  214. /** @var ShunfengShop $shop */
  215. $shop = $this->adapters[$platform];
  216. $ret = $shop->updateshop($shopId, $post);
  217. break;
  218. }
  219. return $ret;
  220. } catch(\Exception $e) {
  221. Yii::error('获取门店信息失败: ' . $e->getMessage());
  222. return false;
  223. }
  224. }
  225. }