MemberRelationController.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * Author: 芸众商城 www.yunzshop.com
  5. * Date: 17/3/8
  6. * Time: 上午10:11
  7. */
  8. namespace app\backend\modules\member\controllers;
  9. use app\backend\modules\member\models\Member;
  10. use app\backend\modules\member\models\MemberRelation;
  11. use app\backend\modules\member\models\MemberShopInfo;
  12. use app\backend\modules\member\services\FansItemService;
  13. use app\common\components\BaseController;
  14. use app\backend\modules\member\models\MemberRelation as Relation;
  15. use app\common\facades\Setting;
  16. use app\common\helpers\Cache;
  17. use app\common\helpers\PaginationHelper;
  18. use app\common\helpers\Url;
  19. use app\common\models\Goods;
  20. use app\common\models\notice\MessageTemp;
  21. use app\common\services\ExportService;
  22. use Illuminate\Database\Eloquent\Collection;
  23. class MemberRelationController extends BaseController
  24. {
  25. public $pageSize = 20;
  26. /**
  27. * 加载模板
  28. * @return string
  29. * @throws \Throwable
  30. */
  31. public function index()
  32. {
  33. return view('member.relation', [])->render();
  34. }
  35. /**
  36. * 列表
  37. * @return string
  38. * @throws \Throwable
  39. */
  40. public function show()
  41. {
  42. $relation = Relation::uniacid()->first();
  43. $setting = \Setting::get('member.relation');
  44. if (!empty($relation)) {
  45. $relation = $relation->toArray();
  46. }
  47. if (!empty($relation['become_term'])) {
  48. $relation['become_term'] = unserialize($relation['become_term']);
  49. }
  50. if (!empty($relation['become_goods'])) {
  51. $relation_goods = unserialize($relation['become_goods']);
  52. $goods_ids = [];
  53. foreach ($relation_goods as $item) {
  54. $goods_ids[] = $item['goods_id'];
  55. }
  56. // 查询当前未被删除的商品
  57. $current_goods = Goods::uniacid()->select('id', 'title', 'thumb')
  58. ->whereIn('id', $goods_ids)
  59. ->whereNull('deleted_at')
  60. ->get();
  61. if ($current_goods) {
  62. $current_goods = $current_goods->toArray();
  63. foreach ($current_goods as $key => $value) {
  64. $current_goods[$key]['thumb'] = yz_tomedia($value['thumb']);
  65. }
  66. $goods = $current_goods;
  67. } else {
  68. $goods = [];
  69. }
  70. } else {
  71. $goods = [];
  72. }
  73. $relationship = [
  74. 'status' => $relation['status'],
  75. 'become' => $relation['become'],
  76. 'become_term2' => empty($relation['become_term'][2]) ? "" : 2,
  77. 'become_ordercount' => $relation['become_ordercount'],
  78. 'become_term3' => empty($relation['become_term'][3]) ? "" : 3,
  79. 'become_moneycount' => $relation['become_moneycount'],
  80. 'become_term4' => empty($relation['become_term'][4]) ? "" : 4,
  81. 'goods' => $goods,
  82. 'is_sales_commission' => app('plugins')->isEnabled('sales-commission') ? 1 : 0,
  83. 'become_term5' => empty($relation['become_term'][5]) ? "" : 5,
  84. 'become_selfmoney' => $relation['become_selfmoney'],
  85. 'become_order' => $relation['become_order'],
  86. 'become_child' => $relation['become_child'],
  87. 'become_check' => $relation['become_check'],
  88. ];
  89. $reward = [
  90. 'reward_points' => $relation['reward_points'],
  91. 'maximum_number' => $relation['maximum_number']
  92. ];
  93. $page = [
  94. 'is_jump' => $setting['is_jump'],
  95. 'jump_link' => $setting['jump_link'],
  96. 'small_jump_link' => $setting['small_jump_link'],
  97. 'share_page' => $relation['share_page'],
  98. 'share_page_deail' => $relation['share_page_deail'],
  99. ];
  100. return $this->successJson('ok', [
  101. 'relationship' => $relationship,
  102. 'reward' => $reward,
  103. 'page' => $page
  104. ]);
  105. }
  106. /**
  107. * 保存关系链数据
  108. *
  109. * @return mixed
  110. */
  111. public function save()
  112. {
  113. $setData = $this->setData(\YunShop::request()->setdata);
  114. $setting = \YunShop::request()->setting;
  115. if ($setting) {
  116. \Setting::set('member.relation', $setting);
  117. }
  118. $setData['uniacid'] = \YunShop::app()->uniacid;
  119. if (empty($setData['become_order'])) {
  120. $setData['become_order'] = 0;
  121. }
  122. if (empty($setData['become_ordercount'])) {
  123. $setData['become_ordercount'] = 0;
  124. }
  125. if (!empty($setData['become_term'])) {
  126. $setData['become_term'] = serialize($setData['become_term']);
  127. } else {
  128. $setData['become_term'] = '';
  129. }
  130. if (empty($setData['become_moneycount'])) {
  131. $setData['become_moneycount'] = 0;
  132. }
  133. $setData['become_goods_id'] = !empty($setData['become_goods_id']) ? implode(
  134. ',',
  135. $setData['become_goods_id']
  136. ) : 0;
  137. $setData['become_goods'] = !empty($setData['become_goods']) ? serialize($setData['become_goods']) : 0;
  138. // dd($setData['become_goods']);
  139. if (empty($setData['become_selfmoney'])) {
  140. $setData['become_selfmoney'] = 0;
  141. }
  142. $relation = Relation::uniacid()->first();
  143. if (!empty($relation)) {
  144. $relation->setRawAttributes($setData);
  145. (new \app\common\services\operation\RelationLog($relation, 'update'));
  146. $relation->save();
  147. } else {
  148. Relation::create($setData);
  149. }
  150. Cache::forget('member_relation');
  151. return $this->successJson('ok', ['data' => true]);
  152. }
  153. /**
  154. * 成为推广员 指定商品查询
  155. *
  156. * @return string
  157. */
  158. public function query()
  159. {
  160. $kwd = trim(\YunShop::request()->keyword);
  161. $goods_model = Goods::getGoodsByNameNew($kwd);
  162. if (!empty($goods_model)) {
  163. $data = $goods_model->toArray();
  164. foreach ($data['data'] as &$good) {
  165. $good['thumb'] = tomedia($good['thumb']);
  166. }
  167. } else {
  168. $data = [];
  169. }
  170. return $this->successJson('ok', $data);
  171. }
  172. /**
  173. * 加载模板 -- 资格申请
  174. * @return string
  175. * @throws \Throwable
  176. */
  177. public function apply()
  178. {
  179. return view('member.apply', [])->render();
  180. }
  181. /**
  182. * 会员资格申请列表
  183. *
  184. * @return string
  185. */
  186. public function applyShow()
  187. {
  188. $requestSearch = \YunShop::request()->search;
  189. $list = Member::getMembersToApply($requestSearch)
  190. ->paginate($this->pageSize)
  191. ->toArray();
  192. return $this->successJson('ok', [
  193. 'list' => (new FansItemService())->setFansItem($list),
  194. 'total' => $list['total'],
  195. 'requestSearch' => $requestSearch
  196. ]);
  197. }
  198. /**
  199. * 申请协议
  200. *
  201. * @return mixed|string
  202. */
  203. public function applyProtocol()
  204. {
  205. $info = Setting::get("apply_protocol");
  206. $requestProtocol = \YunShop::request()->protocol;
  207. if ($requestProtocol) {
  208. $request = Setting::set('apply_protocol', $requestProtocol);
  209. if ($request) {
  210. return $this->message('保存成功', Url::absoluteWeb('member.member-relation.apply-protocol'));
  211. }
  212. }
  213. return $this->successJson('ok', ['info' => $info]);
  214. }
  215. public function base()
  216. {
  217. return view('member.relation-base', [])->render();
  218. }
  219. public function relationBase()
  220. {
  221. $info = \Setting::get('shop.relation_base');
  222. $base = \YunShop::request()->base;
  223. if ($base) {
  224. $request = Setting::set('shop.relation_base', $base);
  225. if ($request) {
  226. return $this->successJson('数据保存成功', $request);
  227. }
  228. }
  229. $temp_list = MessageTemp::getList();
  230. $notice = [
  231. 'member_agent' => $info['member_agent'],
  232. 'member_new_lower' => $info['member_new_lower'],
  233. ];
  234. $member_relation = [
  235. 'is_referrer' => empty($info['is_referrer']) ? '0' : $info['is_referrer'],
  236. 'parent_is_referrer' => empty($info['parent_is_referrer']) ? '0' : $info['parent_is_referrer'],
  237. 'is_recommend_wechat' => empty($info['is_recommend_wechat']) ? '0' : $info['is_recommend_wechat'],
  238. 'one_level' => $info['relation_level'][0],
  239. 'name1' => $info['relation_level']['name1'],
  240. 'two_level' => $info['relation_level'][1],
  241. 'name2' => $info['relation_level']['name2'],
  242. 'phone' => $info['relation_level']['phone'],
  243. 'realname' => $info['relation_level']['realname'],
  244. 'wechat' => $info['relation_level']['wechat'],
  245. 'is_statistical_goods' => $info['is_statistical_goods'],
  246. 'statistical_goods' => $info['statistical_goods']
  247. ];
  248. $member_merge = [
  249. 'is_member_merge' => $info['is_member_merge'],
  250. 'is_merge_save_level' => empty($info['is_merge_save_level']) ? 0 : $info['is_merge_save_level']
  251. ];
  252. return $this->successJson('ok', [
  253. 'banner' => yz_tomedia($info['banner']),
  254. 'notice' => $notice,
  255. 'temp_list' => $temp_list,
  256. 'member_relation' => $member_relation,
  257. 'member_merge' => $member_merge,
  258. ]);
  259. }
  260. /**
  261. * 验证是否开启默认模板
  262. * @return \Illuminate\Http\JsonResponse
  263. */
  264. public function getIsDefaultById()
  265. {
  266. if (MessageTemp::uniacid()->where('id', request()->id)->where('is_default', 1)->first()) {
  267. return $this->successJson('ok', ['data' => true]);
  268. }
  269. return $this->successJson('ok', ['data' => false]);
  270. }
  271. /**
  272. * 检查审核
  273. *
  274. * @return \Illuminate\Http\JsonResponse
  275. */
  276. public function chkApply()
  277. {
  278. $id = \YunShop::request()->id;
  279. $member_shop_info_model = MemberShopInfo::getMemberShopInfo($id);
  280. if ($member_shop_info_model) {
  281. $member_shop_info_model->is_agent = 1;
  282. $member_shop_info_model->status = 2;
  283. if ($member_shop_info_model->inviter == 0) {
  284. $member_shop_info_model->inviter = 1;
  285. }
  286. if ($member_shop_info_model->save()) {
  287. Member::setMemberRelation($member_shop_info_model->member_id, $member_shop_info_model->parent_id);
  288. Relation::sendGeneralizeNotify($member_shop_info_model->member_id);
  289. return $this->successJson('审核通过', ['data' => true]);
  290. } else {
  291. return $this->errorJson('审核失败');
  292. }
  293. } else {
  294. return $this->errorJson('会员不存在');
  295. }
  296. }
  297. /**
  298. * 数据导出
  299. *
  300. */
  301. public function export()
  302. {
  303. $file_name = date('Ymdhis', time()) . '会员资格申请导出';
  304. $requestSearch = \YunShop::request()->search;
  305. $list = Member::getMembersToApply($requestSearch);
  306. $export_page = request()->export_page ? request()->export_page : 1;
  307. $export_model = new ExportService($list, $export_page);
  308. $file_name = date('Ymdhis', time()) . '会员导出' . $export_page;
  309. $export_data[0] = ['会员ID', '推荐人姓名', '粉丝姓名', '会员姓名', '手机号', '申请时间'];
  310. foreach ($list->get()->toArray() as $key => $item) {
  311. if (!empty($item['yz_member']) && !empty($item['yz_member']['agent'])) {
  312. $agent_name = $item['yz_member']['agent']['nickname'];
  313. } else {
  314. $agent_name = '';
  315. }
  316. $export_data[$key + 1] = [
  317. $item['uid'],
  318. $agent_name,
  319. $item['nickname'],
  320. $item['realname'],
  321. $item['mobile'],
  322. date('Y.m.d', $item['yz_member']['apply_time'])
  323. ];
  324. }
  325. // 此处参照商城订单管理的导出接口
  326. app('excel')->store(new \app\exports\FromArray($export_data), $file_name . '.xlsx', 'export');
  327. app('excel')->download(new \app\exports\FromArray($export_data), $file_name . '.xlsx')->send();
  328. }
  329. protected function setData($setData)
  330. {
  331. $setData['become'] = empty($setData['become']) ? 0 : $setData['become'];
  332. $setData['become_check'] = empty($setData['become_check']) ? 0 : $setData['become_check'];
  333. $setData['become_order'] = empty($setData['become_order']) ? 0 : $setData['become_order'];
  334. $setData['become_child'] = empty($setData['become_child']) ? 0 : $setData['become_child'];
  335. $setData['become_ordercount'] = empty($setData['become_ordercount']) ? 0 : $setData['become_ordercount'];
  336. $setData['become_moneycount'] = empty($setData['become_moneycount']) ? 0.00 : $setData['become_moneycount'];
  337. $setData['become_info'] = empty($setData['become_info']) ? 1 : $setData['become_info'];
  338. $setData['share_page'] = empty($setData['share_page']) ? 1 : $setData['share_page'];
  339. $setData['share_page_deail'] = empty($setData['share_page_deail']) ? 0 : $setData['share_page_deail'];
  340. $setData['reward_points'] = empty($setData['reward_points']) ? 0 : $setData['reward_points'];
  341. $setData['maximum_number'] = empty($setData['maximum_number']) ? 0 : $setData['maximum_number'];
  342. return $setData;
  343. }
  344. }