添加:个人信息编辑 - 用户微信绑定功能

修复:经销商文创等级不能修改的问题
添加:权重值持有信息添加导出功能
This commit is contained in:
wuhui_zzw 2023-12-06 17:42:23 +08:00
parent a7f69f600d
commit cef2eaa33a
7 changed files with 299 additions and 16 deletions

View File

@ -0,0 +1,136 @@
<?php
namespace app\backend\modules\order\controllers;
use app\common\components\BaseController;
use app\common\models\Goods;
use app\common\models\Member;
use app\frontend\modules\member\services\MemberCartService;
use app\frontend\modules\memberCart\MemberCartCollection;
/**
* Common: 模拟下单 模拟用户下单并且支付,数据为真实数据,慎用!!!
* Author: wu-hui
* Time: 2023/12/06 9:18
* Class ImitateCreateOrderController
* @package app\backend\modules\order\controllers
*/
class ImitateCreateOrderController extends BaseController{
public function useInlet(){
debug("暂停开发,暂不使用...");
// 获取要处理的列表
$list = $this->getList();
// 循环处理
foreach($list as $key => $createOrderInfo){
try{
echo "<hr />";
echo "开始处理第 {$key} 条数据:<br />UID-{$createOrderInfo['uid']}&nbsp;&nbsp;&nbsp;购买的{$createOrderInfo['total']}个&nbsp;&nbsp;&nbsp;{$createOrderInfo['goods_name']}";
// 模拟下单
$this->imitateCreateOrderOperate($createOrderInfo);
echo "<br />处理完成 - SUCCESS";
}catch(\Exception $e){
echo "<br />处理完成 - <span style='color: red;'>处理失败</span>".$e->getMessage();
}
}
debug("数据处理完成");
}
// 获取数据列表 - 调试数据
private function getList(){
// 获取用户信息
$userIds = Member::uniacid()->pluck('uid')->toArray();
// 获取商户信息
$goodsList = Goods::uniacid()->select(['id','title'])->get()->keyBy('id')->toArray();
$goodsIds = array_column($goodsList,'id');
// 生成数据
$list = [];
for($i = 1; $i <= 3 ; $i++){
$currentGoodsId = $goodsIds[array_rand($goodsIds)];
$currentUid = $userIds[array_rand($userIds)];
$list[] = [
'goods_name' => $goodsList[$currentGoodsId]['title'],
'goods_id' => $currentGoodsId,
'uid' => $currentUid,
'total' => rand(1,10),
'time' => time()
];
}
return $list;
}
// 模拟下单 暂停开发,暂不使用
private function imitateCreateOrderOperate($createOrderInfo){
// request()->goods = [
// 'goods_id' => $createOrderInfo['goods_id'],
// 'total' => $createOrderInfo['total'],
// 'option_id' => 0,
// ];
debug(request()->input());
//订单组
$trade = $this->getMemberCarts()->getTrade(Member::find($createOrderInfo['uid']));
$trade->generate();
$orderIds = $trade->orders->pluck('id')->implode(',');
//生成订单,触发事件
debug(['orderIds'=>$orderIds]);
}
/**
* @return static
*/
private function _getMemberCarts()
{
$goods_params = is_array(request()->input('goods')) ? request()->input('goods') : json_decode(request()->input('goods'), true);
debug([$goods_params]);
$memberCarts = collect($goods_params)->map(function ($memberCart) {
return MemberCartService::newMemberCart($memberCart);
});
return $memberCarts;
}
/**
* @return MemberCartCollection
* @throws \app\common\exceptions\AppException
*/
private function getMemberCarts()
{
if (!isset($this->memberCarts)) {
$memberCarts = new MemberCartCollection($this->_getMemberCarts());
$memberCarts->loadRelations();
$memberCarts->validate();
$this->memberCarts = $memberCarts;
}
return $this->memberCarts;
}
}

View File

@ -96,6 +96,7 @@ class MemberInfoController extends ApiController
'avatar_image' => $member['avatar_image'],
'can_update_nickname' => $formSet['base']['change_info'] ? 1 : 0,
'can_update_avatar' => $formSet['base']['change_info'] ? 1 : 0,
'has_one_fans' => $member['has_one_fans'] && $member['has_one_fans']['uid'] > 0,
];
$return_data['basic_info'] = $this->basicInfo($member);
$return_data['fixed_diy_field'] = $this->fixedDiyField($member);

View File

@ -15,6 +15,7 @@ use app\common\events\member\MemberBindMobile;
use app\common\events\member\RegisterByMobile;
use app\common\exceptions\MemberNotLoginException;
use app\common\exceptions\ShopException;
use app\common\facades\EasyWeChat;
use app\common\facades\RichText;
use app\common\helpers\Cache;
use app\common\helpers\Client;
@ -32,12 +33,14 @@ use app\common\services\aliyun\AliyunSMS;
use app\common\services\Session;
use app\common\services\txyunsms\SmsSingleSender;
use app\framework\Http\Request;
use app\frontend\modules\member\models\McMappingFansModel;
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\SubMemberModel;
use app\frontend\modules\member\models\MemberWechatModel;
use app\frontend\modules\member\services\factory\MemberFactory;
use app\frontend\modules\member\services\MemberOfficeAccountService;
use app\frontend\modules\member\services\MemberPluginSmsService;
use app\frontend\modules\member\services\MemberService;
use Illuminate\Support\Facades\Cookie;
@ -221,9 +224,9 @@ class RegisterController extends ApiController
$request = request()->all();
$register_type = $request['register_type'];
if ($register_type==2) {
list($data,$sub_data) = $this->registerVerify($request, 2);
[$data,$sub_data] = $this->registerVerify($request, 2);
} else {
list($data,$sub_data) = $this->registerVerify($request);
[$data,$sub_data] = $this->registerVerify($request);
}
\Log::debug('---新注册---',[$data,$sub_data]);
//添加mc_members表
@ -1083,4 +1086,101 @@ class RegisterController extends ApiController
throw new MemberNotLoginException('请登录', $_SERVER['QUERY_STRING']);
}
}
// 绑定微信
public function wechatBinding(){
// 参数获取
$uniacid = \YunShop::app()->uniacid;
$uid = \YunShop::app()->getMemberId();
$scope = \YunShop::request()->scope ?: 'userinfo'; //scope: base|home|userinfo
$code = \YunShop::request()->code;
// if (Setting::get('shop.member')['wechat_login_mode'] == '1') {
// return (new MemberOfficeAccountService())->isPhoneLogin($uniacid);
// }
// 回调地址 必须带mid
$callback = ($_SERVER['REQUEST_SCHEME'] ? $_SERVER['REQUEST_SCHEME'] : 'http') . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$wechat_scope = 'snsapi_userinfo';//$handleModel->wechatScope();
$config = [
'oauth' => [
'scopes' => [$wechat_scope],
'callback' => $callback,
]
];
$app = EasyWeChat::officialAccount($config);
$oauth = $app->oauth;
if($code){
try{
$oauthUser = $oauth->user();
$userinfo = $oauthUser->getOriginal();
$userinfo['access_token'] = $oauthUser->getAccessToken();
$userinfo['expires_in'] = 7200;
$userinfo['refresh_token'] = $oauthUser->getRefreshToken();
$user = $app->user->get($userinfo['openid']);
$userinfo = array_merge($user, $userinfo);
// 判断:当前微信账号是否已经绑定
$isHas = (int)McMappingFansModel::uniacid()
->where('uid','<>',$uid)
->where('openid',$userinfo['openid'])
->count();
if($isHas > 0){
$url = Url::absoluteApp('userinfo',['pageType'=>'UserInformation','wechat_binding_res' => 'error','wechat_binding_msg'=>'该微信号已绑定其他账号,请勿重复绑定']) . '&t=' . time();
redirect($url)->send();
exit;
}
// 修改用户 || 添加信息
if (isset($userinfo['subscribe']) && 1 == $userinfo['subscribe']) {
$subscribe = 1;
$followtime = explode(',', rtrim($userinfo['subscribe_time'],','));
$count = count($followtime);
$follow_time = $followtime[$count-1];
} else {
$subscribe = 0;
$follow_time = time();
}
$fansModel = McMappingFansModel::uniacid()->where('uid',$uid)->first();
if(!$fansModel) $fansModel = new McMappingFansModel();
$fansModel->openid = $userinfo['openid'];
$fansModel->unionid = !empty($userinfo['unionid']) ? $userinfo['unionid'] : '';
$fansModel->updatetime = time();
$fansModel->follow = $subscribe;
$fansModel->followtime = $follow_time;
if((int)$fansModel->fanid <= 0){
$fansModel->uid = $uid;
$fansModel->acid = $uniacid;
$fansModel->uniacid = $uniacid;
$fansModel->salt = Client::random(8);
$fansModel->nickname = stripslashes($userinfo['nickname']);
$fansModel->unfollowtime = 0;
$fansModel->tag = '';//小程序数据过长无法添加 base64_encode(serialize($userinfo));
}
$fansModel->save();
// 绑定信息后自动更新头像和昵称
Member::uniacid()->where('uid', $uid)->update([
'nickname' => stripslashes($userinfo['nickname']),
'avatar' => $userinfo['headimgurl']
]);
$url = Url::absoluteApp('userinfo',['pageType'=>'UserInformation','wechat_binding_res' => 'success']) . '&t=' . time();
redirect($url)->send();
}catch(\Exception $e){
$url = Url::absoluteApp('userinfo',['pageType'=>'UserInformation','wechat_binding_res' => 'error','wechat_binding_msg'=>$e->getMessage()]) . '&t=' . time();
redirect($url)->send();
exit;
}
} else {
return $this->successJson('',['url'=>$oauth->redirect()->getTargetUrl()]);
}
$url = Url::absoluteApp('home') . '&t=' . time();
redirect($url)->send();
exit;
}
}

View File

@ -175,9 +175,7 @@
<select class="form-control tpl-agent-level" name="level_id" data-agencyid="{{$item['id']}}">
<option>请选择等级</option>
@foreach($level as $value)
@if($value->level_type == 0)
<option value="{{$value->id}}" @if($item['level']==$value->id) selected @endif>{{$value->level_name}}</option>
@endif
<option value="{{$value->id}}" @if($item['level']==$value->id) selected @endif>{{$value->level_name}}</option>
@endforeach
</select>
</div>
@ -189,10 +187,8 @@
<div class="input-group level" style="display:none">
<select class="form-control tpl-agent-level" name="level_id" data-agencyid="{{$item['id']}}" data-leve_type="cultural">
<option>请选择等级</option>
@foreach($level as $value)
@if($value->level_type == 1)
<option value="{{$value->id}}" @if($item['cultural_level_id']==$value->id) selected @endif>{{$value->level_name}}</option>
@endif
@foreach($culturalLevel as $value)
<option value="{{$value->id}}" @if($item['cultural_level_id']==$value->id) selected @endif>{{$value->level_name}}</option>
@endforeach
</select>
</div>

View File

@ -4,9 +4,9 @@ namespace Yunshop\WeightValue\admin;
use app\common\components\BaseController;
use app\common\helpers\PaginationHelper;
use app\common\models\Order;
use app\common\services\ExportService;
use Illuminate\Support\Facades\DB;
use Yunshop\NewPoster\models\Poster;
use Yunshop\TeamDividend\models\TeamDividendAgencyModel;
use Yunshop\TeamDividend\models\TeamDividendLevelModel;
use Yunshop\TeamDividend\models\Uplog;
use Yunshop\WeightValue\models\WeightValue;
@ -153,6 +153,53 @@ class IndexController extends BaseController{
}
}
// 用户持有信息导出
public function exportExcel(){
// 参数获取
$search = request()->input('search_list');
$search = $search ? json_decode($search,true) : [];
// 条件生成
$where = [];
if($search['member_id'] > 0) $where[] = ['member_id','=',$search['member_id']];
if($search['team_dividend_agency_level_id'] > 0) $where[] = ['team_dividend_agency_level_id','=',$search['team_dividend_agency_level_id']];
// 列表获取
$model = WeightValue::uniacid()
->where($where)
->with([
'member' => function($query){
$query->select(['uid','nickname','realname','avatar']);
},
'level' => function($query){
$query->select(['id','level_name']);
},
])
->orderBy('id','DESC');
// 导出类
$file_name = '权重值用户持有统计明细'.date('Y年m月d日h时i分s秒', time());
$export_page = request()->export_page ? request()->export_page : 1;
$export_model = new ExportService($model, $export_page);
// 导出信息处理
$list = $model->get()->toArray();
// 循环处理数据
foreach($list as &$listItem){
[$listItem['total_quantity'],$listItem['ratio']] = WeightValue::getTotalAndRatio((int)$listItem['team_dividend_agency_level_id'],$listItem['quantity']);
}
$export_data[0] = ['信息ID', '会员UID', '会员昵称', '权重值类型', '平台总数', '用户持有数量', '占比(%)'];
foreach ($list as $key => $item) {
$export_data[$key + 1] = [
$item['id'],
$item['member']['uid'],
$item['member']['nickname'] ?? '',
$item['level'] ? $item['level']['level_name'].'权重值' : '',
$item['total_quantity'] ?? 0,
$item['quantity'] ?? 0,
$item['ratio'].'%',
];
}
$export_model->export($file_name, $export_data, 'plugin.weight-value.admin.index.index', 'direct_export');
exit;
}
public function test(){

View File

@ -552,7 +552,7 @@ class WeightValue extends BaseModel{
self::$weightValueLevelTotal[$name] = $total;
}
// 计算比例
$ratio = sprintf("%.2f",$quantity / $total * 100);
$ratio = (float)sprintf("%.2f",$quantity / $total * 100);
return [$total,$ratio];
}

View File

@ -153,6 +153,7 @@
</el-form-item>
<el-form-item>
<el-button type="primary" @click="clickSearch">查询</el-button>
<el-button @click="exportExcel">导出</el-button>
</el-form-item>
</el-form>
{{--表单--}}
@ -187,7 +188,7 @@
<template slot-scope="scope">
<span class="label label-default">[[scope.row.total_quantity || '0.00' ]]</span>
<span class="label label-info">[[scope.row.quantity || '0.00' ]]</span>
<span class="label label-warning">[[scope.row.ratio ? scope.row.ratio + '%' : '0.00' ]]</span>
<span class="label label-warning">[[scope.row.ratio + '%']]</span>
</template>
</el-table-column>
<el-table-column align="center" prop="created_at" label="操作">
@ -231,9 +232,6 @@
</el-form>
</template>
</el-dialog>
</div>
<script type="text/javascript">
@ -361,7 +359,12 @@
}
});
},
// 权重值变更 - 导出数据
exportExcel(){
let _this = this;
let searchList = this.search_list;
window.location.href = "{!! yzWebUrl('plugin.weight-value.admin.index.exportExcel') !!}" + '&search_list=' + JSON.stringify(searchList);
},
},