MemberLevelController.php 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. <?php
  2. /**
  3. * Author: 芸众商城 www.yunzshop.com
  4. * Date: 2017/12/8
  5. * Time: 上午11:54
  6. */
  7. namespace app\frontend\modules\member\controllers;
  8. use app\common\components\ApiController;
  9. use app\common\facades\Setting;
  10. use app\frontend\modules\member\models\MemberLevel;
  11. use app\common\services\goods\LeaseToyGoods;
  12. use Yunshop\LeaseToy\models\LevelRightsModel;
  13. use app\frontend\modules\member\models\MemberModel;
  14. class MemberLevelController extends ApiController
  15. {
  16. protected $settingLevel;
  17. public function preAction()
  18. {
  19. parent::preAction();
  20. /**
  21. * 会员等级的升级的规则
  22. */
  23. $this->settingLevel = Setting::get('shop.member');
  24. }
  25. /**
  26. * 等级信息
  27. */
  28. public function index()
  29. {
  30. if (!$this->settingLevel) return $this->errorJson('未进行等级设置');
  31. //升级条件判断
  32. if ($this->settingLevel['level_type'] == 2) {
  33. $data = MemberLevel::getLevelGoods();
  34. $bool = LeaseToyGoods::whetherEnabled();
  35. //商品图片处理
  36. foreach ($data as &$value) {
  37. $value['rent_free'] = null;
  38. $value['deposit_free'] = null;
  39. if ($bool) {
  40. $levelRights = LevelRightsModel::getRights($value['id']);
  41. if ($levelRights) {
  42. $value['rent_free'] = $levelRights->rent_free ? $levelRights->rent_free : 0;
  43. $value['deposit_free'] = $levelRights->deposit_free ? $levelRights->deposit_free : 0;
  44. }
  45. }
  46. }
  47. } else {
  48. $data = MemberLevel::getLevelData($this->settingLevel['level_type']);
  49. }
  50. //会员信息
  51. $uid = \Yunshop::app()->getMemberId();
  52. $member_info = $this->getUserInfo($uid);
  53. if (!empty($member_info)) {
  54. $member_info = $member_info->toArray();
  55. if (!empty($member_info['yz_member']['level'])) {
  56. $memberData['level_id'] = $member_info['yz_member']['level']['id'];
  57. $memberData['level_name'] = $member_info['yz_member']['level']['level_name'];
  58. $memberData['rights'] = [
  59. 'discount' => $member_info['yz_member']['level']['discount'] ? $member_info['yz_member']['level']['discount'] : 0,
  60. 'freight_reduction' => $member_info['yz_member']['level']['freight_reduction'] ? $member_info['yz_member']['level']['freight_reduction'] : 0,
  61. 'rent_free' => null,
  62. 'deposit_free' => null,
  63. ];
  64. if ($bool) {
  65. $levelRights = LevelRightsModel::getRights($member_info['yz_member']['level']['id']);
  66. $memberData['rights']['rent_free'] = $levelRights->rent_free ? $levelRights->rent_free : 0;
  67. $memberData['rights']['deposit_free'] = $levelRights->deposit_free ? $levelRights->deposit_free : 0;
  68. }
  69. } else {
  70. $memberData['level_id'] = 0;
  71. $memberData['level_name'] = $this->settingLevel['level_name'] ? $this->settingLevel['level_name'] : '普通会员';
  72. }
  73. $memberData['nickname'] = $member_info['nickname'];
  74. if (!empty($member_info['avatar']) && strexists($member_info['avatar'], 'http://')) {
  75. $memberData['avatar'] = 'https:' . substr($member_info['avatar'], strpos($member_info['avatar'], '//'));
  76. }
  77. $memberData['avatar'] = $member_info['avatar'];
  78. $memberData['validity'] = $member_info['yz_member']['validity'] && $this->settingLevel['term'] ? $member_info['yz_member']['validity'] : 0;
  79. }
  80. $shopSet = \Setting::get('shop.shop');
  81. foreach ((new ServiceController())->index() as $k => $v) {
  82. $shopSet[$k] = $v;
  83. }
  84. $shopContact = \Setting::get('shop.contact');
  85. $levelData = [
  86. 'member_data' => $memberData,
  87. 'level_type' => $this->settingLevel['level_type'],
  88. 'data' => $data,
  89. 'shop_set' => $shopSet,
  90. 'balance_recharge' => Setting::get('finance.balance.recharge'),
  91. 'shop_description' => html_entity_decode(nl2br($shopContact['description'])),
  92. ];
  93. return $this->successJson('ok', $levelData);
  94. }
  95. /**
  96. * 会员升级详情 //等待修改
  97. * @return [json] [detail]
  98. */
  99. public function upgradeDetail()
  100. {
  101. $id = intval(\YunShop::request()->id);
  102. if (!$id) {
  103. return $this->errorJson('参数无效');
  104. }
  105. if ($this->settingLevel['level_type'] != 2) {
  106. return $this->errorJson('暂不支持该升级条件...');
  107. }
  108. $detail = MemberLevel::uniacid()
  109. ->with(['goods' => function ($query) {
  110. return $query->select('id', 'title', 'thumb', 'price');
  111. }])->find($id);
  112. //是否开启租赁
  113. $bool = LeaseToyGoods::whetherEnabled();
  114. $detail->rent_free = null;
  115. $detail->deposit_free = null;
  116. if ($bool) {
  117. $levelRights = LevelRightsModel::getRights($id);
  118. if ($levelRights) {
  119. $detail->rent_free = $levelRights->rent_free ? $levelRights->rent_free : 0;
  120. $detail->deposit_free = $levelRights->deposit_free ? $levelRights->deposit_free : 0;
  121. }
  122. }
  123. $detail->goods->thumb = replace_yunshop(yz_tomedia($detail->goods->thumb));
  124. // $detail->interests_rules = html_entity_decode($detail->interests_rules);
  125. //升级条件不为 2
  126. // $detail = MemberLevel::uniacid()->find($id);
  127. // $detail->interests_rules = html_entity_decode($detail->interests_rules);
  128. $detail->level_type = $this->settingLevel['level_type'];
  129. return $this->successJson('leveldetail', $detail);
  130. }
  131. //获取用户数据
  132. public function getUserInfo($member_id)
  133. {
  134. return MemberModel::select(['*'])
  135. ->uniacid()
  136. ->where('uid', $member_id)
  137. ->whereHas('yzMember', function ($query) use ($member_id) {
  138. $query->where('member_id', $member_id)->whereNull('deleted_at');
  139. })
  140. ->with(['yzMember' => function ($query) {
  141. return $query->select(['*'])->where('is_black', 0)
  142. ->with(['level' => function ($query2) {
  143. return $query2->select(['id', 'level_name', 'discount', 'freight_reduction']);
  144. }]);
  145. }])->first();
  146. }
  147. public function isOpen()
  148. {
  149. $info['is_open'] = 0;
  150. //判断是否显示等级页
  151. if ($this->settingLevel['display_page']) {
  152. $info['is_open'] = 1;
  153. }
  154. $info['level_type'] = $this->settingLevel['level_type'] ?: '0';
  155. return $this->successJson('是否开启', $info);
  156. }
  157. public function getLevelsGoods()
  158. {
  159. $id = intval(\YunShop::request()->id);
  160. $data = MemberLevel::uniacid()->where('id', $id)->select('goods_id')->first();
  161. if (!$data) {
  162. return $this->errorJson('暂无商品数据');
  163. }
  164. $goods_ids = explode(',', $data->goods_id);
  165. $goods = \app\common\models\Goods::select(['id', 'title', 'thumb', 'price', 'status'])->whereIn('id', $goods_ids)->get();
  166. if (!$goods->isEmpty()) {
  167. $goods->map(function ($item) {
  168. $item->thumb = yz_tomedia($item['thumb']);
  169. });
  170. }
  171. return $this->successJson('ok', $goods);
  172. }
  173. }