1053 lines
41 KiB
PHP
1053 lines
41 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Api;
|
|
|
|
use App\AccountLog;
|
|
use App\Currency;
|
|
use App\LegalDeal;
|
|
use App\LegalDealSend;
|
|
use App\Seller;
|
|
use App\Users;
|
|
use App\UsersWallet;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Foundation\Auth\User;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
use App\UserReal;
|
|
use App\UserCashInfo;
|
|
use App\Events\RechargeEvent;
|
|
use App\Setting;
|
|
use App\C2cDeal;
|
|
|
|
class LegalDealController extends Controller
|
|
{
|
|
|
|
public function getMoneyType(){
|
|
$type = LegalDealSend::MONEY_TYPE;
|
|
$data = [];
|
|
foreach($type as $k => $v){
|
|
$data[$k] = ['name' => $v , 'rate' => 1];
|
|
}
|
|
return $this->success($data);
|
|
}
|
|
|
|
|
|
|
|
public function handle_one(Request $request)
|
|
{
|
|
$id = $request->get('id', null);
|
|
$userLegalDealCancel_time=Setting::getValueByKey("userLegalDealCancel_time")*60;
|
|
$result=LegalDeal::find($id);
|
|
|
|
$time=time();
|
|
$create_time=strtotime($result->create_time);
|
|
if(($create_time+$userLegalDealCancel_time)<=$time)
|
|
{
|
|
$id =$result->id;
|
|
$ppp=LegalDeal::cancelLegalDealById($id);
|
|
$aaaa=Users::find($result->user_id);
|
|
$aaaa->today_LegalDealCancel_num=$aaaa->today_LegalDealCancel_num+1;
|
|
$aaaa->LegalDealCancel_num__update_time=time();
|
|
$aaaa->save();
|
|
return $this->success('订单取消成功');
|
|
}
|
|
|
|
}
|
|
|
|
public function postSend(Request $request)
|
|
{
|
|
$type = $request->get('type', null);
|
|
$way = $request->get('way', null);
|
|
$price = $request->get('price', null);
|
|
$total_number = $request->get('total_number', null);
|
|
$min_number = $request->get('min_number', null);
|
|
$currency_id = $request->get('currency_id', null);
|
|
$max_number=$request->get('max_number', $total_number);
|
|
|
|
if (empty($type)) return $this->error('请选择需求类型');
|
|
if (empty($way)) return $this->error('请选择交易方式');
|
|
if (empty($price)) return $this->error('请填写单价');
|
|
if (empty($total_number)) return $this->error('请填写数量');
|
|
if (empty($min_number)) return $this->error('请填写最小交易数量');
|
|
if (empty($currency_id)) return $this->error('请选择币种');
|
|
if ($min_number > $total_number) return $this->error('最小交易数量不能大于总数量');
|
|
|
|
if (empty($max_number)) return $this->error('请填写最大交易量');
|
|
if ($max_number>$total_number || $max_number<=0 || !is_numeric($max_number)){
|
|
return $this->error('请填写正确的最大交易量');
|
|
}
|
|
$currency = Currency::where('id',$currency_id)->select(['id'])->first();
|
|
if(empty($currency)){
|
|
return $this->error('币种信息有误');
|
|
}
|
|
|
|
DB::BeginTransaction();
|
|
try {
|
|
$user_id = Users::getUserId();
|
|
$seller = Seller::lockForUpdate()->where('user_id', $user_id)->where('currency_id', $currency_id)->first();
|
|
if (empty($seller)) {
|
|
DB::rollback();
|
|
return $this->error('对不起,您不是该法币的商家');
|
|
}
|
|
if ($type == 'sell') {
|
|
|
|
if ($seller->legal_balance < $total_number) {
|
|
DB::rollback();
|
|
return $this->error('对不起,您的商家账户不足');
|
|
}
|
|
|
|
$user_wallet=UsersWallet::lockForUpdate()->where("user_id",$user_id)->where("currency", $currency->id)->first();
|
|
$res1 = change_wallet_balance($user_wallet, 1, $total_number * -1, AccountLog::LEGAL_DEAL_SEND_SELL, '商家发布出售');
|
|
if ($res1 !== true) {
|
|
throw new \Exception($res1);
|
|
}
|
|
|
|
$res2 = change_wallet_balance($user_wallet, 1, $total_number, AccountLog::LEGAL_DEAL_SEND_SELL, '商家发布出售,锁定增加',1);
|
|
|
|
if ($res2 !== true) {
|
|
throw new \Exception($res2);
|
|
}
|
|
|
|
$seller->lock_seller_balance = bc_add($seller->lock_seller_balance,$total_number,5);
|
|
$seller->save();
|
|
|
|
}
|
|
|
|
$legal_deal_send = new LegalDealSend();
|
|
$legal_deal_send->seller_id = $seller->id;
|
|
$legal_deal_send->currency_id = $currency_id;
|
|
$legal_deal_send->type = $type;
|
|
$legal_deal_send->way = $way;
|
|
$legal_deal_send->price = $price;
|
|
$legal_deal_send->total_number = $total_number;
|
|
$legal_deal_send->surplus_number = $total_number;
|
|
$legal_deal_send->min_number = $min_number;
|
|
$legal_deal_send->max_number = $max_number;
|
|
$legal_deal_send->create_time = time();
|
|
$legal_deal_send->money_type = $request->get('money_type')??1;
|
|
$legal_deal_send->save();
|
|
DB::commit();
|
|
return $this->success('发布成功');
|
|
} catch (\Exception $exception) {
|
|
DB::rollback();
|
|
return $this->error($exception->getMessage());
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
public function sellerInfo(Request $request)
|
|
{
|
|
$id = $request->get('id', null);
|
|
$type = $request->get('type',null);
|
|
$was_done = $request->get('was_done','false');
|
|
$limit = $request->get('limit', 10);
|
|
|
|
if (empty($id)) return $this->error('参数错误');
|
|
$seller = Seller::find($id);
|
|
if (empty($seller)) return $this->error('无此商家');
|
|
$beforeThirtyDays = Carbon::today()->subDay(30)->timestamp; //30天前
|
|
$results = Seller::withCount(['legalDeal as total', 'legalDeal as done' => function ($query) {
|
|
$query->where('is_sure', 1);
|
|
}, 'legalDeal as thirtyDays' => function ($query) use ($beforeThirtyDays) {
|
|
$query->where('is_sure', 1)->where('update_time', '>=', $beforeThirtyDays);
|
|
}])->find($id);
|
|
$lists = LegalDealSend::where('seller_id', $id);
|
|
|
|
if($was_done == 'true'){
|
|
$lists = $lists->where('is_done','=','1');
|
|
}elseif($was_done == 'false'){
|
|
$lists = $lists->where('is_done','=','0');
|
|
}
|
|
|
|
if($type == 'buy'){
|
|
$type = 'buy';
|
|
$lists = $lists->where('type',$type);
|
|
}elseif($type == 'sell'){
|
|
$type = 'sell';
|
|
$lists = $lists->where('type',$type);
|
|
}
|
|
|
|
$lists = $lists->orderBy('id', 'desc')->paginate($limit);
|
|
$results->lists = array('data' => $lists->items(), 'page' => $lists->currentPage(), 'pages' => $lists->lastPage(), 'total' => $lists->total());
|
|
return $this->success($results);
|
|
}
|
|
|
|
|
|
public function tradeList(Request $request)
|
|
{
|
|
$type = $request->get('type',null);
|
|
$was_done = $request->get('was_done',null);
|
|
$limit = $request->get('limit', 10);
|
|
|
|
$id = $request->get('id',0);
|
|
|
|
$seller = Seller::where('id', $id)->first();
|
|
|
|
if (empty($seller)) {
|
|
return $this->error('您不是商家');
|
|
}
|
|
$lists = LegalDealSend::where('seller_id', $seller->id);
|
|
//是否完成
|
|
if ($was_done == 'true') {
|
|
//$lists = $lists->where('is_done','=','1');
|
|
$lists = $lists->whereIn('is_done', ['1', '2']);
|
|
} elseif ($was_done == 'false') {
|
|
$lists = $lists->where('is_done','=','0');
|
|
}
|
|
|
|
if($type == 'buy') {
|
|
$type = 'buy';
|
|
$lists = $lists->where('type', $type);
|
|
} elseif ($type == 'sell') {
|
|
$type = 'sell';
|
|
$lists = $lists->where('type', $type);
|
|
}
|
|
|
|
$lists = $lists->orderBy('id', 'desc')->paginate($limit);
|
|
$result = array('data' => $lists->items(), 'page' => $lists->currentPage(), 'pages' => $lists->lastPage(), 'total' => $lists->total());
|
|
return $this->success($result);
|
|
}
|
|
|
|
|
|
|
|
public function legalDealPlatform(Request $request)
|
|
{
|
|
$limit = $request->get('limit', 10);
|
|
$currency_id = $request->get('currency_id', '');
|
|
$type = $request->get('type', 'sell');
|
|
if (empty($currency_id)) return $this->error('参数错误');
|
|
if (empty($type)) return $this->error('参数错误2');
|
|
$currency = Currency::find($currency_id);
|
|
if (empty($currency)) return $this->error('无此币种');
|
|
if (empty($currency->is_legal)) return $this->error('该币不是法币');
|
|
if($type=="sell")
|
|
{
|
|
$results = LegalDealSend::where('currency_id', $currency_id)->where('is_done', 0)->where('is_shelves', 1)->where('type', $type)->orderBy('price', 'asc')->orderBy('id', 'desc')->paginate($limit);
|
|
}
|
|
else
|
|
{
|
|
$results = LegalDealSend::where('currency_id', $currency_id)->where('is_done', 0)->where('is_shelves', 1)->where('type', $type)->orderBy('price', 'desc')->orderBy('id', 'desc')->paginate($limit);
|
|
}
|
|
|
|
return $this->pageData($results);
|
|
}
|
|
public function legalDealSendInfo(Request $request)
|
|
{
|
|
$id = $request->get('id', null);
|
|
if (empty($id)) {
|
|
return $this->error('参数错误');
|
|
}
|
|
$legal_deal_send = LegalDealSend::find($id);
|
|
|
|
$userWallet=UsersWallet::where('currency',$legal_deal_send->currency_id)
|
|
->where('user_id',Users::getUserId())->first();
|
|
|
|
|
|
$legal_deal_send->user_legal_balance=$userWallet->legal_balance;
|
|
|
|
if (empty($legal_deal_send)) return $this->error('无此记录');
|
|
return $this->success($legal_deal_send);
|
|
}
|
|
|
|
public function doDeal(Request $request)
|
|
{
|
|
$deal_send_id = $request->get('id', null);
|
|
$value = $request->get('value', 0);
|
|
$means = $request->get('means', '');
|
|
if (empty($deal_send_id)) {
|
|
return $this->error('参数错误');
|
|
}
|
|
if (!in_array($means, ['number', 'money'])) {
|
|
return $this->error('购买参数错误');
|
|
}
|
|
|
|
if (empty($value)) {
|
|
return $this->error('请填写购买额');
|
|
}
|
|
if (!is_numeric($value)) {
|
|
return $this->error('购买额请填写数字');
|
|
}
|
|
$user_id = Users::getUserId();
|
|
//实名认证检测
|
|
$user_real = UserReal::where('user_id', $user_id)
|
|
->where('review_status', 2)
|
|
->first();
|
|
if (!$user_real) {
|
|
return response()->json(['type'=>'998','message'=>$this->returnStr('您还没有通过实名认证')]);
|
|
}
|
|
//收款信息检测
|
|
$user_cash_info = UserCashInfo::where('user_id', $user_id)->first();
|
|
if (!$user_cash_info) {
|
|
return response()->json(['type'=>'997','message'=>$this->returnStr('您还没有设置收款信息')]);
|
|
}
|
|
|
|
|
|
//限制未完成单数最多为3单
|
|
$is_morethan=LegalDeal::where("user_id","=",$user_id)->whereIn('is_sure', [0,3])->count();
|
|
if($is_morethan>=3)
|
|
{
|
|
return $this->error('未完成单子超过3单,请完成后再操作!');
|
|
}
|
|
|
|
|
|
try {
|
|
DB::beginTransaction();
|
|
$legal_deal_send = LegalDealSend::lockForUpdate()->find($deal_send_id);
|
|
|
|
if (empty($legal_deal_send)) {
|
|
DB::rollback();
|
|
return $this->error('无此记录');
|
|
}
|
|
if ($legal_deal_send->is_shelves != 1 || $legal_deal_send->is_done != 0) {
|
|
throw new \Exception('商家挂单状态异常,暂时不能交易');
|
|
}
|
|
if($legal_deal_send->surplus_number <= 0){
|
|
throw new \Exception('商家挂单剩余可交易数量不足');
|
|
}
|
|
|
|
if (!empty($legal_deal_send->is_done)) {
|
|
DB::rollback();
|
|
return $this->error('此条交易已完成');
|
|
}
|
|
if ($means == 'money') {
|
|
$number = bc_div($value, $legal_deal_send->price, 5);
|
|
} else {
|
|
$number = $value;
|
|
}
|
|
if ($number <= 0) {
|
|
DB::rollback();
|
|
return $this->error('非法提交,数量必须大于0');
|
|
}
|
|
|
|
$money = bc_mul($number, $legal_deal_send->price, 6);
|
|
|
|
if (bc_comp($money, $legal_deal_send->limitation['min']) < 0) {
|
|
DB::rollback();
|
|
return $this->error('您低于最低限额');
|
|
}
|
|
if ($money > $legal_deal_send->limitation['max']) {
|
|
DB::rollback();
|
|
return $this->error('您高于最高限额');
|
|
}
|
|
if ($number > $legal_deal_send->max_number) {
|
|
DB::rollback();
|
|
return $this->error('您高于最大限制数量');
|
|
}
|
|
$seller = Seller::find($legal_deal_send->seller_id);
|
|
if (empty($seller)) {
|
|
DB::rollback();
|
|
return $this->error('未找到该商家');
|
|
}
|
|
|
|
if ($user_id == $seller->user_id) {
|
|
DB::rollback();
|
|
return $this->error('不能操作自己的');
|
|
}
|
|
$users_wallet = UsersWallet::lockForUpdate()->where('user_id', $user_id)->where('currency', $legal_deal_send->currency_id)->first();
|
|
if (empty($users_wallet)) {
|
|
DB::rollback();
|
|
return $this->error('您无此钱包账号');
|
|
}
|
|
if (!empty($users_wallet->status)) {
|
|
DB::rollback();
|
|
return $this->error('您的钱包已被锁定,请联系管理员');
|
|
}
|
|
|
|
if ($legal_deal_send->type == 'buy') { //求购
|
|
|
|
if ($users_wallet->legal_balance < $number) {
|
|
DB::rollback();
|
|
return $this->error('您的法币余额不足');
|
|
}
|
|
if ($users_wallet->lock_legal_balance < 0) {
|
|
DB::rollback();
|
|
return $this->error('您的法币锁定资金异常,请查看您是否有正在进行的挂单');
|
|
}
|
|
|
|
//检查购买数量是否大于剩余余额 t add
|
|
if($number>$legal_deal_send->surplus_number)
|
|
{
|
|
DB::rollback();
|
|
return $this->error('您出售数量大于商家剩余数量!');
|
|
}
|
|
else
|
|
{
|
|
$legal_deal_send->surplus_number = bc_sub($legal_deal_send->surplus_number,$number,5);
|
|
}
|
|
|
|
|
|
if ($legal_deal_send->surplus_number <= 0) {
|
|
|
|
$legal_deal_send->is_shelves = 2; // 下架交易,防止交易被其他用户再匹配
|
|
}
|
|
|
|
|
|
$result = change_wallet_balance($users_wallet, 1, -$number, AccountLog::LEGAL_DEAL_USER_SELL, '出售给商家法币:扣除余额');
|
|
if ($result !== true) {
|
|
throw new \Exception($result);
|
|
}
|
|
$result1 = change_wallet_balance($users_wallet, 1, $number, AccountLog::LEGAL_DEAL_USER_SELL, '出售给商家法币:增加锁定', true);
|
|
if ($result1 !== true) {
|
|
throw new \Exception($result1);
|
|
}
|
|
|
|
|
|
} elseif ($legal_deal_send->type == 'sell') {
|
|
//出售
|
|
|
|
if($number>$legal_deal_send->surplus_number)
|
|
{
|
|
DB::rollback();
|
|
return $this->error('您购买数量大于商家剩余数量!');
|
|
}
|
|
else
|
|
{
|
|
$legal_deal_send->surplus_number = bc_sub($legal_deal_send->surplus_number,$number,5);
|
|
}
|
|
|
|
if ($legal_deal_send->surplus_number <= 0) {
|
|
//$legal_deal_send->is_done = 1;
|
|
$legal_deal_send->is_shelves = 2; // 下架交易,防止交易被其他用户再匹配
|
|
}
|
|
|
|
}
|
|
|
|
$legal_deal_send->save();
|
|
|
|
$legal_deal = new LegalDeal();
|
|
$legal_deal->legal_deal_send_id = $deal_send_id;
|
|
$legal_deal->user_id = $user_id;
|
|
$legal_deal->seller_id = $seller->id;
|
|
$legal_deal->number = $number; //交易数量
|
|
$legal_deal->create_time = time();
|
|
$legal_deal->save();
|
|
// var_dump($legal_deal);die;
|
|
DB::commit();
|
|
return $this->success([
|
|
'msg' => $this->returnStr('操作成功,请联系商家确认订单'),
|
|
'data' => $legal_deal,
|
|
]);
|
|
|
|
} catch (\Exception $exception) {
|
|
DB::rollback();
|
|
return $this->error($exception->getMessage() . $this->returnStr(',错误位于第') . $exception->getLine() . $this->returnStr('行'));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 法币交易商家端列表
|
|
* @param Request $request
|
|
* @return \Illuminate\Http\JsonResponse
|
|
*/
|
|
public function sellerLegalDealList(Request $request)
|
|
{
|
|
$limit = $request->get('limit', 10);
|
|
$type = $request->get('type', 'sell');
|
|
$currency_id = $request->get('currency_id', '');
|
|
|
|
if (empty($currency_id)) {
|
|
return $this->error('参数错误');
|
|
}
|
|
if (empty($type)) {
|
|
return $this->error('参数错误2');
|
|
}
|
|
$currency = Currency::find($currency_id);
|
|
if (empty($currency)) {
|
|
return $this->error('无此币种');
|
|
}
|
|
if (empty($currency->is_legal)) {
|
|
return $this->error('该币不是法币');
|
|
}
|
|
$user_id = Users::getUserId();
|
|
$seller = Seller::where('user_id', $user_id)->where('currency_id', $currency_id)->first();
|
|
if (empty($seller)) {
|
|
return $this->error('您不是此币商家');
|
|
}
|
|
$results = LegalDeal::where('seller_id', $seller->id)
|
|
->whereHas('legalDealSend', function ($query) use ($type) {
|
|
$query->where('type', $type);
|
|
})->orderBy('id', 'desc')->paginate($limit);
|
|
return $this->pageData($results);
|
|
|
|
}
|
|
|
|
/**
|
|
* 法币交易用户端列表
|
|
* @param Request $request
|
|
* @return \Illuminate\Http\JsonResponse
|
|
*/
|
|
public function userLegalDealList(Request $request)
|
|
{
|
|
$limit = $request->get('limit', 10);
|
|
$type = $request->get('type', null);
|
|
$currency_id = $request->get('currency_id', '');
|
|
$is_sure = $request->get('is_sure', null);//0未确认 1已确认 2已取消 3已付款
|
|
|
|
if (!empty($currency_id)) {
|
|
$currency = Currency::find($currency_id);
|
|
if (empty($currency)) return $this->error('无此币种');
|
|
if (empty($currency->is_legal)) return $this->error('该币不是法币');
|
|
}
|
|
|
|
$user_id = Users::getUserId();
|
|
|
|
$results = LegalDeal::where('user_id', $user_id);
|
|
if (!empty($type)) {
|
|
$results = $results->whereHas('legalDealSend', function ($query) use ($type) {
|
|
$query->where('type', $type);
|
|
});
|
|
}
|
|
|
|
if (!empty($currency_id)) {
|
|
$results = $results->whereHas('legalDealSend', function ($query) use ($currency_id) {
|
|
$query->where('currency_id', $currency_id);
|
|
});
|
|
}
|
|
|
|
if (!is_null($is_sure)) {
|
|
$results = $results->where('is_sure', $is_sure);
|
|
}
|
|
$results = $results->orderBy('id', 'desc')->paginate($limit);
|
|
// var_dump($results);die;
|
|
return $this->pageData($results);
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* 法币交易用户端列表 作为商家
|
|
* @param Request $request
|
|
* @return \Illuminate\Http\JsonResponse
|
|
*/
|
|
public function sellerUserLegalDealList(Request $request)
|
|
{
|
|
// var_dump(66666);die;
|
|
$limit = $request->get('limit', 10);
|
|
$type = $request->get('type', null);
|
|
$currency_id = $request->get('currency_id', '');
|
|
$is_sure = $request->get('is_sure', null);//0未确认 1已确认 2已取消 3已付款
|
|
|
|
if (!empty($currency_id)) {
|
|
$currency = Currency::find($currency_id);
|
|
if (empty($currency)) return $this->error('无此币种');
|
|
if (empty($currency->is_legal)) return $this->error('该币不是法币');
|
|
}
|
|
|
|
$user_id = Users::getUserId();
|
|
|
|
$my_seller_id=Seller::where("user_id",$user_id)->first()->id;
|
|
|
|
$results = LegalDeal::where('seller_id', $my_seller_id);
|
|
if (!empty($type)) {
|
|
$results = $results->whereHas('legalDealSend', function ($query) use ($type) {
|
|
$query->where('type', $type);
|
|
});
|
|
}
|
|
|
|
if (!empty($currency_id)) {
|
|
$results = $results->whereHas('legalDealSend', function ($query) use ($currency_id) {
|
|
$query->where('currency_id', $currency_id);
|
|
});
|
|
}
|
|
|
|
if (!is_null($is_sure)) {
|
|
$results = $results->where('is_sure', $is_sure);
|
|
}
|
|
|
|
$results = $results->orderBy('id', 'desc')->paginate($limit);
|
|
// var_dump($results);die;
|
|
// var_dump($results);die;
|
|
return $this->pageData($results);
|
|
}
|
|
|
|
|
|
public function legalDealInfo(Request $request)
|
|
{
|
|
$userLegalDealCancel_time=Setting::getValueByKey("userLegalDealCancel_time")*60;
|
|
$id = $request->get('id', null);
|
|
if (empty($id)) {
|
|
return $this->error('参数错误');
|
|
}
|
|
$legal_deal = LegalDeal::find($id);
|
|
if($legal_deal->is_sure==0)//0未确认 1已确认 2已取消 3已付款
|
|
{
|
|
// var_dump(strtotime($legal_deal->create_time));die;
|
|
$legal_deal->cancel_time=(strtotime($legal_deal->create_time)+$userLegalDealCancel_time)-time();
|
|
}
|
|
|
|
$legal_deal->to_pay_info=Seller::where("id",$legal_deal->seller_id)->first();
|
|
|
|
if (empty($legal_deal)) {
|
|
return $this->error('无此记录');
|
|
}
|
|
return $this->success($legal_deal);
|
|
}
|
|
|
|
public function userLegalDealPay(Request $request)
|
|
{
|
|
$id = $request->get('id', null);
|
|
$pay_orders_img = $request->get('pay_orders_img', null);
|
|
if (empty($id)) return $this->error('参数错误');
|
|
|
|
$legal_deal = LegalDeal::find($id);
|
|
if (empty($legal_deal)) {
|
|
return $this->error('无此记录');
|
|
}
|
|
DB::beginTransaction();
|
|
try {
|
|
if ($legal_deal->is_sure > 0) {
|
|
DB::rollback();
|
|
return $this->error('该订单已操作过,请勿重复操作');
|
|
}
|
|
$user_id = Users::getUserId();
|
|
if ($legal_deal->type == 'sell') {
|
|
if (empty($pay_orders_img)){
|
|
DB::rollback();
|
|
return $this->error('请上传支付凭证');
|
|
}
|
|
if ($user_id != $legal_deal->user_id) {
|
|
DB::rollback();
|
|
return $this->error('对不起,您无权操作');
|
|
}
|
|
} elseif ($legal_deal->type == 'buy') {
|
|
$seller = Seller::find($legal_deal->seller_id);
|
|
if ($user_id != $seller->user_id) {
|
|
DB::rollback();
|
|
return $this->error('对不起,您无权操作');
|
|
}
|
|
}
|
|
$legal_deal->is_sure = 3;
|
|
$legal_deal->pay_orders_img = $pay_orders_img;
|
|
$legal_deal->save();
|
|
DB::commit();
|
|
return $this->success('操作成功,请联系卖家确认');
|
|
} catch (\Exception $exception) {
|
|
DB::rollback();
|
|
return $this->error($exception->getMessage());
|
|
}
|
|
}
|
|
|
|
public function userLegalDealCancel(Request $request)
|
|
{
|
|
$id = $request->get('id', null);
|
|
if (empty($id)) {
|
|
return $this->error('参数错误');
|
|
}
|
|
|
|
|
|
try {
|
|
DB::beginTransaction();
|
|
$legal_deal = LegalDeal::lockForUpdate()->find($id);
|
|
if (empty($legal_deal)) {
|
|
DB::rollback();
|
|
return $this->error('无此记录');
|
|
}
|
|
|
|
if ($legal_deal->is_sure > 0) {
|
|
DB::rollback();
|
|
return $this->error('该订单已操作,请勿取消');
|
|
}
|
|
$user_id = Users::getUserId();
|
|
if ($legal_deal->type == 'sell') { //用户端-购买
|
|
if ($user_id != $legal_deal->user_id) {
|
|
DB::rollback();
|
|
return $this->error('对不起,您无权操作');
|
|
}
|
|
} elseif ($legal_deal->type == 'buy') {//用户端出售
|
|
$seller = Seller::find($legal_deal->seller_id);
|
|
if ($user_id == $legal_deal->user_id) {
|
|
DB::rollback();
|
|
return $this->error('对不起,您无权操作');
|
|
}
|
|
}
|
|
|
|
LegalDeal::cancelLegalDealById($id);
|
|
DB::commit();
|
|
return $this->success('操作成功,订单已取消');
|
|
} catch (\Exception $exception) {
|
|
DB::rollback();
|
|
return $this->error($exception->getMessage());
|
|
}
|
|
}
|
|
|
|
public function mySellerList(Request $request)
|
|
{
|
|
$limit = $request->get('limit', 10);
|
|
$user_id = Users::getUserId();
|
|
$user = Users::find($user_id);
|
|
if (empty($user->is_seller)) {
|
|
return $this->error('对不起您不是商家');
|
|
}
|
|
$results = Seller::where('user_id', $user_id)->orderBy('id', 'desc')->paginate($limit);
|
|
return $this->pageData($results);
|
|
}
|
|
|
|
public function legalDealSellerList(Request $request)
|
|
{
|
|
$limit = $request->get('limit', 10);
|
|
$id = $request->get('id', null);
|
|
$is_sure = $request->get('is_sure', null);
|
|
if (empty($id)) return $this->error('参数错误');
|
|
$legal_send = LegalDealSend::find($id);
|
|
if (empty($legal_send)) {
|
|
return $this->error('参数错误2');
|
|
}
|
|
$seller = Seller::find($legal_send->seller_id);
|
|
if (empty($seller->is_myseller)) {
|
|
return $this->error('对不起,您不是该商家');
|
|
}
|
|
if(!is_null($is_sure))
|
|
{
|
|
$results = LegalDeal::where('legal_deal_send_id', $id)
|
|
->where('is_sure', $is_sure)
|
|
->orderBy('id', 'desc')
|
|
->paginate($limit);
|
|
}else
|
|
{
|
|
$results = LegalDeal::where('legal_deal_send_id', $id)
|
|
->orderBy('id', 'desc')
|
|
->paginate($limit);
|
|
}
|
|
|
|
return $this->pageData($results);
|
|
}
|
|
|
|
public function doSure(Request $request)
|
|
{
|
|
$id = $request->get('id', null);
|
|
if (empty($id)) return $this->error('参数错误');
|
|
DB::beginTransaction();
|
|
try {
|
|
$legal_deal = LegalDeal::lockForUpdate()->find($id);
|
|
if (empty($legal_deal)) {
|
|
DB::rollback();
|
|
return $this->error('无此记录');
|
|
}
|
|
if ($legal_deal->is_sure != 3) {
|
|
DB::rollback();
|
|
return $this->error('该订单还未付款或已经操作过');
|
|
}
|
|
$seller = Seller::lockForUpdate()->find($legal_deal->seller_id);
|
|
if (empty($seller->is_myseller)) {
|
|
DB::rollback();
|
|
return $this->error('对不起,您无权操作');
|
|
}
|
|
if (bc_comp($seller->lock_seller_balance, $legal_deal->number) < 0) {
|
|
throw new \Exception('对不起,您的商家锁定余额不足,当前余额:' . $seller->lock_seller_balance);
|
|
}
|
|
|
|
$legal_send = LegalDealSend::find($legal_deal->legal_deal_send_id);
|
|
if (empty($legal_send)) {
|
|
DB::rollback();
|
|
return $this->error('订单异常');
|
|
}
|
|
if ($legal_send->type == 'buy') {
|
|
DB::rollback();
|
|
return $this->error('您不能确认该订单');
|
|
}
|
|
$user_wallet = UsersWallet::where('user_id', $legal_deal->user_id)->where('currency', $legal_send->currency_id)->lockForUpdate()->first();
|
|
if (empty($user_wallet)) {
|
|
DB::rollback();
|
|
return $this->error('该用户没有此币种钱包');
|
|
}
|
|
// 增加用户法币余额
|
|
$result = change_wallet_balance($user_wallet, 1, $legal_deal->number, AccountLog::LEGAL_USER_BUY, '法币交易:在商家' . $seller->name . ' 购买法币成功');
|
|
if ($result !== true) {
|
|
throw new \Exception($result);
|
|
}
|
|
|
|
//更新交易状态
|
|
$legal_deal->is_sure = 1;
|
|
$legal_deal->update_time = time();
|
|
$legal_deal->save();
|
|
|
|
//商家钱包
|
|
|
|
$seller_user_id=$seller->user_id;
|
|
$seller_user_wallet = UsersWallet::where('user_id', $seller_user_id)
|
|
->where('currency', $legal_send->currency_id)
|
|
->lockForUpdate()
|
|
->first();
|
|
|
|
//减少商家法币锁定余额
|
|
|
|
$seller->lock_seller_balance = bc_sub($seller->lock_seller_balance,$legal_deal->number,5);
|
|
$seller->save();
|
|
|
|
$result = change_wallet_balance($seller_user_wallet, 1, -$legal_deal->number, AccountLog::LEGAL_USER_BUY, '法币交易:卖出成功',true);
|
|
if ($result !== true) {
|
|
throw new \Exception($result);
|
|
}
|
|
|
|
DB::commit();
|
|
//限定usdt才累加业绩
|
|
if (strtolower($legal_send->currency_name) == 'usdt') {
|
|
event(new RechargeEvent($user_wallet->user_id, AccountLog::LEGAL_USER_BUY, $legal_deal->number));
|
|
}
|
|
return $this->success('确认成功');
|
|
} catch (\Exception $exception) {
|
|
DB::rollback();
|
|
return $this->error($exception->getMessage());
|
|
}
|
|
}
|
|
|
|
public function userDoSure(Request $request)
|
|
{
|
|
$id = $request->get('id', null);
|
|
if (empty($id)) return $this->error('参数错误');
|
|
DB::beginTransaction();
|
|
try {
|
|
$legal_deal = LegalDeal::lockForUpdate()->find($id);
|
|
if (empty($legal_deal)) {
|
|
DB::rollback();
|
|
return $this->error('无此记录');
|
|
}
|
|
if ($legal_deal->is_sure != 3) {
|
|
DB::rollback();
|
|
return $this->error('该订单还未付款或已经操作过');
|
|
}
|
|
$user_id = Users::getUserId();
|
|
$user = Users::find($user_id);
|
|
if ($legal_deal->user_id != $user_id) {
|
|
DB::rollback();
|
|
return $this->error('对不起,您无权操作');
|
|
}
|
|
$legal_send = LegalDealSend::find($legal_deal->legal_deal_send_id);
|
|
if (empty($legal_send)) {
|
|
DB::rollback();
|
|
return $this->error('订单异常');
|
|
}
|
|
if ($legal_send->type == 'sell') {
|
|
DB::rollback();
|
|
return $this->error('您不能确认该订单');
|
|
}
|
|
|
|
$user_wallet = UsersWallet::where('user_id', $legal_deal->user_id)
|
|
->where('currency', $legal_send->currency_id)
|
|
->lockForUpdate()
|
|
->first();
|
|
// var_dump($user_wallet->toArray());die;
|
|
if (empty($user_wallet)) {
|
|
DB::rollback();
|
|
return $this->error('该用户没有此币种钱包');
|
|
}
|
|
$seller = Seller::lockForUpdate()->find($legal_deal->seller_id);
|
|
if (empty($seller)) {
|
|
DB::rollback();
|
|
return $this->error('商家不存在');
|
|
}
|
|
$result = change_wallet_balance($user_wallet, 1, -$legal_deal->number, AccountLog::LEGAL_SELLER_BUY, '法币交易:用户' . $user->account_number . '向商家出售法币成功', true);
|
|
if ($result !== true) {
|
|
throw new \Exception($result);
|
|
}
|
|
|
|
//更新交易状态
|
|
$legal_deal->is_sure = 1;
|
|
$legal_deal->update_time = time();
|
|
$legal_deal->save();
|
|
|
|
//商家钱包
|
|
$seller_user_id=$seller->user_id;
|
|
$seller_user_wallet = UsersWallet::where('user_id', $seller_user_id)
|
|
->where('currency', $legal_send->currency_id)
|
|
->lockForUpdate()
|
|
->first();
|
|
|
|
//增加商家法币余额
|
|
$result2 = change_wallet_balance($seller_user_wallet, 1, $legal_deal->number, AccountLog::LEGAL_SELLER_BUY, '法币交易:购买成功');
|
|
if ($result2!== true) {
|
|
throw new \Exception($result2);
|
|
}
|
|
|
|
DB::commit();
|
|
return $this->success('确认成功');
|
|
} catch (\Exception $exception) {
|
|
DB::rollback();
|
|
return $this->error($exception->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 标记交易下架
|
|
*
|
|
*/
|
|
public function down(Request $request)
|
|
{
|
|
$id = $request->get('id', null);
|
|
if (empty($id)) return $this->error('参数错误');
|
|
|
|
try {
|
|
DB::beginTransaction();
|
|
|
|
$legal_send = LegalDealSend::lockForUpdate()->find($id);
|
|
|
|
if (empty($legal_send)) {
|
|
throw new \Exception('无此记录');
|
|
}
|
|
if ($legal_send->is_done != 0 || $legal_send->is_shelves != 1) {
|
|
throw new \Exception('此状态下无法下架');
|
|
}
|
|
$user_id = Users::getUserId();
|
|
$seller = Seller::where('user_id', $user_id)
|
|
->where('currency_id', $legal_send->currency_id)
|
|
->lockForUpdate()
|
|
->first();
|
|
if (empty($seller)) {
|
|
throw new \Exception('对不起,您不是该法币的商家');
|
|
}
|
|
$legal_send->is_shelves = 2;
|
|
$legal_send->save();
|
|
DB::commit();
|
|
return $this->success('发布下架成功,将不会再与新用户匹配');
|
|
} catch (\Exception $exception) {
|
|
DB::rollback();
|
|
return $this->error($exception->getMessage());
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
//撤回
|
|
public function backSend(Request $request)
|
|
{
|
|
$id = $request->get('id', null);
|
|
if (empty($id)) return $this->error('参数错误');
|
|
|
|
try {
|
|
DB::beginTransaction();
|
|
$legal_send = LegalDealSend::lockForUpdate()->find($id);
|
|
if (empty($legal_send)) {
|
|
DB::rollback();
|
|
return $this->error('已撤回发布');
|
|
}
|
|
if ($legal_send->is_sendback != 1) {
|
|
throw new \Exception('已撤销');
|
|
}
|
|
if ($legal_send->is_shelves != 2) {
|
|
throw new \Exception('必须下架后才可以撤销');
|
|
}
|
|
if ($legal_send->is_done != 0) {
|
|
throw new \Exception('当前发布状态无法撤销');
|
|
}
|
|
if (bc_comp($legal_send->surplus_number) <= 0) {
|
|
throw new \Exception('当前发布剩余数量不足,无法撤销');
|
|
}
|
|
if (LegalDealSend::isHasIncompleteness($id)) {
|
|
throw new \Exception('该发布信息下有交易正在进行中,请等待交易结束再撤回');
|
|
}
|
|
|
|
$user_id = Users::getUserId();
|
|
$seller = Seller::where('user_id', $user_id)->where('currency_id', $legal_send->currency_id)->lockForUpdate()->first();
|
|
if (empty($seller)) {
|
|
DB::rollback();
|
|
return $this->error('对不起,您不是该法币的商家');
|
|
}
|
|
if ($legal_send->type == 'sell') { //如果商家发布出售信息
|
|
if ($seller->lock_seller_balance < $legal_send->surplus_number){
|
|
DB::rollback();
|
|
return $this->error('对不起,您的商家账户锁定资金不足');
|
|
}
|
|
|
|
$user_wallet=UsersWallet::where("user_id",$user_id)->where("currency", $legal_send->currency_id)->lockForUpdate()->first();
|
|
$res1=change_wallet_balance($user_wallet,1,-$legal_send->surplus_number, AccountLog::LEGAL_DEAL_BACK_SEND_SELL, '商家撤回',true);
|
|
if ($res1 !== true) {
|
|
throw new \Exception('撤回失败:减少锁定资金失败');
|
|
}
|
|
$res2=change_wallet_balance($user_wallet,1,$legal_send->surplus_number, AccountLog::LEGAL_DEAL_BACK_SEND_SELL, '商家撤回');
|
|
if ($res2 !== true) {
|
|
throw new \Exception('撤回失败:增加余额失败');
|
|
}
|
|
|
|
$seller->lock_seller_balance = bc_sub($seller->lock_seller_balance,$legal_send->surplus_number,5);
|
|
|
|
$seller->save();
|
|
|
|
|
|
}
|
|
$legal_send->is_shelves = 2;
|
|
$legal_send->is_sendback=2;
|
|
$legal_send->is_done = 2;
|
|
$legal_send->save();
|
|
|
|
DB::commit();
|
|
return $this->success('撤回成功');
|
|
} catch (\Exception $exception) {
|
|
DB::rollback();
|
|
return $this->error($exception->getMessage());
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public function errorSend(Request $request)
|
|
{
|
|
$id = $request->get('id', null);
|
|
if (empty($id)) return $this->error('参数错误');
|
|
|
|
try {
|
|
DB::beginTransaction();
|
|
$legal_send = LegalDealSend::lockForUpdate()->find($id);
|
|
if (empty($legal_send)) {
|
|
DB::rollback();
|
|
return $this->error('无此记录');
|
|
}
|
|
$is = LegalDealSend::isHasIncompleteness($id);
|
|
if ($is){
|
|
DB::rollback();
|
|
return $this->error('该发布信息下有交易未完成,不能标记为异常');
|
|
}
|
|
|
|
if ($legal_send->surplus_number >= $legal_send->min_number){
|
|
DB::rollback();
|
|
return $this->error('该发布信息无异常');
|
|
}
|
|
if ($legal_send->surplus_number <= 0){
|
|
DB::rollback();
|
|
return $this->error('该发布剩余数量不足,不法标记异常');
|
|
}
|
|
if ($legal_send->is_done != 0) {
|
|
throw new \Exception('当前发布状态无法标记异常');
|
|
}
|
|
|
|
$user_id = Users::getUserId();
|
|
$seller = Seller::where('user_id', $user_id)->where('currency_id', $legal_send->currency_id)->lockForUpdate()->first();
|
|
if (empty($seller)) {
|
|
DB::rollback();
|
|
return $this->error('对不起,您不是该法币的商家');
|
|
}
|
|
if ($legal_send->type == 'sell') { //如果商家发布出售信息
|
|
if ($seller->lock_seller_balance < $legal_send->surplus_number){
|
|
DB::rollback();
|
|
return $this->error('对不起,您的商家账户锁定资金不足');
|
|
}
|
|
|
|
$user_wallet=UsersWallet::where("user_id",$user_id)->where("currency", $legal_send->currency_id)->lockForUpdate()->first();
|
|
$res1=change_wallet_balance($user_wallet,1,-$legal_send->surplus_number, AccountLog::LEGAL_DEAL_ERROR_SEND_SELL, '商家处理异常',true);
|
|
if ($res1 !== true) {
|
|
throw new \Exception('处理异常失败:减少锁定资金失败');
|
|
}
|
|
$res2=change_wallet_balance($user_wallet,1,$legal_send->surplus_number, AccountLog::LEGAL_DEAL_ERROR_SEND_SELL, '商家处理异常');
|
|
if ($res2 !== true) {
|
|
throw new \Exception('处理异常失败:增加余额失败');
|
|
}
|
|
|
|
$seller->lock_seller_balance = bc_sub($seller->lock_seller_balance,$legal_send->surplus_number,5);
|
|
|
|
$seller->save();
|
|
|
|
}
|
|
$legal_send->is_done = 1;
|
|
$legal_send->save();
|
|
// $legal_send->delete();
|
|
DB::commit();
|
|
return $this->success('处理成功');
|
|
} catch (\Exception $exception) {
|
|
DB::rollback();
|
|
return $this->error($exception->getMessage());
|
|
}
|
|
}
|
|
}
|