diff --git a/.gitignore b/.gitignore index ffface6..d708378 100755 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ vendor/* 404.html public/.well-known/* public/ueditor/* -public/pay_log/* \ No newline at end of file +public/pay_log/* +public/draw_log/* \ No newline at end of file diff --git a/app/api/controller/Notify.php b/app/api/controller/Notify.php index 9e570ab..9f37570 100755 --- a/app/api/controller/Notify.php +++ b/app/api/controller/Notify.php @@ -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 = "{$title}"; + } + + $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 ]); } } + } \ No newline at end of file diff --git a/app/api/controller/User.php b/app/api/controller/User.php index c063099..a9fa9fe 100755 --- a/app/api/controller/User.php +++ b/app/api/controller/User.php @@ -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(); diff --git a/app/common/model/User.php b/app/common/model/User.php index 58d0f67..d1ae45e 100755 --- a/app/common/model/User.php +++ b/app/common/model/User.php @@ -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; }