| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- <?php
- namespace common\components\delivery\services;
- //商户账号绑定管理
- use Yii;
- use bizGhs\express\classes\DeliveryAuthTokenClass;
- use common\components\delivery\platform\fengniao\Shop as FengniaoShop;
- use common\components\delivery\platform\huolala\Shop as HuolalaShop;
- use common\components\delivery\platform\shansong\Shop as ShansongShop;
- use common\components\delivery\platform\shunfeng\Shop as ShunfengShop;
- use common\components\delivery\services\adapter\FengniaoAdapter;
- /**
- * 聚合调度逻辑(平台选择/优先级)
- * Class DispatchService
- * @package App\Services
- */
- class ShopService
- {
- protected $adapters;
- protected $platformName = '';
- public function __construct($mainId, $platform = '')
- {
- if($platform == '') {
- $authPlatforms = DeliveryAuthTokenClass::getAllByCondition(['mainId' => $mainId]);
- foreach($authPlatforms as $pt) {
- switch($pt['platform']) {
- case 'shansong':
- $this->adapters['shansong'] = new ShansongShop($pt['accessToken']);
- break;
- case 'huolala':
- $this->adapters['huolala'] = new HuolalaShop($pt['accessToken']);
- break;
- case 'fengniao':
- $adapter = new FengniaoShop($pt['accessToken']);
- $adapter->setMerchantId($authPlatforms['merchantId']);
- $adapter->setShopId($authPlatforms['shopId']);
- $this->adapters['fengniao'] = $adapter;
- break;
- case 'shunfeng':
- $this->adapters['shunfeng'] = new ShunfengShop($pt['accessToken'], $pt['shopId']);
- break;
- }
- }
- } else {
- $authPlatform = DeliveryAuthTokenClass::getByCondition(['mainId' => $mainId, 'platform' => $platform]);
- switch($platform) {
- case 'shansong':
- $this->adapters['shansong'] = new ShansongShop($authPlatform['accessToken']);
- break;
- case 'huolala':
- $this->adapters['huolala'] = new HuolalaShop($authPlatform['accessToken']);
- break;
- case 'fengniao':
- //$this->adapters['fengniao'] = new FengniaoAdapter($authPlatform['accessToken']);
- $adapter = new FengniaoShop($authPlatform['accessToken']);
- $adapter->setMerchantId($authPlatform['merchantId']);
- $adapter->setShopId($authPlatform['shopId']);
- $this->adapters['fengniao'] = $adapter;
- break;
- case 'shunfeng':
- $this->adapters['shunfeng'] = new ShunfengShop($authPlatform['accessToken'], $authPlatform['shopId']);
- break;
- }
- $this->platformName = $platform;
- }
- }
- public function getAdapter()
- {
- return $this->adapters[$this->platformName];
- }
- public function getBalance($platform)
- {
- $ret = [];
- switch($platform) {
- case 'shansong':
- $adapter = $this->adapters[$platform];
- $ret = $adapter->getUserAccount();
- break;
- case 'huolala':
- $adapter = $this->adapters[$platform];
- $ret = $adapter->queryWalletBalance();
- break;
- case 'fengniao':
- $ret['success'] = false;
- $ret['balance'] = 0;
- $ret['message'] = '蜂鸟平台不支持查询余额';
- break;
- case 'shunfeng':
- $adapter = $this->adapters[$platform];
- $ret = $adapter->getShopAccountBalance();
- break;
- }
- return $ret['balance'];
- }
- /**
- * 获取商家的所有门店
- */
- public function getMerchantStores($platform)
- {
- $storeDatas = [];
- switch($platform) {
- case 'fengniao':
- /** @var FengniaoShop $shop */
- $shop = $this->adapters[$platform];
- $ret = $shop->chainstoreQueryList();
- $stores = $ret['data']['list'];
- break;
- }
- if($platform == 'fengniao') {
- $bindShopId = $shop->getShopId();
- foreach($stores as $store) {
- $storeDatas[] = [
- 'id' => $store['chain_store_id'],
- 'merchant_id' => $store['merchant_id'],
- 'out_shop_code' => $store['out_shop_code'],
- 'name' => $store['name'],
- 'address' => $store['address'],
- 'status' => $store['status'],
- 'status_desc' => $store['status'],
- 'latitude' => $store['latitude'],
- 'longitude' => $store['longitude'],
- 'bindStatus' => $bindShopId == $store['chain_store_id'] ? true : false,
- ];
- }
- }
- return $storeDatas;
- }
- public function bindStore($mainId, $platform, $storeId)
- {
- try {
- switch($platform) {
- case 'fengniao':
- /** @var FengniaoShop $shop */
- $shop = $this->adapters[$platform];
- $shop->bindStore($mainId, $storeId);
- break;
- }
- return true;
- } catch(\Exception $e) {
- Yii::error('绑定门店失败: ' . $e->getMessage());
- return false;
- }
- return true;
- }
- public function unbindStore($mainId, $platform, $storeId)
- {
- try {
- switch($platform) {
- case 'fengniao':
- /** @var FengniaoShop $shop */
- $shop = $this->adapters[$platform];
- $shop->unbindStore($mainId, $storeId);
- break;
- }
- return true;
- } catch(\Exception $e) {
- Yii::error('解绑门店失败: ' . $e->getMessage());
- return false;
- }
- return true;
- }
- }
|