添加:邀请码激活及使用

This commit is contained in:
wuhui_zzw 2024-04-03 16:40:56 +08:00
parent 684391f7e2
commit f249e6d434
8 changed files with 192 additions and 13 deletions

View File

@ -51,7 +51,7 @@ class StoreGroupOrderDao extends BaseDao
->when(isset($where['paid']) && $where['paid'] !== '',function($query) use ($where){
$query->where('paid',$where['paid']);
})
->whereNotIn('activity_type',[30,31,32,33])
->whereNotIn('activity_type',[30,31,32,33,34])
->when(isset($where['paid']) && $where['paid'] !== '',function($query) use ($where){
$query->where('paid',$where['paid']);
})

View File

@ -44,10 +44,16 @@ class UserInviteCodeDao extends BaseDao{
})
->with([
'vipInfo' => function($query){
$query->field(['group_data_id','value','value as svip_name'])->withAttr('svip_name',function($val){
$query->field(['group_data_id','value','value as svip_name','value as svip_price','value as svip_info'])->withAttr('svip_name',function($val){
$value = json_decode($val,TRUE);
return $value['svip_name'] ?? '';
})->bind(['svip_name']);
})->withAttr('svip_price',function($val){
$value = json_decode($val,TRUE);
return $value['price'] ?? '';
})->withAttr('svip_info',function($val){
$value = json_decode($val,TRUE);
return $value ?? [];
})->bind(['svip_name','svip_price','svip_info']);
},
'activateUser' => function($query){
$query->field('uid,nickname,avatar');

View File

@ -3005,7 +3005,7 @@ class StoreOrderCreateRepository extends StoreOrderRepository{
// 整理订单数据
$orderList[] = [
'cartInfo' => [],
'activity_type' => $activityType,// 30=在线买单32=代理入驻33=参加活动支付
'activity_type' => $activityType,// 30=在线买单32=代理入驻33=参加活动支付34=邀请码支付
'commission_rate' => 0,
'order_type' => 0,
'is_virtual' => 1,

View File

@ -173,6 +173,9 @@ class StoreOrderRepository extends BaseRepository
}else if($groupOrder['activity_type'] == 33){
$data['title'] = '用户参加活动';
$data['mark'] = '余额支付' . floatval($groupOrder['pay_price']) . '元';
}else if($groupOrder['activity_type'] == 34){
$data['title'] = '邀请码激活';
$data['mark'] = '余额支付' . floatval($groupOrder['pay_price']) . '元';
}else if($groupOrder['activity_type'] == 35){
$merName = Merchant::where('mer_id',$groupOrder->with_goods_mer_id)->value('mer_name');
$data['title'] = '酒道馆['.$merName.']进货';
@ -279,7 +282,7 @@ class StoreOrderRepository extends BaseRepository
app()->make(ProductAssistSetRepository::class)->changStatus($order->orderProduct[0]['activity_id']);
}
if ($order->order_type == 1 && $order->status != 10) $order->verify_code = $this->verifyCode();
if (!in_array($order->activity_type,[30,31,32,33]) && $order->orderProduct[0]->product->type == 2) {
if (!in_array($order->activity_type,[30,31,32,33,34]) && $order->orderProduct[0]->product->type == 2) {
$order->status = 3;//2; todo 订单进入待评价改为已完成
$order->delivery_type = 6;
$order->delivery_name = '自动发货';
@ -287,7 +290,7 @@ class StoreOrderRepository extends BaseRepository
$isPoints = true;
}
// 判断:是否为在线买单、酒道馆补差价 在线买单,订单支付则订单完成
if(in_array($order->activity_type,[30,31,32,33])){
if(in_array($order->activity_type,[30,31,32,33,34])){
$order->status = 3;
}

View File

@ -235,4 +235,5 @@ class UserInviteCodeRepository extends BaseRepository{
}
}

View File

@ -5,24 +5,31 @@
namespace app\controller\api\user;
use app\common\dao\store\coupon\StoreCouponProductDao;
use app\common\model\user\UserInviteCode;
use app\common\model\user\UserOrder;
use app\common\model\user\UserVipExchangeCode;
use app\common\repositories\store\coupon\StoreCouponRepository;
use app\common\repositories\store\order\StoreOrderCreateRepository;
use app\common\repositories\store\order\StoreOrderRepository;
use app\common\repositories\store\product\ProductRepository;
use app\common\repositories\store\product\SpuRepository;
use app\common\repositories\system\groupData\GroupDataRepository;
use app\common\repositories\system\groupData\GroupRepository;
use app\common\repositories\system\merchant\MerchantRepository;
use app\common\repositories\system\serve\ServeOrderRepository;
use app\common\repositories\user\MemberinterestsRepository;
use app\common\repositories\user\UserBillRepository;
use app\common\repositories\user\UserInviteCodeRepository;
use app\common\repositories\user\UserOrderRepository;
use app\common\repositories\user\UserRepository;
use app\common\repositories\user\VipExchangeCodeRepository;
use crmeb\basic\BaseController;
use app\common\repositories\user\FeedbackRepository;
use crmeb\services\LockService;
use think\App;
use think\exception\ValidateException;
use think\facade\Db;
class Svip extends BaseController
{
@ -211,6 +218,141 @@ class Svip extends BaseController
return app('json')->success();
}
/**
* Common: 兑换码信息获取
* Author: wu-hui
* Time: 2024/04/03 11:33
* @return mixed
*/
public function inviteCodeInfo(){
// 参数获取
$exchangeCode = $this->request->param('exchange_code');
if(empty($exchangeCode)) throw new ValidateException('邀请码不存在!');
// 获取兑换码信息
$exchangeCodeInfo = app()->make(UserInviteCodeRepository::class)
->getSearchModel(['exchange_code'=>$exchangeCode])
->findOrEmpty()
->toArray();
if(empty($exchangeCodeInfo)) throw new ValidateException('兑换码不存在!');
return app('json')->success($exchangeCodeInfo);
}
/**
* Common: 邀请码下单并且支付
* Author: wu-hui
* Time: 2024/04/03 15:03
* @param StoreOrderCreateRepository $orderCreateRepository
* @return mixed
*/
public function inviteCodePayment(StoreOrderCreateRepository $orderCreateRepository){
// 参数获取
$uid = $this->request->uid();
$payInfo = $this->request->params(['pay_type', 'return_url', 'code']);
if (!in_array($payInfo['pay_type'], StoreOrderRepository::PAY_TYPE, true)) return app('json')->fail('请选择正确的支付方式');
// 获取邀请码信息
$exchangeCodeInfo = app()->make(UserInviteCodeRepository::class)
->getSearchModel(['exchange_code'=>$payInfo['code']])
->findOrEmpty()
->toArray();
$payInfo['money'] = (float)$exchangeCodeInfo['svip_price'] ?? 0;
// 判断:是否需要支付
if($payInfo['money'] <= 0){
// 无需支付 直接激活
UserInviteCode::where('exchange_code',$payInfo['code'])->update([
'activate_uid' => $uid,
'activate' => date('Y-m-d H:i:s'),
'status' => 1
]);
return app('json')->success("激活成功");
}
else{
// 发起支付
$groupOrder = app()
->make(LockService::class)
->exec('online_order.create',function() use ($payInfo,$orderCreateRepository){
$payType = array_search($payInfo['pay_type'],StoreOrderRepository::PAY_TYPE);
return $orderCreateRepository->onlinePayment($payType,$payInfo,$this->request->userInfo(),34);
});
// 记录订单信息
$orderId = app()->make(StoreOrderRepository::class)
->getSearch([])
->where('group_order_id',$groupOrder->group_order_id)
->value('order_id');
UserInviteCode::where('exchange_code',$payInfo['code'])->update([
'order_id' => $orderId,
]);
if ($groupOrder['pay_price'] == 0) {
app()->make(StoreOrderRepository::class)->paySuccess($groupOrder);
return app('json')->status('success', '支付成功', ['order_id' => $groupOrder['group_order_id']]);
}
try {
return app()->make(StoreOrderRepository::class)->pay($payInfo['pay_type'], $this->request->userInfo(), $groupOrder, $payInfo['return_url'], $this->request->isApp());
} catch (\Exception $e) {
return app('json')->status('error', $e->getMessage(), ['order_id' => $groupOrder->group_order_id]);
}
}
}
/**
* Common: 邀请码使用
* Author: wu-hui
* Time: 2024/04/03 16:25
* @param GroupDataRepository $groupDataRepository
* @param UserOrderRepository $userOrderRepository
* @return mixed
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function inviteUse(GroupDataRepository $groupDataRepository,UserOrderRepository $userOrderRepository){
// 参数获取
$exchangeCode = $this->request->param('exchange_code');
if(empty($exchangeCode)) throw new ValidateException('邀请码不存在!');
$user = $this->request->userInfo();
$uid = $this->request->uid();
Db::transaction(function () use ($groupDataRepository, $userOrderRepository, $user, $uid, $exchangeCode) {
// 获取兑换码信息
$exchangeCodeInfo = app()->make(UserInviteCodeRepository::class)
->getSearchModel(['exchange_code'=>$exchangeCode])
->findOrEmpty()
->toArray();
if(empty($exchangeCodeInfo)) throw new ValidateException('邀请码不存在!');
if($exchangeCodeInfo['status'] == 0) throw new ValidateException('邀请码未激活!');
if($exchangeCodeInfo['status'] == 2) throw new ValidateException('邀请码已被使用,请勿重复使用!');
if($exchangeCodeInfo['status'] == 3) throw new ValidateException('邀请码已作废!');
// 使用
$res = $groupDataRepository->getWhere(['group_data_id' => $exchangeCodeInfo['group_data_id'], 'status' => 1]);
if (!$res) throw new ValidateException('会员卡不存在!');
if ($user->is_svip == 3) throw new ValidateException('您已经是终身会员!');
if ($user->is_svip !== -1 && $res['value']['svip_type'] == 1) throw new ValidateException('兑换失败,您已开通该类型会员!');
// 模拟下单
$params['pay_type'] = 'free';
$params['return_url'] = '';
$params['is_app'] = $this->request->isApp();
$params['bind_mer_id'] = $exchangeCodeInfo['mer_id'] ?? 0;
$params['bind_staff_id'] = $exchangeCodeInfo['staff_id'] ?? 0;
$params['exchange_code'] = $exchangeCode;
$params['exchange_code_id'] = $exchangeCodeInfo['id'];
$userOrderRepository->add($res, $user, $params);
// 开通成功 修改信息
UserInviteCode::where('exchange_code',$exchangeCode)->update([
'use_user_id' => $uid,
'use_time' => date('Y-m-d H:i:s'),
'status' => 2
]);
// 绑定上下级关系
app()->make(UserRepository::class)->bindSpread($user, intval($exchangeCodeInfo['activate_uid']));
});
return app('json')->success();
}
}

View File

@ -7,11 +7,13 @@ use app\common\model\user\ExchangeIntegralRecord;
use app\common\model\user\ExchangeQuota;
use app\common\model\user\ExchangeQuotaRecord;
use app\common\model\user\User;
use app\common\model\user\UserInviteCode;
use app\common\repositories\marketing\activity\RecordRepository;
use app\common\repositories\marketing\AgentBrokerageRepository;
use app\common\repositories\system\merchant\MerchantRepository;
use app\common\repositories\user\ExchangePickupPointRepository;
use app\common\repositories\user\ExchangeQuotaRepository;
use app\common\repositories\user\UserInviteCodeRepository;
use crmeb\jobs\UserBrokerageLevelJob;
use think\facade\Log;
use think\facade\Queue;
@ -39,6 +41,9 @@ class OrderPaySuccessEvent{
}else if($groupOrder->activity_type == 33){
// 加入活动支付成功
$this->joinActivitySuccessHandle($groupOrder);
}else if($groupOrder->activity_type == 34){
// 邀请码激活
$this->inviteCodeActivation($groupOrder);
}else{
// 其他订单
$this->orderPaySuccessHandle($groupOrder);
@ -66,6 +71,8 @@ class OrderPaySuccessEvent{
Log::info('支付成功 - 邀请代理人员奖励及免审核 - 错误: '.var_export($data,1));
}else if($groupOrder->activity_type == 33){
Log::info('支付成功 - 加入活动支付成功 - 错误: '.var_export($data,1));
}else if($groupOrder->activity_type == 34){
Log::info('支付成功 - 邀请码激活 - 错误: '.var_export($data,1));
}else{
Log::info('支付成功 - 赠送酒卡额度 - 错误: '.var_export($data,1));
}
@ -240,5 +247,22 @@ class OrderPaySuccessEvent{
return true;
}
// 支付成功 - 邀请码激活
public function inviteCodeActivation($groupOrder){
foreach($groupOrder->orderList as $orderInfo){
UserInviteCode::where('order_id',(int)$orderInfo->order_id)->update([
'activate_uid' => $orderInfo->uid,
'activate' => date('Y-m-d H:i:s'),
'status' => 1
]);
}
return true;
}
}

View File

@ -332,14 +332,10 @@ Route::group('api/', function () {
})->prefix('api.community.');
//请求频率
Route::group( function () {
//付费会员购买
Route::post('svip/pay/:id', 'api.user.Svip/createOrder');
// 付费会员兑换
Route::post('sVip/vipExchangeCode', 'api.user.Svip/vipExchangeCode');
//订单检查
Route::group('order/v3', function () {
Route::post('check', 'PointsOrder/beforCheck');
@ -455,8 +451,6 @@ Route::group('api/', function () {
Route::group(function () {
// 商品兑换
Route::get('exchange/pointList', 'api.user.Exchange/getPointList');
// 付费会员
Route::group('svip', function () {
//价格列表
@ -465,8 +459,17 @@ Route::group('api/', function () {
Route::get('coupon_lst', '/svipCoupon');
Route::get('product_lst', '/svipProductList');
Route::post('coupon_receive/:id', '/receiveCoupon');
})->prefix('api.user.Svip');
// 邀请码
Route::get('getInviteInfo', '/inviteCodeInfo');
Route::get('invitePayment', '/inviteCodePayment');
Route::get('inviteUse', '/inviteUse');
})->prefix('api.user.Svip');
//社区
Route::group('community', function () {
//社区文章列表