MemberInfoController.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427
  1. <?php
  2. namespace app\frontend\modules\member\controllers;
  3. use app\common\components\ApiController;
  4. use app\common\facades\RichText;
  5. use app\common\facades\Setting;
  6. use app\common\helpers\Cache;
  7. use app\common\models\Member;
  8. use app\common\models\member\MemberCancelSet;
  9. use app\common\models\MemberShopInfo;
  10. use app\common\models\Protocol;
  11. use app\frontend\models\MembershipInformationLog;
  12. use app\frontend\modules\member\models\MemberBankCard;
  13. use app\frontend\modules\member\models\MemberModel;
  14. class MemberInfoController extends ApiController
  15. {
  16. public $publicAction = ["platformAgreement","registerAgreement"];
  17. public $ignoreAction = ["platformAgreement","registerAgreement"];
  18. public function userInfoUpdatePage()
  19. {
  20. $member_id = \YunShop::app()->getMemberId();
  21. $member = MemberModel::getUserInfos_v2($member_id)->first();
  22. if (empty($member)) {
  23. $mid = Member::getMid();
  24. $this->jumpUrl(request()->type, $mid);
  25. }
  26. $member = $member->toArray();
  27. $bankCard = MemberBankCard::where('member_id', $member_id)->first();
  28. $protocol = Protocol::uniacid()->first();
  29. $shopSet = Setting::get('shop.shop');
  30. $cancelSet = MemberCancelSet::uniacid()->first();
  31. $paySet = Setting::getByGroup('pay_password');
  32. $return_data = [
  33. 'uid' => $member['uid'],
  34. 'nickname' => $member['nickname'],
  35. 'avatar' => yz_tomedia($member['avatar']),
  36. 'wechat' => $member['yz_member']['wechat'] ? : '',
  37. 'mobile' => $member['mobile'] ? : '',
  38. 'alipay' => $member['yz_member']['alipay'] ? : '',
  39. 'alipayname' => $member['yz_member']['alipayname'] ? : '',
  40. 'bank_card' =>$bankCard->bank_card,
  41. 'converge_pay' => (app('plugins')->isEnabled('converge_pay') && Setting::get('plugin.convergePay_set.converge_pay_status')) ? 1 : 0,
  42. 'member_cancel' => $cancelSet['status'] ? 1 : 0,
  43. 'pay_state' => $paySet['pay_state'] ? 1 : 0,
  44. 'register_agreement' => [
  45. 'status' => $protocol->status ? 1 : 0,
  46. 'title' => $protocol->title ? : "注册协议"
  47. ],
  48. 'platform_agreement' => [
  49. 'status' => $shopSet['is_agreement'] ? 1 : 0,
  50. 'title' => $shopSet['agreement_name'] ? : "平台协议"
  51. ],
  52. ];
  53. return $this->successJson('ok',$return_data);
  54. }
  55. /**
  56. * 基本信息
  57. * @return mixed
  58. */
  59. public function userInfo()
  60. {
  61. try {
  62. $member_id = \YunShop::app()->getMemberId();
  63. $member = MemberModel::getUserInfos_v2($member_id)->first();
  64. if (empty($member)) {
  65. $mid = Member::getMid();
  66. \Log::debug('----------------基本信息获取',[request()->all()]);
  67. $this->jumpUrl(request()->type, $mid);
  68. }
  69. $member = $member->toArray();
  70. $formSet = json_decode(Setting::get('shop.form'),true);
  71. $shop_setting = Setting::get('shop.shop');
  72. $return_data = [
  73. 'name' => $shop_setting['name'] ? : '商城',
  74. 'uid' => $member['uid'],
  75. 'nickname' => $member['nickname'],
  76. 'avatar' => $member['avatar'],
  77. 'avatar_image' => $member['avatar_image'],
  78. 'can_update_nickname' => $formSet['base']['change_info'] ? 1 : 0,
  79. 'can_update_avatar' => $formSet['base']['change_info'] ? 1 : 0,
  80. ];
  81. $return_data['basic_info'] = $this->basicInfo($member);
  82. $return_data['fixed_diy_field'] = $this->fixedDiyField($member);
  83. $return_data['diy_field'] = $this->diyField($member);
  84. $return_data['diy_form'] = $this->diyForm($member);
  85. $memberSet = Setting::get('shop.member');
  86. $return_data['get_register_diy_form'] = [
  87. 'form_id' => $memberSet['form_id'] ? : 0,
  88. 'status' => (app('plugins')->isEnabled('diyform') && $memberSet['form_id']) ? 1 : 0,
  89. ];
  90. return $this->successJson('ok',$return_data);
  91. } catch (\Exception $e) {
  92. return $this->errorJson($e->getMessage());
  93. }
  94. }
  95. private function basicInfo($member)
  96. {
  97. $formSet = json_decode(Setting::get('shop.form'),true);
  98. $returnData[] = [
  99. 'name' => '姓名',
  100. 'field' => 'name',
  101. 'must' => $formSet['base']['name_must'] ? : 0,
  102. 'value' => $member['realname'],
  103. 'show' => (bool)$formSet['base']['name']
  104. ];
  105. $returnData[] = [
  106. 'name' => '性别',
  107. 'field' => 'gender',
  108. 'must' => $formSet['base']['sex_must'] ? 1 : 0,
  109. 'value' => $member['gender'],
  110. 'show' => (bool)$formSet['base']['sex']
  111. ];
  112. $returnData[] = [
  113. 'name' => '详细地址',
  114. 'field' => 'address',
  115. 'must' => $formSet['base']['address_must'] ? 1 : 0,
  116. 'value' => [
  117. 'province' => $member['yz_member']['province'] ? : '',
  118. 'city' => $member['yz_member']['city'] ? : '',
  119. 'area' => $member['yz_member']['area'] ? : '',
  120. 'province_name' => $member['yz_member']['province_name'] ? : '',
  121. 'city_name' => $member['yz_member']['city_name'] ? : '',
  122. 'area_name' => $member['yz_member']['area_name'] ? : '',
  123. 'address' => $member['yz_member']['address'] ? : '',
  124. ],
  125. 'show' => (bool)$formSet['base']['address']
  126. ];
  127. $returnData[] = [
  128. 'name' => '生日',
  129. 'field' => 'birthday',
  130. 'must' => $formSet['base']['birthday_must'] ? 1 : 0,
  131. 'value' => [
  132. 'birthyear' => $member['birthyear'] ? : '',
  133. 'birthmonth' => $member['birthmonth'] ? : '',
  134. 'birthday' => $member['birthday'] ? : '',
  135. ],
  136. 'show' => (bool)$formSet['base']['birthday']
  137. ];
  138. return $returnData;
  139. }
  140. private function fixedDiyField($member)
  141. {
  142. $memberSet = Setting::get('shop.member');
  143. if (!$memberSet['is_custom']) {
  144. return [];
  145. }
  146. return [
  147. [
  148. 'name' => $memberSet['custom_title'] ? : "",
  149. 'field' => 'custom_value',
  150. 'must' => 1,
  151. 'value' => $member['yz_member']['custom_value'] ? : '',
  152. ]
  153. ];
  154. }
  155. private function diyField($member)
  156. {
  157. $formSet = json_decode(Setting::get('shop.form'),true);
  158. $form = array_values(array_sort($formSet['form'], function ($value) {
  159. return $value['sort'];
  160. }));
  161. $returnData = [
  162. 'form_edit' => $formSet['base']['form_edit'] ? 1 : 0,
  163. 'form_open' => $formSet['base']['form_open'] ? 1 : 0,
  164. 'form' => []
  165. ];
  166. $member_form = $member['yz_member']['member_form']?json_decode($member['yz_member']['member_form'],true):[];
  167. $member_form = collect($member_form);
  168. foreach ($form as $item) {
  169. $has = $member_form->where('pinyin',$item['pinyin'])->first();
  170. $returnData['form'][] = [
  171. 'name' => $item['name'],
  172. 'field' => $item['pinyin'],
  173. 'value' => $has ? $has['value'] : '',
  174. ];
  175. }
  176. return $returnData;
  177. }
  178. private function diyForm($member)
  179. {
  180. $memberSet = Setting::get('shop.member');
  181. if (!app('plugins')->isEnabled('diyform') || !$memberSet['form_id']) {
  182. return [];
  183. }
  184. $data = \Yunshop\Diyform\api\DiyFormController::getDiyFormById(request(), true, $memberSet['form_id']);
  185. return $data['json'] ? : [];
  186. }
  187. public function userInfoSave()
  188. {
  189. try {
  190. list($data,$sub_data) = $this->userInfoVerify(request()->all());
  191. $member_id = \YunShop::app()->getMemberId();
  192. $member = Member::find($member_id);
  193. $yz_member = MemberShopInfo::where('member_id',$member_id)->first();
  194. \Log::debug('---会员更新基本资料---',[$data,$sub_data,request()->type]);
  195. $member->fill($data);
  196. $member->realname = $data['realname'];
  197. $member->birthyear = $data['birthyear'];
  198. $member->birthmonth = $data['birthmonth'];
  199. $member->birthday = $data['birthday'];
  200. $yz_member->fill($sub_data);
  201. if (!$member->save() || !$yz_member->save()) {
  202. throw new \Exception('保存失败');
  203. }
  204. if (Cache::has($member->uid . '_member_info')) {
  205. Cache::forget($member->uid . '_member_info');
  206. }
  207. return $this->successJson('保存成功');
  208. } catch (\Exception $e) {
  209. return $this->errorJson($e->getMessage());
  210. }
  211. }
  212. /**
  213. * 注册信息验证
  214. * @param $request
  215. * @return array[]
  216. * @throws \Exception
  217. */
  218. private function userInfoVerify($request)
  219. {
  220. $formSet = json_decode(Setting::get('shop.form'),true);
  221. //基础信息-注册填写
  222. if ($formSet && $formSet['base']['name'] && $formSet['base']['name_must'] && !$request['name']) {
  223. throw new \Exception('请填写姓名');
  224. }
  225. if ($formSet && $formSet['base']['sex'] && $formSet['base']['sex_must'] && !$request['gender']) {
  226. throw new \Exception('请填写性别');
  227. }
  228. if ($formSet && $formSet['base']['address'] && $formSet['base']['address_must'] && !$request['address']) {
  229. throw new \Exception('请填写详细地址');
  230. }
  231. if ($formSet && $formSet['base']['birthday'] && $formSet['base']['birthday_must'] && !$request['birthday']) {
  232. throw new \Exception('请填写生日');
  233. }
  234. $memberSet = Setting::get('shop.member');
  235. //自定义字段-固定
  236. $custom_value = $request['custom_value'] ? : '';
  237. if (!$memberSet['is_custom']) {
  238. $custom_value = '';
  239. }
  240. //自定义字段
  241. $member_form = $form = array_values(array_sort($formSet['form'],function ($value) {
  242. return $value['sort'];
  243. }));
  244. foreach ($form as $key => &$item) {
  245. $item['del'] = 1;
  246. $member_form[$key]['value'] = $request['customDatas'][$item['pinyin']];
  247. if ($formSet['base']['form_open'] && !$member_form[$key]['value']) {
  248. throw new \Exception('自定义字段必填');
  249. }
  250. }
  251. $formSet['form'] = $form;
  252. Setting::set('shop.form', json_encode($formSet));
  253. unset($item);
  254. $member_form = $member_form ? json_encode($member_form) : '';
  255. $birthday = $request['birthday'] ? explode('-', $request['birthday']) : [];
  256. $member = [
  257. 'realname' => $request['name'] ? : '',
  258. 'gender' => $request['gender'] ? : 0,
  259. 'birthyear' => $birthday ? $birthday[0] : 0,
  260. 'birthmonth' => $birthday ? $birthday[1] : 0,
  261. 'birthday' => $birthday ? $birthday[2] : 0,
  262. ];
  263. if ($request['nickname']) {
  264. $member['nickname'] = $request['nickname'];
  265. }
  266. if ($request['avatar']) {
  267. $member['avatar'] = $request['avatar'];
  268. }
  269. //添加yz_member表
  270. $yz_member = [
  271. 'member_form' => $member_form,
  272. 'province' => $request['address']['province'] ? : '',
  273. 'city' => $request['address']['city']?:'',
  274. 'area' => $request['address']['area']?:'',
  275. 'province_name' => $request['address']['province_name']?:'',
  276. 'city_name' => $request['address']['city_name']?:'',
  277. 'area_name' => $request['address']['area_name']?:'',
  278. 'address' => $request['address']['address']?:'',
  279. 'custom_value' => $custom_value,
  280. ];
  281. return [$member,$yz_member];
  282. }
  283. public function changeAlipayInfo()
  284. {
  285. $member_id = \YunShop::app()->getMemberId();
  286. $yz_member = MemberShopInfo::where('member_id',$member_id)->first();
  287. $old_data = [
  288. 'alipay' => $yz_member->alipay,
  289. 'alipayname' => $yz_member->alipayname,
  290. 'type' => \YunShop::request()->type
  291. ];
  292. $new_data = [
  293. 'alipay' => request()->alipay,
  294. 'alipayname' => request()->alipayname,
  295. 'type' => \YunShop::request()->type
  296. ];
  297. $this->saveLog($member_id,$old_data,$new_data);
  298. $yz_member->alipay = request()->alipay;
  299. $yz_member->alipayname = request()->alipayname;
  300. if (!$yz_member->save()) {
  301. return $this->errorJson('保存失败');
  302. }
  303. return $this->successJson('保存成功');
  304. }
  305. public function changeWechat()
  306. {
  307. $member_id = \YunShop::app()->getMemberId();
  308. $yz_member = MemberShopInfo::where('member_id',$member_id)->first();
  309. $old_data = [
  310. 'wechat' => $yz_member->wechat,
  311. 'type' => \YunShop::request()->type
  312. ];
  313. $new_data = [
  314. 'wechat' => request()->wechat,
  315. 'type' => \YunShop::request()->type
  316. ];
  317. $this->saveLog($member_id,$old_data,$new_data);
  318. $yz_member->wechat = request()->wechat;
  319. if (!$yz_member->save()) {
  320. return $this->errorJson('保存失败');
  321. }
  322. return $this->successJson('保存成功');
  323. }
  324. private function saveLog($member_id,$old_data,$new_data)
  325. {
  326. $data = [
  327. 'uniacid' => \YunShop::app()->uniacid,
  328. 'uid' => $member_id,
  329. 'old_data' => serialize($old_data),
  330. 'new_data' => serialize($new_data),
  331. 'session_id' => session_id()
  332. ];
  333. MembershipInformationLog::create($data);
  334. }
  335. private function getCaptcha()
  336. {
  337. //增加验证码功能
  338. $status = \Setting::get('shop.sms.status');
  339. if ($status == 1) {
  340. $result['captcha'] = app('captcha')->create('default', true);
  341. $result['captcha']['status'] = $status;
  342. } else {
  343. $result['captcha']['status'] = $status;
  344. }
  345. return $result;
  346. }
  347. public function platformAgreement()
  348. {
  349. $shopSet = Setting::get('shop.shop');
  350. if (!$shopSet['is_agreement']) {
  351. return $this->errorJson('协议未开启');
  352. }
  353. $agreement = RichText::get('shop.agreement');
  354. $returnData = [
  355. 'title' => $shopSet['agreement_name'] ? : "平台用户协议",
  356. 'content' => $agreement ? : ""
  357. ];
  358. return $this->successJson('',$returnData);
  359. }
  360. public function registerAgreement()
  361. {
  362. //协议
  363. $protocol = Protocol::uniacid()->first();
  364. if (!$protocol->status) {
  365. return $this->errorJson('协议未开启');
  366. }
  367. $returnData = [
  368. 'title' => $protocol->title ? : "会员注册协议",
  369. 'content' => $protocol->content ? : ""
  370. ];
  371. return $this->successJson('',$returnData);
  372. }
  373. public function userNicknameSave()
  374. {
  375. try {
  376. $data['nickname'] = request()->nickname;
  377. $data['avatar'] = request()->avatar;
  378. if (!$data['nickname'] || !$data['avatar']) {
  379. throw new \Exception('昵称和头像必须填写');
  380. }
  381. $member_id = \YunShop::app()->getMemberId();
  382. $member = Member::find($member_id);
  383. \Log::debug('---会员更新基本资料昵称头像---',[$data]);
  384. $member->nickname = $data['nickname'];
  385. $member->avatar = $data['avatar'];
  386. if (!$member->save()) {
  387. throw new \Exception('保存失败');
  388. }
  389. if (Cache::has($member->uid . '_member_info')) {
  390. Cache::forget($member->uid . '_member_info');
  391. }
  392. return $this->successJson('保存成功');
  393. } catch (\Exception $e) {
  394. return $this->errorJson($e->getMessage());
  395. }
  396. }
  397. }