|
|
@ -24,8 +24,11 @@ use app\model\UserModel; |
|
|
|
use app\model\UserMoneyLogModel; |
|
|
|
use app\model\UserMoneyModel; |
|
|
|
use app\model\UserStockHkdModel; |
|
|
|
use app\model\UserStockJpLogModel; |
|
|
|
use app\model\UserStockJpModel; |
|
|
|
use app\model\UserStockLogModel; |
|
|
|
use app\model\UserStockModel; |
|
|
|
use app\model\UserVerifyLogModel; |
|
|
|
use app\utility\Jwt; |
|
|
|
use app\utility\UnqId; |
|
|
|
use think\exception\ValidateException; |
|
|
@ -216,17 +219,37 @@ class UserService extends BaseHomeService |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 检测用户是否为有效VIP [判断规则 - 用户购买过VIP, 每个VIP有效期30天] |
|
|
|
// 检测用户是否为有效VIP |
|
|
|
$isVip = false; |
|
|
|
$vipExpire = ""; //vip到期时间 |
|
|
|
$vipType = ""; // vip类型:青铜、白金、钻石; (管理端赠送的vip,以及vip兑换码兑换的都是显示免费标签) |
|
|
|
$purchaseInfo = PurchaseVipModel::where(['user_id'=>$userId])->find(); |
|
|
|
if (!empty($purchaseInfo)) { |
|
|
|
if ($purchaseInfo->expire >= date("Y-m-d H:i:s")) { |
|
|
|
$isVip = true; |
|
|
|
} |
|
|
|
$vipExpire = $purchaseInfo->expire; |
|
|
|
if ($purchaseInfo->vip_type == 0) { |
|
|
|
$vipType = "免费"; |
|
|
|
} else if ($purchaseInfo->vip_type == 1) { |
|
|
|
$vipType = "青铜"; |
|
|
|
} else if ($purchaseInfo->vip_type == 2) { |
|
|
|
$vipType = "白金"; |
|
|
|
} else if ($purchaseInfo->vip_type == 3) { |
|
|
|
$vipType = "钻石"; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 用户是实名信息 |
|
|
|
$verifyName = ""; |
|
|
|
$verifySurname = ""; |
|
|
|
$verifyInfo = UserVerifyLogModel::where(['user_id'=>$userId])->find(); |
|
|
|
if (!empty($verifyInfo)){ |
|
|
|
$verifyName = $verifyInfo->name; |
|
|
|
$verifySurname = $verifyInfo->surname; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 返回数据 |
|
|
|
return $this->toData('0', 'Modification successful.', [ |
|
|
|
'logo' => $headPath, |
|
|
@ -259,9 +282,12 @@ class UserService extends BaseHomeService |
|
|
|
'group_leader_chat_name' => $groupLeaderChatName, |
|
|
|
'is_vip' => $isVip, |
|
|
|
'vip_expire' => $vipExpire, |
|
|
|
'vip_type' => $vipType, |
|
|
|
'customer_remark' => $info['customer_remark'], |
|
|
|
'label' => $info['label'], |
|
|
|
'adjust_channel' => $info['adjust_channel'], |
|
|
|
'verify_name' => $verifyName, |
|
|
|
'verify_surname' => $verifySurname, |
|
|
|
]); |
|
|
|
} catch (\Exception $exception) { |
|
|
|
return $this->toData('500', lang('system_busy'), [$exception->getMessage(), $exception->getTrace()]); |
|
|
@ -272,8 +298,8 @@ class UserService extends BaseHomeService |
|
|
|
public function purchaseVip($userId) |
|
|
|
{ |
|
|
|
try { |
|
|
|
if (empty($userId) || $userId <= 0) { |
|
|
|
return $this->toData('500', lang('missing_user_id')); |
|
|
|
if (empty($userId) || empty($param['vip_type']) ) { |
|
|
|
return $this->toData('500', lang('parameter_error')); |
|
|
|
} |
|
|
|
$info = UserModel::getFieldsByUserId('trade_password,lever_status,gender,last_name,first_name,real_status,country_id,user_no,nick_name,email,phone_number,country_code,agent_id,is_real,head_img_id,invite_code,is_test_user', $userId); |
|
|
|
if (empty($info)) { |
|
|
@ -289,34 +315,39 @@ class UserService extends BaseHomeService |
|
|
|
return $this->toData('500', lang('data_configuration_error')); |
|
|
|
} |
|
|
|
$stockId = $vipPurchaseCfg['stock_id']; |
|
|
|
// vip类型配置检测 |
|
|
|
if (!isset($vipPurchaseCfg[$param['vip_type']])) { |
|
|
|
return $this->toData('500', lang('data_configuration_error')); |
|
|
|
} |
|
|
|
$tagVipConfig = $vipPurchaseCfg[$param['vip_type']]; |
|
|
|
// vip价格检测 |
|
|
|
if (!isset($vipPurchaseCfg['vip_price']) || $vipPurchaseCfg['vip_price'] <= 0) { |
|
|
|
return $this->toData('500', lang('data_configuration_error')); |
|
|
|
} |
|
|
|
$vipPrice = $vipPurchaseCfg['vip_price']; |
|
|
|
// vip有效天数检测 |
|
|
|
if (!isset($vipPurchaseCfg['vip_day']) || $vipPurchaseCfg['vip_day'] <= 0) { |
|
|
|
return $this->toData('500', lang('data_configuration_error')); |
|
|
|
} |
|
|
|
$vipDay = $vipPurchaseCfg['vip_day']; |
|
|
|
// 查询用户美股余额是否足够 【产品确定用美股余额支付】 |
|
|
|
$userMoney = UserStockModel::where(['user_id'=>$userId,'stock_id'=> $stockId])->find(); |
|
|
|
$userMoney = UserStockJpModel::where(['user_id'=>$userId,'stock_id'=> $stockId])->find(); |
|
|
|
if (empty($userMoney)) { |
|
|
|
return $this->toData('500', lang('user_usd_balance_is_insufficient')); |
|
|
|
} |
|
|
|
$userMoneyNum = $userMoney->usable_num; |
|
|
|
if ($userMoneyNum < $vipPrice) { |
|
|
|
return $this->toData('500', lang('user_usd_balance_is_insufficient')); |
|
|
|
$userMoneyNum = (int)$userMoney->usable_num; |
|
|
|
if ($userMoneyNum < $tagVipConfig['vip_price']) { |
|
|
|
return $this->toData('500', lang('user_balance_is_insufficient'), [$userMoneyNum, $tagVipConfig['vip_price']]); |
|
|
|
} |
|
|
|
|
|
|
|
$vipPrice = $tagVipConfig['vip_price']; |
|
|
|
$vipDay = $tagVipConfig['vip_day']; |
|
|
|
$vipType = $param['vip_type']; |
|
|
|
// 记录购买vip信息, 扣除用户金额 |
|
|
|
Db::transaction(function () use ($userId, $userMoneyNum, $vipPrice, $stockId) { |
|
|
|
// 扣除用户USD |
|
|
|
UserStockModel::where(['user_id'=>$userId,'stock_id'=>$stockId])->where('usable_num', ">=", $vipPrice)->dec('usable_num', $vipPrice)->update(); |
|
|
|
Db::transaction(function () use ($userId, $userMoneyNum, $vipPrice, $vipDay, $stockId, $vipType) { |
|
|
|
// 扣除用户金额 |
|
|
|
UserStockJpModel::where(['user_id'=>$userId,'stock_id'=>$stockId])->where('usable_num', ">=", $vipPrice)->dec('usable_num', $vipPrice)->update(); |
|
|
|
// 添加用户USD变更日志 |
|
|
|
UserStockLogModel::create([ |
|
|
|
UserStockJpLogModel::create([ |
|
|
|
'user_id' => $userId, |
|
|
|
'change_type' => 20, |
|
|
|
'change_type' => 100, |
|
|
|
'stock_id' => $stockId, |
|
|
|
'before_num' => $userMoneyNum, |
|
|
|
'change_num' => -$vipPrice, |
|
|
@ -325,22 +356,26 @@ class UserService extends BaseHomeService |
|
|
|
]); |
|
|
|
// 查询用户是否开通过vip,更新用户vip到期时间 |
|
|
|
$vipLog = PurchaseVipModel::where(['user_id'=>$userId])->find(); |
|
|
|
$expireTimestamp = strtotime('+30 day'); |
|
|
|
$expireTimestamp = strtotime('+'.$vipDay.' day'); |
|
|
|
$expireTime = date("Y-m-d H:i:s", $expireTimestamp); |
|
|
|
if (!empty($vipLog)) { |
|
|
|
if (empty($vipLog->expire)) { |
|
|
|
return $this->toData('500', lang('vip_expiration_time_error')); |
|
|
|
} |
|
|
|
if ($vipLog->expire >= date("Y-m-d H:i:s")) { |
|
|
|
$expireTimestamp = strtotime('+30 day', strtotime($vipLog->expire)); |
|
|
|
$expireTimestamp = strtotime('+'.$vipDay.' day', strtotime($vipLog->expire)); |
|
|
|
$expireTime = date("Y-m-d H:i:s", $expireTimestamp); |
|
|
|
} |
|
|
|
$vipLog->expire = $expireTime; |
|
|
|
if ($vipType > $vipLog->vip_type) { // 新买的vip类型等级高于之前的,则更新为最新高等级标识 |
|
|
|
$vipLog->vip_type = $vipType; |
|
|
|
} |
|
|
|
$vipLog->save(); |
|
|
|
} else { |
|
|
|
PurchaseVipModel::create([ |
|
|
|
'user_id' => $userId, |
|
|
|
'expire' => $expireTime |
|
|
|
'expire' => $expireTime, |
|
|
|
'vip_type' => $vipType |
|
|
|
]); |
|
|
|
} |
|
|
|
// 添加用户购买VIP的日志 |
|
|
@ -349,7 +384,8 @@ class UserService extends BaseHomeService |
|
|
|
'amount' => $vipPrice, |
|
|
|
'stock_id' => $stockId, |
|
|
|
'expire' => $expireTime, |
|
|
|
'day' => 30, |
|
|
|
'day' => $vipDay, |
|
|
|
'vip_type' => $vipType, |
|
|
|
]); |
|
|
|
}); |
|
|
|
return $this->toData('0', 'successful'); |
|
|
|