Files
repo-backend/app/Http/Controllers/Api/CandyTransferController.php
T

973 lines
31 KiB
PHP

<?php
namespace App\Http\Controllers\Api;
use App\UserCashInfo;
use Illuminate\Http\Request;
use Session;
use App\UserChat;
use App\Users;
use App\UserReal;
use App\Token;
use App\AccountLog;
use App\UsersWallet;
use App\UsersWalletcopy;
use App\Bank;
use App\IdCardIdentity;
use App\Currency;
use App\InviteBg;
use App\Setting;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\DB;
use App\Utils\RPC;
use App\DAO\UserDAO;
use App\CandyTransfer;
class CandyTransferController extends Controller
{
public function show_candynum(Request $request)
{
$user_id = Users::getUserId();
$result['candy_number'] = Users::where('id', $user_id)->first()->candy_number;
$result['transfer_candy_rate']=Setting::getValueByKey("transfer_candy_rate");
return $this->success($result);
}
public function transfer_candy()
{
$baifen_transfer_candy_rate= Setting::getValueByKey('transfer_candy_rate');
$transfer_candy_min= Setting::getValueByKey('transfer_candy_min');
$transfer_candy_max= Setting::getValueByKey('transfer_candy_max');
$transfer_candy_rate = bc_div($baifen_transfer_candy_rate, 100);
$user_id = Users::getUserId();
$user = Users::find($user_id);
$candy_number = Input::get('candy_number');
$account_number = Input::get('mobile');
$to_user=Users::where("account_number","=",$account_number)->first();
$transfer_fee=bc_mul($candy_number,$transfer_candy_rate,6);//手续费
if (empty($candy_number) || $candy_number <= 0) {
return $this->error('参数错误!');
}
if (empty($to_user->account_number)) {
return $this->error('转账账户不存在!');
}
if ($to_user->account_number==$user->account_number) {
return $this->error('不能给自己转账!');
}
if ($candy_number > $user->candy_number ) {
return $this->error('转账数量大于剩余数量!');
}
if ($candy_number > ($user->candy_number+$transfer_fee) ) {
return $this->error('余额不足!');
}
if ($candy_number < $transfer_candy_min) {
return $this->error($this->returnStr('转账数量不能小于').$transfer_candy_min.'!');
}
if ($candy_number > $transfer_candy_max) {
return $this->error($this->returnStr('转账数量不能大于').$transfer_candy_max.'!');
}
DB::beginTransaction();
try {
$aaa=bc_add($candy_number,$transfer_fee);//转账数量+手续费
$user->candy_number=bc_sub($user->candy_number,$aaa,4);//减去
$user->save();
$to_user->candy_number=bc_add($to_user->candy_number,$candy_number,4);//加
$to_user->save();
//记录转账记录
$candy_transfer=new CandyTransfer();
$candy_transfer->from_user_id=$user->id;
$candy_transfer->to_user_id=$to_user->id;
$candy_transfer->transfer_qty=$candy_number;
$candy_transfer->transfer_rate=$baifen_transfer_candy_rate;
$candy_transfer->transfer_fee=$transfer_fee;
$candy_transfer->create_time=time();
$candy_transfer->save();
// var_dump(888888888);die;
DB::commit();
return $this->success('通证转账成功!');
} catch (\Exception $ex) {
DB::rollBack();
return $this->error($ex->getMessage());
}
}
public function show_transfer_candylist()
{
$limit = Input::get('limit','10');
$page = Input::get('page','1');
$type= Input::get('type');
$user_id = Users::getUserId();
if (empty($user_id)) {
return $this->error('参数错误');
}
if($type=="in")
{
$result=CandyTransfer::where("to_user_id","=",$user_id)->orderBy("create_time","desc")->paginate($limit);
}
elseif(($type=="out"))
{
$result=CandyTransfer::where("from_user_id","=",$user_id)->orderBy("create_time","desc")->paginate($limit);
}
// var_dump($result);die;
// foreach($result as $key=>$value)
// {
// $result[$key]['create_time']=date("Y-m-d H:i:s",$value->create_time);
// }
return $this->success(array(
"data"=>$result->items(),
"limit"=>$limit,
"page"=>$page,
));
// return $this->success($result);
}
//设置法币交易账号密码
public function setAccount()
{
$account = Input::get('account', '');
$password = Input::get('password', '');
$repassword = Input::get('repassword', '');
if (empty($account) || empty($password) || empty($repassword)) {
return $this->error('必填项信息不完整');
}
if ($password != $repassword) {
return $this->error('两次输入密码不一致');
}
$user_id = Users::getUserId();
$user = Users::find($user_id);
if (empty($user)) {
return $this->error('此用户不存在');
}
if ($user->account_number) {
return $this->error('此交易账号已经设置');
}
$res = Users::where('account_number', $account)->first();
if ($res) {
return $this->error('此账号已经存在');
}
try {
$user->account_number = $account;
$user->pay_password = Users::MakePassword($password, $user->type);
$user->save();
return $this->success('交易账号设置成功');
} catch (\Exception $e) {
return $this->error($e->getMessage());
}
}
public function safeCenter()
{
$user_id = Users::getUserId();
$user = Users::find($user_id);
$safeInfo = array(
'mobile' => $user->phone,//如果为空,未绑定
'email' => $user->email,
'gesture_password' => $user->gesture_password,
);
return $this->success($safeInfo);
}
public function setMobile()
{
$user_id = Users::getUserId();
$mobile = Input::get('mobile', '');
$code = Input::get('code', '');
if (empty($user_id) || empty($mobile) || empty($code)) {
return $this->error('参数错误');
}
if ($code != session('code')) {
return $this->error('验证码错误');
}
try {
$user = Users::find($user_id);
$user->phone = $mobile;
$user->save();
return $this->success('手机绑定成功');
} catch (\Exception $e) {
return $this->error($e->getMessage());
}
}
public function setEmail()
{
$user_id = Users::getUserId();
$email = Input::get('email', '');
$code = Input::get('code', '');
if (empty($user_id) || empty($email) || empty($code)) {
return $this->error('参数错误');
}
if ($code != session('code')) {
return $this->error('验证码错误');
}
try {
$user = Users::find($user_id);
$user->email = $email;
$user->save();
return $this->success('邮箱绑定成功');
} catch (\Exception $e) {
return $this->error($e->getMessage());
}
}
public function gesturePassAdd()
{
$password = Input::get('password', '');
$re_password = Input::get('re_password', '');
if (mb_strlen($password) < 6) {
return $this->error('手势密码至少连接6个点');
}
if ($password != $re_password) {
return $this->error('两次手势密码不相同');
}
$user_id = Users::getUserId();
$user = Users::find($user_id);
$user->gesture_password = $password;
try {
$user->save();
return $this->success('手势密码添加成功');
} catch (\Exception $e) {
return $this->error($e->getMessage());
}
}
public function gesturePassDel()
{
$user_id = Users::getUserId();
$user = Users::find($user_id);
$user->gesture_password = "";
try {
$user->save();
return $this->success('取消手势密码成功');
} catch (\Exception $e) {
return $this->error($e->getMessage());
}
}
public function updatePayPassword()
{
$password = Input::get('password', '');
$re_password = Input::get('re_password', '');
if (mb_strlen($password) < 6 || mb_strlen($password) > 16) {
return $this->error('密码只能在6-16位之间');
}
if ($password != $re_password) {
return $this->error('两次密码不一致');
}
$user_id = Users::getUserId();
$user = Users::find($user_id);
$user->pay_password = Users::MakePassword($password, $user->type);
try {
$user->save();
return $this->success('交易密码设置成功');
} catch (\Exception $e) {
return $this->error($e->getMessage());
}
}
public function inviteList()
{
$time = Input::get('time', '');
if ($time) {
$time = strtotime($time);
} else {
$time = 0;
}
$list = AccountLog::has('user')
->select(DB::raw('sum(value) as total, user_id'))
->where('type', AccountLog::INVITATION_TO_RETURN)
->where('created_time', '>=', $time)
->groupBy('user_id')
->orderBy('total', 'desc')
->limit(20)
->get()
->toArray();
if (empty($list)) {
return $this->error("暂时还没有邀请排行榜,快去邀请吧");
}
foreach ($list as $key => $val) {
$user = Users::find($val['user_id']);
$list[$key]['account'] = $user->account;
}
return $this->success($list);
}
public function invite()
{
$user_id = Users::getUserId();
$user = Users::where("id", $user_id)->first();
if (empty($user)) {
return $this->error("会员未找到");
}
$list = AccountLog::has('user')
->select(DB::raw('sum(value) as total, user_id'))
->where('type', AccountLog::INVITATION_TO_RETURN)
->groupBy('user_id')
->orderBy('total', 'desc')
->limit(3)
->get()
->toArray();
if (empty($list)) {
$list = [];
} else {
foreach ($list as $key => $val) {
$users = Users::find($val['user_id']);
$list[$key]['account'] = $users->account;
}
}
$ad = [];
$ad['image'] = "/upload/invite.png";
$data = [];
$data['extension_code'] = $user['extension_code'];
$data['ad'] = $ad;
$data['inviteList'] = $list;
$num = Users::where('parent_id', $user_id)->count();
if ($num > 0) {
$data['invite_num'] = $num;
$total = AccountLog::where('user_id', $user_id)->where('type', AccountLog::INVITATION_TO_RETURN)->sum('value');
$data['invite_return_total'] = $total;
} else {
$data['invite_num'] = 0;
$data['invite_return_total'] = 0;
}
return $this->success($data);
}
//钱包地址
public function walletaddress()
{
// $user_id = Users::getUserId();
$user_id = Input::get('user_id');
$wallet_address = Input::get('wallet_address');
$usermyself = Users::where("id", $user_id)->first()->toArray();
$user = Users::where("wallet_address", $wallet_address)->where("id", '!=', $user_id)->first();
if ($usermyself['wallet_address']) {
return $this->error("你已绑定,不可更改!");
} elseif (!empty($user)) {
return $this->error("该地址已被绑定,请重新输入");
} else {
$pdo = new Users();
$pdo->where("id", "=", $user_id)->update(['wallet_address' => $wallet_address]);
return $this->success('绑定成功!');
}
}
//我的
public function info()
{
$user_id = Users::getUserId();
//$user = Users::where("id",$user_id)->first(['id','phone','email','head_portrait','status']);
$user = Users::where("id", $user_id)->first();
if (empty($user)) {
return $this->error("会员未找到");
}
//用户认证状况
$res = UserReal::where('user_id', $user_id)->first();
if (empty($res)) {
$user['review_status'] = 0;
$user['name'] = '';
} else {
$user['review_status'] = $res['review_status'];
$user['name'] = $res['name'];
}
return $this->success($user);
}
//身份认证
public function realName()
{
$user_id = Users::getUserId();
$name = Input::get("name", "");//真实姓名
$card_id = Input::get("card_id", "");//身份证号
$front_pic = Input::get("front_pic", "");//正面照片
$reverse_pic = Input::get("reverse_pic", "");//反面照片
$hand_pic = Input::get("hand_pic", "");//手持身份证照片
if (empty($name) || empty($card_id) || empty($front_pic) || empty($reverse_pic) || empty($hand_pic)) {
return $this->error("请提交完整的信息");
}
//校验 身份证号码合法性
$idcheck = new IdCardIdentity();
$res = $idcheck->check_id($card_id);
if (!$res) {
return $this->error("请输入合法的身份证号码");
}
$user = Users::find($user_id);
if (empty($user)) {
return $this->error("会员未找到");
}
$userreal_number=UserReal::where("card_id",$card_id)->count();
// var_dump($userreal_number);die;
if($userreal_number>0)
{
return $this->error("该身份证号已实名认证过!");
}
$userreal = UserReal::where('user_id', $user_id)->first();
if (!empty($userreal)) {
return $this->error("您已经申请过了");
}
try {
$userreal = new UserReal();
$userreal->user_id = $user_id;
$userreal->name = $name;
$userreal->card_id = $card_id;
$userreal->create_time = time();
$userreal->front_pic = $front_pic;
$userreal->reverse_pic = $reverse_pic;
$userreal->hand_pic = $hand_pic;
$userreal->save();
return $this->success('提交成功,等待审核');
} catch (\Exception $e) {
return $this->error($e->getMessage());
}
}
//个人中心 身份认证信息
public function userCenter()
{
$user_id = Users::getUserId();
$user = Users::where("id", $user_id)->first(['id', 'phone', 'email']);
if (empty($user)) {
return $this->error("会员未找到");
}
$userreal = UserReal::where('user_id', $user_id)->first();
if (empty($userreal)) {
$user['review_status'] = 0;
$user['name'] = '';
$user['card_id'] = '';
} else {
$user['review_status'] = $userreal['review_status'];
$user['name'] = $userreal['name'];
$user['card_id'] = $userreal['card_id'];
}
if (!empty($user['card_id'])) {
$user['card_id'] = mb_substr($user['card_id'], 0, 2) . '******' . mb_substr($user['card_id'], -2, 2);
}
return $this->success($user);
}
//专属海报信息
public function posterBg()
{
$user_id = Users::getUserId();
$user = Users::where("id", $user_id)->first(['id', 'extension_code']);
if (empty($user)) {
return $this->error("会员未找到");
}
$pics = InviteBg::all(['id', 'pic'])->toArray();
$data['extension_code'] = $user['extension_code'];
$data['share_url'] = Setting::getValueByKey('share_url', '');
$data['pics'] = $pics;
return $this->success($data);
}
//我的邀请分享
public function share()
{
$user_id = Users::getUserId();
$user = Users::where("id", $user_id)->first(['id', 'extension_code']);
if (empty($user)) {
return $this->error("会员未找到");
}
$data['share_title'] = Setting::getValueByKey('share_title', '');
$data['share_content'] = Setting::getValueByKey('share_content', '');
$data['share_url'] = Setting::getValueByKey('share_url', '');
$data['extension_code'] = $user['extension_code'];
return $this->success($data);
}
//退出
public function logout()
{
$user_id = Users::getUserId();
$user = Users::find($user_id);
if (empty($user)) {
return $this->error("会员未找到");
}
//清除用户的token session
session(['user_id' => '']);
$token = Token::getToken();
//删除当前token
Token::deleteToken($user_id, $token);
return $this->success('退出登录成功');
}
public function vip()
{
$user_id = Users::getUserId(Input::get("user_id"));
$password = Input::get('password', '');
if (empty($password)) return $this->error("请输入支付密码");
$vip = Input::get("vip");
if (empty($user_id) || empty($vip)) {
return $this->error("参数错误");
}
$user = Users::find($user_id);
if (empty($user)) {
return $this->error("会员未找到");
}
if ($user->vip >= $vip) {
return $this->error("无需升级");
}
if ($vip == "2") {
if ($user->vip == 1) {
$money = 9000;
} else {
$money = 9999;
}
} else {
$money = 999;
}
$wallet = UsersWallet::where("user_id", $user_id)
->where("token", Users::TOKEN_DEFAULT)
->select("id", "user_id", "password", "address", "balance", "lock_balance", "remain_lock_balance", "create_time", "wallet_name", "password_prompt")
->first();
if (empty($wallet)) {
return $this->error("暂无钱包");
}
if ($password != $wallet->password) {
return $this->error("支付密码错误");
}
if ($wallet->balance < $money) {
return $this->error("余额不足");
}
$walletn = UsersWallet::find($wallet->id);
$data_wallet = [
'balance_type' => AccountLog::UPDATE_VIP,
'wallet_id' => $walletn->id,
'lock_type' => 0,
'create_time' => time(),
'before' => $walletn->balance,
'change' => -$money,
'after' => bc_sub($walletn->balance, $money, 5),
];
$user->vip = $vip;
$walletn->balance = $walletn->balance - $money;
$user->save();
$walletn->save();
AccountLog::insertLog(
array(
"user_id" => $user_id,
"value" => -$money,
"type" => AccountLog::UPDATE_VIP,
"info" => "升级会员"
),
$data_wallet
);
return $this->success("升级成功");
}
public function updateCurrencyAddress()
{
}
public function updateAddress()
{
$address = Users::getUserId();
$eth_address = trim(Input::get('eth_address'));
if (empty($address) || empty($eth_address)) {
return $this->error('参数错误');
}
$user = Users::find($address);
if (empty($user)) {
return $this->error('没有此用户');
}
if ($other = Users::where('eth_address', $eth_address)->first()) {
if ($other->id != $user->id) {
return $this->error('该地址别人已经绑定过了');
}
}
try {
$user->eth_address = $eth_address;
$user->save();
return $this->success('更新成功');
} catch (\Exception $e) {
return $this->error($e->getMessage());
}
}
public function getUserByAddress()
{
$user_id = Users::getUserId();
if (empty($user_id))
return $this->error("参数错误");
$user = Users::where("id", $user_id)->first();
if (empty($user)) {
return $this->error("会员未找到");
}
if (empty($user->extension_code)) {
$user->extension_code = Users::getExtensionCode();
$user->save();
}
$wallet = UsersWallet::where("user_id", $user_id)
->where("token", Users::TOKEN_DEFAULT)
->select("id", "user_id", "address", "balance", "lock_balance", "remain_lock_balance", "create_time", "wallet_name", "password_prompt")
->first();
$user->wallet = $wallet;
return $this->success($user);
}
public function chatlist()
{
$user_id = Users::getUserId(Input::get('user_id', ''));
if (empty($user_id)) return $this->error("参数错误");
$user = Users::find($user_id);
if (empty($user)) return $this->error("用户未找到");
$chat_list = UserChat::orderBy('id', 'DESC')->paginate(20);
$datas = $chat_list->items();
krsort($datas);
$return = array();
foreach ($datas as $d) {
array_push($return, $d);
}
return $this->success(array(
"user" => $user,
"chat_list" => [
'total' => $chat_list->total(),
'per_page' => $chat_list->perPage(),
'current_page' => $chat_list->currentPage(),
'last_page' => $chat_list->lastPage(),
'next_page_url' => $chat_list->nextPageUrl(),
'prev_page_url' => $chat_list->previousPageUrl(),
'from' => $chat_list->firstItem(),
'to' => $chat_list->lastItem(),
'data' => $return,
]
));
}
public function sendchat()
{
$user_id = Users::getUserId(Input::get('user_id', ''));
$content = Input::get('content', '');
if (empty($user_id) || empty($content)) return $this->error("参数错误");
$user = Users::find($user_id);
if (empty($user)) return $this->error("会员未找到");
$data["user_id"] = $user_id;
$data["user_name"] = $user->account_number;
$data["head_portrait"] = $user->head_portrait;
$data["content"] = $content;
$data["type"] = "1";
try {
$res = UserChat::sendChat($data);
if ($res == "ok") {
$user_chat = new UserChat();
$user_chat->from_user_id = $user_id;
$user_chat->to_user_id = 0;
$user_chat->content = $content;
$user_chat->type = 1;
$user_chat->add_time = time();
$user_chat->save();
return $this->success("ok");
} else {
return $this->error("请重试");
}
} catch (Exception $e) {
return $this->error($e->getMessage());
}
}
public function into_users()
{
$password = Input::get('password', '');
$account_number = Input::get('account_number', '');
$pay_password = Input::get('pay_password', '');
$parent_id = Input::get('parent_id', '');//邀请人账户
if (empty($parent_id) || empty($pay_password) || empty($password) || empty($password)) {
return $this->error('请把参数填写完整');
}
//判断用户是否存在
$user = Users::getByAccountNumber($account_number);
if (!empty($user)) {
return $this->error('用户已存在');
}
//判断推荐人是否存在
$invit = Users::getByAccountNumber($parent_id);
if (empty($invit)) {
return $this->error('推荐用户不存在');
}
$users = new Users();
$users->password = Users::MakePassword($password, 1);
$users->pay_password = Users::MakePassword($pay_password, 0);
$users->parent_id = $invit->id;
$users->account_number = $account_number;
$users->type = 1;
$users->head_portrait = URL("mobile/images/user_head.png");
$users->time = time();
$users->extension_code = Users::getExtensionCode();
DB::beginTransaction();
try {
$users->save();//保存到user表中
$currency = Currency::all();
$address_url = config('wallet_api') . $users->id;
$address = RPC::apihttp($address_url);
$address = @json_decode($address, true);
foreach ($currency as $key => $value) {
$userWallet = new UsersWallet();
$userWallet->user_id = $users->id;
if ($value->type == 'btc') {
$userWallet->address = $address["contentbtc"];
} else {
$userWallet->address = $address["content"];
}
$userWallet->currency = $value->id;
$userWallet->create_time = time();
$userWallet->save();//默认生成所有币种的钱包
}
DB::commit();
return $this->success("注册成功");
} catch (\Exception $ex) {
DB::rollBack();
return $this->error($ex->getMessage());
}
}
public function into_tra()
{
$account_number = Input::get('account_number', '');
$password = Input::get('password', '');
$number = Input::get('number', '');
$type = Input::get('type', '1');
if (empty($account_number)) {
return $this->error('转入账户不能为空');
}
if (empty($password)) {
return $this->error('密码不能为空');
}
if (empty($number)) {
return $this->error('转入数量不能为空');
}
$tra_user = Users::getByAccountNumber($account_number);
if (empty($tra_user)) {
return $this->error('用户未找到');
}
if ($tra_user->password != Users::MakePassword($password, $tra_user->type)) {
return $this->error('用户密码错误');
}
$currency = Currency::where('name', 'IMC')->first();
$waller_info = UsersWallet::where('currency', $currency->id)->where('user_id', $tra_user->id)->first();
DB::beginTransaction();
$data_wallet = [
'wallet_id' => $waller_info->id,
'lock_type' => 0,
'create_time' => time(),
//'before' => 0,
'change' => $number,
//'after' => 0,
];
try {
if ($type == 0) {
$data_wallet['balance_type'] = 1;
$data_wallet['before'] = $waller_info->legal_balance;
$data_wallet['after'] = bc_add($waller_info->legal_balance, $number, 5);
$waller_info->legal_balance = $waller_info->legal_balance + $number;
$info = '美丽链法币交易余额转入';
$type_info = AccountLog::INTO_TRA_FB;
} else if ($type == 1) {
$data_wallet['balance_type'] = 2;
$data_wallet['before'] = $waller_info->change_balance;
$data_wallet['after'] = bc_add($waller_info->change_balance, $number, 5);
$waller_info->change_balance = $waller_info->change_balance + $number;
$info = '美丽链币币交易余额转入';
$type_info = AccountLog::INTO_TRA_BB;
} else {
$data_wallet['balance_type'] = 3;
$data_wallet['before'] = $waller_info->lever_balance;
$data_wallet['after'] = bc_add($waller_info->lever_balance, $number, 5);
$waller_info->lever_balance = $waller_info->lever_balance + $number;
$info = '美丽链杠杆交易余额转入';
$type_info = AccountLog::INTO_TRA_GG;
}
$waller_info->save();
//锁定余额
$waller_info->save();
AccountLog::insertLog([
'user_id' => $tra_user->id,
'value' => $number,
'currency' => $currency->id,
'info' => $info,
'type' => $type_info,
], $data_wallet);
DB::commit();
return $this->success('转入成功');
} catch (\Exception $ex) {
DB::rollBack();
return $this->error($ex->getMessage());
}
}
public function into_tra_log()
{
$user_id = Users::getUserId();
$list = AccountLog::whereIn("type", array(65, 66, 67))->where('user_id', $user_id)->orderBy('id', 'desc')->get()->toArray();
return $this->success($list);
}
public function e_pwd()
{
$account_number = Input::get('account_number', '');
$password = Input::get('password', '');
$type = Input::get('type', '1'); ///type:1登录密码,type:2支付密码
if (empty($account_number)) {
return $this->error('转入账户不能为空');
}
if (empty($password)) {
return $this->error('密码不能为空');
}
$tra_user = Users::getByAccountNumber($account_number);
if (empty($tra_user)) {
return $this->error('用户未找到');
}
DB::beginTransaction();
try {
if ($type == 1) {
$tra_user->password = Users::MakePassword($password, $tra_user->type);
} else {
$tra_user->pay_password = Users::MakePassword($password, $tra_user->type);
}
$tra_user->save();
DB::commit();
return $this->success('密码修改成功');
} catch (\Exception $ex) {
DB::rollBack();
return $this->error($ex->getMessage());
}
}
}
?>