订单、纠纷
This commit is contained in:
277
app/Bean/Model/Api/Order/CustomerUserPostOrderDisputeBean.php
Normal file
277
app/Bean/Model/Api/Order/CustomerUserPostOrderDisputeBean.php
Normal file
@ -0,0 +1,277 @@
|
|||||||
|
<?php
|
||||||
|
namespace App\Bean\Model\Api\Order;
|
||||||
|
|
||||||
|
use App\Bean\Model\Base\BaseBean;
|
||||||
|
|
||||||
|
class CustomerUserPostOrderDisputeBean extends BaseBean
|
||||||
|
{
|
||||||
|
public $id;
|
||||||
|
public $post_order_id;
|
||||||
|
public $status;
|
||||||
|
public $chat_group_id;
|
||||||
|
public $seller_submit_datetime;
|
||||||
|
public $buyer_submit_datetime;
|
||||||
|
public $result_status;
|
||||||
|
public $buyer_uid;
|
||||||
|
public $buyer_pay_dispute_status;
|
||||||
|
public $buyer_pay_amount;
|
||||||
|
public $buyer_pay_transaction_id;
|
||||||
|
public $buyer_dispute_fee_pay_status;
|
||||||
|
public $buyer_dispute_fee_amount;
|
||||||
|
public $buyer_dispute_fee_pay_transaction_id;
|
||||||
|
public $seller_pay_dispute_status;
|
||||||
|
public $seller_uid;
|
||||||
|
public $seller_pay_amount;
|
||||||
|
public $seller_pay_transaction_id;
|
||||||
|
public $seller_desc_key;
|
||||||
|
public $seller_desc;
|
||||||
|
public $admin_remark;
|
||||||
|
public $admin_uid;
|
||||||
|
public $created_at;
|
||||||
|
public $updated_at;
|
||||||
|
|
||||||
|
public function getBuyerUid()
|
||||||
|
{
|
||||||
|
return $this->buyer_uid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setBuyerUid($buyer_uid): void
|
||||||
|
{
|
||||||
|
$this->buyer_uid = $buyer_uid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSellerUid()
|
||||||
|
{
|
||||||
|
return $this->seller_uid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setSellerUid($seller_uid): void
|
||||||
|
{
|
||||||
|
$this->seller_uid = $seller_uid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getBuyerDisputeFeePayStatus()
|
||||||
|
{
|
||||||
|
return $this->buyer_dispute_fee_pay_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setBuyerDisputeFeePayStatus($buyer_dispute_fee_pay_status): void
|
||||||
|
{
|
||||||
|
$this->buyer_dispute_fee_pay_status = $buyer_dispute_fee_pay_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function getId()
|
||||||
|
{
|
||||||
|
return $this->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setId($id): void
|
||||||
|
{
|
||||||
|
$this->id = $id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPostOrderId()
|
||||||
|
{
|
||||||
|
return $this->post_order_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setPostOrderId($post_order_id): void
|
||||||
|
{
|
||||||
|
$this->post_order_id = $post_order_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getStatus()
|
||||||
|
{
|
||||||
|
return $this->status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setStatus($status): void
|
||||||
|
{
|
||||||
|
$this->status = $status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getChatGroupId()
|
||||||
|
{
|
||||||
|
return $this->chat_group_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setChatGroupId($chat_group_id): void
|
||||||
|
{
|
||||||
|
$this->chat_group_id = $chat_group_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSellerSubmitDatetime()
|
||||||
|
{
|
||||||
|
return $this->seller_submit_datetime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setSellerSubmitDatetime($seller_submit_datetime): void
|
||||||
|
{
|
||||||
|
$this->seller_submit_datetime = $seller_submit_datetime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getBuyerSubmitDatetime()
|
||||||
|
{
|
||||||
|
return $this->buyer_submit_datetime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setBuyerSubmitDatetime($buyer_submit_datetime): void
|
||||||
|
{
|
||||||
|
$this->buyer_submit_datetime = $buyer_submit_datetime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getResultStatus()
|
||||||
|
{
|
||||||
|
return $this->result_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setResultStatus($result_status): void
|
||||||
|
{
|
||||||
|
$this->result_status = $result_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getBuyerPayDisputeStatus()
|
||||||
|
{
|
||||||
|
return $this->buyer_pay_dispute_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setBuyerPayDisputeStatus($buyer_pay_dispute_status): void
|
||||||
|
{
|
||||||
|
$this->buyer_pay_dispute_status = $buyer_pay_dispute_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getBuyerPayAmount()
|
||||||
|
{
|
||||||
|
return $this->buyer_pay_amount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setBuyerPayAmount($buyer_pay_amount): void
|
||||||
|
{
|
||||||
|
$this->buyer_pay_amount = $buyer_pay_amount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getBuyerPayTransactionId()
|
||||||
|
{
|
||||||
|
return $this->buyer_pay_transaction_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setBuyerPayTransactionId($buyer_pay_transaction_id): void
|
||||||
|
{
|
||||||
|
$this->buyer_pay_transaction_id = $buyer_pay_transaction_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getBuyerDisputeFeeAmount()
|
||||||
|
{
|
||||||
|
return $this->buyer_dispute_fee_amount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setBuyerDisputeFeeAmount($buyer_dispute_fee_amount): void
|
||||||
|
{
|
||||||
|
$this->buyer_dispute_fee_amount = $buyer_dispute_fee_amount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getBuyerDisputeFeePayTransactionId()
|
||||||
|
{
|
||||||
|
return $this->buyer_dispute_fee_pay_transaction_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setBuyerDisputeFeePayTransactionId($buyer_dispute_fee_pay_transaction_id): void
|
||||||
|
{
|
||||||
|
$this->buyer_dispute_fee_pay_transaction_id = $buyer_dispute_fee_pay_transaction_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSellerPayDisputeStatus()
|
||||||
|
{
|
||||||
|
return $this->seller_pay_dispute_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setSellerPayDisputeStatus($seller_pay_dispute_status): void
|
||||||
|
{
|
||||||
|
$this->seller_pay_dispute_status = $seller_pay_dispute_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSellerPayAmount()
|
||||||
|
{
|
||||||
|
return $this->seller_pay_amount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setSellerPayAmount($seller_pay_amount): void
|
||||||
|
{
|
||||||
|
$this->seller_pay_amount = $seller_pay_amount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSellerPayTransactionId()
|
||||||
|
{
|
||||||
|
return $this->seller_pay_transaction_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setSellerPayTransactionId($seller_pay_transaction_id): void
|
||||||
|
{
|
||||||
|
$this->seller_pay_transaction_id = $seller_pay_transaction_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSellerDescKey()
|
||||||
|
{
|
||||||
|
return $this->seller_desc_key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setSellerDescKey($seller_desc_key): void
|
||||||
|
{
|
||||||
|
$this->seller_desc_key = $seller_desc_key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSellerDesc()
|
||||||
|
{
|
||||||
|
return $this->seller_desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setSellerDesc($seller_desc): void
|
||||||
|
{
|
||||||
|
$this->seller_desc = $seller_desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAdminRemark()
|
||||||
|
{
|
||||||
|
return $this->admin_remark;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setAdminRemark($admin_remark): void
|
||||||
|
{
|
||||||
|
$this->admin_remark = $admin_remark;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAdminUid()
|
||||||
|
{
|
||||||
|
return $this->admin_uid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setAdminUid($admin_uid): void
|
||||||
|
{
|
||||||
|
$this->admin_uid = $admin_uid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCreatedAt()
|
||||||
|
{
|
||||||
|
return $this->created_at;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setCreatedAt($created_at): void
|
||||||
|
{
|
||||||
|
$this->created_at = $created_at;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUpdatedAt()
|
||||||
|
{
|
||||||
|
return $this->updated_at;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setUpdatedAt($updated_at): void
|
||||||
|
{
|
||||||
|
$this->updated_at = $updated_at;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -20,12 +20,23 @@ class CustomerWalletBalanceTransactionBean extends BaseBean
|
|||||||
protected $remark;
|
protected $remark;
|
||||||
protected $target_uid;
|
protected $target_uid;
|
||||||
protected $target_post_order_id;
|
protected $target_post_order_id;
|
||||||
|
protected $target_post_order_dispute_id;
|
||||||
protected $sign;
|
protected $sign;
|
||||||
protected $callback_time;
|
protected $callback_time;
|
||||||
protected $delay_payment_time;
|
protected $delay_payment_time;
|
||||||
protected $created_at;
|
protected $created_at;
|
||||||
protected $updated_at;
|
protected $updated_at;
|
||||||
|
|
||||||
|
public function getTargetPostOrderDisputeId()
|
||||||
|
{
|
||||||
|
return $this->target_post_order_dispute_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setTargetPostOrderDisputeId($target_post_order_dispute_id): void
|
||||||
|
{
|
||||||
|
$this->target_post_order_dispute_id = $target_post_order_dispute_id;
|
||||||
|
}
|
||||||
|
|
||||||
public function getId()
|
public function getId()
|
||||||
{
|
{
|
||||||
return $this->id;
|
return $this->id;
|
||||||
|
|||||||
@ -5,14 +5,14 @@ namespace App\Console\Commands;
|
|||||||
use App\Models\Api\Customer\CustomerUserExtendModel;
|
use App\Models\Api\Customer\CustomerUserExtendModel;
|
||||||
use Illuminate\Console\Command;
|
use Illuminate\Console\Command;
|
||||||
|
|
||||||
class DailyCheckUserActiveStatus extends Command
|
class DailyCheckUserActiveStatusCmd extends Command
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* The name and signature of the console command.
|
* The name and signature of the console command.
|
||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
protected $signature = 'app:daily-check-user-active-status';
|
protected $signature = 'app:daily-check-user-active-status-cmd';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The console command description.
|
* The console command description.
|
||||||
35
app/Console/Commands/HourCustomerWalletTrsDelayPayCmd.php
Normal file
35
app/Console/Commands/HourCustomerWalletTrsDelayPayCmd.php
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Console\Commands;
|
||||||
|
|
||||||
|
use App\Models\Api\Wallet\CustomerWalletBalanceTransactionModel;
|
||||||
|
use Illuminate\Console\Command;
|
||||||
|
|
||||||
|
class HourCustomerWalletTrsDelayPayCmd extends Command
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The name and signature of the console command.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $signature = 'app:hour-customer-wallet-trs-delay-pay-cmd';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The console command description.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $description = '每小时检查用户钱包交易延迟支付';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute the console command.
|
||||||
|
*/
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
$this->info('每小时检查用户钱包交易延迟支付');
|
||||||
|
$this->info('开始...');
|
||||||
|
$oCustomerWalletBalanceTransactionModel = new CustomerWalletBalanceTransactionModel();
|
||||||
|
$oCustomerWalletBalanceTransactionModel->dealDelayPaymentTransactionCmd();
|
||||||
|
$this->info('结束...');
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -13,7 +13,8 @@ class Kernel extends ConsoleKernel
|
|||||||
protected function schedule(Schedule $schedule): void
|
protected function schedule(Schedule $schedule): void
|
||||||
{
|
{
|
||||||
// $schedule->command('inspire')->hourly();
|
// $schedule->command('inspire')->hourly();
|
||||||
$schedule->command('app:daily-check-user-active-status')->dailyAt('00:30')->onOneServer();
|
$schedule->command('app:daily-check-user-active-status-cmd')->dailyAt('00:30')->onOneServer();
|
||||||
|
$schedule->command('app:hour-customer-wallet-trs-delay-pay-cmd')->hourly()->onOneServer();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
8
app/Const/Prefix.php
Normal file
8
app/Const/Prefix.php
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?php
|
||||||
|
namespace App\Const;
|
||||||
|
|
||||||
|
class Prefix{
|
||||||
|
|
||||||
|
const ORDER_SN_PREFIX = 'OD_';
|
||||||
|
|
||||||
|
}
|
||||||
@ -1,7 +1,14 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Models\Api\Order;
|
namespace App\Models\Api\Order;
|
||||||
|
|
||||||
|
use App\Bean\Model\Api\Order\CustomerUserPostOrderDisputeBean;
|
||||||
|
use App\Exceptions\ModelException;
|
||||||
use App\Models\Api\Base\ApiBaseModel;
|
use App\Models\Api\Base\ApiBaseModel;
|
||||||
|
use App\Models\Api\Wallet\CustomerWalletBalanceTransactionModel;
|
||||||
|
use App\Tools\Logs;
|
||||||
|
use App\Tools\Times;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
use Spatie\FlareClient\Api;
|
use Spatie\FlareClient\Api;
|
||||||
|
|
||||||
class CustomerUserPostOrderDisputeModel extends ApiBaseModel
|
class CustomerUserPostOrderDisputeModel extends ApiBaseModel
|
||||||
@ -16,9 +23,14 @@ class CustomerUserPostOrderDisputeModel extends ApiBaseModel
|
|||||||
'seller_submit_datetime',
|
'seller_submit_datetime',
|
||||||
'buyer_submit_datetime',
|
'buyer_submit_datetime',
|
||||||
'result_status',
|
'result_status',
|
||||||
|
'buyer_uid',
|
||||||
'buyer_pay_dispute_status',
|
'buyer_pay_dispute_status',
|
||||||
'buyer_pay_amount',
|
'buyer_pay_amount',
|
||||||
'buyer_pay_transaction_id',
|
'buyer_pay_transaction_id',
|
||||||
|
'buyer_dispute_fee_pay_status',
|
||||||
|
'buyer_dispute_fee_amount',
|
||||||
|
'buyer_dispute_fee_pay_transaction_id',
|
||||||
|
'seller_uid',
|
||||||
'seller_pay_dispute_status',
|
'seller_pay_dispute_status',
|
||||||
'seller_pay_amount',
|
'seller_pay_amount',
|
||||||
'seller_pay_transaction_id',
|
'seller_pay_transaction_id',
|
||||||
@ -29,4 +41,240 @@ class CustomerUserPostOrderDisputeModel extends ApiBaseModel
|
|||||||
'created_at',
|
'created_at',
|
||||||
'updated_at',
|
'updated_at',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
const STATUS_NO_DISPUTE = 1;
|
||||||
|
const STATUS_WAITING = 2;
|
||||||
|
const STATUS_PROCESSING = 3;
|
||||||
|
const STATUS_FINISH = 4;
|
||||||
|
const STATUS_CANCEL = 5;
|
||||||
|
const STATUS = [
|
||||||
|
self::STATUS_NO_DISPUTE => '无纠纷',
|
||||||
|
self::STATUS_WAITING => '待处理',
|
||||||
|
self::STATUS_PROCESSING => '处理中',
|
||||||
|
self::STATUS_FINISH => '处理完成',
|
||||||
|
self::STATUS_CANCEL => '取消',
|
||||||
|
];
|
||||||
|
|
||||||
|
const RESULT_STATUS_SELLER_RESPLITY = 1;
|
||||||
|
const RESULT_STATUS_BUYER_RESPLITY = 2;
|
||||||
|
const RESULT_STATUS_EACH_RESPLITY = 3;
|
||||||
|
const RESULT_STATUS_OVERRULE = 4;
|
||||||
|
const RESULT_STATUS = [
|
||||||
|
self::RESULT_STATUS_SELLER_RESPLITY => '卖家责任',
|
||||||
|
self::RESULT_STATUS_BUYER_RESPLITY => '买家责任',
|
||||||
|
self::RESULT_STATUS_EACH_RESPLITY => '双方责任',
|
||||||
|
self::RESULT_STATUS_OVERRULE => '驳回',
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
const PAY_DISPUTE_STATUS_WAITING = 1;
|
||||||
|
const PAY_DISPUTE_STATUS_SUCCESS = 2;
|
||||||
|
const PAY_DISPUTE_STATUS_FAIL = 3;
|
||||||
|
const PAY_DISPUTE_STATUS = [
|
||||||
|
self::PAY_DISPUTE_STATUS_WAITING => '待处理',
|
||||||
|
self::PAY_DISPUTE_STATUS_SUCCESS => '成功',
|
||||||
|
self::PAY_DISPUTE_STATUS_FAIL => '失败',
|
||||||
|
];
|
||||||
|
|
||||||
|
const BUYER_DISPUTE_FEE_PAY_STATUS_NO = 1;
|
||||||
|
const BUYER_DISPUTE_FEE_PAY_STATUS_YES = 2;
|
||||||
|
const BUYER_DISPUTE_FEE_PAY_STATUS = [
|
||||||
|
self::BUYER_DISPUTE_FEE_PAY_STATUS_NO => '未支付',
|
||||||
|
self::BUYER_DISPUTE_FEE_PAY_STATUS_YES => '已支付',
|
||||||
|
];
|
||||||
|
|
||||||
|
//纠纷管理员接单
|
||||||
|
public function disputeAdminAccept($dispute_id, $admin_uid, $is_change_admin = false): bool|int
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$datetimeNow = Times::getNowDateTime();
|
||||||
|
DB::beginTransaction();
|
||||||
|
$resModel = $this->findItem($dispute_id);
|
||||||
|
if (!$resModel) throw new ModelException('dispute not found');
|
||||||
|
if ($resModel->status != self::STATUS_WAITING) throw new ModelException('dispute status error');
|
||||||
|
if (!empty($resModel->admin_uid) && !$is_change_admin) throw new ModelException('already have admin');
|
||||||
|
|
||||||
|
$updateItem = [
|
||||||
|
'id' => $resModel->id,
|
||||||
|
'status' => self::STATUS_PROCESSING,
|
||||||
|
'admin_uid' => $admin_uid,
|
||||||
|
'updated_at' => $datetimeNow,
|
||||||
|
];
|
||||||
|
$res = $this->updateItem($updateItem);
|
||||||
|
if (!$res) throw new ModelException('update dispute status fail');
|
||||||
|
DB::commit();
|
||||||
|
Logs::SuccLog(__FUNCTION__, func_get_args());
|
||||||
|
return true;
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
DB::rollBack();
|
||||||
|
Logs::ErrLog(__FUNCTION__ . ' ' . 'rollBack', $e, func_get_args());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//创建纠纷
|
||||||
|
public function createDispute($post_order_id)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$datetimeNow = Times::getNowDateTime();
|
||||||
|
DB::beginTransaction();
|
||||||
|
$oCustomerUserPostOrderModel = new CustomerUserPostOrderModel();
|
||||||
|
$resCustomerUserPostOrderModel = $oCustomerUserPostOrderModel->findItem($post_order_id);
|
||||||
|
if (!$resCustomerUserPostOrderModel) throw new \Exception('order not found');
|
||||||
|
if ($resCustomerUserPostOrderModel->pay_status != CustomerUserPostOrderModel::PAY_STATUS_PAID) throw new ModelException('order already in dispute');
|
||||||
|
if ($resCustomerUserPostOrderModel->dispute_status != CustomerUserPostOrderModel::DISPUTE_STATUS_UN_DISPUTE) throw new ModelException('order already in dispute');
|
||||||
|
//更新订单纠纷状态
|
||||||
|
$updateItem = [
|
||||||
|
'id' => $resCustomerUserPostOrderModel->id,
|
||||||
|
'dispute_status' => CustomerUserPostOrderModel::DISPUTE_STATUS_WAITING,
|
||||||
|
'updated_at' => $datetimeNow,
|
||||||
|
];
|
||||||
|
$res = $oCustomerUserPostOrderModel->updateItem($updateItem);
|
||||||
|
if (!$res) throw new ModelException('update order dispute status fail');
|
||||||
|
//创建纠纷
|
||||||
|
$bean = new CustomerUserPostOrderDisputeBean();
|
||||||
|
$bean->setBuyerUid($resCustomerUserPostOrderModel->buyer_uid);
|
||||||
|
$bean->setSellerUid($resCustomerUserPostOrderModel->seller_uid);
|
||||||
|
$bean->setPostOrderId($post_order_id);
|
||||||
|
$bean->setStatus(self::STATUS_WAITING);
|
||||||
|
$bean->setBuyerDisputeFeePayStatus(self::BUYER_DISPUTE_FEE_PAY_STATUS_NO);
|
||||||
|
//@@计算纠纷申诉费用
|
||||||
|
$bean->setBuyerDisputeFeeAmount(5); //默认5u
|
||||||
|
$bean->setCreatedAt($datetimeNow);
|
||||||
|
$bean->setUpdatedAt($datetimeNow);
|
||||||
|
$resModel = $this->addItem($bean->toArrayNotNull());
|
||||||
|
if (!$resModel) throw new ModelException('create dispute fail');
|
||||||
|
|
||||||
|
//创建聊天群组
|
||||||
|
$chat_id = $this->createChatGroupForDispute($resModel->id);
|
||||||
|
if (!$chat_id) throw new ModelException('create chat group fail');
|
||||||
|
$updateItem = [
|
||||||
|
'id' => $resModel->id,
|
||||||
|
'chat_group_id' => $chat_id,
|
||||||
|
];
|
||||||
|
$res = $this->updateItem($updateItem);
|
||||||
|
if (!$res) throw new ModelException('update chat group id fail');
|
||||||
|
|
||||||
|
DB::commit();
|
||||||
|
Logs::SuccLog(__FUNCTION__, func_get_args());
|
||||||
|
return $resModel->id;
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
DB::rollBack();
|
||||||
|
Logs::ErrLog(__FUNCTION__ . ' ' . 'rollBack', $e, func_get_args());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//@@创建聊天群组用于纠纷
|
||||||
|
function createChatGroupForDispute($dispute_id)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//纠纷判罚
|
||||||
|
public function disputePenalty($dispute_id, $result_status, $buyer_amount, $seller_amount, $admin_uid, $admin_remark): bool|int
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
if (
|
||||||
|
!in_array(
|
||||||
|
$result_status,
|
||||||
|
[self::RESULT_STATUS_SELLER_RESPLITY, self::RESULT_STATUS_BUYER_RESPLITY, self::RESULT_STATUS_EACH_RESPLITY, self::RESULT_STATUS_OVERRULE]
|
||||||
|
)
|
||||||
|
) throw new ModelException('result_status error');
|
||||||
|
$datetimeNow = Times::getNowDateTime();
|
||||||
|
DB::beginTransaction();
|
||||||
|
$resModel = $this->findItem($dispute_id);
|
||||||
|
if (!$resModel) throw new ModelException('dispute not found');
|
||||||
|
if ($resModel->status != self::STATUS_PROCESSING) throw new ModelException('dispute status error');
|
||||||
|
if ($resModel->admin_uid != $admin_uid) throw new ModelException('admin_uid error');
|
||||||
|
$oCustomerUserPostOrderModel = new CustomerUserPostOrderModel();
|
||||||
|
$resCustomerUserPostOrderModel = $oCustomerUserPostOrderModel->findItem($resModel->post_order_id);
|
||||||
|
if (!$resCustomerUserPostOrderModel) throw new ModelException('order not found');
|
||||||
|
if ($resCustomerUserPostOrderModel->dispute_status != CustomerUserPostOrderModel::DISPUTE_STATUS_PROCESSING) throw new ModelException('order dispute status error');
|
||||||
|
//更新订单状态
|
||||||
|
$updateItem = [
|
||||||
|
'id' => $resCustomerUserPostOrderModel->id,
|
||||||
|
'dispute_status' => CustomerUserPostOrderModel::DISPUTE_STATUS_FINISH,
|
||||||
|
'dispute_result_status' => $result_status,
|
||||||
|
'updated_at' => $datetimeNow,
|
||||||
|
];
|
||||||
|
$res = $oCustomerUserPostOrderModel->updateItem($updateItem);
|
||||||
|
if (!$res) throw new ModelException('update order dispute status fail');
|
||||||
|
|
||||||
|
//执行金额处理
|
||||||
|
$oCustomerWalletBalanceTransactionModel = new CustomerWalletBalanceTransactionModel();
|
||||||
|
$buyer_pay_status = self::PAY_DISPUTE_STATUS_SUCCESS;
|
||||||
|
$seller_pay_status = self::PAY_DISPUTE_STATUS_SUCCESS;
|
||||||
|
//执行买家
|
||||||
|
$resBuyerTrsId = $this->changeUserAmountDispute(
|
||||||
|
$resCustomerUserPostOrderModel->buyer_uid,
|
||||||
|
$resCustomerUserPostOrderModel->buyer_currency_code,
|
||||||
|
$buyer_amount,
|
||||||
|
$resModel->id,
|
||||||
|
);
|
||||||
|
if (!$resBuyerTrsId) {
|
||||||
|
$buyer_pay_status = self::PAY_DISPUTE_STATUS_FAIL;
|
||||||
|
$this->changeUserAmountNotEnough($resCustomerUserPostOrderModel->buyer_uid, $resCustomerUserPostOrderModel->buyer_currency_code, $buyer_amount);
|
||||||
|
}
|
||||||
|
//执行卖家
|
||||||
|
$resSellerTrsId = $this->changeUserAmountDispute(
|
||||||
|
$resCustomerUserPostOrderModel->seller_uid,
|
||||||
|
$resCustomerUserPostOrderModel->seller_currency_code,
|
||||||
|
$seller_amount,
|
||||||
|
$resModel->id,
|
||||||
|
);
|
||||||
|
if (!$resSellerTrsId) {
|
||||||
|
$seller_pay_status = self::PAY_DISPUTE_STATUS_FAIL;
|
||||||
|
$this->changeUserAmountNotEnough($resCustomerUserPostOrderModel->seller_uid, $resCustomerUserPostOrderModel->seller_currency_code, $seller_amount);
|
||||||
|
}
|
||||||
|
|
||||||
|
//更新纠纷
|
||||||
|
$updateItem = [
|
||||||
|
'status' => self::STATUS_FINISH,
|
||||||
|
'result_status' => $result_status,
|
||||||
|
'admin_remark' => $admin_remark,
|
||||||
|
'updated_at' => $datetimeNow,
|
||||||
|
'buyer_pay_amount' => $buyer_amount,
|
||||||
|
'buyer_pay_dispute_status' => $buyer_pay_status,
|
||||||
|
'seller_pay_amount' => $seller_amount,
|
||||||
|
'seller_pay_dispute_status' => $seller_pay_status,
|
||||||
|
];
|
||||||
|
if ($buyer_pay_status == self::PAY_DISPUTE_STATUS_SUCCESS) $updateItem['buyer_pay_transaction_id'] = $resBuyerTrsId;
|
||||||
|
if ($seller_pay_status == self::PAY_DISPUTE_STATUS_SUCCESS) $updateItem['seller_pay_transaction_id'] = $resSellerTrsId;
|
||||||
|
$res = $this->updateItem($updateItem);
|
||||||
|
if (!$res) throw new ModelException('update dispute status fail');
|
||||||
|
|
||||||
|
DB::commit();
|
||||||
|
Logs::SuccLog(__FUNCTION__, func_get_args());
|
||||||
|
return true;
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
DB::rollBack();
|
||||||
|
Logs::ErrLog(__FUNCTION__ . ' ' . 'rollBack', $e, func_get_args());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//@@金额不足处理
|
||||||
|
function changeUserAmountNotEnough($uid, $currency_code, $amount, $remark = '')
|
||||||
|
{
|
||||||
|
//@@冻结用户提款功能
|
||||||
|
//@@提交到定期扣款任务
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//纠纷金额处理
|
||||||
|
function changeUserAmountDispute($uid, $currency_code, $amount, $dispute_id, $remark = ''): bool|int
|
||||||
|
{
|
||||||
|
if ($amount == 0) return true;
|
||||||
|
$oCustomerWalletBalanceTransactionModel = new CustomerWalletBalanceTransactionModel();
|
||||||
|
if ($amount > 0) {
|
||||||
|
$res = $oCustomerWalletBalanceTransactionModel->typeDisputeAdd($uid, $currency_code, $amount, $dispute_id, $remark);
|
||||||
|
} else {
|
||||||
|
$res = $oCustomerWalletBalanceTransactionModel->typeDisputeSub($uid, $currency_code, $amount, $dispute_id, $remark);
|
||||||
|
}
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,8 +1,15 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace App\Models\Api\Order;
|
namespace App\Models\Api\Order;
|
||||||
|
|
||||||
|
use App\Bean\Model\Api\Order\CustomerUserPostOrderBean;
|
||||||
|
use App\Const\Prefix;
|
||||||
|
use App\Exceptions\ModelException;
|
||||||
use App\Models\Api\Base\ApiBaseModel;
|
use App\Models\Api\Base\ApiBaseModel;
|
||||||
use Spatie\FlareClient\Api;
|
use App\Models\Api\Post\PostHistoryModel;
|
||||||
|
use App\Models\Api\Wallet\CustomerWalletBalanceTransactionModel;
|
||||||
|
use App\Tools\Logs;
|
||||||
|
use App\Tools\Times;
|
||||||
|
use App\Tools\Tools;
|
||||||
|
|
||||||
class CustomerUserPostOrderModel extends ApiBaseModel
|
class CustomerUserPostOrderModel extends ApiBaseModel
|
||||||
{
|
{
|
||||||
@ -19,7 +26,6 @@ class CustomerUserPostOrderModel extends ApiBaseModel
|
|||||||
'amount',
|
'amount',
|
||||||
'buyer_wallet_transaction_id',
|
'buyer_wallet_transaction_id',
|
||||||
'seller_wallet_transaction_id',
|
'seller_wallet_transaction_id',
|
||||||
'wallet_checkbook_id',
|
|
||||||
'dispute_status',
|
'dispute_status',
|
||||||
'dispute_result_status',
|
'dispute_result_status',
|
||||||
'created_at',
|
'created_at',
|
||||||
@ -28,7 +34,14 @@ class CustomerUserPostOrderModel extends ApiBaseModel
|
|||||||
|
|
||||||
const PAY_STATUS_UNPAID = 1;
|
const PAY_STATUS_UNPAID = 1;
|
||||||
const PAY_STATUS_PAID = 2;
|
const PAY_STATUS_PAID = 2;
|
||||||
const PAY_STATUS_CANCEL = 3;
|
const PAY_STATUS_PAID_FAIL = 3;
|
||||||
|
const PAY_STATUS_CANCEL = 4;
|
||||||
|
const PAY_STATUS = [
|
||||||
|
self::PAY_STATUS_UNPAID => '未支付',
|
||||||
|
self::PAY_STATUS_PAID => '已支付',
|
||||||
|
self::PAY_STATUS_PAID_FAIL => '支付失败',
|
||||||
|
self::PAY_STATUS_CANCEL => '取消',
|
||||||
|
];
|
||||||
|
|
||||||
const DISPUTE_STATUS_UN_DISPUTE = 1;
|
const DISPUTE_STATUS_UN_DISPUTE = 1;
|
||||||
const DISPUTE_STATUS_WAITING = 2;
|
const DISPUTE_STATUS_WAITING = 2;
|
||||||
@ -42,12 +55,48 @@ class CustomerUserPostOrderModel extends ApiBaseModel
|
|||||||
self::DISPUTE_STATUS_FINISH => '申诉完成',
|
self::DISPUTE_STATUS_FINISH => '申诉完成',
|
||||||
];
|
];
|
||||||
|
|
||||||
const DISPUTE_RESULT_STATUS_NO_MISTAKE = 1;
|
//订单购买
|
||||||
const DISPUTE_RESULT_STATUS_HAVE_MISTAKE = 2;
|
public function buy($buyer_uid, $seller_id,$currency_code, $amount, $post_id): bool|int
|
||||||
const DISPUTE_RESULT_STATUS = [
|
{
|
||||||
self::DISPUTE_RESULT_STATUS_NO_MISTAKE => '无过错',
|
try {
|
||||||
self::DISPUTE_RESULT_STATUS_HAVE_MISTAKE => '有过错',
|
$sn = Tools::genSnowflakeId(Prefix::ORDER_SN_PREFIX);
|
||||||
];
|
$datetimeNow = Times::getNowDateTime();
|
||||||
|
$bean = new CustomerUserPostOrderBean();
|
||||||
|
|
||||||
|
$bean->setAmount(abs($amount));
|
||||||
|
$bean->setSn($sn);
|
||||||
|
$bean->setPayStatus(self::PAY_STATUS_UNPAID);
|
||||||
|
$bean->setBuyerUid($buyer_uid); //买家
|
||||||
|
$bean->setSellerUid($seller_id); //卖家
|
||||||
|
$bean->setPid($post_id);
|
||||||
|
$bean->setBuyerCurrencyCode($currency_code); //买家
|
||||||
|
$bean->setSellerCurrencyCode($currency_code); //卖家
|
||||||
|
$bean->setDisputeStatus(self::DISPUTE_STATUS_UN_DISPUTE); //纠纷状态
|
||||||
|
$bean->setCreatedAt($datetimeNow);
|
||||||
|
$bean->setUpdatedAt($datetimeNow);
|
||||||
|
|
||||||
|
//查找post_history_id做快照
|
||||||
|
$oPostHistoryModel = new PostHistoryModel();
|
||||||
|
$resPostHistoryModel = $oPostHistoryModel->findLastPostId($post_id,['id']);
|
||||||
|
if(!$resPostHistoryModel) throw new ModelException('post_history_id not found');
|
||||||
|
$bean->setPostHistoryId($resPostHistoryModel->id);
|
||||||
|
|
||||||
|
$res = $this->addItem($bean->toArray());
|
||||||
|
if(!$res) throw new ModelException('order add fail');
|
||||||
|
$bean->setId($res->id);
|
||||||
|
|
||||||
|
//进行支付
|
||||||
|
$oCustomerWalletBalanceTransactionModel = new CustomerWalletBalanceTransactionModel();
|
||||||
|
$res = $oCustomerWalletBalanceTransactionModel->typeOrderPay($bean); //订单支付,内部会进行order状态的更新
|
||||||
|
if(!$res) throw new ModelException('order pay fail');
|
||||||
|
|
||||||
|
Logs::SuccLog(__FUNCTION__, func_get_args());
|
||||||
|
return $bean->getId();
|
||||||
|
}catch (\Exception $e){
|
||||||
|
Logs::ErrLog(__FUNCTION__ . ' ' . 'catchErr', $e, func_get_args());
|
||||||
|
// throw new ModelException($e->getMessage());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -44,5 +44,15 @@ class PostHistoryModel extends ApiBaseModel
|
|||||||
return $this->addItem($aItem);
|
return $this->addItem($aItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//获取最新的历史记录(=当前)
|
||||||
|
function findLastPostId($post_id,$col = ['*']): \Illuminate\Database\Eloquent\Model|\Illuminate\Database\Eloquent\Builder|null
|
||||||
|
{
|
||||||
|
return $this->newQuery()
|
||||||
|
->where('oid',$post_id)
|
||||||
|
->where('method','!=',self::METHOD_DEL)
|
||||||
|
->orderBy('created_at','desc')
|
||||||
|
->first($col);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,27 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace App\Models\Api\Wallet;
|
|
||||||
|
|
||||||
use App\Models\Api\Base\ApiBaseModel;
|
|
||||||
use Spatie\FlareClient\Api;
|
|
||||||
|
|
||||||
class CustomerPostOrderWalletCheckbookModel extends ApiBaseModel
|
|
||||||
{
|
|
||||||
protected $table = 'customer_post_order_wallet_checkbook';
|
|
||||||
protected $primaryKey = 'id';
|
|
||||||
protected $fillable = [
|
|
||||||
'id',
|
|
||||||
'post_order_id',
|
|
||||||
'type',
|
|
||||||
'status',
|
|
||||||
'pay_uid',
|
|
||||||
'receive_uid',
|
|
||||||
'amount',
|
|
||||||
'currency_id',
|
|
||||||
'currency_code',
|
|
||||||
'pay_time',
|
|
||||||
'created_at',
|
|
||||||
'updated_at',
|
|
||||||
'exec_time',
|
|
||||||
'remark',
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@ -30,6 +30,7 @@ class CustomerWalletBalanceTransactionModel extends ApiBaseModel
|
|||||||
'remark',
|
'remark',
|
||||||
'target_uid',
|
'target_uid',
|
||||||
'target_post_order_id',
|
'target_post_order_id',
|
||||||
|
'target_post_order_dispute_id',
|
||||||
'sign',
|
'sign',
|
||||||
'callback_time',
|
'callback_time',
|
||||||
'delay_payment_time',
|
'delay_payment_time',
|
||||||
@ -52,6 +53,8 @@ class CustomerWalletBalanceTransactionModel extends ApiBaseModel
|
|||||||
const TYPE_ADMIN_SUB = 13;
|
const TYPE_ADMIN_SUB = 13;
|
||||||
const TYPE_TRANSFER_TO_USER_DEC = 14;
|
const TYPE_TRANSFER_TO_USER_DEC = 14;
|
||||||
const TYPE_TRANSFER_RECEIVE_ADD = 15;
|
const TYPE_TRANSFER_RECEIVE_ADD = 15;
|
||||||
|
const TYPE_ORDER_DISPUTE_FEE_DEC = 16;
|
||||||
|
const TYPE_ORDER_DISPUTE_FEE_ADD = 17;
|
||||||
const TYPE = [
|
const TYPE = [
|
||||||
self::TYPE_RECHARGE_ADD => '充值',
|
self::TYPE_RECHARGE_ADD => '充值',
|
||||||
self::TYPE_WITHDRAW_DEC => '提现',
|
self::TYPE_WITHDRAW_DEC => '提现',
|
||||||
@ -68,6 +71,8 @@ class CustomerWalletBalanceTransactionModel extends ApiBaseModel
|
|||||||
self::TYPE_ADMIN_SUB => '管理员扣款',
|
self::TYPE_ADMIN_SUB => '管理员扣款',
|
||||||
self::TYPE_TRANSFER_TO_USER_DEC => '转账给用户',
|
self::TYPE_TRANSFER_TO_USER_DEC => '转账给用户',
|
||||||
self::TYPE_TRANSFER_RECEIVE_ADD => '转账收款',
|
self::TYPE_TRANSFER_RECEIVE_ADD => '转账收款',
|
||||||
|
self::TYPE_ORDER_DISPUTE_FEE_DEC => '纠纷仲裁费用扣除',
|
||||||
|
self::TYPE_ORDER_DISPUTE_FEE_ADD => '纠纷仲裁费用退还',
|
||||||
];
|
];
|
||||||
|
|
||||||
const STATUS_WAIT = 1;
|
const STATUS_WAIT = 1;
|
||||||
@ -90,6 +95,117 @@ class CustomerWalletBalanceTransactionModel extends ApiBaseModel
|
|||||||
self::SOURCE_PARAMS_SECURITY => '保证金',
|
self::SOURCE_PARAMS_SECURITY => '保证金',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
function getDelayPayList($datetime, $col = ['*']): \Illuminate\Database\Eloquent\Collection|array
|
||||||
|
{
|
||||||
|
return $this->newQuery()->where('status', self::STATUS_DELAY_PAYMENT)->where('delay_payment_time', '<=', $datetime)->limit(100)->get($col);
|
||||||
|
}
|
||||||
|
|
||||||
|
//纠纷仲裁费用退还
|
||||||
|
function typeOrderDisputeFeeAdd($uid, $currency_code, $amount, $remark = null): bool
|
||||||
|
{
|
||||||
|
$bean = new CustomerWalletBalanceTransactionBean();
|
||||||
|
$bean->setUid($uid);
|
||||||
|
$bean->setCurrencyCode($currency_code);
|
||||||
|
$bean->setAmount(abs($amount)); //正数
|
||||||
|
$bean->setType(self::TYPE_ORDER_DISPUTE_FEE_ADD);
|
||||||
|
$bean->setStatus(self::STATUS_SUCCESS);
|
||||||
|
$bean->setRemark($remark);
|
||||||
|
try {
|
||||||
|
DB::beginTransaction();
|
||||||
|
//查询用户余额
|
||||||
|
$oCustomerWalletBalanceModel = new CustomerWalletBalanceModel();
|
||||||
|
$resWalletBalanceModel = $oCustomerWalletBalanceModel->findByUidCurrencyCode($bean->getUid(), $bean->getCurrencyCode());
|
||||||
|
if (!$resWalletBalanceModel) throw new ModelException('wallet not found');
|
||||||
|
$bean->setWalletId($resWalletBalanceModel->id);
|
||||||
|
$bean->setBeforeTotalAmount($resWalletBalanceModel->total_amount);
|
||||||
|
$bean->setAfterTotalAmount(Math::bcAdd($resWalletBalanceModel->total_amount, $bean->getAmount()));
|
||||||
|
//新增账变
|
||||||
|
$res = $this->addTransaction($bean);
|
||||||
|
if (!$res) throw new ModelException('addTransaction fail');
|
||||||
|
//变更余额
|
||||||
|
$res = $oCustomerWalletBalanceModel->addAvailableAmount($bean->getWalletId(), $bean->getAmount());
|
||||||
|
if (!$res) throw new ModelException('order dispute fee add fail');
|
||||||
|
DB::commit();
|
||||||
|
Logs::SuccLog(__FUNCTION__, func_get_args());
|
||||||
|
return true;
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
DB::rollBack();
|
||||||
|
Logs::ErrLog(__FUNCTION__ . ' ' . 'rollBack', $e, func_get_args());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//纠纷仲裁费用扣除
|
||||||
|
function typeOrderDisputeFeeDec($uid, $currency_code, $amount, $remark = null): bool
|
||||||
|
{
|
||||||
|
$bean = new CustomerWalletBalanceTransactionBean();
|
||||||
|
$bean->setUid($uid);
|
||||||
|
$bean->setCurrencyCode($currency_code);
|
||||||
|
$bean->setAmount(-abs($amount)); //账变负数
|
||||||
|
$bean->setType(self::TYPE_ORDER_DISPUTE_FEE_DEC);
|
||||||
|
$bean->setStatus(self::STATUS_SUCCESS);
|
||||||
|
$bean->setRemark($remark);
|
||||||
|
try {
|
||||||
|
DB::beginTransaction();
|
||||||
|
//查询用户余额
|
||||||
|
$oCustomerWalletBalanceModel = new CustomerWalletBalanceModel();
|
||||||
|
$resWalletBalanceModel = $oCustomerWalletBalanceModel->findByUidCurrencyCode($bean->getUid(), $bean->getCurrencyCode());
|
||||||
|
if (!$resWalletBalanceModel) throw new ModelException('wallet not found');
|
||||||
|
if (Math::bcComp($resWalletBalanceModel->available_amount, abs($bean->getAmount())) != -1) throw new ModelException('balance not enough');
|
||||||
|
$bean->setWalletId($resWalletBalanceModel->id);
|
||||||
|
$bean->setBeforeTotalAmount($resWalletBalanceModel->total_amount);
|
||||||
|
$bean->setAfterTotalAmount(Math::bcAdd($resWalletBalanceModel->total_amount, $bean->getAmount()));
|
||||||
|
//新增账变
|
||||||
|
$res = $this->addTransaction($bean);
|
||||||
|
if (!$res) throw new ModelException('addTransaction fail');
|
||||||
|
//变更余额
|
||||||
|
$res = $oCustomerWalletBalanceModel->subAvailableAmount($bean->getWalletId(), $bean->getAmount());
|
||||||
|
if (!$res) throw new ModelException('order dispute fee dec fail');
|
||||||
|
DB::commit();
|
||||||
|
Logs::SuccLog(__FUNCTION__, func_get_args());
|
||||||
|
return true;
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
DB::rollBack();
|
||||||
|
Logs::ErrLog(__FUNCTION__ . ' ' . 'rollBack', $e, func_get_args());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//处理延期账变
|
||||||
|
function dealDelayPaymentTransactionCmd(): void
|
||||||
|
{
|
||||||
|
$datetimeNow = Times::getNowDateTime();
|
||||||
|
$oCustomerWalletBalanceModel = new CustomerWalletBalanceModel();
|
||||||
|
while (true) {
|
||||||
|
$resList = $this->getDelayPayList($datetimeNow, ['id']);
|
||||||
|
if ($resList->isEmpty()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
foreach ($resList as $itemId) {
|
||||||
|
try {
|
||||||
|
DB::beginTransaction();
|
||||||
|
$item = $this->findItem($itemId->id);
|
||||||
|
$resWalletBalanceModel = $oCustomerWalletBalanceModel->findItem($item->wallet_id);
|
||||||
|
if (!$resWalletBalanceModel) throw new ModelException('wallet not found');
|
||||||
|
$updateItem = [
|
||||||
|
'id' => $item->id,
|
||||||
|
'status' => self::STATUS_SUCCESS,
|
||||||
|
'updated_at' => Times::getNowDateTime(),
|
||||||
|
];
|
||||||
|
$res = $this->updateItem($updateItem);
|
||||||
|
if (!$res) throw new ModelException('updateItem fail');
|
||||||
|
$res = $oCustomerWalletBalanceModel->unFrozenAmount($item->wallet_id, $item->amount);
|
||||||
|
if (!$res) throw new ModelException('unFrozenAmount fail');
|
||||||
|
DB::commit();
|
||||||
|
Logs::SuccLog(__FUNCTION__, func_get_args());
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
DB::rollBack();
|
||||||
|
Logs::ErrLog(__FUNCTION__ . ' ' . 'rollBack', $e, func_get_args());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//转账给用户
|
//转账给用户
|
||||||
function typeTransferToUser($uid, $target_uid, $currency_code, $amount, $remark = null): bool
|
function typeTransferToUser($uid, $target_uid, $currency_code, $amount, $remark = null): bool
|
||||||
{
|
{
|
||||||
@ -310,7 +426,7 @@ class CustomerWalletBalanceTransactionModel extends ApiBaseModel
|
|||||||
}
|
}
|
||||||
|
|
||||||
//仲裁判罚扣除
|
//仲裁判罚扣除
|
||||||
function typeDisputeSub($uid, $currency_code, $amount, $remark = null): bool
|
function typeDisputeSub($uid, $currency_code, $amount, $target_post_order_dispute_id, $remark = null): bool|int
|
||||||
{
|
{
|
||||||
$bean = new CustomerWalletBalanceTransactionBean();
|
$bean = new CustomerWalletBalanceTransactionBean();
|
||||||
$bean->setUid($uid);
|
$bean->setUid($uid);
|
||||||
@ -319,6 +435,7 @@ class CustomerWalletBalanceTransactionModel extends ApiBaseModel
|
|||||||
$bean->setType(self::TYPE_DISPUTE_SUB);
|
$bean->setType(self::TYPE_DISPUTE_SUB);
|
||||||
$bean->setStatus(self::STATUS_SUCCESS);
|
$bean->setStatus(self::STATUS_SUCCESS);
|
||||||
$bean->setRemark($remark);
|
$bean->setRemark($remark);
|
||||||
|
$bean->setTargetPostOrderDisputeId($target_post_order_dispute_id);
|
||||||
try {
|
try {
|
||||||
DB::beginTransaction();
|
DB::beginTransaction();
|
||||||
//查询用户余额
|
//查询用户余额
|
||||||
@ -330,8 +447,8 @@ class CustomerWalletBalanceTransactionModel extends ApiBaseModel
|
|||||||
$bean->setAfterTotalAmount(Math::bcAdd($resWalletBalanceModel->total_amount, $bean->getAmount()));
|
$bean->setAfterTotalAmount(Math::bcAdd($resWalletBalanceModel->total_amount, $bean->getAmount()));
|
||||||
|
|
||||||
//新增账变
|
//新增账变
|
||||||
$res = $this->addTransaction($bean);
|
$resModel = $this->addTransaction($bean);
|
||||||
if (!$res) throw new ModelException('addTransaction fail');
|
if (!$resModel) throw new ModelException('addTransaction fail');
|
||||||
//变更余额
|
//变更余额
|
||||||
//检查余额是否足够
|
//检查余额是否足够
|
||||||
if (Math::bcComp($resWalletBalanceModel->available_amount, abs($bean->getAmount())) != -1) { //从余额中扣除
|
if (Math::bcComp($resWalletBalanceModel->available_amount, abs($bean->getAmount())) != -1) { //从余额中扣除
|
||||||
@ -346,7 +463,7 @@ class CustomerWalletBalanceTransactionModel extends ApiBaseModel
|
|||||||
if (!$res) throw new ModelException('dispute sub fail');
|
if (!$res) throw new ModelException('dispute sub fail');
|
||||||
DB::commit();
|
DB::commit();
|
||||||
Logs::SuccLog(__FUNCTION__, func_get_args());
|
Logs::SuccLog(__FUNCTION__, func_get_args());
|
||||||
return true;
|
return $resModel->id;
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
DB::rollBack();
|
DB::rollBack();
|
||||||
Logs::ErrLog(__FUNCTION__ . ' ' . 'rollBack', $e, func_get_args());
|
Logs::ErrLog(__FUNCTION__ . ' ' . 'rollBack', $e, func_get_args());
|
||||||
@ -356,7 +473,7 @@ class CustomerWalletBalanceTransactionModel extends ApiBaseModel
|
|||||||
}
|
}
|
||||||
|
|
||||||
//仲裁判罚增加
|
//仲裁判罚增加
|
||||||
function typeDisputeAdd($uid, $currency_code, $amount, $remark = null): bool
|
function typeDisputeAdd($uid, $currency_code, $amount, $target_post_order_dispute_id, $remark = null): bool|int
|
||||||
{
|
{
|
||||||
$bean = new CustomerWalletBalanceTransactionBean();
|
$bean = new CustomerWalletBalanceTransactionBean();
|
||||||
$bean->setUid($uid);
|
$bean->setUid($uid);
|
||||||
@ -365,6 +482,7 @@ class CustomerWalletBalanceTransactionModel extends ApiBaseModel
|
|||||||
$bean->setType(self::TYPE_DISPUTE_ADD);
|
$bean->setType(self::TYPE_DISPUTE_ADD);
|
||||||
$bean->setStatus(self::STATUS_SUCCESS);
|
$bean->setStatus(self::STATUS_SUCCESS);
|
||||||
$bean->setRemark($remark);
|
$bean->setRemark($remark);
|
||||||
|
$bean->setTargetPostOrderDisputeId($target_post_order_dispute_id);
|
||||||
try {
|
try {
|
||||||
DB::beginTransaction();
|
DB::beginTransaction();
|
||||||
//查询用户余额
|
//查询用户余额
|
||||||
@ -375,15 +493,15 @@ class CustomerWalletBalanceTransactionModel extends ApiBaseModel
|
|||||||
$bean->setBeforeTotalAmount($resWalletBalanceModel->total_amount);
|
$bean->setBeforeTotalAmount($resWalletBalanceModel->total_amount);
|
||||||
$bean->setAfterTotalAmount(Math::bcAdd($resWalletBalanceModel->total_amount, $bean->getAmount()));
|
$bean->setAfterTotalAmount(Math::bcAdd($resWalletBalanceModel->total_amount, $bean->getAmount()));
|
||||||
//新增账变
|
//新增账变
|
||||||
$res = $this->addTransaction($bean);
|
$resModel = $this->addTransaction($bean);
|
||||||
if (!$res) throw new ModelException('addTransaction fail');
|
if (!$resModel) throw new ModelException('addTransaction fail');
|
||||||
//变更余额
|
//变更余额
|
||||||
$oCustomerWalletBalanceModel = new CustomerWalletBalanceModel();
|
$oCustomerWalletBalanceModel = new CustomerWalletBalanceModel();
|
||||||
$res = $oCustomerWalletBalanceModel->addAvailableAmount($bean->getWalletId(), $bean->getAmount());
|
$res = $oCustomerWalletBalanceModel->addAvailableAmount($bean->getWalletId(), $bean->getAmount());
|
||||||
if (!$res) throw new ModelException('dispute add fail');
|
if (!$res) throw new ModelException('dispute add fail');
|
||||||
DB::commit();
|
DB::commit();
|
||||||
Logs::SuccLog(__FUNCTION__, func_get_args());
|
Logs::SuccLog(__FUNCTION__, func_get_args());
|
||||||
return true;
|
return $resModel->id;
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
DB::rollBack();
|
DB::rollBack();
|
||||||
Logs::ErrLog(__FUNCTION__ . ' ' . 'rollBack', $e, func_get_args());
|
Logs::ErrLog(__FUNCTION__ . ' ' . 'rollBack', $e, func_get_args());
|
||||||
|
|||||||
@ -8,12 +8,12 @@ class Logs
|
|||||||
{
|
{
|
||||||
static function ErrLog($title, \Exception $e, $params = []): void
|
static function ErrLog($title, \Exception $e, $params = []): void
|
||||||
{
|
{
|
||||||
Log::error(self::getTitle($title,'success:'), ['message' => $e->getMessage(), 'trace' => $e->getTrace(), 'params' => $params]);
|
Log::error(self::getTitle($title,'error:'), ['message' => $e->getMessage(), 'trace' => $e->getTrace(), 'params' => $params]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static function SuccLog($title, $params = []): void
|
static function SuccLog($title, $params = []): void
|
||||||
{
|
{
|
||||||
Log::error(self::getTitle($title,'error:'), $params);
|
Log::error(self::getTitle($title,'success:'), $params);
|
||||||
}
|
}
|
||||||
|
|
||||||
static function getTitle($title,$prefix=''): string
|
static function getTitle($title,$prefix=''): string
|
||||||
|
|||||||
@ -1,10 +1,17 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Tools;
|
namespace App\Tools;
|
||||||
|
use Godruoyi\Snowflake\Snowflake;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
|
|
||||||
class Tools
|
class Tools
|
||||||
{
|
{
|
||||||
|
//雪花算法生成唯一ID
|
||||||
|
public static function genSnowflakeId($prefix = ''): string
|
||||||
|
{
|
||||||
|
$oSnowflake = new Snowflake();
|
||||||
|
return $prefix.$oSnowflake->id();
|
||||||
|
}
|
||||||
|
|
||||||
//生成随机数
|
//生成随机数
|
||||||
public static function generateRandStr($length = 8)
|
public static function generateRandStr($length = 8)
|
||||||
|
|||||||
@ -9,12 +9,13 @@
|
|||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^8.1",
|
"php": "^8.1",
|
||||||
|
"ext-bcmath": "*",
|
||||||
"easyswoole/spl": "^2.1",
|
"easyswoole/spl": "^2.1",
|
||||||
|
"godruoyi/php-snowflake": "^3.0",
|
||||||
"guzzlehttp/guzzle": "^7.8",
|
"guzzlehttp/guzzle": "^7.8",
|
||||||
"laravel/framework": "^10.10",
|
"laravel/framework": "^10.10",
|
||||||
"laravel/sanctum": "^3.3",
|
"laravel/sanctum": "^3.3",
|
||||||
"laravel/tinker": "^2.8",
|
"laravel/tinker": "^2.8"
|
||||||
"ext-bcmath": "*"
|
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"fakerphp/faker": "^1.9.1",
|
"fakerphp/faker": "^1.9.1",
|
||||||
|
|||||||
68
composer.lock
generated
68
composer.lock
generated
@ -4,7 +4,7 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "779c2c416d83ff65448d583b525c3691",
|
"content-hash": "8d1357294fac8e18aa387c5c5f295c8e",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "brick/math",
|
"name": "brick/math",
|
||||||
@ -627,6 +627,69 @@
|
|||||||
],
|
],
|
||||||
"time": "2023-10-12T05:21:21+00:00"
|
"time": "2023-10-12T05:21:21+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "godruoyi/php-snowflake",
|
||||||
|
"version": "3.0.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/godruoyi/php-snowflake.git",
|
||||||
|
"reference": "bf77419d3ac657ee4e4375d5436ba0c8a7ac8c65"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/godruoyi/php-snowflake/zipball/bf77419d3ac657ee4e4375d5436ba0c8a7ac8c65",
|
||||||
|
"reference": "bf77419d3ac657ee4e4375d5436ba0c8a7ac8c65",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php-64bit": ">=8.1"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"laravel/pint": "^1.10",
|
||||||
|
"phpstan/phpstan": "^1.10",
|
||||||
|
"phpunit/phpunit": "^10"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Godruoyi\\Snowflake\\": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Godruoyi",
|
||||||
|
"email": "g@godruoyi.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "An ID Generator for PHP based on Snowflake Algorithm (Twitter announced).",
|
||||||
|
"homepage": "https://github.com/godruoyi/php-snowflake",
|
||||||
|
"keywords": [
|
||||||
|
"Unique ID",
|
||||||
|
"laravel snowflake",
|
||||||
|
"order id",
|
||||||
|
"php snowflake",
|
||||||
|
"php sonyflake",
|
||||||
|
"php unique id",
|
||||||
|
"snowflake algorithm",
|
||||||
|
"sonyflake",
|
||||||
|
"unique order id"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/godruoyi/php-snowflake/issues",
|
||||||
|
"source": "https://github.com/godruoyi/php-snowflake/tree/3.0.0"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://images.godruoyi.com/wechat.png",
|
||||||
|
"type": "custom"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2023-08-28T12:37:25+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "graham-campbell/result-type",
|
"name": "graham-campbell/result-type",
|
||||||
"version": "v1.1.2",
|
"version": "v1.1.2",
|
||||||
@ -8208,7 +8271,8 @@
|
|||||||
"prefer-stable": true,
|
"prefer-stable": true,
|
||||||
"prefer-lowest": false,
|
"prefer-lowest": false,
|
||||||
"platform": {
|
"platform": {
|
||||||
"php": "^8.1"
|
"php": "^8.1",
|
||||||
|
"ext-bcmath": "*"
|
||||||
},
|
},
|
||||||
"platform-dev": [],
|
"platform-dev": [],
|
||||||
"plugin-api-version": "2.6.0"
|
"plugin-api-version": "2.6.0"
|
||||||
|
|||||||
Reference in New Issue
Block a user