添加:邀请码激活及使用
This commit is contained in:
parent
684391f7e2
commit
f249e6d434
|
|
@ -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']);
|
||||
})
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -235,4 +235,5 @@ class UserInviteCodeRepository extends BaseRepository{
|
|||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -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 () {
|
||||
//社区文章列表
|
||||
|
|
|
|||
Loading…
Reference in New Issue