parent
fb7e051be9
commit
d5fbab7a1d
|
|
@ -48,10 +48,16 @@ class VipExchangeCodeDao extends BaseDao{
|
|||
$query->field(['mer_id','mer_name'])->bind(['mer_name']);
|
||||
},
|
||||
'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']);
|
||||
},
|
||||
'user' => function($query){
|
||||
$query->field('uid,nickname,avatar');
|
||||
|
|
|
|||
|
|
@ -57,6 +57,7 @@ class UserBillRepository extends BaseRepository
|
|||
'mer_lock_money/order' => '商户佣金冻结',
|
||||
'now_money/brokerage' => '佣金转入余额',
|
||||
'now_money/pay_product' => '购买商品',
|
||||
'now_money/pay_vip' => '会员卡开通',
|
||||
'now_money/presell' => '支付预售尾款',
|
||||
'now_money/recharge' => '余额充值',
|
||||
'now_money/sys_dec_money' => '系统减少余额',
|
||||
|
|
|
|||
|
|
@ -8,12 +8,12 @@ namespace app\common\repositories\user;
|
|||
|
||||
use app\common\dao\user\LabelRuleDao;
|
||||
use app\common\dao\user\UserOrderDao;
|
||||
use app\common\model\system\merchant\Merchant;
|
||||
use app\common\model\user\User;
|
||||
use app\common\repositories\BaseRepository;
|
||||
use app\common\repositories\store\order\StoreOrderRepository;
|
||||
use app\common\repositories\system\groupData\GroupDataRepository;
|
||||
use crmeb\jobs\SendSmsJob;
|
||||
use crmeb\services\PayService;
|
||||
use FormBuilder\Factory\Elm;
|
||||
use think\exception\ValidateException;
|
||||
use think\facade\Db;
|
||||
use think\facade\Log;
|
||||
|
|
@ -76,14 +76,13 @@ class UserOrderRepository extends BaseRepository
|
|||
'bind_staff_id' => $params['bind_staff_id'] ?? '',
|
||||
'exchange_code' => $params['exchange_code'] ?? '',
|
||||
'exchange_code_id' => $params['exchange_code_id'] ?? 0,
|
||||
'source' => $params['source'] ?? 0,
|
||||
];
|
||||
|
||||
// 判断:兑换不需要支付
|
||||
if($data['exchange_code_id'] > 0 && !empty($data['exchange_code'])){
|
||||
if($data['source'] == 2){
|
||||
$data['pay_price'] = 0;
|
||||
$data['pay_type'] = 'free';
|
||||
}
|
||||
|
||||
$body = [
|
||||
'order_sn' => $order_sn,
|
||||
'pay_price' => $data['pay_price'],
|
||||
|
|
@ -99,8 +98,14 @@ class UserOrderRepository extends BaseRepository
|
|||
$info = $this->dao->create($data);
|
||||
if ($data['pay_price']){
|
||||
try {
|
||||
|
||||
// 余额支付
|
||||
if ($type === 'balance') return $this->payBalance($user, $data, $info->order_id);
|
||||
|
||||
|
||||
$service = new PayService($type,$body, 'user_order');
|
||||
$config = $service->pay($user);
|
||||
|
||||
return app('json')->status($type, $config + ['order_id' => $info->order_id]);
|
||||
} catch (\Exception $e) {
|
||||
// 判断:兑换不需要支付
|
||||
|
|
@ -180,4 +185,36 @@ class UserOrderRepository extends BaseRepository
|
|||
if ($user->phone) Queue::push(SendSmsJob::class,['tempId' => 'SVIP_PAY_SUCCESS','id' => ['phone' => $user->phone, 'date' => $date]]);
|
||||
return ;
|
||||
}
|
||||
|
||||
|
||||
// 余额支付
|
||||
public function payBalance(User $user, $data, $order_id){
|
||||
// 判断:是否开启余额支付
|
||||
if (!systemConfig('yue_pay_status')) throw new ValidateException('未开启余额支付');
|
||||
$balance = $user['now_money'] ?? 0;
|
||||
if ($balance < $data['pay_price']) throw new ValidateException('余额不足,请更换支付方式');
|
||||
// 余额支付处理
|
||||
Db::transaction(function () use ($user, $data, $balance, $order_id) {
|
||||
// 扣除用户余额
|
||||
$user->now_money = bcsub($user->now_money, $data['pay_price'], 2);
|
||||
$user->save();
|
||||
// 余额变更记录
|
||||
$userBillData = [
|
||||
'link_id' => $order_id,
|
||||
'status' => 1,
|
||||
'title' => '开通会员卡',
|
||||
'number' => $data['pay_price'],
|
||||
'mark' => '余额支付'.floatval($data['pay_price']).'元开通'.$data['title'],
|
||||
'balance' => $user->now_money
|
||||
];
|
||||
app()->make(UserBillRepository::class)->decBill($user['uid'], 'now_money', 'pay_vip', $data);
|
||||
|
||||
$this->paySuccess($data);
|
||||
});
|
||||
|
||||
return app('json')->status('success', '余额支付成功', ['order_id' => $order_id]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -169,8 +169,10 @@ class Svip extends BaseController
|
|||
}
|
||||
return app('json')->success($data ?? ['count' => 0,'list' => []]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Common: 会员卡兑换
|
||||
* Common: 兑换码 - 使用
|
||||
* Author: wu-hui
|
||||
* Time: 2024/03/02 18:46
|
||||
* @param GroupDataRepository $groupDataRepository
|
||||
|
|
@ -208,19 +210,98 @@ class Svip extends BaseController
|
|||
$params['bind_staff_id'] = $exchangeCodeInfo['staff_id'] ?? 0;
|
||||
$params['exchange_code'] = $exchangeCode;
|
||||
$params['exchange_code_id'] = $exchangeCodeInfo['id'];
|
||||
$params['source'] = 1;
|
||||
$userOrderRepository->add($res, $user, $params);
|
||||
// 开通成功 修改信息
|
||||
UserVipExchangeCode::where('id',$exchangeCodeInfo['id'])
|
||||
->update([
|
||||
'status' => 2,
|
||||
'use_time' => date("Y-m-d H:i:s",time()),
|
||||
'use_user_id' => $uid
|
||||
]);
|
||||
UserVipExchangeCode::where('id',$exchangeCodeInfo['id'])->update([
|
||||
'status' => 2,
|
||||
'use_time' => date("Y-m-d H:i:s",time()),
|
||||
'use_user_id' => $uid
|
||||
]);
|
||||
|
||||
return app('json')->success();
|
||||
}
|
||||
/**
|
||||
* Common: 兑换码信息获取
|
||||
* Common: 兑换码 - 信息获取
|
||||
* Author: wu-hui
|
||||
* Time: 2024/06/19 9:43
|
||||
* @param GroupDataRepository $groupDataRepository
|
||||
* @return mixed
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\DbException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
*/
|
||||
public function vipExchangeCodeInfo(GroupDataRepository $groupDataRepository){
|
||||
// 参数获取
|
||||
$exchangeCode = $this->request->param('exchange_code', '');
|
||||
$exchangeCodeInfo = $this->vipExchangeCodeGetInfo($exchangeCode);
|
||||
|
||||
return app('json')->success($exchangeCodeInfo);
|
||||
}
|
||||
/**
|
||||
* Common: 兑换码 - 获取兑换码信息
|
||||
* Author: wu-hui
|
||||
* Time: 2024/06/19 10:42
|
||||
* @param $exchangeCode
|
||||
* @return mixed
|
||||
*/
|
||||
protected function vipExchangeCodeGetInfo($exchangeCode){
|
||||
// 参数获取
|
||||
if(empty($exchangeCode)) throw new ValidateException('兑换码不存在!');
|
||||
$user = $this->request->userInfo();
|
||||
$uid = $this->request->uid();
|
||||
// 获取兑换码信息
|
||||
$exchangeCodeInfo = app()->make(VipExchangeCodeRepository::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 = app()->make(GroupDataRepository::class)->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('您已开通该类型会员!');
|
||||
|
||||
return $exchangeCodeInfo;
|
||||
}
|
||||
/**
|
||||
* Common: 兑换码 - 支付并且开通
|
||||
* Author: wu-hui
|
||||
* Time: 2024/06/19 11:42
|
||||
* @param StoreOrderCreateRepository $orderCreateRepository
|
||||
* @return mixed
|
||||
*/
|
||||
public function vipExchangeCodePayment(StoreOrderCreateRepository $orderCreateRepository){
|
||||
// 参数获取
|
||||
$uid = $this->request->uid();
|
||||
$user = $this->request->userInfo();
|
||||
$payInfo = $this->request->params(['pay_type', 'return_url', 'code']);
|
||||
if (!in_array($payInfo['pay_type'], StoreOrderRepository::PAY_TYPE, true)) return app('json')->fail('请选择正确的支付方式');
|
||||
// 兑换码信息
|
||||
$exchangeCodeInfo = $this->vipExchangeCodeGetInfo($payInfo['code']);
|
||||
$payInfo['money'] = (float)$exchangeCodeInfo['svip_price'] ?? 0;
|
||||
|
||||
return Db::transaction(function () use ($exchangeCodeInfo, $payInfo, $user) {
|
||||
$res = app()->make(GroupDataRepository::class)->getWhere(['group_data_id' => $exchangeCodeInfo['group_data_id'], 'status' => 1]);
|
||||
// 模拟下单
|
||||
$params['pay_type'] = $payInfo['pay_type'] ?? 'free';
|
||||
$params['return_url'] = $payInfo['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'] = $payInfo['code'];
|
||||
$params['exchange_code_id'] = $exchangeCodeInfo['id'];
|
||||
$params['source'] = 1;
|
||||
return app()->make(UserOrderRepository::class)->add($res, $user, $params);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Common: 邀请码 - 信息获取
|
||||
* Author: wu-hui
|
||||
* Time: 2024/04/03 11:33
|
||||
* @return mixed
|
||||
|
|
@ -229,17 +310,17 @@ class Svip extends BaseController
|
|||
// 参数获取
|
||||
$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('兑换码不存在!');
|
||||
if(empty($exchangeCodeInfo)) throw new ValidateException('邀请码不存在!');
|
||||
|
||||
return app('json')->success($exchangeCodeInfo);
|
||||
}
|
||||
/**
|
||||
* Common: 邀请码下单并且支付
|
||||
* Common: 邀请码 - 下单并且支付
|
||||
* Author: wu-hui
|
||||
* Time: 2024/04/03 15:03
|
||||
* @param StoreOrderCreateRepository $orderCreateRepository
|
||||
|
|
@ -300,7 +381,7 @@ class Svip extends BaseController
|
|||
}
|
||||
}
|
||||
/**
|
||||
* Common: 邀请码使用
|
||||
* Common: 邀请码 - 使用
|
||||
* Author: wu-hui
|
||||
* Time: 2024/04/03 16:25
|
||||
* @param GroupDataRepository $groupDataRepository
|
||||
|
|
@ -317,7 +398,7 @@ class Svip extends BaseController
|
|||
$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()
|
||||
|
|
@ -339,6 +420,7 @@ class Svip extends BaseController
|
|||
$params['bind_staff_id'] = $exchangeCodeInfo['staff_id'] ?? 0;
|
||||
$params['exchange_code'] = $exchangeCode;
|
||||
$params['exchange_code_id'] = $exchangeCodeInfo['id'];
|
||||
$params['source'] = 2;
|
||||
$userOrderRepository->add($res, $user, $params);
|
||||
// 开通成功 修改信息
|
||||
UserInviteCode::where('exchange_code',$exchangeCode)->update([
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ use app\common\model\marketing\AgentBrokerage;
|
|||
use app\common\model\store\service\StoreService;
|
||||
use app\common\model\system\merchant\Merchant;
|
||||
use app\common\model\user\ExchangeQuotaRecord;
|
||||
use app\common\model\user\UserVipExchangeCode;
|
||||
use app\common\repositories\user\ExchangeQuotaRepository;
|
||||
use think\facade\Log;
|
||||
|
||||
|
|
@ -23,6 +24,9 @@ class OrderVipPayEvent{
|
|||
$this->giveQuotaHandle($order, $vipInfo);
|
||||
// 会员卡开通成功 - 分佣操作
|
||||
$this->agentBrokerageHandle($order, $vipInfo);
|
||||
// 兑换码 - 支付开通成功处理
|
||||
$this->vipExchangeCodePaymentSuccessHandle($order, $vipInfo);
|
||||
|
||||
|
||||
|
||||
}catch(\Exception $e){
|
||||
|
|
@ -122,15 +126,11 @@ class OrderVipPayEvent{
|
|||
];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if(count($insertData) > 0) ExchangeQuotaRecord::insertAll($insertData);
|
||||
}
|
||||
// 会员卡开通成功 - 分佣操作
|
||||
private function agentBrokerageHandle($order, $vipInfo){
|
||||
Log::info('会员卡开通成功 - 分佣操作 - 开始: '.var_export($vipInfo,1));
|
||||
// Log::info('会员卡开通成功 - 分佣操作 - 开始: '.var_export($vipInfo,1));
|
||||
// 获取用户各个角色信息
|
||||
$bindStaffId = $order->bind_staff_id ?? 0;
|
||||
$bindMerId = $order->bind_mer_id ?? 0;
|
||||
|
|
@ -152,9 +152,9 @@ class OrderVipPayEvent{
|
|||
$deliveryAgentId = (int)Merchant::where('mer_id',$bindMerId)->value('agent_id');
|
||||
$agent8 = Agent::where('id',$deliveryAgentId)->where('agent_type',8)->findOrEmpty();
|
||||
$data = [
|
||||
'user_order_id' => $order->order_id,
|
||||
'staff_uid' => $bindStaffId,
|
||||
'staff_id' => $serviceId,
|
||||
'user_order_id' => $order->order_id ?? 0,
|
||||
'staff_uid' => $bindStaffId ?? 0,
|
||||
'staff_id' => $serviceId ?? 0,
|
||||
'staff_brokerage' => (float)$vipInfo['brokerage_staff'],
|
||||
'store_uid' => $agent7->uid ?? 0,
|
||||
'store_agent_id' => $agent7->id ?? 0,
|
||||
|
|
@ -177,6 +177,34 @@ class OrderVipPayEvent{
|
|||
AgentBrokerage::insert($data);
|
||||
}
|
||||
}
|
||||
// 兑换码 - 支付开通成功处理
|
||||
public function vipExchangeCodePaymentSuccessHandle($order, $vipInfo){
|
||||
// Log::info('会员卡开通成功 - 兑换码-支付开通成功处理 - 开始: '.var_export([
|
||||
// 'order_id' => $order->order_id ?? '',
|
||||
// 'uid' => $order->uid ?? '',
|
||||
// 'source' => $order->source ?? '',
|
||||
// 'exchange_code' => $order->exchange_code ?? '',
|
||||
// 'exchange_code_id' => $order->exchange_code_id ?? '',
|
||||
// ],1));
|
||||
// 这里仅处理兑换码 开通成功
|
||||
$source = $order->source ?? 0;
|
||||
$exchange_code_id = $order->exchange_code_id ?? 0;
|
||||
if($source != 1 || (int)$exchange_code_id <= 0) return false;
|
||||
// 修改兑换码状态
|
||||
UserVipExchangeCode::where('id', (int)$exchange_code_id)->update([
|
||||
'status' => 2,
|
||||
'use_time' => date("Y-m-d H:i:s",time()),
|
||||
'use_user_id' => $order->uid
|
||||
]);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -342,8 +342,8 @@ Route::group('api/', function () {
|
|||
Route::group( function () {
|
||||
//付费会员购买
|
||||
Route::post('svip/pay/:id', 'api.user.Svip/createOrder');
|
||||
// 付费会员兑换
|
||||
Route::post('sVip/vipExchangeCode', 'api.user.Svip/vipExchangeCode');
|
||||
// 付费会员兑换 已于2024-6-19 弃用
|
||||
// Route::post('sVip/vipExchangeCode', 'api.user.Svip/vipExchangeCode');
|
||||
//订单检查
|
||||
Route::group('order/v3', function () {
|
||||
Route::post('check', 'PointsOrder/beforCheck');
|
||||
|
|
@ -401,6 +401,19 @@ Route::group('api/', function () {
|
|||
Route::get('promote_qr_code', 'Merchant/promoteQrCode');// 推广二维码
|
||||
Route::get('online_payment_qr_code', 'Merchant/onlinePaymentQrCode');// 买单二维码
|
||||
})->prefix('api.store.merchant.');
|
||||
// 付费会员
|
||||
Route::group('svip', function () {
|
||||
// 邀请码
|
||||
Route::get('getInviteInfo', '/inviteCodeInfo');
|
||||
Route::get('invitePayment', '/inviteCodePayment');
|
||||
Route::get('inviteUse', '/inviteUse');
|
||||
// 兑换码
|
||||
Route::get('vipExchangeCodeInfo', '/vipExchangeCodeInfo');
|
||||
Route::post('vipExchangeCodePayment', '/vipExchangeCodePayment');
|
||||
|
||||
|
||||
|
||||
})->prefix('api.user.Svip');
|
||||
// 运营中心 - 公共
|
||||
Route::group('agent', function () {
|
||||
Route::get('agent_list', 'agentList');// 我的代理身份列表
|
||||
|
|
@ -424,9 +437,6 @@ Route::group('api/', function () {
|
|||
Route::get('delivery/payment_record', 'Delivery/paymentRecord');// 缴费记录
|
||||
Route::get('delivery/mer_list', 'Delivery/merList');// 绑定商户
|
||||
Route::post('delivery/allocation_order', 'Delivery/allocationOrder');// 分配缴费记录
|
||||
|
||||
|
||||
|
||||
})->prefix('api.marketing.agent.');
|
||||
// 供应商相关
|
||||
Route::group('supplier', function () {
|
||||
|
|
@ -475,8 +485,6 @@ Route::group('api/', function () {
|
|||
Route::post('apply_join', 'applyJoin');
|
||||
Route::post('apply_join_info', 'applyJoinInfo');
|
||||
Route::post('list', 'getList');
|
||||
|
||||
|
||||
})->prefix('api.store.merchant.Shareholder/');
|
||||
|
||||
|
||||
|
|
@ -495,10 +503,6 @@ Route::group('api/', function () {
|
|||
Route::get('coupon_lst', '/svipCoupon');
|
||||
Route::get('product_lst', '/svipProductList');
|
||||
Route::post('coupon_receive/:id', '/receiveCoupon');
|
||||
// 邀请码
|
||||
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