提交代码

This commit is contained in:
youda 2025-04-29 15:39:10 +08:00
parent 2a367c5c3c
commit 19f1f3e7b6
4 changed files with 474 additions and 41 deletions

3
.gitignore vendored
View File

@ -5,4 +5,5 @@ vendor/*
404.html
public/.well-known/*
public/ueditor/*
public/pay_log/*
public/pay_log/*
public/draw_log/*

View File

@ -744,7 +744,7 @@ class Notify extends Base
private function weightedRandom(array $weights)
{
$sum = array_sum($weights);
$rand = mt_rand(1, $sum);
$rand = random_int(1, $sum);
foreach ($weights as $index => $weight) {
$rand -= $weight;
@ -1182,7 +1182,7 @@ class Notify extends Base
// 生成随机数 (保持与原始方法相同的精度100000)
$maxRand = (int) ($totalProbability * $multiple);
$random = mt_rand(0, $maxRand) / $multiple;
$random = random_int(0, $maxRand) / $multiple;
// 查找中奖奖品
$prize_id = null;
@ -1266,10 +1266,10 @@ class Notify extends Base
$order_id = $order['id'];#订单ID
$goods_id = $order['goods_id'];#盒子ID
$prize_num = $order['prize_num'];#抽奖数量
$order_type = $order['order_type'];#订单类型
// $order_type = $order['order_type'];#订单类型
$whe = [];
$whe[] = ['id', '=', $order['goods_id']];
$infinite_goods = Goods::getInfo($whe, 'type,lingzhu_is,lingzhu_fan,lingzhu_shang_id,king_user_id');
$infinite_goods = Goods::getInfo($whe, '*');
$where = [];
$where[] = ['goods_id', '=', $goods_id];
@ -1284,12 +1284,12 @@ class Notify extends Base
}
$where[] = ['goods_list_id', '=', 0];
#查找奖品
$goodslist = GoodsList::field('id,shang_id,real_pro')
$goodslist = GoodsList::field('id,shang_id,real_pro,title,price,money')
->where($where)
->select()->toArray();
if ($goodslist) {
$res[] = $this->infinite_drawprize_box($goodslist, $prize_num, $order_id, $user_id, $goods_id, $order_type, $infinite_goods);
$res[] = $this->infinite_drawprize_box($goodslist, $prize_num, $user_id, $goods_id, $infinite_goods, $order);
// 更新Redis中盒子的热度值增加本次抽奖次数
$this->updateGoodsHeat($goods_id, $prize_num);
@ -1321,8 +1321,10 @@ class Notify extends Base
* 抽出奖品
* @param $order 订单信息
*/
protected function infinite_drawprize_box($goodslist, $prize_num, $order_id, $user_id, $goods_id, $order_type, $infinite_goods)
protected function infinite_drawprize_box1($goodslist, $prize_num, $user_id, $goods_id, $infinite_goods, $order)
{
$order_id = $order['id'];
$order_type = $order['order_type'];
// 计算总概率
$totalProbability = array_sum(array_column($goodslist, 'real_pro'));
@ -1339,24 +1341,21 @@ class Notify extends Base
'end' => $currentRange
];
}
//获取抽奖倍数100000
$multiple = ConfigHelper::getInfiniteMultiple();
$lingzhu_shang_id = 0;
if (!$infinite_goods) {
$infinite_goods = Goods::getInfo(['id' => $goods_id], 'type,lingzhu_is,lingzhu_fan,lingzhu_shang_id,king_user_id');
}
if ($infinite_goods != null && $infinite_goods['type'] == 8 && $infinite_goods['lingzhu_is'] == 1) {
// $infinite_goods['lingzhu_shang_id']
$lingzhu_shang_id = $infinite_goods['lingzhu_shang_id'];
}
for ($i = 0; $i < $prize_num; $i++) {
// 生成随机数 (保持与原始方法相同的精度100000)
$maxRand = (int) ($totalProbability * $multiple);
$random = mt_rand(0, $maxRand) / $multiple;
$random = random_int(0, $maxRand) / $multiple;
// 查找中奖奖品
$prize_id = null;
foreach ($probabilityRanges as $range) {
@ -1432,12 +1431,427 @@ class Notify extends Base
->where('goods_list_id', '=', $prize_info['id'])
->select()->toArray();
// $res[] = $this->infinite_drawprize_box($order);
$res[] = $this->infinite_drawprize_box($goodslist_1, 1, $order_id, $user_id, $goods_id, $order_type, $infinite_goods);
$res[] = $this->infinite_drawprize_box($goodslist_1, 1, $user_id, $goods_id, $infinite_goods, $order);
}
}
return $res;
}
/**
* 无限抽奖箱:每次抽奖重新随机排序并构建概率区间
*
* @param array $goodslist 奖品列表(每个奖品需要包含 real_pro 字段作为概率)
* @param int $prize_num 抽奖次数
* @param int $order_id 订单ID
* @param int $user_id 用户ID
* @param int $goods_id 商品ID
* @param int $order_type 订单类型
* @param array|null $infinite_goods 商品扩展信息(用于领主赏判断)
* @return array 抽奖结果集合
*/
protected function infinite_drawprize_box($goodslist, $prize_num, $user_id, $goods_id, $infinite_goods, $order)
{
// 记录抽奖总开始时间
$total_start_time = microtime(true);
// 记录抽奖出货总金额
$total_prize_money = 0;
$order_id = $order['id'];//订单id
$order_type = $order['order_type'];//订单类型
$order_num = $order['order_num'];//订单编号
$res = []; // 保存每次抽奖结果
$multiple = ConfigHelper::getInfiniteMultiple(); // 获取随机倍数例如100000
// 将赏品列表转换为map格式以id为键便于快速查找
$shang_list_array = Shang::field('id,title')->select()->toArray();
$shang_list = [];
foreach ($shang_list_array as $shang) {
$shang_list[$shang['id']] = $shang['title'];
}
$lingzhu_shang_id = 0; // 初始化领主赏上级ID
if (!$infinite_goods) {
$infinite_goods = Goods::getInfo(['id' => $goods_id], '*');
}
if ($infinite_goods != null && $infinite_goods['type'] == 8 && $infinite_goods['lingzhu_is'] == 1) {
$lingzhu_shang_id = $infinite_goods['lingzhu_shang_id'];
}
// 创建日志数据集合数组
$log_data_collection = [];
// 循环抽奖指定次数
for ($i = 0; $i < $prize_num; $i++) {
// 记录单次抽奖开始时间
$single_start_time = microtime(true);
// 用于记录日志的数据
$log_data = [
'draw_num' => $i + 1,
'user_id' => $user_id,
'box_id' => $goods_id,
'order_num' => $order_num,
'probability_ranges' => []
];
// 1. 每次抽奖前,随机打乱奖品列表
$shuffledGoodsList = $goodslist;
shuffle($shuffledGoodsList);
// 2. 重新计算总概率和构建新的概率区间
$totalProbability = array_sum(array_column($shuffledGoodsList, 'real_pro'));
$probabilityRanges = [];
$currentRange = 0;
foreach ($shuffledGoodsList as $good) {
$rangeStart = $currentRange;
$currentRange += $good['real_pro'];
$probabilityRanges[] = [
'id' => $good['id'],
'start' => $rangeStart,
'end' => $currentRange
];
// 收集奖品区间分布数据用于日志
// 判断$good中是否已包含需要的信息
if (isset($good['title']) && isset($good['price'])) {
$log_data['probability_ranges'][] = [
'id' => $good['id'],
'title' => $good['title'],
'price' => $good['price'],
'money' => $good['money'],
'start' => $rangeStart,
'shang_id' => $good['shang_id'],
'shang_title' => isset($shang_list[$good['shang_id']]) ? $shang_list[$good['shang_id']] : '未知',
'end' => $currentRange,
'real_pro' => $good['real_pro']
];
} else {
// 如果没有,才查询数据库
$good_info = GoodsList::where(['id' => $good['id']])->field('id,title,price,money,real_pro,shang_id')->find();
if ($good_info) {
$log_data['probability_ranges'][] = [
'id' => $good['id'],
'title' => $good_info['title'],
'price' => $good_info['price'],
'money' => $good_info['money'],
'shang_id' => $good_info['shang_id'],
'shang_title' => isset($shang_list[$good_info['shang_id']]) ? $shang_list[$good_info['shang_id']] : '未知',
'start' => $rangeStart,
'end' => $currentRange,
'real_pro' => $good_info['real_pro']
];
}
}
}
// 3. 随机生成一个数,根据区间确定中奖奖品
$maxRand = (int) ($totalProbability * $multiple);
$random = random_int(0, $maxRand) / $multiple;
// 记录随机数
$log_data['random'] = $random;
$prize_id = null;
foreach ($probabilityRanges as $range) {
if ($random >= $range['start'] && $random < $range['end']) {
$prize_id = $range['id'];
break;
}
}
if (!$prize_id) {
// 记录日志 - 未中奖
$log_data['prize_id'] = 0;
$log_data['prize_title'] = '未中奖';
// 计算单次抽奖耗时
$single_end_time = microtime(true);
$log_data['execution_time'] = round(($single_end_time - $single_start_time) * 1000, 2); // 毫秒
// 收集日志数据而不是立即写入
$log_data_collection[] = $log_data;
continue; // 防止异常空抽
}
// 4. 获取中奖奖品详细信息
$prize_info = GoodsList::where(['id' => $prize_id])->find();
if (!$prize_info) {
// 记录日志 - 奖品信息不存在
$log_data['prize_id'] = $prize_id;
$log_data['prize_title'] = '奖品信息不存在';
// 计算单次抽奖耗时
$single_end_time = microtime(true);
$log_data['execution_time'] = round(($single_end_time - $single_start_time) * 1000, 2); // 毫秒
// 收集日志数据而不是立即写入
$log_data_collection[] = $log_data;
continue;
}
// 累加中奖金额到总金额
$total_prize_money += (float)$prize_info['money'];
$log_data['prize_money'] = $prize_info['money'];
// 5. 处理编号
$luck_no = OrderList::field('luck_no')
->where('goods_id', '=', $goods_id)
->where('num', '=', 0)
->where('order_type', '=', $order_type)
->order('id desc')
->value('luck_no');
$luck_no = $luck_no ? $luck_no + 1 : 1;
// 6. 处理翻倍赏
$doubling = $prize_info['doubling'] ?? 0;
// 7. 判断是否是领主赏
$lingzhu = $prize_info['is_lingzhu'] ?? 0;
if ($infinite_goods['type'] == 8) {
if ($lingzhu_shang_id > 0 && $lingzhu == 0) {
if ($lingzhu_shang_id == $prize_info['shang_id']) {
$lingzhu = 1;
}
}
}
// 记录日志数据
$log_data['prize_id'] = $prize_info['id'];
$log_data['prize_title'] = $prize_info['title'];
$log_data['doubling'] = $doubling;
$log_data['is_lingzhu'] = $lingzhu;
$log_data['is_king'] = isset($infinite_goods['king_user_id']) && $infinite_goods['king_user_id'] == $user_id ? 1 : 0;
$log_data['is_box'] = $prize_info['goods_type'] == 4 ? 1 : 0;
$log_data['shang_id'] = $prize_info['shang_id'];
$log_data['shang_title'] = isset($shang_list[$prize_info['shang_id']]) ? $shang_list[$prize_info['shang_id']] : '未知';
// 8. 组装抽奖记录
$save_prize_info = [
'order_id' => $order_id,
'user_id' => $user_id,
'status' => 0, // 0未操作
'goods_id' => $goods_id,
'num' => 0,
'doubling' => $doubling,
'shang_id' => $prize_info['shang_id'],
'goodslist_id' => $prize_info['id'],
'goodslist_title' => $prize_info['title'],
'goodslist_imgurl' => $prize_info['imgurl'],
'goodslist_price' => $prize_info['price'],
'goodslist_money' => $prize_info['money'],
'goodslist_type' => $prize_info['goods_type'],
'goodslist_sale_time' => $prize_info['sale_time'],
'addtime' => time(),
'prize_code' => $prize_info['prize_code'],
'order_type' => $order_type,
'luck_no' => $luck_no,
'parent_goods_list_id' => $prize_info['goods_list_id'],
'is_lingzhu' => $lingzhu,
];
// 9. 插入中奖记录到订单表
$res[] = OrderList::insert($save_prize_info);
// 10. 如果中奖是翻倍赏,赠送货币积分
if ($doubling > 1) {
$bei = $doubling - 1;
$change_money = $prize_info['money'] * $bei * 100;
$res[] = User::changeIntegral($user_id, $change_money, 6, '抽中翻倍赏-' . $prize_info['title'] . '赠送');
$log_data['doubling_res'] = '翻倍赠送UU币:' . $change_money;
}
// 11. 如果奖品绑定了额外奖励,发放奖励
if (isset($prize_info['reward_id']) && $prize_info['reward_id'] != '') {
$reward_res = RewardService::sendReward($user_id, $prize_info['reward_id'], '抽中' . $prize_info['title']);
$log_data['reward_res'] = $reward_res;
}
// 计算单次抽奖耗时
$single_end_time = microtime(true);
$log_data['execution_time'] = round(($single_end_time - $single_start_time) * 1000, 2); // 毫秒
// 收集日志数据而不是立即写入
$log_data_collection[] = $log_data;
// 12. 如果抽到宝箱奖品,需要继续递归抽奖
if ($prize_info['goods_type'] == 4) {
$goodslist_1 = GoodsList::where(['goods_id' => $goods_id])
->where('goods_list_id', '=', $prize_info['id'])
->select()
->toArray();
if (!empty($goodslist_1)) {
$box_result = $this->infinite_drawprize_box($goodslist_1, 1, $user_id, $goods_id, $infinite_goods, $order);
// 将子抽奖的总金额加到当前总金额中
if (isset($box_result['total_prize_money'])) {
$total_prize_money += $box_result['total_prize_money'];
}
$res[] = $box_result;
}
}
}
// 计算总耗时
$total_end_time = microtime(true);
$total_execution_time = round(($total_end_time - $total_start_time) * 1000, 2); // 毫秒
// 抽奖循环结束后,统一写入日志
if (!empty($log_data_collection)) {
try {
$this->recordDrawLog($log_data_collection, $infinite_goods, $order, $total_execution_time, $total_prize_money);
} catch (\Exception $e) {
// 记录异常信息,但不影响主流程
\think\facade\Log::error('记录抽奖日志异常:' . $e->getMessage());
}
}
// 将总金额添加到返回结果中,以便递归调用时能够累加子抽奖的金额
$res['total_prize_money'] = $total_prize_money;
return $res;
}
/**
* 记录抽奖日志Markdown 格式)
* @param array $data_collection 抽奖数据集合
* @param array $goods 商品信息
* @param array $order 订单信息
* @param float $total_execution_time 总执行时间(毫秒)
* @param float $total_prize_money 总出货金额
* @return void
*/
protected function recordDrawLog($data_collection, $goods, $order, $total_execution_time = 0, $total_prize_money = 0)
{
// 如果数据集合为空,直接返回
if (empty($data_collection)) {
return;
}
try {
// 获取第一条数据,用于确定日志文件路径
// $first_data = $data_collection[0];
$goods_id = $goods['id'];
$goods_title = $goods['title'];
$goods_price = $goods['price'];
$order_num = $order['order_num'];
// 日志目录格式:./draw_log/{box_id}/
$log_dir = "./draw_log/{$goods_id}";
if (!is_dir($log_dir)) {
mkdir($log_dir, 0755, true);
}
// 日志文件路径
$log_file = $log_dir . '/' . $order_num . '.md';
// 是否为新文件,写入标题
$is_new_file = !file_exists($log_file);
// 构建完整的日志内容
$full_log_content = '';
$full_log_content .= "# 抽奖日志 - 盒子名称: {$goods_title} - 订单号: {$order_num} - 盒子ID: {$goods_id} - 盒子价格: {$goods_price} " . PHP_EOL . PHP_EOL;
// 添加订单详情信息
$full_log_content .= "## 订单详情" . PHP_EOL;
$full_log_content .= "- **订单总金额**: {$order['order_total']}" . PHP_EOL;
$full_log_content .= "- **订单折扣金额**: {$order['order_zhe_total']}" . PHP_EOL;
$full_log_content .= "- **微信支付**: {$order['price']}" . PHP_EOL;
$full_log_content .= "- **钻石支付**: {$order['use_money']}" . PHP_EOL;
$full_log_content .= "- **UU币支付**: {$order['use_integral']}" . PHP_EOL;
$full_log_content .= "- **达达卷支付**: {$order['use_money2']}" . PHP_EOL;
$full_log_content .= "- **优惠券ID**: {$order['coupon_id']}" . PHP_EOL;
$full_log_content .= "- **是否首抽五折**: " . ($order['is_shou_zhe'] == 1 ? '是' : '否') . PHP_EOL;
$full_log_content .= "- **抽奖数量**: {$order['prize_num']}" . PHP_EOL;
$full_log_content .= "- **下单时间**: " . date('Y-m-d H:i:s', $order['addtime']) . PHP_EOL;
if (!empty($order['pay_time'])) {
$full_log_content .= "- **付款时间**: " . date('Y-m-d H:i:s', $order['pay_time']) . PHP_EOL;
}
$full_log_content .= "- **是否为福利屋**: " . ($order['is_flw'] == 1 ? '是' : '否') . PHP_EOL;
$full_log_content .= "- **支付类型**: " . ($order['pay_type'] == 1 ? '微信' : ($order['pay_type'] == 2 ? '支付宝' : '其他')) . PHP_EOL;
$full_log_content .= PHP_EOL;
// 添加总执行时间信息和出货总金额
$full_log_content .= "## 抽奖总耗时: {$total_execution_time} 毫秒" . PHP_EOL;
$full_log_content .= "## 本次抽奖出货总金额: {$total_prize_money}" . PHP_EOL . PHP_EOL;
// 处理每条抽奖记录
foreach ($data_collection as $data) {
// 当前时间
$now = date('Y-m-d H:i:s');
$full_log_content .= "## 第 {$data['draw_num']} 次抽奖 - {$now}" . PHP_EOL;
$full_log_content .= "- **用户ID**: {$data['user_id']}" . PHP_EOL;
$full_log_content .= "- **随机数**: {$data['random']}" . PHP_EOL;
$full_log_content .= "- **执行时间**: {$data['execution_time']} 毫秒" . PHP_EOL;
// 获取中奖ID方便后续在表格中标红
$winning_prize_id = isset($data['prize_id']) && $data['prize_id'] > 0 ? $data['prize_id'] : 0;
// 中奖信息
if ($winning_prize_id) {
$full_log_content .= "- **中奖ID**: {$data['prize_id']}" . PHP_EOL;
$full_log_content .= "- **商品名**: {$data['prize_title']}" . PHP_EOL;
if (isset($data['prize_money'])) {
$full_log_content .= "- **奖品金额**: {$data['prize_money']}" . PHP_EOL;
}
if (isset($data['shang_id']) && isset($data['shang_title'])) {
$full_log_content .= "- **赏ID**: {$data['shang_id']}" . PHP_EOL;
$full_log_content .= "- **赏名称**: {$data['shang_title']}" . PHP_EOL;
}
} else {
$full_log_content .= "- **未中奖或奖品信息异常**" . PHP_EOL;
}
// 奖品翻倍
if (isset($data['doubling']) && $data['doubling'] > 0) {
$full_log_content .= "- **奖品翻倍**: {$data['doubling']}" . PHP_EOL;
if (isset($data['doubling_res'])) {
$full_log_content .= "- **翻倍奖励**: {$data['doubling_res']}" . PHP_EOL;
}
} else {
$full_log_content .= "- **奖品翻倍**: 无" . PHP_EOL;
}
// 领主等信息
$full_log_content .= "- **是否领主赏**: " . (isset($data['is_lingzhu']) && $data['is_lingzhu'] == 1 ? "" : "") . PHP_EOL;
$full_log_content .= "- **是否领主**: " . (isset($data['is_king']) && $data['is_king'] == 1 ? "" : "") . PHP_EOL;
$full_log_content .= "- **是否宝箱**: " . (isset($data['is_box']) && $data['is_box'] == 1 ? "" : "") . PHP_EOL;
// 发放奖励结果
if (isset($data['reward_res'])) {
$full_log_content .= "- **发放奖励结果**: " . (is_string($data['reward_res']) ? $data['reward_res'] : json_encode($data['reward_res'], JSON_UNESCAPED_UNICODE)) . PHP_EOL;
}
// 奖品区间分布表格
if (!empty($data['probability_ranges'])) {
$full_log_content .= PHP_EOL . "### 奖品区间分布" . PHP_EOL;
$full_log_content .= "| 奖品ID | 名称 | 价格 | 金额 | 概率 | 区间范围 | 赏ID | 赏名称 |" . PHP_EOL;
$full_log_content .= "|--------|------|------|------|------|-----------|------|--------|" . PHP_EOL;
foreach ($data['probability_ranges'] as $range) {
$start = $range['start'];
$end = $range['end'];
$shang_id = $range['shang_id'] ?? 0;
$shang_title = $range['shang_title'] ?? '未知';
$money = $range['money'] ?? 0;
// 判断是否是中奖奖品,如果是,则把名称变成红色
$title = $range['title'];
if ($winning_prize_id && $winning_prize_id == $range['id']) {
$title = "<span style=\"color:red\">{$title}</span>";
}
$full_log_content .= "| {$range['id']} | {$title} | {$range['price']} | {$money} | {$range['real_pro']} | {$start} ~ {$end} | {$shang_id} | {$shang_title} |" . PHP_EOL;
}
}
$full_log_content .= PHP_EOL . "---" . PHP_EOL . PHP_EOL;
}
// 一次性写入所有日志内容
file_put_contents($log_file, $full_log_content, $is_new_file ? FILE_APPEND : (FILE_APPEND | LOCK_EX));
} catch (\Exception $e) {
// 捕获异常,防止影响主流程
\think\facade\Log::error('记录抽奖日志异常:' . $e->getMessage());
}
}
/**
* 商城赏
@ -2488,7 +2902,7 @@ class Notify extends Base
$payment_type = 'wxpay';
$order_type = 'order_wxs';
$user_id = 123;
$order_num = 'MH_' . date('YmdHis') . mt_rand(1000, 9999);
$order_num = 'MH_' . date('YmdHis') . random_int(1000, 9999);
$nonce_str = getRandStr(16);
try {
@ -2548,4 +2962,5 @@ class Notify extends Base
]);
}
}
}

View File

@ -919,18 +919,27 @@ class User extends Base
->where('type', '=', 5)
->where('change_money', '>', 0)
->sum('change_money');
$money1 = ProfitIntegral::field('change_money')
->where('user_id', '=', $user_id)
->where('type', '=', 5)
->where('change_money', '>', 0)
->sum('change_money');
if ($money1 > 0) {
$money = round($money + ($money1 / 100), 2);
}
#配置
$rule = getConfig('base');
// 获取用户推广海报
$posterService = new \app\common\service\PosterService();
$posterResult = $posterService->getUserPoster($user_id);
$share_image = '';
if ($posterResult['status']) {
$share_image = $posterResult['data']['image_url'];
}
$new_data = [
'share_title' => $rule['share_title'],
'share_image' => $share_image,
@ -1104,7 +1113,7 @@ class User extends Base
#token字符串
$token_num = getRandStr(10);
#加密token
$account_token = user_md5((string)$user_id . $token_num . (string)$time);
$account_token = user_md5((string) $user_id . $token_num . (string) $time);
//修改UserAccount 表中的
$res[] = UserAccount::where(['user_id' => $user_id])->update([
@ -1117,15 +1126,15 @@ class User extends Base
}
return $this->renderSuccess("", $user_account);
}
// 检查用户是否存在
$user = Usermodel::where('id', '=', $user_id)->find();
if ($user) {
// 创建新的用户账号记录
$time = time();
$token_num = getRandStr(10);
$account_token = user_md5((string)$user_id . $token_num . (string)$time);
$account_token = user_md5((string) $user_id . $token_num . (string) $time);
$result = UserAccount::insert([
'user_id' => $user_id,
'account_token' => $account_token,
@ -1134,7 +1143,7 @@ class User extends Base
'last_login_time' => $time,
'addtime' => $time,
]);
if ($result) {
$user_account = UserAccount::where('user_id', '=', $user_id)->find();
return $this->renderSuccess("创建账号成功", $user_account);
@ -1142,7 +1151,7 @@ class User extends Base
return $this->renderError("创建账号失败");
}
}
return $this->renderError("用户id错误");
}
@ -1155,7 +1164,7 @@ class User extends Base
$lastUser = Usermodel::where('mobile', 'like', '187611270%')
->order('id', 'desc')
->find();
if (!$lastUser) {
// 如果不存在从18761127000开始
$newMobile = '18761127000';
@ -1163,28 +1172,28 @@ class User extends Base
// 获取最后两位并加1
$lastTwoDigits = substr($lastUser['mobile'], -2);
$newLastTwoDigits = intval($lastTwoDigits) + 1;
// 确保两位数格式
$newLastTwoDigits = str_pad((string)$newLastTwoDigits, 2, '0', STR_PAD_LEFT);
$newLastTwoDigits = str_pad((string) $newLastTwoDigits, 2, '0', STR_PAD_LEFT);
$newMobile = '187611270' . $newLastTwoDigits;
}
// 生成随机数作为昵称的一部分
$randomNum = mt_rand(1000, 9999);
$nickname = '微信用户' . $randomNum;
// 生成随机openid
$openid = 'oVQcD' . getRandStr(28);
// 头像url
$headimg = 'https://image.zfunbox.cn/storage/users/icon/default/1613.png';
// 当前时间戳
$time = time();
// 随机生成uid
$uid = mt_rand(100000, 999999);
// 开始事务
Db::startTrans();
try {
@ -1213,11 +1222,11 @@ class User extends Base
'istest' => 0,
'uid' => $uid
]);
// 生成token
$token_num = getRandStr(10);
$account_token = user_md5((string)$userId . $token_num . (string)$time);
$account_token = user_md5((string) $userId . $token_num . (string) $time);
// 插入用户账号表
UserAccount::insert([
'user_id' => $userId,
@ -1225,19 +1234,19 @@ class User extends Base
'token_num' => $token_num,
'token_time' => $time,
'last_login_time' => $time,
'last_login_ip'=>'2085608754'
'last_login_ip' => '2085608754'
]);
// 提交事务
Db::commit();
return $this->renderSuccess('创建用户成功', [
'user_id' => $userId,
'mobile' => $newMobile,
'nickname' => $nickname,
'headimg' => $headimg
]);
} catch (\Exception $e) {
// 回滚事务
Db::rollback();

View File

@ -343,7 +343,7 @@ class User extends Base
$pid = self::field('id')->where('id', '=', $order['user_id'])->value('pid');
if ($pid) {
//赠送Uu币
$res[] = self::changeIntegral($pid, $jiangli * 100, 5, '邀请好友奖励', $order['user_id'], '奖励比例:' . $fx_bili);
$res[] = self::changeIntegral($pid, $jiangli * 100, 5, ' ·', $order['user_id'], '奖励比例:' . $fx_bili);
}
}
if (empty($res)) {
@ -424,6 +424,14 @@ class User extends Base
->where('share_uid', '=', $data['id'])
->where('change_money', '>', 0)
->sum('change_money');
$money1 = ProfitIntegral::field('change_money')
->where('user_id', '=', $data['pid'])
->where('type', '=', 5)
->where('change_money', '>', 0)
->sum('change_money');
if ($money1 > 0) {
$money = round($money + ($money1 / 100), 2);
}
return $money;
}