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

993 lines
38 KiB
PHP

<?php
namespace App\Http\Controllers\Api;
use App\AccountLog;
use App\Currency;
use App\C2cDeal;
use App\C2cDealSend;
// use App\Seller;
use App\LegalDeal;
use App\Setting;
use App\Users;
use App\UsersWallet;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\UserReal;
use App\UserCashInfo;
class C2cDealController extends Controller
{
public function handle_one(Request $request)
{
$id = $request->get('id', null);
$userLegalDealCancel_time=Setting::getValueByKey("userLegalDealCancel_time")*60;
$result=C2cDeal::find($id);
$time=time();
$create_time=strtotime($result->create_time);
// var_dump($create_time+$userLegalDealCancel_time); var_dump($time);die;
if(($create_time+$userLegalDealCancel_time)<=$time)
{
$id =$result->id;
C2cDeal::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();
}
}
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);
$currency_id = $request->get('currency_id', null);
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($currency_id)) return $this->error('请选择币种');
if($price < 0 || $total_number <0){
return $this->error('请输入正确的交易数量或价格');
}
DB::BeginTransaction();
try {
$user_id = Users::getUserId();
//收款方式的判断
$user_cash_info = UserCashInfo::where('user_id', $user_id)->first();
if (!$user_cash_info) {
DB::rollback();
return response()->json(['type'=>'997','message'=>$this->returnStr('您还没有设置收款信息')]);
}
if ($type == 'buy')
{
$userLegalDealCancel=Setting::getValueByKey("userLegalDealCancel");
$user_id = Users::getUserId();
$user=Users::find($user_id);
if($user->today_LegalDealCancel_num>=$userLegalDealCancel)
{
return $this->error($this->returnStr('取消次数已超出').$userLegalDealCancel.$this->returnStr('次,明天再发布'));
}
}
if ($type == 'sell')
{
$wallet=UsersWallet::where('user_id',$user_id)->where('currency',$currency_id)->lockForUpdate()->first();
if(empty($wallet)){
return $this->error('用户钱包不存在');
}
if($wallet->legal_balance < $total_number){
return $this->error('对不起,您的钱包余额不足');
}
//
$data_wallet1 = [
'balance_type' => 2,
'wallet_id' => $wallet->id,
'lock_type' => 0,
'create_time' => time(),
'before' => $wallet->legal_balance,
'change' => -$total_number,
'after' => bc_sub($wallet->legal_balance, $total_number, 5),
];
$data_wallet2 = [
'balance_type' => 2,
'wallet_id' => $wallet->id,
'lock_type' => 1,
'create_time' => time(),
'before' => $wallet->lock_legal_balance,
'change' => $total_number,
'after' => bc_add($wallet->lock_legal_balance, $total_number, 5),
];
$wallet->legal_balance = bc_sub($wallet->legal_balance,$total_number,5);
$wallet->lock_legal_balance = bc_add($wallet->lock_legal_balance,$total_number,5);
$wallet->save();
AccountLog::insertLog(
[
'user_id' => $user_id,
'value' => $total_number * -1,
'info' => '用户发布c2c交易法币出售,扣除法币余额',
'type' => AccountLog::C2C_DEAL_SEND_SELL,
'currency' => $currency_id
],
$data_wallet1
);
AccountLog::insertLog(
[
'user_id' => $user_id,
'value' => $total_number,
'info' => '用户发布c2c交易法币出售,锁定余额增加',
'type' => AccountLog::C2C_DEAL_SEND_SELL,
'currency' => $currency_id
],
$data_wallet2
);
}
$legal_deal_send = new C2cDealSend();
$legal_deal_send->seller_id = $user_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->create_time = time();
$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 = Users::find($id);
if (empty($seller)) return $this->error('无此用户');
$beforeThirtyDays = Carbon::today()->subDay(30)->timestamp;
$results = Users::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 = C2cDealSend::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)
{
$currency_id = $request->get('currency_id',null);
$type = $request->get('type',null);
$limit = $request->get('limit', 10);
$id = Users::getUserId();
$user=Users::find($id);
// $seller = Seller::where('user_id', $id)->first();
if (empty($user)) {
return $this->error('用户不存在');
}
$lists = C2cDealSend::where('seller_id', $id)->where('is_done','<',2);
//是否完成
// 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);
}
if($currency_id){
$lists = $lists->where('currency_id', $currency_id);
}
$lists = $lists->whereDoesntHave('legalDeal',function($query){
$query->where('is_sure','=',1);
});
$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('该币不是法币');
$results = C2cDealSend::where('currency_id', $currency_id)->where('is_done', 0)->where('type', $type)->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 = C2cDealSend::find($id);
if (empty($legal_deal_send)) return $this->error('无此记录');
// $legal_deal_send['sell_cash_info'] = UserCashInfo::where('user_id',$legal_deal_send)->first();
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('参数错误');
}
$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('您还没有设置收款信息')]);
}
DB::beginTransaction();
try {
$legal_deal_send = C2cDealSend::lockForUpdate()->find($deal_send_id);
if (empty($legal_deal_send)) {
DB::rollback();
return $this->error('无此记录');
}
if (!empty($legal_deal_send->is_done)) {
DB::rollback();
return $this->error('此条交易已完成');
}
$money = bc_mul($legal_deal_send->total_number, $legal_deal_send->price, 6);
$number=$legal_deal_send->total_number;
$seller =Users::find($legal_deal_send->seller_id);
if (empty($seller)) {
DB::rollback();
return $this->error('未找到该发布用户');
}
if ($user_id == $seller->id) {
DB::rollback();
return $this->error('不能操作自己的');
}
$users_wallet = UsersWallet::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('您的钱包已被锁定,请联系管理员');
}
$hasNonDone = C2cDeal::where([
['user_id' , '=' , $user_id],
])->whereIn('is_sure', [0,3])->first();
if(!empty($hasNonDone)){
DB::rollBack();
return $this->error('检测有未完成交易,请完成后再来!');
}
if ($legal_deal_send->type == 'buy') { //求购
// do something
if ($users_wallet->legal_balance < $number) {
DB::rollback();
return $this->error('您的余额不足');
}
if ($users_wallet->lock_legal_balance < 0) {
DB::rollback();
return $this->error('您的法币锁定资金异常,请查看您是否有正在进行的挂单');
}
$legal_deal_send->is_done = 1;
$data_wallet1 = [
'balance_type' => 2,
'wallet_id' => $users_wallet->id,
'lock_type' => 0,
'create_time' => time(),
'before' => $users_wallet->legal_balance,
'change' => -$number,
'after' => bc_sub($users_wallet->legal_balance, $number, 5),
];
$data_wallet2 = [
'balance_type' => 2,
'wallet_id' => $users_wallet->id,
'lock_type' => 1,
'create_time' => time(),
'before' => $users_wallet->lock_legal_balance,
'change' => $number,
'after' => bc_add($users_wallet->lock_legal_balance, $number, 5),
];
// $users_wallet->legal_balance -= $number;
$users_wallet->legal_balance = bc_sub($users_wallet->legal_balance,$number,5);
// $users_wallet->lock_legal_balance += $number;
$users_wallet->lock_legal_balance = bc_add($users_wallet->lock_legal_balance,$number,5);
$users_wallet->save();
$legal_deal_send->save();
AccountLog::insertLog(
[
'user_id' => $user_id,
'value' => $number * -1,
'info' => '出售给商家法币,余额减少',
'type' => AccountLog::C2C_DEAL_USER_SELL,
'currency' => $legal_deal_send->currency_id
],
$data_wallet1
);
AccountLog::insertLog(
[
'user_id' => $user_id,
'value' => $number,
'info' => '出售给商家法币,锁定余额增加',
'type' => AccountLog::C2C_DEAL_USER_SELL,
'currency' => $legal_deal_send->currency_id
],
$data_wallet2
);
} elseif ($legal_deal_send->type == 'sell') {
$legal_deal_send->is_done = 1;
$legal_deal_send->save();
}
$legal_deal = new C2cDeal();
$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(66666666);die;
if ($legal_deal_send->type == 'buy'){
Setting::sendSmsForSmsBao($seller->account_number,'您发布的求购信息有用户出售啦,请去 APP 查看吧~');
}else{
Setting::sendSmsForSmsBao($seller->account_number,'您发布的出售信息有用户购买啦,请去 APP 查看吧~');
}
// var_dump(11124);die;
DB::commit();
return $this->success([
'msg' => '操作成功,请联系商家确认订单',
'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)
{
//该天总取消次数是否归零
$user_id = Users::getUserId();
$user=Users::find($user_id);
$lingchen=strtotime(date('Y-m-d'));
// var_dump($lingchen);die;
if($user->LegalDealCancel_num__update_time<$lingchen)
{
$user->LegalDealCancel_num__update_time=time();
$user->today_LegalDealCancel_num=0;
$user->save();
}
$limit = $request->get('limit', 10);
$type = $request->get('type', '');
$currency_id = $request->get('currency_id', '');
if (empty($currency_id)) {
return $this->error('参数错误');
}
$currency = Currency::find($currency_id);
if (empty($currency)) {
return $this->error('无此币种');
}
if (empty($currency->is_legal)) {
return $this->error('该币不是法币');
}
$user_id = Users::getUserId();
$seller=Users::find($user_id);
if(empty($seller)){
return $this->error('用户信息不正确');
}
$results = C2cDeal::where('seller_id', $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);
});
}
$results =$results->where('is_sure',1)->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);
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 = C2cDeal::where('user_id', $user_id)->whereHas('legalDealSend');
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);
return $this->pageData($results);
}
/**
* 订单详情页
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function legalDealInfo(Request $request)
{
$id = $request->get('id', null);
if (empty($id)) {
return $this->error('参数错误');
}
$legal_deal = C2cDeal::find($id);
if (empty($legal_deal)) {
return $this->error('无此记录');
}
return $this->success($legal_deal);
}
/**
* 用户确认支付
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function userLegalDealPay(Request $request)
{
$id = $request->get('id', null);
if (empty($id)) return $this->error('参数错误');
$legal_deal = C2cDeal::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 ($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('对不起,您无权操作');
// }
$seller = Users::find($legal_deal->seller_id);
if ($user_id != $seller->id) {
DB::rollback();
return $this->error('对不起,您无权操作');
}
}
$legal_deal->is_sure = 3;
$legal_deal->save();
DB::commit();
return $this->success('操作成功,请联系卖家确认');
} catch (\Exception $exception) {
DB::rollback();
return $this->error($exception->getMessage());
}
}
public function handle()
{
$userLegalDealCancel_time=Setting::getValueByKey("userLegalDealCancel_time")*60;
$result=LegalDeal::where("is_sure",0)->get();//0未确认 1已确认 2已取消 3已付款
foreach($result as $key=>$value)
{
$time=time();
$create_time=strtotime($value->create_time);
// var_dump($create_time+$userLegalDealCancel_time); var_dump($time);die;
if(($create_time+$userLegalDealCancel_time)<=$time)
{
$id =$value->id;
DB::beginTransaction();
try {
LegalDeal::cancelLegalDealById($id);
DB::commit();
//取消订单数加一
$aaaa=Users::find($value->user_id);
$aaaa->today_LegalDealCancel_num=$aaaa->today_LegalDealCancel_num+1;
$aaaa->save();
return $this->success('操作成功,订单已取消');
} catch (\Exception $exception) {
DB::rollback();
return $this->error($exception->getMessage());
}
}
}
}
/**
* 用户取消订单
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function userLegalDealCancel(Request $request)
{
$userLegalDealCancel=Setting::getValueByKey("userLegalDealCancel");
//获取今天已经取消的次数
$user_id = Users::getUserId();
$user=Users::find($user_id);
if($user->today_LegalDealCancel_num>=$userLegalDealCancel)
{
return $this->error($this->returnStr('您今天的取消次数已超出').$userLegalDealCancel.$this->returnStr('次'));
}
else
{
$user->today_LegalDealCancel_num=$user->today_LegalDealCancel_num+1;
$user->save();
}
$id = $request->get('id', null);
if (empty($id)) {
return $this->error('参数错误');
}
$legal_deal = C2cDeal::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 ($user_id != $legal_deal->user_id) {
DB::rollback();
return $this->error('对不起,您无权操作');
}
} elseif ($legal_deal->type == 'buy') {//用户端出售
if ($user_id != $legal_deal->seller_id) {
DB::rollback();
return $this->error('对不起,您无权操作');
}
}
C2cDeal::cancelLegalDealById($id);
DB::commit();
return $this->success('操作成功,订单已取消');
} catch (\Exception $exception) {
DB::rollback();
return $this->error($exception->getMessage());
}
}
public function legalDealSellerList(Request $request)
{
$limit = $request->get('limit', 10);
$id = $request->get('id', null);
if (empty($id)) return $this->error('参数错误');
$legal_send = C2cDealSend::find($id);
if (empty($legal_send)) {
return $this->error('参数错误2');
}
$user_id=Users::getUserId();
if($user_id !=$legal_send->seller_id){
return $this->error('对不起,这不是您的发布信息');
}
$results = C2cDeal::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 = C2cDeal::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($user_id !=$legal_deal->seller_id){
DB::rollback();
return $this->error('对不起,您无权操作');
}
$legal_send = C2cDealSend::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)->first();
if (empty($user_wallet)) {
DB::rollback();
return $this->error('该用户没有此币种钱包');
}
$from_wallet = UsersWallet::where('user_id', $legal_deal->seller_id)->where('currency', $legal_send->currency_id)->first();
if (empty($from_wallet)) {
DB::rollback();
return $this->error('该用户没有此币种钱包');
}
$data_wallet1 = [
'balance_type' =>2 ,
'wallet_id' => $from_wallet->id,
'lock_type' => 1,
'create_time' => time(),
'before' => $from_wallet->lock_legal_balance,
'change' => -$legal_deal->number,
'after' => bc_sub($from_wallet->lock_legal_balance,$legal_deal->number,5),
];
$data_wallet2 = [
'balance_type' =>2 ,
'wallet_id' => $user_wallet->id,
'lock_type' => 0,
'create_time' => time(),
'before' => $user_wallet->legal_balance,
'change' => $legal_deal->number,
'after' => bc_add($user_wallet->legal_balance, $legal_deal->number, 5),
];
$legal_deal->is_sure = 1;
$legal_deal->update_time = time();
$from_wallet->lock_legal_balance=bc_sub($from_wallet->lock_legal_balance,$legal_deal->number,5);
$user_wallet->legal_balance = bc_add($user_wallet->legal_balance,$legal_deal->number,5);
AccountLog::insertLog(
[
'user_id' => $from_wallet->user_id,
'value' => $legal_deal->number * (-1),
'info' => '出售法币成功,扣除锁定余额',
'type' => AccountLog::C2C_USER_BUY,
'currency' => $legal_send->currency_id
],
$data_wallet1
);
AccountLog::insertLog(
[
'user_id' => $user_wallet->user_id,
'value' => $legal_deal->number,
'info' => $this->returnStr('在 ') . $user->account_number . $this->returnStr('购买法币成功,增加法币余额'),
'type' => AccountLog::C2C_USER_BUY,
'currency' => $legal_send->currency_id
],
$data_wallet2
);
$legal_deal->save();
//$seller->save();
$from_wallet->save();
$user_wallet->save();
DB::commit();
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 = C2cDeal::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 = C2cDealSend::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)
->first();
if (empty($user_wallet)) {
DB::rollback();
return $this->error('该用户没有此币种钱包');
}
$seller=Users::find($legal_deal->seller_id);
$seller_wallet = UsersWallet::where('user_id', $legal_deal->seller_id)
->where('currency', $legal_send->currency_id)
->first();
if (empty($seller_wallet)) {
DB::rollback();
return $this->error('该买家没有此币种钱包');
}
$data_wallet1 = [
'balance_type' => 2,
'wallet_id' => $user_wallet->id,
'lock_type' => 1,
'create_time' => time(),
'before' => $user_wallet->lock_legal_balance,
'change' => -$legal_deal->number,
'after' => bc_sub($user_wallet->lock_legal_balance, $legal_deal->number, 5),
];
$data_wallet2 = [
'balance_type' =>2,
'wallet_id' => $seller_wallet->id,
'lock_type' => 0,
'create_time' => time(),
'before' => $seller_wallet->legal_balance,
'change' => $legal_deal->number,
'after' => bc_add($seller_wallet->legal_balance,$legal_deal->number,5),
];
$legal_deal->is_sure = 1;
$legal_deal->update_time = time();
$user_wallet->lock_legal_balance = bc_sub($user_wallet->lock_legal_balance,$legal_deal->number,5);
$seller_wallet->legal_balance = bc_add($seller_wallet->legal_balance,$legal_deal->number,5);
AccountLog::insertLog(
[
'user_id' => $user->id,
'value' =>-$legal_deal->number,
'info' => $user->account_number . '卖出法币成功',
'type' => AccountLog::LEGAL_SELLER_BUY,
'currency' => $legal_send->currency_id
],
$data_wallet1
);
AccountLog::insertLog(
[
'user_id' => $seller->id,
'value' => $legal_deal->number,
'info' => $seller->account_number . ' 购买法币成功',
'type' => AccountLog::LEGAL_SELLER_BUY,
'currency' => $legal_send->currency_id
],
$data_wallet2
);
$legal_deal->save();
$seller_wallet->save();
$user_wallet->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('参数错误');
DB::beginTransaction();
try {
$legal_send = C2cDealSend::lockForUpdate()->find($id);
if (empty($legal_send)) {
DB::rollback();
return $this->error('无此记录');
}
$is_deal = C2cDeal::where('legal_deal_send_id', $id)->where('is_sure','>',2)->first();
return $is_deal;
if (!empty($is_deal)) {
DB::rollback();
return $this->error('该发布信息下有交易产生无法删除');
}
$user_id = Users::getUserId();
if($user_id !=$legal_send->seller_id){
DB::rollback();
return $this->error('对不起,您无权撤销此记录');
}
if ($legal_send->type == 'sell') {
$wallet=UsersWallet::where('user_id',$user_id)->where('currency',$legal_send->currency_id)->first();
if(empty($wallet)){
DB::rollback();
return $this->error('用户钱包不存在');
}
if($wallet->lock_legal_balance < $legal_send->total_number){
DB::rollback();
return $this->error('对不起,您的账户锁定资金不足');
}
$data_wallet1 = [
'balance_type' => 2,
'wallet_id' => $wallet->id,
'lock_type' => 0,
'create_time' => time(),
'before' => $wallet->legal_balance,
'change' => $legal_send->total_number,
'after' => bc_add($wallet->legal_balance, $legal_send->total_number, 5),
];
$data_wallet2 = [
'balance_type' => 2,
'wallet_id' => $wallet->id,
'lock_type' => 1,
'create_time' => time(),
'before' => $wallet->lock_legal_balance,
'change' => -$legal_send->total_number,
'after' => bc_sub($wallet->lock_legal_balance, $legal_send->total_number, 5),
];
$wallet->legal_balance = bc_add($wallet->legal_balance, $legal_send->total_number, 5);
$wallet->lock_legal_balance = bc_sub($wallet->lock_legal_balance, $legal_send->total_number, 5);
$wallet->save();
// AccountLog::insertLog(['user_id' => $user_id, 'value' => $total_number * -1, 'info' => '用户发布c2c交易法币出售,扣除法币余额', 'type' => AccountLog::C2C_DEAL_SEND_SELL, 'currency' => $currency_id]);
AccountLog::insertLog(
[
'user_id' => $user_id,
'value' => $legal_send->total_number,
'info' => '商家撤回发布法币出售',
'type' => AccountLog::C2C_DEAL_BACK_SEND_SELL,
'currency' => $legal_send->currency_id
],
$data_wallet1
);
AccountLog::insertLog(
[
'user_id' => $user_id,
'value' => -$legal_send->total_number,
'info' => '商家撤回发布法币出售',
'type' => AccountLog::C2C_DEAL_BACK_SEND_SELL,
'currency' => $legal_send->currency_id
],
$data_wallet2
);
}
$legal_send->delete();
C2cDeal::where('legal_deal_send_id', $id)->delete();
DB::commit();
return $this->success('撤回成功');
} catch (\Exception $exception) {
DB::rollback();
return $this->error($exception->getMessage());
}
}
}