admin/app/frontend/modules/member/controllers/MemberController.php

3350 lines
128 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* Created by PhpStorm.
* Author:
* Date: 2017/3/1
* Time: 下午4:39
*/
namespace app\frontend\modules\member\controllers;
use app\backend\modules\charts\modules\phone\models\PhoneAttribution;
use app\backend\modules\charts\modules\phone\services\PhoneAttributionService;
use app\backend\modules\member\models\MemberParent;
use app\backend\modules\member\models\MemberRelation;
use app\backend\modules\order\models\Order;
use app\common\components\ApiController;
use app\common\events\member\MemberBindMobile;
use app\common\events\member\MemberNewOfflineEvent;
use app\common\events\member\MergeMemberEvent;
use app\common\events\order\OrderMiniNoticeListEvent;
use app\common\exceptions\AppException;
use app\common\exceptions\ShopException;
use app\common\facades\EasyWeChat;
use app\common\facades\Setting;
use app\common\helpers\Cache;
use app\common\helpers\Client;
use app\common\helpers\ImageHelper;
use app\common\helpers\MiniCodeHelper;
use app\common\helpers\Url;
use app\common\models\AccountWechats;
use app\common\models\Address;
use app\common\models\Area;
use app\common\models\Goods;
use app\common\models\Income;
use app\common\models\McMappingFans;
use app\common\models\member\MemberCancelSet;
use app\common\models\member\MemberInvitationCodeLog;
use app\common\models\member\MemberInviteGoodsLog;
use app\common\models\member\MemberMerge;
use app\common\models\member\MemberPosition;
use app\common\models\MemberAddress;
use app\common\models\MemberAlipay;
use app\common\models\MemberGroup;
use app\common\models\MemberShopInfo;
use app\common\models\MiniTemplateCorresponding;
use app\common\models\notice\MinAppTemplateMessage;
use app\common\models\YzMemberAddress;
use app\common\modules\member\MemberCenter;
use app\common\services\alipay\OnekeyLogin;
use app\common\services\credit\ConstService;
use app\common\services\finance\BalanceChange;
use app\common\services\finance\PointService;
use app\common\services\member\MemberCenterService;
use app\common\services\member\MemberMergeService;
use app\common\services\notice\share\MiniNoticeTemplate;
use app\common\services\popularize\PortType;
use app\common\services\Session;
use app\common\services\Utils;
use app\framework\Http\Request;
use app\frontend\models\Member;
use app\frontend\modules\member\models\MemberDouyinModel;
use app\frontend\modules\member\models\MemberFavorite;
use app\frontend\modules\member\models\MemberMiniAppModel;
use app\frontend\modules\member\models\MemberModel;
use app\frontend\modules\member\models\MemberUniqueModel;
use app\frontend\modules\member\models\MemberWechatModel;
use app\frontend\modules\member\models\SubMemberModel;
use app\frontend\modules\member\services\MemberCenterDataService;
use app\frontend\modules\member\services\MemberMiniAppService;
use app\frontend\modules\member\services\MemberReferralService;
use app\frontend\modules\member\services\MemberService;
use EasyWeChat\Foundation\Application;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redis;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Str;
use Yunshop\AlipayOnekeyLogin\services\SynchronousUserInfo;
use Yunshop\Commission\models\Agents;
use Yunshop\Decorate\models\DecorateDefaultTabModel;
use Yunshop\Decorate\models\DecorateDefaultTemplateModel;
use Yunshop\Designer\models\ViewSet;
use Yunshop\DrainageCode\common\services\SceneService;
use Yunshop\GroupWork\frontend\modules\order\models\OrderModel;
use Yunshop\Kingtimes\common\models\Distributor;
use Yunshop\Kingtimes\common\models\Provider;
use Yunshop\LevelCompel\common\services\LevelCompelService;
use Yunshop\Love\Common\Models\MemberLove;
use Yunshop\Love\Common\Services\LoveChangeService;
use Yunshop\Love\Common\Services\SetService;
use Yunshop\Poster\models\Poster;
use Yunshop\Poster\services\CreatePosterService;
use Yunshop\RealNameAuth\common\models\RealNameAuth;
use Yunshop\RealNameAuth\common\models\RealNameAuthSet;
use Yunshop\RegistrationArea\Common\models\MemberLocation;
use Yunshop\ShopEsign\common\service\YunSignService;
use Yunshop\StoreCashier\common\models\Store;
use Yunshop\Designer\models\Designer;
use app\frontend\models\MembershipInformationLog;
use Yunshop\Designer\Backend\Modules\Page\Controllers\RecordsController;
use app\common\models\SynchronizedBinder;
use Illuminate\Support\Facades\Cookie;
use Yunshop\YunSign\common\models\Contract;
use Yunshop\YunSign\common\models\ContractNum;
use Yunshop\YunSign\common\models\PersonAccount;
class MemberController extends ApiController
{
protected $publicAction = [
'guideFollow',
'wxJsSdkConfig',
'memberFromHXQModule',
'dsAlipayUserModule',
'isValidatePage',
'designer',
'getAdvertisement',
'miniMemberMobile',
'getProvincesList',
'getCitysByProvince',
'getAreasByCity'
];
protected $ignoreAction = [
'guideFollow',
'wxJsSdkConfig',
'memberFromHXQModule',
'dsAlipayUserModule',
'isValidatePage',
'designer',
'getAdvertisement',
'miniMemberMobile',
'getProvincesList',
'getCitysByProvince',
'getAreasByCity'
];
protected $type;
protected $sign;
protected $set;
protected $relation_base_set;
public $apiErrMsg = [];
public $apiData = [];
/**
* 获取用户信息
* @param $request
* @param null $integrated
* @return array|\Illuminate\Http\JsonResponse
*/
public function getUserInfo(Request $request, $integrated = null)
{
$member_id = \YunShop::app()->getMemberId();
if (empty($member_id)) {
if (is_null($integrated)) {
return $this->errorJson('缺少访问参数');
} else {
return show_json(0, '缺少访问参数');
}
}
$this->type = intval(\YunShop::request()->type);
$this->sign = intval(\YunShop::request()->ingress);
$memberModel = $member_info = MemberModel::getUserInfos_v2($member_id)->first();
if (empty($member_info)) {
$this->jump = true;
$mid = \app\common\models\Member::getMid();
$this->jumpUrl(\YunShop::request()->type, $mid);
}
$member_info = $member_info->toArray();
$data = MemberModel::userData_v2($member_info, $member_info['yz_member']);
$switch = PortType::popularizeShow(\YunShop::request()->type);
$un_withdraw = Income::getIncomes()
->where('member_id', \YunShop::app()->getMemberId())
->where('status', 0)
->sum('amount');
$data['un_withdraw'] = number_format($un_withdraw, 2) ?? 0;
//会员收入
if ($switch) {
$data['income'] = MemberModel::getIncomeCount();
}
//自定义表单
$data['myform'] = (new MemberService())->memberInfoAttrStatus($member_info['yz_member']);
//邀请码
$v = request('v');
if (!is_null($v)) {
$data['inviteCode']['status'] = \Setting::get('shop.member.is_invite') ?: 0;
if (is_null($member_info['yz_member']['invite_code']) || empty($member_info['yz_member']['invite_code'])) {
$data['inviteCode']['code'] = MemberModel::getInviteCode($member_id);
} else {
$data['inviteCode']['code'] = $member_info['yz_member']['invite_code'];
}
} else {
$data['inviteCode'] = 0;
}
// 邀请页面总店强制修改
$member_set = \Setting::get('shop.member');
$data['is_bind_invite'] = $member_set['is_bind_invite'] ?: 0; // 邀请页面总店强制修改
$data['copyrightImg'] = yz_tomedia(\Setting::get('shop.shop.copyrightImg')) ?: '';
$data['copyright'] = \Setting::get('shop.shop.copyright') ?: '';
$data['cat_adv_url'] = \Setting::get('shop.shop.cat_adv_url') ?: '';
$data['small_cat_adv_url'] = \Setting::get('shop.shop.small_cat_adv_url') ?: '';
if (MemberShopInfo::getParentId($member_id) > 0) { // 不是总店
$data['is_bind_invite'] = 0;
}
$member_cancel_set = MemberCancelSet::uniacid()->select('status')->first();
if (isset($member_cancel_set['status'])) {
$data['member_cancel_status'] = $member_cancel_set['status'];
} else {
$data['member_cancel_status'] = 1;
}
//这个参数是要在会员设置里使用的,别再把这个参数移走了
//易宝标准版
$data['yop'] = app('plugins')->isEnabled('yop-pay') ? 1 : 0;
//易宝专业版
$data['yop_pro'] = app('plugins')->isEnabled('yop-pro') ? 1 : 0;
//0.1拼团
$data['group_work'] = app('plugins')->isEnabled('group-work') ? 1 : 0;
// 汇聚支付是否开启
$data['is_open_converge_pay'] = app('plugins')->isEnabled('converge_pay') ? 1 : 0;
//CMC充值
$data['cmc_pay'] = app('plugins')->isEnabled('cmc-pay') ? 1 : 0;
//慈善基金-总捐赠金额
if (!is_null(\app\common\modules\shop\ShopConfig::current()->get('charity_fund_charity_total_money'))) {
$charity_fund_config = \Yunshop\CharityFund\services\SetConfigService::getSetConfig();
if ($charity_fund_config->is_open && $charity_fund_config->is_show_money) {
$class = array_get(
\app\common\modules\shop\ShopConfig::current()->get('charity_fund_charity_total_money'),
'class'
);
$function = array_get(
\app\common\modules\shop\ShopConfig::current()->get('charity_fund_charity_total_money'),
'function'
);
$ret = $class::$function();
$data['charity_total_money'] = $ret ?: 0;
}
}
$set = json_decode(\Setting::get('shop.form'), true);
$data['name_must'] = $set['base']['name_must'];
$data['change_info'] = $set['base']['change_info'] == 1 ? true : false;
$data['has_avatar'] = $memberModel->has_avatar;//用来判断会员是否有设置头像avatar没设置也默认返回头像了
//会员团队
if (!is_null(\app\common\modules\shop\ShopConfig::current()->get('team_name')) && \YunShop::app()->getMemberId()) {
$class = array_get(\app\common\modules\shop\ShopConfig::current()->get('team_name'), 'class');
$function = array_get(\app\common\modules\shop\ShopConfig::current()->get('team_name'), 'function');
$member_team = $class::$function(\YunShop::app()->getMemberId());
if ($member_team['res']) {
$data['member_team'] = $member_team;
}
}
//会员等级天数
$data['validity_day'] = $member_info['yz_member']['validity'];
if (is_null($integrated)) {
return $this->successJson('', $data);
} else {
return show_json(1, $data);
}
}
/**
* 检查会员推广资格
*
* @return \Illuminate\Http\JsonResponse
*/
public function getMemberRelationInfo()
{
$info = MemberRelation::getSetInfo()->first();
$member_info = SubMemberModel::getMemberShopInfo(\YunShop::app()->getMemberId());
if (empty($info)) {
return $this->errorJson('缺少参数');
} else {
$info = $info->toArray();
}
if (empty($member_info)) {
return $this->errorJson('会员不存在');
} else {
$data = $member_info->toArray();
}
$account = AccountWechats::getAccountByUniacid(\YunShop::app()->uniacid);
switch ($info['become']) {
case 0:
case 1:
$apply_qualification = 1;
$mid = \app\common\models\Member::getMid();
$m_member = MemberShopInfo::where('member_id', \YunShop::app()->getMemberId())->first();
if ($m_member->parent_id != $mid && $m_member->parent_id != 0) {
$mid = $m_member->parent_id ?: 0;
}
$parent_name = '';
if (empty($mid)) {
$parent_name = '总店';
} else {
$parent_model = MemberModel::getMemberById($mid);
if (!empty($parent_model)) {
$parent_member = $parent_model->toArray();
$status = '';
if ($parent_model['inviter']) {
$status = '(暂定)';
}
$parent_name = $parent_member['realname'] ?: $status . $parent_member['nickname'];
}
}
$member_model = MemberModel::getMemberById(\YunShop::app()->getMemberId());
if (!empty($member_model)) {
$member = $member_model->toArray();
}
break;
case 2:
$apply_qualification = 2;
$cost_num = Order::getCostTotalNum(\YunShop::app()->getMemberId());
if ($info['become_check'] && $cost_num >= $info['become_ordercount']) {
$apply_qualification = 5;
}
break;
case 3:
$apply_qualification = 3;
$cost_price = Order::getCostTotalPrice(\YunShop::app()->getMemberId());
if ($info['become_check'] && $cost_price >= $info['become_moneycount']) {
$apply_qualification = 6;
}
break;
case 4:
$apply_qualification = 4;
$goods = Goods::getGoodsById($info['become_goods_id']);
$goods_name = '';
if (!empty($goods)) {
$goods = $goods->toArray();
$goods_name = $goods['title'];
}
if ($info['become_check'] && MemberRelation::checkOrderGoods(
$info['become_goods_id'],
$member_info->member_id
)) {
$apply_qualification = 7;
}
break;
default:
$apply_qualification = 0;
}
$relation = [
'switched' => $info['status'],
'become' => $apply_qualification,
'become1' => [
'shop_name' => $account['name'],
'parent_name' => $parent_name,
'realname' => $member['realname'],
'mobile' => $member['mobile']
],
'become2' => ['shop_name' => $account['name'], 'total' => $info['become_ordercount'], 'cost' => $cost_num],
'become3' => [
'shop_name' => $account['name'],
'total' => $info['become_moneycount'],
'cost' => $cost_price
],
'become4' => [
'shop_name' => $account['name'],
'goods_name' => $goods_name,
'goods_id' => $info['become_goods_id']
],
'is_agent' => $data['is_agent'],
'status' => $data['status'],
'account' => $account['name']
];
return $this->successJson('', $relation);
}
/**
* 会员是否有推广权限
*
* @return \Illuminate\Http\JsonResponse
*/
public function isAgent()
{
if (MemberModel::isAgent()) {
$has_permission = 1;
} else {
$has_permission = 0;
}
return $this->successJson('', ['is_agent' => $has_permission]);
}
/**
* 会员推广二维码
*
* @param $url
* @param string $extra
*
* @return \Illuminate\Http\JsonResponse
*/
public function getAgentQR($extra = '')
{
if (empty(\YunShop::app()->getMemberId())) {
return $this->errorJson('请重新登录');
}
$qr_url = MemberModel::getAgentQR($extra = '');
return $this->successJson('', ['qr' => $qr_url]);
}
/**
* 用户推广申请
*
* @return \Illuminate\Http\JsonResponse
*/
public function addAgentApply()
{
if (!\YunShop::app()->getMemberId()) {
return $this->errorJson('请重新登录');
}
$sub_member_model = SubMemberModel::getMemberShopInfo(\YunShop::app()->getMemberId());
$sub_member_model->status = 1;
$sub_member_model->apply_time = time();
if (!$sub_member_model->save()) {
return $this->errorJson('会员信息保存失败');
}
$realname = \YunShop::request()->realname;
$moible = \YunShop::request()->mobile;
$member_mode = MemberModel::getMemberById(\YunShop::app()->getMemberId());
$member_mode->realname = $realname;
$member_mode->mobile = $moible;
if (!$member_mode->save()) {
return $this->errorJson('会员信息保存失败');
}
return $this->successJson('ok');
}
/**
* 获取我的下线
*
* @return \Illuminate\Http\JsonResponse
*/
public function getMyAgentCount()
{
return $this->successJson('', ['count' => MemberModel::getAgentCount_v2(\YunShop::app()->getMemberId())]);
}
/**
* 我的推荐人
*
* @return \Illuminate\Http\JsonResponse
*/
public function getMyReferral()
{
$data = MemberModel::getMyReferral();
if (!empty($data)) {
return $this->successJson('', $data);
} else {
return $this->errorJson('会员不存在');
}
}
/**
* 我的推荐人v2
*
* @return \Illuminate\Http\JsonResponse
*/
public function getMyReferral_v2(Request $request, $integrated = null)
{
$data = MemberModel::getMyReferral_v2();
//IOS时把微信头像url改为https前缀
$data['avatar'] = ImageHelper::iosWechatAvatar($data['avatar']);
if (!empty($data)) {
if (is_null($integrated)) {
return $this->successJson('', $data);
} else {
return show_json(1, $data);
}
} else {
if (is_null($integrated)) {
return $this->errorJson('会员不存在');
} else {
return show_json(0, '会员不存在');
}
}
}
/**
* 会员推荐人上级
* @return array|\Illuminate\Http\JsonResponse
*/
public function getMyReferralParents()
{
$member_id = \YunShop::app()->getMemberId();
$yz_member = MemberShopInfo::getMemberShopInfo($member_id);
if ($yz_member['inviter'] == 1 && !empty(MemberShopInfo::getMemberShopInfo($yz_member['parent_id']))) {
$data = MemberParent::getAgentParentByMemberId($yz_member['parent_id']);
return show_json(1, $data);
} else {
return show_json(1, ['is_show' => 0]); //没有推荐人上级
}
}
/**
* 我推荐的人
*
* @return \Illuminate\Http\JsonResponse
*/
public function getMyAgent()
{
$data = MemberModel::getMyAgent();
if (!empty($data)) {
return $this->successJson('', $data);
} else {
return $this->errorJson('会员不存在');
}
}
/**
* 我推荐的人 v2 基本信息
*
* @return \Illuminate\Http\JsonResponse
*/
public function getMyAgent_v2(Request $request, $integrated = null)
{
$data = MemberModel::getMyAgent_v2();
if (is_null($integrated)) {
return $this->successJson('', $data);
} else {
return show_json(1, $data);
}
}
/**
* 我推荐的人 v2 数据
*
* @return \Illuminate\Http\JsonResponse
*/
public function getMyAgentData_v2(Request $request, $integrated = null)
{
app('db')->cacheSelect = true;
$data = MemberModel::getMyAgentData_v2();
if (is_null($integrated)) {
return $this->successJson('', $data);
} else {
return show_json(1, $data);
}
}
/**
* 会员中心我的关系
*
* @return \Illuminate\Http\JsonResponse
*/
public function getMyRelation()
{
$my_referral = MemberModel::getMyReferral();
$my_agent = MemberModel::getMyAgent();
$data = [
'my_referral' => $my_referral,
'my_agent' => $my_agent
];
return $this->successJson('', $data);
}
/**
* 通过省份id获取对应的市信息
*
* @return \Illuminate\Http\JsonResponse
*/
public function getCitysByProvince()
{
$id = \YunShop::request()->parent_id;
$data = Area::getCitysByProvince($id);
if (!empty($data)) {
return $this->successJson('', $data->toArray());
} else {
return $this->errorJson('查无数据');
}
}
/**
* 通过市id获取对应的区信息
*
* @return \Illuminate\Http\JsonResponse
*/
public function getAreasByCity()
{
$id = \YunShop::request()->parent_id;
$data = Area::getAreasByCity($id);
if (!empty($data)) {
return $this->successJson('', $data->toArray());
} else {
return $this->errorJson('查无数据');
}
}
/**
* 获取所有省份数据
*
* @return \Illuminate\Http\JsonResponse
*/
public function getProvincesList()
{
$data = Area::getProvincesList();
if (!empty($data)) {
return $this->successJson('', $data->toArray());
} else {
return $this->errorJson('查无数据');
}
}
/**
* 更新会员资料
*
* @return \Illuminate\Http\JsonResponse
*/
public function updateUserInfo()
{
$birthday = [];
$data = \YunShop::request()->data;
$get = json_decode(\Setting::get('shop.form'), true);
if (empty($data['realname']) && $get['base']['name_must'] == 1) {
return $this->errorJson('请填写姓名');
}
//商家App获取的数据是json字符串
if (\Yunshop::request()->type == 9) {
$data = json_decode($data, true);
}
if (isset($data['birthday'])) {
$birthday = explode('-', $data['birthday']);
}
$member_data = [
'realname' => $data['realname'] ?: '',
'avatar' => $data['avatar'],
'gender' => isset($data['gender']) ? intval($data['gender']) : 0,
'birthyear' => isset($birthday[0]) ? intval($birthday[0]) : 0,
'birthmonth' => isset($birthday[1]) ? intval($birthday[1]) : 0,
'birthday' => isset($birthday[2]) ? intval($birthday[2]) : 0
];
if ($data['nickname']) {
$member_data['nickname'] = $data['nickname'];
}
// if (!empty($data['mobile'])) {
// $member_data['mobile'] = $data['mobile'];
// }
$member_data['mobile'] = $data['mobile'];
if (!empty($data['telephone'])) {
$member_data['telephone'] = $data['telephone'];
}
$member_shop_info_data = [
'alipay' => $data['alipay'],
'alipayname' => $data['alipay_name'],
'province_name' => isset($data['province_name']) ? $data['province_name'] : '',
'city_name' => isset($data['city_name']) ? $data['city_name'] : '',
'area_name' => isset($data['area_name']) ? $data['area_name'] : '',
'province' => isset($data['province']) ? intval($data['province']) : 0,
'city' => isset($data['city']) ? intval($data['city']) : 0,
'area' => isset($data['area']) ? intval($data['area']) : 0,
'address' => isset($data['address']) ? $data['address'] : '',
'wechat' => isset($data['wx']) ? $data['wx'] : '',
];
if (\YunShop::app()->getMemberId()) {
// $memberService = app(MemberService::class);
// $memberService->chkAccount(\YunShop::app()->getMemberId());
$member_model = MemberModel::getMemberById(\YunShop::app()->getMemberId());
$member_shop_info_model = MemberShopInfo::getMemberShopInfo(\YunShop::app()->getMemberId());
$old_data = [
'alipay' => $member_shop_info_model->alipay,
'alipayname' => $member_shop_info_model->alipayname,
'wechat' => $member_shop_info_model->wechat,
'mobile' => $member_model->mobile,
'name' => $member_model->realname,
'type' => \YunShop::request()->type
];
$new_data = [
'alipay' => $data['alipay'],
'alipayname' => $data['alipay_name'],
'wechat' => isset($data['wx']) ? $data['wx'] : '',
'mobile' => $data['mobile'],
'name' => $data['realname'],
'type' => \YunShop::request()->type
];
$membership_infomation = [
'uniacid' => \YunShop::app()->uniacid,
'uid' => \YunShop::app()->getMemberId(),
'old_data' => serialize($old_data),
'new_data' => serialize($new_data),
'session_id' => session_id()
];
MembershipInformationLog::create($membership_infomation);
$member_model->setRawAttributes($member_data);
$member_shop_info_model->setRawAttributes($member_shop_info_data);
$member_validator = $member_model->validator($member_model->getAttributes());
$member_shop_info_validator = $member_shop_info_model->validator($member_shop_info_model->getAttributes());
if ($member_validator->fails()) {
$warnings = $member_validator->messages();
$show_warning = $warnings->first();
return $this->errorJson($show_warning);
}
if ($member_shop_info_validator->fails()) {
$warnings = $member_shop_info_validator->messages();
$show_warning = $warnings->first();
return $this->errorJson($show_warning);
}
//自定义表单
$member_form = (new MemberService())->updateMemberForm($data);
if (!empty($member_form)) {
$member_shop_info_model->member_form = json_encode($member_form);
}
if ($member_model->save() && $member_shop_info_model->save()) {
if (Cache::has($member_model->uid . '_member_info')) {
Cache::forget($member_model->uid . '_member_info');
}
$phoneModel = PhoneAttribution::getMemberByID(\YunShop::app()->getMemberId());
if (!is_null($phoneModel)) {
$phoneModel->delete();
}
//手机归属地查询插入
$phoneData = file_get_contents((new PhoneAttributionService())->getPhoneApi($member_model->mobile));
$phoneArray = json_decode($phoneData);
$phone['uid'] = \YunShop::app()->getMemberId();
$phone['uniacid'] = \YunShop::app()->uniacid;
$phone['province'] = $phoneArray->data->province;
$phone['city'] = $phoneArray->data->city;
$phone['sp'] = $phoneArray->data->sp;
$phoneModel = new PhoneAttribution();
$phoneModel->updateOrCreate(['uid' => \YunShop::app()->getMemberId()], $phone);
return $this->successJson('用户资料修改成功');
} else {
return $this->errorJson('更新用户资料失败');
}
} else {
return $this->errorJson('用户不存在');
}
}
public function updateWxOrAli()
{
try {
$yz_member = MemberShopInfo::getMemberShopInfo(\YunShop::app()->getMemberId());
} catch (ShopException $exception) {
return $this->errorJson($exception->getMessage());
}
if (request()->wx) {
$yz_member->wechat = request()->wx;
}
if (request()->alipay) {
$yz_member->alipay = request()->alipay;
}
if (request()->alipay_name) {
$yz_member->alipayname = request()->alipay_name;
}
if (!$yz_member->save()) {
return $this->errorJson('保存失败');
}
return $this->successJson('保存成功');
}
/**
* 手机预绑定
* @return \Illuminate\Http\JsonResponse
*/
public function prepBind()
{
$mobile = \YunShop::request()->mobile;
$invite_code = \YunShop::request()->invite_code;
$uid = \YunShop::app()->getMemberId();
$is_show = false;
$save_uid = 0;
$del_uid = 0;
if (empty($mobile)) {
return $this->errorJson('输入手机号码为空');
}
$member_merge_set = Setting::get('relation_base');
$member_model = MemberModel::getMemberById($uid); //当前登录会员
$memberinfo_model = MemberModel::getMemberinfo(\YunShop::app()->uniacid, $mobile); //老手机会员
if (empty($member_merge_set['is_merge_save_level'])) {
//注册时间
if (!empty($memberinfo_model) && ($memberinfo_model->createtime < $member_model->createtime)) {
$save_uid = $memberinfo_model->uid;
$del_uid = $uid;
} elseif (!empty($memberinfo_model) && ($memberinfo_model->createtime > $member_model->createtime)) {
$save_uid = $uid;
$del_uid = $memberinfo_model->uid;
}
} elseif ($member_merge_set['is_merge_save_level'] == 1) {
//手机号
if (!empty($memberinfo_model)) {
$save_uid = $memberinfo_model->uid;
$del_uid = $uid;
}
} elseif ($member_merge_set['is_merge_save_level'] == 2) {
//公众号
$fans = McMappingFans::getFansById($uid);
if ($fans) {
if ($memberinfo_model) {
$save_uid = $uid;
$del_uid = $memberinfo_model->uid;
}
} else {
if (!empty($memberinfo_model) && ($memberinfo_model->createtime < $member_model->createtime)) {
$save_uid = $memberinfo_model->uid;
$del_uid = $uid;
} elseif (!empty($memberinfo_model) && ($memberinfo_model->createtime > $member_model->createtime)) {
$save_uid = $uid;
$del_uid = $memberinfo_model->uid;
}
}
} elseif ($member_merge_set['is_merge_save_level'] == 3) {
//小程序
$mini_fans = MemberMiniAppModel::getFansById($uid);
if ($mini_fans) {
if ($memberinfo_model) {
$save_uid = $uid;
$del_uid = $memberinfo_model->uid;
}
} else {
if (!empty($memberinfo_model) && ($memberinfo_model->createtime < $member_model->createtime)) {
$save_uid = $memberinfo_model->uid;
$del_uid = $uid;
} elseif (!empty($memberinfo_model) && ($memberinfo_model->createtime > $member_model->createtime)) {
$save_uid = $uid;
$del_uid = $memberinfo_model->uid;
}
}
} elseif ($member_merge_set['is_merge_save_level'] == 4) {
//app
$app_fans = MemberWechatModel::getFansById($uid);
if ($app_fans) {
if ($memberinfo_model) {
$save_uid = $uid;
$del_uid = $memberinfo_model->uid;
}
} else {
if (!empty($memberinfo_model) && ($memberinfo_model->createtime < $member_model->createtime)) {
$save_uid = $memberinfo_model->uid;
$del_uid = $uid;
} elseif (!empty($memberinfo_model) && ($memberinfo_model->createtime > $member_model->createtime)) {
$save_uid = $uid;
$del_uid = $memberinfo_model->uid;
}
}
} else {
//alipay
$ali_fans = MemberAlipay::getFansById($uid);
if ($ali_fans) {
if ($memberinfo_model) {
$save_uid = $uid;
$del_uid = $memberinfo_model->uid;
}
} else {
if (!empty($memberinfo_model) && ($memberinfo_model->createtime < $member_model->createtime)) {
$save_uid = $memberinfo_model->uid;
$del_uid = $uid;
} elseif (!empty($memberinfo_model) && ($memberinfo_model->createtime > $member_model->createtime)) {
$save_uid = $uid;
$del_uid = $memberinfo_model->uid;
}
}
}
if (!empty($save_uid) && !empty($del_uid) && $del_uid != $save_uid) {
$is_show = true;
}
return $this->successJson('ok', [
'is_show' => $is_show,
'change_uid' => $save_uid,
'uid' => $del_uid,
]);
}
/**
* 单纯绑定手机号
* @return \Illuminate\Http\JsonResponse
* @throws AppException
*/
public function justBindMobile()
{
$mobile = \YunShop::request()->mobile;
$uid = \YunShop::app()->getMemberId();
$type = \YunShop::request()->type;
if (empty($mobile)) {
return $this->errorJson('输入手机号码为空');
}
$member_merge_set = Setting::get('relation_base');
$member_model = MemberModel::getMemberById($uid);
if (!empty($member_model->mobile) && $member_model->mobile == $mobile) {
return $this->successJson('手机号码绑定成功');
}
$yz_member = MemberShopInfo::getMemberShopInfo($uid);
if ($yz_member->is_old) {
throw new AppException('会员数据有冲突,请联系客服');
}
if ($uid > 0) {
$check_code = MemberService::checkCode();
if ($check_code['status'] != 1) {
return $this->errorJson($check_code['json']);
}
//查询绑定手机号会员
$member_info_model = MemberModel::getMemberinfo(\YunShop::app()->uniacid, $mobile);
\Log::debug('------会员设置--保留方式---just_bind---', $member_merge_set);
\Log::debug('----手机号码绑定--提交的手机号码--当前登录会员信息--手机原始会员信息----', [$mobile, $member_model, $member_info_model]);
if ($member_info_model && (($type == 5 && request()->scope) || $type != 5)) {
$merge_choice = $member_merge_set['is_merge_save_level'];
switch ($merge_choice) {
case 1 :
//手机号
$member_model = $this->phoneMemberSave($uid, $member_info_model, $member_model, $mobile);
break;
case 2 :
//公众号
$fans = McMappingFans::getFansById($uid);
if ($fans) {
$member_model = $this->fansMemberSave($uid, $member_info_model, $member_model, $mobile);
} else {
if ($member_info_model->createtime < $member_model->createtime) {
$member_model = $this->phoneMemberSave(
$uid,
$member_info_model,
$member_model,
$mobile
);
} elseif ($member_info_model->createtime > $member_model->createtime) {
$member_model = $this->fansMemberSave($uid, $member_info_model, $member_model, $mobile);
}
}
break;
case 3 :
//小程序
$mini_fans = MemberMiniAppModel::getFansById($uid);
if ($mini_fans) {
$member_model = $this->fansMemberSave($uid, $member_info_model, $member_model, $mobile);
} else {
if ($member_info_model->createtime < $member_model->createtime) {
$member_model = $this->phoneMemberSave(
$uid,
$member_info_model,
$member_model,
$mobile
);
} elseif ($member_info_model->createtime > $member_model->createtime) {
$member_model = $this->fansMemberSave($uid, $member_info_model, $member_model, $mobile);
}
}
break;
case 4 :
//app
$app_fans = MemberWechatModel::getFansById($uid);
if ($app_fans) {
$member_model = $this->fansMemberSave($uid, $member_info_model, $member_model, $mobile);
} else {
if ($member_info_model->createtime < $member_model->createtime) {
$member_model = $this->phoneMemberSave(
$uid,
$member_info_model,
$member_model,
$mobile
);
} elseif ($member_info_model->createtime > $member_model->createtime) {
$member_model = $this->fansMemberSave($uid, $member_info_model, $member_model, $mobile);
}
}
break;
case 5 :
//alipay
$app_fans = MemberAlipay::getFansById($uid);
if ($app_fans) {
$member_model = $this->fansMemberSave($uid, $member_info_model, $member_model, $mobile);
} else {
if ($member_info_model->createtime < $member_model->createtime) {
$member_model = $this->phoneMemberSave(
$uid,
$member_info_model,
$member_model,
$mobile
);
} elseif ($member_info_model->createtime > $member_model->createtime) {
$member_model = $this->fansMemberSave($uid, $member_info_model, $member_model, $mobile);
}
}
break;
default :
//注册时间
if ($member_info_model->createtime < $member_model->createtime) {
$member_model = $this->phoneMemberSave($uid, $member_info_model, $member_model, $mobile);
} elseif ($member_info_model->createtime > $member_model->createtime) {
$member_model = $this->fansMemberSave($uid, $member_info_model, $member_model, $mobile);
}
break;
}
}
if (!$member_model) {
return $this->errorJson('手机号码绑定失败!');
}
$member_model->mobile = $mobile;
$member_shop_info = MemberShopInfo::uniacid()->where('member_id', $member_model->uid)->first();
if (!$member_model) {
return $this->errorJson('手机号码绑定失败!');
}
if ($member_model->save() && $member_shop_info->save()) {
if ($member_model->save() && $member_shop_info->save()) {
if (Cache::has($member_model->uid . '_member_info')) {
Cache::forget($member_model->uid . '_member_info');
}
if (\YunShop::request()->positioning_success == 1) {
if (!is_null(\app\common\modules\shop\ShopConfig::current()->get('set_location'))) {
$class = array_get(
\app\common\modules\shop\ShopConfig::current()->get('set_location'),
'class'
);
$function = array_get(
\app\common\modules\shop\ShopConfig::current()->get('set_location'),
'function'
);
$class::$function(
$member_model->uid,
MemberLocation::TYPE_BIND_MOBILE,
\YunShop::request()->register_province,
\YunShop::request()->register_city
);
}
}
}
event(new MemberBindMobile($member_model));
return $this->successJson('手机号码绑定成功');
} else {
return $this->errorJson('手机号码绑定失败');
}
} else {
return $this->errorJson('手机号或密码格式错误');
}
}
/**
* 小程序首次绑定手机
* @return \Illuminate\Http\JsonResponse
* @throws AppException
*/
public function miniFirstTimeBindMobile()
{
$mobile = \YunShop::request()->mobile;
$uid = \YunShop::app()->getMemberId();
$type = \YunShop::request()->type;
$is_first_time_bind = (bool)Setting::get('plugin.min_app.is_first_time_bind');
if (!$is_first_time_bind || $type != 2 || $uid == 0 || empty($mobile)) {
return $this->errorJson('不符合自动绑定手机号要求');
}
$member_model = MemberModel::getMemberById($uid);
if (!empty($member_model->mobile) && $member_model->mobile == $mobile) {
return $this->successJson('已绑定手机号');
}
$yz_member = MemberShopInfo::getMemberShopInfo($uid);
if ($yz_member->is_old) {
throw new AppException('会员数据有冲突,请联系客服');
}
$member_model->mobile = $mobile;
if (!$member_model->save()) {
return $this->errorJson('手机号码绑定失败!');
}
event(new MemberBindMobile($member_model));
return $this->successJson('手机号码绑定成功');
}
/**
* 绑定手机号
* @return \Illuminate\Http\JsonResponse
* @throws AppException
*/
public function bindMobile()
{
$mobile = \YunShop::request()->mobile;
$password = \YunShop::request()->password;
$uid = \YunShop::app()->getMemberId();
$type = \YunShop::request()->type;
$scope = \YunShop::request()->scope;
$close_invitecode = \YunShop::request()->close;
$customDatas = \YunShop::request()->customDatas;
$address = \YunShop::request()->address;
$birthday = \YunShop::request()->birthday;
$gender = \YunShop::request()->gender;
$custom_value = \YunShop::request()->custom_value;
$idcard = \YunShop::request()->idcard;
$idcard_addr = \YunShop::request()->idcard_addr;
$mini_first_time_bind = \YunShop::request()->mini_first_time_bind;//是否小程序首次绑定
if ($birthday) {
$birthday = explode('-', $birthday);
}
if (empty($mobile)) {
return $this->errorJson('输入手机号码为空');
}
$this->relation_base_set = Setting::get('relation_base');
$member_model = MemberModel::getMemberById($uid);
if (!empty($member_model->mobile) && $member_model->mobile == $mobile) {
if (Redis::exists('miniMemberMobile'.$mobile)) {
Redis::del('miniMemberMobile'.$mobile);
}
return $this->successJson('手机号码绑定成功');
}
$yz_member = MemberShopInfo::getMemberShopInfo($uid);
if ($yz_member->is_old) {
throw new AppException('会员数据有冲突,请联系客服');
}
if ($uid > 0) {
$hasCheckCode = 1;//是否进行校验验证码
//开启小程序首次登录绑定 && 前端传值目前是授权请求绑定
if ($type == 2 && (bool)Setting::get('plugin.min_app.is_first_time_bind') == 1 && $mini_first_time_bind == 1) {
$hasCheckCode = 0;//不校验
}
if ($type == 2 && request()->mini_auth_mobile == 1) {//授权获取的手机号不校验
if (Redis::get('miniMemberMobile'.$mobile)) {
$hasCheckCode = 0;//不校验
} else {
return $this->errorJson('绑定超时,请重新授权手机号');
}
}
if ($hasCheckCode) {
$check_code = MemberService::checkCode();
if ($check_code['status'] != 1) {
return $this->errorJson($check_code['json']);
}
}
if ($mini_first_time_bind != 1 && !$close_invitecode) {
$invite_code = MemberService::inviteCode();
if ($invite_code['status'] != 1) {
return $this->errorJson($invite_code['json']);
}
//邀请码
$parent_id = \app\common\models\Member::getMemberIdForInviteCode();
if (!is_null($parent_id)) {
MemberShopInfo::change_relation($uid, $parent_id);
//锁定上线时上级没有奖励积分
if ($parent_id != $yz_member['parent_id']) {
MemberRelation::rewardPoint($parent_id, $uid);
}
//增加邀请码使用记录
$code_model = new MemberInvitationCodeLog();
$code_model->uniacid = \YunShop::app()->uniacid;
$code_model->invitation_code = trim(\YunShop::request()->invite_code);
$code_model->member_id = $uid; //使用者id
$code_model->mid = $parent_id; //邀请人id
$code_model->save();
}
}
$register = Setting::get('shop.register');
if (\YunShop::request()->pc == 1 || (isset($register['is_password']) && $register['is_password'] == 0)) {
$password = '';
} else {
if ($hasCheckCode) {
$msg = MemberService::validate($mobile, $password);
if ($msg['status'] != 1) {
return $this->errorJson($msg['json']);
}
}
}
//查询绑定手机号会员
$member_info_model = MemberModel::getMemberinfo(\YunShop::app()->uniacid, $mobile);
\Log::debug('------会员设置--保留方式------', $this->relation_base_set);
\Log::debug(
'----手机号码绑定-提交的手机号码-当前登录会员信息-手机原始会员信息-type--scope--',
[$mobile, $member_model, $member_info_model, $type, $scope]
);
try {
if ($member_info_model && (($type == 5 && request()->scope) || $type != 5)) {
$merge_choice = $this->relation_base_set['is_merge_save_level'];
switch ($merge_choice) {
case 1 :
//手机号
$member_model = $this->phoneMemberSave($uid, $member_info_model, $member_model, $mobile);
break;
case 2 :
//公众号
$fans = McMappingFans::getFansById($uid);
if ($fans) {
$member_model = $this->fansMemberSave($uid, $member_info_model, $member_model, $mobile);
} else {
if ($member_info_model->createtime < $member_model->createtime) {
$member_model = $this->phoneMemberSave(
$uid,
$member_info_model,
$member_model,
$mobile
);
} elseif ($member_info_model->createtime > $member_model->createtime) {
$member_model = $this->fansMemberSave(
$uid,
$member_info_model,
$member_model,
$mobile
);
}
}
break;
case 3 :
//小程序
$mini_fans = MemberMiniAppModel::getFansById($uid);
if ($mini_fans) {
$member_model = $this->fansMemberSave($uid, $member_info_model, $member_model, $mobile);
} else {
if ($member_info_model->createtime < $member_model->createtime) {
$member_model = $this->phoneMemberSave(
$uid,
$member_info_model,
$member_model,
$mobile
);
} elseif ($member_info_model->createtime > $member_model->createtime) {
$member_model = $this->fansMemberSave(
$uid,
$member_info_model,
$member_model,
$mobile
);
}
}
break;
case 4 :
//app
$app_fans = MemberWechatModel::getFansById($uid);
if ($app_fans) {
$member_model = $this->fansMemberSave($uid, $member_info_model, $member_model, $mobile);
} else {
if ($member_info_model->createtime < $member_model->createtime) {
$member_model = $this->phoneMemberSave(
$uid,
$member_info_model,
$member_model,
$mobile
);
} elseif ($member_info_model->createtime > $member_model->createtime) {
$member_model = $this->fansMemberSave(
$uid,
$member_info_model,
$member_model,
$mobile
);
}
}
break;
case 5 :
//alipay
$app_fans = MemberAlipay::getFansById($uid);
if ($app_fans) {
$member_model = $this->fansMemberSave($uid, $member_info_model, $member_model, $mobile);
} else {
if ($member_info_model->createtime < $member_model->createtime) {
$member_model = $this->phoneMemberSave(
$uid,
$member_info_model,
$member_model,
$mobile
);
} elseif ($member_info_model->createtime > $member_model->createtime) {
$member_model = $this->fansMemberSave(
$uid,
$member_info_model,
$member_model,
$mobile
);
}
}
break;
default :
//注册时间
if ($member_info_model->createtime < $member_model->createtime) {
$member_model = $this->phoneMemberSave(
$uid,
$member_info_model,
$member_model,
$mobile
);
} elseif ($member_info_model->createtime > $member_model->createtime) {
$member_model = $this->fansMemberSave($uid, $member_info_model, $member_model, $mobile);
}
break;
}
}
} catch (ShopException $exception) {
return $this->errorJson($exception->getMessage());
}
if (!$member_model) {
return $this->errorJson('手机号码绑定失败!');
}
$salt = Str::random(8);
$member_model->salt = $salt;
$member_model->mobile = $mobile;
$member_model->password = md5($password . $salt);
$member_model->gender = $gender ?: 0;
if (request()->input('realname')) {
$member_model->realname = request()->input('realname');
}
$member_model->birthyear = $birthday[0] ?: 0;
$member_model->birthmonth = $birthday[1] ?: 0;
$member_model->birthday = $birthday[2] ?: 0;
$member_model->idcard = $idcard ?: '';
$member_model->idcard_addr = $idcard_addr ?: '';
$member_shop_info = MemberShopInfo::uniacid()->where('member_id', $member_model->uid)->first();
$customDatas['customDatas'] = $customDatas;
//自定义表单
$member_form = (new MemberService())->updateMemberForm($customDatas);
if (!empty($member_form)) {
$member_shop_info->member_form = json_encode($member_form);
}
if (!$member_model) {
return $this->errorJson('手机号码绑定失败!');
}
//赋值地址
if (!empty($address)) {
$member_shop_info->province = $address['province'] ?: '';
$member_shop_info->city = $address['city'] ?: '';
$member_shop_info->area = $address['area'] ?: '';
$member_shop_info->province_name = $address['province_name'] ?: '';
$member_shop_info->city_name = $address['city_name'] ?: '';
$member_shop_info->area_name = $address['area_name'] ?: '';
$member_shop_info->address = $address['address'] ?: '';
}
$member_shop_info->custom_value = $custom_value;
if ($member_model->save() && $member_shop_info->save()) {
$member_shop_info->custom_value = $custom_value;
if ($member_model->save() && $member_shop_info->save()) {
if (Cache::has($member_model->uid . '_member_info')) {
Cache::forget($member_model->uid . '_member_info');
}
if (\YunShop::request()->positioning_success == 1) {
if (!is_null(\app\common\modules\shop\ShopConfig::current()->get('set_location'))) {
$class = array_get(
\app\common\modules\shop\ShopConfig::current()->get('set_location'),
'class'
);
$function = array_get(
\app\common\modules\shop\ShopConfig::current()->get('set_location'),
'function'
);
$class::$function(
$member_model->uid,
MemberLocation::TYPE_BIND_MOBILE,
\YunShop::request()->register_province,
\YunShop::request()->register_city
);
}
}
}
event(new MemberBindMobile($member_model));
if (Redis::exists('miniMemberMobile'.$mobile)) {
Redis::del('miniMemberMobile'.$mobile);
}
return $this->successJson('手机号码绑定成功');
} else {
return $this->errorJson('手机号码绑定失败');
}
} else {
return $this->errorJson('手机号或密码格式错误');
}
}
private function bindMobileVerify($request)
{
$formSet = json_decode(Setting::get('shop.form'), true);
if ($formSet['base']['basic_register']) {
//基础信息-注册填写
if ($formSet['base']['name'] && $formSet['base']['name_must'] && !$request['name']) {
throw new AppException('请填写姓名');
}
if ($formSet['base']['sex'] && $formSet['base']['sex_must'] && !$request['sex']) {
throw new AppException('请填写性别');
}
if ($formSet['base']['address'] && $formSet['base']['address_must'] && !$request['address']) {
throw new AppException('请填写详细地址');
}
if ($formSet['base']['birthday'] && $formSet['base']['birthday_must'] && !$request['birthday']) {
throw new AppException('请填写生日');
}
}
}
/**
* 保留手机号会员数据
* @param $uid 当前登录会员id
* @param $member_info_model 当前输入手机号会员model
* @param $member_model 当前登录会员model
* @param $mobile 当前输入手机号
* @return bool|mixed
*/
public function phoneMemberSave($uid, $member_info_model, $member_model, $mobile)
{
$hold_uid = $member_info_model['uid'];
$give_up_uid = $uid;
$this->validateYunSignData($give_up_uid);
$this->validateMerge($mobile);
//保存修改的信息
$merge_data = [
'uniacid' => \YunShop::app()->uniacid,
'before_uid' => $give_up_uid,
'after_uid' => $hold_uid,
'before_mobile' => $member_model->mobile,
'after_mobile' => $mobile,
'before_point' => $member_model->credit1 ?: 0.00,
'after_point' => bcadd($member_info_model->credit1, $member_model->credit1, 2) ?: 0.00,
'before_amount' => $member_model->credit2 ?: 0.00,
'after_amount' => bcadd($member_info_model->credit2, $member_model->credit2, 2) ?: 0.00,
'set_content' => json_encode($this->relation_base_set),
'merge_type' => 1,
];
//保存新积分、余额、token
$member_info_model->nickname = $member_model->nickname;
$member_info_model->avatar = $member_model->avatar;
//删除会员
$yz_member = MemberShopInfo::getMemberShopInfo($give_up_uid);
$exception = DB::transaction(
function () use ($give_up_uid, $hold_uid, $member_info_model, $merge_data, $yz_member) {
\app\backend\modules\member\models\MemberShopInfo::deleteMemberInfo($give_up_uid);
\app\common\models\Member::where('uid', $give_up_uid)->delete();
//公众号
McMappingFans::where('uid', $give_up_uid)->update(['uid' => $hold_uid]);
//小程序
MemberMiniAppModel::where('member_id', $give_up_uid)->update(['member_id' => $hold_uid]);
//app
MemberWechatModel::where('member_id', $give_up_uid)->update(['member_id' => $hold_uid]);
//聚合cps
if (Schema::hasTable('yz_member_aggregation_app')) {
DB::table('yz_member_aggregation_app')->where('member_id', $give_up_uid)->update(
['member_id' => $hold_uid]
);
}
//企业微信
if (Schema::hasTable('yz_member_customer')) {
DB::table('yz_member_customer')->where('uid', $give_up_uid)->update(['uid' => $hold_uid]);
}
//支付宝
\app\common\models\MemberAlipay::where('member_id', $give_up_uid)->update(['member_id' => $hold_uid]);
//统一
MemberUniqueModel::where('member_id', $give_up_uid)->update(['member_id' => $hold_uid]);
//合并处理服务
(new MemberMergeService($hold_uid, $give_up_uid, $merge_data))->handel();
$member_info_model->save();
\app\backend\modules\member\models\MemberShopInfo::where('member_id', $hold_uid)->update([
'access_token_1' => $yz_member->access_token_1,
'access_expires_in_1' => $yz_member->access_expires_in_1,
'refresh_token_1' => $yz_member->refresh_token_1,
'refresh_expires_in_1' => $yz_member->refresh_expires_in_1,
'access_token_2' => $yz_member->access_token_2,
'access_expires_in_2' => $yz_member->access_expires_in_2,
'refresh_token_2' => $yz_member->refresh_token_2,
'refresh_expires_in_2' => $yz_member->refresh_expires_in_2,
]);
}
);
if (!is_null($exception)) {
return false;
}
event(new MergeMemberEvent($hold_uid, $give_up_uid));
//查出要保留的会员信息
$member_model = MemberModel::getMemberById($hold_uid);
Session::set('member_id', $hold_uid);
return $member_model;
}
/**
* 保留粉丝会员数据
* @param $uid 当前登录会员id
* @param $member_info_model 输入手机号会员model
* @param $member_model 当前登录会员model
* @param $mobile 当前输入手机号
* @return bool|mixed
*/
public function fansMemberSave($uid, $member_info_model, $member_model, $mobile)
{
$hold_uid = $uid;
$give_up_uid = $member_info_model['uid'];
$this->validateYunSignData($give_up_uid);
$this->validateMerge($mobile);
$merge_data = [
'uniacid' => \YunShop::app()->uniacid,
'before_uid' => $give_up_uid,
'after_uid' => $hold_uid,
'before_mobile' => $member_info_model->mobile,
'after_mobile' => $mobile,
'before_point' => $member_info_model->credit1 ?: 0.00,
'after_point' => bcadd($member_info_model->credit1, $member_model->credit1, 2) ?: 0.00,
'before_amount' => $member_info_model->credit2 ?: 0.00,
'after_amount' => bcadd($member_info_model->credit2, $member_model->credit2, 2) ?: 0.00,
'set_content' => json_encode($this->relation_base_set),
'merge_type' => 1,
];
//删除会员
$exception = DB::transaction(function () use ($give_up_uid, $hold_uid, $member_model, $merge_data) {
\app\backend\modules\member\models\MemberShopInfo::deleteMemberInfo($give_up_uid);
\app\common\models\Member::where('uid', $give_up_uid)->delete();
//公众号
McMappingFans::where('uid', $give_up_uid)->update(['uid' => $hold_uid]);
//小程序
MemberMiniAppModel::where('member_id', $give_up_uid)->update(['member_id' => $hold_uid]);
//app
MemberWechatModel::where('member_id', $give_up_uid)->update(['member_id' => $hold_uid]);
//聚合cps
if (Schema::hasTable('yz_member_aggregation_app')) {
DB::table('yz_member_aggregation_app')->where('member_id', $give_up_uid)->update(
['member_id' => $hold_uid]
);
}
//企业微信
if (Schema::hasTable('yz_member_customer')) {
DB::table('yz_member_customer')->where('uid', $give_up_uid)->update(['uid' => $hold_uid]);
}
//支付宝
\app\common\models\MemberAlipay::where('member_id', $give_up_uid)->update(['member_id' => $hold_uid]);
//统一
MemberUniqueModel::where('member_id', $give_up_uid)->update(['member_id' => $hold_uid]);
//合并处理服务
(new MemberMergeService($hold_uid, $give_up_uid, $merge_data))->handel();
$member_model->save();
});
if (!is_null($exception)) {
return false;
}
event(new MergeMemberEvent($hold_uid, $give_up_uid));
//查出要保留的会员信息
$member_model = MemberModel::getMemberById($hold_uid);
Session::set('member_id', $hold_uid);
return $member_model;
}
private function validateMerge($mobile)
{
$type = request()->type;
$member_info = MemberModel::getId(\YunShop::app()->uniacid, $mobile);
$unique_info = MemberUniqueModel::getUnionidInfoByMemberId(
\YunShop::app()->uniacid,
$member_info['uid']
)->first();
$fans_info = McMappingFans::getFansById($member_info['uid']);
$mini_info = MemberMiniAppModel::getFansById($member_info['uid']);
$wechat_info = MemberWechatModel::getFansById($member_info['uid']);
$ali_info = MemberAlipay::getFansById($member_info['uid']);
if ($type != 8 && ($unique_info || $fans_info || $mini_info || $wechat_info)) {
throw new ShopException('该手机号已被绑定,不能重复绑定');
}
if ($type == 8 && $ali_info) {
throw new ShopException('该手机号已被绑定,不能重复绑定');
}
if ($type == 5 && !request()->scope && $member_info) { //request()->scope tjpcps
throw new ShopException('该手机号已被绑定,不能重复绑定');
}
}
/**
* 验证是否有芸签数据(有则不能合并)
* @param $give_up_uid 放弃的会员id
* @return bool true 有 false 无
*/
private function validateYunSignData($give_up_uid)
{
if (app('plugins')->isEnabled('yun-sign')) {
$person = PersonAccount::uniacid()->where(['uid' => $give_up_uid, 'status' => 1])->first();
if ($person) {
throw new ShopException('合并会员有个人认证数据,不能合并');
}
$contract_num = ContractNum::uniacid()->where('uid', $give_up_uid)->where('rest_num', '>', 0)->first();
if ($contract_num) {
throw new ShopException('合并会员有合同数量,不能合并');
}
$not_sign_contract = Contract::uniacid()->where('status', '<', 2)->whereHas(
'hasManyRole',
function ($q) use ($give_up_uid) {
$q->where(['uid' => $give_up_uid, 'status' => 0]);
}
)->first();
if ($not_sign_contract) {
throw new ShopException('合并会员有未签署合同,不能合并');
}
}
if (app('plugins')->isEnabled('shop-esign')) {
$shop_person = \Yunshop\ShopEsign\common\models\PersonAccount::uniacid()->where(
['uid' => $give_up_uid, 'status' => 1]
)->first();
if ($shop_person) {
throw new ShopException('合并会员有商城电子合同个人认证数据,不能合并');
}
$shop_not_sign_contract = \Yunshop\ShopEsign\common\models\Contract::uniacid()->where(
'uid',
$give_up_uid
)->where('status', '<', 2)->first();
if ($shop_not_sign_contract) {
throw new ShopException('合并会员有商城电子合同未签署合同,不能合并');
}
}
return false;
}
//会员信息同步
public function synchro($new_member, $old_member)
{
$member_merge_set = Setting::get('relation_base');
$type = \YunShop::request()->type;
\Log::debug('会员同步type:' . $type);
$type = empty($type) ? Client::getType() : $type;
$className = SynchronousUserInfo::create($type);
if ($className) {
if (empty($member_merge_set['is_merge_save_level']) || $member_merge_set['is_merge_save_level'] === 1) {
return $className->updateMember($old_member, $new_member);
} else {
return $className->updateMemberOther($old_member, $new_member);
}
} else {
return false;
}
}
/**
* 绑定提现手机号
*
*/
public function bindWithdrawMobile()
{
$mobile = \YunShop::request()->mobile;
$member_model = MemberShopInfo::getMemberShopInfo(\YunShop::app()->getMemberId());
if (\YunShop::app()->getMemberId() && \YunShop::app()->getMemberId() > 0) {
$check_code = MemberService::checkCode();
if ($check_code['status'] != 1) {
return $this->errorJson($check_code['json']);
}
$salt = Str::random(8);
$member_model->withdraw_mobile = $mobile;
if ($member_model->save()) {
return $this->successJson('手机号码绑定成功');
} else {
return $this->errorJson('手机号码绑定失败');
}
} else {
return $this->errorJson('手机号或密码格式错误');
}
}
/**
* @name 微信JSSDKConfig
* @param int $goods_id
*
* @return \Illuminate\Http\JsonResponse
* @author
*
*/
public function wxJsSdkConfig()
{
$member = \Setting::get('shop.member');
$requestType = (int)request()->input('type');
$info = [];
$config = [];
$is_true = false;
if (!$member['wechat_login_mode'] || $requestType == 1) {
if (config('app.framework') == 'platform') {
if (app('plugins')->isEnabled('wechat')) {
$is_true = true;
}
} else {
$is_true = true;
}
}
if ($is_true) {
$url = \YunShop::request()->url ?: '';
$account = AccountWechats::getAccountByUniacid(\YunShop::app()->uniacid);
$app = EasyWeChat::officialAccount([
'app_id' => $account->key,
'secret' => $account->secret
]);
$js = $app->jssdk;
$js->setUrl($url);
$config = $js->buildConfig(array(
'onMenuShareTimeline',
'onMenuShareAppMessage',
'showOptionMenu',
'scanQRCode',
'updateAppMessageShareData',
'updateTimelineShareData',
'startRecord',
'stopRecord',
'playVoice',
'pauseVoice',
'stopVoice',
'uploadVoice',
'downloadVoice',
'hideMenuItems',
'chooseImage',
'getLocalImgData',
'translateVoice',
'agentConfig'
));
$config = json_decode($config, 1);
}
if (\YunShop::app()->getMemberId()) {
$info = Member::select('uid', 'uniacid', 'mobile', 'nickname', 'avatar')->where(
'uid',
\YunShop::app()->getMemberId()
)->first();
if (!empty($info)) {
$info = $info->toArray();
}
}
$share = \Setting::get('shop.share');
if ($share) {
if ($share['icon']) {
$share['icon'] = replace_yunshop(yz_tomedia($share['icon']));
}
$share = [
'title' => $share['title'] ?: '',
'icon' => $share['icon'] ?: '',
'desc' => $share['desc'] ?: '',
'url' => $share['url'] ?: ''
];
}
$shop = \Setting::get('shop');
$shop['icon'] = replace_yunshop(yz_tomedia($shop['logo']));
$shop['share']['icon'] = yz_tomedia($shop['share']['icon']);
//精简数据 优化
foreach ($shop as $k => $v) {
if (!in_array($k, ['shop', 'share', 'icon'])) {
unset($shop[$k]);
} elseif ($k == 'shop') {
$shop[$k] = [
"name" => $v['name'] ?: '',
"logo" => $v['logo'] ?: '',
"logo_url" => $v['logo_url'] ?: '',
"copyright" => $v['copyright'] ?: '',
"cservice" => $v['cservice'] ?: '',
];
}
}
if (!is_null(\app\common\modules\shop\ShopConfig::current()->get('customer_service'))) {
$class = array_get(\app\common\modules\shop\ShopConfig::current()->get('customer_service'), 'class');
$function = array_get(\app\common\modules\shop\ShopConfig::current()->get('customer_service'), 'function');
$ret = $class::$function(request()->goods_id, request()->type);
if ($ret) {
if (is_array($ret)) {
foreach ($ret as $rk => $rv) {
$shop[$rk] = $rv;
}
} else {
$shop['cservice'] = $ret;
}
}
}
if (is_null($share) && is_null($shop)) {
$share = [
'title' => '商家分享',
'icon' => '#',
'desc' => '商家分享'
];
}
if (app('plugins')->isEnabled('designer')) {
$index = (new RecordsController())->shareIndex();
foreach ($index['data'] as $value) {
foreach ($value['page_type_cast'] as $item) {
if ($item == 1) {
$designer = json_decode(htmlspecialchars_decode($value['page_info']))[0]->params;
if (!empty($designer->title) || !empty($designer->img) || !empty($designer->desc)) {
$share['title'] = $designer->title;
$share['icon'] = $designer->img;
$share['desc'] = $designer->desc;
}
break;
}
}
}
}
$data = [
'config' => $config,
'info' => $info, //商城设置
'shop' => $shop,
'share' => $share, //分享设置
];
return $this->successJson('', $data);
}
public function designer(Request $request, $integrated = null, $pageID = '')
{
$TemId = $pageID ?: \Yunshop::request()->id;
if ($TemId) {
$designerModel = Designer::getDesignerByPageID($TemId);
if ($designerModel) {
// $designerSet = json_decode(htmlspecialchars_decode($designerModel->page_info));
// foreach ($designerSet->toArray as &$set){
// if (isset($set['temp']) && $set['temp'] == 'topbar'){
// if (!empty($set['params']['title'])){
// $shop = Setting::get('shop.shop');
// $set['params']['title'] = $shop['name'];
// $set['params']['img'] = $shop['logo'];
// }
// }
// }
$designerSet = json_decode(htmlspecialchars_decode($designerModel->page_info));
if ($designerSet[0]->temp == 'topbar') {
$share = Setting::get('shop.share');
$designer['title'] = $designerSet[0]->params->title ?: $share['title'];
$designer['img'] = $designerSet[0]->params->img ?: $share['icon'];
$designer['desc'] = $designerSet[0]->params->desc ?: $share['desc'];
}
if (is_null($integrated)) {
return $this->successJson('获取数据成功!', $designer);
} else {
return show_json(1, $designer);
}
}
}
if (is_null($integrated)) {
return $this->successJson('参数有误!', []);
} else {
return show_json(1, '');
}
}
/**
* 申请协议
*
* @return \Illuminate\Http\JsonResponse
*/
public function applyProtocol()
{
$protocol = Setting::get('apply_protocol');
if ($protocol) {
return $this->successJson('获取数据成功!', $protocol);
}
return $this->successJson('未检测到数据!', []);
}
/**
* 推广基本设置
*
* @return \Illuminate\Http\JsonResponse
*/
public function AgentBase()
{
$info = \Setting::get('relation_base');
if ($info) {
return $this->successJson('', [
'banner' => replace_yunshop(yz_tomedia($info['banner']))
]);
}
return $this->errorJson('暂无数据', []);
}
public function guideFollow(Request $request, $integrated = null)
{
$member_id = \YunShop::app()->getMemberId();
if (empty($member_id)) {
if (is_null($integrated)) {
return $this->errorJson('用户未登录', []);
} else {
return show_json(0, '用户未登录');
}
}
if ($request->type == 1) {
$set = \Setting::get('shop.share');
$fans_model = McMappingFans::getFansById($member_id);
$mid = \app\common\models\Member::getMid();
if ($set['follow'] == 1 && $fans_model->follow === 0) {
if ($mid != null && $mid != 'undefined' && $mid > 0) {
$member_model = Member::getMemberById($mid);
$logo = $member_model->avatar;
$text = $member_model->nickname;
} else {
$setting = Setting::get('shop');
$account = AccountWechats::getAccountByUniacid(\YunShop::app()->uniacid);
$logo = replace_yunshop(yz_tomedia($setting['shop']['logo']));
$text = $account->name;
}
if (is_null($integrated)) {
return $this->successJson('', [
'logo' => $logo,
'text' => $text,
'url' => $set['follow_url'],
'follow_img' => replace_yunshop(yz_tomedia($set['follow_img'])),
'type' => isset($set['type']) ? $set['type'] : 1,
]);
} else {
return show_json(1, [
'logo' => $logo,
'text' => $text,
'url' => $set['follow_url'],
'follow_img' => replace_yunshop(yz_tomedia($set['follow_img'])),
'type' => isset($set['type']) ? $set['type'] : 1, //优化加上链接,图片(0是图片)
]);
}
}
}
if (is_null($integrated)) {
return $this->errorJson('暂无数据', []);
} else {
return show_json(0, '暂无数据');
}
}
//会员广告(涉及小程序第一次登陆)
public function getAdvertisement(Request $request, $integrated = null)
{
$advertisement_data = \Setting::get('designer.first-screen');
$type = $request ? $request->type : \YunShop::request()->type;
//empty( Cookie::get('memberlogin_status')) && 去除登录缓存验证,前度做处理
if (($advertisement_data['switch'] || $advertisement_data['Midswitch']) &&
($advertisement_data['rule'] == 0 || $advertisement_data['Midrule'] == 0) &&
$type != 2) {
if ($advertisement_data['type'] == 0) {
unset($advertisement_data['link'], $advertisement_data['prolink']);
}
setcookie('memberlogin_status', '1');
if (is_null($integrated)) {
return $this->successJson('', [
'advertisement' => $advertisement_data,
]);
} else {
return show_json(1, [
'advertisement' => $advertisement_data,
]);
}
}
if (($advertisement_data['switch'] || $advertisement_data['Midswitch']) && $type == 2) {
if (!$this->firstLogin()) {
if (is_null($integrated)) {
return $this->errorJson('暂无信息');
} else {
return show_json(1, '暂无信息');
}
}
//if ($advertisement_data['type'] == 1) {
//unset($advertisement_data['time']);
if ($advertisement_data['rule'] == 1) {
unset($advertisement_data['link']);
}
//}
if (is_null($integrated)) {
return $this->successJson('ok', [
'advertisement' => $advertisement_data,
]);
} else {
return show_json(1, [
'advertisement' => $advertisement_data,
]);
}
}
if (is_null($integrated)) {
return $this->errorJson('暂无信息');
} else {
return show_json(1, '暂无信息');
}
}
//
/**
* 小程序第一次登录
* @param $name 避免有插件或其他类型获取加多一个类型
*/
private function firstLogin($name = '')
{
//0点时间戳
$start = strtotime(date("Y-m-d"), time());
$end = $start + 60 * 60 * 24;
$member_id = \YunShop::app()->getMemberId();
$member_first_login = Cache::get($member_id . 'first_login' . $name);
if ($member_first_login) {
$data = explode('#', $member_first_login);
$datatime = $data[1];
}
if (!$member_first_login || $datatime >= $end || $datatime < $start) {
//小程序今天第一次登录
Cache::put($member_id . 'first_login' . $name, $member_id . '#' . time(), 1440);
return true;
}
return false;
}
/**
* 装修2.0 小程序是否首次登录
*/
public function getFirstLogin($name = '')
{
$member_id = \YunShop::app()->getMemberId();
$type = $request ? $request->type : \YunShop::request()->type;
if ($member_id && $type == 2) {
return $this->firstLogin($name);
}
return false;
}
public function memberInfo()
{
$member_id = request()->input('uid');
if (empty($member_id)) {
return $this->errorJson('会员不存在');
}
$member_info = MemberModel::select(['nickname', 'avatar', 'realname'])->uniacid()->where(
'uid',
$member_id
)->first();
if (empty($member_info)) {
return $this->errorJson('会员不存在');
}
return $this->successJson('', $member_info);
}
public function forget()
{
Session::clear('member_id');
redirect(Url::absoluteApp('home'))->send();
}
public function memberFromHXQModule()
{
$uniacid = \YunShop::app()->uniacid;
$member_id = \YunShop::request()->uid;
if (!empty($member_id)) {
$member_shop_info_model = MemberShopInfo::getMemberShopInfo($member_id);
if (is_null($member_shop_info_model)) {
(new MemberService)->addSubMemberInfo($uniacid, (int)$member_id);
}
$mid = \YunShop::request()->mid ?: 0;
Member::createRealtion($member_id, $mid);
\Log::debug('------HXQModule---------' . $member_id);
\Log::debug('------HXQModule---------' . $mid);
return $this->successJson('ok');
}
return $this->errorJson('uid为空');
}
/**
* 同步模块支付宝用户
* @return string
*/
public function dsAlipayUserModule()
{
$uniacid = \YunShop::app()->uniacid;
$member_id = \YunShop::request()->uid;
$userInfo = \YunShop::request()->user_info;
if (!is_array($userInfo)) {
$userInfo = json_decode($userInfo, true);
}
if (!empty($member_id)) {
if (app('plugins')->isEnabled('alipay-onekey-login') && $userInfo) {
$bool = MemberAlipay::insertData($userInfo, ['member_id' => $member_id, 'uniacid' => $uniacid]);
if (!$bool) {
return json_encode(['status' => 0, 'result' => '支付宝用户信息保存失败']);
}
} else {
return json_encode(['status' => 0, 'result' => '未开启插件或未接受到支付宝用户信息']);
}
$member_shop_info_model = MemberShopInfo::getMemberShopInfo($member_id);
if (is_null($member_shop_info_model)) {
(new MemberService)->addSubMemberInfo($uniacid, (int)$member_id);
}
$mid = \YunShop::request()->mid ?: 0;
Member::createRealtion($member_id, $mid);
\Log::debug('------HXQModule---------' . $member_id);
\Log::debug('------HXQModule---------' . $mid);
return json_encode(['status' => 1, 'result' => 'ok']);
}
return json_encode(['status' => 0, 'result' => 'uid为空']);
}
public function getCustomField(Request $request, $integrated = null)
{
// member.member.get-custom-field
$member = Setting::get('shop.member');
$data = [
'is_custom' => $member['is_custom'],
'custom_title' => $member['custom_title'],
'is_validity' => $member['level_type'] == 2 ? true : false,
'term' => $member['term'] ? $member['term'] : 0,
];
if (is_null($integrated)) {
return $this->successJson('获取自定义字段成功!', $data);
} else {
return show_json(1, $data);
}
}
public function saveCustomField()
{
// member.member.sava-custom-field
$member_id = \YunShop::app()->getMemberId();
$custom_value = \YunShop::request()->get('custom_value');
$data = [
'custom_value' => $custom_value,
];
$request = MemberShopInfo::where('member_id', $member_id)->update($data);
if ($request) {
return $this->successJson('保存成功!', []);
}
return $this->successJson('保存失败!', []);
}
public function withdrawByMobile()
{
$trade = \Setting::get('shop.trade');
if ($trade['is_bind'] && \YunShop::app()->getMemberId() && \YunShop::app()->getMemberId() > 0) {
$member_model = MemberShopInfo::getMemberShopInfo(\YunShop::app()->getMemberId());
if ($member_model && $member_model->withdraw_mobile) {
$is_bind_mobile = 0;
} else {
$is_bind_mobile = 1;
}
} else {
$is_bind_mobile = 0;
}
return $this->successJson('', ['is_bind_mobile' => $is_bind_mobile]);
}
/**
* 修复关系链
*
* 历史遗留问题
*/
public function fixRelation()
{
set_time_limit(0);
//获取修改数据
$members = MemberShopInfo::uniacid()
->where('parent_id', '!=', 0)
->where('is_agent', 1)
->where('status', 2)
->where('relation', '')
->orWhereNull('relation')
->orWhere('relation', '0,')
->whereNull('deleted_at')
->get();
if (!$members->isEmpty()) {
foreach ($members as $member) {
//yz_members
if ($member->is_agent == 1 && $member->status == 2) {
Member::setMemberRelation($member->member_id, $member->parent_id);
}
}
}
echo 'yz_member修复完毕<BR>';
//yz_agents
//获取修改数据
$agents = Agents::uniacid()
->where('parent_id', '!=', 0)
->whereNull('deleted_at')
->where('parent', '')
->orWhereNull('parent')
->orWhere('parent', '0,')
->get();
foreach ($agents as $agent) {
$rows = DB::table('yz_member')
->select()
->where('uniacid', $agent->uniacid)
->where('member_id', $agent->member_id)
->where('parent_id', $agent->parent_id)
->where('is_agent', 1)
->where('status', 2)
->whereNull('deleted_at')
->first();
if (!empty($rows)) {
$agent->parent = $rows['relation'];
$agent->save();
}
}
echo 'yz_agents修复完毕';
}
public function memberRelationFilter()
{
$data = MemberModel::filterMemberRoleAndLevel();
return $this->successJson('', $data);
}
public function isOpenRelation(Request $request, $integrated = null)
{
//是否显示我的推广 和 withdraw_status是否显示提现
$switch = PortType::popularizeShow(\YunShop::request()->type);
$data = [
'switch' => $switch
];
if (is_null($integrated)) {
return $this->successJson('', $data);
} else {
return show_json(1, $data);
}
}
public function anotherShare()
{
$order_ids = \YunShop::request()->order_ids;
$mid = \YunShop::app()->getMemberId();
if (empty($order_ids)) {
return $this->errorJson('参数错误', '');
}
if (empty($mid)) {
return $this->errorJson('用户未登陆', '');
}
$title = Setting::get('shop.pay.another_share_title');
$another_share_type = Setting::get('shop.pay.another_share_type') == 2 ? 2 : 1;
$url = yzAppFullUrl(
'/member/payanotherdetail',
['pid' => $mid, 'order_ids' => $order_ids, 'share_type' => $another_share_type]
);
$order_goods = Order::find($order_ids)->hasManyOrderGoods;
if (is_null($order_goods)) {
return $this->errorJson('订单商品不存在', '');
}
if (empty($title)) {
$title = '土豪大大,跪求代付';
}
if (request()->type == 2) {
$file_name = 'another_oid_' . $order_ids . '_mid_' . $mid;
$page = 'packageD/buy/payanotherDetail/payanotherDetail';//todo 需要更换
$scene = 'id=' . $order_ids . ',p=' . $mid . ',t=' . $another_share_type;
$dir = 'storage/app/public/mini-qr/another-pay/' . \YunShop::app()->uniacid; //商城根目录下
try {
$mini_code_helper = new MiniCodeHelper($dir, $file_name, $page, $scene, 300);
$code_url = $mini_code_helper->url();
} catch (ShopException $exception) {
$code_url = '';
}
} else {
$h5_code = new \app\common\helpers\QrCodeHelper($url, 'app/public/qr/another-pay');
$code_url = $h5_code->url();
}
$data = [
'title' => $title,
'url' => $url,
'code_url' => $code_url,
'content' => $order_goods[0]->title,
'img' => replace_yunshop(yz_tomedia($order_goods[0]->thumb))
];
return $this->successJson('', $data);
}
public function getEnablePlugins(Request $request, $integrated = null)
{
$memberId = \YunShop::app()->getMemberId();
$arr = (new MemberCenterService())->getMemberData($memberId);//获取会员中心页面各入口
if (is_null($integrated)) {
return $this->successJson('ok', $arr);
} else {
return show_json(1, $arr);
}
}
public function isOpenHuanxun()
{
$huanxun = \Setting::get('plugin.huanxun_set');
if (app('plugins')->isEnabled('huanxun')) {
if ($huanxun['withdrawals_switch']) {
return $this->successJson('', $huanxun['withdrawals_switch']);
}
}
return $this->errorJson('', 0);
}
/**
* 推广申请页面数据
*/
public function shareinfo()
{
$data = MemberRelation::uniacid()->where(['status' => 1])->get();
$become_term = unserialize($data[0]['become_term']);
$goodsid = explode(',', $data[0]['become_goods_id']);
foreach ($goodsid as $key => $val) {
$online_good = Goods::where('status', 1)
->select('id', 'title', 'thumb', 'price', 'market_price')
->find($val);
if ($online_good) {
$online_good['thumb'] = replace_yunshop(yz_tomedia($online_good['thumb']));
$online_goods[] = $online_good;
$online_goods_keys[] = $online_good->id;
}
}
unset($online_good);
$goodskeys = range(0, count($online_goods_keys) - 1);
$data[0]['become_goods'] = array_combine($goodskeys, $online_goods);
$termskeys = range(0, count($become_term) - 1);
$become_term = array_combine($termskeys, $become_term);
$member_uid = \YunShop::app()->getMemberId();
$status = $data[0]['become_order'] == 1 ? 3 : 1;
$terminfo = [];
foreach ($become_term as $v) {
if ($v == 2) {
$terminfo['become_ordercount'] = $data[0]['become_ordercount'];
}
if ($v == 3) {
$terminfo['become_moneycount'] = $data[0]['become_moneycount'];
}
if ($v == 4) {
$terminfo['goodsinfo'] = $data[0]['become_goods'];
}
if ($v == 5) {
$terminfo['become_selfmoney'] = $data[0]['become_selfmoney'];
}
}
$data[0]['become_term'] = $terminfo;
if ($data[0]['become'] == 2) {
//或
$data[0]['tip'] = '满足以下任意条件都可以成为推广员';
} elseif ($data[0]['become'] == 3) {
//与
$data[0]['tip'] = '满足以下所有条件才可以成为推广员';
}
$data[0]['getCostTotalNum'] = Order::where('status', '>=', $status)->where('uid', $member_uid)->count('id');
$data[0]['getCostTotalPrice'] = Order::where('status', '>=', $status)->where('uid', $member_uid)->sum('price');
if (app('plugins')->isEnabled('sales-commission')) {
$data[0]['getSelfMoney'] = \Yunshop\SalesCommission\models\SalesCommission::sumDividendAmountByUid(
$member_uid
);
} else {
$data[0]['getSelfMoney'] = 0;
if (in_array(5, $become_term)) {
foreach ($become_term as $k => $v) {
if ($v == 5) {
unset($become_term[$k]);
}
}
$become_term = array_values($become_term);
}
}
$data[0]['become_term_id'] = $become_term;
$account = AccountWechats::getAccountByUniacid(\YunShop::app()->uniacid);
$mid = \app\common\models\Member::getMid();
$m_member = MemberShopInfo::where('member_id', \YunShop::app()->getMemberId())->first();
if ($m_member->parent_id != $mid && $m_member->parent_id != 0) {
$mid = $m_member->parent_id ?: 0;
}
$parent_name = '';
if (empty($mid)) {
$parent_name = '总店';
} else {
$parent_model = MemberModel::getMemberById($mid);
if (!empty($parent_model)) {
$parent_member = $parent_model->toArray();
$status = '';
if ($parent_model['inviter']) {
$status = '(暂定)';
}
$parent_name = $parent_member['realname'] ?: $status . $parent_member['nickname'];
}
}
if (!empty($member_model = MemberModel::getMemberById(\YunShop::app()->getMemberId()))) {
$member = $member_model->toArray();
}
$member_info = SubMemberModel::getMemberShopInfo(\YunShop::app()->getMemberId());
$data[0]['base_info'] = [
'shop_name' => $account['name'],
'parent_name' => $parent_name,
'realname' => $member['realname'],
'mobile' => $member['mobile'],
'status' => $member_info->status
];
return $this->successJson('ok', $data[0]);
}
/**
* 邀请页面验证
*/
public function memberInviteValidate()
{
$invite_code = request()->invite_code;
$parent = (new MemberShopInfo())->getInviteCodeMember($invite_code);
if ($parent) {
\Log::info('更新上级------' . \YunShop::app()->getMemberId());
MemberShopInfo::change_relation(\YunShop::app()->getMemberId(), $parent->member_id);
//增加邀请码使用记录
$model = new MemberInvitationCodeLog();
$model->uniacid = \YunShop::app()->uniacid;
$model->mid = $parent->member_id; //邀请用户
$model->member_id = \YunShop::app()->getMemberId(); //使用用户
$model->invitation_code = $invite_code;
$model->save();
return $this->successJson('ok', $parent);
} else {
return $this->errorJson('邀请码有误!请重新填写');
}
}
/**
* 邀请页面确认上级
*/
public function updateMemberInvite()
{
$parent_id = (integer)request()->parent_id ?: 0;
$invitation_code = '';
if ($parent_id) {
$invitation_code = MemberShopInfo::where('member_id', $parent_id)->first()->invite_code ?: '';
}
$model = new MemberInvitationCodeLog();
$model->uniacid = \YunShop::app()->uniacid;
$model->member_id = \YunShop::app()->getMemberId(); //使用用户
$model->mid = $parent_id; //邀请用户
$model->invitation_code = $invitation_code;
$model->save();
return $this->successJson('成功');
}
public function isValidatePage(Request $request, $integrated = null)
{
$member_id = \YunShop::app()->getMemberId();
$invite_page = 0;
$addressClass = \Setting::get(
'shop.trade.is_street'
) ? '\app\common\models\YzMemberAddress' : '\app\common\models\MemberAddress';
$data = [
'is_bind_mobile' => 0,
'invite_page' => 0,
'is_invite' => 0,
'is_login' => 0,
'invite_mobile' => MemberModel::getMobile($member_id) ? 1 : 0, // 是否已绑定手机号
'bind_address' => [
'is_bind_address' => !\YunShop::app()->getMemberId() || $addressClass::uniacid()->where('uid', \YunShop::app()->getMemberId())->where('isdefault', 1)->first() ? 1 : 0,
'bind_address_type' => 0,
'bind_address_page' => [],
],
'need_video' => 0
];
if (app('plugins')->isEnabled('real-name-auth')) {
$real_name_auth_set = RealNameAuthSet::uniacid()->first();
if ($member_id) {
$real_name_auth = RealNameAuth::getInfoByUid($member_id);
$data['is_auth'] = 0;
if ($real_name_auth->auth_status) {
$data['is_auth'] = 1;
}
}
$is_open = 0;
if (!$real_name_auth_set || $real_name_auth_set->status) {
$is_open = 1;
}
$data['real_name_auth_scene'] = $real_name_auth_set->auth_scene ?: [];
$data['real_name_auth_is_open'] = $is_open;
}
//爱心值加速池-钱包地址(钱包登录前端验证有用到)
if (app('plugins')->isEnabled('love-speed-pool')) {
$data['lsp_wallet_site'] = \Yunshop\LoveSpeedPool\model\WalletSite::getWalletSite(
\YunShop::app()->getMemberId()
) ?: '';
}
if (app('plugins')->isEnabled('phone-bill-recharge') && Setting::get('phone-bill-recharge.set.plugin_enable')) {
$data['phone_bill_recharge_member'] = \Yunshop\PhoneBillRecharge\services\MemberPhoneTips::getData();
}
//爆客码-爆客场景
if (app('plugins')->isEnabled('drainage-code') && app('plugins')->isEnabled('wechat-customers')) {
$data['drainage_code']['drainage_scene'] = SceneService::getCacheScene();
$data['drainage_code']['has_add_employee'] = SceneService::hasAddEmployee();
}
//强制绑定手机号
if (Cache::has('shop_member')) {
$member_set = Cache::get('shop_member');
} else {
$member_set = \Setting::get('shop.member');
}
if (!is_null($member_set)) {
$data['is_bind_mobile'] = $this->isBindMobile($member_set, $member_id);
$data['bind_mobile_page'] = $member_set['bind_mobile_page'] ?: [];
$data['invite_page'] = $member_set['invite_page'] ? 1 : 0;
$data['bind_address']['bind_address_type'] = intval($member_set['is_bind_address']) ?: 0;
$data['bind_address']['bind_address_page'] = $member_set['bind_address_page'] ?: [];
}
if ($data['is_bind_mobile']) {
if (is_null($integrated)) {
return $this->successJson('强制绑定手机开启', $data);
} else {
return show_json(1, $data);
}
}
if (!is_null(\app\common\modules\shop\ShopConfig::current()->get('get_video_access'))) {
$class = array_get(\app\common\modules\shop\ShopConfig::current()->get('get_video_access'), 'class');
$function = array_get(\app\common\modules\shop\ShopConfig::current()->get('get_video_access'), 'function');
$judge_res = $class::$function($member_id);
if (!$judge_res) {
$data['need_video'] = 1;
}
}
$type = \YunShop::request()->type;
$invitation_log = [];
if ($member_id) {
$mobile = \app\common\models\Member::where('uid', $member_id)->first();
if ($mobile->mobile) {
$invitation_log = 1;
} else {
$member = MemberShopInfo::uniacid()->where('member_id', $member_id)->first();
$invitation_log = MemberInvitationCodeLog::uniacid()->where('member_id', $member_id)->where(
'mid',
$member->parent_id
)->first();
}
}
$data['is_invite'] = $invitation_log ? 1 : 0;
$data['is_login'] = $member_id ? 1 : 0;
/**
* 新客下单插件,是否跳转独立购买页面
*
* 会员登陆后,需要验证会员等级
* 如果是默认等级 需要跳转制定选择商品购买页面
*/
$data['is_level_compel'] = 0;
if (app('plugins')->isEnabled('level-compel')) {
$data['is_level_compel'] = (new LevelCompelService())->getSetting($member_id);
}
if (is_null($integrated)) {
return $this->successJson('邀请页面开关', $data);
} else {
return show_json(1, $data);
}
}
public function confirmGoods()
{
$member_id = \YunShop::app()->getMemberId();
$member = MemberShopInfo::getMemberShopInfo($member_id);
$parent = MemberShopInfo::getMemberShopInfo($member->parent_id);
$invite_code = '';
if ($parent) {
$invite_code = $parent->invite_code ?: '';
}
$model = new MemberInvitationCodeLog();
$model->uniacid = \YunShop::app()->uniacid;
$model->member_id = $member_id;
$model->mid = $member->parent_id;
$model->invitation_code = $invite_code;
if (!$model->save()) {
return $this->errorJson('保存失败');
}
return $this->successJson('ok');
}
public function refuseGoods()
{
$invite_code = request()->invite_code;
$member_id = \YunShop::app()->getMemberId();
$parent = (new MemberShopInfo())->getInviteCodeMember($invite_code);
if (!$parent) {
return $this->errorJson('邀请码有误!请重新填写');
}
$yz_member = MemberShopInfo::getMemberShopInfo($member_id);
MemberShopInfo::change_relation($member_id, $parent->member_id);
$model = new MemberInvitationCodeLog();
$model->uniacid = \YunShop::app()->uniacid;
$model->member_id = $member_id;
$model->mid = $parent->member_id;
$model->invitation_code = $invite_code;
if (!$model->save()) {
return $this->errorJson('保存失败');
}
if (!$yz_member->inviter) {
event(new MemberNewOfflineEvent($member_id, $parent->member_id, false));
}
return $this->successJson('ok');
}
public function isValidatePageGoods()
{
$member_id = \YunShop::app()->getMemberId();
$log = MemberInvitationCodeLog::getLogByMemberId($member_id);
return $this->successJson('ok', [
'is_invite' => $log ? 1 : 0,
]);
}
public function getShopSet()
{
$data = [
'shop_set_name' => Setting::get('shop.shop.name') ?: '商城名称',
'default_invite' => Setting::get('shop.member.default_invite') ?: '',//默认邀请码
];
return $this->successJson('ok', $data);
}
public function getArticleQr()
{
if (app('plugins')->isEnabled('article')) {
$article_qr_set = Setting::get('plugin.article.qr');
$qr = MemberModel::getAgentQR();
if ($article_qr_set == 1) {
return $this->errorJson('二维码开关关闭!');
}
return $this->successJson('获取二维码成功!', $qr);
}
return $this->errorJson('文章插件未开启!');
}
public function isBindMobile($member_set, $member_id)
{
$is_bind_mobile = 0;
if ((0 < $member_set['is_bind_mobile']) && $member_id && $member_id > 0) {
$member_model = Member::getMemberById($member_id);
if ($member_model && empty($member_model->mobile)) {
$is_bind_mobile = intval($member_set['is_bind_mobile']);
}
}
return $is_bind_mobile;
}
public function isOpen()
{
$settinglevel = \Setting::get('shop.member');
$info['is_open'] = 0;
//判断是否显示等级页
if ($settinglevel['display_page']) {
$info['is_open'] = 1;
}
$info['level_type'] = $settinglevel['level_type'] ?: '0';
return show_json(1, $info);
}
public function pluginStore()
{
if (app('plugins')->isEnabled('store-cashier')) {
$store = Store::getStoreByUid(\YunShop::app()->getMemberId())->first();
if (!$store || $store->is_black == 1) {
return show_json(0, ['status' => 0]);
}
return show_json(1, ['status' => 1]);
}
return show_json(1, ['status' => 0]);
}
public function getMemberSetting(Request $request, $integrated)
{
$set = \Setting::get('shop.member');
//判断微信端是否开启了手机号登录
$data['wechat_login_mode'] = $set['wechat_login_mode'] ? true : false;
//判断是否显示等级页
$data['level']['is_open'] = $set['display_page'] ? 1 : 0;
$data['level']['level_type'] = $set['level_type'] ?: '0';
//获取自定义字段
$data['custom'] = [
'is_custom' => $set['is_custom'],
'custom_title' => $set['custom_title'],
'is_validity' => $set['level_type'] == 2 ? true : false,
'term' => $set['term'] ?: 0,
];
// 是否显示会员id
$data['show_member_id'] = $set['show_member_id'] == 1 ? 1 : 0;
$data['member_auth_pop_switch'] = Setting::get('plugin.min_app.member_auth_pop_switch') ? 1 : 0;
if (is_null($integrated)) {
return $this->successJson('获取自定义字段成功!', $data);
} else {
return show_json(1, $data);
}
}
public function getMemberOrder(Request $request, $integrated)
{
//订单显示
$order_info = \app\frontend\models\Order::getOrderCountGroupByStatus(
[Order::WAIT_PAY, Order::WAIT_SEND, Order::WAIT_RECEIVE, Order::REFUND]
);
$order['order'] = $order_info;
//酒店订单
if (app('plugins')->isEnabled('hotel')) {
$order['hotel_order'] = \Yunshop\Hotel\common\models\Order::getHotelOrderCountGroupByStatus(
[Order::WAIT_PAY, Order::WAIT_SEND, Order::WAIT_RECEIVE, Order::REFUND]
);
}
// 拼团订单
if (app('plugins')->isEnabled('fight-groups')) {
$order['fight_groups_order'] = \Yunshop\FightGroups\common\models\Order::getFightGroupsOrderCountStatus(
[Order::WAIT_PAY, Order::WAIT_SEND, Order::WAIT_RECEIVE, Order::COMPLETE, Order::REFUND]
);
}
// 0.1元拼团订单
if (app('plugins')->isEnabled('group-work')) {
$order['group_work_order'] = OrderModel::getGroupWorkOrderCountStatus(
[Order::WAIT_PAY, Order::WAIT_SEND, Order::WAIT_RECEIVE, Order::REFUND]
);
}
//抢团订单
if (app('plugins')->isEnabled('snatch-regiment')) {
$order['snatch_regiment_order'] = \Yunshop\SnatchRegiment\common\models\Order::getSnatchRegimentOrderCountStatus(
[Order::WAIT_PAY, Order::WAIT_SEND, Order::WAIT_RECEIVE, Order::COMPLETE, Order::REFUND]
);
}
//上门安装订单
if (app('plugins')->isEnabled('live-install')) {
$order['live_install_order'] = \Yunshop\LiveInstall\models\InstallOrder::getInstallOrderCountStatus(
[Order::WAIT_PAY, Order::WAIT_SEND, Order::WAIT_RECEIVE, Order::COMPLETE]
);
}
//上门安装师傅订单
if (app('plugins')->isEnabled('live-install') && \Yunshop\LiveInstall\services\SettingService::checkIsWorker()) {
$order['live_install_work_order'] = \Yunshop\LiveInstall\models\InstallOrder::getInstallOrderWorkCountStatus(
[2, 3, 4, 6]
);
}
//cps订单
if (app('plugins')->isEnabled('aggregation-cps')) {
$order['aggregation_cps_order'] = \Yunshop\AggregationCps\api\models\BingBirdOrderModel::countOrderByStatus();
}
// 新拼团订单
if (app('plugins')->isEnabled('ywm-fight-groups')) {
$order['ywm_fight_groups_order'] = \Yunshop\YwmFightGroups\common\models\Order::getFightGroupsOrderCountStatus(
[Order::WAIT_PAY, Order::WAIT_SEND, Order::WAIT_RECEIVE, Order::COMPLETE, Order::REFUND]
);
}
if (\app\common\services\plugin\leasetoy\LeaseToySet::whetherEnabled()) {
$order['lease_order'] = \Yunshop\LeaseToy\models\Order::getLeaseOrderCountGroupByStatus(
[Order::WAIT_PAY, Order::WAIT_SEND, Order::WAIT_RECEIVE, Order::COMPLETE]
);
}
//消费券联盟订单
if (app('plugins')->isEnabled('coupon-store') && \Yunshop\CouponStore\services\SettingService::getSetting()['open_state']) {
$order['coupon_store_order'] = \Yunshop\CouponStore\models\StoreOrder::getOrderCountStatus(
[Order::WAIT_PAY, Order::WAIT_SEND, Order::COMPLETE]
);
}
//周边游订单
if (app('plugins')->isEnabled('travel-around')) {
$order['travel_around_order'] = \Yunshop\TravelAround\models\FrontendOrder::GetTravelAroundOrderCountStatus(
[Order::WAIT_PAY, Order::WAIT_SEND, Order::WAIT_RECEIVE, Order::COMPLETE]
);;
}
//蛋糕叔叔订单
if (app('plugins')->isEnabled('yz-supply-cake')) {
$order['yz_supply_cake_order'] = \Yunshop\YzSupplyCake\models\FrontendOrder::GetYzSupplyCakeOrderCountStatus(
[Order::WAIT_PAY, Order::WAIT_SEND, Order::WAIT_RECEIVE, Order::COMPLETE]
);;
}
//
if (app('plugins')->isEnabled('union-cps')) {
$order['yz_union_cps_order'] = \Yunshop\UnionCps\common\models\UnionCpsOrder::GetYzUnionOrderCountStatus(
[Order::WAIT_PAY, Order::WAIT_SEND, Order::CLOSE]
);;
}
if (app('plugins')->isEnabled('yz-supply-lease')) {
$order['yz_supply_lease_order'] = \Yunshop\YzSupplyLease\common\models\FrontendOrder::GetYzSupplyLeaseOrderCountStatus(
[Order::WAIT_PAY, Order::WAIT_SEND, Order::WAIT_RECEIVE, Order::COMPLETE]
);;
}
foreach ($order as $key => $item) {
$order[$key] = array_values(collect($item)->sortBy('status')->all());
}
// //宠物医院插件会员中心模板化显示 todo;前端说没用了,我就注释掉了
// $order['current']= MemberCenter::current()->all();
if (is_null($integrated)) {
return $this->successJson('获取会员订单成功!', $order);
} else {
return show_json(1, $order);
}
}
public function getMemberOrderName(Request $request, $integrated)
{
//订单名字
$order['order'] = '商城订单';
//酒店订单
if (app('plugins')->isEnabled('hotel')) {
$order['hotel_order'] = '酒店订单';
}
// 拼团订单
if (app('plugins')->isEnabled('fight-groups')) {
$order['fight_groups_order'] = '拼团订单';
}
// 0.1元拼团订单
if (app('plugins')->isEnabled('group-work')) {
$setGroupWrok = \Setting::get('plugin.group_work');
$order['group_work_order'] = $setGroupWrok['plugin_name'] ? $setGroupWrok['plugin_name'] : '0.1元拼订单';
}
//抢团订单
if (app('plugins')->isEnabled('snatch-regiment')) {
$order['snatch_regiment_order'] = '抢团订单';
}
//上门安装订单
if (app('plugins')->isEnabled('live-install')) {
$another_name = \Yunshop\LiveInstall\services\SettingService::getAnotherName();
$order['live_install_order'] = $another_name['plugin_name'] . '订单';
//上门安装师傅订单
if (\Yunshop\LiveInstall\services\SettingService::checkIsWorker()) {
$order['live_install_work_order'] = $another_name['worker_name'] . '订单';
}
}
if (app('plugins')->isEnabled('aggregation-cps')) {
$order['aggregation_cps_order'] = 'CPS订单';
}
if (app('plugins')->isEnabled('coupon-store')) {
$order['coupon_store_order'] = (defined(
'COUPON_STORE_PLUGIN_NAME'
) ? COUPON_STORE_PLUGIN_NAME : '消费券联盟') . '订单';
}
if (\app\common\services\plugin\leasetoy\LeaseToySet::whetherEnabled()) {
$order['lease_order'] = '租赁订单';
}
if (app('plugins')->isEnabled('ys-system')) {
$order['ys_system'] = '线下订单';
}
// 新拼团订单
if (app('plugins')->isEnabled('ywm-fight-groups')) {
$order['ywm_fight_groups_order'] = '新拼团订单';
}
// 周边游订单
if (app('plugins')->isEnabled('travel-around')) {
$order['travel_around_order'] = '周边游订单';
}
// 蛋糕叔叔订单
if (app('plugins')->isEnabled('yz-supply-cake')) {
$order['yz_supply_cake_order'] = '蛋糕订单';
}
// 聚推联盟订单
if (app('plugins')->isEnabled('union-cps')) {
$order['yz_union_cps_order'] = '聚推联盟订单';
}
// 供应链租赁订单
if (app('plugins')->isEnabled('yz-supply-lease')) {
$order['yz_supply_lease_order'] = '供应链租赁订单';
}
if (is_null($integrated)) {
return $this->successJson('获取会员订单成功!', $order);
} else {
return show_json(1, $order);
}
}
public function memberData()
{
if (!miniVersionCompare('1.1.141') || !versionCompare('1.1.140')) {
return $this->oldMemberData();
}
return $this->successJson('', app('MemberCenter')->getData());
}
public function oldMemberData()
{
$request = Request();
//查看会员订单
$this->dataIntegrated((new MemberDesignerController())->index($request, true), 'designer');
if (
(miniVersionCompare('1.1.109') && versionCompare('1.1.109')) &&
($this->apiData['designer'] && $this->apiData['designer']['status'] == false)) {
//版本符合且没有自定义设置装修
if (app('plugins')->isEnabled('decorate') && \Setting::get('plugin.decorate.is_open') == "1") {
//会员中心模版
$view_set = \Yunshop\Decorate\models\DecorateTempletModel::getList(
['is_default' => 1, 'type' => 1],
'*',
false
);
if (empty($view_set) || $view_set->code == 'member01') {
return $this->newMemberData();
}
}
}
$this->dataIntegrated($this->getUserInfo($request, true), 'member');
$this->dataIntegrated($this->getEnablePlugins($request, true), 'plugins');
//是否显示我的推广
// $this->dataIntegrated($this->isOpenRelation($request, true), 'relation');
//查看自定义
// $this->dataIntegrated($this->getCustomField($request, true), 'custom');
//查看等级是否开启
// $this->dataIntegrated($this->isOpen(), 'level');
//查看自己是否是门店店主
// $this->dataIntegrated($this->pluginStore(), 'isStore');
//查看会员设置
$this->dataIntegrated($this->getMemberSetting($request, true), 'setting');
//查看会员订单
$this->dataIntegrated($this->getMemberOrder($request, true), 'order');
$this->dataIntegrated($this->getMemberOrderName($request, true), 'order_name');
return $this->successJson('', $this->apiData);
}
/**
* 新版会员中心数据
* @return \Illuminate\Http\JsonResponse
*/
public function newMemberData()
{
$request = Request();
$this->dataIntegrated($this->getUserInfo($request, true), 'member');
//查看会员设置
$this->dataIntegrated($this->getMemberSetting($request, true), 'setting');
//查看会员订单
$this->dataIntegrated($this->getMemberOrder($request, true), 'order');
$this->dataIntegrated($this->getMemberOrderName($request, true), 'order_name');
$memberCenterData = new MemberCenterDataService($this->apiData);
$this->apiData['plugins'] = $memberCenterData->getEnablePlugins();
$this->apiData['service'] = $memberCenterData->getService(true);
$this->apiData['plugins_data'] = $memberCenterData->getPluginData(''); //默认第一个
if (app('plugins')->isEnabled('decorate') && Setting::get('plugin.decorate.is_open') && Setting::get(
'decorate.mc_one_default.open_state'
)) {
$this->apiData['plugins_data']['nav'] = DecorateDefaultTabModel::formNav(
$this->apiData['plugins_data']['nav']
);
}
// $this->dataIntegrated($memberCenterData->getPluginData(''), 'plugins_data');
return $this->successJson('', $this->apiData);
}
/**
* 会员中心模板01列表数据获取
* @return \Illuminate\Http\JsonResponse
*/
public function pluginData(): \Illuminate\Http\JsonResponse
{
if (!miniVersionCompare('1.1.141') || !versionCompare('1.1.140')) {
return $this->oldPluginData();
}
$code = request()->code;
if (!$code) {
return $this->errorJson('参数错误');
}
$data = app('MemberCenter')->getPluginDataDetail($code);
return $this->successJson('ok', $data);
}
public function oldOluginData(): \Illuminate\Http\JsonResponse
{
$code = request()->code;
if (!$code) {
return $this->errorJson('参数错误');
}
$memberCenterData = new MemberCenterDataService();
$data = $memberCenterData->getPluginData($code, false);
return $this->successJson('ok', ['data' => $data['data']]);
}
/**
* 更多工具、插件
*/
public function morePlugins()
{
if (!miniVersionCompare('1.1.141') || !versionCompare('1.1.140')) {
return $this->oldMorePlugins();
}
$data = app('MemberCenter')->getViewTypeAllData1();
return $this->successJson('ok', $data);
}
public function oldMorePlugins()
{
$memberId = \YunShop::app()->getMemberId();
$memberCenter = new MemberCenterService();
$arr = $memberCenter->getMemberData($memberId);//获取会员中心页面各入口
$newArr = $memberCenter->defaultPluginData($memberId);;
foreach ($arr as $key => $item) {
if (!in_array($key, ['is_open', 'hotel', 'plugins', 'ViewSet'])) {
$newArr = array_merge($newArr, $item);
}
}
unset($arr);
$newArr = collect($newArr);
$plugin = $memberCenter->morePluginData();
foreach ($plugin as $key => $item) {
$plugin[$key]['plugin'] = $newArr->whereIn('name', $item['plugin'])->all();
$plugin[$key]['plugin'] = array_values($plugin[$key]['plugin']);
}
return $this->successJson('ok', ['plugin' => $plugin]);
}
/**
* @return \Illuminate\Http\JsonResponse
* @throws AppException
*/
public function getMemberList()
{
app('db')->cacheSelect = true;
$member_referral = new MemberReferralService();
$this->dataIntegrated($member_referral->getMyAgentData_v2(), 'agent_data');
$this->dataIntegrated($member_referral->getMyAgent_v2(), 'my_agent');
$this->dataIntegrated($member_referral->getMyReferral_v2(), 'my_referral');
$this->dataIntegrated($member_referral->getMyReferralParents(), 'my_referral_parents');
$this->apiData['set'] = [
'member_order_status' => \Setting::get('shop.relation_base.member_order_status')
];
// $request = Request();
// $this->dataIntegrated($this->getMyAgentData_v2($request, true), 'agent_data');
// $this->dataIntegrated($this->getMyAgent_v2($request, true), 'my_agent');
// $this->dataIntegrated($this->getMyReferral_v2($request, true), 'my_referral');
// $this->dataIntegrated($this->getMyReferralParents($request), 'my_referral_parents');
$this->pluginEnable();
return $this->successJson('', $this->apiData);
}
public function getMiniTemplateCorrespond()
{
app('db')->cacheSelect = true;
$status = \YunShop::request()->get("small_type");
$status = empty($status) ? 0 : $status;
$list = MiniTemplateCorresponding::uniacid()->where("small_type", $status)->get();
$list = empty($list) ? [] : $list->toArray();
$mini = MinAppTemplateMessage::where('is_open', 1)->pluck("title");
$mini = empty($mini) ? [] : $mini->toArray();
if ($list) {
foreach ($list as $key => $value) {
if (!in_array($value['template_name'], $mini)) {
unset($list[$key]);
}
}
}
$list = array_values($list);
event($event = new OrderMiniNoticeListEvent($list, $status, intval(request()->order_id) ?: 0));
$list = $event->getList();
if (count($list) > 3) {
array_splice($list, 3);
}
return $this->successJson("", $list);
}
public function pluginEnable()
{
if (app('plugins')->isEnabled('regional-reward')) {
$regional_set = array_pluck(Setting::getAllByGroup('regional-reward')->toArray(), 'value', 'key');
if ($regional_set['achievement_show'] == 1) {
$this->apiData['my_achievement'] = true;
}
}
if (app('plugins')->isEnabled('member-center-agent') && \Setting::get('plugin.member-center-agent.is_open')) {
$this->apiData['is_link'] = true;
}
}
/**
* 会员定位记录
*/
public function saveMemberLocation()
{
$data = [];
$data['uniacid'] = \Yunshop::app()->uniacid;
$data['member_id'] = \YunShop::app()->getMemberId();
$data['province_name'] = request()->province_name; //省
$data['city_name'] = request()->city_name; //市
$data['district_name'] = request()->district_name; //区
$data['longitude'] = request()->longitude; //经度
$data['latitude'] = request()->latitude; //纬度
if (!$data['member_id']) {
return $this->errorJson('会员不存在!');
}
foreach ($data as $key => $value) {
if (!$value) {
return $this->errorJson('定位数据错误!');
}
}
$memberPosition = MemberPosition::getMemberLocation($data['member_id']);
if (!$memberPosition) {
$memberPosition = new MemberPosition();
}
$memberPosition->fill($data);
if ($memberPosition->save()) {
return $this->successJson('会员位置信息记录成功');
}
return $this->errorJson('会员位置信息记录失败');
}
/**
* 获取小程序会员手机号
*
* @return \Illuminate\Http\JsonResponse
*/
public function miniMemberMobile()
{
$code = \YunShop::request()->code;
if (empty($code)) {
return $this->errorJson('手机号获取凭证不能为空');
}
$data = app(MemberMiniAppService::class)->getPhoneNumber($code);
if ($data['errcode'] == 0 && $data['errmsg'] == 'ok') {
Redis::setex(('miniMemberMobile'.$data['phone_info']['purePhoneNumber']), 300, 1);
}
return $this->successJson('ok', $data);
}
public function invitationCode()
{
$member_id = \YunShop::app()->getMemberId();
$qrCodeUrl = '';
if (request()->input('type') == 2) {
$waxCode = new \app\common\services\wechat\WxaQrCodeService(
'static/qrcode/invitation/' . \YunShop::app()->uniacid
);
$waxCode->setParameter('scene', "m={$member_id}&lk=1");
$waxCode->setParameter('page', 'packageF/sign_in_subscribe/invite/invite');
$qrCodeUrl = $waxCode->getQrCode();
}
return $this->successJson('小程序码', ['qr_code_url' => $qrCodeUrl]);
}
// 会员概况及关系
public function myRelationShip(){
// 参数获取
$uid = (int)request()->input('uid', 0);
if($uid <= 0) return $this->errorJson('无有效用户!');
$memberReferral = new MemberReferralService();
// 获取当前用户基本信息
$self_info = $memberReferral->getAgentData($uid);
$children = $memberReferral->getAgentData($self_info['member_children_ids']);
return $this->successJson('success', compact('self_info','children'));
}
// 获取指定订单列表
public function getOrderList(){
// 参数获取
$orderType = request()->input('order_type');
if(empty($orderType)) return $this->errorJson('非法请求!');
$memberReferral = new MemberReferralService();
// 获取当前用户基本信息
$orderList = $memberReferral->getOrderList($orderType);
return $this->successJson('success', $orderList);
}
}