chuan 2 weeks ago
parent
commit
711dcc1ccc
  1. 2
      app/admin/service/setting/BlockStockService.php
  2. 74
      app/home/service/UserService.php
  3. 22
      config/common.php

2
app/admin/service/setting/BlockStockService.php

@ -170,6 +170,7 @@ class BlockStockService extends AdminBaseService
$blockStock->down_limit = $stock->down_limit;
$blockStock->create_time = date('Y-m-d H:i:s');
$blockStock->update_time = date('Y-m-d H:i:s');
$blockStock->buy_pwd = $param['buy_pwd'] ?? '';
$blockStock->save();
// 加入缓存
@ -322,6 +323,7 @@ class BlockStockService extends AdminBaseService
$blockStock->up_limit = $stock->up_limit;;
$blockStock->down_limit = $stock->down_limit;
$blockStock->update_time = date('Y-m-d H:i:s');
$blockStock->buy_pwd = $param['buy_pwd'] ?? '';
$blockStock->save();
// 加入缓存

74
app/home/service/UserService.php

@ -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');

22
config/common.php

@ -14,8 +14,24 @@ return [
],
// VIP购买配置
'vip_purchase' => [
'vip_price' => 30, // vip价格
'vip_day' => 30, // vip有效期 30天
'stock_id' => 'USD' // 购买VIP所需的货币类型
// 'vip_price' => 30, // vip价格
// 'vip_day' => 30, // vip有效期 30天
// 'stock_id' => 'USD', // 购买VIP所需的货币类型
'stock_id' => 'JPY', // 购买VIP所需的货币类型
'1' => [
'label' => '青铜', // vip等级
'vip_day' => 30, // vip天数
'vip_price' => 37000, // 价格
],
'2' => [
'label' => '白金', // vip等级
'vip_day' => 90, // vip天数
'vip_price' => 100000, // 价格
],
'3' => [
'label' => '钻石', // vip等级
'vip_day' => 360, // vip天数
'vip_price' => 370000, // 价格
],
],
];

Loading…
Cancel
Save