StoreAssociatedUserService.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. <?php
  2. namespace addons\Store\common\services;
  3. use addons\Store\common\enums\StoreEnum;
  4. use addons\Store\common\models\Store;
  5. use addons\Store\common\models\StoreAssociatedUser;
  6. use addons\Store\common\models\StoreTracking;
  7. use common\models\user\UserPartitionRelationship;
  8. use common\enums\StatusEnum;
  9. /**
  10. * 门店关联会员service
  11. * @package addons\Store\common\services
  12. */
  13. class StoreAssociatedUserService extends BaseService
  14. {
  15. public function getStoreAssociated($params)
  16. {
  17. $longitude = is_numeric($params['longitude']) ? $params['longitude'] : null;//经度
  18. $latitude = is_numeric($params['latitude']) ? $params['latitude'] : null;//纬度
  19. $store_id = $insert_data = null;
  20. $user_id = $params['user_id'];
  21. $mall_id = $params['mall_id'];
  22. $store_associated_user = StoreAssociatedUser::findOne(['mall_id' => $mall_id, 'user_id' => $user_id, 'status' => StatusEnum::ENABLED]);
  23. if (!empty($store_associated_user)) {
  24. $store_id = $store_associated_user->store_id;
  25. }
  26. if (empty($store_id)) {
  27. //没有绑定门店,根据用户最近上级的店长进行自动绑定门店
  28. $user_parent_arr = UserPartitionRelationship::getParentIdArr($user_id);
  29. $user_parent_arr[] = $user_id;
  30. $user_parent_arr = array_reverse($user_parent_arr);
  31. foreach ($user_parent_arr as $item) {
  32. $manager = Store::findOne(['mall_id' => $mall_id, 'user_id' => $item, 'status' => StatusEnum::ENABLED]);
  33. if ($manager) {
  34. $store_id = $manager->id;
  35. break;
  36. }
  37. }
  38. !empty($store_id) && $insert_data = [
  39. 'mall_id' => $mall_id,
  40. 'store_id' =>$store_id,
  41. 'user_id' => $user_id
  42. ];
  43. }
  44. if (empty($store_id)) {
  45. //查直属上级绑定的店
  46. $user = \common\models\user\User::findOne([
  47. ['id' => $user_id]
  48. ]);
  49. if ($user->parent_id > 0) {
  50. $parent_store_associated_user = StoreAssociatedUser::findOne(['mall_id' => $mall_id, 'user_id' => $user->parent_id, 'status' => StatusEnum::ENABLED]);
  51. if ($parent_store_associated_user) {
  52. $store_id = $parent_store_associated_user->store_id;
  53. $insert_data = [
  54. 'mall_id' => $mall_id,
  55. 'store_id' =>$store_id,
  56. 'user_id' => $user_id
  57. ];
  58. }
  59. }
  60. }
  61. if (empty($store_id) && $longitude && $latitude) {
  62. $status = StatusEnum::ENABLED;
  63. $shop_status = 1;
  64. $check_status = 1;
  65. $sql = " SELECT id,store_name,latitude,longitude,logo_img,sales_volume,praise,show_style,bannar_pic,address,is_show_coupon,default_store_cate_style,
  66. round(
  67. 2 * 6378.137 * ASIN(
  68. SQRT(
  69. POW(
  70. SIN(
  71. PI() * ({$longitude} - longitude) / 360
  72. ),
  73. 2
  74. ) + COS(PI() * {$latitude} / 180) * COS(latitude * PI() / 180) * POW(
  75. SIN(
  76. PI() * ({$latitude} - latitude) / 360
  77. ),
  78. 2
  79. )
  80. )
  81. )
  82. ,1) AS distance
  83. FROM `qimall_addons_store` WHERE (`mall_id`={$mall_id}) AND (`status`={$status}) AND (`shop_status`={$shop_status}) AND (`check_status`={$check_status})";
  84. $sql .= " order by distance asc limit 1";
  85. $list = \Yii::$app->db->createCommand($sql)->queryAll();
  86. if (!empty($list)) {
  87. $store_data = end($list);
  88. $store_id = $store_data['id'];
  89. $insert_data = [
  90. 'mall_id' => $mall_id,
  91. 'store_id' =>$store_id,
  92. 'user_id' => $user_id
  93. ];
  94. }
  95. }
  96. if (!empty($insert_data)) {
  97. StoreAssociatedUser::setData($insert_data);
  98. }
  99. return $store_id;
  100. }
  101. }