| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- <?php
- namespace addons\Store\common\services;
- use addons\Store\common\enums\StoreEnum;
- use addons\Store\common\models\Store;
- use addons\Store\common\models\StoreAssociatedUser;
- use addons\Store\common\models\StoreTracking;
- use common\models\user\UserPartitionRelationship;
- use common\enums\StatusEnum;
- /**
- * 门店关联会员service
- * @package addons\Store\common\services
- */
- class StoreAssociatedUserService extends BaseService
- {
- public function getStoreAssociated($params)
- {
- $longitude = is_numeric($params['longitude']) ? $params['longitude'] : null;//经度
- $latitude = is_numeric($params['latitude']) ? $params['latitude'] : null;//纬度
- $store_id = $insert_data = null;
- $user_id = $params['user_id'];
- $mall_id = $params['mall_id'];
- $store_associated_user = StoreAssociatedUser::findOne(['mall_id' => $mall_id, 'user_id' => $user_id, 'status' => StatusEnum::ENABLED]);
- if (!empty($store_associated_user)) {
- $store_id = $store_associated_user->store_id;
- }
- if (empty($store_id)) {
- //没有绑定门店,根据用户最近上级的店长进行自动绑定门店
- $user_parent_arr = UserPartitionRelationship::getParentIdArr($user_id);
- $user_parent_arr[] = $user_id;
- $user_parent_arr = array_reverse($user_parent_arr);
- foreach ($user_parent_arr as $item) {
- $manager = Store::findOne(['mall_id' => $mall_id, 'user_id' => $item, 'status' => StatusEnum::ENABLED]);
- if ($manager) {
- $store_id = $manager->id;
- break;
- }
- }
- !empty($store_id) && $insert_data = [
- 'mall_id' => $mall_id,
- 'store_id' =>$store_id,
- 'user_id' => $user_id
- ];
- }
- if (empty($store_id)) {
- //查直属上级绑定的店
- $user = \common\models\user\User::findOne([
- ['id' => $user_id]
- ]);
- if ($user->parent_id > 0) {
- $parent_store_associated_user = StoreAssociatedUser::findOne(['mall_id' => $mall_id, 'user_id' => $user->parent_id, 'status' => StatusEnum::ENABLED]);
- if ($parent_store_associated_user) {
- $store_id = $parent_store_associated_user->store_id;
- $insert_data = [
- 'mall_id' => $mall_id,
- 'store_id' =>$store_id,
- 'user_id' => $user_id
- ];
- }
- }
- }
- if (empty($store_id) && $longitude && $latitude) {
- $status = StatusEnum::ENABLED;
- $shop_status = 1;
- $check_status = 1;
- $sql = " SELECT id,store_name,latitude,longitude,logo_img,sales_volume,praise,show_style,bannar_pic,address,is_show_coupon,default_store_cate_style,
- round(
- 2 * 6378.137 * ASIN(
- SQRT(
- POW(
- SIN(
- PI() * ({$longitude} - longitude) / 360
- ),
- 2
- ) + COS(PI() * {$latitude} / 180) * COS(latitude * PI() / 180) * POW(
- SIN(
- PI() * ({$latitude} - latitude) / 360
- ),
- 2
- )
- )
- )
- ,1) AS distance
- FROM `qimall_addons_store` WHERE (`mall_id`={$mall_id}) AND (`status`={$status}) AND (`shop_status`={$shop_status}) AND (`check_status`={$check_status})";
- $sql .= " order by distance asc limit 1";
- $list = \Yii::$app->db->createCommand($sql)->queryAll();
- if (!empty($list)) {
- $store_data = end($list);
- $store_id = $store_data['id'];
- $insert_data = [
- 'mall_id' => $mall_id,
- 'store_id' =>$store_id,
- 'user_id' => $user_id
- ];
- }
- }
- if (!empty($insert_data)) {
- StoreAssociatedUser::setData($insert_data);
- }
- return $store_id;
- }
- }
|