money - $order->out_game;// 通行证 } else { $money = $user->money - $order->tong_money;// 通行证 } $push_money = $user->push_money - $order->number;// 可售额度 User::update(["money" => $money, "push_money" => $push_money], ["id" => $push_user_id]); $where["id"] = $order_id; $update["push_user"] = $push_user_id; $update["sxf_money"] = $money;//卖出已交手续费 $update["status"] = 1; $update["stat_time"] = time() + 1 * 3600; Order::where($where)->update($update); // 添加财务记录 self::Finance($push_user_id, "卖出BTS", $money, 1); // 给买家发短信或邮件 $buy_user_id = $order->buy_user;// 买入人 $buy_user = User::where(["id" => $buy_user_id])->field("id,phone,mail")->find(); // 发送通知用户 短信和邮件 $content = "其他对您卖出BTS,请登录前去查看"; if ($buy_user->phone) { Msg::phone($content, $user->phone); } else { Msg::mail($content, $user->mail); } } // /**买入 减去对应的保证金 // * @param $buy_user_id 用户id // * @param $money // 剩余多少钱 // * @param $jmoney // 减去多少钱 // * @param $ensure_money // 减去保证金 // */ // public static function buy_order($buy_user_id, $ensure_money, $jensure_money) // { // User::update(["ensure_money" => $ensure_money], ["id" => $buy_user_id]);// 更新用户金额 // // 添加保证金记录 // self::bond_finance($buy_user_id, "发起购买BTS交易", $jensure_money, 1); // } // 转账处理 public static function transfer($user_id, $puser_id, $money, $jmoney, $name) { // 给转账人减钱 User::update(["money" => $jmoney], ["id" => $user_id]); // 给接受人加钱 $where["id"] = $puser_id; $user = User::where($where)->field("money,name,phone,mail")->find(); $zong_money = $user->money + $money; User::update(["money" => $zong_money], ["id" => $puser_id]); self::Finance($user_id, "您给用户" . $user->name . "转账", $money, 1);// 转账人减钱 self::Finance($puser_id, "用户" . $name . "给您转账", $money, 0);// 收账人加钱 // 发送通知用户 短信和邮件 $content = "用户" . $name . "给你转账" . $money . "BTS"; if ($user->phone) { Msg::phone($content, $user->phone); } else { Msg::mail($content, $user->mail); } } // 保证金操作 public static function bond_transfer($user, $user_id, $money, $ensure_money, $type) { if ($type == 0) {//0 充值 1 提现 $money = $user->money - $money;// 通证 $ensure_moneys = $user->ensure_money + $ensure_money;// 加保证金 User::update(["money" => $money, "ensure_money" => $ensure_moneys], ["id" => $user_id]); // 添加财务记录 self::Finance($user_id, "保证金充值", $money, 1); self::bond_finance($user_id, "保证金充值", $money, 0); } else { $money = $user->money + $money;// 通证 $ensure_moneys = $user->ensure_money - $ensure_money;// 加保证金 User::update(["money" => $money, "ensure_money" => $ensure_moneys], ["id" => $user_id]); // 添加财务记录 self::Finance($user_id, "保证金提现", $money, 0); self::bond_finance($user_id, "保证金提现", $money, 1); } } // 后台充值 public static function admin_Recharge($user_id, $money) { $where["id"] = $user_id; $user = User::where($where)->field("money,name,phone,mail")->find(); $zong_money = $user->money + $money; User::update(["money" => $zong_money], ["id" => $user_id]);// 更新账号金额 self::Finance($user_id, "充值成功", $money, 0); // 发送通知用户 短信和邮件 $content = "充值" . $money . "BTS已处理"; if ($user->phone) { Msg::phone($content, $user->phone); } else { Msg::mail($content, $user->mail); } } // 订单失败处理,全局使用 public static function order_fail($msg, $order) { // 查找交易区块 $mining = Mining::where(["id" => $order->mining_id])->find(); // 扣除买入人的违约金 $ensure_money = $mining->breach_money; $where["id"] = $order->buy_user; $user = User::where($where)->find(); $update["ensure_money"] = $user->ensure_money - $ensure_money; // 添加违约金记录 self::bond_finance($order->buy_user, "交易失败扣除保证金", $ensure_money, 1); User::update($update, $where); // 给卖出人加钱 $push_user = User::where(["id" => $order->push_user])->find(); $push_money = $push_user->push_money + $order->number;// 加回可售额度 // 加上违约金 加入通证 和手续费 $add_money = $ensure_money + $order->sxf_money;// 总获得多少钱 $money = $push_user->money + $add_money;// 账号变动 User::update(["money" => $money, "push_money" => $push_money], ["id" => $order->push_user]); // 添加记录 self::Finance($order->push_user, "交易失败退回手续费", $order->sxf_money, 0); self::Finance($order->push_user, "交易失败获得违约金", $ensure_money, 0); // 更新订单状态 $where_order["id"] = $order->id; $update_order["msg"] = $msg; $update_order["status"] = 5; $update_order["end_time"] = time(); Order::update($update_order, $where_order); return 1; } /** 交易成功全局使用 * @param $order 订单数据 */ public static function order_success($order) { // 更新订单状态 $update_order["status"]=3; $update_order["end_time"]=time(); Order::update($update_order,["id"=>$order->id]); $buy_user = $order->buy_user;// 买入人 $push_user = $order->push_user;// 卖出人 $mining_id = $order->mining_id;// 交易区 $mining = Mining::where(["id" => $mining_id])->find();// 交易区 if (!$mining){ json_result(400,"价格区已经不存在了,无法计算"); } // 统计交易次数 // todo 买入人处理 $buy_order_frequency = OrderFrequency::where(["user_id" => $buy_user, "mining_id" => $mining_id])->find(); if (!$buy_order_frequency) {//不存在 $buy_count = 1; $buy_number = 1; $push_number = 0; $add_buy["user_id"] = $buy_user; $add_buy["mining_id"] = $mining_id; $add_buy["buy"] = 1; $add_buy["push"] = 0; OrderFrequency::create($add_buy); } else { $buy_count = $buy_order_frequency->buy + 1; $buy_number = $buy_count; $push_number = $buy_order_frequency->push; OrderFrequency::update(["buy" => $buy_count], ["id" => $buy_order_frequency->id]);// 更新次数 } $buy_user_data = User::where(["id" => $buy_user])->find(); $keshou_money = $mining->enlarge_quota;// 可售额度 // 第一次交易给用户加矿池金 if ($buy_count == 1) { $pool_money = $mining->mining; $update_buy["pool_money"] = $buy_user_data->pool_money + $pool_money;// 加矿池金 self::VendonolotyFinance($buy_user, $mining_id, $order->id, $order->number, $mining->mining, $keshou_money, $buy_number, $push_number, 1); } $enlarge_quota = $keshou_money + $buy_user_data->push_money;//可售额度 // 给账号加相应数据 $update_buy["push_money"] = $enlarge_quota; User::update($update_buy, ["id" => $buy_user]); // TODO 卖出处理 $push_order_frequency = OrderFrequency::where(["user_id" => $push_user, "mining_id" => $mining_id])->find(); if (!$push_order_frequency) { $push_count = 1; $add_push["user_id"] = $push_user; $add_push["mining_id"] = $mining_id; $add_push["buy"] = 0; $add_push["push"] = 1; OrderFrequency::create($add_push); } else { $push_count = $push_order_frequency->push + 1; OrderFrequency::update(["push" => $push_count], ["id" => $push_order_frequency->id]);// 更新次数 } // 减少账号的矿金 $push_user_data = User::where(["id" => $push_user])->find(); $kuangjine = $push_user_data->pool_money - $mining->num; User::update(["pool_money" => $kuangjine], ["id" => $push_user]); if ($push_count == 5) {// 第五次 代理结算 $direct_push = $mining->direct_push;//直推获得 $second_push = $mining->second_push;//次推获得 // 查找直接上级 if ($push_user_data->pid) {// 是否存在直接上级 $zhitui_push_user = User::where(["id" => $push_user_data->pid])->find(); if ($zhitui_push_user) { // 直推奖励 if ($direct_push) {// 直推奖励设置不小于0 // 查看活跃度 $zhitui_time =strtotime($zhitui_push_user->update_time) + (24 * 3600); if ($zhitui_time >= time()) {// 在活跃度里面就计算奖励 $update_zhitui["money"] = $zhitui_push_user->money + $direct_push; User::update($update_zhitui, ["id" => $push_user_data->pid]); // 添加财务记录 self::Finance($push_user_data->pid, "获得直推奖励", $direct_push, 0,1); } } if ($zhitui_push_user->pid) {// 是否存在次级上级 // 次级上级 if ($second_push) {// 次级奖励不小于0 // 查询次级用户 $ciji_push_user = User::where(["id" => $zhitui_push_user->pid])->find(); if ($ciji_push_user) { $ciji_time = (int)strtotime($ciji_push_user->update_time) + 24 * 3600; if ($ciji_time >= time()) {// 给次级上级发奖励 $update_ciji["money"] = $ciji_push_user->money - $second_push; User::update($update_ciji, ["id" => $zhitui_push_user->pid]); // 添加财务记录 self::Finance($zhitui_push_user->pid, "获得次推奖励", $second_push, 0,1); } } } } } } } } //资产明细 public static function Finance($user_id, $name, $money, $status,$daili=0) { $add["user_id"] = $user_id; $add["name"] = $name; $add["money"] = $money; $add["status"] = $status; $add["daili"] = $daili; $add["add_time"] = time(); Finance::create($add); } // 保证金处理 public static function bond_finance($user_id, $name, $money, $status) { $add["user_id"] = $user_id; $add["name"] = $name; $add["money"] = $money; $add["status"] = $status; $add["add_time"] = time(); BondFinance::create($add); } /**可售余额 记录 * @param $user_id 用户id * @param $mining_id 区块id * @param $order_id 订单id * @param $money 获得交易区块 * @param $pool 矿池数量 * @param $push_money 可售额度 * @param $buy 当前买入次数 * @param $push 当前卖出次数 * @param $status 0 增加 1 减少 */ public static function VendonolotyFinance($user_id, $mining_id, $order_id, $money, $pool, $push_money, $buy, $push, $status) { $add["user_id"] = $user_id; $add["mining_id"] = $mining_id; $add["order_id"] = $order_id; $add["money"] = $money; $add["pool"] = $pool; $add["push_money"] = $push_money; $add["buy"] = $buy; $add["push"] = $push; $add["status"] = $status; $add["add_time"] = time(); VendibilityFinance::create($add); } }